From b08924f59e4e1ac57c09c27c5ca4e705473581c4 Mon Sep 17 00:00:00 2001 From: Future Outlier Date: Sat, 30 Sep 2023 22:33:32 +0800 Subject: [PATCH 01/48] sync plugin idl Signed-off-by: Future Outlier --- .../flyte/golang_support_tools/tools.go | 2 +- .../flyte/golang_test_targets/go-gen.sh | 2 +- .../go/admin/mocks/AsyncAgentServiceClient.go | 48 + .../go/admin/mocks/AsyncAgentServiceServer.go | 41 + .../gen/pb-cpp/flyteidl/admin/agent.pb.cc | 792 +++++++- flyteidl/gen/pb-cpp/flyteidl/admin/agent.pb.h | 403 ++++- .../pb-cpp/flyteidl/service/agent.grpc.pb.cc | 42 + .../pb-cpp/flyteidl/service/agent.grpc.pb.h | 172 +- .../gen/pb-cpp/flyteidl/service/agent.pb.cc | 12 +- flyteidl/gen/pb-go/flyteidl/admin/agent.pb.go | 188 +- .../pb-go/flyteidl/admin/agent.pb.validate.go | 160 ++ .../pb-go/flyteidl/admin/launch_plan.pb.go | 4 +- .../gen/pb-go/flyteidl/admin/signal.pb.go | 2 +- .../gen/pb-go/flyteidl/admin/workflow.pb.go | 2 +- .../flyteidl/datacatalog/datacatalog.pb.go | 2 +- .../pb-go/flyteidl/service/admin.swagger.json | 4 +- .../gen/pb-go/flyteidl/service/agent.pb.go | 69 +- .../pb-go/flyteidl/service/agent.swagger.json | 8 + .../pb-go/flyteidl/service/dataproxy.pb.go | 2 +- .../flyteidl/service/dataproxy.swagger.json | 2 +- .../service/flyteadmin/api/swagger.yaml | 4 +- .../model_admin_launch_plan_spec.go | 4 +- .../gen/pb-go/flyteidl/service/openapi.go | 4 +- .../gen/pb-java/datacatalog/Datacatalog.java | 4 +- .../gen/pb-java/flyteidl/admin/Agent.java | 1600 ++++++++++++++++- .../flyteidl/admin/LaunchPlanOuterClass.java | 60 +- .../flyteidl/admin/SignalOuterClass.java | 4 +- .../flyteidl/admin/WorkflowOuterClass.java | 4 +- .../gen/pb-java/flyteidl/service/Agent.java | 10 +- .../pb-java/flyteidl/service/Dataproxy.java | 18 +- flyteidl/gen/pb-js/flyteidl.d.ts | 131 ++ flyteidl/gen/pb-js/flyteidl.js | 276 +++ .../gen/pb_python/flyteidl/admin/agent_pb2.py | 10 +- .../pb_python/flyteidl/admin/agent_pb2.pyi | 14 + .../pb_python/flyteidl/service/agent_pb2.py | 4 +- .../flyteidl/service/agent_pb2_grpc.py | 34 + .../models/admin_launch_plan_spec.py | 8 +- flyteidl/gen/pb_rust/datacatalog.rs | 2 +- flyteidl/gen/pb_rust/flyteidl.admin.rs | 27 +- flyteidl/gen/pb_rust/flyteidl.service.rs | 2 +- flyteidl/protos/flyteidl/admin/agent.proto | 15 + flyteidl/protos/flyteidl/service/agent.proto | 2 + .../pluginmachinery/internal/webapi/core.go | 32 +- 43 files changed, 4026 insertions(+), 200 deletions(-) diff --git a/flyteidl/boilerplate/flyte/golang_support_tools/tools.go b/flyteidl/boilerplate/flyte/golang_support_tools/tools.go index a78b61162a..43de03450c 100644 --- a/flyteidl/boilerplate/flyte/golang_support_tools/tools.go +++ b/flyteidl/boilerplate/flyte/golang_support_tools/tools.go @@ -6,7 +6,7 @@ package tools import ( _ "github.com/EngHabu/mockery/cmd/mockery" _ "github.com/alvaroloes/enumer" - _ "github.com/flyteorg/flyte/flytestdlib/cli/pflags" + _ "github.com/flyteorg/flytestdlib/cli/pflags" _ "github.com/golangci/golangci-lint/cmd/golangci-lint" _ "github.com/pseudomuto/protoc-gen-doc/cmd/protoc-gen-doc" ) diff --git a/flyteidl/boilerplate/flyte/golang_test_targets/go-gen.sh b/flyteidl/boilerplate/flyte/golang_test_targets/go-gen.sh index 5ac17fa40a..54bd6af61b 100755 --- a/flyteidl/boilerplate/flyte/golang_test_targets/go-gen.sh +++ b/flyteidl/boilerplate/flyte/golang_test_targets/go-gen.sh @@ -9,7 +9,7 @@ go generate ./... if [ -n "$DELTA_CHECK" ]; then DIRTY=$(git status --porcelain) if [ -n "$DIRTY" ]; then - echo "FAILED: Go code updated without committing generated code." + echo "FAILED: Go code updated without commiting generated code." echo "Ensure make generate has run and all changes are committed." DIFF=$(git diff) echo "diff detected: $DIFF" diff --git a/flyteidl/clients/go/admin/mocks/AsyncAgentServiceClient.go b/flyteidl/clients/go/admin/mocks/AsyncAgentServiceClient.go index 84a804843f..65eac34053 100644 --- a/flyteidl/clients/go/admin/mocks/AsyncAgentServiceClient.go +++ b/flyteidl/clients/go/admin/mocks/AsyncAgentServiceClient.go @@ -113,6 +113,54 @@ func (_m *AsyncAgentServiceClient) DeleteTask(ctx context.Context, in *admin.Del return r0, r1 } +type AsyncAgentServiceClient_DoTask struct { + *mock.Call +} + +func (_m AsyncAgentServiceClient_DoTask) Return(_a0 *admin.DoTaskResponse, _a1 error) *AsyncAgentServiceClient_DoTask { + return &AsyncAgentServiceClient_DoTask{Call: _m.Call.Return(_a0, _a1)} +} + +func (_m *AsyncAgentServiceClient) OnDoTask(ctx context.Context, in *admin.DoTaskRequest, opts ...grpc.CallOption) *AsyncAgentServiceClient_DoTask { + c_call := _m.On("DoTask", ctx, in, opts) + return &AsyncAgentServiceClient_DoTask{Call: c_call} +} + +func (_m *AsyncAgentServiceClient) OnDoTaskMatch(matchers ...interface{}) *AsyncAgentServiceClient_DoTask { + c_call := _m.On("DoTask", matchers...) + return &AsyncAgentServiceClient_DoTask{Call: c_call} +} + +// DoTask provides a mock function with given fields: ctx, in, opts +func (_m *AsyncAgentServiceClient) DoTask(ctx context.Context, in *admin.DoTaskRequest, opts ...grpc.CallOption) (*admin.DoTaskResponse, 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 *admin.DoTaskResponse + if rf, ok := ret.Get(0).(func(context.Context, *admin.DoTaskRequest, ...grpc.CallOption) *admin.DoTaskResponse); ok { + r0 = rf(ctx, in, opts...) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*admin.DoTaskResponse) + } + } + + var r1 error + if rf, ok := ret.Get(1).(func(context.Context, *admin.DoTaskRequest, ...grpc.CallOption) error); ok { + r1 = rf(ctx, in, opts...) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + type AsyncAgentServiceClient_GetTask struct { *mock.Call } diff --git a/flyteidl/clients/go/admin/mocks/AsyncAgentServiceServer.go b/flyteidl/clients/go/admin/mocks/AsyncAgentServiceServer.go index d24c63ea37..781a9cfdff 100644 --- a/flyteidl/clients/go/admin/mocks/AsyncAgentServiceServer.go +++ b/flyteidl/clients/go/admin/mocks/AsyncAgentServiceServer.go @@ -97,6 +97,47 @@ func (_m *AsyncAgentServiceServer) DeleteTask(_a0 context.Context, _a1 *admin.De return r0, r1 } +type AsyncAgentServiceServer_DoTask struct { + *mock.Call +} + +func (_m AsyncAgentServiceServer_DoTask) Return(_a0 *admin.DoTaskResponse, _a1 error) *AsyncAgentServiceServer_DoTask { + return &AsyncAgentServiceServer_DoTask{Call: _m.Call.Return(_a0, _a1)} +} + +func (_m *AsyncAgentServiceServer) OnDoTask(_a0 context.Context, _a1 *admin.DoTaskRequest) *AsyncAgentServiceServer_DoTask { + c_call := _m.On("DoTask", _a0, _a1) + return &AsyncAgentServiceServer_DoTask{Call: c_call} +} + +func (_m *AsyncAgentServiceServer) OnDoTaskMatch(matchers ...interface{}) *AsyncAgentServiceServer_DoTask { + c_call := _m.On("DoTask", matchers...) + return &AsyncAgentServiceServer_DoTask{Call: c_call} +} + +// DoTask provides a mock function with given fields: _a0, _a1 +func (_m *AsyncAgentServiceServer) DoTask(_a0 context.Context, _a1 *admin.DoTaskRequest) (*admin.DoTaskResponse, error) { + ret := _m.Called(_a0, _a1) + + var r0 *admin.DoTaskResponse + if rf, ok := ret.Get(0).(func(context.Context, *admin.DoTaskRequest) *admin.DoTaskResponse); ok { + r0 = rf(_a0, _a1) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*admin.DoTaskResponse) + } + } + + var r1 error + if rf, ok := ret.Get(1).(func(context.Context, *admin.DoTaskRequest) error); ok { + r1 = rf(_a0, _a1) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + type AsyncAgentServiceServer_GetTask struct { *mock.Call } diff --git a/flyteidl/gen/pb-cpp/flyteidl/admin/agent.pb.cc b/flyteidl/gen/pb-cpp/flyteidl/admin/agent.pb.cc index 3948427bc8..8e8886c212 100644 --- a/flyteidl/gen/pb-cpp/flyteidl/admin/agent.pb.cc +++ b/flyteidl/gen/pb-cpp/flyteidl/admin/agent.pb.cc @@ -70,6 +70,14 @@ class DeleteTaskResponseDefaultTypeInternal { public: ::google::protobuf::internal::ExplicitlyConstructed _instance; } _DeleteTaskResponse_default_instance_; +class DoTaskRequestDefaultTypeInternal { + public: + ::google::protobuf::internal::ExplicitlyConstructed _instance; +} _DoTaskRequest_default_instance_; +class DoTaskResponseDefaultTypeInternal { + public: + ::google::protobuf::internal::ExplicitlyConstructed _instance; +} _DoTaskResponse_default_instance_; } // namespace admin } // namespace flyteidl static void InitDefaultsTaskExecutionMetadata_LabelsEntry_DoNotUse_flyteidl_2fadmin_2fagent_2eproto() { @@ -232,6 +240,37 @@ static void InitDefaultsDeleteTaskResponse_flyteidl_2fadmin_2fagent_2eproto() { ::google::protobuf::internal::SCCInfo<0> scc_info_DeleteTaskResponse_flyteidl_2fadmin_2fagent_2eproto = {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 0, InitDefaultsDeleteTaskResponse_flyteidl_2fadmin_2fagent_2eproto}, {}}; +static void InitDefaultsDoTaskRequest_flyteidl_2fadmin_2fagent_2eproto() { + GOOGLE_PROTOBUF_VERIFY_VERSION; + + { + void* ptr = &::flyteidl::admin::_DoTaskRequest_default_instance_; + new (ptr) ::flyteidl::admin::DoTaskRequest(); + ::google::protobuf::internal::OnShutdownDestroyMessage(ptr); + } + ::flyteidl::admin::DoTaskRequest::InitAsDefaultInstance(); +} + +::google::protobuf::internal::SCCInfo<2> scc_info_DoTaskRequest_flyteidl_2fadmin_2fagent_2eproto = + {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 2, InitDefaultsDoTaskRequest_flyteidl_2fadmin_2fagent_2eproto}, { + &scc_info_Literal_flyteidl_2fcore_2fliterals_2eproto.base, + &scc_info_TaskTemplate_flyteidl_2fcore_2ftasks_2eproto.base,}}; + +static void InitDefaultsDoTaskResponse_flyteidl_2fadmin_2fagent_2eproto() { + GOOGLE_PROTOBUF_VERIFY_VERSION; + + { + void* ptr = &::flyteidl::admin::_DoTaskResponse_default_instance_; + new (ptr) ::flyteidl::admin::DoTaskResponse(); + ::google::protobuf::internal::OnShutdownDestroyMessage(ptr); + } + ::flyteidl::admin::DoTaskResponse::InitAsDefaultInstance(); +} + +::google::protobuf::internal::SCCInfo<1> scc_info_DoTaskResponse_flyteidl_2fadmin_2fagent_2eproto = + {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 1, InitDefaultsDoTaskResponse_flyteidl_2fadmin_2fagent_2eproto}, { + &scc_info_Resource_flyteidl_2fadmin_2fagent_2eproto.base,}}; + void InitDefaults_flyteidl_2fadmin_2fagent_2eproto() { ::google::protobuf::internal::InitSCC(&scc_info_TaskExecutionMetadata_LabelsEntry_DoNotUse_flyteidl_2fadmin_2fagent_2eproto.base); ::google::protobuf::internal::InitSCC(&scc_info_TaskExecutionMetadata_AnnotationsEntry_DoNotUse_flyteidl_2fadmin_2fagent_2eproto.base); @@ -244,9 +283,11 @@ void InitDefaults_flyteidl_2fadmin_2fagent_2eproto() { ::google::protobuf::internal::InitSCC(&scc_info_Resource_flyteidl_2fadmin_2fagent_2eproto.base); ::google::protobuf::internal::InitSCC(&scc_info_DeleteTaskRequest_flyteidl_2fadmin_2fagent_2eproto.base); ::google::protobuf::internal::InitSCC(&scc_info_DeleteTaskResponse_flyteidl_2fadmin_2fagent_2eproto.base); + ::google::protobuf::internal::InitSCC(&scc_info_DoTaskRequest_flyteidl_2fadmin_2fagent_2eproto.base); + ::google::protobuf::internal::InitSCC(&scc_info_DoTaskResponse_flyteidl_2fadmin_2fagent_2eproto.base); } -::google::protobuf::Metadata file_level_metadata_flyteidl_2fadmin_2fagent_2eproto[11]; +::google::protobuf::Metadata file_level_metadata_flyteidl_2fadmin_2fagent_2eproto[13]; const ::google::protobuf::EnumDescriptor* file_level_enum_descriptors_flyteidl_2fadmin_2fagent_2eproto[1]; constexpr ::google::protobuf::ServiceDescriptor const** file_level_service_descriptors_flyteidl_2fadmin_2fagent_2eproto = nullptr; @@ -336,6 +377,19 @@ const ::google::protobuf::uint32 TableStruct_flyteidl_2fadmin_2fagent_2eproto::o ~0u, // no _extensions_ ~0u, // no _oneof_case_ ~0u, // no _weak_field_map_ + ~0u, // no _has_bits_ + PROTOBUF_FIELD_OFFSET(::flyteidl::admin::DoTaskRequest, _internal_metadata_), + ~0u, // no _extensions_ + ~0u, // no _oneof_case_ + ~0u, // no _weak_field_map_ + PROTOBUF_FIELD_OFFSET(::flyteidl::admin::DoTaskRequest, inputs_), + PROTOBUF_FIELD_OFFSET(::flyteidl::admin::DoTaskRequest, template__), + ~0u, // no _has_bits_ + PROTOBUF_FIELD_OFFSET(::flyteidl::admin::DoTaskResponse, _internal_metadata_), + ~0u, // no _extensions_ + ~0u, // no _oneof_case_ + ~0u, // no _weak_field_map_ + PROTOBUF_FIELD_OFFSET(::flyteidl::admin::DoTaskResponse, resource_), }; static const ::google::protobuf::internal::MigrationSchema schemas[] PROTOBUF_SECTION_VARIABLE(protodesc_cold) = { { 0, 7, sizeof(::flyteidl::admin::TaskExecutionMetadata_LabelsEntry_DoNotUse)}, @@ -349,6 +403,8 @@ static const ::google::protobuf::internal::MigrationSchema schemas[] PROTOBUF_SE { 66, -1, sizeof(::flyteidl::admin::Resource)}, { 73, -1, sizeof(::flyteidl::admin::DeleteTaskRequest)}, { 80, -1, sizeof(::flyteidl::admin::DeleteTaskResponse)}, + { 85, -1, sizeof(::flyteidl::admin::DoTaskRequest)}, + { 92, -1, sizeof(::flyteidl::admin::DoTaskResponse)}, }; static ::google::protobuf::Message const * const file_default_instances[] = { @@ -363,12 +419,14 @@ static ::google::protobuf::Message const * const file_default_instances[] = { reinterpret_cast(&::flyteidl::admin::_Resource_default_instance_), reinterpret_cast(&::flyteidl::admin::_DeleteTaskRequest_default_instance_), reinterpret_cast(&::flyteidl::admin::_DeleteTaskResponse_default_instance_), + reinterpret_cast(&::flyteidl::admin::_DoTaskRequest_default_instance_), + reinterpret_cast(&::flyteidl::admin::_DoTaskResponse_default_instance_), }; ::google::protobuf::internal::AssignDescriptorsTable assign_descriptors_table_flyteidl_2fadmin_2fagent_2eproto = { {}, AddDescriptors_flyteidl_2fadmin_2fagent_2eproto, "flyteidl/admin/agent.proto", schemas, file_default_instances, TableStruct_flyteidl_2fadmin_2fagent_2eproto::offsets, - file_level_metadata_flyteidl_2fadmin_2fagent_2eproto, 11, file_level_enum_descriptors_flyteidl_2fadmin_2fagent_2eproto, file_level_service_descriptors_flyteidl_2fadmin_2fagent_2eproto, + file_level_metadata_flyteidl_2fadmin_2fagent_2eproto, 13, file_level_enum_descriptors_flyteidl_2fadmin_2fagent_2eproto, file_level_service_descriptors_flyteidl_2fadmin_2fagent_2eproto, }; const char descriptor_table_protodef_flyteidl_2fadmin_2fagent_2eproto[] = @@ -403,16 +461,20 @@ const char descriptor_table_protodef_flyteidl_2fadmin_2fagent_2eproto[] = "dmin.State\022*\n\007outputs\030\002 \001(\0132\031.flyteidl.c" "ore.LiteralMap\"=\n\021DeleteTaskRequest\022\021\n\tt" "ask_type\030\001 \001(\t\022\025\n\rresource_meta\030\002 \001(\014\"\024\n" - "\022DeleteTaskResponse*^\n\005State\022\025\n\021RETRYABL" - "E_FAILURE\020\000\022\025\n\021PERMANENT_FAILURE\020\001\022\013\n\007PE" - "NDING\020\002\022\013\n\007RUNNING\020\003\022\r\n\tSUCCEEDED\020\004B7Z5g" - "ithub.com/flyteorg/flyteidl/gen/pb-go/fl" - "yteidl/adminb\006proto3" + "\022DeleteTaskResponse\"i\n\rDoTaskRequest\022)\n\006" + "inputs\030\001 \001(\0132\031.flyteidl.core.LiteralMap\022" + "-\n\010template\030\002 \001(\0132\033.flyteidl.core.TaskTe" + "mplate\"<\n\016DoTaskResponse\022*\n\010resource\030\001 \001" + "(\0132\030.flyteidl.admin.Resource*^\n\005State\022\025\n" + "\021RETRYABLE_FAILURE\020\000\022\025\n\021PERMANENT_FAILUR" + "E\020\001\022\013\n\007PENDING\020\002\022\013\n\007RUNNING\020\003\022\r\n\tSUCCEED" + "ED\020\004B7Z5github.com/flyteorg/flyteidl/gen" + "/pb-go/flyteidl/adminb\006proto3" ; ::google::protobuf::internal::DescriptorTable descriptor_table_flyteidl_2fadmin_2fagent_2eproto = { false, InitDefaults_flyteidl_2fadmin_2fagent_2eproto, descriptor_table_protodef_flyteidl_2fadmin_2fagent_2eproto, - "flyteidl/admin/agent.proto", &assign_descriptors_table_flyteidl_2fadmin_2fagent_2eproto, 1420, + "flyteidl/admin/agent.proto", &assign_descriptors_table_flyteidl_2fadmin_2fagent_2eproto, 1589, }; void AddDescriptors_flyteidl_2fadmin_2fagent_2eproto() { @@ -3846,43 +3908,703 @@ ::google::protobuf::Metadata DeleteTaskResponse::GetMetadata() const { } -// @@protoc_insertion_point(namespace_scope) -} // namespace admin -} // namespace flyteidl -namespace google { -namespace protobuf { -template<> PROTOBUF_NOINLINE ::flyteidl::admin::TaskExecutionMetadata_LabelsEntry_DoNotUse* Arena::CreateMaybeMessage< ::flyteidl::admin::TaskExecutionMetadata_LabelsEntry_DoNotUse >(Arena* arena) { - return Arena::CreateInternal< ::flyteidl::admin::TaskExecutionMetadata_LabelsEntry_DoNotUse >(arena); +// =================================================================== + +void DoTaskRequest::InitAsDefaultInstance() { + ::flyteidl::admin::_DoTaskRequest_default_instance_._instance.get_mutable()->inputs_ = const_cast< ::flyteidl::core::LiteralMap*>( + ::flyteidl::core::LiteralMap::internal_default_instance()); + ::flyteidl::admin::_DoTaskRequest_default_instance_._instance.get_mutable()->template__ = const_cast< ::flyteidl::core::TaskTemplate*>( + ::flyteidl::core::TaskTemplate::internal_default_instance()); } -template<> PROTOBUF_NOINLINE ::flyteidl::admin::TaskExecutionMetadata_AnnotationsEntry_DoNotUse* Arena::CreateMaybeMessage< ::flyteidl::admin::TaskExecutionMetadata_AnnotationsEntry_DoNotUse >(Arena* arena) { - return Arena::CreateInternal< ::flyteidl::admin::TaskExecutionMetadata_AnnotationsEntry_DoNotUse >(arena); +class DoTaskRequest::HasBitSetters { + public: + static const ::flyteidl::core::LiteralMap& inputs(const DoTaskRequest* msg); + static const ::flyteidl::core::TaskTemplate& template_(const DoTaskRequest* msg); +}; + +const ::flyteidl::core::LiteralMap& +DoTaskRequest::HasBitSetters::inputs(const DoTaskRequest* msg) { + return *msg->inputs_; } -template<> PROTOBUF_NOINLINE ::flyteidl::admin::TaskExecutionMetadata_EnvironmentVariablesEntry_DoNotUse* Arena::CreateMaybeMessage< ::flyteidl::admin::TaskExecutionMetadata_EnvironmentVariablesEntry_DoNotUse >(Arena* arena) { - return Arena::CreateInternal< ::flyteidl::admin::TaskExecutionMetadata_EnvironmentVariablesEntry_DoNotUse >(arena); +const ::flyteidl::core::TaskTemplate& +DoTaskRequest::HasBitSetters::template_(const DoTaskRequest* msg) { + return *msg->template__; } -template<> PROTOBUF_NOINLINE ::flyteidl::admin::TaskExecutionMetadata* Arena::CreateMaybeMessage< ::flyteidl::admin::TaskExecutionMetadata >(Arena* arena) { - return Arena::CreateInternal< ::flyteidl::admin::TaskExecutionMetadata >(arena); +void DoTaskRequest::clear_inputs() { + if (GetArenaNoVirtual() == nullptr && inputs_ != nullptr) { + delete inputs_; + } + inputs_ = nullptr; } -template<> PROTOBUF_NOINLINE ::flyteidl::admin::CreateTaskRequest* Arena::CreateMaybeMessage< ::flyteidl::admin::CreateTaskRequest >(Arena* arena) { - return Arena::CreateInternal< ::flyteidl::admin::CreateTaskRequest >(arena); +void DoTaskRequest::clear_template_() { + if (GetArenaNoVirtual() == nullptr && template__ != nullptr) { + delete template__; + } + template__ = nullptr; } -template<> PROTOBUF_NOINLINE ::flyteidl::admin::CreateTaskResponse* Arena::CreateMaybeMessage< ::flyteidl::admin::CreateTaskResponse >(Arena* arena) { - return Arena::CreateInternal< ::flyteidl::admin::CreateTaskResponse >(arena); +#if !defined(_MSC_VER) || _MSC_VER >= 1900 +const int DoTaskRequest::kInputsFieldNumber; +const int DoTaskRequest::kTemplateFieldNumber; +#endif // !defined(_MSC_VER) || _MSC_VER >= 1900 + +DoTaskRequest::DoTaskRequest() + : ::google::protobuf::Message(), _internal_metadata_(nullptr) { + SharedCtor(); + // @@protoc_insertion_point(constructor:flyteidl.admin.DoTaskRequest) } -template<> PROTOBUF_NOINLINE ::flyteidl::admin::GetTaskRequest* Arena::CreateMaybeMessage< ::flyteidl::admin::GetTaskRequest >(Arena* arena) { - return Arena::CreateInternal< ::flyteidl::admin::GetTaskRequest >(arena); +DoTaskRequest::DoTaskRequest(const DoTaskRequest& from) + : ::google::protobuf::Message(), + _internal_metadata_(nullptr) { + _internal_metadata_.MergeFrom(from._internal_metadata_); + if (from.has_inputs()) { + inputs_ = new ::flyteidl::core::LiteralMap(*from.inputs_); + } else { + inputs_ = nullptr; + } + if (from.has_template_()) { + template__ = new ::flyteidl::core::TaskTemplate(*from.template__); + } else { + template__ = nullptr; + } + // @@protoc_insertion_point(copy_constructor:flyteidl.admin.DoTaskRequest) } -template<> PROTOBUF_NOINLINE ::flyteidl::admin::GetTaskResponse* Arena::CreateMaybeMessage< ::flyteidl::admin::GetTaskResponse >(Arena* arena) { - return Arena::CreateInternal< ::flyteidl::admin::GetTaskResponse >(arena); + +void DoTaskRequest::SharedCtor() { + ::google::protobuf::internal::InitSCC( + &scc_info_DoTaskRequest_flyteidl_2fadmin_2fagent_2eproto.base); + ::memset(&inputs_, 0, static_cast( + reinterpret_cast(&template__) - + reinterpret_cast(&inputs_)) + sizeof(template__)); } -template<> PROTOBUF_NOINLINE ::flyteidl::admin::Resource* Arena::CreateMaybeMessage< ::flyteidl::admin::Resource >(Arena* arena) { - return Arena::CreateInternal< ::flyteidl::admin::Resource >(arena); + +DoTaskRequest::~DoTaskRequest() { + // @@protoc_insertion_point(destructor:flyteidl.admin.DoTaskRequest) + SharedDtor(); } -template<> PROTOBUF_NOINLINE ::flyteidl::admin::DeleteTaskRequest* Arena::CreateMaybeMessage< ::flyteidl::admin::DeleteTaskRequest >(Arena* arena) { - return Arena::CreateInternal< ::flyteidl::admin::DeleteTaskRequest >(arena); + +void DoTaskRequest::SharedDtor() { + if (this != internal_default_instance()) delete inputs_; + if (this != internal_default_instance()) delete template__; } -template<> PROTOBUF_NOINLINE ::flyteidl::admin::DeleteTaskResponse* Arena::CreateMaybeMessage< ::flyteidl::admin::DeleteTaskResponse >(Arena* arena) { - return Arena::CreateInternal< ::flyteidl::admin::DeleteTaskResponse >(arena); + +void DoTaskRequest::SetCachedSize(int size) const { + _cached_size_.Set(size); +} +const DoTaskRequest& DoTaskRequest::default_instance() { + ::google::protobuf::internal::InitSCC(&::scc_info_DoTaskRequest_flyteidl_2fadmin_2fagent_2eproto.base); + return *internal_default_instance(); +} + + +void DoTaskRequest::Clear() { +// @@protoc_insertion_point(message_clear_start:flyteidl.admin.DoTaskRequest) + ::google::protobuf::uint32 cached_has_bits = 0; + // Prevent compiler warnings about cached_has_bits being unused + (void) cached_has_bits; + + if (GetArenaNoVirtual() == nullptr && inputs_ != nullptr) { + delete inputs_; + } + inputs_ = nullptr; + if (GetArenaNoVirtual() == nullptr && template__ != nullptr) { + delete template__; + } + template__ = nullptr; + _internal_metadata_.Clear(); +} + +#if GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER +const char* DoTaskRequest::_InternalParse(const char* begin, const char* end, void* object, + ::google::protobuf::internal::ParseContext* ctx) { + auto msg = static_cast(object); + ::google::protobuf::int32 size; (void)size; + int depth; (void)depth; + ::google::protobuf::uint32 tag; + ::google::protobuf::internal::ParseFunc parser_till_end; (void)parser_till_end; + auto ptr = begin; + while (ptr < end) { + ptr = ::google::protobuf::io::Parse32(ptr, &tag); + GOOGLE_PROTOBUF_PARSER_ASSERT(ptr); + switch (tag >> 3) { + // .flyteidl.core.LiteralMap inputs = 1; + case 1: { + if (static_cast<::google::protobuf::uint8>(tag) != 10) goto handle_unusual; + ptr = ::google::protobuf::io::ReadSize(ptr, &size); + GOOGLE_PROTOBUF_PARSER_ASSERT(ptr); + parser_till_end = ::flyteidl::core::LiteralMap::_InternalParse; + object = msg->mutable_inputs(); + if (size > end - ptr) goto len_delim_till_end; + ptr += size; + GOOGLE_PROTOBUF_PARSER_ASSERT(ctx->ParseExactRange( + {parser_till_end, object}, ptr - size, ptr)); + break; + } + // .flyteidl.core.TaskTemplate template = 2; + case 2: { + if (static_cast<::google::protobuf::uint8>(tag) != 18) goto handle_unusual; + ptr = ::google::protobuf::io::ReadSize(ptr, &size); + GOOGLE_PROTOBUF_PARSER_ASSERT(ptr); + parser_till_end = ::flyteidl::core::TaskTemplate::_InternalParse; + object = msg->mutable_template_(); + if (size > end - ptr) goto len_delim_till_end; + ptr += size; + GOOGLE_PROTOBUF_PARSER_ASSERT(ctx->ParseExactRange( + {parser_till_end, object}, ptr - size, ptr)); + break; + } + default: { + handle_unusual: + if ((tag & 7) == 4 || tag == 0) { + ctx->EndGroup(tag); + return ptr; + } + auto res = UnknownFieldParse(tag, {_InternalParse, msg}, + ptr, end, msg->_internal_metadata_.mutable_unknown_fields(), ctx); + ptr = res.first; + GOOGLE_PROTOBUF_PARSER_ASSERT(ptr != nullptr); + if (res.second) return ptr; + } + } // switch + } // while + return ptr; +len_delim_till_end: + return ctx->StoreAndTailCall(ptr, end, {_InternalParse, msg}, + {parser_till_end, object}, size); +} +#else // GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER +bool DoTaskRequest::MergePartialFromCodedStream( + ::google::protobuf::io::CodedInputStream* input) { +#define DO_(EXPRESSION) if (!PROTOBUF_PREDICT_TRUE(EXPRESSION)) goto failure + ::google::protobuf::uint32 tag; + // @@protoc_insertion_point(parse_start:flyteidl.admin.DoTaskRequest) + for (;;) { + ::std::pair<::google::protobuf::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u); + tag = p.first; + if (!p.second) goto handle_unusual; + switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) { + // .flyteidl.core.LiteralMap inputs = 1; + case 1: { + if (static_cast< ::google::protobuf::uint8>(tag) == (10 & 0xFF)) { + DO_(::google::protobuf::internal::WireFormatLite::ReadMessage( + input, mutable_inputs())); + } else { + goto handle_unusual; + } + break; + } + + // .flyteidl.core.TaskTemplate template = 2; + case 2: { + if (static_cast< ::google::protobuf::uint8>(tag) == (18 & 0xFF)) { + DO_(::google::protobuf::internal::WireFormatLite::ReadMessage( + input, mutable_template_())); + } else { + goto handle_unusual; + } + break; + } + + default: { + handle_unusual: + if (tag == 0) { + goto success; + } + DO_(::google::protobuf::internal::WireFormat::SkipField( + input, tag, _internal_metadata_.mutable_unknown_fields())); + break; + } + } + } +success: + // @@protoc_insertion_point(parse_success:flyteidl.admin.DoTaskRequest) + return true; +failure: + // @@protoc_insertion_point(parse_failure:flyteidl.admin.DoTaskRequest) + return false; +#undef DO_ +} +#endif // GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER + +void DoTaskRequest::SerializeWithCachedSizes( + ::google::protobuf::io::CodedOutputStream* output) const { + // @@protoc_insertion_point(serialize_start:flyteidl.admin.DoTaskRequest) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + + // .flyteidl.core.LiteralMap inputs = 1; + if (this->has_inputs()) { + ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray( + 1, HasBitSetters::inputs(this), output); + } + + // .flyteidl.core.TaskTemplate template = 2; + if (this->has_template_()) { + ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray( + 2, HasBitSetters::template_(this), output); + } + + if (_internal_metadata_.have_unknown_fields()) { + ::google::protobuf::internal::WireFormat::SerializeUnknownFields( + _internal_metadata_.unknown_fields(), output); + } + // @@protoc_insertion_point(serialize_end:flyteidl.admin.DoTaskRequest) +} + +::google::protobuf::uint8* DoTaskRequest::InternalSerializeWithCachedSizesToArray( + ::google::protobuf::uint8* target) const { + // @@protoc_insertion_point(serialize_to_array_start:flyteidl.admin.DoTaskRequest) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + + // .flyteidl.core.LiteralMap inputs = 1; + if (this->has_inputs()) { + target = ::google::protobuf::internal::WireFormatLite:: + InternalWriteMessageToArray( + 1, HasBitSetters::inputs(this), target); + } + + // .flyteidl.core.TaskTemplate template = 2; + if (this->has_template_()) { + target = ::google::protobuf::internal::WireFormatLite:: + InternalWriteMessageToArray( + 2, HasBitSetters::template_(this), target); + } + + if (_internal_metadata_.have_unknown_fields()) { + target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray( + _internal_metadata_.unknown_fields(), target); + } + // @@protoc_insertion_point(serialize_to_array_end:flyteidl.admin.DoTaskRequest) + return target; +} + +size_t DoTaskRequest::ByteSizeLong() const { +// @@protoc_insertion_point(message_byte_size_start:flyteidl.admin.DoTaskRequest) + size_t total_size = 0; + + if (_internal_metadata_.have_unknown_fields()) { + total_size += + ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize( + _internal_metadata_.unknown_fields()); + } + ::google::protobuf::uint32 cached_has_bits = 0; + // Prevent compiler warnings about cached_has_bits being unused + (void) cached_has_bits; + + // .flyteidl.core.LiteralMap inputs = 1; + if (this->has_inputs()) { + total_size += 1 + + ::google::protobuf::internal::WireFormatLite::MessageSize( + *inputs_); + } + + // .flyteidl.core.TaskTemplate template = 2; + if (this->has_template_()) { + total_size += 1 + + ::google::protobuf::internal::WireFormatLite::MessageSize( + *template__); + } + + int cached_size = ::google::protobuf::internal::ToCachedSize(total_size); + SetCachedSize(cached_size); + return total_size; +} + +void DoTaskRequest::MergeFrom(const ::google::protobuf::Message& from) { +// @@protoc_insertion_point(generalized_merge_from_start:flyteidl.admin.DoTaskRequest) + GOOGLE_DCHECK_NE(&from, this); + const DoTaskRequest* source = + ::google::protobuf::DynamicCastToGenerated( + &from); + if (source == nullptr) { + // @@protoc_insertion_point(generalized_merge_from_cast_fail:flyteidl.admin.DoTaskRequest) + ::google::protobuf::internal::ReflectionOps::Merge(from, this); + } else { + // @@protoc_insertion_point(generalized_merge_from_cast_success:flyteidl.admin.DoTaskRequest) + MergeFrom(*source); + } +} + +void DoTaskRequest::MergeFrom(const DoTaskRequest& from) { +// @@protoc_insertion_point(class_specific_merge_from_start:flyteidl.admin.DoTaskRequest) + GOOGLE_DCHECK_NE(&from, this); + _internal_metadata_.MergeFrom(from._internal_metadata_); + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + + if (from.has_inputs()) { + mutable_inputs()->::flyteidl::core::LiteralMap::MergeFrom(from.inputs()); + } + if (from.has_template_()) { + mutable_template_()->::flyteidl::core::TaskTemplate::MergeFrom(from.template_()); + } +} + +void DoTaskRequest::CopyFrom(const ::google::protobuf::Message& from) { +// @@protoc_insertion_point(generalized_copy_from_start:flyteidl.admin.DoTaskRequest) + if (&from == this) return; + Clear(); + MergeFrom(from); +} + +void DoTaskRequest::CopyFrom(const DoTaskRequest& from) { +// @@protoc_insertion_point(class_specific_copy_from_start:flyteidl.admin.DoTaskRequest) + if (&from == this) return; + Clear(); + MergeFrom(from); +} + +bool DoTaskRequest::IsInitialized() const { + return true; +} + +void DoTaskRequest::Swap(DoTaskRequest* other) { + if (other == this) return; + InternalSwap(other); +} +void DoTaskRequest::InternalSwap(DoTaskRequest* other) { + using std::swap; + _internal_metadata_.Swap(&other->_internal_metadata_); + swap(inputs_, other->inputs_); + swap(template__, other->template__); +} + +::google::protobuf::Metadata DoTaskRequest::GetMetadata() const { + ::google::protobuf::internal::AssignDescriptors(&::assign_descriptors_table_flyteidl_2fadmin_2fagent_2eproto); + return ::file_level_metadata_flyteidl_2fadmin_2fagent_2eproto[kIndexInFileMessages]; +} + + +// =================================================================== + +void DoTaskResponse::InitAsDefaultInstance() { + ::flyteidl::admin::_DoTaskResponse_default_instance_._instance.get_mutable()->resource_ = const_cast< ::flyteidl::admin::Resource*>( + ::flyteidl::admin::Resource::internal_default_instance()); +} +class DoTaskResponse::HasBitSetters { + public: + static const ::flyteidl::admin::Resource& resource(const DoTaskResponse* msg); +}; + +const ::flyteidl::admin::Resource& +DoTaskResponse::HasBitSetters::resource(const DoTaskResponse* msg) { + return *msg->resource_; +} +#if !defined(_MSC_VER) || _MSC_VER >= 1900 +const int DoTaskResponse::kResourceFieldNumber; +#endif // !defined(_MSC_VER) || _MSC_VER >= 1900 + +DoTaskResponse::DoTaskResponse() + : ::google::protobuf::Message(), _internal_metadata_(nullptr) { + SharedCtor(); + // @@protoc_insertion_point(constructor:flyteidl.admin.DoTaskResponse) +} +DoTaskResponse::DoTaskResponse(const DoTaskResponse& from) + : ::google::protobuf::Message(), + _internal_metadata_(nullptr) { + _internal_metadata_.MergeFrom(from._internal_metadata_); + if (from.has_resource()) { + resource_ = new ::flyteidl::admin::Resource(*from.resource_); + } else { + resource_ = nullptr; + } + // @@protoc_insertion_point(copy_constructor:flyteidl.admin.DoTaskResponse) +} + +void DoTaskResponse::SharedCtor() { + ::google::protobuf::internal::InitSCC( + &scc_info_DoTaskResponse_flyteidl_2fadmin_2fagent_2eproto.base); + resource_ = nullptr; +} + +DoTaskResponse::~DoTaskResponse() { + // @@protoc_insertion_point(destructor:flyteidl.admin.DoTaskResponse) + SharedDtor(); +} + +void DoTaskResponse::SharedDtor() { + if (this != internal_default_instance()) delete resource_; +} + +void DoTaskResponse::SetCachedSize(int size) const { + _cached_size_.Set(size); +} +const DoTaskResponse& DoTaskResponse::default_instance() { + ::google::protobuf::internal::InitSCC(&::scc_info_DoTaskResponse_flyteidl_2fadmin_2fagent_2eproto.base); + return *internal_default_instance(); +} + + +void DoTaskResponse::Clear() { +// @@protoc_insertion_point(message_clear_start:flyteidl.admin.DoTaskResponse) + ::google::protobuf::uint32 cached_has_bits = 0; + // Prevent compiler warnings about cached_has_bits being unused + (void) cached_has_bits; + + if (GetArenaNoVirtual() == nullptr && resource_ != nullptr) { + delete resource_; + } + resource_ = nullptr; + _internal_metadata_.Clear(); +} + +#if GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER +const char* DoTaskResponse::_InternalParse(const char* begin, const char* end, void* object, + ::google::protobuf::internal::ParseContext* ctx) { + auto msg = static_cast(object); + ::google::protobuf::int32 size; (void)size; + int depth; (void)depth; + ::google::protobuf::uint32 tag; + ::google::protobuf::internal::ParseFunc parser_till_end; (void)parser_till_end; + auto ptr = begin; + while (ptr < end) { + ptr = ::google::protobuf::io::Parse32(ptr, &tag); + GOOGLE_PROTOBUF_PARSER_ASSERT(ptr); + switch (tag >> 3) { + // .flyteidl.admin.Resource resource = 1; + case 1: { + if (static_cast<::google::protobuf::uint8>(tag) != 10) goto handle_unusual; + ptr = ::google::protobuf::io::ReadSize(ptr, &size); + GOOGLE_PROTOBUF_PARSER_ASSERT(ptr); + parser_till_end = ::flyteidl::admin::Resource::_InternalParse; + object = msg->mutable_resource(); + if (size > end - ptr) goto len_delim_till_end; + ptr += size; + GOOGLE_PROTOBUF_PARSER_ASSERT(ctx->ParseExactRange( + {parser_till_end, object}, ptr - size, ptr)); + break; + } + default: { + handle_unusual: + if ((tag & 7) == 4 || tag == 0) { + ctx->EndGroup(tag); + return ptr; + } + auto res = UnknownFieldParse(tag, {_InternalParse, msg}, + ptr, end, msg->_internal_metadata_.mutable_unknown_fields(), ctx); + ptr = res.first; + GOOGLE_PROTOBUF_PARSER_ASSERT(ptr != nullptr); + if (res.second) return ptr; + } + } // switch + } // while + return ptr; +len_delim_till_end: + return ctx->StoreAndTailCall(ptr, end, {_InternalParse, msg}, + {parser_till_end, object}, size); +} +#else // GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER +bool DoTaskResponse::MergePartialFromCodedStream( + ::google::protobuf::io::CodedInputStream* input) { +#define DO_(EXPRESSION) if (!PROTOBUF_PREDICT_TRUE(EXPRESSION)) goto failure + ::google::protobuf::uint32 tag; + // @@protoc_insertion_point(parse_start:flyteidl.admin.DoTaskResponse) + for (;;) { + ::std::pair<::google::protobuf::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u); + tag = p.first; + if (!p.second) goto handle_unusual; + switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) { + // .flyteidl.admin.Resource resource = 1; + case 1: { + if (static_cast< ::google::protobuf::uint8>(tag) == (10 & 0xFF)) { + DO_(::google::protobuf::internal::WireFormatLite::ReadMessage( + input, mutable_resource())); + } else { + goto handle_unusual; + } + break; + } + + default: { + handle_unusual: + if (tag == 0) { + goto success; + } + DO_(::google::protobuf::internal::WireFormat::SkipField( + input, tag, _internal_metadata_.mutable_unknown_fields())); + break; + } + } + } +success: + // @@protoc_insertion_point(parse_success:flyteidl.admin.DoTaskResponse) + return true; +failure: + // @@protoc_insertion_point(parse_failure:flyteidl.admin.DoTaskResponse) + return false; +#undef DO_ +} +#endif // GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER + +void DoTaskResponse::SerializeWithCachedSizes( + ::google::protobuf::io::CodedOutputStream* output) const { + // @@protoc_insertion_point(serialize_start:flyteidl.admin.DoTaskResponse) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + + // .flyteidl.admin.Resource resource = 1; + if (this->has_resource()) { + ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray( + 1, HasBitSetters::resource(this), output); + } + + if (_internal_metadata_.have_unknown_fields()) { + ::google::protobuf::internal::WireFormat::SerializeUnknownFields( + _internal_metadata_.unknown_fields(), output); + } + // @@protoc_insertion_point(serialize_end:flyteidl.admin.DoTaskResponse) +} + +::google::protobuf::uint8* DoTaskResponse::InternalSerializeWithCachedSizesToArray( + ::google::protobuf::uint8* target) const { + // @@protoc_insertion_point(serialize_to_array_start:flyteidl.admin.DoTaskResponse) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + + // .flyteidl.admin.Resource resource = 1; + if (this->has_resource()) { + target = ::google::protobuf::internal::WireFormatLite:: + InternalWriteMessageToArray( + 1, HasBitSetters::resource(this), target); + } + + if (_internal_metadata_.have_unknown_fields()) { + target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray( + _internal_metadata_.unknown_fields(), target); + } + // @@protoc_insertion_point(serialize_to_array_end:flyteidl.admin.DoTaskResponse) + return target; +} + +size_t DoTaskResponse::ByteSizeLong() const { +// @@protoc_insertion_point(message_byte_size_start:flyteidl.admin.DoTaskResponse) + size_t total_size = 0; + + if (_internal_metadata_.have_unknown_fields()) { + total_size += + ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize( + _internal_metadata_.unknown_fields()); + } + ::google::protobuf::uint32 cached_has_bits = 0; + // Prevent compiler warnings about cached_has_bits being unused + (void) cached_has_bits; + + // .flyteidl.admin.Resource resource = 1; + if (this->has_resource()) { + total_size += 1 + + ::google::protobuf::internal::WireFormatLite::MessageSize( + *resource_); + } + + int cached_size = ::google::protobuf::internal::ToCachedSize(total_size); + SetCachedSize(cached_size); + return total_size; +} + +void DoTaskResponse::MergeFrom(const ::google::protobuf::Message& from) { +// @@protoc_insertion_point(generalized_merge_from_start:flyteidl.admin.DoTaskResponse) + GOOGLE_DCHECK_NE(&from, this); + const DoTaskResponse* source = + ::google::protobuf::DynamicCastToGenerated( + &from); + if (source == nullptr) { + // @@protoc_insertion_point(generalized_merge_from_cast_fail:flyteidl.admin.DoTaskResponse) + ::google::protobuf::internal::ReflectionOps::Merge(from, this); + } else { + // @@protoc_insertion_point(generalized_merge_from_cast_success:flyteidl.admin.DoTaskResponse) + MergeFrom(*source); + } +} + +void DoTaskResponse::MergeFrom(const DoTaskResponse& from) { +// @@protoc_insertion_point(class_specific_merge_from_start:flyteidl.admin.DoTaskResponse) + GOOGLE_DCHECK_NE(&from, this); + _internal_metadata_.MergeFrom(from._internal_metadata_); + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + + if (from.has_resource()) { + mutable_resource()->::flyteidl::admin::Resource::MergeFrom(from.resource()); + } +} + +void DoTaskResponse::CopyFrom(const ::google::protobuf::Message& from) { +// @@protoc_insertion_point(generalized_copy_from_start:flyteidl.admin.DoTaskResponse) + if (&from == this) return; + Clear(); + MergeFrom(from); +} + +void DoTaskResponse::CopyFrom(const DoTaskResponse& from) { +// @@protoc_insertion_point(class_specific_copy_from_start:flyteidl.admin.DoTaskResponse) + if (&from == this) return; + Clear(); + MergeFrom(from); +} + +bool DoTaskResponse::IsInitialized() const { + return true; +} + +void DoTaskResponse::Swap(DoTaskResponse* other) { + if (other == this) return; + InternalSwap(other); +} +void DoTaskResponse::InternalSwap(DoTaskResponse* other) { + using std::swap; + _internal_metadata_.Swap(&other->_internal_metadata_); + swap(resource_, other->resource_); +} + +::google::protobuf::Metadata DoTaskResponse::GetMetadata() const { + ::google::protobuf::internal::AssignDescriptors(&::assign_descriptors_table_flyteidl_2fadmin_2fagent_2eproto); + return ::file_level_metadata_flyteidl_2fadmin_2fagent_2eproto[kIndexInFileMessages]; +} + + +// @@protoc_insertion_point(namespace_scope) +} // namespace admin +} // namespace flyteidl +namespace google { +namespace protobuf { +template<> PROTOBUF_NOINLINE ::flyteidl::admin::TaskExecutionMetadata_LabelsEntry_DoNotUse* Arena::CreateMaybeMessage< ::flyteidl::admin::TaskExecutionMetadata_LabelsEntry_DoNotUse >(Arena* arena) { + return Arena::CreateInternal< ::flyteidl::admin::TaskExecutionMetadata_LabelsEntry_DoNotUse >(arena); +} +template<> PROTOBUF_NOINLINE ::flyteidl::admin::TaskExecutionMetadata_AnnotationsEntry_DoNotUse* Arena::CreateMaybeMessage< ::flyteidl::admin::TaskExecutionMetadata_AnnotationsEntry_DoNotUse >(Arena* arena) { + return Arena::CreateInternal< ::flyteidl::admin::TaskExecutionMetadata_AnnotationsEntry_DoNotUse >(arena); +} +template<> PROTOBUF_NOINLINE ::flyteidl::admin::TaskExecutionMetadata_EnvironmentVariablesEntry_DoNotUse* Arena::CreateMaybeMessage< ::flyteidl::admin::TaskExecutionMetadata_EnvironmentVariablesEntry_DoNotUse >(Arena* arena) { + return Arena::CreateInternal< ::flyteidl::admin::TaskExecutionMetadata_EnvironmentVariablesEntry_DoNotUse >(arena); +} +template<> PROTOBUF_NOINLINE ::flyteidl::admin::TaskExecutionMetadata* Arena::CreateMaybeMessage< ::flyteidl::admin::TaskExecutionMetadata >(Arena* arena) { + return Arena::CreateInternal< ::flyteidl::admin::TaskExecutionMetadata >(arena); +} +template<> PROTOBUF_NOINLINE ::flyteidl::admin::CreateTaskRequest* Arena::CreateMaybeMessage< ::flyteidl::admin::CreateTaskRequest >(Arena* arena) { + return Arena::CreateInternal< ::flyteidl::admin::CreateTaskRequest >(arena); +} +template<> PROTOBUF_NOINLINE ::flyteidl::admin::CreateTaskResponse* Arena::CreateMaybeMessage< ::flyteidl::admin::CreateTaskResponse >(Arena* arena) { + return Arena::CreateInternal< ::flyteidl::admin::CreateTaskResponse >(arena); +} +template<> PROTOBUF_NOINLINE ::flyteidl::admin::GetTaskRequest* Arena::CreateMaybeMessage< ::flyteidl::admin::GetTaskRequest >(Arena* arena) { + return Arena::CreateInternal< ::flyteidl::admin::GetTaskRequest >(arena); +} +template<> PROTOBUF_NOINLINE ::flyteidl::admin::GetTaskResponse* Arena::CreateMaybeMessage< ::flyteidl::admin::GetTaskResponse >(Arena* arena) { + return Arena::CreateInternal< ::flyteidl::admin::GetTaskResponse >(arena); +} +template<> PROTOBUF_NOINLINE ::flyteidl::admin::Resource* Arena::CreateMaybeMessage< ::flyteidl::admin::Resource >(Arena* arena) { + return Arena::CreateInternal< ::flyteidl::admin::Resource >(arena); +} +template<> PROTOBUF_NOINLINE ::flyteidl::admin::DeleteTaskRequest* Arena::CreateMaybeMessage< ::flyteidl::admin::DeleteTaskRequest >(Arena* arena) { + return Arena::CreateInternal< ::flyteidl::admin::DeleteTaskRequest >(arena); +} +template<> PROTOBUF_NOINLINE ::flyteidl::admin::DeleteTaskResponse* Arena::CreateMaybeMessage< ::flyteidl::admin::DeleteTaskResponse >(Arena* arena) { + return Arena::CreateInternal< ::flyteidl::admin::DeleteTaskResponse >(arena); +} +template<> PROTOBUF_NOINLINE ::flyteidl::admin::DoTaskRequest* Arena::CreateMaybeMessage< ::flyteidl::admin::DoTaskRequest >(Arena* arena) { + return Arena::CreateInternal< ::flyteidl::admin::DoTaskRequest >(arena); +} +template<> PROTOBUF_NOINLINE ::flyteidl::admin::DoTaskResponse* Arena::CreateMaybeMessage< ::flyteidl::admin::DoTaskResponse >(Arena* arena) { + return Arena::CreateInternal< ::flyteidl::admin::DoTaskResponse >(arena); } } // namespace protobuf } // namespace google diff --git a/flyteidl/gen/pb-cpp/flyteidl/admin/agent.pb.h b/flyteidl/gen/pb-cpp/flyteidl/admin/agent.pb.h index 5ee08079fc..7a8e06525c 100644 --- a/flyteidl/gen/pb-cpp/flyteidl/admin/agent.pb.h +++ b/flyteidl/gen/pb-cpp/flyteidl/admin/agent.pb.h @@ -49,7 +49,7 @@ struct TableStruct_flyteidl_2fadmin_2fagent_2eproto { PROTOBUF_SECTION_VARIABLE(protodesc_cold); static const ::google::protobuf::internal::AuxillaryParseTableField aux[] PROTOBUF_SECTION_VARIABLE(protodesc_cold); - static const ::google::protobuf::internal::ParseTable schema[11] + static const ::google::protobuf::internal::ParseTable schema[13] PROTOBUF_SECTION_VARIABLE(protodesc_cold); static const ::google::protobuf::internal::FieldMetadata field_metadata[]; static const ::google::protobuf::internal::SerializationTable serialization_table[]; @@ -70,6 +70,12 @@ extern DeleteTaskRequestDefaultTypeInternal _DeleteTaskRequest_default_instance_ class DeleteTaskResponse; class DeleteTaskResponseDefaultTypeInternal; extern DeleteTaskResponseDefaultTypeInternal _DeleteTaskResponse_default_instance_; +class DoTaskRequest; +class DoTaskRequestDefaultTypeInternal; +extern DoTaskRequestDefaultTypeInternal _DoTaskRequest_default_instance_; +class DoTaskResponse; +class DoTaskResponseDefaultTypeInternal; +extern DoTaskResponseDefaultTypeInternal _DoTaskResponse_default_instance_; class GetTaskRequest; class GetTaskRequestDefaultTypeInternal; extern GetTaskRequestDefaultTypeInternal _GetTaskRequest_default_instance_; @@ -99,6 +105,8 @@ template<> ::flyteidl::admin::CreateTaskRequest* Arena::CreateMaybeMessage<::fly template<> ::flyteidl::admin::CreateTaskResponse* Arena::CreateMaybeMessage<::flyteidl::admin::CreateTaskResponse>(Arena*); template<> ::flyteidl::admin::DeleteTaskRequest* Arena::CreateMaybeMessage<::flyteidl::admin::DeleteTaskRequest>(Arena*); template<> ::flyteidl::admin::DeleteTaskResponse* Arena::CreateMaybeMessage<::flyteidl::admin::DeleteTaskResponse>(Arena*); +template<> ::flyteidl::admin::DoTaskRequest* Arena::CreateMaybeMessage<::flyteidl::admin::DoTaskRequest>(Arena*); +template<> ::flyteidl::admin::DoTaskResponse* Arena::CreateMaybeMessage<::flyteidl::admin::DoTaskResponse>(Arena*); template<> ::flyteidl::admin::GetTaskRequest* Arena::CreateMaybeMessage<::flyteidl::admin::GetTaskRequest>(Arena*); template<> ::flyteidl::admin::GetTaskResponse* Arena::CreateMaybeMessage<::flyteidl::admin::GetTaskResponse>(Arena*); template<> ::flyteidl::admin::Resource* Arena::CreateMaybeMessage<::flyteidl::admin::Resource>(Arena*); @@ -1280,6 +1288,246 @@ class DeleteTaskResponse final : mutable ::google::protobuf::internal::CachedSize _cached_size_; friend struct ::TableStruct_flyteidl_2fadmin_2fagent_2eproto; }; +// ------------------------------------------------------------------- + +class DoTaskRequest final : + public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:flyteidl.admin.DoTaskRequest) */ { + public: + DoTaskRequest(); + virtual ~DoTaskRequest(); + + DoTaskRequest(const DoTaskRequest& from); + + inline DoTaskRequest& operator=(const DoTaskRequest& from) { + CopyFrom(from); + return *this; + } + #if LANG_CXX11 + DoTaskRequest(DoTaskRequest&& from) noexcept + : DoTaskRequest() { + *this = ::std::move(from); + } + + inline DoTaskRequest& operator=(DoTaskRequest&& from) noexcept { + if (GetArenaNoVirtual() == from.GetArenaNoVirtual()) { + if (this != &from) InternalSwap(&from); + } else { + CopyFrom(from); + } + return *this; + } + #endif + static const ::google::protobuf::Descriptor* descriptor() { + return default_instance().GetDescriptor(); + } + static const DoTaskRequest& default_instance(); + + static void InitAsDefaultInstance(); // FOR INTERNAL USE ONLY + static inline const DoTaskRequest* internal_default_instance() { + return reinterpret_cast( + &_DoTaskRequest_default_instance_); + } + static constexpr int kIndexInFileMessages = + 11; + + void Swap(DoTaskRequest* other); + friend void swap(DoTaskRequest& a, DoTaskRequest& b) { + a.Swap(&b); + } + + // implements Message ---------------------------------------------- + + inline DoTaskRequest* New() const final { + return CreateMaybeMessage(nullptr); + } + + DoTaskRequest* New(::google::protobuf::Arena* arena) const final { + return CreateMaybeMessage(arena); + } + void CopyFrom(const ::google::protobuf::Message& from) final; + void MergeFrom(const ::google::protobuf::Message& from) final; + void CopyFrom(const DoTaskRequest& from); + void MergeFrom(const DoTaskRequest& from); + PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final; + bool IsInitialized() const final; + + size_t ByteSizeLong() const final; + #if GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER + static const char* _InternalParse(const char* begin, const char* end, void* object, ::google::protobuf::internal::ParseContext* ctx); + ::google::protobuf::internal::ParseFunc _ParseFunc() const final { return _InternalParse; } + #else + bool MergePartialFromCodedStream( + ::google::protobuf::io::CodedInputStream* input) final; + #endif // GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER + void SerializeWithCachedSizes( + ::google::protobuf::io::CodedOutputStream* output) const final; + ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray( + ::google::protobuf::uint8* target) const final; + int GetCachedSize() const final { return _cached_size_.Get(); } + + private: + void SharedCtor(); + void SharedDtor(); + void SetCachedSize(int size) const final; + void InternalSwap(DoTaskRequest* other); + private: + inline ::google::protobuf::Arena* GetArenaNoVirtual() const { + return nullptr; + } + inline void* MaybeArenaPtr() const { + return nullptr; + } + public: + + ::google::protobuf::Metadata GetMetadata() const final; + + // nested types ---------------------------------------------------- + + // accessors ------------------------------------------------------- + + // .flyteidl.core.LiteralMap inputs = 1; + bool has_inputs() const; + void clear_inputs(); + static const int kInputsFieldNumber = 1; + const ::flyteidl::core::LiteralMap& inputs() const; + ::flyteidl::core::LiteralMap* release_inputs(); + ::flyteidl::core::LiteralMap* mutable_inputs(); + void set_allocated_inputs(::flyteidl::core::LiteralMap* inputs); + + // .flyteidl.core.TaskTemplate template = 2; + bool has_template_() const; + void clear_template_(); + static const int kTemplateFieldNumber = 2; + const ::flyteidl::core::TaskTemplate& template_() const; + ::flyteidl::core::TaskTemplate* release_template_(); + ::flyteidl::core::TaskTemplate* mutable_template_(); + void set_allocated_template_(::flyteidl::core::TaskTemplate* template_); + + // @@protoc_insertion_point(class_scope:flyteidl.admin.DoTaskRequest) + private: + class HasBitSetters; + + ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_; + ::flyteidl::core::LiteralMap* inputs_; + ::flyteidl::core::TaskTemplate* template__; + mutable ::google::protobuf::internal::CachedSize _cached_size_; + friend struct ::TableStruct_flyteidl_2fadmin_2fagent_2eproto; +}; +// ------------------------------------------------------------------- + +class DoTaskResponse final : + public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:flyteidl.admin.DoTaskResponse) */ { + public: + DoTaskResponse(); + virtual ~DoTaskResponse(); + + DoTaskResponse(const DoTaskResponse& from); + + inline DoTaskResponse& operator=(const DoTaskResponse& from) { + CopyFrom(from); + return *this; + } + #if LANG_CXX11 + DoTaskResponse(DoTaskResponse&& from) noexcept + : DoTaskResponse() { + *this = ::std::move(from); + } + + inline DoTaskResponse& operator=(DoTaskResponse&& from) noexcept { + if (GetArenaNoVirtual() == from.GetArenaNoVirtual()) { + if (this != &from) InternalSwap(&from); + } else { + CopyFrom(from); + } + return *this; + } + #endif + static const ::google::protobuf::Descriptor* descriptor() { + return default_instance().GetDescriptor(); + } + static const DoTaskResponse& default_instance(); + + static void InitAsDefaultInstance(); // FOR INTERNAL USE ONLY + static inline const DoTaskResponse* internal_default_instance() { + return reinterpret_cast( + &_DoTaskResponse_default_instance_); + } + static constexpr int kIndexInFileMessages = + 12; + + void Swap(DoTaskResponse* other); + friend void swap(DoTaskResponse& a, DoTaskResponse& b) { + a.Swap(&b); + } + + // implements Message ---------------------------------------------- + + inline DoTaskResponse* New() const final { + return CreateMaybeMessage(nullptr); + } + + DoTaskResponse* New(::google::protobuf::Arena* arena) const final { + return CreateMaybeMessage(arena); + } + void CopyFrom(const ::google::protobuf::Message& from) final; + void MergeFrom(const ::google::protobuf::Message& from) final; + void CopyFrom(const DoTaskResponse& from); + void MergeFrom(const DoTaskResponse& from); + PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final; + bool IsInitialized() const final; + + size_t ByteSizeLong() const final; + #if GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER + static const char* _InternalParse(const char* begin, const char* end, void* object, ::google::protobuf::internal::ParseContext* ctx); + ::google::protobuf::internal::ParseFunc _ParseFunc() const final { return _InternalParse; } + #else + bool MergePartialFromCodedStream( + ::google::protobuf::io::CodedInputStream* input) final; + #endif // GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER + void SerializeWithCachedSizes( + ::google::protobuf::io::CodedOutputStream* output) const final; + ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray( + ::google::protobuf::uint8* target) const final; + int GetCachedSize() const final { return _cached_size_.Get(); } + + private: + void SharedCtor(); + void SharedDtor(); + void SetCachedSize(int size) const final; + void InternalSwap(DoTaskResponse* other); + private: + inline ::google::protobuf::Arena* GetArenaNoVirtual() const { + return nullptr; + } + inline void* MaybeArenaPtr() const { + return nullptr; + } + public: + + ::google::protobuf::Metadata GetMetadata() const final; + + // nested types ---------------------------------------------------- + + // accessors ------------------------------------------------------- + + // .flyteidl.admin.Resource resource = 1; + bool has_resource() const; + void clear_resource(); + static const int kResourceFieldNumber = 1; + const ::flyteidl::admin::Resource& resource() const; + ::flyteidl::admin::Resource* release_resource(); + ::flyteidl::admin::Resource* mutable_resource(); + void set_allocated_resource(::flyteidl::admin::Resource* resource); + + // @@protoc_insertion_point(class_scope:flyteidl.admin.DoTaskResponse) + private: + class HasBitSetters; + + ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_; + ::flyteidl::admin::Resource* resource_; + mutable ::google::protobuf::internal::CachedSize _cached_size_; + friend struct ::TableStruct_flyteidl_2fadmin_2fagent_2eproto; +}; // =================================================================== @@ -2099,6 +2347,155 @@ inline void DeleteTaskRequest::set_allocated_resource_meta(::std::string* resour // DeleteTaskResponse +// ------------------------------------------------------------------- + +// DoTaskRequest + +// .flyteidl.core.LiteralMap inputs = 1; +inline bool DoTaskRequest::has_inputs() const { + return this != internal_default_instance() && inputs_ != nullptr; +} +inline const ::flyteidl::core::LiteralMap& DoTaskRequest::inputs() const { + const ::flyteidl::core::LiteralMap* p = inputs_; + // @@protoc_insertion_point(field_get:flyteidl.admin.DoTaskRequest.inputs) + return p != nullptr ? *p : *reinterpret_cast( + &::flyteidl::core::_LiteralMap_default_instance_); +} +inline ::flyteidl::core::LiteralMap* DoTaskRequest::release_inputs() { + // @@protoc_insertion_point(field_release:flyteidl.admin.DoTaskRequest.inputs) + + ::flyteidl::core::LiteralMap* temp = inputs_; + inputs_ = nullptr; + return temp; +} +inline ::flyteidl::core::LiteralMap* DoTaskRequest::mutable_inputs() { + + if (inputs_ == nullptr) { + auto* p = CreateMaybeMessage<::flyteidl::core::LiteralMap>(GetArenaNoVirtual()); + inputs_ = p; + } + // @@protoc_insertion_point(field_mutable:flyteidl.admin.DoTaskRequest.inputs) + return inputs_; +} +inline void DoTaskRequest::set_allocated_inputs(::flyteidl::core::LiteralMap* inputs) { + ::google::protobuf::Arena* message_arena = GetArenaNoVirtual(); + if (message_arena == nullptr) { + delete reinterpret_cast< ::google::protobuf::MessageLite*>(inputs_); + } + if (inputs) { + ::google::protobuf::Arena* submessage_arena = nullptr; + if (message_arena != submessage_arena) { + inputs = ::google::protobuf::internal::GetOwnedMessage( + message_arena, inputs, submessage_arena); + } + + } else { + + } + inputs_ = inputs; + // @@protoc_insertion_point(field_set_allocated:flyteidl.admin.DoTaskRequest.inputs) +} + +// .flyteidl.core.TaskTemplate template = 2; +inline bool DoTaskRequest::has_template_() const { + return this != internal_default_instance() && template__ != nullptr; +} +inline const ::flyteidl::core::TaskTemplate& DoTaskRequest::template_() const { + const ::flyteidl::core::TaskTemplate* p = template__; + // @@protoc_insertion_point(field_get:flyteidl.admin.DoTaskRequest.template) + return p != nullptr ? *p : *reinterpret_cast( + &::flyteidl::core::_TaskTemplate_default_instance_); +} +inline ::flyteidl::core::TaskTemplate* DoTaskRequest::release_template_() { + // @@protoc_insertion_point(field_release:flyteidl.admin.DoTaskRequest.template) + + ::flyteidl::core::TaskTemplate* temp = template__; + template__ = nullptr; + return temp; +} +inline ::flyteidl::core::TaskTemplate* DoTaskRequest::mutable_template_() { + + if (template__ == nullptr) { + auto* p = CreateMaybeMessage<::flyteidl::core::TaskTemplate>(GetArenaNoVirtual()); + template__ = p; + } + // @@protoc_insertion_point(field_mutable:flyteidl.admin.DoTaskRequest.template) + return template__; +} +inline void DoTaskRequest::set_allocated_template_(::flyteidl::core::TaskTemplate* template_) { + ::google::protobuf::Arena* message_arena = GetArenaNoVirtual(); + if (message_arena == nullptr) { + delete reinterpret_cast< ::google::protobuf::MessageLite*>(template__); + } + if (template_) { + ::google::protobuf::Arena* submessage_arena = nullptr; + if (message_arena != submessage_arena) { + template_ = ::google::protobuf::internal::GetOwnedMessage( + message_arena, template_, submessage_arena); + } + + } else { + + } + template__ = template_; + // @@protoc_insertion_point(field_set_allocated:flyteidl.admin.DoTaskRequest.template) +} + +// ------------------------------------------------------------------- + +// DoTaskResponse + +// .flyteidl.admin.Resource resource = 1; +inline bool DoTaskResponse::has_resource() const { + return this != internal_default_instance() && resource_ != nullptr; +} +inline void DoTaskResponse::clear_resource() { + if (GetArenaNoVirtual() == nullptr && resource_ != nullptr) { + delete resource_; + } + resource_ = nullptr; +} +inline const ::flyteidl::admin::Resource& DoTaskResponse::resource() const { + const ::flyteidl::admin::Resource* p = resource_; + // @@protoc_insertion_point(field_get:flyteidl.admin.DoTaskResponse.resource) + return p != nullptr ? *p : *reinterpret_cast( + &::flyteidl::admin::_Resource_default_instance_); +} +inline ::flyteidl::admin::Resource* DoTaskResponse::release_resource() { + // @@protoc_insertion_point(field_release:flyteidl.admin.DoTaskResponse.resource) + + ::flyteidl::admin::Resource* temp = resource_; + resource_ = nullptr; + return temp; +} +inline ::flyteidl::admin::Resource* DoTaskResponse::mutable_resource() { + + if (resource_ == nullptr) { + auto* p = CreateMaybeMessage<::flyteidl::admin::Resource>(GetArenaNoVirtual()); + resource_ = p; + } + // @@protoc_insertion_point(field_mutable:flyteidl.admin.DoTaskResponse.resource) + return resource_; +} +inline void DoTaskResponse::set_allocated_resource(::flyteidl::admin::Resource* resource) { + ::google::protobuf::Arena* message_arena = GetArenaNoVirtual(); + if (message_arena == nullptr) { + delete resource_; + } + if (resource) { + ::google::protobuf::Arena* submessage_arena = nullptr; + if (message_arena != submessage_arena) { + resource = ::google::protobuf::internal::GetOwnedMessage( + message_arena, resource, submessage_arena); + } + + } else { + + } + resource_ = resource; + // @@protoc_insertion_point(field_set_allocated:flyteidl.admin.DoTaskResponse.resource) +} + #ifdef __GNUC__ #pragma GCC diagnostic pop #endif // __GNUC__ @@ -2122,6 +2519,10 @@ inline void DeleteTaskRequest::set_allocated_resource_meta(::std::string* resour // ------------------------------------------------------------------- +// ------------------------------------------------------------------- + +// ------------------------------------------------------------------- + // @@protoc_insertion_point(namespace_scope) diff --git a/flyteidl/gen/pb-cpp/flyteidl/service/agent.grpc.pb.cc b/flyteidl/gen/pb-cpp/flyteidl/service/agent.grpc.pb.cc index d3505f4ce8..ee7d66e1dd 100644 --- a/flyteidl/gen/pb-cpp/flyteidl/service/agent.grpc.pb.cc +++ b/flyteidl/gen/pb-cpp/flyteidl/service/agent.grpc.pb.cc @@ -23,6 +23,7 @@ static const char* AsyncAgentService_method_names[] = { "/flyteidl.service.AsyncAgentService/CreateTask", "/flyteidl.service.AsyncAgentService/GetTask", "/flyteidl.service.AsyncAgentService/DeleteTask", + "/flyteidl.service.AsyncAgentService/DoTask", }; std::unique_ptr< AsyncAgentService::Stub> AsyncAgentService::NewStub(const std::shared_ptr< ::grpc::ChannelInterface>& channel, const ::grpc::StubOptions& options) { @@ -35,6 +36,7 @@ AsyncAgentService::Stub::Stub(const std::shared_ptr< ::grpc::ChannelInterface>& : channel_(channel), rpcmethod_CreateTask_(AsyncAgentService_method_names[0], ::grpc::internal::RpcMethod::NORMAL_RPC, channel) , rpcmethod_GetTask_(AsyncAgentService_method_names[1], ::grpc::internal::RpcMethod::NORMAL_RPC, channel) , rpcmethod_DeleteTask_(AsyncAgentService_method_names[2], ::grpc::internal::RpcMethod::NORMAL_RPC, channel) + , rpcmethod_DoTask_(AsyncAgentService_method_names[3], ::grpc::internal::RpcMethod::NORMAL_RPC, channel) {} ::grpc::Status AsyncAgentService::Stub::CreateTask(::grpc::ClientContext* context, const ::flyteidl::admin::CreateTaskRequest& request, ::flyteidl::admin::CreateTaskResponse* response) { @@ -121,6 +123,34 @@ ::grpc::ClientAsyncResponseReader< ::flyteidl::admin::DeleteTaskResponse>* Async return ::grpc::internal::ClientAsyncResponseReaderFactory< ::flyteidl::admin::DeleteTaskResponse>::Create(channel_.get(), cq, rpcmethod_DeleteTask_, context, request, false); } +::grpc::Status AsyncAgentService::Stub::DoTask(::grpc::ClientContext* context, const ::flyteidl::admin::DoTaskRequest& request, ::flyteidl::admin::DoTaskResponse* response) { + return ::grpc::internal::BlockingUnaryCall(channel_.get(), rpcmethod_DoTask_, context, request, response); +} + +void AsyncAgentService::Stub::experimental_async::DoTask(::grpc::ClientContext* context, const ::flyteidl::admin::DoTaskRequest* request, ::flyteidl::admin::DoTaskResponse* response, std::function f) { + ::grpc::internal::CallbackUnaryCall(stub_->channel_.get(), stub_->rpcmethod_DoTask_, context, request, response, std::move(f)); +} + +void AsyncAgentService::Stub::experimental_async::DoTask(::grpc::ClientContext* context, const ::grpc::ByteBuffer* request, ::flyteidl::admin::DoTaskResponse* response, std::function f) { + ::grpc::internal::CallbackUnaryCall(stub_->channel_.get(), stub_->rpcmethod_DoTask_, context, request, response, std::move(f)); +} + +void AsyncAgentService::Stub::experimental_async::DoTask(::grpc::ClientContext* context, const ::flyteidl::admin::DoTaskRequest* request, ::flyteidl::admin::DoTaskResponse* response, ::grpc::experimental::ClientUnaryReactor* reactor) { + ::grpc::internal::ClientCallbackUnaryFactory::Create(stub_->channel_.get(), stub_->rpcmethod_DoTask_, context, request, response, reactor); +} + +void AsyncAgentService::Stub::experimental_async::DoTask(::grpc::ClientContext* context, const ::grpc::ByteBuffer* request, ::flyteidl::admin::DoTaskResponse* response, ::grpc::experimental::ClientUnaryReactor* reactor) { + ::grpc::internal::ClientCallbackUnaryFactory::Create(stub_->channel_.get(), stub_->rpcmethod_DoTask_, context, request, response, reactor); +} + +::grpc::ClientAsyncResponseReader< ::flyteidl::admin::DoTaskResponse>* AsyncAgentService::Stub::AsyncDoTaskRaw(::grpc::ClientContext* context, const ::flyteidl::admin::DoTaskRequest& request, ::grpc::CompletionQueue* cq) { + return ::grpc::internal::ClientAsyncResponseReaderFactory< ::flyteidl::admin::DoTaskResponse>::Create(channel_.get(), cq, rpcmethod_DoTask_, context, request, true); +} + +::grpc::ClientAsyncResponseReader< ::flyteidl::admin::DoTaskResponse>* AsyncAgentService::Stub::PrepareAsyncDoTaskRaw(::grpc::ClientContext* context, const ::flyteidl::admin::DoTaskRequest& request, ::grpc::CompletionQueue* cq) { + return ::grpc::internal::ClientAsyncResponseReaderFactory< ::flyteidl::admin::DoTaskResponse>::Create(channel_.get(), cq, rpcmethod_DoTask_, context, request, false); +} + AsyncAgentService::Service::Service() { AddMethod(new ::grpc::internal::RpcServiceMethod( AsyncAgentService_method_names[0], @@ -137,6 +167,11 @@ AsyncAgentService::Service::Service() { ::grpc::internal::RpcMethod::NORMAL_RPC, new ::grpc::internal::RpcMethodHandler< AsyncAgentService::Service, ::flyteidl::admin::DeleteTaskRequest, ::flyteidl::admin::DeleteTaskResponse>( std::mem_fn(&AsyncAgentService::Service::DeleteTask), this))); + AddMethod(new ::grpc::internal::RpcServiceMethod( + AsyncAgentService_method_names[3], + ::grpc::internal::RpcMethod::NORMAL_RPC, + new ::grpc::internal::RpcMethodHandler< AsyncAgentService::Service, ::flyteidl::admin::DoTaskRequest, ::flyteidl::admin::DoTaskResponse>( + std::mem_fn(&AsyncAgentService::Service::DoTask), this))); } AsyncAgentService::Service::~Service() { @@ -163,6 +198,13 @@ ::grpc::Status AsyncAgentService::Service::DeleteTask(::grpc::ServerContext* con return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, ""); } +::grpc::Status AsyncAgentService::Service::DoTask(::grpc::ServerContext* context, const ::flyteidl::admin::DoTaskRequest* request, ::flyteidl::admin::DoTaskResponse* response) { + (void) context; + (void) request; + (void) response; + return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, ""); +} + } // namespace flyteidl } // namespace service diff --git a/flyteidl/gen/pb-cpp/flyteidl/service/agent.grpc.pb.h b/flyteidl/gen/pb-cpp/flyteidl/service/agent.grpc.pb.h index 16b36b249a..5dba840b9d 100644 --- a/flyteidl/gen/pb-cpp/flyteidl/service/agent.grpc.pb.h +++ b/flyteidl/gen/pb-cpp/flyteidl/service/agent.grpc.pb.h @@ -73,6 +73,14 @@ class AsyncAgentService final { std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flyteidl::admin::DeleteTaskResponse>> PrepareAsyncDeleteTask(::grpc::ClientContext* context, const ::flyteidl::admin::DeleteTaskRequest& request, ::grpc::CompletionQueue* cq) { return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flyteidl::admin::DeleteTaskResponse>>(PrepareAsyncDeleteTaskRaw(context, request, cq)); } + // Do a job and get response from the agent server. + virtual ::grpc::Status DoTask(::grpc::ClientContext* context, const ::flyteidl::admin::DoTaskRequest& request, ::flyteidl::admin::DoTaskResponse* response) = 0; + std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flyteidl::admin::DoTaskResponse>> AsyncDoTask(::grpc::ClientContext* context, const ::flyteidl::admin::DoTaskRequest& request, ::grpc::CompletionQueue* cq) { + return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flyteidl::admin::DoTaskResponse>>(AsyncDoTaskRaw(context, request, cq)); + } + std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flyteidl::admin::DoTaskResponse>> PrepareAsyncDoTask(::grpc::ClientContext* context, const ::flyteidl::admin::DoTaskRequest& request, ::grpc::CompletionQueue* cq) { + return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flyteidl::admin::DoTaskResponse>>(PrepareAsyncDoTaskRaw(context, request, cq)); + } class experimental_async_interface { public: virtual ~experimental_async_interface() {} @@ -91,6 +99,11 @@ class AsyncAgentService final { virtual void DeleteTask(::grpc::ClientContext* context, const ::grpc::ByteBuffer* request, ::flyteidl::admin::DeleteTaskResponse* response, std::function) = 0; virtual void DeleteTask(::grpc::ClientContext* context, const ::flyteidl::admin::DeleteTaskRequest* request, ::flyteidl::admin::DeleteTaskResponse* response, ::grpc::experimental::ClientUnaryReactor* reactor) = 0; virtual void DeleteTask(::grpc::ClientContext* context, const ::grpc::ByteBuffer* request, ::flyteidl::admin::DeleteTaskResponse* response, ::grpc::experimental::ClientUnaryReactor* reactor) = 0; + // Do a job and get response from the agent server. + virtual void DoTask(::grpc::ClientContext* context, const ::flyteidl::admin::DoTaskRequest* request, ::flyteidl::admin::DoTaskResponse* response, std::function) = 0; + virtual void DoTask(::grpc::ClientContext* context, const ::grpc::ByteBuffer* request, ::flyteidl::admin::DoTaskResponse* response, std::function) = 0; + virtual void DoTask(::grpc::ClientContext* context, const ::flyteidl::admin::DoTaskRequest* request, ::flyteidl::admin::DoTaskResponse* response, ::grpc::experimental::ClientUnaryReactor* reactor) = 0; + virtual void DoTask(::grpc::ClientContext* context, const ::grpc::ByteBuffer* request, ::flyteidl::admin::DoTaskResponse* response, ::grpc::experimental::ClientUnaryReactor* reactor) = 0; }; virtual class experimental_async_interface* experimental_async() { return nullptr; } private: @@ -100,6 +113,8 @@ class AsyncAgentService final { virtual ::grpc::ClientAsyncResponseReaderInterface< ::flyteidl::admin::GetTaskResponse>* PrepareAsyncGetTaskRaw(::grpc::ClientContext* context, const ::flyteidl::admin::GetTaskRequest& request, ::grpc::CompletionQueue* cq) = 0; virtual ::grpc::ClientAsyncResponseReaderInterface< ::flyteidl::admin::DeleteTaskResponse>* AsyncDeleteTaskRaw(::grpc::ClientContext* context, const ::flyteidl::admin::DeleteTaskRequest& request, ::grpc::CompletionQueue* cq) = 0; virtual ::grpc::ClientAsyncResponseReaderInterface< ::flyteidl::admin::DeleteTaskResponse>* PrepareAsyncDeleteTaskRaw(::grpc::ClientContext* context, const ::flyteidl::admin::DeleteTaskRequest& request, ::grpc::CompletionQueue* cq) = 0; + virtual ::grpc::ClientAsyncResponseReaderInterface< ::flyteidl::admin::DoTaskResponse>* AsyncDoTaskRaw(::grpc::ClientContext* context, const ::flyteidl::admin::DoTaskRequest& request, ::grpc::CompletionQueue* cq) = 0; + virtual ::grpc::ClientAsyncResponseReaderInterface< ::flyteidl::admin::DoTaskResponse>* PrepareAsyncDoTaskRaw(::grpc::ClientContext* context, const ::flyteidl::admin::DoTaskRequest& request, ::grpc::CompletionQueue* cq) = 0; }; class Stub final : public StubInterface { public: @@ -125,6 +140,13 @@ class AsyncAgentService final { std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::flyteidl::admin::DeleteTaskResponse>> PrepareAsyncDeleteTask(::grpc::ClientContext* context, const ::flyteidl::admin::DeleteTaskRequest& request, ::grpc::CompletionQueue* cq) { return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::flyteidl::admin::DeleteTaskResponse>>(PrepareAsyncDeleteTaskRaw(context, request, cq)); } + ::grpc::Status DoTask(::grpc::ClientContext* context, const ::flyteidl::admin::DoTaskRequest& request, ::flyteidl::admin::DoTaskResponse* response) override; + std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::flyteidl::admin::DoTaskResponse>> AsyncDoTask(::grpc::ClientContext* context, const ::flyteidl::admin::DoTaskRequest& request, ::grpc::CompletionQueue* cq) { + return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::flyteidl::admin::DoTaskResponse>>(AsyncDoTaskRaw(context, request, cq)); + } + std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::flyteidl::admin::DoTaskResponse>> PrepareAsyncDoTask(::grpc::ClientContext* context, const ::flyteidl::admin::DoTaskRequest& request, ::grpc::CompletionQueue* cq) { + return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::flyteidl::admin::DoTaskResponse>>(PrepareAsyncDoTaskRaw(context, request, cq)); + } class experimental_async final : public StubInterface::experimental_async_interface { public: @@ -140,6 +162,10 @@ class AsyncAgentService final { void DeleteTask(::grpc::ClientContext* context, const ::grpc::ByteBuffer* request, ::flyteidl::admin::DeleteTaskResponse* response, std::function) override; void DeleteTask(::grpc::ClientContext* context, const ::flyteidl::admin::DeleteTaskRequest* request, ::flyteidl::admin::DeleteTaskResponse* response, ::grpc::experimental::ClientUnaryReactor* reactor) override; void DeleteTask(::grpc::ClientContext* context, const ::grpc::ByteBuffer* request, ::flyteidl::admin::DeleteTaskResponse* response, ::grpc::experimental::ClientUnaryReactor* reactor) override; + void DoTask(::grpc::ClientContext* context, const ::flyteidl::admin::DoTaskRequest* request, ::flyteidl::admin::DoTaskResponse* response, std::function) override; + void DoTask(::grpc::ClientContext* context, const ::grpc::ByteBuffer* request, ::flyteidl::admin::DoTaskResponse* response, std::function) override; + void DoTask(::grpc::ClientContext* context, const ::flyteidl::admin::DoTaskRequest* request, ::flyteidl::admin::DoTaskResponse* response, ::grpc::experimental::ClientUnaryReactor* reactor) override; + void DoTask(::grpc::ClientContext* context, const ::grpc::ByteBuffer* request, ::flyteidl::admin::DoTaskResponse* response, ::grpc::experimental::ClientUnaryReactor* reactor) override; private: friend class Stub; explicit experimental_async(Stub* stub): stub_(stub) { } @@ -157,9 +183,12 @@ class AsyncAgentService final { ::grpc::ClientAsyncResponseReader< ::flyteidl::admin::GetTaskResponse>* PrepareAsyncGetTaskRaw(::grpc::ClientContext* context, const ::flyteidl::admin::GetTaskRequest& request, ::grpc::CompletionQueue* cq) override; ::grpc::ClientAsyncResponseReader< ::flyteidl::admin::DeleteTaskResponse>* AsyncDeleteTaskRaw(::grpc::ClientContext* context, const ::flyteidl::admin::DeleteTaskRequest& request, ::grpc::CompletionQueue* cq) override; ::grpc::ClientAsyncResponseReader< ::flyteidl::admin::DeleteTaskResponse>* PrepareAsyncDeleteTaskRaw(::grpc::ClientContext* context, const ::flyteidl::admin::DeleteTaskRequest& request, ::grpc::CompletionQueue* cq) override; + ::grpc::ClientAsyncResponseReader< ::flyteidl::admin::DoTaskResponse>* AsyncDoTaskRaw(::grpc::ClientContext* context, const ::flyteidl::admin::DoTaskRequest& request, ::grpc::CompletionQueue* cq) override; + ::grpc::ClientAsyncResponseReader< ::flyteidl::admin::DoTaskResponse>* PrepareAsyncDoTaskRaw(::grpc::ClientContext* context, const ::flyteidl::admin::DoTaskRequest& request, ::grpc::CompletionQueue* cq) override; const ::grpc::internal::RpcMethod rpcmethod_CreateTask_; const ::grpc::internal::RpcMethod rpcmethod_GetTask_; const ::grpc::internal::RpcMethod rpcmethod_DeleteTask_; + const ::grpc::internal::RpcMethod rpcmethod_DoTask_; }; static std::unique_ptr NewStub(const std::shared_ptr< ::grpc::ChannelInterface>& channel, const ::grpc::StubOptions& options = ::grpc::StubOptions()); @@ -173,6 +202,8 @@ class AsyncAgentService final { virtual ::grpc::Status GetTask(::grpc::ServerContext* context, const ::flyteidl::admin::GetTaskRequest* request, ::flyteidl::admin::GetTaskResponse* response); // Delete the task resource. virtual ::grpc::Status DeleteTask(::grpc::ServerContext* context, const ::flyteidl::admin::DeleteTaskRequest* request, ::flyteidl::admin::DeleteTaskResponse* response); + // Do a job and get response from the agent server. + virtual ::grpc::Status DoTask(::grpc::ServerContext* context, const ::flyteidl::admin::DoTaskRequest* request, ::flyteidl::admin::DoTaskResponse* response); }; template class WithAsyncMethod_CreateTask : public BaseClass { @@ -234,7 +265,27 @@ class AsyncAgentService final { ::grpc::Service::RequestAsyncUnary(2, context, request, response, new_call_cq, notification_cq, tag); } }; - typedef WithAsyncMethod_CreateTask > > AsyncService; + template + class WithAsyncMethod_DoTask : public BaseClass { + private: + void BaseClassMustBeDerivedFromService(const Service *service) {} + public: + WithAsyncMethod_DoTask() { + ::grpc::Service::MarkMethodAsync(3); + } + ~WithAsyncMethod_DoTask() override { + BaseClassMustBeDerivedFromService(this); + } + // disable synchronous version of this method + ::grpc::Status DoTask(::grpc::ServerContext* context, const ::flyteidl::admin::DoTaskRequest* request, ::flyteidl::admin::DoTaskResponse* response) override { + abort(); + return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, ""); + } + void RequestDoTask(::grpc::ServerContext* context, ::flyteidl::admin::DoTaskRequest* request, ::grpc::ServerAsyncResponseWriter< ::flyteidl::admin::DoTaskResponse>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) { + ::grpc::Service::RequestAsyncUnary(3, context, request, response, new_call_cq, notification_cq, tag); + } + }; + typedef WithAsyncMethod_CreateTask > > > AsyncService; template class ExperimentalWithCallbackMethod_CreateTask : public BaseClass { private: @@ -328,7 +379,38 @@ class AsyncAgentService final { } virtual void DeleteTask(::grpc::ServerContext* context, const ::flyteidl::admin::DeleteTaskRequest* request, ::flyteidl::admin::DeleteTaskResponse* response, ::grpc::experimental::ServerCallbackRpcController* controller) { controller->Finish(::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "")); } }; - typedef ExperimentalWithCallbackMethod_CreateTask > > ExperimentalCallbackService; + template + class ExperimentalWithCallbackMethod_DoTask : public BaseClass { + private: + void BaseClassMustBeDerivedFromService(const Service *service) {} + public: + ExperimentalWithCallbackMethod_DoTask() { + ::grpc::Service::experimental().MarkMethodCallback(3, + new ::grpc::internal::CallbackUnaryHandler< ::flyteidl::admin::DoTaskRequest, ::flyteidl::admin::DoTaskResponse>( + [this](::grpc::ServerContext* context, + const ::flyteidl::admin::DoTaskRequest* request, + ::flyteidl::admin::DoTaskResponse* response, + ::grpc::experimental::ServerCallbackRpcController* controller) { + return this->DoTask(context, request, response, controller); + })); + } + void SetMessageAllocatorFor_DoTask( + ::grpc::experimental::MessageAllocator< ::flyteidl::admin::DoTaskRequest, ::flyteidl::admin::DoTaskResponse>* allocator) { + static_cast<::grpc::internal::CallbackUnaryHandler< ::flyteidl::admin::DoTaskRequest, ::flyteidl::admin::DoTaskResponse>*>( + ::grpc::Service::experimental().GetHandler(3)) + ->SetMessageAllocator(allocator); + } + ~ExperimentalWithCallbackMethod_DoTask() override { + BaseClassMustBeDerivedFromService(this); + } + // disable synchronous version of this method + ::grpc::Status DoTask(::grpc::ServerContext* context, const ::flyteidl::admin::DoTaskRequest* request, ::flyteidl::admin::DoTaskResponse* response) override { + abort(); + return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, ""); + } + virtual void DoTask(::grpc::ServerContext* context, const ::flyteidl::admin::DoTaskRequest* request, ::flyteidl::admin::DoTaskResponse* response, ::grpc::experimental::ServerCallbackRpcController* controller) { controller->Finish(::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "")); } + }; + typedef ExperimentalWithCallbackMethod_CreateTask > > > ExperimentalCallbackService; template class WithGenericMethod_CreateTask : public BaseClass { private: @@ -381,6 +463,23 @@ class AsyncAgentService final { } }; template + class WithGenericMethod_DoTask : public BaseClass { + private: + void BaseClassMustBeDerivedFromService(const Service *service) {} + public: + WithGenericMethod_DoTask() { + ::grpc::Service::MarkMethodGeneric(3); + } + ~WithGenericMethod_DoTask() override { + BaseClassMustBeDerivedFromService(this); + } + // disable synchronous version of this method + ::grpc::Status DoTask(::grpc::ServerContext* context, const ::flyteidl::admin::DoTaskRequest* request, ::flyteidl::admin::DoTaskResponse* response) override { + abort(); + return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, ""); + } + }; + template class WithRawMethod_CreateTask : public BaseClass { private: void BaseClassMustBeDerivedFromService(const Service *service) {} @@ -441,6 +540,26 @@ class AsyncAgentService final { } }; template + class WithRawMethod_DoTask : public BaseClass { + private: + void BaseClassMustBeDerivedFromService(const Service *service) {} + public: + WithRawMethod_DoTask() { + ::grpc::Service::MarkMethodRaw(3); + } + ~WithRawMethod_DoTask() override { + BaseClassMustBeDerivedFromService(this); + } + // disable synchronous version of this method + ::grpc::Status DoTask(::grpc::ServerContext* context, const ::flyteidl::admin::DoTaskRequest* request, ::flyteidl::admin::DoTaskResponse* response) override { + abort(); + return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, ""); + } + void RequestDoTask(::grpc::ServerContext* context, ::grpc::ByteBuffer* request, ::grpc::ServerAsyncResponseWriter< ::grpc::ByteBuffer>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) { + ::grpc::Service::RequestAsyncUnary(3, context, request, response, new_call_cq, notification_cq, tag); + } + }; + template class ExperimentalWithRawCallbackMethod_CreateTask : public BaseClass { private: void BaseClassMustBeDerivedFromService(const Service *service) {} @@ -516,6 +635,31 @@ class AsyncAgentService final { virtual void DeleteTask(::grpc::ServerContext* context, const ::grpc::ByteBuffer* request, ::grpc::ByteBuffer* response, ::grpc::experimental::ServerCallbackRpcController* controller) { controller->Finish(::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "")); } }; template + class ExperimentalWithRawCallbackMethod_DoTask : public BaseClass { + private: + void BaseClassMustBeDerivedFromService(const Service *service) {} + public: + ExperimentalWithRawCallbackMethod_DoTask() { + ::grpc::Service::experimental().MarkMethodRawCallback(3, + new ::grpc::internal::CallbackUnaryHandler< ::grpc::ByteBuffer, ::grpc::ByteBuffer>( + [this](::grpc::ServerContext* context, + const ::grpc::ByteBuffer* request, + ::grpc::ByteBuffer* response, + ::grpc::experimental::ServerCallbackRpcController* controller) { + this->DoTask(context, request, response, controller); + })); + } + ~ExperimentalWithRawCallbackMethod_DoTask() override { + BaseClassMustBeDerivedFromService(this); + } + // disable synchronous version of this method + ::grpc::Status DoTask(::grpc::ServerContext* context, const ::flyteidl::admin::DoTaskRequest* request, ::flyteidl::admin::DoTaskResponse* response) override { + abort(); + return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, ""); + } + virtual void DoTask(::grpc::ServerContext* context, const ::grpc::ByteBuffer* request, ::grpc::ByteBuffer* response, ::grpc::experimental::ServerCallbackRpcController* controller) { controller->Finish(::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "")); } + }; + template class WithStreamedUnaryMethod_CreateTask : public BaseClass { private: void BaseClassMustBeDerivedFromService(const Service *service) {} @@ -575,9 +719,29 @@ class AsyncAgentService final { // replace default version of method with streamed unary virtual ::grpc::Status StreamedDeleteTask(::grpc::ServerContext* context, ::grpc::ServerUnaryStreamer< ::flyteidl::admin::DeleteTaskRequest,::flyteidl::admin::DeleteTaskResponse>* server_unary_streamer) = 0; }; - typedef WithStreamedUnaryMethod_CreateTask > > StreamedUnaryService; + template + class WithStreamedUnaryMethod_DoTask : public BaseClass { + private: + void BaseClassMustBeDerivedFromService(const Service *service) {} + public: + WithStreamedUnaryMethod_DoTask() { + ::grpc::Service::MarkMethodStreamed(3, + new ::grpc::internal::StreamedUnaryHandler< ::flyteidl::admin::DoTaskRequest, ::flyteidl::admin::DoTaskResponse>(std::bind(&WithStreamedUnaryMethod_DoTask::StreamedDoTask, this, std::placeholders::_1, std::placeholders::_2))); + } + ~WithStreamedUnaryMethod_DoTask() override { + BaseClassMustBeDerivedFromService(this); + } + // disable regular version of this method + ::grpc::Status DoTask(::grpc::ServerContext* context, const ::flyteidl::admin::DoTaskRequest* request, ::flyteidl::admin::DoTaskResponse* response) override { + abort(); + return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, ""); + } + // replace default version of method with streamed unary + virtual ::grpc::Status StreamedDoTask(::grpc::ServerContext* context, ::grpc::ServerUnaryStreamer< ::flyteidl::admin::DoTaskRequest,::flyteidl::admin::DoTaskResponse>* server_unary_streamer) = 0; + }; + typedef WithStreamedUnaryMethod_CreateTask > > > StreamedUnaryService; typedef Service SplitStreamedService; - typedef WithStreamedUnaryMethod_CreateTask > > StreamedService; + typedef WithStreamedUnaryMethod_CreateTask > > > StreamedService; }; } // namespace service diff --git a/flyteidl/gen/pb-cpp/flyteidl/service/agent.pb.cc b/flyteidl/gen/pb-cpp/flyteidl/service/agent.pb.cc index e4b6c0ebb1..67d92b673b 100644 --- a/flyteidl/gen/pb-cpp/flyteidl/service/agent.pb.cc +++ b/flyteidl/gen/pb-cpp/flyteidl/service/agent.pb.cc @@ -38,21 +38,23 @@ ::google::protobuf::internal::AssignDescriptorsTable assign_descriptors_table_fl const char descriptor_table_protodef_flyteidl_2fservice_2fagent_2eproto[] = "\n\034flyteidl/service/agent.proto\022\020flyteidl" - ".service\032\032flyteidl/admin/agent.proto2\217\002\n" + ".service\032\032flyteidl/admin/agent.proto2\332\002\n" "\021AsyncAgentService\022U\n\nCreateTask\022!.flyte" "idl.admin.CreateTaskRequest\032\".flyteidl.a" "dmin.CreateTaskResponse\"\000\022L\n\007GetTask\022\036.f" "lyteidl.admin.GetTaskRequest\032\037.flyteidl." "admin.GetTaskResponse\"\000\022U\n\nDeleteTask\022!." "flyteidl.admin.DeleteTaskRequest\032\".flyte" - "idl.admin.DeleteTaskResponse\"\000B9Z7github" - ".com/flyteorg/flyteidl/gen/pb-go/flyteid" - "l/serviceb\006proto3" + "idl.admin.DeleteTaskResponse\"\000\022I\n\006DoTask" + "\022\035.flyteidl.admin.DoTaskRequest\032\036.flytei" + "dl.admin.DoTaskResponse\"\000B9Z7github.com/" + "flyteorg/flyteidl/gen/pb-go/flyteidl/ser" + "viceb\006proto3" ; ::google::protobuf::internal::DescriptorTable descriptor_table_flyteidl_2fservice_2fagent_2eproto = { false, InitDefaults_flyteidl_2fservice_2fagent_2eproto, descriptor_table_protodef_flyteidl_2fservice_2fagent_2eproto, - "flyteidl/service/agent.proto", &assign_descriptors_table_flyteidl_2fservice_2fagent_2eproto, 417, + "flyteidl/service/agent.proto", &assign_descriptors_table_flyteidl_2fservice_2fagent_2eproto, 492, }; void AddDescriptors_flyteidl_2fservice_2fagent_2eproto() { diff --git a/flyteidl/gen/pb-go/flyteidl/admin/agent.pb.go b/flyteidl/gen/pb-go/flyteidl/admin/agent.pb.go index 21152a7c99..54c410cd9c 100644 --- a/flyteidl/gen/pb-go/flyteidl/admin/agent.pb.go +++ b/flyteidl/gen/pb-go/flyteidl/admin/agent.pb.go @@ -476,6 +476,97 @@ func (m *DeleteTaskResponse) XXX_DiscardUnknown() { var xxx_messageInfo_DeleteTaskResponse proto.InternalMessageInfo +// A message used to do a task +type DoTaskRequest struct { + // The inputs required to start the execution. All required inputs must be + // included in this map. If not required and not provided, defaults apply. + // +optional + Inputs *core.LiteralMap `protobuf:"bytes,1,opt,name=inputs,proto3" json:"inputs,omitempty"` + // Template of the task that encapsulates all the metadata of the task. + Template *core.TaskTemplate `protobuf:"bytes,2,opt,name=template,proto3" json:"template,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *DoTaskRequest) Reset() { *m = DoTaskRequest{} } +func (m *DoTaskRequest) String() string { return proto.CompactTextString(m) } +func (*DoTaskRequest) ProtoMessage() {} +func (*DoTaskRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_c434e52bb0028071, []int{8} +} + +func (m *DoTaskRequest) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_DoTaskRequest.Unmarshal(m, b) +} +func (m *DoTaskRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_DoTaskRequest.Marshal(b, m, deterministic) +} +func (m *DoTaskRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_DoTaskRequest.Merge(m, src) +} +func (m *DoTaskRequest) XXX_Size() int { + return xxx_messageInfo_DoTaskRequest.Size(m) +} +func (m *DoTaskRequest) XXX_DiscardUnknown() { + xxx_messageInfo_DoTaskRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_DoTaskRequest proto.InternalMessageInfo + +func (m *DoTaskRequest) GetInputs() *core.LiteralMap { + if m != nil { + return m.Inputs + } + return nil +} + +func (m *DoTaskRequest) GetTemplate() *core.TaskTemplate { + if m != nil { + return m.Template + } + return nil +} + +type DoTaskResponse struct { + Resource *Resource `protobuf:"bytes,1,opt,name=resource,proto3" json:"resource,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *DoTaskResponse) Reset() { *m = DoTaskResponse{} } +func (m *DoTaskResponse) String() string { return proto.CompactTextString(m) } +func (*DoTaskResponse) ProtoMessage() {} +func (*DoTaskResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_c434e52bb0028071, []int{9} +} + +func (m *DoTaskResponse) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_DoTaskResponse.Unmarshal(m, b) +} +func (m *DoTaskResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_DoTaskResponse.Marshal(b, m, deterministic) +} +func (m *DoTaskResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_DoTaskResponse.Merge(m, src) +} +func (m *DoTaskResponse) XXX_Size() int { + return xxx_messageInfo_DoTaskResponse.Size(m) +} +func (m *DoTaskResponse) XXX_DiscardUnknown() { + xxx_messageInfo_DoTaskResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_DoTaskResponse proto.InternalMessageInfo + +func (m *DoTaskResponse) GetResource() *Resource { + if m != nil { + return m.Resource + } + return nil +} + func init() { proto.RegisterEnum("flyteidl.admin.State", State_name, State_value) proto.RegisterType((*TaskExecutionMetadata)(nil), "flyteidl.admin.TaskExecutionMetadata") @@ -489,56 +580,59 @@ func init() { proto.RegisterType((*Resource)(nil), "flyteidl.admin.Resource") proto.RegisterType((*DeleteTaskRequest)(nil), "flyteidl.admin.DeleteTaskRequest") proto.RegisterType((*DeleteTaskResponse)(nil), "flyteidl.admin.DeleteTaskResponse") + proto.RegisterType((*DoTaskRequest)(nil), "flyteidl.admin.DoTaskRequest") + proto.RegisterType((*DoTaskResponse)(nil), "flyteidl.admin.DoTaskResponse") } func init() { proto.RegisterFile("flyteidl/admin/agent.proto", fileDescriptor_c434e52bb0028071) } var fileDescriptor_c434e52bb0028071 = []byte{ - // 724 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x55, 0x5d, 0x6f, 0xe2, 0x46, - 0x14, 0x2d, 0x10, 0x08, 0x5c, 0xf2, 0x01, 0xd3, 0xa0, 0x3a, 0x24, 0xad, 0x22, 0xaa, 0x56, 0x51, - 0xab, 0x1a, 0x85, 0xb4, 0x4d, 0xd2, 0x87, 0x56, 0x24, 0xb8, 0x08, 0x89, 0xa0, 0x68, 0x02, 0x55, - 0x5b, 0xa9, 0x45, 0x83, 0xb9, 0xb0, 0x16, 0x66, 0xec, 0xf5, 0x8c, 0x51, 0x78, 0xde, 0x3f, 0xb1, - 0x3f, 0x77, 0xe5, 0xf1, 0x47, 0x00, 0xb1, 0xab, 0x44, 0xfb, 0x86, 0xef, 0x39, 0xf7, 0xcc, 0x99, - 0x73, 0xaf, 0x0d, 0x54, 0x27, 0xf6, 0x52, 0xa2, 0x35, 0xb6, 0xeb, 0x6c, 0x3c, 0xb7, 0x78, 0x9d, - 0x4d, 0x91, 0x4b, 0xdd, 0xf5, 0x1c, 0xe9, 0x90, 0x83, 0x18, 0xd3, 0x15, 0x56, 0x3d, 0x4d, 0xb8, - 0xa6, 0xe3, 0x61, 0xdd, 0xb6, 0x24, 0x7a, 0xcc, 0x16, 0x21, 0xbb, 0x7a, 0xbc, 0x8e, 0x4a, 0x26, - 0x66, 0x31, 0xf4, 0xf5, 0x3a, 0x64, 0x71, 0x89, 0xde, 0x84, 0x99, 0x18, 0xc1, 0xdf, 0x6c, 0xc0, - 0x63, 0xe4, 0xd2, 0x9a, 0x58, 0xe8, 0x85, 0x78, 0xed, 0x7d, 0x16, 0x2a, 0x7d, 0x26, 0x66, 0xc6, - 0x13, 0x9a, 0xbe, 0xb4, 0x1c, 0x7e, 0x8f, 0x92, 0x8d, 0x99, 0x64, 0x84, 0x42, 0x39, 0x38, 0x67, - 0x88, 0x31, 0x32, 0xb4, 0xc6, 0x5a, 0xea, 0x2c, 0x75, 0x5e, 0x6c, 0x7c, 0xaf, 0x27, 0xee, 0x03, - 0x55, 0x7d, 0x4d, 0xa0, 0x93, 0x1c, 0x41, 0x0f, 0xe5, 0x3a, 0x40, 0x4e, 0xa1, 0xc0, 0xd9, 0x1c, - 0x85, 0xcb, 0x4c, 0xd4, 0xd2, 0x67, 0xa9, 0xf3, 0x02, 0x7d, 0x2e, 0x90, 0x0e, 0xe4, 0x6c, 0x36, - 0x42, 0x5b, 0x68, 0x99, 0xb3, 0xcc, 0x79, 0xb1, 0x71, 0xa1, 0xaf, 0x87, 0xa4, 0x6f, 0x35, 0xaa, - 0x77, 0x55, 0x8f, 0xc1, 0xa5, 0xb7, 0xa4, 0x91, 0x00, 0xf9, 0x1b, 0x8a, 0x8c, 0x73, 0x47, 0xb2, - 0x80, 0x29, 0xb4, 0x1d, 0xa5, 0xf7, 0xeb, 0xcb, 0xf4, 0x9a, 0xcf, 0x8d, 0xa1, 0xe8, 0xaa, 0x14, - 0xd1, 0xe1, 0xcb, 0xd9, 0xb5, 0x18, 0x0a, 0xf4, 0x16, 0x96, 0x89, 0x43, 0x66, 0x9a, 0x8e, 0xcf, - 0xa5, 0x96, 0x55, 0x97, 0x29, 0xcf, 0xae, 0xc5, 0x63, 0x88, 0x34, 0x43, 0x80, 0x48, 0xa8, 0x20, - 0x5f, 0x58, 0x9e, 0xc3, 0xe7, 0xc8, 0xe5, 0x70, 0xc1, 0x3c, 0x8b, 0x8d, 0x6c, 0x14, 0x5a, 0x4e, - 0x79, 0xfa, 0xe3, 0x65, 0x9e, 0x8c, 0x67, 0x89, 0xbf, 0x62, 0x85, 0xd0, 0xdc, 0x11, 0x6e, 0x81, - 0xaa, 0x37, 0x50, 0x5c, 0x89, 0x85, 0x94, 0x20, 0x33, 0xc3, 0xa5, 0x9a, 0x5e, 0x81, 0x06, 0x3f, - 0xc9, 0x11, 0x64, 0x17, 0xcc, 0xf6, 0xe3, 0x29, 0x84, 0x0f, 0xbf, 0xa5, 0xaf, 0x53, 0xd5, 0xdf, - 0xa1, 0xb4, 0x99, 0xc0, 0xab, 0xfa, 0xdb, 0x70, 0xfc, 0x51, 0xb7, 0xaf, 0x11, 0xaa, 0xbd, 0x4b, - 0x43, 0xf9, 0xce, 0x43, 0x26, 0x31, 0xc8, 0x84, 0xe2, 0x5b, 0x1f, 0x85, 0x24, 0x17, 0x90, 0xb3, - 0xb8, 0xeb, 0x4b, 0x11, 0xed, 0xe2, 0xf1, 0xc6, 0x2e, 0x76, 0xc3, 0x37, 0xe7, 0x9e, 0xb9, 0x34, - 0x22, 0x92, 0x2b, 0xc8, 0x4b, 0x9c, 0xbb, 0x36, 0x93, 0xe1, 0x29, 0xc5, 0xc6, 0xc9, 0x96, 0x05, - 0xee, 0x47, 0x14, 0x9a, 0x90, 0xc9, 0xb7, 0xb0, 0xef, 0xf8, 0xd2, 0xf5, 0xe5, 0xd0, 0xf5, 0x70, - 0x62, 0x3d, 0x69, 0x19, 0xe5, 0x71, 0x2f, 0x2c, 0x3e, 0xa8, 0x1a, 0xf9, 0x0f, 0xbe, 0xda, 0x78, - 0x4f, 0xe6, 0xd1, 0xd4, 0xb4, 0x1d, 0x75, 0xd8, 0x77, 0x2f, 0x1a, 0x31, 0xad, 0xc8, 0x6d, 0xe5, - 0xda, 0x0d, 0x90, 0xd5, 0x10, 0x84, 0xeb, 0x70, 0xa1, 0x9c, 0x79, 0x28, 0x1c, 0xdf, 0x33, 0x51, - 0x1d, 0xa7, 0xc2, 0xd8, 0xa3, 0x7b, 0x71, 0x31, 0x68, 0xaf, 0x51, 0x38, 0x68, 0xa3, 0x5c, 0x0d, - 0xef, 0x04, 0x0a, 0xca, 0xab, 0x5c, 0xba, 0x18, 0x0d, 0x21, 0x1f, 0x14, 0xfa, 0x4b, 0x77, 0x8b, - 0x66, 0x7a, 0x8b, 0x66, 0x1b, 0x0e, 0x13, 0xcd, 0xc8, 0xcb, 0xcf, 0x90, 0x8f, 0x29, 0xd1, 0x4c, - 0xb4, 0xcd, 0x1b, 0xd3, 0x08, 0xa7, 0x09, 0xb3, 0x66, 0x43, 0x3e, 0xae, 0x92, 0x1f, 0x21, 0x2b, - 0x64, 0x30, 0x9d, 0xa0, 0xfd, 0xa0, 0x51, 0xd9, 0x6c, 0x7f, 0x0c, 0x40, 0x1a, 0x72, 0xc8, 0x25, - 0xec, 0x86, 0xf9, 0x8b, 0x68, 0x98, 0x9f, 0xd8, 0x80, 0x98, 0x59, 0x1b, 0x40, 0xb9, 0x85, 0x36, - 0xae, 0xaf, 0xd2, 0xe7, 0xa7, 0x71, 0x04, 0x64, 0x55, 0x36, 0x0c, 0xe4, 0x87, 0xff, 0x21, 0xab, - 0x1c, 0x93, 0x0a, 0x94, 0xa9, 0xd1, 0xa7, 0xff, 0x34, 0x6f, 0xbb, 0xc6, 0xf0, 0xcf, 0x66, 0xa7, - 0x3b, 0xa0, 0x46, 0xe9, 0x8b, 0xa0, 0xfc, 0x60, 0xd0, 0xfb, 0x66, 0xcf, 0xe8, 0xf5, 0x93, 0x72, - 0x8a, 0x14, 0x61, 0xf7, 0xc1, 0xe8, 0xb5, 0x3a, 0xbd, 0x76, 0x29, 0x1d, 0x3c, 0xd0, 0x41, 0xaf, - 0x17, 0x3c, 0x64, 0xc8, 0x3e, 0x14, 0x1e, 0x07, 0x77, 0x77, 0x86, 0xd1, 0x32, 0x5a, 0xa5, 0x9d, - 0xdb, 0xab, 0x7f, 0x7f, 0x99, 0x5a, 0xf2, 0x8d, 0x3f, 0xd2, 0x4d, 0x67, 0x5e, 0x57, 0x97, 0x77, - 0xbc, 0x69, 0x3d, 0xf9, 0xd2, 0x4f, 0x91, 0xd7, 0xdd, 0xd1, 0x4f, 0x53, 0xa7, 0xbe, 0xfe, 0x07, - 0x34, 0xca, 0xa9, 0x6f, 0xfe, 0xe5, 0x87, 0x00, 0x00, 0x00, 0xff, 0xff, 0xe4, 0x4c, 0xa8, 0x65, - 0x99, 0x06, 0x00, 0x00, + // 742 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x55, 0xdf, 0x6f, 0x2a, 0x45, + 0x14, 0x16, 0x28, 0x5c, 0x38, 0xb4, 0x5c, 0x18, 0x4b, 0xdc, 0x72, 0xaf, 0xa6, 0x59, 0xa3, 0x69, + 0x34, 0x2e, 0xb9, 0x5c, 0xb5, 0xad, 0x0f, 0x1a, 0x5a, 0xb6, 0x84, 0x84, 0x92, 0x66, 0x0a, 0x46, + 0x4d, 0x94, 0x0c, 0xcb, 0x01, 0x37, 0x2c, 0xb3, 0xeb, 0xce, 0x2c, 0x29, 0xf1, 0xd1, 0x7f, 0xc2, + 0x3f, 0xd7, 0xec, 0xec, 0x8f, 0x02, 0x41, 0xd3, 0xa6, 0x0f, 0xbe, 0xed, 0x9c, 0xef, 0x9c, 0xef, + 0x7c, 0xfb, 0x9d, 0x33, 0x19, 0x68, 0xcc, 0x9c, 0xb5, 0x44, 0x7b, 0xea, 0x34, 0xd9, 0x74, 0x69, + 0xf3, 0x26, 0x9b, 0x23, 0x97, 0x86, 0xe7, 0xbb, 0xd2, 0x25, 0x95, 0x04, 0x33, 0x14, 0xd6, 0x78, + 0x9b, 0xe6, 0x5a, 0xae, 0x8f, 0x4d, 0xc7, 0x96, 0xe8, 0x33, 0x47, 0x44, 0xd9, 0x8d, 0x93, 0x6d, + 0x54, 0x32, 0xb1, 0x48, 0xa0, 0x8f, 0xb7, 0x21, 0x9b, 0x4b, 0xf4, 0x67, 0xcc, 0xc2, 0x18, 0xfe, + 0x64, 0x07, 0x9e, 0x22, 0x97, 0xf6, 0xcc, 0x46, 0x3f, 0xc2, 0xf5, 0xbf, 0xf3, 0x50, 0x1f, 0x32, + 0xb1, 0x30, 0x1f, 0xd0, 0x0a, 0xa4, 0xed, 0xf2, 0x5b, 0x94, 0x6c, 0xca, 0x24, 0x23, 0x14, 0x6a, + 0x61, 0x9f, 0x31, 0x26, 0xc8, 0xd8, 0x9e, 0x6a, 0x99, 0xd3, 0xcc, 0x59, 0xb9, 0xf5, 0xb9, 0x91, + 0xaa, 0x0f, 0x59, 0x8d, 0x2d, 0x82, 0x5e, 0xda, 0x82, 0xbe, 0x96, 0xdb, 0x00, 0x79, 0x0b, 0x25, + 0xce, 0x96, 0x28, 0x3c, 0x66, 0xa1, 0x96, 0x3d, 0xcd, 0x9c, 0x95, 0xe8, 0x63, 0x80, 0xf4, 0xa0, + 0xe0, 0xb0, 0x09, 0x3a, 0x42, 0xcb, 0x9d, 0xe6, 0xce, 0xca, 0xad, 0x77, 0xc6, 0xb6, 0x49, 0xc6, + 0x5e, 0xa1, 0x46, 0x5f, 0xd5, 0x98, 0x5c, 0xfa, 0x6b, 0x1a, 0x13, 0x90, 0x9f, 0xa0, 0xcc, 0x38, + 0x77, 0x25, 0x0b, 0x33, 0x85, 0x76, 0xa0, 0xf8, 0xbe, 0x7d, 0x1a, 0x5f, 0xfb, 0xb1, 0x30, 0x22, + 0xdd, 0xa4, 0x22, 0x06, 0x7c, 0xb8, 0xb8, 0x10, 0x63, 0x81, 0xfe, 0xca, 0xb6, 0x70, 0xcc, 0x2c, + 0xcb, 0x0d, 0xb8, 0xd4, 0xf2, 0xea, 0x67, 0x6a, 0x8b, 0x0b, 0x71, 0x1f, 0x21, 0xed, 0x08, 0x20, + 0x12, 0xea, 0xc8, 0x57, 0xb6, 0xef, 0xf2, 0x25, 0x72, 0x39, 0x5e, 0x31, 0xdf, 0x66, 0x13, 0x07, + 0x85, 0x56, 0x50, 0x9a, 0x7e, 0x78, 0x9a, 0x26, 0xf3, 0x91, 0xe2, 0xc7, 0x84, 0x21, 0x12, 0x77, + 0x8c, 0x7b, 0xa0, 0xc6, 0x25, 0x94, 0x37, 0x6c, 0x21, 0x55, 0xc8, 0x2d, 0x70, 0xad, 0xa6, 0x57, + 0xa2, 0xe1, 0x27, 0x39, 0x86, 0xfc, 0x8a, 0x39, 0x41, 0x32, 0x85, 0xe8, 0xf0, 0x5d, 0xf6, 0x22, + 0xd3, 0xf8, 0x1e, 0xaa, 0xbb, 0x0e, 0x3c, 0xab, 0xbe, 0x0b, 0x27, 0xff, 0xaa, 0xf6, 0x39, 0x44, + 0xfa, 0x5f, 0x59, 0xa8, 0x5d, 0xfb, 0xc8, 0x24, 0x86, 0x9e, 0x50, 0xfc, 0x23, 0x40, 0x21, 0xc9, + 0x3b, 0x28, 0xd8, 0xdc, 0x0b, 0xa4, 0x88, 0x77, 0xf1, 0x64, 0x67, 0x17, 0xfb, 0xd1, 0xcd, 0xb9, + 0x65, 0x1e, 0x8d, 0x13, 0xc9, 0x39, 0x14, 0x25, 0x2e, 0x3d, 0x87, 0xc9, 0xa8, 0x4b, 0xb9, 0xf5, + 0x66, 0xcf, 0x02, 0x0f, 0xe3, 0x14, 0x9a, 0x26, 0x93, 0x4f, 0xe1, 0xc8, 0x0d, 0xa4, 0x17, 0xc8, + 0xb1, 0xe7, 0xe3, 0xcc, 0x7e, 0xd0, 0x72, 0x4a, 0xe3, 0x61, 0x14, 0xbc, 0x53, 0x31, 0xf2, 0x2b, + 0x7c, 0xb4, 0x73, 0x4f, 0x96, 0xf1, 0xd4, 0xb4, 0x03, 0xd5, 0xec, 0xb3, 0x27, 0x8d, 0x98, 0xd6, + 0xe5, 0xbe, 0xb0, 0x7e, 0x09, 0x64, 0xd3, 0x04, 0xe1, 0xb9, 0x5c, 0x28, 0x65, 0x3e, 0x0a, 0x37, + 0xf0, 0x2d, 0x54, 0xed, 0x94, 0x19, 0x87, 0xf4, 0x30, 0x09, 0x86, 0xe5, 0x3a, 0x85, 0x4a, 0x17, + 0xe5, 0xa6, 0x79, 0x6f, 0xa0, 0xa4, 0xb4, 0xca, 0xb5, 0x87, 0xf1, 0x10, 0x8a, 0x61, 0x60, 0xb8, + 0xf6, 0xf6, 0x70, 0x66, 0xf7, 0x70, 0x76, 0xe1, 0x75, 0xca, 0x19, 0x6b, 0xf9, 0x1a, 0x8a, 0x49, + 0x4a, 0x3c, 0x13, 0x6d, 0xf7, 0x8f, 0x69, 0x8c, 0xd3, 0x34, 0x53, 0x77, 0xa0, 0x98, 0x44, 0xc9, + 0x97, 0x90, 0x17, 0x32, 0x9c, 0x4e, 0x58, 0x5e, 0x69, 0xd5, 0x77, 0xcb, 0xef, 0x43, 0x90, 0x46, + 0x39, 0xe4, 0x3d, 0xbc, 0x8a, 0xfc, 0x17, 0xf1, 0x30, 0xff, 0x63, 0x03, 0x92, 0x4c, 0x7d, 0x04, + 0xb5, 0x0e, 0x3a, 0xb8, 0xbd, 0x4a, 0x2f, 0x77, 0xe3, 0x18, 0xc8, 0x26, 0x6d, 0x64, 0x88, 0xfe, + 0x27, 0x1c, 0x75, 0xdc, 0xff, 0x69, 0x67, 0xf5, 0x1b, 0xa8, 0x24, 0xcd, 0x5f, 0x32, 0x9f, 0x2f, + 0x7e, 0x83, 0xbc, 0xb2, 0x9d, 0xd4, 0xa1, 0x46, 0xcd, 0x21, 0xfd, 0xb9, 0x7d, 0xd5, 0x37, 0xc7, + 0x37, 0xed, 0x5e, 0x7f, 0x44, 0xcd, 0xea, 0x07, 0x61, 0xf8, 0xce, 0xa4, 0xb7, 0xed, 0x81, 0x39, + 0x18, 0xa6, 0xe1, 0x0c, 0x29, 0xc3, 0xab, 0x3b, 0x73, 0xd0, 0xe9, 0x0d, 0xba, 0xd5, 0x6c, 0x78, + 0xa0, 0xa3, 0xc1, 0x20, 0x3c, 0xe4, 0xc8, 0x11, 0x94, 0xee, 0x47, 0xd7, 0xd7, 0xa6, 0xd9, 0x31, + 0x3b, 0xd5, 0x83, 0xab, 0xf3, 0x5f, 0xbe, 0x99, 0xdb, 0xf2, 0xf7, 0x60, 0x62, 0x58, 0xee, 0xb2, + 0xa9, 0xf4, 0xb8, 0xfe, 0xbc, 0x99, 0x3e, 0x57, 0x73, 0xe4, 0x4d, 0x6f, 0xf2, 0xd5, 0xdc, 0x6d, + 0x6e, 0xbf, 0xa2, 0x93, 0x82, 0x7a, 0xb8, 0xde, 0xff, 0x13, 0x00, 0x00, 0xff, 0xff, 0xdc, 0x91, + 0x7c, 0xe4, 0x5e, 0x07, 0x00, 0x00, } diff --git a/flyteidl/gen/pb-go/flyteidl/admin/agent.pb.validate.go b/flyteidl/gen/pb-go/flyteidl/admin/agent.pb.validate.go index 0ba579cb0b..b532b6996c 100644 --- a/flyteidl/gen/pb-go/flyteidl/admin/agent.pb.validate.go +++ b/flyteidl/gen/pb-go/flyteidl/admin/agent.pb.validate.go @@ -648,3 +648,163 @@ var _ interface { Cause() error ErrorName() string } = DeleteTaskResponseValidationError{} + +// Validate checks the field values on DoTaskRequest with the rules defined in +// the proto definition for this message. If any rules are violated, an error +// is returned. +func (m *DoTaskRequest) Validate() error { + if m == nil { + return nil + } + + if v, ok := interface{}(m.GetInputs()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return DoTaskRequestValidationError{ + field: "Inputs", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if v, ok := interface{}(m.GetTemplate()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return DoTaskRequestValidationError{ + field: "Template", + reason: "embedded message failed validation", + cause: err, + } + } + } + + return nil +} + +// DoTaskRequestValidationError is the validation error returned by +// DoTaskRequest.Validate if the designated constraints aren't met. +type DoTaskRequestValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e DoTaskRequestValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e DoTaskRequestValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e DoTaskRequestValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e DoTaskRequestValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e DoTaskRequestValidationError) ErrorName() string { return "DoTaskRequestValidationError" } + +// Error satisfies the builtin error interface +func (e DoTaskRequestValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sDoTaskRequest.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = DoTaskRequestValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = DoTaskRequestValidationError{} + +// Validate checks the field values on DoTaskResponse with the rules defined in +// the proto definition for this message. If any rules are violated, an error +// is returned. +func (m *DoTaskResponse) Validate() error { + if m == nil { + return nil + } + + if v, ok := interface{}(m.GetResource()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return DoTaskResponseValidationError{ + field: "Resource", + reason: "embedded message failed validation", + cause: err, + } + } + } + + return nil +} + +// DoTaskResponseValidationError is the validation error returned by +// DoTaskResponse.Validate if the designated constraints aren't met. +type DoTaskResponseValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e DoTaskResponseValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e DoTaskResponseValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e DoTaskResponseValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e DoTaskResponseValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e DoTaskResponseValidationError) ErrorName() string { return "DoTaskResponseValidationError" } + +// Error satisfies the builtin error interface +func (e DoTaskResponseValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sDoTaskResponse.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = DoTaskResponseValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = DoTaskResponseValidationError{} diff --git a/flyteidl/gen/pb-go/flyteidl/admin/launch_plan.pb.go b/flyteidl/gen/pb-go/flyteidl/admin/launch_plan.pb.go index c8280a86f1..dc6f084e78 100644 --- a/flyteidl/gen/pb-go/flyteidl/admin/launch_plan.pb.go +++ b/flyteidl/gen/pb-go/flyteidl/admin/launch_plan.pb.go @@ -310,10 +310,10 @@ type LaunchPlanSpec struct { // Metadata for the Launch Plan EntityMetadata *LaunchPlanMetadata `protobuf:"bytes,2,opt,name=entity_metadata,json=entityMetadata,proto3" json:"entity_metadata,omitempty"` // Input values to be passed for the execution. - // These can be overriden when an execution is created with this launch plan. + // These can be overridden when an execution is created with this launch plan. DefaultInputs *core.ParameterMap `protobuf:"bytes,3,opt,name=default_inputs,json=defaultInputs,proto3" json:"default_inputs,omitempty"` // Fixed, non-overridable inputs for the Launch Plan. - // These can not be overriden when an execution is created with this launch plan. + // These can not be overridden when an execution is created with this launch plan. FixedInputs *core.LiteralMap `protobuf:"bytes,4,opt,name=fixed_inputs,json=fixedInputs,proto3" json:"fixed_inputs,omitempty"` // String to indicate the role to use to execute the workflow underneath Role string `protobuf:"bytes,5,opt,name=role,proto3" json:"role,omitempty"` // Deprecated: Do not use. diff --git a/flyteidl/gen/pb-go/flyteidl/admin/signal.pb.go b/flyteidl/gen/pb-go/flyteidl/admin/signal.pb.go index 52c3dcc4f1..bd12041e6a 100644 --- a/flyteidl/gen/pb-go/flyteidl/admin/signal.pb.go +++ b/flyteidl/gen/pb-go/flyteidl/admin/signal.pb.go @@ -21,7 +21,7 @@ var _ = math.Inf // proto package needs to be updated. const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package -// SignalGetOrCreateRequest represents a request structure to retrive or create a signal. +// SignalGetOrCreateRequest represents a request structure to retrieve or create a signal. // See :ref:`ref_flyteidl.admin.Signal` for more details type SignalGetOrCreateRequest struct { // A unique identifier for the requested signal. diff --git a/flyteidl/gen/pb-go/flyteidl/admin/workflow.pb.go b/flyteidl/gen/pb-go/flyteidl/admin/workflow.pb.go index 756045f43b..d49ad423f8 100644 --- a/flyteidl/gen/pb-go/flyteidl/admin/workflow.pb.go +++ b/flyteidl/gen/pb-go/flyteidl/admin/workflow.pb.go @@ -410,7 +410,7 @@ func (m *WorkflowErrorExistsIdenticalStructure) GetId() *core.Identifier { return nil } -// When a CreateWorkflowRequest failes due to matching id +// When a CreateWorkflowRequest fails due to matching id type CreateWorkflowFailureReason struct { // Types that are valid to be assigned to Reason: // *CreateWorkflowFailureReason_ExistsDifferentStructure diff --git a/flyteidl/gen/pb-go/flyteidl/datacatalog/datacatalog.pb.go b/flyteidl/gen/pb-go/flyteidl/datacatalog/datacatalog.pb.go index a643383127..219bea77b3 100644 --- a/flyteidl/gen/pb-go/flyteidl/datacatalog/datacatalog.pb.go +++ b/flyteidl/gen/pb-go/flyteidl/datacatalog/datacatalog.pb.go @@ -942,7 +942,7 @@ func (m *ReservationID) GetTagName() string { return "" } -// Try to acquire or extend an artifact reservation. If an active reservation exists, retreive that instance. +// Try to acquire or extend an artifact reservation. If an active reservation exists, retrieve that instance. type GetOrExtendReservationRequest struct { // The unique ID for the reservation ReservationId *ReservationID `protobuf:"bytes,1,opt,name=reservation_id,json=reservationId,proto3" json:"reservation_id,omitempty"` diff --git a/flyteidl/gen/pb-go/flyteidl/service/admin.swagger.json b/flyteidl/gen/pb-go/flyteidl/service/admin.swagger.json index aed368ddfc..9de4c01d14 100644 --- a/flyteidl/gen/pb-go/flyteidl/service/admin.swagger.json +++ b/flyteidl/gen/pb-go/flyteidl/service/admin.swagger.json @@ -4263,11 +4263,11 @@ }, "default_inputs": { "$ref": "#/definitions/coreParameterMap", - "description": "Input values to be passed for the execution.\nThese can be overriden when an execution is created with this launch plan." + "description": "Input values to be passed for the execution.\nThese can be overridden when an execution is created with this launch plan." }, "fixed_inputs": { "$ref": "#/definitions/coreLiteralMap", - "description": "Fixed, non-overridable inputs for the Launch Plan.\nThese can not be overriden when an execution is created with this launch plan." + "description": "Fixed, non-overridable inputs for the Launch Plan.\nThese can not be overridden when an execution is created with this launch plan." }, "role": { "type": "string", diff --git a/flyteidl/gen/pb-go/flyteidl/service/agent.pb.go b/flyteidl/gen/pb-go/flyteidl/service/agent.pb.go index 13122a9012..0059e59f41 100644 --- a/flyteidl/gen/pb-go/flyteidl/service/agent.pb.go +++ b/flyteidl/gen/pb-go/flyteidl/service/agent.pb.go @@ -28,21 +28,22 @@ const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package func init() { proto.RegisterFile("flyteidl/service/agent.proto", fileDescriptor_f7d1dfd1fb77d2ef) } var fileDescriptor_f7d1dfd1fb77d2ef = []byte{ - // 212 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0x49, 0xcb, 0xa9, 0x2c, - 0x49, 0xcd, 0x4c, 0xc9, 0xd1, 0x2f, 0x4e, 0x2d, 0x2a, 0xcb, 0x4c, 0x4e, 0xd5, 0x4f, 0x4c, 0x4f, - 0xcd, 0x2b, 0xd1, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x12, 0x80, 0xc9, 0xea, 0x41, 0x65, 0xa5, - 0xa4, 0xe0, 0xea, 0x13, 0x53, 0x72, 0x33, 0xf3, 0x90, 0x55, 0x1b, 0xf5, 0x33, 0x71, 0x09, 0x3a, - 0x16, 0x57, 0xe6, 0x25, 0x3b, 0x82, 0x04, 0x83, 0x21, 0x3a, 0x84, 0x42, 0xb9, 0xb8, 0x9c, 0x8b, - 0x52, 0x13, 0x4b, 0x52, 0x43, 0x12, 0x8b, 0xb3, 0x85, 0x14, 0xf5, 0xe0, 0x46, 0x82, 0x0d, 0xd0, - 0x43, 0xc8, 0x05, 0xa5, 0x16, 0x96, 0xa6, 0x16, 0x97, 0x48, 0x29, 0xe1, 0x53, 0x52, 0x5c, 0x90, - 0x9f, 0x57, 0x9c, 0xaa, 0xc4, 0x20, 0xe4, 0xc3, 0xc5, 0xee, 0x9e, 0x5a, 0x02, 0x36, 0x53, 0x0e, - 0x5d, 0x03, 0x54, 0x02, 0x66, 0xa0, 0x3c, 0x4e, 0x79, 0xb8, 0x69, 0xa1, 0x5c, 0x5c, 0x2e, 0xa9, - 0x39, 0xa9, 0xb8, 0x1c, 0x89, 0x90, 0xc3, 0xe9, 0x48, 0x64, 0x25, 0x30, 0x63, 0x9d, 0x2c, 0xa3, - 0xcc, 0xd3, 0x33, 0x4b, 0x32, 0x4a, 0x93, 0xf4, 0x92, 0xf3, 0x73, 0xf5, 0xc1, 0x3a, 0xf2, 0x8b, - 0xd2, 0xf5, 0xe1, 0x61, 0x98, 0x9e, 0x9a, 0xa7, 0x5f, 0x90, 0xa4, 0x9b, 0x9e, 0xaf, 0x8f, 0x1e, - 0x0d, 0x49, 0x6c, 0xe0, 0x30, 0x35, 0x06, 0x04, 0x00, 0x00, 0xff, 0xff, 0x38, 0xbf, 0x55, 0xcc, - 0xa1, 0x01, 0x00, 0x00, + // 228 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x91, 0x31, 0x4b, 0xc5, 0x30, + 0x14, 0x46, 0xc5, 0xe1, 0x09, 0x77, 0xd2, 0x8c, 0x45, 0x9f, 0xf8, 0x76, 0x13, 0xd0, 0x41, 0x1c, + 0x9f, 0x3e, 0x10, 0xc1, 0x49, 0xed, 0xe2, 0x96, 0xb6, 0xd7, 0x18, 0x6c, 0x73, 0x6b, 0x92, 0x0a, + 0xfd, 0xab, 0xfe, 0x1a, 0x31, 0xb6, 0x69, 0xa9, 0xc4, 0x35, 0xe7, 0xe4, 0x70, 0xe1, 0x83, 0xe3, + 0xd7, 0xba, 0xf7, 0xa8, 0xab, 0x5a, 0x38, 0xb4, 0x9f, 0xba, 0x44, 0x21, 0x15, 0x1a, 0xcf, 0x5b, + 0x4b, 0x9e, 0xd8, 0xe1, 0x48, 0xf9, 0x40, 0xb3, 0x2c, 0xfa, 0xb2, 0x6a, 0xb4, 0x99, 0xdb, 0x17, + 0x5f, 0xfb, 0x70, 0xb4, 0x75, 0xbd, 0x29, 0xb7, 0x3f, 0x8f, 0x4f, 0xbf, 0x3f, 0x58, 0x0e, 0x70, + 0x6b, 0x51, 0x7a, 0x7c, 0x96, 0xee, 0x9d, 0x9d, 0xf1, 0x98, 0x0c, 0x01, 0x3e, 0xb1, 0x47, 0xfc, + 0xe8, 0xd0, 0xf9, 0x6c, 0xf3, 0x9f, 0xe2, 0x5a, 0x32, 0x0e, 0x37, 0x7b, 0xec, 0x01, 0x0e, 0xee, + 0xd0, 0x87, 0xe6, 0x7a, 0xf9, 0x61, 0x00, 0x63, 0xf0, 0x34, 0xc9, 0x63, 0x2d, 0x07, 0xd8, 0x61, + 0x8d, 0xa9, 0x23, 0x27, 0x96, 0x3c, 0x72, 0xae, 0xc4, 0xec, 0x3d, 0xac, 0x76, 0x14, 0x92, 0x27, + 0x7f, 0x7c, 0x9a, 0xe7, 0xd6, 0x29, 0x3c, 0xa6, 0x6e, 0xae, 0x5f, 0xae, 0x94, 0xf6, 0x6f, 0x5d, + 0xc1, 0x4b, 0x6a, 0x44, 0xb0, 0xc9, 0x2a, 0x11, 0xe7, 0x50, 0x68, 0x44, 0x5b, 0x9c, 0x2b, 0x12, + 0xcb, 0x45, 0x8b, 0x55, 0x98, 0xe7, 0xf2, 0x3b, 0x00, 0x00, 0xff, 0xff, 0x71, 0x0f, 0x56, 0x53, + 0xec, 0x01, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -63,6 +64,8 @@ type AsyncAgentServiceClient interface { GetTask(ctx context.Context, in *admin.GetTaskRequest, opts ...grpc.CallOption) (*admin.GetTaskResponse, error) // Delete the task resource. DeleteTask(ctx context.Context, in *admin.DeleteTaskRequest, opts ...grpc.CallOption) (*admin.DeleteTaskResponse, error) + // Do a job and get response from the agent server. + DoTask(ctx context.Context, in *admin.DoTaskRequest, opts ...grpc.CallOption) (*admin.DoTaskResponse, error) } type asyncAgentServiceClient struct { @@ -100,6 +103,15 @@ func (c *asyncAgentServiceClient) DeleteTask(ctx context.Context, in *admin.Dele return out, nil } +func (c *asyncAgentServiceClient) DoTask(ctx context.Context, in *admin.DoTaskRequest, opts ...grpc.CallOption) (*admin.DoTaskResponse, error) { + out := new(admin.DoTaskResponse) + err := c.cc.Invoke(ctx, "/flyteidl.service.AsyncAgentService/DoTask", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // AsyncAgentServiceServer is the server API for AsyncAgentService service. type AsyncAgentServiceServer interface { // Send a task create request to the agent server. @@ -108,6 +120,8 @@ type AsyncAgentServiceServer interface { GetTask(context.Context, *admin.GetTaskRequest) (*admin.GetTaskResponse, error) // Delete the task resource. DeleteTask(context.Context, *admin.DeleteTaskRequest) (*admin.DeleteTaskResponse, error) + // Do a job and get response from the agent server. + DoTask(context.Context, *admin.DoTaskRequest) (*admin.DoTaskResponse, error) } // UnimplementedAsyncAgentServiceServer can be embedded to have forward compatible implementations. @@ -123,6 +137,9 @@ func (*UnimplementedAsyncAgentServiceServer) GetTask(ctx context.Context, req *a func (*UnimplementedAsyncAgentServiceServer) DeleteTask(ctx context.Context, req *admin.DeleteTaskRequest) (*admin.DeleteTaskResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method DeleteTask not implemented") } +func (*UnimplementedAsyncAgentServiceServer) DoTask(ctx context.Context, req *admin.DoTaskRequest) (*admin.DoTaskResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method DoTask not implemented") +} func RegisterAsyncAgentServiceServer(s *grpc.Server, srv AsyncAgentServiceServer) { s.RegisterService(&_AsyncAgentService_serviceDesc, srv) @@ -182,6 +199,24 @@ func _AsyncAgentService_DeleteTask_Handler(srv interface{}, ctx context.Context, return interceptor(ctx, in, info, handler) } +func _AsyncAgentService_DoTask_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(admin.DoTaskRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(AsyncAgentServiceServer).DoTask(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/flyteidl.service.AsyncAgentService/DoTask", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(AsyncAgentServiceServer).DoTask(ctx, req.(*admin.DoTaskRequest)) + } + return interceptor(ctx, in, info, handler) +} + var _AsyncAgentService_serviceDesc = grpc.ServiceDesc{ ServiceName: "flyteidl.service.AsyncAgentService", HandlerType: (*AsyncAgentServiceServer)(nil), @@ -198,6 +233,10 @@ var _AsyncAgentService_serviceDesc = grpc.ServiceDesc{ MethodName: "DeleteTask", Handler: _AsyncAgentService_DeleteTask_Handler, }, + { + MethodName: "DoTask", + Handler: _AsyncAgentService_DoTask_Handler, + }, }, Streams: []grpc.StreamDesc{}, Metadata: "flyteidl/service/agent.proto", diff --git a/flyteidl/gen/pb-go/flyteidl/service/agent.swagger.json b/flyteidl/gen/pb-go/flyteidl/service/agent.swagger.json index 0a788c919c..8c62d30be8 100644 --- a/flyteidl/gen/pb-go/flyteidl/service/agent.swagger.json +++ b/flyteidl/gen/pb-go/flyteidl/service/agent.swagger.json @@ -178,6 +178,14 @@ "type": "object", "description": "Response to delete a task." }, + "adminDoTaskResponse": { + "type": "object", + "properties": { + "resource": { + "$ref": "#/definitions/adminResource" + } + } + }, "adminGetTaskResponse": { "type": "object", "properties": { diff --git a/flyteidl/gen/pb-go/flyteidl/service/dataproxy.pb.go b/flyteidl/gen/pb-go/flyteidl/service/dataproxy.pb.go index c59c3099fe..55416cda09 100644 --- a/flyteidl/gen/pb-go/flyteidl/service/dataproxy.pb.go +++ b/flyteidl/gen/pb-go/flyteidl/service/dataproxy.pb.go @@ -519,7 +519,7 @@ func (m *PreSignedURLs) GetExpiresAt() *timestamp.Timestamp { // General request artifact to retrieve data from a Flyte artifact url. type GetDataRequest struct { // A unique identifier in the form of flyte:// that uniquely, for a given Flyte - // backend, identifies a Flyte artifact ([i]nput, [o]utput, flyte [d]eck, etc.). + // backend, identifies a Flyte artifact ([i]nput, [o]output, flyte [d]eck, etc.). // e.g. flyte://v1/proj/development/execid/n2/0/i (for 0th task execution attempt input) // flyte://v1/proj/development/execid/n2/i (for node execution input) // flyte://v1/proj/development/execid/n2/o/o3 (the o3 output of the second node) diff --git a/flyteidl/gen/pb-go/flyteidl/service/dataproxy.swagger.json b/flyteidl/gen/pb-go/flyteidl/service/dataproxy.swagger.json index 973243441c..4534435f3d 100644 --- a/flyteidl/gen/pb-go/flyteidl/service/dataproxy.swagger.json +++ b/flyteidl/gen/pb-go/flyteidl/service/dataproxy.swagger.json @@ -29,7 +29,7 @@ "parameters": [ { "name": "flyte_url", - "description": "A unique identifier in the form of flyte://\u003csomething\u003e that uniquely, for a given Flyte\nbackend, identifies a Flyte artifact ([i]nput, [o]utput, flyte [d]eck, etc.).\ne.g. flyte://v1/proj/development/execid/n2/0/i (for 0th task execution attempt input)\n flyte://v1/proj/development/execid/n2/i (for node execution input)\n flyte://v1/proj/development/execid/n2/o/o3 (the o3 output of the second node).", + "description": "A unique identifier in the form of flyte://\u003csomething\u003e that uniquely, for a given Flyte\nbackend, identifies a Flyte artifact ([i]nput, [o]output, flyte [d]eck, etc.).\ne.g. flyte://v1/proj/development/execid/n2/0/i (for 0th task execution attempt input)\n flyte://v1/proj/development/execid/n2/i (for node execution input)\n flyte://v1/proj/development/execid/n2/o/o3 (the o3 output of the second node).", "in": "query", "required": false, "type": "string" diff --git a/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/api/swagger.yaml b/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/api/swagger.yaml index dc5adf6fd7..09bc4affd9 100644 --- a/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/api/swagger.yaml +++ b/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/api/swagger.yaml @@ -6593,12 +6593,12 @@ definitions: title: "Metadata for the Launch Plan" $ref: "#/definitions/adminLaunchPlanMetadata" default_inputs: - description: "Input values to be passed for the execution.\nThese can be overriden\ + description: "Input values to be passed for the execution.\nThese can be overridden\ \ when an execution is created with this launch plan." $ref: "#/definitions/coreParameterMap" fixed_inputs: description: "Fixed, non-overridable inputs for the Launch Plan.\nThese can\ - \ not be overriden when an execution is created with this launch plan." + \ not be overridden when an execution is created with this launch plan." $ref: "#/definitions/coreLiteralMap" role: type: "string" diff --git a/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/model_admin_launch_plan_spec.go b/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/model_admin_launch_plan_spec.go index 644ea168f5..52a7ad3dac 100644 --- a/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/model_admin_launch_plan_spec.go +++ b/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/model_admin_launch_plan_spec.go @@ -13,9 +13,9 @@ package flyteadmin type AdminLaunchPlanSpec struct { WorkflowId *CoreIdentifier `json:"workflow_id,omitempty"` EntityMetadata *AdminLaunchPlanMetadata `json:"entity_metadata,omitempty"` - // Input values to be passed for the execution. These can be overriden when an execution is created with this launch plan. + // Input values to be passed for the execution. These can be overridden when an execution is created with this launch plan. DefaultInputs *CoreParameterMap `json:"default_inputs,omitempty"` - // Fixed, non-overridable inputs for the Launch Plan. These can not be overriden when an execution is created with this launch plan. + // Fixed, non-overridable inputs for the Launch Plan. These can not be overridden when an execution is created with this launch plan. FixedInputs *CoreLiteralMap `json:"fixed_inputs,omitempty"` Role string `json:"role,omitempty"` // Custom labels to be applied to the execution resource. diff --git a/flyteidl/gen/pb-go/flyteidl/service/openapi.go b/flyteidl/gen/pb-go/flyteidl/service/openapi.go index 4a41c73ba7..eb1fa1ffef 100644 --- a/flyteidl/gen/pb-go/flyteidl/service/openapi.go +++ b/flyteidl/gen/pb-go/flyteidl/service/openapi.go @@ -78,7 +78,7 @@ func (fi bindataFileInfo) Sys() interface{} { return nil } -var _adminSwaggerJson = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\xfd\xf9\x73\x2b\xb7\x95\x37\x8c\xff\x3e\x7f\x05\x9e\x3b\x4f\x95\xed\x44\x8b\x93\xcc\xe4\x9b\xd2\xd4\x53\xdf\x97\x96\x78\xaf\xf5\x58\x5b\xb4\xd8\xe3\x77\x98\xa2\xc1\x6e\x90\x44\xd4\x0d\x74\x00\xb4\x74\xe9\x54\xfe\xf7\xb7\x70\xb0\x34\x7a\x23\x9b\x8b\x24\xea\xba\x67\xaa\x62\x5d\x76\x37\xd6\x83\x83\xb3\x7e\xce\x3f\xff\x0d\xa1\x0f\xf2\x19\xcf\x66\x44\x7c\x38\x41\x1f\xfe\x78\xf4\xed\x87\x03\xfd\x1b\x65\x53\xfe\xe1\x04\xe9\xe7\x08\x7d\x50\x54\x25\x44\x3f\x9f\x26\x0b\x45\x68\x9c\x1c\x4b\x22\x9e\x68\x44\x8e\x71\x9c\x52\x76\x94\x09\xae\x38\x7c\x88\xd0\x87\x27\x22\x24\xe5\x4c\xbf\x6e\xff\x44\x8c\x2b\x24\x89\xfa\xf0\x6f\x08\xfd\x0b\x9a\x97\xd1\x9c\xa4\x44\x7e\x38\x41\xff\x63\x3e\x9a\x2b\x95\xb9\x06\xf4\xdf\x52\xbf\xfb\x37\x78\x37\xe2\x4c\xe6\xa5\x97\x71\x96\x25\x34\xc2\x8a\x72\x76\xfc\x77\xc9\x59\xf1\x6e\x26\x78\x9c\x47\x1d\xdf\xc5\x6a\x2e\x8b\x39\x1e\xe3\x8c\x1e\x3f\xfd\xe1\x18\x47\x8a\x3e\x91\x71\x82\x73\x16\xcd\xc7\x59\x82\x99\x3c\xfe\x27\x8d\xf5\x1c\xff\x4e\x22\xf5\x2f\xf8\x47\xcc\x53\x4c\x99\xf9\x9b\xe1\x94\xfc\xcb\xb7\x83\xd0\x87\x19\x51\xc1\x3f\xf5\x6c\xf3\x34\xc5\x62\xa1\x57\xe4\x23\x51\xd1\x1c\xa9\x39\x41\xa6\x1f\xe4\x96\x88\x4f\x11\x46\x27\x82\x4c\x4f\x7e\x11\x64\x3a\x76\x0b\x7d\x64\x16\xf8\x02\x46\x73\x93\x60\xf6\xcb\x91\x5d\x26\x68\x99\x67\x44\xc0\xdc\xce\x63\xdd\xfa\x27\xa2\x06\xd0\x6c\xf1\x7e\xf8\xb6\x20\x32\xe3\x4c\x12\x59\x1a\x1e\x42\x1f\xfe\xf8\xed\xb7\x95\x9f\x10\xfa\x10\x13\x19\x09\x9a\x29\xbb\x97\x03\x24\xf3\x28\x22\x52\x4e\xf3\x04\xb9\x96\xc2\xc1\x98\xa9\xea\x8d\xc5\xb5\xc6\x10\xfa\xf0\xbf\x05\x99\xea\x76\xfe\xfd\x38\x26\x53\xca\xa8\x6e\x57\x1a\xfa\x09\x46\x5b\xfa\xea\x5f\xff\xd6\xf4\xf7\xbf\x82\x19\x65\x58\xe0\x94\x28\x22\x8a\x1d\x37\xff\x57\x99\x8b\xde\x23\xdd\x79\xb1\x8f\xd5\x81\x57\x66\x7b\x85\x53\xa2\xf7\x44\xef\x94\xfd\x02\xfe\x16\x44\xf2\x5c\x44\x04\x4d\x48\xc2\xd9\x4c\x22\xc5\x6b\x6b\x40\xa1\x05\x4d\x5e\xd5\x27\x82\xfc\x23\xa7\x82\xe8\xbd\x52\x22\x27\x95\xa7\x6a\x91\xc1\x20\xa5\x12\x94\xcd\xc2\xa5\xf8\xd7\x41\xa7\xa9\x19\xaa\x5c\x63\x66\xe6\x83\xd6\x89\x8d\xd8\xc0\xbd\x12\x61\x86\x26\x04\xe9\xb3\x48\x63\x22\x48\x8c\xb0\x44\x18\xc9\x7c\x22\x89\x42\xcf\x54\xcd\x29\xd3\xff\xce\x48\x44\xa7\x34\x72\x6b\xb6\x3f\x6b\x03\x7f\x2e\x5f\x99\x07\x49\x84\x1e\xf8\x13\x8d\x49\x8c\x9e\x70\x92\x13\x34\xe5\xa2\xb4\x3c\x47\x23\x76\x3f\xd7\xeb\x90\x4e\x28\x83\x93\xa7\xd7\xd2\x51\xc8\xef\xdd\x72\xfd\x1e\xe9\xfe\x50\xce\xe8\x3f\x72\x92\x2c\x10\x8d\x09\x53\x74\x4a\x89\xac\xb6\xf6\x7b\x0e\xfd\xe3\x04\x1d\x22\xbd\xce\x44\x28\x58\x6f\xce\x14\xf9\xac\x24\x3a\x44\x09\x7d\x24\xe8\xab\x0b\x2a\x15\x1a\xdc\x9c\x7f\x75\x80\xbe\x32\xe7\x05\x01\x6f\xfa\xea\x15\x56\xd8\xff\xfd\xb7\xe0\xe8\x29\x3c\xab\x1e\xba\x0f\x03\x7d\x9a\xef\xcc\xd5\x50\xb4\xf0\xb7\x7f\x0b\xdb\xb1\xfb\xb5\x9c\xdf\x16\xcc\xd6\x72\xda\xae\xfc\x15\x96\xa9\xcc\x5a\xa5\xde\xa1\x6d\x39\xab\x6e\xb7\xca\x5a\xe5\xfb\xe2\xad\x7a\x0a\x2f\xcd\x5f\xb7\x61\xae\x58\x01\xd5\x63\xca\xcc\x21\xf1\x67\x46\x48\x7d\x4e\x1c\xf5\xee\x09\x4b\xd9\x86\xd7\x06\x33\x0b\xd8\xad\xe3\xa2\xc1\xaa\xec\xe1\xbc\x13\x9a\xd2\x55\xfb\x7b\xce\x62\x2d\x72\x59\x66\xc7\xf2\x74\x42\x84\x5e\x06\xc7\xf6\x60\xb6\x13\xcd\x06\x55\x2e\x18\x89\x3b\x4c\xf3\x1f\x39\x11\x8b\x25\xf3\x9c\xe2\x44\xb6\x4d\x94\x32\x45\xb4\x7c\x5b\x79\x3c\xe5\x22\xc5\xca\xbe\xf0\xe7\xff\x58\x77\x21\x14\x7f\x24\xab\xf6\xff\xdc\xec\x66\x84\x25\x90\x41\x9a\x27\x8a\x66\x09\x41\x19\x9e\x11\x69\x57\x24\x4f\x94\x3c\x80\xd7\xb4\x4c\x4d\xc4\xa1\xbf\x81\xa0\x07\x77\xf3\xe6\x12\x7e\x41\x53\x2f\x40\x32\xf2\x59\x41\x4b\x23\x06\x77\x2f\x2c\x51\x78\xa3\xbc\xc0\x52\x6e\x46\x33\x92\x0b\x35\x9e\x2c\x8e\x1e\x49\xad\xdf\x56\xca\xc1\x0c\x61\xa5\x04\x9d\xe4\x8a\xe8\x79\xeb\x36\xdc\xdd\x09\xec\xd1\x5c\xd0\x5d\x58\xc3\xdb\x4d\x38\xa6\x82\x44\x30\xb7\x75\x0e\x8c\xff\x4a\xcf\x5b\xeb\x2f\x0b\x33\xfb\x47\xb2\x00\x79\xa4\x61\x05\xfc\x96\x8f\xd8\x88\xa1\x43\x74\x36\xbc\x3b\x1d\x5e\x9d\x9d\x5f\x7d\x3a\x41\xdf\x2d\x50\x4c\xa6\x38\x4f\xd4\x01\x9a\x52\x92\xc4\x12\x61\x41\xa0\x49\x12\x6b\x99\x43\x0f\x86\xb0\x98\xb2\x19\xe2\x22\x26\xe2\xe5\x96\xb1\xf2\x94\xb0\x3c\xad\xdc\x2b\xf0\x7b\x31\xfa\xca\x17\x5a\xc4\xf0\x8f\x4a\x4f\xfe\x56\x5b\x60\x98\xb1\xee\x3b\x68\xed\xd5\x84\x9a\x68\x4e\x93\x58\x10\x76\xac\xb0\x7c\x1c\x93\xcf\x24\xca\xcd\x9d\xfc\xcf\xf2\x0f\x63\x2d\x99\xf2\x98\x94\x7f\x29\xfd\xa3\x10\x85\xd6\xfe\xd4\x6b\xa9\x6b\x7f\x09\x3a\x6d\xb7\xef\xe0\x17\x1a\x37\xbe\x0d\xbf\xac\x98\x83\x7b\x67\xc9\x60\xdd\x2b\xad\xa3\x72\x2f\x58\x89\xaf\xf1\x1d\x41\x94\x58\x8c\xb1\x52\x24\xcd\xd4\x9a\xfa\x3a\x46\x89\x96\x2b\x97\xc9\x91\x57\x3c\x26\x43\xd7\xdf\x2f\xc8\x88\xb3\x24\x46\x93\x85\xe5\x5a\x53\x22\x08\x8b\x48\x7b\x0b\xf7\x58\x3e\x16\x2d\xac\x12\x46\x4b\xfd\xc9\x8f\x5c\xe8\xcf\xdf\x83\x40\x5a\x1a\xf8\x6b\xc8\xa4\x9b\x9e\xb8\x2f\xce\x42\xb0\x21\xff\xe8\xed\x09\xdb\xaf\x64\x57\xeb\x03\x17\x48\x2e\xa4\x22\xe9\x4a\x3b\xc4\xfb\x59\x08\x7b\x41\xec\xeb\x80\x2b\x77\xd4\x6f\xe0\xd4\x97\x6f\xdc\xfe\x78\xaf\xb1\x64\xbb\xb2\x22\xee\xfb\x3c\x9d\x0f\x67\xf9\x54\xef\xdc\xf6\x05\x4e\x8c\x77\x31\xcd\x92\x2c\xb8\xeb\x41\xbe\x90\xb9\xa1\x75\xaf\xdc\x6a\x8f\x61\x00\x2b\x14\xcd\xb2\x1d\xda\x9f\x3f\xfd\x69\x68\xa1\x31\xe6\x38\x35\xa7\x32\x30\x56\xa1\x88\x0b\x23\x0b\xc6\xf6\xbc\x1b\x5d\x73\x70\x3f\xb8\x1b\xde\x9f\xa0\x01\x8a\xb1\xc2\xfa\x80\x0b\x92\x09\x22\x09\x53\xa0\xc7\xeb\xef\xd5\x02\xa5\x3c\x26\x89\xd1\x38\x3f\x6a\xc9\x17\x9d\x61\x85\x4f\xb1\xc2\x09\x9f\x1d\xa1\x01\xfc\x53\x7f\x4c\x25\xc2\x89\xe4\x08\x3b\xb2\x22\xb1\x6b\x02\xb3\xd8\xb1\x16\x8c\x22\x9e\x66\x34\xf1\x36\x78\x6f\x5c\xa1\x2c\xa6\x4f\x34\xce\x71\x82\xf8\x44\x73\x15\xad\x21\x0f\x9f\x08\x53\x39\x4e\x92\x05\xc2\x49\x82\x6c\xb7\xee\x05\x24\xe7\x3c\x4f\x62\xdd\xae\x1b\xa5\xa4\x29\x4d\xb0\xd0\x2a\xb8\x19\xed\xb5\x6d\x0b\xdd\xcf\x89\x1f\x2b\x8c\x4b\xaf\x66\x8a\x1f\x89\x44\x54\xa1\x8c\x4b\x49\x27\x49\x71\xe6\x1f\xce\x11\x8c\xfb\xf4\xe2\x1c\xf4\xf9\x48\x21\x6e\x78\xa8\xeb\xdc\xda\x6f\x5c\x8f\x29\x66\x8c\x40\xc7\x5c\xcd\x89\xb0\xdd\xdb\x97\xdf\x5a\x35\x7f\xb8\xba\xbb\x19\x9e\x9e\x7f\x3c\x1f\x9e\xd5\x75\xf3\xfb\xc1\xdd\x0f\xf5\x5f\x7f\xba\xbe\xfd\xe1\xe3\xc5\xf5\x4f\xf5\x27\x17\x83\x87\xab\xd3\xef\xc7\x37\x17\x83\xab\xfa\x43\x4b\x56\x9d\xd5\xfc\x70\x64\x6b\x9e\xad\xde\xa6\xf9\x52\x36\xcd\x83\x2f\xd7\xa8\x39\xa5\x09\xe8\xa0\x9d\x0d\x9a\xde\x86\x60\xbf\x44\x19\x96\xd2\x48\x46\x66\x04\x47\x23\x76\xc9\x85\x66\x60\x53\xae\x79\x84\x96\x9e\x94\xc8\x23\x45\xd9\xcc\x7f\x74\x82\x46\xf9\xb7\xdf\xfe\x29\xba\xa0\xec\x11\xfe\x22\xfb\xb8\x38\xbd\xc5\xb7\xb7\xf8\xfe\xb6\x2c\xbe\x5a\xf4\x39\x0e\x0d\xbd\xbb\x0d\x19\xd2\xc2\x05\xcb\x72\x05\xa2\x04\xcf\x95\xfe\x53\x77\x09\xe4\xb1\x24\x70\xa8\x9b\x41\xf1\x13\x51\xfe\x45\x2d\xda\xbc\x07\x3b\xe2\x4f\x5c\x3c\x4e\x13\xfe\xec\x07\xfe\x89\x28\x3d\xf6\x5b\xdb\x4b\x1f\x4a\xd4\x87\x12\xbd\x6d\x28\xd1\x5e\x19\xf3\x5e\x9e\xf9\x95\x2d\x7f\x86\x03\xb6\x78\xb2\x5a\x1d\x55\x2d\x7e\xa8\xc0\xcd\xf4\x2a\x5c\xb3\xec\xcc\x59\xc1\x39\x4b\x2f\xbf\x17\xee\x59\x1a\xf4\xeb\x73\xce\xdf\x84\xbf\xa5\x77\xa7\x6c\xb8\x50\xef\x92\xc1\x76\xbc\x3b\x5e\xcd\x19\xf2\xf2\x0c\xbf\x16\xdb\xb0\x4e\x30\xc3\x1a\xd1\x0b\x9d\xc3\x15\x56\xc4\x27\x34\x06\x24\x34\x45\x20\xd4\x43\x0e\x1a\x63\x0c\xb6\x0b\x2a\xd8\xf4\x6e\xea\x1e\x26\xf0\x89\xa8\xd2\xcb\xef\xe5\x6e\x2a\x0d\xfa\xf5\xef\xa6\xdf\x68\x74\x40\x1f\x0e\xf0\x82\x4b\xf7\xa5\xdf\x68\xfb\xeb\xf0\xff\x0d\x78\xf8\x7b\x97\xfe\x5a\x6b\xf4\x65\xf9\xf0\xbf\x54\xa7\xfd\xfb\xf4\xd2\xf7\x6e\xf9\xde\x2d\xff\x16\xfe\x93\xf7\xe7\x96\x7f\x59\xf5\xb4\x38\x5e\x63\x47\x0b\x56\x5f\x0b\x0e\xe5\xbf\x3a\x38\x69\xe0\x2f\xa7\xf2\xad\x1b\x34\xde\xaa\xc3\x9d\x15\xe3\x1b\xc2\x11\xfa\xc5\x12\xd2\x0a\x75\xae\xf6\xdd\x7b\x50\xe7\xea\x83\x7e\x79\x1d\xee\xcd\x98\xef\x0b\x5d\x9e\xef\x84\x0d\xac\x7f\x5b\x7e\xc1\x32\x79\x2f\x8b\xbf\x7c\x36\xfe\xde\x4c\xe8\xfd\xc8\xde\x6f\x70\xf1\x76\xbc\x75\x77\x9e\x93\xd5\x70\xcd\x06\xb7\xd3\xaa\x0c\xab\xea\xd7\x94\xc8\x3f\xbe\xcb\xfb\xf6\x35\x92\xac\xfa\x0b\xb7\xbf\x70\x6d\x53\xfd\x85\xfb\x05\x5f\xb8\x7b\x07\x7f\xb3\x37\x11\xa0\x7d\x10\x79\x0f\x8c\xd1\xc7\x90\xef\x70\x71\xfa\x18\xf2\x3e\x86\xfc\x37\x16\x43\xbe\x8d\xf6\xb4\x29\x16\xe5\x5b\xe8\x51\xbd\x1a\xd5\xab\x51\xe1\xef\xbd\x1a\xd5\xab\x51\xbd\x1a\xf5\x85\xa3\x88\xf6\x3a\x54\xf7\x85\xe8\x75\xa8\xce\x4b\xd5\xeb\x50\x4b\x16\xa7\xd7\xa1\x7a\x1d\xea\xb7\xa5\x43\x91\x27\xc2\x94\x84\x64\xb4\x50\xa3\xf8\x90\x71\xd9\xae\x09\x85\xdc\xa1\x41\x0b\x82\x36\xcb\x49\x61\x10\xb8\xf4\x0b\x9a\x63\x89\x78\x14\xe5\xa2\x72\x06\xaa\x7a\xd0\xa9\x20\x58\x11\x68\x41\x7f\xf8\x1e\xf4\x9f\xfa\x74\x5f\x2b\x06\x7f\xc2\xe3\x1a\xb5\x9b\x83\xd0\xf4\x64\xb9\x3c\xb2\xb3\xa9\xff\x23\x27\xdd\xd4\xbf\x17\x24\x6a\x85\xe5\xe3\x8e\x89\xba\x94\x6b\xb1\x11\x51\x43\x0b\xef\x85\xa8\xeb\xd3\xfd\xcd\x10\x75\xd3\xd4\xf7\x81\xa8\x9f\x6d\x1e\xff\x8e\x09\xbb\x06\x0f\xb0\x11\x71\xfb\x56\xde\x0b\x81\x37\x4f\xfb\x37\x43\xe4\x6d\xd3\x7f\x5b\x42\xf7\x29\x92\x9d\x49\xfc\x5e\xd0\xd9\x4c\xab\x19\xa0\xe1\x69\x52\x5c\x5d\x23\xa8\x48\x0a\x5c\x49\xd6\xfe\xd5\xf7\x40\xd2\x7e\xb0\x66\xec\xbf\x19\x5a\xae\xcd\x7b\x4f\x88\xf8\x58\x90\x88\x3f\x41\xbd\xb0\x6e\xc4\x7c\x4b\x80\x82\x81\x5f\x67\x82\x3c\x51\x9e\xcb\x64\x71\x28\x72\x86\x1c\xf3\x47\xbe\x79\x63\xad\x7e\xa6\x49\x82\x38\xd3\xfa\x97\xc2\x42\xb9\xc7\x5a\xff\x16\x3c\x85\x53\x91\x60\xa9\xd0\x23\xe3\xcf\x0c\x4d\x31\x4d\x72\x41\x50\xc6\x29\x53\x47\x23\x76\xce\xd0\xad\x19\x23\xe4\x0d\x1c\xa0\x5c\xea\xb3\x14\x61\xc6\xb8\x42\xd1\x1c\xb3\x19\x41\x98\x2d\x6c\x02\x6e\x41\x19\x88\x0b\x94\x67\x31\xd6\x8a\xef\x9c\x54\xa3\xf4\xfc\x18\xc1\x7c\x47\x25\xa2\x12\x91\xcf\x4a\x90\x94\x24\x0b\xdd\x87\xa6\x7d\xc5\x91\x5d\x1f\x33\x54\x9b\xce\x47\x84\xe0\x42\x42\xc6\xc1\x64\xf1\x2b\x66\x8a\x32\x82\x40\x51\x92\xc6\x34\x77\x88\x2e\xb8\x04\xb3\xcd\x0f\x7f\x91\x28\x4a\x72\xa9\x88\x38\x40\x93\x7c\x26\xb5\xa6\x98\x25\x58\x4d\xb9\x48\xf5\x08\x29\x93\x0a\x4f\x68\x42\xd5\xe2\x00\xa5\x38\x9a\x9b\xb6\x60\x0d\xe4\xc1\x88\xc5\xfc\x99\x49\x25\x08\xf6\xbd\xbb\x87\xe8\xeb\xf0\x99\x21\x00\xf9\xcd\x01\xa4\x1d\xd2\x54\xab\xbb\xc1\xf0\x8b\x1d\x37\x7b\xa2\x1b\x21\x31\x9a\x90\x08\xe7\xd2\x7a\x18\x94\x58\x20\xf2\x79\x8e\x73\x09\x7b\xa7\xa7\x67\x73\x36\x22\x9e\x66\x09\x51\x04\xd1\x29\x52\x82\x92\x18\xe1\x19\xa6\x7a\xe9\xee\xc8\x12\x10\x74\x4f\xf4\x76\x03\x2d\xd5\xff\x02\xea\x77\xca\x05\x41\x31\x51\x98\x26\x4b\xbd\x4e\xf6\xdb\x9e\xcb\xbd\x27\x2e\x57\xde\xf0\xbd\x60\x73\x06\xc4\x7f\x07\x97\x36\xb3\xa6\xfb\x08\x27\x5b\xde\xdf\xb7\x76\x50\x3d\x6d\xbf\x2f\xda\x36\xbb\xb6\x3f\xc4\xfd\x6a\x31\xd8\xdd\x2b\x5a\x14\xd5\x2c\xde\x15\x4d\xbf\x46\x58\x40\xef\x70\xee\x1d\xce\xad\x2b\xf3\x3e\x1d\xce\x7b\xe3\x31\xea\x7d\xce\x2f\xe4\x73\xa6\xb2\x77\x3a\xf7\x4e\xe7\xae\x0b\xd4\x3b\x9d\x7b\xa7\xf3\xfb\x75\x3a\xbf\x24\xee\xf3\x4e\xd1\x9d\xdf\x95\x68\xdd\x8b\xd5\xbd\x58\xdd\x43\x38\xfb\xa9\xed\x8a\x85\xb9\xaf\x3f\xc4\x24\x21\x8a\xb4\xdb\xb3\x88\x48\xb5\xb6\x60\xae\x67\xca\xb4\x1c\x37\x13\x44\xca\x6d\x19\x92\x6f\xf8\x7d\xb2\x25\x3f\xfc\x1e\x6a\xbe\xe7\x53\x3d\x9f\xda\x64\x6a\xfb\x63\x9a\x0d\x0e\xf3\x6b\xd9\x66\x3d\xff\xcd\xf2\x76\xe9\xef\xc1\xb8\x21\x0b\xbf\xa8\xa1\x70\x2d\xb5\x2b\xee\x0f\xb7\xa5\xf3\x2d\xf9\xb1\xe9\xeb\x7d\x32\x63\x33\xf6\x9e\x13\xf7\x9c\xb8\xe7\xc4\xef\x9b\x13\xbb\x93\xfc\xa6\x2e\x32\xe3\xa7\x1b\x67\x09\x66\x63\x1a\xcb\xe3\x7f\x16\xba\xfc\x4b\x79\xc8\xf4\x81\x8a\x4d\x8a\xa9\x4f\xe9\x14\xbf\xe8\x4f\x92\xc2\x60\xee\x31\x33\x57\x38\xd1\x8c\x8d\xfd\x26\xc1\xec\x3c\x7e\x17\x7e\xb4\xc6\xd9\xbf\x86\x4f\x6d\x1b\x3e\x8e\x15\x78\x3a\x30\x65\xc6\x84\x57\xe4\xd5\x96\x0c\x94\xfb\x71\xc2\xb7\xe1\xea\xc1\xc4\x02\xc6\xee\xf8\x75\xb0\x28\xfb\x37\xed\xde\xaf\xd3\xe7\x12\xf6\x9e\x8b\x8e\x13\xee\x3d\x17\xfb\xeb\xb9\x78\x2b\x77\xe4\x2b\x1f\xcf\xd7\x12\xeb\xba\x07\xe1\x9b\x68\x35\x08\x6a\xcd\xb3\x84\xe3\x78\x99\x2b\xa6\x10\xbc\x42\x70\x94\x95\x91\xf8\xc5\x67\xef\x41\x58\x2b\x46\xfb\x1b\x8b\xe4\xab\x4f\x7c\x5f\xb4\x94\x57\x0c\xe5\x6b\x26\xf1\x35\x54\x92\xf7\x81\x9f\x5a\x8c\xb7\x0f\xed\xeb\x2d\x4a\x6f\x6f\x51\xea\x43\xfb\x7a\x15\x70\xcf\x54\xc0\x3e\xb4\xaf\x0f\xed\xeb\x15\xe4\xe5\xd3\xee\x15\xe4\x2f\x22\xb4\xaf\x93\xa8\xfd\x82\xd8\x9b\xdb\x0b\xdd\xbd\xcc\xed\xde\xeb\x65\xee\x5e\xe6\xfe\x42\x65\xee\xfd\x58\xe1\x5e\xe0\xee\x05\xee\x5e\xe0\xee\x05\xee\x5e\xe0\xde\xf9\x32\xf6\x02\xf7\x6b\x16\xe8\x6c\x96\xba\x57\x24\xd9\xbc\x57\x5f\x4e\x2f\x6e\xf7\xe2\xf6\x7e\x8b\xdb\x7b\x33\xa1\xf7\x53\xe6\xb1\xdb\x7c\xfa\x22\xe5\x7d\x91\xf2\xbe\x48\xf9\x8b\x17\x29\x77\x5f\x77\xc8\xf8\xb0\x87\x4b\x61\x95\x4b\x03\xf8\x28\xc8\x8c\x4a\x05\xec\xbf\x8b\xbc\xb2\x3a\xd1\xe3\xbd\xca\x29\x7d\xaa\x87\x7f\xda\x4b\x2d\xbd\xd4\xf2\x1b\x95\x5a\xf6\x28\x16\x6c\x2f\x32\x56\x52\xac\xa2\x39\x9e\x24\x64\xec\x8d\x3e\xb2\xab\x1e\x7c\x41\xa5\x92\x28\xca\xa5\xe2\x69\xfb\xe5\x72\xe9\x7a\x18\xf8\x0e\x4e\x39\x9b\xd2\x59\x6e\xee\x16\x03\xce\x19\x9c\xe8\x42\x12\x5c\x64\x64\x95\xa7\xaa\xa1\xf5\x77\x71\x2d\x35\x0f\xfd\xb5\x6e\xa7\x75\x04\xf7\xc2\xc8\x67\xa5\x6e\x2d\x6b\x8d\x6f\x87\x77\xd7\x0f\xb7\xa7\xc3\x13\x34\xc8\xb2\x84\x1a\xbb\xbb\x21\x05\xfa\xab\x9e\x14\x52\x58\x3e\x16\x7b\x29\x0c\x99\x1b\x0c\x5b\x30\xf4\x6b\xd9\x18\x1d\xa2\xd3\x8b\x87\xbb\xfb\xe1\x6d\x4b\x83\x96\x50\x20\x6f\x95\xa4\x59\x82\x15\x89\xd1\x63\x3e\x21\x82\x11\x2d\xed\x58\xa4\xdb\xc2\xfc\x6f\x1a\x1d\xfe\xf7\xf0\xf4\xe1\xfe\xfc\xfa\x6a\xfc\xd7\x87\xe1\xc3\xf0\x04\x39\x8a\xd3\xcd\xea\x71\xe9\x51\xc4\x0b\x86\x53\xad\x81\xe8\x1f\x8a\x4c\xd9\x7f\xe4\x24\x27\x08\x4b\x49\x67\x2c\x25\x80\x08\x5c\x6a\xd1\x0d\xf8\x62\xf0\xdd\xf0\xa2\xdc\xf2\x9c\x84\xf0\xbb\x28\xc1\x13\x92\x58\x7f\x04\x98\xd8\x35\xa1\x07\x50\xc5\xc6\x51\x91\x9b\x55\xfd\xeb\xc3\xe0\xe2\xfc\xfe\xe7\xf1\xf5\xc7\xf1\xdd\xf0\xf6\xc7\xf3\xd3\xe1\xd8\x4a\x95\xa7\x03\xdd\x6f\xa9\x27\x2b\x7c\xa2\x7f\xe4\x38\xd1\xda\x09\x9f\x3a\x3c\x5e\xf4\x3c\x27\x0c\xe5\x0c\x28\xce\xa8\x3c\x5a\x0f\xf2\x9d\xea\x53\x66\x66\x74\x73\xf1\xf0\xe9\xfc\x6a\x7c\xfd\xe3\xf0\xf6\xf6\xfc\x6c\x78\x82\xee\x48\x02\x4a\x81\x5b\x74\xd8\xc5\x2c\xc9\x67\x94\x21\x9a\x66\x09\xd1\xab\x81\x6d\x36\xf1\x1c\x3f\x51\x2e\xec\xd1\x9d\xd1\x27\xc2\xcc\x3a\xc2\x99\x85\xf6\x9d\xf0\x3d\x0e\x96\xee\xfa\xea\xe3\xf9\xa7\x13\x34\x88\x63\x3f\x07\x09\x6d\x94\x28\xc7\xc1\x3a\x1f\x96\x87\xad\x99\x03\x74\x6f\x88\x88\x3f\x11\x21\x68\x4c\x2a\x74\x34\xb8\xbb\x3b\xff\x74\x75\x39\xbc\xba\x87\x15\x53\x82\x27\x12\xcd\xf9\x33\x98\xb2\x61\x86\x60\xe1\x7e\xc2\x34\x81\xce\xdc\x66\x71\x86\x9e\xe7\x14\xdc\x1f\x00\xcc\xec\x7b\x36\xfa\x99\xc8\xd9\x9b\x5b\x67\x4b\x07\xaf\xae\xb6\x54\x4f\x52\xfd\x8d\xca\xb1\x58\xf6\x42\x89\xca\xeb\x2f\xae\xa2\xd6\xfa\x17\x15\x72\x6b\x57\xd6\x6a\xf4\xd2\x3e\xd3\x62\xaf\x3b\xeb\x6a\xe5\x35\x7c\xbd\x6b\x96\x28\x41\x23\xf9\xb2\x50\x4f\x22\x67\x8a\xa6\x04\xd9\xce\xec\xe1\xdc\x21\xfc\xd3\xa5\x69\xf8\x3d\x5c\xb0\xb5\x52\x0e\x9f\x88\xb2\xc3\xef\x55\xc0\x5e\x05\xdc\x0f\x15\xf0\xbd\x65\xfb\xc7\x24\xab\x77\x58\x99\x18\xbc\x63\xbc\x5e\xb5\x20\x0d\x63\x4f\xb4\x16\xd5\x84\x3c\x91\x04\xa4\x3c\x25\xb0\x56\x1a\xad\xec\x32\x11\x04\x3f\x6a\x81\x2f\xe6\xcf\xa1\xe4\xd2\x80\xdc\x8f\x76\x73\x0b\x77\x09\xe2\xf8\xd3\x1f\x5f\xef\xb2\xd0\xcb\x1d\xbf\x46\x09\xef\x5b\x08\x92\x59\x8a\x11\x18\x24\xd8\xff\x62\x2d\xc1\x2b\x6e\x8b\xe0\x8b\xf7\x70\x51\x84\xc3\xdd\x23\xad\xeb\x36\x54\x82\x1d\x0b\x4d\x89\xc2\x31\x56\x58\x1f\x9a\x19\x51\x47\xe8\x9a\xc1\xb3\x7b\x2c\x1f\x0f\x90\xbb\xf2\x34\x5b\x29\xac\x0c\xaf\x90\x5a\xff\x4e\x0c\xf8\xeb\xf3\xf1\xfe\xfa\xee\xaf\xef\xe6\x95\xe9\xc3\x3c\x5b\x56\x78\x57\x17\xe3\x5a\x3e\xaf\xdd\xdd\x5f\xa6\xc5\xf7\x7b\x85\xbd\xae\x93\x6b\xa7\x17\x9a\xa9\x9c\xd5\xdf\x56\xe6\xff\xfa\xdb\xaa\xbf\xad\xfa\xdb\x6a\x0f\x56\xf8\xcd\x1d\x86\x0d\xdc\xfd\x4d\x3d\x86\xab\xb4\xd3\x8d\x21\xef\x0a\x6d\x74\x1d\xd0\xbb\x5f\xba\x62\xdb\x15\xdf\xd0\xf7\xe1\x23\x0c\x26\xf9\x1a\x69\x6d\x3b\xbd\xcc\x4d\xbe\x48\xaf\x9f\xbe\xe0\x8d\xdf\x23\x10\xee\x14\x81\x70\x3f\xe6\xfa\x22\x29\x70\x6f\x63\x31\x7d\xfb\xb4\xb7\x1e\x6a\xb0\x4f\xec\xea\x13\xbb\xe0\xf7\x1e\x6a\x70\x77\xd4\xfa\xb2\xd2\x35\x8f\xc9\xb8\x12\x25\xe0\xff\x39\xae\x7a\x7e\x4a\x4f\x42\x37\x50\xe9\x41\x91\xe9\x06\xad\xd3\x78\x97\x45\xa4\xae\x78\x4c\x3a\x47\x12\x94\x5e\xde\x73\x19\xdc\xcd\xd3\xc8\xe2\xa5\x81\xbf\xb0\x24\xde\xb2\xe5\x5f\xa2\x61\xa7\x81\x80\x7b\x2b\xcf\xca\x85\xfa\x52\xe3\x0b\x0a\x0e\xf5\x8e\x3c\x15\xdd\xd8\xb8\x8b\x69\x1c\xb7\x30\xf3\xe6\xe7\x9e\xa5\x37\x3f\x7e\x19\xcc\xa0\xee\x1c\x1d\xcc\x2a\xe1\xdb\xef\xc3\xae\x12\x8e\xf8\x35\x2c\x2b\x4b\xf7\xfe\x8b\xe3\xea\xcb\x28\xb9\xe7\xed\x1d\x97\xeb\x4b\xe5\xf0\x3d\xc4\xcf\x32\x5b\x47\x8f\xa1\xd3\x9b\x5a\xf6\x67\xc2\xbd\xa9\xe5\x5d\x9b\x5a\x8c\x8b\x76\x9c\x61\x41\x98\x6a\x10\xa9\xab\xd7\x09\xbc\x1e\x62\x2e\x38\xa9\x03\x1a\x40\x5a\xa2\x45\xf6\x42\xf6\x57\xd5\x97\x65\x7b\xb1\x82\x41\x90\x09\x79\xfc\xcf\xe2\x6f\x2f\xac\x97\x2a\x40\x2c\x89\x4e\x32\x58\xff\x52\xdf\xd1\xb9\x0d\x54\xda\x3e\x57\x12\xab\x92\x28\x08\x41\xd4\x2b\xe3\x99\x6e\xcc\xdb\xef\x2b\x45\xb2\x36\xe8\xd7\x8d\x6d\xaa\x6f\x7c\xb7\x03\xe4\x76\x86\x9a\x74\xbf\x20\xa7\x4c\x4b\xa3\x7c\x5a\x5c\x0c\x12\x3d\xd3\x24\x01\x44\x11\xc8\x78\x6c\xbb\x01\x7e\x73\x11\x0f\xad\x3b\xff\xa6\x71\x0f\x4d\xdc\xa1\x89\x25\x74\xb1\xa7\xee\x2a\x67\xda\x11\x1b\xa4\xb3\x82\x36\xb4\xc2\x00\xfb\x65\x70\x82\x4f\x44\xbd\x16\x1b\xd8\xf4\xec\x2f\x3d\xf7\x82\x4c\x89\x20\x2c\x22\x7b\xe8\x6d\x5f\x27\x0c\xe4\x27\x33\x49\x1b\x03\xe2\xa1\x04\xc2\xa9\x2a\x6e\xf5\xb4\x92\xa8\xdb\x67\x92\xf7\x99\xe4\x7d\x26\x79\xf5\xa8\xf7\x99\xe4\x7d\x26\x79\x63\x0e\x44\x4c\x12\xa2\x48\xab\x54\x71\x06\x8f\xdf\x4a\xaa\x30\xbd\x7f\x19\x82\x85\x99\x4b\x2f\x5b\xfc\x66\x34\x0b\xb7\xe1\x7b\xa1\x59\x98\xb3\xb6\xca\xfc\x50\xfa\xb1\x21\xc4\xfa\xd5\x4d\x12\x9b\x30\x8d\x92\x5d\xe2\x0c\x5e\x7f\x97\xac\xa3\x3a\xf4\xde\x46\x81\x82\xad\x7b\x39\x4e\x52\x3b\x02\xdd\x26\x6e\x3d\x86\xef\x77\xde\xfb\xc2\x41\xdb\xe8\x7e\x5f\xf9\xe8\xc6\x49\x29\xfb\x62\xb1\xf9\x82\x78\x64\x6f\xbd\x79\xe3\x5c\x89\x1a\x33\x7c\xb7\xd3\xed\x8d\x55\xbd\xb1\xaa\x37\x56\xf5\xc6\xaa\xde\x58\x85\x7a\x63\xd5\xda\xc6\xaa\x2f\x48\xa6\xea\x0d\x57\xbd\x58\xb5\xbb\xe9\xee\xab\x96\xb9\x4f\xd6\xba\xce\x28\xe9\x45\x0e\xd5\xca\xc8\x7b\x3b\xed\x5f\x56\x84\xdc\xdf\xb8\x11\xbc\x1f\x7e\x25\x5f\x9a\x25\x6d\x13\x58\xec\x76\xf4\x8b\x8d\x2b\xee\x4b\x87\x36\xae\x55\x1f\xf6\xbc\x64\x71\xfa\xb0\xe7\x3e\xec\x79\xef\xc2\x9e\x77\xae\xac\x64\x5c\x2e\x03\x24\x32\xa5\xb3\x96\xe6\x3f\xbb\x3b\x1b\x12\x8d\x80\x14\x0c\xca\x71\x4c\xb2\x84\x2f\xc0\x92\xb2\xe4\x3a\x77\x5d\xdc\xd4\x24\xea\x7d\xbf\xd1\xdd\xc8\x5f\x4b\xe7\xd8\x17\x99\xb4\x98\xf7\x5e\x48\xa1\xc7\xff\xac\xa4\xf3\x77\xc2\xcb\x64\x88\x7c\xa6\x12\x6e\xa5\xd5\x84\x3d\x62\xcd\x4f\x82\xd2\x85\xf6\x1e\x9c\xe4\x2a\xc8\xdd\x93\x5a\xb0\xca\x88\x50\x8b\xe0\x4d\x92\x66\x6a\xf1\x5f\x23\x46\x95\xf7\xb0\xd1\x19\xe3\xc2\x70\x35\xfd\xf1\x1c\xb3\x38\x21\x42\x5f\xaa\xae\x9d\x08\x33\xc6\x15\x88\x1b\x30\x83\x18\x3d\x51\x6c\x84\x93\xc1\xcd\x79\x67\x3f\xf3\x3b\x3a\x5d\xaf\x5d\xac\x6e\xc5\x5d\xf7\x29\xe1\x13\xa8\x60\x99\x97\x75\x7a\xdd\x40\xef\x19\x2d\xed\xdc\x5b\x31\x04\x85\xe5\x63\x15\x38\xa4\x9c\x85\x3e\x5e\x0a\x25\xb2\xe2\xdd\x12\xc6\xfc\xf2\x57\x2b\x70\x23\xe5\x67\x16\x80\x04\x1e\xc3\x90\xab\xe3\x70\x3f\x86\x1d\xba\xdf\x8a\x96\xdd\x2f\xae\x74\x37\xfc\x28\x88\x12\x8b\x31\x56\x4a\x33\x99\x5d\x62\x9c\xdc\x63\xf9\xd8\x19\xe3\xa4\xf4\xf2\x9e\xb3\x9c\x12\xc6\x49\x79\xe0\x2f\xce\x72\x3a\x52\xe7\x0a\xce\xf4\xfe\xf2\xe3\xbb\x9e\xb5\x35\x26\xfe\x5b\xc9\x95\xef\xc6\x7b\x56\x99\x69\xdf\x63\xde\xfc\x32\x66\xba\x37\x23\xac\xf0\xf3\x2f\xf1\xe4\x96\x6f\xa7\xfe\x88\x2e\x5b\xa3\x2f\xae\x10\x6e\x45\xe8\x58\x31\xb7\x77\x52\x10\xb7\x2a\x37\xed\x7a\x54\x2f\x63\xe6\x0e\x76\x63\x9d\x18\xa0\xf3\x32\x5a\xb9\x3f\x43\x2e\x2a\xa8\x28\x3d\x3b\x87\x44\x6b\x2a\xc3\x84\xf8\x88\x0b\x23\x79\xc5\xf6\xcc\x1a\xb3\x9d\x01\xf3\x3d\x41\x03\x14\xdb\xda\xfc\x82\x64\x82\x48\xc2\x94\x51\xb5\x4d\xbd\x2b\x57\xde\x9f\x32\x6b\x21\x3a\xc3\x0a\x9f\x62\x85\x13\x3e\x3b\x42\x03\x5f\xd8\x9f\x4a\x84\x13\xc9\x11\x76\x84\x43\x62\xd7\x04\x66\xb1\x63\x0f\x18\x45\x3c\xcd\x68\xe2\x91\xda\xbd\x15\x9f\xb2\x98\x3e\xd1\x38\xc7\x89\x47\xc6\x1e\xb1\xe1\x13\x61\x2a\x07\x15\x0e\x27\x09\xb2\xdd\xba\x17\x02\xfd\xdc\x8d\x52\xd2\x94\x26\x58\x20\xc5\xed\x68\xaf\x6d\x5b\xe8\x7e\x4e\xfc\x58\x1d\x0a\x38\x4a\xf1\x23\x91\x88\x2a\x94\x71\x29\xe9\x24\x29\x8e\xf1\xc3\x39\x82\x71\x9f\x5e\x9c\x83\x69\x34\x52\x88\x1b\x3e\xe8\x3a\xb7\x7e\x02\xd7\x63\x8a\x19\x23\xd0\x31\x57\x73\x22\x6c\xf7\xf6\xe5\xb7\xb6\x72\xbe\x35\x46\x74\xbb\xc5\x34\x1c\xd9\xdb\x29\x9d\x9d\x35\xce\xae\xea\x66\x37\x5d\xb3\x5d\xd1\x7c\x01\x2f\x6d\x77\x6d\xf0\x82\xca\xb2\x3a\xf8\x2e\x5c\xb6\xa5\x11\xbf\x06\x3e\xda\x6f\x54\x11\xec\xb5\xc0\x17\x59\xb7\x2f\x55\x05\xdc\x73\xfd\xaf\x47\x76\xeb\x51\xec\xfb\x00\x8c\x1d\x2e\x4e\x1f\x80\xd1\x07\x60\x7c\xb1\x01\x18\xed\xda\x04\x8d\xb7\x4e\xd7\x5b\xb3\x82\x94\x37\x0a\x88\x5f\x40\x94\xc2\xf2\xb1\x6b\x4d\x29\x2d\x2a\x9f\xc7\xef\x42\xaa\x6f\x9c\xf0\x6b\x48\xf7\x7d\x9d\xa2\x9d\xd6\x29\xda\xbb\x69\xf7\x82\x5f\x2f\xf8\xf5\xb2\x4d\xc7\x09\xf7\xb2\xcd\xfe\xca\x36\x6f\xa5\xb0\x7c\x49\x10\xba\x5a\x78\x2a\x65\xc6\x2c\x0d\xb0\x35\x70\x34\xe0\x1e\xc8\xb3\x84\xe3\x78\x55\x10\xce\x2f\xa8\x90\x6b\x96\x88\x66\xa6\x5d\xfd\xc1\x9e\x4b\x66\xb5\xf8\x1b\x33\xf2\xdf\x42\x4c\x6d\xeb\xd4\xdf\x34\xac\x16\xe8\x17\x82\xc9\x4a\x41\x69\x2f\xa5\x85\x54\x69\xba\x93\xc2\x21\xff\xb8\xe7\x54\xed\xb7\xf4\x35\xd4\x8b\x2f\xd8\x41\xd0\x3b\x01\x7e\x9b\x85\xcf\xf7\x46\x6a\xed\x55\xbb\x3e\xab\xb2\x37\xea\xf7\x8a\x6f\xaf\xf8\xee\x7c\x19\xf7\x49\xf1\x7d\x43\x89\xda\xa4\x89\xbc\x48\x19\xc3\xcd\x64\xeb\x5e\xb4\xee\x45\xeb\x5e\xb4\xfe\x62\x45\xeb\xfd\x58\xe1\x5e\xae\xee\xe5\xea\x5e\xae\xee\xe5\xea\x5e\xae\xde\xf9\x32\xf6\x72\x75\x45\xae\x86\xbf\x5c\x9a\xf4\xba\x42\x76\x67\xe1\xba\x43\x4e\xf4\x7b\x91\xac\x7b\xa9\xba\x97\xaa\xf7\x5b\xaa\xde\x9b\x09\x7d\x79\x89\x90\x7d\x2a\x61\x9f\x4a\xd8\xa7\x12\xbe\x45\x2a\xa1\xe3\x25\xcb\x24\x94\xba\x60\xf1\x63\x8d\x03\xed\xad\x6c\x51\x8c\x76\xd3\xf0\x8e\x5d\x2d\xb5\x03\x9a\xdf\xa4\xd2\x54\xe9\x37\xd7\xd0\x1e\xd5\x9f\x3a\x70\xd2\x82\x66\x14\x6e\x7c\xab\x11\xc2\x7e\xb2\x6f\xbe\x2f\x30\xf0\xfa\xa8\xfb\xfa\x53\x28\xd8\xb5\xbe\xfe\xd4\x0b\xce\xdb\x1d\xae\x15\x33\x77\x34\x6a\x6c\xbc\xef\x74\xda\x6f\x0e\x2e\xd7\x7e\xd2\xdf\x34\x5c\xae\xf1\x26\xa9\x25\xef\x1c\xff\xb3\xf1\xa2\x78\x83\xb2\x5b\x6b\xdf\x0e\x9f\x88\xfa\x52\xae\x86\xbe\xec\x56\x5f\x1f\x62\x47\xd3\xdd\x88\xf5\xbf\xdb\xd9\xf6\x45\xc6\xfa\x22\x63\x7d\x91\xb1\xbe\xc8\x58\x5f\x64\x0c\xfd\xc6\x8b\x8c\xad\x2d\x3e\x9a\x71\x7c\x29\x12\x64\x5f\x64\xac\x17\x22\x77\x37\xdd\xdf\x96\x10\xb9\x87\x16\x84\xbd\xa8\xa6\xe6\x2d\x08\x6f\x8e\xfb\xe1\x46\xd2\x15\xfb\xc3\x2d\x68\x8f\xff\x61\xff\xaf\xc7\xff\xe8\xf1\x3f\x5a\x66\xdd\x07\xb3\xf6\xf8\x1f\xa8\x0f\xd7\xec\xc3\x35\xf7\x39\x5c\xb3\xc3\x36\xf6\xf8\x1f\x1d\xc5\xb9\x17\xc2\x00\x71\x32\xd7\x5a\x38\x20\x3f\xd5\x15\x8d\xbd\x95\xd2\xdc\x58\x7f\x3b\x38\x20\x8d\xd3\xde\x0b\x95\xe4\x15\x71\x40\x9a\xe8\xba\xb3\x02\xf2\x3e\xf0\x40\xdc\x68\xfb\xc4\xc5\x3e\xc4\x7a\xff\x43\xac\xf7\x2e\x71\x71\x6f\x24\xd9\x5e\xdd\xeb\x73\x17\xfb\xdc\xc5\x5e\x19\xee\x95\xe1\x9d\x2f\xe3\x3e\x29\xc3\x6f\x2c\x61\xbf\x20\x2e\xc8\x76\xb2\x76\x2f\x6a\x9b\xf7\x7a\x51\xbb\x17\xb5\xbf\x50\x51\x7b\x3f\x56\xb8\x97\xb3\x7b\x39\xbb\x97\xb3\x7b\x39\xbb\x97\xb3\x77\xbe\x8c\xbd\x9c\xfd\x6a\x38\x21\x4d\xc2\x76\xc7\x7c\x9b\xf7\x24\x69\xf7\x52\x76\x2f\x65\xef\xb7\x94\xbd\x37\x13\xea\x31\x43\x7a\xcc\x90\x1e\x33\xa4\xc7\x0c\xd9\x48\xbe\xf9\x37\x7b\x2c\x3f\x04\x37\xb1\xbf\xb2\x3f\x7c\x97\xf0\xc9\xfd\x22\x23\xfa\xbf\x67\x34\x25\x4c\x82\x34\x4a\xd5\x22\x94\x67\x5a\x56\xbe\xbe\xe6\x1f\xee\xce\xaf\x3e\x5d\x84\xd9\x34\x1f\x2e\x1f\x2e\xee\xcf\x6f\x06\xb7\x7e\x5d\xfc\xac\xc2\xb5\xb0\xdf\x95\x44\x32\x4b\xf2\xb7\x44\xeb\x9e\x70\x6a\xee\x14\x56\xb9\xdc\x6c\x64\xb7\xc3\xbb\xe1\xed\x8f\x90\x0d\x34\x3e\x3b\xbf\x1b\x7c\x77\x51\x22\x88\xd2\xf3\xc1\xe9\x5f\x1f\xce\x6f\xdb\x9f\x0f\xff\xfb\xfc\xee\xfe\xae\xed\xe9\xed\xf0\x62\x38\xb8\x6b\xff\xfa\xe3\xe0\xfc\xe2\xe1\x76\xb8\x74\x3d\x96\x8e\x76\xb9\x12\x22\x61\x91\x20\xce\x1f\x45\x96\x6b\x88\x62\x0d\x91\x17\x1f\x1d\x3b\x6c\xea\xeb\x04\x3d\x58\x9d\x9e\xda\xc6\x0d\x83\x0d\x1a\x32\xca\x48\x4c\x25\x9e\x24\x24\xae\xb5\xe4\xd6\xb0\xad\x25\x5c\x1a\xd4\xb3\xd6\x9e\xbd\xc8\xa9\x79\x5e\x64\x78\x01\x82\x1c\x45\x45\x58\xdc\xd0\x87\xd9\x87\xd6\x1e\x98\xe6\x5d\xf4\x89\x94\x7a\x8a\x72\x21\x08\x53\xc9\x02\x91\xcf\x54\x2a\x59\x6b\xd4\x6d\x5f\x5b\xb3\xf6\x4e\xf5\x0d\xce\xb1\x44\x13\x42\x58\x79\xfc\x82\x24\x04\xcb\x86\x31\xdb\xdd\xef\xb6\x2c\x7e\xaf\xac\x35\xc6\x5c\x46\x53\x4c\x93\x5c\x90\xca\x69\xe1\x69\x86\x05\x95\x9c\x0d\x3f\xeb\xbb\x4c\x1f\xe4\x6b\xf8\x9c\x8b\xcd\x4e\xcc\xf0\xaf\x21\x05\x5f\x95\xff\xf9\xe9\xbe\xfc\xaf\xd2\x99\xbf\xb8\x2f\xff\x6b\x39\xad\x07\x0d\x57\x29\xfb\x10\x7d\xba\x3f\x41\x9f\x20\xc4\x49\xa0\xfb\x39\x36\x14\x7b\x71\x7f\x82\x2e\x88\x94\xf0\x4b\xf1\xb1\xa2\x2a\x81\xb9\x7d\x47\x19\x16\x0b\xe4\xa6\x6f\x12\x5d\x71\x34\x47\xc4\x2f\x4d\x75\xf1\xd8\xdf\x73\x06\xaa\x7b\xb1\x7a\x17\x7c\x46\x23\x9c\x6c\xb7\x88\x83\xab\x12\x1f\xb8\xbe\x5d\xba\x14\xe1\xdb\xf5\xb5\x18\x5c\x9d\x41\x12\xa9\x1b\x6a\xc3\xcc\xaf\x88\xd4\x44\x12\x71\x16\x5b\x2f\x8d\xbe\xfd\x17\x81\x50\xff\x77\x0e\x89\xb8\xb9\xa4\x6c\xa6\x5b\x44\xc7\xe8\xfa\x76\xc4\xae\x45\x6c\x0c\xa1\x44\x4b\xc3\x86\xe6\xa8\x44\x8c\x2b\x44\xd3\x8c\x0b\x85\x99\xd2\x8a\x00\x88\x01\x76\x45\x0c\x07\x38\xe5\x69\x9a\x2b\xac\x0f\x5a\x6d\x51\x99\x31\x87\xdc\x11\x75\x1e\x83\x6b\xa5\x61\x0d\x8d\x9c\x50\xcc\x25\x13\xba\x7d\x2d\xa3\x94\x75\x68\x1a\xd7\x54\x59\xd7\x04\x16\x02\x97\xa5\x89\x0f\x54\x91\xb4\xfa\x7e\xc7\x20\xcf\x7f\x35\x1a\x08\x4e\x4d\x52\x05\x11\x03\x11\xcd\xa9\x22\x91\xd2\x47\x70\x23\x9a\x78\xb8\xfa\xe1\xea\xfa\xa7\x50\x82\xf8\x30\xb8\x3c\xfb\xf3\x7f\x94\x7e\xb8\xbd\xac\xfd\x30\xfe\xf1\xcf\xb5\x5f\xfe\x7f\x4b\xe9\xa9\xda\x53\x4d\xcf\x0f\xe6\x72\x08\x22\x35\xd8\x84\xdd\x54\x11\x4d\xf1\x8c\x20\x99\x67\x9a\x02\xe4\x51\x79\x7f\xb5\x48\x79\xc1\x71\x4c\xd9\xcc\x64\x80\x5e\x50\x45\x04\x4e\x2e\x71\xf6\xd1\xd9\xaf\x37\x58\x9d\xff\x7b\x57\xca\xd7\xfd\xf0\xf3\xe0\x32\xcc\xf8\xfd\x70\x73\x7b\x7d\x7f\xbd\x74\xd6\xa5\x16\xea\xc7\x48\x3f\x3e\x81\xff\x45\xc7\x48\xb7\xee\x25\xdf\x94\x28\xac\x35\x02\xf4\xb5\x49\x9a\xf3\x89\x34\x94\x25\x70\x6a\x32\x41\x53\x0a\x57\x8a\xb1\xe0\x7d\x63\x84\x6b\xaf\x3d\xf8\x73\x63\x3e\x00\x6d\xd9\x5d\xca\x2c\xc6\x22\x46\x7f\x97\xd5\xf4\x71\x30\x1c\x9b\x1f\x48\x8c\x0e\xd1\x5c\xa9\x4c\x9e\x1c\x1f\x3f\x3f\x3f\x1f\xe9\xb7\x8f\xb8\x98\x1d\xeb\x3f\x0e\x09\x3b\x9a\xab\x34\x31\xe9\xf2\x7a\x15\x4e\xd0\x8d\xe0\xfa\x0a\x01\x05\x9d\x08\x8a\x13\xfa\x2b\x89\xd1\xc4\xf0\x3f\x3e\x45\xbf\x44\x5c\x90\xa3\x62\x63\xac\x51\xc9\xde\x23\xd6\xf0\x74\xac\x5f\x6a\x60\x26\xd5\xfd\x44\x31\x89\x68\x6c\xc5\x0c\xc2\x22\x0e\x96\x47\xe3\xab\xd0\xed\xb9\x4c\x43\xad\xd1\x64\xb9\x2a\x96\x33\x50\x56\x70\x4c\x82\x6c\x77\xc5\xcb\x04\xa7\x15\x9f\x73\xa3\xb6\xe6\x5a\x45\xd7\x77\x2b\x86\x5b\xd5\xbd\x9a\xe9\x09\x47\x3c\x41\x93\x7c\x3a\x25\x22\x74\x48\x1f\x68\x6d\x86\x4a\x24\x48\xc4\xd3\x14\x24\x06\xfd\x55\x2e\x0d\x55\xc3\x8a\xd9\xd1\x1e\x8d\x18\xec\xbf\x56\x73\x80\x02\x62\x0e\xac\x8e\x11\x12\x23\xcc\x16\xa6\x9b\x49\x3e\x0d\xdb\x37\x30\x14\x38\x46\x54\x8d\xd8\x20\x49\x90\x20\x29\x57\x24\xc8\xa1\x04\xe7\x59\x79\xc1\x81\x45\x0a\x92\x25\x38\x22\xb1\xa1\x87\x84\x47\x38\x41\x53\x9a\x10\xb9\x90\x8a\xa4\x61\x03\x5f\x83\xad\x46\xaf\x19\x95\x28\xe6\xcf\x2c\xe1\xd8\xce\xa3\xfa\xd9\x37\xe5\xd3\x38\x74\x10\x01\x43\x21\xb8\x80\xff\xf9\x81\xb2\x78\x67\x1c\xea\xe1\x6e\x78\x1b\xfe\xfb\xee\xe7\xbb\xfb\xe1\xe5\x7a\xdc\xc7\x53\x16\x0c\x0f\x74\xf8\x13\x74\x67\x16\x81\x0b\x2d\x11\x89\x96\x49\x5d\x5a\x52\x2a\x7e\xe0\xf1\x86\xdc\xf7\x72\x70\xf5\x30\x28\x71\x94\xbb\xd3\xef\x87\x67\x0f\x15\x7d\xc0\xce\xaf\x24\xc3\x1b\xf5\x2f\xfc\xed\xf4\xfb\xf3\x8b\xb3\x71\x83\xc2\xf8\xe1\x76\x78\x7a\xfd\xe3\xf0\xb6\xd0\xed\x1a\x97\xa8\x32\x98\x2a\xb3\xba\x37\x4c\x69\xce\x63\x34\x59\x34\x03\x42\x68\xc9\x39\x01\x5f\x6c\x01\x89\x62\x5a\x3d\x01\xde\xe4\xb0\x39\x8a\x2f\x52\x1e\x93\x03\xfb\x0e\x20\x69\x18\xe3\x8a\x91\x98\x9b\x1b\xd6\xbd\x63\x16\x18\x2a\x0c\xc8\x85\x5f\xb8\x13\x34\x40\x52\xbf\x98\xeb\x43\x2d\xe8\x6c\x06\x86\xc3\xca\x50\x4d\x6b\xf6\x53\x58\x5e\xf8\xce\xec\x7f\x26\x38\x9c\x73\xdd\xad\xb5\x38\x7b\xab\x84\xf9\x10\x50\x57\xca\x2d\x0a\x0c\x06\x87\x86\xa1\xb9\xcd\xd2\x8b\xd0\xba\x5e\xe6\x3c\x1a\x7b\x91\x3e\x5c\xc0\xb6\xa4\xb1\x77\x66\x82\x3c\x51\x9e\x07\x9f\x5a\x60\x8f\xd2\x8e\x37\x36\x5f\x2c\x00\x2c\x9b\x31\x8a\x54\x9a\xf1\xe4\xd1\xd8\x82\x66\x61\x4f\xd0\xc2\x54\xf0\xb4\xa1\x8d\xf2\x31\x39\xbf\xbe\x53\x02\x2b\x32\x5b\x9c\x59\x96\xb1\xf9\xf1\x38\xbb\xfe\xe9\xea\xe2\x7a\x70\x36\x1e\x0e\x3e\x95\x4f\xbc\x7f\x72\x77\x7f\x3b\x1c\x5c\x96\x1f\x8d\xaf\xae\xef\xc7\xee\x8d\xa5\x24\xdf\xd2\x41\xfd\x9e\x2e\xbf\x78\x82\x34\xcb\x05\xd6\xe8\x00\xef\x02\xfe\x38\x21\x53\x2e\x0c\x9f\x4f\x5d\xe8\x82\x15\x61\xdc\xda\x5a\x5d\xac\x32\x8b\x13\xb0\x8c\x35\x35\x69\xac\xde\x4a\x10\x9c\xc2\x3d\x81\x19\x1a\xb2\xf8\xf0\x7a\x7a\x78\x67\x7e\x4c\xb1\x78\x24\xc2\x7f\xfa\x2c\xa8\x52\x84\x95\x54\x3a\xec\x86\xec\x95\xc4\xa2\x83\x23\x74\xab\xf9\xbe\x7e\xdf\x5f\x6a\x9a\xd8\x63\xa2\x30\x4d\xa4\x1d\x6c\x69\x5d\x4f\xd0\x05\x16\xb3\xc2\x0e\xf7\x35\x9f\x4e\x4d\x63\xdf\x98\x61\xe8\x3b\xac\x34\x8b\x06\xde\xab\x49\xc3\xdd\x8b\xd0\x9f\x7d\xd9\xcb\xc3\x75\xaa\x7a\xc8\xb6\xa3\xa9\x87\x1b\x58\x71\xa3\xb1\x97\x74\x43\xfb\xa4\x81\xd6\x60\xe2\xe6\xf1\xf2\x4b\xa6\xb9\xed\x3a\x39\x95\x5f\x6c\x20\x27\x93\x4b\xa5\x77\x7e\xaa\xb5\xcd\x06\x5a\x22\x9f\xa9\x35\x18\x84\xe3\xae\x90\x50\xd1\x0c\x98\x57\x71\x96\x11\x2c\x64\xd3\x6e\x97\xc5\xc0\x96\xbd\x37\x3d\x85\x7d\xd8\x4d\x76\xfd\x1c\x20\xce\xc0\xe0\xe0\x85\x88\x0a\x45\x76\xa0\x01\xd3\x56\x8d\x02\x6e\x00\x6d\xe9\xda\x22\x1b\x5d\x52\xa9\x95\x46\xf3\xe3\x77\x16\x72\x69\x33\x82\xf8\x38\x38\xbf\xa8\x08\x17\xe3\xb3\xe1\xc7\xc1\xc3\xc5\x72\x33\x61\xe9\xbb\xea\x16\xa3\x43\xa4\x9f\x97\xfd\xe6\x74\x6a\xee\x0c\x07\x1c\x65\x54\x5a\xc2\xc0\x68\x65\xa1\x6a\x8c\xbd\x3a\x26\x59\xc2\x17\x29\x61\x60\xe2\x29\xdd\x84\x7a\x3d\xa7\x98\xda\xab\x25\x18\x2c\x58\x71\xac\xd9\x0d\xae\xb1\x43\x87\x56\x45\x62\x7f\xf3\x96\xc1\xaa\x2a\xac\xfb\xc6\x78\xcf\xec\x7f\xee\x14\x56\x1b\x9e\xb1\xc1\xe9\xfd\xf9\x8f\xc3\xb2\x7e\x78\xfa\xfd\xf9\x8f\x4d\x52\xcd\xf8\xd3\xf0\x6a\x78\x3b\xb8\x5f\x21\x9c\x54\x9a\x6c\x12\x4e\xa4\x1e\x70\xd5\x7b\x4a\xa5\x8f\x08\x8a\x0c\xe4\x15\xa2\x4a\xa2\x27\x2a\xe9\x84\x02\x40\x98\xf5\x44\x3e\x9c\x03\x67\x7d\xc2\x09\x8d\xa9\x5a\x38\xf1\xc5\xf4\x5b\xde\x47\xcd\x49\x6d\xfb\xc6\xec\x10\xfa\x27\xc1\xca\x67\x36\xc7\x4d\xfa\x04\x81\x6e\xfb\x04\x4a\x5b\xf0\x19\xd3\x82\x34\x9b\x11\x61\x86\x03\xde\x97\x70\x2c\xc1\x73\x3d\xaa\x50\x58\x29\x56\xcd\x0b\xad\x33\xc2\x88\x00\x10\x38\xdf\x89\x11\xa4\x04\x61\x5f\x69\x99\x2b\x4b\x68\x44\x55\xb2\x40\x11\xd8\xb0\xc0\x9c\x99\x62\x86\x67\x56\x38\x00\x35\xa7\x42\x12\x7f\x35\x28\x6a\xd7\x53\x6b\xda\xbf\xa7\x64\xc3\x63\xf6\x70\x75\x36\xfc\x78\x7e\x55\x26\x81\xef\xcf\x3f\x95\x44\xd8\xcb\xe1\xd9\xf9\x43\xe9\x36\xd7\x92\xec\x72\xb9\xbe\xda\x6c\xc3\x51\xf4\x2f\x9d\xa0\x33\xf3\xe9\x89\x5e\xdc\x06\x88\x38\xaf\xfc\x56\xd6\xe1\xd6\x85\xe4\xb9\x3f\x86\x4c\x89\x46\xbf\x44\x57\x13\x92\xf5\x41\x96\x6c\x48\xcd\xa1\x0a\xb5\xbe\xaf\xaa\x4e\xe5\xea\x94\xdd\x8b\x10\x74\x79\x54\x58\x96\xc2\x18\x06\x30\x1a\xb4\x19\xb1\x1a\xdc\x5a\x05\xc3\xfe\x11\x5c\xd4\x69\x2e\x95\x71\x25\x02\x71\xa2\xc7\xbf\x48\xbd\xa0\xe0\x6a\x3c\x42\x77\x84\x8c\x98\xb3\x1e\xcc\xa8\x9a\xe7\x93\xa3\x88\xa7\xc7\x05\x3e\xe1\x31\xce\x68\x8a\xb5\x24\x4d\xc4\xe2\x78\x92\xf0\xc9\x71\x8a\xa5\x22\xe2\x38\x7b\x9c\x41\x04\x8c\x73\xa7\x1e\xfb\x66\x67\xfc\xdf\x2f\xfe\xf4\xed\xe1\xc5\x5f\xbe\xfd\x50\xb7\x90\xb5\xed\xff\x90\x45\x38\x93\x79\x62\x23\xe6\x44\xb8\x36\xee\xc8\xe7\x64\xd5\x7e\x5f\x95\xb7\x6b\x3b\xfd\xf5\xf4\xe6\xa1\x64\xb1\x2e\xff\xf3\x72\x78\x79\x7d\xfb\x73\x89\x53\xde\x5f\xdf\x0e\x3e\x95\x18\xea\xf0\xe6\xfb\xe1\xe5\xf0\x76\x70\x31\x76\x0f\xb7\xb1\xbd\xfd\xc0\xf8\x33\x2b\x2f\x8d\x74\x1c\xb0\xd6\xd3\x09\xfa\xc8\x05\xfa\xc1\xef\xe4\xe1\x04\x4b\xb8\x62\xdc\x9d\x25\x0f\x50\xc6\x63\x60\xbc\x88\x64\x73\x92\x12\x81\x13\x6b\x33\x90\x8a\x0b\x3c\x33\x37\xbd\x8c\x04\x56\xd1\x1c\xc9\x0c\x47\xe4\x00\x45\x40\x0d\xb3\x03\xd8\x14\x50\xb5\xf8\xac\x6a\xe7\xbb\xcd\x99\xa2\x29\x71\x2a\xb8\xfd\xe7\xbd\xd9\x8c\x0d\x36\xe7\xfa\xfe\xfb\xb2\xb0\xf7\xf1\xe2\xe7\xfb\xe1\xf8\xee\xec\x87\xa5\xeb\x69\x3e\x2b\x8d\xec\x0e\x02\x90\x4e\x79\x92\xa7\x2c\xfc\x7b\xf3\xb1\x9d\x5f\xdd\x0f\x3f\x55\x47\x77\x3d\xb8\x2f\x53\xc6\x6d\x39\xc0\xed\xc3\x77\xd7\xd7\x17\xc3\x92\x4b\xf8\xc3\xd9\xe0\x7e\x78\x7f\x7e\x59\xa2\x9f\xb3\x87\x5b\x83\x46\xb8\x6c\x9a\x6e\x04\x0d\x13\xd5\xd3\x0a\xa7\xb9\x6b\x56\xd8\x89\x13\x0d\x6c\x40\xb9\x39\xcb\x87\x01\xdc\x8e\x09\x07\x03\xab\xce\xa1\x37\xa9\x46\x66\xa4\x8d\xec\x50\x95\xb7\x09\xb5\xb3\xe3\xa5\x1b\xbd\x8c\x2b\xdf\xfb\x21\x18\x28\x50\xa3\x6c\xe3\x24\xe1\xcf\x26\x94\x37\xa5\xfa\x56\xb6\xc0\x68\xfa\x15\x59\x78\x08\x8f\x1a\x38\x5e\x79\x5b\x48\x24\x88\xba\xe4\x39\x53\x9b\x93\xdc\xe0\xaa\xc4\x77\x86\x57\x3f\x8e\x7f\x1c\x94\x29\xf0\xfc\x62\x39\xab\x09\x9b\x68\xb8\x8a\x07\x57\x3f\xfb\x4b\x18\x02\xbe\x0f\xbc\x86\x6a\x64\xd7\x28\xa1\x5a\xec\x8d\xb0\xd6\x5e\x13\x90\x68\x10\xa1\x60\x72\x48\xf5\xe4\x20\xc0\x34\x33\xfe\x24\xc3\x9f\xcc\x20\x4f\xdc\x1f\x95\xf6\x24\xac\x0b\x58\x53\x5d\x3c\x3d\xb4\x63\xb5\x6a\x86\x08\x7b\xa2\x82\x03\x9e\x2d\x7a\xc2\x82\x6a\x69\xdc\xb4\xac\xe7\x7a\x02\xff\xbb\x5e\x9b\x60\x18\xad\x30\xae\x3b\x2e\xd4\x99\x0f\xe4\xdd\xcc\x1a\xd2\x14\xd0\x5a\x0f\x65\x6d\x36\x74\xd4\xbf\x6d\xd8\x9c\x2d\x03\x7e\xcb\x13\xfe\x47\x72\x46\x71\xa2\x19\xc0\xee\xe4\xc5\xc1\xd5\xdd\x79\x59\x7e\x2c\xab\x19\x01\x5f\xde\x58\x5e\x04\x43\xa5\x19\xb9\x53\x26\xee\xfe\x7a\x61\xb4\x0b\x00\x3d\x36\xe7\x36\x50\x2c\x40\x00\x72\x28\x28\x19\x16\xb2\xf2\x85\x44\x00\x84\x56\x04\x5c\xe9\x3b\x0b\xc2\x99\x9e\x38\x8d\x47\x8c\x7c\xce\x08\x93\x10\x1c\x60\xee\xb3\xc2\xd7\x2e\x8f\xd0\xf9\x14\x58\x82\x7e\x9d\xa1\x9c\x59\x07\x98\xbe\x70\xcd\x20\x0f\xb4\x28\x6b\x87\xe0\x35\x44\x30\xbc\x30\xe2\x82\xa5\x8a\xc1\x8f\xd8\x4f\xde\x89\x06\x8f\xa6\x5c\x33\x20\xbd\x8b\xb6\xbd\x13\x84\x99\xa4\x07\x48\x2b\x2c\xd5\x3d\x85\xd4\x01\xad\x50\xda\x10\x2e\xcd\x69\xec\x9f\xaf\x7f\x0d\xd4\xe2\x84\xc3\xcb\xa0\xf9\x2e\xa8\x5c\x05\x2d\xa2\x71\x62\x3c\x26\xe3\xee\x77\x42\xc4\x05\xb1\x7e\x96\xb5\xaf\x81\x55\x8c\xfd\x1e\xcb\xc7\x9a\xef\xe1\x9c\x49\x85\x59\x44\x4e\x13\x2c\x37\x0c\x42\x72\x36\x8e\x83\xb2\xc4\x71\x7b\xfb\x70\x73\x7f\xfe\xdd\x0a\x2e\x5f\xfd\xb8\x1e\x06\x14\x25\xb9\x73\xcf\x4d\x04\xc7\x31\xd2\xec\x73\xc6\x8d\x2b\xd0\x0a\xfe\x05\xf4\xb7\xc9\xeb\xf1\x01\x95\x25\xd8\xf1\x22\x1d\xc1\xda\x39\x42\x57\x02\xb5\x0b\x81\x22\xbd\x12\x28\x30\x79\xb8\xad\x06\xcf\xa2\x29\x48\x62\xad\x5b\x59\x82\xd5\x94\x8b\xd4\x70\xf9\xd2\xa4\x4d\xe3\xcb\x1b\xa5\x4c\x11\x21\xf2\x4c\x51\x87\xe5\x5e\x95\x52\xa1\xc2\x3b\x9f\x5d\x12\x29\xf1\x8c\x6c\xe3\x80\x6e\x52\x1e\xee\x7e\x0c\xff\x09\x0e\xe6\x2e\xb2\x7f\x69\x84\x2e\xf2\xdd\xd1\xd3\x35\xfb\x68\x02\x79\x6e\x78\x42\xa3\x0d\x03\xee\x3e\x0e\xce\x2f\xc6\xe7\x97\x5a\x89\x1f\xdc\x0f\x2f\x4a\xa2\x04\x3c\x1b\x7c\xbc\x1f\xde\x5a\x10\xeb\xc1\x77\x17\xc3\xf1\xd5\xf5\xd9\xf0\x6e\x7c\x7a\x7d\x79\x73\x31\x5c\x11\x99\xd3\xda\x78\xdd\xba\x5a\x7d\xf5\xa4\xf6\x0b\xec\xb0\xe6\x65\xa1\xbd\x0c\xb2\xc6\x30\x4d\xc0\x09\xce\x8d\x33\x1c\x23\xc6\x63\x02\x3f\x4b\x67\x9d\xf1\xc8\xd1\xe8\x5c\x7d\x95\x24\x08\xe7\x8a\xa7\x18\xbc\x36\xc9\x62\xc4\xf0\x44\xb3\x56\x9c\x24\x41\x78\x97\xc8\x19\xd3\x2c\x56\x37\x66\x20\xda\xa3\x84\x68\x76\x9e\x05\xc9\x7e\xd6\x6f\x30\xa5\x0c\x22\x6d\x53\x2c\x1e\x8d\x9b\xa9\xe8\xb2\x38\x14\x12\x61\x39\x62\x7a\x5c\xc4\x1a\x86\xba\xac\xf0\x49\xa7\xb7\x5a\x57\x27\xc5\x8f\x44\xaf\x4a\x9a\x47\x73\x94\x09\x3e\x13\x44\x4a\x6b\x5b\x8e\x30\x33\x01\x08\xf6\x75\x7d\x0d\x8d\x18\xe3\x7a\x29\x9c\x09\x3b\x26\x19\x61\x31\x61\x11\x35\x69\x7d\xe0\xbb\xf7\xa6\xcd\x99\xc0\xd9\x1c\x49\x0e\x4e\x6f\x58\x76\xb0\x5f\x99\x8f\xdc\x4d\x66\x66\x6c\x1e\x87\x16\x68\x91\x6b\x3e\x71\x0d\x72\xa2\x59\x65\xf8\xd8\x5d\x86\xce\xed\x62\xec\x80\x69\x96\x10\x65\xc0\xfa\x61\xc9\x61\x33\xf4\x5a\x97\xf6\x43\x6f\x53\xd3\x26\xe8\x0b\xdb\x8d\x19\x4b\x3b\xa2\xa3\x06\xcb\xb6\x3d\x52\xe8\x7b\xcc\xe2\x44\xb7\xe2\x7c\x18\xe5\xb3\x08\xa9\x28\x03\x4d\x35\xee\x34\x6e\x73\x8b\x46\x38\x97\xdb\x5c\xa3\x95\x5c\x4c\x63\x15\x3c\x2c\x82\x42\x80\xbc\x6d\x22\x26\xac\x6e\xa6\x59\x24\x4e\xb8\x5d\x25\xf3\x7a\x6e\xea\x3f\x21\x18\x4d\xcb\x35\x9b\x09\xca\x22\x9a\xe1\x64\x23\xdd\xaf\x12\x8c\x6f\x63\xdc\xbf\xa6\x53\x4d\x3e\xdf\xd4\xdc\xb6\x8a\x88\x14\x12\x94\xed\x30\xfd\x16\xae\x61\x49\xb2\x59\x0d\x44\x16\xd1\x24\x58\xf0\xdc\xf8\xe3\x60\x5d\x48\xdc\x70\x54\x8f\x9a\xb6\x5b\x9f\x0c\x5c\x0e\x80\xde\x60\xb3\x4d\xe4\x4f\xdb\xfa\x55\x5a\xb1\xbd\x9b\x60\x3c\x9c\xdc\x34\xb7\xd9\xb4\x03\xc1\xc3\x7f\x2d\xa3\x9d\x4b\x9c\x69\x9a\xb1\xb0\xfd\xb8\x98\xa3\x55\x92\x6c\x55\x30\x17\x3f\x13\xf8\xce\x7d\x5e\x48\xf7\xdd\x28\x96\xd0\x06\x40\xd5\x3b\x29\xc5\x10\x04\x39\xe6\x96\xc6\xa7\xb9\x96\x65\x11\x86\x28\x04\xf4\x35\x39\x9a\x1d\x21\x57\x84\xe1\x00\x0d\x6e\x6e\x86\x57\x67\x07\x88\xa8\xe8\x1b\x17\xb3\x68\x03\x96\x46\x4c\x71\x2b\xad\x2c\x5c\x01\x8d\x94\x88\x19\x29\xcd\xd9\x45\x37\x41\xa8\xf2\x8c\x4a\x65\xc3\x67\x35\x5f\x09\x4a\x9d\xd0\xb4\x2a\x66\x1b\x0a\xc9\xd5\x7c\x1b\xd2\xc0\x52\xe6\xa9\xd6\x65\xc7\x14\xa7\x63\xc1\x93\x6d\x98\xc2\x19\x4c\x05\xd4\x65\x9f\x9e\x4f\x71\x8a\x74\xb3\x36\x14\xc4\xbb\x1c\xbd\x48\xa7\x05\x23\xcd\x97\xf5\xbd\x19\xdc\x5b\xce\xfb\x60\xe3\xd1\xa8\x0b\x81\x80\xf4\xfd\x16\x56\x51\x98\x8d\xc7\xd6\x52\x3f\xc6\x51\xa4\x55\xee\x1d\x4f\x2a\xa8\x9f\xe3\x5c\x02\xb6\xa3\x17\x9b\xe6\x2a\x3a\x77\xc3\xcc\x34\x07\x83\x60\x60\x7d\xe5\x4a\x1e\xd1\xa2\xfd\x86\x7e\x27\x8b\x5a\xaf\xae\xc2\xcd\x83\xf4\x26\x15\x73\x09\x4b\x02\x3b\x29\x4d\x85\x1c\x35\x27\x0b\x34\xc7\x4f\xa4\xd4\xa5\x4b\x88\xd1\x0d\x2f\x78\x2e\x9a\x18\xdd\x88\x9d\x91\x4c\x10\x2d\xe9\x57\x1d\x28\x9e\xa6\x6f\xcb\x94\xd8\xd3\x75\x4f\xd7\xef\x9e\xae\x4f\x4d\xa1\xa4\x81\x2f\x8c\xb5\x95\x00\x67\x1a\x1b\x67\x9c\x27\xe3\x0e\x36\x91\xee\x2b\x5e\xf2\x84\x55\xca\x46\x01\x24\x00\xcf\x41\x3e\x2a\x5d\x9b\x5c\xdf\x75\x41\x8a\xad\x1d\xde\x92\x65\x70\x2e\xb3\xa0\x5e\xce\x36\xe7\xbd\xa9\x95\x65\x2d\xa1\x17\x17\x73\x4e\x8d\x7c\xe3\xdd\x65\x61\xfd\xd3\xd2\x61\x72\xa2\x08\x65\xb5\x6a\x6c\x86\x9e\xf5\x02\x1b\xb9\xe3\x1f\x39\x57\x58\x7e\x73\x34\x62\x5a\x88\x7a\x24\x0b\x63\x6e\xd5\x62\xca\xef\xb4\x2c\x7e\x28\x09\x93\x10\xee\xfd\x3b\xe3\x9e\xd3\x24\xee\xcc\xd5\x46\x35\x35\x45\xe0\x20\xe8\xda\xf7\x02\x21\xba\xb6\x51\x2b\x25\x15\x01\xd0\x20\xe7\x9b\xb9\xd8\x67\x66\xf8\x33\xa2\x20\xc5\x5a\x51\x05\x3a\x53\x6c\xaa\xcc\xd5\x86\xbe\xd2\x74\x65\xa8\x42\x70\xf0\x93\xc4\xf9\x76\x8c\x5f\xd6\xdb\x58\xc9\x19\xbd\xb6\x70\x67\x63\xde\x8f\x9d\xdd\x28\x12\xbc\x56\xba\x0d\x4b\x64\x76\x7a\x62\xd8\x81\xf3\x5f\x13\x76\xf4\x4c\x1f\x69\x46\x62\x8a\x21\x02\x5e\xff\xeb\x58\xcf\xeb\xdf\x4f\x6f\xaf\xaf\xc6\x45\x26\xcf\x7f\x8d\xd8\x20\x91\xdc\x67\x29\x20\xc6\x99\x0f\xb7\xcf\x04\x71\x22\xa1\x9d\x0b\x58\x5d\x0b\x33\xe2\x88\xb5\x8d\x20\xe6\x91\x3c\xc2\xcf\xf2\x08\xa7\xf8\x57\xce\xc0\x95\x3e\x80\x3f\x4f\x13\x9e\xc7\x3f\x61\x15\xcd\x8f\xe1\x5c\xab\x63\xf2\x44\x98\x32\x6e\x2a\xbd\x5c\x31\x24\xef\x4a\x88\xd6\xff\x77\x3d\xe6\x22\xa9\x48\x6a\x4d\x36\x22\x99\x42\xff\x8f\x20\x13\xce\x55\xf3\x25\xc5\xa7\x53\x49\xd6\xba\x90\x0a\x25\xed\xee\x1a\xfd\xe5\xcf\xdf\xfe\x41\x93\xd0\x26\x6b\x7c\x7e\x77\x3d\xd6\xdf\xff\xfb\x99\xfd\x5e\xae\xc1\xee\xae\xb3\x82\xb5\x39\xe2\x31\x81\xf3\x39\x83\xdb\x4f\x80\xf3\x02\xd8\x1b\x90\x43\xb1\x8f\x4d\xdc\xed\xac\xd4\xfa\x76\x2a\xdb\x46\x8b\x09\x2a\x76\x30\x47\x74\x88\x18\x47\xa9\x89\x35\xc5\x0c\xfd\xc7\x0f\xdf\x35\x6f\x60\x2e\xe8\x46\x1d\x52\x0b\xd7\x10\x74\x29\xe9\xaf\x44\x22\x4d\x35\x9a\x8a\x79\xaa\xbb\x16\x44\xce\x79\x12\xa3\x67\x02\x6a\x92\x8d\x03\xf5\x5a\xb9\x20\x23\x16\x36\x01\x21\x87\x08\x27\x8a\xcf\x08\xdc\xd5\x4e\x51\x53\x44\x68\x51\xc5\x64\x69\x28\x2e\xc8\x81\x81\xfa\xba\xfb\x93\x8b\xad\x86\x69\xc2\x23\x97\xd4\x62\x4d\x72\xf1\xa4\x79\xe6\xd3\xaa\xe9\x15\xb5\xdb\xf0\xab\x9b\x6c\xcd\xb6\xcd\x4b\x63\x93\x50\xac\x0d\xab\xba\x33\xcd\x83\xa1\x11\x67\xe3\x84\xb2\xc7\x8d\x36\xe3\xda\x89\x72\xba\x05\xbb\x66\xba\x45\x6f\xe7\x36\x16\x90\x35\xce\xc7\xc7\x3c\x49\x4c\x6a\x4b\xb8\x3d\x20\x77\x99\x75\x03\x61\x20\x33\x39\xa0\x24\xb6\x7e\x2f\xab\x09\x0b\xc2\x20\xe0\x6d\xc4\x26\x0b\xeb\xb3\x95\x07\x48\xe6\xd1\xdc\x65\xe6\x45\x9c\x49\x2d\x46\x73\x81\x22\x9e\xa6\xa6\xb8\x29\x23\x48\x71\x9e\x48\x1b\xed\xce\x0e\x15\x8e\xd4\x88\x15\xfd\xad\x38\x79\xa6\x02\xd2\x76\xa9\x7b\xdd\x5d\x3a\x45\xa5\xa5\xa5\x02\x37\x8d\x43\xcc\x06\x30\x82\x19\x4f\x54\x80\xfe\xc0\xeb\x67\xc9\x6c\x58\x8b\x66\x20\xe7\x5c\xa8\x71\xdc\xc8\x73\x56\x12\x4d\x95\x11\x32\x72\x98\x40\xd0\x30\x7f\xd2\xc2\x3f\x79\xf6\xc6\xd7\x65\x43\xd0\x54\xbd\x6c\x04\xdd\x8e\xd1\xd2\x91\xad\x4b\x82\x2d\x6b\x65\x10\x3c\xa2\x72\x4c\xf8\xaa\x31\xde\xc1\x57\xa7\xfa\xa3\xa5\x8b\x57\x3d\x77\x4e\x08\xe2\x71\x01\x36\x67\xee\x75\x9b\x11\xb2\x6c\x4d\x2d\x74\xc2\xcb\x65\x8e\x2e\x9b\xca\x43\xd9\x92\xab\xc7\x02\x26\x7b\x49\x40\xd6\xc4\x62\x42\x95\xc0\xa2\x84\x14\xe2\xf5\x41\x49\xb0\x80\xf8\xac\x11\x33\xb8\x71\x46\x53\x88\x51\x4c\x25\x24\x88\xc0\x5d\x1a\x38\xc3\x50\x37\x25\xb0\x72\xb4\x8b\x3c\x47\x13\x7f\x0e\x81\x65\x05\x69\x38\x66\xa7\x3b\xf2\xf8\x58\x5a\x3f\xe3\x51\x5e\x08\x72\x11\x48\xb8\x16\x53\x07\x51\x26\xe9\x6c\xae\x10\x65\xd6\xee\x88\x93\x19\x17\x54\xcd\x53\x79\x80\x26\xb9\xd4\x5a\xa8\x09\x56\x33\xf1\x28\x44\x45\x9d\xb8\xd0\xb6\x49\xc4\x71\xa5\xc1\xba\x8a\xb2\x01\x69\x74\x3b\x94\xc3\xca\x5d\xb1\x82\x70\x06\x1e\x67\xb0\xda\x06\x85\xba\x8d\x06\x9e\x12\x99\x38\x40\xee\x90\x9d\xa0\x0a\x48\xdb\x39\x00\x54\xc8\x9d\x79\x29\x5e\xa3\x10\x17\x32\xc9\xa0\x82\xb8\xd8\x6d\x90\xbc\xca\xc8\x94\x06\xbd\xc9\x3b\x9d\xd2\x4c\x35\x06\x6e\xd5\x5d\x45\xb7\x01\xe6\x4f\xb7\xc5\x86\x64\x2c\xa0\x66\x40\x6a\x1b\xb1\x3b\x42\xda\x81\xdc\x6a\x7b\x6f\x4a\xe3\xc2\x14\x6c\xa2\xc7\x72\x92\xdf\xc6\x89\x7d\x36\xbc\x3b\xbd\x3d\xbf\x31\x90\x13\xd7\xb7\x97\x83\xfb\x71\x83\x5f\xbb\xe1\xad\xcb\xc1\xed\x0f\x67\xab\x5f\xfb\xfe\xbe\x9c\x95\xdd\xf0\xca\xed\xdd\xf2\x64\x8e\x0e\x43\x6c\x48\x0a\x6b\xec\xe7\x04\x65\x0b\x35\xe7\xcc\x87\x28\xc4\x25\xde\x74\x88\x4c\x46\xb0\x82\x10\x22\x21\x55\x83\xe3\xf0\x1e\xe2\x72\x56\x4b\x98\xe5\xcd\x32\x30\x6c\x3b\x15\x8d\xd6\x38\x91\x9f\x12\x3e\x01\xbf\x75\x5e\x2a\x71\xbb\x24\x02\x7d\xcb\x78\x9f\x33\x2a\xb3\x04\x2f\x6a\x3d\xac\xba\x72\xae\x70\x4a\x20\xe2\xb8\xc0\x8f\x73\xc9\x22\x7a\x67\x20\x81\xc9\xdf\xeb\x74\x0a\x99\x4c\x8a\x62\x45\xd0\x84\xa8\x67\xc8\x9b\x73\xbf\x7a\x5b\xaa\x0b\x18\x91\x47\x23\x06\xe6\x9c\x91\x5e\xe4\x38\x87\x68\xbf\xd1\x87\x03\x34\xfa\x10\x93\x27\x92\xf0\x4c\xef\xbc\xfe\xa1\xe5\x92\x19\xa6\x98\x26\x57\x5c\x79\xcb\xdc\x36\xfb\x29\x48\x44\x33\x90\xcc\xc7\x44\xb7\xfb\x7a\x82\x47\x89\x92\x1d\x3b\x83\x31\x20\x1c\xc7\x5a\xc9\x06\x56\xe6\x86\x57\x84\x00\xb1\x60\xea\xa5\x5a\x99\xeb\x88\x14\xde\xfc\x6d\x7a\x0c\xdb\x2c\x9b\x3d\x1b\x77\x80\x3d\xbd\xa0\x4b\x76\xdb\x8b\x5c\x6b\x25\x3f\x90\x05\xa4\x60\xdc\x60\x2a\x36\x74\xcd\x36\xc5\xbc\xbe\x88\x93\x76\xd8\xd0\xd1\x1e\xb9\x6b\x9b\xd7\x61\x3b\xc7\xad\x8f\xd5\x7b\x2d\x2d\xd5\xc5\x72\xf9\x8e\x3b\xaa\xad\x0f\x6d\x4a\x6a\x6b\x08\x03\xaa\x2a\x5e\x19\x89\xd6\xd0\xb8\xfc\x00\xef\xf4\x77\x2b\x35\x15\x2f\xae\x45\x61\x4d\x7f\xd8\x05\x9b\x1c\x5f\xcd\xc7\x27\x2b\x47\x1c\x25\x5c\x96\xb1\x72\x3a\x0f\xfa\xd4\x7e\xba\x6c\xdc\xc3\x90\x7c\xb5\x5c\xb8\x56\x40\x43\xc3\xc2\x57\xc0\x20\xcd\x3d\xa3\xac\x87\xcc\xbe\x7d\x80\x28\x44\x5b\x82\x42\x96\x14\xc8\x01\x2c\x46\x85\x1b\x64\xc4\x8a\x98\x15\x89\x9e\x49\x02\x61\x6e\x11\x4f\x33\x30\xf1\xdb\xe1\xda\x96\x48\x6c\x22\x86\x0f\x10\xcf\x95\x6e\xcc\xe4\xe4\x38\x23\xae\x4d\xf8\x29\xdc\x1e\xc6\xf7\x66\x83\xdf\x3d\xb0\xb4\xa1\x75\x73\x97\x52\x86\x3e\x11\x05\xad\x00\x70\x7f\x38\x41\xd0\x13\xaa\x21\x94\xcd\x6b\xbf\xc5\x89\xb2\x33\x59\x63\xe7\x0b\xe0\x94\xef\x12\x3e\x59\x6e\x24\x80\xc6\xd1\xc3\xed\xb9\xb3\x48\x16\xf1\x53\x01\x7a\x71\xc9\xa3\x38\xbc\xb9\x1d\x9e\x0e\xee\x87\x67\x47\xe8\x41\x12\xbd\x3c\x7e\xba\x90\x5f\xed\x55\x12\x33\x72\x8b\xc4\xc2\xa4\x22\xb8\xcd\x10\x42\x84\x28\x65\x41\xaf\x60\x1c\x65\x98\x96\xe5\x84\x0d\x20\x29\xd4\x1a\xea\x00\x58\xa8\x3a\x4f\x1b\x99\xb7\xea\x04\x42\x9c\xd4\xf8\xfd\x44\xa9\x99\xf1\xa6\xf5\xc8\xbc\x55\xe4\x53\x8e\xe8\x7b\xe9\xc9\xc0\xd1\x52\x73\x42\x05\xea\x34\x2d\x43\x54\xe3\xee\x73\x0a\x42\xdc\x2f\x71\xb6\x3c\xfd\x14\x3f\x97\x88\xd6\x88\xc2\x81\xef\xfe\xa5\xcf\x81\x63\x6b\x63\xc3\x0a\xb7\x9f\x60\xe1\xd0\x32\xbc\xd5\xf3\x4d\x93\xf1\x21\x9d\x91\x2c\x9c\x58\x65\x10\x36\x8e\x55\x22\x38\x3b\xf0\x0b\x65\xa8\x74\x25\x1e\xa0\x29\xfd\x6c\x1b\x2d\xe2\xdb\xdd\xab\x41\xc0\x43\x4b\x3c\xe5\x1c\xd7\xcf\xd4\x1a\x62\xc3\x0d\x7c\xbf\x54\x88\xe4\x52\x8b\x44\x91\x16\x97\x04\x89\xb8\xd0\x37\x05\x74\x5b\x78\x21\x56\x89\x0c\x0a\x0b\xbd\x28\x75\xaf\xcc\xb2\xd3\x5f\xd4\x20\x89\xb1\x22\x87\x5a\xf4\x5a\x91\x00\x6d\x73\x64\x20\x9b\x06\xab\x00\x0e\xac\xb8\x79\x26\x64\x86\x99\x0b\xcd\x6e\x19\xae\xbb\xf2\xb6\x60\x55\x5a\x05\xc2\x90\x1e\x06\xf2\x15\xa4\xfe\x94\xc6\x21\x33\x58\xcf\xa5\xe3\xb0\xd1\x2f\xfb\xb0\x6c\xcf\xd8\x07\xe3\xb4\x0c\x36\xcf\xe2\x7d\x1a\x6c\x82\xa5\x42\x76\x4c\x6d\xa6\x88\x40\x45\x7c\x59\x23\x6c\x49\xb7\xef\xaa\xbc\x69\x12\x2a\x6b\xb1\x04\x3c\x23\xd2\xe1\xa6\x18\x94\x18\xad\xd3\x38\x41\xd8\x94\x62\xf6\x67\xdb\xd6\x64\x76\xb7\x44\xc8\x4c\x20\x48\xbf\xde\xf4\x11\x1a\xb0\x1a\x5e\x96\x8b\xcb\x2a\xad\x97\xb9\x93\x70\xf2\x8c\x17\x12\x65\xc2\x40\xcb\x98\xc8\x7d\x37\x79\xd0\xc0\xca\x1f\xf9\x50\x08\xe5\x52\x27\x10\xd8\x62\x56\x07\xcd\x39\xb9\x77\xfc\x02\xae\xbc\x4a\x54\xb9\x17\xc8\x8b\xe6\x0a\x5b\x45\x07\x56\xa7\xc8\x38\x9a\x63\x36\x23\x63\x67\x64\xdd\x44\x5b\xd2\xed\x9c\x42\x33\x67\xb6\x95\xe6\xcb\xe9\xc6\x28\x4c\xb6\xfe\x8b\x79\xd5\x1b\x10\xf5\x21\x90\x0a\xcf\x08\x32\x23\xea\x64\x96\x2e\x45\x8c\x59\xb0\x61\xd0\x13\x6c\xab\xc3\x72\x14\x7d\x9b\xf0\x0e\xa1\x4f\x17\x78\x42\x92\xb7\x89\x9c\x80\xae\xad\x71\x1e\xbc\x75\x26\x1b\x80\xa0\x67\xb0\xe7\x57\x58\x86\xb5\xde\x8b\xbc\x29\x37\x60\xd9\x3c\x4b\xd5\xcf\xb7\x98\xa8\xab\x15\xb2\xc9\x54\xdb\x2a\x88\x84\xd7\x5e\x50\x69\xa3\xc9\xc0\x16\x5e\x7f\x55\x9b\xf2\x66\x03\x09\x0a\x7e\xb4\x8c\x63\xeb\x8a\x1f\x2b\xa7\xb2\x31\xc8\x40\xc7\x2a\x78\xe7\x53\xc4\x38\x23\x88\xca\xe2\x65\x55\x4e\x87\xf2\x10\x3d\x5a\xc4\x37\xc6\x17\x5f\xa5\xcb\x17\x5f\x7a\x69\x4b\x4b\x01\x9e\xe0\x6d\x03\x2e\xbf\x9b\x11\xad\xa8\x62\xb1\x00\x88\x4f\xc3\x87\xcb\x32\xdd\xca\x71\xee\x5c\xe0\xbe\x77\x08\xae\x41\xa4\xae\xe2\x08\xc4\xc8\xca\xe0\x90\xc1\x41\xb5\x2f\xd9\x8f\x2c\x4c\xcd\x88\x79\xcb\x06\x10\x22\x95\x28\xc5\x19\xf8\xf4\x18\x57\xc5\x57\x06\x76\x49\xf9\x2d\x3c\x70\x82\xb8\x34\x35\xb4\x5a\x56\x60\x95\x69\xc7\x5d\xbf\xc5\xba\x96\xe1\x2d\x1d\x34\xef\x8c\x3e\x11\xe6\x68\xfa\xc0\x9d\x09\x3d\x28\xd7\x69\xb2\x38\xc4\x10\x66\x4c\xe2\xd0\xf3\xb1\x9c\x23\x19\x83\xcc\x3e\xd8\x23\xbb\x2f\xd9\x7d\x63\x18\x8d\x01\x49\x2b\xa1\xdb\xbb\xc0\xf0\x90\x4a\x2d\x6e\xaf\xc9\x04\xc7\x12\xfd\x8e\x71\xf5\xbb\x00\xd9\xd8\x19\x2f\xe0\x53\x67\x82\x3a\xa8\x95\x6c\x81\x43\x6b\x09\x07\xe1\x00\x61\x6b\xe5\xca\x6f\x1b\x1b\x50\x04\xbe\xbf\xa8\x34\x3a\xac\x67\xc1\xb5\xd5\xbc\xea\x3d\xf6\xa8\x7a\x2d\x54\x0d\x9e\xa6\xac\x5e\x71\xd2\x4b\x86\x4e\xb9\xca\x45\xef\xf7\xa2\x93\x6b\xbe\x86\x08\xb0\x0d\xb5\xa5\x9d\x23\xa7\x56\x80\x20\x37\xdb\x25\x36\xc9\xf3\x6c\x93\xcb\x45\x39\x74\xcd\x96\xc1\x68\x41\xf9\x3d\x1a\xb1\x8f\x5c\xd8\x2b\x58\xda\x3a\x03\x13\x1c\x3d\x1e\x12\x16\x23\x9c\xab\xb9\x41\xdb\xb5\x7e\x85\x85\xa5\x06\x2d\x69\x00\xd9\x78\x28\x0d\x2a\x23\x2c\x62\x57\xf1\xe2\x89\xbb\x51\x8c\x58\xd0\x08\x54\x32\x80\x42\x4f\x50\xaa\xb6\x4d\xd5\x24\x52\xeb\x57\x6d\x6b\xd1\x54\x84\xb5\x56\x82\x75\xf9\x39\x2b\x15\x95\x85\x1a\x0c\x10\xe0\xc4\xa7\xf5\xd5\x39\x77\xd6\x46\xa7\xdf\x69\x7a\xae\x7b\x21\x0e\xac\x46\x61\x4c\x52\x76\x06\x5a\xd2\xf9\xd6\xf1\xda\x12\x6a\xf0\x34\x17\x10\xae\xdb\xd4\xe6\xd7\xd1\x9c\x26\x85\xef\xe2\x9b\x03\x3f\x4c\xdd\x64\x42\x9e\x48\x62\x30\xeb\x23\x01\x91\xf9\xc6\x6a\xf8\x2d\xfa\x3f\xa6\x30\x29\xfa\xc3\x88\x7d\x02\x36\x9c\x24\x0b\x40\xd4\xf4\x2d\x63\x55\x69\xe6\xb1\x71\x00\xca\xa6\x02\xa1\xf2\x40\xcc\x5e\xcf\xf1\x13\x19\x31\xd7\xcc\xff\x41\x8f\xe8\xf7\xe8\x0f\x6d\xea\x9d\x0b\xb0\x7f\x61\x3b\xc7\xc7\x20\x7c\x3d\xb8\xe5\x2c\xa3\xb4\xfc\xc6\x99\x41\x4a\x46\xc8\x06\x64\x0d\x0f\x8c\x4d\xd9\x13\x8f\x6a\x59\x1c\xe1\xa9\xc5\x82\x30\x35\x66\x3c\x26\x63\xd2\xe0\xd2\x5c\xc2\x24\xb4\x10\x70\xc5\x63\xb2\xd2\x21\xe9\x99\xe9\x4f\x60\xba\x91\xf9\xc4\x6f\x07\x24\xf8\xfb\x6c\x6e\x6f\x7d\x28\x53\x5a\xf3\xc8\x3d\xfa\xec\x26\xe3\xde\xd4\x99\xea\xc2\x44\x0f\xe0\x42\xb0\x03\x68\x76\xe8\x25\x58\x39\xf7\x7a\xf5\x38\x56\x1d\x01\xfa\x65\x3d\x73\x7b\x59\x05\xb8\xba\x50\xfb\x44\xd0\x19\xd5\xf2\x7b\x77\x87\x2d\x70\xc2\x4d\xbc\x19\x06\x64\xb4\x93\x3b\xa3\x58\x0a\x07\xb4\x72\xe8\xe9\xaf\x70\x42\x4e\x78\x5e\x15\xe0\xed\x02\x50\x19\xba\xfb\xad\xac\xbe\xd0\x7c\x78\x66\x32\x00\xc9\x9c\x9a\x9c\xfb\xc1\xe9\x05\xd2\xa7\x83\xa7\x06\x98\x0a\x16\x2d\x57\x73\x2e\xe8\xaf\xad\x19\x4a\xed\x32\x7a\xe1\x69\x2d\x12\xba\xcc\x38\xcb\xd2\x3a\x10\xab\x11\x29\x54\x49\x2b\x69\xd2\x99\xd0\x24\x07\x0c\x56\xcd\x66\xa7\x79\x62\x0a\x37\x44\x5c\xc4\xa6\x72\xba\x2c\xa5\x8f\x41\x18\xae\x13\xef\xb1\xf2\x0d\x52\x0b\x55\x69\x4b\x43\x18\x0b\xce\x52\x01\xf4\xaf\x39\xc9\x77\x94\x81\xf7\xa6\x31\xcb\xf7\x78\x26\x8b\x20\x64\xb3\x36\x9a\x37\x17\xeb\xfb\x0f\x3d\x53\x19\xe4\xac\x3a\xcb\xa2\x87\x80\x32\x2a\xb9\x29\x0c\xba\x96\x45\xe7\xd6\x40\xdf\xef\xc0\xa4\xf3\x1a\xf1\x1c\x75\x19\xa9\x81\xfd\x58\xf2\x7b\xf2\x19\x9c\x55\x16\xf1\x42\x76\x12\x57\x43\xa0\x22\x7d\xbc\xa0\xc9\x64\x03\x26\x57\x17\xaa\x97\x46\x45\x17\x06\x14\xcf\xd6\x1a\x92\xa9\x15\x87\xb4\x8b\x67\x41\x01\x21\x6e\x51\xbc\xec\x6b\xe0\xba\xeb\x22\xe4\x31\x5a\x4a\x31\x62\x2d\xc4\x75\xb8\x25\x5c\x34\xf3\xf8\x35\x0c\x10\xb6\xa1\x72\xd7\x75\xbf\x7d\xdb\x89\x30\x2c\x69\x5f\x8f\x44\x1d\x1e\x66\xe5\x61\xf0\x95\x40\xde\xc6\x80\xe8\x45\x9b\xd7\x3b\x19\x9e\x1c\xc7\x11\x8e\xe6\xad\x93\x9a\x70\x9e\x10\xcc\xda\xa4\xd7\xc6\xc7\xd5\x23\x62\xc0\x4d\x81\x75\x27\x09\x20\xfc\xba\x25\xb0\x55\x21\x0b\xf1\x9d\xc5\x80\xcc\x6e\x78\xb8\x89\x0d\x74\x03\x55\x84\x39\xcb\x0f\x65\xb3\x84\x54\xd7\xca\x42\xe8\x1f\xd8\x4e\x92\x28\x4f\x82\xb2\x90\x19\x11\x7a\xd4\x7a\x89\x9f\x08\xd3\x3a\x83\x1d\x87\x73\x66\x3c\xbb\x84\x68\x5f\x0c\xea\xc0\x77\xed\xfc\x69\x90\x75\x18\x8f\x18\x1c\x5c\x5e\x3e\xac\x9a\x56\xa5\x56\x33\x42\xbb\xd4\xc6\xa7\x33\x10\x22\xd6\x3e\x9e\x77\x65\x33\xf1\xda\x67\xd2\xf4\x3d\x86\x18\x83\xad\x5d\x6b\x81\xfb\xa5\x80\x6a\x30\x1b\xeb\xe0\xb8\x5e\xc9\x88\x0c\x51\x1b\xe5\xb0\xd3\x20\x68\xa3\x0d\x0e\xea\x45\xef\x92\xa2\xfc\x85\xbb\x0d\x3a\x0e\x65\xa9\xab\xba\xa3\xe3\x19\xac\x93\xcb\xce\xed\x85\x0d\xd9\x2e\xbb\x6c\x7d\x7e\x4f\x11\xe6\x68\x0b\xbc\x2a\x81\x01\x9d\x00\x72\xca\x7f\x32\x1a\x36\x95\xc6\x02\xe6\xca\x5c\xa4\x99\x5a\xd8\xaa\x68\x70\x2f\x86\x39\xbd\x06\xf1\xad\xc9\x3d\x5c\xbd\x23\xe3\x92\x83\xb8\xa9\x33\xe8\xc8\x9a\x15\x1a\x9b\x74\x0b\x1d\x22\x88\x54\x10\x1b\xda\xa2\x41\x4c\x81\xd9\x31\x4e\x5a\x6d\x59\x3b\x60\x9a\x90\x66\x5b\xa0\x34\x58\xf0\x57\x25\x72\xa2\x79\x17\x4e\x92\xca\xbc\x30\xa4\x43\x2b\x5f\x64\x6e\x52\x54\xc2\xed\xee\xac\x4e\xf0\x84\xac\xe5\x9e\xbe\x30\x1f\x2c\xa5\x22\x78\x05\x22\xbb\xb3\x2c\x59\x74\x8b\x28\x0f\x43\xef\x1a\x41\xd2\x56\x0d\x2c\x84\x56\x5b\x7a\x37\x95\xe1\xc9\x36\x1b\xa2\x24\x51\x2e\xa8\x5a\x8c\xad\xd1\xaf\x3b\xd3\xba\xb3\x5f\x9e\xda\x0f\xbb\x68\xd4\x27\xc8\xf5\xe7\x8c\x8c\x70\x4f\x09\x6a\x2a\xe8\xd8\x29\x74\xd9\x6e\xad\x25\x37\x82\x27\x2d\x5b\x58\x87\xde\xd4\x6d\xa8\xba\x8b\x4d\x87\x67\x2b\x73\x8c\xf9\xd4\xe1\x22\x75\x5f\xd8\x6a\xc9\x92\x35\xac\xa5\x0e\x7e\x39\x13\x94\x0b\x5b\x19\xa4\x4b\x50\x5b\x8a\x3f\x8f\x33\x2c\x70\x92\x90\x84\xca\x74\x73\xdb\xee\x9f\xfe\xb8\x74\xb4\xa7\xa6\x82\x8d\xb4\xf5\xa0\x3e\xd3\x34\x4f\x11\xcb\xd3\x89\x95\x72\xb1\x7c\x0c\xc1\x2f\x5d\xaa\xbe\xc1\x70\x72\x03\x2c\x01\x06\x88\x00\xce\x74\xc4\x02\x60\x6b\x6b\xaa\xc0\xd1\x9c\x92\x27\x80\xdd\x14\x8c\x48\x79\x84\xae\xb8\x22\x27\xe8\x12\x67\xf7\x20\xa8\x99\x92\x92\x33\x63\x1d\xc7\x12\x69\xa9\x35\x67\x54\x1d\x8c\x98\x45\xc3\x76\xab\x72\x1c\x71\x66\x10\x51\x23\x58\x58\xdf\x04\x98\x7b\x1d\x34\xa8\x72\x89\x8d\x54\xb6\x2c\xb6\xc0\xcf\xe3\x20\x7a\x75\x6c\xb2\x03\xd6\xa0\xe3\x5b\xfc\x6c\xe2\xb5\xcf\xb0\xc2\xa6\x5a\xec\x32\xc9\xdd\x06\x44\xd9\x0a\x42\x06\x08\xd8\x05\x8e\x70\x8b\x46\xe1\x6b\x9f\x99\xe8\xd4\xaf\xe9\x11\x39\x42\xdf\x25\x7c\x22\x0f\x90\xf4\xa0\xd9\xf0\x50\x12\x25\x0f\x8c\x83\x0a\xfe\x6d\x52\xc1\xbe\x71\xab\x5f\xf0\x7d\x28\xfb\x37\xa5\x9f\x0d\x08\x86\xfc\xd3\xc9\xf1\x71\xba\x38\x9c\xe4\xd1\x23\x51\xfa\x2f\x90\x29\x1a\x57\xc8\x21\x48\xe1\x26\x3c\xaa\x55\xab\x53\xc7\xb2\xea\x44\x91\x36\xad\x46\x12\xc0\x4d\xd7\x57\xba\x2f\xac\xea\xa0\x8f\x38\x6b\xae\x1a\x69\xa7\x2c\xf2\xb6\xe3\x55\x02\x5c\x7e\x1d\x6d\xc5\x14\x8e\x0d\x71\x9e\xa7\x09\x9e\x55\x54\x96\x35\x94\x94\xeb\x94\x5a\x2a\xd2\x73\x87\x78\x0b\x7d\xca\xca\x51\x66\x5f\x39\x77\x24\xb8\x15\xad\xbb\xe5\x68\xc4\x06\x12\x3d\x13\x53\x0f\x16\x72\x12\xc1\x3b\x91\x53\x39\xf7\x19\x89\x60\x2f\x85\x46\x0d\x1c\xae\x41\x4d\xb0\x8a\xa3\xd3\xac\x9c\xff\xc6\x6a\xa0\x38\x91\xe4\x40\x37\x0c\x90\x68\x2e\x90\x10\x3d\x0b\x9c\x65\x44\x8c\x98\x85\x36\x05\x00\x6f\xce\x6d\x90\x48\x5b\x34\x79\xaf\x51\xbe\xae\x46\x19\x26\x7d\x94\x13\x16\x57\x9d\x6f\xc8\x6f\x5c\x9a\xea\xb1\x24\x37\x50\xcb\xa2\x5d\x23\xbd\xdf\xde\x6c\xdc\x71\xcc\xab\xb4\xf3\x41\x25\x4c\x1f\xca\x4d\xa7\xa0\x40\xca\xa2\xaa\xa6\xb3\xf5\x79\xf5\xbd\x24\xe6\x00\x32\x36\x7c\x1c\x73\x22\x03\x23\x3e\xf2\xb6\xb8\x84\x4e\x89\x96\x3e\x46\x4c\x93\x71\xe8\x70\x30\x00\xdb\x0e\x6f\x5b\x77\x1a\x09\x2e\xa5\x8d\xbc\x37\xed\x2c\xcf\x9f\xda\xa2\x96\x9f\x41\x09\x3f\xbf\xbe\x1a\xd7\xab\xfa\x05\xcf\x5c\x7d\x3f\xfb\xb0\x31\xc9\xbe\xb5\xa9\x95\xd5\xfc\x8a\xb5\x58\xa3\x9e\xdf\xf1\xe9\xc5\xb9\x2f\x62\x55\xe9\xba\x5e\xd0\x2f\x44\x56\x6f\x2f\xe9\x57\x9f\x71\x50\xdc\xaf\xd2\xc4\x92\xf2\x7e\xab\x37\xab\x1c\xef\xbb\x0d\x6c\x5e\x65\xeb\x57\xf2\x87\x32\xcd\xac\x0a\x4b\xdf\xd1\x36\xb5\x5c\x2b\x11\x08\x8c\x2f\xed\x61\x07\xc1\x4b\xbf\x25\x15\x4e\xb3\x30\xe5\xd2\xe1\x86\xda\x69\x9a\xa3\xd6\x76\x09\xbe\x2a\x9e\x79\x84\x4d\x34\x4b\x75\x70\xb5\xad\x58\xcf\xe3\x75\x6f\x61\xd2\x77\x11\xc6\xfc\x7a\x39\xcc\xc9\xa2\x88\xda\x93\x56\x76\x73\x25\xb8\x5b\xec\xfe\x13\xe2\x21\xe1\x5b\x37\x74\xdb\x24\x45\x0f\x1d\x25\x08\x96\x36\x1c\x03\x72\xf9\x2a\x79\x3e\x6b\x98\x87\xfd\x98\x4d\x36\xf0\xa1\x2f\xc2\x10\x5c\x35\xb6\xae\x58\xe4\x0e\x22\x15\x82\x3c\x11\x01\xb4\x63\x63\x7e\x58\xf9\xa8\xe2\x44\x10\x1c\x2f\x82\x15\xf1\x01\x07\xa6\x67\x30\x8f\x49\x9a\x6a\x05\x1e\x54\x13\xc6\x0f\x79\xe6\x74\x96\xd2\x5b\x50\x41\x83\x4e\xf5\x8d\x15\x84\x2b\xe8\x2f\xd8\x21\xf9\x4c\xa5\xd2\x72\x45\x43\xac\xa6\x6b\x04\x24\x1e\xa8\xab\x35\x27\xf6\x86\x1b\x7d\x18\x7c\x77\x7d\x7b\x3f\x3c\x1b\x7d\x28\xa2\xf3\x5d\xfa\x99\x47\x84\x72\x00\xff\x9c\x8d\x98\x0f\xa8\xf5\x00\xc8\xb0\x97\x08\xc7\x71\x81\x6c\x60\x95\x48\x23\xb3\x2d\xe5\xc8\xc1\xa9\x58\x19\x4a\xbb\xa4\x99\x07\xc8\x41\xda\xd7\x93\xb5\xc4\x75\x56\x3a\x39\x26\x93\x6a\x49\xca\xcb\x8e\x2e\x9b\x10\xbb\x55\x19\x5d\x9b\x28\x07\x2e\xc8\xc8\xb3\xd3\x95\xe0\x76\x3e\xc6\xe6\x12\x5e\x8f\xdb\xb9\x0d\xd9\x60\x53\x3f\xd2\xcf\x24\xbe\x6d\x91\xaa\x76\x92\xd1\xd2\x29\x12\xb0\x71\x17\x72\x46\xd7\xd1\xf8\xfd\x54\x1e\xf4\x77\xdd\xd9\xd2\x75\x01\xc9\x56\xc0\xab\x02\xb6\xaa\x42\x18\x45\x44\x28\x4c\x19\x9a\xc2\xc1\x66\xd1\x02\x01\x60\x07\x01\x1f\xf6\x1f\x51\x4a\x19\x20\x07\x2c\x5b\xda\x87\xf2\x3c\xd6\x10\x5a\x2f\xcf\xaf\x1e\xee\x4b\xa2\xea\xf7\xd7\x0f\xe5\xa2\xee\x83\x9f\x97\xca\xaa\x95\x16\x96\x05\x0b\x05\x53\x2c\xb2\x10\x2d\xca\xac\x5f\x99\xc6\x89\x26\x0b\x45\x1e\x6e\x2f\xb6\x92\xef\x9a\x9d\x65\xad\x18\xe1\xa1\x74\xd5\x8c\x88\xd0\xe5\xd3\x98\x44\xab\x50\x4c\xbb\xd3\x91\x89\x82\xd2\xeb\x60\xad\x89\x16\xe1\x0c\x4b\x94\x61\x61\xfd\x50\xb1\x09\x80\x2a\x57\x06\x33\x9a\xd7\x32\x04\x89\x4f\x44\xfd\xa8\xaf\x3e\xce\x76\x91\x05\x61\x45\x59\xf0\x8f\x92\xf1\x93\x69\x78\x8d\x93\x66\x87\xb2\x24\xd5\xc5\x09\xcb\xd0\x03\xb2\x3d\x84\xb8\x0b\x47\xa6\x42\xfc\x40\x37\x07\x2b\xe2\xe2\x09\xb5\x4a\xca\x99\xa6\x48\x03\xa7\xea\x30\x58\x83\xe6\xf8\xd4\x7c\xdc\x11\x91\x2e\x88\x6a\xd7\x6d\x15\x4b\x89\x06\x37\xe7\x0d\x6b\x7d\x51\x75\x21\x7d\x59\xe5\x6c\x12\xef\xcd\xda\x35\x48\x52\x90\x9e\xb8\x17\xa8\x48\x76\xa6\xdb\xc1\x20\x19\xa7\xff\x4d\x39\x92\x60\x1f\xd0\x7a\x9b\x54\x86\x52\xda\xf1\x0a\x60\xde\xf5\x32\xf1\x8a\x65\x58\x13\xf4\x28\x1c\x90\x4d\x03\x09\x81\x7e\xea\x31\xc6\x07\x21\xf0\x0f\x37\x05\x73\x6d\x6c\xc1\xce\xc0\x90\x8a\xd9\x74\x41\x43\xfa\xd1\x50\xb4\x07\xcb\x00\xf8\x0f\x57\x90\xd1\xc5\x06\xdb\xdc\xf5\x70\xba\x21\xb5\xad\x07\xa0\x54\x8c\xcf\x99\xbf\x2d\x16\x35\xce\xb0\xb5\x3b\x80\x12\xe5\x2a\x25\x34\x15\xd6\x3b\x1a\xb1\x20\x60\x45\x1a\xb5\x47\x9f\x11\x57\x9c\x04\x2a\xde\x32\x00\xb6\x86\x24\x1d\x2f\xfc\x94\x76\xa0\x9a\x22\xaf\xe6\xe5\xf2\x22\xb5\x7e\xec\xe9\x94\x73\xec\x12\x11\x9d\x05\xc5\xc6\x01\x86\xf6\x25\x68\x2f\x28\x28\x60\x3b\x06\x73\x34\x18\x2d\x70\x50\xae\x2e\x48\x5e\x8f\x39\x91\xec\x2b\xe5\x53\x3d\x69\x62\x4b\xa2\xe0\xaa\x7b\x40\x4b\x75\x98\xda\x96\x97\x1f\xf0\x1d\xa0\x33\xad\xab\x38\x04\xc7\x6a\xa5\x99\xca\xf9\x78\x81\x12\xc2\x58\x24\xe8\xb4\xcd\xaa\xfe\x39\x23\xd1\x26\x10\x32\x37\x58\xe0\x94\x28\x22\x96\x85\x23\x95\x8b\x49\x83\x88\xe3\x76\xd0\xf6\x6b\x76\xd1\x54\xda\xa8\x96\x64\xf1\xda\xed\xc5\x2a\x48\x18\x3f\x8b\xb5\xd0\xaf\xf4\x34\x7e\xb4\x96\xff\x35\x67\x61\xfb\x29\xa6\x61\xa3\xad\x02\x04\xa0\x6d\xe7\xf4\x3a\x50\x28\xf7\x35\x50\x91\x52\xb8\xd0\x9e\x60\xa0\xac\x1e\x65\x1b\xf8\xc9\x2a\x5e\xba\x13\xde\xed\x32\x1c\x5c\x0a\x6d\xe5\x50\x95\x72\x27\x80\x4a\x40\xa5\x32\x38\x20\xcd\x00\x26\x20\xb4\x34\x45\x48\x06\x6e\x3f\x0b\x6f\x57\x18\x74\xad\x64\x55\x2d\x2e\x55\x59\xae\x15\x3c\x6e\x57\xe0\x0e\xbd\x44\xb3\x6b\x89\x66\x15\x29\x97\xa2\x6b\x35\x75\x12\x51\xc1\x99\xb1\x45\x9f\x2d\x40\x40\x79\x82\x90\x7b\x64\xaf\x48\x5b\x39\x16\xae\x7e\xca\xfc\xbf\xca\x1c\xdc\x11\x75\x48\xaa\x4d\x49\x95\x47\x81\x0b\x0a\x3c\x50\x49\x28\x0d\xd8\xb8\x1a\x18\xad\x09\x83\x34\x56\xfe\xf3\x2b\xe3\xc0\x82\xe4\xe6\x05\xcf\xd1\x33\x95\x73\xa4\xf8\x88\x41\x9c\xa0\xf7\x06\x28\x8e\xcc\x8b\x07\xf0\x16\xc0\x20\xc8\x7c\x92\x52\x85\x70\x30\xc3\x92\x49\xf2\xc0\x9e\x67\xfd\x01\xcc\xb8\x31\xcf\xbe\x09\xa2\x67\xc5\xa1\xd9\xc0\xbe\x56\x34\xb2\x6d\x2a\x7d\x10\xd3\xfc\xb2\xc9\xf4\x81\xc6\x13\x6a\x98\x8d\x67\xae\xcf\xa6\x47\xcd\xd6\x06\x0b\x1a\x0a\xc8\xae\x54\xaa\xca\xdd\x62\x0d\x3d\x2b\x32\xe9\x8b\x8d\xe8\x94\x4a\x5f\xbc\xbe\x8b\x5c\xfa\xb6\x32\x65\xcb\x72\x2b\xdd\x27\x2d\xf6\x6f\x97\xb3\xab\xb8\x0b\x9c\x0f\x25\xa5\x9b\x56\x49\x69\xdf\x50\xcd\x8a\x84\x80\xcd\xc3\xcb\xd7\x51\x07\x8b\xfc\xac\x90\x8a\x82\x74\xcb\x32\x26\x0c\xa9\x72\x7e\xc6\x15\xe4\xd4\x44\x50\xc2\xbd\x96\xe7\x39\x62\xcd\x12\xc8\x72\x9e\xb8\x6d\x8a\xc6\x4e\xd1\xcf\x82\xf3\xe7\x66\x61\x2d\x5a\x3f\xf9\x20\x37\xa3\x2c\xdb\x62\xec\x55\x11\xb3\x70\xf1\xb5\x05\x27\x69\xc1\x63\x93\x84\xe3\x86\x53\xd9\x3c\xf4\x5a\x02\xc5\xca\x73\x61\x2f\xdd\x1d\xaa\x76\x35\xee\xdc\x39\xdf\xc4\xcb\xc8\x96\x1b\xbb\x80\x69\xa7\xc6\x57\x3c\xb5\x9b\x14\x99\x05\x50\xd1\x9d\x41\xa1\x56\xd1\x09\x74\xe3\x07\xe0\xdd\xb5\x43\xc7\x26\xd2\xc5\x03\x74\x57\xb6\xa4\x34\x61\x5b\xbc\xff\x05\x26\xbd\x6e\x61\xe0\xc0\xdb\x28\x6c\xb4\x2f\x0d\xed\x06\x50\x11\xd8\x06\x49\x56\xf8\xb0\x17\xed\x72\x16\x13\xc1\x08\x56\xf3\xd7\xcb\xb1\x38\xdd\xd6\x38\x1d\x8c\xef\x65\xf3\x2d\x4e\x77\x52\x15\x3e\x1c\x6e\xb9\x42\xfa\xca\x71\xea\xd7\xbb\xd8\x89\x6c\xe8\x81\xaf\x11\x5c\x53\x1c\x1b\x8c\x86\x01\x04\xcd\x3a\x54\xba\x55\x1a\x46\xb3\x32\xf7\x32\x09\x29\x0d\x56\x9f\x5a\x2a\x8a\x3e\xec\x61\x65\xe5\x15\x4b\xf2\x45\x64\x7e\xbc\x7c\x32\xc2\xb2\x1a\xce\x79\x90\x9f\x00\x85\xb4\x15\xa6\xcc\x72\xaf\x65\x29\x09\x5a\xa2\x4c\x71\x53\x16\xc2\xde\xe7\xb7\x7c\xf1\xe9\x2d\x7d\xb2\x43\x9f\xec\xd0\xb0\x47\x7d\xb2\x03\x42\xfb\x96\xec\xb0\x4a\x01\x5d\x66\xfe\xf4\x1e\x39\xa8\xb5\x59\x2a\x70\x63\xf6\x77\x85\x16\xb9\x79\x40\xbf\xb3\x20\x86\xd1\x50\xf6\x17\xfb\x43\x63\x40\x54\xed\xb3\xea\x6c\x43\x6b\x26\x5b\x54\x9d\x02\x58\xc4\x89\x45\xa1\xb3\xe1\xca\x65\xeb\xd3\x32\x43\xe9\x88\x7d\xcf\x9f\xc9\x13\x11\x07\x08\x2b\x94\x72\xa9\x80\x0f\xbb\xe8\x18\x38\x08\x25\x40\x73\x13\x05\x81\xd1\x15\x4e\x49\x6c\xea\x1d\x06\x41\x8d\xd6\x5c\x6b\x1d\xad\x4d\x60\xab\x80\x1b\x6a\xb6\xc1\x45\x4d\x8c\x98\x09\x34\x34\xc1\x6d\x20\x2b\x50\x37\x31\x20\x98\xdf\x79\x37\xf0\xef\x8e\xd0\xbd\xbe\x9f\xa8\x2c\x8f\x37\xc0\x5e\x6b\x1b\xdb\x88\xcd\x04\xcf\x33\x6f\x41\xe3\x13\x53\xf8\xd6\xc4\x3e\xd5\xdd\xc0\x30\x18\xe7\x03\x8e\x70\xac\x35\xf1\xe5\x84\xf3\x26\x31\xa8\x1b\x01\x18\x85\x04\xa4\x8f\xa1\x0f\xac\xb3\x81\xee\xc6\x7b\x1b\xc0\xb6\x2c\x83\x61\x7f\x21\xd7\xf2\x19\x91\x60\x13\xf2\x36\xf7\x52\x16\x79\x19\xa9\xa0\x71\x9c\xcb\x2c\xa2\xde\x6b\xe1\x2c\xfb\xcd\x20\x08\x45\xe7\x36\xe2\xcb\xa4\xa8\xda\x7b\xe2\xc5\x6c\xa5\x9d\x63\x67\xdb\xf8\xc5\x4d\x2e\x32\x0e\x92\x58\xb2\x70\xa0\x0d\x16\xe7\x2d\xe3\x59\x6e\xa2\xda\x68\x18\xe4\xd4\x48\xd9\x54\xaa\x4b\xac\xa2\xb9\xe6\xdc\x05\xde\xd9\x8e\xa2\xfd\x0a\xae\xfc\xb2\xf6\xd3\x86\x19\x9c\x86\xbd\xb7\x38\x14\x3a\xd8\xd3\xcd\xbd\xef\x82\xeb\x9d\x24\x91\xea\xfe\x8c\xd3\xcd\x96\xb3\x0e\xac\xa2\xee\x13\xfb\x44\x4f\x74\x15\x15\xad\x1a\x7f\x37\xda\x2a\xd7\xdb\xda\x79\x1c\xe1\x16\x00\x32\x67\x16\xae\xab\x78\xd1\xd6\x67\x6d\x71\xfe\x0b\xba\x59\x0e\x90\xc5\xc8\x7f\xd2\xe2\x88\xb7\xb7\xa6\x38\xd3\x4a\x84\xe2\xfa\x96\x14\x33\x23\xc7\x9a\x28\x59\x84\x51\x2e\xa8\x3b\xfb\x95\x8c\xf0\x76\xea\x00\xfb\xe4\x71\x58\x4f\x29\xc2\x41\xa9\x39\xe3\xee\xc7\x91\xca\xb1\x0f\x4b\x04\x9a\x70\x25\xd0\x4d\xf6\xbb\x73\xab\x0b\x27\xde\x35\xec\xe9\x4a\xc2\xde\x62\x97\x71\x13\xba\x61\xa7\x93\x46\xd9\x2c\x80\x46\x6c\xb6\x11\x77\xa9\x7c\xd0\xf8\x65\xb7\xea\x0d\x8d\x9f\x3a\xd9\x67\x93\x6f\x97\x40\x37\x6d\x1c\x99\x5d\x8a\x72\xb7\x61\xb0\x56\x7a\x0a\x41\x2b\xad\xfd\x0e\xb0\x67\x29\xb8\xe9\xb1\x95\xa6\xfe\xcb\xff\x65\x2a\x65\x99\xa5\xf9\x2f\xc4\xc5\x88\x99\xdf\x0f\x7c\x95\x0a\xfd\x42\x01\xff\x8a\x53\x52\x00\x64\x8a\x32\x94\x1e\x00\x8a\x58\x28\x34\x03\xf5\xeb\x41\xfa\xf5\x18\x1e\xf3\x09\x11\x8c\xe8\xa1\x39\xe8\x01\xcf\xcc\x52\xcc\xf0\x0c\x80\x85\x0f\x20\x2e\x0e\xc4\xd5\x42\x15\x31\x24\x6d\xaa\x1d\x02\xb7\xd2\xcc\xd2\x66\xdb\x16\x55\x7f\xa1\x4f\x23\xca\x5a\x5c\xd3\x22\xb8\xa2\x99\xfa\x6f\x6d\xff\x9b\x49\xec\xf7\x83\xbb\x1f\xc6\xb7\xc3\xbb\xeb\x87\xdb\xd3\x92\xd8\x7e\x7a\xf1\x70\x77\x3f\xbc\x6d\x7c\x56\x64\xaa\xfe\xf5\x61\xf8\xd0\xf2\xc8\x35\x70\x31\xf8\x6e\x58\x2a\xa1\xfd\xd7\x87\xc1\xc5\xf9\xfd\xcf\xe3\xeb\x8f\xe3\xbb\xe1\xed\x8f\xe7\xa7\xc3\xf1\xdd\xcd\xf0\xf4\xfc\xe3\xf9\xe9\x40\x7f\x19\xbe\x7b\x73\xf1\xf0\xe9\xfc\x6a\xec\x82\x8e\xc3\x47\x3f\x5d\xdf\xfe\xf0\xf1\xe2\xfa\xa7\x71\xd0\xe5\xf5\xd5\xc7\xf3\x4f\x4d\xb3\x18\xdc\xdd\x9d\x7f\xba\xba\x1c\x5e\x2d\x2f\xd5\xdd\xbc\x1a\xad\x55\x80\x83\x8b\x2c\x30\x1a\x05\x62\xd2\x64\x61\x49\x9b\xfe\x0a\xae\x8b\x1b\x43\x8f\x87\x07\xee\x2f\x53\x58\xfb\x50\xb3\x40\xe7\x15\x2b\xb8\xc7\x88\x79\xb7\xa5\xbf\x54\x15\x9e\x49\x97\x78\x5c\x1a\xed\x09\x1a\xc0\x59\x01\x85\xa1\xd4\x29\xe4\x35\xf8\x91\x3a\x47\x37\xd0\x61\x42\x53\x0a\x3e\x6f\x74\x88\xaa\x1b\x5e\x6e\xd0\xce\x09\x86\x60\xbd\x76\xf1\xb2\xd3\x20\xab\x39\xcd\x40\x29\x27\xc8\x71\x68\x62\xcc\x09\x06\x79\x76\xc1\x70\x4a\xa3\x6a\x02\x06\x80\xaf\xa2\x02\x68\xa4\xda\x62\x89\xc0\xca\x2d\xcf\x09\xfa\xe1\x2f\xc5\xa0\xc0\x83\x61\x35\xef\xbc\x56\x4f\xcf\x3e\x10\xb9\x59\xd5\x55\xe4\x59\xea\xc9\x1d\x73\x6b\x5a\x86\x73\x6b\xeb\x76\x83\xbb\x29\x67\x01\xd8\x58\xc9\xf7\xa4\x8f\xb7\x99\x51\x85\xc6\x4f\xd0\x1d\x00\x9d\xc8\x42\x75\xd7\xbb\x98\x25\xf9\x8c\x32\x44\xd3\x2c\x21\x45\xc5\xf7\x09\x99\xe3\x27\xca\x5d\xf1\x0a\x53\xe3\x03\xd6\xd1\x8a\x56\xe8\x10\xb5\x1e\x94\x13\x34\x88\x63\x59\x66\x70\x25\xca\x71\x2c\xf3\xb0\x3c\xec\x10\x1f\x8c\xc5\x9e\x6d\x56\xe8\xa8\x38\x72\xb0\x62\xbb\x87\x72\xa9\xb3\xc3\xf2\xdd\xbb\xc5\xf5\xaf\x57\x70\xec\x48\x79\xbc\x91\x30\x70\x8f\xe5\xa3\x63\xcd\xab\x04\x02\x07\xaa\xb3\x5d\x8f\x16\x5d\xa7\x6b\xa7\x7e\x65\xc7\x70\xd0\x36\xeb\xb3\x15\x13\x7a\x45\x97\x6e\xc6\x49\xa5\x70\x57\xe7\xfe\x4a\x85\xbf\x1a\x3b\xdb\xa9\xb7\xa7\x59\x1a\x83\x23\x39\xf6\xf4\xbf\xc6\x3c\x6e\xe0\xd3\x6b\xff\xe5\x52\x91\x6d\x1c\xac\xdb\xba\x3e\xa0\x5a\x8a\xae\xf5\x03\x2d\xa5\xc3\x1d\x81\x3b\x75\x17\x06\xa1\xec\x02\x8d\xc0\xdd\x87\x29\xb3\xc5\x78\x88\xf7\x47\xb9\xf2\xd3\xfa\x1c\xfb\x02\x71\x78\xc2\x9f\x4a\xca\x65\x4a\xa4\xc4\x2d\x70\x25\x81\x49\x6c\x1b\xc6\xe0\x4f\xa8\xfd\xb0\x23\x3d\xb9\x33\x79\xaf\xbf\x5a\x66\xf4\xb9\x0d\x35\x63\x37\x51\x2d\xb0\xc6\x2e\xce\x16\x5d\x9b\x6c\x3b\xcd\x5f\x0e\x8a\x50\x1a\x2e\x82\x08\xa3\x36\xf7\x4f\x47\xb3\x5a\x75\xc1\x1a\x6b\x2c\x85\x2e\xbc\xf5\x23\x70\x82\xd6\x37\xc6\xc3\xb6\x7e\x15\x5c\x5e\x9f\x35\xa8\xae\xe4\xef\x0c\xeb\x4f\x47\x3c\x4d\x8d\x5c\x50\xb2\xa5\x1e\x20\x6c\x92\x1c\x0b\x69\x4a\xe6\xd1\xdc\x78\x99\xf4\x95\x71\x30\x62\xcf\xc1\x86\x94\xc2\x80\x07\x61\x4b\x80\x25\xfa\x59\x1f\x37\xfa\x54\x0a\xae\x06\x91\x91\x42\xa4\x6f\x40\x08\xc6\x21\x58\x14\x8f\x5a\x41\xe0\xc1\x7e\x6d\x41\xea\x1b\x54\x0a\xac\xac\x6f\x5b\xbd\x40\x3f\xb7\xa0\x4c\xdf\x16\x9a\x72\xd7\x21\x04\x95\x02\x9b\x46\xb0\x83\x42\x81\xaf\x0a\xee\xed\x93\x35\x4d\x6e\x6f\x3a\xb1\x08\x15\x7a\xba\x6e\xb5\x7f\xef\x66\xf4\x7b\xe3\x77\xc8\x5b\x20\x4d\x82\xd6\x3c\xbe\x37\x3a\xd4\x32\xab\x4b\xb5\xb7\x81\x18\x12\x1d\x1a\xcc\xc0\xaf\x20\xce\x72\x70\x73\xfe\xd5\x01\xfa\x2a\xcc\x35\xfb\x6a\xa3\x03\x68\xc7\x6d\x8b\x05\x82\x36\x55\x4a\x38\x28\x1f\x3b\xd8\xab\xca\x49\xb4\x7b\x66\x0f\x22\x6a\x3b\x87\xfa\xcb\xd2\x37\xe0\x9c\x86\xe2\x77\xc6\x7f\xeb\xc3\x9d\xad\x0b\xc8\xc8\xb8\x54\x36\xac\x5d\x3c\x62\x93\x45\xd5\xc9\x73\xe0\xbd\x3c\x9d\x4f\xe9\xd6\x05\xdd\x74\x7b\xf5\xe4\xe4\x1d\x87\xe1\x2e\xbf\x0f\x56\xa4\x3b\x0f\x4c\xc4\x35\x9f\x06\x5c\xac\x2d\x4a\xa1\x8f\x5f\x6f\x9a\x55\xc9\x5e\xe6\x16\xb3\x71\x53\x56\xc9\x3f\xef\x8d\xdc\x3a\x04\x7d\x0f\x9a\x56\xc4\xc6\xfb\xb7\x08\xd7\x3d\x95\xbd\x2c\x95\xed\x22\xdf\xa1\x3c\xb8\xf5\x2f\xd0\x53\x23\xc7\x05\xcd\x38\x83\xab\x56\x26\x3c\x83\x2f\x55\xfd\x5b\x5d\x2e\x77\x4d\x9f\x6f\xb0\x26\xab\x9d\xbe\x77\x26\x70\xc0\xb8\x5d\xeb\x63\xad\x0e\x75\xa0\x6c\x09\x22\x4e\x4d\x6e\xa3\xa2\x29\x39\x40\x9c\x25\x8b\x20\xd8\xc1\x9e\x57\x20\x37\x13\xa3\x34\x27\x54\xb8\x4e\x2c\xc2\xe0\x5a\xc9\xf0\x6b\x4a\xe3\x6d\x34\xb2\x45\xa4\xc9\xd5\xe0\x72\x78\x36\x1e\x5e\xdd\x9f\xdf\xff\xdc\x80\x1e\x59\x7e\xec\x00\x24\x83\x17\xee\x7e\xbe\xbb\x1f\x5e\x8e\x3f\x0d\xaf\x86\xb7\x83\xfb\x15\xe0\x92\xcb\x3a\x6b\x03\x2e\xcc\x65\x93\xfa\xb6\x0e\x78\xa1\x33\xf3\x36\xf4\x5e\x87\x98\x0c\x3a\xa1\xa4\x05\x66\xd2\x24\xfe\xb3\x98\x08\x14\x93\x27\x92\xf0\xac\x30\xab\x36\x2e\x58\x80\x3f\xd9\xd0\xfe\x32\x0c\x4a\x68\xb3\xba\xc6\x27\xc8\x54\x7a\x0b\x8a\xdd\xfa\x06\x41\xe4\xc3\x82\xb0\xaf\x14\x22\x9f\xb3\x84\x46\x54\x05\x89\x81\x5c\x58\xf7\x8a\x71\x1f\x42\x74\xea\x0a\xe2\xda\x59\x34\xca\xce\x75\xfe\xd0\x93\x5e\xd7\xf6\xfd\x89\xf2\x78\x68\x2b\xcb\x07\xed\x40\xb1\x6f\x71\x1a\xd7\xe0\xda\x36\x18\xdd\x4b\x98\x07\xea\x19\x3a\x36\xb9\xaf\x05\xca\xad\x79\x90\xab\x6f\xc3\x65\x71\x32\xa5\x73\xbd\x3c\x50\xa6\x1b\xa5\xbe\x71\xb8\x4b\xa9\xac\xe6\x0e\x70\x37\x6c\xec\xfa\x9a\x01\x0b\xb5\x6a\x31\xcc\xc4\x9c\x62\x24\x48\xca\x95\x56\xc0\x4c\x44\xc0\x81\x16\xaa\x28\x4e\xe8\xaf\x80\x50\x25\xc8\x51\x10\x41\xe1\x70\xbd\x0a\xf7\x81\x45\x8f\x38\x1a\xb1\xb3\xe1\xcd\xed\xf0\x54\x33\xa4\x23\xf4\x20\x01\x7c\xaa\x34\xf5\x33\x4b\xde\x46\x1c\x0b\x23\x19\x28\x93\x8a\xe0\xb6\x60\x30\x22\x04\x17\xdd\xf9\x83\xef\x6f\x08\xdf\x35\x93\x37\x3c\x2b\xd9\xa6\x9c\x01\xe0\xaa\xb5\x26\x72\x90\x33\xb0\xf3\x94\xac\x5b\xfc\x5c\x5a\x91\x10\x7c\x03\x24\x91\xf2\xaa\xbf\xe0\x6a\x03\x7c\x67\xf7\xf9\x95\xfa\xbc\x81\x6f\x97\xcd\xf3\x1e\x42\xec\xa4\x2a\xb0\x40\x0d\x5c\xa8\xaf\x79\x53\x99\x67\xab\xa8\x28\xde\x02\xa8\xa3\x42\xfa\x13\x32\xc3\x0c\x89\x9c\xb1\x0a\x38\x6c\x68\x69\xab\x07\xcd\xac\x7b\x54\xf5\x9a\xe1\x94\xe7\x0c\x94\x06\x08\x63\x6d\x18\x8c\xcc\x08\x53\x2b\x06\xf3\x56\x30\x2c\x95\xa1\xee\x2f\x12\x4b\xc3\x40\xdb\xc0\x58\x9a\xfc\x49\x50\x78\x79\xbd\x6b\xd9\x05\xe5\x95\x9c\x4a\xfa\x50\xf9\xfb\xb9\x59\xcb\xc6\xf2\x71\xeb\xee\xee\xb1\x7c\x5c\xdd\x55\x4c\xa2\xc7\x75\x2f\x9b\x6a\x66\x66\x62\xeb\x56\xd7\x8c\x7d\x0b\xfd\xd4\x16\x66\x81\x72\xe5\xd1\x23\xfa\xfe\xfe\xf2\x02\x4d\xa9\x96\x7b\xf5\xb5\x72\x85\xb5\x8c\xfd\x20\x12\x67\x17\xb6\xb6\xd5\x5c\x24\xfe\xee\x85\x8d\x77\xa2\x54\x20\x25\xe8\x1b\x0d\xcf\x88\x33\xf6\x0a\x8b\xb5\x57\x29\xcc\x22\x30\x8b\x79\x6a\xe6\x71\x2c\xf3\xe9\x94\x7e\x3e\x52\x58\x7c\xd3\xb2\x1e\x26\xaa\x62\xfc\x77\x3e\x19\xeb\x11\x6d\x79\x11\x37\x35\x87\x6c\x39\x65\xbf\x6c\x76\x66\x67\xe6\xdd\xff\xcb\x27\x90\xeb\x9e\x09\x0e\xf8\x7f\xe0\x9d\xb3\x91\x0a\xf6\x15\x47\x49\x47\xc8\x25\x50\x95\x20\x4e\x22\x2e\x04\xb1\x29\xf2\xa6\xb2\x68\x86\x85\xa2\x60\xad\x75\x10\x29\x25\x6c\xfc\x62\x8b\xc2\x82\xdf\x73\x5c\xe0\x50\x4f\x08\x01\x07\x4f\x46\x93\xf5\x94\xde\xd3\x92\x6f\xb2\x72\x02\x6d\xe4\xa9\x45\xcd\x04\x83\xcc\x4a\x11\x6b\xf8\x44\x98\xda\x89\x7e\x02\x4d\x34\x24\xed\x77\xf3\x32\x98\x02\x9f\xe7\x67\xc5\xe5\xe6\x42\x7a\xc3\xa8\x26\x25\x30\xdc\xf3\x36\x51\xca\xba\xd4\xdb\x1c\xfd\x4f\x9d\x7d\xc7\xf0\x6a\x7d\x5d\x56\x84\xc6\xdb\xd5\x2e\x0a\x7d\x17\x61\xad\x0e\xd8\x7f\x43\x18\x1f\x49\x8c\x15\x23\x80\x8f\xb0\xca\x69\x75\xcf\x4d\x9f\x9a\xb6\x2a\x5d\xae\xdc\xf2\x0d\x30\x6b\x4a\xcd\x7c\x22\x90\xd2\xb9\x8b\x40\xf4\x75\x52\xf7\x61\x20\x0f\x22\x81\x10\xea\xa5\x56\x2c\x53\x64\x5c\x73\x3e\x2f\xd9\xe1\x0e\x32\xba\x19\x8c\x16\x1a\x49\x26\x48\xa4\xaf\xb2\x13\x74\x93\x10\x2d\x79\xe5\x5a\xfa\xca\x93\xc4\xe1\x7b\x2d\x97\x0e\xd7\xc2\xa4\x7b\xf1\x79\x05\xba\xc7\x92\x89\x39\x7c\xbb\xe5\x33\x0b\xd6\x60\xf7\x80\x0b\xc1\xfa\x82\x09\x19\x0c\x89\x65\x2d\x12\x38\xfc\xc2\xc4\xcd\x82\x29\x09\x97\x2e\x32\xfa\xab\x66\xbf\x82\xc8\x39\x6f\x4d\x72\x0c\x67\xfb\x32\x73\x70\x4b\xf9\x82\x93\x70\xf7\x61\x5b\x5c\x75\x07\xb9\xa6\x72\x07\x96\x44\x9c\x65\x53\xf4\xb5\x1f\x7c\xf4\x87\x45\x5b\xb5\x77\xab\x1d\x1a\xdc\x92\x85\xa9\x2d\x44\x3e\x2b\x5c\x17\x85\x32\xb3\x30\xbe\x57\xff\x79\x61\x40\x2e\x52\x02\xa8\x92\x45\xcd\x39\xa4\xef\xda\xb6\x2d\xd6\xf3\x1c\xe7\x62\x2d\x48\x8a\x02\xb3\x7c\x1d\xce\x6d\x93\x51\x8a\x61\xe9\x45\x68\x66\x97\xb6\x94\x04\x88\xd1\x36\xd4\x48\x96\x70\xe0\x2c\xd9\x98\x65\x6c\x54\xf1\xda\x99\xf2\xb6\x6e\x35\x90\x92\x0b\x51\xe6\xa5\xbc\x6b\x25\x0a\x2c\x4d\xa0\x47\x16\x5b\x1f\x59\xcc\xd6\x15\xf1\xb4\x07\x38\x80\x4a\x40\xe2\x7f\xe1\x40\xab\x0a\x0e\xd6\xe8\xbd\x2a\xf3\xa9\xb4\x3b\x9d\xd2\x9c\x4a\x5f\x68\x5e\x72\xb6\xa5\x07\x4e\x4f\x66\x31\x86\xc4\xd1\x6d\xa2\x70\x4a\xf3\x37\xde\x03\x68\x93\xc4\xc8\xa0\x17\x18\xdc\x63\xbb\x76\xde\x73\x92\x61\x41\x98\x1a\xb1\x5b\x3d\x0a\xf3\x45\x11\x89\xe1\xe2\x70\x1c\x16\x3d\x54\xac\x9d\x22\x6c\xbf\x82\x45\x6f\x0b\x84\x93\x63\xf3\x12\xa8\xa6\x2f\x98\x64\xff\x9d\x79\xc7\x60\x1e\x58\xcc\x1f\x3d\x55\x3a\x2d\xd4\x78\x2d\x40\x46\x73\x0a\x90\x03\x31\x91\xf6\x42\xa2\xca\x62\x4a\x78\xf1\x3b\x27\x0e\x7d\x19\x3e\xf3\xfc\xab\x89\x61\x3b\x43\x01\x73\x06\x3a\x39\x62\x41\x1f\x4b\xc0\x3a\x8d\xb2\xbe\xa1\x2a\x01\xfb\x4c\x63\xef\xf8\x82\x7f\x9a\x1d\xe2\x82\xce\x28\x0b\x4a\x26\xd9\xe9\xa5\x38\x03\xf3\xae\x39\x83\x7c\xea\xef\xb4\x7b\x9b\x65\x70\x04\x23\xfe\x9f\xff\xfe\xdb\x11\x6d\xf3\x7e\xc8\xb1\x5d\x81\x7d\xd8\xc9\xf5\xb6\x25\xdc\xf9\x00\x45\xa4\x05\x9d\x22\xd0\x69\x65\x29\x73\xa2\xf8\xd5\x5e\x6e\x9a\x68\xb8\x9a\x1b\x77\x6f\x99\xdc\xc1\x37\x22\xf2\xe5\x55\x04\x02\x16\x57\x04\x04\x14\x5e\xdf\x20\xe8\xd6\xd5\x88\x30\xc1\x92\xba\xfd\xca\x85\x52\x61\x50\x01\x98\xdf\x36\xc1\x89\x73\x2c\x5f\x2e\x02\xa5\xb1\xb6\x91\x31\x1a\x87\x77\xe4\xaa\x58\x14\x33\x48\x93\xd4\xa8\x77\x25\x97\x44\x98\x03\xed\x51\x9f\x2c\xf1\x84\x50\x85\x10\x8a\xb8\xc2\xa5\x46\x52\x4c\xd7\x0a\x9b\xd7\xef\x37\x03\x29\x96\x6c\xea\x78\x46\xc4\x38\xce\x4b\x31\xd2\xab\xda\xbe\xd1\x1f\x9d\xe5\x6a\xb1\xba\x7d\x99\xe0\x7a\x6d\x97\x65\xe0\x95\xfa\xfd\x96\x66\x57\x0b\x86\x41\x24\x4b\x59\x38\x6c\x81\x86\x24\x15\x68\x48\x1b\x5a\x59\xb2\x04\xc0\x45\xc3\x14\x20\xc7\x15\x0a\x83\xbd\x89\x0c\x80\x35\x8c\x1c\x4d\xf2\xc2\x72\xe2\x4b\x02\xc4\x47\x23\xf6\xd1\xd4\xd4\x00\x65\xc6\x0c\x20\x82\xbc\x16\xf2\x39\xe3\x92\x94\x12\xad\x1a\x60\xfe\x6d\xa2\xa4\x1d\x46\xb3\x4c\x5a\x7c\xb4\xbd\x48\xfa\xe6\x20\x9f\xf5\x0d\xaf\x4f\xb9\x99\x02\xb7\x92\x7a\x22\x9a\x51\x4d\x3b\xe3\xc6\x93\xf6\x72\xa5\x66\x8b\xd0\x25\x80\x7b\x52\xc9\xe2\x00\xf9\xe9\x55\x08\x22\x21\x4f\x04\xac\xc6\x30\xc6\xb0\x98\x43\xd9\x7c\xd5\xc2\x4e\x56\x1d\xa0\x22\xcb\x11\xd8\x02\x8a\xab\x23\x28\xe7\x82\x35\xd1\x62\x39\xcb\x65\xeb\x84\xac\xa6\xf8\x8b\x35\xa4\xd0\x41\x58\xd4\x62\x41\x14\x22\x9f\x15\xb1\x65\x2f\xef\x5d\xca\x5c\x3d\xca\x1e\x35\x67\xfd\xb4\x8b\x48\x2f\x5e\x80\x78\xe0\x12\xa5\x5d\x4e\x60\xec\xee\x7d\x9b\x23\x37\xc7\x2c\xb6\x89\x9f\x56\x96\xd6\x32\x05\xcc\xce\xd8\x96\x7c\x48\xbc\x4d\x5f\x0c\xd0\xc0\x4d\x9b\x06\xb6\x1c\x2e\x32\xa7\x17\x69\xc9\x1c\xa2\x08\xb8\xd0\x02\x6a\xce\x14\x4d\x34\x71\xd8\x31\x68\xad\x39\x67\x1e\x8f\x0f\x02\xb8\xdb\x20\xdf\xa8\x94\x94\xcd\xc6\x76\x25\x5d\x0e\x63\xb7\x8b\xa1\x4c\x53\x97\xa6\x29\xf3\xe3\x77\xae\xa1\xe5\xb6\x63\x43\xd6\x00\xc7\xe5\xb2\x27\x41\xb0\x66\xdc\x4d\xc6\xe2\xa8\xb9\xa4\xcb\x31\x8d\xcd\x52\x50\x53\x5d\x19\x26\xba\x8e\x79\x19\xc4\xba\x3a\x5c\x41\x71\x85\x48\x9b\x11\x69\xf2\x9c\x20\x20\x5d\xb5\xa4\x7c\xca\xd6\x54\xcf\x73\xe6\x45\x34\x5b\xdb\xc9\x27\xb4\x57\xb2\x46\xb1\xeb\xce\x46\xdd\xe3\x24\x99\xe0\xe8\xd1\x2b\x1b\x5e\xe5\xe6\xc2\x61\xe3\x6b\x01\x15\x8a\x7f\x19\xe2\xd2\x03\x8d\x40\xba\x09\x9d\x62\x06\xb0\xc6\x0e\xbb\xe8\xdc\xac\x9a\x45\x02\x33\x08\x45\x66\xf4\x26\x84\x3f\x26\x59\xc2\x17\x69\xcb\x7d\x56\xcd\x94\xdb\x26\x20\xa5\x2d\x51\x6f\xa7\x57\x59\x85\xe9\xad\x7d\x99\xd5\xd2\x6e\x76\x00\x9f\xb4\x06\x97\xfc\x94\xf0\x09\x58\x0e\xad\x96\xed\x52\x49\x82\x8c\x86\xea\x79\x5e\x37\xc1\xa5\x7a\x22\xa9\xcc\x12\xbc\x58\xd6\x83\x49\xad\x78\xd9\x7d\x33\xa9\xf8\xab\x8d\x60\xdd\x83\x92\x1b\x3f\x7f\x09\xa0\xde\x0b\x27\x09\x98\x77\x0d\xff\xaa\x18\x93\x4c\x4e\xdb\x91\xf1\xc5\x2a\x3e\x62\x0a\xcf\xdc\xe6\x5a\xe1\x92\x3f\x33\x22\xe4\x9c\x66\xa5\xa2\x80\x5b\x47\x41\x5b\x8a\xb6\xff\x31\x31\xbf\x6b\xf0\x4e\x9e\x1d\x1a\x20\x0e\x4d\x1f\x32\xc3\x51\x61\xfc\x8b\x12\x2c\x25\x9d\x2e\x02\xfc\x0c\x1f\x50\x0a\x59\x4a\x65\x6d\x39\xa8\xc3\xd5\xc4\x68\xcc\xf8\x76\x93\x40\xbe\x7d\xf2\xdc\x43\xf9\xf8\xd1\x38\x04\x2a\xd3\xf7\x49\x1d\x2c\xc5\xdd\xd4\x16\x34\xa5\x15\x70\xd5\x64\xca\x6f\x96\xf0\xbd\x14\xe3\xa6\xdd\x8c\x50\x08\x93\x76\xd8\x56\x91\xf1\xb8\x16\x21\xe6\x8b\x2a\x65\x0c\xc2\xe6\x6b\xc5\xc9\x99\x3f\x35\x71\x7a\x4c\x0c\x80\x0e\x28\x3e\x3e\x40\x72\x2b\x2c\xa9\x2e\x74\x71\x46\x12\xb2\x93\xc0\xe2\x0d\x88\xa4\xea\xb5\x0f\xc8\x63\x29\x69\x14\x58\xfa\xab\x8d\x0b\x1b\xc4\x3b\xb7\x20\xd2\x34\x0f\xfd\x27\x33\x50\x1b\xf2\xdc\xb4\x8b\x60\xff\x82\x55\xee\xaa\xbb\x34\x41\xdb\x99\x16\x2c\xc9\x15\xdd\x94\xe8\xaa\xe8\xd4\xcb\x2b\xfb\x48\x6a\x6f\x1c\x19\x5c\x1b\xd7\x27\xd2\x25\x8a\x61\xe5\x01\xd8\x88\x03\xd5\xf9\x74\x37\xba\xb0\x7e\x42\xc5\xd1\x8c\x28\x53\xe2\xde\xd7\xf1\x7f\x4f\x34\xb1\xb3\xbc\x86\x1d\xad\x7e\xf3\x21\x5f\xef\xd4\xde\x11\x25\xdd\x95\x50\x43\x0b\xb4\x9b\xb3\x87\x5b\xb0\x1f\xc7\xd2\x08\xae\x5f\xbc\xdc\xb2\x35\x16\x80\x1d\x99\xcd\x88\xff\x0d\x09\x54\x66\x8e\xb1\xfd\xc2\x67\xbf\x97\x70\x9f\x70\x09\x2b\xcf\xac\xd1\xdb\x73\xbd\x2a\x69\x7f\xe9\xa2\xd7\xfa\x34\x5e\x1d\x55\x41\xdd\xbd\x3c\xb8\x9e\x3c\xe8\xb0\x24\xf7\xf0\xf2\x6f\x3b\x06\xfb\x79\xff\xec\x81\x70\x58\xbb\x12\x77\x27\x22\xbe\x23\x32\xd9\x0b\x49\xb1\xb6\x15\xaf\x25\x2f\x1e\x3a\x30\x9f\x02\x1a\x67\x7f\xb7\x68\x3f\x4e\xf2\xad\x75\x03\xbd\xdc\x05\xbb\x9a\x5e\x76\x42\x1f\x80\x6b\x89\x21\xfd\x37\xb7\x85\x32\xe0\xf0\x06\x21\x63\x35\xdf\xc3\x8a\x60\x3c\x3b\xbc\x4e\x61\x78\xb5\xe5\x7c\x89\xed\xb5\xb9\x5e\x9d\x37\xf7\x25\x49\x6d\xdd\xb1\xec\x42\x47\x79\x61\x2f\x8e\xa5\xc6\xe0\x83\x3e\x26\xb6\xdb\x2d\xda\x80\x20\xe3\xb6\x6c\x97\x87\xac\xa9\xba\xd9\xf6\xd9\xea\x2e\x95\x6d\x9c\x09\x32\xa5\x9f\x37\x12\xc5\x6f\xe0\x53\xab\x5e\xea\x65\xae\xd4\x4b\x03\xf7\x0c\xd4\x57\x0b\xe2\xf6\xec\x4a\xdb\x9a\x4a\x23\x56\x24\x00\xda\xec\xbf\x47\xb2\x40\x5c\x94\x7e\xda\x14\xeb\x70\xf7\xb5\xdd\xcc\xbe\xce\x95\xca\xe4\xc9\xf1\xf1\x8c\xaa\x79\x3e\x39\x8a\x78\x6a\xc2\xcd\xb9\x98\x99\x3f\x8e\xa9\x94\x39\x91\xc7\x7f\xfc\xc3\x1f\x8a\x2d\x9e\xe0\xe8\x71\x66\xd0\x63\xea\x7e\xa7\xf2\x96\x13\x2c\xb7\x8b\xec\x71\x99\x5a\x2f\x9c\xb1\x1b\x74\xe3\x72\x24\xf5\x37\x52\xe1\x34\x0b\xa3\x47\x4d\x75\x34\xa9\x70\x51\x93\x01\xd2\xef\xf4\x34\xd1\x1c\x67\x19\x61\xed\x66\x07\x93\x4f\xb9\x05\xeb\x71\x19\x99\x76\x84\xe4\x73\x96\x60\x56\x46\x19\x80\x02\x43\x82\x44\x84\x29\x9b\x01\x5f\xd4\x4b\x06\x6a\x34\x48\x37\x86\xff\xaf\x97\x71\x07\x73\xa4\xb2\xa8\x1c\xe6\x86\x63\xab\x78\xba\xda\x8e\x38\x58\xba\x6a\xe5\xd4\x62\xed\x88\x5b\xb5\x65\xb9\x78\x77\xf5\xfa\xd9\xeb\x57\x6e\x11\x9c\x8d\xc9\x67\xcd\xe4\xe4\xa6\xb8\x54\x0f\x92\x48\x34\xf8\xe9\x0e\xc9\x05\x53\xf8\xf3\x09\xba\xa4\x0c\x04\xd8\xef\x79\x2e\x24\x3a\xc3\x8b\x43\x3e\x3d\x4c\x39\x53\x73\x74\x09\xff\x6b\x7f\x7a\x26\xe4\x11\xfd\x4c\xb0\xb0\xfc\xc1\x56\x5e\xf3\x45\xbc\x35\x09\x89\x9c\x49\x44\x9e\xf4\x09\xfd\xc3\x7f\xa2\xd4\xb4\x7c\x82\xbe\x3d\xfe\xc3\x7f\xa2\xdf\xc1\xff\xff\xff\xd1\xef\x5a\x34\xfd\xf5\x90\xad\xa0\x3e\xef\x6d\xd9\x9d\x7b\x50\x59\xa9\x0d\x4a\x96\x9f\x0a\x5e\xec\x54\x63\xcb\x8f\x34\x7a\xe4\xd3\xe9\x58\x13\x86\xc9\x57\x1b\x63\x51\x43\x45\xde\x10\x26\x94\xda\x02\xcb\xa6\x60\x5b\x51\x2a\xc5\x76\x6a\x80\x0d\x1c\xbb\x96\x79\x51\x60\x16\x82\x88\x4a\x45\x7b\xa9\x84\xaf\x48\xac\xb9\xea\x3a\xa7\xc3\x59\xf7\x5c\x8e\xb3\xb3\xe0\x84\x40\x20\x61\xd1\x70\x1f\xf8\x17\x46\xb1\x9a\x40\x1f\xbb\x90\x8d\xc7\xa1\x16\x5e\xfb\xc5\xc4\x4c\xc2\xd4\xde\x2a\x5e\x52\xd6\x3a\x5f\x1d\x2a\x79\xc7\xc5\x56\xfa\xd6\x23\xa9\xc5\x6c\x77\x2c\x0b\xe4\x4a\xd5\x86\xe5\xeb\x21\x11\x9a\x0b\x0f\xd7\x6b\xec\x22\xb6\x78\xe0\x6a\x2b\x26\x15\x26\xb8\xac\xdb\xa1\xd7\x53\x3f\xf3\x9f\xac\x1a\x26\x44\x9a\xb9\xb7\x8b\xb2\x68\x30\x5a\x2d\x22\x69\x96\xd8\x30\xe2\x06\x4c\xbf\x55\x1b\x7a\xe7\x61\x1c\xa0\x71\x08\x7b\x84\x94\x0f\xe6\x24\x5b\x9b\x27\xdf\xbc\x9f\xb9\x88\xc8\x29\xdf\x2e\xec\x35\xa1\xac\x16\x2f\xdf\xbd\xe2\x8e\x5f\xbd\x0b\x5b\x5b\xc9\xc1\xde\xf2\xb8\x50\x16\x8c\x5b\xc0\x16\x5b\x08\xf0\x36\xcb\xb3\x01\xdc\xb6\x5d\x40\x3a\xd6\x4a\x00\x6c\xc1\xb5\x8d\xe1\xb8\x60\x78\xae\x82\x44\xa5\x70\x84\xc0\x9a\x17\x2e\x89\x5d\x83\xa0\xa2\xad\xc7\x11\x14\x43\x29\x22\x95\x2a\x45\xc7\xb1\xa9\x08\x22\x36\x84\xe4\x34\x75\x89\x0e\x90\xc0\x10\x94\xa9\xe6\xba\x3d\x49\xc4\xe1\x14\x47\x94\xcd\x0e\x02\x34\x46\x40\x46\x08\xaf\x83\x26\x22\xbd\xc7\xf2\x71\xb7\x81\x86\x5b\xd7\x69\xa4\x71\x51\x2b\xcc\xe2\xa7\x18\xc7\x06\xad\x41\xd1\x29\x2c\x1f\xdb\x00\x84\x6a\xe8\x65\x4b\x46\xe7\x97\xc2\x61\x9e\x2d\x1b\x9f\xcb\xb4\x26\xa1\x3e\x05\xa5\x09\x5c\xe5\x60\x8b\x65\xe8\x12\xdb\xb0\x07\x1b\xa9\x82\x78\x2e\x19\xbf\x9c\x73\xa1\xc6\x1b\xc2\x9f\x56\xb3\xc5\x19\x39\x4c\x00\xb7\x84\x3f\x11\xf1\x44\xc9\x73\x19\x45\x74\x1d\x5a\x34\x46\xb3\x20\xaa\x0e\x60\x26\xd3\x8c\x43\x0a\xcd\x14\xa5\x98\x2d\x0c\xa3\xd4\xcc\x05\xcb\x47\xe9\xeb\x95\x22\x99\xe2\x24\x39\x40\x82\xe4\xd2\xd4\xf1\x95\x24\x99\x1e\xba\x8a\x0f\x31\x4a\xf8\x8c\x46\x38\x41\x93\x84\x47\x8f\x72\xc4\xb4\xa0\xc0\x66\x86\x49\x65\x82\x47\x44\xca\x40\xb2\x2a\x92\xb6\x6d\x2a\x1d\x14\x2b\x55\x44\xa4\x94\x51\xa9\x68\xe4\x44\xa6\x02\x7b\xc1\x94\xcc\x8e\x30\x98\x84\x21\x31\x11\x86\xab\x25\x3d\x62\x30\x28\x73\x66\x6b\x03\xc1\x75\x6d\xa1\xe5\x5c\x90\x78\xdb\x01\xda\x01\x52\x9e\xa3\x90\xb1\x2a\x1f\xc8\x15\x47\xea\xd4\x7e\x06\xc7\x78\x19\x09\xdc\x96\x4f\x94\x27\x48\x7f\xd2\x4a\xe8\x3d\x10\x53\xee\x43\xe0\x4b\x92\x8b\x8f\x0c\xdf\x33\xe0\x2e\x18\x72\x0b\x5c\xd7\x2a\x9a\xd6\xab\x08\x22\x0f\x94\xa3\xaa\x7a\xcd\x29\x8b\x92\x3c\xf6\x05\x09\xb5\x08\xf0\xa4\x89\xc4\x2d\x8f\x5e\x7b\x2d\x28\x1c\x20\x2c\xd1\x33\x49\x12\xfd\x5f\x13\x01\x7f\xe8\xeb\x03\x68\x96\x6c\x6a\x38\x40\x27\x8e\x4b\xb7\x51\xd4\xde\x81\x30\xde\x60\x35\x37\xa9\xed\x29\x57\xa6\x16\xa4\x01\x61\x74\xf6\x2d\x83\xda\x37\x49\xf8\x04\x4e\x3a\xe0\x33\xba\xd4\xd8\x20\xad\x2e\x8f\x22\x42\x62\x12\xa3\xaf\x83\x83\xeb\x61\x17\xbe\x69\x46\x0b\x2c\xad\xc8\x1e\x60\x33\x56\x0d\x6b\xad\x08\x8d\xe5\x72\x66\x47\xe8\xa6\x82\x3f\x12\x96\x29\xc7\x55\x34\xaa\x83\xda\x16\xbe\x0d\x9e\x63\x65\x12\x2f\xb7\x43\x6b\xe2\x39\x96\xfa\xdc\x01\x9e\x63\x65\x9e\x2d\xb1\xfb\x7c\xf6\xa2\x39\xc7\x7a\x52\x17\xbc\x7b\x22\x98\xc1\xc1\x32\x77\x67\x89\x04\xdd\x81\x5c\x34\x11\xe2\x7e\x61\x55\x56\x8a\xfe\xbd\x2d\x56\x65\x65\x30\xfb\x8c\x55\x59\x19\xea\xfe\x62\x55\x36\x0c\xb4\x03\x56\xa5\x71\xee\x8f\x35\x51\x77\x63\x0a\x90\xd8\x32\xc9\xa7\x77\x90\xea\xbd\x74\x8c\xa7\x26\x70\xc0\x5c\x63\xee\x8e\xb6\xd0\xcd\x30\x5a\x9b\x03\xd9\x16\x0e\x55\x71\x42\xac\x4b\x7b\xde\xfb\x46\xa5\xd1\xd0\xd6\x33\xbb\x1f\x84\xd6\x6e\xb0\x43\x46\x38\xb3\x39\xe5\x6d\x15\x55\xf6\x27\x7b\x76\x33\x18\x50\x80\xda\x2b\xb1\xfc\x4e\x40\x59\x97\x95\xe2\x04\x73\xfe\x6c\x0b\x04\x01\x19\x1a\xa2\x6c\x25\x41\xe8\x74\x6c\x95\xb6\xb6\x95\xa3\x4c\x91\x59\x55\xa7\x2d\x0e\x0d\x65\xea\x4f\x7f\x5c\xc9\x89\x0c\x92\xa0\x53\x0f\x83\x12\x01\xde\xd9\x61\x9f\x91\x18\x45\x73\xad\x15\x49\xad\xbe\xe8\xe9\x98\x9b\x55\xa2\x14\x53\xa7\x48\xe5\xd2\xb8\x96\xa8\x1c\xb1\x12\xf4\xe6\x11\xfa\x08\x75\x4f\x71\x9a\x69\xfd\xcb\xcf\x8f\x6a\x4a\x1a\xe5\xdf\x7e\xfb\x27\x82\xbe\x45\x29\xc1\xac\xa4\xc3\x82\xda\xa4\xaf\x3e\x80\xaa\x53\x73\x32\x62\x8d\x5b\x81\x86\x9f\x4d\x29\x25\x17\xef\x77\xce\xa6\xdc\xe9\xc4\x50\xcf\x0f\x47\x73\x24\xf3\x89\x29\x48\x1b\xd8\x30\x9c\x20\x7d\xc1\x67\xe0\xa8\x86\x1b\xd9\x0d\x7a\xd9\x29\x7c\xd9\x18\x00\xeb\x6e\xec\x7a\x1b\x0f\xe0\x1e\x39\x94\xa4\x04\x61\xd4\xe0\x34\x33\x9c\x2f\x3c\xf8\xd2\xe0\x9f\x1e\x18\x1f\x82\xd6\xcf\xb0\xb5\xec\x6b\x59\x1a\xc2\x79\xc1\x4b\x96\x27\x58\xd8\xa3\x3f\x62\x5a\xd1\x10\xe4\x89\xf2\x5c\x26\x0b\x14\x73\x46\x0e\x80\x12\xf2\x68\x6e\x1c\xab\x5a\x67\xc1\xb6\x2e\xc3\x13\x95\xb9\x56\x68\xa1\x2d\x57\x06\x42\x2a\x6c\xa0\x97\xe6\x14\xfa\xd1\xea\x37\x81\xaf\xc2\x2c\x39\xd4\x4d\x8b\x0a\xd1\x51\x2b\x3c\xbf\x23\x3a\x6a\x89\xaa\x7a\x74\x54\x8f\x8e\x5a\x5f\x97\x7d\x44\x47\xad\xec\x79\x37\x74\xd4\xa6\x2d\xdf\x00\x1d\xb5\xd4\xcc\x17\x83\x8e\x5a\x59\xd1\x2f\x06\x1d\xb5\x32\xaf\x1e\x1d\xf5\xcb\x43\x47\xdd\x12\xff\xb3\x99\x17\x1b\x7c\x25\x45\xd9\x62\x6d\x22\xfb\x4a\xa2\xf3\x6b\x4d\x60\xd1\x63\x39\xa8\xcd\x5f\x57\xdb\x63\x8e\x36\x33\xa1\xf5\x30\x47\x1b\x55\xf5\x76\x56\xb7\x2d\xc0\x13\x28\x06\xaf\x8c\x39\x5a\x9a\x40\x1f\x5f\xb9\x7e\x7c\x65\x23\xf1\xd9\xbe\xf5\xf0\x5c\xd0\x65\xf5\x42\xee\x88\x3a\x5a\xda\x9f\x4e\x91\x98\x20\xba\xef\x80\x12\x5f\x56\x9a\xbf\x2f\x1d\xf2\x95\xb2\x7c\xb8\x8a\xd2\xe2\x1f\x6b\x09\xcf\xa1\xc5\x19\x25\x3c\xf4\xff\xf7\x94\xbb\x41\x64\x70\x65\x79\xbd\x5f\xc5\xd0\x62\x07\x52\xed\x4c\xa1\x4e\x2b\xdd\x4d\xa2\xac\x4b\x9e\x5c\xd3\xc5\xec\x06\x71\x97\x91\xa8\xc5\xc6\x4c\x53\xba\xab\x66\x57\x5d\x64\x1e\x0b\x0b\x14\xf2\x5a\x5e\xa8\xbe\x9e\xcc\x70\x8c\x8c\x5f\x49\x87\x05\xa0\x0e\xf3\xe5\x8c\x4a\x25\x5a\x63\x9b\x6a\x23\xdc\xc6\x55\x9a\xe5\x9d\x03\x62\x82\x55\x9d\x6d\xf6\x59\x4a\x52\x2e\x56\x05\x56\x35\x7e\x69\x2b\xba\x6c\xf2\x29\xc9\xe6\x24\xd5\x92\xcc\x78\xdd\x46\xba\xee\xb7\x4f\x1a\xb6\xb9\x6b\x26\xd0\xb1\x44\x04\x81\x23\x54\xbf\x1b\x1b\x44\xca\xce\xdb\xbd\xed\x36\x5b\xcc\xcc\x35\x1d\x42\x0e\x33\x78\xb9\xc1\xcd\xbe\x54\x72\x77\x03\x7d\x37\xc6\x74\xf8\x90\x9a\xd5\x51\x1b\x4b\xe2\x35\x96\xe1\x4e\x15\x5f\xd9\x7a\xc7\x6b\xb8\xf2\xcb\xde\x79\xcd\x09\xc3\x62\xb7\xeb\x07\x78\xb4\xa0\xa6\xd6\x97\x07\x22\x73\x24\x11\x87\xa1\x66\x50\x1a\x4c\x7d\xbd\x4a\x54\xe2\x34\xca\x2d\x88\x24\x17\xad\x51\xa6\x5d\x0c\xda\x91\xca\x71\x02\x9a\x44\x58\xa4\xb1\xba\xa9\x93\x45\x43\xda\x63\x37\x8f\x09\x65\xea\xcf\xff\xb1\xd6\x6e\x6a\xd5\xca\xae\x1b\x14\x96\xc2\x51\x44\xa4\xb1\xb1\xdb\x28\x64\x3c\xe1\x4f\x50\x53\x6a\x9b\x5d\xd5\x47\x59\xcf\x5b\x33\x78\x0f\x45\x1c\x17\xa4\x6e\xc4\x85\xb9\xe0\xf9\x6c\xee\x6c\x48\xfa\xcc\xe8\xa9\x35\xed\xe5\x8f\x35\x1b\xf9\xda\x7b\xf9\x5d\x4e\x93\xcd\x2c\x74\x77\xa5\x6a\x5b\x9f\xce\xef\x91\x9c\xfb\xd3\x3a\x81\x66\x1b\x37\xb6\x3e\xe8\xee\x7d\xda\x6f\xbd\xbf\x06\xba\x39\x70\xf0\x9b\x53\x9e\x24\xe0\x69\x90\x24\x7d\x0a\x8b\xe4\x87\xdd\xc3\x84\xef\xe9\x7a\xc8\x79\x7e\x00\xf0\x75\x91\x18\xd1\x49\xfe\xba\x31\xa2\xa1\x44\x6e\xf4\xd5\xa0\x05\x13\xaa\xc6\x19\x61\x4d\x36\xb6\x9f\xea\x85\x4e\xde\x59\xc0\xa0\x8b\x1e\xdb\x59\xd0\xa0\x5b\x92\x57\x0e\x1c\x5c\x31\x8f\x7d\x0d\x1e\xac\x30\x3b\x1f\xcb\x57\x5c\x33\x2e\x70\xc8\x28\x3e\x03\xbd\xc4\x23\x36\x28\xe5\x53\xb8\x82\xd0\x93\x45\x11\x90\x6d\x74\x88\x90\x99\x41\x39\x09\x6b\x58\x01\x37\x9a\xfe\x0b\x34\x1d\x03\x5e\x6b\x42\x0a\x5d\xd8\x20\x44\x93\x93\xf8\x10\x47\x8b\x28\xa1\x51\xa0\x33\xcf\x04\xce\xe6\x4d\x1c\xcf\xed\x7c\x8f\xba\xf3\x56\xa8\x3b\x6d\x75\x97\xd6\x89\xdb\x76\x74\xc5\x70\x4a\x7a\x34\xa0\x26\x34\xa0\x03\x8f\x77\xc1\x8a\x0a\x52\x6f\x08\xa3\x50\x3f\x77\x3d\x24\xd0\x1b\x40\x02\x6d\x72\xf8\x0a\xbc\x9f\xd2\xb1\xeb\x61\x8a\x3e\x74\x82\x29\xf2\x97\xe0\x5e\x21\xcf\xb4\x9f\xc7\x37\x46\x34\xa9\x0f\xec\x2d\x61\x89\x1a\xc4\x85\x75\xe4\xa6\x65\xb8\x44\xcb\xe8\xa2\xd3\xba\xbc\x2d\x4a\xd0\x7a\x2b\xb3\x16\x00\x50\xe3\xdd\xb5\x27\x70\x40\xed\xdb\xb0\x27\xe7\x66\x97\x59\x2d\xeb\x95\xc8\x0c\x33\x5b\xd6\x51\xb0\xd6\x4b\x72\xf1\xf4\xf0\xbe\x12\x5d\x8a\x5a\x62\x9b\x25\xbb\x0c\x9c\x0f\x9a\x08\x34\xe7\x49\xec\x40\x28\xfc\x6a\xf9\x0e\x7c\x26\x80\x5f\x20\xb7\x19\x50\xd3\x1b\xb4\xad\xa2\x20\xd8\xb2\x94\x16\xbf\x89\x30\xdc\x1d\x30\x9a\x5d\x58\x11\x3c\x27\xd9\xc4\x7e\xb0\x52\x16\x91\x65\xf3\xf7\x92\x31\x96\x56\x08\xac\xe6\xcd\xc3\x5c\x69\xf7\x5d\x31\xb8\x65\xa2\x47\x60\x1c\x14\x4d\x15\x2d\x0d\x9d\xc1\xd3\x27\xea\x0c\x11\x38\xec\x71\xa9\x97\xce\xcd\xae\x93\xa7\xae\x4a\x2c\x1b\x04\x83\xd5\x2a\xb7\x6d\x0f\x0e\x94\xe2\xcf\xe3\x0c\x0b\x9c\x24\x24\xa1\x32\x7d\xb1\x60\xe0\xd3\xb2\xbb\x56\x9f\x55\xc1\x8d\x89\x88\xe5\xe9\xc4\x90\xa2\x1b\x88\xad\x17\xa9\x38\x12\x39\x0b\xa1\xcd\x9e\x6b\x45\xf5\x73\xb8\x17\xc0\xaa\x14\xcd\xa1\x38\xe9\x14\x53\xc1\x88\x6c\x2d\x05\x49\xa2\x5c\x50\xb5\x18\xdb\xca\x9a\xdd\x0f\xdc\x9d\xfd\xf2\xd4\x7e\xb8\xdc\xc3\xed\xb2\xfa\x5d\x7f\xbe\x92\x67\x46\x04\x94\x09\x72\x05\x6f\x82\xea\xa1\x16\xb5\x81\xf8\x5a\x43\x10\xfe\x5c\xbb\xb6\xdb\x02\x87\xf1\xf3\x38\xc8\xa8\x1a\x47\x55\xe2\x58\x75\x58\x9b\x70\xa7\x96\x4d\xf2\x85\x91\x97\x5a\xbc\xc8\x2f\x50\x65\xc4\xa6\x4d\x98\xa6\xf5\x80\x03\x57\x30\xd8\x2b\x8b\x8d\x09\x52\xde\xad\x52\xd5\x32\x4e\x8b\xf5\xd3\x14\x7c\xb4\x64\xb0\x83\xe0\xab\x0e\x23\x0e\x3a\xd9\xd1\xb0\xf5\x41\x17\x22\xcf\x14\x9d\xd4\xa1\x6d\xd4\xee\xaa\x8e\x0e\x12\x48\xb3\x76\x6e\x86\x52\xb7\xa6\x14\x69\x89\x13\xdb\xd9\x69\xf9\xdf\xe2\x88\x39\x84\x20\x83\xb0\x14\xe6\xf1\x5d\xa7\x54\x29\x97\x28\x60\x0c\xd0\x9a\x3a\xcb\xb6\xd9\xaf\x5c\xb8\x07\x86\x82\xa6\xc6\x44\x74\x34\x62\x03\x89\x9e\x09\x62\xc4\x42\x48\x34\x94\x2a\xf5\x56\x6d\xa8\xfd\x34\x21\xba\x27\x1f\x9b\xa2\x85\x07\xaa\xa4\x2f\x3f\x66\xfa\x98\xe2\x44\x92\x03\xdd\x30\x54\x2d\x55\x1c\x82\x3f\x31\x7a\x16\x38\xcb\x88\x18\x31\x9b\xc5\x01\x0e\x17\xce\x13\xd3\x7e\x5b\x88\xab\x5d\x03\x32\x8e\x70\x34\x7f\xa5\x3d\xc2\x90\x8c\x13\xcd\x49\xec\xf2\x85\xcb\xdb\xe3\xe6\x6d\x0c\xd6\x6b\x6c\xd6\xf9\xd4\x95\xcf\x3a\xb0\x9d\x24\x91\xe6\x28\xbe\x9a\x72\x46\x84\x1e\xb5\xa6\xe1\x27\xc2\x10\x9d\xba\x71\xd8\xd8\x1d\xf4\x0c\x9e\x29\x4d\xfa\x4f\x98\x26\x26\x01\xdf\x75\xed\x84\x40\x63\x7e\x1f\x31\xe3\xee\x66\x51\x29\x43\x95\x32\x2a\xe7\x9a\x53\xe7\xe0\x93\x04\x35\xa3\x2d\x71\x86\x3d\xad\x73\x9a\x87\xfa\xf5\xe5\x1c\xf4\x89\x0a\xce\x52\x48\x92\xb1\xb8\x4c\x6e\xf9\x24\x51\xfe\x78\x34\xa6\x38\xae\x94\x88\xe3\x58\x96\x8d\x9f\x46\xad\xa4\xbf\x96\xcc\x2e\x87\xa5\xac\xc0\x28\x80\x15\x82\x20\x4e\x57\x59\x6c\x99\xfc\xdb\xa7\x36\xd4\x53\x1b\x9a\xd7\x66\x1f\xd3\x1b\xfc\x21\x5e\x37\xc5\xa1\x6d\xfb\x77\x21\xd9\xee\x30\xd5\xe1\x8d\x73\x02\x5e\x26\x1d\xe0\x6d\xf3\x37\x5e\x22\x75\xa3\x4f\x70\x78\xc3\x04\x87\xce\x96\xda\x72\x6c\x76\xfb\xb1\x5d\x2b\x39\x60\x05\x98\x53\x53\x2f\x97\x44\x09\x1a\xc9\x5d\xf0\x07\x99\xe1\x8e\x51\x6d\xa0\x05\x66\x2b\xa4\x26\xfd\x82\x77\x42\x42\x9c\x98\xaf\xf3\x37\x11\x04\x3f\xc6\xfc\xb9\x66\xab\x93\x21\x9a\xc6\x25\xd7\x62\x8f\x20\x11\x95\xa4\x14\xc9\x42\x25\x62\x44\x5a\x63\x27\x1e\xb1\x39\x25\x02\x8b\x68\x0e\xd9\x8d\xc5\xc6\x98\x2c\x59\x03\x68\x64\x62\x19\x42\x6f\xd3\x1a\x9b\xde\x61\xdd\xab\x16\x26\x8f\x4f\x67\xf7\x5c\x8f\x24\x35\x9f\x78\x61\xc6\x4a\x19\xa1\x49\xae\xd3\xf6\x6f\x1b\x88\xef\x17\xfb\x45\x83\xf1\x7d\x30\x51\xf0\x45\xc7\x80\xfc\x82\x1a\xfa\xa0\xfc\x17\x0a\xca\x6f\x58\xe2\xf5\x02\xf3\x37\x32\xf9\xbd\x7e\xcc\xb0\xeb\xf9\x35\xe2\x86\x57\x05\x6d\xe5\x93\xf1\x8b\x1f\xbd\xc6\x39\x77\x3d\x81\x3f\x79\xa2\x30\x12\xb1\xd0\x74\x36\x21\x71\x0c\x9c\x56\x71\x5b\x29\xba\xa0\x1d\x67\x1e\xd0\x77\x2f\x96\x9a\xd8\x71\xc2\xd9\x4c\xd2\xd8\x80\xad\x64\x18\x2a\xb6\x86\xc6\x0b\x00\x17\x80\xfd\x4d\x12\x22\x9c\x57\x42\xa0\xaf\x25\x65\x16\x4d\xd1\xff\x16\x73\x22\xd9\x57\xca\x18\x0b\x30\x5b\xa0\x47\xc6\x9f\x13\x12\xcf\x60\x87\xaa\x83\x39\x44\x94\x1c\x20\xaa\xfc\x67\x02\xd0\x08\x78\xae\x46\x7a\xec\x10\x6b\x66\x34\x00\x62\xbf\x0d\x6a\xa2\xfb\x66\xbe\x39\x42\xe8\x9c\xa1\x29\x8e\xd4\x01\x92\xf9\xa4\x68\x3f\xe6\xa6\xc8\xb5\xd6\xbe\x83\x89\x17\x8d\xf4\x31\xe3\x0d\x9d\x37\x9f\x0d\xc7\x1d\x34\xb9\x0e\x12\x8a\xb7\x8a\xad\x7b\xc2\xdb\x40\x8c\x5e\xe6\xd2\x06\x61\x20\xce\xfc\xd1\xb7\xf0\x4a\x1e\x23\x1a\xf0\x3e\x0d\xde\x32\xe3\x71\xab\xad\xb3\x32\x95\x75\xc7\x52\x04\x42\x5a\x41\xc9\x3a\xaa\xa0\x5d\xb3\xdc\x5a\x6a\x92\x4a\x10\x9c\x5a\xe7\x80\xbe\x6a\x40\xac\x31\x61\x90\x7a\xf4\x54\x18\x09\x73\x9d\x2d\xbe\xa0\xec\x51\xef\x6e\x81\x8a\x0d\xf5\xe5\xa1\xe7\xa6\x4d\xcb\xf4\x8d\x47\x4e\x39\x33\x0e\xc2\xad\xe4\x4e\x3a\x63\x38\x59\xd3\xc6\x51\x5b\xb9\xba\x4f\xcf\xc9\x59\x56\x5c\xd0\x52\x84\x31\xf6\x21\xd3\xe3\x5a\x36\xa4\xca\x7c\x43\x79\x0f\xa3\x98\x64\x84\xc5\x84\x45\x0b\x20\x11\x06\xc8\x39\x82\xe1\x04\x61\xf8\x0e\x27\x47\xe8\xcc\xe4\xd7\x78\x09\xcf\x5e\xeb\x70\xa1\xa7\x98\xd1\xa9\xd6\x13\xc0\x08\x6b\x47\x39\x62\x66\x98\xce\x07\x12\x14\xed\xf7\x2b\xd6\xb4\x33\xfa\x06\xb9\xda\x12\x95\x98\x95\xbf\x47\xcb\x2f\x1c\xe8\x6d\xd9\xee\xe8\xe6\x5c\x0d\x02\x99\x4f\x0e\xe1\xdf\xa5\x84\x33\x07\xd4\x53\xa0\xc8\x90\x84\x80\x39\xd0\x7a\xbc\xe0\x62\x6c\x03\x96\xdb\x85\xdf\x6e\x45\x1e\x47\xd0\x47\x49\xa9\x49\x29\xa3\x69\x9e\x06\xce\x3b\x53\xb1\x20\xb2\xf6\x4b\x93\x89\x91\x69\x3d\x20\x72\xe0\xe5\x48\x5f\xae\x6c\x81\x66\xf4\x89\xb0\x11\xcb\x38\x65\xea\x08\x5d\x71\x45\x82\x12\x11\x06\x3a\x8a\x67\x8a\xa6\x06\xed\x54\x10\x7d\x0e\x0c\x28\x36\x00\x4d\xce\xb1\x3a\x40\x71\x0e\x47\x95\x11\xa5\x59\x87\xbe\x71\x15\xec\x0c\xc4\x47\x8b\x11\x33\x37\xdd\x14\xd3\x24\x17\xc4\xca\xac\xd8\xe4\xc5\x14\x43\x2e\x46\x66\x91\xd0\x82\x49\xa4\x74\x36\x57\x7a\x8b\xb4\x8c\x67\xfd\x8d\x73\xcd\x8d\xf8\x88\x4d\x08\xc2\x28\xe3\x92\x2a\xfa\xe4\xfd\x97\x74\x8a\xb0\x94\x60\x41\x39\x42\x67\x25\xfb\x3f\x95\xa0\x7a\xb7\xc5\xd5\x52\x36\xb6\xb6\xe7\xf6\x7c\x9c\xad\x37\xb2\xd4\x8b\x5d\x65\x3c\x91\x3c\xc9\x55\xe8\x82\x6d\xde\xdb\xc2\x34\xee\x80\xfb\xc1\x40\xcc\xa7\x23\xe6\xe8\x5a\x1e\xa1\x81\x44\x92\xeb\x5d\x92\x66\x2b\x23\x41\x15\x11\xd4\xa0\x38\x11\x65\x36\xc1\x9f\x53\x7f\x06\x52\x2c\x1e\xb5\x08\x15\x5a\xe0\x0d\xa6\x68\xc9\xda\x31\x31\x12\x12\xc0\x5a\x85\xdb\x01\xa6\x7f\xc4\x38\x3b\x64\x64\x86\x57\xed\xc8\x88\x95\xb6\x04\x7d\x4d\xa7\x85\x42\xda\xe6\x73\x0c\xd6\x6e\x0c\x91\x4f\x6d\xbb\x64\x3a\x6e\xdb\xa4\x69\xc2\xf1\x0a\xb7\xf1\xb4\x38\xf4\xe8\xef\x7c\x62\xc6\xa8\xf5\x7e\xae\x40\x0a\xd4\xea\xd5\x94\x0b\x32\xc7\x2c\x3e\x70\x9b\x55\x1e\x1b\xdc\x8c\xd6\xd4\xe6\x94\x31\x90\x04\x1d\x88\x30\x31\x58\x4c\x98\x05\x7b\x61\x15\x37\xbb\x15\xc5\x3e\xac\x75\x57\xf8\xd6\xa0\xf6\x89\x31\x40\x18\x96\xb7\xc8\xec\x11\x97\x34\xcd\x92\x22\xa7\x29\xb0\x8d\x4e\xb5\x88\xe5\x78\x24\x7f\x02\xd3\x95\xd3\xda\xe0\x56\xb7\x3b\xa7\xe9\xac\x61\xe4\x9e\x91\xc2\xad\xe1\x6c\x5e\xa6\x0c\x66\xc0\xc2\xbe\x96\x44\xff\x53\x91\x42\xed\x33\xc2\xfa\x88\x39\x11\xe4\x1b\xe0\x32\xb6\xd9\xc0\x78\xa6\x45\x68\x03\xf3\x6a\xd7\x0f\x45\xc6\xc9\x5d\x3a\x27\xf6\x30\xb8\x57\x1b\x2e\xaa\xef\x28\xc3\xa5\xcc\xdb\x0d\x04\xbf\x24\x5f\x2b\xb9\x2a\x70\xfb\x2d\xda\x6a\x9a\x28\xbc\xaa\xcc\xc8\x1a\x94\x60\xf6\x99\x20\xdd\x9d\xa5\x66\x57\xf1\x06\x43\x44\xc0\x9c\x24\x19\x8a\xe9\x14\xcc\x52\x0a\xd8\xb7\x07\x16\x33\x58\xf0\xfa\xb0\xa7\x39\x33\x20\x71\xc6\x23\xf2\x6c\xf1\xb6\xed\xd5\x58\x34\x7e\x34\x62\xe7\xea\x2b\xa9\x45\x74\xce\x66\xfa\xa2\x89\x9f\xa8\x2c\x8a\x9c\x44\x9c\xc9\x3c\x25\xc2\x76\xa1\x6f\x64\x4d\x91\xb6\x40\x00\x76\x32\x94\x1e\x9b\xde\xfb\x27\x9c\xd0\xd8\x15\xe2\xd1\x3f\x9a\x33\xa7\x47\x29\x9d\x47\xb1\x21\x24\xcc\x6e\x6e\xac\xd7\xea\xcd\xc4\xfa\x1f\x43\xc9\x1d\xa5\x85\x90\x8f\xad\xad\xfe\xb8\x2a\xe2\xdb\x55\x5f\x22\xde\x4f\x6a\x93\x42\xcb\x05\x23\xbb\x0a\x67\xab\x50\x0c\x1d\xa2\x6e\x6e\x42\x80\x75\x3f\xce\xe8\x63\x06\xb7\x16\xfb\xa9\x4c\xd0\x8e\xda\x70\x96\x50\xbc\x27\x14\x64\x03\xa9\xb0\x16\x2f\xcc\x75\xc0\x85\xd5\x70\xec\x9d\xd3\xbe\xb5\x67\x5b\x96\x89\x90\x11\x4e\xea\x3b\xbc\xc4\xde\x6c\xde\x5f\xae\x04\xd8\xe3\x66\xda\x5e\x9a\xf4\x1b\xf1\x24\x59\xa7\x84\x49\x65\xe6\xa7\xc5\xe7\xcb\x47\x54\xf4\xa3\x37\xc0\xed\x05\x9c\x1a\x73\x79\xe3\xc4\x9a\x52\xa4\xb2\xbb\x14\xbe\x64\xd4\xb0\x85\x65\xad\x23\xc6\xa7\x50\xe4\x26\x69\x8b\xea\xca\x04\x4f\xe9\x3a\x28\xcb\x26\xd0\xe9\xd6\xd9\xc5\x57\x58\x19\x9c\xf5\x1c\x44\x53\x43\x5e\xb6\x47\xc8\xd7\xc3\x56\xdc\x5c\x72\x86\x52\x9c\x6d\xb4\xe0\xab\xbc\x42\x03\x94\x1a\x97\x9c\x5d\x3d\xc0\x5b\x24\x50\x2f\x06\x16\xf9\x19\x2f\x8a\xd4\xe8\x36\xfc\x5c\xb6\x16\x39\x3c\xe8\xd7\xcf\xd9\x94\xaf\x71\x38\x8b\x54\x66\x7b\xfa\xb0\xa3\xd9\xe0\xfc\x79\x2f\x85\xd9\x7d\xb3\xa6\x5d\xce\xe3\x69\x13\x51\xaf\x7d\x32\xdd\x0a\xbe\xa4\x8d\x32\x64\x22\xa1\x79\x72\x9d\xbb\xb5\x7c\xb4\x82\x16\x11\x0c\x67\xf9\x52\x5d\x96\xe8\x70\xe7\x6b\x54\x69\x07\x19\x53\xb8\x0b\xa6\xbe\x69\x6e\xf5\x15\xd6\xcc\x1e\x92\x4e\x8b\xb5\x25\x76\xc3\x7a\x38\xc0\xae\x47\x8f\xfa\xdb\x7c\x42\x57\x16\x39\xe8\xbe\x18\xc0\xcd\xa4\xb5\x73\x15\x91\x99\x36\x45\x6d\x4a\x13\x2d\x62\x9f\x37\x18\x38\x5d\x82\x98\x0f\xa8\x32\xa1\xf2\x4e\x7a\xca\x05\x0d\x0a\x83\x3a\x19\x09\x51\x28\x50\x12\x3a\x79\x02\x85\x1e\x4c\x8b\x73\xfe\x6c\xa2\xd3\x05\xd5\x3c\xcb\x08\xab\x0a\xcc\x3d\x9a\x17\x50\x6b\x2d\x31\xc6\x26\xff\x01\x37\x31\x83\xd8\xd6\x3e\x2e\x46\xd5\xb2\xa5\xbb\x28\xf1\xd4\x3d\xff\xce\xf5\x7a\xaf\xbf\xa8\xef\x4d\xe3\x08\xef\xcb\xad\xaf\x3d\x3a\x2f\xe5\xaf\x1f\x30\xf5\x11\x3e\x75\x4a\x0f\x46\x53\x41\xc0\xc1\x9f\x7a\x4c\x0d\x03\xaa\xcb\x39\xdc\x77\x77\x67\x3f\x1c\x3f\x9c\x23\xa2\x22\x94\xd0\x47\x32\x62\x91\x7c\x3a\xd0\xe2\xf1\x3f\x72\xa2\xf4\xcf\x2d\x1e\x01\x9a\x12\x26\x81\x13\x50\x55\xc3\x1e\x6a\x5e\x48\xb7\x30\xfa\xbf\x67\xe5\xef\x97\x90\x7c\x2d\x7d\x18\x68\xd7\xd5\xbb\x01\x32\x85\x92\x1e\x66\x69\x65\x03\xc5\x18\x5b\xe4\xb0\xa9\x1a\xe6\x06\xe9\x42\xec\xef\x39\x5b\x53\xe8\x3a\x2d\x3e\x0a\x46\xd1\x22\xd3\xa5\x19\x06\xac\xeb\xf5\xf2\x90\xcc\x37\x8d\xad\xaf\x62\x22\x45\x5a\xb6\xb3\x2d\x17\x85\x43\x91\x12\x84\x00\x0b\xf1\xf4\x64\xef\x7a\x8b\xc4\xe1\x27\x16\x7c\x74\x34\x62\x97\xce\xe3\x5c\xfc\x2a\x0b\x3d\x3c\x9d\x04\x10\xe0\xe5\x56\xa0\xd9\x98\x4a\xff\x03\x14\x74\x91\x79\xa2\x4c\x45\xbb\x29\x65\x38\xf1\x03\x35\x4f\x9a\xb8\x84\xc0\x2c\x9a\x6f\x6b\x42\xa6\xd3\x31\x49\xd6\x91\x44\xcf\xa7\xc3\x44\x6a\xfa\x8e\x1e\x5b\x4e\xe7\x26\x35\x1b\x8b\xc9\xd8\x4a\xb4\xa6\xee\x13\x2a\x4c\xd0\x38\x31\x15\xe5\x08\x02\x1f\x65\x35\x7b\xcc\x00\x44\xe8\x5d\xb4\x92\xba\x71\x51\x9a\xb4\x0d\x1f\x92\x0d\xbd\x20\xac\x46\x4c\xe4\x0c\x8a\x4d\xf8\x88\x05\x8c\x0a\xbc\xf0\xc8\xf9\x0f\xac\x37\x67\xa6\xd9\x84\x81\xe3\x36\x2f\x6b\xfd\x8c\xe7\x12\x6c\x35\x29\x51\xfa\x82\xfa\x1a\xea\xc0\x9a\x90\xa1\x03\x94\x09\x9a\x82\xb9\x55\x7e\xd3\xb0\x75\xa7\x58\xe1\x84\xcf\x06\x42\xd1\x29\x8e\xd4\x3d\xde\x4a\x03\xc7\xb6\x99\x4d\xc3\x4f\xdd\x30\xd0\xf9\x99\x5e\xfc\x19\x61\x44\xc0\x44\xb5\x4e\xde\x7c\x84\xe1\xc9\x46\x9c\x1b\xac\x6c\xd6\x30\x2a\xbd\xc5\x02\xe7\x8a\xa7\x5a\xbf\xc5\x49\xb2\x38\x30\x16\x59\x82\xe6\x58\xce\xdd\x46\x1b\x63\x5a\x97\xbb\xc9\x2e\xee\x29\x8e\xe6\xe4\x0e\xaa\x22\x37\x2d\x6e\x65\x94\x1f\x08\xcb\xd3\x0f\x27\xe8\x7f\x8a\x39\x9e\x0e\x4e\xbf\x1f\x8e\xcf\xce\xef\x06\xdf\x5d\x0c\xcf\x82\xf9\xd8\x27\x97\xe7\x77\x77\xf5\x5f\xbf\x3f\xbf\xaf\xff\x78\x73\x7d\xf3\x70\x31\xb8\x6f\x6a\xe5\xe2\xfa\xfa\x87\x87\x9b\xf1\xc7\xc1\xf9\xc5\xc3\xed\xb0\xe1\xd3\x87\xfb\xf6\x87\x77\x3f\x9c\xdf\xdc\x0c\xcf\xdc\xaa\xfc\x2d\x38\x5d\x60\x3d\x86\xd4\x8b\xe6\x69\x54\x0f\xe0\x21\x2a\xbf\x78\x82\x1e\xaa\xa5\x0f\x6c\x2c\xb2\xc1\xb1\x78\xc6\x52\xf3\x30\x08\x85\x1f\x31\xe4\x3e\xd7\x8b\xd2\xf6\xa9\x09\xd7\x89\xe6\x04\x25\x9c\x3f\xe6\x99\x65\x6d\x26\x3e\x8c\x71\x63\xf8\x21\x32\x68\xed\xfb\xf3\xfb\x93\x7a\x09\x06\xdf\x58\x80\x98\xe5\xce\x00\x8c\x0b\x3b\x76\x0a\xb6\x14\x07\xcd\x5f\x58\x6f\x83\x1e\xfc\xce\x2c\xeb\xc7\xb4\x86\x99\xaa\x74\x13\xc7\xb6\xe8\xaf\x9b\x58\xd0\x70\x79\x5f\x97\xad\xa6\x5f\x0e\x53\x7b\x0a\x4d\x48\x84\x73\x13\xd4\xa4\xef\x29\x21\xb8\x08\x07\x5c\xd0\xc3\xee\x1a\xb5\x74\xd4\xd8\x60\x65\xcf\xf4\xc4\xe5\x23\xcd\x32\x12\x7f\xa8\xcb\x2f\xe5\xea\xb0\xb6\x26\x39\x9f\xa2\xe0\x4c\x6a\xbd\x1e\x74\x7e\x57\x38\x65\xbe\xf0\x9e\x34\x08\xdc\x28\x42\x59\x00\xc8\x59\xdf\x09\xbe\xb0\x05\x05\xd7\x18\x56\xe8\x99\x40\x4a\x75\x6e\x2b\x47\x19\xdd\x5b\x9f\x6d\xe8\xce\xd8\xb4\x5d\x1d\xb8\x52\xaa\x75\x2b\x33\xde\x85\xc0\xad\xbf\x97\xa4\x89\x11\x6f\x91\x17\x7b\x66\x1a\x05\xee\xec\x62\xde\x60\xc4\x2d\xc1\x0d\xee\x36\x68\xb0\x90\x2f\x91\xaf\xea\x37\xd2\x8a\xcb\x42\xb3\xed\x2e\xe3\x71\x58\x20\x25\x80\xeb\xee\x03\x2b\x81\x20\xaf\x5c\xab\x7b\x1e\xe3\x85\x26\x0e\x88\x35\x96\x79\x96\x71\xa1\x50\x4b\x1b\xc6\x8d\x6f\xc6\x07\x77\x8e\x9d\x87\xe7\x71\xd0\x88\x96\x30\x64\x43\x2d\x8d\x6e\xf0\x08\x76\x5d\x0b\xc6\x11\x06\xc8\x82\x22\xe8\xeb\x1e\xa5\x25\x95\xba\x44\xa1\x4d\xc2\xef\x36\x19\x06\x99\xbe\xe0\xbb\x96\xe1\x6b\xea\xfd\xda\xb5\xd0\xb8\xe5\x09\x99\xaa\x71\xa3\xd7\x67\x89\x81\x53\xb7\xc8\xda\x10\x65\xe8\x6c\xbe\x83\x16\xbb\x6b\x09\x7f\xb4\x81\x3d\x5a\x35\x08\x2c\x04\x82\x73\x65\xe4\xd3\x42\x87\x41\x6e\x35\xc1\xbc\x60\x3b\xb5\xb9\x60\x5e\x08\xd4\x32\xbf\xf1\x87\xfa\xb4\xa9\xa3\x11\x1b\x42\x00\x45\xa1\x88\xb8\x14\x31\xd0\x02\x56\xca\xff\xa5\xa2\xa3\xaf\x1a\xad\xd9\x8e\xf0\x5a\xd0\xbd\xad\x97\x9f\x2c\x50\x51\x58\xb6\xf4\x5d\x97\xd3\x63\xac\xde\x4e\x04\x34\x13\xb6\x65\xdc\x15\xc9\xac\x65\xde\xcc\xb3\x88\xf4\x81\xf8\x30\xdd\xd5\x11\xfa\xc9\x59\x7e\x20\xf0\xb5\xa8\xc9\x6c\x63\x37\x12\xbc\x70\xa0\x90\x4d\x0b\xbb\x0b\x9c\xc5\x5d\x87\xc2\x2e\x5f\x60\x0f\xe8\xd4\xb0\xca\x25\x05\x9c\x31\x63\x91\x5d\x23\xed\xe3\xd4\x7f\x74\x47\x96\x47\x05\x7c\x84\x32\x9c\x36\xb2\x0a\x84\x0e\x96\x2c\xfe\x97\xd9\x2c\x93\x89\xea\x0a\x6b\xd9\xb2\x88\xd6\x83\xaa\xcf\x0f\x78\x00\x4d\xa2\x2a\x9a\xd2\x24\x01\x39\xe0\x08\x0d\xa0\x3c\x30\x24\x72\xea\xab\xd0\x05\x58\xd0\x19\xe3\xab\x72\xcc\x5a\x88\x29\x0a\x88\xe9\xae\x9d\x98\x24\x50\x53\x91\xc7\xbf\x1b\x8a\xda\x01\xa6\x8b\xe6\x2d\xb8\x8e\x88\xdd\x1d\xc9\x65\x0d\xe5\xfd\x2d\xa2\xa3\x6b\xc3\x0d\x3e\xfc\x57\xf3\xd0\x3f\xe5\x58\x60\xa6\x20\xe6\xd7\x8a\xee\x82\x04\xa9\x47\xe4\x33\xc4\x67\x30\x63\x08\x86\x9f\xc2\xcd\x75\x2e\x7f\x08\xf7\x42\x34\x3e\x40\xf4\x88\x1c\x41\x75\x36\xa1\x65\x89\x49\xf1\xe6\x5c\x4b\x0e\x23\x56\x8b\x65\x3c\x42\x83\x44\x72\xfb\x05\x61\x51\x02\xe5\xb8\x83\xf0\x64\x4f\xf9\xd6\xad\x34\x59\x80\x82\x02\x5b\x59\x34\xcf\xed\x83\xe0\x43\x28\x32\x06\x3e\xf1\x04\x4e\x7a\xf1\xfb\xef\x79\x66\xbc\x15\x6d\x71\x12\x2f\x58\xce\xa1\x76\x0d\xbd\xd8\x26\x99\x52\x81\xcb\x36\x08\xde\x80\x8d\x29\x62\x4c\x03\x04\x16\xf4\x35\x56\x28\x21\x58\x2a\xf4\x87\x6f\xd6\x8a\x0d\x71\x13\x2c\xb8\xab\x3d\xbe\x45\xa2\x98\x4b\x35\x08\x85\x3b\xdf\x31\xd4\x8e\xc3\x42\x21\x8c\x18\x79\x0e\x23\x4b\x39\x04\x03\xbb\x82\x70\x24\xc8\x6d\x35\xf1\x64\x26\x33\x1f\xb2\x35\x8c\xca\xd4\xc2\x47\x1c\xdc\xb1\x75\x9f\xda\x61\x35\x50\x96\x55\x9e\x6c\x88\x27\x40\x72\x15\x41\xff\x73\xac\x46\xcc\x72\x56\x17\x36\x12\xa4\x79\x0d\x92\xa4\x1c\x68\x8f\x21\x97\x84\xe9\x09\x43\x7d\xf6\x23\xbf\x40\x57\xa0\x7e\xf9\x68\xe7\x92\x9d\xae\x38\x2c\x26\x1e\xcf\xe3\x1d\x85\x6d\x37\x4a\x3b\x4d\xf6\xe5\x57\x14\x82\x1b\xba\xbf\x30\x85\xf2\x3b\x08\xc3\xa4\x69\xc8\x2b\x0e\x56\xdd\xa6\xbf\x44\x36\xde\x75\x07\xdd\x45\xe5\x66\xfb\x38\x5c\xb3\xcf\xbc\xc1\xdc\xde\xb2\xb9\x81\x6c\xb1\x8d\x02\xee\xc3\xee\x5f\xcb\xe3\x5b\x1a\xfa\x79\x0c\x49\x7f\xab\xb9\x60\x91\x44\xe7\x58\x87\x89\xbd\x8e\x83\x9c\x9e\x20\x85\x00\x82\xff\x1c\xe3\xb3\x6f\xb6\x78\x5e\xb3\xf7\x3d\xfd\x83\x62\xfe\x6e\x2a\x3e\x08\xae\x3e\xf1\x76\x61\x6f\x10\xff\x1d\x47\x10\xe9\x0f\x3d\xb9\x1c\x83\x3a\x20\x93\x83\xb1\xc6\x60\xcc\x6f\x14\x0f\x33\xc1\x23\x22\xe5\x11\x1a\xc2\x45\x63\xff\x89\xf0\xd4\x39\x24\x82\x97\x47\x4c\x6b\x26\x0e\xbf\x25\x68\xbf\x4c\xe2\x4d\x27\xc0\x80\xc1\x6d\xe5\xcb\x49\x57\xd7\x28\x69\xd3\x26\x1c\x16\x1d\xb4\x01\x65\x0d\xd0\x70\x76\x82\x62\x1e\x3d\x12\x71\x2c\x48\x4c\xe5\x09\xf8\xd6\x55\xab\x53\x2f\xd5\xda\xf6\xd6\x92\x46\x5b\xa0\xc0\x8a\xa4\xb8\x53\xd3\xbf\x0d\xb0\x76\xe1\xb5\x07\x88\x4e\x41\x9d\x70\x39\x19\x26\x08\xd9\xc1\xdd\x10\xa6\xc4\x02\xe2\xfa\xbd\x29\xab\xb2\x10\x4e\xd3\xd0\x42\x5b\x5b\x36\x91\xd8\x45\x0c\xce\x86\xd3\xbe\x9f\x13\x49\x5c\xc0\x81\x99\x94\xe2\x36\x96\xd9\xb0\x8b\x0c\xab\xb9\x84\xd4\xd5\xf2\x1a\x58\xa5\x0b\x3e\xd5\x2b\x84\x33\x88\x57\x30\x56\x8a\xe2\x23\x9f\x60\x29\x15\x4d\x92\x11\x63\x84\xc4\x12\x41\x96\xe9\x57\x8d\x19\xf2\xfa\xd3\x03\x84\xe3\x18\xfd\xef\xaf\x3f\x5e\xfc\x7c\x3f\x1c\x9f\x5f\x81\xd1\xfa\xfc\x62\xf8\xcd\x81\xff\xf1\xfa\xe1\xde\xff\x6a\x2c\x2c\x4f\x44\xa0\x14\x3f\x82\x8a\xc7\x24\xb1\xc9\x13\x64\xc4\xc2\x91\x3a\xec\x00\xfd\x44\x12\x17\xe9\x6a\xc5\x14\x0f\xa1\x68\xf7\xb0\xb5\x62\xb1\xb1\xf9\xad\xa1\xfc\xde\xfa\x4f\x96\xd3\xa0\x23\x1e\xdf\x85\x13\x03\x21\x47\x06\xcb\x20\x99\xdc\xea\xbe\x05\xc1\x11\x36\xa3\xac\x2d\x1e\x8f\xb0\xa7\x97\x14\xe2\x7f\x20\x8b\x1f\xb5\x7a\x7d\x83\xa9\xe8\x4c\x7b\xcd\x68\x40\xee\xc4\x68\x3d\x1d\xcb\xea\xa1\x92\x46\x16\x36\xd9\x36\xad\x31\x9f\x4d\x40\x70\x6f\x3e\x5d\x0b\x2f\x45\x3e\x2b\xe1\x50\x2a\x7c\x3e\x87\x83\x72\xf2\x17\x4d\x41\x83\x23\x76\x7f\x7d\x76\x7d\x82\x48\x82\x27\x1c\x42\xf9\x6d\x48\x90\x6b\xc2\x2e\x58\xc4\xd3\xa0\xa1\x12\x42\xc9\x01\xca\x0a\x84\x92\xd0\x88\x76\x64\xda\x58\x81\x54\x92\x71\x51\xc7\xf7\xd8\xad\x0a\x68\x27\x7b\xc3\x45\x97\xeb\x5f\xbf\x06\x4b\xc7\x33\xad\xc8\x55\x38\xaf\xbd\x9b\xa7\x04\x9b\x5a\xfa\xc6\x2d\x64\x6d\xf9\x36\x80\x35\x49\x4a\xf5\x14\xf5\xc1\x91\x47\xd6\x05\x5f\xbc\xc9\x19\xfa\xe1\x2f\x12\x4d\x72\x35\x62\xe5\x36\x38\x43\x83\x9f\xee\xd0\x77\x58\x45\xf3\x6f\x46\xec\x5a\xab\x99\x3f\xfc\xa5\x05\x4a\x69\x6d\x74\x42\xbd\x26\x67\x58\xe1\x0b\x8e\x63\xca\x66\x4d\xd0\x84\x45\xfd\x98\xe1\xfd\xe0\x04\x5d\x5b\x1d\xbe\xc8\x04\xf1\x29\xc1\x41\x43\xc0\x90\x61\x22\x8e\x8b\x00\x2b\x67\x65\xf8\x36\xa3\x99\xc1\x85\x35\x62\xf7\x06\x93\x51\x73\x55\xaa\x50\xc6\x6d\x0d\x23\xad\x95\x19\xb4\x4a\xec\x32\xa4\x48\xb2\x40\x7a\x75\x80\x8c\xfd\x66\x58\x79\x0c\xe4\x99\x3a\xb3\x1f\x31\x50\xd0\x7d\x6e\x4a\xc2\x23\x9c\x40\x4c\xde\x61\x60\xd3\xd3\x6a\x3b\xcf\x21\x3f\xdc\x14\x3d\x5f\x94\x43\x67\x3d\x64\x81\x17\xca\xc2\x8d\x02\x03\x00\xec\xa3\xf5\xc6\xa6\x5c\x73\x1c\x83\xc5\x06\xc6\xb7\xc4\xac\x8e\xfe\xd0\x63\xb3\x99\x65\xd1\x4f\x7d\xda\x16\xcf\x99\xc3\x22\x89\xc0\x7c\xcf\x16\x10\xbe\x0d\x45\x47\x38\x84\x7e\x14\xdc\xd9\x12\x65\x6d\x17\xfd\x9d\x18\x7c\x36\x62\x26\x52\xb0\xb4\x2f\x21\x7a\x4f\xd0\x3b\x67\x10\xc8\x58\xcf\x15\xcb\x33\x1b\xd8\x68\x65\xfd\x4c\x90\x43\x9f\x01\x15\x97\xd6\x54\xdf\xb0\x47\xe8\x36\x54\xaf\x63\x1e\xe5\xa9\x43\x56\x86\xec\xa9\xa2\xac\x7c\x49\xe2\x31\x17\xfb\x2a\x8a\x07\x94\x16\x45\x20\x7d\xbc\xb3\x7e\x6c\x08\x66\x10\x7e\x5a\x97\xd4\xdb\x05\x5f\xe0\x1d\xdb\x45\xad\x99\x86\xc6\x59\xb9\xa5\x52\x6b\x5b\xe7\x25\x5e\x15\xe8\xaf\x5c\x80\xb0\x45\x3e\x67\x1c\x8c\xdc\x26\x3d\x8b\xc7\x5f\x49\x74\x7e\xa3\x25\x20\xad\xf1\xfa\x33\x98\x4b\x65\x82\xcb\x20\x5d\xc7\x7c\x6d\xd2\x05\x0e\xd0\xb7\x68\x94\x7f\xfb\xed\x9f\x22\xf4\xd9\xfd\xf1\xe7\xff\xfc\xcf\x3f\xfd\x79\x9d\x74\x12\xa7\x90\x43\xbb\xc5\x1a\xf9\x72\x52\x65\x91\x28\xdc\x81\x3a\xa7\xda\x62\x17\xec\x01\x6c\x5b\xfe\x4d\x50\x1e\x83\xd8\x21\x3c\xb3\x27\x5c\x86\x27\x13\x95\x8e\x66\x11\x49\x20\x89\x3a\x28\x73\x08\x2f\xec\x5a\x89\xfe\x7f\x2d\x01\x2b\x1b\xeb\xa3\xb2\x59\x8c\x13\x4d\xbc\x78\xad\x1b\x41\x5f\x5b\xfb\x9f\x02\x07\xe2\x37\xee\x82\xe3\x49\x4c\x84\x19\x93\x37\xd9\x79\x43\x22\x30\x07\xf2\x39\x4b\x78\xec\xe0\x51\x8b\x5c\x40\x0a\x02\xc2\xf0\x33\xd6\x9c\xfb\xc0\xc2\x68\x99\x8f\x8c\xe7\x65\x8a\x23\x83\x0a\x2a\xd1\xd7\x9f\x4f\xf4\x6f\x07\x68\x71\x02\x41\xa4\x07\xe8\xd7\x13\x8b\x96\x83\x85\x1a\xeb\x9f\xbe\x71\xb2\xb6\x6d\x02\x06\x4d\x25\xfa\xea\xf8\x09\x0b\x53\x33\xfa\xd8\x8c\xe8\x2b\xcb\x59\x7d\x5d\xbc\x50\x36\x4f\x38\x7f\xb4\x01\xb6\xb5\x0f\x8f\x1d\xf0\x1a\x90\xb7\xf7\x9b\x98\xad\xf7\x89\xf9\x0a\x1d\xc2\x0b\x04\x1d\x65\x13\x74\xf4\x77\xc9\x19\x3a\x5a\xe0\x34\xb1\xbf\xba\xa7\x36\xfe\x17\x4b\x9b\x13\x17\xfb\x20\x9f\x64\x61\x2c\xa5\xdf\x25\x7c\x02\xb3\xba\x74\x33\x35\x11\xb4\x30\xd0\xe2\xf6\x29\x2e\x2c\x3b\x11\x97\x88\x0a\xf8\x41\x29\x57\xe6\x15\xe0\x71\x4d\xb3\xfa\xec\x87\xf4\xdf\xc6\x2f\x0c\x8b\xe2\x92\xf8\x8c\x71\xd8\x47\xaf\xe9\x46\x3f\xa3\xaf\x2d\x0b\xfa\x46\xdf\x31\x36\x5c\xd9\x2c\x43\x53\x07\x0b\xdf\xc1\xcf\x41\x07\x94\x21\x93\x96\xb9\xe4\xcb\x5f\x8f\x8f\x8e\x8e\xfc\xd7\x90\xb5\xfe\xff\x22\xaa\x24\x49\xa6\xa6\x25\x77\x83\x2d\x46\xec\xd2\x15\x5e\x70\xc6\xeb\x02\xd2\x31\x13\x5c\xf1\x88\x27\xe8\xb0\x30\xe8\xc6\x3c\x92\xe8\xdf\xb5\x58\x1b\x2c\x25\xfc\xa8\xf5\xb8\x16\x18\x58\x83\xf4\xfc\x4a\x87\xca\x1a\xc4\xab\xc7\x2a\x44\x71\xf3\x8a\x2d\x96\x61\x15\x0f\xa0\x05\x4d\x39\xc7\x16\xe9\x4d\x08\xfd\x32\xf9\xac\xe0\x51\x0b\x90\x5e\x63\x28\x7b\xf3\x4d\x59\x63\xb7\x05\x9e\x9e\x21\xeb\x96\x05\xb0\x78\x57\x96\x33\x98\x79\x1e\x84\xee\x13\x7d\xb9\xb0\xb0\x14\x80\xcc\xd3\x14\x8b\xc5\x71\x71\xda\xea\xc4\x59\x20\xad\x01\x8f\x49\xdc\x02\x80\x0b\x37\xb1\x47\xcb\x46\x31\x58\xf1\xd2\xdd\x68\xfe\xec\x46\x50\xcb\x30\x40\x2c\x20\x2c\xe2\xb1\xa5\xeb\x22\xfb\xb4\x2c\xb1\xf8\x77\xea\xb2\x8a\x8b\x88\x91\x85\x31\x8e\x29\x03\xe1\x61\xdf\x70\x1f\xb7\xb0\x6f\x3e\x86\xaa\xb8\x64\xb6\x86\x7b\xf4\xfc\xfa\xce\x7d\xd3\xfd\xd2\x85\x75\x28\x8b\xec\x38\x09\xf1\xf1\xd8\x0c\x09\xfc\x5c\x5c\xbf\x10\xdb\x61\xac\x33\xb9\xcf\xcd\x35\xff\x3e\xe5\x37\x34\xd1\xb7\x16\xd0\xf8\xd1\x88\x95\x7e\x3e\x40\x24\xa1\x29\x65\x3e\xb6\xce\x30\x77\x3e\x35\xd2\xf3\x23\x55\x7a\xcb\x64\xfc\xa8\x39\x98\xc3\x75\x0a\x54\xaa\x01\x5b\x38\xd2\xf1\x8e\x29\x6b\x81\xc8\xa5\x1e\x57\xa1\xa3\x6b\x61\x56\x37\x71\x68\x05\x52\x1a\x10\x1e\x9c\xdf\x11\xd3\xad\xb9\xb3\x54\x84\x0b\x07\xed\x05\xcd\x1d\x3a\x40\xfc\x80\x03\x40\x1f\xa5\x98\x5f\x2f\xff\x36\x08\x28\x43\x96\xa7\xdb\x26\x9b\xd8\xf0\xe1\xb7\x32\xd3\xdd\x08\xe2\x6e\x2a\x9b\xb8\x44\x58\x9e\xba\x03\xb5\x06\xc5\x0d\xad\xf8\x13\x93\x28\xc1\x06\xa9\x46\x37\x04\x91\x8f\x07\xc6\x41\x9a\x05\x7d\x99\xeb\xc5\x74\x63\x6a\xec\x24\x84\x7d\x6d\xfe\xfd\x0d\xb2\x77\xc3\xb7\x07\xf6\x3e\x17\xd2\x23\x80\x98\x3d\x87\x1a\x8d\x24\x36\x36\x74\x40\x25\x9e\x61\x11\x1b\x6b\x79\xa8\x55\x98\x0c\x5e\x2d\x7f\x2d\x78\x8e\x9e\xa9\x9c\x8f\xd8\x3d\x77\x06\x47\xc4\xb8\xc7\x75\x3e\x00\x65\xb4\xd6\x1f\x96\xc0\x04\x60\xd4\x4d\x14\xa0\x99\xf0\x56\xb9\x46\x10\x05\x3b\x66\x3c\x26\xdb\x01\x18\xdd\x17\xbe\x0a\xe7\xbf\x16\xc4\xe4\x83\xc1\x4d\xd1\x96\x4e\x4b\xa4\x5c\xd3\x36\x5f\xdd\x78\xb8\x87\x6c\x3b\x50\x12\xf8\x79\x2d\x74\xed\x10\x1b\xcc\xdf\x6a\xd0\x8a\xd3\x38\x83\x6c\xe0\xd2\xda\x7b\xb4\xe4\x6d\x37\x21\x6a\x40\x2b\xea\x74\xf7\x9b\xb9\x47\xb0\xec\x3e\xc0\x18\xa3\x99\xe0\x79\xe6\x53\xe6\x5d\xba\x9f\xd9\x06\x2b\xd3\x9c\xb3\x29\x3f\xb1\x3a\xd5\x05\x65\x8f\x86\xe2\x5f\x6a\x8f\x0c\x20\x36\x89\x4b\x30\x6e\xae\x4a\x2b\xcc\xe1\x10\x51\x16\x25\x39\x5c\x7c\x52\xe1\xe8\xd1\x80\x7a\xb7\x19\x7d\xf5\x37\xe3\xd5\xc9\x94\x2d\x12\x53\x9e\x24\xb6\xdb\xe2\x02\x2d\xca\x58\x3f\x51\x8c\x30\x7a\xb8\x3d\x6f\xee\xfb\x91\xd6\x9d\x39\xcd\xb7\x67\x99\x40\xe0\x7f\x7e\xa0\x6b\xc5\x5d\x56\x60\xf1\x48\x89\xd4\xbd\x71\xa9\x0d\x74\x55\x13\xe9\x27\xac\xc8\xb6\x99\x50\x06\x03\x6c\x8d\x48\xbd\x1a\xb8\xda\x52\xeb\xf1\x96\xc8\x64\x05\xaa\x18\x84\x06\xb5\x43\xa4\x85\xc1\x5a\xf0\x70\x0d\xec\x06\x78\xbf\xdb\x7c\x2a\xef\xae\x98\xce\xf2\x61\x26\x84\xac\x81\x36\x70\xa7\x5f\xef\x38\xc8\xd2\xab\xcb\xc6\xf8\x8c\x4d\xf5\x85\x3a\xe8\x6f\x6c\x25\xbb\x75\x98\xad\x23\x47\x23\x5e\x4b\x9f\x23\xe2\x47\xe2\xc2\x70\xbc\x2c\xe6\xfa\x9d\x81\x6f\x8b\x97\x8a\x3b\x78\x0b\x6d\x03\xe1\x07\x62\xeb\x96\x61\x13\x5a\xfc\x1a\xa7\x9d\x01\xe5\x8a\x8e\xcf\xec\xc7\x97\x35\x78\x39\xcf\x8a\x2e\x21\x8b\xcf\x03\xa7\xa4\x98\xe9\x93\xed\x7a\x6d\x31\x42\x1a\x89\x70\xa3\x21\x3d\x64\x1b\x0d\xc8\xf4\xd8\xb1\xee\xa1\xed\xca\xb5\xf2\x6c\xec\xf0\x38\x31\x76\x26\x35\x07\x13\x44\x51\x2f\x48\x73\xb4\xb2\x29\xc2\xd4\x16\x4a\xf0\xff\xc7\xde\xd7\x35\xb7\x8d\x64\x67\xdf\xe7\x57\x74\x55\x2e\x3c\x7e\x5f\x8a\xda\x99\xad\xa4\x26\xae\xca\x05\x2d\xcb\x3b\xdc\xb5\x25\xaf\x24\xcf\x6c\xde\x30\x45\x37\x81\x26\x89\x08\xec\x86\xd1\x80\x34\x4c\x36\xff\xfd\xad\x3e\xe7\xf4\x07\x3e\x09\x90\x92\xed\xdd\xcc\x45\xb2\x63\x11\x68\xf4\x77\x9f\x3e\xe7\x39\xcf\x93\x6f\xf0\x82\xa4\x45\xa1\x5f\xb6\x8c\xb0\xcf\x79\x38\x61\x84\x8f\xd0\x64\x0d\xe3\x9e\x60\x7e\xf7\xad\x34\x57\xcb\x2a\xb9\xa8\x3b\x95\x9d\xba\x71\xc0\x9c\xe7\x13\x31\x22\x95\x23\x13\x77\x6c\xd6\x4a\x37\x67\xca\x89\xda\xdc\x57\x7c\xe7\x18\x01\xac\x42\x30\xe5\x77\x61\xe5\x56\x02\x78\x71\xbb\xeb\x70\xb2\x08\x77\x58\x05\x12\xc5\xec\xaa\xc1\x42\xce\xec\x23\x9e\xdd\xcb\x5c\xcc\x72\x34\xc0\x01\x1f\x8a\x68\x68\xb8\x5f\x71\xdf\xeb\xd4\xb8\x8e\x46\x8c\x4d\xde\xac\xeb\x88\x9b\xfb\x9d\x3b\x8d\x48\x31\xc8\x71\x78\xf6\xaa\x35\x91\x7c\xfe\x09\x1f\xbf\xb5\x4d\xac\x29\xf1\xb7\x7d\xf8\xf0\x5d\xca\x32\x46\x50\x41\xa1\xf8\x3f\x62\x48\xd3\xbd\x9f\xa6\x9e\x24\xae\xf6\xb1\xe6\x6a\x2d\x4e\xda\x8d\x13\xbe\x5b\xe6\xaa\x5b\xce\x6a\x40\x37\xd9\x22\x2a\xfe\x9d\x2d\xca\x5b\xec\xd9\xe7\x92\xa7\x78\xb8\x49\x9a\x8e\xb6\xda\x60\x2a\xff\xf0\xcf\x6c\x06\xa7\x0f\x7b\x0f\xfb\x22\x04\xf8\xa1\xb4\x42\xb1\x64\x97\x89\x5c\x2b\xc9\x3b\x75\xdd\xee\x7f\xd4\x4b\xd2\xa6\x59\xf2\x28\x52\x65\x53\x87\x66\x44\x4b\x5a\x4a\x0b\x1b\xc5\xd9\x7d\xb9\x12\xb9\x14\xa8\x5d\x07\xcf\x31\xfb\xdc\xa0\xea\x2a\x5e\x16\xdb\x1f\x96\x51\x9a\x0c\x16\xcc\x81\xec\xa2\x99\x79\xed\x02\xdf\xea\x6b\x40\xa5\xfc\x4a\xd5\x25\xc3\xdf\x18\xfe\x36\x65\xaf\x79\x74\x2f\x64\xcc\xb2\xb4\xdc\x24\x44\x26\x00\x27\x14\x6c\x97\x81\x7b\xb6\xda\x30\xb4\x2d\xb0\x7c\x73\x0c\x2d\xe4\x8e\xdf\x23\x89\x2d\x19\x91\x11\x4f\x3b\xa9\xa8\x9c\x59\xbd\x4c\x9a\x73\xf7\xe0\x68\xb9\xf3\xb0\x59\x4c\x7d\xee\xe9\x12\x73\x2b\x1e\xb7\x8a\x22\xd2\x15\xab\x7e\xc4\xc2\x75\xb3\xb5\xc1\xf9\x62\xf3\xf2\x9d\x8a\x21\x55\x06\x57\x2f\xb8\x7b\x81\x88\xb9\x94\x8c\x03\x6d\xcc\x0b\xcd\xca\xcc\xda\x67\xe0\x87\x4c\x21\x2a\x8c\x43\x60\x7e\xc8\x12\x73\x4b\xdb\x8a\x85\x04\xa4\x2d\x73\xcd\x6b\x88\x5d\x31\xe1\x01\x31\x6d\x5b\xc3\x1a\x49\x13\x4e\x8b\x71\x36\x78\x9c\x0f\xcc\xd3\x81\x28\xe2\x62\x2b\xe4\xf2\x08\x3a\xe1\xe1\x83\x56\x41\x0c\x93\x19\xec\xfc\xb9\xae\x0b\x4b\x99\x90\x80\x14\xb9\xf0\x43\xae\xcc\x64\x5d\x33\xa3\x13\xcd\x34\x2f\x12\x6d\xf6\xb2\xd6\x1e\xf7\x54\x15\xa7\xf4\x3a\x1f\xc7\x8f\xd1\xc2\x8d\x51\xeb\x0b\x97\x95\x30\x65\x6f\xc1\x0b\x16\xdc\x0c\x94\x63\x9a\xe8\xda\xb0\x8a\xad\xe8\xa4\x5c\x7c\x0a\x38\x8f\x6d\x41\xf0\x7c\xaf\x73\xd3\x65\xa0\x4c\xd9\xcc\x47\x1f\x90\x6b\x03\xe3\x0a\x07\x5a\x24\x52\x2d\x8e\x99\x7c\x83\x1c\x75\x10\xa1\x87\x09\xc4\xc0\x92\xd2\xe6\xef\x9e\x41\xde\x55\xf3\x11\x92\x3c\xf9\xbd\x90\x7d\xde\x98\xe1\x35\x44\x77\x59\xaf\x4b\xc0\xf9\xe1\x14\xba\xe2\x8e\xa9\xe0\xf0\x65\xe7\xe9\x4d\x92\xf5\xb9\xe9\x72\x73\x0d\x89\xee\x29\xb5\x04\xbd\xb1\x44\x90\xf2\xb8\x55\x3a\x5c\x67\x76\xfc\xf0\x26\x9b\x97\x8e\x25\x1c\x52\x73\x5c\x07\x23\x26\x47\xaa\x90\x3f\x05\x6a\xed\x16\x29\x7a\x9a\xdd\x78\x33\xbb\x85\x42\x37\x40\x14\xcb\x16\xd5\x5c\xcd\x7f\xfa\x51\x5f\xc3\x8a\x7d\x8a\x4c\xfd\x76\x59\xd6\xd3\x51\xf2\x47\xc6\x07\x1c\xfe\xcb\x6b\xba\xf2\xd8\x71\x4b\x64\x2a\x66\x7e\x7a\x8d\x17\x70\xfd\xfa\xcd\xaa\x09\xbf\x0e\x6a\xdb\xa1\x99\xfd\x3e\x00\x11\xb0\x55\x99\xa0\x86\x7a\xc5\x20\x54\xd6\xe2\x00\xfe\x63\x38\xfe\x13\xed\xce\x93\xf6\x39\xf6\x41\xc5\xa7\x4c\xac\xf1\x74\x7a\xcd\x79\x3d\x00\x63\xac\xdb\x34\xdf\x7b\x7a\x22\x53\xdd\xe8\xd0\x78\x39\x5c\x25\x1d\xe0\x00\xab\x72\x7d\x0b\xea\x22\x5d\x8c\x15\x01\xf1\xbe\x4d\x41\x33\xe3\x6c\x3e\xe3\x12\x22\xba\x06\x85\xa2\xcb\xfe\xf8\xe7\xec\x8f\xb7\xd7\x57\x67\x3b\x9e\xeb\x2d\x87\x8c\x60\x5b\xd6\xc4\x0a\xb6\xe1\xf5\xd8\x46\xbd\x12\xb9\x90\x67\x6c\xa3\x26\x18\x63\x7d\xc5\xb6\x45\x91\xe9\x57\xe7\xe7\x9b\xa4\xd8\x96\xab\x69\xa4\x76\xe7\xbe\x6b\xce\x79\x96\x9c\xaf\x52\xb5\x3a\xcf\x05\xa0\x6c\xcf\xbe\x9f\xfe\xf0\x3d\x8c\xcc\xf9\xc3\xf7\xe7\x10\x59\x9b\x6e\xd4\x3f\xbe\xfb\xe1\x5f\x7e\xff\xcf\xa6\xe0\x6c\x5f\x6c\x95\x7c\x45\x01\xdc\xde\xb2\xcf\xd0\x2a\x3f\xc7\x57\x6a\x5f\xf9\x97\xe9\xef\xc2\x6a\xd0\xa3\x3b\x15\x8b\x54\x9f\x3f\x7c\xbf\xb4\x03\x33\xcd\xf6\xbf\xe1\x52\xbf\x1a\x2e\xf5\x3e\x29\x7e\xc3\xa5\x7e\x55\x5c\xea\x70\x0b\xc7\xed\x31\x40\xf4\xe9\xf7\x47\xf3\x77\xb7\x47\x5a\xd7\xfb\xa1\x7d\xa8\xe5\x70\x08\xb3\x06\x4e\x38\x22\xee\xc5\xa8\x2b\x76\xad\xb9\xee\xea\xd0\xe1\x62\x1b\x4b\xb6\xdf\x69\xcc\x8f\x4a\x92\x06\x14\x48\x12\x01\x91\x33\xba\x04\x33\x9e\xb4\xa1\x4d\x09\xed\x74\x4a\xff\x3d\x27\x25\xf9\x53\x73\x91\x53\x73\x8f\xe4\x21\x4f\xf1\x6d\x8b\xcd\x52\x8f\x96\x7f\xfc\x29\x58\xbb\x07\xea\xb8\x3a\x32\x62\x9c\x3c\x50\x17\x5b\xaf\x8e\x6a\x6c\xb9\x3e\x0e\xe4\x37\x43\xca\x3f\x17\xa7\x73\xaa\xf8\xf4\x41\x7b\x70\x58\x16\x05\x10\x09\x27\xb2\xa6\xac\xcc\x33\xa5\x85\x9e\xb2\xb7\x35\xa5\x43\x0f\x5c\xbc\x79\x7b\xc1\xbe\xff\xf1\x5f\x7e\xbf\x90\xdf\xb5\x9c\xdb\xb0\xdf\xab\x7c\x43\x38\x4a\x38\xad\x77\x5c\x17\x22\x3f\xcf\xd7\xd1\x39\xee\x72\xe7\xe6\xfd\x33\xfa\xe8\x99\x5a\x9f\x39\x4a\xe2\x33\x62\x67\x9d\xee\xe2\x71\x04\x03\x95\xa9\x87\x67\x0d\x1d\x34\x1a\x0e\x25\xa4\x22\x52\x6b\x47\x3e\x8f\x79\x2e\xa8\x53\xa1\xd6\x2d\xff\xf1\x3a\x55\x2b\xfd\xd2\x11\xa0\x71\x6d\xbf\xe1\x19\x89\xba\x97\xe6\xd3\xb0\x93\xdb\x29\xf2\x9c\x8e\x0a\xbb\x97\x84\xd7\x91\x31\x1d\xdf\xbe\xd8\xfc\x71\x8f\x7c\x0c\x3c\x57\xa5\xb4\xec\xce\x4a\x0a\xb5\x06\x14\x1f\x58\xc2\x16\xa5\x00\xbe\x5a\x73\xd2\x7a\xee\x85\x5c\x64\x78\xc0\x40\x54\xa1\xbb\xbb\x4f\x64\x38\x3f\xd4\xcf\xcf\xc1\x70\x7e\x6a\xbf\xd3\x86\xf2\x95\x3a\xfc\x54\x28\x21\x2e\xa5\x31\xa8\x0a\xf3\xfc\xc1\x08\xaa\xdb\x07\xbc\xfa\x90\x27\x13\xce\x78\x0e\x46\x9a\x38\x2b\xd4\x19\x90\xd6\x00\x15\x0a\x6a\x0e\x74\xc1\x2a\x20\xf2\x3c\xe6\x98\x34\xcf\x0f\xa8\x27\x1a\xe6\xbf\x06\x15\x25\x9b\x44\x23\x85\x27\x41\xb2\x12\x29\x45\x4e\x31\xb5\x83\x27\xea\xc8\xb8\x74\x38\x94\xfd\x88\xac\x40\xd7\x3a\xe0\x83\x77\x78\x7c\x1e\x6c\x02\x53\x06\xd6\xe7\x56\xed\x94\x31\x67\x54\xa9\x83\x1f\xf1\xf6\x02\x87\x70\xa7\xed\xb5\xe3\x19\x92\xd4\x7d\xbd\xd6\x98\xa5\x65\x7e\x42\xa7\x5e\xf8\xd0\x28\x89\x8d\x55\x55\x54\xe0\x40\xfd\x1d\x1b\x7c\xff\xbc\x01\xd4\x03\xea\xd4\x81\x54\x2c\x71\x3c\x27\xff\x65\xee\x35\x66\x4a\xb9\x9b\x82\x3b\xb9\x11\xa4\x83\x5c\x8c\x21\xdd\xab\xb5\xe6\x3b\xb3\xa5\xcb\xdd\xc8\x31\x70\x20\xe3\x21\x03\xc0\x25\xc2\x6e\x2d\xde\xf6\xac\x15\x70\xdb\xb5\x2e\xad\x30\x6b\xbc\xb4\x7c\xa1\xe3\xaa\x7a\xeb\x0a\x20\x6a\xd0\x66\xbd\x3d\xdd\x12\xa0\xb3\xb1\x8f\x71\x43\xb0\xb6\x45\x07\xe8\x46\x8e\x5f\x8c\x20\xb0\x32\xa6\xef\xe0\x23\x38\x39\x1b\x3d\x18\xac\x85\xae\x0e\x1c\xe7\x62\xeb\xf3\x58\xb5\xc1\xf9\x91\xa1\xce\x67\xef\x98\x5a\x36\x2e\x8f\xee\xc5\x07\xaf\x42\xbd\xcf\xc4\x84\xad\x4a\xf8\xfd\xea\xfa\x2e\x44\x6b\x24\xd8\xda\xb3\x68\x2b\xa2\x7b\x70\x98\xe0\x91\xe7\x44\x1b\x89\x0d\x6f\x21\xbd\xf4\x57\xa1\x2c\xf4\x60\xef\xd8\xd0\x9d\x22\x80\xca\x59\x9c\xe8\x2c\xe5\x7b\x08\xf2\x4a\xc4\xe9\xfb\x00\xb1\x4b\x70\x31\x5b\xc1\x21\x7f\xf1\xf0\x91\x36\xa3\x32\xf3\xef\x8d\xed\x4b\x9e\xaf\x92\x22\xe7\xf9\x9e\xf9\xce\x6c\xee\x07\x4c\x8b\x1d\x97\x45\x12\x2d\xe4\x4e\x70\x19\xa2\xf2\x28\xc8\x6d\x3a\x39\x56\x82\xf8\x82\xd7\x6b\x11\x15\x9e\x70\x10\x8c\x77\xd7\x53\x87\xd6\xe0\xb8\xb6\xbb\x95\xd7\xdb\xf4\x9f\x12\x89\xe9\xed\xc9\x0e\x30\x9f\x34\x87\xe8\x68\x3c\x32\x78\x03\x52\x71\x74\xe4\xda\xcb\x20\xfc\xcb\xce\x29\xb6\x12\xc5\xa3\x80\x7c\x7a\x4a\x00\x6c\xb3\xf1\x4f\x96\x0b\x38\x4d\xfd\xb7\x5d\x37\x39\x40\x82\xe1\x02\x0b\xc1\x64\x8e\xf8\x47\xd6\x18\x7c\x5e\x50\x4a\x22\x78\x7b\x5e\x90\xdf\xea\x05\x1c\xd3\xe6\xf6\x98\x3f\x88\x78\x21\xab\xb4\x4a\x64\x33\xfa\x05\xc7\xbc\x10\xd6\xd3\xec\x36\xb6\x8f\x07\xf9\xf2\x2f\x81\x4a\xc2\x93\x48\xba\xa4\xbb\x1e\x61\x2e\x6c\xf4\x73\xde\xaa\xac\x26\x60\x68\xdd\x0f\x80\x64\x09\x6d\x85\x6e\x48\x17\xaf\x82\xa7\x70\x93\xd2\x91\xc6\x20\xa3\x9c\x03\xc0\x92\x5f\xb2\xe1\xe9\x6c\x2b\x63\x21\x6d\x36\xf5\xba\x4c\x91\x25\xb4\x4b\x2a\x8c\x38\xa4\x6c\xe6\xc7\xd7\xcb\x00\x72\x7e\x35\x16\x68\x8b\x39\xd8\x43\x00\x46\xc6\xbd\xce\xce\x7a\x21\x35\x0a\x52\x5b\x59\x21\x70\x3c\x6f\x44\x01\xa7\x79\x5c\xa6\x98\x1c\x0c\x1e\x73\xe0\xa3\xe2\x69\xca\x92\x42\x2f\xa4\xa3\xcf\x42\x32\x74\xd8\x61\xad\x4b\xdd\x2a\xd2\x4a\xa7\x6b\x4b\xda\xfd\x60\x87\x25\x51\x52\x34\x20\xdc\xfb\x50\x8a\x23\xcb\x04\xc7\x5c\x36\x1c\xb6\x85\x0c\xef\x5c\xf5\x41\xa0\xc4\x2f\xd0\x28\x7f\x8a\x1c\xac\x1e\x44\x3e\x08\xbb\x8f\x1e\x92\x29\x9b\x61\xeb\xcc\x85\xcb\xaa\x6c\x62\x6d\x29\x7f\x9e\x90\x96\xe6\x56\x53\x68\xeb\x23\xf7\xf7\x56\x90\x73\x8e\xca\x94\xe7\x29\x70\xd2\xaf\xcb\x94\x25\xeb\x40\x30\x14\xc6\x00\xc9\x93\xcc\x70\x45\x0a\xce\x6a\xeb\x25\xd7\x7c\x27\x82\xbc\x6d\x72\xef\xa4\x01\x86\x02\x19\xa1\x31\x38\x6f\xca\x7a\x39\x65\x6f\xea\x0a\xf3\xb0\x26\x02\xd2\xc5\x44\xe3\xf6\xe7\xea\x1b\xa4\x1c\xa2\x52\x7d\xb2\x36\x57\xca\x17\xc1\xaa\xeb\x18\x41\x20\x6f\x1f\x07\xd0\xb0\xd4\xfd\xfd\xa8\xe1\xd6\x94\x63\xf3\x6a\x0d\xb6\xe1\x16\x44\x47\x05\xed\xa9\x30\xb2\x92\x21\x61\xe5\x11\x15\x75\x84\xa0\x2d\x95\xdd\xf5\xe8\x93\xc2\x38\x8e\xac\x6a\xa0\xf6\x33\xbe\xa2\xc1\xcc\x09\xe1\x38\x43\x7a\x76\xc3\x8b\xb1\xd8\x1c\x97\x8c\x33\xbe\xa2\xad\x38\xa8\x21\xd5\x84\xdd\x63\x64\x3d\xbd\x04\xff\xf8\x8a\x3a\xe9\x67\xaf\x07\xe0\x35\xf1\x2b\x39\x94\x96\xe9\xd0\xb5\x40\x2f\x24\x1d\x76\xe3\xd3\x3f\x67\x7e\xce\x81\xe0\x11\x33\xd5\x9f\xb2\x6b\x29\x10\x39\xa7\xd6\xc1\xa1\x42\x15\x20\x65\x24\x20\x9b\x97\x81\x04\x75\x9a\xc8\x7b\x4b\x2d\x61\x96\xdc\x84\x71\x5f\x3a\xec\x7a\x38\x6d\x70\x17\xe9\xb0\x25\xdb\xa4\x19\x4e\x30\x2f\x87\x25\x68\xb6\xdf\xf9\x03\x00\xea\xf8\x1d\xa0\xad\x1d\xc3\x87\xa5\x17\x49\xee\x6e\x71\x15\x8d\xf1\x10\x35\x5a\x24\xc5\xfe\x50\xff\x7e\xd8\x56\x51\x88\x23\x84\x8c\x3e\x5e\xbd\xb9\x7c\x3b\xbf\xaa\xaa\x0f\xfd\xf9\xe3\xe5\xc7\xea\x5f\x6e\x3e\x5e\x5d\xcd\xaf\xfe\x10\xfe\xe9\xf6\xe3\xc5\xc5\xe5\xe5\x9b\xea\x73\x6f\x67\xf3\x77\xb5\xe7\xcc\x9f\xaa\x0f\xcd\x5e\x5f\xdf\xd4\xf4\x8e\xac\x58\x51\xf0\xa7\xbb\xf9\xfb\xcb\x37\xcb\xeb\x8f\x15\xc9\xa4\x37\xff\x76\x35\x7b\x3f\xbf\x58\xb6\xd4\xe7\xe6\xf2\xe2\xfa\xe7\xcb\x9b\x03\x8a\x47\xbe\xbd\xad\x5d\xfa\x14\xf0\xb1\xa3\xf5\xaf\x66\x6c\x9d\x27\x42\xc6\xe9\x1e\xb1\xf7\xf6\x66\x5b\x03\xd3\x86\x67\x6f\xb2\x13\xaa\x3c\x05\x42\x7f\xb7\x45\x85\x7a\x60\xc1\xc0\xd2\x28\x65\x96\xeb\xfb\x4e\x8e\xc4\x22\x6f\x46\x05\x7a\x33\x85\x8a\x7c\xef\x72\xd1\xfa\xaa\xe3\x19\x94\xe8\x23\x2c\x13\x79\x5f\x5d\xc0\x32\xca\xcb\xac\x48\x56\xdd\x49\x11\x03\x99\x85\xc6\xdf\xbd\x91\xef\xaf\x9d\x1c\xe5\xaa\x7d\x63\xac\xe4\x06\x9c\x02\x3c\x86\x12\x8e\x95\x75\x73\x6f\x5b\xb0\x66\x56\xae\xd2\x24\x62\x49\x5c\xf7\xa7\x60\x0a\x1b\xba\x8c\xeb\xb4\xa0\x99\xc8\xc1\x54\x35\x37\x80\x2c\x17\x67\xbc\x2c\xb6\x56\x71\xde\x65\x32\x22\x4d\xa7\x88\x72\x81\xb1\x00\xa1\xc1\x49\x8b\x7a\x5e\xc1\x97\xa0\x32\x94\xc1\x1d\x03\x59\xcc\x34\xa0\x68\xef\x88\x11\xe0\x9b\x58\xfa\x08\x27\x29\x3e\xdf\xdb\x35\x54\xe3\x44\xd7\xc5\x9c\xe1\x84\xc7\x1f\xad\x2a\x98\x69\xb7\xd9\xa9\x9d\x2a\x16\x0e\xb2\xcd\xdd\x68\x6f\xc6\xa1\x39\x16\x4e\x94\x6a\x32\x03\x95\x4e\x3f\x5d\xe4\x02\x0e\x11\x82\x02\x58\xff\x05\x40\x57\x28\xd7\x03\x52\x3c\xcc\x55\x6d\x25\xb6\x3c\x5d\xa3\xc5\x61\x86\xc6\xaf\xab\xe6\x14\xbd\x53\xf7\x42\xde\xe0\x80\x7d\x95\xed\x50\xe2\xcd\xc7\xe7\xf4\x3b\x8f\x90\x77\x61\x9a\x3a\xda\x59\x65\x73\xdd\xc0\x98\x2a\xf0\x9e\x10\xfc\x8c\x29\x1d\x9e\xb1\xd7\xa6\xc9\xad\xd7\xc9\xaf\xa6\xc0\x85\x14\xad\x9c\xa5\x80\x17\xb2\xec\x4a\x6e\x5f\x06\x6c\x14\x52\xd4\xdc\x0b\x09\x7a\x62\x28\x37\x7c\x70\xce\x8e\xf3\x9f\x37\xc7\xa2\xc7\xa1\x0f\x3e\xbf\xa4\x22\xb3\x16\x46\x79\x6c\x3f\x15\x98\x63\x33\x65\x6f\x88\x78\xc3\xfc\xe5\xe2\xdd\xfc\xf2\xea\x6e\x79\x71\x73\xf9\xe6\xf2\xea\x6e\x3e\x7b\x77\x3b\x74\xf9\x3d\x45\x5e\x54\x6d\xf5\xd5\xd3\x83\xdc\x0e\x71\x4e\x2b\xcf\xa7\xe7\xba\x46\xf9\x65\x07\x43\x72\xb8\xf6\x49\x9c\x2d\xe3\x44\x47\xe6\xf8\xdb\x2f\x85\x8c\x81\xec\xf9\xa8\xa9\xda\x5e\x54\xbd\x15\xee\x09\xe6\x9e\xb0\x3b\x08\x9e\x76\x0f\x76\x46\xbb\xdf\x01\x75\x07\x6e\xc8\x5c\x98\xc5\x1f\x9b\xfb\x81\x3b\x6d\xa6\x87\x15\x3e\x4c\x71\xa7\xb5\xad\x5a\x44\xbd\x4d\x58\xdf\x44\xeb\x92\x9b\xfd\xd1\x3e\x06\x90\xc3\x8e\x5e\x21\x06\xbe\x90\x71\x3a\x09\xd4\x52\x59\xa2\x17\x72\xc7\x65\xcc\x0b\x95\xef\x3b\x9a\x38\x6c\xf3\x0c\x97\x4d\x75\x0b\x0d\x8f\x6c\x29\x44\x6c\x47\x01\x1f\xe5\xb2\x3e\x95\x90\x97\xfa\xee\xfa\x4f\x97\x57\xb7\xcb\xcb\xab\x9f\x97\x1f\x6e\x2e\xdf\xce\xff\xe2\x90\x90\x19\xd7\x6d\xea\x88\x59\x2e\xcc\xee\x62\x69\x3e\x5a\xf7\x17\x94\x2c\xb4\xe5\x90\x4c\x55\xb2\x5e\x48\xbb\xb3\xe4\xbe\xf8\x6d\xae\xca\xcd\xb6\xbd\xa0\x7a\x2d\x3f\xcc\xee\x7e\x3a\xaa\x9a\x40\xc2\x84\xba\x66\xb8\xda\x9a\x88\xd0\x64\x4d\xfb\x1e\xc2\x48\x6b\xd5\x03\x2a\x31\x78\xb4\x2d\xca\xd0\xb1\xa3\x1d\x75\x7b\x69\x6e\x5a\xbd\xc6\x7f\xcb\xe3\x5d\x13\xe8\x2e\xd8\x37\x2b\xc7\x08\x20\x94\x51\x1e\xb3\x51\xda\xab\x96\xbf\x55\x4e\xb0\x1f\xce\x52\xb1\xd9\x88\x18\xa7\x57\xbd\x60\xf2\xc1\xd1\x16\x18\xf9\x73\xbd\xad\x17\x49\xc0\xee\x84\x83\xd9\xe1\xbd\x86\x6f\xe0\x1f\xdc\x2b\xed\x7b\xc5\x85\x15\xc9\x8e\x94\xd4\x05\x97\x1d\x81\xe4\x87\x26\x42\x73\xd0\x56\x74\x9d\x33\x97\xfc\x44\x0e\x13\x1b\x32\xf0\xeb\xa0\x0b\xf0\x72\x3a\x2e\xd4\xd5\xe3\x46\x64\x29\x8f\x84\xcb\x61\x40\x06\x3c\xb8\xd7\x1f\x13\xc0\x23\x99\x40\x49\xfe\x96\x40\x3e\x30\xd0\x14\x6f\x99\x02\xe0\xb9\xbd\xb1\xfb\xf1\xf3\xbb\x56\x7a\x2f\x6e\xc4\x7b\x05\x8e\x66\xd4\x69\x22\xe8\x3b\xfa\xa2\x40\xfc\xac\x13\x96\x3c\x6a\x3a\xd4\xbe\xfc\x33\x0d\x3c\xde\x99\xab\x8e\x6e\x6e\x99\xe5\xdc\xf4\x70\xa6\x63\x9f\xbf\xb0\x28\xf2\x5e\x32\xca\xa7\x08\x47\x7c\xc8\xd5\x2e\xd1\x62\x56\x14\x79\xb2\x2a\x43\x35\xbe\x91\x80\xb9\xca\xe5\xc4\x37\x38\xcb\x55\x5c\x46\x96\x12\x08\x5a\xeb\x61\x3f\xe4\xe5\xb3\x56\x47\xcc\xce\xcc\xec\xa3\x9b\x9b\x88\xcf\x00\xd0\xbf\x90\x5d\x31\x36\xbb\x31\x76\xf8\xfe\x3e\xd8\xa3\xfc\x94\x29\xd9\x32\x29\xba\x3b\xd3\xce\x81\x61\x89\xb5\xcc\x3e\x0e\x16\x70\x07\x6a\x8a\xa6\xcb\x8a\x63\x00\xbd\x6a\xa3\x74\x31\x80\xb8\xa3\x66\x1c\xb8\x6b\x18\x36\xa6\x9a\x31\x83\x76\xc3\x96\x6b\x34\xe7\x8b\x68\x5b\xad\x38\xb4\xa6\xca\x9a\x57\xaf\xae\x33\x8f\x4f\x73\x9b\x0c\x0a\xa3\x4d\xd0\xd1\x90\x90\x63\xbb\xa2\x80\xe6\xe4\x1c\xc7\x79\xbb\x43\x8b\xd1\xdd\xe8\xf0\x30\x80\x7d\x34\xe5\xa5\x8c\xb6\x2c\x4b\x39\x26\x93\x6f\xb9\xc6\x29\x6d\xb1\x24\x7c\x95\xa4\x49\x01\x2c\x3d\x18\xe2\xac\xf5\xb0\xb9\xe6\xf1\xfc\xde\x12\xe3\x72\x4f\xc9\xd4\x37\xe9\x4f\xc4\xec\xba\x56\x7d\x51\xd4\xae\x5f\xb2\xe1\x36\x34\x6c\x5a\x12\x62\xd7\x0f\x87\xd9\x88\x61\x5a\xfa\xb6\x8c\x1b\x59\x2a\xf1\x43\xfd\xf5\x4a\x7f\xb7\x58\x2f\xe3\x11\x2b\xc4\xf8\x3e\xe2\xf4\xa9\xf3\xc1\xb7\xae\xac\x75\xaa\x78\x87\x26\xb1\x2d\x1b\xe9\xdd\xbb\xca\x8e\x55\xb9\xea\x22\x14\xc6\x5a\xf5\x97\xde\x17\x0c\xb1\xeb\xf6\xa9\x9c\xa5\xe1\x06\xc8\x0b\x51\x24\xe3\xfc\x3d\x41\xa3\x79\x21\xce\xe0\xf5\xf6\xc2\x29\xc3\x70\x70\x9b\x1b\x13\xcd\x8b\x8c\x38\xa3\x0d\xb0\x84\x6d\xb3\xab\x76\x3a\x9f\x82\x09\x3f\x71\xbc\x12\x79\x60\x2a\x1d\xd6\x2d\xf8\xfd\x0f\x2d\xdd\xd2\x68\xf4\x9f\x4b\x6e\xf6\xc3\xeb\xf5\x2d\x72\xe5\x9c\xd2\xe8\x22\x69\x2e\xab\xf6\xed\xa7\xfe\xd5\xbb\x6a\x78\x2d\x9c\xf8\x83\x33\x91\xdb\x5a\x73\x6b\xde\x1e\xbe\x0b\xcd\x2b\x6e\xb4\x2c\x4f\x14\x70\xc6\xa8\x35\x32\x30\x76\xd3\x4d\xb6\x7e\xf7\x84\x9e\xfc\x5c\x8a\x52\x98\x09\xb4\x2a\xe3\x4d\xd3\xcb\x3d\xc2\x52\xf6\x4d\xda\xaa\x47\xb6\x2b\xa3\x2d\xb3\x85\xb3\x58\xa4\x7c\x5f\x69\x1a\x18\x89\x85\x4a\x81\xc0\xf9\x48\x36\xd9\xa8\xd4\x85\xda\x01\xc0\xd8\x97\x9b\x97\x12\x56\x39\xe3\x76\x75\xb5\xed\xef\x15\x76\xb9\x23\x43\x9b\xb7\x1f\x2e\x2f\xe6\x6f\xe7\xb5\xb8\xe2\xec\xf6\x4f\xe1\xbf\x7f\xb9\xbe\xf9\xd3\xdb\x77\xd7\xbf\x84\x7f\x7b\x37\xfb\x78\x75\xf1\xd3\xf2\xc3\xbb\xd9\x55\x25\xfa\x38\xbb\x9b\xdd\x5e\xde\x1d\x08\x30\x36\xbf\xda\x3d\x10\x3c\x20\xbf\xb3\x90\x67\xcb\x02\x6e\xfd\x0c\xf4\xd5\x57\x6c\x66\xa9\x00\x2b\x64\x95\x36\x48\x0c\xa8\x12\xd4\xc4\xa6\x58\xf2\x1b\x5e\xf0\x0b\x5e\xf0\x54\x6d\xa6\x6c\xc6\x08\x10\x8e\x40\x7f\x6d\x2c\x24\xe2\x49\x33\xa3\x83\x45\x18\x33\x29\xf2\x77\x78\x2f\x73\xa8\xd6\xc4\x50\x98\x8a\x90\x10\xdf\x66\xb5\x2d\xe4\xe5\x83\x90\x45\x09\x6c\xdd\x3c\x4d\x19\x7d\xd6\x3e\x10\x64\xec\xdb\x5a\xea\x64\x97\xa4\x3c\xf7\x8a\x74\xd7\x54\x16\xdc\x52\x6c\x5d\x1d\x41\x53\x33\x1d\xdc\x5e\xe4\x3e\xce\x19\xd4\xfb\xe2\xdd\x1c\xec\xbe\xa8\xb0\x72\x2b\xf6\xe3\x0b\x89\x0c\x78\xf4\xc5\x1d\x87\xe4\x93\x42\x91\x67\x15\x3f\x4f\x0f\x77\x4f\x44\x7d\xca\x22\xb6\x31\x88\xe7\xba\x51\xba\x4a\xda\xff\xb8\x94\x45\xbe\x1f\x6c\xcc\xdd\x41\xb6\xb5\x06\x83\x9c\xb0\x6c\x55\x95\x3a\x74\x7c\x31\x5b\xfa\x15\x58\x78\x16\x68\x49\x71\x19\x17\x7e\x41\x5c\x4b\xc7\xa5\x23\x35\x27\xef\xb7\xda\x0f\x21\x21\x0e\xf4\xc2\x4a\x95\x32\xd6\x84\xba\xdb\x25\xf2\x7c\xc7\x7f\x7d\x69\x5b\x8a\x04\x13\x4e\x2b\x02\xc8\xc3\x44\x6a\xae\x5f\x7b\xb3\xc9\xf5\x77\xd7\x42\xf6\xf4\xd7\x61\x13\xd9\xee\xac\x70\xd7\xf3\x17\x73\xc4\x0f\x3e\x88\x7d\xdb\xf8\x35\xf4\x7e\x10\xa3\x48\x0b\x1e\x0a\xc9\x72\x61\x1e\x74\xe0\xc4\x14\x31\xa7\xee\xdf\x90\x84\x50\xd1\x24\x6c\xdf\xbb\xc3\x78\xff\x49\xcb\xa6\x15\x69\xf0\x0c\x82\x4d\xf4\x25\x33\x66\x88\x3b\xb0\x2e\x6f\x4a\xba\xa0\x80\xaa\x19\xac\xff\x54\x2b\xb6\x86\x0c\x24\xd2\x1c\xcf\x05\x84\x38\x60\x28\x2c\xc3\x38\x50\x4c\x35\xc0\x0c\x76\x0a\xa4\x42\x83\xe3\x5f\x9a\x3b\xa6\xf8\x5c\x52\xec\xf6\xfb\xdf\x8d\x3b\x67\x8b\x7c\xcf\xac\x9a\x45\x98\x01\x45\x09\x80\x74\xe6\x42\xbd\x4a\x99\xb4\xf1\xce\xdd\x94\xd2\x1c\xc5\x4f\x01\x7b\x19\x1e\xd7\xac\x7d\x94\xfe\x79\x30\x49\xc8\xba\xe4\x73\x7c\xfe\xd9\x68\x44\x7f\xae\xb1\x87\xd2\xe7\x00\x92\x4e\xa5\x87\x07\xda\x8a\x47\xf7\x8f\x3c\x8f\xd1\x6f\x0b\x38\x94\x29\xfb\x49\x3d\x8a\x07\x91\x4f\x58\x24\xf2\x82\x13\x75\x97\x86\x40\x3c\x2c\x28\x2a\x67\x21\x21\x43\x03\x79\xd0\x24\xc8\xb5\x17\xc9\x66\x6b\x2e\xd1\x01\x8c\x42\xe5\x66\x3b\x2a\x90\xb5\x31\x13\x11\x91\x25\x75\x74\xc0\x3a\xe5\x0f\x4d\x2e\xb2\x63\x58\x1e\xd8\xdc\xa5\x99\xda\x38\xa5\x55\x6d\xe8\x03\xbe\x50\x87\xd1\xa6\x89\xf4\x36\x13\xb6\x51\x29\x97\x9b\xe9\x74\xca\x44\x11\x4d\x5f\x8e\x9a\xe8\x54\x60\x18\xf9\x74\xf0\xea\x54\x29\x2d\xd2\xbd\x23\xf8\x71\x09\x30\x80\xb8\xfc\xb5\x10\x52\x27\xe8\xe7\x69\x99\xfe\xb7\xf5\xa8\xc0\x97\x0d\xa2\xb4\x5f\xcf\x47\xa7\x57\x76\x94\x03\x22\x50\x23\x4a\xc2\xe7\xdb\x6f\x5e\x47\xa5\x0b\xb7\x97\x25\x95\x1c\x9b\x03\xfb\xb3\xea\x92\x34\x3f\x8a\x77\xaf\xb5\x24\x22\x29\x39\x2a\x6f\xb0\xbd\xcf\x1a\xa9\x9c\x27\x64\x71\xf6\x24\x64\x8e\xcc\xc5\x1c\xe2\x08\xb8\xad\x0f\xf7\xe8\x65\x71\x58\x97\xa2\xb5\x41\x23\x73\x5d\x7d\x52\xfa\x18\xd3\x09\xd3\xe5\xd2\x3d\xdc\xb8\x5c\xe6\x2b\xb8\xd3\xe3\x20\x1c\x50\x89\x76\x40\x0e\x96\x0f\x97\x38\xf2\xa8\x20\x3a\xa2\x0b\x95\xf3\x8d\x60\x3b\x11\x27\xe5\xae\x75\xb3\x71\xd5\x3d\x05\xf7\xa7\xd2\x72\xd7\x4d\xe3\x77\xaa\x01\xed\x2b\x89\xff\x75\x01\x9f\x1b\x6c\x40\x7b\xf1\x7e\x2b\x0f\x44\xf5\x45\xdf\x3f\xf5\xb5\x39\x29\xf3\x44\x03\xe1\xe4\x31\x29\x8f\xae\x18\x2c\x1a\x22\xa7\xfb\x0c\x7d\xce\x95\xd1\x3d\xb3\x21\x2d\x7a\x45\xe3\xa8\x42\xb8\xb5\xfb\x50\xa8\xa3\x09\x47\x8f\x11\x88\xcf\x1c\x15\xe1\x06\xb3\x31\xa0\x81\x27\xb8\x13\x14\x48\x98\x8c\x42\xb1\xb5\x4d\xa2\xbb\x17\x01\x2d\x59\x0c\x04\xf1\x8f\xc8\x71\xf3\xa7\x1f\xb5\x45\x6f\x10\xc0\xc6\x5b\x2c\x85\xff\x08\x06\x44\x1e\xbe\xb7\xb8\x2a\x6c\x21\x16\x01\xe4\x61\x31\x97\x45\x6b\x01\x1e\x76\x08\x65\xe1\x2b\x3f\xf3\x32\x6d\x7f\x9c\xca\x87\x47\x51\x6c\x6a\xf6\xcb\x2d\xc3\xae\x26\x2a\xf1\xbc\xaf\xa2\x41\x21\x87\x91\x5d\xd0\x5d\xcb\x23\x2c\xc1\xca\x38\x60\xa7\x5b\x2e\x79\xd3\xed\xa2\x88\xb6\xde\xf2\xa8\xaa\x46\x93\x92\x20\xb5\x73\xe7\xc9\xd1\x11\x34\x1b\xa2\x0f\x93\x8d\x54\xa1\xae\x87\x92\x02\x22\x53\x66\x03\x52\x61\xb1\x2c\x29\x0e\x43\xbc\x46\x32\x86\x1d\x9a\x6a\x85\x42\xe8\x0e\xb5\xb3\x12\x60\x84\x2b\x45\x82\x3c\x43\x16\x1f\x8b\x77\x22\x12\xa6\xab\x93\x66\x57\x99\x1b\x16\xb2\xfa\xa9\x46\x27\x59\x0c\x56\x92\x0b\xe4\xba\xd5\xc6\x7a\x2b\x92\x07\xb3\x50\x9b\xd3\xda\x4d\x50\xd8\x01\x9a\x73\x6f\x21\xb1\xda\x01\x61\xee\xbd\xd8\xeb\x50\x05\x8f\x66\x14\xeb\x9a\x90\x89\x69\x0f\x8d\xd7\xe1\xa1\x80\x8e\x5b\x06\xaa\xfe\xc3\xce\x32\xfc\xe8\x7b\xf3\x72\x0f\xb8\xb3\x51\xb8\x99\x83\x3e\x4b\xd1\xfb\x14\x69\x9b\xf0\xfd\x4c\x63\xe8\xf1\x5b\x80\xce\x0b\xf1\x77\x61\xca\x09\x5c\x7c\xcd\xfd\x76\x21\x89\x53\x3b\x38\xe4\xcc\x86\xd3\x1c\x36\x4a\x9d\x46\x26\xdf\x7d\x85\xf6\x05\x68\x0f\x2d\x05\x64\xf5\x93\x36\xd8\x6a\x45\x54\x17\x12\x3e\x8d\xc9\xa5\xd6\x87\xd7\xfa\xc1\x23\x41\x81\x34\xb8\x9d\x40\xc0\x20\x83\x0b\x9f\x24\xe6\x3f\x94\x53\xc4\xdb\x4f\x24\x4c\xf7\xcd\x64\x2b\x06\xcf\x22\xf0\x6e\x2f\x2f\x6e\x2e\xef\xbe\x18\x50\xd0\xa2\xf4\x46\x23\x05\x6d\x3d\xdf\x5c\xbe\x9d\x7d\x7c\x77\xb7\x7c\x33\xbf\x79\x0e\xa8\x20\xfd\x74\x04\x56\xf0\x96\xa8\xfa\x2f\x94\x2c\xc4\xaf\x27\x9d\xc9\x79\x29\x97\x7c\x44\xce\x8a\x13\xeb\xe8\x33\x77\xb0\xd0\xa6\xd4\x80\xd3\x01\x20\xde\x49\x3c\xd1\x9c\xb2\xc0\xda\x3b\x0d\xd7\x49\x9a\x42\x0a\xaf\x73\xaf\x53\x7a\x98\xe9\x54\xd8\x7f\x2c\xd5\x26\xed\xa9\x0b\xb9\xaa\x28\x41\x80\xcb\x6f\x6b\x2e\xc1\x98\xbc\x9b\x99\x0e\xc8\x13\x48\x8d\xec\x53\x23\xd8\x24\x52\xf8\x6a\xa0\xf4\x71\x29\x59\x27\x85\x34\x0d\xe2\x73\x42\xa2\xc8\xf0\x1a\x6a\x6b\xda\x19\x57\x99\x9f\xd6\xfc\xb4\x3f\xba\x16\xe2\x22\x4e\x24\x1a\xa6\x95\xd5\x7c\xdb\x3e\x75\xcf\xfd\x12\x80\x7e\x37\x23\xc9\x21\x06\x01\xea\xc2\x7e\x20\x69\x20\x50\xa5\xc8\x07\x27\xee\x13\x84\x0e\xa9\x75\xad\x9f\xcd\x56\x68\xfa\x3a\x81\x48\x05\x27\x56\x92\x28\x2d\x75\x21\x72\x72\x9b\xcc\x7e\xb9\x5d\xc8\xd7\xe6\xf8\x7a\x49\xa7\x10\x29\xd9\xe0\x27\x10\xb8\xa2\x2a\xdf\xb7\x16\x4a\xb8\x83\x7d\x87\x3e\xea\x9d\xe0\x52\xa3\xf2\x7b\x9a\x8a\xdc\xcf\x0c\xac\x8f\x10\x31\xa9\xff\x01\x0d\xab\x7f\x9f\xc4\xbf\x15\xac\x5a\x53\x5f\xfa\x95\xe4\xaf\xeb\xf3\xa9\x2b\x43\x1c\xa0\xc2\xcf\x39\x73\x5a\x32\x56\x86\xce\x22\x42\x59\xb7\x4e\xa2\x6a\xfe\xc8\xa0\xb9\x74\x87\xc5\xfd\x36\x95\x9e\x70\x2a\x0d\x38\xd7\xc3\x53\x82\x6d\x95\xd9\x40\x9d\xcc\x8b\x0f\x33\x3b\x86\x8a\x14\x40\x5f\xa6\x1b\x5b\x4f\x9d\x9a\xd4\xe1\x29\xd8\x0f\x28\xea\x34\x68\xed\xac\x85\x0a\xc7\x6b\x6a\xd9\xd8\x4e\xaf\x8a\xe2\xf3\x50\xce\xcd\x2c\xc8\x50\xaa\xc2\x92\x47\x38\x5c\x1f\x81\x14\xcd\x03\x8e\xb5\xa4\xb7\x8e\xc4\x04\x62\xad\x94\xe5\x89\x4a\x64\x77\x21\x18\xb2\x92\x4e\x8b\xb5\x08\x13\xf1\x6d\xf2\xbd\x23\xef\x18\x33\xf9\x8e\xd7\xba\xac\xce\x39\x47\x04\x79\x14\xd8\xe1\xea\xfa\xea\x32\x84\x2a\xcc\xaf\xee\x2e\xff\x70\x79\x53\x49\xc4\x7e\x77\x3d\xab\x24\x53\xdf\xde\xdd\xd4\x72\xa8\x5f\x5f\x5f\xbf\xbb\x6c\x60\x1e\x2e\xef\xe6\xef\x2b\x85\xbf\xf9\x78\x33\xbb\x9b\x5f\x57\x9e\x7b\x3d\xbf\x9a\xdd\xfc\x5b\xf8\x97\xcb\x9b\x9b\xeb\x9b\xda\xf7\x3e\x5e\xf4\xa3\x27\x2a\xcd\x68\x77\xff\xf8\xe0\x6c\xc0\x89\xd9\xba\x8c\xab\x5a\xa0\x27\xac\xe2\x81\xc8\xb3\x43\xd3\xd1\xe6\x59\xc7\x21\x55\x3e\x2e\x0c\x53\xd5\x51\xb3\xee\xe9\xc5\x4b\x2b\x5d\x97\xf1\xd3\xb6\x3d\x73\xaa\x2d\x9f\x02\x09\xd8\x6b\x00\xba\xaf\xd4\x1c\xb7\xba\x80\x64\x34\xec\xda\x0c\x22\x58\x1b\xde\x29\xdd\x23\xe3\x67\xaf\xa9\xfd\xc6\xa1\x7a\x7a\x0e\xa6\x03\x54\x36\x4f\x45\x63\xd1\x57\xe9\xe0\x63\x36\x4b\x3c\x89\xad\xa1\x60\x7f\x0c\x0e\x6e\x68\x86\x99\x39\xc1\x74\xec\x52\x99\x6c\xcf\x37\xe9\xa7\x4d\x1b\x5b\x7f\xfa\x48\xb3\xee\x35\x8e\x8d\x11\xf5\x06\xae\xa3\x31\xf5\xbe\xe3\xfa\x7e\x6c\xbd\xe9\x23\xcd\x7a\x83\xd9\x77\x54\xbd\xc1\xe1\x5d\xb4\xf3\x9f\x8c\xd8\xc4\xc2\x62\xaa\xd5\x73\xc9\xd9\xee\x91\x40\xcc\x75\x58\x1d\xcd\x02\x78\xde\xeb\x65\xc6\x87\x07\x32\xa0\x36\x6e\xb9\xf2\x1a\x1d\xf8\x2d\xfc\x0a\x2d\x5c\xe5\x82\xdf\xc7\xea\x91\xc6\xa3\x8e\x0c\x65\x83\x76\xf3\x6a\x07\x99\x3d\xdc\x1e\x11\x20\x01\x6f\x3e\x89\x28\x35\x5f\x3c\xc0\xe4\x12\x22\xb4\x46\x1b\x2c\x50\x21\xad\x33\xc8\x00\x67\x8f\xf4\xa3\xb3\x90\x68\xcd\xb7\x29\x99\x9a\x51\x35\x35\x22\xce\x07\x68\xaa\xb3\xa1\x31\xb8\xae\x83\x81\xa5\x04\x8e\x32\x07\x30\xdd\x2a\x87\x3b\x13\x74\x48\x22\xc1\x99\x9c\x9b\x0b\x4f\x2e\xa2\x44\x8b\x40\xcd\xa9\xf5\xc4\xfe\x7c\x9a\xf6\x43\xc1\x8b\x56\xb7\xeb\x60\x7f\x38\x8f\x8a\x92\xa7\xec\x73\x29\xf2\x3d\x51\xe7\xa1\xaf\x12\xff\x12\x71\x89\x99\x22\x85\xd8\x65\x90\x8e\x1d\xa6\x38\x2c\xe4\x2f\x00\x94\xc0\x21\x78\xa1\xd9\x1f\x00\xf2\x60\x1f\xa6\x43\x78\xc7\x0b\x38\x8b\xff\x8c\xdf\x70\xbf\x4d\x17\xb2\xa2\x8e\x12\xbc\x55\x11\x4a\x99\x2e\xa4\x95\x27\x88\x55\xa4\xa7\x70\xe3\x9b\xaa\x7c\x73\x4e\xc2\xbe\x66\xb2\xab\xfb\x95\x52\xf7\xe7\x42\x9e\x83\x4f\xaa\x38\xe7\x65\xa1\xce\x01\x2e\x85\xe3\xaf\xcf\xad\xfe\xa7\x15\x50\xd5\xe7\xdb\xe4\x41\xc0\xff\x9b\x6e\x8b\x5d\xfa\x8f\x3a\xdb\xfe\x7a\xb6\x49\xf3\x33\xf3\xee\x59\xf8\xee\x99\x7d\xf7\xcc\xbe\x7b\x66\x5e\xc3\xff\x97\xed\x31\xbc\x23\x7e\xe5\xe6\x2c\x9b\x2c\x64\x22\xb5\xc8\x0b\xb0\x7e\x1e\xf3\xa4\xf0\x32\x34\x7b\xf6\xe2\xbf\xff\x9b\x4d\x73\xfe\x88\xa9\x8c\x6f\x78\xc1\x3f\xa0\x7f\xf1\x7f\xfe\xe7\x05\x04\x54\x31\xa9\x27\xe3\xf9\xe7\x52\x14\x0b\xa9\x85\x59\x84\xec\xff\x2c\x24\x44\x60\x77\xfb\x65\x81\x7e\x57\xf4\x41\xc6\x9a\xfd\x2b\x96\x39\x47\x1a\xc9\x58\x9b\x92\x3a\xd2\x09\x12\x9e\xb6\x48\x46\x77\xb8\xe8\x3f\xa7\x6f\xe8\xf9\x11\xcb\xfa\x73\x5a\x5d\xd5\x56\x08\x45\x7f\x4e\xe1\x00\x4d\x15\xb7\x60\x2d\xe6\x26\x2f\xdc\x93\xa9\x72\x6d\x6b\xa4\x01\x0d\x78\xd6\x30\x7d\xfb\x5a\xb9\x45\x2a\x6b\xeb\xb9\x6f\x6c\x23\x10\x2b\xf0\x71\x08\x88\x9e\x27\x66\x85\xdc\xa2\x27\x14\x2c\x37\x6c\x39\xd8\xa4\x14\x3a\x77\xe5\xa1\xe3\x42\xff\xfe\xd5\xf9\xf9\x84\x6d\x34\xfc\xcf\xea\x33\xfc\x0f\xa0\x87\x9e\x8a\x8d\xb5\xd1\x99\x0e\x08\xd7\x1c\xe5\xc3\x23\xf1\x14\x28\xba\x2f\x41\x00\x5e\x9b\xa6\xaf\x4b\x19\xa7\xc2\xa7\x40\x56\x42\x22\xa9\xb2\x92\xf5\xe8\x18\xab\x4b\xad\xc0\x18\xaf\x44\xc4\xcd\xc6\xd7\xf8\x36\x82\x4b\xd5\xba\x10\x12\xbd\x61\xb9\x57\x62\xe3\xe8\xb9\x02\xb3\x18\xa0\x90\xbc\x20\xc8\xb9\x80\x3f\xc2\x47\x80\x51\x7b\x52\xff\x89\xed\x55\x49\xe4\xd0\x40\x79\x1a\x8b\x28\x05\x06\x7e\x4b\xfb\xc2\x72\x51\x94\xb9\x64\x9c\x65\x5c\xc6\x5c\xc3\x0c\x5c\xe7\x10\xed\xcc\x19\x6f\x56\x74\x82\x70\x5c\x55\x16\x40\x66\x84\xc8\x82\xb0\x27\x90\xbd\x3b\xa8\xf3\x24\xa8\x04\x9e\x09\x40\x22\xdc\x78\x71\xba\x90\x56\x2b\x8c\xb0\x70\xe8\x29\x8b\x54\xb6\x27\xaa\x9a\x7a\xa7\x27\xd6\x73\x46\xdd\x3d\xf1\x78\x93\xfa\xb3\x13\x96\x54\x43\x6b\x40\x14\x5e\x04\x6a\xc7\x56\x2f\xfa\x3b\x21\x23\x15\x8b\x5c\xbf\x34\xcb\x30\x71\xf7\x0e\xb4\x1f\x12\xed\x07\x03\x76\x29\x73\xb8\x91\xb7\xd0\x14\xef\x14\x75\x4c\xef\x54\xa8\xa5\xdb\xec\x9c\xc3\x4b\xe5\x5b\x47\xc1\xb4\xd5\x97\xfe\xf3\x8b\x22\x62\x42\x5c\xa7\xbd\x73\x1e\xef\x82\xc0\x25\x1b\xee\xb8\x58\x28\xda\x38\x64\x9c\x58\x69\xd9\xa4\x00\xf5\xba\x5c\xe8\x62\x21\xe9\x04\x9e\xb0\xb5\xe0\xc6\xce\x9b\xb0\x48\x3f\xe0\x66\x8c\xc7\x7d\xf1\xa8\x3c\x06\xc7\xea\x92\x00\x18\xb6\x52\xb8\x77\x12\xe3\x63\x80\x28\xe0\x51\x81\x00\x83\x4e\x15\x72\x6b\xaa\x40\x67\xb5\x6e\x88\x47\xf4\x83\x95\xb9\xa8\x4b\x4a\x85\x2a\x2b\xd0\x13\x7b\x0c\x14\xb3\x7a\x3d\xf0\x07\xb3\xf1\x60\xeb\x10\x06\x12\x6c\x8e\x60\x71\x13\x96\x16\xd7\x99\x8f\xe1\x86\x5c\xe3\xe0\x9b\xe9\x5a\x54\x3d\x1d\x01\x15\x38\xce\x6f\x61\x5e\x3d\xe8\xb0\xd2\x22\xb7\x1a\x1c\xd8\x56\x64\x06\xdc\x26\x79\x7c\x96\xf1\xbc\xd8\xdb\xe9\x9b\x26\x2b\xa0\xee\x4f\x93\x7b\xc1\x66\x79\xae\x1e\x9f\xba\x17\x3a\xb7\x96\xae\x1b\xf6\x29\x48\xf6\xb1\xb7\xfc\x56\x5e\xd0\xba\xbb\xe3\x38\x0e\xd2\x2e\xc7\x47\xeb\x77\x72\x51\xe4\xfb\xa5\x99\x88\xbb\xac\x73\xa7\x18\x94\x34\x31\xdc\xc8\x1d\x47\x6f\x5a\x73\x61\x74\xd2\x9b\x56\x46\xf5\xdb\xa1\x37\x6d\x61\x2e\x6d\xd2\x9b\xce\xaf\xe6\x77\xf3\xd9\xbb\xf9\xff\xab\x95\xf8\xcb\x6c\x7e\x37\xbf\xfa\xc3\xf2\xed\xf5\xcd\xf2\xe6\xf2\xf6\xfa\xe3\xcd\xc5\x65\x3f\x5f\x51\xb3\xf6\xde\x04\x3f\x63\xe1\x77\x5e\xb1\xbb\x00\xa8\x81\xc9\x06\x64\x7f\x93\x76\x25\xcc\x2a\xb3\x98\x13\xb9\x99\xc0\x42\x7d\xc5\x2e\xf3\x7c\xbe\xe3\x1b\xf1\xa1\x4c\x53\x80\x53\x61\x66\xcf\x45\x2e\xe0\xe2\x39\x61\x1f\x54\x3c\x0f\xde\x83\x74\xc4\xd6\x66\xc0\xf7\x79\x1c\xe7\x42\x6b\xfc\xfc\x84\xbe\x1f\x80\x87\x5c\xaa\x23\x81\xe7\xf8\x03\x4f\x52\x73\x7f\x7b\xc5\x5e\xf3\xe8\x5e\xad\xd7\x98\x3e\x33\x71\x89\x53\xec\x73\xa9\x0a\xce\xc4\xaf\x11\x70\x74\xb5\xcf\x93\x77\x6a\xf3\x15\xa0\xca\x03\xc2\x53\x1d\x97\x14\xd0\x28\x5b\xb6\x1f\xe7\xed\x1b\x01\xb5\xf2\x3d\xbe\xfa\x16\xdf\x6c\x77\x50\x16\xe9\x13\xa4\xc7\xbf\x53\x9b\x76\xc5\x18\xb0\xae\x49\xe6\x86\x02\x09\x11\x91\x6d\xa8\x0d\xd3\x89\xbc\x5f\xc8\x5f\xb6\x42\x32\x55\xe6\xf8\x27\xb8\xe6\x1b\x33\x33\x2d\xf5\x56\x80\x84\xec\x84\x3d\x0a\xb6\xe3\x7b\x34\x9b\xe1\x4e\xe0\x64\x2e\x60\xca\xc0\x29\x62\xde\x4e\x13\x69\x76\x8b\x2c\xb1\x79\x09\xf5\xa1\x7f\x8a\x1b\x97\x65\xa8\xe3\xa7\x13\xc8\xf6\x9d\xa7\x15\x7c\x1e\xb8\xca\x3c\x6e\xd2\x02\x84\x68\xe7\x06\x15\x4d\xa5\xee\xcb\xcc\x73\x59\xbe\xb0\xc1\x49\xe8\xee\x07\x95\xc4\x2c\x2e\xb3\x34\x89\xdc\xbe\xfb\xa8\xf2\x4e\xc2\x5e\x4c\xa0\x19\x7e\xea\xd4\xd3\xc2\xfa\x1a\xd6\x92\x9d\x13\x20\xe9\x7a\xa8\x7b\x9f\x99\xbc\x98\x25\x32\x4a\x4b\xd0\x07\x2b\xb5\xc8\xcf\x8a\x3c\xd9\x6c\xc0\x00\xb7\xb9\x7e\xdf\x3e\xbb\xb1\x67\x4f\x3c\x3d\xad\x2d\x4c\x3a\x4f\xd5\x26\x89\x78\x1a\x82\x9b\x3d\x2a\xc2\xd1\xa7\xda\x65\x4f\xea\xa9\x90\x07\x61\x2b\xd4\xc9\x80\x94\xe5\x02\x18\x7c\x97\xb0\x95\x2f\x69\xbb\x3b\xa5\xde\x6b\x66\x2e\xe8\x58\xaf\x90\xdc\xd4\x86\x17\xec\x09\xe7\xbf\x6d\x25\xb4\xc0\xc4\x44\x79\x6d\xa6\x1e\xa5\xc8\xc1\x82\x05\xd8\x87\x69\xa9\x54\x60\x9b\x38\x59\x2d\x87\x4f\xb6\xb2\x72\x6b\x07\xc4\xc6\xcc\xd9\x4d\xf2\x20\xe4\x97\x67\xa3\x0e\x3e\x10\xf1\x68\x2b\x96\xd6\x2e\x7f\xea\x2d\xcb\x1d\x00\x23\x37\x2b\xab\x6f\x11\x6e\xa5\x2e\xbc\x09\x57\x27\xac\x71\x73\xef\xc2\x40\x62\x4f\x46\x96\xa9\xc4\x32\x16\xd1\xfd\x17\xdf\x9a\x3d\xc8\xca\x56\x84\x71\xf6\x46\x44\xf7\xec\xe3\xcd\x1c\xb3\x81\x93\x82\x99\xad\x40\x6f\xbd\x5e\x4f\xe7\xdd\xad\xe0\x9b\x67\x60\x74\x1a\x2a\x38\xe4\x39\xe6\x9d\xcc\x9a\xa9\x10\x01\xa2\x20\x5f\xd2\x6c\x92\x94\x4b\x03\x40\x30\x5e\x58\x19\x1a\x70\xc4\x33\xbd\x03\xd5\x99\xb2\x08\xa4\xda\x52\xbe\x12\x69\x07\xe3\x62\xa6\xe2\xa5\x8d\x93\x9c\x0a\xe6\x69\x94\x65\xfd\x18\x14\x75\xb4\x79\x0c\xdc\x58\xac\x77\xf4\x20\xbb\xff\x51\x07\xf4\x1a\x2a\x24\x7e\x86\x7b\x3d\xd7\x90\xde\xbd\x4e\x36\x36\xda\x96\xac\x49\x1b\x07\x13\xfa\x41\x05\xde\xec\x97\xa6\xa4\x0f\x2a\x26\x98\x9e\x23\x31\x33\x56\x90\x20\xef\x89\xc7\x55\x84\x55\x70\x4a\xf9\x1a\x7c\x03\xba\x10\x3c\x66\x6a\x4d\xde\xc4\x2c\x4b\x13\xa0\xf4\x8d\x91\x3d\x1c\xd8\x33\x74\x15\x1d\x1f\x96\x66\x2b\x1b\x90\x7c\x7c\xb0\x40\xbc\xde\x78\xa3\x0f\x72\x99\x76\x55\x9d\xdc\x75\x9b\xea\x54\x15\x38\x97\x8f\x74\xec\x15\xba\xdf\x9b\xb6\x49\xd5\x0a\x3a\xaa\x1b\x14\xd7\xb3\x41\x9b\xdd\x29\x4f\xe2\x31\xc7\xbb\xed\x93\x6b\xf7\x6a\x5f\x05\xaf\xad\xa7\xc3\x7d\xc9\x0e\x33\x23\xc2\xf5\x30\x82\x5f\x4b\x63\x3f\x74\xd7\x86\x00\xa1\x76\x11\x42\x67\x8d\x17\x24\x37\x00\xab\xc2\x6d\xc7\x1d\xd7\xea\x6a\x5b\x4e\x1a\xe8\x26\x31\xca\x81\xbe\xf4\x5c\x2a\xfd\x83\x7c\x02\xbb\x05\xae\x5c\x47\x71\x31\x86\x33\xda\x0e\x1d\x62\x7c\x4d\x7f\xfa\x41\xac\x24\x5f\x0c\x1a\xd1\x7a\xbf\xdb\x55\x7c\x4a\x97\x3f\xc7\x8a\x2a\x0b\xe5\x5d\xfe\xd0\x9e\x39\x90\x86\x86\x69\x5d\xb0\x6d\xcc\xe3\x0e\xb8\x80\xb5\xc1\xec\xd2\x1c\x01\x42\x1d\x05\x83\xcd\x72\x61\x83\x47\x7b\x51\xb8\xe4\xfe\xd4\xaa\x82\x41\x6c\xc4\xb5\xba\xca\x6e\x62\x09\x0c\x1c\x23\x15\x44\x32\xc8\xde\x8b\xd4\x2e\x53\x12\xb0\x29\x98\xaa\xb4\x90\x54\xb8\xd5\x76\x76\xe1\x95\x4a\xbe\xdb\x84\xbc\x5a\x98\x3d\x21\xb4\x4a\x1f\x28\x8e\x16\x48\x10\x80\x2a\x9c\xa9\xe0\x85\xb9\x20\x98\xeb\x30\x04\x78\x69\x7b\x07\x38\x78\x4d\xe0\x38\x17\x9b\x44\x17\x22\x4c\x11\x0c\xdf\x7f\x32\x2d\xca\xca\x0d\xba\xaf\xeb\x3b\xb5\x28\x0f\x99\xc2\x66\xd5\x8e\xa8\xcf\x3e\x13\xf1\xdc\xbd\xd7\x3f\x19\x6a\x59\xdc\x7e\x93\xa8\x9c\x02\x38\x07\xf0\x0a\xa0\x91\xef\x49\x3b\xf1\x00\x37\x48\xc4\xc4\xc3\x3d\xaa\xcd\x0c\xd1\xa6\xe4\x39\x97\x85\x10\x7a\x21\x29\xfa\x88\xbc\x65\x21\x35\x47\x0d\x0d\xe7\x0c\xdc\x48\xe9\x02\x69\x80\xe0\x95\x35\x4f\xd2\x32\xef\xbc\x73\xe2\xac\x3c\x8a\x7b\xa0\xaf\x97\x2e\xa0\x58\xd6\x36\x68\x2e\x8b\x35\x58\x45\x8e\x3a\xa3\x1e\x3b\xac\x26\x79\x76\x34\xc1\x6e\xb9\xc3\xc7\xdb\x39\x1c\x3b\x12\x5b\x7f\xd4\xcb\x4c\x8d\xd8\xf1\xfe\xf4\xa3\xfe\xa0\x3a\x52\x82\xf5\xe7\x86\x63\xac\x27\x86\xfe\xb9\x4b\x4e\x81\xeb\x7b\x08\x3f\x1d\xba\x8f\x0f\xa2\x64\x3c\x18\xa4\xea\xdc\xbb\x60\xd6\x6e\xb9\x8c\x53\x73\x4f\xe5\x45\xed\x04\xf2\x60\x5f\x63\x17\x17\x76\x73\xec\xce\xec\x82\x44\x89\x65\xd4\xc8\xb2\x3b\xd4\x4f\xb5\xf4\xbc\x5e\x40\x5d\xed\x2b\xd5\xa4\xb9\xb6\x64\x0d\x7f\xb2\x93\x88\xa9\x5b\xb0\xdd\x53\x70\x9d\x6c\xbe\x81\x4b\xd6\xfb\xe6\x4e\x19\xd1\x52\xa4\xf3\xcb\x21\xbf\x4f\x5c\x8c\x90\x64\x63\x36\xb3\x90\x9c\x78\x21\x49\xe3\x18\x23\xaf\x10\x72\x43\x2e\x2a\xcd\xbe\x77\x99\x97\xdf\xff\x93\x65\x22\xda\xb3\x35\xf4\x35\xd0\x7d\xa9\x28\x2a\x73\x08\x8b\x92\xeb\x86\x09\x3c\x9b\xf4\x28\x92\x0d\x38\x91\x1d\x98\x05\xcd\xa7\x36\xeb\xc1\xf9\xea\x2a\x8d\xba\x03\x17\x0d\xaa\x35\xbb\xb3\x90\x44\x78\x72\x5d\x30\x5d\x88\xac\x75\x57\xaa\x18\x5d\x55\x41\xf2\x13\xcc\x2e\x2f\x87\x3e\xd0\xd6\x1d\xb1\x47\xcf\x82\xeb\xf4\x1f\x6f\xaf\xaf\x58\xc6\xf7\x80\x0b\x2b\x14\x29\xc9\x03\x19\x63\x7d\xfd\x1e\x1a\x81\x6a\xe3\xab\x8b\x0d\xfb\xd4\x02\x4c\xdb\x7d\xb7\xf4\xc5\xa6\x0d\x05\x73\x86\xa6\xa4\x59\xca\xb9\x4a\xcf\xb2\x94\xcb\x00\xfa\xab\xa7\xac\xf6\xf9\x30\xd6\xeb\xa2\x3e\x84\xa6\x81\x0a\x80\x3b\x85\xe6\x42\x5e\xb6\x82\x43\xab\x1a\xeb\x27\x85\x77\x3b\xf7\x88\x5e\xd0\xdb\x7b\x94\x36\xe0\x91\x59\x26\xc8\x2c\x60\x43\xd6\x0e\xf5\xc0\x35\x00\x12\x47\x0c\x54\xbf\x20\xfc\x42\x5a\xbd\x5f\xf5\xa8\x59\x8c\xdc\x0b\x65\xa2\xb7\xe0\x9f\xc4\x80\x00\x80\x83\x68\x7f\x41\xe4\x42\xce\xa5\x36\x03\x0a\x3e\x4d\xf1\x20\xc8\xb1\x51\x09\xc6\xcd\xdf\xbc\x73\xf1\x7d\x1c\x24\x92\x64\xeb\xe8\xfa\xc0\x30\x3b\xe5\x02\xd3\xaa\x50\x7e\x98\xd8\xff\x3d\xcf\xfa\xb2\xc6\x4e\x2e\xf1\xd0\x28\x39\xe6\x99\xba\xd5\x09\x5a\xad\xa0\xd2\x54\x49\x1d\x0b\x7b\xef\xa3\x3c\x71\xfb\x69\x25\x7f\x3e\x2c\x2a\x30\xf8\x12\x36\x2c\x13\x70\xc4\xde\x13\x90\xc0\x39\x6c\x8d\xb3\x97\xcd\x2a\x07\x0d\x1c\x60\xaf\x42\x4f\xda\x94\xdd\x0a\xc1\x3e\x41\x4f\x99\x8f\x7d\x22\x8d\x35\x80\x0b\x16\x3c\x69\x95\xc0\x81\xa7\xe7\x72\xad\x4e\xdb\x0c\xf2\x4d\x03\x8e\x76\x52\xaf\xb4\xd7\xf3\x54\xc0\x1b\xa4\x32\xca\xe7\xcd\xbf\x6f\x6d\xd7\x01\x78\xdb\x07\x7f\x27\xa7\xac\x3c\x5b\x53\x73\x3e\xc3\x10\x1f\xc3\xf0\x54\x9b\x24\xa6\x95\x13\x64\x2d\xbe\x97\xea\x51\xa2\x2d\x40\x5f\x62\xdf\x99\xf5\x07\x07\x18\x3a\x50\xd1\x2c\x28\x71\x37\x7c\x09\x34\xca\x33\xf7\x6f\x76\x8b\xb1\x22\xac\x33\x88\xa3\x68\x30\x7e\x48\xd6\x04\x76\xf3\xef\x66\x13\xf6\x7a\xc2\x2e\x26\x6c\x3a\x9d\xbe\x9c\xa0\x72\x33\xd5\x08\x5f\x41\xe4\x58\xc1\x37\xa6\x6c\x92\x8b\x58\x07\x1f\x00\x01\x24\x73\x58\x59\xb6\x30\xee\x9f\x0a\x3c\x0f\xb6\x09\x98\xc3\x48\x09\x17\x14\x57\x8f\xb6\x2a\xf1\x95\x02\x88\xa6\x88\x54\x6e\x41\x9e\xba\x50\xb9\x05\xac\x3d\xf0\x9c\x27\x12\x52\xbb\x79\x13\xae\x4b\x5f\x0e\xc8\x9d\xc5\xaf\x7c\x07\xed\x4f\xa4\xe3\xb7\x34\xdd\x74\xe7\xea\x5f\xec\x33\x72\x48\x3f\xe6\x49\x51\x98\xd3\x59\x2f\xe4\x2d\x7b\xf5\xaf\x6c\x96\x65\xa9\x60\x33\xf6\x57\xf6\x9a\x4b\x2e\x39\x7b\xcd\xfe\xca\x2e\xb8\x2c\x78\xaa\xca\x4c\xb0\x0b\xf6\x57\xd3\x6d\xa6\xbc\x2b\x65\x8e\xc3\xfd\x84\x71\x26\xcb\x14\x4f\xfd\xef\x2c\x18\xec\xa5\x6b\x17\xf7\xa3\xb3\x12\xc5\xa3\x10\x92\x69\xb5\xa3\xa3\xf0\x2f\x2e\x26\xa1\x13\xb9\x49\x45\x41\xf3\xa1\x0a\xdb\xc3\x0f\x9c\x41\x4b\x5f\x2d\xa4\xf3\xe5\xfd\xc5\xd4\xf8\x2f\xec\xaf\xec\xaa\x4c\x53\x53\x25\xb3\xd1\x98\x89\xf4\x8a\xd9\x34\x0a\x21\xa7\x8f\xc9\x7d\x92\x89\x38\xe1\x90\x48\x61\xfe\x75\x7e\x07\xa3\xbd\x2c\x3d\x67\x5e\xb8\xa6\x9d\xe0\xcc\x29\x5b\xcf\xb3\x24\x65\x3b\x39\x24\x3b\xf8\x3d\x37\xbf\xea\xab\xe3\x2d\x22\xcf\x14\x4a\xeb\x81\x0c\x56\x14\x0b\x0a\x65\x97\x8e\xda\x02\x6a\x87\xad\x2d\xab\xe5\x28\x08\x0f\xf5\x53\x37\x59\xd0\x10\x7b\xf2\x3b\xe4\x00\xed\xa2\xa1\x5b\x6e\x43\x79\xa5\x92\xe6\x0e\xb6\xa4\xa7\xfa\x19\x14\x15\x72\x8a\x2b\x3f\x57\x45\xd4\x2a\x5d\xac\x92\x41\x6a\x73\xb5\xca\x7e\x24\xdf\x05\x26\xa8\x99\x65\x9a\xa4\xe7\x66\xa9\x9e\x5f\x29\x69\xae\xad\x3a\xd9\x20\x3d\x11\xc0\x88\x50\xa6\xcd\x1a\x05\x77\x55\x93\x35\x58\x02\x60\x1f\x98\x2a\x21\xb4\xad\x30\xbb\x80\x19\x82\x74\xbf\x90\xe6\x0d\x3a\x91\x00\xe6\x9e\x38\x16\x5b\xfc\x9a\xd5\xb5\xa7\x6f\xd1\x86\x1c\x14\xde\x32\xc1\xfa\x72\x68\x4f\x98\x70\x94\xb2\x75\x82\x57\xfc\x2a\x60\x70\xa3\xd2\x2c\xbd\x07\xc6\x3d\x57\x22\x55\x72\x63\x66\x45\xd7\x26\xa0\x76\x3c\x39\x05\x58\x12\x56\x01\x0b\xeb\xac\x81\x39\x2c\xe9\x11\x1a\x12\x73\x4e\x26\xb1\xbf\xdf\xeb\x72\x65\xec\x08\xe7\x91\x75\xa7\x21\x35\xae\x2b\xa1\xf8\xb4\xf8\xf2\x47\x2d\x72\xa0\x59\x46\x84\x83\xf3\xf6\xe3\xc1\xe9\xc9\x36\xb0\x45\xc3\x16\x55\x2f\x30\xb6\xdd\x15\x42\xd1\x84\x46\x6a\xf5\x80\xf9\xf8\x35\x31\xb2\x43\x90\xb3\x6f\x67\xf3\x77\xb5\xe7\x9a\xc8\xd9\x16\x78\xed\xdd\xfc\xfd\xe5\x9b\xe5\xf5\xc7\xbb\xc6\x73\xa6\x34\xfa\xd3\x58\xa5\x7f\xdb\x7b\x4f\x01\x1f\xfc\x8c\x72\x2f\x4b\xb5\xb6\x99\x94\xc3\xcf\xf4\x86\xe0\xce\x30\x94\x4a\x48\xb2\x1d\x0a\xd3\x34\x27\x4e\x67\x3e\xb8\x5c\x52\x44\x62\x58\x65\xeb\x1d\x76\x2d\xdf\xe2\xeb\x1f\x54\x9a\x44\xfd\xa0\x37\x7b\x5c\x6d\xd5\x63\x0b\x8a\x68\x25\x00\x05\x4a\xfe\x1f\xaa\x14\x5a\xe8\x85\x88\x0a\x1f\x71\x6b\x36\xee\x7f\x35\xd0\xe6\xf0\x1d\x1c\x3d\xca\xae\xdb\x40\x80\xd3\xc5\xf0\xe0\x6c\x05\x82\x4d\xe0\x95\x47\x5f\x2b\xe4\xd2\x41\x6c\x3b\xe2\xe4\x82\xae\xf4\x3c\x6c\xd0\x8f\x5b\x95\x9a\xbb\x98\x8c\x89\xac\x74\x21\x33\x91\x47\x0a\x00\x2a\x98\x07\xaf\x58\xb4\x4d\xd2\xd8\x8b\xb7\x7c\x07\x88\x5e\xc0\xdd\xbd\x24\x59\x3e\xe1\x62\xcc\xb6\xf8\x9e\x53\xd7\x4e\x3b\xab\x57\x7e\x9a\x07\xea\xe9\x20\x7a\x7d\xd3\xfe\x17\x82\x92\x61\x57\x10\xbd\x50\x2d\x5a\x68\x3a\xbd\x52\x9f\x51\x1e\x5e\x50\x14\x5f\x5b\xf1\x4f\x7b\x71\x2a\x6a\xe3\x4a\xd3\xac\xde\x95\x40\x3a\x8b\x28\x2a\x04\x90\x68\x01\xd5\xd9\x09\x8e\xb6\x98\xa7\x80\xa4\x41\x5d\x48\x1f\x1f\x7d\xa1\x43\xbb\xac\x75\x9c\x91\x53\xd5\x82\x00\x27\xec\x45\xa5\xa1\x2f\x80\x94\x54\x2a\xf8\x1e\xc5\xb0\x2a\x5d\x03\xd3\x75\xc2\x92\x62\x21\x13\x8d\x33\x33\x17\xa9\x78\x30\xb5\x0b\x9d\xc5\x84\x75\xb1\x77\x67\xdb\x6c\xc0\x91\x73\x9b\x7e\xec\x64\xee\x61\x11\xe6\x21\xb9\x25\x07\xc7\x74\x2c\xb4\xb1\x1b\x41\x96\x43\xfc\x6a\x16\x40\x02\xb1\x10\x84\x7f\xc4\x42\xda\xfa\x01\x2a\x04\xb5\x6c\x17\x72\xbe\x86\x1c\x50\xc8\x3c\x8d\x63\xbc\x85\x5a\xa1\x06\xc7\x34\x96\x90\x73\x58\xd1\x9d\xdc\x0e\x04\xa9\x4a\xe2\x4a\x12\x0f\x22\xdf\x17\xe0\xd4\x85\x7e\x95\x82\x17\x5b\x96\x14\x13\xa0\x88\xb3\x3b\xe5\x42\xf2\x98\x94\xca\xa9\x38\xd3\x35\x30\xef\x7b\xc6\x99\x7e\x5f\xa9\x87\x3e\xc3\xf6\x54\xd4\x17\xae\xea\x2c\xe5\x72\x89\x27\xc8\x57\xc0\x7d\x05\x82\x9f\x5d\xa1\xce\x72\xb5\x74\xb4\x36\x4f\x52\xcf\x40\x13\x3a\x94\xe1\x35\x76\xac\xfd\xd0\x04\x27\x83\xa7\xb5\xb6\xd7\x13\xe7\xa7\x21\x74\x41\xce\x6c\x04\x76\xf8\x2e\xe0\x21\x61\xbc\x86\x44\xb0\xb3\xf5\x10\x26\xcc\xce\x80\x6f\x15\x9f\x34\x64\xe4\x6b\x67\x48\x7d\xd8\xc7\x43\x63\x1a\x16\xe2\x51\xf0\x98\x03\xd5\x7a\x5e\x88\x4c\xa7\x1f\xa5\x09\x95\xb1\xad\x0d\xc2\x7d\x98\x3c\x21\xd0\x0f\xe7\xdc\x3c\xed\x82\xae\xe1\x3d\x4c\xb5\x60\x2b\x9f\xd2\x47\x0d\xfb\xd4\x50\x4f\x89\xcf\xbd\x86\x7a\x4d\xd9\x5c\x32\x6b\xee\x4d\xd8\x0b\x9c\x58\xfa\x05\xb9\x20\x49\x15\x98\x62\xe7\x31\xad\x1e\xca\x56\xad\x43\x31\x30\x67\xc0\x2f\x37\x8c\x04\xf5\x52\x1b\x3e\x6b\xbf\xbc\x4e\x20\x67\xe1\x98\xb4\x74\x8c\x22\xae\xb0\x00\x3a\x24\xf1\xda\xbd\x47\xa3\x5d\x79\x6f\xb6\x6f\xb0\x8d\x77\xb1\xd7\xf6\x45\xd3\x45\x59\x49\xe7\xa9\xfd\x9d\xa9\x7c\x21\x6d\x69\xe4\x92\xd4\xa8\xa5\x54\x2f\x2a\x80\x50\x93\xcd\x1f\xcc\x54\x00\x31\x58\xf9\x2c\x50\x65\xf3\xfc\xab\xf5\x5d\x00\x40\x11\x2b\xe1\xf5\xcc\xa7\x6c\xe6\xbf\x66\x0c\x0f\x33\xc1\x77\x78\xcc\xd7\x39\x1a\xd3\xd4\x74\x4a\x52\x58\x4a\xc8\x20\xbd\x41\x97\x40\x6c\xba\x2e\xcd\x66\x14\xb0\xbf\x2e\xa4\xe9\x3c\xb6\x4e\x00\xf7\x4b\xfd\xb2\x90\xef\x95\xb6\xd9\xf4\xda\xf7\x87\xc5\x90\x52\xb7\xbd\x70\x2a\x62\xf4\x87\x37\x70\x68\x93\xcf\xbf\x26\xf1\x0f\x79\x2d\x44\x89\xb1\x57\x65\xee\x1b\x15\x71\xb9\x90\xff\x69\xba\x07\x95\xac\x9d\x0c\xbc\x5a\xe3\x12\x86\x11\x84\x60\xc9\x27\x2c\xf4\xbb\x7f\x7a\xf9\xe9\x25\xe2\xd0\x4b\x0d\xc2\x8d\x93\xea\x01\xe2\x88\xc0\xcb\x34\x85\x48\xb4\x6d\x81\x23\xa3\xf0\x9f\xe0\x7d\xb0\x1c\xba\xd4\x2d\x65\xd5\xc4\x18\xb2\xd0\xfb\x66\xb0\x77\x3e\xcf\x58\xc4\x8b\x68\x7b\x66\x6d\x39\xda\xc6\xec\xe9\x47\xc3\x87\x0a\x6e\xc6\xd2\x6a\xe7\xc2\x36\x17\xce\x7c\xe7\xd8\xf9\x2a\xf3\xc5\x34\x01\x80\x35\x77\x75\x61\x18\x47\x1e\x8a\x93\xd3\x0b\xb1\x7b\x3b\xcf\x3d\x6e\x65\xd9\xfc\x8d\x93\xbc\xe4\x92\xef\x44\xcc\x5e\x40\xc6\xd4\x0b\x3b\xf8\x0b\x99\xad\xa6\xe9\x7e\x5d\x10\xc5\x93\xe9\x94\x29\x08\x18\x1d\x38\xe5\x96\x71\xf3\x9a\x74\xa0\xb3\x3b\x2f\x5a\xed\xb6\x8e\xeb\x1b\xf7\xa5\xe1\x06\x0b\xfa\xb8\x5c\xef\xdc\x56\x21\x42\x55\x26\x75\xae\xef\x27\x6c\x95\x73\x09\xda\x13\x71\x68\x54\xf9\xd5\x09\x97\x67\xe4\x4f\xb2\x29\x14\x92\xa7\x7b\xc0\x8e\x4f\x16\x12\xc9\xa6\x80\x95\x78\x1f\xa5\x49\xc4\x36\x39\xcf\xb6\x35\x3b\x48\x3c\x08\x59\x80\x84\xe9\x8d\xe0\xfa\xb4\x68\x7d\x5e\x2f\x81\x0d\x8e\xa7\xcc\x24\xdc\x3e\xb8\xac\xd1\x83\x42\xf5\x3a\x8e\x16\x80\x6b\x89\x78\x39\x8e\x1a\xe4\x20\x81\x65\x85\x16\x8d\x38\x7a\x20\x02\x69\x1a\xc7\xec\x57\x0f\x85\xbf\xb1\x5f\x89\xb5\xc2\x82\xff\x4f\x0d\xd9\x3b\x16\x8c\x93\xb8\x0c\xe7\x55\x2b\x92\x7b\x7a\x0f\xef\xb9\xc6\x04\x20\xf2\x54\x58\xb0\xb0\xdb\x38\x26\x24\x31\x07\x3c\x67\xec\xcf\xe5\x4a\xa5\x96\x28\x6e\xfe\x86\xa9\x1c\x34\x1a\x0a\x45\x7f\x4a\xe2\x2e\xeb\x20\x91\xb1\xf8\xf5\x24\xb6\x86\xfe\x83\xde\x9a\xcd\xe6\x33\x81\x14\x40\xbd\xb1\xb0\x3b\xe5\xc2\x1c\xc2\x85\xbd\x19\x37\x9e\xd2\x75\xe4\xe2\x2c\x2d\xb6\x00\x27\x44\x20\xbb\xef\xd4\x1d\xdf\xb3\x68\xcb\xe5\x26\x70\x4d\x00\xba\x4b\x64\x2a\x47\x2d\xc3\x07\xa0\x45\x53\xb9\xcd\x86\xa5\x1c\x4f\x42\xd3\xbb\x40\x02\x82\x58\x95\x4d\xe4\xe4\x9b\x4d\x2e\x36\x40\x50\xb0\x90\x95\x2c\x75\xa0\x84\xb3\x32\x0a\xf8\x9d\xbe\x24\xdf\xa7\x61\xca\xe8\xba\x0d\x16\xf9\xde\xa5\x48\x92\x10\xa8\x5f\xcf\xf5\x6e\x9d\xb0\x44\x4c\x27\xec\x07\x0f\xdc\x15\x91\x92\x2e\xc7\xb2\x23\xc1\xae\xe6\xf2\x67\x07\xae\x0e\x4d\x4a\x8d\xf6\xba\xc3\x6f\x0d\x39\xd1\xd6\x49\xd3\x9b\xa4\x5a\xf0\xa2\x1c\x71\x06\x91\x64\xf4\x85\x79\xf9\x16\xdf\xed\xc5\xb6\xf3\xcc\x1c\x1b\x96\xce\xc8\x3c\x6f\x4e\x4e\xf3\x6d\x4f\x77\xdc\xd6\xd7\x07\x1d\xc8\xa9\xea\x76\x20\x3f\x85\xa9\x6e\x39\x2b\x0e\xfb\x90\xd3\x0e\x1e\x86\x9e\x36\x8d\x75\x11\x5b\x90\x2f\xc1\xf7\x75\xfd\x1a\xdb\xb2\x03\x64\xb9\x8a\xcb\x48\xc4\x66\xe5\xc2\x7d\x08\x11\x31\x8e\x0e\xa2\xb2\x49\xb6\x1d\xb4\x15\x4e\x1b\x38\x75\xbf\x94\xcf\x61\x10\x8d\xb0\xeb\xfe\x8f\x1d\xfe\x06\x6b\xf1\xb5\x75\x7a\xb8\x3e\xb1\x9f\xf2\x91\xe7\x94\xfb\x7c\x95\xfc\x57\xe5\xc9\x26\x91\xbc\x50\x39\xfb\xce\x25\x7d\xbe\x74\x8a\x41\xdd\x16\xc2\xc8\x6d\xa2\xd2\x45\xb8\x4d\x7c\x51\xc3\xa3\x6d\x92\x9a\xa7\x74\xc1\x77\x59\x48\xa7\xe9\xf4\x98\xa9\x67\x52\xec\x04\x67\x9b\x80\xef\x34\xd1\x3e\xb7\x6d\x21\x29\xe2\x80\xe3\xa6\xf2\x90\x0f\xba\xf3\x6c\xce\xca\x62\x79\x24\x45\x0c\xbe\x3c\xce\xf1\x44\x30\x84\xf7\x3c\xeb\x27\xdd\xe0\xe4\x72\xc0\xe4\x1e\x27\x52\x6d\x2d\x95\xea\xfc\xec\x57\x5c\x18\x49\x02\x5a\x0f\x9d\xdf\xbc\xb3\x81\x22\x7f\x1f\xac\x5c\xb0\x60\x20\x90\x7d\x50\x83\x55\x81\x57\x7b\xb7\xad\x99\x53\xdc\x32\x75\x5c\xa4\xaa\x8c\x19\x6d\x6a\x14\x86\xcf\xa7\x78\x3a\x02\x1d\xe8\x74\xda\xc5\x8d\x36\x52\x09\xd6\xed\x3f\xf0\x5e\xfb\x0a\x84\xdf\x3a\x76\xe0\xde\xa5\x4f\x3d\xfb\x6c\x43\x4f\x3d\x0d\x63\xef\xb6\xe3\x51\x63\xef\xbc\xe0\xc0\x4d\x36\xce\x41\x0a\xf7\xd1\x24\x4e\x61\xbd\x85\x01\x84\x16\xf6\xd4\x4a\x60\x56\xdf\x9f\xfc\x39\x9b\xc1\xdc\xff\xa9\x8c\xe7\x42\x16\x4b\xf8\xe2\xb8\x8f\xc1\x47\x3e\xc0\xeb\x15\x83\x69\x90\x23\xf8\xdf\xef\x14\xfa\xf7\x2d\x11\xc9\x7f\xb0\x5b\xf2\x69\x99\xfd\x2a\x01\x10\xa9\xbe\x67\xdf\x25\x80\x39\x0a\x62\xa1\x6e\xe0\x3a\x86\x8b\x1a\x74\x44\xef\x05\x0d\xaa\x6c\xed\x83\x1a\xe4\x6b\x0f\xa1\x6a\x28\x85\xdc\x7b\x94\x39\x6b\xb6\x5a\xfb\xb7\x80\x9c\xfc\xaa\xf2\x6f\x20\x92\x34\xe3\x97\xb2\xff\x12\xb9\xf2\xe9\x20\xe8\xac\x0a\x0b\xee\xb5\xd7\x8f\xd7\x55\x45\x7b\x1c\x15\x3d\x43\x49\x3b\xf8\x0b\x71\xbd\xa0\x47\x61\xb5\xb7\xd7\x91\x2e\x9a\x7a\x11\x2d\x3b\xf4\x0b\x06\x55\x25\xb8\x78\x86\x7a\x04\x49\xed\x30\xb3\x0b\xf4\x1c\xfc\x15\xc4\xa6\xb8\xe3\x19\xe1\xfb\x08\x4a\x5c\x0f\xde\x4c\xa1\x11\xff\xfe\x97\xff\x98\x76\x29\x66\x43\xd5\xc7\xc2\xa5\x5c\xe5\xdf\xe6\x89\x90\x31\x04\x63\x79\xdc\x94\xd6\x91\x15\xef\x7c\x65\x7b\x36\xd3\xf0\x49\xb2\x26\xdb\x8f\x5a\xbd\xc4\x49\xf4\x05\x22\xfa\x7e\x93\x75\xcb\xb7\x12\xef\xeb\x32\x25\xf4\x32\xde\x4b\xbe\x6b\x6a\x8c\x3f\x6b\x1d\xf7\x89\x48\x63\xa8\x22\x7d\xfd\x50\x54\x2a\x16\xd1\xfd\x58\x9b\xe0\x68\x62\x70\x11\xdd\xb3\x9f\xee\xde\xbf\x43\x1d\xc8\x44\x2f\xe4\x15\x2f\x92\x07\xf1\x31\x4f\x5d\x38\x80\x98\x5e\xf2\xd4\xae\x91\x2a\x51\x6d\x40\x8a\x62\x59\x6d\xad\xe1\x10\xf2\x88\xef\xf6\x67\xab\x32\xba\x17\xc5\x79\xce\x65\xac\x76\xd8\x8c\x73\x5d\xae\xd7\xc9\xaf\xd3\x82\xe7\x1d\xa4\xe2\xe8\x47\xf8\x8a\x76\xae\x97\x8a\x29\xbc\xcd\x8b\xa6\xee\x23\x64\x7d\x92\x00\x71\xc5\xb8\x85\x2b\x70\xce\x77\x02\x58\xe1\x58\x95\x90\x1f\x4a\xc1\x44\x4a\xd0\xad\xd3\x9a\x10\xf4\x8a\x54\x71\x3f\x05\xc6\xfd\xa7\xa0\x56\x55\x65\x66\x5b\x29\xaf\x05\xb7\xe3\xf7\x78\x3f\xdc\xe4\x42\xeb\x09\xd3\x0a\x6a\xbc\x90\x16\x8b\x6e\xf3\xa5\x00\xf7\x02\xbc\x92\xe9\x9e\x45\x2a\x4b\x40\x3a\xcf\xb5\x6b\xab\x1e\xc1\x4f\x1f\xa6\x0d\x82\xda\x69\x29\x8b\x24\x65\x7c\x5d\x90\x13\x1f\x48\xb4\xad\x68\x8e\x9e\x2e\x24\x84\x62\x23\x68\x3e\x40\x24\x5c\xf8\xc5\x35\x42\xb3\x35\x8f\x92\x34\x29\x88\xda\x07\x92\x8c\xb8\x69\xaf\x39\x0f\x4c\x5f\xe6\x7c\xcf\x53\x7f\xb1\xe2\x69\xe9\x33\x25\xcf\xb4\xa8\x53\xc7\x75\x3b\x3e\xfb\x4e\xdd\x13\x2e\xbc\xa7\x1c\x3e\xcd\x2b\xad\x53\x72\xf5\xe7\x78\x12\x5b\xfc\x6d\xc5\xd4\xf5\x8c\xbe\xee\xf8\x81\x98\x44\xc7\xa5\x7a\x6a\xf5\x77\x9a\x5f\x18\xd1\x7b\xed\x46\xd8\x17\x72\x17\x74\x71\x0b\x0f\xa9\xbe\xf5\x76\x7f\x50\x2a\x3d\xd5\xe3\xcd\x53\xbb\xa1\x2e\x41\x92\xf2\x94\xeb\x1a\x4e\x00\xe7\x38\x9a\xbf\x71\x31\x6d\x47\xd6\x5b\x15\xb2\x21\xb8\x15\x55\x01\x36\x0a\xa8\x44\x0f\x12\x5b\x67\x2d\xa0\x86\x91\x88\x72\x28\x03\xd1\x50\xd6\x74\x6e\xba\xe0\x03\x8e\x00\xee\xeb\x08\x84\x86\xb5\x1a\x8e\x72\x86\xa1\x80\x64\xed\x53\xce\x31\x16\x12\x9f\xba\x7e\x0c\xbe\x6d\xfb\x13\x65\xab\xcd\xf9\x44\x56\xf2\x42\x06\x16\x31\xb2\x15\x59\xc8\xbe\xeb\xb5\x36\x7f\x59\x65\x1a\x9e\xec\x2f\x3b\x85\xdd\xba\x37\xa0\xf2\x26\xd4\xa9\x02\xac\x45\xa4\x76\xab\x44\xda\x14\x70\x72\x22\x83\x29\x3f\xb3\xe4\x81\xce\xe1\x6f\x4d\x72\x54\x2f\xa8\xf5\xbd\x33\x23\x42\x1e\xc6\x70\xcb\x3a\x74\xdd\x0d\xef\x4f\x4f\x4b\xc4\xdd\x11\xc9\xab\xb7\x20\xd1\x8c\xa7\x8f\x7c\xaf\x41\xcb\x55\x98\x5d\x71\x8d\x8e\xd3\x6a\xfd\x27\xc1\xf1\x6e\x89\x29\x49\x18\xbd\x24\x89\x67\x6a\x4b\x82\xbc\x18\x22\xb5\xaa\xb5\x9e\x6f\xe8\x85\x6e\xef\x9c\xaf\x13\x0b\xc9\x7b\x63\x21\x18\xe4\xfd\xdb\x08\x7f\xf4\x38\x59\x4f\xf4\xf5\x06\xc7\x24\x5a\x64\x04\xc3\x81\xc4\x28\x17\x02\x9e\xb0\x1d\x4f\x24\x2d\x03\x54\x06\x8b\xc5\xaa\xdc\x6c\x3a\x5d\x90\xdf\x7e\x2c\xa3\xba\x4e\xfe\xee\x7d\xcd\xbd\x8c\x59\x4f\xe1\x8d\x9d\xdb\x2f\xa1\x7b\xd8\xdc\xab\xbe\x8c\x03\xf6\x2b\x7a\xbb\x5b\x43\x4e\x8d\x49\xf4\x34\xde\xee\xf9\x10\x6f\xb7\xc5\x4e\x41\x0a\x1b\x5d\x57\x2d\xbe\xe5\x37\x37\xf8\x97\x71\x83\x0f\x9a\x14\x48\x9b\xb2\x4c\xaa\x06\x7a\x4f\x0d\x8f\x64\x5f\x73\x34\x9d\x50\x2b\x52\x59\xd7\x42\xc6\x9a\xad\x78\xf4\x0c\x74\x6c\x70\x3a\x9e\xee\x6f\x3b\x00\x2e\xb9\x55\x3b\xc1\xe0\x53\x1a\x35\x25\x18\x65\x09\x4e\x00\x0d\x6a\x1a\xe8\x11\x19\x84\xf7\x80\xe3\x14\x91\x21\xb1\x37\xaa\xbf\x93\xe2\x91\x99\xd3\x6a\x12\xc2\xe3\x82\xe1\x01\xb1\xa1\x97\xc6\x3a\xac\x60\xe9\x1d\x25\x42\x2e\x36\x3c\x8f\x21\x83\x83\x96\x64\xca\xa3\x7b\xf3\xdf\x50\x3f\xfa\x22\x41\xf8\x2c\xef\x39\xc2\x4a\x7d\x69\x89\x8c\x72\x20\xbb\x22\xb4\xa0\xaf\x1f\xbe\xae\x19\x8f\x72\xa5\xd1\x29\xe3\x34\x3a\x21\x83\x18\x0c\xd8\x87\x24\x2e\x79\x8a\x5f\xec\xf4\x64\x8f\x85\x87\xd5\x01\x3d\x81\x9c\x4e\x13\x2d\x46\xc3\x81\x1c\x40\xd0\x8d\xd3\x85\x7c\xe3\x02\x12\xaf\xd8\x47\x2d\x08\xc5\xa5\x2d\x21\x71\x6f\x4d\x9f\xcd\x7c\x68\x60\xee\x3a\x6d\x88\x9e\x0e\xb0\x20\xe6\xa0\x23\x74\x77\x4f\x1c\x20\xf5\x3b\x65\x50\x46\x93\x93\xce\x03\x4d\x5f\xdf\x2d\x78\x4f\xc8\x05\x8f\xf7\x21\xf5\x59\x22\x19\x44\xc1\x18\x8f\x77\x89\x34\x8b\xc0\xea\xc6\xb9\x93\xc6\x52\x48\x23\xa4\x17\xe4\x55\xd2\xb4\xb6\x09\x6a\x26\x85\x31\x2e\x79\x9e\xa4\x7b\xb8\x4f\x64\xb9\x38\x0b\xbe\x13\x8c\x0f\x65\x14\x01\x19\x36\xd1\x74\x94\x5a\xac\xcb\x14\x6f\x1d\x70\x2f\x77\x0d\xa0\x1d\xe9\xe3\x7c\x62\x0c\x8e\x82\x44\x0d\x82\x0f\xa3\x54\xd8\x53\x64\x67\x34\xa2\x81\xe3\x22\x5a\x9e\x9a\x2f\x07\x10\xf9\x56\x3d\xda\x54\xb2\x47\xee\xb1\xc2\x5d\xa7\xeb\x93\x45\x31\xfa\xed\x50\x7b\x03\xb4\xfb\x14\x76\x7e\x5c\x09\x5d\xd1\x6f\x22\x76\x7b\x53\x22\xa1\x39\xa4\xb6\xe9\x3d\xc3\xa5\xc6\x8c\x34\x33\x96\x70\x7e\x59\x47\x47\xd5\x31\xcc\x5c\xeb\x12\xad\x24\x5b\x94\xbf\xfb\xdd\xef\x05\xfb\x1d\xa4\xe8\xd1\x7d\x04\xe3\x4f\x40\xce\x87\xa5\xc3\x96\xed\x3e\x20\x90\xb9\xaf\x31\x22\xac\x0d\x02\x6a\xf3\xe1\x01\x44\xc9\xa3\x2d\xd3\xe5\x0a\x11\x82\x9c\x42\x18\x5c\x3a\xee\xdb\x77\x0a\xc0\x7e\x78\xb2\xdb\xda\xff\x2f\x71\xd8\x23\xff\xfc\x42\x66\x0a\xe9\x99\x01\x5a\xb9\x12\x6c\xc7\xf3\x7b\x90\x13\x24\xcd\x78\xc6\x0b\xf6\x5d\x22\xa6\x55\xf7\xfd\xcb\x4a\x7d\x28\x60\x82\xb4\xab\x2c\x2f\xa5\xb4\xfa\x28\xcc\x18\xa6\xde\x97\x3e\x59\xc8\x55\x19\xde\x3d\x2b\xce\x78\x3f\xb5\xc0\x21\x0f\x9b\xad\x02\x2e\x0e\xaa\x14\xd7\x81\x96\x3d\x1b\xe0\x95\x5f\xc8\x67\x72\xcb\x77\x39\xfc\x3e\x90\x0d\x66\x9d\x79\x41\x3e\x00\x34\x37\x94\xf0\x84\xe1\xc0\x69\x0f\x46\xce\x07\xd0\xf1\x9c\xb0\x9f\x92\x07\x31\x61\xb7\x19\xcf\xef\x27\xec\x0d\x86\xd7\xfe\xa8\x56\x6d\x3e\xbc\x06\x61\xc3\xc9\x7e\xbc\xe3\xdc\x58\x7d\x44\x26\xed\xd6\xff\x2f\x4d\xa5\xff\xae\xd8\xf2\xdf\x26\xe2\xad\x83\x4b\xe3\xef\xdd\x13\x71\x20\x0c\xfc\x1b\x38\xec\xef\xf2\x56\xdc\x4f\xa3\xf1\x0f\xe1\xff\xda\xfd\xcb\x5a\x5c\x60\x7b\xd2\x2e\xd7\x8a\xfa\xfa\xb6\x12\x87\x93\xb8\x7e\x28\x37\xf3\x87\x87\x2d\x05\x4a\xcf\x8e\x5d\xea\xf8\x08\x50\x3b\xbd\x6a\xfb\xeb\x22\x55\xba\xcc\xfb\x17\xff\x4d\xb5\xd6\xf6\xeb\x2d\x54\x9a\x30\xd9\x76\x2b\x01\xac\x00\x43\xe1\x1d\xf8\xd8\xf2\x3f\xd5\x6a\x09\x58\xa6\xd3\x56\x78\x5b\x71\x56\x9c\xc7\x45\xc4\xa8\xaa\xfe\x84\xbc\xcd\x04\x30\x3a\x79\x53\xd4\x07\x04\x6a\x33\xcc\xb9\x46\x16\xd2\x12\x5c\x63\x46\x6a\x9e\x0b\x60\xe2\xcd\x05\x68\x4e\xb1\x8c\xe7\x0e\x50\x60\x2d\xa2\xe0\xe6\xe3\x41\x27\x61\x16\x19\x24\x83\xd2\x7d\x6b\x25\x84\x74\xbd\x3d\xc6\x94\x30\xd6\x41\xbd\xf7\x09\x4d\xf6\x28\x58\x84\x89\x0a\x1d\xfa\x78\x8d\xf7\x82\xbb\x20\x98\xdc\x1b\x51\x04\xbb\x79\xcd\xb4\xa8\x2c\xcd\x4a\x84\xea\x9b\x42\xd4\xb7\xc6\xa0\x6b\xe4\x57\x15\x07\xca\xa0\x98\xde\x53\xf8\xcb\x3f\xf0\x62\x8b\x17\xda\x9d\x2a\x04\xee\x99\xc8\xc2\x83\xf3\x05\xbd\xce\xab\x54\xad\x40\xec\xc9\xfc\xd2\x75\x37\x8c\x68\x69\x0f\xea\xba\xe6\x80\x0d\xd9\x19\xcc\x6e\x02\x99\xac\xb9\xd0\x40\x68\xd2\x8c\x52\x0d\xc5\xff\x8e\xbb\x74\x37\xab\x6b\x36\xfd\x37\x8d\xcb\x76\x93\x01\xdf\x2c\x6b\x00\x83\x5e\x1e\x91\xa1\x72\x19\x66\x83\x1a\xe3\x80\xc8\x80\x29\x0c\x8c\x7c\xa0\xb5\xf6\x5a\x4d\xe1\x85\x9c\xe1\x2f\xc1\x21\xc0\xbd\xd2\x8b\xc3\x5b\x92\x7c\xa4\x5b\x7f\x98\x1e\xca\x66\x21\xc2\x8f\x3c\x04\x13\xef\xcb\x84\xcb\xc0\x04\xb2\x06\x65\x91\xe4\x82\x49\x40\x21\x2c\xa4\x2e\x57\x67\x9e\xf8\xc3\xdc\xe2\x1e\x80\xac\x46\x8b\x8c\xc3\x55\x06\xf8\x80\xce\x5a\x8e\x61\xf4\x4c\x7a\xc5\x06\x4b\x90\xc7\x53\xda\xfc\x21\x17\x11\x33\xcf\x5d\xdb\x5d\x39\xe6\xb2\x06\xb7\x68\x9b\xf5\x8c\x87\x5d\xdf\x7e\x01\x9a\x32\x90\xe1\x78\x83\x28\x8a\xaf\x7d\x80\x87\xd1\xd0\xa1\x47\x37\xc4\xd3\x16\xf2\xff\xda\xb3\xa1\x1b\xb4\x3b\x62\xa6\x9b\x9e\x31\x47\x54\x27\x98\xb8\x52\x37\x7b\x85\x0c\x8c\xc0\xee\x4a\x35\xa6\x7c\x5b\xa9\xdc\xe2\x5a\x42\x05\x05\x45\xe9\xa8\xf0\xeb\x43\xa2\x03\x3a\x6d\xf8\xda\xad\x10\xec\x55\x2e\xd6\xaf\x3e\xe5\x62\xbd\xb4\x23\x3d\x85\x06\x4d\x4d\x8b\x9a\xa4\xda\x03\x27\x87\xce\x94\x6c\x27\x17\x3c\x40\xfe\x59\x6b\x12\x96\x13\xb4\x29\x59\x33\x2f\xb4\x67\xda\x03\x0c\x0b\x22\xae\xb3\x7d\x37\x6a\xf6\xc5\x8f\xb9\x2e\x24\xd8\x00\xa8\x55\x87\x40\xdd\xdf\xff\xf1\x56\xe9\xb3\x21\xc7\xdb\x5d\x15\x32\x63\x37\x7b\x2e\xdd\x81\xd7\x0d\xad\xfe\xb2\xe8\x6f\x18\x40\x9d\xf1\x47\x49\x3c\x31\xa3\x5c\x4f\xc3\x8e\xb5\x76\xa9\x7c\x73\xac\x35\x30\x70\x7e\x95\x49\xeb\xe9\x4b\x9c\x9a\xdb\x24\x10\x42\xe6\x69\x1a\x6a\x16\xf8\x48\xdb\x42\xfa\xbc\x4f\x63\xb5\xa6\xa9\x75\xe1\x55\xec\x0d\x62\x05\x8a\x21\xe1\x56\x4c\x2c\xa9\x09\xd1\x01\x52\x3c\xec\x6c\xc5\x41\x65\xd3\x29\xf9\x1c\x5a\xcd\x4f\x75\x89\xfc\xc6\xf2\x8e\x0f\x44\x9e\xf1\xb3\xcb\x7b\xb1\x1f\x5d\xd7\xf6\x48\x47\x40\xd9\x00\x8b\xd9\xee\xb2\x11\xcf\x73\x8b\xa2\xa7\xaf\x32\x73\x57\x5a\xf3\xa8\xe2\xe6\xec\xa8\xe7\x56\x44\xf7\x99\x4a\xe4\xe8\xbd\xa8\x42\x21\x01\x93\xbd\x60\xbe\x34\x77\x3b\x1c\x74\x38\x56\xec\x49\x6c\x88\x06\x78\x85\x85\x86\x7a\xb2\x33\xce\x9c\x8a\x69\xf7\xb4\x7b\x6a\xff\x85\xf0\x67\xc3\x33\xf8\x62\x5b\xe2\x43\xb5\x53\x85\xb7\x38\x76\x2a\x4c\x9b\xbc\x91\x5d\x35\xb0\xb3\x39\xab\x50\x04\xb6\x76\x29\xb8\x20\x7f\xf3\x0c\xfd\xe6\x19\xfa\x1b\xf7\x0c\x7d\x49\xb7\x10\x60\x63\x9e\xd3\x27\xd4\x13\x20\x3f\x61\x39\xba\xaf\x9e\x2a\xe9\x8d\xd6\xf1\x24\x90\x9e\x0d\x32\x09\x9b\x40\x7f\x4b\x34\x51\x80\x70\x77\x74\x2f\x64\x67\x8c\xde\xd2\x03\x75\xea\x13\x3f\x2d\x82\xa5\x8d\xdd\x28\x78\xbb\x1f\xca\xe2\xa1\x4e\x44\xca\xdb\x46\xb8\x61\xd6\x09\xd8\x9e\xa6\xe1\x67\x00\x1a\x53\xb9\x23\x8e\xd6\x94\xe5\x86\xc1\x48\xa4\x21\x42\xb0\x54\x8d\x6a\x79\x28\x26\xce\x7e\x78\x99\x29\x95\xb6\x42\xe3\x9e\xb4\x03\x1b\x89\x32\x43\x3b\x6f\x8e\xc6\xa8\x0e\x01\x63\xb6\x17\x7d\xd2\x85\x4f\xd1\xc0\x7c\x0c\xd0\x9a\x80\xd9\x14\x97\x90\xab\xe8\xbb\x63\xea\x33\x9c\xb8\x73\xb8\x10\x46\x6c\x25\x22\x0e\x3a\x8b\x16\xbc\x17\x71\x97\x7d\x12\x92\x0e\x35\xd2\x41\x74\xf3\x3b\x1d\x51\x4b\x28\x77\x99\xb4\x09\x4b\x8c\x5d\x5c\x35\x0b\xc1\x42\xcb\xb1\xe6\x16\x49\x62\x69\x0d\x0f\xc9\x6a\x5a\x0e\xe7\x65\x94\x72\x3d\xd0\xb0\x6e\xdd\x77\xe6\x54\xd0\x05\x94\x33\x7c\x23\xfd\x09\xd2\x71\x76\x03\x91\x3b\x0b\x39\x73\xb2\x92\x1e\xfb\xe5\x90\x7b\x18\x2e\x45\xcc\x62\x63\x68\x90\x2b\xd1\xdf\x5c\x26\x4c\x97\xd1\x16\xd8\x20\xab\xfb\x54\xb8\x6f\x35\x57\xec\x64\x21\xcd\x85\x08\x5c\x2d\x3b\x0e\x79\xe7\x8f\xc6\x58\xd5\xc9\x7f\x09\x07\xcf\x22\x72\xac\x10\x91\x85\x17\x27\x25\x5b\xd1\x6b\x96\x98\x13\x01\x16\x1e\x53\x52\x66\x31\x2f\xc4\x74\xe1\xd1\x36\x09\x7a\x3a\x2d\xca\x83\x4c\x66\x1d\x36\x2c\xc4\x31\xd6\x76\xda\x34\x59\x8b\x68\x1f\x35\x74\x76\xfa\x69\x18\x7e\xbb\xb6\x7d\x5b\xd7\x36\x64\xb1\xc5\x9c\xc1\x31\x5d\x4b\x55\xbd\xf1\xaf\x9f\xd6\xb9\x82\x05\x35\xd1\x23\xfa\xf9\x0b\x5e\x3b\x5b\x6c\xe0\x71\xf6\xfc\xe0\x7b\x50\xff\x71\xe6\x2f\xb6\xfe\xb0\x0e\x28\x06\x1a\x66\x61\x18\x5c\x2c\xc2\xa9\x63\x0c\xda\xc1\x61\xfd\x6e\x16\x97\x6f\x0a\x9c\x34\xe4\xe2\x6a\x2c\x6e\x07\x57\xba\xb2\x96\xb6\x14\x78\xde\xf5\x58\xdc\x01\x6b\x3a\x2f\x5e\x68\xd7\xeb\xd5\x1d\xd0\x62\xff\xdf\x25\xba\xf8\xb9\xa6\xc9\x79\x9c\xa8\xe7\xb3\x99\xa6\xb6\xaa\x58\xcd\xa1\x16\xd5\x4d\xd5\xe6\x51\x6b\x3b\xe7\xe0\xf2\x64\x55\xd8\x4c\xbd\xc7\xdc\x83\x3e\xb9\xfe\xfa\x84\x47\xd3\x63\xce\xb3\x4c\xe4\xf6\x20\x6f\xd8\x5a\x20\x69\x06\x5f\x01\x4d\xc2\xad\x40\x61\xe4\xda\x2d\xd7\x6c\x25\xb5\xa2\xe1\x31\xe8\xba\x69\xfb\xc8\x5d\x95\x69\xda\x39\x72\x87\x95\x92\xae\x3e\xbe\x7b\xb7\xfc\x79\xf6\xee\xe3\xa5\x6d\x7e\xab\xf2\x50\xf0\x58\x67\x9f\xb8\x9a\x50\x9f\x78\x6d\x43\xf3\x59\x61\xc5\x99\x95\x6f\x35\x3a\xb9\xca\x34\xad\xaa\x52\x2d\xe4\x27\x2a\x07\x60\xda\xa8\xb8\x69\xfa\x8d\xf5\x76\x5c\xf5\xfb\xf0\xd8\x27\x53\xf8\x27\x7c\xf7\x8c\xf9\x46\xbc\x02\xed\x44\xd2\x64\x6b\xef\x57\xca\x86\x39\x61\x39\x20\x18\xb8\x6b\x39\x3c\xb5\xee\xde\x71\xcb\xe3\xa3\x04\xc6\x6f\x11\x5b\xb9\xbc\x27\x59\x1d\xd8\x77\x9f\xaa\x71\x6a\xb7\x97\xc7\x78\xa5\x81\x72\x27\xa8\x96\x06\x1a\xd0\x5e\x50\x6c\x21\xd1\x07\x6a\xea\x54\xa8\xee\x3a\xb1\x39\x99\xb7\x29\x97\x9b\x92\x6f\x8c\x75\x6b\x3f\xbe\x90\xbb\x64\xb3\x45\x9e\x8d\x32\xf3\xf8\x64\xce\x24\xd0\xb1\xd4\xa6\x50\x0d\x9f\x9c\xc8\x85\xa4\x36\xc9\x8d\x2f\x1e\xb1\xb2\x7f\xbc\x75\xcd\x21\x50\x3a\x16\x44\x82\x6f\x72\x21\x71\x70\x91\xff\xc3\x46\x42\xe0\xc6\xc2\x8b\xfa\xd4\xe5\x10\xbb\x44\x51\x74\xb3\xa7\x6f\x20\x26\xb3\x90\x2e\x45\x17\x3d\x47\xd4\x86\x40\x18\x04\xab\x74\x78\x3f\xb1\x83\x61\xd7\x04\xd5\xad\x7d\xd6\x9f\x7c\x06\x98\x05\xb7\x1c\xa1\xee\xdc\xdc\xc6\x06\x7a\x0b\x79\xb0\x71\x74\xf1\x36\x40\x5e\x76\x7b\x6d\x6c\xbb\xf0\x99\x4e\x68\xab\x2a\x57\xe9\x88\x2a\xe1\xf3\xbd\x95\xc2\x2d\xb9\xbf\x52\x03\xae\xc3\x37\xb5\xa5\x65\xa6\x69\xdf\x67\x57\x4a\x75\x8c\xcb\x13\x06\x14\x2b\x95\xa2\x17\x0e\x75\x46\x19\x15\xc7\xcc\x97\x01\xc9\x8a\xf5\x2e\xb2\xbb\x4f\x5f\x85\xd2\x44\x1f\x55\x1d\x6f\x3f\x0d\xae\x91\xb3\x10\xe8\xb0\x1b\xb5\xc3\xd2\x39\x57\xd9\x60\x3b\xb6\x49\x8a\x27\x59\x99\xe4\x04\xb7\x17\xb3\x78\x50\xc3\xd8\xcc\xff\x89\x9b\x44\x13\x3f\x72\x13\xa8\x64\x54\xe6\xda\x6c\x97\xb4\xdf\xd1\xae\xad\x72\xc6\x17\xd2\xa6\xaa\xd9\xed\x78\x66\xc1\xb9\xb9\xfb\x2b\x26\x80\x66\xc8\x57\x0f\x16\x6b\xc1\x94\x14\x76\x37\x5c\x48\xab\xad\x3d\x61\x7c\xa5\xad\x64\x35\x97\x7b\xa7\x23\x9d\x38\x91\x40\x2e\x19\xa0\x9e\x0f\xef\x79\x35\x33\xa0\x72\xce\xff\x83\xf9\xbf\xff\xf9\x87\xff\x1f\x00\x00\xff\xff\x7f\x4e\x89\x9c\x28\xac\x04\x00") +var _adminSwaggerJson = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\xfd\xf9\x73\x2b\xb7\x95\x37\x8c\xff\x3e\x7f\x05\x9e\x3b\x4f\x95\xed\x44\x8b\x93\xcc\xe4\x9b\xd2\xd4\x53\xdf\x97\x96\x78\xaf\xf5\x58\x5b\xb4\xd8\xe3\x77\x98\xa2\xc1\x6e\x90\x44\xd4\x0d\x74\x00\xb4\x74\xe9\x54\xfe\xf7\xb7\x70\xb0\x34\x7a\x23\x9b\x8b\x24\xea\xba\x67\xaa\x62\x5d\x76\x37\xd6\x83\x83\xb3\x7e\xce\x3f\xff\x0d\xa1\x0f\xf2\x19\xcf\x66\x44\x7c\x38\x41\x1f\xfe\x78\xf4\xed\x87\x03\xfd\x1b\x65\x53\xfe\xe1\x04\xe9\xe7\x08\x7d\x50\x54\x25\x44\x3f\x9f\x26\x0b\x45\x68\x9c\x1c\x4b\x22\x9e\x68\x44\x8e\x71\x9c\x52\x76\x94\x09\xae\x38\x7c\x88\xd0\x87\x27\x22\x24\xe5\x4c\xbf\x6e\xff\x44\x8c\x2b\x24\x89\xfa\xf0\x6f\x08\xfd\x0b\x9a\x97\xd1\x9c\xa4\x44\x7e\x38\x41\xff\x63\x3e\x9a\x2b\x95\xb9\x06\xf4\xdf\x52\xbf\xfb\x37\x78\x37\xe2\x4c\xe6\xa5\x97\x71\x96\x25\x34\xc2\x8a\x72\x76\xfc\x77\xc9\x59\xf1\x6e\x26\x78\x9c\x47\x1d\xdf\xc5\x6a\x2e\x8b\x39\x1e\xe3\x8c\x1e\x3f\xfd\xe1\x18\x47\x8a\x3e\x91\x71\x82\x73\x16\xcd\xc7\x59\x82\x99\x3c\xfe\x27\x8d\xf5\x1c\xff\x4e\x22\xf5\x2f\xf8\x47\xcc\x53\x4c\x99\xf9\x9b\xe1\x94\xfc\xcb\xb7\x83\xd0\x87\x19\x51\xc1\x3f\xf5\x6c\xf3\x34\xc5\x62\xa1\x57\xe4\x23\x51\xd1\x1c\xa9\x39\x41\xa6\x1f\xe4\x96\x88\x4f\x11\x46\x27\x82\x4c\x4f\x7e\x11\x64\x3a\x76\x0b\x7d\x64\x16\xf8\x02\x46\x73\x93\x60\xf6\xcb\x91\x5d\x26\x68\x99\x67\x44\xc0\xdc\xce\x63\xdd\xfa\x27\xa2\x06\xd0\x6c\xf1\x7e\xf8\xb6\x20\x32\xe3\x4c\x12\x59\x1a\x1e\x42\x1f\xfe\xf8\xed\xb7\x95\x9f\x10\xfa\x10\x13\x19\x09\x9a\x29\xbb\x97\x03\x24\xf3\x28\x22\x52\x4e\xf3\x04\xb9\x96\xc2\xc1\x98\xa9\xea\x8d\xc5\xb5\xc6\x10\xfa\xf0\xbf\x05\x99\xea\x76\xfe\xfd\x38\x26\x53\xca\xa8\x6e\x57\x1a\xfa\x09\x46\x5b\xfa\xea\x5f\xff\xd6\xf4\xf7\xbf\x82\x19\x65\x58\xe0\x94\x28\x22\x8a\x1d\x37\xff\x57\x99\x8b\xde\x23\xdd\x79\xb1\x8f\xd5\x81\x57\x66\x7b\x85\x53\xa2\xf7\x44\xef\x94\xfd\x02\xfe\x16\x44\xf2\x5c\x44\x04\x4d\x48\xc2\xd9\x4c\x22\xc5\x6b\x6b\x40\xa1\x05\x4d\x5e\xd5\x27\x82\xfc\x23\xa7\x82\xe8\xbd\x52\x22\x27\x95\xa7\x6a\x91\xc1\x20\xa5\x12\x94\xcd\xc2\xa5\xf8\xd7\x41\xa7\xa9\x19\xaa\x5c\x63\x66\xe6\x83\xd6\x89\x8d\xd8\xc0\xbd\x12\x61\x86\x26\x04\xe9\xb3\x48\x63\x22\x48\x8c\xb0\x44\x18\xc9\x7c\x22\x89\x42\xcf\x54\xcd\x29\xd3\xff\xce\x48\x44\xa7\x34\x72\x6b\xb6\x3f\x6b\x03\x7f\x2e\x5f\x99\x07\x49\x84\x1e\xf8\x13\x8d\x49\x8c\x9e\x70\x92\x13\x34\xe5\xa2\xb4\x3c\x47\x23\x76\x3f\xd7\xeb\x90\x4e\x28\x83\x93\xa7\xd7\xd2\x51\xc8\xef\xdd\x72\xfd\x1e\xe9\xfe\x50\xce\xe8\x3f\x72\x92\x2c\x10\x8d\x09\x53\x74\x4a\x89\xac\xb6\xf6\x7b\x0e\xfd\xe3\x04\x1d\x22\xbd\xce\x44\x28\x58\x6f\xce\x14\xf9\xac\x24\x3a\x44\x09\x7d\x24\xe8\xab\x0b\x2a\x15\x1a\xdc\x9c\x7f\x75\x80\xbe\x32\xe7\x05\x01\x6f\xfa\xea\x15\x56\xd8\xff\xfd\xb7\xe0\xe8\x29\x3c\xab\x1e\xba\x0f\x03\x7d\x9a\xef\xcc\xd5\x50\xb4\xf0\xb7\x7f\x0b\xdb\xb1\xfb\xb5\x9c\xdf\x16\xcc\xd6\x72\xda\xae\xfc\x15\x96\xa9\xcc\x5a\xa5\xde\xa1\x6d\x39\xab\x6e\xb7\xca\x5a\xe5\xfb\xe2\xad\x7a\x0a\x2f\xcd\x5f\xb7\x61\xae\x58\x01\xd5\x63\xca\xcc\x21\xf1\x67\x46\x48\x7d\x4e\x1c\xf5\xee\x09\x4b\xd9\x86\xd7\x06\x33\x0b\xd8\xad\xe3\xa2\xc1\xaa\xec\xe1\xbc\x13\x9a\xd2\x55\xfb\x7b\xce\x62\x2d\x72\x59\x66\xc7\xf2\x74\x42\x84\x5e\x06\xc7\xf6\x60\xb6\x13\xcd\x06\x55\x2e\x18\x89\x3b\x4c\xf3\x1f\x39\x11\x8b\x25\xf3\x9c\xe2\x44\xb6\x4d\x94\x32\x45\xb4\x7c\x5b\x79\x3c\xe5\x22\xc5\xca\xbe\xf0\xe7\xff\x58\x77\x21\x14\x7f\x24\xab\xf6\xff\xdc\xec\x66\x84\x25\x90\x41\x9a\x27\x8a\x66\x09\x41\x19\x9e\x11\x69\x57\x24\x4f\x94\x3c\x80\xd7\xb4\x4c\x4d\xc4\xa1\xbf\x81\xa0\x07\x77\xf3\xe6\x12\x7e\x41\x53\x2f\x40\x32\xf2\x59\x41\x4b\x23\x06\x77\x2f\x2c\x51\x78\xa3\xbc\xc0\x52\x6e\x46\x33\x92\x0b\x35\x9e\x2c\x8e\x1e\x49\xad\xdf\x56\xca\xc1\x0c\x61\xa5\x04\x9d\xe4\x8a\xe8\x79\xeb\x36\xdc\xdd\x09\xec\xd1\x5c\xd0\x5d\x58\xc3\xdb\x4d\x38\xa6\x82\x44\x30\xb7\x75\x0e\x8c\xff\x4a\xcf\x5b\xeb\x2f\x0b\x33\xfb\x47\xb2\x00\x79\xa4\x61\x05\xfc\x96\x8f\xd8\x88\xa1\x43\x74\x36\xbc\x3b\x1d\x5e\x9d\x9d\x5f\x7d\x3a\x41\xdf\x2d\x50\x4c\xa6\x38\x4f\xd4\x01\x9a\x52\x92\xc4\x12\x61\x41\xa0\x49\x12\x6b\x99\x43\x0f\x86\xb0\x98\xb2\x19\xe2\x22\x26\xe2\xe5\x96\xb1\xf2\x94\xb0\x3c\xad\xdc\x2b\xf0\x7b\x31\xfa\xca\x17\x5a\xc4\xf0\x8f\x4a\x4f\xfe\x56\x5b\x60\x98\xb1\xee\x3b\x68\xed\xd5\x84\x9a\x68\x4e\x93\x58\x10\x76\xac\xb0\x7c\x1c\x93\xcf\x24\xca\xcd\x9d\xfc\xcf\xf2\x0f\x63\x2d\x99\xf2\x98\x94\x7f\x29\xfd\xa3\x10\x85\xd6\xfe\xd4\x6b\xa9\x6b\x7f\x09\x3a\x6d\xb7\xef\xe0\x17\x1a\x37\xbe\x0d\xbf\xac\x98\x83\x7b\x67\xc9\x60\xdd\x2b\xad\xa3\x72\x2f\x58\x89\xaf\xf1\x1d\x41\x94\x58\x8c\xb1\x52\x24\xcd\xd4\x9a\xfa\x3a\x46\x89\x96\x2b\x97\xc9\x91\x57\x3c\x26\x43\xd7\xdf\x2f\xc8\x88\xb3\x24\x46\x93\x85\xe5\x5a\x53\x22\x08\x8b\x48\x7b\x0b\xf7\x58\x3e\x16\x2d\xac\x12\x46\x4b\xfd\xc9\x8f\x5c\xe8\xcf\xdf\x83\x40\x5a\x1a\xf8\x6b\xc8\xa4\x9b\x9e\xb8\x2f\xce\x42\xb0\x21\xff\xe8\xed\x09\xdb\xaf\x64\x57\xeb\x03\x17\x48\x2e\xa4\x22\xe9\x4a\x3b\xc4\xfb\x59\x08\x7b\x41\xec\xeb\x80\x2b\x77\xd4\x6f\xe0\xd4\x97\x6f\xdc\xfe\x78\xaf\xb1\x64\xbb\xb2\x22\xee\xfb\x3c\x9d\x0f\x67\xf9\x54\xef\xdc\xf6\x05\x4e\x8c\x77\x31\xcd\x92\x2c\xb8\xeb\x41\xbe\x90\xb9\xa1\x75\xaf\xdc\x6a\x8f\x61\x00\x2b\x14\xcd\xb2\x1d\xda\x9f\x3f\xfd\x69\x68\xa1\x31\xe6\x38\x35\xa7\x32\x30\x56\xa1\x88\x0b\x23\x0b\xc6\xf6\xbc\x1b\x5d\x73\x70\x3f\xb8\x1b\xde\x9f\xa0\x01\x8a\xb1\xc2\xfa\x80\x0b\x92\x09\x22\x09\x53\xa0\xc7\xeb\xef\xd5\x02\xa5\x3c\x26\x89\xd1\x38\x3f\x6a\xc9\x17\x9d\x61\x85\x4f\xb1\xc2\x09\x9f\x1d\xa1\x01\xfc\x53\x7f\x4c\x25\xc2\x89\xe4\x08\x3b\xb2\x22\xb1\x6b\x02\xb3\xd8\xb1\x16\x8c\x22\x9e\x66\x34\xf1\x36\x78\x6f\x5c\xa1\x2c\xa6\x4f\x34\xce\x71\x82\xf8\x44\x73\x15\xad\x21\x0f\x9f\x08\x53\x39\x4e\x92\x05\xc2\x49\x82\x6c\xb7\xee\x05\x24\xe7\x3c\x4f\x62\xdd\xae\x1b\xa5\xa4\x29\x4d\xb0\xd0\x2a\xb8\x19\xed\xb5\x6d\x0b\xdd\xcf\x89\x1f\x2b\x8c\x4b\xaf\x66\x8a\x1f\x89\x44\x54\xa1\x8c\x4b\x49\x27\x49\x71\xe6\x1f\xce\x11\x8c\xfb\xf4\xe2\x1c\xf4\xf9\x48\x21\x6e\x78\xa8\xeb\xdc\xda\x6f\x5c\x8f\x29\x66\x8c\x40\xc7\x5c\xcd\x89\xb0\xdd\xdb\x97\xdf\x5a\x35\x7f\xb8\xba\xbb\x19\x9e\x9e\x7f\x3c\x1f\x9e\xd5\x75\xf3\xfb\xc1\xdd\x0f\xf5\x5f\x7f\xba\xbe\xfd\xe1\xe3\xc5\xf5\x4f\xf5\x27\x17\x83\x87\xab\xd3\xef\xc7\x37\x17\x83\xab\xfa\x43\x4b\x56\x9d\xd5\xfc\x70\x64\x6b\x9e\xad\xde\xa6\xf9\x52\x36\xcd\x83\x2f\xd7\xa8\x39\xa5\x09\xe8\xa0\x9d\x0d\x9a\xde\x86\x60\xbf\x44\x19\x96\xd2\x48\x46\x66\x04\x47\x23\x76\xc9\x85\x66\x60\x53\xae\x79\x84\x96\x9e\x94\xc8\x23\x45\xd9\xcc\x7f\x74\x82\x46\xf9\xb7\xdf\xfe\x29\xba\xa0\xec\x11\xfe\x22\xfb\xb8\x38\xbd\xc5\xb7\xb7\xf8\xfe\xb6\x2c\xbe\x5a\xf4\x39\x0e\x0d\xbd\xbb\x0d\x19\xd2\xc2\x05\xcb\x72\x05\xa2\x04\xcf\x95\xfe\x53\x77\x09\xe4\xb1\x24\x70\xa8\x9b\x41\xf1\x13\x51\xfe\x45\x2d\xda\xbc\x07\x3b\xe2\x4f\x5c\x3c\x4e\x13\xfe\xec\x07\xfe\x89\x28\x3d\xf6\x5b\xdb\x4b\x1f\x4a\xd4\x87\x12\xbd\x6d\x28\xd1\x5e\x19\xf3\x5e\x9e\xf9\x95\x2d\x7f\x86\x03\xb6\x78\xb2\x5a\x1d\x55\x2d\x7e\xa8\xc0\xcd\xf4\x2a\x5c\xb3\xec\xcc\x59\xc1\x39\x4b\x2f\xbf\x17\xee\x59\x1a\xf4\xeb\x73\xce\xdf\x84\xbf\xa5\x77\xa7\x6c\xb8\x50\xef\x92\xc1\x76\xbc\x3b\x5e\xcd\x19\xf2\xf2\x0c\xbf\x16\xdb\xb0\x4e\x30\xc3\x1a\xd1\x0b\x9d\xc3\x15\x56\xc4\x27\x34\x06\x24\x34\x45\x20\xd4\x43\x0e\x1a\x63\x0c\xb6\x0b\x2a\xd8\xf4\x6e\xea\x1e\x26\xf0\x89\xa8\xd2\xcb\xef\xe5\x6e\x2a\x0d\xfa\xf5\xef\xa6\xdf\x68\x74\x40\x1f\x0e\xf0\x82\x4b\xf7\xa5\xdf\x68\xfb\xeb\xf0\xff\x0d\x78\xf8\x7b\x97\xfe\x5a\x6b\xf4\x65\xf9\xf0\xbf\x54\xa7\xfd\xfb\xf4\xd2\xf7\x6e\xf9\xde\x2d\xff\x16\xfe\x93\xf7\xe7\x96\x7f\x59\xf5\xb4\x38\x5e\x63\x47\x0b\x56\x5f\x0b\x0e\xe5\xbf\x3a\x38\x69\xe0\x2f\xa7\xf2\xad\x1b\x34\xde\xaa\xc3\x9d\x15\xe3\x1b\xc2\x11\xfa\xc5\x12\xd2\x0a\x75\xae\xf6\xdd\x7b\x50\xe7\xea\x83\x7e\x79\x1d\xee\xcd\x98\xef\x0b\x5d\x9e\xef\x84\x0d\xac\x7f\x5b\x7e\xc1\x32\x79\x2f\x8b\xbf\x7c\x36\xfe\xde\x4c\xe8\xfd\xc8\xde\x6f\x70\xf1\x76\xbc\x75\x77\x9e\x93\xd5\x70\xcd\x06\xb7\xd3\xaa\x0c\xab\xea\xd7\x94\xc8\x3f\xbe\xcb\xfb\xf6\x35\x92\xac\xfa\x0b\xb7\xbf\x70\x6d\x53\xfd\x85\xfb\x05\x5f\xb8\x7b\x07\x7f\xb3\x37\x11\xa0\x7d\x10\x79\x0f\x8c\xd1\xc7\x90\xef\x70\x71\xfa\x18\xf2\x3e\x86\xfc\x37\x16\x43\xbe\x8d\xf6\xb4\x29\x16\xe5\x5b\xe8\x51\xbd\x1a\xd5\xab\x51\xe1\xef\xbd\x1a\xd5\xab\x51\xbd\x1a\xf5\x85\xa3\x88\xf6\x3a\x54\xf7\x85\xe8\x75\xa8\xce\x4b\xd5\xeb\x50\x4b\x16\xa7\xd7\xa1\x7a\x1d\xea\xb7\xa5\x43\x91\x27\xc2\x94\x84\x64\xb4\x50\xa3\xf8\x90\x71\xd9\xae\x09\x85\xdc\xa1\x41\x0b\x82\x36\xcb\x49\x61\x10\xb8\xf4\x0b\x9a\x63\x89\x78\x14\xe5\xa2\x72\x06\xaa\x7a\xd0\xa9\x20\x58\x11\x68\x41\x7f\xf8\x1e\xf4\x9f\xfa\x74\x5f\x2b\x06\x7f\xc2\xe3\x1a\xb5\x9b\x83\xd0\xf4\x64\xb9\x3c\xb2\xb3\xa9\xff\x23\x27\xdd\xd4\xbf\x17\x24\x6a\x85\xe5\xe3\x8e\x89\xba\x94\x6b\xb1\x11\x51\x43\x0b\xef\x85\xa8\xeb\xd3\xfd\xcd\x10\x75\xd3\xd4\xf7\x81\xa8\x9f\x6d\x1e\xff\x8e\x09\xbb\x06\x0f\xb0\x11\x71\xfb\x56\xde\x0b\x81\x37\x4f\xfb\x37\x43\xe4\x6d\xd3\x7f\x5b\x42\xf7\x29\x92\x9d\x49\xfc\x5e\xd0\xd9\x4c\xab\x19\xa0\xe1\x69\x52\x5c\x5d\x23\xa8\x48\x0a\x5c\x49\xd6\xfe\xd5\xf7\x40\xd2\x7e\xb0\x66\xec\xbf\x19\x5a\xae\xcd\x7b\x4f\x88\xf8\x58\x90\x88\x3f\x41\xbd\xb0\x6e\xc4\x7c\x4b\x80\x82\x81\x5f\x67\x82\x3c\x51\x9e\xcb\x64\x71\x28\x72\x86\x1c\xf3\x47\xbe\x79\x63\xad\x7e\xa6\x49\x82\x38\xd3\xfa\x97\xc2\x42\xb9\xc7\x5a\xff\x16\x3c\x85\x53\x91\x60\xa9\xd0\x23\xe3\xcf\x0c\x4d\x31\x4d\x72\x41\x50\xc6\x29\x53\x47\x23\x76\xce\xd0\xad\x19\x23\xe4\x0d\x1c\xa0\x5c\xea\xb3\x14\x61\xc6\xb8\x42\xd1\x1c\xb3\x19\x41\x98\x2d\x6c\x02\x6e\x41\x19\x88\x0b\x94\x67\x31\xd6\x8a\xef\x9c\x54\xa3\xf4\xfc\x18\xc1\x7c\x47\x25\xa2\x12\x91\xcf\x4a\x90\x94\x24\x0b\xdd\x87\xa6\x7d\xc5\x91\x5d\x1f\x33\x54\x9b\xce\x47\x84\xe0\x42\x42\xc6\xc1\x64\xf1\x2b\x66\x8a\x32\x82\x40\x51\x92\xc6\x34\x77\x88\x2e\xb8\x04\xb3\xcd\x0f\x7f\x91\x28\x4a\x72\xa9\x88\x38\x40\x93\x7c\x26\xb5\xa6\x98\x25\x58\x4d\xb9\x48\xf5\x08\x29\x93\x0a\x4f\x68\x42\xd5\xe2\x00\xa5\x38\x9a\x9b\xb6\x60\x0d\xe4\xc1\x88\xc5\xfc\x99\x49\x25\x08\xf6\xbd\xbb\x87\xe8\xeb\xf0\x99\x21\x00\xf9\xcd\x01\xa4\x1d\xd2\x54\xab\xbb\xc1\xf0\x8b\x1d\x37\x7b\xa2\x1b\x21\x31\x9a\x90\x08\xe7\xd2\x7a\x18\x94\x58\x20\xf2\x79\x8e\x73\x09\x7b\xa7\xa7\x67\x73\x36\x22\x9e\x66\x09\x51\x04\xd1\x29\x52\x82\x92\x18\xe1\x19\xa6\x7a\xe9\xee\xc8\x12\x10\x74\x4f\xf4\x76\x03\x2d\xd5\xff\x02\xea\x77\xca\x05\x41\x31\x51\x98\x26\x4b\xbd\x4e\xf6\xdb\x9e\xcb\xbd\x27\x2e\x57\xde\xf0\xbd\x60\x73\x06\xc4\x7f\x07\x97\x36\xb3\xa6\xfb\x08\x27\x5b\xde\xdf\xb7\x76\x50\x3d\x6d\xbf\x2f\xda\x36\xbb\xb6\x3f\xc4\xfd\x6a\x31\xd8\xdd\x2b\x5a\x14\xd5\x2c\xde\x15\x4d\xbf\x46\x58\x40\xef\x70\xee\x1d\xce\xad\x2b\xf3\x3e\x1d\xce\x7b\xe3\x31\xea\x7d\xce\x2f\xe4\x73\xa6\xb2\x77\x3a\xf7\x4e\xe7\xae\x0b\xd4\x3b\x9d\x7b\xa7\xf3\xfb\x75\x3a\xbf\x24\xee\xf3\x4e\xd1\x9d\xdf\x95\x68\xdd\x8b\xd5\xbd\x58\xdd\x43\x38\xfb\xa9\xed\x8a\x85\xb9\xaf\x3f\xc4\x24\x21\x8a\xb4\xdb\xb3\x88\x48\xb5\xb6\x60\xae\x67\xca\xb4\x1c\x37\x13\x44\xca\x6d\x19\x92\x6f\xf8\x7d\xb2\x25\x3f\xfc\x1e\x6a\xbe\xe7\x53\x3d\x9f\xda\x64\x6a\xfb\x63\x9a\x0d\x0e\xf3\x6b\xd9\x66\x3d\xff\xcd\xf2\x76\xe9\xef\xc1\xb8\x21\x0b\xbf\xa8\xa1\x70\x2d\xb5\x2b\xee\x0f\xb7\xa5\xf3\x2d\xf9\xb1\xe9\xeb\x7d\x32\x63\x33\xf6\x9e\x13\xf7\x9c\xb8\xe7\xc4\xef\x9b\x13\xbb\x93\xfc\xa6\x2e\x32\xe3\xa7\x1b\x67\x09\x66\x63\x1a\xcb\xe3\x7f\x16\xba\xfc\x4b\x79\xc8\xf4\x81\x8a\x4d\x8a\xa9\x4f\xe9\x14\xbf\xe8\x4f\x92\xc2\x60\xee\x31\x33\x57\x38\xd1\x8c\x8d\xfd\x26\xc1\xec\x3c\x7e\x17\x7e\xb4\xc6\xd9\xbf\x86\x4f\x6d\x1b\x3e\x8e\x15\x78\x3a\x30\x65\xc6\x84\x57\xe4\xd5\x96\x0c\x94\xfb\x71\xc2\xb7\xe1\xea\xc1\xc4\x02\xc6\xee\xf8\x75\xb0\x28\xfb\x37\xed\xde\xaf\xd3\xe7\x12\xf6\x9e\x8b\x8e\x13\xee\x3d\x17\xfb\xeb\xb9\x78\x2b\x77\xe4\x2b\x1f\xcf\xd7\x12\xeb\xba\x07\xe1\x9b\x68\x35\x08\x6a\xcd\xb3\x84\xe3\x78\x99\x2b\xa6\x10\xbc\x42\x70\x94\x95\x91\xf8\xc5\x67\xef\x41\x58\x2b\x46\xfb\x1b\x8b\xe4\xab\x4f\x7c\x5f\xb4\x94\x57\x0c\xe5\x6b\x26\xf1\x35\x54\x92\xf7\x81\x9f\x5a\x8c\xb7\x0f\xed\xeb\x2d\x4a\x6f\x6f\x51\xea\x43\xfb\x7a\x15\x70\xcf\x54\xc0\x3e\xb4\xaf\x0f\xed\xeb\x15\xe4\xe5\xd3\xee\x15\xe4\x2f\x22\xb4\xaf\x93\xa8\xfd\x82\xd8\x9b\xdb\x0b\xdd\xbd\xcc\xed\xde\xeb\x65\xee\x5e\xe6\xfe\x42\x65\xee\xfd\x58\xe1\x5e\xe0\xee\x05\xee\x5e\xe0\xee\x05\xee\x5e\xe0\xde\xf9\x32\xf6\x02\xf7\x6b\x16\xe8\x6c\x96\xba\x57\x24\xd9\xbc\x57\x5f\x4e\x2f\x6e\xf7\xe2\xf6\x7e\x8b\xdb\x7b\x33\xa1\xf7\x53\xe6\xb1\xdb\x7c\xfa\x22\xe5\x7d\x91\xf2\xbe\x48\xf9\x8b\x17\x29\x77\x5f\x77\xc8\xf8\xb0\x87\x4b\x61\x95\x4b\x03\xf8\x28\xc8\x8c\x4a\x05\xec\xbf\x8b\xbc\xb2\x3a\xd1\xe3\xbd\xca\x29\x7d\xaa\x87\x7f\xda\x4b\x2d\xbd\xd4\xf2\x1b\x95\x5a\xf6\x28\x16\x6c\x2f\x32\x56\x52\xac\xa2\x39\x9e\x24\x64\xec\x8d\x3e\xb2\xab\x1e\x7c\x41\xa5\x92\x28\xca\xa5\xe2\x69\xfb\xe5\x72\xe9\x7a\x18\xf8\x0e\x4e\x39\x9b\xd2\x59\x6e\xee\x16\x03\xce\x19\x9c\xe8\x42\x12\x5c\x64\x64\x95\xa7\xaa\xa1\xf5\x77\x71\x2d\x35\x0f\xfd\xb5\x6e\xa7\x75\x04\xf7\xc2\xc8\x67\xa5\x6e\x2d\x6b\x8d\x6f\x87\x77\xd7\x0f\xb7\xa7\xc3\x13\x34\xc8\xb2\x84\x1a\xbb\xbb\x21\x05\xfa\xab\x9e\x14\x52\x58\x3e\x16\x7b\x29\x0c\x99\x1b\x0c\x5b\x30\xf4\x6b\xd9\x18\x1d\xa2\xd3\x8b\x87\xbb\xfb\xe1\x6d\x4b\x83\x96\x50\x20\x6f\x95\xa4\x59\x82\x15\x89\xd1\x63\x3e\x21\x82\x11\x2d\xed\x58\xa4\xdb\xc2\xfc\x6f\x1a\x1d\xfe\xf7\xf0\xf4\xe1\xfe\xfc\xfa\x6a\xfc\xd7\x87\xe1\xc3\xf0\x04\x39\x8a\xd3\xcd\xea\x71\xe9\x51\xc4\x0b\x86\x53\xad\x81\xe8\x1f\x8a\x4c\xd9\x7f\xe4\x24\x27\x08\x4b\x49\x67\x2c\x25\x80\x08\x5c\x6a\xd1\x0d\xf8\x62\xf0\xdd\xf0\xa2\xdc\xf2\x9c\x84\xf0\xbb\x28\xc1\x13\x92\x58\x7f\x04\x98\xd8\x35\xa1\x07\x50\xc5\xc6\x51\x91\x9b\x55\xfd\xeb\xc3\xe0\xe2\xfc\xfe\xe7\xf1\xf5\xc7\xf1\xdd\xf0\xf6\xc7\xf3\xd3\xe1\xd8\x4a\x95\xa7\x03\xdd\x6f\xa9\x27\x2b\x7c\xa2\x7f\xe4\x38\xd1\xda\x09\x9f\x3a\x3c\x5e\xf4\x3c\x27\x0c\xe5\x0c\x28\xce\xa8\x3c\x5a\x0f\xf2\x9d\xea\x53\x66\x66\x74\x73\xf1\xf0\xe9\xfc\x6a\x7c\xfd\xe3\xf0\xf6\xf6\xfc\x6c\x78\x82\xee\x48\x02\x4a\x81\x5b\x74\xd8\xc5\x2c\xc9\x67\x94\x21\x9a\x66\x09\xd1\xab\x81\x6d\x36\xf1\x1c\x3f\x51\x2e\xec\xd1\x9d\xd1\x27\xc2\xcc\x3a\xc2\x99\x85\xf6\x9d\xf0\x3d\x0e\x96\xee\xfa\xea\xe3\xf9\xa7\x13\x34\x88\x63\x3f\x07\x09\x6d\x94\x28\xc7\xc1\x3a\x1f\x96\x87\xad\x99\x03\x74\x6f\x88\x88\x3f\x11\x21\x68\x4c\x2a\x74\x34\xb8\xbb\x3b\xff\x74\x75\x39\xbc\xba\x87\x15\x53\x82\x27\x12\xcd\xf9\x33\x98\xb2\x61\x86\x60\xe1\x7e\xc2\x34\x81\xce\xdc\x66\x71\x86\x9e\xe7\x14\xdc\x1f\x00\xcc\xec\x7b\x36\xfa\x99\xc8\xd9\x9b\x5b\x67\x4b\x07\xaf\xae\xb6\x54\x4f\x52\xfd\x8d\xca\xb1\x58\xf6\x42\x89\xca\xeb\x2f\xae\xa2\xd6\xfa\x17\x15\x72\x6b\x57\xd6\x6a\xf4\xd2\x3e\xd3\x62\xaf\x3b\xeb\x6a\xe5\x35\x7c\xbd\x6b\x96\x28\x41\x23\xf9\xb2\x50\x4f\x22\x67\x8a\xa6\x04\xd9\xce\xec\xe1\xdc\x21\xfc\xd3\xa5\x69\xf8\x3d\x5c\xb0\xb5\x52\x0e\x9f\x88\xb2\xc3\xef\x55\xc0\x5e\x05\xdc\x0f\x15\xf0\xbd\x65\xfb\xc7\x24\xab\x77\x58\x99\x18\xbc\x63\xbc\x5e\xb5\x20\x0d\x63\x4f\xb4\x16\xd5\x84\x3c\x91\x04\xa4\x3c\x25\xb0\x56\x1a\xad\xec\x32\x11\x04\x3f\x6a\x81\x2f\xe6\xcf\xa1\xe4\xd2\x80\xdc\x8f\x76\x73\x0b\x77\x09\xe2\xf8\xd3\x1f\x5f\xef\xb2\xd0\xcb\x1d\xbf\x46\x09\xef\x5b\x08\x92\x59\x8a\x11\x18\x24\xd8\xff\x62\x2d\xc1\x2b\x6e\x8b\xe0\x8b\xf7\x70\x51\x84\xc3\xdd\x23\xad\xeb\x36\x54\x82\x1d\x0b\x4d\x89\xc2\x31\x56\x58\x1f\x9a\x19\x51\x47\xe8\x9a\xc1\xb3\x7b\x2c\x1f\x0f\x90\xbb\xf2\x34\x5b\x29\xac\x0c\xaf\x90\x5a\xff\x4e\x0c\xf8\xeb\xf3\xf1\xfe\xfa\xee\xaf\xef\xe6\x95\xe9\xc3\x3c\x5b\x56\x78\x57\x17\xe3\x5a\x3e\xaf\xdd\xdd\x5f\xa6\xc5\xf7\x7b\x85\xbd\xae\x93\x6b\xa7\x17\x9a\xa9\x9c\xd5\xdf\x56\xe6\xff\xfa\xdb\xaa\xbf\xad\xfa\xdb\x6a\x0f\x56\xf8\xcd\x1d\x86\x0d\xdc\xfd\x4d\x3d\x86\xab\xb4\xd3\x8d\x21\xef\x0a\x6d\x74\x1d\xd0\xbb\x5f\xba\x62\xdb\x15\xdf\xd0\xf7\xe1\x23\x0c\x26\xf9\x1a\x69\x6d\x3b\xbd\xcc\x4d\xbe\x48\xaf\x9f\xbe\xe0\x8d\xdf\x23\x10\xee\x14\x81\x70\x3f\xe6\xfa\x22\x29\x70\x6f\x63\x31\x7d\xfb\xb4\xb7\x1e\x6a\xb0\x4f\xec\xea\x13\xbb\xe0\xf7\x1e\x6a\x70\x77\xd4\xfa\xb2\xd2\x35\x8f\xc9\xb8\x12\x25\xe0\xff\x39\xae\x7a\x7e\x4a\x4f\x42\x37\x50\xe9\x41\x91\xe9\x06\xad\xd3\x78\x97\x45\xa4\xae\x78\x4c\x3a\x47\x12\x94\x5e\xde\x73\x19\xdc\xcd\xd3\xc8\xe2\xa5\x81\xbf\xb0\x24\xde\xb2\xe5\x5f\xa2\x61\xa7\x81\x80\x7b\x2b\xcf\xca\x85\xfa\x52\xe3\x0b\x0a\x0e\xf5\x8e\x3c\x15\xdd\xd8\xb8\x8b\x69\x1c\xb7\x30\xf3\xe6\xe7\x9e\xa5\x37\x3f\x7e\x19\xcc\xa0\xee\x1c\x1d\xcc\x2a\xe1\xdb\xef\xc3\xae\x12\x8e\xf8\x35\x2c\x2b\x4b\xf7\xfe\x8b\xe3\xea\xcb\x28\xb9\xe7\xed\x1d\x97\xeb\x4b\xe5\xf0\x3d\xc4\xcf\x32\x5b\x47\x8f\xa1\xd3\x9b\x5a\xf6\x67\xc2\xbd\xa9\xe5\x5d\x9b\x5a\x8c\x8b\x76\x9c\x61\x41\x98\x6a\x10\xa9\xab\xd7\x09\xbc\x1e\x62\x2e\x38\xa9\x03\x1a\x40\x5a\xa2\x45\xf6\x42\xf6\x57\xd5\x97\x65\x7b\xb1\x82\x41\x90\x09\x79\xfc\xcf\xe2\x6f\x2f\xac\x97\x2a\x40\x2c\x89\x4e\x32\x58\xff\x52\xdf\xd1\xb9\x0d\x54\xda\x3e\x57\x12\xab\x92\x28\x08\x41\xd4\x2b\xe3\x99\x6e\xcc\xdb\xef\x2b\x45\xb2\x36\xe8\xd7\x8d\x6d\xaa\x6f\x7c\xb7\x03\xe4\x76\x86\x9a\x74\xbf\x20\xa7\x4c\x4b\xa3\x7c\x5a\x5c\x0c\x12\x3d\xd3\x24\x01\x44\x11\xc8\x78\x6c\xbb\x01\x7e\x73\x11\x0f\xad\x3b\xff\xa6\x71\x0f\x4d\xdc\xa1\x89\x25\x74\xb1\xa7\xee\x2a\x67\xda\x11\x1b\xa4\xb3\x82\x36\xb4\xc2\x00\xfb\x65\x70\x82\x4f\x44\xbd\x16\x1b\xd8\xf4\xec\x2f\x3d\xf7\x82\x4c\x89\x20\x2c\x22\x7b\xe8\x6d\x5f\x27\x0c\xe4\x27\x33\x49\x1b\x03\xe2\xa1\x04\xc2\xa9\x2a\x6e\xf5\xb4\x92\xa8\xdb\x67\x92\xf7\x99\xe4\x7d\x26\x79\xf5\xa8\xf7\x99\xe4\x7d\x26\x79\x63\x0e\x44\x4c\x12\xa2\x48\xab\x54\x71\x06\x8f\xdf\x4a\xaa\x30\xbd\x7f\x19\x82\x85\x99\x4b\x2f\x5b\xfc\x66\x34\x0b\xb7\xe1\x7b\xa1\x59\x98\xb3\xb6\xca\xfc\x50\xfa\xb1\x21\xc4\xfa\xd5\x4d\x12\x9b\x30\x8d\x92\x5d\xe2\x0c\x5e\x7f\x97\xac\xa3\x3a\xf4\xde\x46\x81\x82\xad\x7b\x39\x4e\x52\x3b\x02\xdd\x26\x6e\x3d\x86\xef\x77\xde\xfb\xc2\x41\xdb\xe8\x7e\x5f\xf9\xe8\xc6\x49\x29\xfb\x62\xb1\xf9\x82\x78\x64\x6f\xbd\x79\xe3\x5c\x89\x1a\x33\x7c\xb7\xd3\xed\x8d\x55\xbd\xb1\xaa\x37\x56\xf5\xc6\xaa\xde\x58\x85\x7a\x63\xd5\xda\xc6\xaa\x2f\x48\xa6\xea\x0d\x57\xbd\x58\xb5\xbb\xe9\xee\xab\x96\xb9\x4f\xd6\xba\xce\x28\xe9\x45\x0e\xd5\xca\xc8\x7b\x3b\xed\x5f\x56\x84\xdc\xdf\xb8\x11\xbc\x1f\x7e\x25\x5f\x9a\x25\x6d\x13\x58\xec\x76\xf4\x8b\x8d\x2b\xee\x4b\x87\x36\xae\x55\x1f\xf6\xbc\x64\x71\xfa\xb0\xe7\x3e\xec\x79\xef\xc2\x9e\x77\xae\xac\x64\x5c\x2e\x03\x24\x32\xa5\xb3\x96\xe6\x3f\xbb\x3b\x1b\x12\x8d\x80\x14\x0c\xca\x71\x4c\xb2\x84\x2f\xc0\x92\xb2\xe4\x3a\x77\x5d\xdc\xd4\x24\xea\x7d\xbf\xd1\xdd\xc8\x5f\x4b\xe7\xd8\x17\x99\xb4\x98\xf7\x5e\x48\xa1\xc7\xff\xac\xa4\xf3\x77\xc2\xcb\x64\x88\x7c\xa6\x12\x6e\xa5\xd5\x84\x3d\x62\xcd\x4f\x82\xd2\x85\xf6\x1e\x9c\xe4\x2a\xc8\xdd\x93\x5a\xb0\xca\x88\x50\x8b\xe0\x4d\x92\x66\x6a\xf1\x5f\x23\x46\x95\xf7\xb0\xd1\x19\xe3\xc2\x70\x35\xfd\xf1\x1c\xb3\x38\x21\x42\x5f\xaa\xae\x9d\x08\x33\xc6\x15\x88\x1b\x30\x83\x18\x3d\x51\x6c\x84\x93\xc1\xcd\x79\x67\x3f\xf3\x3b\x3a\x5d\xaf\x5d\xac\x6e\xc5\x5d\xf7\x29\xe1\x13\xa8\x60\x99\x97\x75\x7a\xdd\x40\xef\x19\x2d\xed\xdc\x5b\x31\x04\x85\xe5\x63\x15\x38\xa4\x9c\x85\x3e\x5e\x0a\x25\xb2\xe2\xdd\x12\xc6\xfc\xf2\x57\x2b\x70\x23\xe5\x67\x16\x80\x04\x1e\xc3\x90\xab\xe3\x70\x3f\x86\x1d\xba\xdf\x8a\x96\xdd\x2f\xae\x74\x37\xfc\x28\x88\x12\x8b\x31\x56\x4a\x33\x99\x5d\x62\x9c\xdc\x63\xf9\xd8\x19\xe3\xa4\xf4\xf2\x9e\xb3\x9c\x12\xc6\x49\x79\xe0\x2f\xce\x72\x3a\x52\xe7\x0a\xce\xf4\xfe\xf2\xe3\xbb\x9e\xb5\x35\x26\xfe\x5b\xc9\x95\xef\xc6\x7b\x56\x99\x69\xdf\x63\xde\xfc\x32\x66\xba\x37\x23\xac\xf0\xf3\x2f\xf1\xe4\x96\x6f\xa7\xfe\x88\x2e\x5b\xa3\x2f\xae\x10\x6e\x45\xe8\x58\x31\xb7\x77\x52\x10\xb7\x2a\x37\xed\x7a\x54\x2f\x63\xe6\x0e\x76\x63\x9d\x18\xa0\xf3\x32\x5a\xb9\x3f\x43\x2e\x2a\xa8\x28\x3d\x3b\x87\x44\x6b\x2a\xc3\x84\xf8\x88\x0b\x23\x79\xc5\xf6\xcc\x1a\xb3\x9d\x01\xf3\x3d\x41\x03\x14\xdb\xda\xfc\x82\x64\x82\x48\xc2\x94\x51\xb5\x4d\xbd\x2b\x57\xde\x9f\x32\x6b\x21\x3a\xc3\x0a\x9f\x62\x85\x13\x3e\x3b\x42\x03\x5f\xd8\x9f\x4a\x84\x13\xc9\x11\x76\x84\x43\x62\xd7\x04\x66\xb1\x63\x0f\x18\x45\x3c\xcd\x68\xe2\x91\xda\xbd\x15\x9f\xb2\x98\x3e\xd1\x38\xc7\x89\x47\xc6\x1e\xb1\xe1\x13\x61\x2a\x07\x15\x0e\x27\x09\xb2\xdd\xba\x17\x02\xfd\xdc\x8d\x52\xd2\x94\x26\x58\x20\xc5\xed\x68\xaf\x6d\x5b\xe8\x7e\x4e\xfc\x58\x1d\x0a\x38\x4a\xf1\x23\x91\x88\x2a\x94\x71\x29\xe9\x24\x29\x8e\xf1\xc3\x39\x82\x71\x9f\x5e\x9c\x83\x69\x34\x52\x88\x1b\x3e\xe8\x3a\xb7\x7e\x02\xd7\x63\x8a\x19\x23\xd0\x31\x57\x73\x22\x6c\xf7\xf6\xe5\xb7\xb6\x72\xbe\x35\x46\x74\xbb\xc5\x34\x1c\xd9\xdb\x29\x9d\x9d\x35\xce\xae\xea\x66\x37\x5d\xb3\x5d\xd1\x7c\x01\x2f\x6d\x77\x6d\xf0\x82\xca\xb2\x3a\xf8\x2e\x5c\xb6\xa5\x11\xbf\x06\x3e\xda\x6f\x54\x11\xec\xb5\xc0\x17\x59\xb7\x2f\x55\x05\xdc\x73\xfd\xaf\x47\x76\xeb\x51\xec\xfb\x00\x8c\x1d\x2e\x4e\x1f\x80\xd1\x07\x60\x7c\xb1\x01\x18\xed\xda\x04\x8d\xb7\x4e\xd7\x5b\xb3\x82\x94\x37\x0a\x88\x5f\x40\x94\xc2\xf2\xb1\x6b\x4d\x29\x2d\x2a\x9f\xc7\xef\x42\xaa\x6f\x9c\xf0\x6b\x48\xf7\x7d\x9d\xa2\x9d\xd6\x29\xda\xbb\x69\xf7\x82\x5f\x2f\xf8\xf5\xb2\x4d\xc7\x09\xf7\xb2\xcd\xfe\xca\x36\x6f\xa5\xb0\x7c\x49\x10\xba\x5a\x78\x2a\x65\xc6\x2c\x0d\xb0\x35\x70\x34\xe0\x1e\xc8\xb3\x84\xe3\x78\x55\x10\xce\x2f\xa8\x90\x6b\x96\x88\x66\xa6\x5d\xfd\xc1\x9e\x4b\x66\xb5\xf8\x1b\x33\xf2\xdf\x42\x4c\x6d\xeb\xd4\xdf\x34\xac\x16\xe8\x17\x82\xc9\x4a\x41\x69\x2f\xa5\x85\x54\x69\xba\x93\xc2\x21\xff\xb8\xe7\x54\xed\xb7\xf4\x35\xd4\x8b\x2f\xd8\x41\xd0\x3b\x01\x7e\x9b\x85\xcf\xf7\x46\x6a\xed\x55\xbb\x3e\xab\xb2\x37\xea\xf7\x8a\x6f\xaf\xf8\xee\x7c\x19\xf7\x49\xf1\x7d\x43\x89\xda\xa4\x89\xbc\x48\x19\xc3\xcd\x64\xeb\x5e\xb4\xee\x45\xeb\x5e\xb4\xfe\x62\x45\xeb\xfd\x58\xe1\x5e\xae\xee\xe5\xea\x5e\xae\xee\xe5\xea\x5e\xae\xde\xf9\x32\xf6\x72\x75\x45\xae\x86\xbf\x5c\x9a\xf4\xba\x42\x76\x67\xe1\xba\x43\x4e\xf4\x7b\x91\xac\x7b\xa9\xba\x97\xaa\xf7\x5b\xaa\xde\x9b\x09\x7d\x79\x89\x90\x7d\x2a\x61\x9f\x4a\xd8\xa7\x12\xbe\x45\x2a\xa1\xe3\x25\xcb\x24\x94\xba\x60\xf1\x63\x8d\x03\xed\xad\x6c\x51\x8c\x76\xd3\xf0\x8e\x5d\x2d\xb5\x03\x9a\xdf\xa4\xd2\x54\xe9\x37\xd7\xd0\x1e\xd5\x9f\x3a\x70\xd2\x82\x66\x14\x6e\x7c\xab\x11\xc2\x7e\xb2\x6f\xbe\x2f\x30\xf0\xfa\xa8\xfb\xfa\x53\x28\xd8\xb5\xbe\xfe\xd4\x0b\xce\xdb\x1d\xae\x15\x33\x77\x34\x6a\x6c\xbc\xef\x74\xda\x6f\x0e\x2e\xd7\x7e\xd2\xdf\x34\x5c\xae\xf1\x26\xa9\x25\xef\x1c\xff\xb3\xf1\xa2\x78\x83\xb2\x5b\x6b\xdf\x0e\x9f\x88\xfa\x52\xae\x86\xbe\xec\x56\x5f\x1f\x62\x47\xd3\xdd\x88\xf5\xbf\xdb\xd9\xf6\x45\xc6\xfa\x22\x63\x7d\x91\xb1\xbe\xc8\x58\x5f\x64\x0c\xfd\xc6\x8b\x8c\xad\x2d\x3e\x9a\x71\x7c\x29\x12\x64\x5f\x64\xac\x17\x22\x77\x37\xdd\xdf\x96\x10\xb9\x87\x16\x84\xbd\xa8\xa6\xe6\x2d\x08\x6f\x8e\xfb\xe1\x46\xd2\x15\xfb\xc3\x2d\x68\x8f\xff\x61\xff\xaf\xc7\xff\xe8\xf1\x3f\x5a\x66\xdd\x07\xb3\xf6\xf8\x1f\xa8\x0f\xd7\xec\xc3\x35\xf7\x39\x5c\xb3\xc3\x36\xf6\xf8\x1f\x1d\xc5\xb9\x17\xc2\x00\x71\x32\xd7\x5a\x38\x20\x3f\xd5\x15\x8d\xbd\x95\xd2\xdc\x58\x7f\x3b\x38\x20\x8d\xd3\xde\x0b\x95\xe4\x15\x71\x40\x9a\xe8\xba\xb3\x02\xf2\x3e\xf0\x40\xdc\x68\xfb\xc4\xc5\x3e\xc4\x7a\xff\x43\xac\xf7\x2e\x71\x71\x6f\x24\xd9\x5e\xdd\xeb\x73\x17\xfb\xdc\xc5\x5e\x19\xee\x95\xe1\x9d\x2f\xe3\x3e\x29\xc3\x6f\x2c\x61\xbf\x20\x2e\xc8\x76\xb2\x76\x2f\x6a\x9b\xf7\x7a\x51\xbb\x17\xb5\xbf\x50\x51\x7b\x3f\x56\xb8\x97\xb3\x7b\x39\xbb\x97\xb3\x7b\x39\xbb\x97\xb3\x77\xbe\x8c\xbd\x9c\xfd\x6a\x38\x21\x4d\xc2\x76\xc7\x7c\x9b\xf7\x24\x69\xf7\x52\x76\x2f\x65\xef\xb7\x94\xbd\x37\x13\xea\x31\x43\x7a\xcc\x90\x1e\x33\xa4\xc7\x0c\xd9\x48\xbe\xf9\x37\x7b\x2c\x3f\x04\x37\xb1\xbf\xb2\x3f\x7c\x97\xf0\xc9\xfd\x22\x23\xfa\xbf\x67\x34\x25\x4c\x82\x34\x4a\xd5\x22\x94\x67\x5a\x56\xbe\xbe\xe6\x1f\xee\xce\xaf\x3e\x5d\x84\xd9\x34\x1f\x2e\x1f\x2e\xee\xcf\x6f\x06\xb7\x7e\x5d\xfc\xac\xc2\xb5\xb0\xdf\x95\x44\x32\x4b\xf2\xb7\x44\xeb\x9e\x70\x6a\xee\x14\x56\xb9\xdc\x6c\x64\xb7\xc3\xbb\xe1\xed\x8f\x90\x0d\x34\x3e\x3b\xbf\x1b\x7c\x77\x51\x22\x88\xd2\xf3\xc1\xe9\x5f\x1f\xce\x6f\xdb\x9f\x0f\xff\xfb\xfc\xee\xfe\xae\xed\xe9\xed\xf0\x62\x38\xb8\x6b\xff\xfa\xe3\xe0\xfc\xe2\xe1\x76\xb8\x74\x3d\x96\x8e\x76\xb9\x12\x22\x61\x91\x20\xce\x1f\x45\x96\x6b\x88\x62\x0d\x91\x17\x1f\x1d\x3b\x6c\xea\xeb\x04\x3d\x58\x9d\x9e\xda\xc6\x0d\x83\x0d\x1a\x32\xca\x48\x4c\x25\x9e\x24\x24\xae\xb5\xe4\xd6\xb0\xad\x25\x5c\x1a\xd4\xb3\xd6\x9e\xbd\xc8\xa9\x79\x5e\x64\x78\x01\x82\x1c\x45\x45\x58\xdc\xd0\x87\xd9\x87\xd6\x1e\x98\xe6\x5d\xf4\x89\x94\x7a\x8a\x72\x21\x08\x53\xc9\x02\x91\xcf\x54\x2a\x59\x6b\xd4\x6d\x5f\x5b\xb3\xf6\x4e\xf5\x0d\xce\xb1\x44\x13\x42\x58\x79\xfc\x82\x24\x04\xcb\x86\x31\xdb\xdd\xef\xb6\x2c\x7e\xaf\xac\x35\xc6\x5c\x46\x53\x4c\x93\x5c\x90\xca\x69\xe1\x69\x86\x05\x95\x9c\x0d\x3f\xeb\xbb\x4c\x1f\xe4\x6b\xf8\x9c\x8b\xcd\x4e\xcc\xf0\xaf\x21\x05\x5f\x95\xff\xf9\xe9\xbe\xfc\xaf\xd2\x99\xbf\xb8\x2f\xff\x6b\x39\xad\x07\x0d\x57\x29\xfb\x10\x7d\xba\x3f\x41\x9f\x20\xc4\x49\xa0\xfb\x39\x36\x14\x7b\x71\x7f\x82\x2e\x88\x94\xf0\x4b\xf1\xb1\xa2\x2a\x81\xb9\x7d\x47\x19\x16\x0b\xe4\xa6\x6f\x12\x5d\x71\x34\x47\xc4\x2f\x4d\x75\xf1\xd8\xdf\x73\x06\xaa\x7b\xb1\x7a\x17\x7c\x46\x23\x9c\x6c\xb7\x88\x83\xab\x12\x1f\xb8\xbe\x5d\xba\x14\xe1\xdb\xf5\xb5\x18\x5c\x9d\x41\x12\xa9\x1b\x6a\xc3\xcc\xaf\x88\xd4\x44\x12\x71\x16\x5b\x2f\x8d\xbe\xfd\x17\x81\x50\xff\x77\x0e\x89\xb8\xb9\xa4\x6c\xa6\x5b\x44\xc7\xe8\xfa\x76\xc4\xae\x45\x6c\x0c\xa1\x44\x4b\xc3\x86\xe6\xa8\x44\x8c\x2b\x44\xd3\x8c\x0b\x85\x99\xd2\x8a\x00\x88\x01\x76\x45\x0c\x07\x38\xe5\x69\x9a\x2b\xac\x0f\x5a\x6d\x51\x99\x31\x87\xdc\x11\x75\x1e\x83\x6b\xa5\x61\x0d\x8d\x9c\x50\xcc\x25\x13\xba\x7d\x2d\xa3\x94\x75\x68\x1a\xd7\x54\x59\xd7\x04\x16\x02\x97\xa5\x89\x0f\x54\x91\xb4\xfa\x7e\xc7\x20\xcf\x7f\x35\x1a\x08\x4e\x4d\x52\x05\x11\x03\x11\xcd\xa9\x22\x91\xd2\x47\x70\x23\x9a\x78\xb8\xfa\xe1\xea\xfa\xa7\x50\x82\xf8\x30\xb8\x3c\xfb\xf3\x7f\x94\x7e\xb8\xbd\xac\xfd\x30\xfe\xf1\xcf\xb5\x5f\xfe\x7f\x4b\xe9\xa9\xda\x53\x4d\xcf\x0f\xe6\x72\x08\x22\x35\xd8\x84\xdd\x54\x11\x4d\xf1\x8c\x20\x99\x67\x9a\x02\xe4\x51\x79\x7f\xb5\x48\x79\xc1\x71\x4c\xd9\xcc\x64\x80\x5e\x50\x45\x04\x4e\x2e\x71\xf6\xd1\xd9\xaf\x37\x58\x9d\xff\x7b\x57\xca\xd7\xfd\xf0\xf3\xe0\x32\xcc\xf8\xfd\x70\x73\x7b\x7d\x7f\xbd\x74\xd6\xa5\x16\xea\xc7\x48\x3f\x3e\x81\xff\x45\xc7\x48\xb7\xee\x25\xdf\x94\x28\xac\x35\x02\xf4\xb5\x49\x9a\xf3\x89\x34\x94\x25\x70\x6a\x32\x41\x53\x0a\x57\x8a\xb1\xe0\x7d\x63\x84\x6b\xaf\x3d\xf8\x73\x63\x3e\x00\x6d\xd9\x5d\xca\x2c\xc6\x22\x46\x7f\x97\xd5\xf4\x71\x30\x1c\x9b\x1f\x48\x8c\x0e\xd1\x5c\xa9\x4c\x9e\x1c\x1f\x3f\x3f\x3f\x1f\xe9\xb7\x8f\xb8\x98\x1d\xeb\x3f\x0e\x09\x3b\x9a\xab\x34\x31\xe9\xf2\x7a\x15\x4e\xd0\x8d\xe0\xfa\x0a\x01\x05\x9d\x08\x8a\x13\xfa\x2b\x89\xd1\xc4\xf0\x3f\x3e\x45\xbf\x44\x5c\x90\xa3\x62\x63\xac\x51\xc9\xde\x23\xd6\xf0\x74\xac\x5f\x6a\x60\x26\xd5\xfd\x44\x31\x89\x68\x6c\xc5\x0c\xc2\x22\x0e\x96\x47\xe3\xab\xd0\xed\xb9\x4c\x43\xad\xd1\x64\xb9\x2a\x96\x33\x50\x56\x70\x4c\x82\x6c\x77\xc5\xcb\x04\xa7\x15\x9f\x73\xa3\xb6\xe6\x5a\x45\xd7\x77\x2b\x86\x5b\xd5\xbd\x9a\xe9\x09\x47\x3c\x41\x93\x7c\x3a\x25\x22\x74\x48\x1f\x68\x6d\x86\x4a\x24\x48\xc4\xd3\x14\x24\x06\xfd\x55\x2e\x0d\x55\xc3\x8a\xd9\xd1\x1e\x8d\x18\xec\xbf\x56\x73\x80\x02\x62\x0e\xac\x8e\x11\x12\x23\xcc\x16\xa6\x9b\x49\x3e\x0d\xdb\x37\x30\x14\x38\x46\x54\x8d\xd8\x20\x49\x90\x20\x29\x57\x24\xc8\xa1\x04\xe7\x59\x79\xc1\x81\x45\x0a\x92\x25\x38\x22\xb1\xa1\x87\x84\x47\x38\x41\x53\x9a\x10\xb9\x90\x8a\xa4\x61\x03\x5f\x83\xad\x46\xaf\x19\x95\x28\xe6\xcf\x2c\xe1\xd8\xce\xa3\xfa\xd9\x37\xe5\xd3\x38\x74\x10\x01\x43\x21\xb8\x80\xff\xf9\x81\xb2\x78\x67\x1c\xea\xe1\x6e\x78\x1b\xfe\xfb\xee\xe7\xbb\xfb\xe1\xe5\x7a\xdc\xc7\x53\x16\x0c\x0f\x74\xf8\x13\x74\x67\x16\x81\x0b\x2d\x11\x89\x96\x49\x5d\x5a\x52\x2a\x7e\xe0\xf1\x86\xdc\xf7\x72\x70\xf5\x30\x28\x71\x94\xbb\xd3\xef\x87\x67\x0f\x15\x7d\xc0\xce\xaf\x24\xc3\x1b\xf5\x2f\xfc\xed\xf4\xfb\xf3\x8b\xb3\x71\x83\xc2\xf8\xe1\x76\x78\x7a\xfd\xe3\xf0\xb6\xd0\xed\x1a\x97\xa8\x32\x98\x2a\xb3\xba\x37\x4c\x69\xce\x63\x34\x59\x34\x03\x42\x68\xc9\x39\x01\x5f\x6c\x01\x89\x62\x5a\x3d\x01\xde\xe4\xb0\x39\x8a\x2f\x52\x1e\x93\x03\xfb\x0e\x20\x69\x18\xe3\x8a\x91\x98\x9b\x1b\xd6\xbd\x63\x16\x18\x2a\x0c\xc8\x85\x5f\xb8\x13\x34\x40\x52\xbf\x98\xeb\x43\x2d\xe8\x6c\x06\x86\xc3\xca\x50\x4d\x6b\xf6\x53\x58\x5e\xf8\xce\xec\x7f\x26\x38\x9c\x73\xdd\xad\xb5\x38\x7b\xab\x84\xf9\x10\x50\x57\xca\x2d\x0a\x0c\x06\x87\x86\xa1\xb9\xcd\xd2\x8b\xd0\xba\x5e\xe6\x3c\x1a\x7b\x91\x3e\x5c\xc0\xb6\xa4\xb1\x77\x66\x82\x3c\x51\x9e\x07\x9f\x5a\x60\x8f\xd2\x8e\x37\x36\x5f\x2c\x00\x2c\x9b\x31\x8a\x54\x9a\xf1\xe4\xd1\xd8\x82\x66\x61\x4f\xd0\xc2\x54\xf0\xb4\xa1\x8d\xf2\x31\x39\xbf\xbe\x53\x02\x2b\x32\x5b\x9c\x59\x96\xb1\xf9\xf1\x38\xbb\xfe\xe9\xea\xe2\x7a\x70\x36\x1e\x0e\x3e\x95\x4f\xbc\x7f\x72\x77\x7f\x3b\x1c\x5c\x96\x1f\x8d\xaf\xae\xef\xc7\xee\x8d\xa5\x24\xdf\xd2\x41\xfd\x9e\x2e\xbf\x78\x82\x34\xcb\x05\xd6\xe8\x00\xef\x02\xfe\x38\x21\x53\x2e\x0c\x9f\x4f\x5d\xe8\x82\x15\x61\xdc\xda\x5a\x5d\xac\x32\x8b\x13\xb0\x8c\x35\x35\x69\xac\xde\x4a\x10\x9c\xc2\x3d\x81\x19\x1a\xb2\xf8\xf0\x7a\x7a\x78\x67\x7e\x4c\xb1\x78\x24\xc2\x7f\xfa\x2c\xa8\x52\x84\x95\x54\x3a\xec\x86\xec\x95\xc4\xa2\x83\x23\x74\xab\xf9\xbe\x7e\xdf\x5f\x6a\x9a\xd8\x63\xa2\x30\x4d\xa4\x1d\x6c\x69\x5d\x4f\xd0\x05\x16\xb3\xc2\x0e\xf7\x35\x9f\x4e\x4d\x63\xdf\x98\x61\xe8\x3b\xac\x34\x8b\x06\xde\xab\x49\xc3\xdd\x8b\xd0\x9f\x7d\xd9\xcb\xc3\x75\xaa\x7a\xc8\xb6\xa3\xa9\x87\x1b\x58\x71\xa3\xb1\x97\x74\x43\xfb\xa4\x81\xd6\x60\xe2\xe6\xf1\xf2\x4b\xa6\xb9\xed\x3a\x39\x95\x5f\x6c\x20\x27\x93\x4b\xa5\x77\x7e\xaa\xb5\xcd\x06\x5a\x22\x9f\xa9\x35\x18\x84\xe3\xae\x90\x50\xd1\x0c\x98\x57\x71\x96\x11\x2c\x64\xd3\x6e\x97\xc5\xc0\x96\xbd\x37\x3d\x85\x7d\xd8\x4d\x76\xfd\x1c\x20\xce\xc0\xe0\xe0\x85\x88\x0a\x45\x76\xa0\x01\xd3\x56\x8d\x02\x6e\x00\x6d\xe9\xda\x22\x1b\x5d\x52\xa9\x95\x46\xf3\xe3\x77\x16\x72\x69\x33\x82\xf8\x38\x38\xbf\xa8\x08\x17\xe3\xb3\xe1\xc7\xc1\xc3\xc5\x72\x33\x61\xe9\xbb\xea\x16\xa3\x43\xa4\x9f\x97\xfd\xe6\x74\x6a\xee\x0c\x07\x1c\x65\x54\x5a\xc2\xc0\x68\x65\xa1\x6a\x8c\xbd\x3a\x26\x59\xc2\x17\x29\x61\x60\xe2\x29\xdd\x84\x7a\x3d\xa7\x98\xda\xab\x25\x18\x2c\x58\x71\xac\xd9\x0d\xae\xb1\x43\x87\x56\x45\x62\x7f\xf3\x96\xc1\xaa\x2a\xac\xfb\xc6\x78\xcf\xec\x7f\xee\x14\x56\x1b\x9e\xb1\xc1\xe9\xfd\xf9\x8f\xc3\xb2\x7e\x78\xfa\xfd\xf9\x8f\x4d\x52\xcd\xf8\xd3\xf0\x6a\x78\x3b\xb8\x5f\x21\x9c\x54\x9a\x6c\x12\x4e\xa4\x1e\x70\xd5\x7b\x4a\xa5\x8f\x08\x8a\x0c\xe4\x15\xa2\x4a\xa2\x27\x2a\xe9\x84\x02\x40\x98\xf5\x44\x3e\x9c\x03\x67\x7d\xc2\x09\x8d\xa9\x5a\x38\xf1\xc5\xf4\x5b\xde\x47\xcd\x49\x6d\xfb\xc6\xec\x10\xfa\x27\xc1\xca\x67\x36\xc7\x4d\xfa\x04\x81\x6e\xfb\x04\x4a\x5b\xf0\x19\xd3\x82\x34\x9b\x11\x61\x86\x03\xde\x97\x70\x2c\xc1\x73\x3d\xaa\x50\x58\x29\x56\xcd\x0b\xad\x33\xc2\x88\x00\x10\x38\xdf\x89\x11\xa4\x04\x61\x5f\x69\x99\x2b\x4b\x68\x44\x55\xb2\x40\x11\xd8\xb0\xc0\x9c\x99\x62\x86\x67\x56\x38\x00\x35\xa7\x42\x12\x7f\x35\x28\x6a\xd7\x53\x6b\xda\xbf\xa7\x64\xc3\x63\xf6\x70\x75\x36\xfc\x78\x7e\x55\x26\x81\xef\xcf\x3f\x95\x44\xd8\xcb\xe1\xd9\xf9\x43\xe9\x36\xd7\x92\xec\x72\xb9\xbe\xda\x6c\xc3\x51\xf4\x2f\x9d\xa0\x33\xf3\xe9\x89\x5e\xdc\x06\x88\x38\xaf\xfc\x56\xd6\xe1\xd6\x85\xe4\xb9\x3f\x86\x4c\x89\x46\xbf\x44\x57\x13\x92\xf5\x41\x96\x6c\x48\xcd\xa1\x0a\xb5\xbe\xaf\xaa\x4e\xe5\xea\x94\xdd\x8b\x10\x74\x79\x54\x58\x96\xc2\x18\x06\x30\x1a\xb4\x19\xb1\x1a\xdc\x5a\x05\xc3\xfe\x11\x5c\xd4\x69\x2e\x95\x71\x25\x02\x71\xa2\xc7\xbf\x48\xbd\xa0\xe0\x6a\x3c\x42\x77\x84\x8c\x98\xb3\x1e\xcc\xa8\x9a\xe7\x93\xa3\x88\xa7\xc7\x05\x3e\xe1\x31\xce\x68\x8a\xb5\x24\x4d\xc4\xe2\x78\x92\xf0\xc9\x71\x8a\xa5\x22\xe2\x38\x7b\x9c\x41\x04\x8c\x73\xa7\x1e\xfb\x66\x67\xfc\xdf\x2f\xfe\xf4\xed\xe1\xc5\x5f\xbe\xfd\x50\xb7\x90\xb5\xed\xff\x90\x45\x38\x93\x79\x62\x23\xe6\x44\xb8\x36\xee\xc8\xe7\x64\xd5\x7e\x5f\x95\xb7\x6b\x3b\xfd\xf5\xf4\xe6\xa1\x64\xb1\x2e\xff\xf3\x72\x78\x79\x7d\xfb\x73\x89\x53\xde\x5f\xdf\x0e\x3e\x95\x18\xea\xf0\xe6\xfb\xe1\xe5\xf0\x76\x70\x31\x76\x0f\xb7\xb1\xbd\xfd\xc0\xf8\x33\x2b\x2f\x8d\x74\x1c\xb0\xd6\xd3\x09\xfa\xc8\x05\xfa\xc1\xef\xe4\xe1\x04\x4b\xb8\x62\xdc\x9d\x25\x0f\x50\xc6\x63\x60\xbc\x88\x64\x73\x92\x12\x81\x13\x6b\x33\x90\x8a\x0b\x3c\x33\x37\xbd\x8c\x04\x56\xd1\x1c\xc9\x0c\x47\xe4\x00\x45\x40\x0d\xb3\x03\xd8\x14\x50\xb5\xf8\xac\x6a\xe7\xbb\xcd\x99\xa2\x29\x71\x2a\xb8\xfd\xe7\xbd\xd9\x8c\x0d\x36\xe7\xfa\xfe\xfb\xb2\xb0\xf7\xf1\xe2\xe7\xfb\xe1\xf8\xee\xec\x87\xa5\xeb\x69\x3e\x2b\x8d\xec\x0e\x02\x90\x4e\x79\x92\xa7\x2c\xfc\x7b\xf3\xb1\x9d\x5f\xdd\x0f\x3f\x55\x47\x77\x3d\xb8\x2f\x53\xc6\x6d\x39\xc0\xed\xc3\x77\xd7\xd7\x17\xc3\x92\x4b\xf8\xc3\xd9\xe0\x7e\x78\x7f\x7e\x59\xa2\x9f\xb3\x87\x5b\x83\x46\xb8\x6c\x9a\x6e\x04\x0d\x13\xd5\xd3\x0a\xa7\xb9\x6b\x56\xd8\x89\x13\x0d\x6c\x40\xb9\x39\xcb\x87\x01\xdc\x8e\x09\x07\x03\xab\xce\xa1\x37\xa9\x46\x66\xa4\x8d\xec\x50\x95\xb7\x09\xb5\xb3\xe3\xa5\x1b\xbd\x8c\x2b\xdf\xfb\x21\x18\x28\x50\xa3\x6c\xe3\x24\xe1\xcf\x26\x94\x37\xa5\xfa\x56\xb6\xc0\x68\xfa\x15\x59\x78\x08\x8f\x1a\x38\x5e\x79\x5b\x48\x24\x88\xba\xe4\x39\x53\x9b\x93\xdc\xe0\xaa\xc4\x77\x86\x57\x3f\x8e\x7f\x1c\x94\x29\xf0\xfc\x62\x39\xab\x09\x9b\x68\xb8\x8a\x07\x57\x3f\xfb\x4b\x18\x02\xbe\x0f\xbc\x86\x6a\x64\xd7\x28\xa1\x5a\xec\x8d\xb0\xd6\x5e\x13\x90\x68\x10\xa1\x60\x72\x48\xf5\xe4\x20\xc0\x34\x33\xfe\x24\xc3\x9f\xcc\x20\x4f\xdc\x1f\x95\xf6\x24\xac\x0b\x58\x53\x5d\x3c\x3d\xb4\x63\xb5\x6a\x86\x08\x7b\xa2\x82\x03\x9e\x2d\x7a\xc2\x82\x6a\x69\xdc\xb4\xac\xe7\x7a\x02\xff\xbb\x5e\x9b\x60\x18\xad\x30\xae\x3b\x2e\xd4\x99\x0f\xe4\xdd\xcc\x1a\xd2\x14\xd0\x5a\x0f\x65\x6d\x36\x74\xd4\xbf\x6d\xd8\x9c\x2d\x03\x7e\xcb\x13\xfe\x47\x72\x46\x71\xa2\x19\xc0\xee\xe4\xc5\xc1\xd5\xdd\x79\x59\x7e\x2c\xab\x19\x01\x5f\xde\x58\x5e\x04\x43\xa5\x19\xb9\x53\x26\xee\xfe\x7a\x61\xb4\x0b\x00\x3d\x36\xe7\x36\x50\x2c\x40\x00\x72\x28\x28\x19\x16\xb2\xf2\x85\x44\x00\x84\x56\x04\x5c\xe9\x3b\x0b\xc2\x99\x9e\x38\x8d\x47\x8c\x7c\xce\x08\x93\x10\x1c\x60\xee\xb3\xc2\xd7\x2e\x8f\xd0\xf9\x14\x58\x82\x7e\x9d\xa1\x9c\x59\x07\x98\xbe\x70\xcd\x20\x0f\xb4\x28\x6b\x87\xe0\x35\x44\x30\xbc\x30\xe2\x82\xa5\x8a\xc1\x8f\xd8\x4f\xde\x89\x06\x8f\xa6\x5c\x33\x20\xbd\x8b\xb6\xbd\x13\x84\x99\xa4\x07\x48\x2b\x2c\xd5\x3d\x85\xd4\x01\xad\x50\xda\x10\x2e\xcd\x69\xec\x9f\xaf\x7f\x0d\xd4\xe2\x84\xc3\xcb\xa0\xf9\x2e\xa8\x5c\x05\x2d\xa2\x71\x62\x3c\x26\xe3\xee\x77\x42\xc4\x05\xb1\x7e\x96\xb5\xaf\x81\x55\x8c\xfd\x1e\xcb\xc7\x9a\xef\xe1\x9c\x49\x85\x59\x44\x4e\x13\x2c\x37\x0c\x42\x72\x36\x8e\x83\xb2\xc4\x71\x7b\xfb\x70\x73\x7f\xfe\xdd\x0a\x2e\x5f\xfd\xb8\x1e\x06\x14\x25\xb9\x73\xcf\x4d\x04\xc7\x31\xd2\xec\x73\xc6\x8d\x2b\xd0\x0a\xfe\x05\xf4\xb7\xc9\xeb\xf1\x01\x95\x25\xd8\xf1\x22\x1d\xc1\xda\x39\x42\x57\x02\xb5\x0b\x81\x22\xbd\x12\x28\x30\x79\xb8\xad\x06\xcf\xa2\x29\x48\x62\xad\x5b\x59\x82\xd5\x94\x8b\xd4\x70\xf9\xd2\xa4\x4d\xe3\xcb\x1b\xa5\x4c\x11\x21\xf2\x4c\x51\x87\xe5\x5e\x95\x52\xa1\xc2\x3b\x9f\x5d\x12\x29\xf1\x8c\x6c\xe3\x80\x6e\x52\x1e\xee\x7e\x0c\xff\x09\x0e\xe6\x2e\xb2\x7f\x69\x84\x2e\xf2\xdd\xd1\xd3\x35\xfb\x68\x02\x79\x6e\x78\x42\xa3\x0d\x03\xee\x3e\x0e\xce\x2f\xc6\xe7\x97\x5a\x89\x1f\xdc\x0f\x2f\x4a\xa2\x04\x3c\x1b\x7c\xbc\x1f\xde\x5a\x10\xeb\xc1\x77\x17\xc3\xf1\xd5\xf5\xd9\xf0\x6e\x7c\x7a\x7d\x79\x73\x31\x5c\x11\x99\xd3\xda\x78\xdd\xba\x5a\x7d\xf5\xa4\xf6\x0b\xec\xb0\xe6\x65\xa1\xbd\x0c\xb2\xc6\x30\x4d\xc0\x09\xce\x8d\x33\x1c\x23\xc6\x63\x02\x3f\x4b\x67\x9d\xf1\xc8\xd1\xe8\x5c\x7d\x95\x24\x08\xe7\x8a\xa7\x18\xbc\x36\xc9\x62\xc4\xf0\x44\xb3\x56\x9c\x24\x41\x78\x97\xc8\x19\xd3\x2c\x56\x37\x66\x20\xda\xa3\x84\x68\x76\x9e\x05\xc9\x7e\xd6\x6f\x30\xa5\x0c\x22\x6d\x53\x2c\x1e\x8d\x9b\xa9\xe8\xb2\x38\x14\x12\x61\x39\x62\x7a\x5c\xc4\x1a\x86\xba\xac\xf0\x49\xa7\xb7\x5a\x57\x27\xc5\x8f\x44\xaf\x4a\x9a\x47\x73\x94\x09\x3e\x13\x44\x4a\x6b\x5b\x8e\x30\x33\x01\x08\xf6\x75\x7d\x0d\x8d\x18\xe3\x7a\x29\x9c\x09\x3b\x26\x19\x61\x31\x61\x11\x35\x69\x7d\xe0\xbb\xf7\xa6\xcd\x99\xc0\xd9\x1c\x49\x0e\x4e\x6f\x58\x76\xb0\x5f\x99\x8f\xdc\x4d\x66\x66\x6c\x1e\x87\x16\x68\x91\x6b\x3e\x71\x0d\x72\xa2\x59\x65\xf8\xd8\x5d\x86\xce\xed\x62\xec\x80\x69\x96\x10\x65\xc0\xfa\x61\xc9\x61\x33\xf4\x5a\x97\xf6\x43\x6f\x53\xd3\x26\xe8\x0b\xdb\x8d\x19\x4b\x3b\xa2\xa3\x06\xcb\xb6\x3d\x52\xe8\x7b\xcc\xe2\x44\xb7\xe2\x7c\x18\xe5\xb3\x08\xa9\x28\x03\x4d\x35\xee\x34\x6e\x73\x8b\x46\x38\x97\xdb\x5c\xa3\x95\x5c\x4c\x63\x15\x3c\x2c\x82\x42\x80\xbc\x6d\x22\x26\xac\x6e\xa6\x59\x24\x4e\xb8\x5d\x25\xf3\x7a\x6e\xea\x3f\x21\x18\x4d\xcb\x35\x9b\x09\xca\x22\x9a\xe1\x64\x23\xdd\xaf\x12\x8c\x6f\x63\xdc\xbf\xa6\x53\x4d\x3e\xdf\xd4\xdc\xb6\x8a\x88\x14\x12\x94\xed\x30\xfd\x16\xae\x61\x49\xb2\x59\x0d\x44\x16\xd1\x24\x58\xf0\xdc\xf8\xe3\x60\x5d\x48\xdc\x70\x54\x8f\x9a\xb6\x5b\x9f\x0c\x5c\x0e\x80\xde\x60\xb3\x4d\xe4\x4f\xdb\xfa\x55\x5a\xb1\xbd\x9b\x60\x3c\x9c\xdc\x34\xb7\xd9\xb4\x03\xc1\xc3\x7f\x2d\xa3\x9d\x4b\x9c\x69\x9a\xb1\xb0\xfd\xb8\x98\xa3\x55\x92\x6c\x55\x30\x17\x3f\x13\xf8\xce\x7d\x5e\x48\xf7\xdd\x28\x96\xd0\x06\x40\xd5\x3b\x29\xc5\x10\x04\x39\xe6\x96\xc6\xa7\xb9\x96\x65\x11\x86\x28\x04\xf4\x35\x39\x9a\x1d\x21\x57\x84\xe1\x00\x0d\x6e\x6e\x86\x57\x67\x07\x88\xa8\xe8\x1b\x17\xb3\x68\x03\x96\x46\x4c\x71\x2b\xad\x2c\x5c\x01\x8d\x94\x88\x19\x29\xcd\xd9\x45\x37\x41\xa8\xf2\x8c\x4a\x65\xc3\x67\x35\x5f\x09\x4a\x9d\xd0\xb4\x2a\x66\x1b\x0a\xc9\xd5\x7c\x1b\xd2\xc0\x52\xe6\xa9\xd6\x65\xc7\x14\xa7\x63\xc1\x93\x6d\x98\xc2\x19\x4c\x05\xd4\x65\x9f\x9e\x4f\x71\x8a\x74\xb3\x36\x14\xc4\xbb\x1c\xbd\x48\xa7\x05\x23\xcd\x97\xf5\xbd\x19\xdc\x5b\xce\xfb\x60\xe3\xd1\xa8\x0b\x81\x80\xf4\xfd\x16\x56\x51\x98\x8d\xc7\xd6\x52\x3f\xc6\x51\xa4\x55\xee\x1d\x4f\x2a\xa8\x9f\xe3\x5c\x02\xb6\xa3\x17\x9b\xe6\x2a\x3a\x77\xc3\xcc\x34\x07\x83\x60\x60\x7d\xe5\x4a\x1e\xd1\xa2\xfd\x86\x7e\x27\x8b\x5a\xaf\xae\xc2\xcd\x83\xf4\x26\x15\x73\x09\x4b\x02\x3b\x29\x4d\x85\x1c\x35\x27\x0b\x34\xc7\x4f\xa4\xd4\xa5\x4b\x88\xd1\x0d\x2f\x78\x2e\x9a\x18\xdd\x88\x9d\x91\x4c\x10\x2d\xe9\x57\x1d\x28\x9e\xa6\x6f\xcb\x94\xd8\xd3\x75\x4f\xd7\xef\x9e\xae\x4f\x4d\xa1\xa4\x81\x2f\x8c\xb5\x95\x00\x67\x1a\x1b\x67\x9c\x27\xe3\x0e\x36\x91\xee\x2b\x5e\xf2\x84\x55\xca\x46\x01\x24\x00\xcf\x41\x3e\x2a\x5d\x9b\x5c\xdf\x75\x41\x8a\xad\x1d\xde\x92\x65\x70\x2e\xb3\xa0\x5e\xce\x36\xe7\xbd\xa9\x95\x65\x2d\xa1\x17\x17\x73\x4e\x8d\x7c\xe3\xdd\x65\x61\xfd\xd3\xd2\x61\x72\xa2\x08\x65\xb5\x6a\x6c\x86\x9e\xf5\x02\x1b\xb9\xe3\x1f\x39\x57\x58\x7e\x73\x34\x62\x5a\x88\x7a\x24\x0b\x63\x6e\xd5\x62\xca\xef\xb4\x2c\x7e\x28\x09\x93\x10\xee\xfd\x3b\xe3\x9e\xd3\x24\xee\xcc\xd5\x46\x35\x35\x45\xe0\x20\xe8\xda\xf7\x02\x21\xba\xb6\x51\x2b\x25\x15\x01\xd0\x20\xe7\x9b\xb9\xd8\x67\x66\xf8\x33\xa2\x20\xc5\x5a\x51\x05\x3a\x53\x6c\xaa\xcc\xd5\x86\xbe\xd2\x74\x65\xa8\x42\x70\xf0\x93\xc4\xf9\x76\x8c\x5f\xd6\xdb\x58\xc9\x19\xbd\xb6\x70\x67\x63\xde\x8f\x9d\xdd\x28\x12\xbc\x56\xba\x0d\x4b\x64\x76\x7a\x62\xd8\x81\xf3\x5f\x13\x76\xf4\x4c\x1f\x69\x46\x62\x8a\x21\x02\x5e\xff\xeb\x58\xcf\xeb\xdf\x4f\x6f\xaf\xaf\xc6\x45\x26\xcf\x7f\x8d\xd8\x20\x91\xdc\x67\x29\x20\xc6\x99\x0f\xb7\xcf\x04\x71\x22\xa1\x9d\x0b\x58\x5d\x0b\x33\xe2\x88\xb5\x8d\x20\xe6\x91\x3c\xc2\xcf\xf2\x08\xa7\xf8\x57\xce\xc0\x95\x3e\x80\x3f\x4f\x13\x9e\xc7\x3f\x61\x15\xcd\x8f\xe1\x5c\xab\x63\xf2\x44\x98\x32\x6e\x2a\xbd\x5c\x31\x24\xef\x4a\x88\xd6\xff\x77\x3d\xe6\x22\xa9\x48\x6a\x4d\x36\x22\x99\x42\xff\x8f\x20\x13\xce\x55\xf3\x25\xc5\xa7\x53\x49\xd6\xba\x90\x0a\x25\xed\xee\x1a\xfd\xe5\xcf\xdf\xfe\x41\x93\xd0\x26\x6b\x7c\x7e\x77\x3d\xd6\xdf\xff\xfb\x99\xfd\x5e\xae\xc1\xee\xae\xb3\x82\xb5\x39\xe2\x31\x81\xf3\x39\x83\xdb\x4f\x80\xf3\x02\xd8\x1b\x90\x43\xb1\x8f\x4d\xdc\xed\xac\xd4\xfa\x76\x2a\xdb\x46\x8b\x09\x2a\x76\x30\x47\x74\x88\x18\x47\xa9\x89\x35\xc5\x0c\xfd\xc7\x0f\xdf\x35\x6f\x60\x2e\xe8\x46\x1d\x52\x0b\xd7\x10\x74\x29\xe9\xaf\x44\x22\x4d\x35\x9a\x8a\x79\xaa\xbb\x16\x44\xce\x79\x12\xa3\x67\x02\x6a\x92\x8d\x03\xf5\x5a\xb9\x20\x23\x16\x36\x01\x21\x87\x08\x27\x8a\xcf\x08\xdc\xd5\x4e\x51\x53\x44\x68\x51\xc5\x64\x69\x28\x2e\xc8\x81\x81\xfa\xba\xfb\x93\x8b\xad\x86\x69\xc2\x23\x97\xd4\x62\x4d\x72\xf1\xa4\x79\xe6\xd3\xaa\xe9\x15\xb5\xdb\xf0\xab\x9b\x6c\xcd\xb6\xcd\x4b\x63\x93\x50\xac\x0d\xab\xba\x33\xcd\x83\xa1\x11\x67\xe3\x84\xb2\xc7\x8d\x36\xe3\xda\x89\x72\xba\x05\xbb\x66\xba\x45\x6f\xe7\x36\x16\x90\x35\xce\xc7\xc7\x3c\x49\x4c\x6a\x4b\xb8\x3d\x20\x77\x99\x75\x03\x61\x20\x33\x39\xa0\x24\xb6\x7e\x2f\xab\x09\x0b\xc2\x20\xe0\x6d\xc4\x26\x0b\xeb\xb3\x95\x07\x48\xe6\xd1\xdc\x65\xe6\x45\x9c\x49\x2d\x46\x73\x81\x22\x9e\xa6\xa6\xb8\x29\x23\x48\x71\x9e\x48\x1b\xed\xce\x0e\x15\x8e\xd4\x88\x15\xfd\xad\x38\x79\xa6\x02\xd2\x76\xa9\x7b\xdd\x5d\x3a\x45\xa5\xa5\xa5\x02\x37\x8d\x43\xcc\x06\x30\x82\x19\x4f\x54\x80\xfe\xc0\xeb\x67\xc9\x6c\x58\x8b\x66\x20\xe7\x5c\xa8\x71\xdc\xc8\x73\x56\x12\x4d\x95\x11\x32\x72\x98\x40\xd0\x30\x7f\xd2\xc2\x3f\x79\xf6\xc6\xd7\x65\x43\xd0\x54\xbd\x6c\x04\xdd\x8e\xd1\xd2\x91\xad\x4b\x82\x2d\x6b\x65\x10\x3c\xa2\x72\x4c\xf8\xaa\x31\xde\xc1\x57\xa7\xfa\xa3\xa5\x8b\x57\x3d\x77\x4e\x08\xe2\x71\x01\x36\x67\xee\x75\x9b\x11\xb2\x6c\x4d\x2d\x74\xc2\xcb\x65\x8e\x2e\x9b\xca\x43\xd9\x92\xab\xc7\x02\x26\x7b\x49\x40\xd6\xc4\x62\x42\x95\xc0\xa2\x84\x14\xe2\xf5\x41\x49\xb0\x80\xf8\xac\x11\x33\xb8\x71\x46\x53\x88\x51\x4c\x25\x24\x88\xc0\x5d\x1a\x38\xc3\x50\x37\x25\xb0\x72\xb4\x8b\x3c\x47\x13\x7f\x0e\x81\x65\x05\x69\x38\x66\xa7\x3b\xf2\xf8\x58\x5a\x3f\xe3\x51\x5e\x08\x72\x11\x48\xb8\x16\x53\x07\x51\x26\xe9\x6c\xae\x10\x65\xd6\xee\x88\x93\x19\x17\x54\xcd\x53\x79\x80\x26\xb9\xd4\x5a\xa8\x09\x56\x33\xf1\x28\x44\x45\x9d\xb8\xd0\xb6\x49\xc4\x71\xa5\xc1\xba\x8a\xb2\x01\x69\x74\x3b\x94\xc3\xca\x5d\xb1\x82\x70\x06\x1e\x67\xb0\xda\x06\x85\xba\x8d\x06\x9e\x12\x99\x38\x40\xee\x90\x9d\xa0\x0a\x48\xdb\x39\x00\x54\xc8\x9d\x79\x29\x5e\xa3\x10\x17\x32\xc9\xa0\x82\xb8\xd8\x6d\x90\xbc\xca\xc8\x94\x06\xbd\xc9\x3b\x9d\xd2\x4c\x35\x06\x6e\xd5\x5d\x45\xb7\x01\xe6\x4f\xb7\xc5\x86\x64\x2c\xa0\x66\x40\x6a\x1b\xb1\x3b\x42\xda\x81\xdc\x6a\x7b\x6f\x4a\xe3\xc2\x14\x6c\xa2\xc7\x72\x92\xdf\xc6\x89\x7d\x36\xbc\x3b\xbd\x3d\xbf\x31\x90\x13\xd7\xb7\x97\x83\xfb\x71\x83\x5f\xbb\xe1\xad\xcb\xc1\xed\x0f\x67\xab\x5f\xfb\xfe\xbe\x9c\x95\xdd\xf0\xca\xed\xdd\xf2\x64\x8e\x0e\x43\x6c\x48\x0a\x6b\xec\xe7\x04\x65\x0b\x35\xe7\xcc\x87\x28\xc4\x25\xde\x74\x88\x4c\x46\xb0\x82\x10\x22\x21\x55\x83\xe3\xf0\x1e\xe2\x72\x56\x4b\x98\xe5\xcd\x32\x30\x6c\x3b\x15\x8d\xd6\x38\x91\x9f\x12\x3e\x01\xbf\x75\x5e\x2a\x71\xbb\x24\x02\x7d\xcb\x78\x9f\x33\x2a\xb3\x04\x2f\x6a\x3d\xac\xba\x72\xae\x70\x4a\x20\xe2\xb8\xc0\x8f\x73\xc9\x22\x7a\x67\x20\x81\xc9\xdf\xeb\x74\x0a\x99\x4c\x8a\x62\x45\xd0\x84\xa8\x67\xc8\x9b\x73\xbf\x7a\x5b\xaa\x0b\x18\x91\x47\x23\x06\xe6\x9c\x91\x5e\xe4\x38\x87\x68\xbf\xd1\x87\x03\x34\xfa\x10\x93\x27\x92\xf0\x4c\xef\xbc\xfe\xa1\xe5\x92\x19\xa6\x98\x26\x57\x5c\x79\xcb\xdc\x36\xfb\x29\x48\x44\x33\x90\xcc\xc7\x44\xb7\xfb\x7a\x82\x47\x89\x92\x1d\x3b\x83\x31\x20\x1c\xc7\x5a\xc9\x06\x56\xe6\x86\x57\x84\x00\xb1\x60\xea\xa5\x5a\x99\xeb\x88\x14\xde\xfc\x6d\x7a\x0c\xdb\x2c\x9b\x3d\x1b\x77\x80\x3d\xbd\xa0\x4b\x76\xdb\x8b\x5c\x6b\x25\x3f\x90\x05\xa4\x60\xdc\x60\x2a\x36\x74\xcd\x36\xc5\xbc\xbe\x88\x93\x76\xd8\xd0\xd1\x1e\xb9\x6b\x9b\xd7\x61\x3b\xc7\xad\x8f\xd5\x7b\x2d\x2d\xd5\xc5\x72\xf9\x8e\x3b\xaa\xad\x0f\x6d\x4a\x6a\x6b\x08\x03\xaa\x2a\x5e\x19\x89\xd6\xd0\xb8\xfc\x00\xef\xf4\x77\x2b\x35\x15\x2f\xae\x45\x61\x4d\x7f\xd8\x05\x9b\x1c\x5f\xcd\xc7\x27\x2b\x47\x1c\x25\x5c\x96\xb1\x72\x3a\x0f\xfa\xd4\x7e\xba\x6c\xdc\xc3\x90\x7c\xb5\x5c\xb8\x56\x40\x43\xc3\xc2\x57\xc0\x20\xcd\x3d\xa3\xac\x87\xcc\xbe\x7d\x80\x28\x44\x5b\x82\x42\x96\x14\xc8\x01\x2c\x46\x85\x1b\x64\xc4\x8a\x98\x15\x89\x9e\x49\x02\x61\x6e\x11\x4f\x33\x30\xf1\xdb\xe1\xda\x96\x48\x6c\x22\x86\x0f\x10\xcf\x95\x6e\xcc\xe4\xe4\x38\x23\xae\x4d\xf8\x29\xdc\x1e\xc6\xf7\x66\x83\xdf\x3d\xb0\xb4\xa1\x75\x73\x97\x52\x86\x3e\x11\x05\xad\x00\x70\x7f\x38\x41\xd0\x13\xaa\x21\x94\xcd\x6b\xbf\xc5\x89\xb2\x33\x59\x63\xe7\x0b\xe0\x94\xef\x12\x3e\x59\x6e\x24\x80\xc6\xd1\xc3\xed\xb9\xb3\x48\x16\xf1\x53\x01\x7a\x71\xc9\xa3\x38\xbc\xb9\x1d\x9e\x0e\xee\x87\x67\x47\xe8\x41\x12\xbd\x3c\x7e\xba\x90\x5f\xed\x55\x12\x33\x72\x8b\xc4\xc2\xa4\x22\xb8\xcd\x10\x42\x84\x28\x65\x41\xaf\x60\x1c\x65\x98\x96\xe5\x84\x0d\x20\x29\xd4\x1a\xea\x00\x58\xa8\x3a\x4f\x1b\x99\xb7\xea\x04\x42\x9c\xd4\xf8\xfd\x44\xa9\x99\xf1\xa6\xf5\xc8\xbc\x55\xe4\x53\x8e\xe8\x7b\xe9\xc9\xc0\xd1\x52\x73\x42\x05\xea\x34\x2d\x43\x54\xe3\xee\x73\x0a\x42\xdc\x2f\x71\xb6\x3c\xfd\x14\x3f\x97\x88\xd6\x88\xc2\x81\xef\xfe\xa5\xcf\x81\x63\x6b\x63\xc3\x0a\xb7\x9f\x60\xe1\xd0\x32\xbc\xd5\xf3\x4d\x93\xf1\x21\x9d\x91\x2c\x9c\x58\x65\x10\x36\x8e\x55\x22\x38\x3b\xf0\x0b\x65\xa8\x74\x25\x1e\xa0\x29\xfd\x6c\x1b\x2d\xe2\xdb\xdd\xab\x41\xc0\x43\x4b\x3c\xe5\x1c\xd7\xcf\xd4\x1a\x62\xc3\x0d\x7c\xbf\x54\x88\xe4\x52\x8b\x44\x91\x16\x97\x04\x89\xb8\xd0\x37\x05\x74\x5b\x78\x21\x56\x89\x0c\x0a\x0b\xbd\x28\x75\xaf\xcc\xb2\xd3\x5f\xd4\x20\x89\xb1\x22\x87\x5a\xf4\x5a\x91\x00\x6d\x73\x64\x20\x9b\x06\xab\x00\x0e\xac\xb8\x79\x26\x64\x86\x99\x0b\xcd\x6e\x19\xae\xbb\xf2\xb6\x60\x55\x5a\x05\xc2\x90\x1e\x06\xf2\x15\xa4\xfe\x94\xc6\x21\x33\x58\xcf\xa5\xe3\xb0\xd1\x2f\xfb\xb0\x6c\xcf\xd8\x07\xe3\xb4\x0c\x36\xcf\xe2\x7d\x1a\x6c\x82\xa5\x42\x76\x4c\x6d\xa6\x88\x40\x45\x7c\x59\x23\x6c\x49\xb7\xef\xaa\xbc\x69\x12\x2a\x6b\xb1\x04\x3c\x23\xd2\xe1\xa6\x18\x94\x18\xad\xd3\x38\x41\xd8\x94\x62\xf6\x67\xdb\xd6\x64\x76\xb7\x44\xc8\x4c\x20\x48\xbf\xde\xf4\x11\x1a\xb0\x1a\x5e\x96\x8b\xcb\x2a\xad\x97\xb9\x93\x70\xf2\x8c\x17\x12\x65\xc2\x40\xcb\x98\xc8\x7d\x37\x79\xd0\xc0\xca\x1f\xf9\x50\x08\xe5\x52\x27\x10\xd8\x62\x56\x07\xcd\x39\xb9\x77\xfc\x02\xae\xbc\x4a\x54\xb9\x17\xc8\x8b\xe6\x0a\x5b\x45\x07\x56\xa7\xc8\x38\x9a\x63\x36\x23\x63\x67\x64\xdd\x44\x5b\xd2\xed\x9c\x42\x33\x67\xb6\x95\xe6\xcb\xe9\xc6\x28\x4c\xb6\xfe\x8b\x79\xd5\x1b\x10\xf5\x21\x90\x0a\xcf\x08\x32\x23\xea\x64\x96\x2e\x45\x8c\x59\xb0\x61\xd0\x13\x6c\xab\xc3\x72\x14\x7d\x9b\xf0\x0e\xa1\x4f\x17\x78\x42\x92\xb7\x89\x9c\x80\xae\xad\x71\x1e\xbc\x75\x26\x1b\x80\xa0\x67\xb0\xe7\x57\x58\x86\xb5\xde\x8b\xbc\x29\x37\x60\xd9\x3c\x4b\xd5\xcf\xb7\x98\xa8\xab\x15\xb2\xc9\x54\xdb\x2a\x88\x84\xd7\x5e\x50\x69\xa3\xc9\xc0\x16\x5e\x7f\x55\x9b\xf2\x66\x03\x09\x0a\x7e\xb4\x8c\x63\xeb\x8a\x1f\x2b\xa7\xb2\x31\xc8\x40\xc7\x2a\x78\xe7\x53\xc4\x38\x23\x88\xca\xe2\x65\x55\x4e\x87\xf2\x10\x3d\x5a\xc4\x37\xc6\x17\x5f\xa5\xcb\x17\x5f\x7a\x69\x4b\x4b\x01\x9e\xe0\x6d\x03\x2e\xbf\x9b\x11\xad\xa8\x62\xb1\x00\x88\x4f\xc3\x87\xcb\x32\xdd\xca\x71\xee\x5c\xe0\xbe\x77\x08\xae\x41\xa4\xae\xe2\x08\xc4\xc8\xca\xe0\x90\xc1\x41\xb5\x2f\xd9\x8f\x2c\x4c\xcd\x88\x79\xcb\x06\x10\x22\x95\x28\xc5\x19\xf8\xf4\x18\x57\xc5\x57\x06\x76\x49\xf9\x2d\x3c\x70\x82\xb8\x34\x35\xb4\x5a\x56\x60\x95\x69\xc7\x5d\xbf\xc5\xba\x96\xe1\x2d\x1d\x34\xef\x8c\x3e\x11\xe6\x68\xfa\xc0\x9d\x09\x3d\x28\xd7\x69\xb2\x38\xc4\x10\x66\x4c\xe2\xd0\xf3\xb1\x9c\x23\x19\x83\xcc\x3e\xd8\x23\xbb\x2f\xd9\x7d\x63\x18\x8d\x01\x49\x2b\xa1\xdb\xbb\xc0\xf0\x90\x4a\x2d\x6e\xaf\xc9\x04\xc7\x12\xfd\x8e\x71\xf5\xbb\x00\xd9\xd8\x19\x2f\xe0\x53\x67\x82\x3a\xa8\x95\x6c\x81\x43\x6b\x09\x07\xe1\x00\x61\x6b\xe5\xca\x6f\x1b\x1b\x50\x04\xbe\xbf\xa8\x34\x3a\xac\x67\xc1\xb5\xd5\xbc\xea\x3d\xf6\xa8\x7a\x2d\x54\x0d\x9e\xa6\xac\x5e\x71\xd2\x4b\x86\x4e\xb9\xca\x45\xef\xf7\xa2\x93\x6b\xbe\x86\x08\xb0\x0d\xb5\xa5\x9d\x23\xa7\x56\x80\x20\x37\xdb\x25\x36\xc9\xf3\x6c\x93\xcb\x45\x39\x74\xcd\x96\xc1\x68\x41\xf9\x3d\x1a\xb1\x8f\x5c\xd8\x2b\x58\xda\x3a\x03\x13\x1c\x3d\x1e\x12\x16\x23\x9c\xab\xb9\x41\xdb\xb5\x7e\x85\x85\xa5\x06\x2d\x69\x00\xd9\x78\x28\x0d\x2a\x23\x2c\x62\x57\xf1\xe2\x89\xbb\x51\x8c\x58\xd0\x08\x54\x32\x80\x42\x4f\x50\xaa\xb6\x4d\xd5\x24\x52\xeb\x57\x6d\x6b\xd1\x54\x84\xb5\x56\x82\x75\xf9\x39\x2b\x15\x95\x85\x1a\x0c\x10\xe0\xc4\xa7\xf5\xd5\x39\x77\xd6\x46\xa7\xdf\x69\x7a\xae\x7b\x21\x0e\xac\x46\x61\x4c\x52\x76\x06\x5a\xd2\xf9\xd6\xf1\xda\x12\x6a\xf0\x34\x17\x10\xae\xdb\xd4\xe6\xd7\xd1\x9c\x26\x85\xef\xe2\x9b\x03\x3f\x4c\xdd\x64\x42\x9e\x48\x62\x30\xeb\x23\x01\x91\xf9\xc6\x6a\xf8\x2d\xfa\x3f\xa6\x30\x29\xfa\xc3\x88\x7d\x02\x36\x9c\x24\x0b\x40\xd4\xf4\x2d\x63\x55\x69\xe6\xb1\x71\x00\xca\xa6\x02\xa1\xf2\x40\xcc\x5e\xcf\xf1\x13\x19\x31\xd7\xcc\xff\x41\x8f\xe8\xf7\xe8\x0f\x6d\xea\x9d\x0b\xb0\x7f\x61\x3b\xc7\xc7\x20\x7c\x3d\xb8\xe5\x2c\xa3\xb4\xfc\xc6\x99\x41\x4a\x46\xc8\x06\x64\x0d\x0f\x8c\x4d\xd9\x13\x8f\x6a\x59\x1c\xe1\xa9\xc5\x82\x30\x35\x66\x3c\x26\x63\xd2\xe0\xd2\x5c\xc2\x24\xb4\x10\x70\xc5\x63\xb2\xd2\x21\xe9\x99\xe9\x4f\x60\xba\x91\xf9\xc4\x6f\x07\x24\xf8\xfb\x6c\x6e\x6f\x7d\x28\x53\x5a\xf3\xc8\x3d\xfa\xec\x26\xe3\xde\xd4\x99\xea\xc2\x44\x0f\xe0\x42\xb0\x03\x68\x76\xe8\x25\x58\x39\xf7\x7a\xf5\x38\x56\x1d\x01\xfa\x65\x3d\x73\x7b\x59\x05\xb8\xba\x50\xfb\x44\xd0\x19\xd5\xf2\x7b\x77\x87\x2d\x70\xc2\x4d\xbc\x19\x06\x64\xb4\x93\x3b\xa3\x58\x0a\x07\xb4\x72\xe8\xe9\xaf\x70\x42\x4e\x78\x5e\x15\xe0\xed\x02\x50\x19\xba\xfb\xad\xac\xbe\xd0\x7c\x78\x66\x32\x00\xc9\x9c\x9a\x9c\xfb\xc1\xe9\x05\xd2\xa7\x83\xa7\x06\x98\x0a\x16\x2d\x57\x73\x2e\xe8\xaf\xad\x19\x4a\xed\x32\x7a\xe1\x69\x2d\x12\xba\xcc\x38\xcb\xd2\x3a\x10\xab\x11\x29\x54\x49\x2b\x69\xd2\x99\xd0\x24\x07\x0c\x56\xcd\x66\xa7\x79\x62\x0a\x37\x44\x5c\xc4\xa6\x72\xba\x2c\xa5\x8f\x41\x18\xae\x13\xef\xb1\xf2\x0d\x52\x0b\x55\x69\x4b\x43\x18\x0b\xce\x52\x01\xf4\xaf\x39\xc9\x77\x94\x81\xf7\xa6\x31\xcb\xf7\x78\x26\x8b\x20\x64\xb3\x36\x9a\x37\x17\xeb\xfb\x0f\x3d\x53\x19\xe4\xac\x3a\xcb\xa2\x87\x80\x32\x2a\xb9\x29\x0c\xba\x96\x45\xe7\xd6\x40\xdf\xef\xc0\xa4\xf3\x1a\xf1\x1c\x75\x19\xa9\x81\xfd\x58\xf2\x7b\xf2\x19\x9c\x55\x16\xf1\x42\x76\x12\x57\x43\xa0\x22\x7d\xbc\xa0\xc9\x64\x03\x26\x57\x17\xaa\x97\x46\x45\x17\x06\x14\xcf\xd6\x1a\x92\xa9\x15\x87\xb4\x8b\x67\x41\x01\x21\x6e\x51\xbc\xec\x6b\xe0\xba\xeb\x22\xe4\x31\x5a\x4a\x31\x62\x2d\xc4\x75\xb8\x25\x5c\x34\xf3\xf8\x35\x0c\x10\xb6\xa1\x72\xd7\x75\xbf\x7d\xdb\x89\x30\x2c\x69\x5f\x8f\x44\x1d\x1e\x66\xe5\x61\xf0\x95\x40\xde\xc6\x80\xe8\x45\x9b\xd7\x3b\x19\x9e\x1c\xc7\x11\x8e\xe6\xad\x93\x9a\x70\x9e\x10\xcc\xda\xa4\xd7\xc6\xc7\xd5\x23\x62\xc0\x4d\x81\x75\x27\x09\x20\xfc\xba\x25\xb0\x55\x21\x0b\xf1\x9d\xc5\x80\xcc\x6e\x78\xb8\x89\x0d\x74\x03\x55\x84\x39\xcb\x0f\x65\xb3\x84\x54\xd7\xca\x42\xe8\x1f\xd8\x4e\x92\x28\x4f\x82\xb2\x90\x19\x11\x7a\xd4\x7a\x89\x9f\x08\xd3\x3a\x83\x1d\x87\x73\x66\x3c\xbb\x84\x68\x5f\x0c\xea\xc0\x77\xed\xfc\x69\x90\x75\x18\x8f\x18\x1c\x5c\x5e\x3e\xac\x9a\x56\xa5\x56\x33\x42\xbb\xd4\xc6\xa7\x33\x10\x22\xd6\x3e\x9e\x77\x65\x33\xf1\xda\x67\xd2\xf4\x3d\x86\x18\x83\xad\x5d\x6b\x81\xfb\xa5\x80\x6a\x30\x1b\xeb\xe0\xb8\x5e\xc9\x88\x0c\x51\x1b\xe5\xb0\xd3\x20\x68\xa3\x0d\x0e\xea\x45\xef\x92\xa2\xfc\x85\xbb\x0d\x3a\x0e\x65\xa9\xab\xba\xa3\xe3\x19\xac\x93\xcb\xce\xed\x85\x0d\xd9\x2e\xbb\x6c\x7d\x7e\x4f\x11\xe6\x68\x0b\xbc\x2a\x81\x01\x9d\x00\x72\xca\x7f\x32\x1a\x36\x95\xc6\x02\xe6\xca\x5c\xa4\x99\x5a\xd8\xaa\x68\x70\x2f\x86\x39\xbd\x06\xf1\xad\xc9\x3d\x5c\xbd\x23\xe3\x92\x83\xb8\xa9\x33\xe8\xc8\x9a\x15\x1a\x9b\x74\x0b\x1d\x22\x88\x54\x10\x1b\xda\xa2\x41\x4c\x81\xd9\x31\x4e\x5a\x6d\x59\x3b\x60\x9a\x90\x66\x5b\xa0\x34\x58\xf0\x57\x25\x72\xa2\x79\x17\x4e\x92\xca\xbc\x30\xa4\x43\x2b\x5f\x64\x6e\x52\x54\xc2\xed\xee\xac\x4e\xf0\x84\xac\xe5\x9e\xbe\x30\x1f\x2c\xa5\x22\x78\x05\x22\xbb\xb3\x2c\x59\x74\x8b\x28\x0f\x43\xef\x1a\x41\xd2\x56\x0d\x2c\x84\x56\x5b\x7a\x37\x95\xe1\xc9\x36\x1b\xa2\x24\x51\x2e\xa8\x5a\x8c\xad\xd1\xaf\x3b\xd3\xba\xb3\x5f\x9e\xda\x0f\xbb\x68\xd4\x27\xc8\xf5\xe7\x8c\x8c\x70\x4f\x09\x6a\x2a\xe8\xd8\x29\x74\xd9\x6e\xad\x25\x37\x82\x27\x2d\x5b\x58\x87\xde\xd4\x6d\xa8\xba\x8b\x4d\x87\x67\x2b\x73\x8c\xf9\xd4\xe1\x22\x75\x5f\xd8\x6a\xc9\x92\x35\xac\xa5\x0e\x7e\x39\x13\x94\x0b\x5b\x19\xa4\x4b\x50\x5b\x8a\x3f\x8f\x33\x2c\x70\x92\x90\x84\xca\x74\x73\xdb\xee\x9f\xfe\xb8\x74\xb4\xa7\xa6\x82\x8d\xb4\xf5\xa0\x3e\xd3\x34\x4f\x11\xcb\xd3\x89\x95\x72\xb1\x7c\x0c\xc1\x2f\x5d\xaa\xbe\xc1\x70\x72\x03\x2c\x01\x06\x88\x00\xce\x74\xc4\x02\x60\x6b\x6b\xaa\xc0\xd1\x9c\x92\x27\x80\xdd\x14\x8c\x48\x79\x84\xae\xb8\x22\x27\xe8\x12\x67\xf7\x20\xa8\x99\x92\x92\x33\x63\x1d\xc7\x12\x69\xa9\x35\x67\x54\x1d\x8c\x98\x45\xc3\x76\xab\x72\x1c\x71\x66\x10\x51\x23\x58\x58\xdf\x04\x98\x7b\x1d\x34\xa8\x72\x89\x8d\x54\xb6\x2c\xb6\xc0\xcf\xe3\x20\x7a\x75\x6c\xb2\x03\xd6\xa0\xe3\x5b\xfc\x6c\xe2\xb5\xcf\xb0\xc2\xa6\x5a\xec\x32\xc9\xdd\x06\x44\xd9\x0a\x42\x06\x08\xd8\x05\x8e\x70\x8b\x46\xe1\x6b\x9f\x99\xe8\xd4\xaf\xe9\x11\x39\x42\xdf\x25\x7c\x22\x0f\x90\xf4\xa0\xd9\xf0\x50\x12\x25\x0f\x8c\x83\x0a\xfe\x6d\x52\xc1\xbe\x71\xab\x5f\xf0\x7d\x28\xfb\x37\xa5\x9f\x0d\x08\x86\xfc\xd3\xc9\xf1\x71\xba\x38\x9c\xe4\xd1\x23\x51\xfa\x2f\x90\x29\x1a\x57\xc8\x21\x48\xe1\x26\x3c\xaa\x55\xab\x53\xc7\xb2\xea\x44\x91\x36\xad\x46\x12\xc0\x4d\xd7\x57\xba\x2f\xac\xea\xa0\x8f\x38\x6b\xae\x1a\x69\xa7\x2c\xf2\xb6\xe3\x55\x02\x5c\x7e\x1d\x6d\xc5\x14\x8e\x0d\x71\x9e\xa7\x09\x9e\x55\x54\x96\x35\x94\x94\xeb\x94\x5a\x2a\xd2\x73\x87\x78\x0b\x7d\xca\xca\x51\x66\x5f\x39\x77\x24\xb8\x15\xad\xbb\xe5\x68\xc4\x06\x12\x3d\x13\x53\x0f\x16\x72\x12\xc1\x3b\x91\x53\x39\xf7\x19\x89\x60\x2f\x85\x46\x0d\x1c\xae\x41\x4d\xb0\x8a\xa3\xd3\xac\x9c\xff\xc6\x6a\xa0\x38\x91\xe4\x40\x37\x0c\x90\x68\x2e\x90\x10\x3d\x0b\x9c\x65\x44\x8c\x98\x85\x36\x05\x00\x6f\xce\x6d\x90\x48\x5b\x34\x79\xaf\x51\xbe\xae\x46\x19\x26\x7d\x94\x13\x16\x57\x9d\x6f\xc8\x6f\x5c\x9a\xea\xb1\x24\x37\x50\xcb\xa2\x5d\x23\xbd\xdf\xde\x6c\xdc\x71\xcc\xab\xb4\xf3\x41\x25\x4c\x1f\xca\x4d\xa7\xa0\x40\xca\xa2\xaa\xa6\xb3\xf5\x79\xf5\xbd\x24\xe6\x00\x32\x36\x7c\x1c\x73\x22\x03\x23\x3e\xf2\xb6\xb8\x84\x4e\x89\x96\x3e\x46\x4c\x93\x71\xe8\x70\x30\x00\xdb\x0e\x6f\x5b\x77\x1a\x09\x2e\xa5\x8d\xbc\x37\xed\x2c\xcf\x9f\xda\xa2\x96\x9f\x41\x09\x3f\xbf\xbe\x1a\xd7\xab\xfa\x05\xcf\x5c\x7d\x3f\xfb\xb0\x31\xc9\xbe\xb5\xa9\x95\xd5\xfc\x8a\xb5\x58\xa3\x9e\xdf\xf1\xe9\xc5\xb9\x2f\x62\x55\xe9\xba\x5e\xd0\x2f\x44\x56\x6f\x2f\xe9\x57\x9f\x71\x50\xdc\xaf\xd2\xc4\x92\xf2\x7e\xab\x37\xab\x1c\xef\xbb\x0d\x6c\x5e\x65\xeb\x57\xf2\x87\x32\xcd\xac\x0a\x4b\xdf\xd1\x36\xb5\x5c\x2b\x11\x08\x8c\x2f\xed\x61\x07\xc1\x4b\xbf\x25\x15\x4e\xb3\x30\xe5\xd2\xe1\x86\xda\x69\x9a\xa3\xd6\x76\x09\xbe\x2a\x9e\x79\x84\x4d\x34\x4b\x75\x70\xb5\xad\x58\xcf\xe3\x75\x6f\x61\xd2\x77\x11\xc6\xfc\x7a\x39\xcc\xc9\xa2\x88\xda\x93\x56\x76\x73\x25\xb8\x5b\xec\xfe\x13\xe2\x21\xe1\x5b\x37\x74\xdb\x24\x45\x0f\x1d\x25\x08\x96\x36\x1c\x03\x72\xf9\x2a\x79\x3e\x6b\x98\x87\xfd\x98\x4d\x36\xf0\xa1\x2f\xc2\x10\x5c\x35\xb6\xae\x58\xe4\x0e\x22\x15\x82\x3c\x11\x01\xb4\x63\x63\x7e\x58\xf9\xa8\xe2\x44\x10\x1c\x2f\x82\x15\xf1\x01\x07\xa6\x67\x30\x8f\x49\x9a\x6a\x05\x1e\x54\x13\xc6\x0f\x79\xe6\x74\x96\xd2\x5b\x50\x41\x83\x4e\xf5\x8d\x15\x84\x2b\xe8\x2f\xd8\x21\xf9\x4c\xa5\xd2\x72\x45\x43\xac\xa6\x6b\x04\x24\x1e\xa8\xab\x35\x27\xf6\x86\x1b\x7d\x18\x7c\x77\x7d\x7b\x3f\x3c\x1b\x7d\x28\xa2\xf3\x5d\xfa\x99\x47\x84\x72\x00\xff\x9c\x8d\x98\x0f\xa8\xf5\x00\xc8\xb0\x97\x08\xc7\x71\x81\x6c\x60\x95\x48\x23\xb3\x2d\xe5\xc8\xc1\xa9\x58\x19\x4a\xbb\xa4\x99\x07\xc8\x41\xda\xd7\x93\xb5\xc4\x75\x56\x3a\x39\x26\x93\x6a\x49\xca\xcb\x8e\x2e\x9b\x10\xbb\x55\x19\x5d\x9b\x28\x07\x2e\xc8\xc8\xb3\xd3\x95\xe0\x76\x3e\xc6\xe6\x12\x5e\x8f\xdb\xb9\x0d\xd9\x60\x53\x3f\xd2\xcf\x24\xbe\x6d\x91\xaa\x76\x92\xd1\xd2\x29\x12\xb0\x71\x17\x72\x46\xd7\xd1\xf8\xfd\x54\x1e\xf4\x77\xdd\xd9\xd2\x75\x01\xc9\x56\xc0\xab\x02\xb6\xaa\x42\x18\x45\x44\x28\x4c\x19\x9a\xc2\xc1\x66\xd1\x02\x01\x60\x07\x01\x1f\xf6\x1f\x51\x4a\x19\x20\x07\x2c\x5b\xda\x87\xf2\x3c\xd6\x10\x5a\x2f\xcf\xaf\x1e\xee\x4b\xa2\xea\xf7\xd7\x0f\xe5\xa2\xee\x83\x9f\x97\xca\xaa\x95\x16\x96\x05\x0b\x05\x53\x2c\xb2\x10\x2d\xca\xac\x5f\x99\xc6\x89\x26\x0b\x45\x1e\x6e\x2f\xb6\x92\xef\x9a\x9d\x65\xad\x18\xe1\xa1\x74\xd5\x8c\x88\xd0\xe5\xd3\x98\x44\xab\x50\x4c\xbb\xd3\x91\x89\x82\xd2\xeb\x60\xad\x89\x16\xe1\x0c\x4b\x94\x61\x61\xfd\x50\xb1\x09\x80\x2a\x57\x06\x33\x9a\xd7\x32\x04\x89\x4f\x44\xfd\xa8\xaf\x3e\xce\x76\x91\x05\x61\x45\x59\xf0\x8f\x92\xf1\x93\x69\x78\x8d\x93\x66\x87\xb2\x24\xd5\xc5\x09\xcb\xd0\x03\xb2\x3d\x84\xb8\x0b\x47\xa6\x42\xfc\x40\x37\x07\x2b\xe2\xe2\x09\xb5\x4a\xca\x99\xa6\x48\x03\xa7\xea\x30\x58\x83\xe6\xf8\xd4\x7c\xdc\x11\x91\x2e\x88\x6a\xd7\x6d\x15\x4b\x89\x06\x37\xe7\x0d\x6b\x7d\x51\x75\x21\x7d\x59\xe5\x6c\x12\xef\xcd\xda\x35\x48\x52\x90\x9e\xb8\x17\xa8\x48\x76\xa6\xdb\xc1\x20\x19\xa7\xff\x4d\x39\x92\x60\x1f\xd0\x7a\x9b\x54\x86\x52\xda\xf1\x0a\x60\xde\xf5\x32\xf1\x8a\x65\x58\x13\xf4\x28\x1c\x90\x4d\x03\x09\x81\x7e\xea\x31\xc6\x07\x21\xf0\x0f\x37\x05\x73\x6d\x6c\xc1\xce\xc0\x90\x8a\xd9\x74\x41\x43\xfa\xd1\x50\xb4\x07\xcb\x00\xf8\x0f\x57\x90\xd1\xc5\x06\xdb\xdc\xf5\x70\xba\x21\xb5\xad\x07\xa0\x54\x8c\xcf\x99\xbf\x2d\x16\x35\xce\xb0\xb5\x3b\x80\x12\xe5\x2a\x25\x34\x15\xd6\x3b\x1a\xb1\x20\x60\x45\x1a\xb5\x47\x9f\x11\x57\x9c\x04\x2a\xde\x32\x00\xb6\x86\x24\x1d\x2f\xfc\x94\x76\xa0\x9a\x22\xaf\xe6\xe5\xf2\x22\xb5\x7e\xec\xe9\x94\x73\xec\x12\x11\x9d\x05\xc5\xc6\x01\x86\xf6\x25\x68\x2f\x28\x28\x60\x3b\x06\x73\x34\x18\x2d\x70\x50\xae\x2e\x48\x5e\x8f\x39\x91\xec\x2b\xe5\x53\x3d\x69\x62\x4b\xa2\xe0\xaa\x7b\x40\x4b\x75\x98\xda\x96\x97\x1f\xf0\x1d\xa0\x33\xad\xab\x38\x04\xc7\x6a\xa5\x99\xca\xf9\x78\x81\x12\xc2\x58\x24\xe8\xb4\xcd\xaa\xfe\x39\x23\xd1\x26\x10\x32\x37\x58\xe0\x94\x28\x22\x96\x85\x23\x95\x8b\x49\x83\x88\xe3\x76\xd0\xf6\x6b\x76\xd1\x54\xda\xa8\x96\x64\xf1\xda\xed\xc5\x2a\x48\x18\x3f\x8b\xb5\xd0\xaf\xf4\x34\x7e\xb4\x96\xff\x35\x67\x61\xfb\x29\xa6\x61\xa3\xad\x02\x04\xa0\x6d\xe7\xf4\x3a\x50\x28\xf7\x35\x50\x91\x52\xb8\xd0\x9e\x60\xa0\xac\x1e\x65\x1b\xf8\xc9\x2a\x5e\xba\x13\xde\xed\x32\x1c\x5c\x0a\x6d\xe5\x50\x95\x72\x27\x80\x4a\x40\xa5\x32\x38\x20\xcd\x00\x26\x20\xb4\x34\x45\x48\x06\x6e\x3f\x0b\x6f\x57\x18\x74\xad\x64\x55\x2d\x2e\x55\x59\xae\x15\x3c\x6e\x57\xe0\x0e\xbd\x44\xb3\x6b\x89\x66\x15\x29\x97\xa2\x6b\x35\x75\x12\x51\xc1\x99\xb1\x45\x9f\x2d\x40\x40\x79\x82\x90\x7b\x64\xaf\x48\x5b\x39\x16\xae\x7e\xca\xfc\xbf\xca\x1c\xdc\x11\x75\x48\xaa\x4d\x49\x95\x47\x81\x0b\x0a\x3c\x50\x49\x28\x0d\xd8\xb8\x1a\x18\xad\x09\x83\x34\x56\xfe\xf3\x2b\xe3\xc0\x82\xe4\xe6\x05\xcf\xd1\x33\x95\x73\xa4\xf8\x88\x41\x9c\xa0\xf7\x06\x28\x8e\xcc\x8b\x07\xf0\x16\xc0\x20\xc8\x7c\x92\x52\x85\x70\x30\xc3\x92\x49\xf2\xc0\x9e\x67\xfd\x01\xcc\xb8\x31\xcf\xbe\x09\xa2\x67\xc5\xa1\xd9\xc0\xbe\x56\x34\xb2\x6d\x2a\x7d\x10\xd3\xfc\xb2\xc9\xf4\x81\xc6\x13\x6a\x98\x8d\x67\xae\xcf\xa6\x47\xcd\xd6\x06\x0b\x1a\x0a\xc8\xae\x54\xaa\xca\xdd\x62\x0d\x3d\x2b\x32\xe9\x8b\x8d\xe8\x94\x4a\x5f\xbc\xbe\x8b\x5c\xfa\xb6\x32\x65\xcb\x72\x2b\xdd\x27\x2d\xf6\x6f\x97\xb3\xab\xb8\x0b\x9c\x0f\x25\xa5\x9b\x56\x49\x69\xdf\x50\xcd\x8a\x84\x80\xcd\xc3\xcb\xd7\x51\x07\x8b\xfc\xac\x90\x8a\x82\x74\xcb\x32\x26\x0c\xa9\x72\x7e\xc6\x15\xe4\xd4\x44\x50\xc2\xbd\x96\xe7\x39\x62\xcd\x12\xc8\x72\x9e\xb8\x6d\x8a\xc6\x4e\xd1\xcf\x82\xf3\xe7\x66\x61\x2d\x5a\x3f\xf9\x20\x37\xa3\x2c\xdb\x62\xec\x55\x11\xb3\x70\xf1\xb5\x05\x27\x69\xc1\x63\x93\x84\xe3\x86\x53\xd9\x3c\xf4\x5a\x02\xc5\xca\x73\x61\x2f\xdd\x1d\xaa\x76\x35\xee\xdc\x39\xdf\xc4\xcb\xc8\x96\x1b\xdb\x80\xe9\xd8\xeb\xf1\x15\x57\xed\x26\x55\x66\x01\x55\x74\x67\x58\xa8\x55\x78\x02\xdd\xf8\x01\xb8\x77\xed\xd8\xb1\x09\x75\xf1\x08\xdd\x95\x3d\x29\xcd\xd8\x56\xef\x7f\x89\x59\xaf\x5b\x1a\x38\xf0\x37\x0a\x1b\xef\x4b\x43\xcb\x01\xd4\x04\xb6\x61\x92\x15\x4e\xec\x85\xbb\x9c\xc5\x44\x30\x82\xd5\xfc\xf5\xb2\x2c\x4e\xb7\x35\x4f\x07\xe3\x7b\xd9\x8c\x8b\xd3\x9d\xd4\x85\x0f\x87\x5b\xae\x91\xbe\x72\x9c\xfa\xf5\x2e\x96\x22\x1b\x7c\xe0\xab\x04\xd7\x54\xc7\x06\xb3\x61\x00\x42\xb3\x0e\x95\x6e\x95\x88\xd1\xac\xce\xbd\x4c\x4a\x4a\x83\xdd\xa7\x96\x8c\xa2\x4f\x7b\x58\x5b\x79\xc5\x92\x7c\x11\xb9\x1f\x2f\x9f\x8e\xb0\xac\x8a\x73\x1e\x64\x28\x40\x29\x6d\x85\x29\xb3\xdc\x6b\x59\x52\x82\x96\x29\x53\xdc\x94\x87\xb0\xf7\x19\x2e\x5f\x7c\x82\x4b\x9f\xee\xd0\xa7\x3b\x34\xec\x51\x9f\xee\x80\xd0\xbe\xa5\x3b\xac\x52\x41\x97\x19\x40\xbd\x4f\x0e\xaa\x6d\x96\x4a\xdc\x98\xfd\x5d\xa1\x47\x6e\x1e\xd2\xef\x6c\x88\x61\x3c\x94\xfd\xc5\xfe\xd0\x18\x12\x55\xfb\xac\x3a\xdb\xd0\x9e\xc9\x16\x55\xb7\x00\x16\x71\x62\x71\xe8\x6c\xc0\x72\xd9\xfe\xb4\xcc\x54\x3a\x62\xdf\xf3\x67\xf2\x44\xc4\x01\xc2\x0a\xa5\x5c\x2a\xe0\xc3\x2e\x3e\x06\x0e\x42\x09\xd2\xdc\xc4\x41\x60\x74\x85\x53\x12\x9b\x8a\x87\x41\x58\xa3\x35\xd8\x5a\x57\x6b\x13\xdc\x2a\x20\x87\x9a\x6d\x70\x71\x13\x23\x66\x42\x0d\x4d\x78\x1b\xc8\x0a\xd4\x4d\x0c\x08\xe6\x77\xde\x11\xfc\xbb\x23\x74\xaf\xef\x27\x2a\xcb\xe3\x0d\xd0\xd7\xda\xc6\x36\x62\x33\xc1\xf3\xcc\xdb\xd0\xf8\xc4\x94\xbe\x35\xd1\x4f\x75\x47\x30\x0c\xc6\x79\x81\x23\x1c\x6b\x5d\x7c\x39\xe1\xbc\x49\x14\xea\x46\x10\x46\x21\x01\xe9\x63\xe8\x43\xeb\x6c\xa8\xbb\xf1\xdf\x06\xc0\x2d\xcb\x80\xd8\x5f\xc8\xb9\x7c\x46\x24\x58\x85\xbc\xd5\xbd\x94\x47\x5e\xc6\x2a\x68\x1c\xe7\x32\x9b\xa8\xf7\x5b\x38\xdb\x7e\x33\x0c\x42\xd1\xb9\x8d\xf9\x32\x49\xaa\xf6\x9e\x78\x31\x6b\x69\xe7\xe8\xd9\x36\x7e\x71\x93\x8b\x8c\x83\x24\x96\x2c\x1c\x6c\x83\x45\x7a\xcb\x78\x96\x9b\xb8\x36\x1a\x86\x39\x35\x52\x36\x95\xea\x12\xab\x68\xae\x39\x77\x81\x78\xb6\xa3\x78\xbf\x82\x2b\xbf\xac\x05\xb5\x61\x06\xa7\x61\xef\x2d\x2e\x85\x0e\x16\x75\x73\xef\xbb\xf0\x7a\x27\x49\xa4\xba\x3f\xe3\x76\xb3\x05\xad\x03\xbb\xa8\xfb\xc4\x3e\xd1\x13\x5d\x45\x45\xab\xc6\xdf\x8d\xb6\xca\x15\xb7\x76\x1e\x49\xb8\x05\x84\xcc\x99\x05\xec\x2a\x5e\xb4\x15\x5a\x5b\xdc\xff\x82\x6e\x96\x05\x64\x51\xf2\x9f\xb4\x38\xe2\x2d\xae\x29\xce\xb4\x12\xa1\xb8\xbe\x25\xc5\xcc\xc8\xb1\x26\x4e\x16\x61\x94\x0b\xea\xce\x7e\x25\x27\xbc\x9d\x3a\xc0\x42\x79\x1c\x56\x54\x8a\x70\x50\x6c\xce\x38\xfc\x71\xa4\x72\xec\x03\x13\x81\x26\x5c\x11\x74\x93\xff\xee\x1c\xeb\xc2\x89\x77\x0d\x7b\xba\x92\xb0\xb7\xd8\x65\xdc\x84\x6f\xd8\xe9\xa4\x51\x36\x0b\xc0\x11\x9b\xad\xc4\x5d\x6a\x1f\x34\x7e\xd9\xad\x7e\x43\xe3\xa7\x4e\xf6\xd9\xe4\xdb\x25\xe0\x4d\x1b\xc7\x66\x97\xe2\xdc\x6d\x20\xac\x95\x9e\x42\xd8\x4a\x6b\xbf\x03\xf4\x59\x0a\x8e\x7a\x6c\xa5\xa9\xff\xf2\x7f\x99\x5a\x59\x66\x69\xfe\x0b\x71\x31\x62\xe6\xf7\x03\x5f\xa7\x42\xbf\x50\x00\xc0\xe2\x94\x14\x10\x99\xa2\x0c\xa6\x07\x90\x22\x16\x0c\xcd\x80\xfd\x7a\x98\x7e\x3d\x86\xc7\x7c\x42\x04\x23\x7a\x68\x0e\x7c\xc0\x33\xb3\x14\x33\x3c\x03\x68\xe1\x03\x88\x8c\x03\x71\xb5\x50\x45\x0c\x49\x9b\x7a\x87\xc0\xad\x34\xb3\xb4\xf9\xb6\x45\xdd\x5f\xe8\xd3\x88\xb2\x16\xd9\xb4\x08\xaf\x68\xa6\xfe\x5b\xdb\xff\x66\x12\xfb\xfd\xe0\xee\x87\xf1\xed\xf0\xee\xfa\xe1\xf6\xb4\x24\xb6\x9f\x5e\x3c\xdc\xdd\x0f\x6f\x1b\x9f\x15\xb9\xaa\x7f\x7d\x18\x3e\xb4\x3c\x72\x0d\x5c\x0c\xbe\x1b\x96\x8a\x68\xff\xf5\x61\x70\x71\x7e\xff\xf3\xf8\xfa\xe3\xf8\x6e\x78\xfb\xe3\xf9\xe9\x70\x7c\x77\x33\x3c\x3d\xff\x78\x7e\x3a\xd0\x5f\x86\xef\xde\x5c\x3c\x7c\x3a\xbf\x1a\xbb\xb0\xe3\xf0\xd1\x4f\xd7\xb7\x3f\x7c\xbc\xb8\xfe\x69\x1c\x74\x79\x7d\xf5\xf1\xfc\x53\xd3\x2c\x06\x77\x77\xe7\x9f\xae\x2e\x87\x57\xcb\x8b\x75\x37\xaf\x46\x6b\x1d\xe0\xe0\x22\x0b\x8c\x46\x81\x98\x34\x59\x58\xd2\xa6\xbf\x82\xef\xe2\xc6\xd0\xe3\xe1\x81\xfb\xcb\x94\xd6\x3e\xd4\x2c\xd0\xf9\xc5\x0a\xee\x31\x62\xde\x71\xe9\x2f\x55\x85\x67\xd2\xa5\x1e\x97\x46\x7b\x82\x06\x70\x56\x40\x61\x28\x75\x0a\x99\x0d\x7e\xa4\xce\xd5\x0d\x74\x98\xd0\x94\x82\xd7\x1b\x1d\xa2\xea\x86\x97\x1b\xb4\x73\x82\x21\x58\xbf\x5d\xbc\xec\x34\xc8\x6a\x56\x33\x50\xca\x09\x72\x1c\x9a\x18\x73\x82\xc1\x9e\x5d\x30\x9c\xd2\xa8\x9a\x82\x01\xf0\xab\xa8\x80\x1a\xa9\xb6\x58\x22\xb0\x72\xcb\x73\x82\x7e\xf8\x4b\x31\x28\xf0\x60\x58\xcd\x3b\xaf\x55\xd4\xb3\x0f\x44\x6e\x56\x75\x15\x79\x96\x7a\x72\xc7\xdc\x9a\x96\xe1\xdc\xda\xca\xdd\xe0\x6e\xca\x59\x00\x37\x56\xf2\x3d\xe9\xe3\x6d\x66\x54\xa1\xf1\x13\x74\x07\x50\x27\xb2\x50\xdd\xf5\x2e\x66\x49\x3e\xa3\x0c\xd1\x34\x4b\x48\x51\xf3\x7d\x42\xe6\xf8\x89\x72\x57\xbe\xc2\x54\xf9\x80\x75\xb4\xa2\x15\x3a\x44\xad\x07\xe5\x04\x0d\xe2\x58\x96\x19\x5c\x89\x72\x1c\xcb\x3c\x2c\x0f\x3b\x44\x08\x63\xb1\x67\x9b\x15\x3a\x2a\x8e\x1c\xac\xd8\xee\xc1\x5c\xea\xec\xb0\x7c\xf7\x6e\x71\xfd\xeb\x15\x1c\x3b\x52\x1e\x6f\x24\x0c\xdc\x63\xf9\xe8\x58\xf3\x2a\x81\xc0\xc1\xea\x6c\xd7\xa3\xc5\xd7\xe9\xda\xa9\x5f\xd9\x31\x1c\xb4\xcd\xfa\x6c\x45\x85\x5e\xd1\xa5\x9b\x71\x52\x29\xdd\xd5\xb9\xbf\x52\xe9\xaf\xc6\xce\x76\xea\xed\x69\x96\xc6\xe0\x48\x8e\x3d\xfd\xaf\x31\x8f\x1b\xf8\xf4\xda\x7f\xb9\x54\x64\x1b\x07\xeb\xb6\xae\x0f\xa8\x96\xa4\x6b\xfd\x40\x4b\xe9\x70\x47\xf0\x4e\xdd\x85\x41\x28\xbc\x40\x23\x70\xf7\x61\xca\x6c\x39\x1e\xe2\xfd\x51\xae\x00\xb5\x3e\xc7\xbe\x44\x1c\x9e\xf0\xa7\x92\x72\x99\x12\x29\x71\x0b\x60\x49\x60\x12\xdb\x86\x31\xf8\x13\x6a\x3f\xec\x48\x4f\xee\x4c\xde\xeb\xaf\x96\x19\x7d\x6e\x43\xcd\xd8\x4d\x54\x0b\xac\xb1\x8b\xb4\x45\xd7\x26\xdf\x4e\xf3\x97\x83\x22\x98\x86\x8b\x20\xc6\xa8\xcd\xfd\xd3\xd1\xac\x56\x5d\xb0\xc6\x2a\x4b\xa1\x0b\x6f\xfd\x18\x9c\xa0\xf5\x8d\x11\xb1\xad\x5f\x05\x97\xd7\x67\x0d\xaa\x2b\xf9\x3b\xc3\x0a\xd4\x11\x4f\x53\x23\x17\x94\x6c\xa9\x07\x08\x9b\x34\xc7\x42\x9a\x92\x79\x34\x37\x5e\x26\x7d\x65\x1c\x8c\xd8\x73\xb0\x21\xa5\x40\xe0\x41\xd8\x12\xa0\x89\x7e\xd6\xc7\x8d\x3e\x95\xc2\xab\x41\x64\xa4\x10\xeb\x1b\x10\x82\x71\x08\x16\xe5\xa3\x56\x10\x78\xb0\x5f\x5b\x90\xfa\x06\xb5\x02\x2b\xeb\xdb\x56\x31\xd0\xcf\x2d\x28\xd4\xb7\x85\xa6\xdc\x75\x08\x41\xad\xc0\xa6\x11\xec\xa0\x54\xe0\xab\xc2\x7b\xfb\x74\x4d\x93\xdd\x9b\x4e\x2c\x46\x85\x9e\xae\x5b\xed\xdf\xbb\x19\xfd\xde\xf8\x1d\xf2\x16\x50\x93\xa0\x35\x8f\xf0\x8d\x0e\xb5\xcc\xea\x92\xed\x6d\x20\x86\x44\x87\x06\x35\xf0\x2b\x88\xb4\x1c\xdc\x9c\x7f\x75\x80\xbe\x0a\xb3\xcd\xbe\xda\xe8\x00\xda\x71\xdb\x72\x81\xa0\x4d\x95\x52\x0e\xca\xc7\x0e\xf6\xaa\x72\x12\xed\x9e\xd9\x83\x88\xda\xce\xa1\xfe\xb2\xf4\x0d\x38\xa7\xa1\xfc\x9d\xf1\xdf\xfa\x80\x67\xeb\x02\x32\x32\x2e\x95\x0d\x6b\x17\x8f\xd8\x64\x51\x75\xf2\x1c\x78\x2f\x4f\xe7\x53\xba\x75\x49\x37\xdd\x5e\x3d\x3d\x79\xc7\x81\xb8\xcb\xef\x83\x15\x09\xcf\x03\x13\x73\xcd\xa7\x01\x17\x6b\x8b\x52\xe8\x23\xd8\x9b\x66\x55\xb2\x97\xb9\xc5\x6c\xdc\x94\x55\xf2\xcf\x7b\x23\xb7\x0e\x61\xdf\x83\xa6\x15\xb1\x11\xff\x2d\xc2\x75\x4f\x65\x2f\x4b\x65\xbb\xc8\x78\x28\x0f\x6e\xfd\x0b\xf4\xd4\xc8\x71\x41\x33\xce\xe0\xaa\x95\x09\xcf\xe0\x4b\x75\xff\x56\x17\xcc\x5d\xd3\xe7\x1b\xac\xc9\x6a\xa7\xef\x9d\x09\x1c\x30\x6e\xd7\xfa\x58\xab\x43\x1d\x28\x5b\x84\x88\x53\x93\xdd\xa8\x68\x4a\x0e\x10\x67\xc9\x22\x08\x76\xb0\xe7\x15\xc8\xcd\xc4\x28\xcd\x09\x15\xae\x13\x8b\x31\xb8\x56\x3a\xfc\x9a\xd2\x78\x1b\x8d\x6c\x11\x69\x72\x35\xb8\x1c\x9e\x8d\x87\x57\xf7\xe7\xf7\x3f\x37\xe0\x47\x96\x1f\x3b\x08\xc9\xe0\x85\xbb\x9f\xef\xee\x87\x97\xe3\x4f\xc3\xab\xe1\xed\xe0\x7e\x05\xbc\xe4\xb2\xce\xda\xa0\x0b\x73\xd9\xa4\xbe\xad\x03\x5f\xe8\xcc\xbc\x0d\xbd\xd7\x41\x26\x83\x4e\x28\x69\x01\x9a\x34\xa9\xff\x2c\x26\x02\xc5\xe4\x89\x24\x3c\x2b\xcc\xaa\x8d\x0b\x16\x20\x50\x36\xb4\xbf\x0c\x85\x12\xda\xac\xae\xf1\x09\x32\xb5\xde\x82\x72\xb7\xbe\x41\x10\xf9\xb0\x20\xec\x2b\x85\xc8\xe7\x2c\xa1\x11\x55\x41\x6a\x20\x17\xd6\xbd\x62\xdc\x87\x10\x9d\xba\x82\xb8\x76\x16\x8d\xb2\x73\x9d\x3f\xf4\xa4\xd7\xb5\x7d\x7f\xa2\x3c\x22\xda\xca\x02\x42\x3b\x50\xec\x5b\x9c\xc6\x35\xc0\xb6\x0d\x46\xf7\x12\xe6\x81\x7a\x8e\x8e\x4d\xef\x6b\x01\x73\x6b\x1e\xe4\xea\xdb\x70\x59\x9c\x4c\xe9\x5c\x2f\x0f\x94\xe9\x46\xa9\x6f\x1c\xee\x52\x2a\xac\xb9\x03\xe4\x0d\x1b\xbb\xbe\x66\xc0\x42\xad\x5e\x0c\x33\x31\xa7\x18\x09\x92\x72\xa5\x15\x30\x13\x11\x70\xa0\x85\x2a\x8a\x13\xfa\x2b\x60\x54\x09\x72\x14\x44\x50\x38\x64\xaf\xc2\x7d\x60\xf1\x23\x8e\x46\xec\x6c\x78\x73\x3b\x3c\xd5\x0c\xe9\x08\x3d\x48\x80\x9f\x2a\x4d\xfd\xcc\x92\xb7\x11\xc7\xc2\x48\x06\xca\xa4\x22\xb8\x2d\x18\x8c\x08\xc1\x45\x77\xfe\xe0\xfb\x1b\xc2\x77\xcd\xe4\x0d\xcf\x4a\xb6\x29\x67\x00\xb8\x6a\xad\x8a\x1c\xe4\x0c\xec\x3c\x27\xeb\x16\x3f\x97\x56\x24\x84\xdf\x00\x49\xa4\xbc\xea\x2f\xb8\xda\x00\xe0\xd9\x7d\x7e\xa5\x3e\x6f\xe0\xdb\x65\xf3\xbc\x87\x10\x3b\xa9\x0a\x34\x50\x03\x18\xea\xab\xde\x54\xe6\xd9\x2a\x2a\x8a\xb7\x80\xea\xa8\x90\xfe\x84\xcc\x30\x43\x22\x67\xac\x02\x0f\x1b\x5a\xda\xea\x41\x33\xeb\x1e\x55\xbd\x66\x38\xe5\x39\x03\xa5\x01\xc2\x58\x1b\x06\x23\x33\xc2\xd4\x8a\xc1\xbc\x15\x10\x4b\x65\xa8\xfb\x8b\xc5\xd2\x30\xd0\x36\x38\x96\x26\x7f\x12\x94\x5e\x5e\xef\x5a\x76\x41\x79\x25\xa7\x92\x3e\x54\xfe\x7e\x6e\xd6\xb2\xb1\x7c\xdc\xba\xbb\x7b\x2c\x1f\x57\x77\x15\x93\xe8\x71\xdd\xcb\xa6\x9a\x99\x99\xd8\xca\xd5\x35\x63\xdf\x42\x3f\xb5\xa5\x59\xa0\x60\x79\xf4\x88\xbe\xbf\xbf\xbc\x40\x53\xaa\xe5\x5e\x7d\xad\x5c\x61\x2d\x63\x3f\x88\xc4\xd9\x85\xad\x6d\x35\x17\x89\xbf\x7b\x61\xe3\x9d\x28\x15\x48\x09\xfa\x46\xc3\x33\xe2\x8c\xbd\xc2\xa2\xed\x55\x4a\xb3\x08\xcc\x62\x9e\x9a\x79\x1c\xcb\x7c\x3a\xa5\x9f\x8f\x14\x16\xdf\xb4\xac\x87\x89\xaa\x18\xff\x9d\x4f\xc6\x7a\x44\x5b\x5e\xc4\x4d\xcd\x21\x5b\x50\xd9\x2f\x9b\x9d\xd9\x99\x79\xf7\xff\xf2\x09\x64\xbb\x67\x82\x03\x02\x20\x78\xe7\x6c\xa4\x82\x7d\xc5\x51\xd2\x11\x72\x09\x54\x25\x90\x93\x88\x0b\x41\x6c\x92\xbc\xa9\x2d\x9a\x61\xa1\x28\x58\x6b\x1d\x48\x4a\x09\x1d\xbf\xd8\xa2\xb0\xe4\xf7\x1c\x17\x48\xd4\x13\x42\xc0\xc1\x93\xd1\x64\x3d\xa5\xf7\xb4\xe4\x9b\xac\x9c\x40\x1b\x79\x6a\x71\x33\xc1\x20\xb3\x52\xc4\x1a\x3e\x11\xa6\x76\xa2\x9f\x40\x13\x0d\x69\xfb\xdd\xbc\x0c\xa6\xc4\xe7\xf9\x59\x71\xb9\xb9\x90\xde\x30\xaa\x49\x09\x0c\xf7\xbc\x4d\x94\xb2\x2e\xf5\x36\x47\xff\x53\x67\xdf\x31\xbc\x5a\x5f\x97\x15\xa1\xf1\x76\xb5\x8b\x52\xdf\x45\x58\xab\x83\xf6\xdf\x10\xc8\x47\x12\x63\xc5\x08\x00\x24\xac\x72\x5a\xdd\x73\xd3\xa7\xa6\xad\x4a\x97\x2b\xb7\x7c\x03\xd4\x9a\x52\x33\x9f\x08\xa4\x74\xee\x22\x10\x7d\x9d\xdc\x7d\x18\xc8\x83\x48\x20\x84\x7a\xa9\x15\xcb\x94\x19\xd7\x9c\xcf\x4b\x76\xb8\x83\x8c\x6e\x06\xa3\x85\x46\x92\x09\x12\xe9\xab\xec\x04\xdd\x24\x44\x4b\x5e\xb9\x96\xbe\xf2\x24\x71\x08\x5f\xcb\xa5\xc3\xb5\x50\xe9\x5e\x7c\x5e\x81\xee\xb1\x64\x62\x0e\xe1\x6e\xf9\xcc\x82\x35\xd8\x3d\xe2\x42\xb0\xbe\x60\x42\x06\x43\x62\x59\x8b\x04\x0e\xbf\x30\x71\xb3\x60\x4a\xc2\xa5\x8b\x8c\xfe\xaa\xd9\xaf\x20\x72\xce\x5b\x93\x1c\xc3\xd9\xbe\xcc\x1c\xdc\x52\xbe\xe0\x24\xdc\x7d\xd8\x16\x57\xdd\x41\xae\xa9\xdc\x81\x25\x11\x67\xd9\x14\x7d\xf5\x07\x1f\xfd\x61\xf1\x56\xed\xdd\x6a\x87\x06\xb7\x64\x61\x6a\x0b\xb1\xcf\x0a\xd7\x45\xa1\xcc\x2c\x8c\xef\xd5\x7f\x5e\x18\x90\x8b\x94\x00\xaa\x64\x51\x75\x0e\xe9\xbb\xb6\x6d\x8b\xf5\x3c\xc7\xb9\x58\x0b\x92\xa2\x40\x2d\x5f\x87\x73\xdb\x64\x94\x62\x58\x7a\x11\x9a\xd9\xa5\x2d\x26\x01\x62\xb4\x0d\x35\x92\x25\x24\x38\x4b\x36\x66\x19\x1b\x55\xbc\x76\xa6\xbc\xad\x5b\x0d\xa4\xe4\x42\x94\x79\x29\xef\x5a\x89\x02\x4b\x13\xe8\xb1\xc5\xd6\xc7\x16\xb3\x95\x45\x3c\xed\x01\x12\xa0\x12\x90\xf8\x5f\x38\xd0\xaa\x82\x83\x35\x7a\xaf\xca\x7c\x2a\xed\x4e\xa7\x34\xa7\xd2\x17\x9a\x97\x9c\x6d\xe9\x81\xd3\x93\x59\x8c\x21\x71\x74\x9b\x28\x9c\xd2\xfc\x8d\xf7\x00\xda\x24\x31\x32\xe8\x05\x06\xf9\xd8\xae\x9d\xf7\x9c\x64\x58\x10\xa6\x46\xec\x56\x8f\xc2\x7c\x51\x44\x62\xb8\x38\x1c\x87\x46\x0f\x35\x6b\xa7\x08\xdb\xaf\x60\xd1\xdb\x02\xe1\xe4\xd8\xbc\x04\xaa\xe9\x0b\x26\xd9\x7f\x67\xde\x31\x98\x07\x16\xf3\x47\x4f\x95\x4e\x0b\x35\x5e\x0b\x90\xd1\x9c\x02\xe4\x40\x4c\xa4\xbd\x90\xa8\xb2\x98\x12\x5e\xfc\xce\x89\xc3\x5f\x86\xcf\x3c\xff\x6a\x62\xd8\xce\x50\xc0\x9c\x81\x4e\x8e\x58\xd0\xc7\x12\xb8\x4e\xa3\xac\x6f\xa8\x4a\xc0\x3e\xd3\xd8\x3b\xbe\xe0\x9f\x66\x87\xb8\xa0\x33\xca\x82\xa2\x49\x76\x7a\x29\xce\xc0\xbc\x6b\xce\x20\x9f\xfa\x3b\xed\xde\x66\x19\x1c\xc1\x88\xff\xe7\xbf\xff\x76\x44\xdb\xbc\x1f\x72\x6c\x57\x60\x1f\x76\x72\xbd\x6d\x09\x77\x3e\x40\x11\x69\x41\xa7\x08\x74\x5a\x59\xca\x9c\x28\x7e\xb5\x97\x9b\x26\x1a\xae\xe6\xc6\xdd\x5b\x26\x77\xf0\x8d\x88\x7c\x79\x1d\x81\x80\xc5\x15\x01\x01\x85\xd7\x37\x08\xba\x75\x55\x22\x4c\xb0\xa4\x6e\xbf\x72\xa1\x54\x18\x54\x00\xe7\xb7\x4d\x70\xe2\x1c\xcb\x97\x8b\x40\x69\xac\x6e\x64\x8c\xc6\xe1\x1d\xb9\x2a\x16\xc5\x0c\xd2\x24\x35\xea\x5d\xc9\x25\x11\xe6\x40\x7b\xd4\x27\x4b\x3c\x21\x58\x21\x84\x22\xae\x70\xa9\x91\x14\xd3\xb5\xc2\xe6\xf5\xfb\xcd\x50\x8a\x25\x9b\x3a\x9e\x11\x31\x8e\xf3\x52\x8c\xf4\xaa\xb6\x6f\xf4\x47\x67\xb9\x5a\xac\x6e\x5f\x26\xb8\x5e\xdd\x65\x19\x7c\xa5\x7e\xbf\xa5\xd9\xd5\x82\x61\x10\xc9\x52\x16\x0e\x5b\xc0\x21\x49\x05\x1c\xd2\x86\x56\x96\x2c\x01\x70\xd1\x30\x05\xc8\x71\x85\xc2\x60\x6f\x22\x03\x61\x0d\x23\x47\x93\xbc\xb0\x9c\xf8\xa2\x00\xf1\xd1\x88\x7d\x34\x55\x35\x40\x99\x31\x03\x88\x20\xaf\x85\x7c\xce\xb8\x24\xa5\x44\xab\x06\xa0\x7f\x9b\x28\x69\x87\xd1\x2c\x93\x16\x1f\x6d\x2f\x92\xbe\x39\xcc\x67\x7d\xc3\xeb\x53\x6e\xa6\xc0\xad\xa4\x9e\x88\x66\x54\xd3\xce\xb8\xf1\xa4\xbd\x5c\xb1\xd9\x22\x74\x09\xe0\x9e\x54\xb2\x38\x40\x7e\x7a\x15\x82\x48\xc8\x13\x01\xab\x31\x8c\x31\x2c\xe7\x50\x36\x5f\xb5\xb0\x93\x55\x07\xa8\xc8\x72\x04\xb6\x80\xe2\xea\x08\xca\xb9\x60\x4d\xb4\x58\xce\x72\xd9\x3a\x21\xab\x29\xfe\x62\x0d\x29\x74\x10\x96\xb5\x58\x10\x85\xc8\x67\x45\x6c\xe1\xcb\x7b\x97\x32\x57\x8f\xb2\x47\xcd\x59\x3f\xed\x22\xd2\x8b\x97\x20\x1e\xb8\x44\x69\x97\x13\x18\xbb\x7b\xdf\xe6\xc8\xcd\x31\x8b\x6d\xe2\xa7\x95\xa5\xb5\x4c\x01\xb3\x33\xb6\x25\x1f\x12\x6f\xd3\x17\x03\x3c\x70\xd3\xa6\x01\x2e\x87\x8b\xcc\xe9\x45\x5a\x32\x87\x28\x02\x2e\xb4\x80\x9a\x33\x45\x13\x4d\x1c\x76\x0c\x5a\x6b\xce\x99\xc7\xe3\x83\x00\xee\x36\xc8\x37\x2a\x25\x65\xb3\xb1\x5d\x49\x97\xc3\xd8\xed\x62\x28\xd3\xd4\xa5\x69\xca\xfc\xf8\x9d\x6b\x68\xb9\xed\xd8\x90\x35\xc0\x71\xb9\xec\x49\x10\xac\x19\x77\x93\xb1\x38\x6a\x2e\xe9\x72\x4c\x63\xb3\x14\xd4\xd4\x57\x86\x89\xae\x63\x5e\x06\xb1\xae\x0e\x57\x50\x5c\x21\xd2\x66\x44\x9a\x3c\x27\x08\x48\x57\x2d\x29\x9f\xb2\x35\xd5\xf3\x9c\x79\x11\xcd\x56\x77\xf2\x09\xed\x95\xac\x51\xec\xba\xb3\x51\xf7\x38\x49\x26\x38\x7a\xf4\xca\x86\x57\xb9\xb9\x70\xe8\xf8\x5a\x40\x85\xf2\x5f\x86\xb8\xf4\x40\x23\x90\x6e\x42\xa7\x98\x01\xac\xb1\xc3\x2e\x3a\x37\xab\x66\x91\xc0\x0c\x42\x91\x19\xbd\x09\xe1\x8f\x49\x96\xf0\x45\xda\x72\x9f\x55\x33\xe5\xb6\x09\x48\x69\x4b\xd4\xdb\xe9\x55\x56\x61\x7a\x6b\x5f\x66\xb5\xb4\x9b\x1d\xc0\x27\xad\xc1\x25\x3f\x25\x7c\x02\x96\x43\xab\x65\xbb\x54\x92\x20\xa3\xa1\x7a\x9e\xd7\x4d\x70\xa9\x9e\x48\x2a\xb3\x04\x2f\x96\xf5\x60\x52\x2b\x5e\x76\xdf\x4c\x2a\xfe\x6a\x23\x58\xf7\xa0\xe4\xc6\xcf\x5f\x02\xa8\xf7\xc2\x49\x02\xe6\x5d\xc3\xbf\x2a\xc6\x24\x93\xd3\x76\x64\x7c\xb1\x8a\x8f\x98\xc2\x33\xb7\xb9\x56\xb8\xe4\xcf\x8c\x08\x39\xa7\x59\xa9\x2c\xe0\xd6\x51\xd0\x96\xa2\xed\x7f\x4c\xcc\xef\x1a\xbc\x93\x67\x87\x06\x88\x43\xd3\x87\xcc\x70\x54\x18\xff\xa2\x04\x4b\x49\xa7\x8b\x00\x3f\xc3\x07\x94\x42\x96\x52\x59\x5b\x0e\x2a\x71\x35\x31\x1a\x33\xbe\xdd\x24\x90\x6f\x9f\x3c\xf7\x50\x3e\x7e\x34\x0e\x81\xca\xf4\x7d\x52\x07\x4b\x71\x37\xb5\x05\x4d\x69\x05\x5c\x35\x99\xf2\x9b\x25\x7c\x2f\xc5\xb8\x69\x37\x23\x14\xc2\xa4\x1d\xb6\x55\x64\x3c\xae\x45\x88\xf9\xa2\x4a\x19\x83\xb0\xf9\x5a\x71\x72\xe6\x4f\x4d\x9c\x1e\x13\x03\xa0\x03\x8a\x8f\x0f\x90\xdc\x0a\x4b\xaa\x0b\x5d\x9c\x91\x84\xec\x24\xb0\x78\x03\x22\xa9\x7a\xed\x03\xf2\x58\x4a\x1a\x05\x9a\xfe\x6a\xe3\xc2\x06\xf1\xce\x2d\x88\x34\xcd\x43\xff\xc9\x0c\xd4\x86\x3c\x37\xed\x22\xd8\xbf\x60\x95\xbb\xea\x2e\x4d\xd0\x76\xa6\x05\x4b\x72\x45\x37\x25\xba\x2a\x3a\xf5\xf2\xca\x3e\x92\xda\x1b\x47\x06\xd7\xc6\xf5\x89\x74\x89\x62\x58\x79\x00\x36\xe2\x40\x75\x3e\xdd\x8d\x2e\xac\x9f\x50\x71\x34\x23\xca\x14\xb9\xf7\x95\xfc\xdf\x13\x4d\xec\x2c\xaf\x61\x47\xab\xdf\x7c\xc8\xd7\x3b\xb5\x77\x44\x49\x77\x25\xd4\xd0\x02\xed\xe6\xec\xe1\x16\xec\xc7\xb1\x34\x82\xeb\x17\x2f\xb7\x6c\x8d\x05\x60\x47\x66\x33\xe2\x7f\x43\x02\x95\x99\x63\x6c\xbf\xf0\xd9\xef\x25\xdc\x27\x5c\xc2\xca\x33\x6b\xf4\xf6\x5c\xaf\x4a\xda\x5f\xba\xe8\xb5\x3e\x8d\x57\x47\x55\x50\x77\x2f\x0f\xae\x27\x0f\x3a\x2c\xc9\x3d\xbc\xfc\xdb\x8e\xc1\x7e\xde\x3f\x7b\x20\x1c\xd6\xae\xc4\xdd\x89\x88\xef\x88\x4c\xf6\x42\x52\xac\x6d\xc5\x6b\xc9\x8b\x87\x0e\xcc\xa7\x80\xc6\xd9\xdf\x2d\xda\x8f\x93\x7c\x6b\xdd\x40\x2f\x77\xc1\xae\xa6\x97\x9d\xd0\x07\xe0\x5a\x62\x48\xff\xcd\x6d\xa1\x0c\x38\xbc\x41\xc8\x58\xcd\xf7\xb0\x22\x18\xcf\x0e\xaf\x53\x18\x5e\x6d\x39\x5f\x62\x7b\x6d\xae\x57\xe7\xcd\x7d\x49\x52\x5b\x77\x2c\xbb\xd0\x51\x5e\xd8\x8b\x63\xa9\x31\xf8\xa0\x8f\x89\xed\x76\x8b\x36\x20\xc8\xb8\x2d\xdb\xe5\x21\x6b\xaa\x6e\xb6\x7d\xb6\xba\x4b\x65\x1b\x67\x82\x4c\xe9\xe7\x8d\x44\xf1\x1b\xf8\xd4\xaa\x97\x7a\x99\x2b\xf5\xd2\xc0\x3d\x03\xf5\xd5\x82\xb8\x3d\xbb\xd2\xb6\xa6\xd2\x88\x15\x09\x80\x36\xfb\xef\x91\x2c\x10\x17\xa5\x9f\x36\xc5\x3a\xdc\x7d\x6d\x37\xb3\xaf\x73\xa5\x32\x79\x72\x7c\x3c\xa3\x6a\x9e\x4f\x8e\x22\x9e\x9a\x70\x73\x2e\x66\xe6\x8f\x63\x2a\x65\x4e\xe4\xf1\x1f\xff\xf0\x87\x62\x8b\x27\x38\x7a\x9c\x19\xf4\x98\xba\xdf\xa9\xbc\xe5\x04\xcb\xed\x22\x7b\x5c\xa6\xd6\x0b\x67\xec\x06\xdd\xb8\x1c\x49\xfd\x8d\x54\x38\xcd\xc2\xe8\x51\x53\x1d\x4d\x2a\x5c\xd4\x64\x80\xf4\x3b\x3d\x4d\x34\xc7\x59\x46\x58\xbb\xd9\xc1\xe4\x53\x6e\xc1\x7a\x5c\x46\xa6\x1d\x21\xf9\x9c\x25\x98\x95\x51\x06\xa0\xc0\x90\x20\x11\x61\xca\x66\xc0\x17\x15\x93\x81\x1a\x0d\xd2\x8d\xe1\xff\xeb\x65\xdc\xc1\x1c\xa9\x2c\x2a\x87\xb9\xe1\xd8\x2a\x9e\xae\xb6\x23\x0e\x96\xae\x5a\x39\xb5\x58\x3b\xe2\x56\x6d\x59\x2e\xde\x5d\xbd\x82\xf6\xfa\x95\x5b\x04\x67\x63\xf2\x59\x33\x39\xb9\x29\x2e\xd5\x83\x24\x12\x0d\x7e\xba\x43\x72\xc1\x14\xfe\x7c\x82\x2e\x29\x03\x01\xf6\x7b\x9e\x0b\x89\xce\xf0\xe2\x90\x4f\x0f\x53\xce\xd4\x1c\x5d\xc2\xff\xda\x9f\x9e\x09\x79\x44\x3f\x13\x2c\x2c\x7f\xb0\x95\xd7\x7c\x19\x6f\x4d\x42\x22\x67\x12\x91\x27\x7d\x42\xff\xf0\x9f\x28\x35\x2d\x9f\xa0\x6f\x8f\xff\xf0\x9f\xe8\x77\xf0\xff\xff\x7f\xf4\xbb\x16\x4d\x7f\x3d\x64\x2b\x28\xd0\x7b\x5b\x76\xe7\x1e\x54\x56\x6a\x83\xa2\xe5\xa7\x82\x17\x3b\xd5\xd8\xf2\x23\x8d\x1e\xf9\x74\x3a\xd6\x84\x61\xf2\xd5\xc6\x58\xd4\x50\x91\x37\x84\x09\xa5\xb6\xc4\xb2\x29\xd8\x56\x94\x4a\xb1\x9d\x1a\x60\x03\xc7\xae\x65\x5e\x14\x98\x85\x20\xa2\x52\xd1\x5e\x2a\xe1\x2b\x12\x6b\xae\xba\xce\xe9\x70\xd6\x3d\x97\xe3\xec\x2c\x38\x21\x10\x48\x58\x36\xdc\x07\xfe\x85\x51\xac\x26\xd0\xc7\x2e\x64\xe3\x71\xa8\x85\xd7\x7e\x31\x31\x93\x30\xb5\xb7\x8a\x97\x94\xb5\xce\x57\x87\x4a\xde\x71\xb1\x95\xbe\xf5\x48\x6a\x31\xdb\x1d\xcb\x02\xb9\x52\xb5\x61\x01\x7b\x48\x84\xe6\xc2\xc3\xf5\x1a\xbb\x88\x2d\x1e\xb8\xda\x8a\x49\x85\x09\x2e\xeb\x76\xe8\xf5\xd4\xcf\xfc\x27\xab\x86\x09\x91\x66\xee\xed\xa2\x2c\x1a\x8c\x56\x8b\x48\x9a\x25\x36\x8c\xb8\x01\xd3\x6f\xd5\x86\xde\x79\x18\x07\x68\x1c\xc2\x1e\x21\xe5\x83\x39\xc9\xd6\xe6\xc9\x37\xef\x67\x2e\x22\x72\xca\xb7\x0b\x7b\x4d\x28\xab\xc5\xcb\x77\xaf\xb8\xe3\x57\xef\xc2\xd6\x56\x72\xb0\xb7\x3c\x2e\x94\x05\xe3\x16\xb0\xc5\x16\x02\xbc\xcd\xf2\x6c\x00\xb7\x6d\x17\x90\x8e\xb5\x12\x00\x5b\x70\x6d\x63\x38\x2e\x18\x9e\xab\x20\x51\x29\x1c\x21\xb0\xe6\x85\x4b\x62\xd7\x20\xa8\x68\xeb\x71\x04\xc5\x50\x8a\x48\xa5\x4a\xd1\x71\x6c\x2a\x82\x88\x0d\x21\x39\x4d\x5d\xa2\x03\x24\x30\x04\x65\xaa\xb9\x6e\x4f\x12\x71\x38\xc5\x11\x65\xb3\x83\x00\x8d\x11\x90\x11\xc2\xeb\xa0\x89\x48\xef\xb1\x7c\xdc\x6d\xa0\xe1\xd6\x75\x1a\x69\x5c\xd4\x0a\xb3\xf8\x29\xc6\xb1\x41\x6b\x50\x74\x0a\xcb\xc7\x36\x00\xa1\x1a\x7a\xd9\x92\xd1\xf9\xa5\x70\x98\x67\xcb\xc6\xe7\x32\xad\x49\xa8\x4f\x41\x69\x02\x57\x39\xd8\x62\x19\xba\xc4\x36\xec\xc1\x46\xaa\x20\x9e\x4b\xc6\x2f\xe7\x5c\xa8\xf1\x86\xf0\xa7\xd5\x6c\x71\x46\x0e\x13\xc0\x2d\xe1\x4f\x44\x3c\x51\xf2\x5c\x46\x11\x5d\x87\x16\x8d\xd1\x2c\x88\xaa\x03\x98\xc9\x34\xe3\x90\x42\x33\x45\x29\x66\x0b\xc3\x28\x35\x73\xc1\xf2\x51\xfa\x7a\xa5\x48\xa6\x38\x49\x0e\x90\x20\xb9\x34\x75\x7c\x25\x49\xa6\x87\xae\xe2\x43\x8c\x12\x3e\xa3\x11\x4e\xd0\x24\xe1\xd1\xa3\x1c\x31\x2d\x28\xb0\x99\x61\x52\x99\xe0\x11\x91\x32\x90\xac\x8a\xa4\x6d\x9b\x4a\x07\xc5\x4a\x15\x11\x29\x65\x54\x2a\x1a\x39\x91\xa9\xc0\x5e\x30\x25\xb3\x23\x0c\x26\x61\x48\x4c\x84\xe1\x6a\x49\x8f\x18\x0c\xca\x9c\xd9\xda\x40\x70\x5d\x5b\x68\x39\x17\x24\xde\x76\x80\x76\x80\x94\xe7\x28\x64\xac\xca\x07\x72\xc5\x91\x3a\xb5\x9f\xc1\x31\x5e\x46\x02\xb7\xe5\x13\xe5\x09\xd2\x9f\xb4\x12\x7a\x0f\xc4\x94\xfb\x10\xf8\x92\xe4\xe2\x23\xc3\xf7\x0c\xb8\x0b\x86\xdc\x02\xd7\xb5\x8a\xa6\xf5\x2a\x82\xc8\x03\xe5\xa8\xaa\x5e\x73\xca\xa2\x24\x8f\x7d\x41\x42\x2d\x02\x3c\x69\x22\x71\xcb\xa3\xd7\x5e\x0b\x0a\x07\x08\x4b\xf4\x4c\x92\x44\xff\xd7\x44\xc0\x1f\xfa\xfa\x00\x9a\x25\x9b\x1a\x0e\xd0\x89\xe3\xd2\x6d\x14\xb5\x77\x20\x8c\x37\x58\xcd\x4d\x6a\x7b\xca\x95\xa9\x05\x69\x40\x18\x9d\x7d\xcb\xa0\xf6\x4d\x12\x3e\x81\x93\x0e\xf8\x8c\x2e\x35\x36\x48\xab\xcb\xa3\x88\x90\x98\xc4\xe8\xeb\xe0\xe0\x7a\xd8\x85\x6f\x9a\xd1\x02\x4b\x2b\xb2\x07\xd8\x8c\x55\xc3\x5a\x2b\x42\x63\xb9\x9c\xd9\x11\xba\xa9\xe0\x8f\x84\x65\xca\x71\x15\x8d\xea\xa0\xb6\x85\x6f\x83\xe7\x58\x99\xc4\xcb\xed\xd0\x9a\x78\x8e\xa5\x3e\x77\x80\xe7\x58\x99\x67\x4b\xec\x3e\x9f\xbd\x68\xce\xb1\x9e\xd4\x05\xef\x9e\x08\x66\x70\xb0\xcc\xdd\x59\x22\x41\x77\x20\x17\x4d\x84\xb8\x5f\x58\x95\x95\xa2\x7f\x6f\x8b\x55\x59\x19\xcc\x3e\x63\x55\x56\x86\xba\xbf\x58\x95\x0d\x03\xed\x80\x55\x69\x9c\xfb\x63\x4d\xd4\xdd\x98\x02\x24\xb6\x4c\xf2\xe9\x1d\xa4\x7a\x2f\x1d\xe3\xa9\x09\x1c\x30\xd7\x98\xbb\xa3\x2d\x74\x33\x8c\xd6\xe6\x40\xb6\x85\x43\x55\x9c\x10\xeb\xd2\x9e\xf7\xbe\x51\x69\x34\xb4\xf5\xcc\xee\x07\xa1\xb5\x1b\xec\x90\x11\xce\x6c\x4e\x79\x5b\x45\x95\xfd\xc9\x9e\xdd\x0c\x06\x14\xa0\xf6\x4a\x2c\xbf\x13\x50\xd6\x65\xa5\x38\xc1\x9c\x3f\xdb\x02\x41\x40\x86\x86\x28\x5b\x49\x10\x3a\x1d\x5b\xa5\xad\x6d\xe5\x28\x53\x64\x56\xd5\x69\x8b\x43\x43\x99\xfa\xd3\x1f\x57\x72\x22\x83\x24\xe8\xd4\xc3\xa0\x44\x80\x77\x76\xd8\x67\x24\x46\xd1\x5c\x6b\x45\x52\xab\x2f\x7a\x3a\xe6\x66\x95\x28\xc5\xd4\x29\x52\xb9\x34\xae\x25\x2a\x47\xac\x04\xbd\x79\x84\x3e\x42\xdd\x53\x9c\x66\x5a\xff\xf2\xf3\xa3\x9a\x92\x46\xf9\xb7\xdf\xfe\x89\xa0\x6f\x51\x4a\x30\x2b\xe9\xb0\xa0\x36\xe9\xab\x0f\xa0\xea\xd4\x9c\x8c\x58\xe3\x56\xa0\xe1\x67\x53\x4a\xc9\xc5\xfb\x9d\xb3\x29\x77\x3a\x31\xd4\xf3\xc3\xd1\x1c\xc9\x7c\x62\x0a\xd2\x06\x36\x0c\x27\x48\x5f\xf0\x19\x38\xaa\xe1\x46\x76\x83\x5e\x76\x0a\x5f\x36\x06\xc0\xba\x1b\xbb\xde\xc6\x03\xb8\x47\x0e\x25\x29\x41\x18\x35\x38\xcd\x0c\xe7\x0b\x0f\xbe\x34\xf8\xa7\x07\xc6\x87\xa0\xf5\x33\x6c\x2d\xfb\x5a\x96\x86\x70\x5e\xf0\x92\xe5\x09\x16\xf6\xe8\x8f\x98\x56\x34\x04\x79\xa2\x3c\x97\xc9\x02\xc5\x9c\x91\x03\xa0\x84\x3c\x9a\x1b\xc7\xaa\xd6\x59\xb0\xad\xcb\xf0\x44\x65\xae\x15\x5a\x68\xcb\x95\x81\x90\x0a\x1b\xe8\xa5\x39\x85\x7e\xb4\xfa\x4d\xe0\xab\x30\x4b\x0e\x75\xd3\xa2\x42\x74\xd4\x0a\xcf\xef\x88\x8e\x5a\xa2\xaa\x1e\x1d\xd5\xa3\xa3\xd6\xd7\x65\x1f\xd1\x51\x2b\x7b\xde\x0d\x1d\xb5\x69\xcb\x37\x40\x47\x2d\x35\xf3\xc5\xa0\xa3\x56\x56\xf4\x8b\x41\x47\xad\xcc\xab\x47\x47\xfd\xf2\xd0\x51\xb7\xc4\xff\x6c\xe6\xc5\x06\x5f\x49\x51\xb6\x58\x9b\xc8\xbe\x92\xe8\xfc\x5a\x13\x58\xf4\x58\x0e\x6a\xf3\xd7\xd5\xf6\x98\xa3\xcd\x4c\x68\x3d\xcc\xd1\x46\x55\xbd\x9d\xd5\x6d\x0b\xf0\x04\x8a\xc1\x2b\x63\x8e\x96\x26\xd0\xc7\x57\xae\x1f\x5f\xd9\x48\x7c\xb6\x6f\x3d\x3c\x17\x74\x59\xbd\x90\x3b\xa2\x8e\x96\xf6\xa7\x53\x24\x26\x88\xee\x3b\xa0\xc4\x97\x95\xe6\xef\x4b\x87\x7c\xa5\x2c\x1f\xae\xa2\xb4\xf8\xc7\x5a\xc2\x73\x68\x71\x46\x09\x0f\xfd\xff\x3d\xe5\x6e\x10\x19\x5c\x59\x5e\xef\x57\x31\xb4\xd8\x81\x54\x3b\x53\xa8\xd3\x4a\x77\x93\x28\xeb\x92\x27\xd7\x74\x31\xbb\x41\xdc\x65\x24\x6a\xb1\x31\xd3\x94\xee\xaa\xd9\x55\x17\x99\xc7\xc2\x02\x85\xbc\x96\x17\xaa\xaf\x27\x33\x1c\x23\xe3\x57\xd2\x61\x01\xa8\xc3\x7c\x39\xa3\x52\x89\xd6\xd8\xa6\xda\x08\xb7\x71\x95\x66\x79\xe7\x80\x98\x60\x55\x67\x9b\x7d\x96\x92\x94\x8b\x55\x81\x55\x8d\x5f\xda\x8a\x2e\x9b\x7c\x4a\xb2\x39\x49\xb5\x24\x33\x5e\xb7\x91\xae\xfb\xed\x93\x86\x6d\xee\x9a\x09\x74\x2c\x11\x41\xe0\x08\xd5\xef\xc6\x06\x91\xb2\xf3\x76\x6f\xbb\xcd\x16\x33\x73\x4d\x87\x90\xc3\x0c\x5e\x6e\x70\xb3\x2f\x95\xdc\xdd\x40\xdf\x8d\x31\x1d\x3e\xa4\x66\x75\xd4\xc6\x92\x78\x8d\x65\xb8\x53\xc5\x57\xb6\xde\xf1\x1a\xae\xfc\xb2\x77\x5e\x73\xc2\xb0\xd8\xed\xfa\x01\x1e\x2d\xa8\xa9\xf5\xe5\x81\xc8\x1c\x49\xc4\x61\xa8\x19\x94\x06\x53\x5f\xaf\x12\x95\x38\x8d\x72\x0b\x22\xc9\x45\x6b\x94\x69\x17\x83\x76\xa4\x72\x9c\x80\x26\x11\x16\x69\xac\x6e\xea\x64\xd1\x90\xf6\xd8\xcd\x63\x42\x99\xfa\xf3\x7f\xac\xb5\x9b\x5a\xb5\xb2\xeb\x06\x85\xa5\x70\x14\x11\x69\x6c\xec\x36\x0a\x19\x4f\xf8\x13\xd4\x94\xda\x66\x57\xf5\x51\xd6\xf3\xd6\x0c\xde\x43\x11\xc7\x05\xa9\x1b\x71\x61\x2e\x78\x3e\x9b\x3b\x1b\x92\x3e\x33\x7a\x6a\x4d\x7b\xf9\x63\xcd\x46\xbe\xf6\x5e\x7e\x97\xd3\x64\x33\x0b\xdd\x5d\xa9\xda\xd6\xa7\xf3\x7b\x24\xe7\xfe\xb4\x4e\xa0\xd9\xc6\x8d\xad\x0f\xba\x7b\x9f\xf6\x5b\xef\xaf\x81\x6e\x0e\x1c\xfc\xe6\x94\x27\x09\x78\x1a\x24\x49\x9f\xc2\x22\xf9\x61\xf7\x30\xe1\x7b\xba\x1e\x72\x9e\x1f\x00\x7c\x5d\x24\x46\x74\x92\xbf\x6e\x8c\x68\x28\x91\x1b\x7d\x35\x68\xc1\x84\xaa\x71\x46\x58\x93\x8d\xed\xa7\x7a\xa1\x93\x77\x16\x30\xe8\xa2\xc7\x76\x16\x34\xe8\x96\xe4\x95\x03\x07\x57\xcc\x63\x5f\x83\x07\x2b\xcc\xce\xc7\xf2\x15\xd7\x8c\x0b\x1c\x32\x8a\xcf\x40\x2f\xf1\x88\x0d\x4a\xf9\x14\xae\x20\xf4\x64\x51\x04\x64\x1b\x1d\x22\x64\x66\x50\x4e\xc2\x1a\x56\xc0\x8d\xa6\xff\x02\x4d\xc7\x80\xd7\x9a\x90\x42\x17\x36\x08\xd1\xe4\x24\x3e\xc4\xd1\x22\x4a\x68\x14\xe8\xcc\x33\x81\xb3\x79\x13\xc7\x73\x3b\xdf\xa3\xee\xbc\x15\xea\x4e\x5b\xdd\xa5\x75\xe2\xb6\x1d\x5d\x31\x9c\x92\x1e\x0d\xa8\x09\x0d\xe8\xc0\xe3\x5d\xb0\xa2\x82\xd4\x1b\xc2\x28\xd4\xcf\x5d\x0f\x09\xf4\x06\x90\x40\x9b\x1c\xbe\x02\xef\xa7\x74\xec\x7a\x98\xa2\x0f\x9d\x60\x8a\xfc\x25\xb8\x57\xc8\x33\xed\xe7\xf1\x8d\x11\x4d\xea\x03\x7b\x4b\x58\xa2\x06\x71\x61\x1d\xb9\x69\x19\x2e\xd1\x32\xba\xe8\xb4\x2e\x6f\x8b\x12\xb4\xde\xca\xac\x05\x00\xd4\x78\x77\xed\x09\x1c\x50\xfb\x36\xec\xc9\xb9\xd9\x65\x56\xcb\x7a\x25\x32\xc3\xcc\x96\x75\x14\xac\xf5\x92\x5c\x3c\x3d\xbc\xaf\x44\x97\xa2\x96\xd8\x66\xc9\x2e\x03\xe7\x83\x26\x02\xcd\x79\x12\x3b\x10\x0a\xbf\x5a\xbe\x03\x9f\x09\xe0\x17\xc8\x6d\x06\xd4\xf4\x06\x6d\xab\x28\x08\xb6\x2c\xa5\xc5\x6f\x22\x0c\x77\x07\x8c\x66\x17\x56\x04\xcf\x49\x36\xb1\x1f\xac\x94\x45\x64\xd9\xfc\xbd\x64\x8c\xa5\x15\x02\xab\x79\xf3\x30\x57\xda\x7d\x57\x0c\x6e\x99\xe8\x11\x18\x07\x45\x53\x45\x4b\x43\x67\xf0\xf4\x89\x3a\x43\x04\x0e\x7b\x5c\xea\xa5\x73\xb3\xeb\xe4\xa9\xab\x12\xcb\x06\xc1\x60\xb5\xca\x6d\xdb\x83\x03\xa5\xf8\xf3\x38\xc3\x02\x27\x09\x49\xa8\x4c\x5f\x2c\x18\xf8\xb4\xec\xae\xd5\x67\x55\x70\x63\x22\x62\x79\x3a\x31\xa4\xe8\x06\x62\xeb\x45\x2a\x8e\x44\xce\x42\x68\xb3\xe7\x5a\x51\xfd\x1c\xee\x05\xb0\x2a\x45\x73\x28\x4e\x3a\xc5\x54\x30\x22\x5b\x4b\x41\x92\x28\x17\x54\x2d\xc6\xb6\xb2\x66\xf7\x03\x77\x67\xbf\x3c\xb5\x1f\x2e\xf7\x70\xbb\xac\x7e\xd7\x9f\xaf\xe4\x99\x11\x01\x65\x82\x5c\xc1\x9b\xa0\x7a\xa8\x45\x6d\x20\xbe\xd6\x10\x84\x3f\xd7\xae\xed\xb6\xc0\x61\xfc\x3c\x0e\x32\xaa\xc6\x51\x95\x38\x56\x1d\xd6\x26\xdc\xa9\x65\x93\x7c\x61\xe4\xa5\x16\x2f\xf2\x0b\x54\x19\xb1\x69\x13\xa6\x69\x3d\xe0\xc0\x15\x0c\xf6\xca\x62\x63\x82\x94\x77\xab\x54\xb5\x8c\xd3\x62\xfd\x34\x05\x1f\x2d\x19\xec\x20\xf8\xaa\xc3\x88\x83\x4e\x76\x34\x6c\x7d\xd0\x85\xc8\x33\x45\x27\x75\x68\x1b\xb5\xbb\xaa\xa3\x83\x04\xd2\xac\x9d\x9b\xa1\xd4\xad\x29\x45\x5a\xe2\xc4\x76\x76\x5a\xfe\xb7\x38\x62\x0e\x21\xc8\x20\x2c\x85\x79\x7c\xd7\x29\x55\xca\x25\x0a\x18\x03\xb4\xa6\xce\xb2\x6d\xf6\x2b\x17\xee\x81\xa1\xa0\xa9\x31\x11\x1d\x8d\xd8\x40\xa2\x67\x82\x18\xb1\x10\x12\x0d\xa5\x4a\xbd\x55\x1b\x6a\x3f\x4d\x88\xee\xc9\xc7\xa6\x68\xe1\x81\x2a\xe9\xcb\x8f\x99\x3e\xa6\x38\x91\xe4\x40\x37\x0c\x55\x4b\x15\x87\xe0\x4f\x8c\x9e\x05\xce\x32\x22\x46\xcc\x66\x71\x80\xc3\x85\xf3\xc4\xb4\xdf\x16\xe2\x6a\xd7\x80\x8c\x23\x1c\xcd\x5f\x69\x8f\x30\x24\xe3\x44\x73\x12\xbb\x7c\xe1\xf2\xf6\xb8\x79\x1b\x83\xf5\x1a\x9b\x75\x3e\x75\xe5\xb3\x0e\x6c\x27\x49\xa4\x39\x8a\xaf\xa6\x9c\x11\xa1\x47\xad\x69\xf8\x89\x30\x44\xa7\x6e\x1c\x36\x76\x07\x3d\x83\x67\x4a\x93\xfe\x13\xa6\x89\x49\xc0\x77\x5d\x3b\x21\xd0\x98\xdf\x47\xcc\xb8\xbb\x59\x54\xca\x50\xa5\x8c\xca\xb9\xe6\xd4\x39\xf8\x24\x41\xcd\x68\x4b\x9c\x61\x4f\xeb\x9c\xe6\xa1\x7e\x7d\x39\x07\x7d\xa2\x82\xb3\x14\x92\x64\x2c\x2e\x93\x5b\x3e\x49\x94\x3f\x1e\x8d\x29\x8e\x2b\x25\xe2\x38\x96\x65\xe3\xa7\x51\x2b\xe9\xaf\x25\xb3\xcb\x61\x29\x2b\x30\x0a\x60\x85\x20\x88\xd3\x55\x16\x5b\x26\xff\xf6\xa9\x0d\xf5\xd4\x86\xe6\xb5\xd9\xc7\xf4\x06\x7f\x88\xd7\x4d\x71\x68\xdb\xfe\x5d\x48\xb6\x3b\x4c\x75\x78\xe3\x9c\x80\x97\x49\x07\x78\xdb\xfc\x8d\x97\x48\xdd\xe8\x13\x1c\xde\x30\xc1\xa1\xb3\xa5\xb6\x1c\x9b\xdd\x7e\x6c\xd7\x4a\x0e\x58\x01\xe6\xd4\xd4\xcb\x25\x51\x82\x46\x72\x17\xfc\x41\x66\xb8\x63\x54\x1b\x68\x81\xd9\x0a\xa9\x49\xbf\xe0\x9d\x90\x10\x27\xe6\xeb\xfc\x4d\x04\xc1\x8f\x31\x7f\xae\xd9\xea\x64\x88\xa6\x71\xc9\xb5\xd8\x23\x48\x44\x25\x29\x45\xb2\x50\x89\x18\x91\xd6\xd8\x89\x47\x6c\x4e\x89\xc0\x22\x9a\x43\x76\x63\xb1\x31\x26\x4b\xd6\x00\x1a\x99\x58\x86\xd0\xdb\xb4\xc6\xa6\x77\x58\xf7\xaa\x85\xc9\xe3\xd3\xd9\x3d\xd7\x23\x49\xcd\x27\x5e\x98\xb1\x52\x46\x68\x92\xeb\xb4\xfd\xdb\x06\xe2\xfb\xc5\x7e\xd1\x60\x7c\x1f\x4c\x14\x7c\xd1\x31\x20\xbf\xa0\x86\x3e\x28\xff\x85\x82\xf2\x1b\x96\x78\xbd\xc0\xfc\x8d\x4c\x7e\xaf\x1f\x33\xec\x7a\x7e\x8d\xb8\xe1\x55\x41\x5b\xf9\x64\xfc\xe2\x47\xaf\x71\xce\x5d\x4f\xe0\x4f\x9e\x28\x8c\x44\x2c\x34\x9d\x4d\x48\x1c\x03\xa7\x55\xdc\x56\x8a\x2e\x68\xc7\x99\x07\xf4\xdd\x8b\xa5\x26\x76\x9c\x70\x36\x93\x34\x36\x60\x2b\x19\x86\x8a\xad\xa1\xf1\x02\xc0\x05\x60\x7f\x93\x84\x08\xe7\x95\x10\xe8\x6b\x49\x99\x45\x53\xf4\xbf\xc5\x9c\x48\xf6\x95\x32\xc6\x02\xcc\x16\xe8\x91\xf1\xe7\x84\xc4\x33\xd8\xa1\xea\x60\x0e\x11\x25\x07\x88\x2a\xff\x99\x00\x34\x02\x9e\xab\x91\x1e\x3b\xc4\x9a\x19\x0d\x80\xd8\x6f\x83\x9a\xe8\xbe\x99\x6f\x8e\x10\x3a\x67\x68\x8a\x23\x75\x80\x64\x3e\x29\xda\x8f\xb9\x29\x72\xad\xb5\xef\x60\xe2\x45\x23\x7d\xcc\x78\x43\xe7\xcd\x67\xc3\x71\x07\x4d\xae\x83\x84\xe2\xad\x62\xeb\x9e\xf0\x36\x10\xa3\x97\xb9\xb4\x41\x18\x88\x33\x7f\xf4\x2d\xbc\x92\xc7\x88\x06\xbc\x4f\x83\xb7\xcc\x78\xdc\x6a\xeb\xac\x4c\x65\xdd\xb1\x14\x81\x90\x56\x50\xb2\x8e\x2a\x68\xd7\x2c\xb7\x96\x9a\xa4\x12\x04\xa7\xd6\x39\xa0\xaf\x1a\x10\x6b\x4c\x18\xa4\x1e\x3d\x15\x46\xc2\x5c\x67\x8b\x2f\x28\x7b\xd4\xbb\x5b\xa0\x62\x43\x7d\x79\xe8\xb9\x69\xd3\x32\x7d\xe3\x91\x53\xce\x8c\x83\x70\x2b\xb9\x93\xce\x18\x4e\xd6\xb4\x71\xd4\x56\xae\xee\xd3\x73\x72\x96\x15\x17\xb4\x14\x61\x8c\x7d\xc8\xf4\xb8\x96\x0d\xa9\x32\xdf\x50\xde\xc3\x28\x26\x19\x61\x31\x61\xd1\x02\x48\x84\x01\x72\x8e\x60\x38\x41\x18\xbe\xc3\xc9\x11\x3a\x33\xf9\x35\x5e\xc2\xb3\xd7\x3a\x5c\xe8\x29\x66\x74\xaa\xf5\x04\x30\xc2\xda\x51\x8e\x98\x19\xa6\xf3\x81\x04\x45\xfb\xfd\x8a\x35\xed\x8c\xbe\x41\xae\xb6\x44\x25\x66\xe5\xef\xd1\xf2\x0b\x07\x7a\x5b\xb6\x3b\xba\x39\x57\x83\x40\xe6\x93\x43\xf8\x77\x29\xe1\xcc\x01\xf5\x14\x28\x32\x24\x21\x60\x0e\xb4\x1e\x2f\xb8\x18\xdb\x80\xe5\x76\xe1\xb7\x5b\x91\xc7\x11\xf4\x51\x52\x6a\x52\xca\x68\x9a\xa7\x81\xf3\xce\x54\x2c\x88\xac\xfd\xd2\x64\x62\x64\x5a\x0f\x88\x1c\x78\x39\xd2\x97\x2b\x5b\xa0\x19\x7d\x22\x6c\xc4\x32\x4e\x99\x3a\x42\x57\x5c\x91\xa0\x44\x84\x81\x8e\xe2\x99\xa2\xa9\x41\x3b\x15\x44\x9f\x03\x03\x8a\x0d\x40\x93\x73\xac\x0e\x50\x9c\xc3\x51\x65\x44\x69\xd6\xa1\x6f\x5c\x05\x3b\x03\xf1\xd1\x62\xc4\xcc\x4d\x37\xc5\x34\xc9\x05\xb1\x32\x2b\x36\x79\x31\xc5\x90\x8b\x91\x59\x24\xb4\x60\x12\x29\x9d\xcd\x95\xde\x22\x2d\xe3\x59\x7f\xe3\x5c\x73\x23\x3e\x62\x13\x82\x30\xca\xb8\xa4\x8a\x3e\x79\xff\x25\x9d\x22\x2c\x25\x58\x50\x8e\xd0\x59\xc9\xfe\x4f\x25\xa8\xde\x6d\x71\xb5\x94\x8d\xad\xed\xb9\x3d\x1f\x67\xeb\x8d\x2c\xf5\x62\x57\x19\x4f\x24\x4f\x72\x15\xba\x60\x9b\xf7\xb6\x30\x8d\x3b\xe0\x7e\x30\x10\xf3\xe9\x88\x39\xba\x96\x47\x68\x20\x91\xe4\x7a\x97\xa4\xd9\xca\x48\x50\x45\x04\x35\x28\x4e\x44\x99\x4d\xf0\xe7\xd4\x9f\x81\x14\x8b\x47\x2d\x42\x85\x16\x78\x83\x29\x5a\xb2\x76\x4c\x8c\x84\x04\xb0\x56\xe1\x76\x80\xe9\x1f\x31\xce\x0e\x19\x99\xe1\x55\x3b\x32\x62\xa5\x2d\x41\x5f\xd3\x69\xa1\x90\xb6\xf9\x1c\x83\xb5\x1b\x43\xe4\x53\xdb\x2e\x99\x8e\xdb\x36\x69\x9a\x70\xbc\xc2\x6d\x3c\x2d\x0e\x3d\xfa\x3b\x9f\x98\x31\x6a\xbd\x9f\x2b\x90\x02\xb5\x7a\x35\xe5\x82\xcc\x31\x8b\x0f\xdc\x66\x95\xc7\x06\x37\xa3\x35\xb5\x39\x65\x0c\x24\x41\x07\x22\x4c\x0c\x16\x13\x66\xc1\x5e\x58\xc5\xcd\x6e\x45\xb1\x0f\x6b\xdd\x15\xbe\x35\xa8\x7d\x62\x0c\x10\x86\xe5\x2d\x32\x7b\xc4\x25\x4d\xb3\xa4\xc8\x69\x0a\x6c\xa3\x53\x2d\x62\x39\x1e\xc9\x9f\xc0\x74\xe5\xb4\x36\xb8\xd5\xed\xce\x69\x3a\x6b\x18\xb9\x67\xa4\x70\x6b\x38\x9b\x97\x29\x83\x19\xb0\xb0\xaf\x25\xd1\xff\x54\xa4\x50\xfb\x8c\xb0\x3e\x62\x4e\x04\xf9\x06\xb8\x8c\x6d\x36\x30\x9e\x69\x11\xda\xc0\xbc\xda\xf5\x43\x91\x71\x72\x97\xce\x89\x3d\x0c\xee\xd5\x86\x8b\xea\x3b\xca\x70\x29\xf3\x76\x03\xc1\x2f\xc9\xd7\x4a\xae\x0a\xdc\x7e\x8b\xb6\x9a\x26\x0a\xaf\x2a\x33\xb2\x06\x25\x98\x7d\x26\x48\x77\x67\xa9\xd9\x55\xbc\xc1\x10\x11\x30\x27\x49\x86\x62\x3a\x05\xb3\x94\x02\xf6\xed\x81\xc5\x0c\x16\xbc\x3e\xec\x69\xce\x0c\x48\x9c\xf1\x88\x3c\x5b\xbc\x6d\x7b\x35\x16\x8d\x1f\x8d\xd8\xb9\xfa\x4a\x6a\x11\x9d\xb3\x99\xbe\x68\xe2\x27\x2a\x8b\x22\x27\x11\x67\x32\x4f\x89\xb0\x5d\xe8\x1b\x59\x53\xa4\x2d\x10\x80\x9d\x0c\xa5\xc7\xa6\xf7\xfe\x09\x27\x34\x76\x85\x78\xf4\x8f\xe6\xcc\xe9\x51\x4a\xe7\x51\x6c\x08\x09\xb3\x9b\x1b\xeb\xb5\x7a\x33\xb1\xfe\xc7\x50\x72\x47\x69\x21\xe4\x63\x6b\xab\x3f\xae\x8a\xf8\x76\xd5\x97\x88\xf7\x93\xda\xa4\xd0\x72\xc1\xc8\xae\xc2\xd9\x2a\x14\x43\x87\xa8\x9b\x9b\x10\x60\xdd\x8f\x33\xfa\x98\xc1\xad\xc5\x7e\x2a\x13\xb4\xa3\x36\x9c\x25\x14\xef\x09\x05\xd9\x40\x2a\xac\xc5\x0b\x73\x1d\x70\x61\x35\x1c\x7b\xe7\xb4\x6f\xed\xd9\x96\x65\x22\x64\x84\x93\xfa\x0e\x2f\xb1\x37\x9b\xf7\x97\x2b\x01\xf6\xb8\x99\xb6\x97\x26\xfd\x46\x3c\x49\xd6\x29\x61\x52\x99\xf9\x69\xf1\xf9\xf2\x11\x15\xfd\xe8\x0d\x70\x7b\x01\xa7\xc6\x5c\xde\x38\xb1\xa6\x14\xa9\xec\x2e\x85\x2f\x19\x35\x6c\x61\x59\xeb\x88\xf1\x29\x14\xb9\x49\xda\xa2\xba\x32\xc1\x53\xba\x0e\xca\xb2\x09\x74\xba\x75\x76\xf1\x15\x56\x06\x67\x3d\x07\xd1\xd4\x90\x97\xed\x11\xf2\xf5\xb0\x15\x37\x97\x9c\xa1\x14\x67\x1b\x2d\xf8\x2a\xaf\xd0\x00\xa5\xc6\x25\x67\x57\x0f\xf0\x16\x09\xd4\x8b\x81\x45\x7e\xc6\x8b\x22\x35\xba\x0d\x3f\x97\xad\x45\x0e\x0f\xfa\xf5\x73\x36\xe5\x6b\x1c\xce\x22\x95\xd9\x9e\x3e\xec\x68\x36\x38\x7f\xde\x4b\x61\x76\xdf\xac\x69\x97\xf3\x78\xda\x44\xd4\x6b\x9f\x4c\xb7\x82\x2f\x69\xa3\x0c\x99\x48\x68\x9e\x5c\xe7\x6e\x2d\x1f\xad\xa0\x45\x04\xc3\x59\xbe\x54\x97\x25\x3a\xdc\xf9\x1a\x55\xda\x41\xc6\x14\xee\x82\xa9\x6f\x9a\x5b\x7d\x85\x35\xb3\x87\xa4\xd3\x62\x6d\x89\xdd\xb0\x1e\x0e\xb0\xeb\xd1\xa3\xfe\x36\x9f\xd0\x95\x45\x0e\xba\x2f\x06\x70\x33\x69\xed\x5c\x45\x64\xa6\x4d\x51\x9b\xd2\x44\x8b\xd8\xe7\x0d\x06\x4e\x97\x20\xe6\x03\xaa\x4c\xa8\xbc\x93\x9e\x72\x41\x83\xc2\xa0\x4e\x46\x42\x14\x0a\x94\x84\x4e\x9e\x40\xa1\x07\xd3\xe2\x9c\x3f\x9b\xe8\x74\x41\x35\xcf\x32\xc2\xaa\x02\x73\x8f\xe6\x05\xd4\x5a\x4b\x8c\xb1\xc9\x7f\xc0\x4d\xcc\x20\xb6\xb5\x8f\x8b\x51\xb5\x6c\xe9\x2e\x4a\x3c\x75\xcf\xbf\x73\xbd\xde\xeb\x2f\xea\x7b\xd3\x38\xc2\xfb\x72\xeb\x6b\x8f\xce\x4b\xf9\xeb\x07\x4c\x7d\x84\x4f\x9d\xd2\x83\xd1\x54\x10\x70\xf0\xa7\x1e\x53\xc3\x80\xea\x72\x0e\xf7\xdd\xdd\xd9\x0f\xc7\x0f\xe7\x88\xa8\x08\x25\xf4\x91\x8c\x58\x24\x9f\x0e\xb4\x78\xfc\x8f\x9c\x28\xfd\x73\x8b\x47\x80\xa6\x84\x49\xe0\x04\x54\xd5\xb0\x87\x9a\x17\xd2\x2d\x8c\xfe\xef\x59\xf9\xfb\x25\x24\x5f\x4b\x1f\x06\xda\x75\xf5\x6e\x80\x4c\xa1\xa4\x87\x59\x5a\xd9\x40\x31\xc6\x16\x39\x6c\xaa\x86\xb9\x41\xba\x10\xfb\x7b\xce\xd6\x14\xba\x4e\x8b\x8f\x82\x51\xb4\xc8\x74\x69\x86\x01\xeb\x7a\xbd\x3c\x24\xf3\x4d\x63\xeb\xab\x98\x48\x91\x96\xed\x6c\xcb\x45\xe1\x50\xa4\x04\x21\xc0\x42\x3c\x3d\xd9\xbb\xde\x22\x71\xf8\x89\x05\x1f\x1d\x8d\xd8\xa5\xf3\x38\x17\xbf\xca\x42\x0f\x4f\x27\x01\x04\x78\xb9\x15\x68\x36\xa6\xd2\xff\x00\x05\x5d\x64\x9e\x28\x53\xd1\x6e\x4a\x19\x4e\xfc\x40\xcd\x93\x26\x2e\x21\x30\x8b\xe6\xdb\x9a\x90\xe9\x74\x4c\x92\x75\x24\xd1\xf3\xe9\x30\x91\x9a\xbe\xa3\xc7\x96\xd3\xb9\x49\xcd\xc6\x62\x32\xb6\x12\xad\xa9\xfb\x84\x0a\x13\x34\x4e\x4c\x45\x39\x82\xc0\x47\x59\xcd\x1e\x33\x00\x11\x7a\x17\xad\xa4\x6e\x5c\x94\x26\x6d\xc3\x87\x64\x43\x2f\x08\xab\x11\x13\x39\x83\x62\x13\x3e\x62\x01\xa3\x02\x2f\x3c\x72\xfe\x03\xeb\xcd\x99\x69\x36\x61\xe0\xb8\xcd\xcb\x5a\x3f\xe3\xb9\x04\x5b\x4d\x4a\x94\xbe\xa0\xbe\x86\x3a\xb0\x26\x64\xe8\x00\x65\x82\xa6\x60\x6e\x95\xdf\x34\x6c\xdd\x29\x56\x38\xe1\xb3\x81\x50\x74\x8a\x23\x75\x8f\xb7\xd2\xc0\xb1\x6d\x66\xd3\xf0\x53\x37\x0c\x74\x7e\xa6\x17\x7f\x46\x18\x11\x30\x51\xad\x93\x37\x1f\x61\x78\xb2\x11\xe7\x06\x2b\x9b\x35\x8c\x4a\x6f\xb1\xc0\xb9\xe2\xa9\xd6\x6f\x71\x92\x2c\x0e\x8c\x45\x96\xa0\x39\x96\x73\xb7\xd1\xc6\x98\xd6\xe5\x6e\xb2\x8b\x7b\x8a\xa3\x39\xb9\x83\xaa\xc8\x4d\x8b\x5b\x19\xe5\x07\xc2\xf2\xf4\xc3\x09\xfa\x9f\x62\x8e\xa7\x83\xd3\xef\x87\xe3\xb3\xf3\xbb\xc1\x77\x17\xc3\xb3\x60\x3e\xf6\xc9\xe5\xf9\xdd\x5d\xfd\xd7\xef\xcf\xef\xeb\x3f\xde\x5c\xdf\x3c\x5c\x0c\xee\x9b\x5a\xb9\xb8\xbe\xfe\xe1\xe1\x66\xfc\x71\x70\x7e\xf1\x70\x3b\x6c\xf8\xf4\xe1\xbe\xfd\xe1\xdd\x0f\xe7\x37\x37\xc3\x33\xb7\x2a\x7f\x0b\x4e\x17\x58\x8f\x21\xf5\xa2\x79\x1a\xd5\x03\x78\x88\xca\x2f\x9e\xa0\x87\x6a\xe9\x03\x1b\x8b\x6c\x70\x2c\x9e\xb1\xd4\x3c\x0c\x42\xe1\x47\x0c\xb9\xcf\xf5\xa2\xb4\x7d\x6a\xc2\x75\xa2\x39\x41\x09\xe7\x8f\x79\x66\x59\x9b\x89\x0f\x63\xdc\x18\x7e\x88\x0c\x5a\xfb\xfe\xfc\xfe\xa4\x5e\x82\xc1\x37\x16\x20\x66\xb9\x33\x00\xe3\xc2\x8e\x9d\x82\x2d\xc5\x41\xf3\x17\xd6\xdb\xa0\x07\xbf\x33\xcb\xfa\x31\xad\x61\xa6\x2a\xdd\xc4\xb1\x2d\xfa\xeb\x26\x16\x34\x5c\xde\xd7\x65\xab\xe9\x97\xc3\xd4\x9e\x42\x13\x12\xe1\xdc\x04\x35\xe9\x7b\x4a\x08\x2e\xc2\x01\x17\xf4\xb0\xbb\x46\x2d\x1d\x35\x36\x58\xd9\x33\x3d\x71\xf9\x48\xb3\x8c\xc4\x1f\xea\xf2\x4b\xb9\x3a\xac\xad\x49\xce\xa7\x28\x38\x93\x5a\xaf\x07\x9d\xdf\x15\x4e\x99\x2f\xbc\x27\x0d\x02\x37\x8a\x50\x16\x00\x72\xd6\x77\x82\x2f\x6c\x41\xc1\x35\x86\x15\x7a\x26\x90\x52\x9d\xdb\xca\x51\x46\xf7\xd6\x67\x1b\xba\x33\x36\x6d\x57\x07\xae\x94\x6a\xdd\xca\x8c\x77\x21\x70\xeb\xef\x25\x69\x62\xc4\x5b\xe4\xc5\x9e\x99\x46\x81\x3b\xbb\x98\x37\x18\x71\x4b\x70\x83\xbb\x0d\x1a\x2c\xe4\x4b\xe4\xab\xfa\x8d\xb4\xe2\xb2\xd0\x6c\xbb\xcb\x78\x1c\x16\x48\x09\xe0\xba\xfb\xc0\x4a\x20\xc8\x2b\xd7\xea\x9e\xc7\x78\xa1\x89\x03\x62\x8d\x65\x9e\x65\x5c\x28\xd4\xd2\x86\x71\xe3\x9b\xf1\xc1\x9d\x63\xe7\xe1\x79\x1c\x34\xa2\x25\x0c\xd9\x50\x4b\xa3\x1b\x3c\x82\x5d\xd7\x82\x71\x84\x01\xb2\xa0\x08\xfa\xba\x47\x69\x49\xa5\x2e\x51\x68\x93\xf0\xbb\x4d\x86\x41\xa6\x2f\xf8\xae\x65\xf8\x9a\x7a\xbf\x76\x2d\x34\x6e\x79\x42\xa6\x6a\xdc\xe8\xf5\x59\x62\xe0\xd4\x2d\xb2\x36\x44\x19\x3a\x9b\xef\xa0\xc5\xee\x5a\xc2\x1f\x6d\x60\x8f\x56\x0d\x02\x0b\x81\xe0\x5c\x19\xf9\xb4\xd0\x61\x90\x5b\x4d\x30\x2f\xd8\x4e\x6d\x2e\x98\x17\x02\xb5\xcc\x6f\xfc\xa1\x3e\x6d\xea\x68\xc4\x86\x10\x40\x51\x28\x22\x2e\x45\x0c\xb4\x80\x95\xf2\x7f\xa9\xe8\xe8\xab\x46\x6b\xb6\x23\xbc\x16\x74\x6f\xeb\xe5\x27\x0b\x54\x14\x96\x2d\x7d\xd7\xe5\xf4\x18\xab\xb7\x13\x01\xcd\x84\x6d\x19\x77\x45\x32\x6b\x99\x37\xf3\x2c\x22\x7d\x20\x3e\x4c\x77\x75\x84\x7e\x72\x96\x1f\x08\x7c\x2d\x6a\x32\xdb\xd8\x8d\x04\x2f\x1c\x28\x64\xd3\xc2\xee\x02\x67\x71\xd7\xa1\xb0\xcb\x17\xd8\x03\x3a\x35\xac\x72\x49\x01\x67\xcc\x58\x64\xd7\x48\xfb\x38\xf5\x1f\xdd\x91\xe5\x51\x01\x1f\xa1\x0c\xa7\x8d\xac\x02\xa1\x83\x25\x8b\xff\x65\x36\xcb\x64\xa2\xba\xc2\x5a\xb6\x2c\xa2\xf5\xa0\xea\xf3\x03\x1e\x40\x93\xa8\x8a\xa6\x34\x49\x40\x0e\x38\x42\x03\x28\x0f\x0c\x89\x9c\xfa\x2a\x74\x01\x16\x74\xc6\xf8\xaa\x1c\xb3\x16\x62\x8a\x02\x62\xba\x6b\x27\x26\x09\xd4\x54\xe4\xf1\xef\x86\xa2\x76\x80\xe9\xa2\x79\x0b\xae\x23\x62\x77\x47\x72\x59\x43\x79\x7f\x8b\xe8\xe8\xda\x70\x83\x0f\xff\xd5\x3c\xf4\x4f\x39\x16\x98\x29\x88\xf9\xb5\xa2\xbb\x20\x41\xea\x11\xf9\x0c\xf1\x19\xcc\x18\x82\xe1\xa7\x70\x73\x9d\xcb\x1f\xc2\xbd\x10\x8d\x0f\x10\x3d\x22\x47\x50\x9d\x4d\x68\x59\x62\x52\xbc\x39\xd7\x92\xc3\x88\xd5\x62\x19\x8f\xd0\x20\x91\xdc\x7e\x41\x58\x94\x40\x39\xee\x20\x3c\xd9\x53\xbe\x75\x2b\x4d\x16\xa0\xa0\xc0\x56\x16\xcd\x73\xfb\x20\xf8\x10\x8a\x8c\x81\x4f\x3c\x81\x93\x5e\xfc\xfe\x7b\x9e\x19\x6f\x45\x5b\x9c\xc4\x0b\x96\x73\xa8\x5d\x43\x2f\xb6\x49\xa6\x54\xe0\xb2\x0d\x82\x37\x60\x63\x8a\x18\xd3\x00\x81\x05\x7d\x8d\x15\x4a\x08\x96\x0a\xfd\xe1\x9b\xb5\x62\x43\xdc\x04\x0b\xee\x6a\x8f\x6f\x91\x28\xe6\x52\x0d\x42\xe1\xce\x77\x0c\xb5\xe3\xb0\x50\x08\x23\x46\x9e\xc3\xc8\x52\x0e\xc1\xc0\xae\x20\x1c\x09\x72\x5b\x4d\x3c\x99\xc9\xcc\x87\x6c\x0d\xa3\x32\xb5\xf0\x11\x07\x77\x6c\xdd\xa7\x76\x58\x0d\x94\x65\x95\x27\x1b\xe2\x09\x90\x5c\x45\xd0\xff\x1c\xab\x11\xb3\x9c\xd5\x85\x8d\x04\x69\x5e\x83\x24\x29\x07\xda\x63\xc8\x25\x61\x7a\xc2\x50\x9f\xfd\xc8\x2f\xd0\x15\xa8\x5f\x3e\xda\xb9\x64\xa7\x2b\x0e\x8b\x89\xc7\xf3\x78\x47\x61\xdb\x8d\xd2\x4e\x93\x7d\xf9\x15\x85\xe0\x86\xee\x2f\x4c\xa1\xfc\x0e\xc2\x30\x69\x1a\xf2\x8a\x83\x55\xb7\xe9\x2f\x91\x8d\x77\xdd\x41\x77\x51\xb9\xd9\x3e\x0e\xd7\xec\x33\x6f\x30\xb7\xb7\x6c\x6e\x20\x5b\x6c\xa3\x80\xfb\xb0\xfb\xd7\xf2\xf8\x96\x86\x7e\x1e\x43\xd2\xdf\x6a\x2e\x58\x24\xd1\x39\xd6\x61\x62\xaf\xe3\x20\xa7\x27\x48\x21\x80\xe0\x3f\xc7\xf8\xec\x9b\x2d\x9e\xd7\xec\x7d\x4f\xff\xa0\x98\xbf\x9b\x8a\x0f\x82\xab\x4f\xbc\x5d\xd8\x1b\xc4\x7f\xc7\x11\x44\xfa\x43\x4f\x2e\xc7\xa0\x0e\xc8\xe4\x60\xac\x31\x18\xf3\x1b\xc5\xc3\x4c\xf0\x88\x48\x79\x84\x86\x70\xd1\xd8\x7f\x22\x3c\x75\x0e\x89\xe0\xe5\x11\xd3\x9a\x89\xc3\x6f\x09\xda\x2f\x93\x78\xd3\x09\x30\x60\x70\x5b\xf9\x72\xd2\xd5\x35\x4a\xda\xb4\x09\x87\x45\x07\x6d\x40\x59\x03\x34\x9c\x9d\xa0\x98\x47\x8f\x44\x1c\x0b\x12\x53\x79\x02\xbe\x75\xd5\xea\xd4\x4b\xb5\xb6\xbd\xb5\xa4\xd1\x16\x28\xb0\x22\x29\xee\xd4\xf4\x6f\x03\xac\x5d\x78\xed\x01\xa2\x53\x50\x27\x5c\x4e\x86\x09\x42\x76\x70\x37\x84\x29\xb1\x80\xb8\x7e\x6f\xca\xaa\x2c\x84\xd3\x34\xb4\xd0\xd6\x96\x4d\x24\x76\x11\x83\xb3\xe1\xb4\xef\xe7\x44\x12\x17\x70\x60\x26\xa5\xb8\x8d\x65\x36\xec\x22\xc3\x6a\x2e\x21\x75\xb5\xbc\x06\x56\xe9\x82\x4f\xf5\x0a\xe1\x0c\xe2\x15\x8c\x95\xa2\xf8\xc8\x27\x58\x4a\x45\x93\x64\xc4\x18\x21\xb1\x44\x90\x65\xfa\x55\x63\x86\xbc\xfe\xf4\x00\xe1\x38\x46\xff\xfb\xeb\x8f\x17\x3f\xdf\x0f\xc7\xe7\x57\x60\xb4\x3e\xbf\x18\x7e\x73\xe0\x7f\xbc\x7e\xb8\xf7\xbf\x1a\x0b\xcb\x13\x11\x28\xc5\x8f\xa0\xe2\x31\x49\x6c\xf2\x04\x19\xb1\x70\xa4\x0e\x3b\x40\x3f\x91\xc4\x45\xba\x5a\x31\xc5\x43\x28\xda\x3d\x6c\xad\x58\x6c\x6c\x7e\x6b\x28\xbf\xb7\xfe\x93\xe5\x34\xe8\x88\xc7\x77\xe1\xc4\x40\xc8\x91\xc1\x32\x48\x26\xb7\xba\x6f\x41\x70\x84\xcd\x28\x6b\x8b\xc7\x23\xec\xe9\x25\x85\xf8\x1f\xc8\xe2\x47\xad\x5e\xdf\x60\x2a\x3a\xd3\x5e\x33\x1a\x90\x3b\x31\x5a\x4f\xc7\xb2\x7a\xa8\xa4\x91\x85\x4d\xb6\x4d\x6b\xcc\x67\x13\x10\xdc\x9b\x4f\xd7\xc2\x4b\x91\xcf\x4a\x38\x94\x0a\x9f\xcf\xe1\xa0\x9c\xfc\x45\x53\xd0\xe0\x88\xdd\x5f\x9f\x5d\x9f\x20\x92\xe0\x09\x87\x50\x7e\x1b\x12\xe4\x9a\xb0\x0b\x16\xf1\x34\x68\xa8\x84\x50\x72\x80\xb2\x02\xa1\x24\x34\xa2\x1d\x99\x36\x56\x20\x95\x64\x5c\xd4\xf1\x3d\x76\xab\x02\xda\xc9\xde\x70\xd1\xe5\xfa\xd7\xaf\xc1\xd2\xf1\x4c\x2b\x72\x15\xce\x6b\xef\xe6\x29\xc1\xa6\x96\xbe\x71\x0b\x59\x5b\xbe\x0d\x60\x4d\x92\x52\x3d\x45\x7d\x70\xe4\x91\x75\xc1\x17\x6f\x72\x86\x7e\xf8\x8b\x44\x93\x5c\x8d\x58\xb9\x0d\xce\xd0\xe0\xa7\x3b\xf4\x1d\x56\xd1\xfc\x9b\x11\xbb\xd6\x6a\xe6\x0f\x7f\x69\x81\x52\x5a\x1b\x9d\x50\xaf\xc9\x19\x56\xf8\x82\xe3\x98\xb2\x59\x13\x34\x61\x51\x3f\x66\x78\x3f\x38\x41\xd7\x56\x87\x2f\x32\x41\x7c\x4a\x70\xd0\x10\x30\x64\x98\x88\xe3\x22\xc0\xca\x59\x19\xbe\xcd\x68\x66\x70\x61\x8d\xd8\xbd\xc1\x64\xd4\x5c\x95\x2a\x94\x71\x5b\xc3\x48\x6b\x65\x06\xad\x12\xbb\x0c\x29\x92\x2c\x90\x5e\x1d\x20\x63\xbf\x19\x56\x1e\x03\x79\xa6\xce\xec\x47\x0c\x14\x74\x9f\x9b\x92\xf0\x08\x27\x10\x93\x77\x18\xd8\xf4\xb4\xda\xce\x73\xc8\x0f\x37\x45\xcf\x17\xe5\xd0\x59\x0f\x59\xe0\x85\xb2\x70\xa3\xc0\x00\x00\xfb\x68\xbd\xb1\x29\xd7\x1c\xc7\x60\xb1\x81\xf1\x2d\x31\xab\xa3\x3f\xf4\xd8\x6c\x66\x59\xf4\x53\x9f\xb6\xc5\x73\xe6\xb0\x48\x22\x30\xdf\xb3\x05\x84\x6f\x43\xd1\x11\x0e\xa1\x1f\x05\x77\xb6\x44\x59\xdb\x45\x7f\x27\x06\x9f\x8d\x98\x89\x14\x2c\xed\x4b\x88\xde\x13\xf4\xce\x19\x04\x32\xd6\x73\xc5\xf2\xcc\x06\x36\x5a\x59\x3f\x13\xe4\xd0\x67\x40\xc5\xa5\x35\xd5\x37\xec\x11\xba\x0d\xd5\xeb\x98\x47\x79\xea\x90\x95\x21\x7b\xaa\x28\x2b\x5f\x92\x78\xcc\xc5\xbe\x8a\xe2\x01\xa5\x45\x11\x48\x1f\xef\xac\x1f\x1b\x82\x19\x84\x9f\xd6\x25\xf5\x76\xc1\x17\x78\xc7\x76\x51\x6b\xa6\xa1\x71\x56\x6e\xa9\xd4\xda\xd6\x79\x89\x57\x05\xfa\x2b\x17\x20\x6c\x91\xcf\x19\x07\x23\xb7\x49\xcf\xe2\xf1\x57\x12\x9d\xdf\x68\x09\x48\x6b\xbc\xfe\x0c\xe6\x52\x99\xe0\x32\x48\xd7\x31\x5f\x9b\x74\x81\x03\xf4\x2d\x1a\xe5\xdf\x7e\xfb\xa7\x08\x7d\x76\x7f\xfc\xf9\x3f\xff\xf3\x4f\x7f\x5e\x27\x9d\xc4\x29\xe4\xd0\x6e\xb1\x46\xbe\x9c\x54\x59\x24\x0a\x77\xa0\xce\xa9\xb6\xd8\x05\x7b\x00\xdb\x96\x7f\x13\x94\xc7\x20\x76\x08\xcf\xec\x09\x97\xe1\xc9\x44\xa5\xa3\x59\x44\x12\x48\xa2\x0e\xca\x1c\xc2\x0b\xbb\x56\xa2\xff\x5f\x4b\xc0\xca\xc6\xfa\xa8\x6c\x16\xe3\x44\x13\x2f\x5e\xeb\x46\xd0\xd7\xd6\xfe\xa7\xc0\x81\xf8\x8d\xbb\xe0\x78\x12\x13\x61\xc6\xe4\x4d\x76\xde\x90\x08\xcc\x81\x7c\xce\x12\x1e\x3b\x78\xd4\x22\x17\x90\x82\x80\x30\xfc\x8c\x35\xe7\x3e\xb0\x30\x5a\xe6\x23\xe3\x79\x99\xe2\xc8\xa0\x82\x4a\xf4\xf5\xe7\x13\xfd\xdb\x01\x5a\x9c\x40\x10\xe9\x01\xfa\xf5\xc4\xa2\xe5\x60\xa1\xc6\xfa\xa7\x6f\x9c\xac\x6d\x9b\x80\x41\x53\x89\xbe\x3a\x7e\xc2\xc2\xd4\x8c\x3e\x36\x23\xfa\xca\x72\x56\x5f\x17\x2f\x94\xcd\x13\xce\x1f\x6d\x80\x6d\xed\xc3\x63\x07\xbc\x06\xe4\xed\xfd\x26\x66\xeb\x7d\x62\xbe\x42\x87\xf0\x02\x41\x47\xd9\x04\x1d\xfd\x5d\x72\x86\x8e\x16\x38\x4d\xec\xaf\xee\xa9\x8d\xff\xc5\xd2\xe6\xc4\xc5\x3e\xc8\x27\x59\x18\x4b\xe9\x77\x09\x9f\xc0\xac\x2e\xdd\x4c\x4d\x04\x2d\x0c\xb4\xb8\x7d\x8a\x0b\xcb\x4e\xc4\x25\xa2\x02\x7e\x50\xca\x95\x79\x05\x78\x5c\xd3\xac\x3e\xfb\x21\xfd\xb7\xf1\x0b\xc3\xa2\xb8\x24\x3e\x63\x1c\xf6\xd1\x6b\xba\xd1\xcf\xe8\x6b\xcb\x82\xbe\xd1\x77\x8c\x0d\x57\x36\xcb\xd0\xd4\xc1\xc2\x77\xf0\x73\xd0\x01\x65\xc8\xa4\x65\x2e\xf9\xf2\xd7\xe3\xa3\xa3\x23\xff\x35\x64\xad\xff\xbf\x88\x2a\x49\x92\xa9\x69\xc9\xdd\x60\x8b\x11\xbb\x74\x85\x17\x9c\xf1\xba\x80\x74\xcc\x04\x57\x3c\xe2\x09\x3a\x2c\x0c\xba\x31\x8f\x24\xfa\x77\x2d\xd6\x06\x4b\x09\x3f\x6a\x3d\xae\x05\x06\xd6\x20\x3d\xbf\xd2\xa1\xb2\x06\xf1\xea\xb1\x0a\x51\xdc\xbc\x62\x8b\x65\x58\xc5\x03\x68\x41\x53\xce\xb1\x45\x7a\x13\x42\xbf\x4c\x3e\x2b\x78\xd4\x02\xa4\xd7\x18\xca\xde\x7c\x53\xd6\xd8\x6d\x81\xa7\x67\xc8\xba\x65\x01\x2c\xde\x95\xe5\x0c\x66\x9e\x07\xa1\xfb\x44\x5f\x2e\x2c\x2c\x05\x20\xf3\x34\xc5\x62\x71\x5c\x9c\xb6\x3a\x71\x16\x48\x6b\xc0\x63\x12\xb7\x00\xe0\xc2\x4d\xec\xd1\xb2\x51\x0c\x56\xbc\x74\x37\x9a\x3f\xbb\x11\xd4\x32\x0c\x10\x0b\x08\x8b\x78\x6c\xe9\xba\xc8\x3e\x2d\x4b\x2c\xfe\x9d\xba\xac\xe2\x22\x62\x64\x61\x8c\x63\xca\x40\x78\xd8\x37\xdc\xc7\x2d\xec\x9b\x8f\xa1\x2a\x2e\x99\xad\xe1\x1e\x3d\xbf\xbe\x73\xdf\x74\xbf\x74\x61\x1d\xca\x22\x3b\x4e\x42\x7c\x3c\x36\x43\x02\x3f\x17\xd7\x2f\xc4\x76\x18\xeb\x4c\xee\x73\x73\xcd\xbf\x4f\xf9\x0d\x4d\xf4\xad\x05\x34\x7e\x34\x62\xa5\x9f\x0f\x10\x49\x68\x4a\x99\x8f\xad\x33\xcc\x9d\x4f\x8d\xf4\xfc\x48\x95\xde\x32\x19\x3f\x6a\x0e\xe6\x70\x9d\x02\x95\x6a\xc0\x16\x8e\x74\xbc\x63\xca\x5a\x20\x72\xa9\xc7\x55\xe8\xe8\x5a\x98\xd5\x4d\x1c\x5a\x81\x94\x06\x84\x07\xe7\x77\xc4\x74\x6b\xee\x2c\x15\xe1\xc2\x41\x7b\x41\x73\x87\x0e\x10\x3f\xe0\x00\xd0\x47\x29\xe6\xd7\xcb\xbf\x0d\x02\xca\x90\xe5\xe9\xb6\xc9\x26\x36\x7c\xf8\xad\xcc\x74\x37\x82\xb8\x9b\xca\x26\x2e\x11\x96\xa7\xee\x40\xad\x41\x71\x43\x2b\xfe\xc4\x24\x4a\xb0\x41\xaa\xd1\x0d\x41\xe4\xe3\x81\x71\x90\x66\x41\x5f\xe6\x7a\x31\xdd\x98\x1a\x3b\x09\x61\x5f\x9b\x7f\x7f\x83\xec\xdd\xf0\xed\x81\xbd\xcf\x85\xf4\x08\x20\x66\xcf\xa1\x46\x23\x89\x8d\x0d\x1d\x50\x89\x67\x58\xc4\xc6\x5a\x1e\x6a\x15\x26\x83\x57\xcb\x5f\x0b\x9e\xa3\x67\x2a\xe7\x23\x76\xcf\x9d\xc1\x11\x31\xee\x71\x9d\x0f\x40\x19\xad\xf5\x87\x25\x30\x01\x18\x75\x13\x05\x68\x26\xbc\x55\xae\x11\x44\xc1\x8e\x19\x8f\xc9\x76\x00\x46\xf7\x85\xaf\xc2\xf9\xaf\x05\x31\xf9\x60\x70\x53\xb4\xa5\xd3\x12\x29\xd7\xb4\xcd\x57\x37\x1e\xee\x21\xdb\x0e\x94\x04\x7e\x5e\x0b\x5d\x3b\xc4\x06\xf3\xb7\x1a\xb4\xe2\x34\xce\x20\x1b\xb8\xb4\xf6\x1e\x2d\x79\xdb\x4d\x88\x1a\xd0\x8a\x3a\xdd\xfd\x66\xee\x11\x2c\xbb\x0f\x30\xc6\x68\x26\x78\x9e\xf9\x94\x79\x97\xee\x67\xb6\xc1\xca\x34\xe7\x6c\xca\x4f\xac\x4e\x75\x41\xd9\xa3\xa1\xf8\x97\xda\x23\x03\x88\x4d\xe2\x12\x8c\x9b\xab\xd2\x0a\x73\x38\x44\x94\x45\x49\x0e\x17\x9f\x54\x38\x7a\x34\xa0\xde\x6d\x46\x5f\xfd\xcd\x78\x75\x32\x65\x8b\xc4\x94\x27\x89\xed\xb6\xb8\x40\x8b\x32\xd6\x4f\x14\x23\x8c\x1e\x6e\xcf\x9b\xfb\x7e\xa4\x75\x67\x4e\xf3\xed\x59\x26\x10\xf8\x9f\x1f\xe8\x5a\x71\x97\x15\x58\x3c\x52\x22\x75\x6f\x5c\x6a\x03\x5d\xd5\x44\xfa\x09\x2b\xb2\x6d\x26\x94\xc1\x00\x5b\x23\x52\xaf\x06\xae\xb6\xd4\x7a\xbc\x25\x32\x59\x81\x2a\x06\xa1\x41\xed\x10\x69\x61\xb0\x16\x3c\x5c\x03\xbb\x01\xde\xef\x36\x9f\xca\xbb\x2b\xa6\xb3\x7c\x98\x09\x21\x6b\xa0\x0d\xdc\xe9\xd7\x3b\x0e\xb2\xf4\xea\xb2\x31\x3e\x63\x53\x7d\xa1\x0e\xfa\x1b\x5b\xc9\x6e\x1d\x66\xeb\xc8\xd1\x88\xd7\xd2\xe7\x88\xf8\x91\xb8\x30\x1c\x2f\x8b\xb9\x7e\x67\xe0\xdb\xe2\xa5\xe2\x0e\xde\x42\xdb\x40\xf8\x81\xd8\xba\x65\xd8\x84\x16\xbf\xc6\x69\x67\x40\xb9\xa2\xe3\x33\xfb\xf1\x65\x0d\x5e\xce\xb3\xa2\x4b\xc8\xe2\xf3\xc0\x29\x29\x66\xfa\x64\xbb\x5e\x5b\x8c\x90\x46\x22\xdc\x68\x48\x0f\xd9\x46\x03\x32\x3d\x76\xac\x7b\x68\xbb\x72\xad\x3c\x1b\x3b\x3c\x4e\x8c\x9d\x49\xcd\xc1\x04\x51\xd4\x0b\xd2\x1c\xad\x6c\x8a\x30\xb5\x85\x92\xff\x8f\xbd\xaf\x6b\x6e\x1b\xc9\xce\xbe\xcf\xaf\xe8\xaa\x5c\x78\xfc\xbe\x14\xb5\x33\x5b\x49\x4d\x5c\x95\x0b\x5a\x96\x77\xb8\x6b\x4b\x5e\x49\x9e\xd9\xbc\x61\x8a\x6e\x02\x4d\x12\x11\xd8\x0d\xa3\x01\x69\x98\x6c\xfe\xfb\x5b\x7d\xce\xe9\x0f\x7c\x12\x20\x25\xdb\xbb\x99\x8b\x64\xc7\x22\xd0\xe8\xef\x3e\x7d\xce\x73\x9e\x87\xe7\x1b\xbc\x20\x69\x51\xe8\x97\x2d\x23\xec\x73\x1e\x4e\x18\xe1\x23\x34\x59\xc3\xb8\x27\x98\xdf\x7d\x2b\xcd\xd5\xb2\x4a\x2e\xea\x4e\x65\xa7\x6e\x1c\x30\xe7\xf9\x44\x8c\x48\xe5\xc8\xc4\x1d\x9b\xb5\xd2\xcd\x99\x72\xa2\x36\xf7\x15\xdf\x39\x46\x00\xab\x10\x4c\xf9\x5d\x58\xb9\x95\x00\x5e\xdc\xee\x3a\x9c\x2c\xc2\x1d\x56\x81\x44\x31\xbb\x6a\xb0\x90\x33\xfb\x88\x67\xf7\x32\x17\xb3\x1c\x0d\x70\xc0\x87\x22\x1a\x1a\xee\x57\xdc\xf7\x3a\x35\xae\xa3\x11\x63\x93\x37\xeb\x3a\xe2\xe6\x7e\xe7\x4e\x23\x52\x0c\x72\x1c\x9e\xbd\x6a\x4d\x24\x9f\x7f\xc2\xc7\x6f\x6d\x13\x6b\x4a\xfc\x6d\x1f\x3e\x7c\x97\xb2\x8c\x11\x54\x50\x28\xfe\x8f\x18\xd2\x74\xef\xa7\xa9\x27\x89\xab\x7d\xac\xb9\x5a\x8b\x93\x76\xe3\x84\xef\x96\xb9\xea\x96\xb3\x1a\xd0\x4d\xb6\x88\x8a\x7f\x67\x8b\xf2\x16\x7b\xf6\xb9\xe4\x29\x1e\x6e\x92\xa6\xa3\xad\x36\x98\xca\x3f\xfc\x33\x9b\xc1\xe9\xc3\xde\xc3\xbe\x08\x01\x7e\x28\xad\x50\x2c\xd9\x65\x22\xd7\x4a\xf2\x4e\x5d\xb7\xfb\x1f\xf5\x92\xb4\x69\x96\x3c\x8a\x54\xd9\xd4\xa1\x19\xd1\x92\x96\xd2\xc2\x46\x71\x76\x5f\xae\x44\x2e\x05\x6a\xd7\xc1\x73\xcc\x3e\x37\xa8\xba\x8a\x97\xc5\xf6\x87\x65\x94\x26\x83\x05\x73\x20\xbb\x68\x66\x5e\xbb\xc0\xb7\xfa\x1a\x50\x29\xbf\x52\x75\xc9\xf0\x37\x86\xbf\x4d\xd9\x6b\x1e\xdd\x0b\x19\xb3\x2c\x2d\x37\x09\x91\x09\xc0\x09\x05\xdb\x65\xe0\x9e\xad\x36\x0c\x6d\x0b\x2c\xdf\x1c\x43\x0b\xb9\xe3\xf7\x48\x62\x4b\x46\x64\xc4\xd3\x4e\x2a\x2a\x67\x56\x2f\x93\xe6\xdc\x3d\x38\x5a\xee\x3c\x6c\x16\x53\x9f\x7b\xba\xc4\xdc\x8a\xc7\xad\xa2\x88\x74\xc5\xaa\x1f\xb1\x70\xdd\x6c\x6d\x70\xbe\xd8\xbc\x7c\xa7\x62\x48\x95\xc1\xd5\x0b\xee\x5e\x20\x62\x2e\x25\xe3\x40\x1b\xf3\x42\xb3\x32\xb3\xf6\x19\xf8\x21\x53\x88\x0a\xe3\x10\x98\x1f\xb2\xc4\xdc\xd2\xb6\x62\x21\x01\x69\xcb\x5c\xf3\x1a\x62\x57\x4c\x78\x40\x4c\xdb\xd6\xb0\x46\xd2\x84\xd3\x62\x9c\x0d\x1e\xe7\x03\xf3\x74\x20\x8a\xb8\xd8\x0a\xb9\x3c\x82\x4e\x78\xf8\xa0\x55\x10\xc3\x64\x06\x3b\x7f\xae\xeb\xc2\x52\x26\x24\x20\x45\x2e\xfc\x90\x2b\x33\x59\xd7\xcc\xe8\x44\x33\xcd\x8b\x44\x9b\xbd\xac\xb5\xc7\x3d\x55\xc5\x29\xbd\xce\xc7\xf1\x63\xb4\x70\x63\xd4\xfa\xc2\x65\x25\x4c\xd9\x5b\xf0\x82\x05\x37\x03\xe5\x98\x26\xba\x36\xac\x62\x2b\x3a\x29\x17\x9f\x02\xce\x63\x5b\x10\x3c\xdf\xeb\xdc\x74\x19\x28\x53\x36\xf3\xd1\x07\xe4\xda\xc0\xb8\xc2\x81\x16\x89\x54\x8b\x63\x26\xdf\x20\x47\x1d\x44\xe8\x61\x02\x31\xb0\xa4\xb4\xf9\xbb\x67\x90\x77\xd5\x7c\x84\x24\x4f\x7e\x2f\x64\x9f\x37\x66\x78\x0d\xd1\x5d\xd6\xeb\x12\x70\x7e\x38\x85\xae\xb8\x63\x2a\x38\x7c\xd9\x79\x7a\x93\x64\x7d\x6e\xba\xdc\x5c\x43\xa2\x7b\x4a\x2d\x41\x6f\x2c\x11\xa4\x3c\x6e\x95\x0e\xd7\x99\x1d\x3f\xbc\xc9\xe6\xa5\x63\x09\x87\xd4\x1c\xd7\xc1\x88\xc9\x91\x2a\xe4\x4f\x81\x5a\xbb\x45\x8a\x9e\x66\x37\xde\xcc\x6e\xa1\xd0\x0d\x10\xc5\xb2\x45\x35\x57\xf3\x9f\x7e\xd4\xd7\xb0\x62\x9f\x22\x53\xbf\x5d\x96\xf5\x74\x94\xfc\x91\xf1\x01\x87\xff\xf2\x9a\xae\x3c\x76\xdc\x12\x99\x8a\x99\x9f\x5e\xe3\x05\x5c\xbf\x7e\xb3\x6a\xc2\xaf\x83\xda\x76\x68\x66\xbf\x0f\x40\x04\x6c\x55\x26\xa8\xa1\x5e\x31\x08\x95\xb5\x38\x80\xff\x18\x8e\xff\x44\xbb\xf3\xa4\x7d\x8e\x7d\x50\xf1\x29\x13\x6b\x3c\x9d\x5e\x73\x5e\x0f\xc0\x18\xeb\x36\xcd\xf7\x9e\x9e\xc8\x54\x37\x3a\x34\x5e\x0e\x57\x49\x07\x38\xc0\xaa\x5c\xdf\x82\xba\x48\x17\x63\x45\x40\xbc\x6f\x53\xd0\xcc\x38\x9b\xcf\xb8\x84\x88\xae\x41\xa1\xe8\xb2\x3f\xfe\x39\xfb\xe3\xed\xf5\xd5\xd9\x8e\xe7\x7a\xcb\x21\x23\xd8\x96\x35\xb1\x82\x6d\x78\x3d\xb6\x51\xaf\x44\x2e\xe4\x19\xdb\xa8\x09\xc6\x58\x5f\xb1\x6d\x51\x64\xfa\xd5\xf9\xf9\x26\x29\xb6\xe5\x6a\x1a\xa9\xdd\xb9\xef\x9a\x73\x9e\x25\xe7\xab\x54\xad\xce\x73\x01\x28\xdb\xb3\xef\xa7\x3f\x7c\x0f\x23\x73\xfe\xf0\xfd\x39\x44\xd6\xa6\x1b\xf5\x8f\xef\x7e\xf8\x97\xdf\xff\xb3\x29\x38\xdb\x17\x5b\x25\x5f\x51\x00\xb7\xb7\xec\x33\xb4\xca\xcf\xf1\x95\xda\x57\xfe\x65\xfa\xbb\xb0\x1a\xf4\xe8\x4e\xc5\x22\xd5\xe7\x0f\xdf\x2f\xed\xc0\x4c\xb3\xfd\x6f\xb8\xd4\xaf\x86\x4b\xbd\x4f\x8a\xdf\x70\xa9\x5f\x15\x97\x3a\xdc\xc2\x71\x7b\x0c\x10\x7d\xfa\xfd\xd1\xfc\xdd\xed\x91\xd6\xf5\x7e\x68\x1f\x6a\x39\x1c\xc2\xac\x81\x13\x8e\x88\x7b\x31\xea\x8a\x5d\x6b\xae\xbb\x3a\x74\xb8\xd8\xc6\x92\xed\x77\x1a\xf3\xa3\x92\xa4\x01\x05\x92\x44\x40\xe4\x8c\x2e\xc1\x8c\x27\x6d\x68\x53\x42\x3b\x9d\xd2\x7f\xcf\x49\x49\xfe\xd4\x5c\xe4\xd4\xdc\x23\x79\xc8\x53\x7c\xdb\x62\xb3\xd4\xa3\xe5\x1f\x7f\x0a\xd6\xee\x81\x3a\xae\x8e\x8c\x18\x27\x0f\xd4\xc5\xd6\xab\xa3\x1a\x5b\xae\x8f\x03\xf9\xcd\x90\xf2\xcf\xc5\xe9\x9c\x2a\x3e\x7d\xd0\x1e\x1c\x96\x45\x01\x44\xc2\x89\xac\x29\x2b\xf3\x4c\x69\xa1\xa7\xec\x6d\x4d\xe9\xd0\x03\x17\x6f\xde\x5e\xb0\xef\x7f\xfc\x97\xdf\x2f\xe4\x77\x2d\xe7\x36\xec\xf7\x2a\xdf\x10\x8e\x12\x4e\xeb\x1d\xd7\x85\xc8\xcf\xf3\x75\x74\x8e\xbb\xdc\xb9\x79\xff\x8c\x3e\x7a\xa6\xd6\x67\x8e\x92\xf8\x8c\xd8\x59\xa7\xbb\x78\x1c\xc1\x40\x65\xea\xe1\x59\x43\x07\x8d\x86\x43\x09\xa9\x88\xd4\xda\x91\xcf\x63\x9e\x0b\xea\x54\xa8\x75\xcb\x7f\xbc\x4e\xd5\x4a\xbf\x74\x04\x68\x5c\xdb\x6f\x78\x46\xa2\xee\xa5\xf9\x34\xec\xe4\x76\x8a\x3c\xa7\xa3\xc2\xee\x25\xe1\x75\x64\x4c\xc7\xb7\x2f\x36\x7f\xdc\x23\x1f\x03\xcf\x55\x29\x2d\xbb\xb3\x92\x42\xad\x01\xc5\x07\x96\xb0\x45\x29\x80\xaf\xd6\x9c\xb4\x9e\x7b\x21\x17\x19\x1e\x30\x10\x55\xe8\xee\xee\x13\x19\xce\x0f\xf5\xf3\x73\x30\x9c\x9f\xda\xef\xb4\xa1\x7c\xa5\x0e\x3f\x15\x4a\x88\x4b\x69\x0c\xaa\xc2\x3c\x7f\x30\x82\xea\xf6\x01\xaf\x3e\xe4\xc9\x84\x33\x9e\x83\x91\x26\xce\x0a\x75\x06\xa4\x35\x40\x85\x82\x9a\x03\x5d\xb0\x0a\x88\x3c\x8f\x39\x26\xcd\xf3\x03\xea\x89\x86\xf9\xaf\x41\x45\xc9\x26\xd1\x48\xe1\x49\x90\xac\x44\x4a\x91\x53\x4c\xed\xe0\x89\x3a\x32\x2e\x1d\x0e\x65\x3f\x22\x2b\xd0\xb5\x0e\xf8\xe0\x1d\x1e\x9f\x07\x9b\xc0\x94\x81\xf5\xb9\x55\x3b\x65\xcc\x19\x55\xea\xe0\x47\xbc\xbd\xc0\x21\xdc\x69\x7b\xed\x78\x86\x24\x75\x5f\xaf\x35\x66\x69\x99\x9f\xd0\xa9\x17\x3e\x34\x4a\x62\x63\x55\x15\x15\x38\x50\x7f\xc7\x06\xdf\x3f\x6f\x00\xf5\x80\x3a\x75\x20\x15\x4b\x1c\xcf\xc9\x7f\x99\x7b\x8d\x99\x52\xee\xa6\xe0\x4e\x6e\x04\xe9\x20\x17\x63\x48\xf7\x6a\xad\xf9\xce\x6c\xe9\x72\x37\x72\x0c\x1c\xc8\x78\xc8\x00\x70\x89\xb0\x5b\x8b\xb7\x3d\x6b\x05\xdc\x76\xad\x4b\x2b\xcc\x1a\x2f\x2d\x5f\xe8\xb8\xaa\xde\xba\x02\x88\x1a\xb4\x59\x6f\x4f\xb7\x04\xe8\x6c\xec\x63\xdc\x10\xac\x6d\xd1\x01\xba\x91\xe3\x17\x23\x08\xac\x8c\xe9\x3b\xf8\x08\x4e\xce\x46\x0f\x06\x6b\xa1\xab\x03\xc7\xb9\xd8\xfa\x3c\x56\x6d\x70\x7e\x64\xa8\xf3\xd9\x3b\xa6\x96\x8d\xcb\xa3\x7b\xf1\xc1\xab\x50\xef\x33\x31\x61\xab\x12\x7e\xbf\xba\xbe\x0b\xd1\x1a\x09\xb6\xf6\x2c\xda\x8a\xe8\x1e\x1c\x26\x78\xe4\x39\xd1\x46\x62\xc3\x5b\x48\x2f\xfd\x55\x28\x0b\x3d\xd8\x3b\x36\x74\xa7\x08\xa0\x72\x16\x27\x3a\x4b\xf9\x1e\x82\xbc\x12\x71\xfa\x3e\x40\xec\x12\x5c\xcc\x56\x70\xc8\x5f\x3c\x7c\xa4\xcd\xa8\xcc\xfc\x7b\x63\xfb\x92\xe7\xab\xa4\xc8\x79\xbe\x67\xbe\x33\x9b\xfb\x01\xd3\x62\xc7\x65\x91\x44\x0b\xb9\x13\x5c\x86\xa8\x3c\x0a\x72\x9b\x4e\x8e\x95\x20\xbe\xe0\xf5\x5a\x44\x85\x27\x1c\x04\xe3\xdd\xf5\xd4\xa1\x35\x38\xae\xed\x6e\xe5\xf5\x36\xfd\xa7\x44\x62\x7a\x7b\xb2\x03\xcc\x27\xcd\x21\x3a\x1a\x8f\x0c\xde\x80\x54\x1c\x1d\xb9\xf6\x32\x08\xff\xb2\x73\x8a\xad\x44\xf1\x28\x20\x9f\x9e\x12\x00\xdb\x6c\xfc\x93\xe5\x02\x4e\x53\xff\x6d\xd7\x4d\x0e\x90\x60\xb8\xc0\x42\x30\x99\x23\xfe\x91\x35\x06\x9f\x17\x94\x92\x08\xde\x9e\x17\xe4\xb7\x7a\x01\xc7\xb4\xb9\x3d\xe6\x0f\x22\x5e\xc8\x2a\xad\x12\xd9\x8c\x7e\xc1\x31\x2f\x84\xf5\x34\xbb\x8d\xed\xe3\x41\xbe\xfc\x4b\xa0\x92\xf0\x24\x92\x2e\xe9\xae\x47\x98\x0b\x1b\xfd\x9c\xb7\x2a\xab\x09\x18\x5a\xf7\x03\x20\x59\x42\x5b\xa1\x1b\xd2\xc5\xab\xe0\x29\xdc\xa4\x74\xa4\x31\xc8\x28\xe7\x00\xb0\xe4\x97\x6c\x78\x3a\xdb\xca\x58\x48\x9b\x4d\xbd\x2e\x53\x64\x09\xed\x92\x0a\x23\x0e\x29\x9b\xf9\xf1\xf5\x32\x80\x9c\x5f\x8d\x05\xda\x62\x0e\xf6\x10\x80\x91\x71\xaf\xb3\xb3\x5e\x48\x8d\x82\xd4\x56\x56\x08\x1c\xcf\x1b\x51\xc0\x69\x1e\x97\x29\x26\x07\x83\xc7\x1c\xf8\xa8\x78\x9a\xb2\xa4\xd0\x0b\xe9\xe8\xb3\x90\x0c\x1d\x76\x58\xeb\x52\xb7\x8a\xb4\xd2\xe9\xda\x92\x76\x3f\xd8\x61\x49\x94\x14\x0d\x08\xf7\x3e\x94\xe2\xc8\x32\xc1\x31\x97\x0d\x87\x6d\x21\xc3\x3b\x57\x7d\x10\x28\xf1\x0b\x34\xca\x9f\x22\x07\xab\x07\x91\x0f\xc2\xee\xa3\x87\x64\xca\x66\xd8\x3a\x73\xe1\xb2\x2a\x9b\x58\x5b\xca\x9f\x27\xa4\xa5\xb9\xd5\x14\xda\xfa\xc8\xfd\xbd\x15\xe4\x9c\xa3\x32\xe5\x79\x0a\x9c\xf4\xeb\x32\x65\xc9\x3a\x10\x0c\x85\x31\x40\xf2\x24\x33\x5c\x91\x82\xb3\xda\x7a\xc9\x35\xdf\x89\x20\x6f\x9b\xdc\x3b\x69\x80\xa1\x40\x46\x68\x0c\xce\x9b\xb2\x5e\x4e\xd9\x9b\xba\xc2\x3c\xac\x89\x80\x74\x31\xd1\xb8\xfd\xb9\xfa\x06\x29\x87\xa8\x54\x9f\xac\xcd\x95\xf2\x45\xb0\xea\x3a\x46\x10\xc8\xdb\xc7\x01\x34\x2c\x75\x7f\x3f\x6a\xb8\x35\xe5\xd8\xbc\x5a\x83\x6d\xb8\x05\xd1\x51\x41\x7b\x2a\x8c\xac\x64\x48\x58\x79\x44\x45\x1d\x21\x68\x4b\x65\x77\x3d\xfa\xa4\x30\x8e\x23\xab\x1a\xa8\xfd\x8c\xaf\x68\x30\x73\x42\x38\xce\x90\x9e\xdd\xf0\x62\x2c\x36\xc7\x25\xe3\x8c\xaf\x68\x2b\x0e\x6a\x48\x35\x61\xf7\x18\x59\x4f\x2f\xc1\x3f\xbe\xa2\x4e\xfa\xd9\xeb\x01\x78\x4d\xfc\x4a\x0e\xa5\x65\x3a\x74\x2d\xd0\x0b\x49\x87\xdd\xf8\xf4\xcf\x99\x9f\x73\x20\x78\xc4\x4c\xf5\xa7\xec\x5a\x0a\x44\xce\xa9\x75\x70\xa8\x50\x05\x48\x19\x09\xc8\xe6\x65\x20\x41\x9d\x26\xf2\xde\x52\x4b\x98\x25\x37\x61\xdc\x97\x0e\xbb\x1e\x4e\x1b\xdc\x45\x3a\x6c\xc9\x36\x69\x86\x13\xcc\xcb\x61\x09\x9a\xed\x77\xfe\x00\x80\x3a\x7e\x07\x68\x6b\xc7\xf0\x61\xe9\x45\x92\xbb\x5b\x5c\x45\x63\x3c\x44\x8d\x16\x49\xb1\x3f\xd4\xbf\x1f\xb6\x55\x14\xe2\x08\x21\xa3\x8f\x57\x6f\x2e\xdf\xce\xaf\xaa\xea\x43\x7f\xfe\x78\xf9\xb1\xfa\x97\x9b\x8f\x57\x57\xf3\xab\x3f\x84\x7f\xba\xfd\x78\x71\x71\x79\xf9\xa6\xfa\xdc\xdb\xd9\xfc\x5d\xed\x39\xf3\xa7\xea\x43\xb3\xd7\xd7\x37\x35\xbd\x23\x2b\x56\x14\xfc\xe9\x6e\xfe\xfe\xf2\xcd\xf2\xfa\x63\x45\x32\xe9\xcd\xbf\x5d\xcd\xde\xcf\x2f\x96\x2d\xf5\xb9\xb9\xbc\xb8\xfe\xf9\xf2\xe6\x80\xe2\x91\x6f\x6f\x6b\x97\x3e\x05\x7c\xec\x68\xfd\xab\x19\x5b\xe7\x89\x90\x71\xba\x47\xec\xbd\xbd\xd9\xd6\xc0\xb4\xe1\xd9\x9b\xec\x84\x2a\x4f\x81\xd0\xdf\x6d\x51\xa1\x1e\x58\x30\xb0\x34\x4a\x99\xe5\xfa\xbe\x93\x23\xb1\xc8\x9b\x51\x81\xde\x4c\xa1\x22\xdf\xbb\x5c\xb4\xbe\xea\x78\x06\x25\xfa\x08\xcb\x44\xde\x57\x17\xb0\x8c\xf2\x32\x2b\x92\x55\x77\x52\xc4\x40\x66\xa1\xf1\x77\x6f\xe4\xfb\x6b\x27\x47\xb9\x6a\xdf\x18\x2b\xb9\x01\xa7\x00\x8f\xa1\x84\x63\x65\xdd\xdc\xdb\x16\xac\x99\x95\xab\x34\x89\x58\x12\xd7\xfd\x29\x98\xc2\x86\x2e\xe3\x3a\x2d\x68\x26\x72\x30\x55\xcd\x0d\x20\xcb\xc5\x19\x2f\x8b\xad\x55\x9c\x77\x99\x8c\x48\xd3\x29\xa2\x5c\x60\x2c\x40\x68\x70\xd2\xa2\x9e\x57\xf0\x25\xa8\x0c\x65\x70\xc7\x40\x16\x33\x0d\x28\xda\x3b\x62\x04\xf8\x26\x96\x3e\xc2\x49\x8a\xcf\xf7\x76\x0d\xd5\x38\xd1\x75\x31\x67\x38\xe1\xf1\x47\xab\x0a\x66\xda\x6d\x76\x6a\xa7\x8a\x85\x83\x6c\x73\x37\xda\x9b\x71\x68\x8e\x85\x13\xa5\x9a\xcc\x40\xa5\xd3\x4f\x17\xb9\x80\x43\x84\xa0\x00\xd6\x7f\x01\xd0\x15\xca\xf5\x80\x14\x0f\x73\x55\x5b\x89\x2d\x4f\xd7\x68\x71\x98\xa1\xf1\xeb\xaa\x39\x45\xef\xd4\xbd\x90\x37\x38\x60\x5f\x65\x3b\x94\x78\xf3\xf1\x39\xfd\xce\x23\xe4\x5d\x98\xa6\x8e\x76\x56\xd9\x5c\x37\x30\xa6\x0a\xbc\x27\x04\x3f\x63\x4a\x87\x67\xec\xb5\x69\x72\xeb\x75\xf2\xab\x29\x70\x21\x45\x2b\x67\x29\xe0\x85\x2c\xbb\x92\xdb\x97\x01\x1b\x85\x14\x35\xf7\x42\x82\x9e\x18\xca\x0d\x1f\x9c\xb3\xe3\xfc\xe7\xcd\xb1\xe8\x71\xe8\x83\xcf\x2f\xa9\xc8\xac\x85\x51\x1e\xdb\x4f\x05\xe6\xd8\x4c\xd9\x1b\x22\xde\x30\x7f\xb9\x78\x37\xbf\xbc\xba\x5b\x5e\xdc\x5c\xbe\xb9\xbc\xba\x9b\xcf\xde\xdd\x0e\x5d\x7e\x4f\x91\x17\x55\x5b\x7d\xf5\xf4\x20\xb7\x43\x9c\xd3\xca\xf3\xe9\xb9\xae\x51\x7e\xd9\xc1\x90\x1c\xae\x7d\x12\x67\xcb\x38\xd1\x91\x39\xfe\xf6\x4b\x21\x63\x20\x7b\x3e\x6a\xaa\xb6\x17\x55\x6f\x85\x7b\x82\xb9\x27\xec\x0e\x82\xa7\xdd\x83\x9d\xd1\xee\x77\x40\xdd\x81\x1b\x32\x17\x66\xf1\xc7\xe6\x7e\xe0\x4e\x9b\xe9\x61\x85\x0f\x53\xdc\x69\x6d\xab\x16\x51\x6f\x13\xd6\x37\xd1\xba\xe4\x66\x7f\xb4\x8f\x01\xe4\xb0\xa3\x57\x88\x81\x2f\x64\x9c\x4e\x02\xb5\x54\x96\xe8\x85\xdc\x71\x19\xf3\x42\xe5\xfb\x8e\x26\x0e\xdb\x3c\xc3\x65\x53\xdd\x42\xc3\x23\x5b\x0a\x11\xdb\x51\xc0\x47\xb9\xac\x4f\x25\xe4\xa5\xbe\xbb\xfe\xd3\xe5\xd5\xed\xf2\xf2\xea\xe7\xe5\x87\x9b\xcb\xb7\xf3\xbf\x38\x24\x64\xc6\x75\x9b\x3a\x62\x96\x0b\xb3\xbb\x58\x9a\x8f\xd6\xfd\x05\x25\x0b\x6d\x39\x24\x53\x95\xac\x17\xd2\xee\x2c\xb9\x2f\x7e\x9b\xab\x72\xb3\x6d\x2f\xa8\x5e\xcb\x0f\xb3\xbb\x9f\x8e\xaa\x26\x90\x30\xa1\xae\x19\xae\xb6\x26\x22\x34\x59\xd3\xbe\x87\x30\xd2\x5a\xf5\x80\x4a\x0c\x1e\x6d\x8b\x32\x74\xec\x68\x47\xdd\x5e\x9a\x9b\x56\xaf\xf1\xdf\xf2\x78\xd7\x04\xba\x0b\xf6\xcd\xca\x31\x02\x08\x65\x94\xc7\x6c\x94\xf6\xaa\xe5\x6f\x95\x13\xec\x87\xb3\x54\x6c\x36\x22\xc6\xe9\x55\x2f\x98\x7c\x70\xb4\x05\x46\xfe\x5c\x6f\xeb\x45\x12\xb0\x3b\xe1\x60\x76\x78\xaf\xe1\x1b\xf8\x07\xf7\x4a\xfb\x5e\x71\x61\x45\xb2\x23\x25\x75\xc1\x65\x47\x20\xf9\xa1\x89\xd0\x1c\xb4\x15\x5d\xe7\xcc\x25\x3f\x91\xc3\xc4\x86\x0c\xfc\x3a\xe8\x02\xbc\x9c\x8e\x0b\x75\xf5\xb8\x11\x59\xca\x23\xe1\x72\x18\x90\x01\x0f\xee\xf5\xc7\x04\xf0\x48\x26\x50\x92\xbf\x25\x90\x0f\x0c\x34\xc5\x5b\xa6\x00\x78\x6e\x6f\xec\x7e\xfc\xfc\xae\x95\xde\x8b\x1b\xf1\x5e\x81\xa3\x19\x75\x9a\x08\xfa\x8e\xbe\x28\x10\x3f\xeb\x84\x25\x8f\x9a\x0e\xb5\x2f\xff\x4c\x03\x8f\x77\xe6\xaa\xa3\x9b\x5b\x66\x39\x37\x3d\x9c\xe9\xd8\xe7\x2f\x2c\x8a\xbc\x97\x8c\xf2\x29\xc2\x11\x1f\x72\xb5\x4b\xb4\x98\x15\x45\x9e\xac\xca\x50\x8d\x6f\x24\x60\xae\x72\x39\xf1\x0d\xce\x72\x15\x97\x91\xa5\x04\x82\xd6\x7a\xd8\x0f\x79\xf9\xac\xd5\x11\xb3\x33\x33\xfb\xe8\xe6\x26\xe2\x33\x00\xf4\x2f\x64\x57\x8c\xcd\x6e\x8c\x1d\xbe\xbf\x0f\xf6\x28\x3f\x65\x4a\xb6\x4c\x8a\xee\xce\xb4\x73\x60\x58\x62\x2d\xb3\x8f\x83\x05\xdc\x81\x9a\xa2\xe9\xb2\xe2\x18\x40\xaf\xda\x28\x5d\x0c\x20\xee\xa8\x19\x07\xee\x1a\x86\x8d\xa9\x66\xcc\xa0\xdd\xb0\xe5\x1a\xcd\xf9\x22\xda\x56\x2b\x0e\xad\xa9\xb2\xe6\xd5\xab\xeb\xcc\xe3\xd3\xdc\x26\x83\xc2\x68\x13\x74\x34\x24\xe4\xd8\xae\x28\xa0\x39\x39\xc7\x71\xde\xee\xd0\x62\x74\x37\x3a\x3c\x0c\x60\x1f\x4d\x79\x29\xa3\x2d\xcb\x52\x8e\xc9\xe4\x5b\xae\x71\x4a\x5b\x2c\x09\x5f\x25\x69\x52\x00\x4b\x0f\x86\x38\x6b\x3d\x6c\xae\x79\x3c\xbf\xb7\xc4\xb8\xdc\x53\x32\xf5\x4d\xfa\x13\x31\xbb\xae\x55\x5f\x14\xb5\xeb\x97\x6c\xb8\x0d\x0d\x9b\x96\x84\xd8\xf5\xc3\x61\x36\x62\x98\x96\xbe\x2d\xe3\x46\x96\x4a\xfc\x50\x7f\xbd\xd2\xdf\x2d\xd6\xcb\x78\xc4\x0a\x31\xbe\x8f\x38\x7d\xea\x7c\xf0\xad\x2b\x6b\x9d\x2a\xde\xa1\x49\x6c\xcb\x46\x7a\xf7\xae\xb2\x63\x55\xae\xba\x08\x85\xb1\x56\xfd\xa5\xf7\x05\x43\xec\xba\x7d\x2a\x67\x69\xb8\x01\xf2\x42\x14\xc9\x38\x7f\x4f\xd0\x68\x5e\x88\x33\x78\xbd\xbd\x70\xca\x30\x1c\xdc\xe6\xc6\x44\xf3\x22\x23\xce\x68\x03\x2c\x61\xdb\xec\xaa\x9d\xce\xa7\x60\xc2\x4f\x1c\xaf\x44\x1e\x98\x4a\x87\x75\x0b\x7e\xff\x43\x4b\xb7\x34\x1a\xfd\xe7\x92\x9b\xfd\xf0\x7a\x7d\x8b\x5c\x39\xa7\x34\xba\x48\x9a\xcb\xaa\x7d\xfb\xa9\x7f\xf5\xae\x1a\x5e\x0b\x27\xfe\xe0\x4c\xe4\xb6\xd6\xdc\x9a\xb7\x87\xef\x42\xf3\x8a\x1b\x2d\xcb\x13\x05\x9c\x31\x6a\x8d\x0c\x8c\xdd\x74\x93\xad\xdf\x3d\xa1\x27\x3f\x97\xa2\x14\x66\x02\xad\xca\x78\xd3\xf4\x72\x8f\xb0\x94\x7d\x93\xb6\xea\x91\xed\xca\x68\xcb\x6c\xe1\x2c\x16\x29\xdf\x57\x9a\x06\x46\x62\xa1\x52\x20\x70\x3e\x92\x4d\x36\x2a\x75\xa1\x76\x00\x30\xf6\xe5\xe6\xa5\x84\x55\xce\xb8\x5d\x5d\x6d\xfb\x7b\x85\x5d\xee\xc8\xd0\xe6\xed\x87\xcb\x8b\xf9\xdb\x79\x2d\xae\x38\xbb\xfd\x53\xf8\xef\x5f\xae\x6f\xfe\xf4\xf6\xdd\xf5\x2f\xe1\xdf\xde\xcd\x3e\x5e\x5d\xfc\xb4\xfc\xf0\x6e\x76\x55\x89\x3e\xce\xee\x66\xb7\x97\x77\x07\x02\x8c\xcd\xaf\x76\x0f\x04\x0f\xc8\xef\x2c\xe4\xd9\xb2\x80\x5b\x3f\x03\x7d\xf5\x15\x9b\x59\x2a\xc0\x0a\x59\xa5\x0d\x12\x03\xaa\x04\x35\xb1\x29\x96\xfc\x86\x17\xfc\x82\x17\x3c\x55\x9b\x29\x9b\x31\x02\x84\x23\xd0\x5f\x1b\x0b\x89\x78\xd2\xcc\xe8\x60\x11\xc6\x4c\x8a\xfc\x1d\xde\xcb\x1c\xaa\x35\x31\x14\xa6\x22\x24\xc4\xb7\x59\x6d\x0b\x79\xf9\x20\x64\x51\x02\x5b\x37\x4f\x53\x46\x9f\xb5\x0f\x04\x19\xfb\xb6\x96\x3a\xd9\x25\x29\xcf\xbd\x22\xdd\x35\x95\x05\xb7\x14\x5b\x57\x47\xd0\xd4\x4c\x07\xb7\x17\xb9\x8f\x73\x06\xf5\xbe\x78\x37\x07\xbb\x2f\x2a\xac\xdc\x8a\xfd\xf8\x42\x22\x03\x1e\x7d\x71\xc7\x21\xf9\xa4\x50\xe4\x59\xc5\xcf\xd3\xc3\xdd\x13\x51\x9f\xb2\x88\x6d\x0c\xe2\xb9\x6e\x94\xae\x92\xf6\x3f\x2e\x65\x91\xef\x07\x1b\x73\x77\x90\x6d\xad\xc1\x20\x27\x2c\x5b\x55\xa5\x0e\x1d\x5f\xcc\x96\x7e\x05\x16\x9e\x05\x5a\x52\x5c\xc6\x85\x5f\x10\xd7\xd2\x71\xe9\x48\xcd\xc9\xfb\xad\xf6\x43\x48\x88\x03\xbd\xb0\x52\xa5\x8c\x35\xa1\xee\x76\x89\x3c\xdf\xf1\x5f\x5f\xda\x96\x22\xc1\x84\xd3\x8a\x00\xf2\x30\x91\x9a\xeb\xd7\xde\x6c\x72\xfd\xdd\xb5\x90\x3d\xfd\x75\xd8\x44\xb6\x3b\x2b\xdc\xf5\xfc\xc5\x1c\xf1\x83\x0f\x62\xdf\x36\x7e\x0d\xbd\x1f\xc4\x28\xd2\x82\x87\x42\xb2\x5c\x98\x07\x1d\x38\x31\x45\xcc\xa9\xfb\x37\x24\x21\x54\x34\x09\xdb\xf7\xee\x30\xde\x7f\xd2\xb2\x69\x45\x1a\x3c\x83\x60\x13\x7d\xc9\x8c\x19\xe2\x0e\xac\xcb\x9b\x92\x2e\x28\xa0\x6a\x06\xeb\x3f\xd5\x8a\xad\x21\x03\x89\x34\xc7\x73\x01\x21\x0e\x18\x0a\xcb\x30\x0e\x14\x53\x0d\x30\x83\x9d\x02\xa9\xd0\xe0\xf8\x97\xe6\x8e\x29\x3e\x97\x14\xbb\xfd\xfe\x77\xe3\xce\xd9\x22\xdf\x33\xab\x66\x11\x66\x40\x51\x02\x20\x9d\xb9\x50\xaf\x52\x26\x6d\xbc\x73\x37\xa5\x34\x47\xf1\x53\xc0\x5e\x86\xc7\x35\x6b\x1f\xa5\x7f\x1e\x4c\x12\xb2\x2e\xf9\x1c\x9f\x7f\x36\x1a\xd1\x9f\x6b\xec\xa1\xf4\x39\x80\xa4\x53\xe9\xe1\x81\xb6\xe2\xd1\xfd\x23\xcf\x63\xf4\xdb\x02\x0e\x65\xca\x7e\x52\x8f\xe2\x41\xe4\x13\x16\x89\xbc\xe0\x44\xdd\xa5\x21\x10\x0f\x0b\x8a\xca\x59\x48\xc8\xd0\x40\x1e\x34\x09\x72\xed\x45\xb2\xd9\x9a\x4b\x74\x00\xa3\x50\xb9\xd9\x8e\x0a\x64\x6d\xcc\x44\x44\x64\x49\x1d\x1d\xb0\x4e\xf9\x43\x93\x8b\xec\x18\x96\x07\x36\x77\x69\xa6\x36\x4e\x69\x55\x1b\xfa\x80\x2f\xd4\x61\xb4\x69\x22\xbd\xcd\x84\x6d\x54\xca\xe5\x66\x3a\x9d\x32\x51\x44\xd3\x97\xa3\x26\x3a\x15\x18\x46\x3e\x1d\xbc\x3a\x55\x4a\x8b\x74\xef\x08\x7e\x5c\x02\x0c\x20\x2e\x7f\x2d\x84\xd4\x09\xfa\x79\x5a\xa6\xff\x6d\x3d\x2a\xf0\x65\x83\x28\xed\xd7\xf3\xd1\xe9\x95\x1d\xe5\x80\x08\xd4\x88\x92\xf0\xf9\xf6\x9b\xd7\x51\xe9\xc2\xed\x65\x49\x25\xc7\xe6\xc0\xfe\xac\xba\x24\xcd\x8f\xe2\xdd\x6b\x2d\x89\x48\x4a\x8e\xca\x1b\x6c\xef\xb3\x46\x2a\xe7\x09\x59\x9c\x3d\x09\x99\x23\x73\x31\x87\x38\x02\x6e\xeb\xc3\x3d\x7a\x59\x1c\xd6\xa5\x68\x6d\xd0\xc8\x5c\x57\x9f\x94\x3e\xc6\x74\xc2\x74\xb9\x74\x0f\x37\x2e\x97\xf9\x0a\xee\xf4\x38\x08\x07\x54\xa2\x1d\x90\x83\xe5\xc3\x25\x8e\x3c\x2a\x88\x8e\xe8\x42\xe5\x7c\x23\xd8\x4e\xc4\x49\xb9\x6b\xdd\x6c\x5c\x75\x4f\xc1\xfd\xa9\xb4\xdc\x75\xd3\xf8\x9d\x6a\x40\xfb\x4a\xe2\x7f\x5d\xc0\xe7\x06\x1b\xd0\x5e\xbc\xdf\xca\x03\x51\x7d\xd1\xf7\x4f\x7d\x6d\x4e\xca\x3c\xd1\x40\x38\x79\x4c\xca\xa3\x2b\x06\x8b\x86\xc8\xe9\x3e\x43\x9f\x73\x65\x74\xcf\x6c\x48\x8b\x5e\xd1\x38\xaa\x10\x6e\xed\x3e\x14\xea\x68\xc2\xd1\x63\x04\xe2\x33\x47\x45\xb8\xc1\x6c\x0c\x68\xe0\x09\xee\x04\x05\x12\x26\xa3\x50\x6c\x6d\x93\xe8\xee\x45\x40\x4b\x16\x03\x41\xfc\x23\x72\xdc\xfc\xe9\x47\x6d\xd1\x1b\x04\xb0\xf1\x16\x4b\xe1\x3f\x82\x01\x91\x87\xef\x2d\xae\x0a\x5b\x88\x45\x00\x79\x58\xcc\x65\xd1\x5a\x80\x87\x1d\x42\x59\xf8\xca\xcf\xbc\x4c\xdb\x1f\xa7\xf2\xe1\x51\x14\x9b\x9a\xfd\x72\xcb\xb0\xab\x89\x4a\x3c\xef\xab\x68\x50\xc8\x61\x64\x17\x74\xd7\xf2\x08\x4b\xb0\x32\x0e\xd8\xe9\x96\x4b\xde\x74\xbb\x28\xa2\xad\xb7\x3c\xaa\xaa\xd1\xa4\x24\x48\xed\xdc\x79\x72\x74\x04\xcd\x86\xe8\xc3\x64\x23\x55\xa8\xeb\xa1\xa4\x80\xc8\x94\xd9\x80\x54\x58\x2c\x4b\x8a\xc3\x10\xaf\x91\x8c\x61\x87\xa6\x5a\xa1\x10\xba\x43\xed\xac\x04\x18\xe1\x4a\x91\x20\xcf\x90\xc5\xc7\xe2\x9d\x88\x84\xe9\xea\xa4\xd9\x55\xe6\x86\x85\xac\x7e\xaa\xd1\x49\x16\x83\x95\xe4\x02\xb9\x6e\xb5\xb1\xde\x8a\xe4\xc1\x2c\xd4\xe6\xb4\x76\x13\x14\x76\x80\xe6\xdc\x5b\x48\xac\x76\x40\x98\x7b\x2f\xf6\x3a\x54\xc1\xa3\x19\xc5\xba\x26\x64\x62\xda\x43\xe3\x75\x78\x28\xa0\xe3\x96\x81\xaa\xff\xb0\xb3\x0c\x3f\xfa\xde\xbc\xdc\x03\xee\x6c\x14\x6e\xe6\xa0\xcf\x52\xf4\x3e\x45\xda\x26\x7c\x3f\xd3\x18\x7a\xfc\x16\xa0\xf3\x42\xfc\x5d\x98\x72\x02\x17\x5f\x73\xbf\x5d\x48\xe2\xd4\x0e\x0e\x39\xb3\xe1\x34\x87\x8d\x52\xa7\x91\xc9\x77\x5f\xa1\x7d\x01\xda\x43\x4b\x01\x59\xfd\xa4\x0d\xb6\x5a\x11\xd5\x85\x84\x4f\x63\x72\xa9\xf5\xe1\xb5\x7e\xf0\x48\x50\x20\x0d\x6e\x27\x10\x30\xc8\xe0\xc2\x27\x89\xf9\x0f\xe5\x14\xf1\xf6\x13\x09\xd3\x7d\x33\xd9\x8a\xc1\xb3\x08\xbc\xdb\xcb\x8b\x9b\xcb\xbb\x2f\x06\x14\xb4\x28\xbd\xd1\x48\x41\x5b\xcf\x37\x97\x6f\x67\x1f\xdf\xdd\x2d\xdf\xcc\x6f\x9e\x03\x2a\x48\x3f\x1d\x81\x15\xbc\x25\xaa\xfe\x0b\x25\x0b\xf1\xeb\x49\x67\x72\x5e\xca\x25\x1f\x91\xb3\xe2\xc4\x3a\xfa\xcc\x1d\x2c\xb4\x29\x35\xe0\x74\x00\x88\x77\x12\x4f\x34\xa7\x2c\xb0\xf6\x4e\xc3\x75\x92\xa6\x90\xc2\xeb\xdc\xeb\x94\x1e\x66\x3a\x15\xf6\x1f\x4b\xb5\x49\x7b\xea\x42\xae\x2a\x4a\x10\xe0\xf2\xdb\x9a\x4b\x30\x26\xef\x66\xa6\x03\xf2\x04\x52\x23\xfb\xd4\x08\x36\x89\x14\xbe\x1a\x28\x7d\x5c\x4a\xd6\x49\x21\x4d\x83\xf8\x9c\x90\x28\x32\xbc\x86\xda\x9a\x76\xc6\x55\xe6\xa7\x35\x3f\xed\x8f\xae\x85\xb8\x88\x13\x89\x86\x69\x65\x35\xdf\xb6\x4f\xdd\x73\xbf\x04\xa0\xdf\xcd\x48\x72\x88\x41\x80\xba\xb0\x1f\x48\x1a\x08\x54\x29\xf2\xc1\x89\xfb\x04\xa1\x43\x6a\x5d\xeb\x67\xb3\x15\x9a\xbe\x4e\x20\x52\xc1\x89\x95\x24\x4a\x4b\x5d\x88\x9c\xdc\x26\xb3\x5f\x6e\x17\xf2\xb5\x39\xbe\x5e\xd2\x29\x44\x4a\x36\xf8\x09\x04\xae\xa8\xca\xf7\xad\x85\x12\xee\x60\xdf\xa1\x8f\x7a\x27\xb8\xd4\xa8\xfc\x9e\xa6\x22\xf7\x33\x03\xeb\x23\x44\x4c\xea\x7f\x40\xc3\xea\xdf\x27\xf1\x6f\x05\xab\xd6\xd4\x97\x7e\x25\xf9\xeb\xfa\x7c\xea\xca\x10\x07\xa8\xf0\x73\xce\x9c\x96\x8c\x95\xa1\xb3\x88\x50\xd6\xad\x93\xa8\x9a\x3f\x32\x68\x2e\xdd\x61\x71\xbf\x4d\xa5\x27\x9c\x4a\x03\xce\xf5\xf0\x94\x60\x5b\x65\x36\x50\x27\xf3\xe2\xc3\xcc\x8e\xa1\x22\x05\xd0\x97\xe9\xc6\xd6\x53\xa7\x26\x75\x78\x0a\xf6\x03\x8a\x3a\x0d\x5a\x3b\x6b\xa1\xc2\xf1\x9a\x5a\x36\xb6\xd3\xab\xa2\xf8\x3c\x94\x73\x33\x0b\x32\x94\xaa\xb0\xe4\x11\x0e\xd7\x47\x20\x45\xf3\x80\x63\x2d\xe9\xad\x23\x31\x81\x58\x2b\x65\x79\xa2\x12\xd9\x5d\x08\x86\xac\xa4\xd3\x62\x2d\xc2\x44\x7c\x9b\x7c\xef\xc8\x3b\xc6\x4c\xbe\xe3\xb5\x2e\xab\x73\xce\x11\x41\x1e\x05\x76\xb8\xba\xbe\xba\x0c\xa1\x0a\xf3\xab\xbb\xcb\x3f\x5c\xde\x54\x12\xb1\xdf\x5d\xcf\x2a\xc9\xd4\xb7\x77\x37\xb5\x1c\xea\xd7\xd7\xd7\xef\x2e\x1b\x98\x87\xcb\xbb\xf9\xfb\x4a\xe1\x6f\x3e\xde\xcc\xee\xe6\xd7\x95\xe7\x5e\xcf\xaf\x66\x37\xff\x16\xfe\xe5\xf2\xe6\xe6\xfa\xa6\xf6\xbd\x8f\x17\xfd\xe8\x89\x4a\x33\xda\xdd\x3f\x3e\x38\x1b\x70\x62\xb6\x2e\xe3\xaa\x16\xe8\x09\xab\x78\x20\xf2\xec\xd0\x74\xb4\x79\xd6\x71\x48\x95\x8f\x0b\xc3\x54\x75\xd4\xac\x7b\x7a\xf1\xd2\x4a\xd7\x65\xfc\xb4\x6d\xcf\x9c\x6a\xcb\xa7\x40\x02\xf6\x1a\x80\xee\x2b\x35\xc7\xad\x2e\x20\x19\x0d\xbb\x36\x83\x08\xd6\x86\x77\x4a\xf7\xc8\xf8\xd9\x6b\x6a\xbf\x71\xa8\x9e\x9e\x83\xe9\x00\x95\xcd\x53\xd1\x58\xf4\x55\x3a\xf8\x98\xcd\x12\x4f\x62\x6b\x28\xd8\x1f\x83\x83\x1b\x9a\x61\x66\x4e\x30\x1d\xbb\x54\x26\xdb\xf3\x4d\xfa\x69\xd3\xc6\xd6\x9f\x3e\xd2\xac\x7b\x8d\x63\x63\x44\xbd\x81\xeb\x68\x4c\xbd\xef\xb8\xbe\x1f\x5b\x6f\xfa\x48\xb3\xde\x60\xf6\x1d\x55\x6f\x70\x78\x17\xed\xfc\x27\x23\x36\xb1\xb0\x98\x6a\xf5\x5c\x72\xb6\x7b\x24\x10\x73\x1d\x56\x47\xb3\x00\x9e\xf7\x7a\x99\xf1\xe1\x81\x0c\xa8\x8d\x5b\xae\xbc\x46\x07\x7e\x0b\xbf\x42\x0b\x57\xb9\xe0\xf7\xb1\x7a\xa4\xf1\xa8\x23\x43\xd9\xa0\xdd\xbc\xda\x41\x66\x0f\xb7\x47\x04\x48\xc0\x9b\x4f\x22\x4a\xcd\x17\x0f\x30\xb9\x84\x08\xad\xd1\x06\x0b\x54\x48\xeb\x0c\x32\xc0\xd9\x23\xfd\xe8\x2c\x24\x5a\xf3\x6d\x4a\xa6\x66\x54\x4d\x8d\x88\xf3\x01\x9a\xea\x6c\x68\x0c\xae\xeb\x60\x60\x29\x81\xa3\xcc\x01\x4c\xb7\xca\xe1\xce\x04\x1d\x92\x48\x70\x26\xe7\xe6\xc2\x93\x8b\x28\xd1\x22\x50\x73\x6a\x3d\xb1\x3f\x9f\xa6\xfd\x50\xf0\xa2\xd5\xed\x3a\xd8\x1f\xce\xa3\xa2\xe4\x29\xfb\x5c\x8a\x7c\x4f\xd4\x79\xe8\xab\xc4\xbf\x44\x5c\x62\xa6\x48\x21\x76\x19\xa4\x63\x87\x29\x0e\x0b\xf9\x0b\x00\x25\x70\x08\x5e\x68\xf6\x07\x80\x3c\xd8\x87\xe9\x10\xde\xf1\x02\xce\xe2\x3f\xe3\x37\xdc\x6f\xd3\x85\xac\xa8\xa3\x04\x6f\x55\x84\x52\xa6\x0b\x69\xe5\x09\x62\x15\xe9\x29\xdc\xf8\xa6\x2a\xdf\x9c\x93\xb0\xaf\x99\xec\xea\x7e\xa5\xd4\xfd\xb9\x90\xe7\xe0\x93\x2a\xce\x79\x59\xa8\x73\x80\x4b\xe1\xf8\xeb\x73\xab\xff\x69\x05\x54\xf5\xf9\x36\x79\x10\xf0\xff\xa6\xdb\x62\x97\xfe\xa3\xce\xb6\xbf\x9e\x6d\xd2\xfc\xcc\xbc\x7b\x16\xbe\x7b\x66\xdf\x3d\xb3\xef\x9e\x99\xd7\xf0\xff\x65\x7b\x0c\xef\x88\x5f\xb9\x39\xcb\x26\x0b\x99\x48\x2d\xf2\x02\xac\x9f\xc7\x3c\x29\xbc\x0c\xcd\x9e\xbd\xf8\xef\xff\x66\xd3\x9c\x3f\x62\x2a\xe3\x1b\x5e\xf0\x0f\xe8\x5f\xfc\x9f\xff\x79\x01\x01\x55\x4c\xea\xc9\x78\xfe\xb9\x14\xc5\x42\x6a\x61\x16\x21\xfb\x3f\x0b\x09\x11\xd8\xdd\x7e\x59\xa0\xdf\x15\x7d\x90\xb1\x66\xff\x8a\x65\xce\x91\x46\x32\xd6\xa6\xa4\x8e\x74\x82\x84\xa7\x2d\x92\xd1\x1d\x2e\xfa\xcf\xe9\x1b\x7a\x7e\xc4\xb2\xfe\x9c\x56\x57\xb5\x15\x42\xd1\x9f\x53\x38\x40\x53\xc5\x2d\x58\x8b\xb9\xc9\x0b\xf7\x64\xaa\x5c\xdb\x1a\x69\x40\x03\x9e\x35\x4c\xdf\xbe\x56\x6e\x91\xca\xda\x7a\xee\x1b\xdb\x08\xc4\x0a\x7c\x1c\x02\xa2\xe7\x89\x59\x21\xb7\xe8\x09\x05\xcb\x0d\x5b\x0e\x36\x29\x85\xce\x5d\x79\xe8\xb8\xd0\xbf\x7f\x75\x7e\x3e\x61\x1b\x0d\xff\xb3\xfa\x0c\xff\x03\xe8\xa1\xa7\x62\x63\x6d\x74\xa6\x03\xc2\x35\x47\xf9\xf0\x48\x3c\x05\x8a\xee\x4b\x10\x80\xd7\xa6\xe9\xeb\x52\xc6\xa9\xf0\x29\x90\x95\x90\x48\xaa\xac\x64\x3d\x3a\xc6\xea\x52\x2b\x30\xc6\x2b\x11\x71\xb3\xf1\x35\xbe\x8d\xe0\x52\xb5\x2e\x84\x44\x6f\x58\xee\x95\xd8\x38\x7a\xae\xc0\x2c\x06\x28\x24\x2f\x08\x72\x2e\xe0\x8f\xf0\x11\x60\xd4\x9e\xd4\x7f\x62\x7b\x55\x12\x39\x34\x50\x9e\xc6\x22\x4a\x81\x81\xdf\xd2\xbe\xb0\x5c\x14\x65\x2e\x19\x67\x19\x97\x31\xd7\x30\x03\xd7\x39\x44\x3b\x73\xc6\x9b\x15\x9d\x20\x1c\x57\x95\x05\x90\x19\x21\xb2\x20\xec\x09\x64\xef\x0e\xea\x3c\x09\x2a\x81\x67\x02\x90\x08\x37\x5e\x9c\x2e\xa4\xd5\x0a\x23\x2c\x1c\x7a\xca\x22\x95\xed\x89\xaa\xa6\xde\xe9\x89\xf5\x9c\x51\x77\x4f\x3c\xde\xa4\xfe\xec\x84\x25\xd5\xd0\x1a\x10\x85\x17\x81\xda\xb1\xd5\x8b\xfe\x4e\xc8\x48\xc5\x22\xd7\x2f\xcd\x32\x4c\xdc\xbd\x03\xed\x87\x44\xfb\xc1\x80\x5d\xca\x1c\x6e\xe4\x2d\x34\xc5\x3b\x45\x1d\xd3\x3b\x15\x6a\xe9\x36\x3b\xe7\xf0\x52\xf9\xd6\x51\x30\x6d\xf5\xa5\xff\xfc\xa2\x88\x98\x10\xd7\x69\xef\x9c\xc7\xbb\x20\x70\xc9\x86\x3b\x2e\x16\x8a\x36\x0e\x19\x27\x56\x5a\x36\x29\x40\xbd\x2e\x17\xba\x58\x48\x3a\x81\x27\x6c\x2d\xb8\xb1\xf3\x26\x2c\xd2\x0f\xb8\x19\xe3\x71\x5f\x3c\x2a\x8f\xc1\xb1\xba\x24\x00\x86\xad\x14\xee\x9d\xc4\xf8\x18\x20\x0a\x78\x54\x20\xc0\xa0\x53\x85\xdc\x9a\x2a\xd0\x59\xad\x1b\xe2\x11\xfd\x60\x65\x2e\xea\x92\x52\xa1\xca\x0a\xf4\xc4\x1e\x03\xc5\xac\x5e\x0f\xfc\xc1\x6c\x3c\xd8\x3a\x84\x81\x04\x9b\x23\x58\xdc\x84\xa5\xc5\x75\xe6\x63\xb8\x21\xd7\x38\xf8\x66\xba\x16\x55\x4f\x47\x40\x05\x8e\xf3\x5b\x98\x57\x0f\x3a\xac\xb4\xc8\xad\x06\x07\xb6\x15\x99\x01\xb7\x49\x1e\x9f\x65\x3c\x2f\xf6\x76\xfa\xa6\xc9\x0a\xa8\xfb\xd3\xe4\x5e\xb0\x59\x9e\xab\xc7\xa7\xee\x85\xce\xad\xa5\xeb\x86\x7d\x0a\x92\x7d\xec\x2d\xbf\x95\x17\xb4\xee\xee\x38\x8e\x83\xb4\xcb\xf1\xd1\xfa\x9d\x5c\x14\xf9\x7e\x69\x26\xe2\x2e\xeb\xdc\x29\x06\x25\x4d\x0c\x37\x72\xc7\xd1\x9b\xd6\x5c\x18\x9d\xf4\xa6\x95\x51\xfd\x76\xe8\x4d\x5b\x98\x4b\x9b\xf4\xa6\xf3\xab\xf9\xdd\x7c\xf6\x6e\xfe\xff\x6a\x25\xfe\x32\x9b\xdf\xcd\xaf\xfe\xb0\x7c\x7b\x7d\xb3\xbc\xb9\xbc\xbd\xfe\x78\x73\x71\xd9\xcf\x57\xd4\xac\xbd\x37\xc1\xcf\x58\xf8\x9d\x57\xec\x2e\x00\x6a\x60\xb2\x01\xd9\xdf\xa4\x5d\x09\xb3\xca\x2c\xe6\x44\x6e\x26\xb0\x50\x5f\xb1\xcb\x3c\x9f\xef\xf8\x46\x7c\x28\xd3\x14\xe0\x54\x98\xd9\x73\x91\x0b\xb8\x78\x4e\xd8\x07\x15\xcf\x83\xf7\x20\x1d\xb1\xb5\x19\xf0\x7d\x1e\xc7\xb9\xd0\x1a\x3f\x3f\xa1\xef\x07\xe0\x21\x97\xea\x48\xe0\x39\xfe\xc0\x93\xd4\xdc\xdf\x5e\xb1\xd7\x3c\xba\x57\xeb\x35\xa6\xcf\x4c\x5c\xe2\x14\xfb\x5c\xaa\x82\x33\xf1\x6b\x04\x1c\x5d\xed\xf3\xe4\x9d\xda\x7c\x05\xa8\xf2\x80\xf0\x54\xc7\x25\x05\x34\xca\x96\xed\xc7\x79\xfb\x46\x40\xad\x7c\x8f\xaf\xbe\xc5\x37\xdb\x1d\x94\x45\xfa\x04\xe9\xf1\xef\xd4\xa6\x5d\x31\x06\xac\x6b\x92\xb9\xa1\x40\x42\x44\x64\x1b\x6a\xc3\x74\x22\xef\x17\xf2\x97\xad\x90\x4c\x95\x39\xfe\x09\xae\xf9\xc6\xcc\x4c\x4b\xbd\x15\x20\x21\x3b\x61\x8f\x82\xed\xf8\x1e\xcd\x66\xb8\x13\x38\x99\x0b\x98\x32\x70\x8a\x98\xb7\xd3\x44\x9a\xdd\x22\x4b\x6c\x5e\x42\x7d\xe8\x9f\xe2\xc6\x65\x19\xea\xf8\xe9\x04\xb2\x7d\xe7\x69\x05\x9f\x07\xae\x32\x8f\x9b\xb4\x00\x21\xda\xb9\x41\x45\x53\xa9\xfb\x32\xf3\x5c\x96\x2f\x6c\x70\x12\xba\xfb\x41\x25\x31\x8b\xcb\x2c\x4d\x22\xb7\xef\x3e\xaa\xbc\x93\xb0\x17\x13\x68\x86\x9f\x3a\xf5\xb4\xb0\xbe\x86\xb5\x64\xe7\x04\x48\xba\x1e\xea\xde\x67\x26\x2f\x66\x89\x8c\xd2\x12\xf4\xc1\x4a\x2d\xf2\xb3\x22\x4f\x36\x1b\x30\xc0\x6d\xae\xdf\xb7\xcf\x6e\xec\xd9\x13\x4f\x4f\x6b\x0b\x93\xce\x53\xb5\x49\x22\x9e\x86\xe0\x66\x8f\x8a\x70\xf4\xa9\x76\xd9\x93\x7a\x2a\xe4\x41\xd8\x0a\x75\x32\x20\x65\xb9\x00\x06\xdf\x25\x6c\xe5\x4b\xda\xee\x4e\xa9\xf7\x9a\x99\x0b\x3a\xd6\x2b\x24\x37\xb5\xe1\x05\x7b\xc2\xf9\x6f\x5b\x09\x2d\x30\x31\x51\x5e\x9b\xa9\x47\x29\x72\xb0\x60\x01\xf6\x61\x5a\x2a\x15\xd8\x26\x4e\x56\xcb\xe1\x93\xad\xac\xdc\xda\x01\xb1\x31\x73\x76\x93\x3c\x08\xf9\xe5\xd9\xa8\x83\x0f\x44\x3c\xda\x8a\xa5\xb5\xcb\x9f\x7a\xcb\x72\x07\xc0\xc8\xcd\xca\xea\x5b\x84\x5b\xa9\x0b\x6f\xc2\xd5\x09\x6b\xdc\xdc\xbb\x30\x90\xd8\x93\x91\x65\x2a\xb1\x8c\x45\x74\xff\xc5\xb7\x66\x0f\xb2\xb2\x15\x61\x9c\xbd\x11\xd1\x3d\xfb\x78\x33\xc7\x6c\xe0\xa4\x60\x66\x2b\xd0\x5b\xaf\xd7\xd3\x79\x77\x2b\xf8\xe6\x19\x18\x9d\x86\x0a\x0e\x79\x8e\x79\x27\xb3\x66\x2a\x44\x80\x28\xc8\x97\x34\x9b\x24\xe5\xd2\x00\x10\x8c\x17\x56\x86\x06\x1c\xf1\x4c\xef\x40\x75\xa6\x2c\x02\xa9\xb6\x94\xaf\x44\xda\xc1\xb8\x98\xa9\x78\x69\xe3\x24\xa7\x82\x79\x1a\x65\x59\x3f\x06\x45\x1d\x6d\x1e\x03\x37\x16\xeb\x1d\x3d\xc8\xee\x7f\xd4\x01\xbd\x86\x0a\x89\x9f\xe1\x5e\xcf\x35\xa4\x77\xaf\x93\x8d\x8d\xb6\x25\x6b\xd2\xc6\xc1\x84\x7e\x50\x81\x37\xfb\xa5\x29\xe9\x83\x8a\x09\xa6\xe7\x48\xcc\x8c\x15\x24\xc8\x7b\xe2\x71\x15\x61\x15\x9c\x52\xbe\x06\xdf\x80\x2e\x04\x8f\x99\x5a\x93\x37\x31\xcb\xd2\x04\x28\x7d\x63\x64\x0f\x07\xf6\x0c\x5d\x45\xc7\x87\xa5\xd9\xca\x06\x24\x1f\x1f\x2c\x10\xaf\x37\xde\xe8\x83\x5c\xa6\x5d\x55\x27\x77\xdd\xa6\x3a\x55\x05\xce\xe5\x23\x1d\x7b\x85\xee\xf7\xa6\x6d\x52\xb5\x82\x8e\xea\x06\xc5\xf5\x6c\xd0\x66\x77\xca\x93\x78\xcc\xf1\x6e\xfb\xe4\xda\xbd\xda\x57\xc1\x6b\xeb\xe9\x70\x5f\xb2\xc3\xcc\x88\x70\x3d\x8c\xe0\xd7\xd2\xd8\x0f\xdd\xb5\x21\x40\xa8\x5d\x84\xd0\x59\xe3\x05\xc9\x0d\xc0\xaa\x70\xdb\x71\xc7\xb5\xba\xda\x96\x93\x06\xba\x49\x8c\x72\xa0\x2f\x3d\x97\x4a\xff\x20\x9f\xc0\x6e\x81\x2b\xd7\x51\x5c\x8c\xe1\x8c\xb6\x43\x87\x18\x5f\xd3\x9f\x7e\x10\x2b\xc9\x17\x83\x46\xb4\xde\xef\x76\x15\x9f\xd2\xe5\xcf\xb1\xa2\xca\x42\x79\x97\x3f\xb4\x67\x0e\xa4\xa1\x61\x5a\x17\x6c\x1b\xf3\xb8\x03\x2e\x60\x6d\x30\xbb\x34\x47\x80\x50\x47\xc1\x60\xb3\x5c\xd8\xe0\xd1\x5e\x14\x2e\xb9\x3f\xb5\xaa\x60\x10\x1b\x71\xad\xae\xb2\x9b\x58\x02\x03\xc7\x48\x05\x91\x0c\xb2\xf7\x22\xb5\xcb\x94\x04\x6c\x0a\xa6\x2a\x2d\x24\x15\x6e\xb5\x9d\x5d\x78\xa5\x92\xef\x36\x21\xaf\x16\x66\x4f\x08\xad\xd2\x07\x8a\xa3\x05\x12\x04\xa0\x0a\x67\x2a\x78\x61\x2e\x08\xe6\x3a\x0c\x01\x5e\xda\xde\x01\x0e\x5e\x13\x38\xce\xc5\x26\xd1\x85\x08\x53\x04\xc3\xf7\x9f\x4c\x8b\xb2\x72\x83\xee\xeb\xfa\x4e\x2d\xca\x43\xa6\xb0\x59\xb5\x23\xea\xb3\xcf\x44\x3c\x77\xef\xf5\x4f\x86\x5a\x16\xb7\xdf\x24\x2a\xa7\x00\xce\x01\xbc\x02\x68\xe4\x7b\xd2\x4e\x3c\xc0\x0d\x12\x31\xf1\x70\x8f\x6a\x33\x43\xb4\x29\x79\xce\x65\x21\x84\x5e\x48\x8a\x3e\x22\x6f\x59\x48\xcd\x51\x43\xc3\x39\x03\x37\x52\xba\x40\x1a\x20\x78\x65\xcd\x93\xb4\xcc\x3b\xef\x9c\x38\x2b\x8f\xe2\x1e\xe8\xeb\xa5\x0b\x28\x96\xb5\x0d\x9a\xcb\x62\x0d\x56\x91\xa3\xce\xa8\xc7\x0e\xab\x49\x9e\x1d\x4d\xb0\x5b\xee\xf0\xf1\x76\x0e\xc7\x8e\xc4\xd6\x1f\xf5\x32\x53\x23\x76\xbc\x3f\xfd\xa8\x3f\xa8\x8e\x94\x60\xfd\xb9\xe1\x18\xeb\x89\xa1\x7f\xee\x92\x53\xe0\xfa\x1e\xc2\x4f\x87\xee\xe3\x83\x28\x19\x0f\x06\xa9\x3a\xf7\x2e\x98\xb5\x5b\x2e\xe3\xd4\xdc\x53\x79\x51\x3b\x81\x3c\xd8\xd7\xd8\xc5\x85\xdd\x1c\xbb\x33\xbb\x20\x51\x62\x19\x35\xb2\xec\x0e\xf5\x53\x2d\x3d\xaf\x17\x50\x57\xfb\x4a\x35\x69\xae\x2d\x59\xc3\x9f\xec\x24\x62\xea\x16\x6c\xf7\x14\x5c\x27\x9b\x6f\xe0\x92\xf5\xbe\xb9\x53\x46\xb4\x14\xe9\xfc\x72\xc8\xef\x13\x17\x23\x24\xd9\x98\xcd\x2c\x24\x27\x5e\x48\xd2\x38\xc6\xc8\x2b\x84\xdc\x90\x8b\x4a\xb3\xef\x5d\xe6\xe5\xf7\xff\x64\x99\x88\xf6\x6c\x0d\x7d\x0d\x74\x5f\x2a\x8a\xca\x1c\xc2\xa2\xe4\xba\x61\x02\xcf\x26\x3d\x8a\x64\x03\x4e\x64\x07\x66\x41\xf3\xa9\xcd\x7a\x70\xbe\xba\x4a\xa3\xee\xc0\x45\x83\x6a\xcd\xee\x2c\x24\x11\x9e\x5c\x17\x4c\x17\x22\x6b\xdd\x95\x2a\x46\x57\x55\x90\xfc\x04\xb3\xcb\xcb\xa1\x0f\xb4\x75\x47\xec\xd1\xb3\xe0\x3a\xfd\xc7\xdb\xeb\x2b\x96\xf1\x3d\xe0\xc2\x0a\x45\x4a\xf2\x40\xc6\x58\x5f\xbf\x87\x46\xa0\xda\xf8\xea\x62\xc3\x3e\xb5\x00\xd3\x76\xdf\x2d\x7d\xb1\x69\x43\xc1\x9c\xa1\x29\x69\x96\x72\xae\xd2\xb3\x2c\xe5\x32\x80\xfe\xea\x29\xab\x7d\x3e\x8c\xf5\xba\xa8\x0f\xa1\x69\xa0\x02\xe0\x4e\xa1\xb9\x90\x97\xad\xe0\xd0\xaa\xc6\xfa\x49\xe1\xdd\xce\x3d\xa2\x17\xf4\xf6\x1e\xa5\x0d\x78\x64\x96\x09\x32\x0b\xd8\x90\xb5\x43\x3d\x70\x0d\x80\xc4\x11\x03\xd5\x2f\x08\xbf\x90\x56\xef\x57\x3d\x6a\x16\x23\xf7\x42\x99\xe8\x2d\xf8\x27\x31\x20\x00\xe0\x20\xda\x5f\x10\xb9\x90\x73\xa9\xcd\x80\x82\x4f\x53\x3c\x08\x72\x6c\x54\x82\x71\xf3\x37\xef\x5c\x7c\x1f\x07\x89\x24\xd9\x3a\xba\x3e\x30\xcc\x4e\xb9\xc0\xb4\x2a\x94\x1f\x26\xf6\x7f\xcf\xb3\xbe\xac\xb1\x93\x4b\x3c\x34\x4a\x8e\x79\xa6\x6e\x75\x82\x56\x2b\xa8\x34\x55\x52\xc7\xc2\xde\xfb\x28\x4f\xdc\x7e\x5a\xc9\x9f\x0f\x8b\x0a\x0c\xbe\x84\x0d\xcb\x04\x1c\xb1\xf7\x04\x24\x70\x0e\x5b\xe3\xec\x65\xb3\xca\x41\x03\x07\xd8\xab\xd0\x93\x36\x65\xb7\x42\xb0\x4f\xd0\x53\xe6\x63\x9f\x48\x63\x0d\xe0\x82\x05\x4f\x5a\x25\x70\xe0\xe9\xb9\x5c\xab\xd3\x36\x83\x7c\xd3\x80\xa3\x9d\xd4\x2b\xed\xf5\x3c\x15\xf0\x06\xa9\x8c\xf2\x79\xf3\xef\x5b\xdb\x75\x00\xde\xf6\xc1\xdf\xc9\x29\x2b\xcf\xd6\xd4\x9c\xcf\x30\xc4\xc7\x30\x3c\xd5\x26\x89\x69\xe5\x04\x59\x8b\xef\xa5\x7a\x94\x68\x0b\xd0\x97\xd8\x77\x66\xfd\xc1\x01\x86\x0e\x54\x34\x0b\x4a\xdc\x0d\x5f\x02\x8d\xf2\xcc\xfd\x9b\xdd\x62\xac\x08\xeb\x0c\xe2\x28\x1a\x8c\x1f\x92\x35\x81\xdd\xfc\xbb\xd9\x84\xbd\x9e\xb0\x8b\x09\x9b\x4e\xa7\x2f\x27\xa8\xdc\x4c\x35\xc2\x57\x10\x39\x56\xf0\x8d\x29\x9b\xe4\x22\xd6\xc1\x07\x40\x00\xc9\x1c\x56\x96\x2d\x8c\xfb\xa7\x02\xcf\x83\x6d\x02\xe6\x30\x52\xc2\x05\xc5\xd5\xa3\xad\x4a\x7c\xa5\x00\xa2\x29\x22\x95\x5b\x90\xa7\x2e\x54\x6e\x01\x6b\x0f\x3c\xe7\x89\x84\xd4\x6e\xde\x84\xeb\xd2\x97\x03\x72\x67\xf1\x2b\xdf\x41\xfb\x13\xe9\xf8\x2d\x4d\x37\xdd\xb9\xfa\x17\xfb\x8c\x1c\xd2\x8f\x79\x52\x14\xe6\x74\xd6\x0b\x79\xcb\x5e\xfd\x2b\x9b\x65\x59\x2a\xd8\x8c\xfd\x95\xbd\xe6\x92\x4b\xce\x5e\xb3\xbf\xb2\x0b\x2e\x0b\x9e\xaa\x32\x13\xec\x82\xfd\xd5\x74\x9b\x29\xef\x4a\x99\xe3\x70\x3f\x61\x9c\xc9\x32\xc5\x53\xff\x3b\x0b\x06\x7b\xe9\xda\xc5\xfd\xe8\xac\x44\xf1\x28\x84\x64\x5a\xed\xe8\x28\xfc\x8b\x8b\x49\xe8\x44\x6e\x52\x51\xd0\x7c\xa8\xc2\xf6\xf0\x03\x67\xd0\xd2\x57\x0b\xe9\x7c\x79\x7f\x31\x35\xfe\x0b\xfb\x2b\xbb\x2a\xd3\xd4\x54\xc9\x6c\x34\x66\x22\xbd\x62\x36\x8d\x42\xc8\xe9\x63\x72\x9f\x64\x22\x4e\x38\x24\x52\x98\x7f\x9d\xdf\xc1\x68\x2f\x4b\xcf\x99\x17\xae\x69\x27\x38\x73\xca\xd6\xf3\x2c\x49\xd9\x4e\x0e\xc9\x0e\x7e\xcf\xcd\xaf\xfa\xea\x78\x8b\xc8\x33\x85\xd2\x7a\x20\x83\x15\xc5\x82\x42\xd9\xa5\xa3\xb6\x80\xda\x61\x6b\xcb\x6a\x39\x0a\xc2\x43\xfd\xd4\x4d\x16\x34\xc4\x9e\xfc\x0e\x39\x40\xbb\x68\xe8\x96\xdb\x50\x5e\xa9\xa4\xb9\x83\x2d\xe9\xa9\x7e\x06\x45\x85\x9c\xe2\xca\xcf\x55\x11\xb5\x4a\x17\xab\x64\x90\xda\x5c\xad\xb2\x1f\xc9\x77\x81\x09\x6a\x66\x99\x26\xe9\xb9\x59\xaa\xe7\x57\x4a\x9a\x6b\xab\x4e\x36\x48\x4f\x04\x30\x22\x94\x69\xb3\x46\xc1\x5d\xd5\x64\x0d\x96\x00\xd8\x07\xa6\x4a\x08\x6d\x2b\xcc\x2e\x60\x86\x20\xdd\x2f\xa4\x79\x83\x4e\x24\x80\xb9\x27\x8e\xc5\x16\xbf\x66\x75\xed\xe9\x5b\xb4\x21\x07\x85\xb7\x4c\xb0\xbe\x1c\xda\x13\x26\x1c\xa5\x6c\x9d\xe0\x15\xbf\x0a\x18\xdc\xa8\x34\x4b\xef\x81\x71\xcf\x95\x48\x95\xdc\x98\x59\xd1\xb5\x09\xa8\x1d\x4f\x4e\x01\x96\x84\x55\xc0\xc2\x3a\x6b\x60\x0e\x4b\x7a\x84\x86\xc4\x9c\x93\x49\xec\xef\xf7\xba\x5c\x19\x3b\xc2\x79\x64\xdd\x69\x48\x8d\xeb\x4a\x28\x3e\x2d\xbe\xfc\x51\x8b\x1c\x68\x96\x11\xe1\xe0\xbc\xfd\x78\x70\x7a\xb2\x0d\x6c\xd1\xb0\x45\xd5\x0b\x8c\x6d\x77\x85\x50\x34\xa1\x91\x5a\x3d\x60\x3e\x7e\x4d\x8c\xec\x10\xe4\xec\xdb\xd9\xfc\x5d\xed\xb9\x26\x72\xb6\x05\x5e\x7b\x37\x7f\x7f\xf9\x66\x79\xfd\xf1\xae\xf1\x9c\x29\x8d\xfe\x34\x56\xe9\xdf\xf6\xde\x53\xc0\x07\x3f\xa3\xdc\xcb\x52\xad\x6d\x26\xe5\xf0\x33\xbd\x21\xb8\x33\x0c\xa5\x12\x92\x6c\x87\xc2\x34\xcd\x89\xd3\x99\x0f\x2e\x97\x14\x91\x18\x56\xd9\x7a\x87\x5d\xcb\xb7\xf8\xfa\x07\x95\x26\x51\x3f\xe8\xcd\x1e\x57\x5b\xf5\xd8\x82\x22\x5a\x09\x40\x81\x92\xff\x87\x2a\x85\x16\x7a\x21\xa2\xc2\x47\xdc\x9a\x8d\xfb\x5f\x0d\xb4\x39\x7c\x07\x47\x8f\xb2\xeb\x36\x10\xe0\x74\x31\x3c\x38\x5b\x81\x60\x13\x78\xe5\xd1\xd7\x0a\xb9\x74\x10\xdb\x8e\x38\xb9\xa0\x2b\x3d\x0f\x1b\xf4\xe3\x56\xa5\xe6\x2e\x26\x63\x22\x2b\x5d\xc8\x4c\xe4\x91\x02\x80\x0a\xe6\xc1\x2b\x16\x6d\x93\x34\xf6\xe2\x2d\xdf\x01\xa2\x17\x70\x77\x2f\x49\x96\x4f\xb8\x18\xb3\x2d\xbe\xe7\xd4\xb5\xd3\xce\xea\x95\x9f\xe6\x81\x7a\x3a\x88\x5e\xdf\xb4\xff\x85\xa0\x64\xd8\x15\x44\x2f\x54\x8b\x16\x9a\x4e\xaf\xd4\x67\x94\x87\x17\x14\xc5\xd7\x56\xfc\xd3\x5e\x9c\x8a\xda\xb8\xd2\x34\xab\x77\x25\x90\xce\x22\x8a\x0a\x01\x24\x5a\x40\x75\x76\x82\xa3\x2d\xe6\x29\x20\x69\x50\x17\xd2\xc7\x47\x5f\xe8\xd0\x2e\x6b\x1d\x67\xe4\x54\xb5\x20\xc0\x09\x7b\x51\x69\xe8\x0b\x20\x25\x95\x0a\xbe\x47\x31\xac\x4a\xd7\xc0\x74\x9d\xb0\xa4\x58\xc8\x44\xe3\xcc\xcc\x45\x2a\x1e\x4c\xed\x42\x67\x31\x61\x5d\xec\xdd\xd9\x36\x1b\x70\xe4\xdc\xa6\x1f\x3b\x99\x7b\x58\x84\x79\x48\x6e\xc9\xc1\x31\x1d\x0b\x6d\xec\x46\x90\xe5\x10\xbf\x9a\x05\x90\x40\x2c\x04\xe1\x1f\xb1\x90\xb6\x7e\x80\x0a\x41\x2d\xdb\x85\x9c\xaf\x21\x07\x14\x32\x4f\xe3\x18\x6f\xa1\x56\xa8\xc1\x31\x8d\x25\xe4\x1c\x56\x74\x27\xb7\x03\x41\xaa\x92\xb8\x92\xc4\x83\xc8\xf7\x05\x38\x75\xa1\x5f\xa5\xe0\xc5\x96\x25\xc5\x04\x28\xe2\xec\x4e\xb9\x90\x3c\x26\xa5\x72\x2a\xce\x74\x0d\xcc\xfb\x9e\x71\xa6\xdf\x57\xea\xa1\xcf\xb0\x3d\x15\xf5\x85\xab\x3a\x4b\xb9\x5c\xe2\x09\xf2\x15\x70\x5f\x81\xe0\x67\x57\xa8\xb3\x5c\x2d\x1d\xad\xcd\x93\xd4\x33\xd0\x84\x0e\x65\x78\x8d\x1d\x6b\x3f\x34\xc1\xc9\xe0\x69\xad\xed\xf5\xc4\xf9\x69\x08\x5d\x90\x33\x1b\x81\x1d\xbe\x0b\x78\x48\x18\xaf\x21\x11\xec\x6c\x3d\x84\x09\xb3\x33\xe0\x5b\xc5\x27\x0d\x19\xf9\xda\x19\x52\x1f\xf6\xf1\xd0\x98\x86\x85\x78\x14\x3c\xe6\x40\xb5\x9e\x17\x22\xd3\xe9\x47\x69\x42\x65\x6c\x6b\x83\x70\x1f\x26\x4f\x08\xf4\xc3\x39\x37\x4f\xbb\xa0\x6b\x78\x0f\x53\x2d\xd8\xca\xa7\xf4\x51\xc3\x3e\x35\xd4\x53\xe2\x73\xaf\xa1\x5e\x53\x36\x97\xcc\x9a\x7b\x13\xf6\x02\x27\x96\x7e\x41\x2e\x48\x52\x05\xa6\xd8\x79\x4c\xab\x87\xb2\x55\xeb\x50\x0c\xcc\x19\xf0\xcb\x0d\x23\x41\xbd\xd4\x86\xcf\xda\x2f\xaf\x13\xc8\x59\x38\x26\x2d\x1d\xa3\x88\x2b\x2c\x80\x0e\x49\xbc\x76\xef\xd1\x68\x57\xde\x9b\xed\x1b\x6c\xe3\x5d\xec\xb5\x7d\xd1\x74\x51\x56\xd2\x79\x6a\x7f\x67\x2a\x5f\x48\x5b\x1a\xb9\x24\x35\x6a\x29\xd5\x8b\x0a\x20\xd4\x64\xf3\x07\x33\x15\x40\x0c\x56\x3e\x0b\x54\xd9\x3c\xff\x6a\x7d\x17\x00\x50\xc4\x4a\x78\x3d\xf3\x29\x9b\xf9\xaf\x19\xc3\xc3\x4c\xf0\x1d\x1e\xf3\x75\x8e\xc6\x34\x35\x9d\x92\x14\x96\x12\x32\x48\x6f\xd0\x25\x10\x9b\xae\x4b\xb3\x19\x05\xec\xaf\x0b\x69\x3a\x8f\xad\x13\xc0\xfd\x52\xbf\x2c\xe4\x7b\xa5\x6d\x36\xbd\xf6\xfd\x61\x31\xa4\xd4\x6d\x2f\x9c\x8a\x18\xfd\xe1\x0d\x1c\xda\xe4\xf3\xaf\x49\xfc\x43\x5e\x0b\x51\x62\xec\x55\x99\xfb\x46\x45\x5c\x2e\xe4\x7f\x9a\xee\x41\x25\x6b\x27\x03\xaf\xd6\xb8\x84\x61\x04\x21\x58\xf2\x09\x0b\xfd\xee\x9f\x5e\x7e\x7a\x89\x38\xf4\x52\x83\x70\xe3\xa4\x7a\x80\x38\x22\xf0\x32\x4d\x21\x12\x6d\x5b\xe0\xc8\x28\xfc\x27\x78\x1f\x2c\x87\x2e\x75\x4b\x59\x35\x31\x86\x2c\xf4\xbe\x19\xec\x9d\xcf\x33\x16\xf1\x22\xda\x9e\x59\x5b\x8e\xb6\x31\x7b\xfa\xd1\xf0\xa1\x82\x9b\xb1\xb4\xda\xb9\xb0\xcd\x85\x33\xdf\x39\x76\xbe\xca\x7c\x31\x4d\x00\x60\xcd\x5d\x5d\x18\xc6\x91\x87\xe2\xe4\xf4\x42\xec\xde\xce\x73\x8f\x5b\x59\x36\x7f\xe3\x24\x2f\xb9\xe4\x3b\x11\xb3\x17\x90\x31\xf5\xc2\x0e\xfe\x42\x66\xab\x69\xba\x5f\x17\x44\xf1\x64\x3a\x65\x0a\x02\x46\x07\x4e\xb9\x65\xdc\xbc\x26\x1d\xe8\xec\xce\x8b\x56\xbb\xad\xe3\xfa\xc6\x7d\x69\xb8\xc1\x82\x3e\x2e\xd7\x3b\xb7\x55\x88\x50\x95\x49\x9d\xeb\xfb\x09\x5b\xe5\x5c\x82\xf6\x44\x1c\x1a\x55\x7e\x75\xc2\xe5\x19\xf9\x93\x6c\x0a\x85\xe4\xe9\x1e\xb0\xe3\x93\x85\x44\xb2\x29\x60\x25\xde\x47\x69\x12\xb1\x4d\xce\xb3\x6d\xcd\x0e\x12\x0f\x42\x16\x20\x61\x7a\x23\xb8\x3e\x2d\x5a\x9f\xd7\x4b\x60\x83\xe3\x29\x33\x09\xb7\x0f\x2e\x6b\xf4\xa0\x50\xbd\x8e\xa3\x05\xe0\x5a\x22\x5e\x8e\xa3\x06\x39\x48\x60\x59\xa1\x45\x23\x8e\x1e\x88\x40\x9a\xc6\x31\xfb\xd5\x43\xe1\x6f\xec\x57\x62\xad\xb0\xe0\xff\x53\x43\xf6\x8e\x05\xe3\x24\x2e\xc3\x79\xd5\x8a\xe4\x9e\xde\xc3\x7b\xae\x31\x01\x88\x3c\x15\x16\x2c\xec\x36\x8e\x09\x49\xcc\x01\xcf\x19\xfb\x73\xb9\x52\xa9\x25\x8a\x9b\xbf\x61\x2a\x07\x8d\x86\x42\xd1\x9f\x92\xb8\xcb\x3a\x48\x64\x2c\x7e\x3d\x89\xad\xa1\xff\xa0\xb7\x66\xb3\xf9\x4c\x20\x05\x50\x6f\x2c\xec\x4e\xb9\x30\x87\x70\x61\x6f\xc6\x8d\xa7\x74\x1d\xb9\x38\x4b\x8b\x2d\xc0\x09\x11\xc8\xee\x3b\x75\xc7\xf7\x2c\xda\x72\xb9\x09\x5c\x13\x80\xee\x12\x99\xca\x51\xcb\xf0\x01\x68\xd1\x54\x6e\xb3\x61\x29\xc7\x93\xd0\xf4\x2e\x90\x80\x20\x56\x65\x13\x39\xf9\x66\x93\x8b\x0d\x10\x14\x2c\x64\x25\x4b\x1d\x28\xe1\xac\x8c\x02\x7e\xa7\x2f\xc9\xf7\x69\x98\x32\xba\x6e\x83\x45\xbe\x77\x29\x92\x24\x04\xea\xd7\x73\xbd\x5b\x27\x2c\x11\xd3\x09\xfb\xc1\x03\x77\x45\xa4\xa4\xcb\xb1\xec\x48\xb0\xab\xb9\xfc\xd9\x81\xab\x43\x93\x52\xa3\xbd\xee\xf0\x5b\x43\x4e\xb4\x75\xd2\xf4\x26\xa9\x16\xbc\x28\x47\x9c\x41\x24\x19\x7d\x61\x5e\xbe\xc5\x77\x7b\xb1\xed\x3c\x33\xc7\x86\xa5\x33\x32\xcf\x9b\x93\xd3\x7c\xdb\xd3\x1d\xb7\xf5\xf5\x41\x07\x72\xaa\xba\x1d\xc8\x4f\x61\xaa\x5b\xce\x8a\xc3\x3e\xe4\xb4\x83\x87\xa1\xa7\x4d\x63\x5d\xc4\x16\xe4\x4b\xf0\x7d\x5d\xbf\xc6\xb6\xec\x00\x59\xae\xe2\x32\x12\xb1\x59\xb9\x70\x1f\x42\x44\x8c\xa3\x83\xa8\x6c\x92\x6d\x07\x6d\x85\xd3\x06\x4e\xdd\x2f\xe5\x73\x18\x44\x23\xec\xba\xff\x63\x87\xbf\xc1\x5a\x7c\x6d\x9d\x1e\xae\x4f\xec\xa7\x7c\xe4\x39\xe5\x3e\x5f\x25\xff\x55\x79\xb2\x49\x24\x2f\x54\xce\xbe\x73\x49\x9f\x2f\x9d\x62\x50\xb7\x85\x30\x72\x9b\xa8\x74\x11\x6e\x13\x5f\xd4\xf0\x68\x9b\xa4\xe6\x29\x5d\xf0\x5d\x16\xd2\x69\x3a\x3d\x66\xea\x99\x14\x3b\xc1\xd9\x26\xe0\x3b\x4d\xb4\xcf\x6d\x5b\x48\x8a\x38\xe0\xb8\xa9\x3c\xe4\x83\xee\x3c\x9b\xb3\xb2\x58\x1e\x49\x11\x83\x2f\x8f\x73\x3c\x11\x0c\xe1\x3d\xcf\xfa\x49\x37\x38\xb9\x1c\x30\xb9\xc7\x89\x54\x5b\x4b\xa5\x3a\x3f\xfb\x15\x17\x46\x92\x80\xd6\x43\xe7\x37\xef\x6c\xa0\xc8\xdf\x07\x2b\x17\x2c\x18\x08\x64\x1f\xd4\x60\x55\xe0\xd5\xde\x6d\x6b\xe6\x14\xb7\x4c\x1d\x17\xa9\x2a\x63\x46\x9b\x1a\x85\xe1\xf3\x29\x9e\x8e\x40\x07\x3a\x9d\x76\x71\xa3\x8d\x54\x82\x75\xfb\x0f\xbc\xd7\xbe\x02\xe1\xb7\x8e\x1d\xb8\x77\xe9\x53\xcf\x3e\xdb\xd0\x53\x4f\xc3\xd8\xbb\xed\x78\xd4\xd8\x3b\x2f\x38\x70\x93\x8d\x73\x90\xc2\x7d\x34\x89\x53\x58\x6f\x61\x00\xa1\x85\x3d\xb5\x12\x98\xd5\xf7\x27\x7f\xce\x66\x30\xf7\x7f\x2a\xe3\xb9\x90\xc5\x12\xbe\x38\xee\x63\xf0\x91\x0f\xf0\x7a\xc5\x60\x1a\xe4\x08\xfe\xf7\x3b\x85\xfe\x7d\x4b\x44\xf2\x1f\xec\x96\x7c\x5a\x66\xbf\x4a\x00\x44\xaa\xef\xd9\x77\x09\x60\x8e\x82\x58\xa8\x1b\xb8\x8e\xe1\xa2\x06\x1d\xd1\x7b\x41\x83\x2a\x5b\xfb\xa0\x06\xf9\xda\x43\xa8\x1a\x4a\x21\xf7\x1e\x65\xce\x9a\xad\xd6\xfe\x2d\x20\x27\xbf\xaa\xfc\x1b\x88\x24\xcd\xf8\xa5\xec\xbf\x44\xae\x7c\x3a\x08\x3a\xab\xc2\x82\x7b\xed\xf5\xe3\x75\x55\xd1\x1e\x47\x45\xcf\x50\xd2\x0e\xfe\x42\x5c\x2f\xe8\x51\x58\xed\xed\x75\xa4\x8b\xa6\x5e\x44\xcb\x0e\xfd\x82\x41\x55\x09\x2e\x9e\xa1\x1e\x41\x52\x3b\xcc\xec\x02\x3d\x07\x7f\x05\xb1\x29\xee\x78\x46\xf8\x3e\x82\x12\xd7\x83\x37\x53\x68\xc4\xbf\xff\xe5\x3f\xa6\x5d\x8a\xd9\x50\xf5\xb1\x70\x29\x57\xf9\xb7\x79\x22\x64\x0c\xc1\x58\x1e\x37\xa5\x75\x64\xc5\x3b\x5f\xd9\x9e\xcd\x34\x7c\x92\xac\xc9\xf6\xa3\x56\x2f\x71\x12\x7d\x81\x88\xbe\xdf\x64\xdd\xf2\xad\xc4\xfb\xba\x4c\x09\xbd\x8c\xf7\x92\xef\x9a\x1a\xe3\xcf\x5a\xc7\x7d\x22\xd2\x18\xaa\x48\x5f\x3f\x14\x95\x8a\x45\x74\x3f\xd6\x26\x38\x9a\x18\x5c\x44\xf7\xec\xa7\xbb\xf7\xef\x50\x07\x32\xd1\x0b\x79\xc5\x8b\xe4\x41\x7c\xcc\x53\x17\x0e\x20\xa6\x97\x3c\xb5\x6b\xa4\x4a\x54\x1b\x90\xa2\x58\x56\x5b\x6b\x38\x84\x3c\xe2\xbb\xfd\xd9\xaa\x8c\xee\x45\x71\x9e\x73\x19\xab\x1d\x36\xe3\x5c\x97\xeb\x75\xf2\xeb\xb4\xe0\x79\x07\xa9\x38\xfa\x11\xbe\xa2\x9d\xeb\xa5\x62\x0a\x6f\xf3\xa2\xa9\xfb\x08\x59\x9f\x24\x40\x5c\x31\x6e\xe1\x0a\x9c\xf3\x9d\x00\x56\x38\x56\x25\xe4\x87\x52\x30\x91\x12\x74\xeb\xb4\x26\x04\xbd\x22\x55\xdc\x4f\x81\x71\xff\x29\xa8\x55\x55\x99\xd9\x56\xca\x6b\xc1\xed\xf8\x3d\xde\x0f\x37\xb9\xd0\x7a\xc2\xb4\x82\x1a\x2f\xa4\xc5\xa2\xdb\x7c\x29\xc0\xbd\x00\xaf\x64\xba\x67\x91\xca\x12\x90\xce\x73\xed\xda\xaa\x47\xf0\xd3\x87\x69\x83\xa0\x76\x5a\xca\x22\x49\x19\x5f\x17\xe4\xc4\x07\x12\x6d\x2b\x9a\xa3\xa7\x0b\x09\xa1\xd8\x08\x9a\x0f\x10\x09\x17\x7e\x71\x8d\xd0\x6c\xcd\xa3\x24\x4d\x0a\xa2\xf6\x81\x24\x23\x6e\xda\x6b\xce\x03\xd3\x97\x39\xdf\xf3\xd4\x5f\xac\x78\x5a\xfa\x4c\xc9\x33\x2d\xea\xd4\x71\xdd\x8e\xcf\xbe\x53\xf7\x84\x0b\xef\x29\x87\x4f\xf3\x4a\xeb\x94\x5c\xfd\x39\x9e\xc4\x16\x7f\x5b\x31\x75\x3d\xa3\xaf\x3b\x7e\x20\x26\xd1\x71\xa9\x9e\x5a\xfd\x9d\xe6\x17\x46\xf4\x5e\xbb\x11\xf6\x85\xdc\x05\x5d\xdc\xc2\x43\xaa\x6f\xbd\xdd\x1f\x94\x4a\x4f\xf5\x78\xf3\xd4\x6e\xa8\x4b\x90\xa4\x3c\xe5\xba\x86\x13\xc0\x39\x8e\xe6\x6f\x5c\x4c\xdb\x91\xf5\x56\x85\x6c\x08\x6e\x45\x55\x80\x8d\x02\x2a\xd1\x83\xc4\xd6\x59\x0b\xa8\x61\x24\xa2\x1c\xca\x40\x34\x94\x35\x9d\x9b\x2e\xf8\x80\x23\x80\xfb\x3a\x02\xa1\x61\xad\x86\xa3\x9c\x61\x28\x20\x59\xfb\x94\x73\x8c\x85\xc4\xa7\xae\x1f\x83\x6f\xdb\xfe\x44\xd9\x6a\x73\x3e\x91\x95\xbc\x90\x81\x45\x8c\x6c\x45\x16\xb2\xef\x7a\xad\xcd\x5f\x56\x99\x86\x27\xfb\xcb\x4e\x61\xb7\xee\x0d\xa8\xbc\x09\x75\xaa\x00\x6b\x11\xa9\xdd\x2a\x91\x36\x05\x9c\x9c\xc8\x60\xca\xcf\x2c\x79\xa0\x73\xf8\x5b\x93\x1c\xd5\x0b\x6a\x7d\xef\xcc\x88\x90\x87\x31\xdc\xb2\x0e\x5d\x77\xc3\xfb\xd3\xd3\x12\x71\x77\x44\xf2\xea\x2d\x48\x34\xe3\xe9\x23\xdf\x6b\xd0\x72\x15\x66\x57\x5c\xa3\xe3\xb4\x5a\xff\x49\x70\xbc\x5b\x62\x4a\x12\x46\x2f\x49\xe2\x99\xda\x92\x20\x2f\x86\x48\xad\x6a\xad\xe7\x1b\x7a\xa1\xdb\x3b\xe7\xeb\xc4\x42\xf2\xde\x58\x08\x06\x79\xff\x36\xc2\x1f\x3d\x4e\xd6\x13\x7d\xbd\xc1\x31\x89\x16\x19\xc1\x70\x20\x31\xca\x85\x80\x27\x6c\xc7\x13\x49\xcb\x00\x95\xc1\x62\xb1\x2a\x37\x9b\x4e\x17\xe4\xb7\x1f\xcb\xa8\xae\x93\xbf\x7b\x5f\x73\x2f\x63\xd6\x53\x78\x63\xe7\xf6\x4b\xe8\x1e\x36\xf7\xaa\x2f\xe3\x80\xfd\x8a\xde\xee\xd6\x90\x53\x63\x12\x3d\x8d\xb7\x7b\x3e\xc4\xdb\x6d\xb1\x53\x90\xc2\x46\xd7\x55\x8b\x6f\xf9\xcd\x0d\xfe\x65\xdc\xe0\x83\x26\x05\xd2\xa6\x2c\x93\xaa\x81\xde\x53\xc3\x23\xd9\xd7\x1c\x4d\x27\xd4\x8a\x54\xd6\xb5\x90\xb1\x66\x2b\x1e\x3d\x03\x1d\x1b\x9c\x8e\xa7\xfb\xdb\x0e\x80\x4b\x6e\xd5\x4e\x30\xf8\x94\x46\x4d\x09\x46\x59\x82\x13\x40\x83\x9a\x06\x7a\x44\x06\xe1\x3d\xe0\x38\x45\x64\x48\xec\x8d\xea\xef\xa4\x78\x64\xe6\xb4\x9a\x84\xf0\xb8\x60\x78\x40\x6c\xe8\xa5\xb1\x0e\x2b\x58\x7a\x47\x89\x90\x8b\x0d\xcf\x63\xc8\xe0\xa0\x25\x99\xf2\xe8\xde\xfc\x37\xd4\x8f\xbe\x48\x10\x3e\xcb\x7b\x8e\xb0\x52\x5f\x5a\x22\xa3\x1c\xc8\xae\x08\x2d\xe8\xeb\x87\xaf\x6b\xc6\xa3\x5c\x69\x74\xca\x38\x8d\x4e\xc8\x20\x06\x03\xf6\x21\x89\x4b\x9e\xe2\x17\x3b\x3d\xd9\x63\xe1\x61\x75\x40\x4f\x20\xa7\xd3\x44\x8b\xd1\x70\x20\x07\x10\x74\xe3\x74\x21\xdf\xb8\x80\xc4\x2b\xf6\x51\x0b\x42\x71\x69\x4b\x48\xdc\x5b\xd3\x67\x33\x1f\x1a\x98\xbb\x4e\x1b\xa2\xa7\x03\x2c\x88\x39\xe8\x08\xdd\xdd\x13\x07\x48\xfd\x4e\x19\x94\xd1\xe4\xa4\xf3\x40\xd3\xd7\x77\x0b\xde\x13\x72\xc1\xe3\x7d\x48\x7d\x96\x48\x06\x51\x30\xc6\xe3\x5d\x22\xcd\x22\xb0\xba\x71\xee\xa4\xb1\x14\xd2\x08\xe9\x05\x79\x95\x34\xad\x6d\x82\x9a\x49\x61\x8c\x4b\x9e\x27\xe9\x1e\xee\x13\x59\x2e\xce\x82\xef\x04\xe3\x43\x19\x45\x40\x86\x4d\x34\x1d\xa5\x16\xeb\x32\xc5\x5b\x07\xdc\xcb\x5d\x03\x68\x47\xfa\x38\x9f\x18\x83\xa3\x20\x51\x83\xe0\xc3\x28\x15\xf6\x14\xd9\x19\x8d\x68\xe0\xb8\x88\x96\xa7\xe6\xcb\x01\x44\xbe\x55\x8f\x36\x95\xec\x91\x7b\xac\x70\xd7\xe9\xfa\x64\x51\x8c\x7e\x3b\xd4\xde\x00\xed\x3e\x85\x9d\x1f\x57\x42\x57\xf4\x9b\x88\xdd\xde\x94\x48\x68\x0e\xa9\x6d\x7a\xcf\x70\xa9\x31\x23\xcd\x8c\x25\x9c\x5f\xd6\xd1\x51\x75\x0c\x33\xd7\xba\x44\x2b\xc9\x16\xe5\xef\x7e\xf7\x7b\xc1\x7e\x07\x29\x7a\x74\x1f\xc1\xf8\x13\x90\xf3\x61\xe9\xb0\x65\xbb\x0f\x08\x64\xee\x6b\x8c\x08\x6b\x83\x80\xda\x7c\x78\x00\x51\xf2\x68\xcb\x74\xb9\x42\x84\x20\xa7\x10\x06\x97\x8e\xfb\xf6\x9d\x02\xb0\x1f\x9e\xec\xb6\xf6\xff\x4b\x1c\xf6\xc8\x3f\xbf\x90\x99\x42\x7a\x66\x80\x56\xae\x04\xdb\xf1\xfc\x1e\xe4\x04\x49\x33\x9e\xf1\x82\x7d\x97\x88\x69\xd5\x7d\xff\xb2\x52\x1f\x0a\x98\x20\xed\x2a\xcb\x4b\x29\xad\x3e\x0a\x33\x86\xa9\xf7\xa5\x4f\x16\x72\x55\x86\x77\xcf\x8a\x33\xde\x4f\x2d\x70\xc8\xc3\x66\xab\x80\x8b\x83\x2a\xc5\x75\xa0\x65\xcf\x06\x78\xe5\x17\xf2\x99\xdc\xf2\x5d\x0e\xbf\x0f\x64\x83\x59\x67\x5e\x90\x0f\x00\xcd\x0d\x25\x3c\x61\x38\x70\xda\x83\x91\xf3\x01\x74\x3c\x27\xec\xa7\xe4\x41\x4c\xd8\x6d\xc6\xf3\xfb\x09\x7b\x83\xe1\xb5\x3f\xaa\x55\x9b\x0f\xaf\x41\xd8\x70\xb2\x1f\xef\x38\x37\x56\x1f\x91\x49\xbb\xf5\xff\x4b\x53\xe9\xbf\x2b\xb6\xfc\xb7\x89\x78\xeb\xe0\xd2\xf8\x7b\xf7\x44\x1c\x08\x03\xff\x06\x0e\xfb\xbb\xbc\x15\xf7\xd3\x68\xfc\x43\xf8\xbf\x76\xff\xb2\x16\x17\xd8\x9e\xb4\xcb\xb5\xa2\xbe\xbe\xad\xc4\xe1\x24\xae\x1f\xca\xcd\xfc\xe1\x61\x4b\x81\xd2\xb3\x63\x97\x3a\x3e\x02\xd4\x4e\xaf\xda\xfe\xba\x48\x95\x2e\xf3\xfe\xc5\x7f\x53\xad\xb5\xfd\x7a\x0b\x95\x26\x4c\xb6\xdd\x4a\x00\x2b\xc0\x50\x78\x07\x3e\xb6\xfc\x4f\xb5\x5a\x02\x96\xe9\xb4\x15\xde\x56\x9c\x15\xe7\x71\x11\x31\xaa\xaa\x3f\x21\x6f\x33\x01\x8c\x4e\xde\x14\xf5\x01\x81\xda\x0c\x73\xae\x91\x85\xb4\x04\xd7\x98\x91\x9a\xe7\x02\x98\x78\x73\x01\x9a\x53\x2c\xe3\xb9\x03\x14\x58\x8b\x28\xb8\xf9\x78\xd0\x49\x98\x45\x06\xc9\xa0\x74\xdf\x5a\x09\x21\x5d\x6f\x8f\x31\x25\x8c\x75\x50\xef\x7d\x42\x93\x3d\x0a\x16\x61\xa2\x42\x87\x3e\x5e\xe3\xbd\xe0\x2e\x08\x26\xf7\x46\x14\xc1\x6e\x5e\x33\x2d\x2a\x4b\xb3\x12\xa1\xfa\xa6\x10\xf5\xad\x31\xe8\x1a\xf9\x55\xc5\x81\x32\x28\xa6\xf7\x14\xfe\xf2\x0f\xbc\xd8\xe2\x85\x76\xa7\x0a\x81\x7b\x26\xb2\xf0\xe0\x7c\x41\xaf\xf3\x2a\x55\x2b\x10\x7b\x32\xbf\x74\xdd\x0d\x23\x5a\xda\x83\xba\xae\x39\x60\x43\x76\x06\xb3\x9b\x40\x26\x6b\x2e\x34\x10\x9a\x34\xa3\x54\x43\xf1\xbf\xe3\x2e\xdd\xcd\xea\x9a\x4d\xff\x4d\xe3\xb2\xdd\x64\xc0\x37\xcb\x1a\xc0\xa0\x97\x47\x64\xa8\x5c\x86\xd9\xa0\xc6\x38\x20\x32\x60\x0a\x03\x23\x1f\x68\xad\xbd\x56\x53\x78\x21\x67\xf8\x4b\x70\x08\x70\xaf\xf4\xe2\xf0\x96\x24\x1f\xe9\xd6\x1f\xa6\x87\xb2\x59\x88\xf0\x23\x0f\xc1\xc4\xfb\x32\xe1\x32\x30\x81\xac\x41\x59\x24\xb9\x60\x12\x50\x08\x0b\xa9\xcb\xd5\x99\x27\xfe\x30\xb7\xb8\x07\x20\xab\xd1\x22\xe3\x70\x95\x01\x3e\xa0\xb3\x96\x63\x18\x3d\x93\x5e\xb1\xc1\x12\xe4\xf1\x94\x36\x7f\xc8\x45\xc4\xcc\x73\xd7\x76\x57\x8e\xb9\xac\xc1\x2d\xda\x66\x3d\xe3\x61\xd7\xb7\x5f\x80\xa6\x0c\x64\x38\xde\x20\x8a\xe2\x6b\x1f\xe0\x61\x34\x74\xe8\xd1\x0d\xf1\xb4\x85\xfc\xbf\xf6\x6c\xe8\x06\xed\x8e\x98\xe9\xa6\x67\xcc\x11\xd5\x09\x26\xae\xd4\xcd\x5e\x21\x03\x23\xb0\xbb\x52\x8d\x29\xdf\x56\x2a\xb7\xb8\x96\x50\x41\x41\x51\x3a\x2a\xfc\xfa\x90\xe8\x80\x4e\x1b\xbe\x76\x2b\x04\x7b\x95\x8b\xf5\xab\x4f\xb9\x58\x2f\xed\x48\x4f\xa1\x41\x53\xd3\xa2\x26\xa9\xf6\xc0\xc9\xa1\x33\x25\xdb\xc9\x05\x0f\x90\x7f\xd6\x9a\x84\xe5\x04\x6d\x4a\xd6\xcc\x0b\xed\x99\xf6\x00\xc3\x82\x88\xeb\x6c\xdf\x8d\x9a\x7d\xf1\x63\xae\x0b\x09\x36\x00\x6a\xd5\x21\x50\xf7\xf7\x7f\xbc\x55\xfa\x6c\xc8\xf1\x76\x57\x85\xcc\xd8\xcd\x9e\x4b\x77\xe0\x75\x43\xab\xbf\x2c\xfa\x1b\x06\x50\x67\xfc\x51\x12\x4f\xcc\x28\xd7\xd3\xb0\x63\xad\x5d\x2a\xdf\x1c\x6b\x0d\x0c\x9c\x5f\x65\xd2\x7a\xfa\x12\xa7\xe6\x36\x09\x84\x90\x79\x9a\x86\x9a\x05\x3e\xd2\xb6\x90\x3e\xef\xd3\x58\xad\x69\x6a\x5d\x78\x15\x7b\x83\x58\x81\x62\x48\xb8\x15\x13\x4b\x6a\x42\x74\x80\x14\x0f\x3b\x5b\x71\x50\xd9\x74\x4a\x3e\x87\x56\xf3\x53\x5d\x22\xbf\xb1\xbc\xe3\x03\x91\x67\xfc\xec\xf2\x5e\xec\x47\xd7\xb5\x3d\xd2\x11\x50\x36\xc0\x62\xb6\xbb\x6c\xc4\xf3\xdc\xa2\xe8\xe9\xab\xcc\xdc\x95\xd6\x3c\xaa\xb8\x39\x3b\xea\xb9\x15\xd1\x7d\xa6\x12\x39\x7a\x2f\xaa\x50\x48\xc0\x64\x2f\x98\x2f\xcd\xdd\x0e\x07\x1d\x8e\x15\x7b\x12\x1b\xa2\x01\x5e\x61\xa1\xa1\x9e\xec\x8c\x33\xa7\x62\xda\x3d\xed\x9e\xda\x7f\x21\xfc\xd9\xf0\x0c\xbe\xd8\x96\xf8\x50\xed\x54\xe1\x2d\x8e\x9d\x0a\xd3\x26\x6f\x64\x57\x0d\xec\x6c\xce\x2a\x14\x81\xad\x5d\x0a\x2e\xc8\xdf\x3c\x43\xbf\x79\x86\xfe\xc6\x3d\x43\x5f\xd2\x2d\x04\xd8\x98\xe7\xf4\x09\xf5\x04\xc8\x4f\x58\x8e\xee\xab\xa7\x4a\x7a\xa3\x75\x3c\x09\xa4\x67\x83\x4c\xc2\x26\xd0\xdf\x12\x4d\x14\x20\xdc\x1d\xdd\x0b\xd9\x19\xa3\xb7\xf4\x40\x9d\xfa\xc4\x4f\x8b\x60\x69\x63\x37\x0a\xde\xee\x87\xb2\x78\xa8\x13\x91\xf2\xb6\x11\x6e\x98\x75\x02\xb6\xa7\x69\xf8\x19\x80\xc6\x54\xee\x88\xa3\x35\x65\xb9\x61\x30\x12\x69\x88\x10\x2c\x55\xa3\x5a\x1e\x8a\x89\xb3\x1f\x5e\x66\x4a\xa5\xad\xd0\xb8\x27\xed\xc0\x46\xa2\xcc\xd0\xce\x9b\xa3\x31\xaa\x43\xc0\x98\xed\x45\x9f\x74\xe1\x53\x34\x30\x1f\x03\xb4\x26\x60\x36\xc5\x25\xe4\x2a\xfa\xee\x98\xfa\x0c\x27\xee\x1c\x2e\x84\x11\x5b\x89\x88\x83\xce\xa2\x05\xef\x45\xdc\x65\x9f\x84\xa4\x43\x8d\x74\x10\xdd\xfc\x4e\x47\xd4\x12\xca\x5d\x26\x6d\xc2\x12\x63\x17\x57\xcd\x42\xb0\xd0\x72\xac\xb9\x45\x92\x58\x5a\xc3\x43\xb2\x9a\x96\xc3\x79\x19\xa5\x5c\x0f\x34\xac\x5b\xf7\x9d\x39\x15\x74\x01\xe5\x0c\xdf\x48\x7f\x82\x74\x9c\xdd\x40\xe4\xce\x42\xce\x9c\xac\xa4\xc7\x7e\x39\xe4\x1e\x86\x4b\x11\xb3\xd8\x18\x1a\xe4\x4a\xf4\x37\x97\x09\xd3\x65\xb4\x05\x36\xc8\xea\x3e\x15\xee\x5b\xcd\x15\x3b\x59\x48\x73\x21\x02\x57\xcb\x8e\x43\xde\xf9\xa3\x31\x56\x75\xf2\x5f\xc2\xc1\xb3\x88\x1c\x2b\x44\x64\xe1\xc5\x49\xc9\x56\xf4\x9a\x25\xe6\x44\x80\x85\xc7\x94\x94\x59\xcc\x0b\x31\x5d\x78\xb4\x4d\x82\x9e\x4e\x8b\xf2\x20\x93\x59\x87\x0d\x0b\x71\x8c\xb5\x9d\x36\x4d\xd6\x22\xda\x47\x0d\x9d\x9d\x7e\x1a\x86\xdf\xae\x6d\xdf\xd6\xb5\x0d\x59\x6c\x31\x67\x70\x4c\xd7\x52\x55\x6f\xfc\xeb\xa7\x75\xae\x60\x41\x4d\xf4\x88\x7e\xfe\x82\xd7\xce\x16\x1b\x78\x9c\x3d\x3f\xf8\x1e\xd4\x7f\x9c\xf9\x8b\xad\x3f\xac\x03\x8a\x81\x86\x59\x18\x06\x17\x8b\x70\xea\x18\x83\x76\x70\x58\xbf\x9b\xc5\xe5\x9b\x02\x27\x0d\xb9\xb8\x1a\x8b\xdb\xc1\x95\xae\xac\xa5\x2d\x05\x9e\x77\x3d\x16\x77\xc0\x9a\xce\x8b\x17\xda\xf5\x7a\x75\x07\xb4\xd8\xff\x77\x89\x2e\x7e\xae\x69\x72\x1e\x27\xea\xf9\x6c\xa6\xa9\xad\x2a\x56\x73\xa8\x45\x75\x53\xb5\x79\xd4\xda\xce\x39\xb8\x3c\x59\x15\x36\x53\xef\x31\xf7\xa0\x4f\xae\xbf\x3e\xe1\xd1\xf4\x98\xf3\x2c\x13\xb9\x3d\xc8\x1b\xb6\x16\x48\x9a\xc1\x57\x40\x93\x70\x2b\x50\x18\xb9\x76\xcb\x35\x5b\x49\xad\x68\x78\x0c\xba\x6e\xda\x3e\x72\x57\x65\x9a\x76\x8e\xdc\x61\xa5\xa4\xab\x8f\xef\xde\x2d\x7f\x9e\xbd\xfb\x78\x69\x9b\xdf\xaa\x3c\x14\x3c\xd6\xd9\x27\xae\x26\xd4\x27\x5e\xdb\xd0\x7c\x56\x58\x71\x66\xe5\x5b\x8d\x4e\xae\x32\x4d\xab\xaa\x54\x0b\xf9\x89\xca\x01\x98\x36\x2a\x6e\x9a\x7e\x63\xbd\x1d\x57\xfd\x3e\x3c\xf6\xc9\x14\xfe\x09\xdf\x3d\x63\xbe\x11\xaf\x40\x3b\x91\x34\xd9\xda\xfb\x95\xb2\x61\x4e\x58\x0e\x08\x06\xee\x5a\x0e\x4f\xad\xbb\x77\xdc\xf2\xf8\x28\x81\xf1\x5b\xc4\x56\x2e\xef\x49\x56\x07\xf6\xdd\xa7\x6a\x9c\xda\xed\xe5\x31\x5e\x69\xa0\xdc\x09\xaa\xa5\x81\x06\xb4\x17\x14\x5b\x48\xf4\x81\x9a\x3a\x15\xaa\xbb\x4e\x6c\x4e\xe6\x6d\xca\xe5\xa6\xe4\x1b\x63\xdd\xda\x8f\x2f\xe4\x2e\xd9\x6c\x91\x67\xa3\xcc\x3c\x3e\x99\x33\x09\x74\x2c\xb5\x29\x54\xc3\x27\x27\x72\x21\xa9\x4d\x72\xe3\x8b\x47\xac\xec\x1f\x6f\x5d\x73\x08\x94\x8e\x05\x91\xe0\x9b\x5c\x48\x1c\x5c\xe4\xff\xb0\x91\x10\xb8\xb1\xf0\xa2\x3e\x75\x39\xc4\x2e\x51\x14\xdd\xec\xe9\x1b\x88\xc9\x2c\xa4\x4b\xd1\x45\xcf\x11\xb5\x21\x10\x06\xc1\x2a\x1d\xde\x4f\xec\x60\xd8\x35\x41\x75\x6b\x9f\xf5\x27\x9f\x01\x66\xc1\x2d\x47\xa8\x3b\x37\xb7\xb1\x81\xde\x42\x1e\x6c\x1c\x5d\xbc\x0d\x90\x97\xdd\x5e\x1b\xdb\x2e\x7c\xa6\x13\xda\xaa\xca\x55\x3a\xa2\x4a\xf8\x7c\x6f\xa5\x70\x4b\xee\xaf\xd4\x80\xeb\xf0\x4d\x6d\x69\x99\x69\xda\xf7\xd9\x95\x52\x1d\xe3\xf2\x84\x01\xc5\x4a\xa5\xe8\x85\x43\x9d\x51\x46\xc5\x31\xf3\x65\x40\xb2\x62\xbd\x8b\xec\xee\xd3\x57\xa1\x34\xd1\x47\x55\xc7\xdb\x4f\x83\x6b\xe4\x2c\x04\x3a\xec\x46\xed\xb0\x74\xce\x55\x36\xd8\x8e\x6d\x92\xe2\x49\x56\x26\x39\xc1\xed\xc5\x2c\x1e\xd4\x30\x36\xf3\x7f\xe2\x26\xd1\xc4\x8f\xdc\x04\x2a\x19\x95\xb9\x36\xdb\x25\xed\x77\xb4\x6b\xab\x9c\xf1\x85\xb4\xa9\x6a\x76\x3b\x9e\x59\x70\x6e\xee\xfe\x8a\x09\xa0\x19\xf2\xd5\x83\xc5\x5a\x30\x25\x85\xdd\x0d\x17\xd2\x6a\x6b\x4f\x18\x5f\x69\x2b\x59\xcd\xe5\xde\xe9\x48\x27\x4e\x24\x90\x4b\x06\xa8\xe7\xc3\x7b\x5e\xcd\x0c\xa8\x9c\xf3\xff\x60\xfe\xef\x7f\xfe\xe1\xff\x07\x00\x00\xff\xff\x1b\xbe\x58\x42\x2a\xac\x04\x00") func adminSwaggerJsonBytes() ([]byte, error) { return bindataRead( @@ -93,7 +93,7 @@ func adminSwaggerJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "admin.swagger.json", size: 306216, mode: os.FileMode(420), modTime: time.Unix(1562572800, 0)} + info := bindataFileInfo{name: "admin.swagger.json", size: 306218, mode: os.FileMode(511), modTime: time.Unix(1562572800, 0)} a := &asset{bytes: bytes, info: info} return a, nil } diff --git a/flyteidl/gen/pb-java/datacatalog/Datacatalog.java b/flyteidl/gen/pb-java/datacatalog/Datacatalog.java index a10dd9b2a4..79e8c34c36 100644 --- a/flyteidl/gen/pb-java/datacatalog/Datacatalog.java +++ b/flyteidl/gen/pb-java/datacatalog/Datacatalog.java @@ -13335,7 +13335,7 @@ public interface GetOrExtendReservationRequestOrBuilder extends } /** *
-   * Try to acquire or extend an artifact reservation. If an active reservation exists, retreive that instance.
+   * Try to acquire or extend an artifact reservation. If an active reservation exists, retrieve that instance.
    * 
* * Protobuf type {@code datacatalog.GetOrExtendReservationRequest} @@ -13737,7 +13737,7 @@ protected Builder newBuilderForType( } /** *
-     * Try to acquire or extend an artifact reservation. If an active reservation exists, retreive that instance.
+     * Try to acquire or extend an artifact reservation. If an active reservation exists, retrieve that instance.
      * 
* * Protobuf type {@code datacatalog.GetOrExtendReservationRequest} diff --git a/flyteidl/gen/pb-java/flyteidl/admin/Agent.java b/flyteidl/gen/pb-java/flyteidl/admin/Agent.java index cefc777009..039e84d790 100644 --- a/flyteidl/gen/pb-java/flyteidl/admin/Agent.java +++ b/flyteidl/gen/pb-java/flyteidl/admin/Agent.java @@ -7333,6 +7333,1570 @@ public flyteidl.admin.Agent.DeleteTaskResponse getDefaultInstanceForType() { } + public interface DoTaskRequestOrBuilder extends + // @@protoc_insertion_point(interface_extends:flyteidl.admin.DoTaskRequest) + com.google.protobuf.MessageOrBuilder { + + /** + *
+     * The inputs required to start the execution. All required inputs must be
+     * included in this map. If not required and not provided, defaults apply.
+     * +optional
+     * 
+ * + * .flyteidl.core.LiteralMap inputs = 1; + */ + boolean hasInputs(); + /** + *
+     * The inputs required to start the execution. All required inputs must be
+     * included in this map. If not required and not provided, defaults apply.
+     * +optional
+     * 
+ * + * .flyteidl.core.LiteralMap inputs = 1; + */ + flyteidl.core.Literals.LiteralMap getInputs(); + /** + *
+     * The inputs required to start the execution. All required inputs must be
+     * included in this map. If not required and not provided, defaults apply.
+     * +optional
+     * 
+ * + * .flyteidl.core.LiteralMap inputs = 1; + */ + flyteidl.core.Literals.LiteralMapOrBuilder getInputsOrBuilder(); + + /** + *
+     * Template of the task that encapsulates all the metadata of the task.
+     * 
+ * + * .flyteidl.core.TaskTemplate template = 2; + */ + boolean hasTemplate(); + /** + *
+     * Template of the task that encapsulates all the metadata of the task.
+     * 
+ * + * .flyteidl.core.TaskTemplate template = 2; + */ + flyteidl.core.Tasks.TaskTemplate getTemplate(); + /** + *
+     * Template of the task that encapsulates all the metadata of the task.
+     * 
+ * + * .flyteidl.core.TaskTemplate template = 2; + */ + flyteidl.core.Tasks.TaskTemplateOrBuilder getTemplateOrBuilder(); + } + /** + *
+   * A message used to do a task
+   * 
+ * + * Protobuf type {@code flyteidl.admin.DoTaskRequest} + */ + public static final class DoTaskRequest extends + com.google.protobuf.GeneratedMessageV3 implements + // @@protoc_insertion_point(message_implements:flyteidl.admin.DoTaskRequest) + DoTaskRequestOrBuilder { + private static final long serialVersionUID = 0L; + // Use DoTaskRequest.newBuilder() to construct. + private DoTaskRequest(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + private DoTaskRequest() { + } + + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet + getUnknownFields() { + return this.unknownFields; + } + private DoTaskRequest( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + this(); + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + int mutable_bitField0_ = 0; + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder(); + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: { + flyteidl.core.Literals.LiteralMap.Builder subBuilder = null; + if (inputs_ != null) { + subBuilder = inputs_.toBuilder(); + } + inputs_ = input.readMessage(flyteidl.core.Literals.LiteralMap.parser(), extensionRegistry); + if (subBuilder != null) { + subBuilder.mergeFrom(inputs_); + inputs_ = subBuilder.buildPartial(); + } + + break; + } + case 18: { + flyteidl.core.Tasks.TaskTemplate.Builder subBuilder = null; + if (template_ != null) { + subBuilder = template_.toBuilder(); + } + template_ = input.readMessage(flyteidl.core.Tasks.TaskTemplate.parser(), extensionRegistry); + if (subBuilder != null) { + subBuilder.mergeFrom(template_); + template_ = subBuilder.buildPartial(); + } + + break; + } + default: { + if (!parseUnknownField( + input, unknownFields, extensionRegistry, tag)) { + done = true; + } + break; + } + } + } + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(this); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException( + e).setUnfinishedMessage(this); + } finally { + this.unknownFields = unknownFields.build(); + makeExtensionsImmutable(); + } + } + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return flyteidl.admin.Agent.internal_static_flyteidl_admin_DoTaskRequest_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return flyteidl.admin.Agent.internal_static_flyteidl_admin_DoTaskRequest_fieldAccessorTable + .ensureFieldAccessorsInitialized( + flyteidl.admin.Agent.DoTaskRequest.class, flyteidl.admin.Agent.DoTaskRequest.Builder.class); + } + + public static final int INPUTS_FIELD_NUMBER = 1; + private flyteidl.core.Literals.LiteralMap inputs_; + /** + *
+     * The inputs required to start the execution. All required inputs must be
+     * included in this map. If not required and not provided, defaults apply.
+     * +optional
+     * 
+ * + * .flyteidl.core.LiteralMap inputs = 1; + */ + public boolean hasInputs() { + return inputs_ != null; + } + /** + *
+     * The inputs required to start the execution. All required inputs must be
+     * included in this map. If not required and not provided, defaults apply.
+     * +optional
+     * 
+ * + * .flyteidl.core.LiteralMap inputs = 1; + */ + public flyteidl.core.Literals.LiteralMap getInputs() { + return inputs_ == null ? flyteidl.core.Literals.LiteralMap.getDefaultInstance() : inputs_; + } + /** + *
+     * The inputs required to start the execution. All required inputs must be
+     * included in this map. If not required and not provided, defaults apply.
+     * +optional
+     * 
+ * + * .flyteidl.core.LiteralMap inputs = 1; + */ + public flyteidl.core.Literals.LiteralMapOrBuilder getInputsOrBuilder() { + return getInputs(); + } + + public static final int TEMPLATE_FIELD_NUMBER = 2; + private flyteidl.core.Tasks.TaskTemplate template_; + /** + *
+     * Template of the task that encapsulates all the metadata of the task.
+     * 
+ * + * .flyteidl.core.TaskTemplate template = 2; + */ + public boolean hasTemplate() { + return template_ != null; + } + /** + *
+     * Template of the task that encapsulates all the metadata of the task.
+     * 
+ * + * .flyteidl.core.TaskTemplate template = 2; + */ + public flyteidl.core.Tasks.TaskTemplate getTemplate() { + return template_ == null ? flyteidl.core.Tasks.TaskTemplate.getDefaultInstance() : template_; + } + /** + *
+     * Template of the task that encapsulates all the metadata of the task.
+     * 
+ * + * .flyteidl.core.TaskTemplate template = 2; + */ + public flyteidl.core.Tasks.TaskTemplateOrBuilder getTemplateOrBuilder() { + return getTemplate(); + } + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + if (inputs_ != null) { + output.writeMessage(1, getInputs()); + } + if (template_ != null) { + output.writeMessage(2, getTemplate()); + } + unknownFields.writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (inputs_ != null) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(1, getInputs()); + } + if (template_ != null) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(2, getTemplate()); + } + size += unknownFields.getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof flyteidl.admin.Agent.DoTaskRequest)) { + return super.equals(obj); + } + flyteidl.admin.Agent.DoTaskRequest other = (flyteidl.admin.Agent.DoTaskRequest) obj; + + if (hasInputs() != other.hasInputs()) return false; + if (hasInputs()) { + if (!getInputs() + .equals(other.getInputs())) return false; + } + if (hasTemplate() != other.hasTemplate()) return false; + if (hasTemplate()) { + if (!getTemplate() + .equals(other.getTemplate())) return false; + } + if (!unknownFields.equals(other.unknownFields)) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + if (hasInputs()) { + hash = (37 * hash) + INPUTS_FIELD_NUMBER; + hash = (53 * hash) + getInputs().hashCode(); + } + if (hasTemplate()) { + hash = (37 * hash) + TEMPLATE_FIELD_NUMBER; + hash = (53 * hash) + getTemplate().hashCode(); + } + hash = (29 * hash) + unknownFields.hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static flyteidl.admin.Agent.DoTaskRequest parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static flyteidl.admin.Agent.DoTaskRequest parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static flyteidl.admin.Agent.DoTaskRequest parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static flyteidl.admin.Agent.DoTaskRequest parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static flyteidl.admin.Agent.DoTaskRequest parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static flyteidl.admin.Agent.DoTaskRequest parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static flyteidl.admin.Agent.DoTaskRequest parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static flyteidl.admin.Agent.DoTaskRequest parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + public static flyteidl.admin.Agent.DoTaskRequest parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input); + } + public static flyteidl.admin.Agent.DoTaskRequest parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static flyteidl.admin.Agent.DoTaskRequest parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static flyteidl.admin.Agent.DoTaskRequest parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(flyteidl.admin.Agent.DoTaskRequest prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + *
+     * A message used to do a task
+     * 
+ * + * Protobuf type {@code flyteidl.admin.DoTaskRequest} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageV3.Builder implements + // @@protoc_insertion_point(builder_implements:flyteidl.admin.DoTaskRequest) + flyteidl.admin.Agent.DoTaskRequestOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return flyteidl.admin.Agent.internal_static_flyteidl_admin_DoTaskRequest_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return flyteidl.admin.Agent.internal_static_flyteidl_admin_DoTaskRequest_fieldAccessorTable + .ensureFieldAccessorsInitialized( + flyteidl.admin.Agent.DoTaskRequest.class, flyteidl.admin.Agent.DoTaskRequest.Builder.class); + } + + // Construct using flyteidl.admin.Agent.DoTaskRequest.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessageV3 + .alwaysUseFieldBuilders) { + } + } + @java.lang.Override + public Builder clear() { + super.clear(); + if (inputsBuilder_ == null) { + inputs_ = null; + } else { + inputs_ = null; + inputsBuilder_ = null; + } + if (templateBuilder_ == null) { + template_ = null; + } else { + template_ = null; + templateBuilder_ = null; + } + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return flyteidl.admin.Agent.internal_static_flyteidl_admin_DoTaskRequest_descriptor; + } + + @java.lang.Override + public flyteidl.admin.Agent.DoTaskRequest getDefaultInstanceForType() { + return flyteidl.admin.Agent.DoTaskRequest.getDefaultInstance(); + } + + @java.lang.Override + public flyteidl.admin.Agent.DoTaskRequest build() { + flyteidl.admin.Agent.DoTaskRequest result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public flyteidl.admin.Agent.DoTaskRequest buildPartial() { + flyteidl.admin.Agent.DoTaskRequest result = new flyteidl.admin.Agent.DoTaskRequest(this); + if (inputsBuilder_ == null) { + result.inputs_ = inputs_; + } else { + result.inputs_ = inputsBuilder_.build(); + } + if (templateBuilder_ == null) { + result.template_ = template_; + } else { + result.template_ = templateBuilder_.build(); + } + onBuilt(); + return result; + } + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.setField(field, value); + } + @java.lang.Override + public Builder clearField( + com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + @java.lang.Override + public Builder clearOneof( + com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + int index, java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.addRepeatedField(field, value); + } + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof flyteidl.admin.Agent.DoTaskRequest) { + return mergeFrom((flyteidl.admin.Agent.DoTaskRequest)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(flyteidl.admin.Agent.DoTaskRequest other) { + if (other == flyteidl.admin.Agent.DoTaskRequest.getDefaultInstance()) return this; + if (other.hasInputs()) { + mergeInputs(other.getInputs()); + } + if (other.hasTemplate()) { + mergeTemplate(other.getTemplate()); + } + this.mergeUnknownFields(other.unknownFields); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + flyteidl.admin.Agent.DoTaskRequest parsedMessage = null; + try { + parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + parsedMessage = (flyteidl.admin.Agent.DoTaskRequest) e.getUnfinishedMessage(); + throw e.unwrapIOException(); + } finally { + if (parsedMessage != null) { + mergeFrom(parsedMessage); + } + } + return this; + } + + private flyteidl.core.Literals.LiteralMap inputs_; + private com.google.protobuf.SingleFieldBuilderV3< + flyteidl.core.Literals.LiteralMap, flyteidl.core.Literals.LiteralMap.Builder, flyteidl.core.Literals.LiteralMapOrBuilder> inputsBuilder_; + /** + *
+       * The inputs required to start the execution. All required inputs must be
+       * included in this map. If not required and not provided, defaults apply.
+       * +optional
+       * 
+ * + * .flyteidl.core.LiteralMap inputs = 1; + */ + public boolean hasInputs() { + return inputsBuilder_ != null || inputs_ != null; + } + /** + *
+       * The inputs required to start the execution. All required inputs must be
+       * included in this map. If not required and not provided, defaults apply.
+       * +optional
+       * 
+ * + * .flyteidl.core.LiteralMap inputs = 1; + */ + public flyteidl.core.Literals.LiteralMap getInputs() { + if (inputsBuilder_ == null) { + return inputs_ == null ? flyteidl.core.Literals.LiteralMap.getDefaultInstance() : inputs_; + } else { + return inputsBuilder_.getMessage(); + } + } + /** + *
+       * The inputs required to start the execution. All required inputs must be
+       * included in this map. If not required and not provided, defaults apply.
+       * +optional
+       * 
+ * + * .flyteidl.core.LiteralMap inputs = 1; + */ + public Builder setInputs(flyteidl.core.Literals.LiteralMap value) { + if (inputsBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + inputs_ = value; + onChanged(); + } else { + inputsBuilder_.setMessage(value); + } + + return this; + } + /** + *
+       * The inputs required to start the execution. All required inputs must be
+       * included in this map. If not required and not provided, defaults apply.
+       * +optional
+       * 
+ * + * .flyteidl.core.LiteralMap inputs = 1; + */ + public Builder setInputs( + flyteidl.core.Literals.LiteralMap.Builder builderForValue) { + if (inputsBuilder_ == null) { + inputs_ = builderForValue.build(); + onChanged(); + } else { + inputsBuilder_.setMessage(builderForValue.build()); + } + + return this; + } + /** + *
+       * The inputs required to start the execution. All required inputs must be
+       * included in this map. If not required and not provided, defaults apply.
+       * +optional
+       * 
+ * + * .flyteidl.core.LiteralMap inputs = 1; + */ + public Builder mergeInputs(flyteidl.core.Literals.LiteralMap value) { + if (inputsBuilder_ == null) { + if (inputs_ != null) { + inputs_ = + flyteidl.core.Literals.LiteralMap.newBuilder(inputs_).mergeFrom(value).buildPartial(); + } else { + inputs_ = value; + } + onChanged(); + } else { + inputsBuilder_.mergeFrom(value); + } + + return this; + } + /** + *
+       * The inputs required to start the execution. All required inputs must be
+       * included in this map. If not required and not provided, defaults apply.
+       * +optional
+       * 
+ * + * .flyteidl.core.LiteralMap inputs = 1; + */ + public Builder clearInputs() { + if (inputsBuilder_ == null) { + inputs_ = null; + onChanged(); + } else { + inputs_ = null; + inputsBuilder_ = null; + } + + return this; + } + /** + *
+       * The inputs required to start the execution. All required inputs must be
+       * included in this map. If not required and not provided, defaults apply.
+       * +optional
+       * 
+ * + * .flyteidl.core.LiteralMap inputs = 1; + */ + public flyteidl.core.Literals.LiteralMap.Builder getInputsBuilder() { + + onChanged(); + return getInputsFieldBuilder().getBuilder(); + } + /** + *
+       * The inputs required to start the execution. All required inputs must be
+       * included in this map. If not required and not provided, defaults apply.
+       * +optional
+       * 
+ * + * .flyteidl.core.LiteralMap inputs = 1; + */ + public flyteidl.core.Literals.LiteralMapOrBuilder getInputsOrBuilder() { + if (inputsBuilder_ != null) { + return inputsBuilder_.getMessageOrBuilder(); + } else { + return inputs_ == null ? + flyteidl.core.Literals.LiteralMap.getDefaultInstance() : inputs_; + } + } + /** + *
+       * The inputs required to start the execution. All required inputs must be
+       * included in this map. If not required and not provided, defaults apply.
+       * +optional
+       * 
+ * + * .flyteidl.core.LiteralMap inputs = 1; + */ + private com.google.protobuf.SingleFieldBuilderV3< + flyteidl.core.Literals.LiteralMap, flyteidl.core.Literals.LiteralMap.Builder, flyteidl.core.Literals.LiteralMapOrBuilder> + getInputsFieldBuilder() { + if (inputsBuilder_ == null) { + inputsBuilder_ = new com.google.protobuf.SingleFieldBuilderV3< + flyteidl.core.Literals.LiteralMap, flyteidl.core.Literals.LiteralMap.Builder, flyteidl.core.Literals.LiteralMapOrBuilder>( + getInputs(), + getParentForChildren(), + isClean()); + inputs_ = null; + } + return inputsBuilder_; + } + + private flyteidl.core.Tasks.TaskTemplate template_; + private com.google.protobuf.SingleFieldBuilderV3< + flyteidl.core.Tasks.TaskTemplate, flyteidl.core.Tasks.TaskTemplate.Builder, flyteidl.core.Tasks.TaskTemplateOrBuilder> templateBuilder_; + /** + *
+       * Template of the task that encapsulates all the metadata of the task.
+       * 
+ * + * .flyteidl.core.TaskTemplate template = 2; + */ + public boolean hasTemplate() { + return templateBuilder_ != null || template_ != null; + } + /** + *
+       * Template of the task that encapsulates all the metadata of the task.
+       * 
+ * + * .flyteidl.core.TaskTemplate template = 2; + */ + public flyteidl.core.Tasks.TaskTemplate getTemplate() { + if (templateBuilder_ == null) { + return template_ == null ? flyteidl.core.Tasks.TaskTemplate.getDefaultInstance() : template_; + } else { + return templateBuilder_.getMessage(); + } + } + /** + *
+       * Template of the task that encapsulates all the metadata of the task.
+       * 
+ * + * .flyteidl.core.TaskTemplate template = 2; + */ + public Builder setTemplate(flyteidl.core.Tasks.TaskTemplate value) { + if (templateBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + template_ = value; + onChanged(); + } else { + templateBuilder_.setMessage(value); + } + + return this; + } + /** + *
+       * Template of the task that encapsulates all the metadata of the task.
+       * 
+ * + * .flyteidl.core.TaskTemplate template = 2; + */ + public Builder setTemplate( + flyteidl.core.Tasks.TaskTemplate.Builder builderForValue) { + if (templateBuilder_ == null) { + template_ = builderForValue.build(); + onChanged(); + } else { + templateBuilder_.setMessage(builderForValue.build()); + } + + return this; + } + /** + *
+       * Template of the task that encapsulates all the metadata of the task.
+       * 
+ * + * .flyteidl.core.TaskTemplate template = 2; + */ + public Builder mergeTemplate(flyteidl.core.Tasks.TaskTemplate value) { + if (templateBuilder_ == null) { + if (template_ != null) { + template_ = + flyteidl.core.Tasks.TaskTemplate.newBuilder(template_).mergeFrom(value).buildPartial(); + } else { + template_ = value; + } + onChanged(); + } else { + templateBuilder_.mergeFrom(value); + } + + return this; + } + /** + *
+       * Template of the task that encapsulates all the metadata of the task.
+       * 
+ * + * .flyteidl.core.TaskTemplate template = 2; + */ + public Builder clearTemplate() { + if (templateBuilder_ == null) { + template_ = null; + onChanged(); + } else { + template_ = null; + templateBuilder_ = null; + } + + return this; + } + /** + *
+       * Template of the task that encapsulates all the metadata of the task.
+       * 
+ * + * .flyteidl.core.TaskTemplate template = 2; + */ + public flyteidl.core.Tasks.TaskTemplate.Builder getTemplateBuilder() { + + onChanged(); + return getTemplateFieldBuilder().getBuilder(); + } + /** + *
+       * Template of the task that encapsulates all the metadata of the task.
+       * 
+ * + * .flyteidl.core.TaskTemplate template = 2; + */ + public flyteidl.core.Tasks.TaskTemplateOrBuilder getTemplateOrBuilder() { + if (templateBuilder_ != null) { + return templateBuilder_.getMessageOrBuilder(); + } else { + return template_ == null ? + flyteidl.core.Tasks.TaskTemplate.getDefaultInstance() : template_; + } + } + /** + *
+       * Template of the task that encapsulates all the metadata of the task.
+       * 
+ * + * .flyteidl.core.TaskTemplate template = 2; + */ + private com.google.protobuf.SingleFieldBuilderV3< + flyteidl.core.Tasks.TaskTemplate, flyteidl.core.Tasks.TaskTemplate.Builder, flyteidl.core.Tasks.TaskTemplateOrBuilder> + getTemplateFieldBuilder() { + if (templateBuilder_ == null) { + templateBuilder_ = new com.google.protobuf.SingleFieldBuilderV3< + flyteidl.core.Tasks.TaskTemplate, flyteidl.core.Tasks.TaskTemplate.Builder, flyteidl.core.Tasks.TaskTemplateOrBuilder>( + getTemplate(), + getParentForChildren(), + isClean()); + template_ = null; + } + return templateBuilder_; + } + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + + // @@protoc_insertion_point(builder_scope:flyteidl.admin.DoTaskRequest) + } + + // @@protoc_insertion_point(class_scope:flyteidl.admin.DoTaskRequest) + private static final flyteidl.admin.Agent.DoTaskRequest DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new flyteidl.admin.Agent.DoTaskRequest(); + } + + public static flyteidl.admin.Agent.DoTaskRequest getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public DoTaskRequest parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return new DoTaskRequest(input, extensionRegistry); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public flyteidl.admin.Agent.DoTaskRequest getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + + public interface DoTaskResponseOrBuilder extends + // @@protoc_insertion_point(interface_extends:flyteidl.admin.DoTaskResponse) + com.google.protobuf.MessageOrBuilder { + + /** + * .flyteidl.admin.Resource resource = 1; + */ + boolean hasResource(); + /** + * .flyteidl.admin.Resource resource = 1; + */ + flyteidl.admin.Agent.Resource getResource(); + /** + * .flyteidl.admin.Resource resource = 1; + */ + flyteidl.admin.Agent.ResourceOrBuilder getResourceOrBuilder(); + } + /** + * Protobuf type {@code flyteidl.admin.DoTaskResponse} + */ + public static final class DoTaskResponse extends + com.google.protobuf.GeneratedMessageV3 implements + // @@protoc_insertion_point(message_implements:flyteidl.admin.DoTaskResponse) + DoTaskResponseOrBuilder { + private static final long serialVersionUID = 0L; + // Use DoTaskResponse.newBuilder() to construct. + private DoTaskResponse(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + private DoTaskResponse() { + } + + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet + getUnknownFields() { + return this.unknownFields; + } + private DoTaskResponse( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + this(); + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + int mutable_bitField0_ = 0; + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder(); + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: { + flyteidl.admin.Agent.Resource.Builder subBuilder = null; + if (resource_ != null) { + subBuilder = resource_.toBuilder(); + } + resource_ = input.readMessage(flyteidl.admin.Agent.Resource.parser(), extensionRegistry); + if (subBuilder != null) { + subBuilder.mergeFrom(resource_); + resource_ = subBuilder.buildPartial(); + } + + break; + } + default: { + if (!parseUnknownField( + input, unknownFields, extensionRegistry, tag)) { + done = true; + } + break; + } + } + } + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(this); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException( + e).setUnfinishedMessage(this); + } finally { + this.unknownFields = unknownFields.build(); + makeExtensionsImmutable(); + } + } + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return flyteidl.admin.Agent.internal_static_flyteidl_admin_DoTaskResponse_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return flyteidl.admin.Agent.internal_static_flyteidl_admin_DoTaskResponse_fieldAccessorTable + .ensureFieldAccessorsInitialized( + flyteidl.admin.Agent.DoTaskResponse.class, flyteidl.admin.Agent.DoTaskResponse.Builder.class); + } + + public static final int RESOURCE_FIELD_NUMBER = 1; + private flyteidl.admin.Agent.Resource resource_; + /** + * .flyteidl.admin.Resource resource = 1; + */ + public boolean hasResource() { + return resource_ != null; + } + /** + * .flyteidl.admin.Resource resource = 1; + */ + public flyteidl.admin.Agent.Resource getResource() { + return resource_ == null ? flyteidl.admin.Agent.Resource.getDefaultInstance() : resource_; + } + /** + * .flyteidl.admin.Resource resource = 1; + */ + public flyteidl.admin.Agent.ResourceOrBuilder getResourceOrBuilder() { + return getResource(); + } + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + if (resource_ != null) { + output.writeMessage(1, getResource()); + } + unknownFields.writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (resource_ != null) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(1, getResource()); + } + size += unknownFields.getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof flyteidl.admin.Agent.DoTaskResponse)) { + return super.equals(obj); + } + flyteidl.admin.Agent.DoTaskResponse other = (flyteidl.admin.Agent.DoTaskResponse) obj; + + if (hasResource() != other.hasResource()) return false; + if (hasResource()) { + if (!getResource() + .equals(other.getResource())) return false; + } + if (!unknownFields.equals(other.unknownFields)) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + if (hasResource()) { + hash = (37 * hash) + RESOURCE_FIELD_NUMBER; + hash = (53 * hash) + getResource().hashCode(); + } + hash = (29 * hash) + unknownFields.hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static flyteidl.admin.Agent.DoTaskResponse parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static flyteidl.admin.Agent.DoTaskResponse parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static flyteidl.admin.Agent.DoTaskResponse parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static flyteidl.admin.Agent.DoTaskResponse parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static flyteidl.admin.Agent.DoTaskResponse parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static flyteidl.admin.Agent.DoTaskResponse parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static flyteidl.admin.Agent.DoTaskResponse parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static flyteidl.admin.Agent.DoTaskResponse parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + public static flyteidl.admin.Agent.DoTaskResponse parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input); + } + public static flyteidl.admin.Agent.DoTaskResponse parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static flyteidl.admin.Agent.DoTaskResponse parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static flyteidl.admin.Agent.DoTaskResponse parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(flyteidl.admin.Agent.DoTaskResponse prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + * Protobuf type {@code flyteidl.admin.DoTaskResponse} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageV3.Builder implements + // @@protoc_insertion_point(builder_implements:flyteidl.admin.DoTaskResponse) + flyteidl.admin.Agent.DoTaskResponseOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return flyteidl.admin.Agent.internal_static_flyteidl_admin_DoTaskResponse_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return flyteidl.admin.Agent.internal_static_flyteidl_admin_DoTaskResponse_fieldAccessorTable + .ensureFieldAccessorsInitialized( + flyteidl.admin.Agent.DoTaskResponse.class, flyteidl.admin.Agent.DoTaskResponse.Builder.class); + } + + // Construct using flyteidl.admin.Agent.DoTaskResponse.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessageV3 + .alwaysUseFieldBuilders) { + } + } + @java.lang.Override + public Builder clear() { + super.clear(); + if (resourceBuilder_ == null) { + resource_ = null; + } else { + resource_ = null; + resourceBuilder_ = null; + } + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return flyteidl.admin.Agent.internal_static_flyteidl_admin_DoTaskResponse_descriptor; + } + + @java.lang.Override + public flyteidl.admin.Agent.DoTaskResponse getDefaultInstanceForType() { + return flyteidl.admin.Agent.DoTaskResponse.getDefaultInstance(); + } + + @java.lang.Override + public flyteidl.admin.Agent.DoTaskResponse build() { + flyteidl.admin.Agent.DoTaskResponse result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public flyteidl.admin.Agent.DoTaskResponse buildPartial() { + flyteidl.admin.Agent.DoTaskResponse result = new flyteidl.admin.Agent.DoTaskResponse(this); + if (resourceBuilder_ == null) { + result.resource_ = resource_; + } else { + result.resource_ = resourceBuilder_.build(); + } + onBuilt(); + return result; + } + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.setField(field, value); + } + @java.lang.Override + public Builder clearField( + com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + @java.lang.Override + public Builder clearOneof( + com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + int index, java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.addRepeatedField(field, value); + } + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof flyteidl.admin.Agent.DoTaskResponse) { + return mergeFrom((flyteidl.admin.Agent.DoTaskResponse)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(flyteidl.admin.Agent.DoTaskResponse other) { + if (other == flyteidl.admin.Agent.DoTaskResponse.getDefaultInstance()) return this; + if (other.hasResource()) { + mergeResource(other.getResource()); + } + this.mergeUnknownFields(other.unknownFields); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + flyteidl.admin.Agent.DoTaskResponse parsedMessage = null; + try { + parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + parsedMessage = (flyteidl.admin.Agent.DoTaskResponse) e.getUnfinishedMessage(); + throw e.unwrapIOException(); + } finally { + if (parsedMessage != null) { + mergeFrom(parsedMessage); + } + } + return this; + } + + private flyteidl.admin.Agent.Resource resource_; + private com.google.protobuf.SingleFieldBuilderV3< + flyteidl.admin.Agent.Resource, flyteidl.admin.Agent.Resource.Builder, flyteidl.admin.Agent.ResourceOrBuilder> resourceBuilder_; + /** + * .flyteidl.admin.Resource resource = 1; + */ + public boolean hasResource() { + return resourceBuilder_ != null || resource_ != null; + } + /** + * .flyteidl.admin.Resource resource = 1; + */ + public flyteidl.admin.Agent.Resource getResource() { + if (resourceBuilder_ == null) { + return resource_ == null ? flyteidl.admin.Agent.Resource.getDefaultInstance() : resource_; + } else { + return resourceBuilder_.getMessage(); + } + } + /** + * .flyteidl.admin.Resource resource = 1; + */ + public Builder setResource(flyteidl.admin.Agent.Resource value) { + if (resourceBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + resource_ = value; + onChanged(); + } else { + resourceBuilder_.setMessage(value); + } + + return this; + } + /** + * .flyteidl.admin.Resource resource = 1; + */ + public Builder setResource( + flyteidl.admin.Agent.Resource.Builder builderForValue) { + if (resourceBuilder_ == null) { + resource_ = builderForValue.build(); + onChanged(); + } else { + resourceBuilder_.setMessage(builderForValue.build()); + } + + return this; + } + /** + * .flyteidl.admin.Resource resource = 1; + */ + public Builder mergeResource(flyteidl.admin.Agent.Resource value) { + if (resourceBuilder_ == null) { + if (resource_ != null) { + resource_ = + flyteidl.admin.Agent.Resource.newBuilder(resource_).mergeFrom(value).buildPartial(); + } else { + resource_ = value; + } + onChanged(); + } else { + resourceBuilder_.mergeFrom(value); + } + + return this; + } + /** + * .flyteidl.admin.Resource resource = 1; + */ + public Builder clearResource() { + if (resourceBuilder_ == null) { + resource_ = null; + onChanged(); + } else { + resource_ = null; + resourceBuilder_ = null; + } + + return this; + } + /** + * .flyteidl.admin.Resource resource = 1; + */ + public flyteidl.admin.Agent.Resource.Builder getResourceBuilder() { + + onChanged(); + return getResourceFieldBuilder().getBuilder(); + } + /** + * .flyteidl.admin.Resource resource = 1; + */ + public flyteidl.admin.Agent.ResourceOrBuilder getResourceOrBuilder() { + if (resourceBuilder_ != null) { + return resourceBuilder_.getMessageOrBuilder(); + } else { + return resource_ == null ? + flyteidl.admin.Agent.Resource.getDefaultInstance() : resource_; + } + } + /** + * .flyteidl.admin.Resource resource = 1; + */ + private com.google.protobuf.SingleFieldBuilderV3< + flyteidl.admin.Agent.Resource, flyteidl.admin.Agent.Resource.Builder, flyteidl.admin.Agent.ResourceOrBuilder> + getResourceFieldBuilder() { + if (resourceBuilder_ == null) { + resourceBuilder_ = new com.google.protobuf.SingleFieldBuilderV3< + flyteidl.admin.Agent.Resource, flyteidl.admin.Agent.Resource.Builder, flyteidl.admin.Agent.ResourceOrBuilder>( + getResource(), + getParentForChildren(), + isClean()); + resource_ = null; + } + return resourceBuilder_; + } + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + + // @@protoc_insertion_point(builder_scope:flyteidl.admin.DoTaskResponse) + } + + // @@protoc_insertion_point(class_scope:flyteidl.admin.DoTaskResponse) + private static final flyteidl.admin.Agent.DoTaskResponse DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new flyteidl.admin.Agent.DoTaskResponse(); + } + + public static flyteidl.admin.Agent.DoTaskResponse getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public DoTaskResponse parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return new DoTaskResponse(input, extensionRegistry); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public flyteidl.admin.Agent.DoTaskResponse getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + private static final com.google.protobuf.Descriptors.Descriptor internal_static_flyteidl_admin_TaskExecutionMetadata_descriptor; private static final @@ -7388,6 +8952,16 @@ public flyteidl.admin.Agent.DeleteTaskResponse getDefaultInstanceForType() { private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_flyteidl_admin_DeleteTaskResponse_fieldAccessorTable; + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_flyteidl_admin_DoTaskRequest_descriptor; + private static final + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_flyteidl_admin_DoTaskRequest_fieldAccessorTable; + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_flyteidl_admin_DoTaskResponse_descriptor; + private static final + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_flyteidl_admin_DoTaskResponse_fieldAccessorTable; public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { @@ -7428,11 +9002,15 @@ public flyteidl.admin.Agent.DeleteTaskResponse getDefaultInstanceForType() { "dmin.State\022*\n\007outputs\030\002 \001(\0132\031.flyteidl.c" + "ore.LiteralMap\"=\n\021DeleteTaskRequest\022\021\n\tt" + "ask_type\030\001 \001(\t\022\025\n\rresource_meta\030\002 \001(\014\"\024\n" + - "\022DeleteTaskResponse*^\n\005State\022\025\n\021RETRYABL" + - "E_FAILURE\020\000\022\025\n\021PERMANENT_FAILURE\020\001\022\013\n\007PE" + - "NDING\020\002\022\013\n\007RUNNING\020\003\022\r\n\tSUCCEEDED\020\004B7Z5g" + - "ithub.com/flyteorg/flyteidl/gen/pb-go/fl" + - "yteidl/adminb\006proto3" + "\022DeleteTaskResponse\"i\n\rDoTaskRequest\022)\n\006" + + "inputs\030\001 \001(\0132\031.flyteidl.core.LiteralMap\022" + + "-\n\010template\030\002 \001(\0132\033.flyteidl.core.TaskTe" + + "mplate\"<\n\016DoTaskResponse\022*\n\010resource\030\001 \001" + + "(\0132\030.flyteidl.admin.Resource*^\n\005State\022\025\n" + + "\021RETRYABLE_FAILURE\020\000\022\025\n\021PERMANENT_FAILUR" + + "E\020\001\022\013\n\007PENDING\020\002\022\013\n\007RUNNING\020\003\022\r\n\tSUCCEED" + + "ED\020\004B7Z5github.com/flyteorg/flyteidl/gen" + + "/pb-go/flyteidl/adminb\006proto3" }; com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner = new com.google.protobuf.Descriptors.FileDescriptor. InternalDescriptorAssigner() { @@ -7516,6 +9094,18 @@ public com.google.protobuf.ExtensionRegistry assignDescriptors( com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( internal_static_flyteidl_admin_DeleteTaskResponse_descriptor, new java.lang.String[] { }); + internal_static_flyteidl_admin_DoTaskRequest_descriptor = + getDescriptor().getMessageTypes().get(8); + internal_static_flyteidl_admin_DoTaskRequest_fieldAccessorTable = new + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + internal_static_flyteidl_admin_DoTaskRequest_descriptor, + new java.lang.String[] { "Inputs", "Template", }); + internal_static_flyteidl_admin_DoTaskResponse_descriptor = + getDescriptor().getMessageTypes().get(9); + internal_static_flyteidl_admin_DoTaskResponse_fieldAccessorTable = new + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + internal_static_flyteidl_admin_DoTaskResponse_descriptor, + new java.lang.String[] { "Resource", }); flyteidl.core.Literals.getDescriptor(); flyteidl.core.Tasks.getDescriptor(); flyteidl.core.Interface.getDescriptor(); diff --git a/flyteidl/gen/pb-java/flyteidl/admin/LaunchPlanOuterClass.java b/flyteidl/gen/pb-java/flyteidl/admin/LaunchPlanOuterClass.java index 826aa2eab1..a27a6fa0ff 100644 --- a/flyteidl/gen/pb-java/flyteidl/admin/LaunchPlanOuterClass.java +++ b/flyteidl/gen/pb-java/flyteidl/admin/LaunchPlanOuterClass.java @@ -4462,7 +4462,7 @@ public interface LaunchPlanSpecOrBuilder extends /** *
      * Input values to be passed for the execution.
-     * These can be overriden when an execution is created with this launch plan.
+     * These can be overridden when an execution is created with this launch plan.
      * 
* * .flyteidl.core.ParameterMap default_inputs = 3; @@ -4471,7 +4471,7 @@ public interface LaunchPlanSpecOrBuilder extends /** *
      * Input values to be passed for the execution.
-     * These can be overriden when an execution is created with this launch plan.
+     * These can be overridden when an execution is created with this launch plan.
      * 
* * .flyteidl.core.ParameterMap default_inputs = 3; @@ -4480,7 +4480,7 @@ public interface LaunchPlanSpecOrBuilder extends /** *
      * Input values to be passed for the execution.
-     * These can be overriden when an execution is created with this launch plan.
+     * These can be overridden when an execution is created with this launch plan.
      * 
* * .flyteidl.core.ParameterMap default_inputs = 3; @@ -4490,7 +4490,7 @@ public interface LaunchPlanSpecOrBuilder extends /** *
      * Fixed, non-overridable inputs for the Launch Plan.
-     * These can not be overriden when an execution is created with this launch plan.
+     * These can not be overridden when an execution is created with this launch plan.
      * 
* * .flyteidl.core.LiteralMap fixed_inputs = 4; @@ -4499,7 +4499,7 @@ public interface LaunchPlanSpecOrBuilder extends /** *
      * Fixed, non-overridable inputs for the Launch Plan.
-     * These can not be overriden when an execution is created with this launch plan.
+     * These can not be overridden when an execution is created with this launch plan.
      * 
* * .flyteidl.core.LiteralMap fixed_inputs = 4; @@ -4508,7 +4508,7 @@ public interface LaunchPlanSpecOrBuilder extends /** *
      * Fixed, non-overridable inputs for the Launch Plan.
-     * These can not be overriden when an execution is created with this launch plan.
+     * These can not be overridden when an execution is created with this launch plan.
      * 
* * .flyteidl.core.LiteralMap fixed_inputs = 4; @@ -5109,7 +5109,7 @@ public flyteidl.admin.LaunchPlanOuterClass.LaunchPlanMetadataOrBuilder getEntity /** *
      * Input values to be passed for the execution.
-     * These can be overriden when an execution is created with this launch plan.
+     * These can be overridden when an execution is created with this launch plan.
      * 
* * .flyteidl.core.ParameterMap default_inputs = 3; @@ -5120,7 +5120,7 @@ public boolean hasDefaultInputs() { /** *
      * Input values to be passed for the execution.
-     * These can be overriden when an execution is created with this launch plan.
+     * These can be overridden when an execution is created with this launch plan.
      * 
* * .flyteidl.core.ParameterMap default_inputs = 3; @@ -5131,7 +5131,7 @@ public flyteidl.core.Interface.ParameterMap getDefaultInputs() { /** *
      * Input values to be passed for the execution.
-     * These can be overriden when an execution is created with this launch plan.
+     * These can be overridden when an execution is created with this launch plan.
      * 
* * .flyteidl.core.ParameterMap default_inputs = 3; @@ -5145,7 +5145,7 @@ public flyteidl.core.Interface.ParameterMapOrBuilder getDefaultInputsOrBuilder() /** *
      * Fixed, non-overridable inputs for the Launch Plan.
-     * These can not be overriden when an execution is created with this launch plan.
+     * These can not be overridden when an execution is created with this launch plan.
      * 
* * .flyteidl.core.LiteralMap fixed_inputs = 4; @@ -5156,7 +5156,7 @@ public boolean hasFixedInputs() { /** *
      * Fixed, non-overridable inputs for the Launch Plan.
-     * These can not be overriden when an execution is created with this launch plan.
+     * These can not be overridden when an execution is created with this launch plan.
      * 
* * .flyteidl.core.LiteralMap fixed_inputs = 4; @@ -5167,7 +5167,7 @@ public flyteidl.core.Literals.LiteralMap getFixedInputs() { /** *
      * Fixed, non-overridable inputs for the Launch Plan.
-     * These can not be overriden when an execution is created with this launch plan.
+     * These can not be overridden when an execution is created with this launch plan.
      * 
* * .flyteidl.core.LiteralMap fixed_inputs = 4; @@ -6585,7 +6585,7 @@ public flyteidl.admin.LaunchPlanOuterClass.LaunchPlanMetadataOrBuilder getEntity /** *
        * Input values to be passed for the execution.
-       * These can be overriden when an execution is created with this launch plan.
+       * These can be overridden when an execution is created with this launch plan.
        * 
* * .flyteidl.core.ParameterMap default_inputs = 3; @@ -6596,7 +6596,7 @@ public boolean hasDefaultInputs() { /** *
        * Input values to be passed for the execution.
-       * These can be overriden when an execution is created with this launch plan.
+       * These can be overridden when an execution is created with this launch plan.
        * 
* * .flyteidl.core.ParameterMap default_inputs = 3; @@ -6611,7 +6611,7 @@ public flyteidl.core.Interface.ParameterMap getDefaultInputs() { /** *
        * Input values to be passed for the execution.
-       * These can be overriden when an execution is created with this launch plan.
+       * These can be overridden when an execution is created with this launch plan.
        * 
* * .flyteidl.core.ParameterMap default_inputs = 3; @@ -6632,7 +6632,7 @@ public Builder setDefaultInputs(flyteidl.core.Interface.ParameterMap value) { /** *
        * Input values to be passed for the execution.
-       * These can be overriden when an execution is created with this launch plan.
+       * These can be overridden when an execution is created with this launch plan.
        * 
* * .flyteidl.core.ParameterMap default_inputs = 3; @@ -6651,7 +6651,7 @@ public Builder setDefaultInputs( /** *
        * Input values to be passed for the execution.
-       * These can be overriden when an execution is created with this launch plan.
+       * These can be overridden when an execution is created with this launch plan.
        * 
* * .flyteidl.core.ParameterMap default_inputs = 3; @@ -6674,7 +6674,7 @@ public Builder mergeDefaultInputs(flyteidl.core.Interface.ParameterMap value) { /** *
        * Input values to be passed for the execution.
-       * These can be overriden when an execution is created with this launch plan.
+       * These can be overridden when an execution is created with this launch plan.
        * 
* * .flyteidl.core.ParameterMap default_inputs = 3; @@ -6693,7 +6693,7 @@ public Builder clearDefaultInputs() { /** *
        * Input values to be passed for the execution.
-       * These can be overriden when an execution is created with this launch plan.
+       * These can be overridden when an execution is created with this launch plan.
        * 
* * .flyteidl.core.ParameterMap default_inputs = 3; @@ -6706,7 +6706,7 @@ public flyteidl.core.Interface.ParameterMap.Builder getDefaultInputsBuilder() { /** *
        * Input values to be passed for the execution.
-       * These can be overriden when an execution is created with this launch plan.
+       * These can be overridden when an execution is created with this launch plan.
        * 
* * .flyteidl.core.ParameterMap default_inputs = 3; @@ -6722,7 +6722,7 @@ public flyteidl.core.Interface.ParameterMapOrBuilder getDefaultInputsOrBuilder() /** *
        * Input values to be passed for the execution.
-       * These can be overriden when an execution is created with this launch plan.
+       * These can be overridden when an execution is created with this launch plan.
        * 
* * .flyteidl.core.ParameterMap default_inputs = 3; @@ -6747,7 +6747,7 @@ public flyteidl.core.Interface.ParameterMapOrBuilder getDefaultInputsOrBuilder() /** *
        * Fixed, non-overridable inputs for the Launch Plan.
-       * These can not be overriden when an execution is created with this launch plan.
+       * These can not be overridden when an execution is created with this launch plan.
        * 
* * .flyteidl.core.LiteralMap fixed_inputs = 4; @@ -6758,7 +6758,7 @@ public boolean hasFixedInputs() { /** *
        * Fixed, non-overridable inputs for the Launch Plan.
-       * These can not be overriden when an execution is created with this launch plan.
+       * These can not be overridden when an execution is created with this launch plan.
        * 
* * .flyteidl.core.LiteralMap fixed_inputs = 4; @@ -6773,7 +6773,7 @@ public flyteidl.core.Literals.LiteralMap getFixedInputs() { /** *
        * Fixed, non-overridable inputs for the Launch Plan.
-       * These can not be overriden when an execution is created with this launch plan.
+       * These can not be overridden when an execution is created with this launch plan.
        * 
* * .flyteidl.core.LiteralMap fixed_inputs = 4; @@ -6794,7 +6794,7 @@ public Builder setFixedInputs(flyteidl.core.Literals.LiteralMap value) { /** *
        * Fixed, non-overridable inputs for the Launch Plan.
-       * These can not be overriden when an execution is created with this launch plan.
+       * These can not be overridden when an execution is created with this launch plan.
        * 
* * .flyteidl.core.LiteralMap fixed_inputs = 4; @@ -6813,7 +6813,7 @@ public Builder setFixedInputs( /** *
        * Fixed, non-overridable inputs for the Launch Plan.
-       * These can not be overriden when an execution is created with this launch plan.
+       * These can not be overridden when an execution is created with this launch plan.
        * 
* * .flyteidl.core.LiteralMap fixed_inputs = 4; @@ -6836,7 +6836,7 @@ public Builder mergeFixedInputs(flyteidl.core.Literals.LiteralMap value) { /** *
        * Fixed, non-overridable inputs for the Launch Plan.
-       * These can not be overriden when an execution is created with this launch plan.
+       * These can not be overridden when an execution is created with this launch plan.
        * 
* * .flyteidl.core.LiteralMap fixed_inputs = 4; @@ -6855,7 +6855,7 @@ public Builder clearFixedInputs() { /** *
        * Fixed, non-overridable inputs for the Launch Plan.
-       * These can not be overriden when an execution is created with this launch plan.
+       * These can not be overridden when an execution is created with this launch plan.
        * 
* * .flyteidl.core.LiteralMap fixed_inputs = 4; @@ -6868,7 +6868,7 @@ public flyteidl.core.Literals.LiteralMap.Builder getFixedInputsBuilder() { /** *
        * Fixed, non-overridable inputs for the Launch Plan.
-       * These can not be overriden when an execution is created with this launch plan.
+       * These can not be overridden when an execution is created with this launch plan.
        * 
* * .flyteidl.core.LiteralMap fixed_inputs = 4; @@ -6884,7 +6884,7 @@ public flyteidl.core.Literals.LiteralMapOrBuilder getFixedInputsOrBuilder() { /** *
        * Fixed, non-overridable inputs for the Launch Plan.
-       * These can not be overriden when an execution is created with this launch plan.
+       * These can not be overridden when an execution is created with this launch plan.
        * 
* * .flyteidl.core.LiteralMap fixed_inputs = 4; diff --git a/flyteidl/gen/pb-java/flyteidl/admin/SignalOuterClass.java b/flyteidl/gen/pb-java/flyteidl/admin/SignalOuterClass.java index 490119af7f..0a5d5c3cd9 100644 --- a/flyteidl/gen/pb-java/flyteidl/admin/SignalOuterClass.java +++ b/flyteidl/gen/pb-java/flyteidl/admin/SignalOuterClass.java @@ -70,7 +70,7 @@ public interface SignalGetOrCreateRequestOrBuilder extends } /** *
-   * SignalGetOrCreateRequest represents a request structure to retrive or create a signal.
+   * SignalGetOrCreateRequest represents a request structure to retrieve or create a signal.
    * See :ref:`ref_flyteidl.admin.Signal` for more details
    * 
* @@ -414,7 +414,7 @@ protected Builder newBuilderForType( } /** *
-     * SignalGetOrCreateRequest represents a request structure to retrive or create a signal.
+     * SignalGetOrCreateRequest represents a request structure to retrieve or create a signal.
      * See :ref:`ref_flyteidl.admin.Signal` for more details
      * 
* diff --git a/flyteidl/gen/pb-java/flyteidl/admin/WorkflowOuterClass.java b/flyteidl/gen/pb-java/flyteidl/admin/WorkflowOuterClass.java index c7b891b02b..15f9cf84d7 100644 --- a/flyteidl/gen/pb-java/flyteidl/admin/WorkflowOuterClass.java +++ b/flyteidl/gen/pb-java/flyteidl/admin/WorkflowOuterClass.java @@ -7244,7 +7244,7 @@ public interface CreateWorkflowFailureReasonOrBuilder extends } /** *
-   * When a CreateWorkflowRequest failes due to matching id
+   * When a CreateWorkflowRequest fails due to matching id
    * 
* * Protobuf type {@code flyteidl.admin.CreateWorkflowFailureReason} @@ -7620,7 +7620,7 @@ protected Builder newBuilderForType( } /** *
-     * When a CreateWorkflowRequest failes due to matching id
+     * When a CreateWorkflowRequest fails due to matching id
      * 
* * Protobuf type {@code flyteidl.admin.CreateWorkflowFailureReason} diff --git a/flyteidl/gen/pb-java/flyteidl/service/Agent.java b/flyteidl/gen/pb-java/flyteidl/service/Agent.java index 592b30c653..fbdb17d39c 100644 --- a/flyteidl/gen/pb-java/flyteidl/service/Agent.java +++ b/flyteidl/gen/pb-java/flyteidl/service/Agent.java @@ -24,16 +24,18 @@ public static void registerAllExtensions( static { java.lang.String[] descriptorData = { "\n\034flyteidl/service/agent.proto\022\020flyteidl" + - ".service\032\032flyteidl/admin/agent.proto2\217\002\n" + + ".service\032\032flyteidl/admin/agent.proto2\332\002\n" + "\021AsyncAgentService\022U\n\nCreateTask\022!.flyte" + "idl.admin.CreateTaskRequest\032\".flyteidl.a" + "dmin.CreateTaskResponse\"\000\022L\n\007GetTask\022\036.f" + "lyteidl.admin.GetTaskRequest\032\037.flyteidl." + "admin.GetTaskResponse\"\000\022U\n\nDeleteTask\022!." + "flyteidl.admin.DeleteTaskRequest\032\".flyte" + - "idl.admin.DeleteTaskResponse\"\000B9Z7github" + - ".com/flyteorg/flyteidl/gen/pb-go/flyteid" + - "l/serviceb\006proto3" + "idl.admin.DeleteTaskResponse\"\000\022I\n\006DoTask" + + "\022\035.flyteidl.admin.DoTaskRequest\032\036.flytei" + + "dl.admin.DoTaskResponse\"\000B9Z7github.com/" + + "flyteorg/flyteidl/gen/pb-go/flyteidl/ser" + + "viceb\006proto3" }; com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner = new com.google.protobuf.Descriptors.FileDescriptor. InternalDescriptorAssigner() { diff --git a/flyteidl/gen/pb-java/flyteidl/service/Dataproxy.java b/flyteidl/gen/pb-java/flyteidl/service/Dataproxy.java index 431c1d3808..df800e2a19 100644 --- a/flyteidl/gen/pb-java/flyteidl/service/Dataproxy.java +++ b/flyteidl/gen/pb-java/flyteidl/service/Dataproxy.java @@ -7743,7 +7743,7 @@ public interface GetDataRequestOrBuilder extends /** *
      * A unique identifier in the form of flyte://<something> that uniquely, for a given Flyte
-     * backend, identifies a Flyte artifact ([i]nput, [o]utput, flyte [d]eck, etc.).
+     * backend, identifies a Flyte artifact ([i]nput, [o]output, flyte [d]eck, etc.).
      * e.g. flyte://v1/proj/development/execid/n2/0/i (for 0th task execution attempt input)
      *      flyte://v1/proj/development/execid/n2/i (for node execution input)
      *      flyte://v1/proj/development/execid/n2/o/o3 (the o3 output of the second node)
@@ -7755,7 +7755,7 @@ public interface GetDataRequestOrBuilder extends
     /**
      * 
      * A unique identifier in the form of flyte://<something> that uniquely, for a given Flyte
-     * backend, identifies a Flyte artifact ([i]nput, [o]utput, flyte [d]eck, etc.).
+     * backend, identifies a Flyte artifact ([i]nput, [o]output, flyte [d]eck, etc.).
      * e.g. flyte://v1/proj/development/execid/n2/0/i (for 0th task execution attempt input)
      *      flyte://v1/proj/development/execid/n2/i (for node execution input)
      *      flyte://v1/proj/development/execid/n2/o/o3 (the o3 output of the second node)
@@ -7853,7 +7853,7 @@ private GetDataRequest(
     /**
      * 
      * A unique identifier in the form of flyte://<something> that uniquely, for a given Flyte
-     * backend, identifies a Flyte artifact ([i]nput, [o]utput, flyte [d]eck, etc.).
+     * backend, identifies a Flyte artifact ([i]nput, [o]output, flyte [d]eck, etc.).
      * e.g. flyte://v1/proj/development/execid/n2/0/i (for 0th task execution attempt input)
      *      flyte://v1/proj/development/execid/n2/i (for node execution input)
      *      flyte://v1/proj/development/execid/n2/o/o3 (the o3 output of the second node)
@@ -7876,7 +7876,7 @@ public java.lang.String getFlyteUrl() {
     /**
      * 
      * A unique identifier in the form of flyte://<something> that uniquely, for a given Flyte
-     * backend, identifies a Flyte artifact ([i]nput, [o]utput, flyte [d]eck, etc.).
+     * backend, identifies a Flyte artifact ([i]nput, [o]output, flyte [d]eck, etc.).
      * e.g. flyte://v1/proj/development/execid/n2/0/i (for 0th task execution attempt input)
      *      flyte://v1/proj/development/execid/n2/i (for node execution input)
      *      flyte://v1/proj/development/execid/n2/o/o3 (the o3 output of the second node)
@@ -8208,7 +8208,7 @@ public Builder mergeFrom(
       /**
        * 
        * A unique identifier in the form of flyte://<something> that uniquely, for a given Flyte
-       * backend, identifies a Flyte artifact ([i]nput, [o]utput, flyte [d]eck, etc.).
+       * backend, identifies a Flyte artifact ([i]nput, [o]output, flyte [d]eck, etc.).
        * e.g. flyte://v1/proj/development/execid/n2/0/i (for 0th task execution attempt input)
        *      flyte://v1/proj/development/execid/n2/i (for node execution input)
        *      flyte://v1/proj/development/execid/n2/o/o3 (the o3 output of the second node)
@@ -8231,7 +8231,7 @@ public java.lang.String getFlyteUrl() {
       /**
        * 
        * A unique identifier in the form of flyte://<something> that uniquely, for a given Flyte
-       * backend, identifies a Flyte artifact ([i]nput, [o]utput, flyte [d]eck, etc.).
+       * backend, identifies a Flyte artifact ([i]nput, [o]output, flyte [d]eck, etc.).
        * e.g. flyte://v1/proj/development/execid/n2/0/i (for 0th task execution attempt input)
        *      flyte://v1/proj/development/execid/n2/i (for node execution input)
        *      flyte://v1/proj/development/execid/n2/o/o3 (the o3 output of the second node)
@@ -8255,7 +8255,7 @@ public java.lang.String getFlyteUrl() {
       /**
        * 
        * A unique identifier in the form of flyte://<something> that uniquely, for a given Flyte
-       * backend, identifies a Flyte artifact ([i]nput, [o]utput, flyte [d]eck, etc.).
+       * backend, identifies a Flyte artifact ([i]nput, [o]output, flyte [d]eck, etc.).
        * e.g. flyte://v1/proj/development/execid/n2/0/i (for 0th task execution attempt input)
        *      flyte://v1/proj/development/execid/n2/i (for node execution input)
        *      flyte://v1/proj/development/execid/n2/o/o3 (the o3 output of the second node)
@@ -8276,7 +8276,7 @@ public Builder setFlyteUrl(
       /**
        * 
        * A unique identifier in the form of flyte://<something> that uniquely, for a given Flyte
-       * backend, identifies a Flyte artifact ([i]nput, [o]utput, flyte [d]eck, etc.).
+       * backend, identifies a Flyte artifact ([i]nput, [o]output, flyte [d]eck, etc.).
        * e.g. flyte://v1/proj/development/execid/n2/0/i (for 0th task execution attempt input)
        *      flyte://v1/proj/development/execid/n2/i (for node execution input)
        *      flyte://v1/proj/development/execid/n2/o/o3 (the o3 output of the second node)
@@ -8293,7 +8293,7 @@ public Builder clearFlyteUrl() {
       /**
        * 
        * A unique identifier in the form of flyte://<something> that uniquely, for a given Flyte
-       * backend, identifies a Flyte artifact ([i]nput, [o]utput, flyte [d]eck, etc.).
+       * backend, identifies a Flyte artifact ([i]nput, [o]output, flyte [d]eck, etc.).
        * e.g. flyte://v1/proj/development/execid/n2/0/i (for 0th task execution attempt input)
        *      flyte://v1/proj/development/execid/n2/i (for node execution input)
        *      flyte://v1/proj/development/execid/n2/o/o3 (the o3 output of the second node)
diff --git a/flyteidl/gen/pb-js/flyteidl.d.ts b/flyteidl/gen/pb-js/flyteidl.d.ts
index a7fde2b80b..176ad9b916 100644
--- a/flyteidl/gen/pb-js/flyteidl.d.ts
+++ b/flyteidl/gen/pb-js/flyteidl.d.ts
@@ -8198,6 +8198,116 @@ export namespace flyteidl {
             public static verify(message: { [k: string]: any }): (string|null);
         }
 
+        /** Properties of a DoTaskRequest. */
+        interface IDoTaskRequest {
+
+            /** DoTaskRequest inputs */
+            inputs?: (flyteidl.core.ILiteralMap|null);
+
+            /** DoTaskRequest template */
+            template?: (flyteidl.core.ITaskTemplate|null);
+        }
+
+        /** Represents a DoTaskRequest. */
+        class DoTaskRequest implements IDoTaskRequest {
+
+            /**
+             * Constructs a new DoTaskRequest.
+             * @param [properties] Properties to set
+             */
+            constructor(properties?: flyteidl.admin.IDoTaskRequest);
+
+            /** DoTaskRequest inputs. */
+            public inputs?: (flyteidl.core.ILiteralMap|null);
+
+            /** DoTaskRequest template. */
+            public template?: (flyteidl.core.ITaskTemplate|null);
+
+            /**
+             * Creates a new DoTaskRequest instance using the specified properties.
+             * @param [properties] Properties to set
+             * @returns DoTaskRequest instance
+             */
+            public static create(properties?: flyteidl.admin.IDoTaskRequest): flyteidl.admin.DoTaskRequest;
+
+            /**
+             * Encodes the specified DoTaskRequest message. Does not implicitly {@link flyteidl.admin.DoTaskRequest.verify|verify} messages.
+             * @param message DoTaskRequest message or plain object to encode
+             * @param [writer] Writer to encode to
+             * @returns Writer
+             */
+            public static encode(message: flyteidl.admin.IDoTaskRequest, writer?: $protobuf.Writer): $protobuf.Writer;
+
+            /**
+             * Decodes a DoTaskRequest message from the specified reader or buffer.
+             * @param reader Reader or buffer to decode from
+             * @param [length] Message length if known beforehand
+             * @returns DoTaskRequest
+             * @throws {Error} If the payload is not a reader or valid buffer
+             * @throws {$protobuf.util.ProtocolError} If required fields are missing
+             */
+            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): flyteidl.admin.DoTaskRequest;
+
+            /**
+             * Verifies a DoTaskRequest message.
+             * @param message Plain object to verify
+             * @returns `null` if valid, otherwise the reason why it is not
+             */
+            public static verify(message: { [k: string]: any }): (string|null);
+        }
+
+        /** Properties of a DoTaskResponse. */
+        interface IDoTaskResponse {
+
+            /** DoTaskResponse resource */
+            resource?: (flyteidl.admin.IResource|null);
+        }
+
+        /** Represents a DoTaskResponse. */
+        class DoTaskResponse implements IDoTaskResponse {
+
+            /**
+             * Constructs a new DoTaskResponse.
+             * @param [properties] Properties to set
+             */
+            constructor(properties?: flyteidl.admin.IDoTaskResponse);
+
+            /** DoTaskResponse resource. */
+            public resource?: (flyteidl.admin.IResource|null);
+
+            /**
+             * Creates a new DoTaskResponse instance using the specified properties.
+             * @param [properties] Properties to set
+             * @returns DoTaskResponse instance
+             */
+            public static create(properties?: flyteidl.admin.IDoTaskResponse): flyteidl.admin.DoTaskResponse;
+
+            /**
+             * Encodes the specified DoTaskResponse message. Does not implicitly {@link flyteidl.admin.DoTaskResponse.verify|verify} messages.
+             * @param message DoTaskResponse message or plain object to encode
+             * @param [writer] Writer to encode to
+             * @returns Writer
+             */
+            public static encode(message: flyteidl.admin.IDoTaskResponse, writer?: $protobuf.Writer): $protobuf.Writer;
+
+            /**
+             * Decodes a DoTaskResponse message from the specified reader or buffer.
+             * @param reader Reader or buffer to decode from
+             * @param [length] Message length if known beforehand
+             * @returns DoTaskResponse
+             * @throws {Error} If the payload is not a reader or valid buffer
+             * @throws {$protobuf.util.ProtocolError} If required fields are missing
+             */
+            public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): flyteidl.admin.DoTaskResponse;
+
+            /**
+             * Verifies a DoTaskResponse message.
+             * @param message Plain object to verify
+             * @returns `null` if valid, otherwise the reason why it is not
+             */
+            public static verify(message: { [k: string]: any }): (string|null);
+        }
+
         /** Properties of a ClusterAssignment. */
         interface IClusterAssignment {
 
@@ -19543,6 +19653,20 @@ export namespace flyteidl {
              * @returns Promise
              */
             public deleteTask(request: flyteidl.admin.IDeleteTaskRequest): Promise;
+
+            /**
+             * Calls DoTask.
+             * @param request DoTaskRequest message or plain object
+             * @param callback Node-style callback called with the error, if any, and DoTaskResponse
+             */
+            public doTask(request: flyteidl.admin.IDoTaskRequest, callback: flyteidl.service.AsyncAgentService.DoTaskCallback): void;
+
+            /**
+             * Calls DoTask.
+             * @param request DoTaskRequest message or plain object
+             * @returns Promise
+             */
+            public doTask(request: flyteidl.admin.IDoTaskRequest): Promise;
         }
 
         namespace AsyncAgentService {
@@ -19567,6 +19691,13 @@ export namespace flyteidl {
              * @param [response] DeleteTaskResponse
              */
             type DeleteTaskCallback = (error: (Error|null), response?: flyteidl.admin.DeleteTaskResponse) => void;
+
+            /**
+             * Callback as used by {@link flyteidl.service.AsyncAgentService#doTask}.
+             * @param error Error, if any
+             * @param [response] DoTaskResponse
+             */
+            type DoTaskCallback = (error: (Error|null), response?: flyteidl.admin.DoTaskResponse) => void;
         }
 
         /** Properties of a OAuth2MetadataRequest. */
diff --git a/flyteidl/gen/pb-js/flyteidl.js b/flyteidl/gen/pb-js/flyteidl.js
index 2477e38c8e..7945a5051d 100644
--- a/flyteidl/gen/pb-js/flyteidl.js
+++ b/flyteidl/gen/pb-js/flyteidl.js
@@ -19972,6 +19972,249 @@
                 return DeleteTaskResponse;
             })();
     
+            admin.DoTaskRequest = (function() {
+    
+                /**
+                 * Properties of a DoTaskRequest.
+                 * @memberof flyteidl.admin
+                 * @interface IDoTaskRequest
+                 * @property {flyteidl.core.ILiteralMap|null} [inputs] DoTaskRequest inputs
+                 * @property {flyteidl.core.ITaskTemplate|null} [template] DoTaskRequest template
+                 */
+    
+                /**
+                 * Constructs a new DoTaskRequest.
+                 * @memberof flyteidl.admin
+                 * @classdesc Represents a DoTaskRequest.
+                 * @implements IDoTaskRequest
+                 * @constructor
+                 * @param {flyteidl.admin.IDoTaskRequest=} [properties] Properties to set
+                 */
+                function DoTaskRequest(properties) {
+                    if (properties)
+                        for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
+                            if (properties[keys[i]] != null)
+                                this[keys[i]] = properties[keys[i]];
+                }
+    
+                /**
+                 * DoTaskRequest inputs.
+                 * @member {flyteidl.core.ILiteralMap|null|undefined} inputs
+                 * @memberof flyteidl.admin.DoTaskRequest
+                 * @instance
+                 */
+                DoTaskRequest.prototype.inputs = null;
+    
+                /**
+                 * DoTaskRequest template.
+                 * @member {flyteidl.core.ITaskTemplate|null|undefined} template
+                 * @memberof flyteidl.admin.DoTaskRequest
+                 * @instance
+                 */
+                DoTaskRequest.prototype.template = null;
+    
+                /**
+                 * Creates a new DoTaskRequest instance using the specified properties.
+                 * @function create
+                 * @memberof flyteidl.admin.DoTaskRequest
+                 * @static
+                 * @param {flyteidl.admin.IDoTaskRequest=} [properties] Properties to set
+                 * @returns {flyteidl.admin.DoTaskRequest} DoTaskRequest instance
+                 */
+                DoTaskRequest.create = function create(properties) {
+                    return new DoTaskRequest(properties);
+                };
+    
+                /**
+                 * Encodes the specified DoTaskRequest message. Does not implicitly {@link flyteidl.admin.DoTaskRequest.verify|verify} messages.
+                 * @function encode
+                 * @memberof flyteidl.admin.DoTaskRequest
+                 * @static
+                 * @param {flyteidl.admin.IDoTaskRequest} message DoTaskRequest message or plain object to encode
+                 * @param {$protobuf.Writer} [writer] Writer to encode to
+                 * @returns {$protobuf.Writer} Writer
+                 */
+                DoTaskRequest.encode = function encode(message, writer) {
+                    if (!writer)
+                        writer = $Writer.create();
+                    if (message.inputs != null && message.hasOwnProperty("inputs"))
+                        $root.flyteidl.core.LiteralMap.encode(message.inputs, writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim();
+                    if (message.template != null && message.hasOwnProperty("template"))
+                        $root.flyteidl.core.TaskTemplate.encode(message.template, writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim();
+                    return writer;
+                };
+    
+                /**
+                 * Decodes a DoTaskRequest message from the specified reader or buffer.
+                 * @function decode
+                 * @memberof flyteidl.admin.DoTaskRequest
+                 * @static
+                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                 * @param {number} [length] Message length if known beforehand
+                 * @returns {flyteidl.admin.DoTaskRequest} DoTaskRequest
+                 * @throws {Error} If the payload is not a reader or valid buffer
+                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                 */
+                DoTaskRequest.decode = function decode(reader, length) {
+                    if (!(reader instanceof $Reader))
+                        reader = $Reader.create(reader);
+                    var end = length === undefined ? reader.len : reader.pos + length, message = new $root.flyteidl.admin.DoTaskRequest();
+                    while (reader.pos < end) {
+                        var tag = reader.uint32();
+                        switch (tag >>> 3) {
+                        case 1:
+                            message.inputs = $root.flyteidl.core.LiteralMap.decode(reader, reader.uint32());
+                            break;
+                        case 2:
+                            message.template = $root.flyteidl.core.TaskTemplate.decode(reader, reader.uint32());
+                            break;
+                        default:
+                            reader.skipType(tag & 7);
+                            break;
+                        }
+                    }
+                    return message;
+                };
+    
+                /**
+                 * Verifies a DoTaskRequest message.
+                 * @function verify
+                 * @memberof flyteidl.admin.DoTaskRequest
+                 * @static
+                 * @param {Object.} message Plain object to verify
+                 * @returns {string|null} `null` if valid, otherwise the reason why it is not
+                 */
+                DoTaskRequest.verify = function verify(message) {
+                    if (typeof message !== "object" || message === null)
+                        return "object expected";
+                    if (message.inputs != null && message.hasOwnProperty("inputs")) {
+                        var error = $root.flyteidl.core.LiteralMap.verify(message.inputs);
+                        if (error)
+                            return "inputs." + error;
+                    }
+                    if (message.template != null && message.hasOwnProperty("template")) {
+                        var error = $root.flyteidl.core.TaskTemplate.verify(message.template);
+                        if (error)
+                            return "template." + error;
+                    }
+                    return null;
+                };
+    
+                return DoTaskRequest;
+            })();
+    
+            admin.DoTaskResponse = (function() {
+    
+                /**
+                 * Properties of a DoTaskResponse.
+                 * @memberof flyteidl.admin
+                 * @interface IDoTaskResponse
+                 * @property {flyteidl.admin.IResource|null} [resource] DoTaskResponse resource
+                 */
+    
+                /**
+                 * Constructs a new DoTaskResponse.
+                 * @memberof flyteidl.admin
+                 * @classdesc Represents a DoTaskResponse.
+                 * @implements IDoTaskResponse
+                 * @constructor
+                 * @param {flyteidl.admin.IDoTaskResponse=} [properties] Properties to set
+                 */
+                function DoTaskResponse(properties) {
+                    if (properties)
+                        for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
+                            if (properties[keys[i]] != null)
+                                this[keys[i]] = properties[keys[i]];
+                }
+    
+                /**
+                 * DoTaskResponse resource.
+                 * @member {flyteidl.admin.IResource|null|undefined} resource
+                 * @memberof flyteidl.admin.DoTaskResponse
+                 * @instance
+                 */
+                DoTaskResponse.prototype.resource = null;
+    
+                /**
+                 * Creates a new DoTaskResponse instance using the specified properties.
+                 * @function create
+                 * @memberof flyteidl.admin.DoTaskResponse
+                 * @static
+                 * @param {flyteidl.admin.IDoTaskResponse=} [properties] Properties to set
+                 * @returns {flyteidl.admin.DoTaskResponse} DoTaskResponse instance
+                 */
+                DoTaskResponse.create = function create(properties) {
+                    return new DoTaskResponse(properties);
+                };
+    
+                /**
+                 * Encodes the specified DoTaskResponse message. Does not implicitly {@link flyteidl.admin.DoTaskResponse.verify|verify} messages.
+                 * @function encode
+                 * @memberof flyteidl.admin.DoTaskResponse
+                 * @static
+                 * @param {flyteidl.admin.IDoTaskResponse} message DoTaskResponse message or plain object to encode
+                 * @param {$protobuf.Writer} [writer] Writer to encode to
+                 * @returns {$protobuf.Writer} Writer
+                 */
+                DoTaskResponse.encode = function encode(message, writer) {
+                    if (!writer)
+                        writer = $Writer.create();
+                    if (message.resource != null && message.hasOwnProperty("resource"))
+                        $root.flyteidl.admin.Resource.encode(message.resource, writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim();
+                    return writer;
+                };
+    
+                /**
+                 * Decodes a DoTaskResponse message from the specified reader or buffer.
+                 * @function decode
+                 * @memberof flyteidl.admin.DoTaskResponse
+                 * @static
+                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                 * @param {number} [length] Message length if known beforehand
+                 * @returns {flyteidl.admin.DoTaskResponse} DoTaskResponse
+                 * @throws {Error} If the payload is not a reader or valid buffer
+                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                 */
+                DoTaskResponse.decode = function decode(reader, length) {
+                    if (!(reader instanceof $Reader))
+                        reader = $Reader.create(reader);
+                    var end = length === undefined ? reader.len : reader.pos + length, message = new $root.flyteidl.admin.DoTaskResponse();
+                    while (reader.pos < end) {
+                        var tag = reader.uint32();
+                        switch (tag >>> 3) {
+                        case 1:
+                            message.resource = $root.flyteidl.admin.Resource.decode(reader, reader.uint32());
+                            break;
+                        default:
+                            reader.skipType(tag & 7);
+                            break;
+                        }
+                    }
+                    return message;
+                };
+    
+                /**
+                 * Verifies a DoTaskResponse message.
+                 * @function verify
+                 * @memberof flyteidl.admin.DoTaskResponse
+                 * @static
+                 * @param {Object.} message Plain object to verify
+                 * @returns {string|null} `null` if valid, otherwise the reason why it is not
+                 */
+                DoTaskResponse.verify = function verify(message) {
+                    if (typeof message !== "object" || message === null)
+                        return "object expected";
+                    if (message.resource != null && message.hasOwnProperty("resource")) {
+                        var error = $root.flyteidl.admin.Resource.verify(message.resource);
+                        if (error)
+                            return "resource." + error;
+                    }
+                    return null;
+                };
+    
+                return DoTaskResponse;
+            })();
+    
             admin.ClusterAssignment = (function() {
     
                 /**
@@ -45720,6 +45963,39 @@
                  * @variation 2
                  */
     
+                /**
+                 * Callback as used by {@link flyteidl.service.AsyncAgentService#doTask}.
+                 * @memberof flyteidl.service.AsyncAgentService
+                 * @typedef DoTaskCallback
+                 * @type {function}
+                 * @param {Error|null} error Error, if any
+                 * @param {flyteidl.admin.DoTaskResponse} [response] DoTaskResponse
+                 */
+    
+                /**
+                 * Calls DoTask.
+                 * @function doTask
+                 * @memberof flyteidl.service.AsyncAgentService
+                 * @instance
+                 * @param {flyteidl.admin.IDoTaskRequest} request DoTaskRequest message or plain object
+                 * @param {flyteidl.service.AsyncAgentService.DoTaskCallback} callback Node-style callback called with the error, if any, and DoTaskResponse
+                 * @returns {undefined}
+                 * @variation 1
+                 */
+                Object.defineProperty(AsyncAgentService.prototype.doTask = function doTask(request, callback) {
+                    return this.rpcCall(doTask, $root.flyteidl.admin.DoTaskRequest, $root.flyteidl.admin.DoTaskResponse, request, callback);
+                }, "name", { value: "DoTask" });
+    
+                /**
+                 * Calls DoTask.
+                 * @function doTask
+                 * @memberof flyteidl.service.AsyncAgentService
+                 * @instance
+                 * @param {flyteidl.admin.IDoTaskRequest} request DoTaskRequest message or plain object
+                 * @returns {Promise} Promise
+                 * @variation 2
+                 */
+    
                 return AsyncAgentService;
             })();
     
diff --git a/flyteidl/gen/pb_python/flyteidl/admin/agent_pb2.py b/flyteidl/gen/pb_python/flyteidl/admin/agent_pb2.py
index ea0ef0afe1..ff005fce8d 100644
--- a/flyteidl/gen/pb_python/flyteidl/admin/agent_pb2.py
+++ b/flyteidl/gen/pb_python/flyteidl/admin/agent_pb2.py
@@ -17,7 +17,7 @@
 from flyteidl.core import identifier_pb2 as flyteidl_dot_core_dot_identifier__pb2
 
 
-DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1a\x66lyteidl/admin/agent.proto\x12\x0e\x66lyteidl.admin\x1a\x1c\x66lyteidl/core/literals.proto\x1a\x19\x66lyteidl/core/tasks.proto\x1a\x1d\x66lyteidl/core/interface.proto\x1a\x1e\x66lyteidl/core/identifier.proto\"\x98\x05\n\x15TaskExecutionMetadata\x12R\n\x11task_execution_id\x18\x01 \x01(\x0b\x32&.flyteidl.core.TaskExecutionIdentifierR\x0ftaskExecutionId\x12\x1c\n\tnamespace\x18\x02 \x01(\tR\tnamespace\x12I\n\x06labels\x18\x03 \x03(\x0b\x32\x31.flyteidl.admin.TaskExecutionMetadata.LabelsEntryR\x06labels\x12X\n\x0b\x61nnotations\x18\x04 \x03(\x0b\x32\x36.flyteidl.admin.TaskExecutionMetadata.AnnotationsEntryR\x0b\x61nnotations\x12.\n\x13k8s_service_account\x18\x05 \x01(\tR\x11k8sServiceAccount\x12t\n\x15\x65nvironment_variables\x18\x06 \x03(\x0b\x32?.flyteidl.admin.TaskExecutionMetadata.EnvironmentVariablesEntryR\x14\x65nvironmentVariables\x1a\x39\n\x0bLabelsEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x1a>\n\x10\x41nnotationsEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x1aG\n\x19\x45nvironmentVariablesEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\"\x83\x02\n\x11\x43reateTaskRequest\x12\x31\n\x06inputs\x18\x01 \x01(\x0b\x32\x19.flyteidl.core.LiteralMapR\x06inputs\x12\x37\n\x08template\x18\x02 \x01(\x0b\x32\x1b.flyteidl.core.TaskTemplateR\x08template\x12#\n\routput_prefix\x18\x03 \x01(\tR\x0coutputPrefix\x12]\n\x17task_execution_metadata\x18\x04 \x01(\x0b\x32%.flyteidl.admin.TaskExecutionMetadataR\x15taskExecutionMetadata\"9\n\x12\x43reateTaskResponse\x12#\n\rresource_meta\x18\x01 \x01(\x0cR\x0cresourceMeta\"R\n\x0eGetTaskRequest\x12\x1b\n\ttask_type\x18\x01 \x01(\tR\x08taskType\x12#\n\rresource_meta\x18\x02 \x01(\x0cR\x0cresourceMeta\"G\n\x0fGetTaskResponse\x12\x34\n\x08resource\x18\x01 \x01(\x0b\x32\x18.flyteidl.admin.ResourceR\x08resource\"l\n\x08Resource\x12+\n\x05state\x18\x01 \x01(\x0e\x32\x15.flyteidl.admin.StateR\x05state\x12\x33\n\x07outputs\x18\x02 \x01(\x0b\x32\x19.flyteidl.core.LiteralMapR\x07outputs\"U\n\x11\x44\x65leteTaskRequest\x12\x1b\n\ttask_type\x18\x01 \x01(\tR\x08taskType\x12#\n\rresource_meta\x18\x02 \x01(\x0cR\x0cresourceMeta\"\x14\n\x12\x44\x65leteTaskResponse*^\n\x05State\x12\x15\n\x11RETRYABLE_FAILURE\x10\x00\x12\x15\n\x11PERMANENT_FAILURE\x10\x01\x12\x0b\n\x07PENDING\x10\x02\x12\x0b\n\x07RUNNING\x10\x03\x12\r\n\tSUCCEEDED\x10\x04\x42\xb0\x01\n\x12\x63om.flyteidl.adminB\nAgentProtoP\x01Z5github.com/flyteorg/flyteidl/gen/pb-go/flyteidl/admin\xa2\x02\x03\x46\x41X\xaa\x02\x0e\x46lyteidl.Admin\xca\x02\x0e\x46lyteidl\\Admin\xe2\x02\x1a\x46lyteidl\\Admin\\GPBMetadata\xea\x02\x0f\x46lyteidl::Adminb\x06proto3')
+DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1a\x66lyteidl/admin/agent.proto\x12\x0e\x66lyteidl.admin\x1a\x1c\x66lyteidl/core/literals.proto\x1a\x19\x66lyteidl/core/tasks.proto\x1a\x1d\x66lyteidl/core/interface.proto\x1a\x1e\x66lyteidl/core/identifier.proto\"\x98\x05\n\x15TaskExecutionMetadata\x12R\n\x11task_execution_id\x18\x01 \x01(\x0b\x32&.flyteidl.core.TaskExecutionIdentifierR\x0ftaskExecutionId\x12\x1c\n\tnamespace\x18\x02 \x01(\tR\tnamespace\x12I\n\x06labels\x18\x03 \x03(\x0b\x32\x31.flyteidl.admin.TaskExecutionMetadata.LabelsEntryR\x06labels\x12X\n\x0b\x61nnotations\x18\x04 \x03(\x0b\x32\x36.flyteidl.admin.TaskExecutionMetadata.AnnotationsEntryR\x0b\x61nnotations\x12.\n\x13k8s_service_account\x18\x05 \x01(\tR\x11k8sServiceAccount\x12t\n\x15\x65nvironment_variables\x18\x06 \x03(\x0b\x32?.flyteidl.admin.TaskExecutionMetadata.EnvironmentVariablesEntryR\x14\x65nvironmentVariables\x1a\x39\n\x0bLabelsEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x1a>\n\x10\x41nnotationsEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x1aG\n\x19\x45nvironmentVariablesEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\"\x83\x02\n\x11\x43reateTaskRequest\x12\x31\n\x06inputs\x18\x01 \x01(\x0b\x32\x19.flyteidl.core.LiteralMapR\x06inputs\x12\x37\n\x08template\x18\x02 \x01(\x0b\x32\x1b.flyteidl.core.TaskTemplateR\x08template\x12#\n\routput_prefix\x18\x03 \x01(\tR\x0coutputPrefix\x12]\n\x17task_execution_metadata\x18\x04 \x01(\x0b\x32%.flyteidl.admin.TaskExecutionMetadataR\x15taskExecutionMetadata\"9\n\x12\x43reateTaskResponse\x12#\n\rresource_meta\x18\x01 \x01(\x0cR\x0cresourceMeta\"R\n\x0eGetTaskRequest\x12\x1b\n\ttask_type\x18\x01 \x01(\tR\x08taskType\x12#\n\rresource_meta\x18\x02 \x01(\x0cR\x0cresourceMeta\"G\n\x0fGetTaskResponse\x12\x34\n\x08resource\x18\x01 \x01(\x0b\x32\x18.flyteidl.admin.ResourceR\x08resource\"l\n\x08Resource\x12+\n\x05state\x18\x01 \x01(\x0e\x32\x15.flyteidl.admin.StateR\x05state\x12\x33\n\x07outputs\x18\x02 \x01(\x0b\x32\x19.flyteidl.core.LiteralMapR\x07outputs\"U\n\x11\x44\x65leteTaskRequest\x12\x1b\n\ttask_type\x18\x01 \x01(\tR\x08taskType\x12#\n\rresource_meta\x18\x02 \x01(\x0cR\x0cresourceMeta\"\x14\n\x12\x44\x65leteTaskResponse\"{\n\rDoTaskRequest\x12\x31\n\x06inputs\x18\x01 \x01(\x0b\x32\x19.flyteidl.core.LiteralMapR\x06inputs\x12\x37\n\x08template\x18\x02 \x01(\x0b\x32\x1b.flyteidl.core.TaskTemplateR\x08template\"F\n\x0e\x44oTaskResponse\x12\x34\n\x08resource\x18\x01 \x01(\x0b\x32\x18.flyteidl.admin.ResourceR\x08resource*^\n\x05State\x12\x15\n\x11RETRYABLE_FAILURE\x10\x00\x12\x15\n\x11PERMANENT_FAILURE\x10\x01\x12\x0b\n\x07PENDING\x10\x02\x12\x0b\n\x07RUNNING\x10\x03\x12\r\n\tSUCCEEDED\x10\x04\x42\xb0\x01\n\x12\x63om.flyteidl.adminB\nAgentProtoP\x01Z5github.com/flyteorg/flyteidl/gen/pb-go/flyteidl/admin\xa2\x02\x03\x46\x41X\xaa\x02\x0e\x46lyteidl.Admin\xca\x02\x0e\x46lyteidl\\Admin\xe2\x02\x1a\x46lyteidl\\Admin\\GPBMetadata\xea\x02\x0f\x46lyteidl::Adminb\x06proto3')
 
 _globals = globals()
 _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
@@ -32,8 +32,8 @@
   _TASKEXECUTIONMETADATA_ANNOTATIONSENTRY._serialized_options = b'8\001'
   _TASKEXECUTIONMETADATA_ENVIRONMENTVARIABLESENTRY._options = None
   _TASKEXECUTIONMETADATA_ENVIRONMENTVARIABLESENTRY._serialized_options = b'8\001'
-  _globals['_STATE']._serialized_start=1530
-  _globals['_STATE']._serialized_end=1624
+  _globals['_STATE']._serialized_start=1727
+  _globals['_STATE']._serialized_end=1821
   _globals['_TASKEXECUTIONMETADATA']._serialized_start=167
   _globals['_TASKEXECUTIONMETADATA']._serialized_end=831
   _globals['_TASKEXECUTIONMETADATA_LABELSENTRY']._serialized_start=637
@@ -56,4 +56,8 @@
   _globals['_DELETETASKREQUEST']._serialized_end=1506
   _globals['_DELETETASKRESPONSE']._serialized_start=1508
   _globals['_DELETETASKRESPONSE']._serialized_end=1528
+  _globals['_DOTASKREQUEST']._serialized_start=1530
+  _globals['_DOTASKREQUEST']._serialized_end=1653
+  _globals['_DOTASKRESPONSE']._serialized_start=1655
+  _globals['_DOTASKRESPONSE']._serialized_end=1725
 # @@protoc_insertion_point(module_scope)
diff --git a/flyteidl/gen/pb_python/flyteidl/admin/agent_pb2.pyi b/flyteidl/gen/pb_python/flyteidl/admin/agent_pb2.pyi
index 830158d0b2..dcf01cd279 100644
--- a/flyteidl/gen/pb_python/flyteidl/admin/agent_pb2.pyi
+++ b/flyteidl/gen/pb_python/flyteidl/admin/agent_pb2.pyi
@@ -111,3 +111,17 @@ class DeleteTaskRequest(_message.Message):
 class DeleteTaskResponse(_message.Message):
     __slots__ = []
     def __init__(self) -> None: ...
+
+class DoTaskRequest(_message.Message):
+    __slots__ = ["inputs", "template"]
+    INPUTS_FIELD_NUMBER: _ClassVar[int]
+    TEMPLATE_FIELD_NUMBER: _ClassVar[int]
+    inputs: _literals_pb2.LiteralMap
+    template: _tasks_pb2.TaskTemplate
+    def __init__(self, inputs: _Optional[_Union[_literals_pb2.LiteralMap, _Mapping]] = ..., template: _Optional[_Union[_tasks_pb2.TaskTemplate, _Mapping]] = ...) -> None: ...
+
+class DoTaskResponse(_message.Message):
+    __slots__ = ["resource"]
+    RESOURCE_FIELD_NUMBER: _ClassVar[int]
+    resource: Resource
+    def __init__(self, resource: _Optional[_Union[Resource, _Mapping]] = ...) -> None: ...
diff --git a/flyteidl/gen/pb_python/flyteidl/service/agent_pb2.py b/flyteidl/gen/pb_python/flyteidl/service/agent_pb2.py
index f4510ca2f2..883503e675 100644
--- a/flyteidl/gen/pb_python/flyteidl/service/agent_pb2.py
+++ b/flyteidl/gen/pb_python/flyteidl/service/agent_pb2.py
@@ -14,7 +14,7 @@
 from flyteidl.admin import agent_pb2 as flyteidl_dot_admin_dot_agent__pb2
 
 
-DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1c\x66lyteidl/service/agent.proto\x12\x10\x66lyteidl.service\x1a\x1a\x66lyteidl/admin/agent.proto2\x8f\x02\n\x11\x41syncAgentService\x12U\n\nCreateTask\x12!.flyteidl.admin.CreateTaskRequest\x1a\".flyteidl.admin.CreateTaskResponse\"\x00\x12L\n\x07GetTask\x12\x1e.flyteidl.admin.GetTaskRequest\x1a\x1f.flyteidl.admin.GetTaskResponse\"\x00\x12U\n\nDeleteTask\x12!.flyteidl.admin.DeleteTaskRequest\x1a\".flyteidl.admin.DeleteTaskResponse\"\x00\x42\xbc\x01\n\x14\x63om.flyteidl.serviceB\nAgentProtoP\x01Z7github.com/flyteorg/flyteidl/gen/pb-go/flyteidl/service\xa2\x02\x03\x46SX\xaa\x02\x10\x46lyteidl.Service\xca\x02\x10\x46lyteidl\\Service\xe2\x02\x1c\x46lyteidl\\Service\\GPBMetadata\xea\x02\x11\x46lyteidl::Serviceb\x06proto3')
+DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1c\x66lyteidl/service/agent.proto\x12\x10\x66lyteidl.service\x1a\x1a\x66lyteidl/admin/agent.proto2\xda\x02\n\x11\x41syncAgentService\x12U\n\nCreateTask\x12!.flyteidl.admin.CreateTaskRequest\x1a\".flyteidl.admin.CreateTaskResponse\"\x00\x12L\n\x07GetTask\x12\x1e.flyteidl.admin.GetTaskRequest\x1a\x1f.flyteidl.admin.GetTaskResponse\"\x00\x12U\n\nDeleteTask\x12!.flyteidl.admin.DeleteTaskRequest\x1a\".flyteidl.admin.DeleteTaskResponse\"\x00\x12I\n\x06\x44oTask\x12\x1d.flyteidl.admin.DoTaskRequest\x1a\x1e.flyteidl.admin.DoTaskResponse\"\x00\x42\xbc\x01\n\x14\x63om.flyteidl.serviceB\nAgentProtoP\x01Z7github.com/flyteorg/flyteidl/gen/pb-go/flyteidl/service\xa2\x02\x03\x46SX\xaa\x02\x10\x46lyteidl.Service\xca\x02\x10\x46lyteidl\\Service\xe2\x02\x1c\x46lyteidl\\Service\\GPBMetadata\xea\x02\x11\x46lyteidl::Serviceb\x06proto3')
 
 _globals = globals()
 _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
@@ -24,5 +24,5 @@
   DESCRIPTOR._options = None
   DESCRIPTOR._serialized_options = b'\n\024com.flyteidl.serviceB\nAgentProtoP\001Z7github.com/flyteorg/flyteidl/gen/pb-go/flyteidl/service\242\002\003FSX\252\002\020Flyteidl.Service\312\002\020Flyteidl\\Service\342\002\034Flyteidl\\Service\\GPBMetadata\352\002\021Flyteidl::Service'
   _globals['_ASYNCAGENTSERVICE']._serialized_start=79
-  _globals['_ASYNCAGENTSERVICE']._serialized_end=350
+  _globals['_ASYNCAGENTSERVICE']._serialized_end=425
 # @@protoc_insertion_point(module_scope)
diff --git a/flyteidl/gen/pb_python/flyteidl/service/agent_pb2_grpc.py b/flyteidl/gen/pb_python/flyteidl/service/agent_pb2_grpc.py
index 3ef2af39c4..7600774187 100644
--- a/flyteidl/gen/pb_python/flyteidl/service/agent_pb2_grpc.py
+++ b/flyteidl/gen/pb_python/flyteidl/service/agent_pb2_grpc.py
@@ -30,6 +30,11 @@ def __init__(self, channel):
                 request_serializer=flyteidl_dot_admin_dot_agent__pb2.DeleteTaskRequest.SerializeToString,
                 response_deserializer=flyteidl_dot_admin_dot_agent__pb2.DeleteTaskResponse.FromString,
                 )
+        self.DoTask = channel.unary_unary(
+                '/flyteidl.service.AsyncAgentService/DoTask',
+                request_serializer=flyteidl_dot_admin_dot_agent__pb2.DoTaskRequest.SerializeToString,
+                response_deserializer=flyteidl_dot_admin_dot_agent__pb2.DoTaskResponse.FromString,
+                )
 
 
 class AsyncAgentServiceServicer(object):
@@ -57,6 +62,13 @@ def DeleteTask(self, request, context):
         context.set_details('Method not implemented!')
         raise NotImplementedError('Method not implemented!')
 
+    def DoTask(self, request, context):
+        """Do a job and get response from the agent server.
+        """
+        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+        context.set_details('Method not implemented!')
+        raise NotImplementedError('Method not implemented!')
+
 
 def add_AsyncAgentServiceServicer_to_server(servicer, server):
     rpc_method_handlers = {
@@ -75,6 +87,11 @@ def add_AsyncAgentServiceServicer_to_server(servicer, server):
                     request_deserializer=flyteidl_dot_admin_dot_agent__pb2.DeleteTaskRequest.FromString,
                     response_serializer=flyteidl_dot_admin_dot_agent__pb2.DeleteTaskResponse.SerializeToString,
             ),
+            'DoTask': grpc.unary_unary_rpc_method_handler(
+                    servicer.DoTask,
+                    request_deserializer=flyteidl_dot_admin_dot_agent__pb2.DoTaskRequest.FromString,
+                    response_serializer=flyteidl_dot_admin_dot_agent__pb2.DoTaskResponse.SerializeToString,
+            ),
     }
     generic_handler = grpc.method_handlers_generic_handler(
             'flyteidl.service.AsyncAgentService', rpc_method_handlers)
@@ -136,3 +153,20 @@ def DeleteTask(request,
             flyteidl_dot_admin_dot_agent__pb2.DeleteTaskResponse.FromString,
             options, channel_credentials,
             insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
+
+    @staticmethod
+    def DoTask(request,
+            target,
+            options=(),
+            channel_credentials=None,
+            call_credentials=None,
+            insecure=False,
+            compression=None,
+            wait_for_ready=None,
+            timeout=None,
+            metadata=None):
+        return grpc.experimental.unary_unary(request, target, '/flyteidl.service.AsyncAgentService/DoTask',
+            flyteidl_dot_admin_dot_agent__pb2.DoTaskRequest.SerializeToString,
+            flyteidl_dot_admin_dot_agent__pb2.DoTaskResponse.FromString,
+            options, channel_credentials,
+            insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
diff --git a/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/admin_launch_plan_spec.py b/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/admin_launch_plan_spec.py
index 8eb1aed4fd..5fea5a8e2b 100644
--- a/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/admin_launch_plan_spec.py
+++ b/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/admin_launch_plan_spec.py
@@ -181,7 +181,7 @@ def entity_metadata(self, entity_metadata):
     def default_inputs(self):
         """Gets the default_inputs of this AdminLaunchPlanSpec.  # noqa: E501
 
-        Input values to be passed for the execution. These can be overriden when an execution is created with this launch plan.  # noqa: E501
+        Input values to be passed for the execution. These can be overridden when an execution is created with this launch plan.  # noqa: E501
 
         :return: The default_inputs of this AdminLaunchPlanSpec.  # noqa: E501
         :rtype: CoreParameterMap
@@ -192,7 +192,7 @@ def default_inputs(self):
     def default_inputs(self, default_inputs):
         """Sets the default_inputs of this AdminLaunchPlanSpec.
 
-        Input values to be passed for the execution. These can be overriden when an execution is created with this launch plan.  # noqa: E501
+        Input values to be passed for the execution. These can be overridden when an execution is created with this launch plan.  # noqa: E501
 
         :param default_inputs: The default_inputs of this AdminLaunchPlanSpec.  # noqa: E501
         :type: CoreParameterMap
@@ -204,7 +204,7 @@ def default_inputs(self, default_inputs):
     def fixed_inputs(self):
         """Gets the fixed_inputs of this AdminLaunchPlanSpec.  # noqa: E501
 
-        Fixed, non-overridable inputs for the Launch Plan. These can not be overriden when an execution is created with this launch plan.  # noqa: E501
+        Fixed, non-overridable inputs for the Launch Plan. These can not be overridden when an execution is created with this launch plan.  # noqa: E501
 
         :return: The fixed_inputs of this AdminLaunchPlanSpec.  # noqa: E501
         :rtype: CoreLiteralMap
@@ -215,7 +215,7 @@ def fixed_inputs(self):
     def fixed_inputs(self, fixed_inputs):
         """Sets the fixed_inputs of this AdminLaunchPlanSpec.
 
-        Fixed, non-overridable inputs for the Launch Plan. These can not be overriden when an execution is created with this launch plan.  # noqa: E501
+        Fixed, non-overridable inputs for the Launch Plan. These can not be overridden when an execution is created with this launch plan.  # noqa: E501
 
         :param fixed_inputs: The fixed_inputs of this AdminLaunchPlanSpec.  # noqa: E501
         :type: CoreLiteralMap
diff --git a/flyteidl/gen/pb_rust/datacatalog.rs b/flyteidl/gen/pb_rust/datacatalog.rs
index 01464d01c8..383db44fe3 100644
--- a/flyteidl/gen/pb_rust/datacatalog.rs
+++ b/flyteidl/gen/pb_rust/datacatalog.rs
@@ -187,7 +187,7 @@ pub struct ReservationId {
     #[prost(string, tag="2")]
     pub tag_name: ::prost::alloc::string::String,
 }
-/// Try to acquire or extend an artifact reservation. If an active reservation exists, retreive that instance.
+/// Try to acquire or extend an artifact reservation. If an active reservation exists, retrieve that instance.
 #[allow(clippy::derive_partial_eq_without_eq)]
 #[derive(Clone, PartialEq, ::prost::Message)]
 pub struct GetOrExtendReservationRequest {
diff --git a/flyteidl/gen/pb_rust/flyteidl.admin.rs b/flyteidl/gen/pb_rust/flyteidl.admin.rs
index a6acaa9277..40e7d0109b 100644
--- a/flyteidl/gen/pb_rust/flyteidl.admin.rs
+++ b/flyteidl/gen/pb_rust/flyteidl.admin.rs
@@ -95,6 +95,25 @@ pub struct DeleteTaskRequest {
 #[derive(Clone, PartialEq, ::prost::Message)]
 pub struct DeleteTaskResponse {
 }
+/// A message used to do a task
+#[allow(clippy::derive_partial_eq_without_eq)]
+#[derive(Clone, PartialEq, ::prost::Message)]
+pub struct DoTaskRequest {
+    /// The inputs required to start the execution. All required inputs must be
+    /// included in this map. If not required and not provided, defaults apply.
+    /// +optional
+    #[prost(message, optional, tag="1")]
+    pub inputs: ::core::option::Option,
+    /// Template of the task that encapsulates all the metadata of the task.
+    #[prost(message, optional, tag="2")]
+    pub template: ::core::option::Option,
+}
+#[allow(clippy::derive_partial_eq_without_eq)]
+#[derive(Clone, PartialEq, ::prost::Message)]
+pub struct DoTaskResponse {
+    #[prost(message, optional, tag="1")]
+    pub resource: ::core::option::Option,
+}
 /// The state of the execution is used to control its visibility in the UI/CLI.
 #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
 #[repr(i32)]
@@ -1434,11 +1453,11 @@ pub struct LaunchPlanSpec {
     #[prost(message, optional, tag="2")]
     pub entity_metadata: ::core::option::Option,
     /// Input values to be passed for the execution.
-    /// These can be overriden when an execution is created with this launch plan.
+    /// These can be overridden when an execution is created with this launch plan.
     #[prost(message, optional, tag="3")]
     pub default_inputs: ::core::option::Option,
     /// Fixed, non-overridable inputs for the Launch Plan.
-    /// These can not be overriden when an execution is created with this launch plan.
+    /// These can not be overridden when an execution is created with this launch plan.
     #[prost(message, optional, tag="4")]
     pub fixed_inputs: ::core::option::Option,
     /// String to indicate the role to use to execute the workflow underneath
@@ -2412,7 +2431,7 @@ pub struct ProjectDomainAttributesDeleteRequest {
 #[derive(Clone, PartialEq, ::prost::Message)]
 pub struct ProjectDomainAttributesDeleteResponse {
 }
-/// SignalGetOrCreateRequest represents a request structure to retrive or create a signal.
+/// SignalGetOrCreateRequest represents a request structure to retrieve or create a signal.
 /// See :ref:`ref_flyteidl.admin.Signal` for more details
 #[allow(clippy::derive_partial_eq_without_eq)]
 #[derive(Clone, PartialEq, ::prost::Message)]
@@ -2871,7 +2890,7 @@ pub struct WorkflowErrorExistsIdenticalStructure {
     #[prost(message, optional, tag="1")]
     pub id: ::core::option::Option,
 }
-/// When a CreateWorkflowRequest failes due to matching id
+/// When a CreateWorkflowRequest fails due to matching id
 #[allow(clippy::derive_partial_eq_without_eq)]
 #[derive(Clone, PartialEq, ::prost::Message)]
 pub struct CreateWorkflowFailureReason {
diff --git a/flyteidl/gen/pb_rust/flyteidl.service.rs b/flyteidl/gen/pb_rust/flyteidl.service.rs
index 197e99055a..c427170333 100644
--- a/flyteidl/gen/pb_rust/flyteidl.service.rs
+++ b/flyteidl/gen/pb_rust/flyteidl.service.rs
@@ -204,7 +204,7 @@ pub struct PreSignedUrLs {
 #[derive(Clone, PartialEq, ::prost::Message)]
 pub struct GetDataRequest {
     /// A unique identifier in the form of flyte:// that uniquely, for a given Flyte
-    /// backend, identifies a Flyte artifact (\[i\]nput, \[o\]utput, flyte \[d\]eck, etc.).
+    /// backend, identifies a Flyte artifact (\[i\]nput, \[o\]output, flyte \[d\]eck, etc.).
     /// e.g. flyte://v1/proj/development/execid/n2/0/i (for 0th task execution attempt input)
     ///       flyte://v1/proj/development/execid/n2/i (for node execution input)
     ///       flyte://v1/proj/development/execid/n2/o/o3 (the o3 output of the second node)
diff --git a/flyteidl/protos/flyteidl/admin/agent.proto b/flyteidl/protos/flyteidl/admin/agent.proto
index e9a4849172..a16d7bf402 100644
--- a/flyteidl/protos/flyteidl/admin/agent.proto
+++ b/flyteidl/protos/flyteidl/admin/agent.proto
@@ -86,3 +86,18 @@ message DeleteTaskRequest {
 // Response to delete a task.
 message DeleteTaskResponse {
 }
+
+
+// A message used to do a task
+message DoTaskRequest {
+  // The inputs required to start the execution. All required inputs must be
+  // included in this map. If not required and not provided, defaults apply.
+  // +optional
+  core.LiteralMap inputs = 1;
+  // Template of the task that encapsulates all the metadata of the task.
+  core.TaskTemplate template = 2;
+}
+
+message DoTaskResponse {
+  Resource resource = 1;
+}
\ No newline at end of file
diff --git a/flyteidl/protos/flyteidl/service/agent.proto b/flyteidl/protos/flyteidl/service/agent.proto
index 2a1a143705..05d21f3f36 100644
--- a/flyteidl/protos/flyteidl/service/agent.proto
+++ b/flyteidl/protos/flyteidl/service/agent.proto
@@ -12,4 +12,6 @@ service AsyncAgentService {
   rpc GetTask (flyteidl.admin.GetTaskRequest) returns (flyteidl.admin.GetTaskResponse){};
   // Delete the task resource.
   rpc DeleteTask (flyteidl.admin.DeleteTaskRequest) returns (flyteidl.admin.DeleteTaskResponse){};
+  // Do a job and get response from the agent server.
+  rpc DoTask (flyteidl.admin.DoTaskRequest) returns (flyteidl.admin.DoTaskResponse){};
 }
diff --git a/flyteplugins/go/tasks/pluginmachinery/internal/webapi/core.go b/flyteplugins/go/tasks/pluginmachinery/internal/webapi/core.go
index 91a171bbec..ecf2b11f8f 100644
--- a/flyteplugins/go/tasks/pluginmachinery/internal/webapi/core.go
+++ b/flyteplugins/go/tasks/pluginmachinery/internal/webapi/core.go
@@ -8,15 +8,15 @@ import (
 
 	"k8s.io/utils/clock"
 
-	stdErrs "github.com/flyteorg/flyte/flytestdlib/errors"
+	stdErrs "github.com/flyteorg/flytestdlib/errors"
 
-	"github.com/flyteorg/flyte/flytestdlib/cache"
+	"github.com/flyteorg/flytestdlib/cache"
 
-	"github.com/flyteorg/flyte/flyteplugins/go/tasks/errors"
-	"github.com/flyteorg/flyte/flytestdlib/logger"
+	"github.com/flyteorg/flyteplugins/go/tasks/errors"
+	"github.com/flyteorg/flytestdlib/logger"
 
-	"github.com/flyteorg/flyte/flyteplugins/go/tasks/pluginmachinery/core"
-	"github.com/flyteorg/flyte/flyteplugins/go/tasks/pluginmachinery/webapi"
+	"github.com/flyteorg/flyteplugins/go/tasks/pluginmachinery/core"
+	"github.com/flyteorg/flyteplugins/go/tasks/pluginmachinery/webapi"
 )
 
 const (
@@ -36,6 +36,7 @@ const (
 type CorePlugin struct {
 	id             string
 	p              webapi.AsyncPlugin
+	sp             webapi.SyncPlugin
 	cache          cache.AutoRefresh
 	tokenAllocator tokenAllocator
 	metrics        Metrics
@@ -68,12 +69,28 @@ func (c CorePlugin) GetProperties() core.PluginProperties {
 	return core.PluginProperties{}
 }
 
+// syncHandle
+// TODO: ADD Sync Handle
 func (c CorePlugin) Handle(ctx context.Context, tCtx core.TaskExecutionContext) (core.Transition, error) {
 	incomingState, err := c.unmarshalState(ctx, tCtx.PluginStateReader())
 	if err != nil {
 		return core.UnknownTransition, err
 	}
 
+	taskTemplate, err := tCtx.TaskReader().Read(ctx)
+
+	if taskTemplate.Type == "dispatcher" {
+		res, err := c.sp.Do(ctx, tCtx)
+		if err != nil {
+			return core.UnknownTransition, err
+		}
+		logger.Infof(ctx, "@@@ SyncPlugin [%v] returned result: %v", c.GetID(), res)
+		// if err := tCtx.PluginStateWriter().Put(pluginStateVersion, nextState); err != nil {
+		// 	return core.UnknownTransition, err
+		// }
+		return core.DoTransition(core.PhaseInfoSuccess(nil)), nil
+	}
+
 	var nextState *State
 	var phaseInfo core.PhaseInfo
 	switch incomingState.Phase {
@@ -165,7 +182,7 @@ func createRemotePlugin(pluginEntry webapi.PluginEntry, c clock.Clock) core.Plug
 		RegisteredTaskTypes: pluginEntry.SupportedTaskTypes,
 		LoadPlugin: func(ctx context.Context, iCtx core.SetupContext) (
 			core.Plugin, error) {
-			p, err := pluginEntry.PluginLoader(ctx, iCtx)
+			p, sp, err := pluginEntry.PluginLoader(ctx, iCtx)
 			if err != nil {
 				return nil, err
 			}
@@ -205,6 +222,7 @@ func createRemotePlugin(pluginEntry webapi.PluginEntry, c clock.Clock) core.Plug
 			return CorePlugin{
 				id:             pluginEntry.ID,
 				p:              p,
+				sp:             sp,
 				cache:          resourceCache,
 				metrics:        newMetrics(iCtx.MetricsScope()),
 				tokenAllocator: newTokenAllocator(c),

From adc1c2c9d0d496a872b1164ac6b51e1f015bab57 Mon Sep 17 00:00:00 2001
From: Future Outlier 
Date: Mon, 2 Oct 2023 16:38:44 +0800
Subject: [PATCH 02/48] chatgpt succeed

Signed-off-by: Future Outlier 
---
 .../pluginmachinery/internal/webapi/core.go   | 69 +++++++++-----
 .../go/tasks/pluginmachinery/webapi/plugin.go |  3 +-
 .../go/tasks/plugins/webapi/agent/plugin.go   | 90 +++++++++++++++++--
 .../go/tasks/plugins/webapi/athena/plugin.go  |  8 +-
 .../tasks/plugins/webapi/bigquery/plugin.go   |  8 +-
 .../tasks/plugins/webapi/databricks/plugin.go |  4 +-
 .../tasks/plugins/webapi/snowflake/plugin.go  |  4 +-
 7 files changed, 145 insertions(+), 41 deletions(-)

diff --git a/flyteplugins/go/tasks/pluginmachinery/internal/webapi/core.go b/flyteplugins/go/tasks/pluginmachinery/internal/webapi/core.go
index ecf2b11f8f..eed7997db8 100644
--- a/flyteplugins/go/tasks/pluginmachinery/internal/webapi/core.go
+++ b/flyteplugins/go/tasks/pluginmachinery/internal/webapi/core.go
@@ -6,17 +6,14 @@ import (
 	"fmt"
 	"time"
 
+	"github.com/flyteorg/flyte/flytestdlib/cache"
+	stdErrs "github.com/flyteorg/flyte/flytestdlib/errors"
 	"k8s.io/utils/clock"
 
-	stdErrs "github.com/flyteorg/flytestdlib/errors"
-
-	"github.com/flyteorg/flytestdlib/cache"
-
-	"github.com/flyteorg/flyteplugins/go/tasks/errors"
-	"github.com/flyteorg/flytestdlib/logger"
-
-	"github.com/flyteorg/flyteplugins/go/tasks/pluginmachinery/core"
-	"github.com/flyteorg/flyteplugins/go/tasks/pluginmachinery/webapi"
+	"github.com/flyteorg/flyte/flyteplugins/go/tasks/errors"
+	"github.com/flyteorg/flyte/flyteplugins/go/tasks/pluginmachinery/core"
+	"github.com/flyteorg/flyte/flyteplugins/go/tasks/pluginmachinery/webapi"
+	"github.com/flyteorg/flyte/flytestdlib/logger"
 )
 
 const (
@@ -69,26 +66,55 @@ func (c CorePlugin) GetProperties() core.PluginProperties {
 	return core.PluginProperties{}
 }
 
-// syncHandle
-// TODO: ADD Sync Handle
-func (c CorePlugin) Handle(ctx context.Context, tCtx core.TaskExecutionContext) (core.Transition, error) {
+func (c CorePlugin) syncHandle(ctx context.Context, tCtx core.TaskExecutionContext) (core.Transition, error) {
 	incomingState, err := c.unmarshalState(ctx, tCtx.PluginStateReader())
 	if err != nil {
 		return core.UnknownTransition, err
 	}
 
+	var state *State
+	state = &incomingState
+	// TODO: This is incoming State
+	newCacheItem := CacheItem{
+		State: *state,
+	}
+	cacheItemID := tCtx.TaskExecutionMetadata().GetTaskExecutionID().GetGeneratedName()
+	item, err := c.cache.GetOrCreate(cacheItemID, newCacheItem)
+	cacheItem, ok := item.(CacheItem)
+	if !ok {
+		logger.Errorf(ctx, "Error casting cache object into ExecutionState")
+		return core.UnknownTransition, err
+	}
+
+	res, err := c.sp.Do(ctx, tCtx)
+	if err != nil {
+		return core.UnknownTransition, err
+	}
+
+	cacheItem.Resource = res
+
+	phase := PhaseSucceeded
+	cacheItem.Phase = phase
+	err = c.cache.DeleteDelayed(cacheItemID)
+
+	if err := tCtx.PluginStateWriter().Put(pluginStateVersion, cacheItem.State); err != nil {
+		return core.UnknownTransition, err
+	}
+
+	taskInfo := &core.TaskInfo{}
+	return core.DoTransition(core.PhaseInfoSuccess(taskInfo)), nil
+}
+
+func (c CorePlugin) Handle(ctx context.Context, tCtx core.TaskExecutionContext) (core.Transition, error) {
 	taskTemplate, err := tCtx.TaskReader().Read(ctx)
 
 	if taskTemplate.Type == "dispatcher" {
-		res, err := c.sp.Do(ctx, tCtx)
-		if err != nil {
-			return core.UnknownTransition, err
-		}
-		logger.Infof(ctx, "@@@ SyncPlugin [%v] returned result: %v", c.GetID(), res)
-		// if err := tCtx.PluginStateWriter().Put(pluginStateVersion, nextState); err != nil {
-		// 	return core.UnknownTransition, err
-		// }
-		return core.DoTransition(core.PhaseInfoSuccess(nil)), nil
+		return c.syncHandle(ctx, tCtx)
+	}
+
+	incomingState, err := c.unmarshalState(ctx, tCtx.PluginStateReader())
+	if err != nil {
+		return core.UnknownTransition, err
 	}
 
 	var nextState *State
@@ -163,6 +189,7 @@ func validateRangeFloat64(fieldName string, min, max, provided float64) error {
 
 	return nil
 }
+
 func validateConfig(cfg webapi.PluginConfig) error {
 	errs := stdErrs.ErrorCollection{}
 	errs.Append(validateRangeInt("cache size", minCacheSize, maxCacheSize, cfg.Caching.Size))
diff --git a/flyteplugins/go/tasks/pluginmachinery/webapi/plugin.go b/flyteplugins/go/tasks/pluginmachinery/webapi/plugin.go
index f6d9906594..58f6ad6372 100644
--- a/flyteplugins/go/tasks/pluginmachinery/webapi/plugin.go
+++ b/flyteplugins/go/tasks/pluginmachinery/webapi/plugin.go
@@ -22,7 +22,7 @@ import (
 
 // A Lazy loading function, that will load the plugin. Plugins should be initialized in this method. It is guaranteed
 // that the plugin loader will be called before any Handle/Abort/Finalize functions are invoked
-type PluginLoader func(ctx context.Context, iCtx PluginSetupContext) (AsyncPlugin, error)
+type PluginLoader func(ctx context.Context, iCtx PluginSetupContext) (AsyncPlugin, SyncPlugin, error)
 
 // PluginEntry is a structure that is used to indicate to the system a K8s plugin
 type PluginEntry struct {
@@ -151,4 +151,5 @@ type SyncPlugin interface {
 
 	// Do performs the action associated with this plugin.
 	Do(ctx context.Context, tCtx TaskExecutionContext) (phase pluginsCore.PhaseInfo, err error)
+	Do(ctx context.Context, tCtx TaskExecutionContext) (latest Resource, err error)
 }
diff --git a/flyteplugins/go/tasks/plugins/webapi/agent/plugin.go b/flyteplugins/go/tasks/plugins/webapi/agent/plugin.go
index 9713ba90f3..92d877e1a9 100644
--- a/flyteplugins/go/tasks/plugins/webapi/agent/plugin.go
+++ b/flyteplugins/go/tasks/plugins/webapi/agent/plugin.go
@@ -61,6 +61,77 @@ func (p Plugin) ResourceRequirements(_ context.Context, _ webapi.TaskExecutionCo
 	return "default", p.cfg.ResourceConstraints, nil
 }
 
+func (p Plugin) Do(ctx context.Context, taskCtx webapi.TaskExecutionContext) (latest webapi.Resource, err error) {
+	// write the resource here
+	taskTemplate, err := taskCtx.TaskReader().Read(ctx)
+	if err != nil {
+		return nil, err
+	}
+
+	inputs, err := taskCtx.InputReader().Get(ctx)
+	if err != nil {
+		return nil, err
+	}
+
+	if taskTemplate.GetContainer() != nil {
+		templateParameters := template.Parameters{
+			TaskExecMetadata: taskCtx.TaskExecutionMetadata(),
+			Inputs:           taskCtx.InputReader(),
+			OutputPath:       taskCtx.OutputWriter(),
+			Task:             taskCtx.TaskReader(),
+		}
+		modifiedArgs, err := template.Render(ctx, taskTemplate.GetContainer().Args, templateParameters)
+		if err != nil {
+			return nil, err
+		}
+		taskTemplate.GetContainer().Args = modifiedArgs
+	}
+
+	agent, err := getFinalAgent(taskTemplate.Type, p.cfg)
+	if err != nil {
+		return nil, fmt.Errorf("failed to find agent agent with error: %v", err)
+	}
+
+	client, err := p.getClient(ctx, agent, p.connectionCache)
+	if err != nil {
+		return nil, fmt.Errorf("failed to connect to agent with error: %v", err)
+	}
+
+	finalCtx, cancel := getFinalContext(ctx, "DoTask", agent)
+
+	defer cancel()
+
+	res, err := client.DoTask(finalCtx, &admin.DoTaskRequest{Inputs: inputs, Template: taskTemplate})
+	if err != nil {
+		return nil, err
+	}
+
+	resource := &ResourceWrapper{
+		State:   res.Resource.State,
+		Outputs: res.Resource.Outputs,
+	}
+
+	// Write the output
+	if taskTemplate.Interface == nil || taskTemplate.Interface.Outputs == nil || taskTemplate.Interface.Outputs.Variables == nil {
+		logger.Debugf(ctx, "The task declares no outputs. Skipping writing the outputs.")
+		return resource, nil
+	}
+
+	var opReader io.OutputReader
+	if resource.Outputs != nil {
+		logger.Debugf(ctx, "Agent returned an output.")
+		opReader = ioutils.NewInMemoryOutputReader(resource.Outputs, nil, nil)
+	} else {
+		logger.Debugf(ctx, "Agent didn't return any output, assuming file based outputs.")
+		opReader = ioutils.NewRemoteFileOutputReader(ctx, taskCtx.DataStore(), taskCtx.OutputWriter(), taskCtx.MaxDatasetSizeBytes())
+	}
+
+	return &ResourceWrapper{
+		State:   res.Resource.State,
+		Outputs: res.Resource.Outputs,
+	}, taskCtx.OutputWriter().Put(ctx, opReader)
+}
+
 func (p Plugin) Create(ctx context.Context, taskCtx webapi.TaskExecutionContextReader) (webapi.ResourceMeta,
 	webapi.Resource, error) {
 	taskTemplate, err := taskCtx.TaskReader().Read(ctx)
@@ -203,7 +274,7 @@ func writeOutput(ctx context.Context, taskCtx webapi.StatusContext, resource *Re
 
 	var opReader io.OutputReader
 	if resource.Outputs != nil {
-		logger.Debugf(ctx, "Agent returned an output")
+		logger.Debugf(ctx, "Agent returned an output.")
 		opReader = ioutils.NewInMemoryOutputReader(resource.Outputs, nil, nil)
 	} else {
 		logger.Debugf(ctx, "Agent didn't return any output, assuming file based outputs.")
@@ -306,13 +377,18 @@ func newAgentPlugin(supportedTaskTypes SupportedTaskTypes) webapi.PluginEntry {
 	return webapi.PluginEntry{
 		ID:                 "agent-service",
 		SupportedTaskTypes: supportedTaskTypes,
-		PluginLoader: func(ctx context.Context, iCtx webapi.PluginSetupContext) (webapi.AsyncPlugin, error) {
+		PluginLoader: func(ctx context.Context, iCtx webapi.PluginSetupContext) (webapi.AsyncPlugin, webapi.SyncPlugin, error) {
 			return &Plugin{
-				metricScope:     iCtx.MetricsScope(),
-				cfg:             GetConfig(),
-				getClient:       getClientFunc,
-				connectionCache: make(map[*Agent]*grpc.ClientConn),
-			}, nil
+					metricScope:     iCtx.MetricsScope(),
+					cfg:             GetConfig(),
+					getClient:       getClientFunc,
+					connectionCache: make(map[*Agent]*grpc.ClientConn),
+				}, &Plugin{
+					metricScope:     iCtx.MetricsScope(),
+					cfg:             GetConfig(),
+					getClient:       getClientFunc,
+					connectionCache: make(map[*Agent]*grpc.ClientConn),
+				}, nil
 		},
 	}
 }
diff --git a/flyteplugins/go/tasks/plugins/webapi/athena/plugin.go b/flyteplugins/go/tasks/plugins/webapi/athena/plugin.go
index 983cc66d97..6dbd0b3245 100644
--- a/flyteplugins/go/tasks/plugins/webapi/athena/plugin.go
+++ b/flyteplugins/go/tasks/plugins/webapi/athena/plugin.go
@@ -200,10 +200,10 @@ func createTaskInfo(queryID string, cfg awsSdk.Config) *core.TaskInfo {
 	}
 }
 
-func NewPlugin(_ context.Context, cfg *Config, awsConfig *aws.Config, metricScope promutils.Scope) (Plugin, error) {
+func NewPlugin(_ context.Context, cfg *Config, awsConfig *aws.Config, metricScope promutils.Scope) (Plugin, webapi.SyncPlugin, error) {
 	sdkCfg, err := awsConfig.GetSdkConfig()
 	if err != nil {
-		return Plugin{}, err
+		return Plugin{}, nil, err
 	}
 
 	return Plugin{
@@ -211,14 +211,14 @@ func NewPlugin(_ context.Context, cfg *Config, awsConfig *aws.Config, metricScop
 		client:      athena.NewFromConfig(sdkCfg),
 		cfg:         cfg,
 		awsConfig:   sdkCfg,
-	}, nil
+	}, nil, nil
 }
 
 func init() {
 	pluginmachinery.PluginRegistry().RegisterRemotePlugin(webapi.PluginEntry{
 		ID:                 "athena",
 		SupportedTaskTypes: []core.TaskType{"hive", "presto"},
-		PluginLoader: func(ctx context.Context, iCtx webapi.PluginSetupContext) (webapi.AsyncPlugin, error) {
+		PluginLoader: func(ctx context.Context, iCtx webapi.PluginSetupContext) (webapi.AsyncPlugin, webapi.SyncPlugin, error) {
 			return NewPlugin(ctx, GetConfig(), aws.GetConfig(), iCtx.MetricsScope())
 		},
 	})
diff --git a/flyteplugins/go/tasks/plugins/webapi/bigquery/plugin.go b/flyteplugins/go/tasks/plugins/webapi/bigquery/plugin.go
index d423d13380..e54d612484 100644
--- a/flyteplugins/go/tasks/plugins/webapi/bigquery/plugin.go
+++ b/flyteplugins/go/tasks/plugins/webapi/bigquery/plugin.go
@@ -547,25 +547,25 @@ func (p Plugin) newBigQueryClient(ctx context.Context, identity google.Identity)
 	return bigquery.NewService(ctx, options...)
 }
 
-func NewPlugin(cfg *Config, metricScope promutils.Scope) (*Plugin, error) {
+func NewPlugin(cfg *Config, metricScope promutils.Scope) (*Plugin, webapi.SyncPlugin, error) {
 	googleTokenSource, err := google.NewTokenSourceFactory(cfg.GoogleTokenSource)
 
 	if err != nil {
-		return nil, pluginErrors.Wrapf(pluginErrors.PluginInitializationFailed, err, "failed to get google token source")
+		return nil, nil, pluginErrors.Wrapf(pluginErrors.PluginInitializationFailed, err, "failed to get google token source")
 	}
 
 	return &Plugin{
 		metricScope:       metricScope,
 		cfg:               cfg,
 		googleTokenSource: googleTokenSource,
-	}, nil
+	}, nil, nil
 }
 
 func newBigQueryJobTaskPlugin() webapi.PluginEntry {
 	return webapi.PluginEntry{
 		ID:                 "bigquery",
 		SupportedTaskTypes: []core.TaskType{bigqueryQueryJobTask},
-		PluginLoader: func(ctx context.Context, iCtx webapi.PluginSetupContext) (webapi.AsyncPlugin, error) {
+		PluginLoader: func(ctx context.Context, iCtx webapi.PluginSetupContext) (webapi.AsyncPlugin, webapi.SyncPlugin, error) {
 			cfg := GetConfig()
 
 			return NewPlugin(cfg, iCtx.MetricsScope())
diff --git a/flyteplugins/go/tasks/plugins/webapi/databricks/plugin.go b/flyteplugins/go/tasks/plugins/webapi/databricks/plugin.go
index 7626cb9c6b..e078c29d04 100644
--- a/flyteplugins/go/tasks/plugins/webapi/databricks/plugin.go
+++ b/flyteplugins/go/tasks/plugins/webapi/databricks/plugin.go
@@ -339,12 +339,12 @@ func newDatabricksJobTaskPlugin() webapi.PluginEntry {
 	return webapi.PluginEntry{
 		ID:                 "databricks",
 		SupportedTaskTypes: []core.TaskType{"spark"},
-		PluginLoader: func(ctx context.Context, iCtx webapi.PluginSetupContext) (webapi.AsyncPlugin, error) {
+		PluginLoader: func(ctx context.Context, iCtx webapi.PluginSetupContext) (webapi.AsyncPlugin, webapi.SyncPlugin, error) {
 			return &Plugin{
 				metricScope: iCtx.MetricsScope(),
 				cfg:         GetConfig(),
 				client:      &http.Client{},
-			}, nil
+			}, nil, nil
 		},
 	}
 }
diff --git a/flyteplugins/go/tasks/plugins/webapi/snowflake/plugin.go b/flyteplugins/go/tasks/plugins/webapi/snowflake/plugin.go
index 88bb8f50f5..c1463a48e5 100644
--- a/flyteplugins/go/tasks/plugins/webapi/snowflake/plugin.go
+++ b/flyteplugins/go/tasks/plugins/webapi/snowflake/plugin.go
@@ -275,12 +275,12 @@ func newSnowflakeJobTaskPlugin() webapi.PluginEntry {
 	return webapi.PluginEntry{
 		ID:                 "snowflake",
 		SupportedTaskTypes: []core.TaskType{"snowflake"},
-		PluginLoader: func(ctx context.Context, iCtx webapi.PluginSetupContext) (webapi.AsyncPlugin, error) {
+		PluginLoader: func(ctx context.Context, iCtx webapi.PluginSetupContext) (webapi.AsyncPlugin, webapi.SyncPlugin, error) {
 			return &Plugin{
 				metricScope: iCtx.MetricsScope(),
 				cfg:         GetConfig(),
 				client:      &http.Client{},
-			}, nil
+			}, nil, nil
 		},
 	}
 }

From d48ad3ee1f37a256232807aa30aded1f746193a6 Mon Sep 17 00:00:00 2001
From: Future Outlier 
Date: Mon, 2 Oct 2023 16:45:46 +0800
Subject: [PATCH 03/48] update syncHandle

Signed-off-by: Future Outlier 
---
 .../pluginmachinery/internal/webapi/core.go   | 34 ++-----------------
 .../go/tasks/pluginmachinery/webapi/plugin.go |  1 -
 2 files changed, 2 insertions(+), 33 deletions(-)

diff --git a/flyteplugins/go/tasks/pluginmachinery/internal/webapi/core.go b/flyteplugins/go/tasks/pluginmachinery/internal/webapi/core.go
index eed7997db8..c8350ebc16 100644
--- a/flyteplugins/go/tasks/pluginmachinery/internal/webapi/core.go
+++ b/flyteplugins/go/tasks/pluginmachinery/internal/webapi/core.go
@@ -67,42 +67,12 @@ func (c CorePlugin) GetProperties() core.PluginProperties {
 }
 
 func (c CorePlugin) syncHandle(ctx context.Context, tCtx core.TaskExecutionContext) (core.Transition, error) {
-	incomingState, err := c.unmarshalState(ctx, tCtx.PluginStateReader())
-	if err != nil {
-		return core.UnknownTransition, err
-	}
-
-	var state *State
-	state = &incomingState
-	// TODO: This is incoming State
-	newCacheItem := CacheItem{
-		State: *state,
-	}
-	cacheItemID := tCtx.TaskExecutionMetadata().GetTaskExecutionID().GetGeneratedName()
-	item, err := c.cache.GetOrCreate(cacheItemID, newCacheItem)
-	cacheItem, ok := item.(CacheItem)
-	if !ok {
-		logger.Errorf(ctx, "Error casting cache object into ExecutionState")
-		return core.UnknownTransition, err
-	}
-
-	res, err := c.sp.Do(ctx, tCtx)
+	_, err := c.sp.Do(ctx, tCtx)
 	if err != nil {
 		return core.UnknownTransition, err
 	}
 
-	cacheItem.Resource = res
-
-	phase := PhaseSucceeded
-	cacheItem.Phase = phase
-	err = c.cache.DeleteDelayed(cacheItemID)
-
-	if err := tCtx.PluginStateWriter().Put(pluginStateVersion, cacheItem.State); err != nil {
-		return core.UnknownTransition, err
-	}
-
-	taskInfo := &core.TaskInfo{}
-	return core.DoTransition(core.PhaseInfoSuccess(taskInfo)), nil
+	return core.DoTransition(core.PhaseInfoSuccess(&core.TaskInfo{})), nil
 }
 
 func (c CorePlugin) Handle(ctx context.Context, tCtx core.TaskExecutionContext) (core.Transition, error) {
diff --git a/flyteplugins/go/tasks/pluginmachinery/webapi/plugin.go b/flyteplugins/go/tasks/pluginmachinery/webapi/plugin.go
index 58f6ad6372..785ea7ce82 100644
--- a/flyteplugins/go/tasks/pluginmachinery/webapi/plugin.go
+++ b/flyteplugins/go/tasks/pluginmachinery/webapi/plugin.go
@@ -150,6 +150,5 @@ type SyncPlugin interface {
 	GetConfig() PluginConfig
 
 	// Do performs the action associated with this plugin.
-	Do(ctx context.Context, tCtx TaskExecutionContext) (phase pluginsCore.PhaseInfo, err error)
 	Do(ctx context.Context, tCtx TaskExecutionContext) (latest Resource, err error)
 }

From a3ecd7845fd375eb238fafb84785dca96b3933e7 Mon Sep 17 00:00:00 2001
From: Future Outlier 
Date: Tue, 3 Oct 2023 12:12:36 +0800
Subject: [PATCH 04/48] improve write output

Signed-off-by: Future Outlier 
---
 flyteplugins/go/tasks/plugins/webapi/agent/plugin.go | 5 +----
 1 file changed, 1 insertion(+), 4 deletions(-)

diff --git a/flyteplugins/go/tasks/plugins/webapi/agent/plugin.go b/flyteplugins/go/tasks/plugins/webapi/agent/plugin.go
index 92d877e1a9..0eaa5383f7 100644
--- a/flyteplugins/go/tasks/plugins/webapi/agent/plugin.go
+++ b/flyteplugins/go/tasks/plugins/webapi/agent/plugin.go
@@ -105,7 +105,7 @@ func (p Plugin) Do(ctx context.Context, taskCtx webapi.TaskExecutionContext) (la
 	if err != nil {
 		return nil, err
 	}
-
+	// TODO: Check if state is not succeeded, then return error
 	resource := &ResourceWrapper{
 		State:   res.Resource.State,
 		Outputs: res.Resource.Outputs,
@@ -121,9 +121,6 @@ func (p Plugin) Do(ctx context.Context, taskCtx webapi.TaskExecutionContext) (la
 	if resource.Outputs != nil {
 		logger.Debugf(ctx, "Agent returned an output.")
 		opReader = ioutils.NewInMemoryOutputReader(resource.Outputs, nil, nil)
-	} else {
-		logger.Debugf(ctx, "Agent didn't return any output, assuming file based outputs.")
-		opReader = ioutils.NewRemoteFileOutputReader(ctx, taskCtx.DataStore(), taskCtx.OutputWriter(), taskCtx.MaxDatasetSizeBytes())
 	}
 
 	return &ResourceWrapper{

From 68c54a25c90c817bb32306d4e34be9f82e34a1e1 Mon Sep 17 00:00:00 2001
From: Future Outlier 
Date: Tue, 10 Oct 2023 16:53:58 +0800
Subject: [PATCH 05/48] idl and snowflake plugin interdace

Signed-off-by: Future Outlier 
---
 .../gen/pb-cpp/flyteidl/admin/agent.pb.cc     |  792 +++++++-
 .../gen/pb-cpp/flyteidl/service/agent.pb.cc   |   12 +-
 flyteidl/gen/pb-go/flyteidl/admin/agent.pb.go |  188 +-
 .../gen/pb-go/flyteidl/service/agent.pb.go    |   69 +-
 .../gen/pb-java/flyteidl/admin/Agent.java     | 1600 ++++++++++++++++-
 .../gen/pb-java/flyteidl/service/Agent.java   |   10 +-
 .../gen/pb_python/flyteidl/admin/agent_pb2.py |   10 +-
 .../pb_python/flyteidl/service/agent_pb2.py   |    4 +-
 .../go/tasks/plugins/webapi/agent/plugin.go   |    4 +-
 .../tasks/plugins/webapi/snowflake/plugin.go  |    4 +-
 10 files changed, 2573 insertions(+), 120 deletions(-)

diff --git a/flyteidl/gen/pb-cpp/flyteidl/admin/agent.pb.cc b/flyteidl/gen/pb-cpp/flyteidl/admin/agent.pb.cc
index 3ca2f983e2..04a06f8fc7 100644
--- a/flyteidl/gen/pb-cpp/flyteidl/admin/agent.pb.cc
+++ b/flyteidl/gen/pb-cpp/flyteidl/admin/agent.pb.cc
@@ -70,6 +70,14 @@ class DeleteTaskResponseDefaultTypeInternal {
  public:
   ::google::protobuf::internal::ExplicitlyConstructed _instance;
 } _DeleteTaskResponse_default_instance_;
+class DoTaskRequestDefaultTypeInternal {
+ public:
+  ::google::protobuf::internal::ExplicitlyConstructed _instance;
+} _DoTaskRequest_default_instance_;
+class DoTaskResponseDefaultTypeInternal {
+ public:
+  ::google::protobuf::internal::ExplicitlyConstructed _instance;
+} _DoTaskResponse_default_instance_;
 }  // namespace admin
 }  // namespace flyteidl
 static void InitDefaultsTaskExecutionMetadata_LabelsEntry_DoNotUse_flyteidl_2fadmin_2fagent_2eproto() {
@@ -232,6 +240,37 @@ static void InitDefaultsDeleteTaskResponse_flyteidl_2fadmin_2fagent_2eproto() {
 ::google::protobuf::internal::SCCInfo<0> scc_info_DeleteTaskResponse_flyteidl_2fadmin_2fagent_2eproto =
     {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 0, InitDefaultsDeleteTaskResponse_flyteidl_2fadmin_2fagent_2eproto}, {}};
 
+static void InitDefaultsDoTaskRequest_flyteidl_2fadmin_2fagent_2eproto() {
+  GOOGLE_PROTOBUF_VERIFY_VERSION;
+
+  {
+    void* ptr = &::flyteidl::admin::_DoTaskRequest_default_instance_;
+    new (ptr) ::flyteidl::admin::DoTaskRequest();
+    ::google::protobuf::internal::OnShutdownDestroyMessage(ptr);
+  }
+  ::flyteidl::admin::DoTaskRequest::InitAsDefaultInstance();
+}
+
+::google::protobuf::internal::SCCInfo<2> scc_info_DoTaskRequest_flyteidl_2fadmin_2fagent_2eproto =
+    {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 2, InitDefaultsDoTaskRequest_flyteidl_2fadmin_2fagent_2eproto}, {
+      &scc_info_Literal_flyteidl_2fcore_2fliterals_2eproto.base,
+      &scc_info_TaskTemplate_flyteidl_2fcore_2ftasks_2eproto.base,}};
+
+static void InitDefaultsDoTaskResponse_flyteidl_2fadmin_2fagent_2eproto() {
+  GOOGLE_PROTOBUF_VERIFY_VERSION;
+
+  {
+    void* ptr = &::flyteidl::admin::_DoTaskResponse_default_instance_;
+    new (ptr) ::flyteidl::admin::DoTaskResponse();
+    ::google::protobuf::internal::OnShutdownDestroyMessage(ptr);
+  }
+  ::flyteidl::admin::DoTaskResponse::InitAsDefaultInstance();
+}
+
+::google::protobuf::internal::SCCInfo<1> scc_info_DoTaskResponse_flyteidl_2fadmin_2fagent_2eproto =
+    {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 1, InitDefaultsDoTaskResponse_flyteidl_2fadmin_2fagent_2eproto}, {
+      &scc_info_Resource_flyteidl_2fadmin_2fagent_2eproto.base,}};
+
 void InitDefaults_flyteidl_2fadmin_2fagent_2eproto() {
   ::google::protobuf::internal::InitSCC(&scc_info_TaskExecutionMetadata_LabelsEntry_DoNotUse_flyteidl_2fadmin_2fagent_2eproto.base);
   ::google::protobuf::internal::InitSCC(&scc_info_TaskExecutionMetadata_AnnotationsEntry_DoNotUse_flyteidl_2fadmin_2fagent_2eproto.base);
@@ -244,9 +283,11 @@ void InitDefaults_flyteidl_2fadmin_2fagent_2eproto() {
   ::google::protobuf::internal::InitSCC(&scc_info_Resource_flyteidl_2fadmin_2fagent_2eproto.base);
   ::google::protobuf::internal::InitSCC(&scc_info_DeleteTaskRequest_flyteidl_2fadmin_2fagent_2eproto.base);
   ::google::protobuf::internal::InitSCC(&scc_info_DeleteTaskResponse_flyteidl_2fadmin_2fagent_2eproto.base);
+  ::google::protobuf::internal::InitSCC(&scc_info_DoTaskRequest_flyteidl_2fadmin_2fagent_2eproto.base);
+  ::google::protobuf::internal::InitSCC(&scc_info_DoTaskResponse_flyteidl_2fadmin_2fagent_2eproto.base);
 }
 
-::google::protobuf::Metadata file_level_metadata_flyteidl_2fadmin_2fagent_2eproto[11];
+::google::protobuf::Metadata file_level_metadata_flyteidl_2fadmin_2fagent_2eproto[13];
 const ::google::protobuf::EnumDescriptor* file_level_enum_descriptors_flyteidl_2fadmin_2fagent_2eproto[1];
 constexpr ::google::protobuf::ServiceDescriptor const** file_level_service_descriptors_flyteidl_2fadmin_2fagent_2eproto = nullptr;
 
@@ -336,6 +377,19 @@ const ::google::protobuf::uint32 TableStruct_flyteidl_2fadmin_2fagent_2eproto::o
   ~0u,  // no _extensions_
   ~0u,  // no _oneof_case_
   ~0u,  // no _weak_field_map_
+  ~0u,  // no _has_bits_
+  PROTOBUF_FIELD_OFFSET(::flyteidl::admin::DoTaskRequest, _internal_metadata_),
+  ~0u,  // no _extensions_
+  ~0u,  // no _oneof_case_
+  ~0u,  // no _weak_field_map_
+  PROTOBUF_FIELD_OFFSET(::flyteidl::admin::DoTaskRequest, inputs_),
+  PROTOBUF_FIELD_OFFSET(::flyteidl::admin::DoTaskRequest, template__),
+  ~0u,  // no _has_bits_
+  PROTOBUF_FIELD_OFFSET(::flyteidl::admin::DoTaskResponse, _internal_metadata_),
+  ~0u,  // no _extensions_
+  ~0u,  // no _oneof_case_
+  ~0u,  // no _weak_field_map_
+  PROTOBUF_FIELD_OFFSET(::flyteidl::admin::DoTaskResponse, resource_),
 };
 static const ::google::protobuf::internal::MigrationSchema schemas[] PROTOBUF_SECTION_VARIABLE(protodesc_cold) = {
   { 0, 7, sizeof(::flyteidl::admin::TaskExecutionMetadata_LabelsEntry_DoNotUse)},
@@ -349,6 +403,8 @@ static const ::google::protobuf::internal::MigrationSchema schemas[] PROTOBUF_SE
   { 66, -1, sizeof(::flyteidl::admin::Resource)},
   { 73, -1, sizeof(::flyteidl::admin::DeleteTaskRequest)},
   { 80, -1, sizeof(::flyteidl::admin::DeleteTaskResponse)},
+  { 85, -1, sizeof(::flyteidl::admin::DoTaskRequest)},
+  { 92, -1, sizeof(::flyteidl::admin::DoTaskResponse)},
 };
 
 static ::google::protobuf::Message const * const file_default_instances[] = {
@@ -363,12 +419,14 @@ static ::google::protobuf::Message const * const file_default_instances[] = {
   reinterpret_cast(&::flyteidl::admin::_Resource_default_instance_),
   reinterpret_cast(&::flyteidl::admin::_DeleteTaskRequest_default_instance_),
   reinterpret_cast(&::flyteidl::admin::_DeleteTaskResponse_default_instance_),
+  reinterpret_cast(&::flyteidl::admin::_DoTaskRequest_default_instance_),
+  reinterpret_cast(&::flyteidl::admin::_DoTaskResponse_default_instance_),
 };
 
 ::google::protobuf::internal::AssignDescriptorsTable assign_descriptors_table_flyteidl_2fadmin_2fagent_2eproto = {
   {}, AddDescriptors_flyteidl_2fadmin_2fagent_2eproto, "flyteidl/admin/agent.proto", schemas,
   file_default_instances, TableStruct_flyteidl_2fadmin_2fagent_2eproto::offsets,
-  file_level_metadata_flyteidl_2fadmin_2fagent_2eproto, 11, file_level_enum_descriptors_flyteidl_2fadmin_2fagent_2eproto, file_level_service_descriptors_flyteidl_2fadmin_2fagent_2eproto,
+  file_level_metadata_flyteidl_2fadmin_2fagent_2eproto, 13, file_level_enum_descriptors_flyteidl_2fadmin_2fagent_2eproto, file_level_service_descriptors_flyteidl_2fadmin_2fagent_2eproto,
 };
 
 const char descriptor_table_protodef_flyteidl_2fadmin_2fagent_2eproto[] =
@@ -403,16 +461,20 @@ const char descriptor_table_protodef_flyteidl_2fadmin_2fagent_2eproto[] =
   "dmin.State\022*\n\007outputs\030\002 \001(\0132\031.flyteidl.c"
   "ore.LiteralMap\"=\n\021DeleteTaskRequest\022\021\n\tt"
   "ask_type\030\001 \001(\t\022\025\n\rresource_meta\030\002 \001(\014\"\024\n"
-  "\022DeleteTaskResponse*^\n\005State\022\025\n\021RETRYABL"
-  "E_FAILURE\020\000\022\025\n\021PERMANENT_FAILURE\020\001\022\013\n\007PE"
-  "NDING\020\002\022\013\n\007RUNNING\020\003\022\r\n\tSUCCEEDED\020\004B=Z;g"
-  "ithub.com/flyteorg/flyte/flyteidl/gen/pb"
-  "-go/flyteidl/adminb\006proto3"
+  "\022DeleteTaskResponse\"i\n\rDoTaskRequest\022)\n\006"
+  "inputs\030\001 \001(\0132\031.flyteidl.core.LiteralMap\022"
+  "-\n\010template\030\002 \001(\0132\033.flyteidl.core.TaskTe"
+  "mplate\"<\n\016DoTaskResponse\022*\n\010resource\030\001 \001"
+  "(\0132\030.flyteidl.admin.Resource*^\n\005State\022\025\n"
+  "\021RETRYABLE_FAILURE\020\000\022\025\n\021PERMANENT_FAILUR"
+  "E\020\001\022\013\n\007PENDING\020\002\022\013\n\007RUNNING\020\003\022\r\n\tSUCCEED"
+  "ED\020\004B=Z;github.com/flyteorg/flyte/flytei"
+  "dl/gen/pb-go/flyteidl/adminb\006proto3"
   ;
 ::google::protobuf::internal::DescriptorTable descriptor_table_flyteidl_2fadmin_2fagent_2eproto = {
   false, InitDefaults_flyteidl_2fadmin_2fagent_2eproto, 
   descriptor_table_protodef_flyteidl_2fadmin_2fagent_2eproto,
-  "flyteidl/admin/agent.proto", &assign_descriptors_table_flyteidl_2fadmin_2fagent_2eproto, 1426,
+  "flyteidl/admin/agent.proto", &assign_descriptors_table_flyteidl_2fadmin_2fagent_2eproto, 1595,
 };
 
 void AddDescriptors_flyteidl_2fadmin_2fagent_2eproto() {
@@ -3846,43 +3908,703 @@ ::google::protobuf::Metadata DeleteTaskResponse::GetMetadata() const {
 }
 
 
-// @@protoc_insertion_point(namespace_scope)
-}  // namespace admin
-}  // namespace flyteidl
-namespace google {
-namespace protobuf {
-template<> PROTOBUF_NOINLINE ::flyteidl::admin::TaskExecutionMetadata_LabelsEntry_DoNotUse* Arena::CreateMaybeMessage< ::flyteidl::admin::TaskExecutionMetadata_LabelsEntry_DoNotUse >(Arena* arena) {
-  return Arena::CreateInternal< ::flyteidl::admin::TaskExecutionMetadata_LabelsEntry_DoNotUse >(arena);
+// ===================================================================
+
+void DoTaskRequest::InitAsDefaultInstance() {
+  ::flyteidl::admin::_DoTaskRequest_default_instance_._instance.get_mutable()->inputs_ = const_cast< ::flyteidl::core::LiteralMap*>(
+      ::flyteidl::core::LiteralMap::internal_default_instance());
+  ::flyteidl::admin::_DoTaskRequest_default_instance_._instance.get_mutable()->template__ = const_cast< ::flyteidl::core::TaskTemplate*>(
+      ::flyteidl::core::TaskTemplate::internal_default_instance());
 }
-template<> PROTOBUF_NOINLINE ::flyteidl::admin::TaskExecutionMetadata_AnnotationsEntry_DoNotUse* Arena::CreateMaybeMessage< ::flyteidl::admin::TaskExecutionMetadata_AnnotationsEntry_DoNotUse >(Arena* arena) {
-  return Arena::CreateInternal< ::flyteidl::admin::TaskExecutionMetadata_AnnotationsEntry_DoNotUse >(arena);
+class DoTaskRequest::HasBitSetters {
+ public:
+  static const ::flyteidl::core::LiteralMap& inputs(const DoTaskRequest* msg);
+  static const ::flyteidl::core::TaskTemplate& template_(const DoTaskRequest* msg);
+};
+
+const ::flyteidl::core::LiteralMap&
+DoTaskRequest::HasBitSetters::inputs(const DoTaskRequest* msg) {
+  return *msg->inputs_;
 }
-template<> PROTOBUF_NOINLINE ::flyteidl::admin::TaskExecutionMetadata_EnvironmentVariablesEntry_DoNotUse* Arena::CreateMaybeMessage< ::flyteidl::admin::TaskExecutionMetadata_EnvironmentVariablesEntry_DoNotUse >(Arena* arena) {
-  return Arena::CreateInternal< ::flyteidl::admin::TaskExecutionMetadata_EnvironmentVariablesEntry_DoNotUse >(arena);
+const ::flyteidl::core::TaskTemplate&
+DoTaskRequest::HasBitSetters::template_(const DoTaskRequest* msg) {
+  return *msg->template__;
 }
-template<> PROTOBUF_NOINLINE ::flyteidl::admin::TaskExecutionMetadata* Arena::CreateMaybeMessage< ::flyteidl::admin::TaskExecutionMetadata >(Arena* arena) {
-  return Arena::CreateInternal< ::flyteidl::admin::TaskExecutionMetadata >(arena);
+void DoTaskRequest::clear_inputs() {
+  if (GetArenaNoVirtual() == nullptr && inputs_ != nullptr) {
+    delete inputs_;
+  }
+  inputs_ = nullptr;
 }
-template<> PROTOBUF_NOINLINE ::flyteidl::admin::CreateTaskRequest* Arena::CreateMaybeMessage< ::flyteidl::admin::CreateTaskRequest >(Arena* arena) {
-  return Arena::CreateInternal< ::flyteidl::admin::CreateTaskRequest >(arena);
+void DoTaskRequest::clear_template_() {
+  if (GetArenaNoVirtual() == nullptr && template__ != nullptr) {
+    delete template__;
+  }
+  template__ = nullptr;
 }
-template<> PROTOBUF_NOINLINE ::flyteidl::admin::CreateTaskResponse* Arena::CreateMaybeMessage< ::flyteidl::admin::CreateTaskResponse >(Arena* arena) {
-  return Arena::CreateInternal< ::flyteidl::admin::CreateTaskResponse >(arena);
+#if !defined(_MSC_VER) || _MSC_VER >= 1900
+const int DoTaskRequest::kInputsFieldNumber;
+const int DoTaskRequest::kTemplateFieldNumber;
+#endif  // !defined(_MSC_VER) || _MSC_VER >= 1900
+
+DoTaskRequest::DoTaskRequest()
+  : ::google::protobuf::Message(), _internal_metadata_(nullptr) {
+  SharedCtor();
+  // @@protoc_insertion_point(constructor:flyteidl.admin.DoTaskRequest)
 }
-template<> PROTOBUF_NOINLINE ::flyteidl::admin::GetTaskRequest* Arena::CreateMaybeMessage< ::flyteidl::admin::GetTaskRequest >(Arena* arena) {
-  return Arena::CreateInternal< ::flyteidl::admin::GetTaskRequest >(arena);
+DoTaskRequest::DoTaskRequest(const DoTaskRequest& from)
+  : ::google::protobuf::Message(),
+      _internal_metadata_(nullptr) {
+  _internal_metadata_.MergeFrom(from._internal_metadata_);
+  if (from.has_inputs()) {
+    inputs_ = new ::flyteidl::core::LiteralMap(*from.inputs_);
+  } else {
+    inputs_ = nullptr;
+  }
+  if (from.has_template_()) {
+    template__ = new ::flyteidl::core::TaskTemplate(*from.template__);
+  } else {
+    template__ = nullptr;
+  }
+  // @@protoc_insertion_point(copy_constructor:flyteidl.admin.DoTaskRequest)
 }
-template<> PROTOBUF_NOINLINE ::flyteidl::admin::GetTaskResponse* Arena::CreateMaybeMessage< ::flyteidl::admin::GetTaskResponse >(Arena* arena) {
-  return Arena::CreateInternal< ::flyteidl::admin::GetTaskResponse >(arena);
+
+void DoTaskRequest::SharedCtor() {
+  ::google::protobuf::internal::InitSCC(
+      &scc_info_DoTaskRequest_flyteidl_2fadmin_2fagent_2eproto.base);
+  ::memset(&inputs_, 0, static_cast(
+      reinterpret_cast(&template__) -
+      reinterpret_cast(&inputs_)) + sizeof(template__));
 }
-template<> PROTOBUF_NOINLINE ::flyteidl::admin::Resource* Arena::CreateMaybeMessage< ::flyteidl::admin::Resource >(Arena* arena) {
-  return Arena::CreateInternal< ::flyteidl::admin::Resource >(arena);
+
+DoTaskRequest::~DoTaskRequest() {
+  // @@protoc_insertion_point(destructor:flyteidl.admin.DoTaskRequest)
+  SharedDtor();
 }
-template<> PROTOBUF_NOINLINE ::flyteidl::admin::DeleteTaskRequest* Arena::CreateMaybeMessage< ::flyteidl::admin::DeleteTaskRequest >(Arena* arena) {
-  return Arena::CreateInternal< ::flyteidl::admin::DeleteTaskRequest >(arena);
+
+void DoTaskRequest::SharedDtor() {
+  if (this != internal_default_instance()) delete inputs_;
+  if (this != internal_default_instance()) delete template__;
 }
-template<> PROTOBUF_NOINLINE ::flyteidl::admin::DeleteTaskResponse* Arena::CreateMaybeMessage< ::flyteidl::admin::DeleteTaskResponse >(Arena* arena) {
-  return Arena::CreateInternal< ::flyteidl::admin::DeleteTaskResponse >(arena);
+
+void DoTaskRequest::SetCachedSize(int size) const {
+  _cached_size_.Set(size);
+}
+const DoTaskRequest& DoTaskRequest::default_instance() {
+  ::google::protobuf::internal::InitSCC(&::scc_info_DoTaskRequest_flyteidl_2fadmin_2fagent_2eproto.base);
+  return *internal_default_instance();
+}
+
+
+void DoTaskRequest::Clear() {
+// @@protoc_insertion_point(message_clear_start:flyteidl.admin.DoTaskRequest)
+  ::google::protobuf::uint32 cached_has_bits = 0;
+  // Prevent compiler warnings about cached_has_bits being unused
+  (void) cached_has_bits;
+
+  if (GetArenaNoVirtual() == nullptr && inputs_ != nullptr) {
+    delete inputs_;
+  }
+  inputs_ = nullptr;
+  if (GetArenaNoVirtual() == nullptr && template__ != nullptr) {
+    delete template__;
+  }
+  template__ = nullptr;
+  _internal_metadata_.Clear();
+}
+
+#if GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER
+const char* DoTaskRequest::_InternalParse(const char* begin, const char* end, void* object,
+                  ::google::protobuf::internal::ParseContext* ctx) {
+  auto msg = static_cast(object);
+  ::google::protobuf::int32 size; (void)size;
+  int depth; (void)depth;
+  ::google::protobuf::uint32 tag;
+  ::google::protobuf::internal::ParseFunc parser_till_end; (void)parser_till_end;
+  auto ptr = begin;
+  while (ptr < end) {
+    ptr = ::google::protobuf::io::Parse32(ptr, &tag);
+    GOOGLE_PROTOBUF_PARSER_ASSERT(ptr);
+    switch (tag >> 3) {
+      // .flyteidl.core.LiteralMap inputs = 1;
+      case 1: {
+        if (static_cast<::google::protobuf::uint8>(tag) != 10) goto handle_unusual;
+        ptr = ::google::protobuf::io::ReadSize(ptr, &size);
+        GOOGLE_PROTOBUF_PARSER_ASSERT(ptr);
+        parser_till_end = ::flyteidl::core::LiteralMap::_InternalParse;
+        object = msg->mutable_inputs();
+        if (size > end - ptr) goto len_delim_till_end;
+        ptr += size;
+        GOOGLE_PROTOBUF_PARSER_ASSERT(ctx->ParseExactRange(
+            {parser_till_end, object}, ptr - size, ptr));
+        break;
+      }
+      // .flyteidl.core.TaskTemplate template = 2;
+      case 2: {
+        if (static_cast<::google::protobuf::uint8>(tag) != 18) goto handle_unusual;
+        ptr = ::google::protobuf::io::ReadSize(ptr, &size);
+        GOOGLE_PROTOBUF_PARSER_ASSERT(ptr);
+        parser_till_end = ::flyteidl::core::TaskTemplate::_InternalParse;
+        object = msg->mutable_template_();
+        if (size > end - ptr) goto len_delim_till_end;
+        ptr += size;
+        GOOGLE_PROTOBUF_PARSER_ASSERT(ctx->ParseExactRange(
+            {parser_till_end, object}, ptr - size, ptr));
+        break;
+      }
+      default: {
+      handle_unusual:
+        if ((tag & 7) == 4 || tag == 0) {
+          ctx->EndGroup(tag);
+          return ptr;
+        }
+        auto res = UnknownFieldParse(tag, {_InternalParse, msg},
+          ptr, end, msg->_internal_metadata_.mutable_unknown_fields(), ctx);
+        ptr = res.first;
+        GOOGLE_PROTOBUF_PARSER_ASSERT(ptr != nullptr);
+        if (res.second) return ptr;
+      }
+    }  // switch
+  }  // while
+  return ptr;
+len_delim_till_end:
+  return ctx->StoreAndTailCall(ptr, end, {_InternalParse, msg},
+                               {parser_till_end, object}, size);
+}
+#else  // GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER
+bool DoTaskRequest::MergePartialFromCodedStream(
+    ::google::protobuf::io::CodedInputStream* input) {
+#define DO_(EXPRESSION) if (!PROTOBUF_PREDICT_TRUE(EXPRESSION)) goto failure
+  ::google::protobuf::uint32 tag;
+  // @@protoc_insertion_point(parse_start:flyteidl.admin.DoTaskRequest)
+  for (;;) {
+    ::std::pair<::google::protobuf::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u);
+    tag = p.first;
+    if (!p.second) goto handle_unusual;
+    switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
+      // .flyteidl.core.LiteralMap inputs = 1;
+      case 1: {
+        if (static_cast< ::google::protobuf::uint8>(tag) == (10 & 0xFF)) {
+          DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
+               input, mutable_inputs()));
+        } else {
+          goto handle_unusual;
+        }
+        break;
+      }
+
+      // .flyteidl.core.TaskTemplate template = 2;
+      case 2: {
+        if (static_cast< ::google::protobuf::uint8>(tag) == (18 & 0xFF)) {
+          DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
+               input, mutable_template_()));
+        } else {
+          goto handle_unusual;
+        }
+        break;
+      }
+
+      default: {
+      handle_unusual:
+        if (tag == 0) {
+          goto success;
+        }
+        DO_(::google::protobuf::internal::WireFormat::SkipField(
+              input, tag, _internal_metadata_.mutable_unknown_fields()));
+        break;
+      }
+    }
+  }
+success:
+  // @@protoc_insertion_point(parse_success:flyteidl.admin.DoTaskRequest)
+  return true;
+failure:
+  // @@protoc_insertion_point(parse_failure:flyteidl.admin.DoTaskRequest)
+  return false;
+#undef DO_
+}
+#endif  // GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER
+
+void DoTaskRequest::SerializeWithCachedSizes(
+    ::google::protobuf::io::CodedOutputStream* output) const {
+  // @@protoc_insertion_point(serialize_start:flyteidl.admin.DoTaskRequest)
+  ::google::protobuf::uint32 cached_has_bits = 0;
+  (void) cached_has_bits;
+
+  // .flyteidl.core.LiteralMap inputs = 1;
+  if (this->has_inputs()) {
+    ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
+      1, HasBitSetters::inputs(this), output);
+  }
+
+  // .flyteidl.core.TaskTemplate template = 2;
+  if (this->has_template_()) {
+    ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
+      2, HasBitSetters::template_(this), output);
+  }
+
+  if (_internal_metadata_.have_unknown_fields()) {
+    ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
+        _internal_metadata_.unknown_fields(), output);
+  }
+  // @@protoc_insertion_point(serialize_end:flyteidl.admin.DoTaskRequest)
+}
+
+::google::protobuf::uint8* DoTaskRequest::InternalSerializeWithCachedSizesToArray(
+    ::google::protobuf::uint8* target) const {
+  // @@protoc_insertion_point(serialize_to_array_start:flyteidl.admin.DoTaskRequest)
+  ::google::protobuf::uint32 cached_has_bits = 0;
+  (void) cached_has_bits;
+
+  // .flyteidl.core.LiteralMap inputs = 1;
+  if (this->has_inputs()) {
+    target = ::google::protobuf::internal::WireFormatLite::
+      InternalWriteMessageToArray(
+        1, HasBitSetters::inputs(this), target);
+  }
+
+  // .flyteidl.core.TaskTemplate template = 2;
+  if (this->has_template_()) {
+    target = ::google::protobuf::internal::WireFormatLite::
+      InternalWriteMessageToArray(
+        2, HasBitSetters::template_(this), target);
+  }
+
+  if (_internal_metadata_.have_unknown_fields()) {
+    target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
+        _internal_metadata_.unknown_fields(), target);
+  }
+  // @@protoc_insertion_point(serialize_to_array_end:flyteidl.admin.DoTaskRequest)
+  return target;
+}
+
+size_t DoTaskRequest::ByteSizeLong() const {
+// @@protoc_insertion_point(message_byte_size_start:flyteidl.admin.DoTaskRequest)
+  size_t total_size = 0;
+
+  if (_internal_metadata_.have_unknown_fields()) {
+    total_size +=
+      ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
+        _internal_metadata_.unknown_fields());
+  }
+  ::google::protobuf::uint32 cached_has_bits = 0;
+  // Prevent compiler warnings about cached_has_bits being unused
+  (void) cached_has_bits;
+
+  // .flyteidl.core.LiteralMap inputs = 1;
+  if (this->has_inputs()) {
+    total_size += 1 +
+      ::google::protobuf::internal::WireFormatLite::MessageSize(
+        *inputs_);
+  }
+
+  // .flyteidl.core.TaskTemplate template = 2;
+  if (this->has_template_()) {
+    total_size += 1 +
+      ::google::protobuf::internal::WireFormatLite::MessageSize(
+        *template__);
+  }
+
+  int cached_size = ::google::protobuf::internal::ToCachedSize(total_size);
+  SetCachedSize(cached_size);
+  return total_size;
+}
+
+void DoTaskRequest::MergeFrom(const ::google::protobuf::Message& from) {
+// @@protoc_insertion_point(generalized_merge_from_start:flyteidl.admin.DoTaskRequest)
+  GOOGLE_DCHECK_NE(&from, this);
+  const DoTaskRequest* source =
+      ::google::protobuf::DynamicCastToGenerated(
+          &from);
+  if (source == nullptr) {
+  // @@protoc_insertion_point(generalized_merge_from_cast_fail:flyteidl.admin.DoTaskRequest)
+    ::google::protobuf::internal::ReflectionOps::Merge(from, this);
+  } else {
+  // @@protoc_insertion_point(generalized_merge_from_cast_success:flyteidl.admin.DoTaskRequest)
+    MergeFrom(*source);
+  }
+}
+
+void DoTaskRequest::MergeFrom(const DoTaskRequest& from) {
+// @@protoc_insertion_point(class_specific_merge_from_start:flyteidl.admin.DoTaskRequest)
+  GOOGLE_DCHECK_NE(&from, this);
+  _internal_metadata_.MergeFrom(from._internal_metadata_);
+  ::google::protobuf::uint32 cached_has_bits = 0;
+  (void) cached_has_bits;
+
+  if (from.has_inputs()) {
+    mutable_inputs()->::flyteidl::core::LiteralMap::MergeFrom(from.inputs());
+  }
+  if (from.has_template_()) {
+    mutable_template_()->::flyteidl::core::TaskTemplate::MergeFrom(from.template_());
+  }
+}
+
+void DoTaskRequest::CopyFrom(const ::google::protobuf::Message& from) {
+// @@protoc_insertion_point(generalized_copy_from_start:flyteidl.admin.DoTaskRequest)
+  if (&from == this) return;
+  Clear();
+  MergeFrom(from);
+}
+
+void DoTaskRequest::CopyFrom(const DoTaskRequest& from) {
+// @@protoc_insertion_point(class_specific_copy_from_start:flyteidl.admin.DoTaskRequest)
+  if (&from == this) return;
+  Clear();
+  MergeFrom(from);
+}
+
+bool DoTaskRequest::IsInitialized() const {
+  return true;
+}
+
+void DoTaskRequest::Swap(DoTaskRequest* other) {
+  if (other == this) return;
+  InternalSwap(other);
+}
+void DoTaskRequest::InternalSwap(DoTaskRequest* other) {
+  using std::swap;
+  _internal_metadata_.Swap(&other->_internal_metadata_);
+  swap(inputs_, other->inputs_);
+  swap(template__, other->template__);
+}
+
+::google::protobuf::Metadata DoTaskRequest::GetMetadata() const {
+  ::google::protobuf::internal::AssignDescriptors(&::assign_descriptors_table_flyteidl_2fadmin_2fagent_2eproto);
+  return ::file_level_metadata_flyteidl_2fadmin_2fagent_2eproto[kIndexInFileMessages];
+}
+
+
+// ===================================================================
+
+void DoTaskResponse::InitAsDefaultInstance() {
+  ::flyteidl::admin::_DoTaskResponse_default_instance_._instance.get_mutable()->resource_ = const_cast< ::flyteidl::admin::Resource*>(
+      ::flyteidl::admin::Resource::internal_default_instance());
+}
+class DoTaskResponse::HasBitSetters {
+ public:
+  static const ::flyteidl::admin::Resource& resource(const DoTaskResponse* msg);
+};
+
+const ::flyteidl::admin::Resource&
+DoTaskResponse::HasBitSetters::resource(const DoTaskResponse* msg) {
+  return *msg->resource_;
+}
+#if !defined(_MSC_VER) || _MSC_VER >= 1900
+const int DoTaskResponse::kResourceFieldNumber;
+#endif  // !defined(_MSC_VER) || _MSC_VER >= 1900
+
+DoTaskResponse::DoTaskResponse()
+  : ::google::protobuf::Message(), _internal_metadata_(nullptr) {
+  SharedCtor();
+  // @@protoc_insertion_point(constructor:flyteidl.admin.DoTaskResponse)
+}
+DoTaskResponse::DoTaskResponse(const DoTaskResponse& from)
+  : ::google::protobuf::Message(),
+      _internal_metadata_(nullptr) {
+  _internal_metadata_.MergeFrom(from._internal_metadata_);
+  if (from.has_resource()) {
+    resource_ = new ::flyteidl::admin::Resource(*from.resource_);
+  } else {
+    resource_ = nullptr;
+  }
+  // @@protoc_insertion_point(copy_constructor:flyteidl.admin.DoTaskResponse)
+}
+
+void DoTaskResponse::SharedCtor() {
+  ::google::protobuf::internal::InitSCC(
+      &scc_info_DoTaskResponse_flyteidl_2fadmin_2fagent_2eproto.base);
+  resource_ = nullptr;
+}
+
+DoTaskResponse::~DoTaskResponse() {
+  // @@protoc_insertion_point(destructor:flyteidl.admin.DoTaskResponse)
+  SharedDtor();
+}
+
+void DoTaskResponse::SharedDtor() {
+  if (this != internal_default_instance()) delete resource_;
+}
+
+void DoTaskResponse::SetCachedSize(int size) const {
+  _cached_size_.Set(size);
+}
+const DoTaskResponse& DoTaskResponse::default_instance() {
+  ::google::protobuf::internal::InitSCC(&::scc_info_DoTaskResponse_flyteidl_2fadmin_2fagent_2eproto.base);
+  return *internal_default_instance();
+}
+
+
+void DoTaskResponse::Clear() {
+// @@protoc_insertion_point(message_clear_start:flyteidl.admin.DoTaskResponse)
+  ::google::protobuf::uint32 cached_has_bits = 0;
+  // Prevent compiler warnings about cached_has_bits being unused
+  (void) cached_has_bits;
+
+  if (GetArenaNoVirtual() == nullptr && resource_ != nullptr) {
+    delete resource_;
+  }
+  resource_ = nullptr;
+  _internal_metadata_.Clear();
+}
+
+#if GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER
+const char* DoTaskResponse::_InternalParse(const char* begin, const char* end, void* object,
+                  ::google::protobuf::internal::ParseContext* ctx) {
+  auto msg = static_cast(object);
+  ::google::protobuf::int32 size; (void)size;
+  int depth; (void)depth;
+  ::google::protobuf::uint32 tag;
+  ::google::protobuf::internal::ParseFunc parser_till_end; (void)parser_till_end;
+  auto ptr = begin;
+  while (ptr < end) {
+    ptr = ::google::protobuf::io::Parse32(ptr, &tag);
+    GOOGLE_PROTOBUF_PARSER_ASSERT(ptr);
+    switch (tag >> 3) {
+      // .flyteidl.admin.Resource resource = 1;
+      case 1: {
+        if (static_cast<::google::protobuf::uint8>(tag) != 10) goto handle_unusual;
+        ptr = ::google::protobuf::io::ReadSize(ptr, &size);
+        GOOGLE_PROTOBUF_PARSER_ASSERT(ptr);
+        parser_till_end = ::flyteidl::admin::Resource::_InternalParse;
+        object = msg->mutable_resource();
+        if (size > end - ptr) goto len_delim_till_end;
+        ptr += size;
+        GOOGLE_PROTOBUF_PARSER_ASSERT(ctx->ParseExactRange(
+            {parser_till_end, object}, ptr - size, ptr));
+        break;
+      }
+      default: {
+      handle_unusual:
+        if ((tag & 7) == 4 || tag == 0) {
+          ctx->EndGroup(tag);
+          return ptr;
+        }
+        auto res = UnknownFieldParse(tag, {_InternalParse, msg},
+          ptr, end, msg->_internal_metadata_.mutable_unknown_fields(), ctx);
+        ptr = res.first;
+        GOOGLE_PROTOBUF_PARSER_ASSERT(ptr != nullptr);
+        if (res.second) return ptr;
+      }
+    }  // switch
+  }  // while
+  return ptr;
+len_delim_till_end:
+  return ctx->StoreAndTailCall(ptr, end, {_InternalParse, msg},
+                               {parser_till_end, object}, size);
+}
+#else  // GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER
+bool DoTaskResponse::MergePartialFromCodedStream(
+    ::google::protobuf::io::CodedInputStream* input) {
+#define DO_(EXPRESSION) if (!PROTOBUF_PREDICT_TRUE(EXPRESSION)) goto failure
+  ::google::protobuf::uint32 tag;
+  // @@protoc_insertion_point(parse_start:flyteidl.admin.DoTaskResponse)
+  for (;;) {
+    ::std::pair<::google::protobuf::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u);
+    tag = p.first;
+    if (!p.second) goto handle_unusual;
+    switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
+      // .flyteidl.admin.Resource resource = 1;
+      case 1: {
+        if (static_cast< ::google::protobuf::uint8>(tag) == (10 & 0xFF)) {
+          DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
+               input, mutable_resource()));
+        } else {
+          goto handle_unusual;
+        }
+        break;
+      }
+
+      default: {
+      handle_unusual:
+        if (tag == 0) {
+          goto success;
+        }
+        DO_(::google::protobuf::internal::WireFormat::SkipField(
+              input, tag, _internal_metadata_.mutable_unknown_fields()));
+        break;
+      }
+    }
+  }
+success:
+  // @@protoc_insertion_point(parse_success:flyteidl.admin.DoTaskResponse)
+  return true;
+failure:
+  // @@protoc_insertion_point(parse_failure:flyteidl.admin.DoTaskResponse)
+  return false;
+#undef DO_
+}
+#endif  // GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER
+
+void DoTaskResponse::SerializeWithCachedSizes(
+    ::google::protobuf::io::CodedOutputStream* output) const {
+  // @@protoc_insertion_point(serialize_start:flyteidl.admin.DoTaskResponse)
+  ::google::protobuf::uint32 cached_has_bits = 0;
+  (void) cached_has_bits;
+
+  // .flyteidl.admin.Resource resource = 1;
+  if (this->has_resource()) {
+    ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
+      1, HasBitSetters::resource(this), output);
+  }
+
+  if (_internal_metadata_.have_unknown_fields()) {
+    ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
+        _internal_metadata_.unknown_fields(), output);
+  }
+  // @@protoc_insertion_point(serialize_end:flyteidl.admin.DoTaskResponse)
+}
+
+::google::protobuf::uint8* DoTaskResponse::InternalSerializeWithCachedSizesToArray(
+    ::google::protobuf::uint8* target) const {
+  // @@protoc_insertion_point(serialize_to_array_start:flyteidl.admin.DoTaskResponse)
+  ::google::protobuf::uint32 cached_has_bits = 0;
+  (void) cached_has_bits;
+
+  // .flyteidl.admin.Resource resource = 1;
+  if (this->has_resource()) {
+    target = ::google::protobuf::internal::WireFormatLite::
+      InternalWriteMessageToArray(
+        1, HasBitSetters::resource(this), target);
+  }
+
+  if (_internal_metadata_.have_unknown_fields()) {
+    target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
+        _internal_metadata_.unknown_fields(), target);
+  }
+  // @@protoc_insertion_point(serialize_to_array_end:flyteidl.admin.DoTaskResponse)
+  return target;
+}
+
+size_t DoTaskResponse::ByteSizeLong() const {
+// @@protoc_insertion_point(message_byte_size_start:flyteidl.admin.DoTaskResponse)
+  size_t total_size = 0;
+
+  if (_internal_metadata_.have_unknown_fields()) {
+    total_size +=
+      ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
+        _internal_metadata_.unknown_fields());
+  }
+  ::google::protobuf::uint32 cached_has_bits = 0;
+  // Prevent compiler warnings about cached_has_bits being unused
+  (void) cached_has_bits;
+
+  // .flyteidl.admin.Resource resource = 1;
+  if (this->has_resource()) {
+    total_size += 1 +
+      ::google::protobuf::internal::WireFormatLite::MessageSize(
+        *resource_);
+  }
+
+  int cached_size = ::google::protobuf::internal::ToCachedSize(total_size);
+  SetCachedSize(cached_size);
+  return total_size;
+}
+
+void DoTaskResponse::MergeFrom(const ::google::protobuf::Message& from) {
+// @@protoc_insertion_point(generalized_merge_from_start:flyteidl.admin.DoTaskResponse)
+  GOOGLE_DCHECK_NE(&from, this);
+  const DoTaskResponse* source =
+      ::google::protobuf::DynamicCastToGenerated(
+          &from);
+  if (source == nullptr) {
+  // @@protoc_insertion_point(generalized_merge_from_cast_fail:flyteidl.admin.DoTaskResponse)
+    ::google::protobuf::internal::ReflectionOps::Merge(from, this);
+  } else {
+  // @@protoc_insertion_point(generalized_merge_from_cast_success:flyteidl.admin.DoTaskResponse)
+    MergeFrom(*source);
+  }
+}
+
+void DoTaskResponse::MergeFrom(const DoTaskResponse& from) {
+// @@protoc_insertion_point(class_specific_merge_from_start:flyteidl.admin.DoTaskResponse)
+  GOOGLE_DCHECK_NE(&from, this);
+  _internal_metadata_.MergeFrom(from._internal_metadata_);
+  ::google::protobuf::uint32 cached_has_bits = 0;
+  (void) cached_has_bits;
+
+  if (from.has_resource()) {
+    mutable_resource()->::flyteidl::admin::Resource::MergeFrom(from.resource());
+  }
+}
+
+void DoTaskResponse::CopyFrom(const ::google::protobuf::Message& from) {
+// @@protoc_insertion_point(generalized_copy_from_start:flyteidl.admin.DoTaskResponse)
+  if (&from == this) return;
+  Clear();
+  MergeFrom(from);
+}
+
+void DoTaskResponse::CopyFrom(const DoTaskResponse& from) {
+// @@protoc_insertion_point(class_specific_copy_from_start:flyteidl.admin.DoTaskResponse)
+  if (&from == this) return;
+  Clear();
+  MergeFrom(from);
+}
+
+bool DoTaskResponse::IsInitialized() const {
+  return true;
+}
+
+void DoTaskResponse::Swap(DoTaskResponse* other) {
+  if (other == this) return;
+  InternalSwap(other);
+}
+void DoTaskResponse::InternalSwap(DoTaskResponse* other) {
+  using std::swap;
+  _internal_metadata_.Swap(&other->_internal_metadata_);
+  swap(resource_, other->resource_);
+}
+
+::google::protobuf::Metadata DoTaskResponse::GetMetadata() const {
+  ::google::protobuf::internal::AssignDescriptors(&::assign_descriptors_table_flyteidl_2fadmin_2fagent_2eproto);
+  return ::file_level_metadata_flyteidl_2fadmin_2fagent_2eproto[kIndexInFileMessages];
+}
+
+
+// @@protoc_insertion_point(namespace_scope)
+}  // namespace admin
+}  // namespace flyteidl
+namespace google {
+namespace protobuf {
+template<> PROTOBUF_NOINLINE ::flyteidl::admin::TaskExecutionMetadata_LabelsEntry_DoNotUse* Arena::CreateMaybeMessage< ::flyteidl::admin::TaskExecutionMetadata_LabelsEntry_DoNotUse >(Arena* arena) {
+  return Arena::CreateInternal< ::flyteidl::admin::TaskExecutionMetadata_LabelsEntry_DoNotUse >(arena);
+}
+template<> PROTOBUF_NOINLINE ::flyteidl::admin::TaskExecutionMetadata_AnnotationsEntry_DoNotUse* Arena::CreateMaybeMessage< ::flyteidl::admin::TaskExecutionMetadata_AnnotationsEntry_DoNotUse >(Arena* arena) {
+  return Arena::CreateInternal< ::flyteidl::admin::TaskExecutionMetadata_AnnotationsEntry_DoNotUse >(arena);
+}
+template<> PROTOBUF_NOINLINE ::flyteidl::admin::TaskExecutionMetadata_EnvironmentVariablesEntry_DoNotUse* Arena::CreateMaybeMessage< ::flyteidl::admin::TaskExecutionMetadata_EnvironmentVariablesEntry_DoNotUse >(Arena* arena) {
+  return Arena::CreateInternal< ::flyteidl::admin::TaskExecutionMetadata_EnvironmentVariablesEntry_DoNotUse >(arena);
+}
+template<> PROTOBUF_NOINLINE ::flyteidl::admin::TaskExecutionMetadata* Arena::CreateMaybeMessage< ::flyteidl::admin::TaskExecutionMetadata >(Arena* arena) {
+  return Arena::CreateInternal< ::flyteidl::admin::TaskExecutionMetadata >(arena);
+}
+template<> PROTOBUF_NOINLINE ::flyteidl::admin::CreateTaskRequest* Arena::CreateMaybeMessage< ::flyteidl::admin::CreateTaskRequest >(Arena* arena) {
+  return Arena::CreateInternal< ::flyteidl::admin::CreateTaskRequest >(arena);
+}
+template<> PROTOBUF_NOINLINE ::flyteidl::admin::CreateTaskResponse* Arena::CreateMaybeMessage< ::flyteidl::admin::CreateTaskResponse >(Arena* arena) {
+  return Arena::CreateInternal< ::flyteidl::admin::CreateTaskResponse >(arena);
+}
+template<> PROTOBUF_NOINLINE ::flyteidl::admin::GetTaskRequest* Arena::CreateMaybeMessage< ::flyteidl::admin::GetTaskRequest >(Arena* arena) {
+  return Arena::CreateInternal< ::flyteidl::admin::GetTaskRequest >(arena);
+}
+template<> PROTOBUF_NOINLINE ::flyteidl::admin::GetTaskResponse* Arena::CreateMaybeMessage< ::flyteidl::admin::GetTaskResponse >(Arena* arena) {
+  return Arena::CreateInternal< ::flyteidl::admin::GetTaskResponse >(arena);
+}
+template<> PROTOBUF_NOINLINE ::flyteidl::admin::Resource* Arena::CreateMaybeMessage< ::flyteidl::admin::Resource >(Arena* arena) {
+  return Arena::CreateInternal< ::flyteidl::admin::Resource >(arena);
+}
+template<> PROTOBUF_NOINLINE ::flyteidl::admin::DeleteTaskRequest* Arena::CreateMaybeMessage< ::flyteidl::admin::DeleteTaskRequest >(Arena* arena) {
+  return Arena::CreateInternal< ::flyteidl::admin::DeleteTaskRequest >(arena);
+}
+template<> PROTOBUF_NOINLINE ::flyteidl::admin::DeleteTaskResponse* Arena::CreateMaybeMessage< ::flyteidl::admin::DeleteTaskResponse >(Arena* arena) {
+  return Arena::CreateInternal< ::flyteidl::admin::DeleteTaskResponse >(arena);
+}
+template<> PROTOBUF_NOINLINE ::flyteidl::admin::DoTaskRequest* Arena::CreateMaybeMessage< ::flyteidl::admin::DoTaskRequest >(Arena* arena) {
+  return Arena::CreateInternal< ::flyteidl::admin::DoTaskRequest >(arena);
+}
+template<> PROTOBUF_NOINLINE ::flyteidl::admin::DoTaskResponse* Arena::CreateMaybeMessage< ::flyteidl::admin::DoTaskResponse >(Arena* arena) {
+  return Arena::CreateInternal< ::flyteidl::admin::DoTaskResponse >(arena);
 }
 }  // namespace protobuf
 }  // namespace google
diff --git a/flyteidl/gen/pb-cpp/flyteidl/service/agent.pb.cc b/flyteidl/gen/pb-cpp/flyteidl/service/agent.pb.cc
index 4963d13cc8..fd64d2530c 100644
--- a/flyteidl/gen/pb-cpp/flyteidl/service/agent.pb.cc
+++ b/flyteidl/gen/pb-cpp/flyteidl/service/agent.pb.cc
@@ -38,21 +38,23 @@ ::google::protobuf::internal::AssignDescriptorsTable assign_descriptors_table_fl
 
 const char descriptor_table_protodef_flyteidl_2fservice_2fagent_2eproto[] =
   "\n\034flyteidl/service/agent.proto\022\020flyteidl"
-  ".service\032\032flyteidl/admin/agent.proto2\217\002\n"
+  ".service\032\032flyteidl/admin/agent.proto2\332\002\n"
   "\021AsyncAgentService\022U\n\nCreateTask\022!.flyte"
   "idl.admin.CreateTaskRequest\032\".flyteidl.a"
   "dmin.CreateTaskResponse\"\000\022L\n\007GetTask\022\036.f"
   "lyteidl.admin.GetTaskRequest\032\037.flyteidl."
   "admin.GetTaskResponse\"\000\022U\n\nDeleteTask\022!."
   "flyteidl.admin.DeleteTaskRequest\032\".flyte"
-  "idl.admin.DeleteTaskResponse\"\000B\?Z=github"
-  ".com/flyteorg/flyte/flyteidl/gen/pb-go/f"
-  "lyteidl/serviceb\006proto3"
+  "idl.admin.DeleteTaskResponse\"\000\022I\n\006DoTask"
+  "\022\035.flyteidl.admin.DoTaskRequest\032\036.flytei"
+  "dl.admin.DoTaskResponse\"\000B\?Z=github.com/"
+  "flyteorg/flyte/flyteidl/gen/pb-go/flytei"
+  "dl/serviceb\006proto3"
   ;
 ::google::protobuf::internal::DescriptorTable descriptor_table_flyteidl_2fservice_2fagent_2eproto = {
   false, InitDefaults_flyteidl_2fservice_2fagent_2eproto, 
   descriptor_table_protodef_flyteidl_2fservice_2fagent_2eproto,
-  "flyteidl/service/agent.proto", &assign_descriptors_table_flyteidl_2fservice_2fagent_2eproto, 423,
+  "flyteidl/service/agent.proto", &assign_descriptors_table_flyteidl_2fservice_2fagent_2eproto, 498,
 };
 
 void AddDescriptors_flyteidl_2fservice_2fagent_2eproto() {
diff --git a/flyteidl/gen/pb-go/flyteidl/admin/agent.pb.go b/flyteidl/gen/pb-go/flyteidl/admin/agent.pb.go
index 436d00d29a..b4621a9e1a 100644
--- a/flyteidl/gen/pb-go/flyteidl/admin/agent.pb.go
+++ b/flyteidl/gen/pb-go/flyteidl/admin/agent.pb.go
@@ -476,6 +476,97 @@ func (m *DeleteTaskResponse) XXX_DiscardUnknown() {
 
 var xxx_messageInfo_DeleteTaskResponse proto.InternalMessageInfo
 
+// A message used to do a task
+type DoTaskRequest struct {
+	// The inputs required to start the execution. All required inputs must be
+	// included in this map. If not required and not provided, defaults apply.
+	// +optional
+	Inputs *core.LiteralMap `protobuf:"bytes,1,opt,name=inputs,proto3" json:"inputs,omitempty"`
+	// Template of the task that encapsulates all the metadata of the task.
+	Template             *core.TaskTemplate `protobuf:"bytes,2,opt,name=template,proto3" json:"template,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}           `json:"-"`
+	XXX_unrecognized     []byte             `json:"-"`
+	XXX_sizecache        int32              `json:"-"`
+}
+
+func (m *DoTaskRequest) Reset()         { *m = DoTaskRequest{} }
+func (m *DoTaskRequest) String() string { return proto.CompactTextString(m) }
+func (*DoTaskRequest) ProtoMessage()    {}
+func (*DoTaskRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_c434e52bb0028071, []int{8}
+}
+
+func (m *DoTaskRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_DoTaskRequest.Unmarshal(m, b)
+}
+func (m *DoTaskRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_DoTaskRequest.Marshal(b, m, deterministic)
+}
+func (m *DoTaskRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_DoTaskRequest.Merge(m, src)
+}
+func (m *DoTaskRequest) XXX_Size() int {
+	return xxx_messageInfo_DoTaskRequest.Size(m)
+}
+func (m *DoTaskRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_DoTaskRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_DoTaskRequest proto.InternalMessageInfo
+
+func (m *DoTaskRequest) GetInputs() *core.LiteralMap {
+	if m != nil {
+		return m.Inputs
+	}
+	return nil
+}
+
+func (m *DoTaskRequest) GetTemplate() *core.TaskTemplate {
+	if m != nil {
+		return m.Template
+	}
+	return nil
+}
+
+type DoTaskResponse struct {
+	Resource             *Resource `protobuf:"bytes,1,opt,name=resource,proto3" json:"resource,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}  `json:"-"`
+	XXX_unrecognized     []byte    `json:"-"`
+	XXX_sizecache        int32     `json:"-"`
+}
+
+func (m *DoTaskResponse) Reset()         { *m = DoTaskResponse{} }
+func (m *DoTaskResponse) String() string { return proto.CompactTextString(m) }
+func (*DoTaskResponse) ProtoMessage()    {}
+func (*DoTaskResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_c434e52bb0028071, []int{9}
+}
+
+func (m *DoTaskResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_DoTaskResponse.Unmarshal(m, b)
+}
+func (m *DoTaskResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_DoTaskResponse.Marshal(b, m, deterministic)
+}
+func (m *DoTaskResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_DoTaskResponse.Merge(m, src)
+}
+func (m *DoTaskResponse) XXX_Size() int {
+	return xxx_messageInfo_DoTaskResponse.Size(m)
+}
+func (m *DoTaskResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_DoTaskResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_DoTaskResponse proto.InternalMessageInfo
+
+func (m *DoTaskResponse) GetResource() *Resource {
+	if m != nil {
+		return m.Resource
+	}
+	return nil
+}
+
 func init() {
 	proto.RegisterEnum("flyteidl.admin.State", State_name, State_value)
 	proto.RegisterType((*TaskExecutionMetadata)(nil), "flyteidl.admin.TaskExecutionMetadata")
@@ -489,56 +580,59 @@ func init() {
 	proto.RegisterType((*Resource)(nil), "flyteidl.admin.Resource")
 	proto.RegisterType((*DeleteTaskRequest)(nil), "flyteidl.admin.DeleteTaskRequest")
 	proto.RegisterType((*DeleteTaskResponse)(nil), "flyteidl.admin.DeleteTaskResponse")
+	proto.RegisterType((*DoTaskRequest)(nil), "flyteidl.admin.DoTaskRequest")
+	proto.RegisterType((*DoTaskResponse)(nil), "flyteidl.admin.DoTaskResponse")
 }
 
 func init() { proto.RegisterFile("flyteidl/admin/agent.proto", fileDescriptor_c434e52bb0028071) }
 
 var fileDescriptor_c434e52bb0028071 = []byte{
-	// 726 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x55, 0xed, 0x6e, 0xe2, 0x46,
-	0x14, 0x2d, 0x10, 0x08, 0x5c, 0xf2, 0x01, 0xd3, 0xa0, 0x3a, 0x24, 0xad, 0x22, 0xaa, 0x56, 0x51,
-	0xab, 0x1a, 0x85, 0x54, 0x6d, 0xd2, 0xaa, 0xad, 0x48, 0x70, 0x11, 0x12, 0x41, 0xd1, 0x04, 0xaa,
-	0xb6, 0xd2, 0x2e, 0x1a, 0xcc, 0x85, 0xb5, 0x30, 0x63, 0xaf, 0x67, 0x8c, 0xc2, 0xef, 0x7d, 0x89,
-	0x7d, 0xdc, 0x95, 0xc7, 0x1f, 0x01, 0xc4, 0xae, 0x12, 0xed, 0x3f, 0xcf, 0x3d, 0xe7, 0x9e, 0x39,
-	0x73, 0xee, 0xd8, 0x86, 0xea, 0xc4, 0x5e, 0x4a, 0xb4, 0xc6, 0x76, 0x9d, 0x8d, 0xe7, 0x16, 0xaf,
-	0xb3, 0x29, 0x72, 0xa9, 0xbb, 0x9e, 0x23, 0x1d, 0x72, 0x10, 0x63, 0xba, 0xc2, 0xaa, 0xa7, 0x09,
-	0xd7, 0x74, 0x3c, 0xac, 0xdb, 0x96, 0x44, 0x8f, 0xd9, 0x22, 0x64, 0x57, 0x8f, 0xd7, 0x51, 0xc9,
-	0xc4, 0x2c, 0x86, 0xbe, 0x5e, 0x87, 0x2c, 0x2e, 0xd1, 0x9b, 0x30, 0x13, 0x23, 0xf8, 0x9b, 0x0d,
-	0x78, 0x8c, 0x5c, 0x5a, 0x13, 0x0b, 0xbd, 0x10, 0xaf, 0xbd, 0xcf, 0x42, 0xa5, 0xcf, 0xc4, 0xcc,
-	0x78, 0x44, 0xd3, 0x97, 0x96, 0xc3, 0xef, 0x50, 0xb2, 0x31, 0x93, 0x8c, 0x50, 0x28, 0x07, 0xfb,
-	0x0c, 0x31, 0x46, 0x86, 0xd6, 0x58, 0x4b, 0x9d, 0xa5, 0xce, 0x8b, 0x8d, 0xef, 0xf5, 0xc4, 0x7d,
-	0xa0, 0xaa, 0xaf, 0x09, 0x74, 0x92, 0x2d, 0xe8, 0xa1, 0x5c, 0x07, 0xc8, 0x29, 0x14, 0x38, 0x9b,
-	0xa3, 0x70, 0x99, 0x89, 0x5a, 0xfa, 0x2c, 0x75, 0x5e, 0xa0, 0x4f, 0x05, 0xd2, 0x81, 0x9c, 0xcd,
-	0x46, 0x68, 0x0b, 0x2d, 0x73, 0x96, 0x39, 0x2f, 0x36, 0x2e, 0xf4, 0xf5, 0x90, 0xf4, 0xad, 0x46,
-	0xf5, 0xae, 0xea, 0x31, 0xb8, 0xf4, 0x96, 0x34, 0x12, 0x20, 0xff, 0x42, 0x91, 0x71, 0xee, 0x48,
-	0x16, 0x30, 0x85, 0xb6, 0xa3, 0xf4, 0x7e, 0x79, 0x9e, 0x5e, 0xf3, 0xa9, 0x31, 0x14, 0x5d, 0x95,
-	0x22, 0x3a, 0x7c, 0x39, 0xbb, 0x12, 0x43, 0x81, 0xde, 0xc2, 0x32, 0x71, 0xc8, 0x4c, 0xd3, 0xf1,
-	0xb9, 0xd4, 0xb2, 0xea, 0x30, 0xe5, 0xd9, 0x95, 0x78, 0x08, 0x91, 0x66, 0x08, 0x10, 0x09, 0x15,
-	0xe4, 0x0b, 0xcb, 0x73, 0xf8, 0x1c, 0xb9, 0x1c, 0x2e, 0x98, 0x67, 0xb1, 0x91, 0x8d, 0x42, 0xcb,
-	0x29, 0x4f, 0x7f, 0x3d, 0xcf, 0x93, 0xf1, 0x24, 0xf1, 0x4f, 0xac, 0x10, 0x9a, 0x3b, 0xc2, 0x2d,
-	0x50, 0xf5, 0x1a, 0x8a, 0x2b, 0xb1, 0x90, 0x12, 0x64, 0x66, 0xb8, 0x54, 0xd3, 0x2b, 0xd0, 0xe0,
-	0x91, 0x1c, 0x41, 0x76, 0xc1, 0x6c, 0x3f, 0x9e, 0x42, 0xb8, 0xf8, 0x2d, 0x7d, 0x95, 0xaa, 0xfe,
-	0x09, 0xa5, 0xcd, 0x04, 0x5e, 0xd4, 0xdf, 0x86, 0xe3, 0x8f, 0xba, 0x7d, 0x89, 0x50, 0xed, 0x5d,
-	0x1a, 0xca, 0xb7, 0x1e, 0x32, 0x89, 0x41, 0x26, 0x14, 0xdf, 0xfa, 0x28, 0x24, 0xb9, 0x80, 0x9c,
-	0xc5, 0x5d, 0x5f, 0x8a, 0xe8, 0x2e, 0x1e, 0x6f, 0xdc, 0xc5, 0x6e, 0xf8, 0xe6, 0xdc, 0x31, 0x97,
-	0x46, 0x44, 0xf2, 0x2b, 0xe4, 0x25, 0xce, 0x5d, 0x9b, 0xc9, 0x70, 0x97, 0x62, 0xe3, 0x64, 0xcb,
-	0x05, 0xee, 0x47, 0x14, 0x9a, 0x90, 0xc9, 0xb7, 0xb0, 0xef, 0xf8, 0xd2, 0xf5, 0xe5, 0xd0, 0xf5,
-	0x70, 0x62, 0x3d, 0x6a, 0x19, 0xe5, 0x71, 0x2f, 0x2c, 0xde, 0xab, 0x1a, 0x79, 0x05, 0x5f, 0x6d,
-	0xbc, 0x27, 0xf3, 0x68, 0x6a, 0xda, 0x8e, 0xda, 0xec, 0xbb, 0x67, 0x8d, 0x98, 0x56, 0xe4, 0xb6,
-	0x72, 0xed, 0x1a, 0xc8, 0x6a, 0x08, 0xc2, 0x75, 0xb8, 0x50, 0xce, 0x3c, 0x14, 0x8e, 0xef, 0x99,
-	0xa8, 0xb6, 0x53, 0x61, 0xec, 0xd1, 0xbd, 0xb8, 0x18, 0xb4, 0xd7, 0x28, 0x1c, 0xb4, 0x51, 0xae,
-	0x86, 0x77, 0x02, 0x05, 0xe5, 0x55, 0x2e, 0x5d, 0x8c, 0x86, 0x90, 0x0f, 0x0a, 0xfd, 0xa5, 0xbb,
-	0x45, 0x33, 0xbd, 0x45, 0xb3, 0x0d, 0x87, 0x89, 0x66, 0xe4, 0xe5, 0x67, 0xc8, 0xc7, 0x94, 0x68,
-	0x26, 0xda, 0xe6, 0x89, 0x69, 0x84, 0xd3, 0x84, 0x59, 0xb3, 0x21, 0x1f, 0x57, 0xc9, 0x8f, 0x90,
-	0x15, 0x32, 0x98, 0x4e, 0xd0, 0x7e, 0xd0, 0xa8, 0x6c, 0xb6, 0x3f, 0x04, 0x20, 0x0d, 0x39, 0xe4,
-	0x12, 0x76, 0xc3, 0xfc, 0x45, 0x34, 0xcc, 0x4f, 0xdc, 0x80, 0x98, 0x59, 0x1b, 0x40, 0xb9, 0x85,
-	0x36, 0xae, 0x5f, 0xa5, 0xcf, 0x4f, 0xe3, 0x08, 0xc8, 0xaa, 0x6c, 0x18, 0xc8, 0x0f, 0xaf, 0x21,
-	0xab, 0x1c, 0x93, 0x0a, 0x94, 0xa9, 0xd1, 0xa7, 0xff, 0x35, 0x6f, 0xba, 0xc6, 0xf0, 0xef, 0x66,
-	0xa7, 0x3b, 0xa0, 0x46, 0xe9, 0x8b, 0xa0, 0x7c, 0x6f, 0xd0, 0xbb, 0x66, 0xcf, 0xe8, 0xf5, 0x93,
-	0x72, 0x8a, 0x14, 0x61, 0xf7, 0xde, 0xe8, 0xb5, 0x3a, 0xbd, 0x76, 0x29, 0x1d, 0x2c, 0xe8, 0xa0,
-	0xd7, 0x0b, 0x16, 0x19, 0xb2, 0x0f, 0x85, 0x87, 0xc1, 0xed, 0xad, 0x61, 0xb4, 0x8c, 0x56, 0x69,
-	0xe7, 0xe6, 0x8f, 0xff, 0x7f, 0x9f, 0x5a, 0xf2, 0x8d, 0x3f, 0xd2, 0x4d, 0x67, 0x5e, 0x57, 0x87,
-	0x77, 0xbc, 0x69, 0xf8, 0x50, 0x4f, 0xbe, 0xf7, 0x53, 0xe4, 0x75, 0x77, 0xf4, 0xd3, 0xd4, 0xa9,
-	0xaf, 0xff, 0x86, 0x46, 0x39, 0xf5, 0xe5, 0xbf, 0xfc, 0x10, 0x00, 0x00, 0xff, 0xff, 0x14, 0xef,
-	0x1e, 0x8b, 0x9f, 0x06, 0x00, 0x00,
+	// 744 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x55, 0xef, 0x6f, 0x2a, 0x45,
+	0x14, 0x15, 0x28, 0x3c, 0xb8, 0xb4, 0x3c, 0x18, 0x4b, 0xdc, 0xf2, 0x9e, 0xa6, 0x59, 0xa3, 0x69,
+	0x34, 0x2e, 0x79, 0xd4, 0x68, 0xab, 0x51, 0x43, 0xcb, 0x96, 0x90, 0x50, 0xd2, 0x4c, 0xc1, 0xa8,
+	0x89, 0x92, 0x61, 0xb9, 0xe0, 0x86, 0x65, 0x76, 0xdd, 0x99, 0x25, 0x25, 0x7e, 0xf4, 0x9f, 0xf0,
+	0xcf, 0x35, 0x3b, 0xfb, 0xa3, 0x40, 0xd0, 0xb4, 0xe9, 0x07, 0xbf, 0xed, 0xdc, 0x73, 0xef, 0xb9,
+	0x67, 0xcf, 0xbd, 0x93, 0x81, 0xc6, 0xcc, 0x59, 0x4b, 0xb4, 0xa7, 0x4e, 0x93, 0x4d, 0x97, 0x36,
+	0x6f, 0xb2, 0x39, 0x72, 0x69, 0x78, 0xbe, 0x2b, 0x5d, 0x52, 0x49, 0x30, 0x43, 0x61, 0x8d, 0xb7,
+	0x69, 0xae, 0xe5, 0xfa, 0xd8, 0x74, 0x6c, 0x89, 0x3e, 0x73, 0x44, 0x94, 0xdd, 0x38, 0xd9, 0x46,
+	0x25, 0x13, 0x8b, 0x04, 0xfa, 0x70, 0x1b, 0xb2, 0xb9, 0x44, 0x7f, 0xc6, 0x2c, 0x8c, 0xe1, 0x8f,
+	0x76, 0xe0, 0x29, 0x72, 0x69, 0xcf, 0x6c, 0xf4, 0x23, 0x5c, 0xff, 0x3b, 0x0f, 0xf5, 0x21, 0x13,
+	0x0b, 0xf3, 0x01, 0xad, 0x40, 0xda, 0x2e, 0xbf, 0x45, 0xc9, 0xa6, 0x4c, 0x32, 0x42, 0xa1, 0x16,
+	0xf6, 0x19, 0x63, 0x82, 0x8c, 0xed, 0xa9, 0x96, 0x39, 0xcd, 0x9c, 0x95, 0x5b, 0x9f, 0x1a, 0xa9,
+	0xfa, 0x90, 0xd5, 0xd8, 0x22, 0xe8, 0xa5, 0x2d, 0xe8, 0x6b, 0xb9, 0x0d, 0x90, 0xb7, 0x50, 0xe2,
+	0x6c, 0x89, 0xc2, 0x63, 0x16, 0x6a, 0xd9, 0xd3, 0xcc, 0x59, 0x89, 0x3e, 0x06, 0x48, 0x0f, 0x0a,
+	0x0e, 0x9b, 0xa0, 0x23, 0xb4, 0xdc, 0x69, 0xee, 0xac, 0xdc, 0x7a, 0x67, 0x6c, 0x9b, 0x64, 0xec,
+	0x15, 0x6a, 0xf4, 0x55, 0x8d, 0xc9, 0xa5, 0xbf, 0xa6, 0x31, 0x01, 0xf9, 0x09, 0xca, 0x8c, 0x73,
+	0x57, 0xb2, 0x30, 0x53, 0x68, 0x07, 0x8a, 0xef, 0xab, 0xa7, 0xf1, 0xb5, 0x1f, 0x0b, 0x23, 0xd2,
+	0x4d, 0x2a, 0x62, 0xc0, 0xfb, 0x8b, 0x0b, 0x31, 0x16, 0xe8, 0xaf, 0x6c, 0x0b, 0xc7, 0xcc, 0xb2,
+	0xdc, 0x80, 0x4b, 0x2d, 0xaf, 0x7e, 0xa6, 0xb6, 0xb8, 0x10, 0xf7, 0x11, 0xd2, 0x8e, 0x00, 0x22,
+	0xa1, 0x8e, 0x7c, 0x65, 0xfb, 0x2e, 0x5f, 0x22, 0x97, 0xe3, 0x15, 0xf3, 0x6d, 0x36, 0x71, 0x50,
+	0x68, 0x05, 0xa5, 0xe9, 0x87, 0xa7, 0x69, 0x32, 0x1f, 0x29, 0x7e, 0x4c, 0x18, 0x22, 0x71, 0xc7,
+	0xb8, 0x07, 0x6a, 0x5c, 0x42, 0x79, 0xc3, 0x16, 0x52, 0x85, 0xdc, 0x02, 0xd7, 0x6a, 0x7a, 0x25,
+	0x1a, 0x7e, 0x92, 0x63, 0xc8, 0xaf, 0x98, 0x13, 0x24, 0x53, 0x88, 0x0e, 0xdf, 0x64, 0x2f, 0x32,
+	0x8d, 0xef, 0xa1, 0xba, 0xeb, 0xc0, 0xb3, 0xea, 0xbb, 0x70, 0xf2, 0xaf, 0x6a, 0x9f, 0x43, 0xa4,
+	0xff, 0x95, 0x85, 0xda, 0xb5, 0x8f, 0x4c, 0x62, 0xe8, 0x09, 0xc5, 0x3f, 0x02, 0x14, 0x92, 0xbc,
+	0x83, 0x82, 0xcd, 0xbd, 0x40, 0x8a, 0x78, 0x17, 0x4f, 0x76, 0x76, 0xb1, 0x1f, 0xdd, 0x9c, 0x5b,
+	0xe6, 0xd1, 0x38, 0x91, 0x7c, 0x0d, 0x45, 0x89, 0x4b, 0xcf, 0x61, 0x32, 0xea, 0x52, 0x6e, 0xbd,
+	0xd9, 0xb3, 0xc0, 0xc3, 0x38, 0x85, 0xa6, 0xc9, 0xe4, 0x63, 0x38, 0x72, 0x03, 0xe9, 0x05, 0x72,
+	0xec, 0xf9, 0x38, 0xb3, 0x1f, 0xb4, 0x9c, 0xd2, 0x78, 0x18, 0x05, 0xef, 0x54, 0x8c, 0xfc, 0x0a,
+	0x1f, 0xec, 0xdc, 0x93, 0x65, 0x3c, 0x35, 0xed, 0x40, 0x35, 0xfb, 0xe4, 0x49, 0x23, 0xa6, 0x75,
+	0xb9, 0x2f, 0xac, 0x5f, 0x02, 0xd9, 0x34, 0x41, 0x78, 0x2e, 0x17, 0x4a, 0x99, 0x8f, 0xc2, 0x0d,
+	0x7c, 0x0b, 0x55, 0x3b, 0x65, 0xc6, 0x21, 0x3d, 0x4c, 0x82, 0x61, 0xb9, 0x4e, 0xa1, 0xd2, 0x45,
+	0xb9, 0x69, 0xde, 0x1b, 0x28, 0x29, 0xad, 0x72, 0xed, 0x61, 0x3c, 0x84, 0x62, 0x18, 0x18, 0xae,
+	0xbd, 0x3d, 0x9c, 0xd9, 0x3d, 0x9c, 0x5d, 0x78, 0x9d, 0x72, 0xc6, 0x5a, 0xbe, 0x84, 0x62, 0x92,
+	0x12, 0xcf, 0x44, 0xdb, 0xfd, 0x63, 0x1a, 0xe3, 0x34, 0xcd, 0xd4, 0x1d, 0x28, 0x26, 0x51, 0xf2,
+	0x39, 0xe4, 0x85, 0x0c, 0xa7, 0x13, 0x96, 0x57, 0x5a, 0xf5, 0xdd, 0xf2, 0xfb, 0x10, 0xa4, 0x51,
+	0x0e, 0x39, 0x87, 0x57, 0x91, 0xff, 0x22, 0x1e, 0xe6, 0x7f, 0x6c, 0x40, 0x92, 0xa9, 0x8f, 0xa0,
+	0xd6, 0x41, 0x07, 0xb7, 0x57, 0xe9, 0xe5, 0x6e, 0x1c, 0x03, 0xd9, 0xa4, 0x8d, 0x0c, 0xd1, 0xff,
+	0x84, 0xa3, 0x8e, 0xfb, 0x3f, 0xed, 0xac, 0x7e, 0x03, 0x95, 0xa4, 0xf9, 0x4b, 0xe6, 0xf3, 0xd9,
+	0x6f, 0x90, 0x57, 0xb6, 0x93, 0x3a, 0xd4, 0xa8, 0x39, 0xa4, 0x3f, 0xb7, 0xaf, 0xfa, 0xe6, 0xf8,
+	0xa6, 0xdd, 0xeb, 0x8f, 0xa8, 0x59, 0x7d, 0x2f, 0x0c, 0xdf, 0x99, 0xf4, 0xb6, 0x3d, 0x30, 0x07,
+	0xc3, 0x34, 0x9c, 0x21, 0x65, 0x78, 0x75, 0x67, 0x0e, 0x3a, 0xbd, 0x41, 0xb7, 0x9a, 0x0d, 0x0f,
+	0x74, 0x34, 0x18, 0x84, 0x87, 0x1c, 0x39, 0x82, 0xd2, 0xfd, 0xe8, 0xfa, 0xda, 0x34, 0x3b, 0x66,
+	0xa7, 0x7a, 0x70, 0xf5, 0xdd, 0x2f, 0xdf, 0xce, 0x6d, 0xf9, 0x7b, 0x30, 0x31, 0x2c, 0x77, 0xd9,
+	0x54, 0x7a, 0x5c, 0x7f, 0x1e, 0x7d, 0x34, 0xd3, 0x47, 0x6b, 0x8e, 0xbc, 0xe9, 0x4d, 0xbe, 0x98,
+	0xbb, 0xcd, 0xed, 0xb7, 0x74, 0x52, 0x50, 0xcf, 0xd7, 0xf9, 0x3f, 0x01, 0x00, 0x00, 0xff, 0xff,
+	0x45, 0x8e, 0x93, 0x5b, 0x64, 0x07, 0x00, 0x00,
 }
diff --git a/flyteidl/gen/pb-go/flyteidl/service/agent.pb.go b/flyteidl/gen/pb-go/flyteidl/service/agent.pb.go
index 274daaf196..fbd1ed3e73 100644
--- a/flyteidl/gen/pb-go/flyteidl/service/agent.pb.go
+++ b/flyteidl/gen/pb-go/flyteidl/service/agent.pb.go
@@ -28,21 +28,22 @@ const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
 func init() { proto.RegisterFile("flyteidl/service/agent.proto", fileDescriptor_f7d1dfd1fb77d2ef) }
 
 var fileDescriptor_f7d1dfd1fb77d2ef = []byte{
-	// 214 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0x49, 0xcb, 0xa9, 0x2c,
-	0x49, 0xcd, 0x4c, 0xc9, 0xd1, 0x2f, 0x4e, 0x2d, 0x2a, 0xcb, 0x4c, 0x4e, 0xd5, 0x4f, 0x4c, 0x4f,
-	0xcd, 0x2b, 0xd1, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x12, 0x80, 0xc9, 0xea, 0x41, 0x65, 0xa5,
-	0xa4, 0xe0, 0xea, 0x13, 0x53, 0x72, 0x33, 0xf3, 0x90, 0x55, 0x1b, 0xf5, 0x33, 0x71, 0x09, 0x3a,
-	0x16, 0x57, 0xe6, 0x25, 0x3b, 0x82, 0x04, 0x83, 0x21, 0x3a, 0x84, 0x42, 0xb9, 0xb8, 0x9c, 0x8b,
-	0x52, 0x13, 0x4b, 0x52, 0x43, 0x12, 0x8b, 0xb3, 0x85, 0x14, 0xf5, 0xe0, 0x46, 0x82, 0x0d, 0xd0,
-	0x43, 0xc8, 0x05, 0xa5, 0x16, 0x96, 0xa6, 0x16, 0x97, 0x48, 0x29, 0xe1, 0x53, 0x52, 0x5c, 0x90,
-	0x9f, 0x57, 0x9c, 0xaa, 0xc4, 0x20, 0xe4, 0xc3, 0xc5, 0xee, 0x9e, 0x5a, 0x02, 0x36, 0x53, 0x0e,
-	0x5d, 0x03, 0x54, 0x02, 0x66, 0xa0, 0x3c, 0x4e, 0x79, 0xb8, 0x69, 0xa1, 0x5c, 0x5c, 0x2e, 0xa9,
-	0x39, 0xa9, 0xb8, 0x1c, 0x89, 0x90, 0xc3, 0xe9, 0x48, 0x64, 0x25, 0x30, 0x63, 0x9d, 0xec, 0xa3,
-	0x6c, 0xd3, 0x33, 0x4b, 0x32, 0x4a, 0x93, 0xf4, 0x92, 0xf3, 0x73, 0xf5, 0xc1, 0x3a, 0xf2, 0x8b,
-	0xd2, 0x21, 0x0c, 0x7d, 0x78, 0x48, 0xa6, 0xa7, 0xe6, 0xe9, 0x17, 0x24, 0xe9, 0xa6, 0xe7, 0xeb,
-	0xa3, 0x47, 0x46, 0x12, 0x1b, 0x38, 0x64, 0x8d, 0x01, 0x01, 0x00, 0x00, 0xff, 0xff, 0x92, 0xbb,
-	0xf6, 0x3c, 0xa7, 0x01, 0x00, 0x00,
+	// 231 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x91, 0xc1, 0x4a, 0xc4, 0x30,
+	0x10, 0x40, 0xc5, 0xc3, 0x0a, 0x73, 0xd2, 0x1c, 0x8b, 0xae, 0xb8, 0x77, 0x13, 0xd0, 0xb3, 0xc8,
+	0xea, 0x82, 0x08, 0x9e, 0xd4, 0xbd, 0x78, 0x4b, 0xbb, 0x63, 0x0c, 0xb6, 0x99, 0x9a, 0xa4, 0x42,
+	0x7f, 0xd5, 0xaf, 0x11, 0xd3, 0x36, 0x2d, 0x95, 0xec, 0x2d, 0xe4, 0xbd, 0x79, 0x0c, 0x0c, 0x9c,
+	0xbe, 0x97, 0xad, 0x47, 0xbd, 0x2b, 0x85, 0x43, 0xfb, 0xad, 0x0b, 0x14, 0x52, 0xa1, 0xf1, 0xbc,
+	0xb6, 0xe4, 0x89, 0x1d, 0x0f, 0x94, 0xf7, 0x34, 0xcb, 0xa2, 0x2f, 0x77, 0x95, 0x36, 0x53, 0xfb,
+	0xea, 0xe7, 0x10, 0x4e, 0xd6, 0xae, 0x35, 0xc5, 0xfa, 0xef, 0xf3, 0xa5, 0x9b, 0x60, 0x5b, 0x80,
+	0x7b, 0x8b, 0xd2, 0xe3, 0xab, 0x74, 0x9f, 0xec, 0x82, 0xc7, 0x64, 0x08, 0xf0, 0x91, 0x3d, 0xe3,
+	0x57, 0x83, 0xce, 0x67, 0xab, 0x7d, 0x8a, 0xab, 0xc9, 0x38, 0x5c, 0x1d, 0xb0, 0x27, 0x38, 0x7a,
+	0x40, 0x1f, 0x9a, 0xcb, 0xf9, 0x40, 0x0f, 0x86, 0xe0, 0x79, 0x92, 0xc7, 0xda, 0x16, 0x60, 0x83,
+	0x25, 0xa6, 0x96, 0x1c, 0x59, 0x72, 0xc9, 0xa9, 0x12, 0xb3, 0x8f, 0xb0, 0xd8, 0x50, 0x48, 0x9e,
+	0xfd, 0xf3, 0x69, 0x9a, 0x5b, 0xa6, 0xf0, 0x90, 0xba, 0xbb, 0x7d, 0xbb, 0x51, 0xda, 0x7f, 0x34,
+	0x39, 0x2f, 0xa8, 0x12, 0xc1, 0x26, 0xab, 0xba, 0x87, 0x88, 0x47, 0x51, 0x68, 0x44, 0x9d, 0x5f,
+	0x2a, 0x12, 0xf3, 0xbb, 0xe6, 0x8b, 0x70, 0xa4, 0xeb, 0xdf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x01,
+	0xb8, 0x9c, 0xe0, 0xf2, 0x01, 0x00, 0x00,
 }
 
 // Reference imports to suppress errors if they are not otherwise used.
@@ -63,6 +64,8 @@ type AsyncAgentServiceClient interface {
 	GetTask(ctx context.Context, in *admin.GetTaskRequest, opts ...grpc.CallOption) (*admin.GetTaskResponse, error)
 	// Delete the task resource.
 	DeleteTask(ctx context.Context, in *admin.DeleteTaskRequest, opts ...grpc.CallOption) (*admin.DeleteTaskResponse, error)
+	// Do a job and get response from the agent server.
+	DoTask(ctx context.Context, in *admin.DoTaskRequest, opts ...grpc.CallOption) (*admin.DoTaskResponse, error)
 }
 
 type asyncAgentServiceClient struct {
@@ -100,6 +103,15 @@ func (c *asyncAgentServiceClient) DeleteTask(ctx context.Context, in *admin.Dele
 	return out, nil
 }
 
+func (c *asyncAgentServiceClient) DoTask(ctx context.Context, in *admin.DoTaskRequest, opts ...grpc.CallOption) (*admin.DoTaskResponse, error) {
+	out := new(admin.DoTaskResponse)
+	err := c.cc.Invoke(ctx, "/flyteidl.service.AsyncAgentService/DoTask", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
 // AsyncAgentServiceServer is the server API for AsyncAgentService service.
 type AsyncAgentServiceServer interface {
 	// Send a task create request to the agent server.
@@ -108,6 +120,8 @@ type AsyncAgentServiceServer interface {
 	GetTask(context.Context, *admin.GetTaskRequest) (*admin.GetTaskResponse, error)
 	// Delete the task resource.
 	DeleteTask(context.Context, *admin.DeleteTaskRequest) (*admin.DeleteTaskResponse, error)
+	// Do a job and get response from the agent server.
+	DoTask(context.Context, *admin.DoTaskRequest) (*admin.DoTaskResponse, error)
 }
 
 // UnimplementedAsyncAgentServiceServer can be embedded to have forward compatible implementations.
@@ -123,6 +137,9 @@ func (*UnimplementedAsyncAgentServiceServer) GetTask(ctx context.Context, req *a
 func (*UnimplementedAsyncAgentServiceServer) DeleteTask(ctx context.Context, req *admin.DeleteTaskRequest) (*admin.DeleteTaskResponse, error) {
 	return nil, status.Errorf(codes.Unimplemented, "method DeleteTask not implemented")
 }
+func (*UnimplementedAsyncAgentServiceServer) DoTask(ctx context.Context, req *admin.DoTaskRequest) (*admin.DoTaskResponse, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method DoTask not implemented")
+}
 
 func RegisterAsyncAgentServiceServer(s *grpc.Server, srv AsyncAgentServiceServer) {
 	s.RegisterService(&_AsyncAgentService_serviceDesc, srv)
@@ -182,6 +199,24 @@ func _AsyncAgentService_DeleteTask_Handler(srv interface{}, ctx context.Context,
 	return interceptor(ctx, in, info, handler)
 }
 
+func _AsyncAgentService_DoTask_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(admin.DoTaskRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(AsyncAgentServiceServer).DoTask(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/flyteidl.service.AsyncAgentService/DoTask",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(AsyncAgentServiceServer).DoTask(ctx, req.(*admin.DoTaskRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
 var _AsyncAgentService_serviceDesc = grpc.ServiceDesc{
 	ServiceName: "flyteidl.service.AsyncAgentService",
 	HandlerType: (*AsyncAgentServiceServer)(nil),
@@ -198,6 +233,10 @@ var _AsyncAgentService_serviceDesc = grpc.ServiceDesc{
 			MethodName: "DeleteTask",
 			Handler:    _AsyncAgentService_DeleteTask_Handler,
 		},
+		{
+			MethodName: "DoTask",
+			Handler:    _AsyncAgentService_DoTask_Handler,
+		},
 	},
 	Streams:  []grpc.StreamDesc{},
 	Metadata: "flyteidl/service/agent.proto",
diff --git a/flyteidl/gen/pb-java/flyteidl/admin/Agent.java b/flyteidl/gen/pb-java/flyteidl/admin/Agent.java
index b0d9d2574e..edcd8b9fa9 100644
--- a/flyteidl/gen/pb-java/flyteidl/admin/Agent.java
+++ b/flyteidl/gen/pb-java/flyteidl/admin/Agent.java
@@ -7333,6 +7333,1570 @@ public flyteidl.admin.Agent.DeleteTaskResponse getDefaultInstanceForType() {
 
   }
 
+  public interface DoTaskRequestOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:flyteidl.admin.DoTaskRequest)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * 
+     * The inputs required to start the execution. All required inputs must be
+     * included in this map. If not required and not provided, defaults apply.
+     * +optional
+     * 
+ * + * .flyteidl.core.LiteralMap inputs = 1; + */ + boolean hasInputs(); + /** + *
+     * The inputs required to start the execution. All required inputs must be
+     * included in this map. If not required and not provided, defaults apply.
+     * +optional
+     * 
+ * + * .flyteidl.core.LiteralMap inputs = 1; + */ + flyteidl.core.Literals.LiteralMap getInputs(); + /** + *
+     * The inputs required to start the execution. All required inputs must be
+     * included in this map. If not required and not provided, defaults apply.
+     * +optional
+     * 
+ * + * .flyteidl.core.LiteralMap inputs = 1; + */ + flyteidl.core.Literals.LiteralMapOrBuilder getInputsOrBuilder(); + + /** + *
+     * Template of the task that encapsulates all the metadata of the task.
+     * 
+ * + * .flyteidl.core.TaskTemplate template = 2; + */ + boolean hasTemplate(); + /** + *
+     * Template of the task that encapsulates all the metadata of the task.
+     * 
+ * + * .flyteidl.core.TaskTemplate template = 2; + */ + flyteidl.core.Tasks.TaskTemplate getTemplate(); + /** + *
+     * Template of the task that encapsulates all the metadata of the task.
+     * 
+ * + * .flyteidl.core.TaskTemplate template = 2; + */ + flyteidl.core.Tasks.TaskTemplateOrBuilder getTemplateOrBuilder(); + } + /** + *
+   * A message used to do a task
+   * 
+ * + * Protobuf type {@code flyteidl.admin.DoTaskRequest} + */ + public static final class DoTaskRequest extends + com.google.protobuf.GeneratedMessageV3 implements + // @@protoc_insertion_point(message_implements:flyteidl.admin.DoTaskRequest) + DoTaskRequestOrBuilder { + private static final long serialVersionUID = 0L; + // Use DoTaskRequest.newBuilder() to construct. + private DoTaskRequest(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + private DoTaskRequest() { + } + + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet + getUnknownFields() { + return this.unknownFields; + } + private DoTaskRequest( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + this(); + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + int mutable_bitField0_ = 0; + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder(); + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: { + flyteidl.core.Literals.LiteralMap.Builder subBuilder = null; + if (inputs_ != null) { + subBuilder = inputs_.toBuilder(); + } + inputs_ = input.readMessage(flyteidl.core.Literals.LiteralMap.parser(), extensionRegistry); + if (subBuilder != null) { + subBuilder.mergeFrom(inputs_); + inputs_ = subBuilder.buildPartial(); + } + + break; + } + case 18: { + flyteidl.core.Tasks.TaskTemplate.Builder subBuilder = null; + if (template_ != null) { + subBuilder = template_.toBuilder(); + } + template_ = input.readMessage(flyteidl.core.Tasks.TaskTemplate.parser(), extensionRegistry); + if (subBuilder != null) { + subBuilder.mergeFrom(template_); + template_ = subBuilder.buildPartial(); + } + + break; + } + default: { + if (!parseUnknownField( + input, unknownFields, extensionRegistry, tag)) { + done = true; + } + break; + } + } + } + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(this); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException( + e).setUnfinishedMessage(this); + } finally { + this.unknownFields = unknownFields.build(); + makeExtensionsImmutable(); + } + } + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return flyteidl.admin.Agent.internal_static_flyteidl_admin_DoTaskRequest_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return flyteidl.admin.Agent.internal_static_flyteidl_admin_DoTaskRequest_fieldAccessorTable + .ensureFieldAccessorsInitialized( + flyteidl.admin.Agent.DoTaskRequest.class, flyteidl.admin.Agent.DoTaskRequest.Builder.class); + } + + public static final int INPUTS_FIELD_NUMBER = 1; + private flyteidl.core.Literals.LiteralMap inputs_; + /** + *
+     * The inputs required to start the execution. All required inputs must be
+     * included in this map. If not required and not provided, defaults apply.
+     * +optional
+     * 
+ * + * .flyteidl.core.LiteralMap inputs = 1; + */ + public boolean hasInputs() { + return inputs_ != null; + } + /** + *
+     * The inputs required to start the execution. All required inputs must be
+     * included in this map. If not required and not provided, defaults apply.
+     * +optional
+     * 
+ * + * .flyteidl.core.LiteralMap inputs = 1; + */ + public flyteidl.core.Literals.LiteralMap getInputs() { + return inputs_ == null ? flyteidl.core.Literals.LiteralMap.getDefaultInstance() : inputs_; + } + /** + *
+     * The inputs required to start the execution. All required inputs must be
+     * included in this map. If not required and not provided, defaults apply.
+     * +optional
+     * 
+ * + * .flyteidl.core.LiteralMap inputs = 1; + */ + public flyteidl.core.Literals.LiteralMapOrBuilder getInputsOrBuilder() { + return getInputs(); + } + + public static final int TEMPLATE_FIELD_NUMBER = 2; + private flyteidl.core.Tasks.TaskTemplate template_; + /** + *
+     * Template of the task that encapsulates all the metadata of the task.
+     * 
+ * + * .flyteidl.core.TaskTemplate template = 2; + */ + public boolean hasTemplate() { + return template_ != null; + } + /** + *
+     * Template of the task that encapsulates all the metadata of the task.
+     * 
+ * + * .flyteidl.core.TaskTemplate template = 2; + */ + public flyteidl.core.Tasks.TaskTemplate getTemplate() { + return template_ == null ? flyteidl.core.Tasks.TaskTemplate.getDefaultInstance() : template_; + } + /** + *
+     * Template of the task that encapsulates all the metadata of the task.
+     * 
+ * + * .flyteidl.core.TaskTemplate template = 2; + */ + public flyteidl.core.Tasks.TaskTemplateOrBuilder getTemplateOrBuilder() { + return getTemplate(); + } + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + if (inputs_ != null) { + output.writeMessage(1, getInputs()); + } + if (template_ != null) { + output.writeMessage(2, getTemplate()); + } + unknownFields.writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (inputs_ != null) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(1, getInputs()); + } + if (template_ != null) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(2, getTemplate()); + } + size += unknownFields.getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof flyteidl.admin.Agent.DoTaskRequest)) { + return super.equals(obj); + } + flyteidl.admin.Agent.DoTaskRequest other = (flyteidl.admin.Agent.DoTaskRequest) obj; + + if (hasInputs() != other.hasInputs()) return false; + if (hasInputs()) { + if (!getInputs() + .equals(other.getInputs())) return false; + } + if (hasTemplate() != other.hasTemplate()) return false; + if (hasTemplate()) { + if (!getTemplate() + .equals(other.getTemplate())) return false; + } + if (!unknownFields.equals(other.unknownFields)) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + if (hasInputs()) { + hash = (37 * hash) + INPUTS_FIELD_NUMBER; + hash = (53 * hash) + getInputs().hashCode(); + } + if (hasTemplate()) { + hash = (37 * hash) + TEMPLATE_FIELD_NUMBER; + hash = (53 * hash) + getTemplate().hashCode(); + } + hash = (29 * hash) + unknownFields.hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static flyteidl.admin.Agent.DoTaskRequest parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static flyteidl.admin.Agent.DoTaskRequest parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static flyteidl.admin.Agent.DoTaskRequest parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static flyteidl.admin.Agent.DoTaskRequest parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static flyteidl.admin.Agent.DoTaskRequest parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static flyteidl.admin.Agent.DoTaskRequest parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static flyteidl.admin.Agent.DoTaskRequest parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static flyteidl.admin.Agent.DoTaskRequest parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + public static flyteidl.admin.Agent.DoTaskRequest parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input); + } + public static flyteidl.admin.Agent.DoTaskRequest parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static flyteidl.admin.Agent.DoTaskRequest parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static flyteidl.admin.Agent.DoTaskRequest parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(flyteidl.admin.Agent.DoTaskRequest prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + *
+     * A message used to do a task
+     * 
+ * + * Protobuf type {@code flyteidl.admin.DoTaskRequest} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageV3.Builder implements + // @@protoc_insertion_point(builder_implements:flyteidl.admin.DoTaskRequest) + flyteidl.admin.Agent.DoTaskRequestOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return flyteidl.admin.Agent.internal_static_flyteidl_admin_DoTaskRequest_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return flyteidl.admin.Agent.internal_static_flyteidl_admin_DoTaskRequest_fieldAccessorTable + .ensureFieldAccessorsInitialized( + flyteidl.admin.Agent.DoTaskRequest.class, flyteidl.admin.Agent.DoTaskRequest.Builder.class); + } + + // Construct using flyteidl.admin.Agent.DoTaskRequest.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessageV3 + .alwaysUseFieldBuilders) { + } + } + @java.lang.Override + public Builder clear() { + super.clear(); + if (inputsBuilder_ == null) { + inputs_ = null; + } else { + inputs_ = null; + inputsBuilder_ = null; + } + if (templateBuilder_ == null) { + template_ = null; + } else { + template_ = null; + templateBuilder_ = null; + } + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return flyteidl.admin.Agent.internal_static_flyteidl_admin_DoTaskRequest_descriptor; + } + + @java.lang.Override + public flyteidl.admin.Agent.DoTaskRequest getDefaultInstanceForType() { + return flyteidl.admin.Agent.DoTaskRequest.getDefaultInstance(); + } + + @java.lang.Override + public flyteidl.admin.Agent.DoTaskRequest build() { + flyteidl.admin.Agent.DoTaskRequest result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public flyteidl.admin.Agent.DoTaskRequest buildPartial() { + flyteidl.admin.Agent.DoTaskRequest result = new flyteidl.admin.Agent.DoTaskRequest(this); + if (inputsBuilder_ == null) { + result.inputs_ = inputs_; + } else { + result.inputs_ = inputsBuilder_.build(); + } + if (templateBuilder_ == null) { + result.template_ = template_; + } else { + result.template_ = templateBuilder_.build(); + } + onBuilt(); + return result; + } + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.setField(field, value); + } + @java.lang.Override + public Builder clearField( + com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + @java.lang.Override + public Builder clearOneof( + com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + int index, java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.addRepeatedField(field, value); + } + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof flyteidl.admin.Agent.DoTaskRequest) { + return mergeFrom((flyteidl.admin.Agent.DoTaskRequest)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(flyteidl.admin.Agent.DoTaskRequest other) { + if (other == flyteidl.admin.Agent.DoTaskRequest.getDefaultInstance()) return this; + if (other.hasInputs()) { + mergeInputs(other.getInputs()); + } + if (other.hasTemplate()) { + mergeTemplate(other.getTemplate()); + } + this.mergeUnknownFields(other.unknownFields); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + flyteidl.admin.Agent.DoTaskRequest parsedMessage = null; + try { + parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + parsedMessage = (flyteidl.admin.Agent.DoTaskRequest) e.getUnfinishedMessage(); + throw e.unwrapIOException(); + } finally { + if (parsedMessage != null) { + mergeFrom(parsedMessage); + } + } + return this; + } + + private flyteidl.core.Literals.LiteralMap inputs_; + private com.google.protobuf.SingleFieldBuilderV3< + flyteidl.core.Literals.LiteralMap, flyteidl.core.Literals.LiteralMap.Builder, flyteidl.core.Literals.LiteralMapOrBuilder> inputsBuilder_; + /** + *
+       * The inputs required to start the execution. All required inputs must be
+       * included in this map. If not required and not provided, defaults apply.
+       * +optional
+       * 
+ * + * .flyteidl.core.LiteralMap inputs = 1; + */ + public boolean hasInputs() { + return inputsBuilder_ != null || inputs_ != null; + } + /** + *
+       * The inputs required to start the execution. All required inputs must be
+       * included in this map. If not required and not provided, defaults apply.
+       * +optional
+       * 
+ * + * .flyteidl.core.LiteralMap inputs = 1; + */ + public flyteidl.core.Literals.LiteralMap getInputs() { + if (inputsBuilder_ == null) { + return inputs_ == null ? flyteidl.core.Literals.LiteralMap.getDefaultInstance() : inputs_; + } else { + return inputsBuilder_.getMessage(); + } + } + /** + *
+       * The inputs required to start the execution. All required inputs must be
+       * included in this map. If not required and not provided, defaults apply.
+       * +optional
+       * 
+ * + * .flyteidl.core.LiteralMap inputs = 1; + */ + public Builder setInputs(flyteidl.core.Literals.LiteralMap value) { + if (inputsBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + inputs_ = value; + onChanged(); + } else { + inputsBuilder_.setMessage(value); + } + + return this; + } + /** + *
+       * The inputs required to start the execution. All required inputs must be
+       * included in this map. If not required and not provided, defaults apply.
+       * +optional
+       * 
+ * + * .flyteidl.core.LiteralMap inputs = 1; + */ + public Builder setInputs( + flyteidl.core.Literals.LiteralMap.Builder builderForValue) { + if (inputsBuilder_ == null) { + inputs_ = builderForValue.build(); + onChanged(); + } else { + inputsBuilder_.setMessage(builderForValue.build()); + } + + return this; + } + /** + *
+       * The inputs required to start the execution. All required inputs must be
+       * included in this map. If not required and not provided, defaults apply.
+       * +optional
+       * 
+ * + * .flyteidl.core.LiteralMap inputs = 1; + */ + public Builder mergeInputs(flyteidl.core.Literals.LiteralMap value) { + if (inputsBuilder_ == null) { + if (inputs_ != null) { + inputs_ = + flyteidl.core.Literals.LiteralMap.newBuilder(inputs_).mergeFrom(value).buildPartial(); + } else { + inputs_ = value; + } + onChanged(); + } else { + inputsBuilder_.mergeFrom(value); + } + + return this; + } + /** + *
+       * The inputs required to start the execution. All required inputs must be
+       * included in this map. If not required and not provided, defaults apply.
+       * +optional
+       * 
+ * + * .flyteidl.core.LiteralMap inputs = 1; + */ + public Builder clearInputs() { + if (inputsBuilder_ == null) { + inputs_ = null; + onChanged(); + } else { + inputs_ = null; + inputsBuilder_ = null; + } + + return this; + } + /** + *
+       * The inputs required to start the execution. All required inputs must be
+       * included in this map. If not required and not provided, defaults apply.
+       * +optional
+       * 
+ * + * .flyteidl.core.LiteralMap inputs = 1; + */ + public flyteidl.core.Literals.LiteralMap.Builder getInputsBuilder() { + + onChanged(); + return getInputsFieldBuilder().getBuilder(); + } + /** + *
+       * The inputs required to start the execution. All required inputs must be
+       * included in this map. If not required and not provided, defaults apply.
+       * +optional
+       * 
+ * + * .flyteidl.core.LiteralMap inputs = 1; + */ + public flyteidl.core.Literals.LiteralMapOrBuilder getInputsOrBuilder() { + if (inputsBuilder_ != null) { + return inputsBuilder_.getMessageOrBuilder(); + } else { + return inputs_ == null ? + flyteidl.core.Literals.LiteralMap.getDefaultInstance() : inputs_; + } + } + /** + *
+       * The inputs required to start the execution. All required inputs must be
+       * included in this map. If not required and not provided, defaults apply.
+       * +optional
+       * 
+ * + * .flyteidl.core.LiteralMap inputs = 1; + */ + private com.google.protobuf.SingleFieldBuilderV3< + flyteidl.core.Literals.LiteralMap, flyteidl.core.Literals.LiteralMap.Builder, flyteidl.core.Literals.LiteralMapOrBuilder> + getInputsFieldBuilder() { + if (inputsBuilder_ == null) { + inputsBuilder_ = new com.google.protobuf.SingleFieldBuilderV3< + flyteidl.core.Literals.LiteralMap, flyteidl.core.Literals.LiteralMap.Builder, flyteidl.core.Literals.LiteralMapOrBuilder>( + getInputs(), + getParentForChildren(), + isClean()); + inputs_ = null; + } + return inputsBuilder_; + } + + private flyteidl.core.Tasks.TaskTemplate template_; + private com.google.protobuf.SingleFieldBuilderV3< + flyteidl.core.Tasks.TaskTemplate, flyteidl.core.Tasks.TaskTemplate.Builder, flyteidl.core.Tasks.TaskTemplateOrBuilder> templateBuilder_; + /** + *
+       * Template of the task that encapsulates all the metadata of the task.
+       * 
+ * + * .flyteidl.core.TaskTemplate template = 2; + */ + public boolean hasTemplate() { + return templateBuilder_ != null || template_ != null; + } + /** + *
+       * Template of the task that encapsulates all the metadata of the task.
+       * 
+ * + * .flyteidl.core.TaskTemplate template = 2; + */ + public flyteidl.core.Tasks.TaskTemplate getTemplate() { + if (templateBuilder_ == null) { + return template_ == null ? flyteidl.core.Tasks.TaskTemplate.getDefaultInstance() : template_; + } else { + return templateBuilder_.getMessage(); + } + } + /** + *
+       * Template of the task that encapsulates all the metadata of the task.
+       * 
+ * + * .flyteidl.core.TaskTemplate template = 2; + */ + public Builder setTemplate(flyteidl.core.Tasks.TaskTemplate value) { + if (templateBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + template_ = value; + onChanged(); + } else { + templateBuilder_.setMessage(value); + } + + return this; + } + /** + *
+       * Template of the task that encapsulates all the metadata of the task.
+       * 
+ * + * .flyteidl.core.TaskTemplate template = 2; + */ + public Builder setTemplate( + flyteidl.core.Tasks.TaskTemplate.Builder builderForValue) { + if (templateBuilder_ == null) { + template_ = builderForValue.build(); + onChanged(); + } else { + templateBuilder_.setMessage(builderForValue.build()); + } + + return this; + } + /** + *
+       * Template of the task that encapsulates all the metadata of the task.
+       * 
+ * + * .flyteidl.core.TaskTemplate template = 2; + */ + public Builder mergeTemplate(flyteidl.core.Tasks.TaskTemplate value) { + if (templateBuilder_ == null) { + if (template_ != null) { + template_ = + flyteidl.core.Tasks.TaskTemplate.newBuilder(template_).mergeFrom(value).buildPartial(); + } else { + template_ = value; + } + onChanged(); + } else { + templateBuilder_.mergeFrom(value); + } + + return this; + } + /** + *
+       * Template of the task that encapsulates all the metadata of the task.
+       * 
+ * + * .flyteidl.core.TaskTemplate template = 2; + */ + public Builder clearTemplate() { + if (templateBuilder_ == null) { + template_ = null; + onChanged(); + } else { + template_ = null; + templateBuilder_ = null; + } + + return this; + } + /** + *
+       * Template of the task that encapsulates all the metadata of the task.
+       * 
+ * + * .flyteidl.core.TaskTemplate template = 2; + */ + public flyteidl.core.Tasks.TaskTemplate.Builder getTemplateBuilder() { + + onChanged(); + return getTemplateFieldBuilder().getBuilder(); + } + /** + *
+       * Template of the task that encapsulates all the metadata of the task.
+       * 
+ * + * .flyteidl.core.TaskTemplate template = 2; + */ + public flyteidl.core.Tasks.TaskTemplateOrBuilder getTemplateOrBuilder() { + if (templateBuilder_ != null) { + return templateBuilder_.getMessageOrBuilder(); + } else { + return template_ == null ? + flyteidl.core.Tasks.TaskTemplate.getDefaultInstance() : template_; + } + } + /** + *
+       * Template of the task that encapsulates all the metadata of the task.
+       * 
+ * + * .flyteidl.core.TaskTemplate template = 2; + */ + private com.google.protobuf.SingleFieldBuilderV3< + flyteidl.core.Tasks.TaskTemplate, flyteidl.core.Tasks.TaskTemplate.Builder, flyteidl.core.Tasks.TaskTemplateOrBuilder> + getTemplateFieldBuilder() { + if (templateBuilder_ == null) { + templateBuilder_ = new com.google.protobuf.SingleFieldBuilderV3< + flyteidl.core.Tasks.TaskTemplate, flyteidl.core.Tasks.TaskTemplate.Builder, flyteidl.core.Tasks.TaskTemplateOrBuilder>( + getTemplate(), + getParentForChildren(), + isClean()); + template_ = null; + } + return templateBuilder_; + } + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + + // @@protoc_insertion_point(builder_scope:flyteidl.admin.DoTaskRequest) + } + + // @@protoc_insertion_point(class_scope:flyteidl.admin.DoTaskRequest) + private static final flyteidl.admin.Agent.DoTaskRequest DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new flyteidl.admin.Agent.DoTaskRequest(); + } + + public static flyteidl.admin.Agent.DoTaskRequest getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public DoTaskRequest parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return new DoTaskRequest(input, extensionRegistry); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public flyteidl.admin.Agent.DoTaskRequest getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + + public interface DoTaskResponseOrBuilder extends + // @@protoc_insertion_point(interface_extends:flyteidl.admin.DoTaskResponse) + com.google.protobuf.MessageOrBuilder { + + /** + * .flyteidl.admin.Resource resource = 1; + */ + boolean hasResource(); + /** + * .flyteidl.admin.Resource resource = 1; + */ + flyteidl.admin.Agent.Resource getResource(); + /** + * .flyteidl.admin.Resource resource = 1; + */ + flyteidl.admin.Agent.ResourceOrBuilder getResourceOrBuilder(); + } + /** + * Protobuf type {@code flyteidl.admin.DoTaskResponse} + */ + public static final class DoTaskResponse extends + com.google.protobuf.GeneratedMessageV3 implements + // @@protoc_insertion_point(message_implements:flyteidl.admin.DoTaskResponse) + DoTaskResponseOrBuilder { + private static final long serialVersionUID = 0L; + // Use DoTaskResponse.newBuilder() to construct. + private DoTaskResponse(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + private DoTaskResponse() { + } + + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet + getUnknownFields() { + return this.unknownFields; + } + private DoTaskResponse( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + this(); + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + int mutable_bitField0_ = 0; + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder(); + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: { + flyteidl.admin.Agent.Resource.Builder subBuilder = null; + if (resource_ != null) { + subBuilder = resource_.toBuilder(); + } + resource_ = input.readMessage(flyteidl.admin.Agent.Resource.parser(), extensionRegistry); + if (subBuilder != null) { + subBuilder.mergeFrom(resource_); + resource_ = subBuilder.buildPartial(); + } + + break; + } + default: { + if (!parseUnknownField( + input, unknownFields, extensionRegistry, tag)) { + done = true; + } + break; + } + } + } + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(this); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException( + e).setUnfinishedMessage(this); + } finally { + this.unknownFields = unknownFields.build(); + makeExtensionsImmutable(); + } + } + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return flyteidl.admin.Agent.internal_static_flyteidl_admin_DoTaskResponse_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return flyteidl.admin.Agent.internal_static_flyteidl_admin_DoTaskResponse_fieldAccessorTable + .ensureFieldAccessorsInitialized( + flyteidl.admin.Agent.DoTaskResponse.class, flyteidl.admin.Agent.DoTaskResponse.Builder.class); + } + + public static final int RESOURCE_FIELD_NUMBER = 1; + private flyteidl.admin.Agent.Resource resource_; + /** + * .flyteidl.admin.Resource resource = 1; + */ + public boolean hasResource() { + return resource_ != null; + } + /** + * .flyteidl.admin.Resource resource = 1; + */ + public flyteidl.admin.Agent.Resource getResource() { + return resource_ == null ? flyteidl.admin.Agent.Resource.getDefaultInstance() : resource_; + } + /** + * .flyteidl.admin.Resource resource = 1; + */ + public flyteidl.admin.Agent.ResourceOrBuilder getResourceOrBuilder() { + return getResource(); + } + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + if (resource_ != null) { + output.writeMessage(1, getResource()); + } + unknownFields.writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (resource_ != null) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(1, getResource()); + } + size += unknownFields.getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof flyteidl.admin.Agent.DoTaskResponse)) { + return super.equals(obj); + } + flyteidl.admin.Agent.DoTaskResponse other = (flyteidl.admin.Agent.DoTaskResponse) obj; + + if (hasResource() != other.hasResource()) return false; + if (hasResource()) { + if (!getResource() + .equals(other.getResource())) return false; + } + if (!unknownFields.equals(other.unknownFields)) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + if (hasResource()) { + hash = (37 * hash) + RESOURCE_FIELD_NUMBER; + hash = (53 * hash) + getResource().hashCode(); + } + hash = (29 * hash) + unknownFields.hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static flyteidl.admin.Agent.DoTaskResponse parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static flyteidl.admin.Agent.DoTaskResponse parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static flyteidl.admin.Agent.DoTaskResponse parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static flyteidl.admin.Agent.DoTaskResponse parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static flyteidl.admin.Agent.DoTaskResponse parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static flyteidl.admin.Agent.DoTaskResponse parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static flyteidl.admin.Agent.DoTaskResponse parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static flyteidl.admin.Agent.DoTaskResponse parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + public static flyteidl.admin.Agent.DoTaskResponse parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input); + } + public static flyteidl.admin.Agent.DoTaskResponse parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static flyteidl.admin.Agent.DoTaskResponse parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static flyteidl.admin.Agent.DoTaskResponse parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(flyteidl.admin.Agent.DoTaskResponse prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + * Protobuf type {@code flyteidl.admin.DoTaskResponse} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageV3.Builder implements + // @@protoc_insertion_point(builder_implements:flyteidl.admin.DoTaskResponse) + flyteidl.admin.Agent.DoTaskResponseOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return flyteidl.admin.Agent.internal_static_flyteidl_admin_DoTaskResponse_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return flyteidl.admin.Agent.internal_static_flyteidl_admin_DoTaskResponse_fieldAccessorTable + .ensureFieldAccessorsInitialized( + flyteidl.admin.Agent.DoTaskResponse.class, flyteidl.admin.Agent.DoTaskResponse.Builder.class); + } + + // Construct using flyteidl.admin.Agent.DoTaskResponse.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessageV3 + .alwaysUseFieldBuilders) { + } + } + @java.lang.Override + public Builder clear() { + super.clear(); + if (resourceBuilder_ == null) { + resource_ = null; + } else { + resource_ = null; + resourceBuilder_ = null; + } + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return flyteidl.admin.Agent.internal_static_flyteidl_admin_DoTaskResponse_descriptor; + } + + @java.lang.Override + public flyteidl.admin.Agent.DoTaskResponse getDefaultInstanceForType() { + return flyteidl.admin.Agent.DoTaskResponse.getDefaultInstance(); + } + + @java.lang.Override + public flyteidl.admin.Agent.DoTaskResponse build() { + flyteidl.admin.Agent.DoTaskResponse result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public flyteidl.admin.Agent.DoTaskResponse buildPartial() { + flyteidl.admin.Agent.DoTaskResponse result = new flyteidl.admin.Agent.DoTaskResponse(this); + if (resourceBuilder_ == null) { + result.resource_ = resource_; + } else { + result.resource_ = resourceBuilder_.build(); + } + onBuilt(); + return result; + } + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.setField(field, value); + } + @java.lang.Override + public Builder clearField( + com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + @java.lang.Override + public Builder clearOneof( + com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + int index, java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.addRepeatedField(field, value); + } + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof flyteidl.admin.Agent.DoTaskResponse) { + return mergeFrom((flyteidl.admin.Agent.DoTaskResponse)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(flyteidl.admin.Agent.DoTaskResponse other) { + if (other == flyteidl.admin.Agent.DoTaskResponse.getDefaultInstance()) return this; + if (other.hasResource()) { + mergeResource(other.getResource()); + } + this.mergeUnknownFields(other.unknownFields); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + flyteidl.admin.Agent.DoTaskResponse parsedMessage = null; + try { + parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + parsedMessage = (flyteidl.admin.Agent.DoTaskResponse) e.getUnfinishedMessage(); + throw e.unwrapIOException(); + } finally { + if (parsedMessage != null) { + mergeFrom(parsedMessage); + } + } + return this; + } + + private flyteidl.admin.Agent.Resource resource_; + private com.google.protobuf.SingleFieldBuilderV3< + flyteidl.admin.Agent.Resource, flyteidl.admin.Agent.Resource.Builder, flyteidl.admin.Agent.ResourceOrBuilder> resourceBuilder_; + /** + * .flyteidl.admin.Resource resource = 1; + */ + public boolean hasResource() { + return resourceBuilder_ != null || resource_ != null; + } + /** + * .flyteidl.admin.Resource resource = 1; + */ + public flyteidl.admin.Agent.Resource getResource() { + if (resourceBuilder_ == null) { + return resource_ == null ? flyteidl.admin.Agent.Resource.getDefaultInstance() : resource_; + } else { + return resourceBuilder_.getMessage(); + } + } + /** + * .flyteidl.admin.Resource resource = 1; + */ + public Builder setResource(flyteidl.admin.Agent.Resource value) { + if (resourceBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + resource_ = value; + onChanged(); + } else { + resourceBuilder_.setMessage(value); + } + + return this; + } + /** + * .flyteidl.admin.Resource resource = 1; + */ + public Builder setResource( + flyteidl.admin.Agent.Resource.Builder builderForValue) { + if (resourceBuilder_ == null) { + resource_ = builderForValue.build(); + onChanged(); + } else { + resourceBuilder_.setMessage(builderForValue.build()); + } + + return this; + } + /** + * .flyteidl.admin.Resource resource = 1; + */ + public Builder mergeResource(flyteidl.admin.Agent.Resource value) { + if (resourceBuilder_ == null) { + if (resource_ != null) { + resource_ = + flyteidl.admin.Agent.Resource.newBuilder(resource_).mergeFrom(value).buildPartial(); + } else { + resource_ = value; + } + onChanged(); + } else { + resourceBuilder_.mergeFrom(value); + } + + return this; + } + /** + * .flyteidl.admin.Resource resource = 1; + */ + public Builder clearResource() { + if (resourceBuilder_ == null) { + resource_ = null; + onChanged(); + } else { + resource_ = null; + resourceBuilder_ = null; + } + + return this; + } + /** + * .flyteidl.admin.Resource resource = 1; + */ + public flyteidl.admin.Agent.Resource.Builder getResourceBuilder() { + + onChanged(); + return getResourceFieldBuilder().getBuilder(); + } + /** + * .flyteidl.admin.Resource resource = 1; + */ + public flyteidl.admin.Agent.ResourceOrBuilder getResourceOrBuilder() { + if (resourceBuilder_ != null) { + return resourceBuilder_.getMessageOrBuilder(); + } else { + return resource_ == null ? + flyteidl.admin.Agent.Resource.getDefaultInstance() : resource_; + } + } + /** + * .flyteidl.admin.Resource resource = 1; + */ + private com.google.protobuf.SingleFieldBuilderV3< + flyteidl.admin.Agent.Resource, flyteidl.admin.Agent.Resource.Builder, flyteidl.admin.Agent.ResourceOrBuilder> + getResourceFieldBuilder() { + if (resourceBuilder_ == null) { + resourceBuilder_ = new com.google.protobuf.SingleFieldBuilderV3< + flyteidl.admin.Agent.Resource, flyteidl.admin.Agent.Resource.Builder, flyteidl.admin.Agent.ResourceOrBuilder>( + getResource(), + getParentForChildren(), + isClean()); + resource_ = null; + } + return resourceBuilder_; + } + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + + // @@protoc_insertion_point(builder_scope:flyteidl.admin.DoTaskResponse) + } + + // @@protoc_insertion_point(class_scope:flyteidl.admin.DoTaskResponse) + private static final flyteidl.admin.Agent.DoTaskResponse DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new flyteidl.admin.Agent.DoTaskResponse(); + } + + public static flyteidl.admin.Agent.DoTaskResponse getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public DoTaskResponse parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return new DoTaskResponse(input, extensionRegistry); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public flyteidl.admin.Agent.DoTaskResponse getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + private static final com.google.protobuf.Descriptors.Descriptor internal_static_flyteidl_admin_TaskExecutionMetadata_descriptor; private static final @@ -7388,6 +8952,16 @@ public flyteidl.admin.Agent.DeleteTaskResponse getDefaultInstanceForType() { private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_flyteidl_admin_DeleteTaskResponse_fieldAccessorTable; + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_flyteidl_admin_DoTaskRequest_descriptor; + private static final + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_flyteidl_admin_DoTaskRequest_fieldAccessorTable; + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_flyteidl_admin_DoTaskResponse_descriptor; + private static final + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_flyteidl_admin_DoTaskResponse_fieldAccessorTable; public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { @@ -7428,11 +9002,15 @@ public flyteidl.admin.Agent.DeleteTaskResponse getDefaultInstanceForType() { "dmin.State\022*\n\007outputs\030\002 \001(\0132\031.flyteidl.c" + "ore.LiteralMap\"=\n\021DeleteTaskRequest\022\021\n\tt" + "ask_type\030\001 \001(\t\022\025\n\rresource_meta\030\002 \001(\014\"\024\n" + - "\022DeleteTaskResponse*^\n\005State\022\025\n\021RETRYABL" + - "E_FAILURE\020\000\022\025\n\021PERMANENT_FAILURE\020\001\022\013\n\007PE" + - "NDING\020\002\022\013\n\007RUNNING\020\003\022\r\n\tSUCCEEDED\020\004B=Z;g" + - "ithub.com/flyteorg/flyte/flyteidl/gen/pb" + - "-go/flyteidl/adminb\006proto3" + "\022DeleteTaskResponse\"i\n\rDoTaskRequest\022)\n\006" + + "inputs\030\001 \001(\0132\031.flyteidl.core.LiteralMap\022" + + "-\n\010template\030\002 \001(\0132\033.flyteidl.core.TaskTe" + + "mplate\"<\n\016DoTaskResponse\022*\n\010resource\030\001 \001" + + "(\0132\030.flyteidl.admin.Resource*^\n\005State\022\025\n" + + "\021RETRYABLE_FAILURE\020\000\022\025\n\021PERMANENT_FAILUR" + + "E\020\001\022\013\n\007PENDING\020\002\022\013\n\007RUNNING\020\003\022\r\n\tSUCCEED" + + "ED\020\004B=Z;github.com/flyteorg/flyte/flytei" + + "dl/gen/pb-go/flyteidl/adminb\006proto3" }; com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner = new com.google.protobuf.Descriptors.FileDescriptor. InternalDescriptorAssigner() { @@ -7516,6 +9094,18 @@ public com.google.protobuf.ExtensionRegistry assignDescriptors( com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( internal_static_flyteidl_admin_DeleteTaskResponse_descriptor, new java.lang.String[] { }); + internal_static_flyteidl_admin_DoTaskRequest_descriptor = + getDescriptor().getMessageTypes().get(8); + internal_static_flyteidl_admin_DoTaskRequest_fieldAccessorTable = new + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + internal_static_flyteidl_admin_DoTaskRequest_descriptor, + new java.lang.String[] { "Inputs", "Template", }); + internal_static_flyteidl_admin_DoTaskResponse_descriptor = + getDescriptor().getMessageTypes().get(9); + internal_static_flyteidl_admin_DoTaskResponse_fieldAccessorTable = new + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + internal_static_flyteidl_admin_DoTaskResponse_descriptor, + new java.lang.String[] { "Resource", }); flyteidl.core.Literals.getDescriptor(); flyteidl.core.Tasks.getDescriptor(); flyteidl.core.Interface.getDescriptor(); diff --git a/flyteidl/gen/pb-java/flyteidl/service/Agent.java b/flyteidl/gen/pb-java/flyteidl/service/Agent.java index 8d80085901..7d95656b4b 100644 --- a/flyteidl/gen/pb-java/flyteidl/service/Agent.java +++ b/flyteidl/gen/pb-java/flyteidl/service/Agent.java @@ -24,16 +24,18 @@ public static void registerAllExtensions( static { java.lang.String[] descriptorData = { "\n\034flyteidl/service/agent.proto\022\020flyteidl" + - ".service\032\032flyteidl/admin/agent.proto2\217\002\n" + + ".service\032\032flyteidl/admin/agent.proto2\332\002\n" + "\021AsyncAgentService\022U\n\nCreateTask\022!.flyte" + "idl.admin.CreateTaskRequest\032\".flyteidl.a" + "dmin.CreateTaskResponse\"\000\022L\n\007GetTask\022\036.f" + "lyteidl.admin.GetTaskRequest\032\037.flyteidl." + "admin.GetTaskResponse\"\000\022U\n\nDeleteTask\022!." + "flyteidl.admin.DeleteTaskRequest\032\".flyte" + - "idl.admin.DeleteTaskResponse\"\000B?Z=github" + - ".com/flyteorg/flyte/flyteidl/gen/pb-go/f" + - "lyteidl/serviceb\006proto3" + "idl.admin.DeleteTaskResponse\"\000\022I\n\006DoTask" + + "\022\035.flyteidl.admin.DoTaskRequest\032\036.flytei" + + "dl.admin.DoTaskResponse\"\000B?Z=github.com/" + + "flyteorg/flyte/flyteidl/gen/pb-go/flytei" + + "dl/serviceb\006proto3" }; com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner = new com.google.protobuf.Descriptors.FileDescriptor. InternalDescriptorAssigner() { diff --git a/flyteidl/gen/pb_python/flyteidl/admin/agent_pb2.py b/flyteidl/gen/pb_python/flyteidl/admin/agent_pb2.py index 236728acf1..1d07ec79ec 100644 --- a/flyteidl/gen/pb_python/flyteidl/admin/agent_pb2.py +++ b/flyteidl/gen/pb_python/flyteidl/admin/agent_pb2.py @@ -17,7 +17,7 @@ from flyteidl.core import identifier_pb2 as flyteidl_dot_core_dot_identifier__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1a\x66lyteidl/admin/agent.proto\x12\x0e\x66lyteidl.admin\x1a\x1c\x66lyteidl/core/literals.proto\x1a\x19\x66lyteidl/core/tasks.proto\x1a\x1d\x66lyteidl/core/interface.proto\x1a\x1e\x66lyteidl/core/identifier.proto\"\x98\x05\n\x15TaskExecutionMetadata\x12R\n\x11task_execution_id\x18\x01 \x01(\x0b\x32&.flyteidl.core.TaskExecutionIdentifierR\x0ftaskExecutionId\x12\x1c\n\tnamespace\x18\x02 \x01(\tR\tnamespace\x12I\n\x06labels\x18\x03 \x03(\x0b\x32\x31.flyteidl.admin.TaskExecutionMetadata.LabelsEntryR\x06labels\x12X\n\x0b\x61nnotations\x18\x04 \x03(\x0b\x32\x36.flyteidl.admin.TaskExecutionMetadata.AnnotationsEntryR\x0b\x61nnotations\x12.\n\x13k8s_service_account\x18\x05 \x01(\tR\x11k8sServiceAccount\x12t\n\x15\x65nvironment_variables\x18\x06 \x03(\x0b\x32?.flyteidl.admin.TaskExecutionMetadata.EnvironmentVariablesEntryR\x14\x65nvironmentVariables\x1a\x39\n\x0bLabelsEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x1a>\n\x10\x41nnotationsEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x1aG\n\x19\x45nvironmentVariablesEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\"\x83\x02\n\x11\x43reateTaskRequest\x12\x31\n\x06inputs\x18\x01 \x01(\x0b\x32\x19.flyteidl.core.LiteralMapR\x06inputs\x12\x37\n\x08template\x18\x02 \x01(\x0b\x32\x1b.flyteidl.core.TaskTemplateR\x08template\x12#\n\routput_prefix\x18\x03 \x01(\tR\x0coutputPrefix\x12]\n\x17task_execution_metadata\x18\x04 \x01(\x0b\x32%.flyteidl.admin.TaskExecutionMetadataR\x15taskExecutionMetadata\"9\n\x12\x43reateTaskResponse\x12#\n\rresource_meta\x18\x01 \x01(\x0cR\x0cresourceMeta\"R\n\x0eGetTaskRequest\x12\x1b\n\ttask_type\x18\x01 \x01(\tR\x08taskType\x12#\n\rresource_meta\x18\x02 \x01(\x0cR\x0cresourceMeta\"G\n\x0fGetTaskResponse\x12\x34\n\x08resource\x18\x01 \x01(\x0b\x32\x18.flyteidl.admin.ResourceR\x08resource\"l\n\x08Resource\x12+\n\x05state\x18\x01 \x01(\x0e\x32\x15.flyteidl.admin.StateR\x05state\x12\x33\n\x07outputs\x18\x02 \x01(\x0b\x32\x19.flyteidl.core.LiteralMapR\x07outputs\"U\n\x11\x44\x65leteTaskRequest\x12\x1b\n\ttask_type\x18\x01 \x01(\tR\x08taskType\x12#\n\rresource_meta\x18\x02 \x01(\x0cR\x0cresourceMeta\"\x14\n\x12\x44\x65leteTaskResponse*^\n\x05State\x12\x15\n\x11RETRYABLE_FAILURE\x10\x00\x12\x15\n\x11PERMANENT_FAILURE\x10\x01\x12\x0b\n\x07PENDING\x10\x02\x12\x0b\n\x07RUNNING\x10\x03\x12\r\n\tSUCCEEDED\x10\x04\x42\xb6\x01\n\x12\x63om.flyteidl.adminB\nAgentProtoP\x01Z;github.com/flyteorg/flyte/flyteidl/gen/pb-go/flyteidl/admin\xa2\x02\x03\x46\x41X\xaa\x02\x0e\x46lyteidl.Admin\xca\x02\x0e\x46lyteidl\\Admin\xe2\x02\x1a\x46lyteidl\\Admin\\GPBMetadata\xea\x02\x0f\x46lyteidl::Adminb\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1a\x66lyteidl/admin/agent.proto\x12\x0e\x66lyteidl.admin\x1a\x1c\x66lyteidl/core/literals.proto\x1a\x19\x66lyteidl/core/tasks.proto\x1a\x1d\x66lyteidl/core/interface.proto\x1a\x1e\x66lyteidl/core/identifier.proto\"\x98\x05\n\x15TaskExecutionMetadata\x12R\n\x11task_execution_id\x18\x01 \x01(\x0b\x32&.flyteidl.core.TaskExecutionIdentifierR\x0ftaskExecutionId\x12\x1c\n\tnamespace\x18\x02 \x01(\tR\tnamespace\x12I\n\x06labels\x18\x03 \x03(\x0b\x32\x31.flyteidl.admin.TaskExecutionMetadata.LabelsEntryR\x06labels\x12X\n\x0b\x61nnotations\x18\x04 \x03(\x0b\x32\x36.flyteidl.admin.TaskExecutionMetadata.AnnotationsEntryR\x0b\x61nnotations\x12.\n\x13k8s_service_account\x18\x05 \x01(\tR\x11k8sServiceAccount\x12t\n\x15\x65nvironment_variables\x18\x06 \x03(\x0b\x32?.flyteidl.admin.TaskExecutionMetadata.EnvironmentVariablesEntryR\x14\x65nvironmentVariables\x1a\x39\n\x0bLabelsEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x1a>\n\x10\x41nnotationsEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x1aG\n\x19\x45nvironmentVariablesEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\"\x83\x02\n\x11\x43reateTaskRequest\x12\x31\n\x06inputs\x18\x01 \x01(\x0b\x32\x19.flyteidl.core.LiteralMapR\x06inputs\x12\x37\n\x08template\x18\x02 \x01(\x0b\x32\x1b.flyteidl.core.TaskTemplateR\x08template\x12#\n\routput_prefix\x18\x03 \x01(\tR\x0coutputPrefix\x12]\n\x17task_execution_metadata\x18\x04 \x01(\x0b\x32%.flyteidl.admin.TaskExecutionMetadataR\x15taskExecutionMetadata\"9\n\x12\x43reateTaskResponse\x12#\n\rresource_meta\x18\x01 \x01(\x0cR\x0cresourceMeta\"R\n\x0eGetTaskRequest\x12\x1b\n\ttask_type\x18\x01 \x01(\tR\x08taskType\x12#\n\rresource_meta\x18\x02 \x01(\x0cR\x0cresourceMeta\"G\n\x0fGetTaskResponse\x12\x34\n\x08resource\x18\x01 \x01(\x0b\x32\x18.flyteidl.admin.ResourceR\x08resource\"l\n\x08Resource\x12+\n\x05state\x18\x01 \x01(\x0e\x32\x15.flyteidl.admin.StateR\x05state\x12\x33\n\x07outputs\x18\x02 \x01(\x0b\x32\x19.flyteidl.core.LiteralMapR\x07outputs\"U\n\x11\x44\x65leteTaskRequest\x12\x1b\n\ttask_type\x18\x01 \x01(\tR\x08taskType\x12#\n\rresource_meta\x18\x02 \x01(\x0cR\x0cresourceMeta\"\x14\n\x12\x44\x65leteTaskResponse\"{\n\rDoTaskRequest\x12\x31\n\x06inputs\x18\x01 \x01(\x0b\x32\x19.flyteidl.core.LiteralMapR\x06inputs\x12\x37\n\x08template\x18\x02 \x01(\x0b\x32\x1b.flyteidl.core.TaskTemplateR\x08template\"F\n\x0e\x44oTaskResponse\x12\x34\n\x08resource\x18\x01 \x01(\x0b\x32\x18.flyteidl.admin.ResourceR\x08resource*^\n\x05State\x12\x15\n\x11RETRYABLE_FAILURE\x10\x00\x12\x15\n\x11PERMANENT_FAILURE\x10\x01\x12\x0b\n\x07PENDING\x10\x02\x12\x0b\n\x07RUNNING\x10\x03\x12\r\n\tSUCCEEDED\x10\x04\x42\xb6\x01\n\x12\x63om.flyteidl.adminB\nAgentProtoP\x01Z;github.com/flyteorg/flyte/flyteidl/gen/pb-go/flyteidl/admin\xa2\x02\x03\x46\x41X\xaa\x02\x0e\x46lyteidl.Admin\xca\x02\x0e\x46lyteidl\\Admin\xe2\x02\x1a\x46lyteidl\\Admin\\GPBMetadata\xea\x02\x0f\x46lyteidl::Adminb\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -32,8 +32,8 @@ _TASKEXECUTIONMETADATA_ANNOTATIONSENTRY._serialized_options = b'8\001' _TASKEXECUTIONMETADATA_ENVIRONMENTVARIABLESENTRY._options = None _TASKEXECUTIONMETADATA_ENVIRONMENTVARIABLESENTRY._serialized_options = b'8\001' - _globals['_STATE']._serialized_start=1530 - _globals['_STATE']._serialized_end=1624 + _globals['_STATE']._serialized_start=1727 + _globals['_STATE']._serialized_end=1821 _globals['_TASKEXECUTIONMETADATA']._serialized_start=167 _globals['_TASKEXECUTIONMETADATA']._serialized_end=831 _globals['_TASKEXECUTIONMETADATA_LABELSENTRY']._serialized_start=637 @@ -56,4 +56,8 @@ _globals['_DELETETASKREQUEST']._serialized_end=1506 _globals['_DELETETASKRESPONSE']._serialized_start=1508 _globals['_DELETETASKRESPONSE']._serialized_end=1528 + _globals['_DOTASKREQUEST']._serialized_start=1530 + _globals['_DOTASKREQUEST']._serialized_end=1653 + _globals['_DOTASKRESPONSE']._serialized_start=1655 + _globals['_DOTASKRESPONSE']._serialized_end=1725 # @@protoc_insertion_point(module_scope) diff --git a/flyteidl/gen/pb_python/flyteidl/service/agent_pb2.py b/flyteidl/gen/pb_python/flyteidl/service/agent_pb2.py index 8227bdc438..8154ba5d7f 100644 --- a/flyteidl/gen/pb_python/flyteidl/service/agent_pb2.py +++ b/flyteidl/gen/pb_python/flyteidl/service/agent_pb2.py @@ -14,7 +14,7 @@ from flyteidl.admin import agent_pb2 as flyteidl_dot_admin_dot_agent__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1c\x66lyteidl/service/agent.proto\x12\x10\x66lyteidl.service\x1a\x1a\x66lyteidl/admin/agent.proto2\x8f\x02\n\x11\x41syncAgentService\x12U\n\nCreateTask\x12!.flyteidl.admin.CreateTaskRequest\x1a\".flyteidl.admin.CreateTaskResponse\"\x00\x12L\n\x07GetTask\x12\x1e.flyteidl.admin.GetTaskRequest\x1a\x1f.flyteidl.admin.GetTaskResponse\"\x00\x12U\n\nDeleteTask\x12!.flyteidl.admin.DeleteTaskRequest\x1a\".flyteidl.admin.DeleteTaskResponse\"\x00\x42\xc2\x01\n\x14\x63om.flyteidl.serviceB\nAgentProtoP\x01Z=github.com/flyteorg/flyte/flyteidl/gen/pb-go/flyteidl/service\xa2\x02\x03\x46SX\xaa\x02\x10\x46lyteidl.Service\xca\x02\x10\x46lyteidl\\Service\xe2\x02\x1c\x46lyteidl\\Service\\GPBMetadata\xea\x02\x11\x46lyteidl::Serviceb\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1c\x66lyteidl/service/agent.proto\x12\x10\x66lyteidl.service\x1a\x1a\x66lyteidl/admin/agent.proto2\xda\x02\n\x11\x41syncAgentService\x12U\n\nCreateTask\x12!.flyteidl.admin.CreateTaskRequest\x1a\".flyteidl.admin.CreateTaskResponse\"\x00\x12L\n\x07GetTask\x12\x1e.flyteidl.admin.GetTaskRequest\x1a\x1f.flyteidl.admin.GetTaskResponse\"\x00\x12U\n\nDeleteTask\x12!.flyteidl.admin.DeleteTaskRequest\x1a\".flyteidl.admin.DeleteTaskResponse\"\x00\x12I\n\x06\x44oTask\x12\x1d.flyteidl.admin.DoTaskRequest\x1a\x1e.flyteidl.admin.DoTaskResponse\"\x00\x42\xc2\x01\n\x14\x63om.flyteidl.serviceB\nAgentProtoP\x01Z=github.com/flyteorg/flyte/flyteidl/gen/pb-go/flyteidl/service\xa2\x02\x03\x46SX\xaa\x02\x10\x46lyteidl.Service\xca\x02\x10\x46lyteidl\\Service\xe2\x02\x1c\x46lyteidl\\Service\\GPBMetadata\xea\x02\x11\x46lyteidl::Serviceb\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -24,5 +24,5 @@ DESCRIPTOR._options = None DESCRIPTOR._serialized_options = b'\n\024com.flyteidl.serviceB\nAgentProtoP\001Z=github.com/flyteorg/flyte/flyteidl/gen/pb-go/flyteidl/service\242\002\003FSX\252\002\020Flyteidl.Service\312\002\020Flyteidl\\Service\342\002\034Flyteidl\\Service\\GPBMetadata\352\002\021Flyteidl::Service' _globals['_ASYNCAGENTSERVICE']._serialized_start=79 - _globals['_ASYNCAGENTSERVICE']._serialized_end=350 + _globals['_ASYNCAGENTSERVICE']._serialized_end=425 # @@protoc_insertion_point(module_scope) diff --git a/flyteplugins/go/tasks/plugins/webapi/agent/plugin.go b/flyteplugins/go/tasks/plugins/webapi/agent/plugin.go index c7f00a37a2..d06e6ce8c0 100644 --- a/flyteplugins/go/tasks/plugins/webapi/agent/plugin.go +++ b/flyteplugins/go/tasks/plugins/webapi/agent/plugin.go @@ -104,7 +104,7 @@ func (p Plugin) Do(ctx context.Context, taskCtx webapi.TaskExecutionContext) (la return nil, err } // TODO: Check if state is not succeeded, then return error - resource := &ResourceWrapper{ + resource := ResourceWrapper{ State: res.Resource.State, Outputs: res.Resource.Outputs, } @@ -121,7 +121,7 @@ func (p Plugin) Do(ctx context.Context, taskCtx webapi.TaskExecutionContext) (la opReader = ioutils.NewInMemoryOutputReader(resource.Outputs, nil, nil) } - return &ResourceWrapper{ + return ResourceWrapper{ State: res.Resource.State, Outputs: res.Resource.Outputs, }, taskCtx.OutputWriter().Put(ctx, opReader) diff --git a/flyteplugins/go/tasks/plugins/webapi/snowflake/plugin.go b/flyteplugins/go/tasks/plugins/webapi/snowflake/plugin.go index 037b70d390..eec36bad99 100644 --- a/flyteplugins/go/tasks/plugins/webapi/snowflake/plugin.go +++ b/flyteplugins/go/tasks/plugins/webapi/snowflake/plugin.go @@ -275,12 +275,12 @@ func newSnowflakeJobTaskPlugin() webapi.PluginEntry { return webapi.PluginEntry{ ID: "snowflake", SupportedTaskTypes: []core.TaskType{"snowflake"}, - PluginLoader: func(ctx context.Context, iCtx webapi.PluginSetupContext) (webapi.AsyncPlugin, error) { + PluginLoader: func(ctx context.Context, iCtx webapi.PluginSetupContext) (webapi.AsyncPlugin, webapi.SyncPlugin, error) { return Plugin{ metricScope: iCtx.MetricsScope(), cfg: GetConfig(), client: &http.Client{}, - }, nil + }, nil, nil }, } } From d7085de3f99349cc039cfdba16fc11f02808030e Mon Sep 17 00:00:00 2001 From: Kevin Su Date: Sun, 15 Oct 2023 01:50:40 -0700 Subject: [PATCH 06/48] refactor Signed-off-by: Kevin Su --- flyteidl/boilerplate/flyte/golang_test_targets/go-gen.sh | 2 +- .../go/tasks/pluginmachinery/internal/webapi/core.go | 8 +++----- flyteplugins/go/tasks/pluginmachinery/webapi/plugin.go | 3 +-- flyteplugins/go/tasks/plugins/webapi/athena/plugin.go | 8 ++++---- flyteplugins/go/tasks/plugins/webapi/bigquery/plugin.go | 8 ++++---- flyteplugins/go/tasks/plugins/webapi/databricks/plugin.go | 4 ++-- 6 files changed, 15 insertions(+), 18 deletions(-) diff --git a/flyteidl/boilerplate/flyte/golang_test_targets/go-gen.sh b/flyteidl/boilerplate/flyte/golang_test_targets/go-gen.sh index 54bd6af61b..5ac17fa40a 100755 --- a/flyteidl/boilerplate/flyte/golang_test_targets/go-gen.sh +++ b/flyteidl/boilerplate/flyte/golang_test_targets/go-gen.sh @@ -9,7 +9,7 @@ go generate ./... if [ -n "$DELTA_CHECK" ]; then DIRTY=$(git status --porcelain) if [ -n "$DIRTY" ]; then - echo "FAILED: Go code updated without commiting generated code." + echo "FAILED: Go code updated without committing generated code." echo "Ensure make generate has run and all changes are committed." DIFF=$(git diff) echo "diff detected: $DIFF" diff --git a/flyteplugins/go/tasks/pluginmachinery/internal/webapi/core.go b/flyteplugins/go/tasks/pluginmachinery/internal/webapi/core.go index c85f9019f5..0c5e3dd7bc 100644 --- a/flyteplugins/go/tasks/pluginmachinery/internal/webapi/core.go +++ b/flyteplugins/go/tasks/pluginmachinery/internal/webapi/core.go @@ -33,8 +33,7 @@ const ( type CorePlugin struct { id string - p webapi.AsyncPlugin - sp webapi.SyncPlugin + p webapi.Plugin cache cache.AutoRefresh tokenAllocator tokenAllocator metrics Metrics @@ -72,7 +71,7 @@ func (c CorePlugin) Handle(ctx context.Context, tCtx core.TaskExecutionContext) // Use the sync plugin to execute the task if the task template has the sync plugin flavor. if taskTemplate.GetMetadata().GetRuntime().GetFlavor() == syncPlugin { - phaseInfo, err := c.sp.Do(ctx, tCtx) + phaseInfo, err := c.p.Do(ctx, tCtx) if err != nil { return core.UnknownTransition, err } @@ -176,7 +175,7 @@ func createRemotePlugin(pluginEntry webapi.PluginEntry, c clock.Clock) core.Plug RegisteredTaskTypes: pluginEntry.SupportedTaskTypes, LoadPlugin: func(ctx context.Context, iCtx core.SetupContext) ( core.Plugin, error) { - p, sp, err := pluginEntry.PluginLoader(ctx, iCtx) + p, err := pluginEntry.PluginLoader(ctx, iCtx) if err != nil { return nil, err } @@ -216,7 +215,6 @@ func createRemotePlugin(pluginEntry webapi.PluginEntry, c clock.Clock) core.Plug return CorePlugin{ id: pluginEntry.ID, p: p, - sp: sp, cache: resourceCache, metrics: newMetrics(iCtx.MetricsScope()), tokenAllocator: newTokenAllocator(c), diff --git a/flyteplugins/go/tasks/pluginmachinery/webapi/plugin.go b/flyteplugins/go/tasks/pluginmachinery/webapi/plugin.go index b0ce4501ff..0cd1a79baf 100644 --- a/flyteplugins/go/tasks/pluginmachinery/webapi/plugin.go +++ b/flyteplugins/go/tasks/pluginmachinery/webapi/plugin.go @@ -100,8 +100,7 @@ type ResourceMeta = interface{} type Resource = interface{} type Plugin interface { - AsyncPlugin - SyncPlugin + GetConfig() PluginConfig } // AsyncPlugin defines the interface for plugins that call Async Web APIs. diff --git a/flyteplugins/go/tasks/plugins/webapi/athena/plugin.go b/flyteplugins/go/tasks/plugins/webapi/athena/plugin.go index e86751d3c4..95c5204512 100644 --- a/flyteplugins/go/tasks/plugins/webapi/athena/plugin.go +++ b/flyteplugins/go/tasks/plugins/webapi/athena/plugin.go @@ -200,10 +200,10 @@ func createTaskInfo(queryID string, cfg awsSdk.Config) *core.TaskInfo { } } -func NewPlugin(_ context.Context, cfg *Config, awsConfig *aws.Config, metricScope promutils.Scope) (Plugin, webapi.SyncPlugin, error) { +func NewPlugin(_ context.Context, cfg *Config, awsConfig *aws.Config, metricScope promutils.Scope) (webapi.AsyncPlugin, error) { sdkCfg, err := awsConfig.GetSdkConfig() if err != nil { - return Plugin{}, nil, err + return Plugin{}, err } return Plugin{ @@ -211,14 +211,14 @@ func NewPlugin(_ context.Context, cfg *Config, awsConfig *aws.Config, metricScop client: athena.NewFromConfig(sdkCfg), cfg: cfg, awsConfig: sdkCfg, - }, nil, nil + }, nil } func init() { pluginmachinery.PluginRegistry().RegisterRemotePlugin(webapi.PluginEntry{ ID: "athena", SupportedTaskTypes: []core.TaskType{"hive", "presto"}, - PluginLoader: func(ctx context.Context, iCtx webapi.PluginSetupContext) (webapi.AsyncPlugin, webapi.SyncPlugin, error) { + PluginLoader: func(ctx context.Context, iCtx webapi.PluginSetupContext) (webapi.Plugin, error) { return NewPlugin(ctx, GetConfig(), aws.GetConfig(), iCtx.MetricsScope()) }, }) diff --git a/flyteplugins/go/tasks/plugins/webapi/bigquery/plugin.go b/flyteplugins/go/tasks/plugins/webapi/bigquery/plugin.go index 2400f19503..7af44bc78a 100644 --- a/flyteplugins/go/tasks/plugins/webapi/bigquery/plugin.go +++ b/flyteplugins/go/tasks/plugins/webapi/bigquery/plugin.go @@ -547,25 +547,25 @@ func (p Plugin) newBigQueryClient(ctx context.Context, identity google.Identity) return bigquery.NewService(ctx, options...) } -func NewPlugin(cfg *Config, metricScope promutils.Scope) (*Plugin, webapi.SyncPlugin, error) { +func NewPlugin(cfg *Config, metricScope promutils.Scope) (*Plugin, error) { googleTokenSource, err := google.NewTokenSourceFactory(cfg.GoogleTokenSource) if err != nil { - return nil, nil, pluginErrors.Wrapf(pluginErrors.PluginInitializationFailed, err, "failed to get google token source") + return nil, pluginErrors.Wrapf(pluginErrors.PluginInitializationFailed, err, "failed to get google token source") } return &Plugin{ metricScope: metricScope, cfg: cfg, googleTokenSource: googleTokenSource, - }, nil, nil + }, nil } func newBigQueryJobTaskPlugin() webapi.PluginEntry { return webapi.PluginEntry{ ID: "bigquery", SupportedTaskTypes: []core.TaskType{bigqueryQueryJobTask}, - PluginLoader: func(ctx context.Context, iCtx webapi.PluginSetupContext) (webapi.AsyncPlugin, webapi.SyncPlugin, error) { + PluginLoader: func(ctx context.Context, iCtx webapi.PluginSetupContext) (webapi.Plugin, error) { cfg := GetConfig() return NewPlugin(cfg, iCtx.MetricsScope()) diff --git a/flyteplugins/go/tasks/plugins/webapi/databricks/plugin.go b/flyteplugins/go/tasks/plugins/webapi/databricks/plugin.go index a77ec1f450..8d1891b1c9 100644 --- a/flyteplugins/go/tasks/plugins/webapi/databricks/plugin.go +++ b/flyteplugins/go/tasks/plugins/webapi/databricks/plugin.go @@ -339,12 +339,12 @@ func newDatabricksJobTaskPlugin() webapi.PluginEntry { return webapi.PluginEntry{ ID: "databricks", SupportedTaskTypes: []core.TaskType{"spark"}, - PluginLoader: func(ctx context.Context, iCtx webapi.PluginSetupContext) (webapi.AsyncPlugin, webapi.SyncPlugin, error) { + PluginLoader: func(ctx context.Context, iCtx webapi.PluginSetupContext) (webapi.Plugin, error) { return &Plugin{ metricScope: iCtx.MetricsScope(), cfg: GetConfig(), client: &http.Client{}, - }, nil, nil + }, nil }, } } From a4d1ba3dc1c522fd0d01a7159ac9db2858ea530d Mon Sep 17 00:00:00 2001 From: Kevin Su Date: Sun, 15 Oct 2023 01:53:37 -0700 Subject: [PATCH 07/48] refactor Signed-off-by: Kevin Su --- .../pluginmachinery/internal/webapi/core.go | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/flyteplugins/go/tasks/pluginmachinery/internal/webapi/core.go b/flyteplugins/go/tasks/pluginmachinery/internal/webapi/core.go index 0c5e3dd7bc..a60f378a48 100644 --- a/flyteplugins/go/tasks/pluginmachinery/internal/webapi/core.go +++ b/flyteplugins/go/tasks/pluginmachinery/internal/webapi/core.go @@ -71,7 +71,7 @@ func (c CorePlugin) Handle(ctx context.Context, tCtx core.TaskExecutionContext) // Use the sync plugin to execute the task if the task template has the sync plugin flavor. if taskTemplate.GetMetadata().GetRuntime().GetFlavor() == syncPlugin { - phaseInfo, err := c.p.Do(ctx, tCtx) + phaseInfo, err := c.p.(webapi.SyncPlugin).Do(ctx, tCtx) if err != nil { return core.UnknownTransition, err } @@ -85,17 +85,18 @@ func (c CorePlugin) Handle(ctx context.Context, tCtx core.TaskExecutionContext) var nextState *State var phaseInfo core.PhaseInfo + plugin := c.p.(webapi.AsyncPlugin) switch incomingState.Phase { case PhaseNotStarted: if len(c.p.GetConfig().ResourceQuotas) > 0 { - nextState, phaseInfo, err = c.tokenAllocator.allocateToken(ctx, c.p, tCtx, &incomingState, c.metrics) + nextState, phaseInfo, err = c.tokenAllocator.allocateToken(ctx, plugin, tCtx, &incomingState, c.metrics) } else { - nextState, phaseInfo, err = launch(ctx, c.p, tCtx, c.cache, &incomingState) + nextState, phaseInfo, err = launch(ctx, plugin, tCtx, c.cache, &incomingState) } case PhaseAllocationTokenAcquired: - nextState, phaseInfo, err = launch(ctx, c.p, tCtx, c.cache, &incomingState) + nextState, phaseInfo, err = launch(ctx, plugin, tCtx, c.cache, &incomingState) case PhaseResourcesCreated: - nextState, phaseInfo, err = monitor(ctx, tCtx, c.p, c.cache, &incomingState) + nextState, phaseInfo, err = monitor(ctx, tCtx, plugin, c.cache, &incomingState) } if err != nil { @@ -117,7 +118,7 @@ func (c CorePlugin) Abort(ctx context.Context, tCtx core.TaskExecutionContext) e logger.Infof(ctx, "Attempting to abort resource [%v].", tCtx.TaskExecutionMetadata().GetTaskExecutionID().GetID()) - err = c.p.Delete(ctx, newPluginContext(incomingState.ResourceMeta, nil, "Aborted", tCtx)) + err = c.p.(webapi.AsyncPlugin).Delete(ctx, newPluginContext(incomingState.ResourceMeta, nil, "Aborted", tCtx)) if err != nil { logger.Errorf(ctx, "Failed to abort some resources [%v]. Error: %v", tCtx.TaskExecutionMetadata().GetTaskExecutionID().GetGeneratedName(), err) @@ -135,7 +136,7 @@ func (c CorePlugin) Finalize(ctx context.Context, tCtx core.TaskExecutionContext logger.Infof(ctx, "Attempting to finalize resource [%v].", tCtx.TaskExecutionMetadata().GetTaskExecutionID().GetGeneratedName()) - return c.tokenAllocator.releaseToken(ctx, c.p, tCtx, c.metrics) + return c.tokenAllocator.releaseToken(ctx, c.p.(webapi.AsyncPlugin), tCtx, c.metrics) } func validateRangeInt(fieldName string, min, max, provided int) error { @@ -200,7 +201,7 @@ func createRemotePlugin(pluginEntry webapi.PluginEntry, c clock.Clock) core.Plug } } - resourceCache, err := NewResourceCache(ctx, pluginEntry.ID, p, p.GetConfig().Caching, + resourceCache, err := NewResourceCache(ctx, pluginEntry.ID, p.(webapi.AsyncPlugin), p.GetConfig().Caching, iCtx.MetricsScope().NewSubScope("cache")) if err != nil { From b879137d24fe6bfb60d6d1182cd8d9b3f32335cc Mon Sep 17 00:00:00 2001 From: Kevin Su Date: Sun, 15 Oct 2023 01:56:05 -0700 Subject: [PATCH 08/48] refactor Signed-off-by: Kevin Su --- flyteplugins/go/tasks/plugins/webapi/athena/plugin.go | 2 +- flyteplugins/go/tasks/plugins/webapi/snowflake/plugin.go | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/flyteplugins/go/tasks/plugins/webapi/athena/plugin.go b/flyteplugins/go/tasks/plugins/webapi/athena/plugin.go index 95c5204512..77dfbd6bd0 100644 --- a/flyteplugins/go/tasks/plugins/webapi/athena/plugin.go +++ b/flyteplugins/go/tasks/plugins/webapi/athena/plugin.go @@ -200,7 +200,7 @@ func createTaskInfo(queryID string, cfg awsSdk.Config) *core.TaskInfo { } } -func NewPlugin(_ context.Context, cfg *Config, awsConfig *aws.Config, metricScope promutils.Scope) (webapi.AsyncPlugin, error) { +func NewPlugin(_ context.Context, cfg *Config, awsConfig *aws.Config, metricScope promutils.Scope) (Plugin, error) { sdkCfg, err := awsConfig.GetSdkConfig() if err != nil { return Plugin{}, err diff --git a/flyteplugins/go/tasks/plugins/webapi/snowflake/plugin.go b/flyteplugins/go/tasks/plugins/webapi/snowflake/plugin.go index eec36bad99..d1976b62f4 100644 --- a/flyteplugins/go/tasks/plugins/webapi/snowflake/plugin.go +++ b/flyteplugins/go/tasks/plugins/webapi/snowflake/plugin.go @@ -275,12 +275,12 @@ func newSnowflakeJobTaskPlugin() webapi.PluginEntry { return webapi.PluginEntry{ ID: "snowflake", SupportedTaskTypes: []core.TaskType{"snowflake"}, - PluginLoader: func(ctx context.Context, iCtx webapi.PluginSetupContext) (webapi.AsyncPlugin, webapi.SyncPlugin, error) { + PluginLoader: func(ctx context.Context, iCtx webapi.PluginSetupContext) (webapi.Plugin, error) { return Plugin{ metricScope: iCtx.MetricsScope(), cfg: GetConfig(), client: &http.Client{}, - }, nil, nil + }, nil }, } } From 47bd11a2d8b70085f2cdb11ffa33cc736058bedc Mon Sep 17 00:00:00 2001 From: Future Outlier Date: Tue, 17 Oct 2023 11:24:39 +0800 Subject: [PATCH 09/48] left core.go test Signed-off-by: Future Outlier --- flyteidl/protos/flyteidl/admin/agent.proto | 3 +- .../pluginmachinery/internal/webapi/core.go | 3 ++ .../internal/webapi/core_test.go | 2 +- .../pluginmachinery/webapi/mocks/plugin.go | 45 ++++++++++++++++ .../tasks/plugins/webapi/agent/config_test.go | 3 ++ .../plugins/webapi/agent/integration_test.go | 14 +++-- .../tasks/plugins/webapi/agent/plugin_test.go | 53 +++++++++++++++++-- 7 files changed, 114 insertions(+), 9 deletions(-) create mode 100644 flyteplugins/go/tasks/pluginmachinery/webapi/mocks/plugin.go diff --git a/flyteidl/protos/flyteidl/admin/agent.proto b/flyteidl/protos/flyteidl/admin/agent.proto index 2daced2c6c..65b43e7088 100644 --- a/flyteidl/protos/flyteidl/admin/agent.proto +++ b/flyteidl/protos/flyteidl/admin/agent.proto @@ -89,7 +89,6 @@ message DeleteTaskRequest { message DeleteTaskResponse { } - // A message used to do a task message DoTaskRequest { // The inputs required to start the execution. All required inputs must be @@ -102,4 +101,4 @@ message DoTaskRequest { message DoTaskResponse { Resource resource = 1; -} \ No newline at end of file +} diff --git a/flyteplugins/go/tasks/pluginmachinery/internal/webapi/core.go b/flyteplugins/go/tasks/pluginmachinery/internal/webapi/core.go index a60f378a48..e840a4b6d8 100644 --- a/flyteplugins/go/tasks/pluginmachinery/internal/webapi/core.go +++ b/flyteplugins/go/tasks/pluginmachinery/internal/webapi/core.go @@ -68,6 +68,9 @@ func (c CorePlugin) GetProperties() core.PluginProperties { func (c CorePlugin) Handle(ctx context.Context, tCtx core.TaskExecutionContext) (core.Transition, error) { taskTemplate, err := tCtx.TaskReader().Read(ctx) + if err != nil { + return core.UnknownTransition, err + } // Use the sync plugin to execute the task if the task template has the sync plugin flavor. if taskTemplate.GetMetadata().GetRuntime().GetFlavor() == syncPlugin { diff --git a/flyteplugins/go/tasks/pluginmachinery/internal/webapi/core_test.go b/flyteplugins/go/tasks/pluginmachinery/internal/webapi/core_test.go index 65d90a6c7e..7d34495ddf 100644 --- a/flyteplugins/go/tasks/pluginmachinery/internal/webapi/core_test.go +++ b/flyteplugins/go/tasks/pluginmachinery/internal/webapi/core_test.go @@ -82,7 +82,7 @@ func TestCreateRemotePlugin(t *testing.T) { CreateRemotePlugin(webapi.PluginEntry{ ID: "MyTestPlugin", SupportedTaskTypes: []core.TaskType{"test-task"}, - PluginLoader: func(ctx context.Context, iCtx webapi.PluginSetupContext) (webapi.AsyncPlugin, error) { + PluginLoader: func(ctx context.Context, iCtx webapi.PluginSetupContext) (webapi.Plugin, error) { return newPluginWithProperties(webapi.PluginConfig{ Caching: webapi.CachingConfig{ Size: 10, diff --git a/flyteplugins/go/tasks/pluginmachinery/webapi/mocks/plugin.go b/flyteplugins/go/tasks/pluginmachinery/webapi/mocks/plugin.go new file mode 100644 index 0000000000..1e255ca1fa --- /dev/null +++ b/flyteplugins/go/tasks/pluginmachinery/webapi/mocks/plugin.go @@ -0,0 +1,45 @@ +// Code generated by mockery v1.0.1. DO NOT EDIT. + +package mocks + +import ( + webapi "github.com/flyteorg/flyte/flyteplugins/go/tasks/pluginmachinery/webapi" + mock "github.com/stretchr/testify/mock" +) + +// Plugin is an autogenerated mock type for the Plugin type +type Plugin struct { + mock.Mock +} + +type Plugin_GetConfig struct { + *mock.Call +} + +func (_m Plugin_GetConfig) Return(_a0 webapi.PluginConfig) *Plugin_GetConfig { + return &Plugin_GetConfig{Call: _m.Call.Return(_a0)} +} + +func (_m *Plugin) OnGetConfig() *Plugin_GetConfig { + c_call := _m.On("GetConfig") + return &Plugin_GetConfig{Call: c_call} +} + +func (_m *Plugin) OnGetConfigMatch(matchers ...interface{}) *Plugin_GetConfig { + c_call := _m.On("GetConfig", matchers...) + return &Plugin_GetConfig{Call: c_call} +} + +// GetConfig provides a mock function with given fields: +func (_m *Plugin) GetConfig() webapi.PluginConfig { + ret := _m.Called() + + var r0 webapi.PluginConfig + if rf, ok := ret.Get(0).(func() webapi.PluginConfig); ok { + r0 = rf() + } else { + r0 = ret.Get(0).(webapi.PluginConfig) + } + + return r0 +} diff --git a/flyteplugins/go/tasks/plugins/webapi/agent/config_test.go b/flyteplugins/go/tasks/plugins/webapi/agent/config_test.go index a3e6d69d66..f3ec40b656 100644 --- a/flyteplugins/go/tasks/plugins/webapi/agent/config_test.go +++ b/flyteplugins/go/tasks/plugins/webapi/agent/config_test.go @@ -25,6 +25,9 @@ func TestGetAndSetConfig(t *testing.T) { "DeleteTask": { Duration: 3 * time.Millisecond, }, + "DoTask": { + Duration: 3 * time.Millisecond, + }, } cfg.DefaultAgent.DefaultTimeout = config.Duration{Duration: 10 * time.Second} cfg.Agents = map[string]*Agent{ diff --git a/flyteplugins/go/tasks/plugins/webapi/agent/integration_test.go b/flyteplugins/go/tasks/plugins/webapi/agent/integration_test.go index 0aecffdfc7..061038216d 100644 --- a/flyteplugins/go/tasks/plugins/webapi/agent/integration_test.go +++ b/flyteplugins/go/tasks/plugins/webapi/agent/integration_test.go @@ -63,6 +63,14 @@ func (m *MockClient) DeleteTask(_ context.Context, _ *admin.DeleteTaskRequest, _ return &admin.DeleteTaskResponse{}, nil } +func (m *MockClient) DoTask(_ context.Context, _ *admin.DoTaskRequest, _ ...grpc.CallOption) (*admin.DoTaskResponse, error) { + return &admin.DoTaskResponse{Resource: &admin.Resource{State: admin.State_SUCCEEDED, Outputs: &flyteIdlCore.LiteralMap{ + Literals: map[string]*flyteIdlCore.Literal{ + "arr": coreutils.MustMakeLiteral([]interface{}{[]interface{}{"a", "b"}, []interface{}{1, 2}}), + }, + }}}, nil +} + func mockGetClientFunc(_ context.Context, _ *Agent, _ map[*Agent]*grpc.ClientConn) (service.AsyncAgentServiceClient, error) { return &MockClient{}, nil } @@ -125,7 +133,7 @@ func TestEndToEnd(t *testing.T) { t.Run("failed to create a job", func(t *testing.T) { agentPlugin := newMockAgentPlugin() - agentPlugin.PluginLoader = func(ctx context.Context, iCtx webapi.PluginSetupContext) (webapi.AsyncPlugin, error) { + agentPlugin.PluginLoader = func(ctx context.Context, iCtx webapi.PluginSetupContext) (webapi.Plugin, error) { return &MockPlugin{ Plugin{ metricScope: iCtx.MetricsScope(), @@ -259,8 +267,8 @@ func getTaskContext(t *testing.T) *pluginCoreMocks.TaskExecutionContext { func newMockAgentPlugin() webapi.PluginEntry { return webapi.PluginEntry{ ID: "agent-service", - SupportedTaskTypes: []core.TaskType{"bigquery_query_job_task", "spark_job"}, - PluginLoader: func(ctx context.Context, iCtx webapi.PluginSetupContext) (webapi.AsyncPlugin, error) { + SupportedTaskTypes: []core.TaskType{"bigquery_query_job_task", "spark_job", "api_task"}, + PluginLoader: func(ctx context.Context, iCtx webapi.PluginSetupContext) (webapi.Plugin, error) { return &MockPlugin{ Plugin{ metricScope: iCtx.MetricsScope(), diff --git a/flyteplugins/go/tasks/plugins/webapi/agent/plugin_test.go b/flyteplugins/go/tasks/plugins/webapi/agent/plugin_test.go index ee3b699e9d..54eca90bf7 100644 --- a/flyteplugins/go/tasks/plugins/webapi/agent/plugin_test.go +++ b/flyteplugins/go/tasks/plugins/webapi/agent/plugin_test.go @@ -5,17 +5,60 @@ import ( "testing" "time" - "github.com/stretchr/testify/assert" - "google.golang.org/grpc" - + "github.com/flyteorg/flyte/flyteidl/clients/go/coreutils" "github.com/flyteorg/flyte/flyteidl/gen/pb-go/flyteidl/admin" + flyteIdlCore "github.com/flyteorg/flyte/flyteidl/gen/pb-go/flyteidl/core" + "github.com/flyteorg/flyte/flyteplugins/go/tasks/pluginmachinery" pluginsCore "github.com/flyteorg/flyte/flyteplugins/go/tasks/pluginmachinery/core" + "github.com/flyteorg/flyte/flyteplugins/go/tasks/pluginmachinery/core/mocks" pluginCoreMocks "github.com/flyteorg/flyte/flyteplugins/go/tasks/pluginmachinery/core/mocks" + ioMocks "github.com/flyteorg/flyte/flyteplugins/go/tasks/pluginmachinery/io/mocks" webapiPlugin "github.com/flyteorg/flyte/flyteplugins/go/tasks/pluginmachinery/webapi/mocks" "github.com/flyteorg/flyte/flytestdlib/config" "github.com/flyteorg/flyte/flytestdlib/promutils" + "github.com/flyteorg/flyte/flytestdlib/storage" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/mock" + "google.golang.org/grpc" ) +func TestDo(t *testing.T) { + tCtx := getTaskContext(t) + taskReader := new(mocks.TaskReader) + + template := flyteIdlCore.TaskTemplate{ + Type: "api_task", + Metadata: &flyteIdlCore.TaskMetadata{ + Runtime: &flyteIdlCore.RuntimeMetadata{ + Flavor: "sync_plugin", + }, + }, + } + + taskReader.On("Read", mock.Anything).Return(&template, nil) + + tCtx.OnTaskReader().Return(taskReader) + + agentPlugin := newMockAgentPlugin() + pluginEntry := pluginmachinery.CreateRemotePlugin(agentPlugin) + plugin, err := pluginEntry.LoadPlugin(context.TODO(), newFakeSetupContext("do_test")) + assert.NoError(t, err) + + // Call the Do function by Flavor + inputs, _ := coreutils.MakeLiteralMap(map[string]interface{}{"x": 1}) + basePrefix := storage.DataReference("fake://bucket/prefix/") + inputReader := &ioMocks.InputReader{} + inputReader.OnGetInputPrefixPath().Return(basePrefix) + inputReader.OnGetInputPath().Return(basePrefix + "/inputs.pb") + inputReader.OnGetMatch(mock.Anything).Return(inputs, nil) + tCtx.OnInputReader().Return(inputReader) + + phase, err := plugin.Handle(context.TODO(), tCtx) + + assert.Nil(t, err) + assert.Equal(t, pluginsCore.PhaseSuccess, phase.Info().Phase()) +} + func TestPlugin(t *testing.T) { fakeSetupContext := pluginCoreMocks.SetupContext{} fakeSetupContext.OnMetricsScope().Return(promutils.NewScope("test")) @@ -101,6 +144,10 @@ func TestPlugin(t *testing.T) { assert.NotEqual(t, context.TODO(), ctx) }) + // t.Run("test Do Function", func(t *testing.T) { + // taskContext := new(webapiPlugin.StatusContext) + // }) + t.Run("test PENDING Status", func(t *testing.T) { taskContext := new(webapiPlugin.StatusContext) taskContext.On("Resource").Return(ResourceWrapper{ From 51bdbdde5f48d6024d11e4df1624d8071f591512 Mon Sep 17 00:00:00 2001 From: Future Outlier Date: Tue, 17 Oct 2023 12:45:02 +0800 Subject: [PATCH 10/48] test in pluginmachinery internal webapi core.go Signed-off-by: Future Outlier --- .../pluginmachinery/internal/webapi/core.go | 5 +- .../internal/webapi/core_test.go | 103 ++++++++++++++++++ .../pluginmachinery/webapi/example/plugin.go | 2 +- .../go/tasks/plugins/webapi/agent/plugin.go | 1 - .../tasks/plugins/webapi/agent/plugin_test.go | 7 +- 5 files changed, 108 insertions(+), 10 deletions(-) diff --git a/flyteplugins/go/tasks/pluginmachinery/internal/webapi/core.go b/flyteplugins/go/tasks/pluginmachinery/internal/webapi/core.go index e840a4b6d8..d7dfcfab98 100644 --- a/flyteplugins/go/tasks/pluginmachinery/internal/webapi/core.go +++ b/flyteplugins/go/tasks/pluginmachinery/internal/webapi/core.go @@ -6,14 +6,15 @@ import ( "fmt" "time" + "k8s.io/utils/clock" + "github.com/flyteorg/flyte/flytestdlib/cache" stdErrs "github.com/flyteorg/flyte/flytestdlib/errors" - "k8s.io/utils/clock" + "github.com/flyteorg/flyte/flytestdlib/logger" "github.com/flyteorg/flyte/flyteplugins/go/tasks/errors" "github.com/flyteorg/flyte/flyteplugins/go/tasks/pluginmachinery/core" "github.com/flyteorg/flyte/flyteplugins/go/tasks/pluginmachinery/webapi" - "github.com/flyteorg/flyte/flytestdlib/logger" ) const ( diff --git a/flyteplugins/go/tasks/pluginmachinery/internal/webapi/core_test.go b/flyteplugins/go/tasks/pluginmachinery/internal/webapi/core_test.go index 7d34495ddf..5c1b706db2 100644 --- a/flyteplugins/go/tasks/pluginmachinery/internal/webapi/core_test.go +++ b/flyteplugins/go/tasks/pluginmachinery/internal/webapi/core_test.go @@ -2,16 +2,56 @@ package webapi import ( "context" + "encoding/json" + "sync/atomic" "testing" "time" "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/mock" + "k8s.io/apimachinery/pkg/util/rand" + flyteIdlCore "github.com/flyteorg/flyte/flyteidl/gen/pb-go/flyteidl/core" "github.com/flyteorg/flyte/flyteplugins/go/tasks/pluginmachinery/core" + "github.com/flyteorg/flyte/flyteplugins/go/tasks/pluginmachinery/core/mocks" + ioMocks "github.com/flyteorg/flyte/flyteplugins/go/tasks/pluginmachinery/io/mocks" "github.com/flyteorg/flyte/flyteplugins/go/tasks/pluginmachinery/webapi" + webapiMocks "github.com/flyteorg/flyte/flyteplugins/go/tasks/pluginmachinery/webapi/mocks" "github.com/flyteorg/flyte/flytestdlib/config" + "github.com/flyteorg/flyte/flytestdlib/storage" ) +func TestHandle(t *testing.T) { + ctx := context.TODO() + tCtx := getTaskContext(t) + taskReader := new(mocks.TaskReader) + + template := flyteIdlCore.TaskTemplate{ + Type: "api_task", + Metadata: &flyteIdlCore.TaskMetadata{ + Runtime: &flyteIdlCore.RuntimeMetadata{ + Flavor: "sync_plugin", + }, + }, + } + + taskReader.On("Read", mock.Anything).Return(&template, nil) + + tCtx.On("TaskReader").Return(taskReader) + + p := new(webapiMocks.SyncPlugin) + p.On("Do", ctx, tCtx).Return(core.PhaseInfo{}, nil) + + c := CorePlugin{ + id: "test", + p: p, + } + + transition, err := c.Handle(ctx, tCtx) + assert.NoError(t, err) + assert.NotNil(t, transition) +} + func Test_validateConfig(t *testing.T) { t.Run("In range", func(t *testing.T) { cfg := webapi.PluginConfig{ @@ -93,3 +133,66 @@ func TestCreateRemotePlugin(t *testing.T) { DefaultForTaskTypes: []core.TaskType{"test-task"}, }) } + +func getTaskContext(t *testing.T) *mocks.TaskExecutionContext { + latestKnownState := atomic.Value{} + pluginStateReader := &mocks.PluginStateReader{} + pluginStateReader.OnGetMatch(mock.Anything).Return(0, nil).Run(func(args mock.Arguments) { + o := args.Get(0) + x, err := json.Marshal(latestKnownState.Load()) + assert.NoError(t, err) + assert.NoError(t, json.Unmarshal(x, &o)) + }) + pluginStateWriter := &mocks.PluginStateWriter{} + pluginStateWriter.OnPutMatch(mock.Anything, mock.Anything).Return(nil).Run(func(args mock.Arguments) { + latestKnownState.Store(args.Get(1)) + }) + + pluginStateWriter.OnReset().Return(nil).Run(func(args mock.Arguments) { + latestKnownState.Store(nil) + }) + + execID := rand.String(3) + tID := &mocks.TaskExecutionID{} + tID.OnGetGeneratedName().Return(execID + "-my-task-1") + tID.OnGetID().Return(flyteIdlCore.TaskExecutionIdentifier{ + TaskId: &flyteIdlCore.Identifier{ + ResourceType: flyteIdlCore.ResourceType_TASK, + Project: "a", + Domain: "d", + Name: "n", + Version: "abc", + }, + NodeExecutionId: &flyteIdlCore.NodeExecutionIdentifier{ + NodeId: "node1", + ExecutionId: &flyteIdlCore.WorkflowExecutionIdentifier{ + Project: "a", + Domain: "d", + Name: "exec", + }, + }, + RetryAttempt: 0, + }) + tMeta := &mocks.TaskExecutionMetadata{} + tMeta.OnGetTaskExecutionID().Return(tID) + resourceManager := &mocks.ResourceManager{} + resourceManager.OnAllocateResourceMatch(mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(core.AllocationStatusGranted, nil) + resourceManager.OnReleaseResourceMatch(mock.Anything, mock.Anything, mock.Anything).Return(nil) + + basePrefix := storage.DataReference("fake://bucket/prefix/" + execID) + outputWriter := &ioMocks.OutputWriter{} + outputWriter.OnGetRawOutputPrefix().Return("/sandbox/") + outputWriter.OnGetOutputPrefixPath().Return(basePrefix) + outputWriter.OnGetErrorPath().Return(basePrefix + "/error.pb") + outputWriter.OnGetOutputPath().Return(basePrefix + "/outputs.pb") + outputWriter.OnGetCheckpointPrefix().Return("/checkpoint") + outputWriter.OnGetPreviousCheckpointsPrefix().Return("/prev") + + tCtx := &mocks.TaskExecutionContext{} + tCtx.OnOutputWriter().Return(outputWriter) + tCtx.OnResourceManager().Return(resourceManager) + tCtx.OnPluginStateReader().Return(pluginStateReader) + tCtx.OnPluginStateWriter().Return(pluginStateWriter) + tCtx.OnTaskExecutionMetadata().Return(tMeta) + return tCtx +} diff --git a/flyteplugins/go/tasks/pluginmachinery/webapi/example/plugin.go b/flyteplugins/go/tasks/pluginmachinery/webapi/example/plugin.go index 0ec6c2066e..484df3743f 100644 --- a/flyteplugins/go/tasks/pluginmachinery/webapi/example/plugin.go +++ b/flyteplugins/go/tasks/pluginmachinery/webapi/example/plugin.go @@ -111,7 +111,7 @@ func init() { pluginmachinery.PluginRegistry().RegisterRemotePlugin(webapi.PluginEntry{ ID: "service-a", SupportedTaskTypes: []core.TaskType{"my-task"}, - PluginLoader: func(ctx context.Context, iCtx webapi.PluginSetupContext) (webapi.AsyncPlugin, error) { + PluginLoader: func(ctx context.Context, iCtx webapi.PluginSetupContext) (webapi.Plugin, error) { return NewPlugin(ctx, GetConfig(), iCtx.MetricsScope()) }, IsDefault: false, diff --git a/flyteplugins/go/tasks/plugins/webapi/agent/plugin.go b/flyteplugins/go/tasks/plugins/webapi/agent/plugin.go index 2fe86fb050..e6abddf61e 100644 --- a/flyteplugins/go/tasks/plugins/webapi/agent/plugin.go +++ b/flyteplugins/go/tasks/plugins/webapi/agent/plugin.go @@ -110,7 +110,6 @@ func (p Plugin) Do(ctx context.Context, taskCtx webapi.TaskExecutionContext) (ph } return p.Status(ctx, pluginContext{TaskExecutionContext: taskCtx, resource: resource}) - } func (p Plugin) Create(ctx context.Context, taskCtx webapi.TaskExecutionContextReader) (webapi.ResourceMeta, diff --git a/flyteplugins/go/tasks/plugins/webapi/agent/plugin_test.go b/flyteplugins/go/tasks/plugins/webapi/agent/plugin_test.go index 54eca90bf7..23ec421e43 100644 --- a/flyteplugins/go/tasks/plugins/webapi/agent/plugin_test.go +++ b/flyteplugins/go/tasks/plugins/webapi/agent/plugin_test.go @@ -10,7 +10,6 @@ import ( flyteIdlCore "github.com/flyteorg/flyte/flyteidl/gen/pb-go/flyteidl/core" "github.com/flyteorg/flyte/flyteplugins/go/tasks/pluginmachinery" pluginsCore "github.com/flyteorg/flyte/flyteplugins/go/tasks/pluginmachinery/core" - "github.com/flyteorg/flyte/flyteplugins/go/tasks/pluginmachinery/core/mocks" pluginCoreMocks "github.com/flyteorg/flyte/flyteplugins/go/tasks/pluginmachinery/core/mocks" ioMocks "github.com/flyteorg/flyte/flyteplugins/go/tasks/pluginmachinery/io/mocks" webapiPlugin "github.com/flyteorg/flyte/flyteplugins/go/tasks/pluginmachinery/webapi/mocks" @@ -24,7 +23,7 @@ import ( func TestDo(t *testing.T) { tCtx := getTaskContext(t) - taskReader := new(mocks.TaskReader) + taskReader := new(pluginCoreMocks.TaskReader) template := flyteIdlCore.TaskTemplate{ Type: "api_task", @@ -144,10 +143,6 @@ func TestPlugin(t *testing.T) { assert.NotEqual(t, context.TODO(), ctx) }) - // t.Run("test Do Function", func(t *testing.T) { - // taskContext := new(webapiPlugin.StatusContext) - // }) - t.Run("test PENDING Status", func(t *testing.T) { taskContext := new(webapiPlugin.StatusContext) taskContext.On("Resource").Return(ResourceWrapper{ From bee3afa25599efd8d0c79ee2e57ae6ef0c5592b5 Mon Sep 17 00:00:00 2001 From: Future Outlier Date: Thu, 26 Oct 2023 11:33:21 +0800 Subject: [PATCH 11/48] lint Signed-off-by: Future Outlier --- .../go/tasks/pluginmachinery/internal/webapi/core.go | 7 +++---- flyteplugins/go/tasks/plugins/webapi/agent/plugin_test.go | 7 ++++--- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/flyteplugins/go/tasks/pluginmachinery/internal/webapi/core.go b/flyteplugins/go/tasks/pluginmachinery/internal/webapi/core.go index d7dfcfab98..2787172adc 100644 --- a/flyteplugins/go/tasks/pluginmachinery/internal/webapi/core.go +++ b/flyteplugins/go/tasks/pluginmachinery/internal/webapi/core.go @@ -8,13 +8,12 @@ import ( "k8s.io/utils/clock" - "github.com/flyteorg/flyte/flytestdlib/cache" - stdErrs "github.com/flyteorg/flyte/flytestdlib/errors" - "github.com/flyteorg/flyte/flytestdlib/logger" - "github.com/flyteorg/flyte/flyteplugins/go/tasks/errors" "github.com/flyteorg/flyte/flyteplugins/go/tasks/pluginmachinery/core" "github.com/flyteorg/flyte/flyteplugins/go/tasks/pluginmachinery/webapi" + "github.com/flyteorg/flyte/flytestdlib/cache" + stdErrs "github.com/flyteorg/flyte/flytestdlib/errors" + "github.com/flyteorg/flyte/flytestdlib/logger" ) const ( diff --git a/flyteplugins/go/tasks/plugins/webapi/agent/plugin_test.go b/flyteplugins/go/tasks/plugins/webapi/agent/plugin_test.go index 23ec421e43..cb1a1a44d7 100644 --- a/flyteplugins/go/tasks/plugins/webapi/agent/plugin_test.go +++ b/flyteplugins/go/tasks/plugins/webapi/agent/plugin_test.go @@ -5,6 +5,10 @@ import ( "testing" "time" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/mock" + "google.golang.org/grpc" + "github.com/flyteorg/flyte/flyteidl/clients/go/coreutils" "github.com/flyteorg/flyte/flyteidl/gen/pb-go/flyteidl/admin" flyteIdlCore "github.com/flyteorg/flyte/flyteidl/gen/pb-go/flyteidl/core" @@ -16,9 +20,6 @@ import ( "github.com/flyteorg/flyte/flytestdlib/config" "github.com/flyteorg/flyte/flytestdlib/promutils" "github.com/flyteorg/flyte/flytestdlib/storage" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/mock" - "google.golang.org/grpc" ) func TestDo(t *testing.T) { From 195542cc44bdcc663ea7bdfa0b5b8c8d161ad305 Mon Sep 17 00:00:00 2001 From: Future Outlier Date: Tue, 7 Nov 2023 16:24:53 +0800 Subject: [PATCH 12/48] fix breaking change Signed-off-by: Future Outlier --- .../go/tasks/pluginmachinery/internal/webapi/core_test.go | 2 +- .../go/tasks/pluginmachinery/webapi/example/plugin.go | 2 +- flyteplugins/go/tasks/pluginmachinery/webapi/plugin.go | 7 ++++++- .../go/tasks/plugins/webapi/agent/integration_test.go | 2 +- flyteplugins/go/tasks/plugins/webapi/agent/plugin.go | 2 +- flyteplugins/go/tasks/plugins/webapi/athena/plugin.go | 2 +- flyteplugins/go/tasks/plugins/webapi/bigquery/plugin.go | 2 +- flyteplugins/go/tasks/plugins/webapi/databricks/plugin.go | 2 +- flyteplugins/go/tasks/plugins/webapi/snowflake/plugin.go | 2 +- 9 files changed, 14 insertions(+), 9 deletions(-) diff --git a/flyteplugins/go/tasks/pluginmachinery/internal/webapi/core_test.go b/flyteplugins/go/tasks/pluginmachinery/internal/webapi/core_test.go index 5c1b706db2..62744131ec 100644 --- a/flyteplugins/go/tasks/pluginmachinery/internal/webapi/core_test.go +++ b/flyteplugins/go/tasks/pluginmachinery/internal/webapi/core_test.go @@ -122,7 +122,7 @@ func TestCreateRemotePlugin(t *testing.T) { CreateRemotePlugin(webapi.PluginEntry{ ID: "MyTestPlugin", SupportedTaskTypes: []core.TaskType{"test-task"}, - PluginLoader: func(ctx context.Context, iCtx webapi.PluginSetupContext) (webapi.Plugin, error) { + PluginLoader: func(ctx context.Context, iCtx webapi.PluginSetupContext) (webapi.AsyncPlugin, error) { return newPluginWithProperties(webapi.PluginConfig{ Caching: webapi.CachingConfig{ Size: 10, diff --git a/flyteplugins/go/tasks/pluginmachinery/webapi/example/plugin.go b/flyteplugins/go/tasks/pluginmachinery/webapi/example/plugin.go index 484df3743f..0ec6c2066e 100644 --- a/flyteplugins/go/tasks/pluginmachinery/webapi/example/plugin.go +++ b/flyteplugins/go/tasks/pluginmachinery/webapi/example/plugin.go @@ -111,7 +111,7 @@ func init() { pluginmachinery.PluginRegistry().RegisterRemotePlugin(webapi.PluginEntry{ ID: "service-a", SupportedTaskTypes: []core.TaskType{"my-task"}, - PluginLoader: func(ctx context.Context, iCtx webapi.PluginSetupContext) (webapi.Plugin, error) { + PluginLoader: func(ctx context.Context, iCtx webapi.PluginSetupContext) (webapi.AsyncPlugin, error) { return NewPlugin(ctx, GetConfig(), iCtx.MetricsScope()) }, IsDefault: false, diff --git a/flyteplugins/go/tasks/pluginmachinery/webapi/plugin.go b/flyteplugins/go/tasks/pluginmachinery/webapi/plugin.go index e1d17ea868..1dc1ea74a6 100644 --- a/flyteplugins/go/tasks/pluginmachinery/webapi/plugin.go +++ b/flyteplugins/go/tasks/pluginmachinery/webapi/plugin.go @@ -20,7 +20,12 @@ import ( // A Lazy loading function, that will load the plugin. Plugins should be initialized in this method. It is guaranteed // that the plugin loader will be called before any Handle/Abort/Finalize functions are invoked -type PluginLoader func(ctx context.Context, iCtx PluginSetupContext) (Plugin, error) +// Deprecated, please use AsyncPluginLoader instead for new plugin development +// type PluginLoader func(ctx context.Context, iCtx PluginSetupContext) (Plugin, error) +type PluginLoader func(ctx context.Context, iCtx PluginSetupContext) (AsyncPlugin, error) + +type AsyncPluginLoader func(ctx context.Context, iCtx PluginSetupContext) (AsyncPlugin, error) +type SyncPluginLoader func(ctx context.Context, iCtx PluginSetupContext) (SyncPlugin, error) // PluginEntry is a structure that is used to indicate to the system a K8s plugin type PluginEntry struct { diff --git a/flyteplugins/go/tasks/plugins/webapi/agent/integration_test.go b/flyteplugins/go/tasks/plugins/webapi/agent/integration_test.go index 061038216d..0c2b8fae69 100644 --- a/flyteplugins/go/tasks/plugins/webapi/agent/integration_test.go +++ b/flyteplugins/go/tasks/plugins/webapi/agent/integration_test.go @@ -133,7 +133,7 @@ func TestEndToEnd(t *testing.T) { t.Run("failed to create a job", func(t *testing.T) { agentPlugin := newMockAgentPlugin() - agentPlugin.PluginLoader = func(ctx context.Context, iCtx webapi.PluginSetupContext) (webapi.Plugin, error) { + agentPlugin.PluginLoader = func(ctx context.Context, iCtx webapi.PluginSetupContext) (webapi.AsyncPlugin, error) { return &MockPlugin{ Plugin{ metricScope: iCtx.MetricsScope(), diff --git a/flyteplugins/go/tasks/plugins/webapi/agent/plugin.go b/flyteplugins/go/tasks/plugins/webapi/agent/plugin.go index e6abddf61e..17a4dc502c 100644 --- a/flyteplugins/go/tasks/plugins/webapi/agent/plugin.go +++ b/flyteplugins/go/tasks/plugins/webapi/agent/plugin.go @@ -358,7 +358,7 @@ func newAgentPlugin() webapi.PluginEntry { return webapi.PluginEntry{ ID: "agent-service", SupportedTaskTypes: supportedTaskTypes, - PluginLoader: func(ctx context.Context, iCtx webapi.PluginSetupContext) (webapi.Plugin, error) { + PluginLoader: func(ctx context.Context, iCtx webapi.PluginSetupContext) (webapi.AsyncPlugin, error) { return &Plugin{ metricScope: iCtx.MetricsScope(), cfg: GetConfig(), diff --git a/flyteplugins/go/tasks/plugins/webapi/athena/plugin.go b/flyteplugins/go/tasks/plugins/webapi/athena/plugin.go index c2198c63a7..a1f16163fe 100644 --- a/flyteplugins/go/tasks/plugins/webapi/athena/plugin.go +++ b/flyteplugins/go/tasks/plugins/webapi/athena/plugin.go @@ -214,7 +214,7 @@ func init() { pluginmachinery.PluginRegistry().RegisterRemotePlugin(webapi.PluginEntry{ ID: "athena", SupportedTaskTypes: []core.TaskType{"hive", "presto"}, - PluginLoader: func(ctx context.Context, iCtx webapi.PluginSetupContext) (webapi.Plugin, error) { + PluginLoader: func(ctx context.Context, iCtx webapi.PluginSetupContext) (webapi.AsyncPlugin, error) { return NewPlugin(ctx, GetConfig(), aws.GetConfig(), iCtx.MetricsScope()) }, }) diff --git a/flyteplugins/go/tasks/plugins/webapi/bigquery/plugin.go b/flyteplugins/go/tasks/plugins/webapi/bigquery/plugin.go index ffed2c6b2a..f08d1d15ea 100644 --- a/flyteplugins/go/tasks/plugins/webapi/bigquery/plugin.go +++ b/flyteplugins/go/tasks/plugins/webapi/bigquery/plugin.go @@ -559,7 +559,7 @@ func newBigQueryJobTaskPlugin() webapi.PluginEntry { return webapi.PluginEntry{ ID: "bigquery", SupportedTaskTypes: []core.TaskType{bigqueryQueryJobTask}, - PluginLoader: func(ctx context.Context, iCtx webapi.PluginSetupContext) (webapi.Plugin, error) { + PluginLoader: func(ctx context.Context, iCtx webapi.PluginSetupContext) (webapi.AsyncPlugin, error) { cfg := GetConfig() return NewPlugin(cfg, iCtx.MetricsScope()) diff --git a/flyteplugins/go/tasks/plugins/webapi/databricks/plugin.go b/flyteplugins/go/tasks/plugins/webapi/databricks/plugin.go index fc5771be51..1ce0d747f4 100644 --- a/flyteplugins/go/tasks/plugins/webapi/databricks/plugin.go +++ b/flyteplugins/go/tasks/plugins/webapi/databricks/plugin.go @@ -337,7 +337,7 @@ func newDatabricksJobTaskPlugin() webapi.PluginEntry { return webapi.PluginEntry{ ID: "databricks", SupportedTaskTypes: []core.TaskType{"spark"}, - PluginLoader: func(ctx context.Context, iCtx webapi.PluginSetupContext) (webapi.Plugin, error) { + PluginLoader: func(ctx context.Context, iCtx webapi.PluginSetupContext) (webapi.AsyncPlugin, error) { return &Plugin{ metricScope: iCtx.MetricsScope(), cfg: GetConfig(), diff --git a/flyteplugins/go/tasks/plugins/webapi/snowflake/plugin.go b/flyteplugins/go/tasks/plugins/webapi/snowflake/plugin.go index 797dc2f13d..33334b4003 100644 --- a/flyteplugins/go/tasks/plugins/webapi/snowflake/plugin.go +++ b/flyteplugins/go/tasks/plugins/webapi/snowflake/plugin.go @@ -273,7 +273,7 @@ func newSnowflakeJobTaskPlugin() webapi.PluginEntry { return webapi.PluginEntry{ ID: "snowflake", SupportedTaskTypes: []core.TaskType{"snowflake"}, - PluginLoader: func(ctx context.Context, iCtx webapi.PluginSetupContext) (webapi.Plugin, error) { + PluginLoader: func(ctx context.Context, iCtx webapi.PluginSetupContext) (webapi.AsyncPlugin, error) { return Plugin{ metricScope: iCtx.MetricsScope(), cfg: GetConfig(), From e06f05b000e0e5bd5ccae451befe63c07094a23f Mon Sep 17 00:00:00 2001 From: Future Outlier Date: Tue, 7 Nov 2023 16:51:45 +0800 Subject: [PATCH 13/48] fix integration test in agent Signed-off-by: Future Outlier --- flyteplugins/go/tasks/plugins/webapi/agent/integration_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/flyteplugins/go/tasks/plugins/webapi/agent/integration_test.go b/flyteplugins/go/tasks/plugins/webapi/agent/integration_test.go index 0c2b8fae69..9b586b9e7c 100644 --- a/flyteplugins/go/tasks/plugins/webapi/agent/integration_test.go +++ b/flyteplugins/go/tasks/plugins/webapi/agent/integration_test.go @@ -268,7 +268,7 @@ func newMockAgentPlugin() webapi.PluginEntry { return webapi.PluginEntry{ ID: "agent-service", SupportedTaskTypes: []core.TaskType{"bigquery_query_job_task", "spark_job", "api_task"}, - PluginLoader: func(ctx context.Context, iCtx webapi.PluginSetupContext) (webapi.Plugin, error) { + PluginLoader: func(ctx context.Context, iCtx webapi.PluginSetupContext) (webapi.AsyncPlugin, error) { return &MockPlugin{ Plugin{ metricScope: iCtx.MetricsScope(), From 68498c0d6a37ca977fd7eaaaa99ad5839e815ba3 Mon Sep 17 00:00:00 2001 From: Future Outlier Date: Tue, 7 Nov 2023 16:55:02 +0800 Subject: [PATCH 14/48] nit Signed-off-by: Future Outlier --- flyteplugins/go/tasks/pluginmachinery/internal/webapi/core.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/flyteplugins/go/tasks/pluginmachinery/internal/webapi/core.go b/flyteplugins/go/tasks/pluginmachinery/internal/webapi/core.go index 2787172adc..2c1984fd06 100644 --- a/flyteplugins/go/tasks/pluginmachinery/internal/webapi/core.go +++ b/flyteplugins/go/tasks/pluginmachinery/internal/webapi/core.go @@ -204,7 +204,7 @@ func createRemotePlugin(pluginEntry webapi.PluginEntry, c clock.Clock) core.Plug } } - resourceCache, err := NewResourceCache(ctx, pluginEntry.ID, p.(webapi.AsyncPlugin), p.GetConfig().Caching, + resourceCache, err := NewResourceCache(ctx, pluginEntry.ID, p, p.GetConfig().Caching, iCtx.MetricsScope().NewSubScope("cache")) if err != nil { From c8f81157a40fef9e8f8be8ba5485a2c91e09ee85 Mon Sep 17 00:00:00 2001 From: Future Outlier Date: Tue, 7 Nov 2023 17:29:11 +0800 Subject: [PATCH 15/48] add type assertion improvement Signed-off-by: Future Outlier --- .../tasks/pluginmachinery/internal/webapi/core.go | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/flyteplugins/go/tasks/pluginmachinery/internal/webapi/core.go b/flyteplugins/go/tasks/pluginmachinery/internal/webapi/core.go index 2c1984fd06..4306608a03 100644 --- a/flyteplugins/go/tasks/pluginmachinery/internal/webapi/core.go +++ b/flyteplugins/go/tasks/pluginmachinery/internal/webapi/core.go @@ -74,10 +74,17 @@ func (c CorePlugin) Handle(ctx context.Context, tCtx core.TaskExecutionContext) // Use the sync plugin to execute the task if the task template has the sync plugin flavor. if taskTemplate.GetMetadata().GetRuntime().GetFlavor() == syncPlugin { - phaseInfo, err := c.p.(webapi.SyncPlugin).Do(ctx, tCtx) + plugin, ok := c.p.(webapi.SyncPlugin) + if !ok { + return core.UnknownTransition, fmt.Errorf("plugin does not have the required sync pluigin interface") + } + + phaseInfo, err := plugin.Do(ctx, tCtx) if err != nil { + logger.Errorf(ctx, "please check if the sync plugin interface is implemented or not") return core.UnknownTransition, err } + return core.DoTransition(phaseInfo), nil } @@ -88,7 +95,11 @@ func (c CorePlugin) Handle(ctx context.Context, tCtx core.TaskExecutionContext) var nextState *State var phaseInfo core.PhaseInfo - plugin := c.p.(webapi.AsyncPlugin) + plugin, ok := c.p.(webapi.AsyncPlugin) + if !ok { + return core.UnknownTransition, fmt.Errorf("plugin does not have the required async pluigin interface") + } + switch incomingState.Phase { case PhaseNotStarted: if len(c.p.GetConfig().ResourceQuotas) > 0 { From 8a777a5f262a95c80c0b7bdf9f85ddfe0f415f42 Mon Sep 17 00:00:00 2001 From: Future Outlier Date: Tue, 7 Nov 2023 21:38:35 +0800 Subject: [PATCH 16/48] break Async Handle and Sync Handle into 2 functions, add more error message for plugin interface methods Signed-off-by: Future Outlier --- .../pluginmachinery/internal/webapi/core.go | 58 ++++++++++++++----- 1 file changed, 43 insertions(+), 15 deletions(-) diff --git a/flyteplugins/go/tasks/pluginmachinery/internal/webapi/core.go b/flyteplugins/go/tasks/pluginmachinery/internal/webapi/core.go index 4306608a03..7a6fd09e62 100644 --- a/flyteplugins/go/tasks/pluginmachinery/internal/webapi/core.go +++ b/flyteplugins/go/tasks/pluginmachinery/internal/webapi/core.go @@ -66,6 +66,26 @@ func (c CorePlugin) GetProperties() core.PluginProperties { return core.PluginProperties{} } +func (c CorePlugin) syncHandle(ctx context.Context, tCtx core.TaskExecutionContext) (core.Transition, error) { + plugin, ok := c.p.(webapi.SyncPlugin) + if !ok { + taskTemplate, err := tCtx.TaskReader().Read(ctx) + if err != nil { + return core.UnknownTransition, err + } + return core.UnknownTransition, fmt.Errorf("%s does not implement required sync plugin interface methods", taskTemplate.GetType()) + } + + phaseInfo, err := plugin.Do(ctx, tCtx) + if err != nil { + logger.Errorf(ctx, "please check if the sync plugin interface is implemented or not") + return core.UnknownTransition, err + } + + return core.DoTransition(phaseInfo), nil + +} + func (c CorePlugin) Handle(ctx context.Context, tCtx core.TaskExecutionContext) (core.Transition, error) { taskTemplate, err := tCtx.TaskReader().Read(ctx) if err != nil { @@ -74,18 +94,7 @@ func (c CorePlugin) Handle(ctx context.Context, tCtx core.TaskExecutionContext) // Use the sync plugin to execute the task if the task template has the sync plugin flavor. if taskTemplate.GetMetadata().GetRuntime().GetFlavor() == syncPlugin { - plugin, ok := c.p.(webapi.SyncPlugin) - if !ok { - return core.UnknownTransition, fmt.Errorf("plugin does not have the required sync pluigin interface") - } - - phaseInfo, err := plugin.Do(ctx, tCtx) - if err != nil { - logger.Errorf(ctx, "please check if the sync plugin interface is implemented or not") - return core.UnknownTransition, err - } - - return core.DoTransition(phaseInfo), nil + return c.syncHandle(ctx, tCtx) } incomingState, err := c.unmarshalState(ctx, tCtx.PluginStateReader()) @@ -97,7 +106,7 @@ func (c CorePlugin) Handle(ctx context.Context, tCtx core.TaskExecutionContext) var phaseInfo core.PhaseInfo plugin, ok := c.p.(webapi.AsyncPlugin) if !ok { - return core.UnknownTransition, fmt.Errorf("plugin does not have the required async pluigin interface") + return core.UnknownTransition, fmt.Errorf("%s does not implement required async plugin interface methods", taskTemplate.GetType()) } switch incomingState.Phase { @@ -132,7 +141,16 @@ func (c CorePlugin) Abort(ctx context.Context, tCtx core.TaskExecutionContext) e logger.Infof(ctx, "Attempting to abort resource [%v].", tCtx.TaskExecutionMetadata().GetTaskExecutionID().GetID()) - err = c.p.(webapi.AsyncPlugin).Delete(ctx, newPluginContext(incomingState.ResourceMeta, nil, "Aborted", tCtx)) + plugin, ok := c.p.(webapi.AsyncPlugin) + if !ok { + taskTemplate, err := tCtx.TaskReader().Read(ctx) + if err != nil { + return err + } + return fmt.Errorf("%s does not implement required plugin interface methods", taskTemplate.GetType()) + } + + err = plugin.Delete(ctx, newPluginContext(incomingState.ResourceMeta, nil, "Aborted", tCtx)) if err != nil { logger.Errorf(ctx, "Failed to abort some resources [%v]. Error: %v", tCtx.TaskExecutionMetadata().GetTaskExecutionID().GetGeneratedName(), err) @@ -150,7 +168,17 @@ func (c CorePlugin) Finalize(ctx context.Context, tCtx core.TaskExecutionContext logger.Infof(ctx, "Attempting to finalize resource [%v].", tCtx.TaskExecutionMetadata().GetTaskExecutionID().GetGeneratedName()) - return c.tokenAllocator.releaseToken(ctx, c.p.(webapi.AsyncPlugin), tCtx, c.metrics) + + plugin, ok := c.p.(webapi.AsyncPlugin) + if !ok { + taskTemplate, err := tCtx.TaskReader().Read(ctx) + if err != nil { + return err + } + return fmt.Errorf("%s does not implement required plugin interface methods", taskTemplate.GetType()) + } + + return c.tokenAllocator.releaseToken(ctx, plugin, tCtx, c.metrics) } func validateRangeInt(fieldName string, min, max, provided int) error { From f48402ac0773b26c03a1ff14545e4174b738c008 Mon Sep 17 00:00:00 2001 From: Future Outlier Date: Tue, 7 Nov 2023 22:42:07 +0800 Subject: [PATCH 17/48] remove unused interface Signed-off-by: Future Outlier --- flyteplugins/go/tasks/pluginmachinery/webapi/plugin.go | 5 ----- 1 file changed, 5 deletions(-) diff --git a/flyteplugins/go/tasks/pluginmachinery/webapi/plugin.go b/flyteplugins/go/tasks/pluginmachinery/webapi/plugin.go index 1dc1ea74a6..fd454198f5 100644 --- a/flyteplugins/go/tasks/pluginmachinery/webapi/plugin.go +++ b/flyteplugins/go/tasks/pluginmachinery/webapi/plugin.go @@ -20,13 +20,8 @@ import ( // A Lazy loading function, that will load the plugin. Plugins should be initialized in this method. It is guaranteed // that the plugin loader will be called before any Handle/Abort/Finalize functions are invoked -// Deprecated, please use AsyncPluginLoader instead for new plugin development -// type PluginLoader func(ctx context.Context, iCtx PluginSetupContext) (Plugin, error) type PluginLoader func(ctx context.Context, iCtx PluginSetupContext) (AsyncPlugin, error) -type AsyncPluginLoader func(ctx context.Context, iCtx PluginSetupContext) (AsyncPlugin, error) -type SyncPluginLoader func(ctx context.Context, iCtx PluginSetupContext) (SyncPlugin, error) - // PluginEntry is a structure that is used to indicate to the system a K8s plugin type PluginEntry struct { // ID/Name of the plugin. This will be used to identify this plugin and has to be unique in the entire system From 4b328455a461c65061fb8155a6b6b9a0e91fc675 Mon Sep 17 00:00:00 2001 From: Future-Outlier Date: Thu, 9 Nov 2023 10:07:11 +0800 Subject: [PATCH 18/48] Update flyteplugins/go/tasks/plugins/webapi/agent/plugin_test.go Co-authored-by: Kevin Su Signed-off-by: Future-Outlier --- flyteplugins/go/tasks/plugins/webapi/agent/plugin_test.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/flyteplugins/go/tasks/plugins/webapi/agent/plugin_test.go b/flyteplugins/go/tasks/plugins/webapi/agent/plugin_test.go index cb1a1a44d7..45c5ea96ca 100644 --- a/flyteplugins/go/tasks/plugins/webapi/agent/plugin_test.go +++ b/flyteplugins/go/tasks/plugins/webapi/agent/plugin_test.go @@ -45,7 +45,8 @@ func TestDo(t *testing.T) { assert.NoError(t, err) // Call the Do function by Flavor - inputs, _ := coreutils.MakeLiteralMap(map[string]interface{}{"x": 1}) + inputs, err := coreutils.MakeLiteralMap(map[string]interface{}{"x": 1}) + assert.NoError(t, err) basePrefix := storage.DataReference("fake://bucket/prefix/") inputReader := &ioMocks.InputReader{} inputReader.OnGetInputPrefixPath().Return(basePrefix) From a125bd215cf57f9bb18021c6979f6c989b6e8328 Mon Sep 17 00:00:00 2001 From: Future Outlier Date: Thu, 9 Nov 2023 16:22:53 +0800 Subject: [PATCH 19/48] plugin helper function adn error handling Signed-off-by: Future Outlier --- flyteidl/protos/flyteidl/core/tasks.proto | 2 +- .../pluginmachinery/internal/webapi/core.go | 62 +++++++++++-------- .../internal/webapi/core_test.go | 5 +- 3 files changed, 41 insertions(+), 28 deletions(-) diff --git a/flyteidl/protos/flyteidl/core/tasks.proto b/flyteidl/protos/flyteidl/core/tasks.proto index 3d3f4b6abf..64b18a7a3f 100644 --- a/flyteidl/protos/flyteidl/core/tasks.proto +++ b/flyteidl/protos/flyteidl/core/tasks.proto @@ -82,7 +82,7 @@ message RuntimeMetadata { // checks to ensure tighter validation or setting expectations. string version = 2; - //+optional It can be used to provide extra information about the runtime (e.g. python, golang... etc.). + //+optional It can be used to provide extra information about the plugin type (e.g. async plugin, sync plugin... etc.). string flavor = 3; } diff --git a/flyteplugins/go/tasks/pluginmachinery/internal/webapi/core.go b/flyteplugins/go/tasks/pluginmachinery/internal/webapi/core.go index 7a6fd09e62..c7450fbe1b 100644 --- a/flyteplugins/go/tasks/pluginmachinery/internal/webapi/core.go +++ b/flyteplugins/go/tasks/pluginmachinery/internal/webapi/core.go @@ -28,6 +28,7 @@ const ( maxBurst = 10000 minQPS = 1 maxQPS = 100000 + asyncPlugin = "async_plugin" syncPlugin = "sync_plugin" ) @@ -66,24 +67,41 @@ func (c CorePlugin) GetProperties() core.PluginProperties { return core.PluginProperties{} } -func (c CorePlugin) syncHandle(ctx context.Context, tCtx core.TaskExecutionContext) (core.Transition, error) { - plugin, ok := c.p.(webapi.SyncPlugin) - if !ok { - taskTemplate, err := tCtx.TaskReader().Read(ctx) - if err != nil { - return core.UnknownTransition, err +func (c CorePlugin) getPlugin(pluginType string) (webapi.AsyncPlugin, webapi.SyncPlugin, error) { + if pluginType == syncPlugin { + plugin, ok := c.p.(webapi.SyncPlugin) + if !ok { + return nil, nil, fmt.Errorf("Core plugin does not implement the sync plugin interface") } - return core.UnknownTransition, fmt.Errorf("%s does not implement required sync plugin interface methods", taskTemplate.GetType()) + return nil, plugin, nil + } + // Assume the plugin is an async plugin if not explicitly specified as sync. + // This helps maintain backward compatibility with existing implementations that + // expect an async plugin by default, thereby avoiding breaking changes. + plugin, ok := c.p.(webapi.AsyncPlugin) + if !ok { + return nil, nil, fmt.Errorf("Core plugin does not implement the async plugin interface") + } + return plugin, nil, nil +} + +func (c CorePlugin) syncHandle(ctx context.Context, tCtx core.TaskExecutionContext) (core.Transition, error) { + _, plugin, err := c.getPlugin(syncPlugin) + if err != nil { + return core.UnknownTransition, err } phaseInfo, err := plugin.Do(ctx, tCtx) if err != nil { - logger.Errorf(ctx, "please check if the sync plugin interface is implemented or not") + taskTemplate, err := tCtx.TaskReader().Read(ctx) + if err != nil { + return core.UnknownTransition, err + } + logger.Errorf(ctx, "please check if [%v] task type has implemented sync plugin method or not", taskTemplate.GetType()) return core.UnknownTransition, err } return core.DoTransition(phaseInfo), nil - } func (c CorePlugin) Handle(ctx context.Context, tCtx core.TaskExecutionContext) (core.Transition, error) { @@ -104,9 +122,9 @@ func (c CorePlugin) Handle(ctx context.Context, tCtx core.TaskExecutionContext) var nextState *State var phaseInfo core.PhaseInfo - plugin, ok := c.p.(webapi.AsyncPlugin) - if !ok { - return core.UnknownTransition, fmt.Errorf("%s does not implement required async plugin interface methods", taskTemplate.GetType()) + plugin, _, err := c.getPlugin(asyncPlugin) + if err != nil { + return core.UnknownTransition, err } switch incomingState.Phase { @@ -141,13 +159,9 @@ func (c CorePlugin) Abort(ctx context.Context, tCtx core.TaskExecutionContext) e logger.Infof(ctx, "Attempting to abort resource [%v].", tCtx.TaskExecutionMetadata().GetTaskExecutionID().GetID()) - plugin, ok := c.p.(webapi.AsyncPlugin) - if !ok { - taskTemplate, err := tCtx.TaskReader().Read(ctx) - if err != nil { - return err - } - return fmt.Errorf("%s does not implement required plugin interface methods", taskTemplate.GetType()) + plugin, _, err := c.getPlugin(asyncPlugin) + if err != nil { + return err } err = plugin.Delete(ctx, newPluginContext(incomingState.ResourceMeta, nil, "Aborted", tCtx)) @@ -169,13 +183,9 @@ func (c CorePlugin) Finalize(ctx context.Context, tCtx core.TaskExecutionContext logger.Infof(ctx, "Attempting to finalize resource [%v].", tCtx.TaskExecutionMetadata().GetTaskExecutionID().GetGeneratedName()) - plugin, ok := c.p.(webapi.AsyncPlugin) - if !ok { - taskTemplate, err := tCtx.TaskReader().Read(ctx) - if err != nil { - return err - } - return fmt.Errorf("%s does not implement required plugin interface methods", taskTemplate.GetType()) + plugin, _, err := c.getPlugin(asyncPlugin) + if err != nil { + return err } return c.tokenAllocator.releaseToken(ctx, plugin, tCtx, c.metrics) diff --git a/flyteplugins/go/tasks/pluginmachinery/internal/webapi/core_test.go b/flyteplugins/go/tasks/pluginmachinery/internal/webapi/core_test.go index 62744131ec..5338030d9d 100644 --- a/flyteplugins/go/tasks/pluginmachinery/internal/webapi/core_test.go +++ b/flyteplugins/go/tasks/pluginmachinery/internal/webapi/core_test.go @@ -25,6 +25,7 @@ func TestHandle(t *testing.T) { ctx := context.TODO() tCtx := getTaskContext(t) taskReader := new(mocks.TaskReader) + taskInfo := &core.TaskInfo{} template := flyteIdlCore.TaskTemplate{ Type: "api_task", @@ -40,7 +41,7 @@ func TestHandle(t *testing.T) { tCtx.On("TaskReader").Return(taskReader) p := new(webapiMocks.SyncPlugin) - p.On("Do", ctx, tCtx).Return(core.PhaseInfo{}, nil) + p.On("Do", ctx, tCtx).Return(core.PhaseInfoSuccess(taskInfo), nil) c := CorePlugin{ id: "test", @@ -50,6 +51,8 @@ func TestHandle(t *testing.T) { transition, err := c.Handle(ctx, tCtx) assert.NoError(t, err) assert.NotNil(t, transition) + assert.Equal(t, core.PhaseInfoSuccess(taskInfo), transition.Info()) + assert.Equal(t, core.TransitionTypeEphemeral, transition.Type()) } func Test_validateConfig(t *testing.T) { From 6750c313e8dd3ea7fd5c6f55a966c0c80c359eb4 Mon Sep 17 00:00:00 2001 From: Future Outlier Date: Thu, 9 Nov 2023 19:13:25 +0800 Subject: [PATCH 20/48] change runtime flavor comments Signed-off-by: Future Outlier --- flyteidl/gen/pb-go/flyteidl/core/tasks.pb.go | 2 +- .../pb-go/flyteidl/service/admin.swagger.json | 2 +- .../pb-go/flyteidl/service/agent.swagger.json | 2 +- .../external_plugin_service.swagger.json | 2 +- .../service/flyteadmin/api/swagger.yaml | 2 +- .../flyteadmin/model_core_runtime_metadata.go | 2 +- flyteidl/gen/pb-go/flyteidl/service/openapi.go | 4 ++-- flyteidl/gen/pb-java/flyteidl/core/Tasks.java | 18 +++++++++--------- .../flyteadmin/models/core_runtime_metadata.py | 4 ++-- flyteidl/gen/pb_rust/flyteidl.core.rs | 2 +- 10 files changed, 20 insertions(+), 20 deletions(-) diff --git a/flyteidl/gen/pb-go/flyteidl/core/tasks.pb.go b/flyteidl/gen/pb-go/flyteidl/core/tasks.pb.go index d7310cce31..cac46f8a94 100644 --- a/flyteidl/gen/pb-go/flyteidl/core/tasks.pb.go +++ b/flyteidl/gen/pb-go/flyteidl/core/tasks.pb.go @@ -500,7 +500,7 @@ type RuntimeMetadata struct { // Version of the runtime. All versions should be backward compatible. However, certain cases call for version // checks to ensure tighter validation or setting expectations. Version string `protobuf:"bytes,2,opt,name=version,proto3" json:"version,omitempty"` - //+optional It can be used to provide extra information about the runtime (e.g. python, golang... etc.). + //+optional It can be used to provide extra information about the plugin type (e.g. async plugin, sync plugin... etc.). Flavor string `protobuf:"bytes,3,opt,name=flavor,proto3" json:"flavor,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` diff --git a/flyteidl/gen/pb-go/flyteidl/service/admin.swagger.json b/flyteidl/gen/pb-go/flyteidl/service/admin.swagger.json index 63ea63a40d..2965288df5 100644 --- a/flyteidl/gen/pb-go/flyteidl/service/admin.swagger.json +++ b/flyteidl/gen/pb-go/flyteidl/service/admin.swagger.json @@ -6666,7 +6666,7 @@ }, "flavor": { "type": "string", - "description": "+optional It can be used to provide extra information about the runtime (e.g. python, golang... etc.)." + "description": "+optional It can be used to provide extra information about the plugin type (e.g. async plugin, sync plugin... etc.)." } }, "description": "Runtime information. This is loosely defined to allow for extensibility." diff --git a/flyteidl/gen/pb-go/flyteidl/service/agent.swagger.json b/flyteidl/gen/pb-go/flyteidl/service/agent.swagger.json index 309d44c833..f71c404135 100644 --- a/flyteidl/gen/pb-go/flyteidl/service/agent.swagger.json +++ b/flyteidl/gen/pb-go/flyteidl/service/agent.swagger.json @@ -759,7 +759,7 @@ }, "flavor": { "type": "string", - "description": "+optional It can be used to provide extra information about the runtime (e.g. python, golang... etc.)." + "description": "+optional It can be used to provide extra information about the plugin type (e.g. async plugin, sync plugin... etc.)." } }, "description": "Runtime information. This is loosely defined to allow for extensibility." diff --git a/flyteidl/gen/pb-go/flyteidl/service/external_plugin_service.swagger.json b/flyteidl/gen/pb-go/flyteidl/service/external_plugin_service.swagger.json index 2196ca521f..0ccc813ddd 100644 --- a/flyteidl/gen/pb-go/flyteidl/service/external_plugin_service.swagger.json +++ b/flyteidl/gen/pb-go/flyteidl/service/external_plugin_service.swagger.json @@ -698,7 +698,7 @@ }, "flavor": { "type": "string", - "description": "+optional It can be used to provide extra information about the runtime (e.g. python, golang... etc.)." + "description": "+optional It can be used to provide extra information about the plugin type (e.g. async plugin, sync plugin... etc.)." } }, "description": "Runtime information. This is loosely defined to allow for extensibility." diff --git a/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/api/swagger.yaml b/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/api/swagger.yaml index faeca2cd95..22b501d122 100644 --- a/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/api/swagger.yaml +++ b/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/api/swagger.yaml @@ -95170,7 +95170,7 @@ definitions: flavor: type: "string" description: "+optional It can be used to provide extra information about\ - \ the runtime (e.g. python, golang... etc.)." + \ the plugin type (e.g. async plugin, sync plugin... etc.)." description: "Runtime information. This is loosely defined to allow for extensibility." example: flavor: "flavor" diff --git a/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/model_core_runtime_metadata.go b/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/model_core_runtime_metadata.go index 51fe719888..f0bb33480b 100644 --- a/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/model_core_runtime_metadata.go +++ b/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/model_core_runtime_metadata.go @@ -15,6 +15,6 @@ type CoreRuntimeMetadata struct { Type_ *RuntimeMetadataRuntimeType `json:"type,omitempty"` // Version of the runtime. All versions should be backward compatible. However, certain cases call for version checks to ensure tighter validation or setting expectations. Version string `json:"version,omitempty"` - // +optional It can be used to provide extra information about the runtime (e.g. python, golang... etc.). + // +optional It can be used to provide extra information about the plugin type (e.g. async plugin, sync plugin... etc.). Flavor string `json:"flavor,omitempty"` } diff --git a/flyteidl/gen/pb-go/flyteidl/service/openapi.go b/flyteidl/gen/pb-go/flyteidl/service/openapi.go index 94b2afe544..73a73e4f4c 100644 --- a/flyteidl/gen/pb-go/flyteidl/service/openapi.go +++ b/flyteidl/gen/pb-go/flyteidl/service/openapi.go @@ -78,7 +78,7 @@ func (fi bindataFileInfo) Sys() interface{} { return nil } -var _adminSwaggerJson = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\xfd\x7b\x73\xeb\xb8\x95\x2f\x0c\xff\x3f\x9f\x02\x67\xcf\xa9\xea\xee\x44\xb6\x3b\xc9\x4c\xde\x94\xa7\x4e\xbd\x8f\xda\xd6\xde\xad\xd3\xbe\xc5\x97\xee\xe9\x67\x94\x52\x43\x24\x24\x21\x26\x01\x06\x00\xed\xad\x4e\xe5\xbb\x3f\x85\x85\x0b\x41\x8a\x94\xa8\x8b\x6d\x79\x37\x67\xaa\xd2\xde\x22\x89\xeb\xc2\xc2\xba\xfe\xd6\x3f\xff\x0d\xa1\x0f\xf2\x19\xcf\x66\x44\x7c\x38\x45\x1f\xfe\x78\xfc\xed\x87\x9e\xfe\x8d\xb2\x29\xff\x70\x8a\xf4\x73\x84\x3e\x28\xaa\x12\xa2\x9f\x4f\x93\x85\x22\x34\x4e\x4e\x24\x11\x4f\x34\x22\x27\x38\x4e\x29\x3b\xce\x04\x57\x1c\x3e\x44\xe8\xc3\x13\x11\x92\x72\xa6\x5f\xb7\x7f\x22\xc6\x15\x92\x44\x7d\xf8\x37\x84\xfe\x05\xcd\xcb\x68\x4e\x52\x22\x3f\x9c\xa2\xff\x31\x1f\xcd\x95\xca\x5c\x03\xfa\x6f\xa9\xdf\xfd\x1b\xbc\x1b\x71\x26\xf3\xd2\xcb\x38\xcb\x12\x1a\x61\x45\x39\x3b\xf9\xbb\xe4\xac\x78\x37\x13\x3c\xce\xa3\x96\xef\x62\x35\x97\xc5\x1c\x4f\x70\x46\x4f\x9e\xfe\x70\x82\x23\x45\x9f\xc8\x38\xc1\x39\x8b\xe6\xe3\x2c\xc1\x4c\x9e\xfc\x93\xc6\x7a\x8e\x7f\x27\x91\xfa\x17\xfc\x23\xe6\x29\xa6\xcc\xfc\xcd\x70\x4a\xfe\xe5\xdb\x41\xe8\xc3\x8c\xa8\xe0\x9f\x7a\xb6\x79\x9a\x62\xb1\xd0\x2b\xf2\x91\xa8\x68\x8e\xd4\x9c\x20\xd3\x0f\x72\x4b\xc4\xa7\x08\xa3\x53\x41\xa6\xa7\xbf\x08\x32\x1d\xbb\x85\x3e\x36\x0b\x7c\x01\xa3\xb9\x49\x30\xfb\xe5\xd8\x2e\x13\xb4\xcc\x33\x22\x60\x6e\xc3\x58\xb7\xfe\x89\xa8\x3e\x34\x5b\xbc\x1f\xbe\x2d\x88\xcc\x38\x93\x44\x96\x86\x87\xd0\x87\x3f\x7e\xfb\x6d\xe5\x27\x84\x3e\xc4\x44\x46\x82\x66\xca\xee\x65\x1f\xc9\x3c\x8a\x88\x94\xd3\x3c\x41\xae\xa5\x70\x30\x66\xaa\x7a\x63\xf1\x52\x63\x08\x7d\xf8\xdf\x82\x4c\x75\x3b\xff\x7e\x12\x93\x29\x65\x54\xb7\x2b\x0d\xfd\x04\xa3\x2d\x7d\xf5\xaf\x7f\xab\xfb\xfb\x5f\xc1\x8c\x32\x2c\x70\x4a\x14\x11\xc5\x8e\x9b\xff\xab\xcc\x45\xef\x91\xee\xbc\xd8\xc7\xea\xc0\x2b\xb3\xbd\xc2\x29\xd1\x7b\xa2\x77\xca\x7e\x01\x7f\x0b\x22\x79\x2e\x22\x82\x26\x24\xe1\x6c\x26\x91\xe2\x4b\x6b\x40\xa1\x05\x4d\x5e\xd5\x27\x82\xfc\x23\xa7\x82\xe8\xbd\x52\x22\x27\x95\xa7\x6a\x91\xc1\x20\xa5\x12\x94\xcd\xc2\xa5\xf8\x57\xaf\xd5\xd4\x0c\x55\x6e\x30\x33\xf3\x41\xe3\xc4\x46\xac\xef\x5e\x89\x30\x43\x13\x82\xf4\x59\xa4\x31\x11\x24\x46\x58\x22\x8c\x64\x3e\x91\x44\xa1\x67\xaa\xe6\x94\xe9\x7f\x67\x24\xa2\x53\x1a\xb9\x35\x3b\x9c\xb5\x81\x3f\x57\xaf\xcc\x83\x24\x42\x0f\xfc\x89\xc6\x24\x46\x4f\x38\xc9\x09\x9a\x72\x51\x5a\x9e\xe3\x11\xbb\x9f\xeb\x75\x48\x27\x94\xc1\xc9\xd3\x6b\xe9\x28\xe4\xf7\x6e\xb9\x7e\x8f\x74\x7f\x28\x67\xf4\x1f\x39\x49\x16\x88\xc6\x84\x29\x3a\xa5\x44\x56\x5b\xfb\x3d\x87\xfe\x71\x82\x8e\x90\x5e\x67\x22\x14\xac\x37\x67\x8a\x7c\x56\x12\x1d\xa1\x84\x3e\x12\xf4\xd5\x05\x95\x0a\xf5\x6f\x86\x5f\xf5\xd0\x57\xe6\xbc\x20\xe0\x4d\x5f\xbd\xc2\x0a\xfb\xbf\xff\x16\x1c\x3d\x85\x67\xd5\x43\xf7\xa1\xaf\x4f\xf3\x9d\xb9\x1a\x8a\x16\xfe\xf6\x6f\x61\x3b\x76\xbf\x56\xf3\xdb\x82\xd9\x5a\x4e\xdb\x96\xbf\xc2\x32\x95\x59\xab\xd4\x3b\xb4\x2b\x67\xd5\xed\x56\x59\xab\x7c\x5f\xbc\x55\x4f\xe1\xa5\xf9\xeb\x2e\xcc\x15\x2b\xa0\x7a\x4c\x99\x39\x24\xfe\xcc\x08\xa9\xcf\x89\xa3\xde\x03\x61\x29\xbb\xf0\xda\x60\x66\x01\xbb\x75\x5c\x34\x58\x95\x03\x9c\x77\x42\x53\xba\x6e\x7f\x87\x2c\xd6\x22\x97\x65\x76\x2c\x4f\x27\x44\xe8\x65\x70\x6c\x0f\x66\x3b\xd1\x6c\x50\xe5\x82\x91\xb8\xc5\x34\xff\x91\x13\xb1\x58\x31\xcf\x29\x4e\x64\xd3\x44\x29\x53\x44\xcb\xb7\x95\xc7\x53\x2e\x52\xac\xec\x0b\x7f\xfe\x8f\x4d\x17\x42\xf1\x47\xb2\x6e\xff\x87\x66\x37\x23\x2c\x81\x0c\xd2\x3c\x51\x34\x4b\x08\xca\xf0\x8c\x48\xbb\x22\x79\xa2\x64\x0f\x5e\xd3\x32\x35\x11\x47\xfe\x06\x82\x1e\xdc\xcd\x9b\x4b\xf8\x05\x4d\xbd\x00\xc9\xc8\x67\x05\x2d\x8d\x18\xdc\xbd\xb0\x44\xe1\x8d\xf2\x02\x4b\xb9\x1d\xcd\x48\x2e\xd4\x78\xb2\x38\x7e\x24\x4b\xfd\x36\x52\x0e\x66\x08\x2b\x25\xe8\x24\x57\x44\xcf\x5b\xb7\xe1\xee\x4e\x60\x8f\xe6\x82\x6e\xc3\x1a\xde\x6e\xc2\x31\x15\x24\x82\xb9\x6d\x72\x60\xfc\x57\x7a\xde\x5a\x7f\x59\x98\xd9\x3f\x92\x05\xc8\x23\x35\x2b\xe0\xb7\x7c\xc4\x46\x0c\x1d\xa1\xf3\xc1\xdd\xd9\xe0\xea\x7c\x78\xf5\xe9\x14\x7d\xb7\x40\x31\x99\xe2\x3c\x51\x3d\x34\xa5\x24\x89\x25\xc2\x82\x40\x93\x24\xd6\x32\x87\x1e\x0c\x61\x31\x65\x33\xc4\x45\x4c\xc4\xcb\x2d\x63\xe5\x29\x61\x79\x5a\xb9\x57\xe0\xf7\x62\xf4\x95\x2f\xb4\x88\xe1\x1f\x95\x9e\xfc\x6d\x69\x81\x61\xc6\xba\xef\xa0\xb5\x57\x13\x6a\xa2\x39\x4d\x62\x41\xd8\x89\xc2\xf2\x71\x4c\x3e\x93\x28\x37\x77\xf2\x3f\xcb\x3f\x8c\xb5\x64\xca\x63\x52\xfe\xa5\xf4\x8f\x42\x14\xda\xf8\x53\xaf\xa5\x6e\xfc\x25\xe8\xb4\xed\xbe\x83\x5f\x68\x5c\xfb\x36\xfc\xb2\x66\x0e\xee\x9d\x15\x83\x75\xaf\x34\x8e\xca\xbd\x60\x25\xbe\xda\x77\x04\x51\x62\x31\xc6\x4a\x91\x34\x53\x1b\xea\xeb\x18\x25\x5a\xae\x5c\x25\x47\x5e\xf1\x98\x0c\x5c\x7f\xbf\x20\x23\xce\x92\x18\x4d\x16\x96\x6b\x4d\x89\x20\x2c\x22\xcd\x2d\xdc\x63\xf9\x58\xb4\xb0\x4e\x18\x2d\xf5\x27\x3f\x72\xa1\x3f\x7f\x0f\x02\x69\x69\xe0\xaf\x21\x93\x6e\x7b\xe2\xbe\x38\x0b\xc1\x96\xfc\xa3\xb3\x27\xec\xbe\x92\x6d\xad\x0f\x5c\x20\xb9\x90\x8a\xa4\x6b\xed\x10\xef\x67\x21\xec\x05\x71\xa8\x03\xae\xdc\x51\xbf\x81\x53\x5f\xbe\x71\xbb\xe3\xbd\xc1\x92\xed\xcb\x8a\x78\xe8\xf3\x74\x3e\x9c\xd5\x53\xbd\x73\xdb\x17\x38\x31\xde\xc5\x34\x4b\xb2\xe0\xbe\x07\xf9\x42\xe6\x86\xc6\xbd\x72\xab\x3d\x86\x01\xac\x51\x34\xcb\x76\x68\x7f\xfe\xf4\xa7\xa1\x85\xc6\x98\xe3\xd4\x9c\xca\xc0\x58\x85\x22\x2e\x8c\x2c\x18\xdb\xf3\x6e\x74\xcd\xfe\x7d\xff\x6e\x70\x7f\x8a\xfa\x28\xc6\x0a\xeb\x03\x2e\x48\x26\x88\x24\x4c\x81\x1e\xaf\xbf\x57\x0b\x94\xf2\x98\x24\x46\xe3\xfc\xa8\x25\x5f\x74\x8e\x15\x3e\xc3\x0a\x27\x7c\x76\x8c\xfa\xf0\x4f\xfd\x31\x95\x08\x27\x92\x23\xec\xc8\x8a\xc4\xae\x09\xcc\x62\xc7\x5a\x30\x8a\x78\x9a\xd1\xc4\xdb\xe0\xbd\x71\x85\xb2\x98\x3e\xd1\x38\xc7\x09\xe2\x13\xcd\x55\xb4\x86\x3c\x78\x22\x4c\xe5\x38\x49\x16\x08\x27\x09\xb2\xdd\xba\x17\x90\x9c\xf3\x3c\x89\x75\xbb\x6e\x94\x92\xa6\x34\xc1\x42\xab\xe0\x66\xb4\xd7\xb6\x2d\x74\x3f\x27\x7e\xac\x30\x2e\xbd\x9a\x29\x7e\x24\x12\x51\x85\x32\x2e\x25\x9d\x24\xc5\x99\x7f\x18\x22\x18\xf7\xd9\xc5\x10\xf4\xf9\x48\x21\x6e\x78\xa8\xeb\xdc\xda\x6f\x5c\x8f\x29\x66\x8c\x40\xc7\x5c\xcd\x89\xb0\xdd\xdb\x97\xdf\x5a\x35\x7f\xb8\xba\xbb\x19\x9c\x0d\x3f\x0e\x07\xe7\xcb\xba\xf9\x7d\xff\xee\x87\xe5\x5f\x7f\xba\xbe\xfd\xe1\xe3\xc5\xf5\x4f\xcb\x4f\x2e\xfa\x0f\x57\x67\xdf\x8f\x6f\x2e\xfa\x57\xcb\x0f\x2d\x59\xb5\x56\xf3\xc3\x91\x6d\x78\xb6\x3a\x9b\xe6\x4b\xd9\x34\x7b\x5f\xae\x51\x73\x4a\x13\xd0\x41\x5b\x1b\x34\xbd\x0d\xc1\x7e\x89\x32\x2c\xa5\x91\x8c\xcc\x08\x8e\x47\xec\x92\x0b\xcd\xc0\xa6\x5c\xf3\x08\x2d\x3d\x29\x91\x47\x8a\xb2\x99\xff\xe8\x14\x8d\xf2\x6f\xbf\xfd\x53\x74\x41\xd9\x23\xfc\x45\x0e\x71\x71\x3a\x8b\x6f\x67\xf1\xfd\x6d\x59\x7c\xb5\xe8\x73\x12\x1a\x7a\xf7\x1b\x32\xa4\x85\x0b\x96\xe5\x0a\x44\x09\x9e\x2b\xfd\xa7\xee\x12\xc8\x63\x45\xe0\x50\x3b\x83\xe2\x27\xa2\xfc\x8b\x5a\xb4\x79\x0f\x76\xc4\x9f\xb8\x78\x9c\x26\xfc\xd9\x0f\xfc\x13\x51\x7a\xec\xb7\xb6\x97\x2e\x94\xa8\x0b\x25\x7a\xdb\x50\xa2\x83\x32\xe6\xbd\x3c\xf3\x2b\x5b\xfe\x0c\x07\x6c\xf0\x64\x35\x3a\xaa\x1a\xfc\x50\x81\x9b\xe9\x55\xb8\x66\xd9\x99\xb3\x86\x73\x96\x5e\x7e\x2f\xdc\xb3\x34\xe8\xd7\xe7\x9c\xbf\x09\x7f\x4b\xe7\x4e\xd9\x72\xa1\xde\x25\x83\x6d\x79\x77\xbc\x9a\x33\xe4\xe5\x19\xfe\x52\x6c\xc3\x26\xc1\x0c\x1b\x44\x2f\xb4\x0e\x57\x58\x13\x9f\x50\x1b\x90\x50\x17\x81\xb0\x1c\x72\x50\x1b\x63\xb0\x5b\x50\xc1\xb6\x77\x53\xfb\x30\x81\x4f\x44\x95\x5e\x7e\x2f\x77\x53\x69\xd0\xaf\x7f\x37\xfd\x46\xa3\x03\xba\x70\x80\x17\x5c\xba\x2f\xfd\x46\x3b\x5c\x87\xff\x6f\xc0\xc3\xdf\xb9\xf4\x37\x5a\xa3\x2f\xcb\x87\xff\xa5\x3a\xed\xdf\xa7\x97\xbe\x73\xcb\x77\x6e\xf9\xb7\xf0\x9f\xbc\x3f\xb7\xfc\xcb\xaa\xa7\xc5\xf1\x1a\x3b\x5a\xb0\xfa\x5a\x70\x28\xff\xd5\xc2\x49\x03\x7f\x39\x95\x6f\xd3\xa0\xf1\x46\x1d\xee\xbc\x18\xdf\x00\x8e\xd0\x2f\x96\x90\xd6\xa8\x73\x4b\xdf\xbd\x07\x75\x6e\x79\xd0\x2f\xaf\xc3\xbd\x19\xf3\x7d\xa1\xcb\xf3\x9d\xb0\x81\xcd\x6f\xcb\x2f\x58\x26\xef\x64\xf1\x97\xcf\xc6\x3f\x98\x09\xbd\x1f\xd9\xfb\x0d\x2e\xde\x96\xb7\xee\xde\x73\xb2\x6a\xae\xd9\xe0\x76\x5a\x97\x61\x55\xfd\x9a\x12\xf9\xc7\x77\x79\xdf\xbe\x46\x92\x55\x77\xe1\x76\x17\xae\x6d\xaa\xbb\x70\xbf\xe0\x0b\xf7\xe0\xe0\x6f\x0e\x26\x02\xb4\x0b\x22\xef\x80\x31\xba\x18\xf2\x3d\x2e\x4e\x17\x43\xde\xc5\x90\xff\xc6\x62\xc8\x77\xd1\x9e\xb6\xc5\xa2\x7c\x0b\x3d\xaa\x53\xa3\x3a\x35\x2a\xfc\xbd\x53\xa3\x3a\x35\xaa\x53\xa3\xbe\x70\x14\xd1\x4e\x87\x6a\xbf\x10\x9d\x0e\xd5\x7a\xa9\x3a\x1d\x6a\xc5\xe2\x74\x3a\x54\xa7\x43\xfd\xb6\x74\x28\xf2\x44\x98\x92\x90\x8c\x16\x6a\x14\x1f\x32\x2e\x9b\x35\xa1\x90\x3b\xd4\x68\x41\xd0\x66\x39\x29\x0c\x02\x97\x7e\x41\x73\x2c\x11\x8f\xa2\x5c\x54\xce\x40\x55\x0f\x3a\x13\x04\x2b\x02\x2d\xe8\x0f\xdf\x83\xfe\xb3\x3c\xdd\xd7\x8a\xc1\x9f\xf0\x78\x89\xda\xcd\x41\xa8\x7b\xb2\x5a\x1e\xd9\xdb\xd4\xff\x91\x93\x76\xea\xdf\x0b\x12\xb5\xc2\xf2\x71\xcf\x44\x5d\xca\xb5\xd8\x8a\xa8\xa1\x85\xf7\x42\xd4\xcb\xd3\xfd\xcd\x10\x75\xdd\xd4\x0f\x81\xa8\x9f\x6d\x1e\xff\x9e\x09\x7b\x09\x1e\x60\x2b\xe2\xf6\xad\xbc\x17\x02\xaf\x9f\xf6\x6f\x86\xc8\x9b\xa6\xff\xb6\x84\xee\x53\x24\x5b\x93\xf8\xbd\xa0\xb3\x99\x56\x33\x40\xc3\xd3\xa4\xb8\xbe\x46\x50\x91\x14\xb8\x96\xac\xfd\xab\xef\x81\xa4\xfd\x60\xcd\xd8\x7f\x33\xb4\xbc\x34\xef\x03\x21\xe2\x13\x41\x22\xfe\x04\xf5\xc2\xda\x11\xf3\x2d\x01\x0a\x06\x7e\x9d\x09\xf2\x44\x79\x2e\x93\xc5\x91\xc8\x19\x72\xcc\x1f\xf9\xe6\x8d\xb5\xfa\x99\x26\x09\xe2\x4c\xeb\x5f\x0a\x0b\xe5\x1e\x6b\xfd\x5b\xf0\x14\x4e\x45\x82\xa5\x42\x8f\x8c\x3f\x33\x34\xc5\x34\xc9\x05\x41\x19\xa7\x4c\x1d\x8f\xd8\x90\xa1\x5b\x33\x46\xc8\x1b\xe8\xa1\x5c\xea\xb3\x14\x61\xc6\xb8\x42\xd1\x1c\xb3\x19\x41\x98\x2d\x6c\x02\x6e\x41\x19\x88\x0b\x94\x67\x31\xd6\x8a\xef\x9c\x54\xa3\xf4\xfc\x18\xc1\x7c\x47\x25\xa2\x12\x91\xcf\x4a\x90\x94\x24\x0b\xdd\x87\xa6\x7d\xc5\x91\x5d\x1f\x33\x54\x9b\xce\x47\x84\xe0\x42\x42\xc6\xc1\x64\xf1\x2b\x66\x8a\x32\x82\x40\x51\x92\xc6\x34\x77\x84\x2e\xb8\x04\xb3\xcd\x0f\x7f\x91\x28\x4a\x72\xa9\x88\xe8\xa1\x49\x3e\x93\x5a\x53\xcc\x12\xac\xa6\x5c\xa4\x7a\x84\x94\x49\x85\x27\x34\xa1\x6a\xd1\x43\x29\x8e\xe6\xa6\x2d\x58\x03\xd9\x1b\xb1\x98\x3f\x33\xa9\x04\xc1\xbe\x77\xf7\x10\x7d\x1d\x3e\x33\x04\x20\xbf\xe9\x41\xda\x21\x4d\xb5\xba\x1b\x0c\xbf\xd8\x71\xb3\x27\xba\x11\x12\xa3\x09\x89\x70\x2e\xad\x87\x41\x89\x05\x22\x9f\xe7\x38\x97\xb0\x77\x7a\x7a\x36\x67\x23\xe2\x69\x96\x10\x45\x10\x9d\x22\x25\x28\x89\x11\x9e\x61\xaa\x97\xee\x8e\xac\x00\x41\xf7\x44\x6f\x37\xd0\x52\xfd\x2f\xa0\x7e\xa7\x5c\x10\x14\x13\x85\x69\xb2\xd2\xeb\x64\xbf\xed\xb8\xdc\x7b\xe2\x72\xe5\x0d\x3f\x08\x36\x67\x40\xfc\xf7\x70\x69\x33\x6b\xba\x8f\x70\xb2\xe3\xfd\x7d\x6b\x07\xd5\xd1\xf6\xfb\xa2\x6d\xb3\x6b\x87\x43\xdc\xaf\x16\x83\xdd\xbe\xa2\x45\x51\xcd\xe2\x5d\xd1\xf4\x6b\x84\x05\x74\x0e\xe7\xce\xe1\xdc\xb8\x32\xef\xd3\xe1\x7c\x30\x1e\xa3\xce\xe7\xfc\x42\x3e\x67\x2a\x3b\xa7\x73\xe7\x74\x6e\xbb\x40\x9d\xd3\xb9\x73\x3a\xbf\x5f\xa7\xf3\x4b\xe2\x3e\xef\x15\xdd\xf9\x5d\x89\xd6\x9d\x58\xdd\x89\xd5\x1d\x84\xb3\x9f\xda\xbe\x58\x98\xfb\xfa\x43\x4c\x12\xa2\x48\xb3\x3d\x8b\x88\x54\x6b\x0b\xe6\x7a\xa6\x4c\xcb\x71\x33\x41\xa4\xdc\x95\x21\xf9\x86\xdf\x27\x5b\xf2\xc3\xef\xa0\xe6\x3b\x3e\xd5\xf1\xa9\x6d\xa6\x76\x38\xa6\xd9\xe0\x30\xbf\x96\x6d\xd6\xf3\xdf\x2c\x6f\x96\xfe\x1e\x8c\x1b\xb2\xf0\x8b\x1a\x0a\xd7\x52\xbb\xe2\xfe\x70\x5b\x3a\xdf\x91\x1f\x9b\xbe\xde\x27\x33\x36\x63\xef\x38\x71\xc7\x89\x3b\x4e\xfc\xbe\x39\xb1\x3b\xc9\x6f\xea\x22\x33\x7e\xba\x71\x96\x60\x36\xa6\xb1\x3c\xf9\x67\xa1\xcb\xbf\x94\x87\x4c\x1f\xa8\xd8\xa4\x98\xfa\x94\x4e\xf1\x8b\xfe\x24\x29\x0c\xe6\x1e\x33\x73\x8d\x13\xcd\xd8\xd8\x6f\x12\xcc\x86\xf1\xbb\xf0\xa3\xd5\xce\xfe\x35\x7c\x6a\xbb\xf0\x71\xac\xc0\xd3\x81\x29\x33\x26\xbc\x22\xaf\xb6\x64\xa0\x3c\x8c\x13\xbe\x0b\x57\x0f\x26\x16\x30\x76\xc7\xaf\x83\x45\x39\xbc\x69\x77\x7e\x9d\x2e\x97\xb0\xf3\x5c\xb4\x9c\x70\xe7\xb9\x38\x5c\xcf\xc5\x5b\xb9\x23\x5f\xf9\x78\xbe\x96\x58\xd7\x3e\x08\xdf\x44\xab\x41\x50\x6b\x9e\x25\x1c\xc7\xab\x5c\x31\x85\xe0\x15\x82\xa3\xac\x8d\xc4\x2f\x3e\x7b\x0f\xc2\x5a\x31\xda\xdf\x58\x24\xdf\xf2\xc4\x0f\x45\x4b\x79\xc5\x50\xbe\x7a\x12\xdf\x40\x25\x79\x1f\xf8\xa9\xc5\x78\xbb\xd0\xbe\xce\xa2\xf4\xf6\x16\xa5\x2e\xb4\xaf\x53\x01\x0f\x4c\x05\xec\x42\xfb\xba\xd0\xbe\x4e\x41\x5e\x3d\xed\x4e\x41\xfe\x22\x42\xfb\x5a\x89\xda\x2f\x88\xbd\xb9\xbb\xd0\xdd\xc9\xdc\xee\xbd\x4e\xe6\xee\x64\xee\x2f\x54\xe6\x3e\x8c\x15\xee\x04\xee\x4e\xe0\xee\x04\xee\x4e\xe0\xee\x04\xee\xbd\x2f\x63\x27\x70\xbf\x66\x81\xce\x7a\xa9\x7b\x4d\x92\xcd\x7b\xf5\xe5\x74\xe2\x76\x27\x6e\x1f\xb6\xb8\x7d\x30\x13\x7a\x3f\x65\x1e\xdb\xcd\xa7\x2b\x52\xde\x15\x29\xef\x8a\x94\xbf\x78\x91\x72\xf7\x75\x8b\x8c\x0f\x7b\xb8\x14\x56\xb9\x34\x80\x8f\x82\xcc\xa8\x54\xc0\xfe\xdb\xc8\x2b\xeb\x13\x3d\xde\xab\x9c\xd2\xa5\x7a\xf8\xa7\x9d\xd4\xd2\x49\x2d\xbf\x51\xa9\xe5\x80\x62\xc1\x0e\x22\x63\x25\xc5\x2a\x9a\xe3\x49\x42\xc6\xde\xe8\x23\xdb\xea\xc1\x17\x54\x2a\x89\xa2\x5c\x2a\x9e\x36\x5f\x2e\x97\xae\x87\xbe\xef\xe0\x8c\xb3\x29\x9d\xe5\xe6\x6e\x31\xe0\x9c\xc1\x89\x2e\x24\xc1\x45\x46\xd6\x79\xaa\x6a\x5a\x7f\x17\xd7\x52\xfd\xd0\x5f\xeb\x76\xda\x44\x70\x2f\x8c\x7c\x56\xea\xd6\xb2\xd6\xf8\x76\x70\x77\xfd\x70\x7b\x36\x38\x45\xfd\x2c\x4b\xa8\xb1\xbb\x1b\x52\xa0\xbf\xea\x49\x21\x85\xe5\x63\xb1\x97\xc2\x90\xb9\xc1\xb0\x05\x43\xbf\x96\x8d\xd1\x11\x3a\xbb\x78\xb8\xbb\x1f\xdc\x36\x34\x68\x09\x05\xf2\x56\x49\x9a\x25\x58\x91\x18\x3d\xe6\x13\x22\x18\xd1\xd2\x8e\x45\xba\x2d\xcc\xff\xa6\xd1\xc1\x7f\x0f\xce\x1e\xee\x87\xd7\x57\xe3\xbf\x3e\x0c\x1e\x06\xa7\xc8\x51\x9c\x6e\x56\x8f\x4b\x8f\x22\x5e\x30\x9c\x6a\x0d\x44\xff\x50\x64\xca\xfe\x23\x27\x39\x41\x58\x4a\x3a\x63\x29\x01\x44\xe0\x52\x8b\x6e\xc0\x17\xfd\xef\x06\x17\xe5\x96\xe7\x24\x84\xdf\x45\x09\x9e\x90\xc4\xfa\x23\xc0\xc4\xae\x09\x3d\x80\x2a\x36\x8e\x8a\xdc\xac\xea\x5f\x1f\xfa\x17\xc3\xfb\x9f\xc7\xd7\x1f\xc7\x77\x83\xdb\x1f\x87\x67\x83\xb1\x95\x2a\xcf\xfa\xba\xdf\x52\x4f\x56\xf8\x44\xff\xc8\x71\xa2\xb5\x13\x3e\x75\x78\xbc\xe8\x79\x4e\x18\xca\x19\x50\x9c\x51\x79\xb4\x1e\xe4\x3b\xd5\xa7\xcc\xcc\xe8\xe6\xe2\xe1\xd3\xf0\x6a\x7c\xfd\xe3\xe0\xf6\x76\x78\x3e\x38\x45\x77\x24\x01\xa5\xc0\x2d\x3a\xec\x62\x96\xe4\x33\xca\x10\x4d\xb3\x84\xe8\xd5\xc0\x36\x9b\x78\x8e\x9f\x28\x17\xf6\xe8\xce\xe8\x13\x61\x66\x1d\xe1\xcc\x42\xfb\x4e\xf8\x1e\x07\x4b\x77\x7d\xf5\x71\xf8\xe9\x14\xf5\xe3\xd8\xcf\x41\x42\x1b\x25\xca\x71\xb0\xce\x47\xe5\x61\x6b\xe6\x00\xdd\x1b\x22\xe2\x4f\x44\x08\x1a\x93\x0a\x1d\xf5\xef\xee\x86\x9f\xae\x2e\x07\x57\xf7\xb0\x62\x4a\xf0\x44\xa2\x39\x7f\x06\x53\x36\xcc\x10\x2c\xdc\x4f\x98\x26\xd0\x99\xdb\x2c\xce\xd0\xf3\x9c\x82\xfb\x03\x80\x99\x7d\xcf\x46\x3f\x13\x39\x7b\x73\xeb\x6c\xe9\xe0\x2d\xab\x2d\xd5\x93\xb4\xfc\x46\xe5\x58\xac\x7a\xa1\x44\xe5\xcb\x2f\xae\xa3\xd6\xe5\x2f\x2a\xe4\xd6\xac\xac\x2d\xd1\x4b\xf3\x4c\x8b\xbd\x6e\xad\xab\x95\xd7\xf0\xf5\xae\x59\xa2\x04\x8d\xe4\xcb\x42\x3d\x89\x9c\x29\x9a\x12\x64\x3b\xb3\x87\x73\x8f\xf0\x4f\x97\xa6\xe1\xf7\x70\xc1\x2e\x95\x72\xf8\x44\x94\x1d\x7e\xa7\x02\x76\x2a\xe0\x61\xa8\x80\xef\x2d\xdb\x3f\x26\xd9\x72\x87\x95\x89\xc1\x3b\xc6\xeb\xb5\x14\xa4\x61\xec\x89\xd6\xa2\x9a\x90\x27\x92\x80\x94\xa7\x04\xd6\x4a\xa3\x95\x5d\x26\x82\xe0\x47\x2d\xf0\xc5\xfc\x39\x94\x5c\x6a\x90\xfb\xd1\x7e\x6e\xe1\x36\x41\x1c\x7f\xfa\xe3\xeb\x5d\x16\x7a\xb9\xe3\xd7\x28\xe1\x7d\x0b\x41\x32\x2b\x31\x02\x83\x04\xfb\x5f\xac\x25\x78\xcd\x6d\x11\x7c\xf1\x1e\x2e\x8a\x70\xb8\x07\xa4\x75\xdd\x86\x4a\xb0\x63\xa1\x29\x51\x38\xc6\x0a\xeb\x43\x33\x23\xea\x18\x5d\x33\x78\x76\x8f\xe5\x63\x0f\xb9\x2b\x4f\xb3\x95\xc2\xca\xf0\x0a\xa9\xf5\xef\xc4\x80\xbf\x39\x1f\xef\xae\xef\xee\xfa\xae\x5f\x99\x2e\xcc\xb3\x61\x85\xf7\x75\x31\x6e\xe4\xf3\xda\xdf\xfd\x65\x5a\x7c\xbf\x57\xd8\xeb\x3a\xb9\xf6\x7a\xa1\x99\xca\x59\xdd\x6d\x65\xfe\xaf\xbb\xad\xba\xdb\xaa\xbb\xad\x0e\x60\x85\xdf\xdc\x61\x58\xc3\xdd\xdf\xd4\x63\xb8\x4e\x3b\xdd\x1a\xf2\xae\xd0\x46\x37\x01\xbd\xfb\xa5\x2d\xb6\x5d\xf1\x0d\x7d\x1f\x3e\xc2\x60\x92\xaf\x91\xd6\xb6\xd7\xcb\xdc\xe4\x8b\x74\xfa\xe9\x0b\xde\xf8\x1d\x02\xe1\x5e\x11\x08\x0f\x63\xae\x2f\x92\x02\xf7\x36\x16\xd3\xb7\x4f\x7b\xeb\xa0\x06\xbb\xc4\xae\x2e\xb1\x0b\x7e\xef\xa0\x06\xf7\x47\xad\x2f\x2b\x5d\xf3\x98\x8c\x2b\x51\x02\xfe\x9f\xe3\xaa\xe7\xa7\xf4\x24\x74\x03\x95\x1e\x14\x99\x6e\xd0\x3a\x8d\xf7\x59\x44\xea\x8a\xc7\xa4\x75\x24\x41\xe9\xe5\x03\x97\xc1\xdd\x3c\x8d\x2c\x5e\x1a\xf8\x0b\x4b\xe2\x0d\x5b\xfe\x25\x1a\x76\x6a\x08\xb8\xb3\xf2\xac\x5d\xa8\x2f\x35\xbe\xa0\xe0\x50\xef\xc8\x53\xd1\x8e\x8d\xbb\x98\xc6\x71\x03\x33\xaf\x7f\xee\x59\x7a\xfd\xe3\x97\xc1\x0c\x6a\xcf\xd1\xc1\xac\x12\xbe\xfd\x3e\xec\x2a\xe1\x88\x5f\xc3\xb2\xb2\x72\xef\xbf\x38\xae\xbe\x8a\x92\x3b\xde\xde\x72\xb9\xbe\x54\x0e\xdf\x41\xfc\xac\xb2\x75\x74\x18\x3a\x9d\xa9\xe5\x70\x26\xdc\x99\x5a\xde\xb5\xa9\xc5\xb8\x68\xc7\x19\x16\x84\xa9\x1a\x91\xba\x7a\x9d\xc0\xeb\x21\xe6\x82\x93\x3a\xa0\x01\xa4\x25\x5a\x64\x2f\x64\x7f\x55\x7d\x59\xb6\x17\x2b\x18\x04\x99\x90\x27\xff\x2c\xfe\xf6\xc2\x7a\xa9\x02\xc4\x8a\xe8\x24\x83\xf5\x2f\xf5\x1d\x9d\xdb\x40\xa5\xdd\x73\x25\xb1\x2a\x89\x82\x10\x44\xbd\x36\x9e\xe9\xc6\xbc\xfd\xbe\x52\x24\x97\x06\xfd\xba\xb1\x4d\xcb\x1b\xdf\xee\x00\xb9\x9d\xa1\x26\xdd\x2f\xc8\x29\xd3\xd2\x28\x9f\x16\x17\x83\x44\xcf\x34\x49\x00\x51\x04\x32\x1e\x9b\x6e\x80\xdf\x5c\xc4\x43\xe3\xce\xbf\x69\xdc\x43\x1d\x77\xa8\x63\x09\x6d\xec\xa9\xfb\xca\x99\x76\xc4\x06\xe9\xac\xa0\x0d\xad\x31\xc0\x7e\x19\x9c\xe0\x13\x51\xaf\xc5\x06\xb6\x3d\xfb\x2b\xcf\xbd\x20\x53\x22\x08\x8b\xc8\x01\x7a\xdb\x37\x09\x03\xf9\xc9\x4c\xd2\xc6\x80\x78\x28\x81\x70\xaa\x8a\x5b\x3d\xad\x24\xea\x76\x99\xe4\x5d\x26\x79\x97\x49\x5e\x3d\xea\x5d\x26\x79\x97\x49\x5e\x9b\x03\x11\x93\x84\x28\xd2\x28\x55\x9c\xc3\xe3\xb7\x92\x2a\x4c\xef\x5f\x86\x60\x61\xe6\xd2\xc9\x16\xbf\x19\xcd\xc2\x6d\xf8\x41\x68\x16\xe6\xac\xad\x33\x3f\x94\x7e\xac\x09\xb1\x7e\x75\x93\xc4\x36\x4c\xa3\x64\x97\x38\x87\xd7\xdf\x25\xeb\xa8\x0e\xbd\xb3\x51\xa0\x60\xeb\x5e\x8e\x93\x2c\x1d\x81\x76\x13\xb7\x1e\xc3\xf7\x3b\xef\x43\xe1\xa0\x4d\x74\x7f\xa8\x7c\x74\xeb\xa4\x94\x43\xb1\xd8\x7c\x41\x3c\xb2\xb3\xde\xbc\x71\xae\xc4\x12\x33\x7c\xb7\xd3\xed\x8c\x55\x9d\xb1\xaa\x33\x56\x75\xc6\xaa\xce\x58\x85\x3a\x63\xd5\xc6\xc6\xaa\x2f\x48\xa6\xea\x0c\x57\x9d\x58\xb5\xbf\xe9\x1e\xaa\x96\x79\x48\xd6\xba\xd6\x28\xe9\x45\x0e\xd5\xda\xc8\x7b\x3b\xed\x5f\xd6\x84\xdc\xdf\xb8\x11\xbc\x1f\x7e\x25\x5f\x9a\x25\xed\x12\x58\xec\x76\xf4\x8b\x8d\x2b\xee\x4a\x87\xd6\xae\x55\x17\xf6\xbc\x62\x71\xba\xb0\xe7\x2e\xec\xf9\xe0\xc2\x9e\xf7\xae\xac\x64\x5c\xae\x02\x24\x32\xa5\xb3\x56\xe6\x3f\xbb\x3b\x1b\x12\x8d\x80\x14\x0c\xca\x71\x4c\xb2\x84\x2f\xc0\x92\xb2\xe2\x3a\x77\x5d\xdc\x2c\x49\xd4\x87\x7e\xa3\xbb\x91\xbf\x96\xce\x71\x28\x32\x69\x31\xef\x83\x90\x42\x4f\xfe\x59\x49\xe7\x6f\x85\x97\xc9\x10\xf9\x4c\x25\xdc\x4a\xeb\x09\x7b\xc4\xea\x9f\x04\xa5\x0b\xed\x3d\x38\xc9\x55\x90\xbb\x27\xb5\x60\x95\x11\xa1\x16\xc1\x9b\x24\xcd\xd4\xe2\xbf\x46\x8c\x2a\xef\x61\xa3\x33\xc6\x85\xe1\x6a\xfa\xe3\x39\x66\x71\x42\x84\xbe\x54\x5d\x3b\x11\x66\x8c\x2b\x10\x37\x60\x06\x31\x7a\xa2\xd8\x08\x27\xfd\x9b\x61\x6b\x3f\xf3\x3b\x3a\x5d\xaf\x5d\xac\x6e\xcd\x5d\xf7\x29\xe1\x13\xa8\x60\x99\x97\x75\x7a\xdd\x40\xe7\x19\x2d\xed\xdc\x5b\x31\x04\x85\xe5\x63\x15\x38\xa4\x9c\x85\x3e\x5e\x09\x25\xb2\xe6\xdd\x12\xc6\xfc\xea\x57\x2b\x70\x23\xe5\x67\x16\x80\x04\x1e\xc3\x90\xab\xe3\x70\x3f\x86\x1d\xba\xdf\x8a\x96\xdd\x2f\xae\x74\x37\xfc\x28\x88\x12\x8b\x31\x56\x4a\x33\x99\x7d\x62\x9c\xdc\x63\xf9\xd8\x1a\xe3\xa4\xf4\xf2\x81\xb3\x9c\x12\xc6\x49\x79\xe0\x2f\xce\x72\x5a\x52\xe7\x1a\xce\xf4\xfe\xf2\xe3\xdb\x9e\xb5\x0d\x26\xfe\x5b\xc9\x95\x6f\xc7\x7b\xd6\x99\x69\xdf\x63\xde\xfc\x2a\x66\x7a\x30\x23\xac\xf0\xf3\x2f\xf1\xe4\x96\x6f\xa7\xee\x88\xae\x5a\xa3\x2f\xae\x10\x6e\x45\xe8\x58\x33\xb7\x77\x52\x10\xb7\x2a\x37\xed\x7b\x54\x2f\x63\xe6\x0e\x76\x63\x93\x18\xa0\x61\x19\xad\xdc\x9f\x21\x17\x15\x54\x94\x9e\x9d\x43\xa2\x35\x95\x61\x42\x7c\xc4\x85\x91\xbc\x62\x7b\x66\x8d\xd9\xce\x80\xf9\x9e\xa2\x3e\x8a\x6d\x6d\x7e\x41\x32\x41\x24\x61\xca\xa8\xda\xa6\xde\x95\x2b\xef\x4f\x99\xb5\x10\x9d\x63\x85\xcf\xb0\xc2\x09\x9f\x1d\xa3\xbe\x2f\xec\x4f\x25\xc2\x89\xe4\x08\x3b\xc2\x21\xb1\x6b\x02\xb3\xd8\xb1\x07\x8c\x22\x9e\x66\x34\xf1\x48\xed\xde\x8a\x4f\x59\x4c\x9f\x68\x9c\xe3\xc4\x23\x63\x8f\xd8\xe0\x89\x30\x95\x83\x0a\x87\x93\x04\xd9\x6e\xdd\x0b\x81\x7e\xee\x46\x29\x69\x4a\x13\x2c\x90\xe2\x76\xb4\xd7\xb6\x2d\x74\x3f\x27\x7e\xac\x0e\x05\x1c\xa5\xf8\x91\x48\x44\x15\xca\xb8\x94\x74\x92\x14\xc7\xf8\x61\x88\x60\xdc\x67\x17\x43\x30\x8d\x46\x0a\x71\xc3\x07\x5d\xe7\xd6\x4f\xe0\x7a\x4c\x31\x63\x04\x3a\xe6\x6a\x4e\x84\xed\xde\xbe\xfc\xd6\x56\xce\xb7\xc6\x88\x6e\xb6\x98\x86\x23\x7b\x3b\xa5\xb3\xb5\xc6\xd9\x56\xdd\x6c\xa7\x6b\x36\x2b\x9a\x2f\xe0\xa5\x6d\xaf\x0d\x5e\x50\x59\x56\x07\xdf\x85\xcb\xb6\x34\xe2\xd7\xc0\x47\xfb\x8d\x2a\x82\x9d\x16\xf8\x22\xeb\xf6\xa5\xaa\x80\x07\xae\xff\x75\xc8\x6e\x1d\x8a\x7d\x17\x80\xb1\xc7\xc5\xe9\x02\x30\xba\x00\x8c\x2f\x36\x00\xa3\x59\x9b\xa0\xf1\xce\xe9\x7a\x1b\x56\x90\xf2\x46\x01\xf1\x0b\x88\x52\x58\x3e\xb6\xad\x29\xa5\x45\xe5\x61\xfc\x2e\xa4\xfa\xda\x09\xbf\x86\x74\xdf\xd5\x29\xda\x6b\x9d\xa2\x83\x9b\x76\x27\xf8\x75\x82\x5f\x27\xdb\xb4\x9c\x70\x27\xdb\x1c\xae\x6c\xf3\x56\x0a\xcb\x97\x04\xa1\xab\x85\xa7\x52\x66\xcc\xca\x00\x5b\x03\x47\x03\xee\x81\x3c\x4b\x38\x8e\xd7\x05\xe1\xfc\x82\x0a\xb9\x66\x85\x68\x66\xda\xd5\x1f\x1c\xb8\x64\xb6\x14\x7f\x63\x46\xfe\x5b\x88\xa9\x6d\x9c\xfa\x9b\x86\xd5\x02\xfd\x42\x30\x59\x29\x28\xed\xa5\xb4\x90\x2a\x4d\xb7\x52\x38\xe4\x1f\x0f\x9c\xaa\xfd\x96\xbe\x86\x7a\xf1\x05\x3b\x08\x3a\x27\xc0\x6f\xb3\xf0\xf9\xc1\x48\xad\x9d\x6a\xd7\x65\x55\x76\x46\xfd\x4e\xf1\xed\x14\xdf\xbd\x2f\xe3\x21\x29\xbe\x6f\x28\x51\x9b\x34\x91\x17\x29\x63\xb8\x9d\x6c\xdd\x89\xd6\x9d\x68\xdd\x89\xd6\x5f\xac\x68\x7d\x18\x2b\xdc\xc9\xd5\x9d\x5c\xdd\xc9\xd5\x9d\x5c\xdd\xc9\xd5\x7b\x5f\xc6\x4e\xae\xae\xc8\xd5\xf0\x97\x4b\x93\xde\x54\xc8\x6e\x2d\x5c\xb7\xc8\x89\x7e\x2f\x92\x75\x27\x55\x77\x52\xf5\x61\x4b\xd5\x07\x33\xa1\x2f\x2f\x11\xb2\x4b\x25\xec\x52\x09\xbb\x54\xc2\xb7\x48\x25\x74\xbc\x64\x95\x84\xb2\x2c\x58\xfc\xb8\xc4\x81\x0e\x56\xb6\x28\x46\xbb\x6d\x78\xc7\xbe\x96\xda\x01\xcd\x6f\x53\x69\xaa\xf4\x9b\x6b\xe8\x80\xea\x4f\xf5\x9c\xb4\xa0\x19\x85\x1b\xdf\x7a\x84\xb0\x9f\xec\x9b\xef\x0b\x0c\x7c\x79\xd4\x5d\xfd\x29\x14\xec\x5a\x57\x7f\xea\x05\xe7\xed\x0e\xd7\x9a\x99\x3b\x1a\x35\x36\xde\x77\x3a\xed\x37\x07\x97\x6b\x3e\xe9\x6f\x1a\x2e\x57\x7b\x93\x2c\x25\xef\x9c\xfc\xb3\xf6\xa2\x78\x83\xb2\x5b\x1b\xdf\x0e\x9f\x88\xfa\x52\xae\x86\xae\xec\x56\x57\x1f\x62\x4f\xd3\xdd\x8a\xf5\xbf\xdb\xd9\x76\x45\xc6\xba\x22\x63\x5d\x91\xb1\xae\xc8\x58\x57\x64\x0c\xfd\xc6\x8b\x8c\x6d\x2c\x3e\x9a\x71\x7c\x29\x12\x64\x57\x64\xac\x13\x22\xf7\x37\xdd\xdf\x96\x10\x79\x80\x16\x84\x83\xa8\xa6\xe6\x2d\x08\x6f\x8e\xfb\xe1\x46\xd2\x16\xfb\xc3\x2d\x68\x87\xff\x61\xff\xaf\xc3\xff\xe8\xf0\x3f\x1a\x66\xdd\x05\xb3\x76\xf8\x1f\xa8\x0b\xd7\xec\xc2\x35\x0f\x39\x5c\xb3\xc5\x36\x76\xf8\x1f\x2d\xc5\xb9\x17\xc2\x00\x71\x32\xd7\x46\x38\x20\x3f\x2d\x2b\x1a\x07\x2b\xa5\xb9\xb1\xfe\x76\x70\x40\x6a\xa7\x7d\x10\x2a\xc9\x2b\xe2\x80\xd4\xd1\x75\x6b\x05\xe4\x7d\xe0\x81\xb8\xd1\x76\x89\x8b\x5d\x88\xf5\xe1\x87\x58\x1f\x5c\xe2\xe2\xc1\x48\xb2\x9d\xba\xd7\xe5\x2e\x76\xb9\x8b\x9d\x32\xdc\x29\xc3\x7b\x5f\xc6\x43\x52\x86\xdf\x58\xc2\x7e\x41\x5c\x90\xdd\x64\xed\x4e\xd4\x36\xef\x75\xa2\x76\x27\x6a\x7f\xa1\xa2\xf6\x61\xac\x70\x27\x67\x77\x72\x76\x27\x67\x77\x72\x76\x27\x67\xef\x7d\x19\x3b\x39\xfb\xd5\x70\x42\xea\x84\xed\x96\xf9\x36\xef\x49\xd2\xee\xa4\xec\x4e\xca\x3e\x6c\x29\xfb\x60\x26\xd4\x61\x86\x74\x98\x21\x1d\x66\x48\x87\x19\xb2\x95\x7c\xf3\x6f\xf6\x58\x7e\x08\x6e\x62\x7f\x65\x7f\xf8\x2e\xe1\x93\xfb\x45\x46\xf4\x7f\xcf\x69\x4a\x98\x04\x69\x94\xaa\x45\x28\xcf\x34\xac\xfc\xf2\x9a\x7f\xb8\x1b\x5e\x7d\xba\x08\xb3\x69\x3e\x5c\x3e\x5c\xdc\x0f\x6f\xfa\xb7\x7e\x5d\xfc\xac\xc2\xb5\xb0\xdf\x95\x44\x32\x4b\xf2\xb7\x44\xeb\x9e\x70\x6a\xee\x14\x56\xb9\xdc\x6e\x64\xb7\x83\xbb\xc1\xed\x8f\x90\x0d\x34\x3e\x1f\xde\xf5\xbf\xbb\x28\x11\x44\xe9\x79\xff\xec\xaf\x0f\xc3\xdb\xe6\xe7\x83\xff\x1e\xde\xdd\xdf\x35\x3d\xbd\x1d\x5c\x0c\xfa\x77\xcd\x5f\x7f\xec\x0f\x2f\x1e\x6e\x07\x2b\xd7\x63\xe5\x68\x57\x2b\x21\x12\x16\x09\xe2\xfc\x51\x64\xb9\x86\x28\xd6\x10\x79\xf1\xd1\xb1\xc3\xba\xbe\x4e\xd1\x83\xd5\xe9\xa9\x6d\xdc\x30\xd8\xa0\x21\xa3\x8c\xc4\x54\xe2\x49\x42\xe2\xa5\x96\xdc\x1a\x36\xb5\x84\x4b\x83\x7a\xd6\xda\xb3\x17\x39\x35\xcf\x8b\x0c\x2f\x40\x90\xa3\xa8\x08\x8b\x6b\xfa\x30\xfb\xd0\xd8\x03\xd3\xbc\x8b\x3e\x91\x52\x4f\x51\x2e\x04\x61\x2a\x59\x20\xf2\x99\x4a\x25\x97\x1a\x75\xdb\xd7\xd4\xac\xbd\x53\x7d\x83\x73\x2c\xd1\x84\x10\x56\x1e\xbf\x20\x09\xc1\xb2\x66\xcc\x76\xf7\xdb\x2d\x8b\xdf\x2b\x6b\x8d\x31\x97\xd1\x14\xd3\x24\x17\xa4\x72\x5a\x78\x9a\x61\x41\x25\x67\x83\xcf\xfa\x2e\xd3\x07\xf9\x1a\x3e\xe7\x62\xbb\x13\x33\xf8\x6b\x48\xc1\x57\xe5\x7f\x7e\xba\x2f\xff\xab\x74\xe6\x2f\xee\xcb\xff\x5a\x4d\xeb\x41\xc3\x55\xca\x3e\x42\x9f\xee\x4f\xd1\x27\x08\x71\x12\xe8\x7e\x8e\x0d\xc5\x5e\xdc\x9f\xa2\x0b\x22\x25\xfc\x52\x7c\xac\xa8\x4a\x60\x6e\xdf\x51\x86\xc5\x02\xb9\xe9\x9b\x44\x57\x1c\xcd\x11\xf1\x4b\x53\x5d\x3c\xf6\xf7\x9c\x81\xea\x5e\xac\xde\x05\x9f\xd1\x08\x27\xbb\x2d\x62\xff\xaa\xc4\x07\xae\x6f\x57\x2e\x45\xf8\xf6\xf2\x5a\xf4\xaf\xce\x21\x89\xd4\x0d\xb5\x66\xe6\x57\x44\x6a\x22\x89\x38\x8b\xad\x97\x46\xdf\xfe\x8b\x40\xa8\xff\x3b\x87\x44\xdc\x5c\x52\x36\xd3\x2d\xa2\x13\x74\x7d\x3b\x62\xd7\x22\x36\x86\x50\xa2\xa5\x61\x43\x73\x54\x22\xc6\x15\xa2\x69\xc6\x85\xc2\x4c\x69\x45\x00\xc4\x00\xbb\x22\x86\x03\x9c\xf1\x34\xcd\x15\xd6\x07\x6d\x69\x51\x99\x31\x87\xdc\x11\x35\x8c\xc1\xb5\x52\xb3\x86\x46\x4e\x28\xe6\x92\x09\xdd\xbe\x96\x51\xca\x3a\x34\x8d\x97\x54\x59\xd7\x04\x16\x02\x97\xa5\x89\x0f\x54\x91\xb4\xfa\x7e\xcb\x20\xcf\x7f\xd5\x1a\x08\xce\x4c\x52\x05\x11\x7d\x11\xcd\xa9\x22\x91\xd2\x47\x70\x2b\x9a\x78\xb8\xfa\xe1\xea\xfa\xa7\x50\x82\xf8\xd0\xbf\x3c\xff\xf3\x7f\x94\x7e\xb8\xbd\x5c\xfa\x61\xfc\xe3\x9f\x97\x7e\xf9\xff\xad\xa4\xa7\x6a\x4f\x4b\x7a\x7e\x30\x97\x23\x10\xa9\xc1\x26\xec\xa6\x8a\x68\x8a\x67\x04\xc9\x3c\xd3\x14\x20\x8f\xcb\xfb\xab\x45\xca\x0b\x8e\x63\xca\x66\x26\x03\xf4\x82\x2a\x22\x70\x72\x89\xb3\x8f\xce\x7e\xbd\xc5\xea\xfc\xdf\xbb\x52\xbe\xee\x87\x9f\xfb\x97\x61\xc6\xef\x87\x9b\xdb\xeb\xfb\xeb\x95\xb3\x2e\xb5\xb0\x7c\x8c\xf4\xe3\x53\xf8\x5f\x74\x82\x74\xeb\x5e\xf2\x4d\x89\xc2\x5a\x23\x40\x5f\x9b\xa4\x39\x9f\x48\x43\x59\x02\xa7\x26\x13\x34\xa5\x70\xa5\x18\x0b\xde\x37\x46\xb8\xf6\xda\x83\x3f\x37\xe6\x03\xd0\x96\xdd\xa5\xcc\x62\x2c\x62\xf4\x77\x59\x4d\x1f\x07\xc3\xb1\xf9\x81\xc4\xe8\x08\xcd\x95\xca\xe4\xe9\xc9\xc9\xf3\xf3\xf3\xb1\x7e\xfb\x98\x8b\xd9\x89\xfe\xe3\x88\xb0\xe3\xb9\x4a\x13\x93\x2e\xaf\x57\xe1\x14\xdd\x08\xae\xaf\x10\x50\xd0\x89\xa0\x38\xa1\xbf\x92\x18\x4d\x0c\xff\xe3\x53\xf4\x4b\xc4\x05\x39\x2e\x36\xc6\x1a\x95\xec\x3d\x62\x0d\x4f\x27\xfa\xa5\x1a\x66\x52\xdd\x4f\x14\x93\x88\xc6\x56\xcc\x20\x2c\xe2\x60\x79\x34\xbe\x0a\xdd\x9e\xcb\x34\xd4\x1a\x4d\x96\xab\x62\x39\x03\x65\x05\xc7\x24\xc8\x76\x57\xbc\x4c\x70\x5a\xf1\x19\x1a\xb5\x35\xd7\x2a\xba\xbe\x5b\x31\xdc\xaa\xee\xd5\x4c\x4f\x38\xe2\x09\x9a\xe4\xd3\x29\x11\xa1\x43\xba\xa7\xb5\x19\x2a\x91\x20\x11\x4f\x53\x90\x18\xf4\x57\xb9\x34\x54\x0d\x2b\x66\x47\x7b\x3c\x62\xb0\xff\x5a\xcd\x01\x0a\x88\x39\xb0\x3a\x46\x48\x8c\x30\x5b\x98\x6e\x26\xf9\x34\x6c\xdf\xc0\x50\xe0\x18\x51\x35\x62\xfd\x24\x41\x82\xa4\x5c\x91\x20\x87\x12\x9c\x67\xe5\x05\x07\x16\x29\x48\x96\xe0\x88\xc4\x86\x1e\x12\x1e\xe1\x04\x4d\x69\x42\xe4\x42\x2a\x92\x86\x0d\x7c\x0d\xb6\x1a\xbd\x66\x54\xa2\x98\x3f\xb3\x84\x63\x3b\x8f\xea\x67\xdf\x94\x4f\xe3\xc0\x41\x04\x0c\x84\xe0\x02\xfe\xe7\x07\xca\xe2\xbd\x71\xa8\x87\xbb\xc1\x6d\xf8\xef\xbb\x9f\xef\xee\x07\x97\x9b\x71\x1f\x4f\x59\x30\x3c\xd0\xe1\x4f\xd1\x9d\x59\x04\x2e\xb4\x44\x24\x1a\x26\x75\x69\x49\xa9\xf8\x81\xc7\x5b\x72\xdf\xcb\xfe\xd5\x43\xbf\xc4\x51\xee\xce\xbe\x1f\x9c\x3f\x54\xf4\x01\x3b\xbf\x92\x0c\x6f\xd4\xbf\xf0\xb7\xb3\xef\x87\x17\xe7\xe3\x1a\x85\xf1\xc3\xed\xe0\xec\xfa\xc7\xc1\x6d\xa1\xdb\xd5\x2e\x51\x65\x30\x55\x66\x75\x6f\x98\xd2\x9c\xc7\x68\xb2\xa8\x07\x84\xd0\x92\x73\x02\xbe\xd8\x02\x12\xc5\xb4\x7a\x0a\xbc\xc9\x61\x73\x14\x5f\xa4\x3c\x26\x3d\xfb\x0e\x20\x69\x18\xe3\x8a\x91\x98\xeb\x1b\xd6\xbd\x63\x16\x18\x2a\x0c\xc8\x85\x5f\xb8\x53\xd4\x47\x52\xbf\x98\xeb\x43\x2d\xe8\x6c\x06\x86\xc3\xca\x50\x4d\x6b\xf6\x53\x58\x5e\xf8\xce\xec\x7f\x26\x38\x9c\x73\xdd\xad\xb5\x38\x7b\xab\x84\xf9\x10\x50\x57\xca\x2d\x0a\x0c\x06\x87\x9a\xa1\xb9\xcd\xd2\x8b\xd0\xb8\x5e\xe6\x3c\x1a\x7b\x91\x3e\x5c\xc0\xb6\xa4\xb1\x77\x66\x82\x3c\x51\x9e\x07\x9f\x5a\x60\x8f\xd2\x8e\xd7\x36\x5f\x2c\x00\x2c\x9b\x31\x8a\x54\x9a\xf1\xe4\x51\xdb\x82\x66\x61\x4f\xd0\xc2\x54\xf0\xb4\xa6\x8d\xf2\x31\x19\x5e\xdf\x29\x81\x15\x99\x2d\xce\x2d\xcb\xd8\xfe\x78\x9c\x5f\xff\x74\x75\x71\xdd\x3f\x1f\x0f\xfa\x9f\xca\x27\xde\x3f\xb9\xbb\xbf\x1d\xf4\x2f\xcb\x8f\xc6\x57\xd7\xf7\x63\xf7\xc6\x4a\x92\x6f\xe8\x60\xf9\x9e\x2e\xbf\x78\x8a\x34\xcb\x05\xd6\xe8\x00\xef\x02\xfe\x38\x21\x53\x2e\x0c\x9f\x4f\x5d\xe8\x82\x15\x61\xdc\xda\x5a\x5d\xac\x32\x8b\x53\xb0\x8c\xd5\x35\x69\xac\xde\x4a\x10\x9c\xc2\x3d\x81\x19\x1a\xb0\xf8\xe8\x7a\x7a\x74\x67\x7e\x4c\xb1\x78\x24\xc2\x7f\xfa\x2c\xa8\x52\x84\x95\x54\x3a\xec\x86\xec\x95\xc4\xa2\x83\x63\x74\xab\xf9\xbe\x7e\xdf\x5f\x6a\x9a\xd8\x63\xa2\x30\x4d\xa4\x1d\x6c\x69\x5d\x4f\xd1\x05\x16\xb3\xc2\x0e\xf7\x35\x9f\x4e\x4d\x63\xdf\x98\x61\xe8\x3b\xac\x34\x8b\x1a\xde\xab\x49\xc3\xdd\x8b\xd0\x9f\x7d\xd9\xcb\xc3\xcb\x54\xf5\x90\xed\x46\x53\x0f\x37\xb0\xe2\x46\x63\x2f\xe9\x86\xf6\x49\x0d\xad\xc1\xc4\xcd\xe3\xd5\x97\x4c\x7d\xdb\xcb\xe4\x54\x7e\xb1\x86\x9c\x4c\x2e\x95\xde\xf9\xa9\xd6\x36\x6b\x68\x89\x7c\xa6\xd6\x60\x10\x8e\xbb\x42\x42\x45\x33\x60\x5e\xc5\x59\x46\xb0\x90\x75\xbb\x5d\x16\x03\x1b\xf6\xde\xf4\x14\xf6\x61\x37\xd9\xf5\xd3\x43\x9c\x81\xc1\xc1\x0b\x11\x15\x8a\x6c\x41\x03\xa6\xad\x25\x0a\xb8\x01\xb4\xa5\x6b\x8b\x6c\x74\x49\xa5\x56\x1a\xcd\x8f\xdf\x59\xc8\xa5\xed\x08\xe2\x63\x7f\x78\x51\x11\x2e\xc6\xe7\x83\x8f\xfd\x87\x8b\xd5\x66\xc2\xd2\x77\xd5\x2d\x46\x47\x48\x3f\x2f\xfb\xcd\xe9\xd4\xdc\x19\x0e\x38\xca\xa8\xb4\x84\x81\xd1\xca\x42\xd5\x18\x7b\x75\x4c\xb2\x84\x2f\x52\xc2\xc0\xc4\x53\xba\x09\xf5\x7a\x4e\x31\xb5\x57\x4b\x30\x58\xb0\xe2\x58\xb3\x1b\x5c\x63\x47\x0e\xad\x8a\xc4\xfe\xe6\x2d\x83\x55\x55\x58\xf7\x8d\xf1\x9e\xd9\xff\xdc\x29\xac\xb6\x3c\x63\xfd\xb3\xfb\xe1\x8f\x83\xb2\x7e\x78\xf6\xfd\xf0\xc7\x3a\xa9\x66\xfc\x69\x70\x35\xb8\xed\xdf\xaf\x11\x4e\x2a\x4d\xd6\x09\x27\x52\x0f\xb8\xea\x3d\xa5\xd2\x47\x04\x45\x06\xf2\x0a\x51\x25\xd1\x13\x95\x74\x42\x01\x20\xcc\x7a\x22\x1f\x86\xc0\x59\x9f\x70\x42\x63\xaa\x16\x4e\x7c\x31\xfd\x96\xf7\x51\x73\x52\xdb\xbe\x31\x3b\x84\xfe\x49\xb0\xf2\x99\xcd\x71\x93\x3e\x45\xa0\xdb\x3e\x81\xd2\x16\x7c\xc6\xb4\x20\xcd\x66\x44\x98\xe1\x80\xf7\x25\x1c\x4b\xf0\x5c\x8f\x2a\x14\x56\x8a\x55\xf3\x42\xeb\x8c\x30\x22\x00\x04\xce\x77\x62\x04\x29\x41\xd8\x57\x5a\xe6\xca\x12\x1a\x51\x95\x2c\x50\x04\x36\x2c\x30\x67\xa6\x98\xe1\x99\x15\x0e\x40\xcd\xa9\x90\xc4\x5f\x0d\x8a\xda\xf5\xd4\x9a\xf6\xef\x29\xd9\xf2\x98\x3d\x5c\x9d\x0f\x3e\x0e\xaf\xca\x24\xf0\xfd\xf0\x53\x49\x84\xbd\x1c\x9c\x0f\x1f\x4a\xb7\xb9\x96\x64\x57\xcb\xf5\xd5\x66\x6b\x8e\xa2\x7f\xe9\x14\x9d\x9b\x4f\x4f\xf5\xe2\xd6\x40\xc4\x79\xe5\xb7\xb2\x0e\xb7\x2e\x24\xcf\xfd\x31\x60\x4a\xd4\xfa\x25\xda\x9a\x90\xac\x0f\xb2\x64\x43\xaa\x0f\x55\x58\xea\xfb\xaa\xea\x54\xae\x4e\xd9\xbd\x08\x41\x97\xc7\x85\x65\x29\x8c\x61\x00\xa3\x41\x93\x11\xab\xc6\xad\x55\x30\xec\x1f\xc1\x45\x9d\xe6\x52\x19\x57\x22\x10\x27\x7a\xfc\x8b\xd4\x0b\x0a\xae\xc6\x63\x74\x47\xc8\x88\x39\xeb\xc1\x8c\xaa\x79\x3e\x39\x8e\x78\x7a\x52\xe0\x13\x9e\xe0\x8c\xa6\x58\x4b\xd2\x44\x2c\x4e\x26\x09\x9f\x9c\xa4\x58\x2a\x22\x4e\xb2\xc7\x19\x44\xc0\x38\x77\xea\x89\x6f\x76\xc6\xff\xfd\xe2\x4f\xdf\x1e\x5d\xfc\xe5\xdb\x0f\xcb\x16\xb2\xa6\xfd\x1f\xb0\x08\x67\x32\x4f\x6c\xc4\x9c\x08\xd7\xc6\x1d\xf9\x9c\xac\xdb\xef\xab\xf2\x76\xed\xa6\xbf\x9e\xdd\x3c\x94\x2c\xd6\xe5\x7f\x5e\x0e\x2e\xaf\x6f\x7f\x2e\x71\xca\xfb\xeb\xdb\xfe\xa7\x12\x43\x1d\xdc\x7c\x3f\xb8\x1c\xdc\xf6\x2f\xc6\xee\xe1\x2e\xb6\xb7\x1f\x18\x7f\x66\xe5\xa5\x91\x8e\x03\x2e\xf5\x74\x8a\x3e\x72\x81\x7e\xf0\x3b\x79\x34\xc1\x12\xae\x18\x77\x67\xc9\x1e\xca\x78\x0c\x8c\x17\x91\x6c\x4e\x52\x22\x70\x62\x6d\x06\x52\x71\x81\x67\xe6\xa6\x97\x91\xc0\x2a\x9a\x23\x99\xe1\x88\xf4\x50\x04\xd4\x30\xeb\xc1\xa6\x80\xaa\xc5\x67\x55\x3b\xdf\x6d\xce\x14\x4d\x89\x53\xc1\xed\x3f\xef\xcd\x66\x6c\xb1\x39\xd7\xf7\xdf\x97\x85\xbd\x8f\x17\x3f\xdf\x0f\xc6\x77\xe7\x3f\xac\x5c\x4f\xf3\x59\x69\x64\x77\x10\x80\x74\xc6\x93\x3c\x65\xe1\xdf\xdb\x8f\x6d\x78\x75\x3f\xf8\x54\x1d\xdd\x75\xff\xbe\x4c\x19\xb7\xe5\x00\xb7\x0f\xdf\x5d\x5f\x5f\x0c\x4a\x2e\xe1\x0f\xe7\xfd\xfb\xc1\xfd\xf0\xb2\x44\x3f\xe7\x0f\xb7\x06\x8d\x70\xd5\x34\xdd\x08\x6a\x26\xaa\xa7\x15\x4e\x73\xdf\xac\xb0\x15\x27\xea\xdb\x80\x72\x73\x96\x8f\x02\xb8\x1d\x13\x0e\x06\x56\x9d\x23\x6f\x52\x8d\xcc\x48\x6b\xd9\xa1\x2a\x6f\x13\x6a\x66\xc7\x2b\x37\x7a\x15\x57\xbe\xf7\x43\x30\x50\xa0\x46\xd9\xc6\x49\xc2\x9f\x4d\x28\x6f\x4a\xf5\xad\x6c\x81\xd1\xf4\x2b\xb2\xf0\x10\x1e\xd7\x70\xbc\xf2\xb6\x90\x48\x10\x75\xc9\x73\xa6\xb6\x27\xb9\xfe\x55\x89\xef\x0c\xae\x7e\x1c\xff\xd8\x2f\x53\xe0\xf0\x62\x35\xab\x09\x9b\xa8\xb9\x8a\xfb\x57\x3f\xfb\x4b\x18\x02\xbe\x7b\x5e\x43\x35\xb2\x6b\x94\x50\x2d\xf6\x46\x58\x6b\xaf\x09\x48\x34\x88\x50\x30\x39\xa4\x7a\x72\x10\x60\x9a\x19\x7f\x92\xe1\x4f\x66\x90\xa7\xee\x8f\x4a\x7b\x12\xd6\x05\xac\xa9\x2e\x9e\x1e\xda\xb1\x5a\x35\x43\x84\x3d\x51\xc1\x01\xcf\x16\x3d\x61\x41\xb5\x34\x6e\x5a\xd6\x73\x3d\x85\xff\xdd\xac\x4d\x30\x8c\x56\x18\xd7\x1d\x17\xea\xdc\x07\xf2\x6e\x67\x0d\xa9\x0b\x68\x5d\x0e\x65\xad\x37\x74\x2c\x7f\x5b\xb3\x39\x3b\x06\xfc\x96\x27\xfc\x8f\xe4\x9c\xe2\x44\x33\x80\xfd\xc9\x8b\xfd\xab\xbb\x61\x59\x7e\x2c\xab\x19\x01\x5f\xde\x5a\x5e\x04\x43\xa5\x19\xb9\x53\x26\xee\xfe\x7a\x61\xb4\x0b\x00\x3d\x36\xe7\x36\x50\x2c\x40\x00\x72\x28\x28\x19\x16\xb2\xf2\x85\x44\x00\x84\x56\x04\x5c\xe9\x3b\x0b\xc2\x99\x9e\x38\x8d\x47\x8c\x7c\xce\x08\x93\x10\x1c\x60\xee\xb3\xc2\xd7\x2e\x8f\xd1\x70\x0a\x2c\x41\xbf\xce\x50\xce\xac\x03\x4c\x5f\xb8\x66\x90\x3d\x2d\xca\xda\x21\x78\x0d\x11\x0c\x2f\x8c\xb8\x60\xa9\x62\xf0\x23\xf6\x93\x77\xa2\xc1\xa3\x29\xd7\x0c\x48\xef\xa2\x6d\xef\x14\x61\x26\x69\x0f\x69\x85\xa5\xba\xa7\x90\x3a\xa0\x15\x4a\x1b\xc2\xa5\x39\x8d\xfd\xf3\xf5\xaf\x81\xa5\x38\xe1\xf0\x32\xa8\xbf\x0b\x2a\x57\x41\x83\x68\x9c\x18\x8f\xc9\xb8\xfd\x9d\x10\x71\x41\xac\x9f\x65\xe3\x6b\x60\x1d\x63\xbf\xc7\xf2\x71\xc9\xf7\x30\x64\x52\x61\x16\x91\xb3\x04\xcb\x2d\x83\x90\x9c\x8d\xa3\x57\x96\x38\x6e\x6f\x1f\x6e\xee\x87\xdf\xad\xe1\xf2\xd5\x8f\x97\xc3\x80\xa2\x24\x77\xee\xb9\x89\xe0\x38\x46\x9a\x7d\xce\xb8\x71\x05\x5a\xc1\xbf\x80\xfe\x36\x79\x3d\x3e\xa0\xb2\x04\x3b\x5e\xa4\x23\x58\x3b\x47\xe8\x4a\xa0\x76\x21\x50\xa4\x57\x02\x05\x26\x0f\xb7\xd5\xe0\x59\x34\x05\x49\xac\x75\x2b\x4b\xb0\x9a\x72\x91\x1a\x2e\x5f\x9a\xb4\x69\x7c\x75\xa3\x94\x29\x22\x44\x9e\x29\xea\xb0\xdc\xab\x52\x2a\x54\x78\xe7\xb3\x4b\x22\x25\x9e\x91\x5d\x1c\xd0\x75\xca\xc3\xdd\x8f\xe1\x3f\xc1\xc1\xdc\x46\xf6\x2f\x8d\xd0\x45\xbe\x3b\x7a\xba\x66\x1f\x4d\x20\xcf\x0d\x4f\x68\xb4\x65\xc0\xdd\xc7\xfe\xf0\x62\x3c\xbc\xd4\x4a\x7c\xff\x7e\x70\x51\x12\x25\xe0\x59\xff\xe3\xfd\xe0\xd6\x82\x58\xf7\xbf\xbb\x18\x8c\xaf\xae\xcf\x07\x77\xe3\xb3\xeb\xcb\x9b\x8b\xc1\x9a\xc8\x9c\xc6\xc6\x97\xad\xab\xd5\x57\x4f\x97\x7e\x81\x1d\xd6\xbc\x2c\xb4\x97\x41\xd6\x18\xa6\x09\x38\xc1\xb9\x71\x86\x63\xc4\x78\x4c\xe0\x67\xe9\xac\x33\x1e\x39\x1a\x0d\xd5\x57\x49\x82\x70\xae\x78\x8a\xc1\x6b\x93\x2c\x46\x0c\x4f\x34\x6b\xc5\x49\x12\x84\x77\x89\x9c\x31\xcd\x62\x75\x63\x06\xa2\x3d\x4a\x88\x66\xe7\x59\x90\xec\x67\xfd\x06\x53\xca\x20\xd2\x36\xc5\xe2\xd1\xb8\x99\x8a\x2e\x8b\x43\x21\x11\x96\x23\xa6\xc7\x45\xac\x61\xa8\xcd\x0a\x9f\xb6\x7a\xab\x71\x75\x52\xfc\x48\xf4\xaa\xa4\x79\x34\x47\x99\xe0\x33\x41\xa4\xb4\xb6\xe5\x08\x33\x13\x80\x60\x5f\xd7\xd7\xd0\x88\x31\xae\x97\xc2\x99\xb0\x63\x92\x11\x16\x13\x16\x51\x93\xd6\x07\xbe\x7b\x6f\xda\x9c\x09\x9c\xcd\x91\xe4\xe0\xf4\x86\x65\x07\xfb\x95\xf9\xc8\xdd\x64\x66\xc6\xe6\x71\x68\x81\x16\xb9\xe6\x13\xd7\x20\x27\x9a\x55\x86\x8f\xdd\x65\xe8\xdc\x2e\xc6\x0e\x98\x66\x09\x51\x06\xac\x1f\x96\x1c\x36\x43\xaf\x75\x69\x3f\xf4\x36\xd5\x6d\x82\xbe\xb0\xdd\x98\xb1\xb4\x23\x3a\xae\xb1\x6c\xdb\x23\x85\xbe\xc7\x2c\x4e\x74\x2b\xce\x87\x51\x3e\x8b\x90\x8a\xd2\xd7\x54\xe3\x4e\xe3\x2e\xb7\x68\x84\x73\xb9\xcb\x35\x5a\xc9\xc5\x34\x56\xc1\xa3\x22\x28\x04\xc8\xdb\x26\x62\xc2\xea\x66\x9a\x45\xe2\x84\xdb\x55\x32\xaf\xe7\xa6\xfe\x13\x82\xd1\x34\x5c\xb3\x99\xa0\x2c\xa2\x19\x4e\xb6\xd2\xfd\x2a\xc1\xf8\x36\xc6\xfd\x6b\x3a\xd5\xe4\xf3\xcd\x92\xdb\x56\x11\x91\x42\x82\xb2\x1d\xa6\xdf\xc2\x0d\x2c\x49\x36\xab\x81\xc8\x22\x9a\x04\x0b\x9e\x1b\x7f\x1c\xac\x0b\x89\x6b\x8e\xea\x71\xdd\x76\xeb\x93\x81\xcb\x01\xd0\x5b\x6c\xb6\x89\xfc\x69\x5a\xbf\x4a\x2b\xb6\x77\x13\x8c\x87\x93\x9b\xfa\x36\xeb\x76\x20\x78\xf8\xaf\x55\xb4\x73\x89\x33\x4d\x33\x16\xb6\x1f\x17\x73\xb4\x4a\x92\xad\x0a\xe6\xe2\x67\x02\xdf\xb9\xcf\x0b\x69\xbf\x1b\xc5\x12\xda\x00\xa8\xe5\x4e\x4a\x31\x04\x41\x8e\xb9\xa5\xf1\x69\xae\x65\x59\x84\x21\x0a\x01\x7d\x4d\x8e\x67\xc7\xc8\x15\x61\xe8\xa1\xfe\xcd\xcd\xe0\xea\xbc\x87\x88\x8a\xbe\x71\x31\x8b\x36\x60\x69\xc4\x14\xb7\xd2\xca\xc2\x15\xd0\x48\x89\x98\x91\xd2\x9c\x5d\x74\x13\x84\x2a\xcf\xa8\x54\x36\x7c\x56\xf3\x95\xa0\xd4\x09\x4d\xab\x62\xb6\xa1\x90\x5c\xcd\x77\x21\x0d\x2c\x65\x9e\x6a\x5d\x76\x4c\x71\x3a\x16\x3c\xd9\x85\x29\x9c\xc3\x54\x40\x5d\xf6\xe9\xf9\x14\xa7\x48\x37\x6b\x43\x41\xbc\xcb\xd1\x8b\x74\x5a\x30\xd2\x7c\x59\xdf\x9b\xc1\xbd\xe5\xbc\x0f\x36\x1e\x8d\xba\x10\x08\x48\xdf\x6f\x60\x15\x85\xd9\x78\x6c\x2d\xf5\x63\x1c\x45\x5a\xe5\xde\xf3\xa4\x82\xfa\x39\xce\x25\x60\x3b\x7a\xb1\x69\xae\xa3\x73\x37\xcc\x4c\x73\x30\x08\x06\xd6\x57\xae\xe4\x11\x2d\xda\xaf\xe9\x77\xb2\x58\xea\xd5\x55\xb8\x79\x90\xde\xa4\x62\x2e\x61\x49\x60\x27\xa5\xa9\x90\xa3\xe6\x64\x81\xe6\xf8\x89\x94\xba\x74\x09\x31\xba\xe1\x05\xcf\x45\x1d\xa3\x1b\xb1\x73\x92\x09\xa2\x25\xfd\xaa\x03\xc5\xd3\xf4\x6d\x99\x12\x3b\xba\xee\xe8\xfa\xdd\xd3\xf5\x99\x29\x94\xd4\xf7\x85\xb1\x76\x12\xe0\x4c\x63\xe3\x8c\xf3\x64\xdc\xc2\x26\xd2\x7e\xc5\x4b\x9e\xb0\x4a\xd9\x28\x80\x04\xe0\x39\xc8\x47\xa5\x6b\x93\xeb\xbb\x2e\x48\xb1\xb5\xc3\x5b\xb1\x0c\xce\x65\x16\xd4\xcb\xd9\xe5\xbc\xd7\xb5\xb2\xaa\x25\xf4\xe2\x62\xce\x99\x91\x6f\xbc\xbb\x2c\xac\x7f\x5a\x3a\x4c\x4e\x14\xa1\x6c\xa9\x1a\x9b\xa1\x67\xbd\xc0\x46\xee\xf8\x47\xce\x15\x96\xdf\x1c\x8f\x98\x16\xa2\x1e\xc9\xc2\x98\x5b\xb5\x98\xf2\x3b\x2d\x8b\x1f\x49\xc2\x24\x84\x7b\xff\xce\xb8\xe7\x34\x89\x3b\x73\xb5\x51\x4d\x4d\x11\x38\x08\xba\xf6\xbd\x40\x88\xae\x6d\xd4\x4a\x49\x45\x00\x34\xc8\xf9\x66\x2e\xf6\x99\x19\xfe\x8c\x28\x48\xb1\x56\x54\x81\xce\x14\x9b\x2a\x73\x4b\x43\x5f\x6b\xba\x32\x54\x21\x38\xf8\x49\xe2\x7c\x37\xc6\x2f\x97\xdb\x58\xcb\x19\xbd\xb6\x70\x67\x63\xde\x4f\x9c\xdd\x28\x12\x7c\xa9\x74\x1b\x96\xc8\xec\xf4\xc4\xb0\x03\xe7\xbf\x26\xec\xf8\x99\x3e\xd2\x8c\xc4\x14\x43\x04\xbc\xfe\xd7\x89\x9e\xd7\xbf\x9f\xdd\x5e\x5f\x8d\x8b\x4c\x9e\xff\x1a\xb1\x7e\x22\xb9\xcf\x52\x40\x8c\x33\x1f\x6e\x9f\x09\xe2\x44\x42\x3b\x17\xb0\xba\x16\x66\xc4\x11\x6b\x1a\x41\xcc\x23\x79\x8c\x9f\xe5\x31\x4e\xf1\xaf\x9c\x81\x2b\xbd\x0f\x7f\x9e\x25\x3c\x8f\x7f\xc2\x2a\x9a\x9f\xc0\xb9\x56\x27\xe4\x89\x30\x65\xdc\x54\x7a\xb9\x62\x48\xde\x95\x10\xad\xff\xef\x7a\xcc\x45\x52\x91\xd4\x9a\x6c\x44\x32\x85\xfe\x1f\x41\x26\x9c\xab\xfa\x4b\x8a\x4f\xa7\x92\x6c\x74\x21\x15\x4a\xda\xdd\x35\xfa\xcb\x9f\xbf\xfd\x83\x26\xa1\x6d\xd6\x78\x78\x77\x3d\xd6\xdf\xff\xfb\xb9\xfd\x5e\x6e\xc0\xee\xae\xb3\x82\xb5\x39\xe2\x31\x81\xf3\x39\x83\xdb\x4f\x80\xf3\x02\xd8\x1b\x90\x43\xb1\x8f\x75\xdc\xed\xbc\xd4\xfa\x6e\x2a\xdb\x56\x8b\x09\x2a\x76\x30\x47\x74\x84\x18\x47\xa9\x89\x35\xc5\x0c\xfd\xc7\x0f\xdf\xd5\x6f\x60\x2e\xe8\x56\x1d\x52\x0b\xd7\x10\x74\x29\xe9\xaf\x44\x22\x4d\x35\x9a\x8a\x79\xaa\xbb\x16\x44\xce\x79\x12\xa3\x67\x02\x6a\x92\x8d\x03\xf5\x5a\xb9\x20\x23\x16\x36\x01\x21\x87\x08\x27\x8a\xcf\x08\xdc\xd5\x4e\x51\x53\x44\x68\x51\xc5\x64\x69\x28\x2e\x48\xcf\x40\x7d\xdd\xfd\xc9\xc5\x56\xc3\x34\xe1\x91\x4b\x6a\xb1\x26\xb9\x78\x52\x3f\xf3\x69\xd5\xf4\x8a\x9a\x6d\xf8\xd5\x4d\xb6\x66\xdb\xfa\xa5\xb1\x49\x28\xd6\x86\x55\xdd\x99\xfa\xc1\xd0\x88\xb3\x71\x42\xd9\xe3\x56\x9b\x71\xed\x44\x39\xdd\x82\x5d\x33\xdd\xa2\xb7\x73\x1b\x0b\xc8\x06\xe7\xe3\x63\x9e\x24\x26\xb5\x25\xdc\x1e\x90\xbb\xcc\xba\x81\x30\x90\x99\x1c\x50\x12\x5b\xbf\x97\xd5\x84\x05\x61\x10\xf0\x36\x62\x93\x85\xf5\xd9\xca\x1e\x92\x79\x34\x77\x99\x79\x11\x67\x52\x8b\xd1\x5c\xa0\x88\xa7\xa9\x29\x6e\xca\x08\x52\x9c\x27\xd2\x46\xbb\xb3\x23\x85\x23\x35\x62\x45\x7f\x6b\x4e\x9e\xa9\x80\xb4\x5b\xea\x5e\x7b\x97\x4e\x51\x69\x69\xa5\xc0\x4d\xe3\x10\xb3\x01\x8c\x60\xc6\x13\x15\xa0\x3f\xf0\xe5\xb3\x64\x36\xac\x41\x33\x90\x73\x2e\xd4\x38\xae\xe5\x39\x6b\x89\xa6\xca\x08\x19\x39\x4a\x20\x68\x98\x3f\x69\xe1\x9f\x3c\x7b\xe3\xeb\xaa\x21\x68\xaa\x5e\x35\x82\x76\xc7\x68\xe5\xc8\x36\x25\xc1\x86\xb5\x32\x08\x1e\x51\x39\x26\x7c\xdd\x18\xef\xe0\xab\x33\xfd\xd1\xca\xc5\xab\x9e\x3b\x27\x04\xf1\xb8\x00\x9b\x33\xf7\xba\xcd\x08\x59\xb5\xa6\x16\x3a\xe1\xe5\x32\x47\x57\x4d\xe5\xa1\x6c\xc9\xd5\x63\x01\x93\xbd\x24\x20\x6b\x62\x31\xa1\x4a\x60\x51\x42\x0a\xf1\xfa\xa0\x24\x58\x40\x7c\xd6\x88\x19\xdc\x38\xa3\x29\xc4\x28\xa6\x12\x12\x44\xe0\x2e\x0d\x9c\x61\xa8\x9d\x12\x58\x39\xda\x45\x9e\xa3\x89\x3f\x87\xc0\xb2\x82\x34\x1c\xb3\xd3\x1d\x79\x7c\x2c\xad\x9f\xf1\x28\x2f\x04\xb9\x08\x24\x5c\x8b\xa9\x83\x28\x93\x74\x36\x57\x88\x32\x6b\x77\xc4\xc9\x8c\x0b\xaa\xe6\xa9\xec\xa1\x49\x2e\xb5\x16\x6a\x82\xd5\x4c\x3c\x0a\x51\x51\x2b\x2e\xb4\x6b\x12\x71\x5c\x69\x70\x59\x45\xd9\x82\x34\xda\x1d\xca\x41\xe5\xae\x58\x43\x38\x7d\x8f\x33\x58\x6d\x83\x42\xdd\x46\x03\x4f\x89\x4c\x1c\x20\x77\xc8\x4e\x50\x05\xa4\xe9\x1c\x00\x2a\xe4\xde\xbc\x14\xaf\x51\x88\x0b\x99\x64\x50\x41\x5c\xec\x36\x48\x5e\x65\x64\x4a\x83\xde\xe4\x9d\x4e\x69\xa6\x6a\x03\xb7\x96\x5d\x45\xb7\x01\xe6\x4f\xbb\xc5\x86\x64\x2c\xa0\x66\x40\x6a\x1b\xb1\x3b\x42\x9a\x81\xdc\x96\xf6\xde\x94\xc6\x85\x29\xd8\x44\x8f\xd5\x24\xbf\x8b\x13\xfb\x7c\x70\x77\x76\x3b\xbc\x31\x90\x13\xd7\xb7\x97\xfd\xfb\x71\x8d\x5f\xbb\xe6\xad\xcb\xfe\xed\x0f\xe7\xeb\x5f\xfb\xfe\xbe\x9c\x95\x5d\xf3\xca\xed\xdd\xea\x64\x8e\x16\x43\xac\x49\x0a\xab\xed\xe7\x14\x65\x0b\x35\xe7\xcc\x87\x28\xc4\x25\xde\x74\x84\x4c\x46\xb0\x82\x10\x22\x21\x55\x8d\xe3\xf0\x1e\xe2\x72\xd6\x4b\x98\xe5\xcd\x32\x30\x6c\x7b\x15\x8d\x36\x38\x91\x9f\x12\x3e\x01\xbf\x75\x5e\x2a\x71\xbb\x22\x02\x7d\xc7\x78\x9f\x73\x2a\xb3\x04\x2f\x96\x7a\x58\x77\xe5\x5c\xe1\x94\x40\xc4\x71\x81\x1f\xe7\x92\x45\xf4\xce\x40\x02\x93\xbf\xd7\xe9\x14\x32\x99\x14\xc5\x8a\xa0\x09\x51\xcf\x90\x37\xe7\x7e\xf5\xb6\x54\x17\x30\x22\x8f\x47\x0c\xcc\x39\x23\xbd\xc8\x71\x0e\xd1\x7e\xa3\x0f\x3d\x34\xfa\x10\x93\x27\x92\xf0\x4c\xef\xbc\xfe\xa1\xe1\x92\x19\xa4\x98\x26\x57\x5c\x79\xcb\xdc\x2e\xfb\x29\x48\x44\x33\x90\xcc\xc7\x44\xb7\xfb\x7a\x82\x47\x89\x92\x1d\x3b\x83\x31\x20\x1c\xc7\x5a\xc9\x06\x56\xe6\x86\x57\x84\x00\xb1\x60\xea\xa5\x5a\x99\x9b\x88\x14\xde\xfc\x6d\x7a\x0c\xdb\x2c\x9b\x3d\x6b\x77\x80\x3d\xbd\xa0\x4b\x76\xd7\x8b\x5c\x6b\x25\x3f\x90\x05\xa4\x60\xdc\x60\x2a\xb6\x74\xcd\xd6\xc5\xbc\xbe\x88\x93\x76\x50\xd3\xd1\x01\xb9\x6b\xeb\xd7\x61\x37\xc7\xad\x8f\xd5\x7b\x2d\x2d\xd5\xc5\x72\xf9\x8e\x5b\xaa\xad\x0f\x4d\x4a\x6a\x63\x08\x03\xaa\x2a\x5e\x19\x89\x36\xd0\xb8\xfc\x00\xef\xf4\x77\x6b\x35\x15\x2f\xae\x45\x61\x4d\x7f\xd8\x05\x9b\x1c\x5f\xcd\xc7\x27\x6b\x47\x1c\x25\x5c\x96\xb1\x72\x5a\x0f\xfa\xcc\x7e\xba\x6a\xdc\x83\x90\x7c\xb5\x5c\xb8\x51\x40\x43\xcd\xc2\x57\xc0\x20\xcd\x3d\xa3\xac\x87\xcc\xbe\xdd\x43\x14\xa2\x2d\x41\x21\x4b\x0a\xe4\x00\x16\xa3\xc2\x0d\x32\x62\x45\xcc\x8a\x44\xcf\x24\x81\x30\xb7\x88\xa7\x19\x98\xf8\xed\x70\x6d\x4b\x24\x36\x11\xc3\x3d\xc4\x73\xa5\x1b\x33\x39\x39\xce\x88\x6b\x13\x7e\x0a\xb7\x87\xf1\xbd\xd9\xe0\x77\x0f\x2c\x6d\x68\xdd\xdc\xa5\x94\xa1\x4f\x44\x41\x2b\x00\xdc\x1f\x4e\x10\xf4\x84\x6a\x08\x65\xfd\xda\xef\x70\xa2\xec\x4c\x36\xd8\xf9\x02\x38\xe5\xbb\x84\x4f\x56\x1b\x09\xa0\x71\xf4\x70\x3b\x74\x16\xc9\x22\x7e\x2a\x40\x2f\x2e\x79\x14\x07\x37\xb7\x83\xb3\xfe\xfd\xe0\xfc\x18\x3d\x48\xa2\x97\xc7\x4f\x17\xf2\xab\xbd\x4a\x62\x46\x6e\x91\x58\x98\x54\x04\x37\x19\x42\x88\x10\xa5\x2c\xe8\x35\x8c\xa3\x0c\xd3\xb2\x9a\xb0\x01\x24\x85\x5a\x43\x1d\x00\x0b\x55\xe7\x69\x23\xf3\xd6\x9d\x40\x88\x93\x1a\xbf\x9f\x28\x35\x33\xde\x74\x39\x32\x6f\x1d\xf9\x94\x23\xfa\x5e\x7a\x32\x70\xb4\xd4\x9c\x50\x81\x5a\x4d\xcb\x10\xd5\xb8\xfd\x9c\x82\x10\xf7\x4b\x9c\xad\x4e\x3f\xc5\xcf\x25\xa2\x35\xa2\x70\xe0\xbb\x7f\xe9\x73\xe0\xd8\xda\xd8\xb0\xc2\xdd\x27\x58\x38\xb4\x0c\x6f\xf5\x7c\xd3\x64\x7c\x48\x67\x24\x0b\x27\x56\x19\x84\x8d\x63\x95\x08\xce\x0e\xfc\x42\x19\x2a\x5d\x89\x3d\x34\xa5\x9f\x6d\xa3\x45\x7c\xbb\x7b\x35\x08\x78\x68\x88\xa7\x9c\xe3\xe5\x33\xb5\x81\xd8\x70\x03\xdf\xaf\x14\x22\xb9\xd4\x22\x51\xa4\xc5\x25\x41\x22\x2e\xf4\x4d\x01\xdd\x16\x5e\x88\x75\x22\x83\xc2\x42\x2f\xca\xb2\x57\x66\xd5\xe9\x2f\x6a\x90\xc4\x58\x91\x23\x2d\x7a\xad\x49\x80\xb6\x39\x32\x90\x4d\x83\x55\x00\x07\x56\xdc\x3c\x13\x32\xc3\xcc\x85\x66\x37\x0c\xd7\x5d\x79\x3b\xb0\x2a\xad\x02\x61\x48\x0f\x03\xf9\x0a\x52\x7f\x4a\xe3\x90\x19\xac\xe7\xca\x71\xd8\xe8\x97\x43\x58\xb6\x67\xec\x83\x71\x1a\x06\x9b\x67\xf1\x21\x0d\x36\xc1\x52\x21\x3b\xa6\x26\x53\x44\xa0\x22\xbe\xac\x11\xb6\xa4\xdb\xb7\x55\xde\x34\x09\x95\xb5\x58\x02\x9e\x11\xe9\x70\x53\x0c\x4a\x8c\xd6\x69\x9c\x20\x6c\x4a\x31\xfb\xb3\x6d\x6b\x32\xbb\x5b\x22\x64\x26\x10\xa4\xbf\xdc\xf4\x31\xea\xb3\x25\xbc\x2c\x17\x97\x55\x5a\x2f\x73\x27\xe1\xe4\x19\x2f\x24\xca\x84\x81\x96\x31\x91\xfb\x6e\xf2\xa0\x81\x95\x3f\xf2\xa1\x10\xca\xa5\x4e\x20\xb0\xc5\xac\x0f\x9a\x73\x72\xef\xf8\x05\x5c\x79\x95\xa8\x72\x2f\x90\x17\xcd\x15\xb6\x8a\x16\xac\x4e\x91\x71\x34\xc7\x6c\x46\xc6\xce\xc8\xba\x8d\xb6\xa4\xdb\x39\x83\x66\xce\x6d\x2b\xf5\x97\xd3\x8d\x51\x98\x6c\xfd\x17\xf3\xaa\x37\x20\xea\x43\x20\x15\x9e\x11\x64\x46\xd4\xca\x2c\x5d\x8a\x18\xb3\x60\xc3\xa0\x27\xd8\x56\x07\xe5\x28\xfa\x26\xe1\x1d\x42\x9f\x2e\xf0\x84\x24\x6f\x13\x39\x01\x5d\x5b\xe3\x3c\x78\xeb\x4c\x36\x00\x41\xcf\x60\xcf\xaf\xb0\x0c\x6b\xbd\x17\x79\x5d\x6e\xc0\xaa\x79\x96\xaa\x9f\xef\x30\x51\x57\x2b\x64\x9b\xa9\x36\x55\x10\x09\xaf\xbd\xa0\xd2\x46\x9d\x81\x2d\xbc\xfe\xaa\x36\xe5\xed\x06\x12\x14\xfc\x68\x18\xc7\xce\x15\x3f\xd6\x4e\x65\x6b\x90\x81\x96\x55\xf0\x86\x53\xc4\x38\x23\x88\xca\xe2\x65\x55\x4e\x87\xf2\x10\x3d\x5a\xc4\x37\xc6\x17\x5f\xa5\xcb\x17\x5f\x7a\x69\x4b\x4b\x01\x9e\xe0\x6d\x03\x2e\xbf\x9b\x11\xad\xa8\x62\xb1\x00\x88\x4f\xc3\x87\xcb\x32\xdd\xda\x71\xee\x5d\xe0\xbe\x77\x08\xae\x41\xa4\xae\xe2\x08\xc4\xc8\xca\xe0\x90\xc1\x41\xb5\x2f\xd9\x8f\x2c\x4c\xcd\x88\x79\xcb\x06\x10\x22\x95\x28\xc5\x19\xf8\xf4\x18\x57\xc5\x57\x06\x76\x49\xf9\x2d\xec\x39\x41\x5c\x9a\x1a\x5a\x0d\x2b\xb0\xce\xb4\xe3\xae\xdf\x62\x5d\xcb\xf0\x96\x0e\x9a\x77\x46\x9f\x08\x73\x34\xdd\x73\x67\x42\x0f\xca\x75\x9a\x2c\x8e\x30\x84\x19\x93\x38\xf4\x7c\xac\xe6\x48\xc6\x20\x73\x08\xf6\xc8\xf6\x4b\x76\x5f\x1b\x46\x63\x40\xd2\x4a\xe8\xf6\x2e\x30\x3c\xa4\x52\x8b\xdb\x6b\x32\xc1\xb1\x44\xbf\x63\x5c\xfd\x2e\x40\x36\x76\xc6\x0b\xf8\xd4\x99\xa0\x7a\x4b\x25\x5b\xe0\xd0\x5a\xc2\x41\x38\x40\xd8\x5a\xbb\xf2\xbb\xc6\x06\x14\x81\xef\x2f\x2a\x8d\x0e\x96\xb3\xe0\x9a\x6a\x5e\x75\x1e\x7b\x54\xbd\x16\xaa\x06\x4f\x53\x56\xaf\x38\xe9\x25\x43\xa7\x5c\xe7\xa2\xf7\x7b\xd1\xca\x35\xbf\x84\x08\xb0\x0b\xb5\xa5\xad\x23\xa7\xd6\x80\x20\xd7\xdb\x25\xb6\xc9\xf3\x6c\x92\xcb\x45\x39\x74\xcd\x96\xc1\x68\x40\xf9\x3d\x1e\xb1\x8f\x5c\xd8\x2b\x58\xda\x3a\x03\x13\x1c\x3d\x1e\x11\x16\x23\x9c\xab\xb9\x41\xdb\xb5\x7e\x85\x85\xa5\x06\x2d\x69\x00\xd9\x78\x28\x0d\x2a\x23\x2c\x62\x57\xf1\xe2\x89\xbb\x51\x8c\x58\xd0\x08\x54\x32\x80\x42\x4f\x50\xaa\xb6\x49\xd5\x24\x52\xeb\x57\x4d\x6b\x51\x57\x84\x75\xa9\x04\xeb\xea\x73\x56\x2a\x2a\x0b\x35\x18\x20\xc0\x89\x4f\x97\x57\x67\xe8\xac\x8d\x4e\xbf\xd3\xf4\xbc\xec\x85\xe8\x59\x8d\xc2\x98\xa4\xec\x0c\xb4\xa4\xf3\xad\xe3\xb5\x25\xd4\xe0\x69\x2e\x20\x5c\xb7\xae\xcd\xaf\xa3\x39\x4d\x0a\xdf\xc5\x37\x3d\x3f\x4c\xdd\x64\x42\x9e\x48\x62\x30\xeb\x23\x01\x91\xf9\xc6\x6a\xf8\x2d\xfa\x3f\xa6\x30\x29\xfa\xc3\x88\x7d\x02\x36\x9c\x24\x0b\x40\xd4\xf4\x2d\x63\x55\x69\xe6\xb1\x76\x00\xca\xa6\x02\xa1\xf2\x40\xcc\x5e\xcf\xf1\x13\x19\x31\xd7\xcc\xff\x41\x8f\xe8\xf7\xe8\x0f\x4d\xea\x9d\x0b\xb0\x7f\x61\x3b\xc7\xc7\x20\x7c\x3d\xb8\xe5\x2c\xa3\xb4\xfc\xc6\x99\x41\x4a\x46\xc8\x1a\x64\x0d\x0f\x8c\x4d\xd9\x13\x8f\x96\xb2\x38\xc2\x53\x8b\x05\x61\x6a\xcc\x78\x4c\xc6\xa4\xc6\xa5\xb9\x82\x49\x68\x21\xe0\x8a\xc7\x64\xad\x43\xd2\x33\xd3\x9f\xc0\x74\x23\xf3\x89\xdf\x0e\x48\xf0\xf7\xd9\xdc\xde\xfa\x50\xa6\xb4\xfa\x91\x7b\xf4\xd9\x6d\xc6\xbd\xad\x33\xd5\x85\x89\xf6\xe0\x42\xb0\x03\xa8\x77\xe8\x25\x58\x39\xf7\x7a\xf5\x38\x56\x1d\x01\xfa\x65\x3d\x73\x7b\x59\x05\xb8\xba\x50\xfb\x44\xd0\x19\xd5\xf2\x7b\x7b\x87\x2d\x70\xc2\x6d\xbc\x19\x06\x64\xb4\x95\x3b\xa3\x58\x0a\x07\xb4\x72\xe4\xe9\xaf\x70\x42\x4e\x78\x5e\x15\xe0\xed\x02\x50\x19\xba\xfb\xad\xac\xbe\xd0\x7c\x78\x66\x32\x00\xc9\x9c\x9a\x9c\xfb\xfe\xd9\x05\xd2\xa7\x83\xa7\x06\x98\x0a\x16\x2d\x57\x73\x2e\xe8\xaf\x8d\x19\x4a\xcd\x32\x7a\xe1\x69\x2d\x12\xba\xcc\x38\xcb\xd2\x3a\x10\xab\x11\x29\x54\x49\x2b\xa9\xd3\x99\xd0\x24\x07\x0c\x56\xcd\x66\xa7\x79\x62\x0a\x37\x44\x5c\xc4\xa6\x72\xba\x2c\xa5\x8f\x41\x18\xae\x13\xef\xb1\xf2\x0d\x52\x0b\x55\x69\x4b\x43\x18\x0b\xce\x4a\x01\xf4\xaf\x39\xc9\xf7\x94\x81\xf7\xa6\x31\xcb\xf7\x78\x26\x8b\x20\x64\xb3\x36\x9a\x37\x17\xeb\xfb\x0f\x3d\x53\x19\xe4\xac\x3a\xcb\xa2\x87\x80\x32\x2a\xb9\x29\x0c\xba\x91\x45\xe7\xd6\x40\xdf\xef\xc1\xa4\xf3\x1a\xf1\x1c\xcb\x32\x52\x0d\xfb\xb1\xe4\xf7\xe4\x33\x38\xab\x2c\xe2\x85\xec\x24\xae\x86\x40\x45\xfa\x78\x41\x93\xc9\x16\x4c\x6e\x59\xa8\x5e\x19\x15\x5d\x18\x50\x3c\x5b\xab\x49\xa6\x56\x1c\xd2\x2e\x9e\x05\x05\x84\xb8\x45\xf1\xb2\xaf\x81\xeb\xae\x8b\x90\xc7\x68\x29\xc5\x88\xb5\x10\xd7\xe1\x96\x70\x51\xcf\xe3\x37\x30\x40\xd8\x86\xca\x5d\x2f\xfb\xed\x9b\x4e\x84\x61\x49\x87\x7a\x24\x96\xe1\x61\xd6\x1e\x06\x5f\x09\xe4\x6d\x0c\x88\x5e\xb4\x79\xbd\x93\xe1\xc9\x71\x1c\xe1\x68\xde\x38\xa9\x09\xe7\x09\xc1\xac\x49\x7a\xad\x7d\x5c\x3d\x22\x06\xdc\x14\x58\x77\x92\x00\xc2\xaf\x5b\x02\x5b\x15\xb2\x10\xdf\x59\x0c\xc8\xec\x86\x87\x9b\xd8\x40\x37\x50\x45\x98\xb3\xfc\x50\x36\x4b\x48\x75\xad\x2c\x84\x7e\xcf\x76\x92\x44\x79\x12\x94\x85\xcc\x88\xd0\xa3\xd6\x4b\xfc\x44\x98\xd6\x19\xec\x38\x9c\x33\xe3\xd9\x25\x44\xfb\x62\x50\x3d\xdf\xb5\xf3\xa7\x41\xd6\x61\x3c\x62\x70\x70\x79\xf9\xb0\x6a\x5a\x95\x5a\xcd\x08\xed\x52\x5b\x9f\xce\x40\x88\xd8\xf8\x78\xde\x95\xcd\xc4\x1b\x9f\x49\xd3\xf7\x18\x62\x0c\x76\x76\xad\x05\xee\x97\x02\xaa\xc1\x6c\xac\x83\xe3\x7a\x25\x23\x32\x44\x6d\x94\xc3\x4e\x83\xa0\x8d\x26\x38\xa8\x17\xbd\x4b\x8a\xf2\x17\xee\x36\x68\x39\x94\x95\xae\xea\x96\x8e\x67\xb0\x4e\xae\x3a\xb7\x17\x36\x64\xbb\xec\xb2\xf5\xf9\x3d\x45\x98\xa3\x2d\xf0\xaa\x04\x06\x74\x02\xc8\x29\xff\xc9\x68\xd8\x54\x1a\x0b\x98\x2b\x73\x91\x66\x6a\x61\xab\xa2\xc1\xbd\x18\xe6\xf4\x1a\xc4\xb7\x3a\xf7\x70\xf5\x8e\x8c\x4b\x0e\xe2\xba\xce\xa0\x23\x6b\x56\xa8\x6d\xd2\x2d\x74\x88\x20\x52\x41\x6c\x68\x8a\x06\x31\x05\x66\xc7\x38\x69\xb4\x65\xed\x81\x69\x42\x9a\x6d\x81\xd2\x60\xc1\x5f\x95\xc8\x89\xe6\x5d\x38\x49\x2a\xf3\xc2\x90\x0e\xad\x7c\x91\xb9\x49\x51\x09\xb7\xbd\xb3\x3a\xc1\x13\xb2\x91\x7b\xfa\xc2\x7c\xb0\x92\x8a\xe0\x15\x88\xec\xce\xb2\x64\xd1\x2e\xa2\x3c\x0c\xbd\xab\x05\x49\x5b\x37\xb0\x10\x5a\x6d\xe5\xdd\x54\x86\x27\xdb\x6e\x88\x92\x44\xb9\xa0\x6a\x31\xb6\x46\xbf\xf6\x4c\xeb\xce\x7e\x79\x66\x3f\x6c\xa3\x51\x9f\x22\xd7\x9f\x33\x32\xc2\x3d\x25\xa8\xa9\xa0\x63\xa7\xd0\x66\xbb\xb5\x96\x5c\x0b\x9e\xb4\x6a\x61\x1d\x7a\x53\xbb\xa1\xea\x2e\xb6\x1d\x9e\xad\xcc\x31\xe6\x53\x87\x8b\xd4\x7e\x61\xab\x25\x4b\x36\xb0\x96\x3a\xf8\xe5\x4c\x50\x2e\x6c\x65\x90\x36\x41\x6d\x29\xfe\x3c\xce\xb0\xc0\x49\x42\x12\x2a\xd3\xed\x6d\xbb\x7f\xfa\xe3\xca\xd1\x9e\x99\x0a\x36\xd2\xd6\x83\xfa\x4c\xd3\x3c\x45\x2c\x4f\x27\x56\xca\xc5\xf2\x31\x04\xbf\x74\xa9\xfa\x06\xc3\xc9\x0d\xb0\x04\x18\x20\x02\x38\xd3\x11\x0b\x80\xad\xad\xa9\x02\x47\x73\x4a\x9e\x00\x76\x53\x30\x22\xe5\x31\xba\xe2\x8a\x9c\xa2\x4b\x9c\xdd\x83\xa0\x66\x4a\x4a\xce\x8c\x75\x1c\x4b\xa4\xa5\xd6\x9c\x51\xd5\x1b\x31\x8b\x86\xed\x56\xe5\x24\xe2\xcc\x20\xa2\x46\xb0\xb0\xbe\x09\x30\xf7\x3a\x68\x50\xe5\x12\x1b\xa9\x6c\x58\x6c\x81\x9f\xc7\x41\xf4\xea\xd8\x64\x07\x6c\x40\xc7\xb7\xf8\xd9\xc4\x6b\x9f\x63\x85\x4d\xb5\xd8\x55\x92\xbb\x0d\x88\xb2\x15\x84\x0c\x10\xb0\x0b\x1c\xe1\x16\x8d\xc2\xd7\x3e\x33\xd1\xa9\x5f\xd3\x63\x72\x8c\xbe\x4b\xf8\x44\xf6\x90\xf4\xa0\xd9\xf0\x50\x12\x25\x7b\xc6\x41\x05\xff\x36\xa9\x60\xdf\xb8\xd5\x2f\xf8\x3e\x94\xfd\x9b\xd2\xcf\x06\x04\x43\xfe\xe9\xf4\xe4\x24\x5d\x1c\x4d\xf2\xe8\x91\x28\xfd\x17\xc8\x14\xb5\x2b\xe4\x10\xa4\x70\x1d\x1e\xd5\xba\xd5\x59\xc6\xb2\x6a\x45\x91\x36\xad\x46\x12\xc0\x4d\xd7\x57\xba\x2f\xac\xea\xa0\x8f\x38\xab\xaf\x1a\x69\xa7\x2c\xf2\xa6\xe3\x55\x02\x5c\x7e\x1d\x6d\xc5\x14\x8e\x0d\x71\x9e\xa7\x09\x9e\x55\x54\x96\x0d\x94\x94\xeb\x94\x5a\x2a\xd2\x73\x87\x78\x0b\x7d\xca\xca\x51\x66\x5f\x39\x77\x24\xb8\x15\xad\xbb\xe5\x78\xc4\xfa\x12\x3d\x13\x53\x0f\x16\x72\x12\xc1\x3b\x91\x53\x39\xf7\x19\x89\x60\x2f\x85\x46\x0d\x1c\xae\x41\x4d\xb0\x8a\xa3\xd3\xac\x9c\xff\xc6\x6a\xa0\x38\x91\xa4\xa7\x1b\x06\x48\x34\x17\x48\x88\x9e\x05\xce\x32\x22\x46\xcc\x42\x9b\x02\x80\x37\xe7\x36\x48\xa4\x29\x9a\xbc\xd3\x28\x5f\x57\xa3\x0c\x93\x3e\xca\x09\x8b\xeb\xce\x37\xe4\x37\xae\x4c\xf5\x58\x91\x1b\xa8\x65\xd1\xb6\x91\xde\x6f\x6f\x36\x6e\x39\xe6\x75\xda\x79\xbf\x12\xa6\x0f\xe5\xa6\x53\x50\x20\x65\x51\x55\xd3\xd9\xfa\xbc\xfa\x5e\x12\x73\x00\x19\x1b\x3e\x8e\x39\x91\x81\x11\x1f\x79\x5b\x5c\x42\xa7\x44\x4b\x1f\x23\xa6\xc9\x38\x74\x38\x18\x80\x6d\x87\xb7\xad\x3b\x8d\x04\x97\xd2\x46\xde\x9b\x76\x56\xe7\x4f\xed\x50\xcb\xcf\xa0\x84\x0f\xaf\xaf\xc6\xcb\x55\xfd\x82\x67\xae\xbe\x9f\x7d\x58\x9b\x64\xdf\xd8\xd4\xda\x6a\x7e\xc5\x5a\x6c\x50\xcf\xef\xe4\xec\x62\xe8\x8b\x58\x55\xba\x5e\x2e\xe8\x17\x22\xab\x37\x97\xf4\x5b\x9e\x71\x50\xdc\xaf\xd2\xc4\x8a\xf2\x7e\xeb\x37\xab\x1c\xef\xbb\x0b\x6c\x5e\x65\xeb\xd7\xf2\x87\x32\xcd\xac\x0b\x4b\xdf\xd3\x36\x35\x5c\x2b\x11\x08\x8c\x2f\xed\x61\x07\xc1\x4b\xbf\x25\x15\x4e\xb3\x30\xe5\xd2\xe1\x86\xda\x69\x9a\xa3\xd6\x74\x09\xbe\x2a\x9e\x79\x84\x4d\x34\x4b\x75\x70\x4b\x5b\xb1\x99\xc7\xeb\xde\xc2\xa4\xef\x23\x8c\xf9\xf5\x72\x98\x93\x45\x11\xb5\x27\xad\xec\xe6\x4a\x70\x37\xd8\xfd\x27\xc4\x43\xc2\x37\x6e\xe8\xae\x49\x8a\x1e\x3a\x4a\x10\x2c\x6d\x38\x06\xe4\xf2\x55\xf2\x7c\x36\x30\x0f\xfb\x31\x9b\x6c\xe0\x23\x5f\x84\x21\xb8\x6a\x6c\x5d\xb1\xc8\x1d\x44\x2a\x04\x79\x22\x02\x68\xc7\xc6\xfc\xb0\xf2\x51\xc5\x89\x20\x38\x5e\x04\x2b\xe2\x03\x0e\x4c\xcf\x60\x1e\x93\x34\xd5\x0a\x3c\xa8\x26\x8c\x1f\xf1\xcc\xe9\x2c\xa5\xb7\xa0\x82\x06\x9d\xea\x1b\x2b\x08\x57\xd0\x5f\xb0\x23\xf2\x99\x4a\xa5\xe5\x8a\x9a\x58\x4d\xd7\x08\x48\x3c\x50\x57\x6b\x4e\xec\x0d\x37\xfa\xd0\xff\xee\xfa\xf6\x7e\x70\x3e\xfa\x50\x44\xe7\xbb\xf4\x33\x8f\x08\xe5\x00\xfe\x39\x1b\x31\x1f\x50\xeb\x01\x90\x61\x2f\x11\x8e\xe3\x02\xd9\xc0\x2a\x91\x46\x66\x5b\xc9\x91\x83\x53\xb1\x36\x94\x76\x45\x33\x0f\x90\x83\x74\xa8\x27\x6b\x85\xeb\xac\x74\x72\x4c\x26\xd5\x8a\x94\x97\x3d\x5d\x36\x21\x76\xab\x32\xba\x36\x51\x0e\x5c\x90\x91\x67\xa7\x2b\xc1\xed\x7c\x82\xcd\x25\xbc\x19\xb7\x73\x1b\xb2\xc5\xa6\x7e\xa4\x9f\x49\x7c\xdb\x20\x55\xed\x25\xa3\xa5\x55\x24\x60\xed\x2e\xe4\x8c\x6e\xa2\xf1\xfb\xa9\x3c\xe8\xef\xda\xb3\xa5\xeb\x02\x92\xad\x80\x57\x05\x6c\x55\x85\x30\x8a\x88\x50\x98\x32\x34\x85\x83\xcd\xa2\x05\x02\xc0\x0e\x02\x3e\xec\x3f\xa2\x94\x32\x40\x0e\x58\xb5\xb4\x0f\xe5\x79\x6c\x20\xb4\x5e\x0e\xaf\x1e\xee\x4b\xa2\xea\xf7\xd7\x0f\xe5\xa2\xee\xfd\x9f\x57\xca\xaa\x95\x16\x56\x05\x0b\x05\x53\x2c\xb2\x10\x2d\xca\xac\x5f\x99\xda\x89\x26\x0b\x45\x1e\x6e\x2f\x76\x92\xef\xea\x9d\x65\x8d\x18\xe1\xa1\x74\x55\x8f\x88\xd0\xe6\xd3\x98\x44\xeb\x50\x4c\xdb\xd3\x91\x89\x82\xd2\xeb\x60\xad\x89\x16\xe1\x0c\x4b\x94\x61\x61\xfd\x50\xb1\x09\x80\x2a\x57\x06\x33\x9a\xd7\x2a\x04\x89\x4f\x44\xfd\xa8\xaf\x3e\xce\xf6\x91\x05\x61\x45\x59\xf0\x8f\x92\xf1\x93\x69\x78\x83\x93\x66\x87\xb2\x22\xd5\xc5\x09\xcb\xd0\x03\xb2\x3d\x84\xb8\x0b\xc7\xa6\x42\x7c\x5f\x37\x07\x2b\xe2\xe2\x09\xb5\x4a\xca\x99\xa6\x48\x03\xa7\xea\x30\x58\x83\xe6\xf8\xd4\x7c\xdc\x12\x91\x2e\x88\x6a\xd7\x6d\x15\x4b\x89\xfa\x37\xc3\x9a\xb5\xbe\xa8\xba\x90\xbe\xac\x72\x36\x89\xf7\x66\xed\x1b\x24\x29\x48\x4f\x3c\x08\x54\x24\x3b\xd3\xdd\x60\x90\x8c\xd3\xff\xa6\x1c\x49\x70\x08\x68\xbd\x75\x2a\x43\x29\xed\x78\x0d\x30\xef\x66\x99\x78\xc5\x32\x6c\x08\x7a\x14\x0e\xc8\xa6\x81\x84\x40\x3f\xcb\x31\xc6\xbd\x10\xf8\x87\x9b\x82\xb9\x36\xb6\x60\x6f\x60\x48\xc5\x6c\xda\xa0\x21\xfd\x68\x28\xda\x83\x65\x00\xfc\x87\x2b\xc8\xe8\x62\x83\x6d\xee\x7a\x38\xdd\x90\xda\x36\x03\x50\x2a\xc6\xe7\xcc\xdf\x16\x8b\x1a\x67\xd8\xda\x1d\x40\x89\x72\x95\x12\xea\x0a\xeb\x1d\x8f\x58\x10\xb0\x22\x8d\xda\xa3\xcf\x88\x2b\x4e\x02\x15\x6f\x19\x00\x5b\x43\x92\x8e\x17\x7e\x4a\x3b\x50\x4d\x91\x57\xf3\x72\x79\x91\xa5\x7e\xec\xe9\x94\x73\xec\x12\x11\x9d\x05\xc5\xc6\x01\x86\xf6\x25\x68\x2f\x28\x28\x60\x3b\x06\x73\x34\x18\x2d\x70\x50\xae\x2e\x48\x5e\x8f\x39\x91\xec\x2b\xe5\x53\x3d\x69\x62\x4b\xa2\xe0\xaa\x7b\x40\x4b\x75\x98\xda\x96\x57\x1f\xf0\x3d\xa0\x33\x6d\xaa\x38\x04\xc7\x6a\xad\x99\xca\xf9\x78\x81\x12\xc2\x58\x24\xe8\xb4\xc9\xaa\xfe\x39\x23\xd1\x36\x10\x32\x37\x58\xe0\x94\x28\x22\x56\x85\x23\x95\x8b\x49\x83\x88\xe3\x76\xd0\xf6\x6b\x76\xd1\x54\xda\xa8\x96\x64\xf1\xda\xed\xc5\x3a\x48\x18\x3f\x8b\x8d\xd0\xaf\xf4\x34\x7e\xb4\x96\xff\x0d\x67\x61\xfb\x29\xa6\x61\xa3\xad\x02\x04\xa0\x5d\xe7\xf4\x3a\x50\x28\xf7\x4b\xa0\x22\xa5\x70\xa1\x03\xc1\x40\x59\x3f\xca\x26\xf0\x93\x75\xbc\x74\x2f\xbc\xdb\x65\x38\xb8\x14\xda\xca\xa1\x2a\xe5\x4e\x00\x95\x80\x4a\x65\x70\x40\xea\x01\x4c\x40\x68\xa9\x8b\x90\x0c\xdc\x7e\x16\xde\xae\x30\xe8\x5a\xc9\xaa\x5a\x5c\xaa\xb2\x5c\x6b\x78\xdc\xbe\xc0\x1d\x3a\x89\x66\xdf\x12\xcd\x3a\x52\x2e\x45\xd7\x6a\xea\x24\xa2\x82\x33\x63\x8b\x3e\x5b\x80\x80\xf2\x04\x21\xf7\xc8\x5e\x91\xb6\x72\x2c\x5c\xfd\x94\xf9\x7f\x95\x39\xb8\x23\xea\x90\x54\xeb\x92\x2a\x8f\x03\x17\x14\x78\xa0\x92\x50\x1a\xb0\x71\x35\x30\x5a\x13\x06\x69\xac\xfc\xc3\x2b\xe3\xc0\x82\xe4\xe6\x05\xcf\xd1\x33\x95\x73\xa4\xf8\x88\x41\x9c\xa0\xf7\x06\x28\x8e\xcc\x8b\x3d\x78\x0b\x60\x10\x64\x3e\x49\xa9\x42\x38\x98\x61\xc9\x24\xd9\xb3\xe7\x59\x7f\x00\x33\xae\xcd\xb3\xaf\x83\xe8\x59\x73\x68\xb6\xb0\xaf\x15\x8d\xec\x9a\x4a\x1f\xc4\x34\xbf\x6c\x32\x7d\xa0\xf1\x84\x1a\x66\xed\x99\xeb\xb2\xe9\x51\xbd\xb5\xc1\x82\x86\x02\xb2\x2b\x95\xaa\x72\xb7\x58\x43\xcf\x9a\x4c\xfa\x62\x23\x5a\xa5\xd2\x17\xaf\xef\x23\x97\xbe\xa9\x4c\xd9\xaa\xdc\x4a\xf7\x49\x83\xfd\xdb\xe5\xec\x2a\xee\x02\xe7\x43\x49\xe9\xa6\x51\x52\x3a\x34\x54\xb3\x22\x21\x60\xfb\xf0\xf2\x4d\xd4\xc1\x22\x3f\x2b\xa4\xa2\x20\xdd\xb2\x8c\x09\x43\xaa\x9c\x9f\x71\x05\x39\x35\x11\x94\x70\x5f\xca\xf3\x1c\xb1\x7a\x09\x64\x35\x4f\xdc\x35\x45\x63\xaf\xe8\x67\xc1\xf9\x73\xb3\xb0\x16\xad\x9f\x7c\x90\x9b\x51\x96\x6d\x31\xf6\xaa\x88\x59\xb8\xf8\x9a\x82\x93\xb4\xe0\xb1\x4d\xc2\x71\xcd\xa9\xac\x1f\xfa\x52\x02\xc5\xda\x73\x61\x2f\xdd\x3d\xaa\x76\x4b\xdc\xb9\x75\xbe\x89\x97\x91\x2d\x37\xb6\x01\xd3\xb1\xd7\xe3\x2b\xae\xda\x6d\xaa\xcc\x02\xaa\xe8\xde\xb0\x50\xab\xf0\x04\xba\xf1\x1e\xb8\x77\xed\xd8\xb1\x09\x75\xf1\x08\xdd\x95\x3d\x29\xcd\xd8\x56\xef\x7f\x89\x59\x6f\x5a\x1a\x38\xf0\x37\x0a\x1b\xef\x4b\x43\xcb\x01\xd4\x04\xb6\x61\x92\x15\x4e\xec\x85\xbb\x9c\xc5\x44\x30\x82\xd5\xfc\xf5\xb2\x2c\xce\x76\x35\x4f\x07\xe3\x7b\xd9\x8c\x8b\xb3\xbd\xd4\x85\x0f\x87\x5b\xae\x91\xbe\x76\x9c\xfa\xf5\x36\x96\x22\x1b\x7c\xe0\xab\x04\x2f\xa9\x8e\x35\x66\xc3\x00\x84\x66\x13\x2a\xdd\x29\x11\xa3\x5e\x9d\x7b\x99\x94\x94\x1a\xbb\xcf\x52\x32\x8a\x3e\xed\x61\x6d\xe5\x35\x4b\xf2\x45\xe4\x7e\xbc\x7c\x3a\xc2\xaa\x2a\xce\x79\x90\xa1\x00\xa5\xb4\x15\xa6\xcc\x72\xaf\x55\x49\x09\x5a\xa6\x4c\x71\x5d\x1e\xc2\xc1\x67\xb8\x7c\xf1\x09\x2e\x5d\xba\x43\x97\xee\x50\xb3\x47\x5d\xba\x03\x42\x87\x96\xee\xb0\x4e\x05\x5d\x65\x00\xf5\x3e\x39\xa8\xb6\x59\x2a\x71\x63\xf6\x77\x8d\x1e\xb9\x7d\x48\xbf\xb3\x21\x86\xf1\x50\xf6\x17\xfb\x43\x6d\x48\xd4\xd2\x67\xd5\xd9\x86\xf6\x4c\xb6\xa8\xba\x05\xb0\x88\x13\x8b\x43\x67\x03\x96\xcb\xf6\xa7\x55\xa6\xd2\x11\xfb\x9e\x3f\x93\x27\x22\x7a\x08\x2b\x94\x72\xa9\x80\x0f\xbb\xf8\x18\x38\x08\x25\x48\x73\x13\x07\x81\xd1\x15\x4e\x49\x6c\x2a\x1e\x06\x61\x8d\xd6\x60\x6b\x5d\xad\x75\x70\xab\x80\x1c\x6a\xb6\xc1\xc5\x4d\x8c\x98\x09\x35\x34\xe1\x6d\x20\x2b\x50\x37\x31\x20\x98\xdf\x79\x47\xf0\xef\x8e\xd1\xbd\xbe\x9f\xa8\x2c\x8f\x37\x40\x5f\x6b\x1a\xdb\x88\xcd\x04\xcf\x33\x6f\x43\xe3\x13\x53\xfa\xd6\x44\x3f\x2d\x3b\x82\x61\x30\xce\x0b\x1c\xe1\x58\xeb\xe2\xab\x09\xe7\x4d\xa2\x50\xb7\x82\x30\x0a\x09\x48\x1f\x43\x1f\x5a\x67\x43\xdd\x8d\xff\x36\x00\x6e\x59\x05\xc4\xfe\x42\xce\xe5\x73\x22\xc1\x2a\xe4\xad\xee\xa5\x3c\xf2\x32\x56\x41\xed\x38\x57\xd9\x44\xbd\xdf\xc2\xd9\xf6\xeb\x61\x10\x8a\xce\x6d\xcc\x97\x49\x52\xb5\xf7\xc4\x8b\x59\x4b\x5b\x47\xcf\x36\xf1\x8b\x9b\x5c\x64\x1c\x24\xb1\x64\xe1\x60\x1b\x2c\xd2\x5b\xc6\xb3\xdc\xc4\xb5\xd1\x30\xcc\xa9\x96\xb2\xa9\x54\x97\x58\x45\x73\xcd\xb9\x0b\xc4\xb3\x3d\xc5\xfb\x15\x5c\xf9\x65\x2d\xa8\x35\x33\x38\x0b\x7b\x6f\x70\x29\xb4\xb0\xa8\x9b\x7b\xdf\x85\xd7\x3b\x49\x22\xd5\xfd\x19\xb7\x9b\x2d\x68\x1d\xd8\x45\xdd\x27\xf6\x89\x9e\xe8\x3a\x2a\x5a\x37\xfe\x76\xb4\x55\xae\xb8\xb5\xf7\x48\xc2\x1d\x20\x64\xce\x2d\x60\x57\xf1\xa2\xad\xd0\xda\xe0\xfe\x17\x74\xbb\x2c\x20\x8b\x92\xff\xa4\xc5\x11\x6f\x71\x4d\x71\xa6\x95\x08\xc5\xf5\x2d\x29\x66\x46\x8e\x35\x71\xb2\x08\xa3\x5c\x50\x77\xf6\x2b\x39\xe1\xcd\xd4\x01\x16\xca\x93\xb0\xa2\x52\x84\x83\x62\x73\xc6\xe1\x8f\x23\x95\x63\x1f\x98\x08\x34\xe1\x8a\xa0\x9b\xfc\x77\xe7\x58\x17\x4e\xbc\xab\xd9\xd3\xb5\x84\xbd\xc3\x2e\xe3\x3a\x7c\xc3\x56\x27\x8d\xb2\x59\x00\x8e\x58\x6f\x25\x6e\x53\xfb\xa0\xf6\xcb\x76\xf5\x1b\x6a\x3f\x75\xb2\xcf\x36\xdf\xae\x00\x6f\xda\x3a\x36\xbb\x14\xe7\x6e\x03\x61\xad\xf4\x14\xc2\x56\x5a\xfb\x1d\xa0\xcf\x52\x70\xd4\x63\x2b\x4d\xfd\x97\xff\xcb\xd4\xca\x32\x4b\xf3\x5f\x88\x8b\x11\x33\xbf\xf7\x7c\x9d\x0a\xfd\x42\x01\x00\x8b\x53\x52\x40\x64\x8a\x32\x98\x1e\x40\x8a\x58\x30\x34\x03\xf6\xeb\x61\xfa\xf5\x18\x1e\xf3\x09\x11\x8c\xe8\xa1\x39\xf0\x01\xcf\xcc\x52\xcc\xf0\x0c\xa0\x85\x7b\x10\x19\x07\xe2\x6a\xa1\x8a\x18\x92\x36\xf5\x0e\x81\x5b\x69\x66\x69\xf3\x6d\x8b\xba\xbf\xd0\xa7\x11\x65\x2d\xb2\x69\x11\x5e\x51\x4f\xfd\xb7\xb6\xff\xed\x24\xf6\xfb\xfe\xdd\x0f\xe3\xdb\xc1\xdd\xf5\xc3\xed\x59\x49\x6c\x3f\xbb\x78\xb8\xbb\x1f\xdc\xd6\x3e\x2b\x72\x55\xff\xfa\x30\x78\x68\x78\xe4\x1a\xb8\xe8\x7f\x37\x28\x15\xd1\xfe\xeb\x43\xff\x62\x78\xff\xf3\xf8\xfa\xe3\xf8\x6e\x70\xfb\xe3\xf0\x6c\x30\xbe\xbb\x19\x9c\x0d\x3f\x0e\xcf\xfa\xfa\xcb\xf0\xdd\x9b\x8b\x87\x4f\xc3\xab\xb1\x0b\x3b\x0e\x1f\xfd\x74\x7d\xfb\xc3\xc7\x8b\xeb\x9f\xc6\x41\x97\xd7\x57\x1f\x87\x9f\xea\x66\xd1\xbf\xbb\x1b\x7e\xba\xba\x1c\x5c\xad\x2e\xd6\x5d\xbf\x1a\x8d\x75\x80\x83\x8b\x2c\x30\x1a\x05\x62\xd2\x64\x61\x49\x9b\xfe\x0a\xbe\x8b\x1b\x43\x8f\x47\x3d\xf7\x97\x29\xad\x7d\xa4\x59\xa0\xf3\x8b\x15\xdc\x63\xc4\xbc\xe3\xd2\x5f\xaa\x0a\xcf\xa4\x4b\x3d\x2e\x8d\xf6\x14\xf5\xe1\xac\x80\xc2\x50\xea\x14\x32\x1b\xfc\x48\x9d\xab\x1b\xe8\x30\xa1\x29\x05\xaf\x37\x3a\x42\xd5\x0d\x2f\x37\x68\xe7\x04\x43\xb0\x7e\xbb\x78\xd5\x69\x90\xd5\xac\x66\xa0\x94\x53\xe4\x38\x34\x31\xe6\x04\x83\x3d\xbb\x60\x38\xa5\x51\x35\x05\x03\xe0\x57\x51\x01\x35\x52\x6d\xb1\x44\x60\xe5\x96\xe7\x04\xfd\xf0\x97\x62\x50\xe0\xc1\xb0\x9a\x77\xbe\x54\x51\xcf\x3e\x10\xb9\x59\xd5\x75\xe4\x59\xea\xc9\x1d\x73\x6b\x5a\x86\x73\x6b\x2b\x77\x83\xbb\x29\x67\x01\xdc\x58\xc9\xf7\xa4\x8f\xb7\x99\x51\x85\xc6\x4f\xd1\x1d\x40\x9d\xc8\x42\x75\xd7\xbb\x98\x25\xf9\x8c\x32\x44\xd3\x2c\x21\x45\xcd\xf7\x09\x99\xe3\x27\xca\x5d\xf9\x0a\x53\xe5\x03\xd6\xd1\x8a\x56\xe8\x08\x35\x1e\x94\x53\xd4\x8f\x63\x59\x66\x70\x25\xca\x71\x2c\xf3\xa8\x3c\xec\x10\x21\x8c\xc5\x9e\x6d\x56\xe8\xa8\x38\x72\xb0\x62\xfb\x07\x73\x59\x66\x87\xe5\xbb\x77\x87\xeb\x5f\xaf\xe0\xd8\x91\xf2\x78\x2b\x61\xe0\x1e\xcb\x47\xc7\x9a\xd7\x09\x04\x0e\x56\x67\xb7\x1e\x2d\xbe\x4e\xdb\x4e\xfd\xca\x8e\xe1\xa0\x6d\xd7\x67\x23\x2a\xf4\x9a\x2e\xdd\x8c\x93\x4a\xe9\xae\xd6\xfd\x95\x4a\x7f\xd5\x76\xb6\x57\x6f\x4f\xbd\x34\x06\x47\x72\xec\xe9\x7f\x83\x79\xdc\xc0\xa7\xd7\xfe\xcb\x95\x22\xdb\x38\x58\xb7\x4d\x7d\x40\x4b\x49\xba\xd6\x0f\xb4\x92\x0e\xf7\x04\xef\xd4\x5e\x18\x84\xc2\x0b\x34\x02\x77\x1f\xa6\xcc\x96\xe3\x21\xde\x1f\xe5\x0a\x50\xeb\x73\xec\x4b\xc4\xe1\x09\x7f\x2a\x29\x97\x29\x91\x12\x37\x00\x96\x04\x26\xb1\x5d\x18\x83\x3f\xa1\xf6\xc3\x96\xf4\xe4\xce\xe4\xbd\xfe\x6a\x95\xd1\xe7\x36\xd4\x8c\xdd\x44\xb5\xc0\x1a\xbb\x48\x5b\x74\x6d\xf2\xed\x34\x7f\xe9\x15\xc1\x34\x5c\x04\x31\x46\x4d\xee\x9f\x96\x66\xb5\xea\x82\xd5\x56\x59\x0a\x5d\x78\x9b\xc7\xe0\x04\xad\x6f\x8d\x88\x6d\xfd\x2a\xb8\xbc\x3e\x1b\x50\x5d\xc9\xdf\x19\x56\xa0\x8e\x78\x9a\x1a\xb9\xa0\x64\x4b\xed\x21\x6c\xd2\x1c\x0b\x69\x4a\xe6\xd1\xdc\x78\x99\xf4\x95\xd1\x1b\xb1\xe7\x60\x43\x4a\x81\xc0\xfd\xb0\x25\x40\x13\xfd\xac\x8f\x1b\x7d\x2a\x85\x57\x83\xc8\x48\x21\xd6\x37\x20\x04\xe3\x10\x2c\xca\x47\xad\x21\xf0\x60\xbf\x76\x20\xf5\x2d\x6a\x05\x56\xd6\xb7\xa9\x62\xa0\x9f\x5b\x50\xa8\x6f\x07\x4d\xb9\xed\x10\x82\x5a\x81\x75\x23\xd8\x43\xa9\xc0\x57\x85\xf7\xf6\xe9\x9a\x26\xbb\x37\x9d\x58\x8c\x0a\x3d\x5d\xb7\xda\xbf\x77\x33\xfa\xbd\xf1\x3b\xe4\x0d\xa0\x26\x41\x6b\x1e\xe1\x1b\x1d\x69\x99\xd5\x25\xdb\xdb\x40\x0c\x89\x8e\x0c\x6a\xe0\x57\x10\x69\xd9\xbf\x19\x7e\xd5\x43\x5f\x85\xd9\x66\x5f\x6d\x75\x00\xed\xb8\x6d\xb9\x40\xd0\xa6\x4a\x29\x07\xe5\x63\x07\x7b\x55\x39\x89\x76\xcf\xec\x41\x44\x4d\xe7\x50\x7f\x59\xfa\x06\x9c\xd3\x50\xfe\xce\xf8\x6f\x7d\xc0\xb3\x75\x01\x19\x19\x97\xca\x9a\xb5\x8b\x47\x6c\xb2\xa8\x3a\x79\x7a\xde\xcb\xd3\xfa\x94\xee\x5c\xd2\x4d\xb7\xb7\x9c\x9e\xbc\xe7\x40\xdc\xd5\xf7\xc1\x9a\x84\xe7\xbe\x89\xb9\xe6\xd3\x80\x8b\x35\x45\x29\x74\x11\xec\x75\xb3\x2a\xd9\xcb\xdc\x62\xd6\x6e\xca\x3a\xf9\xe7\xbd\x91\x5b\x8b\xb0\xef\x7e\xdd\x8a\xd8\x88\xff\x06\xe1\xba\xa3\xb2\x97\xa5\xb2\x7d\x64\x3c\x94\x07\xb7\xf9\x05\x7a\x66\xe4\xb8\xa0\x19\x67\x70\xd5\xca\x84\x67\xf0\xa5\xba\x7f\xeb\x0b\xe6\x6e\xe8\xf3\x0d\xd6\x64\xbd\xd3\xf7\xce\x04\x0e\x18\xb7\xeb\xf2\x58\xab\x43\xed\x2b\x5b\x84\x88\x53\x93\xdd\xa8\x68\x4a\x7a\x88\xb3\x64\x11\x04\x3b\xd8\xf3\x0a\xe4\x66\x62\x94\xe6\x84\x0a\xd7\x89\xc5\x18\xdc\x28\x1d\x7e\x43\x69\xbc\x89\x46\x76\x88\x34\xb9\xea\x5f\x0e\xce\xc7\x83\xab\xfb\xe1\xfd\xcf\x35\xf8\x91\xe5\xc7\x0e\x42\x32\x78\xe1\xee\xe7\xbb\xfb\xc1\xe5\xf8\xd3\xe0\x6a\x70\xdb\xbf\x5f\x03\x2f\xb9\xaa\xb3\x26\xe8\xc2\x5c\xd6\xa9\x6f\x9b\xc0\x17\x3a\x33\x6f\x4d\xef\xcb\x20\x93\x41\x27\x94\x34\x00\x4d\x9a\xd4\x7f\x16\x13\x81\x62\xf2\x44\x12\x9e\x15\x66\xd5\xda\x05\x0b\x10\x28\x6b\xda\x5f\x85\x42\x09\x6d\x56\xd7\xf8\x14\x99\x5a\x6f\x41\xb9\x5b\xdf\x20\x88\x7c\x58\x10\xf6\x95\x42\xe4\x73\x96\xd0\x88\xaa\x20\x35\x90\x0b\xeb\x5e\x31\xee\x43\x88\x4e\x5d\x43\x5c\x7b\x8b\x46\xd9\xbb\xce\x1f\x7a\xd2\x97\xb5\x7d\x7f\xa2\x3c\x22\xda\xda\x02\x42\x7b\x50\xec\x1b\x9c\xc6\x4b\x80\x6d\x5b\x8c\xee\x25\xcc\x03\xcb\x39\x3a\x36\xbd\xaf\x01\xcc\xad\x7e\x90\xeb\x6f\xc3\x55\x71\x32\xa5\x73\xbd\x3a\x50\xa6\x1d\xa5\xbe\x71\xb8\x4b\xa9\xb0\xe6\x1e\x90\x37\x6c\xec\xfa\x86\x01\x0b\x4b\xf5\x62\x98\x89\x39\xc5\x48\x90\x94\x2b\xad\x80\x99\x88\x80\x9e\x16\xaa\x28\x4e\xe8\xaf\x80\x51\x25\xc8\x71\x10\x41\xe1\x90\xbd\x0a\xf7\x81\xc5\x8f\x38\x1e\xb1\xf3\xc1\xcd\xed\xe0\x4c\x33\xa4\x63\xf4\x20\x01\x7e\xaa\x34\xf5\x73\x4b\xde\x46\x1c\x0b\x23\x19\x28\x93\x8a\xe0\xa6\x60\x30\x22\x04\x17\xed\xf9\x83\xef\x6f\x00\xdf\xd5\x93\x37\x3c\x2b\xd9\xa6\x9c\x01\xe0\xaa\xb1\x2a\x72\x90\x33\xb0\xf7\x9c\xac\x5b\xfc\x5c\x5a\x91\x10\x7e\x03\x24\x91\xf2\xaa\xbf\xe0\x6a\x03\x80\x67\xfb\xf9\x95\xfa\xbc\x81\x6f\x57\xcd\xf3\x1e\x42\xec\xa4\x2a\xd0\x40\x0d\x60\xa8\xaf\x7a\x53\x99\x67\xa3\xa8\x28\xde\x02\xaa\xa3\x42\xfa\x13\x32\xc3\x0c\x89\x9c\xb1\x0a\x3c\x6c\x68\x69\x5b\x0e\x9a\xd9\xf4\xa8\xea\x35\xc3\x29\xcf\x19\x28\x0d\x10\xc6\x5a\x33\x18\x99\x11\xa6\xd6\x0c\xe6\xad\x80\x58\x2a\x43\x3d\x5c\x2c\x96\x9a\x81\x36\xc1\xb1\xd4\xf9\x93\xa0\xf4\xf2\x66\xd7\xb2\x0b\xca\x2b\x39\x95\xf4\xa1\xf2\xf7\x73\xbd\x96\x8d\xe5\xe3\xce\xdd\xdd\x63\xf9\xb8\xbe\xab\x98\x44\x8f\x9b\x5e\x36\xd5\xcc\xcc\xc4\x56\xae\x5e\x32\xf6\x2d\xf4\x53\x5b\x9a\x05\x0a\x96\x47\x8f\xe8\xfb\xfb\xcb\x0b\x34\xa5\x5a\xee\xd5\xd7\xca\x15\xd6\x32\xf6\x83\x48\x9c\x5d\xd8\xda\x56\x73\x91\xf8\xbb\x17\x36\xde\x89\x52\x81\x94\xa0\x6f\x34\x3c\x23\xce\xd8\x2b\x2c\xda\x5e\xa5\x34\x8b\xc0\x2c\xe6\xa9\x99\xc7\x89\xcc\xa7\x53\xfa\xf9\x58\x61\xf1\x4d\xc3\x7a\x98\xa8\x8a\xf1\xdf\xf9\x64\xac\x47\xb4\xe3\x45\x5c\xd7\x1c\xb2\x05\x95\xfd\xb2\xd9\x99\x9d\x9b\x77\xff\x2f\x9f\x40\xb6\x7b\x26\x38\x20\x00\x82\x77\xce\x46\x2a\xd8\x57\x1c\x25\x1d\x23\x97\x40\x55\x02\x39\x89\xb8\x10\xc4\x26\xc9\x9b\xda\xa2\x19\x16\x8a\x82\xb5\xd6\x81\xa4\x94\xd0\xf1\x8b\x2d\x0a\x4b\x7e\xcf\x71\x81\x44\x3d\x21\x04\x1c\x3c\x19\x4d\x36\x53\x7a\xcf\x4a\xbe\xc9\xca\x09\xb4\x91\xa7\x16\x37\x13\x0c\x32\x6b\x45\xac\xc1\x13\x61\x6a\x2f\xfa\x09\x34\x51\x93\xb6\xdf\xce\xcb\x60\x4a\x7c\x0e\xcf\x8b\xcb\xcd\x85\xf4\x86\x51\x4d\x4a\x60\xb8\xe7\x6d\xa2\x94\x75\xa9\x37\x39\xfa\x9f\x5a\xfb\x8e\xe1\xd5\xe5\x75\x59\x13\x1a\x6f\x57\xbb\x28\xf5\x5d\x84\xb5\x3a\x68\xff\x2d\x81\x7c\x24\x31\x56\x8c\x00\x40\xc2\x2a\xa7\xd5\x3d\x37\x7d\x6a\xda\xaa\x74\xb9\x76\xcb\xb7\x40\xad\x29\x35\xf3\x89\x40\x4a\xe7\x3e\x02\xd1\x37\xc9\xdd\x87\x81\x3c\x88\x04\x42\xa8\x57\x5a\xb1\x4c\x99\x71\xcd\xf9\xbc\x64\x87\x5b\xc8\xe8\x66\x30\x5a\x68\x24\x99\x20\x91\xbe\xca\x4e\xd1\x4d\x42\xb4\xe4\x95\x6b\xe9\x2b\x4f\x12\x87\xf0\xb5\x5a\x3a\xdc\x08\x95\xee\xc5\xe7\x15\xe8\x1e\x2b\x26\xe6\x10\xee\x56\xcf\x2c\x58\x83\xfd\x23\x2e\x04\xeb\x0b\x26\x64\x30\x24\x96\xb5\x48\xe0\xf0\x0b\x13\x37\x0b\xa6\x24\x5c\xba\xc8\xe8\xaf\x9a\xfd\x0a\x22\xe7\xbc\x31\xc9\x31\x9c\xed\xcb\xcc\xc1\x2d\xe5\x0b\x4e\xc2\xdd\x87\x4d\x71\xd5\x2d\xe4\x9a\xca\x1d\x58\x12\x71\x56\x4d\xd1\x57\x7f\xf0\xd1\x1f\x16\x6f\xd5\xde\xad\x76\x68\x70\x4b\x16\xa6\xb6\x10\xfb\xac\x70\x5d\x14\xca\xcc\xc2\xf8\x5e\xfd\xe7\x85\x01\xb9\x48\x09\xa0\x4a\x16\x55\xe7\x90\xbe\x6b\x9b\xb6\x58\xcf\x73\x9c\x8b\x8d\x20\x29\x0a\xd4\xf2\x4d\x38\xb7\x4d\x46\x29\x86\xa5\x17\xa1\x9e\x5d\xda\x62\x12\x20\x46\xdb\x50\x23\x59\x42\x82\xb3\x64\x63\x96\xb1\x56\xc5\x6b\x66\xca\xbb\xba\xd5\x40\x4a\x2e\x44\x99\x97\xf2\xae\x95\x28\xb0\x34\x81\x0e\x5b\x6c\x73\x6c\x31\x5b\x59\xc4\xd3\x1e\x20\x01\x2a\x01\x89\xff\x85\x03\xad\x2a\x38\x58\xa3\xf7\xba\xcc\xa7\xd2\xee\xb4\x4a\x73\x2a\x7d\xa1\x79\xc9\xf9\x8e\x1e\x38\x3d\x99\xc5\x18\x12\x47\x77\x89\xc2\x29\xcd\xdf\x78\x0f\xa0\x4d\x12\x23\x83\x5e\x60\x90\x8f\xed\xda\x79\xcf\x49\x86\x05\x61\x6a\xc4\x6e\xf5\x28\xcc\x17\x45\x24\x86\x8b\xc3\x71\x68\xf4\x50\xb3\x76\x8a\xb0\xfd\x0a\x16\xbd\x29\x10\x4e\x8e\xcd\x4b\xa0\x9a\xbe\x60\x92\xfd\x77\xe6\x1d\x83\x79\x60\x31\x7f\xf4\x54\xe9\xb4\x50\xe3\xb5\x00\x19\xcd\x29\x40\x0e\xc4\x44\xda\x0b\x89\x2a\x8b\x29\xe1\xc5\xef\x9c\x38\xfc\x65\xf8\xcc\xf3\xaf\x3a\x86\xed\x0c\x05\xcc\x19\xe8\xe4\x88\x05\x7d\xac\x80\xeb\x34\xca\xfa\x96\xaa\x04\xec\x33\x8d\xbd\xe3\x0b\xfe\x69\x76\x88\x0b\x3a\xa3\x2c\x28\x9a\x64\xa7\x97\xe2\x0c\xcc\xbb\xe6\x0c\xf2\xa9\xbf\xd3\xee\x6d\x96\xc1\x31\x8c\xf8\x7f\xfe\xfb\x6f\xc7\xb4\xc9\xfb\x21\xc7\x76\x05\x0e\x61\x27\x37\xdb\x96\x70\xe7\x03\x14\x91\x06\x74\x8a\x40\xa7\x95\xa5\xcc\x89\xe2\x57\x7b\xb9\x69\xa2\xe1\x6a\x6e\xdc\xbd\x65\x72\x07\xdf\x88\xc8\x57\x9c\x0d\x73\xc5\xbc\xed\x5a\x52\x09\xd9\x01\x7a\x24\xe6\x24\x7b\x03\x41\x58\x90\x7c\xc9\x4c\x33\x62\xc5\x27\xd2\xe0\xa1\x18\x78\x57\xf3\x43\xb1\x3a\x2d\x17\x66\x15\xef\x2f\x22\x25\x0a\x77\x78\x10\x8d\xec\xca\x67\x98\x28\x52\xdd\x7e\xe5\xa6\xad\x70\xee\x00\xe7\x70\x97\xa8\xcd\x39\x96\x2f\x17\x9a\x53\x5b\xf6\xc9\x58\xd3\x43\xe1\x61\x5d\x90\x8e\x19\xa4\xc9\xf6\xd4\x1b\x92\x4b\x22\x0c\xa7\xf3\x70\x58\x96\x12\x42\x14\x47\x88\xd1\x5c\xe3\x6b\x24\x29\xa6\x1b\xe5\x13\xe8\xf7\xeb\x31\x26\x4b\xce\x06\x3c\x23\x62\x1c\xe7\x6a\xe9\x58\xac\x8a\xf1\xd7\x1f\x9d\xe7\x6a\xb1\xbe\x7d\x99\xe0\xe5\xb2\x37\xab\x70\x3d\xf5\xfb\x0d\xcd\xae\x97\x98\x83\x10\x9f\xb2\xd4\xdc\x80\x9a\x49\x2a\xa8\x99\x36\xe6\xb4\x64\x22\x81\x1b\x98\x29\x80\xd4\x2b\x34\x29\x7b\x45\x1b\x6c\x6f\x18\x39\x9a\xe4\x85\x49\xc9\x57\x4b\x88\x8f\x47\xec\xa3\x29\x37\x02\x5a\x9e\x19\x40\x04\x09\x3f\xe4\x73\xc6\x25\x29\x65\xa0\xd5\x54\x40\xb0\x19\xa4\x76\x18\xf5\xc2\x7a\xf1\xd1\xee\xb2\xfa\x9b\xe3\x9f\x2e\x6f\xf8\xf2\x94\xeb\x29\x70\x27\x71\x30\xa2\x19\xd5\xb4\x33\xae\x3d\x69\x2f\x57\x85\xb7\x88\xe9\x02\x1c\x2c\x95\x2c\x7a\xc8\x4f\xaf\x42\x10\x09\x79\x22\x60\x4e\x87\x31\x86\x75\x2e\xca\x76\xbd\x06\x76\xb2\xee\x00\x15\xe9\x9f\xc0\x16\x50\x5c\x1d\x41\x39\x49\xae\x8e\x16\xcb\xe9\x3f\x3b\x67\xaa\xd5\x05\xa6\x6c\x20\x9e\xf7\xc3\x7a\x1f\x0b\xa2\x10\xf9\xac\x88\xad\x08\x7a\xef\x72\x09\x97\xd3\x0f\x50\x7d\x3a\x54\xb3\xec\xf8\xe2\xb5\x99\xfb\x2e\x83\xdc\x25\x4b\xc6\xee\xca\xb7\xc9\x83\x73\xcc\x62\x9b\x11\x6b\x95\x0c\x2d\x6c\xc1\xec\x8c\xd1\xcd\xe7\x0a\xd8\xbc\xce\x00\x28\xdd\xb4\x69\x10\xdd\xe1\x22\x73\x0a\xa3\x56\x59\x20\xbc\x82\x0b\x2d\xb9\xe7\x4c\xd1\x44\x13\x87\x1d\x83\x44\x53\x88\x8c\xb3\x40\x85\x10\xd9\xde\x84\x85\x47\xa5\xa4\x6c\x36\xb6\x2b\xe9\x92\x3b\xdb\x5d\x0c\x65\x9a\xba\x34\x4d\x99\x1f\xbf\x73\x0d\xad\x36\xaa\x1b\xb2\x06\x9c\x32\x97\x56\x0a\x1a\x07\xe3\x6e\x32\x16\x60\xce\x65\xa3\x8e\x69\x6c\x96\x82\x9a\xc2\xd3\x30\xd1\x4d\xec\xee\x20\xd3\x2d\xe3\x38\x14\x57\x88\xb4\xa9\xa2\x26\x01\x0c\x22\xf5\x55\x43\x2e\xac\x6c\xcc\x81\x1d\x32\x2f\xa2\xd9\xb2\x57\x3e\xd3\xbf\x92\x4e\x8b\x5d\x77\x36\x1d\x01\x27\xc9\x04\x47\x8f\x5e\x0b\xf3\xb6\x08\x2e\x5c\xd9\x00\x2d\x57\x42\x5d\x34\x43\x5c\x7a\xa0\x11\x48\x37\xa1\xb7\xd0\x20\xf9\xd8\x61\x17\x9d\x9b\x55\xb3\x10\x69\x06\xba\xc9\x8c\xde\xe4\x36\xc4\x24\x4b\xf8\x22\x6d\xb8\xcf\xaa\x29\x84\xbb\x44\xea\x34\x65\x30\xee\xf5\x2a\xab\x30\xbd\x8d\x2f\xb3\xa5\x7c\xa4\x3d\xe0\x4a\x6d\xc0\x25\x3f\x25\x7c\x02\x26\x55\x6b\x7e\x70\x39\x36\x41\xaa\x47\xf5\x3c\x6f\x9a\xf9\x53\x3d\x91\x54\x66\x89\x56\x66\x9a\x7b\x30\x39\x27\x2f\xbb\x6f\x06\xa3\x60\xbd\x75\xb0\x7d\xb4\x76\xed\xe7\x2f\x81\x60\x7c\xe1\x24\x01\xf3\xae\xe1\x5f\x15\x2b\x9b\x49\xf6\x3b\x36\x4e\x6a\xc5\x47\x4c\xe1\x99\xdb\x5c\x2b\x5c\xf2\x67\x46\x84\x9c\xd3\xac\x54\x2f\x71\xe7\xf0\x70\x4b\xd1\xf6\x3f\x26\x18\x7a\x03\xde\xc9\xb3\x23\x83\x50\xa2\xe9\x43\x66\x38\x2a\xac\xa2\x51\x82\xa5\xa4\xd3\x45\x00\x2c\xe2\x23\x6d\x21\x7d\xab\x6c\x46\x08\x4a\x94\xd5\x31\x1a\x33\xbe\xfd\x64\xd6\xef\x9e\x55\xf8\x50\x3e\x7e\x34\x0e\x11\xdc\xf4\x7d\xb2\x8c\x22\xe3\x6e\x6a\x8b\x26\xd3\x88\x44\x6b\x20\x04\xb6\xcb\x84\x5f\x09\xfe\xd3\x6c\x46\x28\x84\x49\x3b\x6c\xab\xc8\x78\xc0\x8f\x10\x0c\x47\x95\x52\x29\x61\xf3\xb5\xe2\xe4\xec\xc2\x9a\x38\x3d\x58\x08\x60\x2a\x14\x1f\xf7\x90\xdc\x09\x64\xab\x0d\x5d\x9c\x93\x84\xec\x25\xe2\x7a\x0b\x22\xa9\x86\x33\x04\xe4\xb1\x92\x34\x8a\x32\x03\xeb\x8d\x0b\x5b\x04\x82\x37\x40\xf5\xd4\x0f\xfd\x27\x33\x50\x1b\x0b\x5e\xb7\x8b\x60\x18\x84\x55\x6e\xab\xbb\xd4\x61\xfe\x99\x16\x2c\xc9\x15\xdd\x94\xe8\xaa\xe8\xd4\xcb\x2b\x87\x48\x6a\x6f\x1c\x32\xbd\x34\xae\x4f\xa4\x4d\x78\xc7\xda\x03\xb0\x15\x07\x5a\xe6\xd3\xed\xe8\xc2\x3a\x50\x15\x47\x33\xa2\x4c\xf5\xff\x98\x3e\xd1\x38\xc7\xc9\xbb\xa2\x89\xbd\x25\x7c\xec\x69\xf5\xeb\x0f\xf9\x66\xa7\xf6\x8e\x28\xe9\xae\x84\x25\x18\x45\xbb\x39\x07\xb8\x05\x87\x71\x2c\x8d\xe0\xfa\xc5\xcb\x2d\x3b\x83\x24\xd8\x91\x59\xa8\x80\xdf\x90\x40\x65\xe6\x18\xdb\x2f\x3c\x2c\x40\x09\x10\x0b\x97\x40\x04\xcd\x1a\xbd\x3d\xd7\xab\x92\xf6\x97\x2e\x7a\x6d\x4e\xe3\xd5\x51\x15\xd4\xdd\xc9\x83\x9b\xc9\x83\x0e\x64\xf3\x00\x2f\xff\xa6\x63\x70\x98\xf7\xcf\x01\x08\x87\x4b\x57\xe2\xfe\x44\xc4\x77\x44\x26\x07\x21\x29\x2e\x6d\xc5\x6b\xc9\x8b\x47\x0e\xe5\xa8\xc0\x0c\x3a\xdc\x2d\x3a\x8c\x93\x7c\x6b\xdd\x40\x2f\x77\xc1\xae\xa7\x97\xbd\xd0\x07\x00\x7e\x62\xc8\x8b\xce\x6d\x05\x11\x38\xbc\x41\x2c\xdd\x92\xef\x61\x4d\x94\xa2\x1d\x5e\xab\xf8\xc4\xa5\xe5\x7c\x89\xed\xb5\x49\x70\xad\x37\xf7\x25\x49\x6d\xd3\xb1\xec\x43\x47\x79\x61\x2f\x8e\xa5\xc6\xe0\x83\x2e\x58\xb8\xdd\x2d\x5a\x03\xad\xe3\xb6\x6c\x9f\x87\xac\xae\xec\xdb\xee\x69\xfc\x2e\xc7\x6f\x9c\x09\x32\xa5\x9f\xb7\x12\xc5\x6f\xe0\x53\xab\x5e\xea\x65\xae\x14\x92\x03\xf7\x0c\x14\x9e\x0b\x02\x1a\xed\x4a\xdb\x62\x53\x23\x56\x64\x46\xda\xb4\xc8\x47\xb2\x40\x5c\x94\x7e\xda\x16\x04\x72\xff\x45\xef\xcc\xbe\xce\x95\xca\xe4\xe9\xc9\xc9\x8c\xaa\x79\x3e\x39\x8e\x78\x6a\xe2\xf0\xb9\x98\x99\x3f\x4e\xa8\x94\x39\x91\x27\x7f\xfc\xc3\x1f\x8a\x2d\x9e\xe0\xe8\x71\x66\x60\x75\x96\xfd\x4e\xe5\x2d\x27\x58\xee\x16\xd9\xe3\x52\xd8\x5e\x38\x95\x39\xe8\xc6\x25\x8f\xea\x6f\xa4\xc2\x69\x16\x86\x82\x9a\xb2\x71\x52\xe1\xa2\x58\x05\xe4\x25\xea\x69\xa2\x39\xce\x32\xc2\x9a\xcd\x0e\x26\xd1\x74\x07\xd6\xe3\x52\x55\xed\x08\xc9\xe7\x2c\xc1\xac\x0c\xbf\x00\x95\x97\x04\x89\x08\x53\x16\x1a\xa0\x28\x25\x0d\xd4\x68\x20\x80\x0c\xff\xdf\x2c\x15\x11\xe6\x48\x65\x51\x52\xcd\x0d\xc7\x96\x37\x75\x45\x2f\x71\xb0\x74\xd5\x92\xb2\xc5\xda\x11\xb7\x6a\xab\x92\x14\xef\x96\x4b\x8b\x6f\x5e\xd2\x46\x70\x36\x26\x9f\x35\x93\x93\xdb\x02\x76\x3d\x48\x22\x51\xff\xa7\x3b\x24\x17\x4c\xe1\xcf\xa7\xe8\x92\x32\x10\x60\xbf\xe7\xb9\x90\xe8\x1c\x2f\x8e\xf8\xf4\x28\xe5\x4c\xcd\xd1\x25\xfc\xaf\xfd\xe9\x99\x90\x47\xf4\x33\xc1\xc2\xf2\x07\x5b\x92\xce\xd7\x37\xd7\x24\x24\x72\x26\x11\x79\xd2\x27\xf4\x0f\xff\x89\x52\xd3\xf2\x29\xfa\xf6\xe4\x0f\xff\x89\x7e\x07\xff\xff\xff\x47\xbf\x6b\xd0\xf4\x37\x83\xfc\x82\xca\xc5\xb7\x65\x77\x6e\xaf\xb2\x52\x5b\x54\x73\x3f\x13\xbc\xd8\xa9\xda\x96\x1f\x69\xf4\xc8\xa7\xd3\xb1\x26\x0c\x93\xc8\x37\xc6\x62\x09\x2e\x7a\x4b\xfc\x54\x6a\x6b\x4f\x9b\x4a\x76\x45\x0d\x19\xdb\xa9\x41\x7c\x70\xec\x5a\xe6\x45\xe5\x5d\x08\x22\x2a\x55\x33\xa6\x12\xbe\x22\xb1\xe6\xaa\x9b\x9c\x0e\x67\xdd\x73\xc9\xdf\xce\x82\x13\x22\xa4\x84\xf5\xd4\x7d\xe0\x5f\x18\xc5\x6a\x02\x7d\xec\x42\xd6\x1e\x87\xa5\xf0\xda\x2f\x26\x66\x12\xa6\xf6\x56\xf1\x92\x72\xa9\xf3\xf5\xa1\x92\x77\x5c\xec\xa4\x6f\x3d\x92\xc6\x54\x86\x35\xf5\x92\x5c\x0d\xdf\xb0\xb2\x3f\x64\x88\x73\xe1\x71\x8c\x8d\x5d\xc4\x56\x55\x5c\x6f\xc5\xa4\xc2\x04\x97\xb5\x3b\xf4\x7a\xea\xe7\xfe\x93\x75\xc3\x84\x48\x33\xf7\x76\x51\x2f\x0e\x46\xab\x45\x24\xcd\x12\x6b\x46\x5c\x03\x76\xb8\x6e\x43\xef\x3c\xbe\x05\x34\x0e\x61\x8f\x90\xbf\xc1\x9c\x64\x6b\x01\x04\xea\xf7\x33\x17\x11\x39\xe3\xbb\x85\xbd\x26\x94\x2d\xc5\xcb\xb7\x2f\x45\xe4\x57\xef\xc2\x16\x9d\x72\x78\xc0\x3c\x2e\x94\x05\xe3\x16\xb0\x55\x28\x02\x20\xd2\xf2\x6c\x00\xd0\x6e\x1f\x58\x97\x4b\xb5\x11\x76\xe0\xda\xc6\x70\x5c\x30\x3c\x57\x5a\xa3\x52\x51\x43\x60\xcd\x0b\x57\xc4\xae\x41\x50\xd1\xce\xe3\x08\xaa\xc4\x14\x91\x4a\x95\x6a\xec\xd8\x94\x4a\x11\x5b\x62\x95\x9a\x82\x4d\x3d\x24\x30\x04\x65\xaa\xb9\x6e\x4f\x12\x71\x34\xc5\x11\x65\xb3\x5e\x00\x53\x09\x90\x11\xe1\x75\x50\x47\xa4\xf7\x58\x3e\xee\x37\xd0\x70\xe7\x02\x96\x34\x2e\x8a\xa8\x59\x60\x19\xe3\xd8\xa0\x4b\x18\x7d\x0a\xcb\xc7\x26\x64\xa5\x25\x58\xb7\x15\xa3\xf3\x4b\xe1\xc0\xe0\x56\x8d\xcf\xa5\xa0\x93\x50\x9f\x82\x9a\x0d\xae\xa4\xb2\x05\x79\x74\x19\x7f\xd8\xa3\xb0\x54\xd1\x4d\x57\x8c\x5f\xce\xb9\x50\xe3\x2d\x71\x61\xab\x69\xf4\x8c\x1c\x25\x00\xe8\xc2\x9f\x88\x78\xa2\xe4\xb9\x0c\xaf\xba\x09\x2d\x1a\xa3\x59\x10\x55\x07\xf8\x9b\x69\xc6\x21\x85\x66\x8a\x52\xcc\x16\x86\x51\x6a\xe6\x82\xe5\xa3\xf4\x85\x5c\x91\x4c\x71\x92\xf4\x90\x20\xb9\x34\x05\x8e\x25\x49\xa6\x47\xae\x14\x46\x8c\x12\x3e\xa3\x11\x4e\xd0\x24\xe1\xd1\xa3\x34\x19\x6e\x6c\x66\x98\x54\x26\x78\x44\xa4\x0c\x24\xab\x22\x9b\xdd\xe6\x18\x42\x15\x57\x45\x44\x4a\x19\x95\x8a\x46\x4e\x64\x2a\x40\x29\x4c\x2d\xf1\x08\x83\x49\x18\x32\x36\x61\xb8\x5a\xd2\x23\x06\x9c\x33\x67\xb6\x68\x12\x5c\xd7\x16\x73\xcf\x05\x89\x37\x1d\xa0\x3d\x40\x08\x3a\x0a\x19\xab\xf2\x81\x5c\x73\xa4\xce\xec\x67\x70\x8c\x57\x91\xc0\x6d\xf9\x44\x79\x82\xf4\x27\xad\x04\x6b\x04\x31\xe5\x3e\x04\xbe\x24\xb9\xf8\xc8\xf0\x03\x43\x34\x83\x21\x37\xe0\x98\xad\xa3\x69\xbd\x8a\x20\xf2\x40\x9d\xae\xaa\xd7\x9c\xb2\x28\xc9\x63\x5f\xa9\x51\x8b\x00\x4f\x9a\x48\xdc\xf2\xe8\xb5\xd7\x82\x42\x0f\x61\x89\x9e\x49\x92\xe8\xff\x9a\x08\xf8\x23\x5f\x38\x41\xb3\x64\x53\xdc\x02\x3a\x71\x5c\xba\x89\xa2\x0e\x0e\x9d\xf2\x06\xab\xb9\xc9\xf9\x4f\xb9\x32\x45\x32\x0d\x3a\xa5\xb3\x6f\x19\x38\xc3\x49\xc2\x27\x70\xd2\x01\xb8\xd2\xe5\xb9\x06\x69\x75\x79\x14\x11\x12\x93\x18\x7d\x1d\x1c\x5c\x8f\x47\xf1\x4d\x3d\x8c\x62\x69\x45\x0e\x00\xb4\xb2\x6a\x58\x6b\x84\xae\x2c\xd7\x79\x3b\x46\x37\x15\x60\x96\xb0\x7e\x3b\xae\xc2\x74\xf5\x96\xb6\xf0\x6d\x80\x2e\x2b\x93\x78\xb9\x1d\xda\x10\xe8\xb2\xd4\xe7\x1e\x80\x2e\x2b\xf3\x6c\x88\xdd\xe7\xb3\x17\xcd\x39\xd6\x93\xba\xe0\xed\x13\xc1\x0c\x40\x98\xb9\x3b\x4b\x24\xe8\x0e\xe4\xa2\x8e\x10\x0f\x0b\xc4\xb3\x52\x0d\xf1\x6d\x41\x3c\x2b\x83\x39\x64\x10\xcf\xca\x50\x0f\x17\xc4\xb3\x66\xa0\x2d\x40\x3c\x8d\x73\x7f\xac\x89\xba\x1d\x53\x80\xc4\x96\x49\x3e\xbd\x83\x54\xef\x95\x63\x3c\x33\x81\x03\xe6\x1a\x73\x77\xb4\xc5\xb4\x86\xd1\xda\x1c\xc8\xa6\x70\xa8\x8a\x13\x62\x53\xda\xf3\xde\x37\x03\xfe\xb0\xa9\xd9\xbd\x17\x5a\xbb\xc1\x0e\x19\xe1\xcc\xe6\x94\x37\x95\x9a\x39\x9c\xec\xd9\xed\xf0\x51\x01\x83\xb0\xc4\xf2\x5b\x21\x88\x5d\x56\xaa\x36\xcc\xf9\xb3\xad\x9c\x04\x64\x68\x88\xb2\x91\x04\xa1\xd3\xb1\x55\xda\x9a\x56\x8e\x32\x45\x66\x55\x9d\xb6\x38\x34\x94\xa9\x3f\xfd\x71\x2d\x27\x32\x10\x8b\x4e\x3d\x0c\x6a\x27\x78\x67\x87\x7d\x46\x62\x14\xcd\xb5\x56\x24\xb5\xfa\xa2\xa7\x63\x6e\x56\x89\x52\x4c\x9d\x22\x95\x4b\xe3\x5a\xa2\x72\xc4\x4a\x98\xa4\xc7\xe8\x23\x14\x84\xc5\x69\xa6\xf5\x2f\x3f\x3f\xaa\x29\x69\x94\x7f\xfb\xed\x9f\x08\xfa\x16\xa5\x04\xb3\x92\x0e\x0b\x6a\x93\xbe\xfa\x00\xc3\x4f\xcd\xc9\x88\xd5\x6e\x05\x1a\x7c\x36\x35\xa6\x5c\xbc\xdf\x90\x4d\xb9\xd3\x89\xa1\xd0\x21\x8e\xe6\x48\xe6\x13\x53\xa9\x37\xb0\x61\x38\x41\xfa\x82\xcf\xc0\x51\x0d\x37\xb2\x1b\xf4\xaa\x53\xf8\xb2\x31\x00\xd6\xdd\xd8\xf6\x36\xee\xc3\x3d\x72\x24\x49\x09\xdb\xa9\xc6\x69\x66\x38\x5f\x78\xf0\xa5\xc1\x7d\xe9\x19\x1f\x82\xd6\xcf\xb0\xb5\xec\x6b\x59\x1a\xc2\x79\xc1\x4b\x96\x27\x58\xd8\xa3\x3f\x62\x5a\xd1\x10\xe4\x89\xf2\x5c\x26\x0b\x14\x73\x46\x7a\x40\x09\x79\x34\x37\x8e\x55\xad\xb3\x60\x5b\xb0\xe2\x89\xca\x5c\x2b\xb4\xd0\x96\xab\x8f\x21\x15\x36\x98\x54\x73\x0a\xfd\x68\xf5\x9b\xc0\x57\x61\x96\x1c\x6a\xa7\x45\x85\xb0\xb1\x15\x9e\xdf\x12\x36\xb6\x44\x55\x1d\x6c\xac\x87\x8d\x5d\x5e\x97\x43\x84\x8d\xad\xec\x79\x3b\xd8\xd8\xba\x2d\xdf\x02\x36\xb6\xd4\xcc\x17\x03\x1b\x5b\x59\xd1\x2f\x06\x36\xb6\x32\xaf\x0e\x36\xf6\xcb\x83\x8d\xdd\x11\x18\xb5\x9e\x17\x1b\x7c\x25\x45\xd9\x62\x63\x22\xfb\x4a\xa2\xe1\xb5\x26\xb0\xe8\xb1\x1c\xd4\xe6\xaf\xab\xdd\xc1\x58\xeb\x99\xd0\x66\x60\xac\xb5\xaa\x7a\x33\xab\xdb\x15\xe0\x09\x14\x83\x57\x06\x63\x2d\x4d\xa0\x8b\xaf\xdc\x3c\xbe\xb2\x96\xf8\x6c\xdf\x7a\x78\x2e\xe8\xb2\x7a\x21\xb7\x84\x63\x2d\xed\x4f\xab\x48\x4c\x10\xdd\xf7\x40\x89\x2f\x2b\xcd\xdf\x97\x0e\xf9\x5a\x59\x3e\x5c\x45\x69\x81\xa1\xb5\x84\xe7\xd0\xe2\x8c\x12\x1e\xfa\xff\x3b\xca\xdd\x22\x32\xb8\xb2\xbc\xde\xaf\x62\x68\xb1\x05\xa9\xb6\xa6\x50\xa7\x95\xee\x27\x51\xd6\x25\x4f\x6e\xe8\x62\x76\x83\xb8\xcb\x48\xd4\x60\x63\xa6\x29\xdd\x57\xb3\xeb\x2e\x32\x8f\x85\x05\x0a\xf9\x52\x5e\xa8\xbe\x9e\xcc\x70\x8c\x8c\x5f\x49\x87\x05\xa0\x0e\xf3\xe5\x8c\x4a\x25\x1a\x63\x9b\x96\x46\xb8\x8b\xab\x34\xcb\x5b\x07\xc4\x04\xab\x3a\xdb\xee\xb3\x94\xa4\x5c\xac\x0b\xac\xaa\xfd\xd2\x96\xba\xd9\xe6\x53\x92\xcd\x49\xaa\x25\x99\xf1\xa6\x8d\xb4\xdd\x6f\x9f\x34\x6c\x73\xd7\x4c\xa0\x63\x89\x08\x02\x47\xa8\x7e\x37\x36\x88\x94\xad\xb7\x7b\xd7\x6d\xb6\x98\x99\x1b\x3a\x84\x1c\x98\xf2\x6a\x83\x9b\x7d\xa9\xe4\xee\x06\xfa\xae\x8d\xe9\xf0\x21\x35\xeb\xa3\x36\x56\xc4\x6b\xac\xc2\x9d\x2a\xbe\xb2\x85\xa0\x37\x70\xe5\x97\xbd\xf3\x9a\x13\x86\x55\x80\x37\x0f\xf0\x68\x40\x4d\x5d\x5e\x1e\x88\xcc\x91\x44\x1c\x85\x9a\x41\x69\x30\xcb\xeb\x55\xa2\x12\xa7\x51\xee\x40\x24\xb9\x68\x8c\x32\x6d\x63\xd0\x8e\x54\x8e\x13\xd0\x24\xc2\xea\x95\xd5\x4d\x9d\x2c\x6a\xd2\x1e\xdb\x79\x4c\x28\x53\x7f\xfe\x8f\x8d\x76\x53\xab\x56\x76\xdd\xa0\xe2\x16\x8e\x22\x22\x8d\x8d\xdd\x46\x21\xe3\x09\x7f\x82\x62\x5b\xbb\xec\xaa\x3e\xca\x7a\xde\x9a\xc1\x7b\x28\xe2\xb8\x20\x75\x23\x2e\xcc\x05\xcf\x67\x73\x67\x43\xd2\x67\x46\x4f\xad\x6e\x2f\x7f\x5c\xb2\x91\x6f\xbc\x97\xdf\xe5\x34\xd9\xce\x42\x77\x57\x2a\x43\xf6\x69\x78\x8f\xe4\xdc\x9f\xd6\x09\x34\x5b\xbb\xb1\xcb\x83\x6e\xdf\xa7\xfd\xd6\xfb\x6b\xa0\x9b\x9e\x83\xdf\x9c\xf2\x24\x01\x4f\x83\x24\xe9\x13\x11\xf5\xdd\xc3\x84\xef\xe9\x66\xc8\x79\x7e\x00\xf0\x75\x91\x18\xd1\x4a\xfe\xba\x31\xa2\xa1\x44\x6e\xf4\xd5\xa0\x05\x13\xaa\xc6\x19\x61\x75\x36\xb6\x9f\x96\x2b\xc0\xbc\xb3\x80\x41\x17\x3d\xb6\xb7\xa0\x41\xb7\x24\xaf\x1c\x38\xb8\x66\x1e\x87\x1a\x3c\x58\x61\x76\x3e\x96\xaf\xb8\x66\x5c\xe0\x90\x51\x7c\xfa\x7a\x89\x47\xac\x5f\xca\xa7\x70\x95\xb2\x27\x8b\x22\x20\xdb\xe8\x10\x21\x33\x83\x3a\x1b\xd6\xb0\x02\x6e\x34\xfd\x17\x68\x3a\x06\xbc\xd6\x84\x14\xba\xb0\x41\x88\x26\x27\xf1\x11\x8e\x16\x51\x42\xa3\x40\x67\x9e\x09\x9c\xcd\xeb\x38\x9e\xdb\xf9\x0e\x75\xe7\xad\x50\x77\x9a\x0a\x52\x6d\x12\xb7\xed\xe8\x8a\xe1\x94\x74\x68\x40\x75\x68\x40\x3d\x8f\x77\xc1\x8a\xd2\x5a\x6f\x08\xa3\xb0\x7c\xee\x3a\x48\xa0\x37\x80\x04\xda\xe6\xf0\x15\x78\x3f\xa5\x63\xd7\xc1\x14\x7d\x68\x05\x53\xe4\x2f\xc1\x83\x42\x9e\x69\x3e\x8f\x6f\x8c\x68\xb2\x3c\xb0\xb7\x84\x25\xaa\x11\x17\x36\x91\x9b\x56\xe1\x12\xad\xa2\x8b\x56\xeb\xf2\xb6\x28\x41\x9b\xad\xcc\x46\x00\x40\xb5\x77\xd7\x81\xc0\x01\x35\x6f\xc3\x81\x9c\x9b\x7d\x66\xb5\x6c\x56\x3b\x34\xcc\x6c\xd9\x44\xc1\xda\x2c\xc9\xc5\xd3\xc3\xfb\x4a\x74\x29\x8a\xac\x6d\x97\xec\xd2\x77\x3e\x68\x22\xd0\x9c\x27\xb1\x03\xa1\xf0\xab\xe5\x3b\xf0\x99\x00\x7e\x81\xdc\x66\x40\xb1\x73\xd0\xb6\x8a\x82\x60\xab\x52\x5a\xfc\x26\xc2\x70\xf7\xc0\x68\xf6\x61\x45\xf0\x9c\x64\x1b\xfb\xc1\x5a\x59\x44\x96\xcd\xdf\x2b\xc6\x58\x5a\x21\xb0\x9a\xd7\x0f\x73\xad\xdd\x77\xcd\xe0\x56\x89\x1e\x81\x71\x50\xd4\x95\xfa\x34\x74\x06\x4f\x9f\xa8\x33\x44\xe0\xb0\xc7\x95\x5e\x3a\x37\xbb\x56\x9e\xba\x2a\xb1\x6c\x11\x0c\xb6\x54\xb9\x6d\x77\x70\xa0\x14\x7f\x1e\x67\x58\xe0\x24\x21\x09\x95\xe9\x8b\x05\x03\x9f\x95\xdd\xb5\xfa\xac\x0a\x6e\x4c\x44\x2c\x4f\x27\x86\x14\xdd\x40\x6c\xb1\x3f\xc5\x91\xc8\x59\x08\x6d\xe6\x37\xc6\x17\x13\xcc\xe1\x5e\x00\xab\x52\x34\x87\xaa\xad\x53\x4c\x05\x23\xb2\xb1\x46\x26\x89\x72\x41\xd5\x62\x6c\x4b\x8e\xb6\x3f\x70\x77\xf6\xcb\x33\xfb\xe1\x6a\x0f\xb7\xcb\xea\x77\xfd\xf9\x12\xa7\x19\x11\x50\x26\xc8\x15\xbc\x09\xca\xaa\x5a\xd4\x06\xe2\x6b\x0d\x41\xf8\xf3\xd2\xb5\xdd\x14\x38\x8c\x9f\xc7\x41\x46\xd5\x38\xaa\x12\xc7\xba\xc3\x5a\x87\x3b\xb5\x6a\x92\x2f\x8c\xbc\xd4\xe0\x45\x7e\x81\x2a\x23\x36\x6d\xc2\x34\xad\x07\x1c\xb8\x82\xc1\x5e\x59\x6c\x4c\x90\xf2\x6e\x95\xaa\x86\x71\x5a\xac\x9f\xba\xe0\xa3\x15\x83\xed\x07\x5f\xb5\x18\x71\xd0\xc9\x9e\x86\xad\x0f\xba\x10\x79\xa6\xe8\x64\x19\xda\x46\xed\xaf\x84\x68\x3f\x81\x34\x6b\xe7\x66\x28\x75\x6b\xea\x8a\x96\x38\xb1\x9d\x9d\x96\xff\x2d\x8e\x98\x43\x08\x32\x08\x4b\x61\x1e\xdf\x75\x4a\x95\x72\x89\x02\xc6\x00\xad\xa9\xb3\x6c\x9b\xfd\xca\x85\x7b\x60\xa8\xf4\x6a\x4c\x44\xc7\x23\xd6\x97\xe8\x99\x20\x46\x2c\x84\x44\x4d\x0d\x57\x6f\xd5\x86\xda\x4f\x13\xa2\x7b\xf2\xb1\x29\x5a\x78\xa0\x4a\xfa\xf2\x63\xa6\x8f\x29\x4e\x24\xe9\xe9\x86\xa1\x6a\xa9\xe2\x10\xfc\x89\xd1\xb3\xc0\x59\x46\xc4\x88\xd9\x2c\x0e\x70\xb8\x70\x9e\x98\xf6\x9b\x42\x5c\xed\x1a\x90\x71\x84\xa3\xf9\x2b\xed\x11\x86\x64\x9c\x68\x4e\x62\x97\x2f\x5c\xde\x1e\x37\x6f\x63\xb0\xde\x60\xb3\x86\x53\x57\x3e\xab\x67\x3b\x49\x22\xcd\x51\x7c\x99\xe9\x8c\x08\x3d\x6a\x4d\xc3\x4f\x84\x21\x3a\x75\xe3\xb0\xb1\x3b\xe8\x19\x3c\x53\x9a\xf4\x9f\x30\x4d\x4c\x02\xbe\xeb\xda\x09\x81\xc6\xfc\x3e\x62\xc6\xdd\xcd\xa2\x52\x86\x2a\x65\x54\xce\x35\xa7\xce\xc1\x27\x09\x6a\x46\x53\xe2\x0c\x7b\xda\xe4\x34\x0f\xf4\xeb\xab\x39\xe8\x13\x15\x9c\xa5\x90\x24\x63\x71\x99\xdc\xf2\x49\xa2\xfc\xf1\xa8\x4d\x71\x5c\x2b\x11\xc7\xb1\x2c\x1b\x3f\x8d\x5a\x49\x7f\x2d\x99\x5d\x8e\x4a\x59\x81\x51\x00\x2b\x04\x41\x9c\xae\xb2\xd8\x2a\xf9\xb7\x4b\x6d\x58\x4e\x6d\xa8\x5f\x9b\x43\x4c\x6f\xf0\x87\x78\xd3\x14\x87\xa6\xed\xdf\x87\x64\xbb\xc7\x54\x87\x37\xce\x09\x78\x99\x74\x80\xb7\xcd\xdf\x78\x89\xd4\x8d\x2e\xc1\xe1\x0d\x13\x1c\x5a\x5b\x6a\xcb\xb1\xd9\xcd\xc7\x76\xa3\xe4\x80\x35\x60\x4e\x75\xbd\x5c\x12\x25\x68\x24\xf7\xc1\x1f\x64\x86\x5b\x46\xb5\x81\x16\x98\xad\x91\x9a\xf4\x0b\xde\x09\x09\x71\x62\xbe\xce\xdf\x44\x10\xfc\x18\xf3\xe7\x25\x5b\x9d\x0c\xd1\x34\x2e\xb9\x16\x7b\x04\x89\xa8\x24\xa5\x48\x16\x2a\x11\x23\xd2\x1a\x3b\xf1\x88\xcd\x29\x11\x58\x44\x73\xc8\x6e\x2c\x36\xc6\x64\xc9\x1a\x40\x23\x13\xcb\x10\x7a\x9b\x36\xd8\xf4\x16\xeb\x5e\xb5\x30\x79\x7c\x3a\xbb\xe7\x7a\x24\xa9\xf9\xc4\x0b\x33\x56\xca\x08\x4d\x72\xad\xb6\x7f\xd7\x40\x7c\xbf\xd8\x2f\x1a\x8c\xef\x83\x89\x82\x2f\x5a\x06\xe4\x17\xd4\xd0\x05\xe5\xbf\x50\x50\x7e\xcd\x12\x6f\x16\x98\xbf\x95\xc9\xef\xf5\x63\x86\x5d\xcf\xaf\x11\x37\xbc\x2e\x68\x2b\x9f\x8c\x5f\xfc\xe8\xd5\xce\xb9\xed\x09\xfc\xc9\x13\x85\x91\x88\x85\xa6\xb3\x09\x89\x63\xe0\xb4\x8a\xdb\x4a\xd1\x05\xed\x38\xf3\x80\xbe\x7b\xb1\xd4\xc4\x8e\x13\xce\x66\x92\xc6\x06\x6c\x25\xc3\x50\xb1\x35\x34\x5e\x00\xb8\x00\xec\x6f\x92\x10\xe1\xbc\x12\x02\x7d\x2d\x29\xb3\x68\x8a\xfe\xb7\x98\x13\xc9\xbe\x52\xc6\x58\x80\xd9\x02\x3d\x32\xfe\x9c\x90\x78\x06\x3b\x54\x1d\xcc\x11\xa2\xa4\x87\xa8\xf2\x9f\x09\x40\x23\xe0\xb9\x1a\xe9\xb1\x43\xac\x99\xd1\x00\x88\xfd\x36\xa8\x89\xee\x9b\xf9\xe6\x18\xa1\x21\x43\x53\x1c\xa9\x1e\x92\xf9\xa4\x68\x3f\xe6\xa6\xc8\xb5\xd6\xbe\x83\x89\x17\x8d\x74\x31\xe3\x35\x9d\xd7\x9f\x0d\xc7\x1d\x34\xb9\xf6\x13\x8a\x77\x8a\xad\x7b\xc2\xbb\x40\x8c\x5e\xe6\xd2\x06\x61\x20\xce\xfc\xd1\xb7\xf0\x4a\x1e\x23\x1a\xf0\x3e\x0d\xde\x32\xe3\x71\xa3\xad\xb3\x32\x95\x4d\xc7\x52\x04\x42\x5a\x41\xc9\x3a\xaa\xa0\x5d\xb3\xdc\x5a\x6a\x92\x4a\x10\x9c\x5a\xe7\x80\xbe\x6a\x40\xac\x31\x61\x90\x7a\xf4\x54\x18\x09\x73\x93\x2d\xbe\xa0\xec\x51\xef\x6e\x81\x8a\x0d\xf5\xe5\xa1\xe7\xba\x4d\xcb\xf4\x8d\x47\xce\x38\x33\x0e\xc2\x9d\xe4\x4e\x3a\x63\x38\xd9\xd0\xc6\xb1\xb4\x72\xcb\x3e\x3d\x27\x67\x59\x71\x41\x4b\x11\xc6\xd8\x87\x4c\x8f\x1b\xd9\x90\x2a\xf3\x0d\xe5\x3d\x8c\x62\x92\x11\x16\x13\x16\x2d\x80\x44\x18\x20\xe7\x08\x86\x13\x84\xe1\x3b\x9c\x1c\xa3\x73\x93\x5f\xe3\x25\x3c\x7b\xad\xc3\x85\x9e\x62\x46\xa7\x5a\x4f\x00\x23\xac\x1d\xe5\x88\x99\x61\x3a\x1f\x48\x50\xb4\xdf\xaf\x58\xdd\xce\xe8\x1b\xe4\x6a\x47\x54\x62\x56\xfe\x1e\xad\xbe\x70\xa0\xb7\x55\xbb\xa3\x9b\x73\x35\x08\x64\x3e\x39\x82\x7f\x97\x12\xce\x1c\x50\x4f\x81\x22\x43\x12\x02\xe6\x40\xeb\xf1\x82\x8b\xb1\x09\x58\x6e\x1f\x7e\xbb\x35\x79\x1c\x41\x1f\x25\xa5\x26\xa5\x8c\xa6\x79\x1a\x38\xef\x4c\xc5\x82\xc8\xda\x2f\x4d\x26\x46\xa6\xf5\x80\xc8\x81\x97\x23\x7d\xb9\xb2\x05\x9a\xd1\x27\xc2\x46\x2c\xe3\x94\xa9\x63\x74\xc5\x15\x09\x4a\x44\x18\xe8\x28\x9e\x29\x9a\x1a\xb4\x53\x41\xf4\x39\x30\xa0\xd8\x00\x34\x39\xc7\xaa\x87\xe2\x1c\x8e\x2a\x23\x4a\xb3\x0e\x7d\xe3\x2a\xd8\x19\x88\x8f\x16\x23\x66\x6e\xba\x29\xa6\x49\x2e\x88\x95\x59\xb1\xc9\x8b\x29\x86\x5c\x8c\xcc\x22\xa1\x05\x93\x48\xe9\x6c\xae\xf4\x16\x69\x19\xcf\xfa\x1b\xe7\x9a\x1b\xf1\x11\x9b\x10\x84\x51\xc6\x25\x55\xf4\xc9\xfb\x2f\xe9\x14\x61\x29\xc1\x82\x72\x8c\xce\x4b\xf6\x7f\x2a\x41\xf5\x6e\x8a\xab\xa5\x6c\x6c\x6d\xcf\xcd\xf9\x38\x3b\x6f\x64\xa9\x17\xbb\xca\x78\x22\x79\x92\xab\xd0\x05\x5b\xbf\xb7\x85\x69\xdc\x01\xf7\x83\x81\x98\x4f\x47\xcc\xd1\xb5\x3c\x46\x7d\x89\x24\xd7\xbb\x24\xcd\x56\x46\x82\x2a\x22\xa8\x41\x71\x22\xca\x6c\x82\x3f\xa7\xfe\x0c\xa4\x58\x3c\x6a\x11\x2a\xb4\xc0\x1b\x4c\xd1\x92\xb5\x63\x62\x24\x24\x80\xb5\x0a\xb7\x03\x4c\xff\x88\x71\x76\xc4\xc8\x0c\xaf\xdb\x91\x11\x2b\x6d\x09\xfa\x9a\x4e\x0b\x85\xb4\xc9\xe7\x18\xac\xdd\x18\x22\x9f\x9a\x76\xc9\x74\xdc\xb4\x49\xd3\x84\xe3\x35\x6e\xe3\x69\x71\xe8\xd1\xdf\xf9\xc4\x8c\x51\xeb\xfd\x5c\x81\x14\xa8\xd5\xab\x29\x17\x64\x8e\x59\xdc\x73\x9b\x55\x1e\x1b\xdc\x8c\xd6\xd4\xe6\x94\x31\x90\x04\x1d\x88\x30\x31\x58\x4c\x98\x05\x7b\x61\x15\x37\xbb\x15\xc5\x3e\x6c\x74\x57\xf8\xd6\xa0\xf6\x89\x31\x40\x18\x96\xb7\xc8\xec\x11\x97\x34\xcd\x92\x22\xa7\x29\xb0\x8d\x4e\xb5\x88\xe5\x78\x24\x7f\x02\xd3\x95\xd3\xda\xe0\x56\xb7\x3b\xa7\xe9\xac\x66\xe4\x9e\x91\xc2\xad\xe1\x6c\x5e\xa6\x0c\x66\xc0\xc2\xbe\x96\x44\xff\x53\x91\x42\xed\x33\xc2\xfa\x88\x39\x11\xe4\x1b\xe0\x32\xb6\xd9\xc0\x78\xa6\x45\x68\x03\xf3\x6a\xd7\x0f\x45\xc6\xc9\x5d\x3a\x27\xf6\x30\xb8\x57\x6b\x2e\xaa\xef\x28\xc3\xa5\xcc\xdb\x2d\x04\xbf\x24\xdf\x28\xb9\x2a\x70\xfb\x2d\x9a\x6a\x9a\x28\xbc\xae\xcc\xc8\x06\x94\x60\xf6\x99\x20\xdd\x9d\xa5\x66\x57\xf1\x06\x43\x44\xc0\x9c\x24\x19\x8a\xe9\x14\xcc\x52\x0a\xd8\xb7\x07\x16\x33\x58\xf0\xfa\xb0\xa7\x39\x33\x20\x71\xc6\x23\xf2\x6c\xf1\xb6\xed\xd5\x58\x34\x7e\x3c\x62\x43\xf5\x95\xd4\x22\x3a\x67\x33\x7d\xd1\xc4\x4f\x54\x16\x45\x4e\x22\xce\x64\x9e\x12\x61\xbb\xd0\x37\xb2\xa6\x48\x5b\x20\x00\x3b\x19\x4a\x8f\x4d\xef\xfd\x13\x4e\x68\xec\x0a\xf1\xe8\x1f\xcd\x99\xd3\xa3\x94\xce\xa3\x58\x13\x12\x66\x37\x37\xd6\x6b\xf5\x66\x62\xfd\x8f\xa1\xe4\x8e\xd2\x42\xc8\xc7\xd6\x56\x7f\x52\x15\xf1\xed\xaa\xaf\x10\xef\x27\x4b\x93\x42\xab\x05\x23\xbb\x0a\xe7\xeb\x50\x0c\x1d\xa2\x6e\x6e\x42\x80\x75\x3f\xce\xe8\x63\x06\xb7\x11\xfb\xa9\x4c\xd0\x8e\xda\x70\x96\x50\xbc\x27\x14\x64\x03\xa9\xb0\x16\x2f\xcc\x75\xc0\x85\xd5\x70\xec\x9d\xd3\xbc\xb5\xe7\x3b\x96\x89\x90\x11\x4e\x96\x77\x78\x85\xbd\xd9\xbc\xbf\x5a\x09\xb0\xc7\xcd\xb4\xbd\x32\xe9\x37\xe2\x49\xb2\x49\x09\x93\xca\xcc\xcf\x8a\xcf\x57\x8f\xa8\xe8\x47\x6f\x80\xdb\x0b\x38\x35\xe6\xf2\xc6\x89\x35\xa5\x48\x65\x77\x29\x7c\xc9\xa8\x61\x0b\xcb\x5a\x47\x8c\x4f\xa1\xc8\x4d\xd2\x14\xd5\x95\x09\x9e\xd2\x4d\x50\x96\x4d\xa0\xd3\xad\xb3\x8b\xaf\xb1\x32\x38\xeb\x39\x88\xa6\x86\xbc\x6c\x8f\x90\xaf\x87\xad\xb8\xb9\xe2\x0c\xa5\x38\xdb\x6a\xc1\xd7\x79\x85\xfa\x28\x35\x2e\x39\xbb\x7a\x80\xb7\x48\xa0\x5e\x0c\x2c\xf2\x33\x5e\x14\xa9\xd1\x4d\xf8\xb9\x6c\x23\x72\x78\xd0\xaf\x0f\xd9\x94\x6f\x70\x38\x8b\x54\x66\x7b\xfa\xb0\xa3\xd9\xe0\xfc\x79\x2f\x85\xd9\x7d\xb3\xa6\x6d\xce\xe3\x59\x1d\x51\x6f\x7c\x32\xdd\x0a\xbe\xa4\x8d\x32\x64\x22\xa1\x79\x72\x93\xbb\xb5\x7c\xb4\x82\x16\x11\x0c\x67\xf5\x52\x5d\x96\xe8\x70\xef\x6b\x54\x69\x07\x19\x53\xb8\x0b\xa6\xbe\xa9\x6f\xf5\x15\xd6\xcc\x1e\x92\x56\x8b\xb5\x23\x76\xc3\x66\x38\xc0\xae\x47\x8f\xfa\x5b\x7f\x42\xd7\x16\x39\x68\xbf\x18\xc0\xcd\xa4\xb5\x73\x15\x91\x99\x36\x45\x6d\x4a\x13\x2d\x62\x0f\x6b\x0c\x9c\x2e\x41\xcc\x07\x54\x99\x50\x79\x27\x3d\xe5\x82\x06\x85\x41\x9d\x8c\x84\x28\x14\x28\x09\x9d\x3c\x81\x42\x0f\xa6\xc5\x39\x7f\x36\xd1\xe9\x82\x6a\x9e\x65\x84\x55\x05\xe6\x1e\xcd\x0b\xa8\xb5\x96\x18\x63\x93\xff\x80\x9b\x98\x41\x6c\x6b\x1f\x17\xa3\x6a\xd8\xd2\x7d\x94\x78\x6a\x9f\x7f\xe7\x7a\xbd\xd7\x5f\x2c\xef\x4d\xed\x08\xef\xcb\xad\x6f\x3c\x3a\x2f\xe5\x6f\x1e\x30\xf5\x11\x3e\x75\x4a\x0f\x46\x53\x41\xc0\xc1\x9f\x7a\x4c\x0d\x03\xaa\xcb\x39\xdc\x77\x77\xe7\x3f\x9c\x3c\x0c\x11\x51\x11\x4a\xe8\x23\x19\xb1\x48\x3e\xf5\xb4\x78\xfc\x8f\x9c\x28\xfd\x73\x83\x47\x80\xa6\x84\x49\xe0\x04\x54\x2d\x61\x0f\xd5\x2f\xa4\x5b\x18\xfd\xdf\xf3\xf2\xf7\x2b\x48\x7e\x29\x7d\x18\x68\xd7\xd5\xbb\x01\x32\x85\x92\x1e\x66\x69\x65\x0d\xc5\x18\x5b\xe4\xa0\xae\x1a\xe6\x16\xe9\x42\xec\xef\x39\xdb\x50\xe8\x3a\x2b\x3e\x0a\x46\xd1\x20\xd3\xa5\x19\x06\xac\xeb\xcd\xf2\x90\xcc\x37\xb5\xad\xaf\x63\x22\x45\x5a\xb6\xb3\x2d\x17\x85\x43\x91\x12\x84\x00\x0b\xf1\xf4\x64\xef\x7a\x8b\xc4\xe1\x27\x16\x7c\x74\x3c\x62\x97\xce\xe3\x5c\xfc\x2a\x0b\x3d\x3c\x9d\x04\x10\xe0\xe5\x56\xa0\xd9\x98\x4a\xff\x03\x14\x74\x91\x79\xa2\x4c\x45\xbb\x29\x65\x38\xf1\x03\x35\x4f\xea\xb8\x84\xc0\x2c\x9a\xef\x6a\x42\xa6\xd3\x31\x49\x36\x91\x44\x87\xd3\x41\x22\x35\x7d\x47\x8f\x0d\xa7\x73\x9b\x9a\x8d\xc5\x64\x6c\x25\x5a\x53\xf7\x09\x15\x26\x68\x9c\x98\x8a\x72\x04\x81\x8f\xb2\x9a\x3d\x66\x00\x22\xf4\x2e\x5a\x49\xdd\xb8\x28\x4d\xda\x86\x0f\xc9\x86\x5e\x10\x56\x23\x26\x72\x06\xc5\x26\x7c\xc4\x02\x46\x05\x5e\x78\xe4\xfc\x07\xd6\x9b\x33\xd3\x6c\xc2\xc0\x71\x9b\x97\xb5\x7e\xc6\x73\x09\xb6\x9a\x94\x28\x7d\x41\x7d\x0d\x75\x60\x4d\xc8\x50\x0f\x65\x82\xa6\x60\x6e\x95\xdf\xd4\x6c\xdd\x19\x56\x38\xe1\xb3\xbe\x50\x74\x8a\x23\x75\x8f\x77\xd2\xc0\xb1\x6d\x66\xdb\xf0\x53\x37\x0c\x34\x3c\xd7\x8b\x3f\x23\x8c\x08\x98\xa8\xd6\xc9\xeb\x8f\x30\x3c\xd9\x8a\x73\x83\x95\xcd\x1a\x46\xa5\xb7\x58\xe0\x5c\xf1\x54\xeb\xb7\x38\x49\x16\x3d\x63\x91\x25\x68\x8e\xe5\xdc\x6d\xb4\x31\xa6\xb5\xb9\x9b\xec\xe2\x9e\xe1\x68\x4e\xee\xa0\x2a\x72\xdd\xe2\x56\x46\xf9\x81\xb0\x3c\xfd\x70\x8a\xfe\xa7\x98\xe3\x59\xff\xec\xfb\xc1\xf8\x7c\x78\xd7\xff\xee\x62\x70\x1e\xcc\xc7\x3e\xb9\x1c\xde\xdd\x2d\xff\xfa\xfd\xf0\x7e\xf9\xc7\x9b\xeb\x9b\x87\x8b\xfe\x7d\x5d\x2b\x17\xd7\xd7\x3f\x3c\xdc\x8c\x3f\xf6\x87\x17\x0f\xb7\x83\x9a\x4f\x1f\xee\x9b\x1f\xde\xfd\x30\xbc\xb9\x19\x9c\xbb\x55\xf9\x5b\x70\xba\xc0\x7a\x0c\xa9\x17\xf5\xd3\xa8\x1e\xc0\x23\x54\x7e\xf1\x14\x3d\x54\x4b\x1f\xd8\x58\x64\x83\x63\xf1\x8c\xa5\xe6\x61\x10\x0a\x3f\x62\xc8\x7d\xae\x17\xa5\xe9\x53\x13\xae\x13\xcd\x09\x4a\x38\x7f\xcc\x33\xcb\xda\x4c\x7c\x18\xe3\xc6\xf0\x43\x64\xd0\xda\xf7\xc3\xfb\xd3\xe5\x12\x0c\xbe\xb1\x00\x31\xcb\x9d\x01\x18\x17\x76\xec\x14\x6c\x29\x0e\x9a\xbf\xb0\xde\x06\x3d\xf8\x9d\x59\xd5\x8f\x69\x0d\x33\x55\xe9\x26\x8e\x6d\xd1\x5f\x37\xb1\xa0\xe1\xf2\xbe\xae\x5a\x4d\xbf\x1c\xa6\xf6\x14\x9a\x90\x08\xe7\x26\xa8\x49\xdf\x53\x42\x70\x11\x0e\xb8\xa0\x87\xfd\x35\x6a\xe9\xa8\xb6\xc1\xca\x9e\xe9\x89\xcb\x47\x9a\x65\x24\xfe\xb0\x2c\xbf\x94\xab\xc3\xda\x9a\xe4\x7c\x8a\x82\x33\xa9\xf5\x7a\xd0\xf9\x5d\xe1\x94\xf9\xc2\x7b\xd2\x20\x70\xa3\x08\x65\x01\x20\x67\x7d\x27\xf8\xc2\x16\x14\x5c\x63\x58\xa1\x67\x02\x29\xd5\xb9\xad\x1c\x65\x74\x6f\x7d\xb6\xa1\x3b\x63\xd3\x76\x75\xe0\x4a\xa9\xd6\x8d\xcc\x78\x1f\x02\xb7\xfe\x5e\x92\x3a\x46\xbc\x43\x5e\xec\xb9\x69\x14\xb8\xb3\x8b\x79\x83\x11\x37\x04\x37\xb8\xdb\xa0\xc6\x42\xbe\x42\xbe\x5a\xbe\x91\xd6\x5c\x16\x9a\x6d\xb7\x19\x8f\xc3\x02\x29\x01\x5c\xb7\x1f\x58\x09\x04\x79\xed\x5a\xdd\xf3\x18\x2f\x34\x71\x40\xac\xb1\xcc\xb3\x8c\x0b\x85\x1a\xda\x30\x6e\x7c\x33\x3e\xb8\x73\xec\x3c\x3c\x8f\x83\x46\xb4\x84\x21\x6b\x6a\x69\xb4\x83\x47\xb0\xeb\x5a\x30\x8e\x30\x40\x16\x14\x41\x5f\xf7\x28\x2d\xa9\xd4\x25\x0a\xad\x13\x7e\x77\xc9\x30\xc8\xf4\x05\xdf\xb6\x0c\x5f\x5d\xef\xd7\xae\x85\xda\x2d\x4f\xc8\x54\x8d\x6b\xbd\x3e\x2b\x0c\x9c\xba\x45\xd6\x84\x28\x43\x67\xf3\x3d\xb4\xd8\x5e\x4b\xf8\xa3\x0d\xec\xd1\xaa\x41\x60\x21\x10\x9c\x2b\x23\x9f\x16\x3a\x0c\x72\xab\x09\xe6\x05\xdb\xa9\xcd\x05\xf3\x42\xa0\x96\xf9\x8d\x3f\xd4\xa7\x4d\x1d\x8f\xd8\x00\x02\x28\x0a\x45\xc4\xa5\x88\x81\x16\xb0\x56\xfe\x2f\x15\x1d\x7d\xd5\x68\xcd\x66\x84\xd7\x82\xee\x6d\xbd\xfc\x64\x81\x8a\xc2\xb2\xa5\xef\xda\x9c\x1e\x63\xf5\x76\x22\xa0\x99\xb0\x2d\xe3\xae\x48\x66\x2d\xf3\x66\x9e\x45\xa4\x0f\xc4\x87\xe9\xae\x8e\xd1\x4f\xce\xf2\x03\x81\xaf\x45\x4d\x66\x1b\xbb\x91\xe0\x85\x03\x85\xac\x5b\xd8\x7d\xe0\x2c\xee\x3b\x14\x76\xf5\x02\x7b\x40\xa7\x9a\x55\x2e\x29\xe0\x8c\x19\x8b\xec\x06\x69\x1f\x67\xfe\xa3\x3b\xb2\x3a\x2a\xe0\x23\x94\xe1\xb4\x91\x55\x20\x74\xb0\x64\xf1\xbf\xcc\x66\x99\x4c\x54\x57\x58\xcb\x96\x45\xb4\x1e\x54\x7d\x7e\xc0\x03\x68\x12\x55\xd1\x94\x26\x09\xc8\x01\xc7\xa8\x0f\xe5\x81\x21\x91\x53\x5f\x85\x2e\xc0\x82\xce\x18\x5f\x97\x63\xd6\x40\x4c\x51\x40\x4c\x77\xcd\xc4\x24\x81\x9a\x8a\x3c\xfe\xfd\x50\xd4\x1e\x30\x5d\x34\x6f\xc1\xcb\x88\xd8\xed\x91\x5c\x36\x50\xde\xdf\x22\x3a\x7a\x69\xb8\xc1\x87\xff\xaa\x1f\xfa\xa7\x1c\x0b\xcc\x14\xc4\xfc\x5a\xd1\x5d\x90\x20\xf5\x88\x7c\x86\xf8\x0c\x66\x0c\xc1\xf0\x53\xb8\xb9\xce\xe5\x0f\xe1\x5e\x88\xc6\x3d\x44\x8f\xc9\x31\x54\x67\x13\x5a\x96\x98\x14\x6f\xce\xb5\xe4\x30\x62\x4b\xb1\x8c\xc7\xa8\x9f\x48\x6e\xbf\x20\x2c\x4a\xa0\x1c\x77\x10\x9e\xec\x29\xdf\xba\x95\x26\x0b\x50\x50\x60\x2b\x8b\xe6\xb9\x7d\x10\x7c\x08\x45\xc6\xc0\x27\x9e\xc0\x49\x2f\x7e\xff\x3d\xcf\x8c\xb7\xa2\x29\x4e\xe2\x05\xcb\x39\x2c\x5d\x43\x2f\xb6\x49\xa6\x54\xe0\xaa\x0d\x82\x37\x60\x63\x8a\x18\xd3\x00\x81\x05\x7d\x8d\x15\x4a\x08\x96\x0a\xfd\xe1\x9b\x8d\x62\x43\xdc\x04\x0b\xee\x6a\x8f\x6f\x91\x28\xe6\x52\x0d\x42\xe1\xce\x77\x0c\xb5\xe3\xb0\x50\x08\x23\x46\x9e\xc3\xc8\x52\x0e\xc1\xc0\xae\x20\x1c\x09\x72\x5b\x4d\x3c\x99\xc9\xcc\x87\x6c\x0d\xa3\x32\x35\xf0\x11\x07\x77\x6c\xdd\xa7\x76\x58\x35\x94\x65\x95\x27\x1b\xe2\x09\x90\x5c\x45\xd0\xff\x1c\xab\x11\xb3\x9c\xd5\x85\x8d\x04\x69\x5e\xfd\x24\x29\x07\xda\x63\xc8\x25\x61\x7a\xc2\x50\x9f\xfd\xd8\x2f\xd0\x15\xa8\x5f\x3e\xda\xb9\x64\xa7\x2b\x0e\x8b\x89\xc7\xf3\x78\x47\x61\xdb\xb5\xd2\x4e\x9d\x7d\xf9\x15\x85\xe0\x9a\xee\x2f\x4c\xa1\xfc\x16\xc2\x30\xa9\x1b\xf2\x9a\x83\xb5\x6c\xd3\x5f\x21\x1b\xef\xbb\x83\xf6\xa2\x72\xbd\x7d\x1c\xae\xd9\x67\x5e\x63\x6e\x6f\xd8\xdc\x40\xb6\xd8\x45\x01\xf7\x61\xf7\xaf\xe5\xf1\x2d\x0d\x7d\x18\x43\xd2\xdf\x7a\x2e\x58\x24\xd1\x39\xd6\x61\x62\xaf\xe3\x20\xa7\x27\x48\x21\x80\xe0\x3f\xc7\xf8\xec\x9b\x0d\x9e\xd7\xec\x7d\x4f\xbf\x57\xcc\xdf\x4d\xc5\x07\xc1\x2d\x4f\xbc\x59\xd8\xeb\xc7\x7f\xc7\x11\x44\xfa\x43\x4f\x2e\xc7\x60\x19\x90\xc9\xc1\x58\x63\x30\xe6\xd7\x8a\x87\x99\xe0\x11\x91\xf2\x18\x0d\xe0\xa2\xb1\xff\x44\x78\xea\x1c\x12\xc1\xcb\x23\xa6\x35\x13\x87\xdf\x12\xb4\x5f\x26\xf1\xba\x13\x60\xc0\xe0\x76\xf2\xe5\xa4\xeb\x6b\x94\x34\x69\x13\x0e\x8b\x0e\xda\x80\xb2\x06\x68\x30\x3b\x45\x31\x8f\x1e\x89\x38\x11\x24\xa6\xf2\x14\x7c\xeb\xaa\xd1\xa9\x97\x6a\x6d\x7b\x67\x49\xa3\x29\x50\x60\x4d\x52\xdc\x99\xe9\xdf\x06\x58\xbb\xf0\xda\x1e\xa2\x53\x50\x27\x5c\x4e\x86\x09\x42\x76\x70\x37\x84\x29\xb1\x80\xb8\x7e\x6f\xca\xaa\x2c\x84\xd3\x34\xb4\xd0\xd6\x94\x4d\x24\xf6\x11\x83\xb3\xe5\xb4\xef\xe7\x44\x12\x17\x70\x60\x26\xa5\xb8\x8d\x65\x36\xec\x22\xc3\x6a\x2e\x21\x75\xb5\xbc\x06\x56\xe9\x82\x4f\xf5\x0a\xe1\x0c\xe2\x15\x8c\x95\xa2\xf8\xc8\x27\x58\x4a\x45\x93\x64\xc4\x18\x21\xb1\x44\x90\x65\xfa\x55\x6d\x86\xbc\xfe\xb4\x87\x70\x1c\xa3\xff\xfd\xf5\xc7\x8b\x9f\xef\x07\xe3\xe1\x15\x18\xad\x87\x17\x83\x6f\x7a\xfe\xc7\xeb\x87\x7b\xff\xab\xb1\xb0\x3c\x11\x81\x52\xfc\x08\x2a\x1e\x93\xc4\x26\x4f\x90\x11\x0b\x47\xea\xb0\x03\xf4\x13\x49\x5c\xa4\xab\x15\x53\x3c\x84\xa2\xdd\xc3\xc6\x8a\xc5\xc6\xe6\xb7\x81\xf2\x7b\xeb\x3f\x59\x4d\x83\x8e\x78\x7c\x17\x4e\x0c\x84\x1c\x19\x2c\x83\x64\x72\xab\xfb\x16\x04\x47\xd8\x8c\xb2\xa6\x78\x3c\xc2\x9e\x5e\x52\x88\xff\x81\x2c\x7e\xd4\xea\xf5\x0d\xa6\xa2\x35\xed\xd5\xa3\x01\xb9\x13\xa3\xf5\x74\x2c\xab\x87\x4a\x1a\x59\xd8\x64\xdb\x34\xc6\x7c\xd6\x01\xc1\xbd\xf9\x74\x2d\xbc\x14\xf9\xac\x84\x43\xa9\xf0\xf9\x1c\x0e\xca\xc9\x5f\x34\x05\x0d\x8e\xd8\xfd\xf5\xf9\xf5\x29\x22\x09\x9e\x70\x08\xe5\xb7\x21\x41\xae\x09\xbb\x60\x11\x4f\x83\x86\x4a\x08\x25\x3d\x94\x15\x08\x25\xa1\x11\xed\xd8\xb4\xb1\x06\xa9\x24\xe3\x62\x19\xdf\x63\xbf\x2a\xa0\x9d\xec\x0d\x17\x6d\xae\x7f\xfd\x1a\x2c\x1d\xcf\xb4\x22\x57\xe1\xbc\xf6\x6e\x9e\x12\x6c\x6a\xe9\x1b\xb7\x90\xb5\xe5\xdb\x00\xd6\x24\x29\xd5\x53\xd4\x07\x47\x1e\x5b\x17\x7c\xf1\x26\x67\xe8\x87\xbf\x48\x34\xc9\xd5\x88\x95\xdb\xe0\x0c\xf5\x7f\xba\x43\xdf\x61\x15\xcd\xbf\x19\xb1\x6b\xad\x66\xfe\xf0\x97\x06\x28\xa5\x8d\xd1\x09\xf5\x9a\x9c\x63\x85\x2f\x38\x8e\x29\x9b\xd5\x41\x13\x16\xf5\x63\x06\xf7\xfd\x53\x74\x6d\x75\xf8\x22\x13\xc4\xa7\x04\x07\x0d\x01\x43\x86\x89\x38\x2e\x02\xac\x9c\x95\xe1\xdb\x8c\x66\x06\x17\xd6\x88\xdd\x1b\x4c\x46\xcd\x55\xa9\x42\x19\xb7\x35\x8c\xb4\x56\x66\xd0\x2a\xb1\xcb\x90\x22\xc9\x02\xe9\xd5\x01\x32\xf6\x9b\x61\xe5\x31\x90\x67\x96\x99\xfd\x88\x81\x82\xee\x73\x53\x12\x1e\xe1\x04\x62\xf2\x8e\x02\x9b\x9e\x56\xdb\x79\x0e\xf9\xe1\xa6\xe8\xf9\xa2\x1c\x3a\xeb\x21\x0b\xbc\x50\x16\x6e\x14\x18\x00\x60\x1f\xad\x37\x36\xe5\x9a\xe3\x18\x2c\x36\x30\xbe\x25\x66\x75\xf4\x87\x1e\x9b\xcd\x2c\x8b\x7e\xea\xd3\xb6\x78\xce\x1c\x16\x49\x04\xe6\x7b\xb6\x80\xf0\x6d\x28\x3a\xc2\x21\xf4\xa3\xe0\xce\x96\x28\x97\x76\xd1\xdf\x89\xc1\x67\x23\x66\x22\x05\x4b\xfb\x12\xa2\xf7\x04\xbd\x73\x06\x81\x8c\xcb\xb9\x62\x79\x66\x03\x1b\xad\xac\x9f\x09\x72\xe4\x33\xa0\xe2\xd2\x9a\xea\x1b\xf6\x18\xdd\x86\xea\x75\xcc\xa3\x3c\x75\xc8\xca\x90\x3d\x55\x94\x95\x2f\x49\x3c\xe6\x62\x5f\x47\xf1\x80\xd2\xa2\x08\xa4\x8f\xb7\xd6\x8f\x0d\xc1\xf4\xc3\x4f\x97\x25\xf5\x66\xc1\x17\x78\xc7\x6e\x51\x6b\xa6\xa1\x71\x56\x6e\xa9\xd4\xda\xce\x79\x89\x57\x05\xfa\x2b\x17\x20\x6c\x91\xcf\x19\x07\x23\xb7\x49\xcf\xe2\xf1\x57\x12\x0d\x6f\xb4\x04\xa4\x35\x5e\x7f\x06\x73\xa9\x4c\x70\x19\xa4\xeb\x98\xaf\x4d\xba\x40\x0f\x7d\x8b\x46\xf9\xb7\xdf\xfe\x29\x42\x9f\xdd\x1f\x7f\xfe\xcf\xff\xfc\xd3\x9f\x37\x49\x27\x71\x0a\x39\xb4\x5b\xac\x91\x2f\x27\x55\x16\x89\xc2\x1d\x58\xe6\x54\x3b\xec\x82\x3d\x80\x4d\xcb\xbf\x0d\xca\x63\x10\x3b\x84\x67\xf6\x84\xcb\xf0\x64\xa2\xd2\xd1\x2c\x22\x09\x24\x51\xbd\x32\x87\xf0\xc2\xae\x95\xe8\xff\xd7\x0a\xb0\xb2\xb1\x3e\x2a\xdb\xc5\x38\xd1\xc4\x8b\xd7\xba\x11\xf4\xb5\xb5\xff\x29\x70\x20\x7e\xe3\x2e\x38\x9e\xc4\x44\x98\x31\x79\x93\x9d\x37\x24\x02\x73\x20\x9f\xb3\x84\xc7\x0e\x1e\xb5\xc8\x05\xa4\x20\x20\x0c\x3e\x63\xcd\xb9\x7b\x16\x46\xcb\x7c\x64\x3c\x2f\x53\x1c\x19\x54\x50\x89\xbe\xfe\x7c\xaa\x7f\xeb\xa1\xc5\x29\x04\x91\xf6\xd0\xaf\xa7\x16\x2d\x07\x0b\x35\xd6\x3f\x7d\xe3\x64\x6d\xdb\x04\x0c\x9a\x4a\xf4\xd5\xc9\x13\x16\xa6\x66\xf4\x89\x19\xd1\x57\x96\xb3\xfa\xba\x78\xa1\x6c\x9e\x70\xfe\x68\x03\x6c\x97\x3e\x3c\x71\xc0\x6b\x40\xde\xde\x6f\x62\xb6\xde\x27\xe6\x2b\x74\x04\x2f\x10\x74\x9c\x4d\xd0\xf1\xdf\x25\x67\xe8\x78\x81\xd3\xc4\xfe\xea\x9e\xda\xf8\x5f\x2c\x6d\x4e\x5c\xec\x83\x7c\x92\x85\xb1\x94\x7e\x97\xf0\x09\xcc\xea\xd2\xcd\xd4\x44\xd0\xc2\x40\x8b\xdb\xa7\xb8\xb0\xec\x44\x5c\x22\x2a\xe0\x07\xa5\x5c\x99\x57\x80\xc7\xd5\xcd\xea\xb3\x1f\xd2\x7f\x1b\xbf\x30\x2c\x8a\x4b\xe2\x33\xc6\x61\x1f\xbd\xa6\x1b\xfd\x8c\xbe\xb6\x2c\xe8\x1b\x7d\xc7\xd8\x70\x65\xb3\x0c\x75\x1d\x2c\x7c\x07\x3f\x07\x1d\x50\x86\x4c\x5a\xe6\x8a\x2f\x7f\x3d\x39\x3e\x3e\xf6\x5f\x43\xd6\xfa\xff\x8b\xa8\x92\x24\x99\x9a\x96\xdc\x0d\xb6\x18\xb1\x4b\x57\x78\xc1\x19\xaf\x0b\x48\xc7\x4c\x70\xc5\x23\x9e\xa0\xa3\xc2\xa0\x1b\xf3\x48\xa2\x7f\xd7\x62\x6d\xb0\x94\xf0\xa3\xd6\xe3\x1a\x60\x60\x0d\xd2\xf3\x2b\x1d\x2a\x6b\x10\xaf\x1e\xab\x10\xc5\xcd\x2b\xb6\x58\x86\x55\x3c\x80\x16\x34\xe5\x9c\x58\xa4\x37\x21\xf4\xcb\xe4\xb3\x82\x47\x0d\x40\x7a\xb5\xa1\xec\xf5\x37\xe5\x12\xbb\x2d\xf0\xf4\x0c\x59\x37\x2c\x80\xc5\xbb\xb2\x9c\xc1\xcc\xb3\x17\xba\x4f\xf4\xe5\xc2\xc2\x52\x00\x32\x4f\x53\x2c\x16\x27\xc5\x69\x5b\x26\xce\x02\x69\x0d\x78\x4c\xe2\x16\x00\x5c\xb8\x89\x3d\x5a\x36\x8a\xc1\x8a\x97\xee\x46\xf3\x67\x37\x82\x5a\x86\x01\x62\x01\x61\x11\x8f\x2d\x5d\x17\xd9\xa7\x65\x89\xc5\xbf\xb3\x2c\xab\xb8\x88\x18\x59\x18\xe3\x98\x32\x10\x1e\xf6\x0d\xf7\x71\x03\xfb\xe6\x63\xa8\x8a\x4b\x66\x1b\xb8\x47\x87\xd7\x77\xee\x9b\xf6\x97\x2e\xac\x43\x59\x64\xc7\x49\x88\x8f\xc7\x66\x48\xe0\xe7\xe2\xfa\x85\xd8\x0e\x63\x9d\xc9\x7d\x6e\xae\xf9\xf7\x19\xbf\xa1\x89\xbe\xb5\x80\xc6\x8f\x47\xac\xf4\x73\x0f\x91\x84\xa6\x94\xf9\xd8\x3a\xc3\xdc\xf9\xd4\x48\xcf\x8f\x54\xe9\x2d\x93\xf1\xa3\xe6\x60\x0e\xd7\x29\x50\xa9\xfa\x6c\xe1\x48\xc7\x3b\xa6\xac\x05\x22\x97\x7a\x5c\x85\x8e\xae\x85\x59\xdd\xc4\x91\x15\x48\x69\x40\x78\x70\x7e\x47\x4c\xb7\xe6\xce\x52\x11\x2e\x1c\xb4\x17\x34\x77\xe4\x00\xf1\x03\x0e\x00\x7d\x94\x62\x7e\xbd\xfc\x5b\x23\xa0\x0c\x58\x9e\xee\x9a\x6c\x62\xc3\x87\xdf\xca\x4c\x77\x23\x88\xbb\xa9\x6c\xe2\x12\x61\x79\xea\x0e\xd4\x06\x14\x37\xb0\xe2\x4f\x4c\xa2\x04\x1b\xa4\x1a\xdd\x10\x44\x3e\xf6\x8c\x83\x34\x0b\xfa\x32\xd7\x8b\xe9\xc6\xd4\xd8\x49\x08\xfb\xda\xfc\xfb\x1b\x64\xef\x86\x6f\x7b\xf6\x3e\x17\xd2\x23\x80\x98\x3d\x87\x1a\x8d\x24\x36\x36\x74\x40\x25\x9e\x61\x11\x1b\x6b\x79\xa8\x55\x98\x0c\x5e\x2d\x7f\x2d\x78\x8e\x9e\xa9\x9c\x8f\xd8\x3d\x77\x06\x47\xc4\xb8\xc7\x75\xee\x81\x32\xba\xd4\x1f\x96\xc0\x04\x60\xd4\x75\x14\xa0\x99\xf0\x4e\xb9\x46\x10\x05\x3b\x66\x3c\x26\xbb\x01\x18\xdd\x17\xbe\x0a\xe7\xbf\x16\xc4\xe4\x83\xc1\x4d\xd1\x94\x4e\x4b\xa4\xdc\xd0\x36\x5f\xdd\x78\xb8\x87\x6c\x3b\x50\x12\xf8\x79\x23\x74\xed\x10\x1b\xcc\xdf\x6a\xd0\x8a\xd3\x38\x83\x6c\xe0\xd2\xda\x7b\xb4\xe4\x5d\x37\x21\xaa\x41\x2b\x6a\x75\xf7\x9b\xb9\x47\xb0\xec\x3e\xc0\x18\xa3\x99\xe0\x79\xe6\x53\xe6\x5d\xba\x9f\xd9\x06\x2b\xd3\x0c\xd9\x94\x9f\x5a\x9d\xea\x82\xb2\x47\x43\xf1\x2f\xb5\x47\x06\x10\x9b\xc4\x25\x18\x37\x57\xa5\x15\xe6\x70\x84\x28\x8b\x92\x1c\x2e\x3e\xa9\x70\xf4\x68\x40\xbd\x9b\x8c\xbe\xfa\x9b\xf1\xfa\x64\xca\x06\x89\x29\x4f\x12\xdb\x6d\x71\x81\x16\x65\xac\x9f\x28\x46\x18\x3d\xdc\x0e\xeb\xfb\x7e\xa4\xcb\xce\x9c\xfa\xdb\xb3\x4c\x20\xf0\x3f\x3f\xd0\x8d\xe2\x2e\x2b\xb0\x78\xa4\x44\xea\xde\xb8\xd4\x04\xba\x6a\x88\x54\x69\x05\x22\xbe\xad\x31\xed\x6f\x4c\xa7\xb3\x2c\x1f\xeb\x85\x4a\x36\x09\x10\xd0\xa3\xf8\x74\xf3\xd0\x0f\xbe\x5b\x45\x2a\x9f\x6e\x1e\x50\xd0\x87\x01\x3c\x4c\x48\xa4\x7c\xa4\xf1\x31\x3a\x2b\x70\x88\xab\x92\x79\x4c\x9e\x68\x64\x52\x5c\x7b\x5a\x2a\x1a\x31\x80\xf7\xd4\xba\xce\x91\xc3\x84\x42\x9f\x6e\x1e\x2c\x92\x94\x87\x9b\xb2\x90\xca\x00\x61\xb1\xd9\xb5\x53\x01\xd6\x64\x9c\x1d\x81\xc4\x86\x45\x5c\x78\x3b\x7a\xa0\x5c\xff\x7f\xec\xbd\x5b\x73\x1b\x49\x72\x36\x7c\xbf\xbf\xa2\x22\x7c\xa1\xd1\xf7\x81\xe0\x68\xf6\xb5\x63\xad\x08\x5f\x50\x14\xb5\xc3\x5d\x89\xd2\xf2\x30\xb3\x7e\x0d\x07\x54\xe8\x2e\x00\x65\x36\xaa\xa0\xae\x6e\x72\x60\xaf\xff\xfb\x1b\x95\x99\x75\xe8\x23\xba\x01\x52\x1a\xaf\xe7\xc2\xde\x11\xd1\x5d\x5d\xe7\xca\xca\x7c\xf2\x79\x12\xbe\x2d\x4a\x32\x30\x1e\x5e\x4d\xdd\x98\x5c\x87\x48\x88\xad\x96\x9e\x29\x6b\x2b\x61\x96\x01\xa8\x7f\x34\xf5\xe9\x5b\x3a\xf5\x18\x70\x00\x74\xda\x51\x9b\xbf\xf4\x19\x7e\x5c\xed\x18\xcf\x17\xb2\xc8\xed\x35\x0c\x5f\x86\xa1\x70\x77\x8f\x85\xbb\x51\x05\xcb\x88\x04\x5b\x60\x80\xa5\x2a\xcc\x4c\x45\x19\x2c\x3e\x2b\x18\x93\x17\xa4\x62\x40\x87\x07\xd8\x1b\x47\xcf\x95\x64\xba\x4c\xdd\xb1\x9a\x7b\x01\x98\xdd\x16\x8d\xa8\x99\x02\x66\x12\x7b\xb6\x82\xf0\x79\x38\xfb\x5f\xb3\xcf\xea\x41\xa6\x92\x9f\x14\xc2\x64\xfc\xa4\xf8\x3f\x9f\x27\xb5\x3f\xf1\x57\xdf\x7f\xff\x19\xb5\x6c\xba\x68\x17\xfc\x34\x3a\xda\xc1\xd3\x1e\xa7\x70\xc5\xcf\xed\x2c\x3d\x62\x9c\xde\xcb\x7b\xc1\x3e\xe3\x70\x7f\x26\x02\xbf\xc3\x86\x6d\xa6\xda\xc6\x8d\x1d\x32\x6c\x40\xa7\xda\x3e\x6e\xac\x67\xd8\x5e\xad\xa6\xff\xb8\x5a\xd8\xd1\xfa\x61\x35\x7d\xf5\x3d\xfc\x67\x6d\x8c\xf6\x2d\x5e\x9f\x3d\xd3\x56\xed\x96\x8d\xa8\x65\x59\xfa\xbd\x68\xa6\xf6\x6f\x46\x6c\xdc\x5e\x04\xb3\xb6\x6d\xe1\xf3\x42\x1c\x9b\xdd\x8a\xbc\x8e\x23\xd0\xd7\x0d\xc2\xcc\xde\x88\xe0\x91\x6c\x93\x81\x29\x12\xe0\x9e\xdd\xb4\x97\x31\x00\x17\x7e\x1c\xc1\xc7\x03\xcf\x0f\x6b\x4f\xed\xd9\x3d\xcd\xe9\xaf\x66\x26\xc4\x08\x06\x99\x1b\xfb\xf8\xc0\x4a\x56\x1e\xed\xab\xe3\x23\x47\x45\x9d\x26\x91\x7b\x4a\xb7\xf5\x31\xab\xc8\x4d\x47\x74\x99\x18\x9f\xf7\xe7\x6b\xe2\xa0\x95\xfe\x7e\xed\xbe\xbb\xa2\xb5\x14\x0b\xf6\xf8\xa8\x5b\xcb\xc4\x8f\x5c\x11\x47\x42\xe1\xec\x95\x7a\xbe\x19\x4c\x12\x1a\x3e\xfc\x96\x5e\xfe\xd0\xa0\x0c\xf5\xe6\xe5\x07\xc8\xcc\xf6\x64\x58\x1b\xae\xac\xb5\xe6\xbe\xda\x11\x58\xc2\x5b\xfe\x41\x55\xba\xdb\x1e\x54\x21\xfc\xe2\x40\x2d\x5b\xfa\x94\x2b\xe5\x11\x63\xab\x3c\xc3\xd8\x41\xb1\x06\xb7\x72\xd0\x80\x73\xdb\x5c\x70\x2f\xa3\x5e\x5c\xc6\xf3\x15\x3a\xbd\x8c\x28\xcc\xcb\x96\x11\x0e\x79\x6c\x47\x8c\xf0\x01\x3a\xdb\x31\x96\x05\x5c\x2a\x7d\x2b\xcd\xd7\xb2\x4a\x18\xed\x6f\x5a\x5e\xb1\x3e\x62\x43\x0d\xc9\x75\x89\xce\x51\x5d\x21\xb5\x6b\xa5\x9b\x07\x6b\xac\xd4\x7b\x3d\x1e\xc7\x37\x9e\xe5\xc5\xa9\xbe\x53\xce\x2e\x56\x6e\x21\x80\xeb\xbc\xbb\x0e\xe3\x75\xdd\x7b\xaa\x40\x42\xc7\x5d\x35\x98\xa9\x33\xf7\x48\x60\x6c\x34\x12\xbd\x2c\x98\x8e\x58\x2e\x30\xc3\x05\x7c\x66\x3c\xf4\x3a\x35\xae\xa3\x11\x63\x13\xf2\x6b\x4d\xb8\x33\x22\x0f\xa7\x11\xa9\xc0\x79\x5e\xe6\x5e\x05\xbe\x07\x91\xb7\xc1\x8e\x47\x7c\xfc\xc6\x35\x91\x8a\x72\x7d\xd9\xf6\xe1\xe1\x17\x15\x2a\x08\x12\x8e\x08\x55\x8b\x79\x01\xd9\x2e\x4c\xd3\x40\xfc\x59\xfb\x58\x73\xb5\x16\x47\xed\xc6\x92\x6f\xe6\xb9\xee\x96\x28\x1c\xd0\x4d\xae\x88\x8a\xcf\x7e\x8d\x92\x45\x3b\xf6\xa5\xe4\x19\x1e\x6e\x8a\xa6\xa3\xab\x36\xb8\x3f\x7e\xf8\x27\x76\x06\xa7\x0f\xfb\x00\xfb\x22\x80\xb6\xa0\xb4\x42\x33\xb9\xd9\x8a\xdc\x68\xc5\x3b\xb5\x3a\xef\xff\x60\xe6\xa4\x37\x66\xaf\xc6\xba\x6c\x6a\x8b\x8d\x68\x49\x4b\x69\x71\xa3\x38\xbb\x2f\x17\x22\x57\x02\xf5\x48\xe1\x39\xe6\x9e\x1b\x54\x5d\xcd\xcb\x62\xfd\xc3\x3c\xc9\xe4\x60\x11\x34\xc8\x18\x3d\xb3\xaf\x9d\xe3\x5b\x7d\x0d\xa8\x94\x5f\xa9\xba\x62\xf8\x1b\xc3\xdf\xa6\xec\x0d\x4f\xee\x85\x4a\xd9\x36\x2b\x57\x92\x08\x62\xd0\xdc\x97\xd5\x8b\x7d\xb5\x61\x68\x5b\x60\xf9\xf6\x18\x9a\xa9\x0d\xbf\x47\x62\x72\x32\x22\xed\xcd\xa1\x8b\x5e\xd0\xbb\x4a\xe6\xb2\x39\x77\xf7\x8e\x96\x3f\x0f\x9b\xc5\xd4\xe7\x9e\x29\x31\x5f\xee\x71\xad\x09\x65\x54\xf1\xd4\x8c\x58\xb8\x7e\xb6\x36\x78\xbc\x1c\xd7\x8a\x57\xa6\xa5\xca\xe0\xea\x85\x10\x1e\x90\xeb\x97\x8a\x71\xa0\x02\x7b\x61\x58\xb9\x75\xf6\x19\xc4\x96\x32\x40\xfa\xe0\x10\xd8\x1f\xb6\x32\xb9\x47\x6c\x29\x64\x4f\x30\xdf\xbc\x86\x80\x21\x13\x01\xe4\xd8\xb6\x35\x2c\x91\x08\xe7\x38\xdc\x4a\x83\x9b\x7f\xcf\x3c\x1d\x98\x19\x52\xac\x85\x9a\x1f\x40\x11\x3f\x7c\xd0\x2a\x59\x20\x64\x06\xfb\x18\x9d\xef\xc2\x52\x49\x12\x05\x0c\x77\x6c\xcf\x7f\x2c\x97\x35\x33\x5a\x1a\x66\x78\x21\x8d\xdd\xcb\x5a\x7b\x3c\xd0\x0f\x1d\xd3\xeb\x7c\x1c\xe7\x51\x0b\xdf\x51\xad\x2f\x7c\xa6\xd9\x94\xbd\x83\xc8\x46\x74\x33\xd0\x9e\x3d\xa8\x6b\xc3\x2a\xd6\xa2\x93\x46\xf7\x29\x20\x9a\xae\x05\xd1\xf3\xbd\x01\x2b\x9f\x55\x38\x65\x67\x21\xa2\x8c\xfc\x49\x18\x2b\xde\xd3\x22\x91\x19\x71\xc8\xe4\x1b\x14\x7c\x01\xd4\x15\x4c\x20\x06\x96\x94\xb1\x7f\x0f\xaa\x20\xbe\x9a\x8f\x90\xb8\xcf\xef\x85\xea\xf3\xb0\x0f\xaf\x21\x86\x40\x7a\x5d\x02\x3e\xb6\xa2\x31\xbc\x72\x48\x05\x87\x2f\xbb\x40\x59\x25\x97\xa7\xb6\xcb\xed\x35\x24\xb9\xa7\x74\x41\x8c\xb0\x11\xe9\xd5\xe3\x5a\x9b\x78\x9d\xb9\xf1\xc3\x9b\x6c\x5e\x7a\xe5\x07\x48\xb7\xf4\x1d\x8c\x38\x4b\xa5\x63\x4e\x2c\xa8\xb5\x5f\xa4\xe8\xd6\xf1\xe3\xcd\xdc\x16\x0a\xdd\x00\xc8\x04\x57\x54\x73\x35\xff\xf9\x0f\xe6\x23\xac\xd8\xa7\x60\x5f\x69\x97\xda\x3e\x3e\xf3\xe9\xc0\x98\xaf\xc7\xf4\x06\x9d\x6e\x9e\x7a\xbe\xa0\xad\x4e\x59\x98\x5e\xe3\x45\xb9\xbf\x7d\xb3\x6a\x62\xde\x83\xda\xb6\x6f\x66\x7f\x88\x80\x61\x6c\x51\xca\x2c\x45\xfa\xbc\xc8\x20\xd4\xce\xe2\x00\x4e\x7b\x38\xfe\xa5\xf1\xe7\x49\xfb\x1c\xfb\xa4\xd3\x63\x26\xd6\x78\x8a\xd4\xe6\xbc\x1e\x90\x37\x62\x62\xf0\xce\x66\x7f\x4f\x6c\x75\x37\xe2\x3f\x9d\x9b\xaa\x88\x5b\x4f\x85\x01\xe2\xb5\x28\x97\x37\xa0\x18\xd5\xc5\x42\x14\x89\xa9\xb8\xb4\x62\x3b\xce\xf6\x33\x3e\xc9\xad\x6b\x50\x08\x31\x14\x8e\x7f\xce\xfe\x74\xf3\xf1\xea\x64\xc3\x73\xb3\xe6\xc0\xf2\xe0\xca\x9a\x38\x11\x4e\xbc\x1e\x3b\x24\x83\x54\x33\x75\xc2\x56\x7a\x82\xb8\x99\xd7\x6c\x5d\x14\x5b\xf3\xfa\xf4\x74\x25\x8b\x75\xb9\x98\x26\x7a\x73\x1a\xba\xe6\x94\x6f\xe5\xe9\x22\xd3\x8b\xd3\x5c\x40\xe6\xc4\xc9\xab\xe9\x0f\xaf\x60\x64\x4e\x1f\x5e\x9d\x02\x5a\x62\xba\xd2\xff\xf0\xfe\x87\x7f\xfe\xfd\x3f\xd9\x82\xb7\xbb\x62\xad\xd5\x6b\x02\xe5\xf4\x96\x7d\x82\x56\xf9\x29\xbe\x52\xfb\xca\x3f\x4f\xbf\x8f\xab\x41\x8f\x6e\x74\x2a\x32\x73\xfa\xf0\x6a\xee\x06\x66\xba\xdd\xfd\x96\x6b\xf0\xcd\x72\x0d\xee\x65\xf1\x5b\xae\xc1\x37\xcd\x35\x18\x6e\xe1\xf8\x3d\x06\xc8\x9b\xc3\xfe\x68\xff\xee\xf7\x48\xe7\x7a\xdf\xb7\x0f\xb5\x1c\x0e\x71\x26\xd8\x11\x47\xc4\xbd\x18\x75\xc5\xae\x35\xd7\x5f\x1d\x3a\x5c\x6c\x63\x05\x54\x3a\x8d\xf9\x51\xc4\x17\x80\xec\x93\x09\x90\xf3\xa3\x4b\x70\xcb\x65\x5b\x06\x01\x21\x58\x8f\xe9\xbf\xe7\x94\x99\x78\x6a\x7d\x09\x6a\xee\x81\xda\x12\x19\xbe\xed\xf0\xb6\xfa\xd1\x69\x4a\x3c\x85\x12\xc3\x40\x6d\x6e\x4f\x30\x8f\x93\x07\xea\xe2\xea\xd5\x51\x8d\x35\x37\x87\x01\xb7\xcf\x90\xc6\xd5\xc7\xe9\x10\xf5\x2a\x8d\xfb\xa0\x3b\x38\x1c\x33\x8e\x3d\x87\x1c\x01\xdf\xb6\xcc\xb7\xda\x08\x33\x65\xef\x6a\xea\xb5\x01\x8c\x7e\xfd\xee\x9c\xbd\xfa\xc3\x3f\xff\x7e\xa6\xbe\x6b\x39\xb7\x61\xbf\xd7\xf9\x8a\xb0\xf1\x70\x5a\x6f\xb8\x29\x44\x7e\x9a\x2f\x93\x53\xdc\xe5\x4e\xed\xfb\x27\xf4\xd1\x13\xbd\x3c\xf1\x34\xf3\x27\xc4\xb8\x3d\xdd\xa4\xe3\x48\x63\x2a\x53\x0f\xcf\x1a\x3a\x68\x0c\x1c\x4a\x48\x2f\xa7\x97\x5e\x50\x04\x73\x17\x51\x7b\x48\x2f\x5b\xfe\xe3\x4d\xa6\x17\xe6\xa5\x27\xb5\xe4\xc6\x7d\x23\xb0\xcc\x75\x2f\xcd\xa7\x51\x9c\x70\x53\xe4\x39\x1d\x15\x6e\x2f\x89\xaf\x23\x63\x3a\xbe\x7d\xb1\x85\xe3\x1e\x39\x76\x78\xae\x4b\xe5\x18\xfb\xb5\x12\x7a\x09\xd0\x0d\xb0\x84\x1d\xf2\x0c\x7c\xb5\x80\x67\xf2\x7c\x3a\xb9\xd8\xe2\x01\x03\x51\x85\xee\xee\x3e\x52\xb5\x62\x5f\x3f\x3f\x87\x6a\xc5\xb1\xfd\x4e\x1b\xca\x37\xea\xf0\x63\xe1\xe1\xb8\x94\xc6\xa0\x2a\xec\xf3\x7b\x23\xa8\x7e\x1f\x08\x8a\x72\x81\x20\x7e\xcb\x73\x30\xd2\xc4\x49\xa1\x4f\x80\x88\x0c\xe8\xad\x50\x47\xa6\x0b\x56\x01\x91\xe7\x31\xc7\xa4\x7d\x7e\x40\x3d\xd1\x30\xff\x25\xaa\x28\xd9\x24\x06\x69\x99\x09\x66\x2b\x95\x12\x39\xc5\xd4\xf6\x9e\xa8\x23\xe3\xd2\xf1\x50\xf6\xa3\x6c\xc3\x4d\x34\xd6\xf8\xf0\x39\x56\x3c\xda\x04\xa6\x0c\xac\xcf\xb5\xde\x68\x6b\xce\xe8\xd2\x44\x3f\xe2\xed\x05\x0e\xe1\x4e\xdb\x6b\xc3\xb7\x48\x3c\xfa\xed\x5a\x63\x97\x96\xfd\x09\x9d\x7a\xf1\x43\xa3\x64\x93\x16\x55\xa1\x98\x3d\xf5\xf7\x0a\x1f\xfd\xf3\x06\x50\x0f\xa8\x3d\x0a\xf2\xdf\xc4\xdb\x2f\xff\xd3\xde\x6b\xec\x94\xf2\x37\x05\x7f\x72\x23\x48\x07\xf9\x75\x63\x48\x9a\xb3\xe6\x3b\x19\x30\xca\xcd\xc8\x31\xf0\x89\x23\x43\x06\x80\x2b\x4c\xa5\x70\x39\x14\x27\xad\x49\x14\x5d\xeb\xd2\x89\x6d\xa7\x73\xc7\x01\x3d\xae\xaa\x37\xbe\x00\xa2\x7b\x6e\xd6\x3b\x50\xe8\x41\xc6\x0d\xf6\x31\x6e\x08\xce\xb6\xe8\x02\x6e\x8e\x5f\x8c\x20\x9a\x35\xa6\xef\xe0\x23\x38\x39\x1b\x3d\x18\xad\x85\xae\x0e\x1c\xe7\x62\xeb\xf3\x58\xb5\x61\x76\x91\x75\x34\x64\x64\xda\x5a\x36\x2e\x8f\xfe\xc5\x07\xbf\xbe\x10\xd2\xb8\x28\xe1\xf7\xab\x8f\xb7\x31\x5a\x43\x62\x6b\x4f\x92\xb5\x48\xee\xc1\x61\x82\x47\x9e\x17\xe2\x25\x86\xd3\x99\x0a\x72\x8e\x85\x76\xd0\x83\x9d\x57\xb8\xf0\x2a\x2f\x3a\x67\xa9\x34\xdb\x8c\xef\x20\xc8\xab\x30\xf7\x2a\x04\x88\x7d\xd2\xa2\xdd\x0a\xf6\xf9\x8b\x87\x8f\xb4\x1d\x95\xb3\xf0\xde\xd8\xbe\x0c\x60\xda\xd0\x99\xcd\xfd\x80\x19\xb1\xe1\xaa\x90\xc9\x4c\x6d\x04\x57\x31\x2a\x8f\x82\xdc\xb6\x93\x53\x2d\x88\x03\x7e\xb9\x14\x49\x11\x48\x64\xc1\x78\xf7\x3d\xb5\x6f\x0d\x8e\x6b\xbb\x5f\x79\xbd\x4d\xff\x11\x70\xbf\x18\xa3\xcf\xf5\x03\x6d\xc3\xee\x68\x3c\x30\x78\x03\xf2\x9f\x74\xe4\xba\xcb\x20\xfc\xcb\xcd\x29\xb6\x10\xc5\xa3\x00\x8e\x14\x4a\xea\x6e\xb3\xf1\x8f\x96\x80\x39\x4e\xd1\xbd\x5d\x0b\x3f\x42\x82\xe1\x02\x8b\xc1\x64\x9e\xcc\x4d\xd5\x58\xd9\x5e\x50\x9a\x39\x78\x7b\x5e\x90\xdf\xea\x05\x1c\xd3\xf6\xf6\x98\x3f\x88\x74\xa6\xaa\x54\x79\x64\x33\x86\x05\xc7\x82\xb8\xe1\xd3\xec\x36\xae\x8f\x07\xf9\xf2\x2f\x80\x1e\x28\x10\x03\xfb\x44\xea\x1e\xb1\x45\x6c\xf4\x73\xde\xaa\x9c\xce\x6b\x6c\xdd\x0f\x80\x64\x09\xe3\xc4\xcb\x48\xeb\xb4\x82\xa7\xf0\x93\xd2\x13\x81\x21\x4b\xa8\x07\xc0\x92\x5f\xb2\xe1\xe9\x6c\x2b\x63\xa6\x1c\x43\xc6\xb2\xcc\x90\xf9\xb9\x2b\x0f\x81\x78\x01\x5d\x36\xdf\xb7\xcb\xea\xf4\x7e\x35\x16\xe9\x45\x7a\xd8\x43\x04\x46\xc6\xbd\xce\xcd\x7a\xa1\x4c\x09\x26\x85\x93\x8a\x03\xc7\xf3\x4a\x14\x70\x9a\xa7\x65\x86\x84\x0f\xe0\x31\x07\x8e\x41\x9e\x65\x4c\x16\x66\xa6\x3c\x25\x22\x26\x1b\xc0\x0e\xeb\x5c\xea\x4e\x65\x5c\x79\xad\x72\xf8\x99\x2b\xb0\xc3\x64\x22\x8b\x06\x84\x7b\x17\xcb\x2b\x6d\xb7\x82\x63\x7e\x32\x0e\xdb\x4c\xc5\x77\xae\xfa\x20\x50\x32\x2f\xcf\x24\xef\x51\x81\x7f\x8a\xa9\x7b\x66\x3f\x71\x10\x6e\x01\x5b\x67\x2f\x5c\x4e\x39\x19\x6b\x4b\x9c\x28\x84\xb4\xb4\xb7\x9a\xc2\x38\x1f\x79\xb8\xb7\x42\x9e\x42\x52\x66\x3c\xc7\x04\x8d\x65\x99\x31\xb9\x8c\x44\xa0\x61\x0c\x90\x10\xcf\x0e\x57\xa2\xe1\xac\x76\x5e\x72\xc3\x37\x22\xe2\xe2\x20\xf7\x4e\x16\x61\x28\x90\xe5\x1f\x83\xf3\xb6\xac\x97\x53\xf6\x36\x50\x7e\xe2\x08\xc3\x9a\x88\x88\x74\xa5\xc1\xed\xcf\xd7\x37\x4a\x23\x87\xd6\xd9\x2a\x6a\x65\x57\xa4\x5f\x75\x1d\x23\x08\x82\x1c\xe3\x00\x1a\x4e\x8e\xa5\x1f\x35\xdc\x4a\x23\x61\x5f\xad\xc1\x36\xfc\x82\xe8\xa8\xa0\x3b\x15\x46\x56\x32\x26\x21\x3e\xa0\xa2\x9e\xe4\xb9\xa5\xb2\x9b\x1e\xcd\x69\x18\xc7\x91\x55\x8d\x14\xdc\xc6\x57\x34\x9a\x39\x31\x1c\x67\x48\xcf\xae\x78\x31\x16\x9b\xe3\x93\x71\xc6\x57\xb4\x15\x07\x35\xa4\x9a\xb0\x7b\x8c\xac\xa7\x17\xda\x3f\xa0\xa2\x5e\xce\x3f\x68\xbc\xc0\x56\x21\x78\xb2\xae\xe6\xc5\x3b\xf6\x5a\xdf\x02\xc8\x8b\x82\xf5\x38\x3e\xa5\xff\x2c\xcc\x39\x10\xb1\x63\xb6\xfa\x53\xf6\x51\x09\x44\xce\xe9\x65\x74\xa8\x50\x05\x48\xed\x0e\x04\x44\xfc\x2e\xb7\xb0\x15\x53\xf7\x8e\x2e\xc8\x2e\xb9\x09\xe3\xa1\x74\xd8\xf5\x70\xda\xe0\x2e\xd2\x61\x4b\xb6\xc9\xed\x1c\x61\x5e\x0e\x4b\xba\x6f\xbf\xf3\x47\x00\xd4\xf1\x3b\x40\x5b\x3b\x86\x0f\x4b\x2f\x92\xdc\xdf\xe2\x1c\x7c\xbc\x3a\x6f\x18\xc2\x49\xf7\xf5\xef\xa7\x75\x15\x85\x38\x42\x9c\xee\xee\xea\xed\xc5\xbb\xcb\xab\xaa\xa2\xdc\x5f\xee\x2e\xee\xaa\x7f\xb9\xbe\xbb\xba\xba\xbc\xfa\x63\xfc\xa7\x9b\xbb\xf3\xf3\x8b\x8b\xb7\xd5\xe7\xde\x9d\x5d\xbe\xaf\x3d\x67\xff\x54\x7d\xe8\xec\xcd\xc7\xeb\x9a\x86\x9d\x13\xa0\x8b\xfe\x74\x7b\xf9\xe1\xe2\xed\xfc\xe3\x5d\x45\x06\xef\xed\xbf\x5e\x9d\x7d\xb8\x3c\x9f\xb7\xd4\xe7\xfa\xe2\xfc\xe3\x4f\x17\xd7\x7b\x54\xec\x42\x7b\x5b\xbb\xf4\x29\xe0\x63\x07\x6b\x1a\x9e\xb1\x65\x2e\x85\x4a\xb3\x1d\x62\xef\xdd\xcd\xb6\x06\xa6\x8d\xcf\x5e\xb9\x11\xba\x3c\x06\x42\x7f\xbb\x16\x4c\x3f\x88\x1c\x98\x8d\xb0\x34\xa2\x41\x08\x59\xd4\xf5\xaf\xe6\xa2\xc8\x9b\x51\x81\xde\x4c\xa1\x22\xdf\xf9\x5c\xb4\xbe\xea\x04\x56\x3c\xfa\x08\xdb\x8a\xbc\xaf\x2e\x60\x19\xe5\xe5\xb6\x90\x8b\xee\xa4\x88\xd1\xc9\xc4\x43\xef\xde\xc8\xe1\xda\x4e\x78\x75\xd5\xbe\x31\x56\x72\x03\x8e\x01\x1e\x43\x09\x87\x4a\x75\xfa\xb7\x1d\x58\x73\x5b\x2e\x32\x99\x30\x99\xd6\xfd\x29\x94\xe3\x0f\x2e\xe3\x3a\xd5\xf3\x56\xe4\x60\xaa\xda\x1b\xc0\x36\x17\x27\xbc\x2c\xd6\x48\x4b\x48\xa9\x08\x24\xcc\x31\x53\x46\x24\xb9\xc0\x58\x80\x30\xe0\xa4\x45\x8d\xc6\xe8\x4b\x50\x19\x62\xe5\x48\x81\x00\x6c\x1a\xc9\x6e\x74\xc4\x08\xf0\x4d\x2c\x7d\x84\x93\x14\x9f\xef\xed\x1a\xaa\xb1\x34\x75\x81\x7e\x38\xe1\xf1\x47\xa7\xf4\x68\xdb\x6d\x77\x6a\xaf\x74\x88\x83\xec\x72\x37\xda\x9b\xb1\x6f\x8e\xc5\x13\xa5\x9a\xcc\x40\xa5\xd3\x4f\xe7\xb9\x80\x43\x84\xa0\x00\xce\x7f\x01\xd0\x15\xca\xf5\x80\x14\x0f\x7b\x55\x5b\x88\x35\xcf\x96\x68\x71\xd8\xa1\x69\x67\x4a\xc0\xf2\x6f\xf5\xbd\x50\xd7\x38\x60\xdf\x64\x3b\x54\x78\xf3\x09\x3c\x2d\xde\x23\x14\x5c\x98\xb6\x8e\x6e\x56\xb9\x5c\x37\x30\xa6\x0a\xbc\x27\x44\x3f\x63\x4a\x47\x60\x61\x77\x69\x72\xcb\xa5\xfc\xc5\x16\x38\x53\xa2\x95\x87\x1a\xf0\x42\x8e\x31\xcf\xef\xcb\x80\x8d\x42\xda\xb1\x7b\xa1\x40\x23\x12\x25\xe4\xf7\xce\xd9\x71\xfe\xf3\xe6\x58\xf4\x38\xf4\xc1\xe7\x27\x2b\xd2\x99\x71\x94\xc7\xf5\x53\x81\x39\x36\x9e\x57\x00\xe6\xcd\xf9\xfb\xcb\x8b\xab\xdb\xf9\xf9\xf5\xc5\xdb\x8b\xab\xdb\xcb\xb3\xf7\x37\x43\x97\xdf\x53\xe4\x45\xd5\x56\x5f\x3d\x3d\xc8\xef\x10\xa7\xb4\xf2\x42\x7a\xae\x6f\x54\x58\x76\x30\x24\xfb\x6b\x2f\xd3\xed\x3c\x95\x26\xb1\xc7\xdf\x6e\x2e\x54\x0a\x04\xfe\x07\x4d\xd5\xf6\xa2\xea\xad\xf0\x4f\x30\xff\x84\xdb\x41\xf0\xb4\x7b\x70\x33\xda\xff\x0e\xa8\x3b\x70\x43\xe6\xc2\x2e\xfe\xb4\xc2\x9b\x30\xdd\xaf\xda\x64\x8b\x3b\xae\x6d\xd5\x22\xea\x6d\xc2\xfa\x4a\x63\x4a\xa0\x67\x70\x8f\x01\xe4\xb0\xa3\x57\x88\x55\x35\x56\x11\x90\x91\x02\x36\x93\x66\xa6\x36\x5c\xa5\xbc\xd0\xf9\xae\xa3\x89\xc3\x36\xcf\x78\xd9\x54\xb7\xd0\xf8\xc8\x56\x42\xa4\x6e\x14\xf0\x51\xae\xea\x53\x09\xb5\x06\x6e\x3f\xfe\xf9\xe2\xea\x66\x7e\x71\xf5\xd3\xfc\xd3\xf5\xc5\xbb\xcb\xbf\x7a\x24\xe4\x96\x9b\x36\xc5\xdb\x6d\x2e\xec\xee\xe2\xa8\x9b\x5a\xf7\x17\x94\xa1\x75\xe5\x90\xf4\xa0\x5c\xce\x94\xdb\x59\xf2\x50\xfc\x3a\xd7\xe5\x6a\xdd\x5e\x50\xbd\x96\x9f\xce\x6e\x7f\x3c\xa8\x9a\x40\xac\x87\x5a\x95\xb8\xda\x9a\x88\x50\xb9\xa4\x7d\x0f\x61\xa4\xb5\xea\x01\x3d\x24\x3c\xda\x16\x65\xe8\xd8\xd1\x0e\xba\xbd\x34\x37\xad\x5e\xe3\xbf\xe5\xf1\xae\x09\x74\x1b\xed\x9b\x95\x63\x04\x10\xca\x28\x79\xdc\x28\xed\x75\xcb\xdf\x2a\x27\xd8\x0f\x27\x99\x58\xad\x44\x8a\xd3\xab\x5e\x30\xf9\xe0\x68\x0b\x4c\xc2\xb9\xde\xd6\x8b\x24\x4a\x7a\xc4\xc1\xec\xf1\x5e\xc3\x37\xf0\x4f\xfe\x95\xf6\xbd\xe2\x9c\xc8\x71\x20\xbe\x59\x70\xd5\x11\x48\x7e\x68\x22\x34\x07\x6d\x45\x1f\x73\xe6\x93\x9f\xc8\x61\xe2\x42\x06\x61\x1d\x74\x01\x5e\x8e\xc7\x85\xfa\x7a\x5c\x8b\x6d\xc6\x13\xe1\x73\x18\x90\xd5\x14\xee\xf5\x87\x04\xf0\x48\xfa\x55\x91\xbf\x25\x92\x84\x0d\x6a\x57\x6d\x53\x00\x3c\xb7\xd7\x6e\x3f\x7e\x7e\xd7\x4a\xef\xc5\x8d\xb8\x0c\xc1\xd1\x8c\xda\x7b\x04\x7d\x47\x5f\x14\x08\x5a\x76\xc2\x92\x47\x4d\x87\xda\x97\x7f\xa2\x81\xc7\x3b\x73\xd5\xd1\xcd\x1d\x5b\xa8\x9f\x1e\xde\x74\xec\xf3\x17\x16\x45\xde\x4b\x30\xfc\x14\xe1\x88\x4f\xb9\xde\x48\x23\xce\x8a\x22\x97\x8b\x32\x56\x58\x1d\x09\x98\xab\x5c\x4e\x42\x83\xb7\xb9\x4e\xcb\xc4\x51\x02\x41\x6b\x03\xec\x87\xbc\x7c\xce\xea\x48\xd9\x89\x9d\x7d\x74\x73\x13\xe9\x09\x00\xfa\x91\xb3\xaa\x2d\xc6\xe6\x36\xc6\x0e\xdf\xdf\x27\x77\x94\x1f\x33\x25\x5b\x26\x45\x77\x67\xba\x39\x30\x2c\xb1\x96\xb9\xc7\xc1\x02\xee\x40\x4d\xd1\x74\x59\x70\x0c\xa0\x57\x6d\x94\x2e\x06\x10\x7f\xd4\x8c\x03\x77\x0d\xc3\xc6\x54\x33\x66\xd0\x6e\x58\x73\x83\xe6\x7c\x91\xac\xab\x15\x87\xd6\x54\x99\x50\xeb\xd5\xf5\xe6\xf1\x71\x6e\x93\x41\x61\xb4\x09\x3a\x1a\x24\x39\xb6\x2b\xaa\x96\x5e\xa2\x77\x9c\xb7\x3b\xb6\x18\xfd\x8d\x0e\x0f\x03\xd8\x47\x33\x5e\xaa\x64\xcd\xb6\x19\xc7\x64\xf2\x35\x37\x38\xa5\x1d\x96\x84\x2f\x64\x26\x0b\x60\xe9\xc1\x10\x67\xad\x87\xed\x35\x8f\xe7\xf7\x8e\xec\x9c\x07\x4a\xa6\xbe\x49\x7f\x24\x66\xd7\xb7\xea\xab\xa2\x76\xc3\x92\x8d\xb7\xa1\x61\xd3\x92\x10\xbb\x61\x38\xec\x46\x0c\xd3\x32\xb4\x65\xdc\xc8\x52\x89\x9f\xea\xaf\x57\xfa\xbb\xc5\x7a\x19\x8f\x58\x21\x15\x8f\x11\xa7\x4f\x5d\xe3\xa3\x75\x65\x2d\x33\xcd\x3b\x74\xe6\x5d\xd9\x28\xd9\xd1\x55\x76\xaa\xcb\x45\x17\x49\x3c\xd6\xaa\xbf\xf4\xbe\x60\x88\x5b\xb7\x4f\xe5\x2c\x8d\x37\x40\x5e\x88\x42\x8e\xf3\xf7\x44\x8d\xe6\x85\x38\x81\xd7\xdb\x0b\xa7\x0c\xc3\xc1\x6d\x6e\x4c\xb4\x20\x1c\xe5\x8d\x36\xc0\x12\xb6\xcd\xae\xda\xe9\x7c\x0c\x26\xfc\xc8\xf1\x92\x6a\xcf\x54\xda\xaf\x45\xf3\xfb\x1f\x5a\xba\xa5\xd1\xe8\xbf\x94\xdc\xee\x87\x1f\x97\x37\xc8\x95\x73\x4c\xa3\x0b\xd9\x5c\x56\xed\xdb\x4f\xfd\xab\xb7\xd5\xf0\x5a\x3c\xf1\x07\x67\x22\xb7\xb5\xe6\xc6\xbe\x3d\x7c\x17\xba\xac\xb8\xd1\xb6\xb9\xd4\xc0\x19\xa3\x97\xc8\xc0\xd8\x4d\x21\xdc\xfa\xdd\x23\x7a\xf2\x4b\x29\x4a\x61\x27\xd0\xa2\x4c\x57\x4d\x2f\xf7\x08\x4b\x39\x34\x69\xad\x1f\xd9\xa6\x4c\xd6\xcc\x15\xce\x52\x91\xf1\x5d\xa5\x69\x60\x24\x16\x1a\xf8\x3c\x47\x51\x67\x45\x2c\xcc\x49\x69\x0a\xbd\x01\x80\x71\x28\x37\x2f\x15\xac\x72\xc6\xdd\xea\x6a\xdb\xdf\x2b\xec\x72\x07\x86\x36\x6f\x3e\x5d\x9c\x5f\xbe\xbb\xac\xc5\x15\xcf\x6e\xfe\x1c\xff\xfb\xe7\x8f\xd7\x7f\x7e\xf7\xfe\xe3\xcf\xf1\xdf\xde\x9f\xdd\x5d\x9d\xff\x38\xff\xf4\xfe\xec\xaa\x12\x7d\x3c\xbb\x3d\xbb\xb9\xb8\xdd\x13\x60\x6c\x7e\xb5\x7b\x20\x78\x44\x7e\xe7\x20\xcf\x4e\xd9\xc1\xf9\x19\xe8\xab\xaf\xd9\x99\xa3\x02\xac\x90\x55\xba\x20\x31\xa0\x4a\x32\x04\xc7\x61\x2c\xf9\x2d\x2f\xf8\x39\x2f\x78\xa6\x57\x53\x76\xc6\x08\x10\x8e\x40\x7f\x63\x2d\x24\xe2\x49\xb3\xa3\x83\x45\x58\x33\x29\x09\x77\xf8\x20\x5d\xab\x97\xc4\x50\x98\x89\x58\xe4\xc4\x65\xb5\xcd\xd4\xc5\x83\x50\x45\x09\x24\xb4\x3c\xcb\x18\x7d\xd6\x3d\x10\x65\xec\xbb\x5a\x1a\xb9\x91\x19\xcf\x83\xca\xe8\x47\x2a\x0b\x6e\x29\xae\xae\x9e\xa0\xa9\x99\x0e\xee\x2e\x72\x77\x97\x0c\xea\x7d\xfe\xfe\x12\xec\xbe\xa4\x70\x12\x5a\xee\xe3\x33\x85\x0c\x78\xf4\xc5\x0d\x87\xe4\x93\x42\x93\x67\x15\x3f\x4f\x0f\x77\x4f\xc4\xa3\xa8\xc0\x5d\x0c\xe2\xb9\x6e\x94\xbe\x92\xee\x3f\x2e\x54\x91\xef\x06\x1b\x73\xb7\x90\x6d\x6d\xc0\x20\x27\x2c\x5b\x55\x79\x14\x1d\x5f\xcc\x95\x7e\x05\x16\x9e\x03\x5a\x52\x5c\xc6\x87\x5f\x10\xd7\xd2\x71\xe9\xc8\xec\xc9\xfb\x6b\xed\x87\x98\x10\x07\x7a\x61\xa1\x4b\x95\x1a\x42\xdd\x6d\xa4\x3a\xdd\xf0\x5f\x5e\xba\x96\x22\xc1\x84\xd7\xff\x01\xf2\x30\x91\xd9\xeb\xd7\xce\x6e\x72\xfd\xdd\x35\x53\x3d\xfd\xb5\xdf\x44\x76\x3b\x2b\xdc\xf5\xc2\xc5\x1c\xf1\x83\x0f\x62\xd7\x36\x7e\x0d\x0d\x37\x16\x13\x91\x43\x21\xdb\x5c\xd8\x07\x3d\x38\x31\x43\xcc\xa9\xff\x37\x24\x21\x54\x74\x66\xdb\xf7\xee\x38\xde\x7f\xd4\xb2\x69\x45\x1a\x0c\x37\x7c\x06\x8b\xf0\xd1\x97\xec\x98\x21\xee\xc0\xb9\xbc\x29\xe9\x82\x02\xaa\x76\xb0\xfe\x43\x2f\xd8\x12\x32\x90\x30\xd1\x8e\xe5\x02\x42\x1c\x30\x14\x4e\x35\x02\x28\xa6\x1a\x60\x06\x37\x05\x32\x61\xc0\xf1\xaf\xec\x1d\x53\x7c\x29\x29\x76\xfb\xea\xfb\x71\xe7\x6c\x81\xd4\xe3\xc8\x35\x5b\x27\xe5\xf6\x67\x39\xd4\xab\x54\xb2\x8d\x77\xee\xba\x54\xf6\x28\x7e\x0a\xd8\xcb\xf0\xb8\x66\xed\xa3\xf4\xcf\xbd\x49\x42\xce\x25\x9f\xe3\xf3\xcf\x46\x23\xfa\x53\x8d\x3d\x94\x3e\x07\x90\x74\x2a\x3d\x3e\xd0\x16\x3c\xb9\x7f\xe4\x79\x8a\x7e\x5b\xc0\xa1\x4c\xd9\x8f\xfa\x51\x3c\x88\x7c\xc2\x12\x91\x17\x9c\xa8\xbb\x0c\x04\xe2\x61\x41\x51\x39\x33\x05\x19\x1a\xc8\x83\xa6\x4c\x99\x0b\x56\xc8\xd5\xda\x5e\xa2\x23\x18\x85\xce\xed\x76\x54\x20\x6b\xe3\x56\x24\x44\x96\xd4\xd1\x01\xcb\x8c\x3f\x34\xb9\xc8\x0e\x61\x79\x60\x97\x3e\xcd\xd4\xc5\x29\x9d\x12\x4f\x1f\xf0\x85\x3a\x8c\x36\x4d\xa4\xb7\x99\xb0\x95\xce\xb8\x5a\x4d\xa7\x53\x60\x9d\x7f\x39\x6a\xa2\x53\x81\x71\xe4\xd3\xc3\xab\x33\xad\x8d\xc8\x76\x9e\xe0\xc7\x27\xc0\x00\xe2\xf2\x97\x42\x28\x23\xd1\xcf\xd3\x32\xfd\x6f\xea\x51\x81\xaf\x1b\x44\x69\xbf\x9e\x8f\x4e\xaf\xec\x28\x07\x84\xfd\x46\x94\x84\xcf\xb7\xdf\xbc\x0e\x4a\x17\x6e\x2f\x4b\x69\x35\x36\x07\xf6\x27\x2d\x3b\x62\xf8\x07\xf1\xee\xb5\x96\x44\x24\x25\x07\xe5\x0d\xb6\xf7\x59\x23\x95\xf3\x88\x2c\xce\x9e\x84\xcc\x91\xb9\x98\x43\x1c\x01\x37\xf5\xe1\x1e\xbd\x2c\xf6\x6b\x0d\xb5\x36\x68\x64\xae\x6b\x48\x4a\x1f\x63\x3a\x61\xba\x5c\xb6\x83\x1b\x97\xcf\x7c\x05\x77\x7a\x1a\x85\x03\x2a\xd1\x0e\xc8\xc1\x0a\xe1\x12\x4f\x1e\x15\x45\x47\x4c\xa1\x73\xbe\x12\x6c\x23\x52\x59\x6e\x5a\x37\x1b\x5f\xdd\x63\x70\x7f\x3a\x2b\x37\xdd\x34\x7e\xc7\x1a\xd0\xa1\x92\xf8\x5f\xe7\xf0\xb9\xc1\x06\xf4\x99\x87\xb4\x3b\xc9\x37\xaa\x2f\xfa\xfe\xa9\xaf\xed\x49\x99\x4b\x03\x84\x93\x87\xa4\x3c\xfa\x62\xb0\x68\x88\x9c\xee\xb6\xe8\x73\xae\x8c\xee\x89\x0b\x69\xd1\x2b\x06\x47\x15\xc2\xad\xdd\x87\x42\x1d\x4d\x38\x5e\xf8\x29\xd7\x65\x83\x6c\x67\x50\x84\x1b\xcc\xc6\x88\x06\x9e\xe0\x4e\x50\x20\x61\x32\x0a\xcd\x96\x2e\x89\xee\x5e\x44\xb4\x64\x29\x10\xc4\x3f\x22\xc7\xcd\x9f\xff\x60\x1c\x7a\x83\x00\x36\xc1\x62\x29\xc2\x47\x30\x20\xf2\xf0\xca\xe1\xaa\xb0\x85\x58\x04\x90\x87\xa5\x5c\x15\xad\x05\x04\xd8\x21\x94\x85\xaf\xfc\xc4\xcb\xac\xfd\x71\x2a\x1f\x1e\x45\x01\xc1\xb3\x9f\x6f\x18\x76\x35\x51\x89\xe7\x7d\x15\x8d\x0a\xd9\x8f\xec\x82\xee\x9a\x1f\x60\x09\x56\xc6\x01\x3b\xdd\x71\xc9\xdb\x6e\x17\x45\xb2\x0e\x96\x07\x90\xa7\x79\xd2\x37\x52\x87\xa5\x76\x6e\x02\x39\x3a\x82\x66\x63\xf4\xa1\x5c\x29\x1d\xeb\x7a\x68\x25\x20\x32\x65\x37\x20\x1d\x17\xcb\x64\xb1\x1f\xe2\x35\x92\x31\x6c\xdf\x54\x2b\x34\x42\x77\xa8\x9d\x95\x00\x23\x5c\x29\x24\xf2\x0c\x39\x7c\x2c\xde\x89\x48\x6c\xb4\x4e\x9a\x5d\x65\x6e\x98\xa9\xea\xa7\x1a\x9d\xe4\x30\x58\x32\x17\xc8\x75\x6b\xac\xf5\x56\xc8\x07\xbb\x50\x9b\xd3\xda\x4f\x50\xd8\x01\x9a\x73\x6f\xa6\xb0\xda\x11\x61\xee\xbd\xd8\x99\x58\xd9\x94\x66\x14\xeb\x9a\x90\xd2\xb6\x87\xc6\x6b\xff\x50\x40\xc7\xcd\xf3\xa0\x4f\x36\xec\x2c\xc3\x8f\x7e\xb0\x2f\xf7\x80\x3b\x1b\x85\xdb\x39\x18\xb2\x14\x83\x4f\x91\xb6\x89\xd0\xcf\x34\x86\x01\xbf\x05\xe8\xbc\x18\x7f\x17\xa7\x9c\xc0\xc5\xd7\xde\x6f\x67\x8a\x38\xb5\xa3\x43\xce\x6e\x38\xcd\x61\xa3\xd4\x69\x64\xf2\xdd\x55\x68\x5f\x80\xf6\xd0\x51\x40\x56\x3f\xe9\x82\xad\x4e\x18\x7b\xa6\xe0\xd3\x98\x5c\xea\x7c\x78\xad\x1f\x3c\x10\x14\x48\x83\xdb\x09\x04\x8c\x32\xb8\xf0\x49\x62\xfe\x43\x89\x5c\xbc\xfd\x24\xc2\x76\xdf\x99\x6a\xc5\xe0\x39\x04\xde\xcd\xc5\xf9\xf5\xc5\xed\x57\x03\x0a\x3a\x94\xde\x68\xa4\xa0\xab\xe7\xdb\x8b\x77\x67\x77\xef\x6f\xe7\x6f\x2f\xaf\x9f\x03\x2a\x48\x3f\x1d\x80\x15\xbc\x21\xaa\xfe\x73\xad\x0a\xf1\xcb\x51\x67\x72\x5e\xaa\x39\x1f\x91\xb3\xe2\xc5\x3a\xfa\xcc\x1d\x2c\xb4\x29\x35\xe0\x75\x00\x88\x77\x12\x4f\x34\xaf\x2c\xb0\x0c\x4e\xc3\xa5\xcc\x32\x48\xe1\xf5\xee\x75\x4a\x0f\xb3\x9d\x0a\xfb\x8f\xa3\xda\xa4\x3d\x75\xa6\x16\x15\x25\x08\x70\xf9\xad\xed\x25\x18\x93\x77\xb7\xb6\x03\x72\x09\xa9\x91\x7d\x6a\x04\x2b\xa9\x44\xa8\x06\xca\xd9\x97\x8a\x75\x52\x48\xd3\x20\x3e\x27\x24\x8a\x0c\xaf\xa1\xb6\xa6\x9b\x71\x95\xf9\xe9\xcc\x4f\xf7\xa3\x6f\x21\x2e\x62\xa9\xd0\x30\xad\xac\xe6\x9b\xf6\xa9\x7b\x1a\x96\x00\xf4\xbb\x1d\x49\x0e\x31\x08\x50\x8c\x0f\x03\x49\x03\x81\x2a\x45\x21\x38\x71\x2f\x11\x3a\xa4\x97\xb5\x7e\xb6\x5b\xa1\xed\x6b\x09\x91\x0a\x4e\xac\x24\x49\x56\x9a\x42\xe4\xe4\x36\x39\xfb\xf9\x66\xa6\xde\xd8\xe3\xeb\x25\x9d\x42\xa4\x64\x83\x9f\x40\xe0\x8a\xae\x7c\xdf\x59\x28\xf1\x0e\xf6\x1d\xfa\xa8\x37\x82\x2b\xc3\x60\x69\x64\x99\xc8\xc3\xcc\xc0\xfa\x08\x91\x92\xa2\x2b\xd0\xb0\x86\xf7\x5f\x32\x42\x25\xda\xae\xb0\xf5\xa5\x5f\x73\xb1\xd1\x45\x73\x3e\x75\x65\x88\x03\x54\xf8\x39\x67\x4e\x4b\xc6\xca\xd0\x59\x44\x28\xeb\xd6\x49\x54\xcd\x1f\x19\x34\x97\x6e\xb1\xb8\xdf\xa6\xd2\x13\x4e\xa5\x01\xe7\x7a\x7c\x4a\xb0\xb5\xb6\x1b\xa8\x97\x79\x09\x61\x66\xcf\x50\x91\x01\xe8\xcb\x76\x63\xeb\xa9\x53\x93\x3a\x3c\x06\xfb\x01\x45\x1d\x07\xad\x3d\x6b\xa1\xc2\x09\x9a\x5a\x2e\xb6\xd3\xab\xa2\xf8\x3c\x94\x73\x67\x0e\x64\xa8\x74\xe1\xc8\x23\x3c\xae\x8f\x40\x8a\xf6\x01\xcf\x5a\xd2\x5b\x47\x62\x02\x71\x56\xca\xfc\x48\x25\xb2\xdb\x18\x0c\x59\x49\xa7\xc5\x5a\xc4\x89\xf8\x2e\xf9\xde\x93\x77\x8c\x99\x7c\x87\x6b\x5d\x56\xe7\x9c\x27\x82\x3c\x08\xec\x70\xf5\xf1\xea\x22\x86\x2a\x5c\x5e\xdd\x5e\xfc\xf1\xe2\xba\x92\x88\xfd\xfe\xe3\x59\x25\x99\xfa\xe6\xf6\xba\x96\x43\xfd\xe6\xe3\xc7\xf7\x17\x0d\xcc\xc3\xc5\xed\xe5\x87\x4a\xe1\x6f\xef\xae\xcf\x6e\x2f\x3f\x56\x9e\x7b\x73\x79\x75\x76\xfd\xaf\xf1\x5f\x2e\xae\xaf\x3f\x5e\xd7\xbe\x77\x77\xde\x8f\x9e\xa8\x34\xa3\xdd\xfd\x13\x82\xb3\x11\x27\x66\xeb\x32\xae\x6a\x81\x1e\xb1\x8a\x07\x22\xcf\xf6\x4d\x47\x97\x67\x9d\xc6\x54\xf9\xb8\x30\x6c\x55\x47\xcd\xba\xa7\x17\x2f\xad\x74\xdd\x96\x1f\xb7\xed\xd9\x53\x6d\xfe\x14\x48\xc0\x5e\x03\xd0\x7f\xa5\xe6\xb8\x25\xad\x60\xec\xda\x2d\x44\xb0\x56\xbc\x53\xba\x47\xa5\xcf\x5e\x53\xf7\x8d\x7d\xf5\x0c\x1c\x4c\x7b\xa8\x6c\x9e\x8a\xc6\xa2\xaf\xd2\xd1\xc7\x5c\x96\xb8\x4c\x9d\xa1\xe0\x7e\x8c\x0e\x6e\x68\x86\x9d\x39\xd1\x74\xec\x52\x99\x6c\xcf\x37\xe9\xa7\x4d\x1b\x5b\x7f\xfa\x48\xb3\xee\x35\x8e\x8d\x11\xf5\x06\xae\xa3\x31\xf5\xbe\xe5\xe6\x7e\x6c\xbd\xe9\x23\xcd\x7a\x83\xd9\x77\x50\xbd\xc1\xe1\x5d\xb4\xf3\x9f\x8c\xd8\xc4\xe2\x62\xaa\xd5\xf3\xc9\xd9\xfe\x91\x48\xcc\x75\x58\x1d\xed\x02\x78\xde\xeb\xe5\x96\x0f\x0f\x64\x40\x6d\xfc\x72\xe5\x35\x3a\xf0\x1b\xf8\x15\x5a\xb8\xc8\x05\xbf\x4f\xf5\x23\x8d\x47\x1d\x19\xca\x06\xed\xe6\xd5\x0e\xb2\x7b\xb8\x3b\x22\x8a\x9c\x22\x50\x88\x52\x0b\xc5\x03\x4c\x4e\x12\xa1\x35\xda\x60\x91\x0a\x69\x9d\x41\x06\x38\x7b\x54\x18\x9d\x99\x42\x6b\xbe\x4d\xc9\xd4\x8e\xaa\xad\x11\x71\x3e\x40\x53\xbd\x0d\x8d\xc1\x75\x13\x0d\x2c\x25\x70\x94\x39\x80\xe9\x16\x39\xdc\x99\xa0\x43\xa4\x02\x67\x72\x6e\x2f\x3c\xb9\x48\xa4\x11\x91\x9a\x53\xeb\x89\xfd\xe5\x38\xed\x87\x82\x17\xad\x6e\xd7\xc1\xfe\x70\x9e\x14\x25\xcf\xd8\x97\x52\xe4\x3b\xa2\xce\x43\x5f\x25\xfe\x25\xe1\x0a\x33\x45\x0a\xb1\xd9\x42\x3a\x76\x9c\xe2\x30\x53\x3f\x03\x50\x02\x87\xe0\x85\x61\x7f\x04\xc8\x83\x7b\x98\x0e\xe1\x0d\x2f\xe0\x2c\xfe\x0b\x7e\xc3\xff\x36\x9d\xa9\x8a\x3a\x4a\xf4\x56\x45\x28\x65\x3a\x53\x4e\x9e\x20\xd5\x89\x99\xc2\x8d\x6f\xaa\xf3\xd5\x29\x09\xfb\xda\xc9\xae\xef\x17\x5a\xdf\x9f\x0a\x75\x0a\x3e\xa9\xe2\x94\x97\x85\x3e\x05\xb8\x14\x8e\xbf\x39\x75\xfa\x9f\x4e\x40\xd5\x9c\xae\xe5\x83\x80\xff\x37\x5d\x17\x9b\xec\x1f\xcc\x76\xfd\xcb\xc9\x2a\xcb\x4f\xec\xbb\x27\xf1\xbb\x27\xee\xdd\x13\xf7\xee\x89\x7d\x0d\xff\xdf\x76\x87\xe1\x1d\xf1\x0b\xb7\x67\xd9\x64\xa6\xa4\x32\x22\x2f\xc0\xfa\x79\xcc\x65\x11\x64\x68\x76\xec\xc5\x7f\xfd\x17\x9b\xe6\xfc\x11\x53\x19\xdf\xf2\x82\x7f\x42\xff\xe2\x7f\xff\xf7\x0b\x08\xa8\x62\x52\xcf\x96\xe7\x5f\x4a\x51\xcc\x94\x11\x76\x11\xb2\xff\x6f\xa6\x20\x02\xbb\xd9\xcd\x0b\xf4\xbb\xa2\x0f\x32\x35\xec\x5f\xb0\xcc\x4b\xa4\x91\x4c\x8d\x2d\xa9\x23\x9d\x40\xf2\xac\x45\x32\xba\xc3\x45\xff\x25\x7b\x4b\xcf\x8f\x58\xd6\x5f\xb2\xea\xaa\x76\x42\x28\xe6\x4b\x06\x07\x68\xa6\xb9\x03\x6b\x31\x3f\x79\xe1\x9e\x4c\x95\x6b\x5b\x23\x0d\x68\xc0\xb3\x86\xe9\xdb\xd7\xca\x0d\x52\x59\x3b\xcf\x7d\x63\x1b\x81\x58\x41\x88\x43\x40\xf4\x5c\xda\x15\x72\x83\x9e\x50\xb0\xdc\xb0\xe5\x60\x93\x52\xe8\xdc\x97\x87\x8e\x0b\xf3\xfb\xd7\xa7\xa7\x13\xb6\x32\xf0\x3f\x8b\x2f\xf0\x3f\x80\x1e\x7a\x2a\x36\xd6\x46\x67\x7a\x20\x5c\x73\x94\xf7\x8f\xc4\x53\xa0\xe8\xbe\x06\x01\x78\x6d\x9a\xbe\x29\x55\x9a\x89\x90\x02\x59\x09\x89\x64\xda\x49\xd6\xa3\x63\xac\x2e\xb5\x02\x63\xbc\x10\x09\xb7\x1b\x5f\xe3\xdb\x08\x2e\xd5\xcb\x42\x28\xf4\x86\xe5\x41\x89\x8d\xa3\xe7\x0a\xcc\x62\x80\x42\xf2\x82\x20\xe7\x02\xfe\x08\x1f\x01\x46\xed\x49\xfd\x27\xb6\xd3\x25\x91\x43\x03\xe5\x69\x2a\x92\x0c\x18\xf8\x1d\xed\x0b\xcb\x45\x51\xe6\x8a\x71\xb6\xe5\x2a\xe5\x06\x66\xe0\x32\x87\x68\x67\xce\x78\xb3\xa2\x13\x84\xe3\xea\xb2\x00\x32\x23\x44\x16\xc4\x3d\x81\xec\xdd\x51\x9d\x27\x51\x25\xf0\x4c\x00\x12\xe1\xc6\x8b\xd3\x99\x72\x5a\x61\x84\x85\x43\x4f\x59\xa2\xb7\x3b\xa2\xaa\xa9\x77\xba\x74\x9e\x33\xea\xee\x49\xc0\x9b\xd4\x9f\x9d\x30\x59\x0d\xad\x01\x51\x78\x11\xa9\x1d\x3b\xbd\xe8\xef\x84\x4a\x74\x2a\x72\xf3\xd2\x2e\x43\xe9\xef\x1d\x68\x3f\x48\x13\x06\x03\x76\x29\x7b\xb8\x91\xb7\xd0\x16\xef\x15\x75\x6c\xef\x54\xa8\xa5\xdb\xec\x9c\xfd\x4b\xe5\xd7\x8e\x82\x69\xab\x2f\xfd\xe7\x57\x45\xc4\xc4\xb8\x4e\x77\xe7\x3c\xdc\x05\x81\x4b\x36\xde\x71\xb1\x50\xb4\x71\xc8\x38\x71\xd2\xb2\xb2\x00\xf5\xba\x5c\x98\x62\xa6\xe8\x04\x9e\xb0\xa5\xe0\xd6\xce\x9b\xb0\xc4\x3c\xe0\x66\x8c\xc7\x7d\xf1\xa8\x03\x06\xc7\xe9\x92\x00\x18\xb6\x52\x78\x70\x12\xe3\x63\x80\x28\xe0\x49\x81\x00\x83\x4e\x15\x72\x67\xaa\x40\x67\xb5\x6e\x88\x07\xf4\x83\x93\xb9\xa8\x4b\x4a\xc5\x2a\x2b\xd0\x13\x3b\x0c\x14\xb3\x7a\x3d\xf0\x07\xbb\xf1\x60\xeb\x10\x06\x12\x6d\x8e\x60\x71\x13\x96\x16\xd7\x59\x88\xe1\xc6\x5c\xe3\xe0\x9b\xe9\x5a\x54\x3d\x1d\x01\x15\x38\xcc\x6f\x61\x5f\xdd\xeb\xb0\x32\x22\x77\x1a\x1c\xd8\x56\x64\x06\x5c\xcb\x3c\x3d\xd9\xf2\xbc\xd8\xb9\xe9\x9b\xc9\x05\x50\xf7\x67\xf2\x5e\xb0\xb3\x3c\xd7\x8f\x4f\xdd\x0b\x9d\x5b\x4b\xd7\x0d\xfb\x18\x24\xfb\xd8\x5b\x7e\x2b\x2f\x68\xdd\xdd\x71\x18\x07\x69\x97\xe3\xa3\xf5\x3b\xb9\x28\xf2\xdd\xdc\x4e\xc4\xcd\xb6\x73\xa7\x18\x94\x34\x31\xdc\xc8\x1d\x47\x6f\x5a\x73\x61\x74\xd2\x9b\x56\x46\xf5\xd7\x43\x6f\xda\xc2\x5c\xda\xa4\x37\xbd\xbc\xba\xbc\xbd\x3c\x7b\x7f\xf9\x7f\x6b\x25\xfe\x7c\x76\x79\x7b\x79\xf5\xc7\xf9\xbb\x8f\xd7\xf3\xeb\x8b\x9b\x8f\x77\xd7\xe7\x17\xfd\x7c\x45\xcd\xda\x07\x13\xfc\x84\xc5\xdf\x79\xcd\x6e\x23\xa0\x06\x26\x1b\x90\xfd\x4d\xda\x95\x30\xab\xec\x62\x96\x6a\x35\x81\x85\xfa\x9a\x5d\xe4\xf9\xe5\x86\xaf\xc4\xa7\x32\xcb\x00\x4e\x85\x99\x3d\xe7\xb9\x80\x8b\xe7\x84\x7d\xd2\xe9\x65\xf4\x1e\xa4\x23\xb6\x36\x03\xbe\xcf\xd3\x34\x17\xc6\xe0\xe7\x27\xf4\xfd\x08\x3c\xe4\x53\x1d\x09\x3c\xc7\x1f\xb8\xcc\xec\xfd\xed\x35\x7b\xc3\x93\x7b\xbd\x5c\x62\xfa\xcc\xc4\x27\x4e\xb1\x2f\xa5\x2e\x38\x13\xbf\x24\xc0\xd1\xd5\x3e\x4f\xde\xeb\xd5\x37\x80\x2a\x0f\x08\x4f\x75\x5c\x52\x40\xa3\x6c\xde\x7e\x9c\xb7\x6f\x04\xd4\xca\x0f\xf8\xea\x3b\x7c\xb3\xdd\x41\x59\x64\x4f\x90\x1e\xff\x5e\xaf\xda\x15\x63\xc0\xba\x26\x99\x1b\x0a\x24\x24\x44\xb6\xa1\x57\xcc\x48\x75\x3f\x53\x3f\xaf\x85\x62\xba\xcc\xf1\x4f\x70\xcd\xb7\x66\x66\x56\x9a\xb5\x00\x09\xd9\x09\x7b\x14\x6c\xc3\x77\x68\x36\xc3\x9d\xc0\xcb\x5c\xc0\x94\x81\x53\xc4\xbe\x9d\x49\x65\x77\x8b\xad\x74\x79\x09\xf5\xa1\x7f\x8a\x1b\x97\x63\xa8\xe3\xc7\x13\xc8\xf6\x9d\xa7\x15\x7c\x1e\xb8\xca\x02\x6e\xd2\x01\x84\x68\xe7\x06\x15\x4d\xad\xef\xcb\x6d\xe0\xb2\x7c\xe1\x82\x93\xd0\xdd\x0f\x5a\xa6\x2c\x2d\xb7\x99\x4c\xfc\xbe\xfb\xa8\xf3\x4e\xc2\x5e\x4c\xa0\x19\x7e\xea\xd4\xd3\xc2\xfa\x1a\xd6\x92\x9d\x13\x21\xe9\x7a\xa8\x7b\x9f\x99\xbc\x98\x49\x95\x64\x25\xe8\x83\x95\x46\xe4\x27\x45\x2e\x57\x2b\x30\xc0\x5d\xae\xdf\xaf\x9f\xdd\x38\xb0\x27\x1e\x9f\xd6\x16\x27\x9d\x67\x7a\x25\x13\x9e\xc5\xe0\xe6\x80\x8a\xf0\xf4\xa9\x6e\xd9\x93\x7a\x2a\xe4\x41\xb8\x0a\x75\x32\x20\x6d\x73\x01\x0c\xbe\x73\xd8\xca\xe7\xb4\xdd\x1d\x53\xef\x25\xb3\x17\x74\xac\x57\x4c\x6e\xea\xc2\x0b\xee\x84\x0b\xdf\x76\x12\x5a\x60\x62\xa2\xbc\x36\xd3\x8f\x4a\xe4\x60\xc1\x02\xec\xc3\xb6\x54\x69\xb0\x4d\xbc\xac\x96\xc7\x27\x3b\x59\xb9\xa5\x07\x62\x63\xe6\xec\x4a\x3e\x08\xf5\xf5\xd9\xa8\xa3\x0f\x24\x3c\x59\x8b\xb9\xb3\xcb\x9f\x7a\xcb\xf2\x07\xc0\xc8\xcd\xca\xe9\x5b\xc4\x5b\xa9\x0f\x6f\xc2\xd5\x09\x6b\xdc\xdc\xbb\x30\x90\xd8\x93\x91\x65\x2b\x31\x4f\x45\x72\xff\xd5\xb7\xe6\x00\xb2\x72\x15\x61\x9c\xbd\x15\xc9\x3d\xbb\xbb\xbe\xc4\x6c\x60\x59\x30\xbb\x15\x98\x75\xd0\xeb\xe9\xbc\xbb\x15\x7c\xf5\x0c\x8c\x4e\x43\x05\x87\x02\xc7\xbc\x97\x59\xb3\x15\x22\x40\x14\xe4\x4b\xda\x4d\x92\x72\x69\x00\x08\xc6\x0b\x27\x43\x03\x8e\x78\x66\x36\xa0\x3a\x53\x16\x91\x54\x5b\xc6\x17\x22\xeb\x60\x5c\xdc\xea\x74\xee\xe2\x24\xc7\x82\x79\x1a\x65\x39\x3f\x06\x45\x1d\x5d\x1e\x03\xb7\x16\xeb\x2d\x3d\xc8\xee\xff\x60\x22\x7a\x0d\x1d\x13\x3f\xc3\xbd\x9e\x1b\x48\xef\x5e\xca\x95\x8b\xb6\xc9\x25\x69\xe3\x60\x42\x3f\xa8\xc0\xdb\xfd\xd2\x96\xf4\x49\xa7\x04\xd3\xf3\x24\x66\xd6\x0a\x12\xe4\x3d\x09\xb8\x8a\xb8\x0a\x5e\x29\xdf\x80\x6f\xc0\x14\x82\xa7\x4c\x2f\xc9\x9b\xb8\xdd\x66\x12\x28\x7d\x53\x64\x0f\x07\xf6\x0c\x53\x45\xc7\xc7\xa5\xb9\xca\x46\x24\x1f\x9f\x1c\x10\xaf\x37\xde\x18\x82\x5c\xb6\x5d\x55\x27\x77\xdd\xa6\x3a\x56\x05\xce\xe7\x23\x1d\x7a\x85\xee\xf7\xa6\xad\x32\xbd\x80\x8e\xea\x06\xc5\xf5\x6c\xd0\x76\x77\xca\x65\x3a\xe6\x78\x77\x7d\xf2\xd1\xbf\xda\x57\xc1\x8f\xce\xd3\xe1\xbf\xe4\x86\x99\x11\xe1\x7a\x1c\xc1\xaf\xa5\xb1\xef\xbb\x6b\x43\x80\xd0\xf8\x08\xa1\xb7\xc6\x0b\x92\x1b\x80\x55\xe1\xb7\xe3\x8e\x6b\x75\xb5\x2d\x47\x0d\x74\x93\x18\x65\x4f\x5f\x06\x2e\x95\xfe\x41\x3e\x82\xdd\x02\x57\xae\xa7\xb8\xe8\x76\xa4\xa9\x54\xa4\xf3\x03\xda\x70\x41\xef\x0e\x6b\x8b\xef\x69\xac\x1e\xb8\xbc\xd4\x89\x3d\x19\x53\x9e\xa7\xa1\x1d\x13\xb8\x11\x27\x7c\x0b\x5e\x67\xf0\xe2\x3f\xbc\x9a\xba\x6f\x5c\x87\x64\x1a\xbb\x3d\x60\x8a\x3b\xc2\x95\x75\x8b\x56\xc7\xbe\x79\xe4\x27\x29\xa2\x99\xed\xcc\x09\xd3\xb5\x92\x66\x32\x68\xee\xd6\x67\x98\xdb\xaf\x8e\x99\x5c\xcf\xb1\x77\x94\x85\x0e\xc1\x0d\x68\xcf\x25\xd0\xa3\xc6\x09\x6c\xb0\x41\x5e\xa6\x1d\xc0\x08\x67\x6d\xba\x4d\x68\x04\xdc\x76\x14\xe0\x77\x9b\x0b\x17\x26\xdb\x89\xc2\xd3\x18\x64\x4e\xff\x0c\xa2\x40\xbe\xd5\x55\x1e\x17\x47\xd5\xe0\xb9\xb7\x20\x66\x43\x96\x6d\xa2\x37\x5b\xad\x00\x85\x83\x49\x59\x33\x45\x85\x3b\x15\x6b\x1f\x48\xaa\x64\xf6\x4d\xc8\x7f\x87\x79\x22\xc2\xe8\xec\x81\x22\x86\x91\xd8\x02\xe8\xdf\xd9\x0a\x9e\xdb\xab\x90\xbd\xf8\x43\x28\x9b\x0e\x32\x00\xbe\xd7\xa4\x9c\x73\xb1\x92\xa6\x10\x71\x32\x64\xfc\xfe\x93\xa9\x6e\x56\x7c\x05\x7d\x5d\xdf\xa9\xba\xb9\xcf\xe8\xb7\xfb\xd3\x88\xfa\xec\xb6\x22\xbd\xf4\xef\xf5\x4f\x86\x5a\xbe\x7a\xd8\x0e\x2b\xe7\x1d\xce\x01\xbc\xec\x18\x64\xb6\x32\x5e\x26\xc1\x0f\x12\x71\x0e\xf1\x80\xdf\xb3\x43\xb4\x2a\x79\xce\x55\x21\x84\x99\x29\x8a\xb3\x22\x43\x5b\x4c\x42\x52\xc3\xfd\x79\x53\x3e\xd1\xa6\x40\xc2\x23\x78\x65\xc9\x65\x56\xe6\x9d\xb7\x6b\x9c\x95\x07\xb1\x2c\xf4\xf5\xd2\x39\x14\xcb\xda\x06\xcd\xe7\xeb\x46\xab\xc8\x93\x84\xd4\xa3\xa4\xd5\x74\xd6\x8e\x26\xb8\xc3\x65\xf8\x78\x7b\xd7\x6a\x47\x0a\xef\x1f\xcc\x7c\xab\x47\xec\x78\x7f\xfe\x83\xf9\xa4\x3b\x92\x9f\xcd\x97\x86\x0b\xb0\x07\x2d\xf0\xa5\x4b\x38\x82\x9b\x7b\x08\xb4\xed\xf3\x3c\x0c\x22\x9f\xdc\x1b\x8e\xeb\xdc\xbb\x60\xd6\xae\xb9\x4a\x33\x7b\x23\xe7\x45\xed\x04\x0a\xb0\x66\x7b\x03\x28\xdc\xe6\xd8\x9d\xc3\x06\x29\x21\xf3\xa4\x91\x4f\xb8\xaf\x9f\x6a\x89\x88\xbd\xd0\xc1\xda\x57\xaa\xe9\x81\x6d\x69\x29\xc1\x86\x21\xb9\x56\xbf\x60\xbf\xb9\xfd\x72\x11\xd7\xfd\x2b\x99\x2f\xd5\xb5\xb6\x94\xab\x5f\xc1\xbd\xf9\x43\xf3\x48\x48\x68\xcf\xa1\x83\xda\x83\xf9\x8f\xdc\x75\x20\x6f\xca\xee\xda\x31\xdf\xf4\x4c\x91\x6c\x35\x06\xd3\x21\x8a\x8a\xf4\x62\x86\xbd\xf2\xc9\xb4\xaf\xfe\xd1\x91\x4b\xed\xd8\x12\x26\x15\x30\xb8\xe9\x24\x29\x73\x88\x74\x93\x37\x8e\x09\x3c\x84\xcd\x28\xde\x14\x30\x3d\x3c\x3e\x09\xed\xc4\x36\x33\xc9\xbb\x5f\x2b\x8d\xba\x05\xaf\x1b\x0a\x70\xfb\x43\x9f\x74\x95\x72\x53\x30\x53\x88\x6d\xeb\xf6\x5b\xb1\x2e\xab\x1a\xf3\x47\xd8\x97\x41\xe1\x7e\xe0\xd2\x19\x71\x18\x9d\x45\x1e\x92\x3f\xdd\x7c\xbc\x62\x5b\xbe\x03\xa8\x5f\xa1\x19\x3e\x0a\xfc\x9a\xf5\x8d\x6a\xdf\x08\x54\x1b\x5f\xdd\x55\xb0\x4f\x1d\x66\xb8\xdd\x1d\x4f\x5f\x6c\x1a\x8b\x30\x67\x68\x4a\xda\x3d\x2b\xd7\xd9\xc9\x36\xe3\x2a\x42\x73\x9b\x29\xab\x7d\x3e\x0e\xdf\xfb\x40\x1e\x01\xa4\xa0\x02\xe0\x21\xa3\xb9\x90\x97\xad\x78\xdf\xaa\x6c\xfe\x51\x11\xfb\xce\x3d\xa2\x17\xc7\xf8\x01\xd5\x2a\x78\x62\x97\x09\x92\x45\x38\x14\x82\x07\xb2\x70\x03\x18\xd3\x4e\xc2\x6b\x9e\x64\xdc\x98\x5e\x50\xca\x73\x30\xb6\xc7\x49\x7a\xfb\xb7\xaf\x6a\x3d\x11\x35\x07\x54\x1e\x78\x2f\xf5\x3f\x03\x39\x80\xdb\xba\x82\x38\x55\x64\xef\x47\x22\x09\x14\xe9\x27\x7a\x24\x78\x1f\x89\x0f\xef\xc5\xce\x39\xe8\x68\xab\xe2\x1b\x31\xf1\xbe\x45\xef\x3c\x8b\x30\x6e\xcd\x82\x67\x0a\x40\xa0\xef\xe2\xea\xb1\x77\x5a\x4f\x10\x8e\x48\x1f\xe7\x58\x2c\x8f\x01\x3d\x33\xf5\x4e\xeb\x29\xf7\x97\x58\xaa\x3f\x6d\x37\xf5\x0f\x12\x08\x08\x20\x76\xb5\xe1\x1c\xbe\x36\x7f\x94\x0a\x65\xd4\xe4\xc6\x5e\xa0\xa8\x9f\x60\x46\x41\x85\x9c\x6a\xb7\x7e\x34\x2c\x45\x06\x95\x52\x9a\x35\x44\x19\x30\xac\x07\xdf\xa7\x23\x05\xf1\x47\x39\x57\xc6\xae\x61\x88\x4c\x88\x07\x41\xee\xc9\x4a\x48\xfd\xf2\xed\x7b\x8f\xd2\xc1\x75\x49\xc2\x8a\x1d\xab\x2d\xba\x74\x1c\x73\x39\x07\x74\xf5\x08\xfe\x36\xca\xc3\xfc\xc0\xb7\x7d\xb9\x9f\x47\x97\xb8\x6f\x94\x3c\x7f\x54\xfd\x46\x05\x8a\xcb\xa0\xb5\x56\x49\x00\x8d\x7b\xef\x4e\x1d\x79\xe2\xb4\x52\xb8\xef\x97\x06\x19\xec\x60\x18\xb9\x55\xec\x3f\x6e\x22\x2a\x47\x8f\x90\xf3\x77\x41\xbb\xb1\x83\x92\x15\x70\xd0\xe1\x92\x9e\xb2\x1b\x21\xd8\x67\xe8\x29\xfb\xb1\xcf\xa4\x94\x08\xa0\xdf\x82\xcb\x56\x21\x2b\x78\xfa\x52\x2d\xf5\x71\xfb\x7f\xbe\x6a\x80\x4a\x8f\xea\x95\xf6\x7a\x1e\x0b\x5b\x85\x84\x64\xf5\xbc\x2c\x1a\x83\x0e\x86\xda\x58\x7f\x0a\xfe\x26\xca\xad\x75\x35\xb5\x26\x19\x0c\xf1\x21\x3c\x6d\xb5\x49\x62\x5b\x39\x41\xee\xf1\x7b\xa5\x1f\x15\xee\xc7\xf4\x25\xf6\x9d\x5d\x7f\x60\xb3\x60\x18\x04\x2d\xc1\x12\x77\xc3\x97\x40\x86\x7e\xe6\xff\xcd\x6e\x30\xe2\x8b\x75\x06\x89\x23\x03\xf6\x2e\x89\x13\xc1\x01\xfe\xdd\xd9\x84\xbd\x99\xb0\xf3\x09\x9b\x4e\xa7\x2f\x27\xa8\xbf\x4e\x35\xc2\x57\x70\xeb\x2f\xf8\xca\x96\x4d\xa2\x2f\xcb\xe8\x03\x20\x63\x66\xed\x13\xc7\xf9\xc7\xc3\x53\x91\x57\xcd\x35\x01\x33\x91\x29\x6d\x8a\xd0\x31\xc9\x5a\xcb\x50\x29\x00\x5a\x8b\x44\xe7\x0e\xaa\x6d\x0a\x9d\x3b\xd8\xe9\x03\xcf\xb9\x54\x40\xd0\xc0\x9b\xa0\x7b\xfa\x72\x44\xd1\x2e\x7e\xe1\x1b\x68\xbf\x54\x9e\xa5\xd6\x76\xd3\xad\xaf\x7f\xb1\xdb\x52\x58\xe9\x31\x97\x45\x61\x0d\x32\x33\x53\x37\xec\xf5\xbf\xb0\xb3\xed\x36\x13\xec\x8c\xfd\x8d\xbd\xe1\x8a\x2b\xce\xde\xb0\xbf\xb1\x73\xae\x0a\x9e\xe9\x72\x2b\xd8\x39\xfb\x9b\xed\x36\x5b\xde\x95\xb6\x16\xd0\x6e\xc2\x38\x53\x65\x86\x86\xde\x77\x0e\xd2\xf9\xd2\xb7\x8b\x87\xd1\x59\x88\xe2\x51\x08\xc5\x8c\xde\xd0\x51\xf8\x57\x7f\xfa\x1b\xa9\x56\x99\x28\x68\x3e\x54\xc1\xb7\xf8\x81\x13\x68\xe9\xeb\x99\xf2\x7e\xea\xbf\xda\x1a\xff\x95\xfd\x8d\x5d\x95\x59\x66\xab\x64\x37\x1a\x3b\x91\x5e\x33\x97\x0c\x25\xd4\xf4\x51\xde\xcb\xad\x48\x25\x87\x74\x28\xfb\xaf\xd3\x5b\x18\xed\x79\x19\x98\x2f\xe3\x35\xed\x65\xa3\x8e\xd9\x7a\x9e\x85\x5a\xc1\x8b\x9a\xc5\xd6\x4a\x27\xe6\x22\x7e\x75\xbc\x11\x1c\xf8\x7e\x69\x3d\xd0\x1d\x05\x25\xbf\x62\xf1\xb4\x83\xb6\x80\xda\x61\xeb\xca\x6a\x39\x0a\xe2\x43\xfd\xd8\x4d\x16\x94\x00\xbf\xa2\x39\xfe\x53\xa3\x8b\x06\x53\xcd\x93\xda\x51\x85\xac\x02\x6c\xc9\x40\xd8\x35\x28\xb6\xeb\x75\x93\x7e\xaa\x4a\x21\x56\xba\x58\xcb\x41\x9a\x91\xb5\xca\xde\xd1\x4d\x00\xd3\x4c\xed\x32\x95\xd9\xa9\x5d\xaa\xa7\x57\x5a\x09\xc6\x8d\x91\x2b\x24\x19\x03\x87\x0e\x8a\x2d\x3a\xa3\xe0\xb6\x6a\xb2\x46\x4b\x00\xec\x03\x5b\x25\x04\xa8\x16\x76\x17\xb0\x43\x90\xed\x66\xca\xbe\x41\x27\x12\x24\xab\x48\xcf\x45\x8d\x5f\x23\xaa\x67\xf7\x2d\xda\x90\xa3\xc2\x5b\x26\x58\x5f\x26\xfc\x11\x13\x8e\x12\x2f\x8f\x88\xf8\x5c\x45\x3c\x8c\x54\x9a\x23\xe9\x41\xf4\xc2\x42\x64\x5a\xad\xec\xac\xe8\xda\x04\xf4\x86\xcb\x63\xe0\x61\x71\x15\xb0\xb0\xce\x1a\xd8\xc3\x92\x1e\xa1\x21\xb1\xe7\xa4\x4c\x83\x4b\xc7\x94\x0b\x6b\x47\xf8\x68\x83\x3f\x0d\xa9\x71\x5d\xb4\x00\xc7\xa1\x44\xee\x8c\xc8\x81\x2c\x1d\x71\x4a\x3e\x92\x85\x07\x67\xa0\xcc\xc1\x16\x0d\x5b\x54\xbd\xf0\xf6\x76\xef\x17\x45\xca\x1a\x04\x09\x03\xe6\xe3\xb7\x44\xba\x0f\xc1\xbf\xbf\x3b\xbb\x7c\x5f\x7b\xae\x89\x7f\x6f\x01\xc9\xdf\x5e\x7e\xb8\x78\x3b\xff\x78\x77\xdb\x78\xce\x96\x46\x7f\xda\x03\x81\xef\xec\xbd\xa7\x00\x01\x7f\x41\xd1\xa6\xb9\x5e\xba\x7c\xe8\xe1\x67\x7a\x43\x36\x6b\x18\xd6\x2c\xa6\xca\x8f\xe5\xa5\x9a\x13\xa7\x93\xd5\x41\xcd\x29\xda\x36\xac\xb2\xf5\x0e\xfb\xa8\xde\xe1\xeb\x9f\x74\x26\x93\x7e\xe8\xaa\x3b\xae\xd6\xfa\xb1\x05\x0b\xb8\x10\x80\xe5\x26\x97\x1f\x55\x0a\x2d\xf4\x42\x24\x45\x88\x26\x37\x1b\xf7\xbf\x1a\x2e\xb7\xff\x0e\x8e\x9e\x38\xdf\x6d\x20\xa3\xeb\xe3\xd3\x70\xb6\x02\x4d\x2e\xa8\x43\xa0\x7b\x1d\x7c\x7b\x80\xdb\x48\x38\x45\x1d\x2a\x3d\x0f\x1b\xf4\xe3\x5a\x67\xe4\x91\x43\xca\xe1\x99\xda\x8a\x3c\xd1\x00\x33\x43\x36\x0b\xcd\x92\xb5\xcc\xd2\x20\xc1\xf4\x1d\xe0\xf2\x01\x3d\xfb\x92\xc4\x35\x85\xc7\x4f\xb8\xe2\x7b\x4e\x5d\x37\xed\xde\xe2\xea\x3e\x0a\x7b\xf4\x94\x40\xdb\xbe\x69\xff\x33\x01\x42\xb1\x2b\x88\x24\xac\x16\x09\xb7\x9d\x5e\xa9\xcf\x28\xa7\xbe\x3d\x6e\x49\x5d\x27\x09\x17\xa7\xa2\x36\xae\x34\xcd\xea\x5d\x09\xd4\xd1\xe8\x49\x45\x18\x98\x11\x50\x9d\x8d\xe0\x68\x8b\x05\x22\x57\x1a\xd4\x99\x0a\xb1\xff\x17\x26\xb6\xcb\x5a\xc7\x19\xfd\xaf\x0e\xca\x3b\x61\x2f\x2a\x0d\x7d\x01\xd4\xc2\x4a\xc3\xf7\x28\x3e\x5b\xe9\x1a\x98\xae\x13\x26\x8b\x99\x92\x06\x67\x66\x2e\x32\xf1\x60\x6b\x17\xc7\x07\x08\xb1\xe6\xee\xce\xae\xd9\x90\x0d\xc2\x1d\x89\x00\x4d\x1b\x5a\x84\x79\x4c\x51\x8b\x81\xc9\x54\x18\x6b\x37\x82\xb8\x8e\xf8\xc5\x2e\x00\x09\xe1\x2f\x84\x36\xa5\x42\xb9\xfa\x01\xe2\x09\x15\xa9\x67\xea\x72\x09\x99\xdc\x90\x3f\x9e\xa6\x78\x0b\x75\x72\x2b\x9e\x2f\x50\x52\x3c\x40\xd3\x9d\xdc\x0d\x04\x69\xc3\xe2\x4a\x12\x0f\x22\xdf\x15\xe0\xd4\x85\x7e\x55\x82\x17\x6b\x26\x8b\x09\x10\x3d\xba\x9d\x72\xa6\x78\x9a\x52\x02\x2c\x16\x67\xbb\x06\xe6\x7d\xcf\x38\xd3\xef\x0b\xfd\xd0\x67\xd8\x1e\x8b\xdd\xc4\x55\xbd\xcd\xb8\x9a\xe3\x09\xf2\x0d\xd0\x9b\x91\x6c\x6f\x57\x18\xbf\x5c\xcc\x3d\x39\xd5\x93\xd4\x33\x52\x76\x8f\xc5\xb4\xad\x1d\xeb\x3e\x34\xc1\xc9\x10\xc8\xe9\xdd\xf5\xc4\xfb\x69\x08\x39\x93\x33\x87\x2e\x18\xbe\x0b\x04\x60\x27\xaf\xa1\x6c\xdc\x6c\xdd\x87\xec\x74\x33\xe0\xd7\x8a\xbd\x1b\x32\xf2\xb5\x33\xa4\x3e\xec\xe3\x61\x5f\x0d\x0b\xf1\x20\xe8\xd7\x9e\x6a\x3d\x2f\xfc\xab\xd3\x8f\xd2\x84\x81\xb9\xd6\x46\x11\x5e\x4c\x81\x12\xe8\x87\xf3\x6e\x9e\x76\x59\xe6\xf8\x1e\xa6\x5b\x10\xd2\x4f\xe9\xa3\x86\x7d\x6a\xa8\xa7\x24\x30\x28\x40\xbd\xa6\xec\x52\x31\x67\xee\x4d\xd8\x0b\x9c\x58\xe6\x05\xb9\x20\x49\xdb\x9b\xe0\x12\x29\xad\x1e\xca\x39\xaf\xc3\x8c\x30\xf3\x27\x2c\x37\x8c\x04\xf5\x12\x94\x3e\x6b\xbf\xbc\x91\x90\x79\x74\x08\xb9\x04\x46\x11\x17\x58\x00\x1d\x92\x78\xed\xde\xa1\xd1\xae\x83\x37\x3b\x34\xd8\xc5\xbb\xd8\x1b\xf7\xa2\xed\xa2\x6d\x49\xe7\xa9\xfb\x9d\xe9\x7c\xa6\x5c\x69\xe4\x92\x34\xa8\x88\x56\x2f\x2a\x4a\x84\x20\x9b\x3f\x9a\xa9\x10\x0c\x76\x22\x78\xa0\xad\x18\x58\x94\xeb\xbb\x00\xe0\x60\x16\x1e\x83\x08\xb4\xfb\xe1\x6b\xd6\xf0\xb0\x13\x7c\x83\xc7\x7c\x9d\x69\x35\xcb\x6c\xa7\xc8\xc2\x11\xbb\x46\x49\x4a\xa6\x04\x7a\xe2\x65\x69\x37\xa3\x88\xc3\x79\xa6\x6c\xe7\xb1\xa5\x04\xf4\x3e\xf5\xcb\x4c\x7d\xd0\xc6\x71\x62\x98\xd0\x1f\x2e\xb4\x4c\xdd\xf6\xc2\x6b\x01\xd2\x1f\xde\xc2\xa1\x4d\x3e\x7f\x64\xb7\xf2\x47\x0b\x64\xa7\x11\xb1\xcd\x4e\x97\x79\x68\x54\xc2\xd5\x4c\xfd\x87\xed\x1e\xd4\xa3\x57\x6e\x58\xf5\x12\x97\x30\x8c\x20\x04\x4b\x3e\x63\xa1\xdf\xfd\xe3\xcb\xcf\x2f\x31\x9b\xa4\x34\x20\xbf\x3a\xa9\x1e\x20\x9e\xce\xbf\xcc\x32\x88\x44\xbb\x16\x78\x4a\x99\xf0\x89\x5e\x24\x16\x5d\xea\xe6\xaa\x6a\x62\x0c\x59\xe8\x7d\x33\x38\x38\x9f\xcf\x58\xc2\x8b\x64\x7d\xe2\x6c\x39\xda\xc6\xdc\xe9\x47\xc3\x87\x3a\x8c\xd6\xd2\x6a\x67\xb4\xb7\x17\xce\x7c\xe3\x39\x36\x2b\xf3\xc5\x36\x01\xb0\x54\xb7\x75\x79\x27\x4f\x01\x8c\x93\x13\x91\x20\x55\x3b\xcf\x3f\xee\xc4\x15\xc3\x8d\x93\xbc\xe4\x8a\x6f\x44\xca\x5e\x40\xde\xe3\x0b\x37\xf8\x33\xb5\x5d\x4c\xb3\xdd\xb2\x20\xa2\x36\xdb\x29\x53\x90\x21\xdb\x73\xca\xcd\xd3\xe6\x35\x69\x4f\x67\x77\x5e\xb4\xda\x6d\x1d\xdf\x37\xfe\x4b\xc3\x0d\x16\xf4\x71\xf9\xde\xb9\xa9\xa2\xc2\xaa\x7a\x08\xdc\xdc\x4f\xd8\x22\xe7\x0a\x14\x64\xd2\xd8\xa8\x0a\xab\x13\x2e\xcf\xc8\x82\xe6\x12\xa1\x14\xcf\x76\x90\x01\x32\x99\x29\xa4\x8c\x03\x6e\xf1\x5d\x92\xc9\x84\xad\x72\xbe\x5d\xd7\xec\x20\xf1\x20\x54\x01\x42\xc4\xd7\x82\x9b\xe3\xa2\xf5\x79\xbd\x04\x36\x38\x9e\x72\xa6\xe0\xf6\xc1\x55\x8d\xe4\x17\xaa\xd7\x71\xb4\x00\x42\x4f\xa4\xf3\x71\x04\x3f\x7b\x69\x68\x2b\xe4\x86\xc4\xb4\x05\x11\x48\xdb\x38\xe6\xbe\xba\x2f\xfc\x8d\xfd\x4a\xdc\x33\x0e\xd3\x79\x6c\xc8\xde\x73\xd9\x1c\xc5\x48\x7a\x59\xb5\x22\x79\x20\xe9\x09\x9e\x6b\x4c\xe3\x23\x4f\x85\x03\xc2\xfb\x8d\x63\x42\x42\x91\xc0\x56\xc8\xfe\x52\x2e\x74\xe6\xe8\x1e\x2f\xdf\x32\x9d\x83\xd2\x4a\xa1\xe9\x4f\x32\xed\xb2\x0e\xa4\x4a\xc5\x2f\x47\x71\xae\xf4\x1f\xf4\xce\x6c\xb6\x9f\x89\x04\x3d\xea\x8d\x85\xdd\x29\x17\xf6\x10\x2e\xdc\xcd\xb8\xf1\x94\xa9\x83\x55\xcf\xb2\x62\x0d\x08\x52\x4c\xd2\x08\x9d\xba\xe1\x3b\x96\xac\xb9\x5a\x45\xae\x09\x00\xf4\x89\xad\xce\x51\x91\xf4\x01\xc8\x0d\x75\xee\x72\xda\x29\x53\x9b\x32\x45\x7c\x20\x01\x01\xda\xda\xa5\x63\xf3\xd5\x2a\x17\x2b\xa0\x19\x99\xa9\x0a\xd7\x04\x10\x3b\x3a\x31\x14\xfc\x4e\x5f\xaa\xfe\xd3\xf0\xdd\x74\xdd\x06\x8b\x7c\xe7\x13\x9d\x49\xce\x37\xac\xe7\x7a\xb7\x4e\x98\x14\xd3\x09\xfb\x21\x80\xd2\x45\xa2\x95\xcf\x94\xee\x48\x93\xad\xb9\xfc\xd9\x9e\xab\x43\x93\x18\xa7\xbd\xee\xf0\x5b\x43\x14\xb8\x75\xd2\xf4\xa6\x9a\x17\xbc\x28\x47\x9c\x41\x24\xfc\x7e\x6e\x5f\xbe\xc1\x77\xfb\xe6\xf5\x39\x22\xc6\x1d\x29\x99\x7d\xde\x9e\x9c\xf6\xdb\x81\xb4\xbc\xad\xaf\xf7\x3a\x90\x33\xdd\xed\x40\x7e\x0a\x53\xdd\x31\xcf\xec\xf7\x21\x67\x1d\x6c\x2a\x3d\x6d\x1a\xeb\x22\x76\xb8\x6e\x4a\x4d\x31\xf5\x6b\x6c\xcb\x0e\xb0\xcd\x75\x5a\x26\x22\xb5\x2b\x17\xee\x43\x88\x88\xf1\xa4\x2e\x95\x4d\xb2\xed\xa0\xad\x30\x53\xc1\xa9\xfb\xb5\x7c\x0e\x83\xc8\xc0\x7d\xf7\xdf\x75\xf8\x1b\x9c\xc5\xd7\xd6\xe9\xf1\xfa\xc4\x7e\xca\x47\x9e\x53\xfe\xf3\x55\x0a\x6f\x9d\xcb\x95\x54\xbc\xd0\x39\xfb\xce\xa7\x6e\xbf\xf4\xba\x5f\xdd\x16\xc2\xc8\x6d\xa2\xd2\x45\xb8\x4d\x7c\x55\xc3\xa3\x6d\x92\xda\xa7\x4c\xc1\x37\xdb\x98\x14\xd7\xab\xaa\x53\xcf\x64\xd8\x09\xde\x36\x01\xdf\xa9\x34\x21\x6f\x73\xa6\x28\xe2\x80\xe3\xa6\xf3\x98\xd5\xbd\xf3\x6c\xde\x96\xc5\xfc\x40\xa2\x27\x7c\x79\x9c\xe3\x89\x60\x08\x1f\xf8\xb6\x9f\x3a\x87\x93\xcb\x01\x13\xd7\xbc\xd4\xbc\xb3\x54\xaa\xf3\xb3\x5f\x37\x65\x24\x95\x6f\x3d\x74\x7e\xfd\xde\x05\x8a\xc2\x7d\xb0\x72\xc1\x82\x81\x40\x0e\x51\x4c\x04\xc2\xab\xbd\xdf\xd6\xec\x29\xee\xf8\x76\xce\x33\x5d\xa6\x8c\x36\x35\x0a\xc3\xe7\x53\x3c\x1d\x81\xd4\x77\x3a\xed\x4a\x6c\x1a\xa9\xe7\xec\xf7\x1f\x78\xaf\x7d\x05\xc2\x6f\x1d\x3b\x70\xef\xd2\xa7\x9e\x7d\xb6\xa1\xa7\x9e\x86\xb1\xf7\xdb\xf1\xa8\xb1\xf7\x5e\x70\x60\x18\x1c\xe7\x20\x85\xfb\xa8\x4c\x33\x58\x6f\x71\x00\xa1\x85\x03\xb9\x12\x98\x35\xf7\x47\x7f\xce\xf1\x10\xf4\x7f\x6a\xcb\x73\xa1\x8a\x39\x7c\x71\xdc\xc7\xe0\x23\x9f\xe0\xf5\x8a\xc1\x34\xc8\x11\xfc\x6f\xb7\x1a\xfd\xfb\x8e\x4e\xe8\xdf\xd9\x0d\xf9\xb4\xec\x7e\x25\x01\x44\x6a\xee\xd9\x77\x12\x30\x47\x51\x2c\xd4\x0f\x5c\xc7\x70\x51\x83\x0e\xe8\xbd\xa8\x41\x95\xad\x7d\x50\x83\x42\xed\x21\x54\x0d\xa5\x90\x7b\x8f\xb2\xc2\xed\x56\xeb\xfe\x16\x49\x0c\x5c\x55\xfe\x0d\x74\xb0\x76\xfc\x32\xf6\x9f\x22\xd7\x21\x03\x08\x9d\x55\x71\xc1\xbd\xf6\xfa\xe1\xea\xc8\x68\x8f\xa3\x2e\x6f\x2c\x4c\x09\x7f\x21\xc6\x26\xf4\x28\x2c\x76\xee\x3a\xd2\x11\x42\xda\x8a\x64\xde\xa1\x42\x32\xa8\x2a\xd1\xc5\x33\x56\x15\x91\xb5\xc3\xcc\x2d\xd0\x53\xf0\x57\x50\x6a\xcd\x86\x6f\x09\xdf\x47\x50\xe2\x7a\xf0\x66\x0a\x8d\xf8\xb7\xbf\xfe\xfb\xb4\x4b\xf7\x1e\xaa\x3e\x16\x2e\xe5\x2b\xff\x2e\x97\x42\xa5\x10\x8c\xe5\x69\x53\x20\x4b\x55\xbc\xf3\x95\xed\xd9\x4e\xc3\x27\xc9\x08\x6e\x3f\x6a\xcd\x1c\x27\xd1\x57\x88\xe8\x87\x4d\xd6\x2f\xdf\x4a\xbc\xaf\xcb\x94\x30\xf3\x74\xa7\xf8\x46\x26\x5f\xb5\x8e\x3b\x29\xb2\x14\xaa\x48\x5f\xdf\x17\x95\x4a\x45\x72\x3f\xd6\x26\x38\x98\xde\x5f\x24\xf7\xec\xc7\xdb\x0f\xef\x51\xcd\x55\x9a\x99\xba\xe2\x85\x7c\x10\x77\x79\xe6\xc3\x01\xc4\xd7\x94\x67\x6e\x8d\x54\xe9\xa6\x23\x6a\x23\xc7\x4d\xed\x0c\x87\x58\x0d\x60\xb3\x3b\x59\x94\xc9\xbd\x28\x4e\x73\xae\x52\xbd\xc1\x66\x9c\x9a\x72\xb9\x94\xbf\x4c\x0b\x9e\x77\x48\x03\xa0\x1f\xe1\x1b\xda\xb9\x41\xf0\xa9\x08\x36\x2f\x9a\xba\x8f\x90\xe8\x4b\x32\xe2\x15\xe3\x16\xf3\xd2\xf8\x46\x00\xb7\x23\xab\xca\x6a\x40\x29\x98\x3b\x0b\xea\x93\xc6\x10\x82\x5e\x93\xb6\xf5\xe7\xc8\xb8\xff\x1c\xd5\xaa\xaa\xaf\xee\x2a\x15\x14\x1d\x37\xfc\x1e\xef\x87\xab\x5c\x18\x33\x61\x46\x43\x8d\x67\xca\x61\xd1\x5d\xbe\x14\xe0\x5e\x80\x1d\x36\xdb\xb1\x44\x6f\x25\x08\x60\xfa\x76\xad\xf5\x23\xf8\xe9\xe3\x4c\x51\xd0\x2c\x2e\x55\x21\x33\xc6\x97\x05\x39\xf1\x81\x0a\xdf\x49\x5f\x99\xe9\x4c\x41\x28\x36\x81\xe6\x03\x44\xc2\x87\x5f\x7c\x23\x0c\x5b\xf2\x44\x66\xb2\x20\x82\x2e\x48\x32\xe2\xb6\xbd\xf6\x3c\xb0\x7d\x99\xf3\x1d\xcf\xc2\xc5\x8a\x67\x65\x48\x8e\x3d\x31\xa2\x87\x00\x52\x9a\x39\x3a\x08\xbe\x06\xe3\x9c\x8c\x83\x0f\x48\x96\x7d\x66\x3f\x7e\x55\x3b\x45\x7f\x17\xff\x6f\xe5\x1e\xde\x67\x15\x1c\x71\x21\x3f\xe6\x70\x6c\x5e\xb9\xbd\x5e\x74\xb0\x33\x64\xea\xf0\xc1\x15\x53\x3c\xa4\x9f\xfa\xe3\x11\x62\x26\x1d\x97\xfe\xa9\x53\xf9\x6a\x7e\x61\x44\xef\xb5\x1b\x89\x5f\xc9\x9d\xd1\xc5\x60\x3e\xa4\xfa\xce\x1b\xff\x49\xeb\xec\x58\x8f\x3c\x91\x32\x48\xad\xe6\x20\x7c\x7b\xcc\x75\x12\x27\x80\x77\x6c\x5d\xbe\xf5\x31\x77\x4f\x09\x5e\x95\xcb\x22\x38\x18\x55\x01\x36\x32\xa8\x44\x0f\x52\xdc\x6c\x5b\x40\x17\x23\x11\xef\x50\x06\xa2\xb5\x9c\x69\xdf\x0c\x11\x44\xfc\x1c\x3c\xd4\x11\x68\x53\x6b\x35\x1c\xe5\xac\x43\x99\xda\xda\xa7\xbc\xe3\x2e\xa6\x57\xf6\xfd\x18\x7d\xdb\xf5\x27\x8a\xe3\xdb\xf3\x93\xac\xf8\x99\x8a\x2c\x76\xe4\x44\x73\x29\x05\xbe\xd7\xda\xfc\x79\x95\x69\x78\xb4\x3f\xef\x18\x0e\xfd\xde\x9d\xf3\x6d\xac\x86\x07\x58\x90\x44\x6f\x16\x52\x39\x56\x02\x72\x72\xc3\x55\xe3\xcc\x51\x94\xfa\x80\x84\xbb\x32\xa0\x46\x4a\xad\xef\xbd\x99\x13\xb3\xbd\xc6\x5b\xd6\xbe\xeb\x78\x7c\xbf\x7b\x5a\xba\xff\x8e\x48\x63\xbd\x05\xf6\x00\xc9\x1e\xf9\xce\x80\x62\xb4\xb0\xbb\xe2\x12\x1d\xbb\xd5\xfa\x4f\x22\xf3\xc3\xd1\xdf\xce\x14\xf4\x50\x49\x42\xf2\xd4\x16\x49\x0c\x00\x99\xd3\xc6\x0e\x5c\x5f\x2f\x4c\x7b\xe7\x7c\x9b\x58\x4d\xde\x1b\xab\xc1\x20\xf4\xff\x8c\xf0\x4c\x8f\x13\xf8\x48\x5f\x74\x74\x4c\xa2\xc5\x48\x30\x21\x48\xdc\xf2\x21\xea\x09\xdb\x70\xa9\x68\x19\xa0\xfe\x60\x2a\x16\xe5\x6a\xd5\xe9\x22\xfd\xf5\xc7\x5a\xaa\xeb\xe4\xef\xde\x17\xde\xcb\x56\xf7\x14\xde\xe2\x4b\xf7\x25\x74\x5f\xdb\x7b\xdf\xd7\x71\x10\x7f\x43\x6f\x7c\x6b\x48\xac\x31\x89\x9e\xc6\x1b\x7f\x39\xc4\x1b\xef\xb0\x5d\x90\x62\x47\xd7\x69\x87\xbf\xf9\xcd\x4d\xff\x75\xdc\xf4\x83\x26\x05\xd2\xba\xcc\x65\xd5\x40\xef\xa9\xe1\x81\xcc\x87\x9e\x0c\x18\x6a\x85\xec\x62\x76\x77\x4f\x0d\x5b\xf0\xe4\x19\xa8\x10\xe1\x74\x3c\xde\x1f\xb8\x07\xfc\x72\xa3\x37\x82\xc1\xa7\x0c\x2a\xd7\x30\xca\x62\x9c\x00\x5a\xd5\x36\x30\x20\x46\x08\x8f\x02\xc7\x29\x22\x57\xd2\x60\x54\x7f\xa7\xc4\x23\xb3\xa7\xd5\x24\x86\xef\x45\xc3\x03\x92\x66\x2f\xad\x75\x58\xc1\xfa\x7b\xca\x86\x5c\xac\x78\x9e\x42\x86\x09\x2d\xc9\x8c\x27\xf7\xf6\xbf\xa1\x7e\xf4\x45\x82\x18\x3a\x75\x05\x84\xbd\x86\xd2\xa4\x4a\x90\x0c\x8f\xd0\x8c\xa1\x7e\xf8\xba\x61\x3c\xc9\xb5\x41\xa7\x91\x57\x02\x86\x0c\x67\x30\x60\x1f\x64\x5a\xf2\x0c\xbf\xd8\xe9\x69\x1f\x0b\x5f\xab\x03\x8e\x22\xd1\xae\x26\x9a\x8d\x86\x03\x39\x8a\xa0\x1b\xa7\x33\xf5\xd6\x07\x4c\x5e\xb3\x3b\x23\x08\x65\x66\x1c\xed\x79\x6f\x4d\x9f\xcd\x7c\x68\x60\x02\x3b\x6d\x88\x9e\x0e\x70\x20\xeb\xa8\x23\x4c\x77\x4f\xec\x21\xd4\x3c\x66\x50\x46\x13\x03\x5f\x46\xca\xe1\xa1\x5b\xf0\x9e\x90\x0b\x9e\xee\x62\x36\x3e\xa9\x18\x44\xe9\x18\x4f\x37\x52\xd9\x45\xe0\xd4\x29\xfd\x49\xe3\x88\xea\x11\x72\x0c\x22\x4e\x59\x56\xdb\x04\x0d\x53\xc2\x1a\x97\x3c\x97\xd9\x0e\xee\x13\xdb\x5c\x9c\x44\xdf\x89\xc6\x87\x32\x9e\x80\x72\x9f\x68\x44\x4a\x23\x96\x65\x86\xb7\x0e\xb8\x97\xfb\x06\xd0\x8e\x74\x77\x39\xb1\x06\x47\x41\xd2\x29\xd1\x87\x51\x90\xf0\x29\xb2\x47\x1a\xd1\xca\x71\x11\xb7\xc0\x16\x99\x03\xc8\x7d\xad\x1f\x5d\xaa\xdb\x23\x0f\x58\xe6\xae\xd3\xf5\xc9\xa2\x2c\xfd\x76\xa8\xbb\x01\xba\x7d\x2a\xa2\x7c\xf3\xa1\x35\xfa\x4d\xa4\x7e\x6f\x92\x0a\x9a\x43\x9a\xbe\xc1\x73\x5d\x1a\xcc\x98\xb3\x63\x09\xe7\x97\x73\x74\x54\x1d\xd7\xcc\xb7\x4e\x1a\xad\xd8\xac\xfc\xfe\xfb\xdf\x0b\xf6\x3d\xa4\x10\xd2\x7d\x04\xe3\x63\xc0\x17\x89\xa5\xc3\x96\xed\x3f\x20\x90\x4c\xb2\x31\x22\xac\x0d\xa2\xea\xf2\xf5\x01\xe4\xc9\x93\x35\x33\xe5\x02\x11\x8c\x9c\x42\x2c\x5c\x79\xde\xe9\xf7\x1a\xc0\x88\x78\xb2\xbb\xda\xff\x2f\x09\x28\xa0\xca\xc5\x4c\x6d\x35\x52\xa3\x03\xf4\x73\x21\xd8\x86\xe7\xf7\x20\x5a\x8a\xee\x79\xa0\x82\xff\x4e\x8a\x69\x35\xbc\xf0\xb2\x52\x1f\x0a\xe8\x20\xe5\x31\xcb\x4b\xa5\x9c\x0a\x13\xb3\x86\x69\xf0\xf5\x4f\x66\x6a\x51\xc6\x77\xcf\x4a\xb0\x20\x4c\x2d\x08\x18\xc0\x66\xab\x81\x2b\x84\x2a\xc5\x4d\xa8\xd7\x94\x0d\x88\x1a\xcc\xd4\x13\x87\x0d\xf6\x39\xfc\x3e\x91\x0d\xe6\x9c\x79\x51\xbe\x02\x34\x37\x16\x0a\x86\xe1\xc0\x69\x0f\x46\xce\x27\x50\x0b\x9e\xb0\x1f\xe5\x83\x98\xb0\x9b\x2d\xcf\xef\x27\xec\x2d\x86\xff\xfe\xa4\x17\x6d\x3e\xbc\x06\xa1\xc4\xd1\x7e\xbc\xc3\xdc\x58\x7d\x44\x2b\xed\xd6\xff\xcf\x0d\x62\x00\xd6\x15\xfb\xfe\x9f\x89\xc8\xeb\xe0\xfa\xf8\x7b\xf7\x44\xec\x09\x53\xff\x06\x5e\xfb\xbb\xbc\x15\xf7\xd3\x7c\xfc\x2e\xfe\x5f\xb7\x7f\x39\x8b\x0b\x6c\x4f\xda\xe5\x5a\x51\x69\xbf\xae\xc4\x66\x99\xd6\x0f\xe5\x66\x7e\xf3\xb0\xa5\x40\xe9\xe3\xa9\x4f\x6d\x1f\x01\xba\xa7\x57\x5d\x7f\x9d\x67\xda\x94\x79\xff\xe2\xbf\xae\xd6\xda\x7d\xbd\x85\xea\x13\x26\xdb\x66\x21\x80\xb5\x60\x28\xfc\x04\x1f\x9b\xff\x87\x5e\xcc\x01\x6b\x75\xdc\x0a\x6f\x2b\xce\x13\x08\xeb\xa4\x52\xd5\x70\x42\xde\x6c\x05\x30\x4e\x05\x53\x34\x04\x04\x6a\x33\xcc\xbb\x46\x66\xca\x71\xae\x63\xc6\x6c\x9e\x0b\x20\x87\xce\x05\x28\xdb\xb1\x2d\xcf\x3d\xe0\xc1\x59\x44\xd1\xcd\x27\x80\x62\xe2\x2c\x37\x48\x56\xa5\xfb\xd6\x42\x08\xe5\x7b\x7b\x8c\x29\x01\x44\xc8\xb5\xde\x27\xb4\xdb\xa3\x70\xd4\xfb\x1d\x2a\x9c\x8d\xf7\xa2\xbb\x20\x98\xdc\x2b\x51\x44\xbb\x79\xcd\xb4\xa8\x2c\xcd\x4a\x84\xea\x57\x85\xf8\x6f\x8d\x41\xd7\xc8\xb9\x2a\x0e\x94\x41\x31\xbd\xa7\xf0\x97\x7f\xe2\xc5\x1a\x2f\xb4\x1b\x5d\x08\xdc\x33\x91\x25\x08\xe7\x0b\x7a\x9d\x17\x99\x5e\x80\xa4\x9c\xfd\xa5\xeb\x6e\x98\xd0\xd2\x1e\xd4\x75\xcd\x01\x1b\xb2\x33\xd8\xdd\x04\x32\x6d\x73\x61\x80\x70\xa5\x19\xa5\x1a\x8a\x4f\x1e\x77\xe9\x6e\x56\xd7\x6e\xfa\x6f\x1b\x97\xed\xa6\x28\x83\x5d\xd6\x00\x56\xbd\x38\x20\x83\xa6\x21\x71\x41\x64\xc5\x14\x06\x46\xbe\xd2\x5a\x7b\x9d\x72\xf9\x4c\x9d\xe1\x2f\xd1\x21\xc0\x83\xca\x92\xc7\x83\x92\x48\xad\x5f\x7f\x98\xbe\xca\xce\x62\x04\x22\x79\x08\x26\xc1\x97\x09\x97\x81\x09\x64\x35\xaa\x42\xe6\x82\x29\x40\x21\xcc\x94\x29\x17\x27\x81\x98\xc4\xde\xe2\x1e\x80\x4c\xc7\x88\x2d\x87\xab\x0c\xf0\x15\x9d\xb4\x1c\xc3\xe8\x99\x0c\x6a\x29\x8e\xc0\x8f\x67\xb4\xf9\x43\xae\x24\x66\xc6\xfb\xb6\xfb\x72\xec\x65\x0d\x6e\xd1\x0e\xae\x84\x87\x5d\xdf\x7e\x01\x7a\x4e\x90\x81\x79\x8d\x28\x8a\x6f\x7d\x80\xc7\xd1\xd0\xa1\x47\x37\xc4\xd3\x66\xea\xff\x77\x67\x43\x37\xa8\x78\xc4\x4c\xb7\x3d\x63\x8f\xa8\x4e\xb0\x73\xa5\x6e\xee\x0a\x19\x19\x81\xdd\x95\x6a\x4c\xf9\xb6\x52\xb9\xc3\xb5\xc4\xa2\x1e\x9a\xd2\x65\xe1\xd7\x07\x69\x22\xba\x6f\xf8\xda\x8d\x10\xec\x75\x2e\x96\xaf\x3f\xe7\x62\x39\x77\x23\x3d\x85\x06\x4d\x6d\x8b\x9a\xa4\xdf\x03\x27\x87\xd9\x6a\xd5\x4e\x7e\xb8\x87\x9c\xb4\xd6\x24\x2c\x27\x6a\x93\x5c\xb2\x20\xe7\x69\xdb\x03\x0c\x10\x22\xad\xb3\x91\x37\x6a\xf6\xd5\x8f\xb9\x2e\x24\xd8\x00\xa8\x55\x87\x0c\xe6\xdf\xff\xf1\x56\xe9\xb3\x21\xc7\xdb\x6d\x15\x32\xe3\x36\x7b\xae\xfc\x81\xd7\x8d\x0b\xfd\xba\xe8\x74\x18\x40\xb3\xe5\x8f\x8a\x78\x6c\x46\xb9\x9e\x86\x1d\x6b\x35\x00\x51\x74\xac\x35\x30\x70\x61\x95\x29\xe7\xe9\x93\x5e\x49\x71\x12\xc9\xad\xf3\x2c\x8b\x35\x15\x42\xa4\x6d\xa6\x42\x5e\xaa\xb5\x5a\xb3\xcc\xb9\xf0\x2a\xf6\x06\xb1\x16\xa5\x90\x10\x2c\x26\x8e\x74\x85\xe8\x0a\x29\x1e\x76\xb2\xe0\xa0\xe5\xeb\x55\xb4\xf6\xad\xe6\xa7\xba\x44\xfe\xca\xf2\xa2\xf7\x44\x9e\xf1\xb3\xf3\x7b\xd1\x80\x33\xef\xad\x6b\x7b\xa4\x23\xa2\x94\x80\xc5\xec\x76\xd9\x84\xe7\xb9\x43\xf9\xd3\x57\x99\xbd\x2b\x2d\x79\x52\x71\x73\x76\xd4\x73\x2d\x92\xfb\xad\x96\x6a\xf4\x5e\x54\xa1\xb8\x80\xc9\x5e\xb0\x50\x9a\xbf\x1d\x0e\x3a\x1c\x2b\xf6\x24\x36\xc4\x00\xbc\xc2\x41\x43\x03\x19\x1b\x67\x5e\x2b\xb9\x7b\xda\x3d\xb5\xff\x42\x84\xb3\xe1\x19\x7c\xb1\x2d\xf1\xa1\xda\xa9\xc2\x5b\x1c\x3b\x15\x26\x50\xde\xc8\xfe\x1a\xd8\xd9\x9c\x55\x28\x0c\x5b\xbb\x14\x5c\x90\xbf\x79\x86\x7e\xf3\x0c\xfd\x0f\xf7\x0c\x7d\x4d\xb7\x10\x60\x63\x9e\xd3\x27\xd4\x13\x20\x3f\x62\x39\xfa\xaf\x8e\xce\x71\x6c\xb5\x8e\x27\x91\xec\x73\x94\xe9\xd8\x04\xfa\x3b\x22\x0c\xdb\x3f\x0b\x9e\xdc\x0b\xd5\x19\xa3\x77\xf4\x45\x9d\x0a\x9c\x4f\x8b\x60\x69\x63\x5f\x8a\xde\xee\x87\xb2\x04\xa8\x13\x91\x06\xb7\x11\x82\xd8\x75\x02\xb6\xa7\x6d\xf8\x09\x80\xc6\x74\xee\x89\xad\x0d\x65\xe1\x61\x30\x12\x69\x92\x10\x2c\x55\xa3\x82\x1e\x8a\x89\x73\x1f\x9e\x6f\xb5\xce\x5a\xa1\x71\x4f\xda\x81\x8d\x44\x99\xa1\x9d\x77\x89\xc6\xa8\x89\x01\x63\xae\x17\x43\xd2\x45\x48\xd1\xc0\x7c\x0c\xd0\xc2\x80\xd9\x94\x96\x90\x4b\x19\xba\x23\x12\xd8\xe3\xde\xe1\x42\x18\xb1\x85\x48\x38\x48\x7f\x3a\xf0\x5e\xc2\x7d\xf6\x49\x4c\x8a\xd4\x48\x07\x31\xcd\xef\x74\x44\x2d\xa1\xdc\xb9\x6c\x13\xbe\x18\xbb\xb8\x6a\x16\x82\x83\x96\x63\xcd\x1d\x92\xc4\xd1\x2e\xee\x93\xb4\x75\x1c\xd3\x73\xd0\xdf\x1b\x76\xc2\xb5\xee\x3b\x97\x54\xd0\x39\x94\x33\x7c\x23\xfd\x11\xd2\x71\x36\x03\x91\x3b\x33\x75\xe6\x95\x4e\x03\xf6\xcb\x23\xf7\x30\x5c\x8a\x98\xc5\xc6\xd0\x20\x97\x63\xb8\xb9\x4c\x98\x29\x93\x35\xb0\x55\x56\xf7\xa9\x78\xdf\x6a\xae\xd8\xc9\x4c\xd9\x0b\x11\xb8\x5a\x36\x1c\xf2\xe2\x1f\xad\xb1\x6a\xe4\x7f\x0a\x0f\xcf\x22\xf2\xae\x18\x91\x85\x17\x27\xad\x5a\xd1\x6b\x8e\x38\x14\x01\x16\x01\x53\x52\x6e\x53\x5e\x88\xe9\x2c\xa0\x6d\x24\x7a\x3a\x1d\xca\x83\x4c\x66\x13\x37\x2c\xc6\x31\xd6\x76\xda\x4c\x2e\x45\xb2\x4b\x1a\x3a\x40\xfd\x34\x11\xbf\x5d\xdb\x7e\x5d\xd7\x36\x64\xd9\xc5\x9c\xc1\x31\x5d\x4b\x55\xbd\x0e\xaf\x1f\xd7\xb9\x82\x45\x35\x31\x23\xfa\xf9\x2b\x5e\x3b\x5b\x6c\xe0\x71\xf6\xfc\xe0\x7b\x50\xff\x71\x16\x2e\xb6\xe1\xb0\x8e\x28\x10\x1a\x66\x61\x1c\x5c\x2c\xe2\xa9\x63\x0d\xda\xc1\x61\xfd\x6e\x96\x99\x5f\x15\x38\x69\xc8\xc5\xd5\x5a\xdc\x1e\xae\x74\xe5\x2c\x6d\x25\xf0\xbc\xeb\xb1\xb8\x23\x56\x77\x5e\xbc\x30\xbe\xd7\xab\x3b\xa0\xc3\xfe\xbf\x97\xa6\xf8\xa9\xa6\x19\x7a\x98\xe8\xe8\xb3\x99\xa6\xae\xaa\x58\xcd\xa1\x16\xd5\x75\xd5\xe6\xd1\x4b\x37\xe7\xe0\xf2\xe4\x54\xe2\x6c\xbd\xc7\xdc\x83\x3e\xfb\xfe\xfa\x8c\x47\xd3\x63\xce\xb7\x5b\x91\xbb\x83\xbc\x61\x6b\x81\xe4\x1a\x7c\x05\x34\x13\xd7\x02\xb5\xba\x6b\xb7\x5c\xbb\x95\xd4\x8a\x86\xc7\xa0\xeb\xa6\xed\x23\x77\x55\x66\x59\xe7\xc8\xed\x57\x72\xba\xba\x7b\xff\x7e\xfe\xd3\xd9\xfb\xbb\x0b\xd7\xfc\x56\x65\xa4\xe8\xb1\xce\x3e\xf1\x35\xa1\x3e\x09\xda\x8b\xf6\xb3\xc2\xe9\x85\xeb\xd0\x6a\x74\x72\x95\x59\x56\x55\xcd\x9a\xa9\xcf\x54\x0e\xc0\xb4\x51\x11\xd4\xf6\x1b\xeb\xed\xb8\xea\xf7\xe1\xb1\xcf\xb6\xf0\xcf\xf8\xee\x09\x0b\x8d\x78\x0d\xda\x8e\xa4\x19\xd7\xde\xaf\x94\x0d\x73\xc4\x72\x40\x30\x70\xd7\x72\x78\x6a\x5d\xc0\xc3\x96\xc7\x9d\x02\x46\x72\x91\x3a\x39\xbf\x27\x59\x1d\xd8\x77\x9f\xab\x71\x6a\xbf\x97\xa7\x78\xa5\x81\x72\x27\xa8\xe6\x06\x1a\xd5\x41\xf0\x6c\xa6\xd0\x07\x6a\xeb\x54\xe8\xee\x3a\xb1\x4b\x32\x6f\x33\xae\x56\x25\x5f\x59\xeb\xd6\x7d\x7c\xa6\x36\x72\xb5\x46\x1e\x90\x72\x1b\xf0\xc9\x9c\x29\xa0\x8b\xa9\x4d\xa1\x1a\x3e\x59\xaa\x99\xa2\x36\xa9\x55\x28\x1e\xb1\xb2\x7f\xba\xf1\xcd\x21\x50\x3a\x16\x44\x82\x74\x6a\xa6\x70\x70\x91\x9f\xc4\x45\x42\xe0\xc6\xc2\x8b\xfa\xd4\xe5\x10\xbb\x44\x9d\x7e\xbb\xa7\xaf\x20\x26\x33\x53\x3e\x45\x17\x3d\x47\xd4\x86\x48\xb8\x04\xab\xb4\x7f\x3f\x71\x83\xe1\xd6\x04\xd5\xad\x7d\xd6\x1f\x7d\x06\xd8\x05\x37\x1f\xa1\x3e\xdd\xdc\xc6\x06\x7a\x0b\x79\xb4\x71\x74\xf1\x36\x40\x5e\x76\x7b\x6d\x5c\xbb\xf0\x99\x4e\x68\xab\x2e\x17\xd9\x88\x2a\xe1\xf3\xbd\x95\xc2\x2d\xb9\xbf\x52\x03\xae\xc3\xd7\xb5\xa5\x65\xa7\x69\xdf\x67\x17\x5a\x77\x8c\xcb\x13\x06\x14\x2b\x95\xa2\x17\xf6\x75\x46\x99\x14\x87\xcc\x97\x01\xc9\x8a\xf5\x2e\x72\xbb\x4f\x5f\x85\x32\x69\x0e\xaa\x4e\xb0\x9f\x06\xd7\xc8\x5b\x08\x74\xd8\x8d\xda\x61\xe9\x9c\xab\x6c\xb0\x1d\xdb\x24\xc5\x93\x9c\x8c\xb3\xc4\xed\xc5\x2e\x1e\xd4\x58\xb6\xf3\x7f\xe2\x27\xd1\x24\x8c\xdc\x04\x2a\x99\x94\xb9\xb1\xdb\x25\xed\x77\xb4\x6b\xeb\x9c\xf1\x99\x72\xa9\x6a\x6e\x3b\x3e\x73\xe0\xdc\xdc\xff\x15\x13\x40\xb7\xc8\xa7\x0f\x16\x6b\xc1\xb4\x12\x6e\x37\x9c\x29\xa7\xfd\x3d\x61\x7c\x61\x9c\xa4\x36\x57\x3b\xaf\x73\x2d\x3d\x7d\x11\x57\x0c\x50\xcf\xfb\xf7\xbc\x9a\x19\x50\x39\xe7\x7f\x67\xff\xef\xbf\x7f\xf7\xff\x02\x00\x00\xff\xff\xd1\x4b\xbf\x0d\x7d\xb7\x04\x00") +var _adminSwaggerJson = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\xfd\x7b\x73\xeb\xb8\x95\x2f\x0c\xff\x3f\x9f\x02\x67\xcf\xa9\xea\xee\x44\xb6\x3b\xc9\x4c\xde\x94\xa7\x4e\xbd\x8f\xda\xd6\xde\xad\xd3\xbe\xc5\x97\xee\xe9\x67\x94\x52\x43\x24\x24\x21\x26\x01\x06\x00\xed\xad\x4e\xe5\xbb\x3f\x85\x85\x0b\x41\x8a\x94\xa8\x8b\x6d\x79\x37\x67\xaa\xd2\xde\x22\x89\xeb\xc2\xc2\xba\xfe\xd6\x3f\xff\x0d\xa1\x0f\xf2\x19\xcf\x66\x44\x7c\x38\x45\x1f\xfe\x78\xfc\xed\x87\x9e\xfe\x8d\xb2\x29\xff\x70\x8a\xf4\x73\x84\x3e\x28\xaa\x12\xa2\x9f\x4f\x93\x85\x22\x34\x4e\x4e\x24\x11\x4f\x34\x22\x27\x38\x4e\x29\x3b\xce\x04\x57\x1c\x3e\x44\xe8\xc3\x13\x11\x92\x72\xa6\x5f\xb7\x7f\x22\xc6\x15\x92\x44\x7d\xf8\x37\x84\xfe\x05\xcd\xcb\x68\x4e\x52\x22\x3f\x9c\xa2\xff\x31\x1f\xcd\x95\xca\x5c\x03\xfa\x6f\xa9\xdf\xfd\x1b\xbc\x1b\x71\x26\xf3\xd2\xcb\x38\xcb\x12\x1a\x61\x45\x39\x3b\xf9\xbb\xe4\xac\x78\x37\x13\x3c\xce\xa3\x96\xef\x62\x35\x97\xc5\x1c\x4f\x70\x46\x4f\x9e\xfe\x70\x82\x23\x45\x9f\xc8\x38\xc1\x39\x8b\xe6\xe3\x2c\xc1\x4c\x9e\xfc\x93\xc6\x7a\x8e\x7f\x27\x91\xfa\x17\xfc\x23\xe6\x29\xa6\xcc\xfc\xcd\x70\x4a\xfe\xe5\xdb\x41\xe8\xc3\x8c\xa8\xe0\x9f\x7a\xb6\x79\x9a\x62\xb1\xd0\x2b\xf2\x91\xa8\x68\x8e\xd4\x9c\x20\xd3\x0f\x72\x4b\xc4\xa7\x08\xa3\x53\x41\xa6\xa7\xbf\x08\x32\x1d\xbb\x85\x3e\x36\x0b\x7c\x01\xa3\xb9\x49\x30\xfb\xe5\xd8\x2e\x13\xb4\xcc\x33\x22\x60\x6e\xc3\x58\xb7\xfe\x89\xa8\x3e\x34\x5b\xbc\x1f\xbe\x2d\x88\xcc\x38\x93\x44\x96\x86\x87\xd0\x87\x3f\x7e\xfb\x6d\xe5\x27\x84\x3e\xc4\x44\x46\x82\x66\xca\xee\x65\x1f\xc9\x3c\x8a\x88\x94\xd3\x3c\x41\xae\xa5\x70\x30\x66\xaa\x7a\x63\xf1\x52\x63\x08\x7d\xf8\xdf\x82\x4c\x75\x3b\xff\x7e\x12\x93\x29\x65\x54\xb7\x2b\x0d\xfd\x04\xa3\x2d\x7d\xf5\xaf\x7f\xab\xfb\xfb\x5f\xc1\x8c\x32\x2c\x70\x4a\x14\x11\xc5\x8e\x9b\xff\xab\xcc\x45\xef\x91\xee\xbc\xd8\xc7\xea\xc0\x2b\xb3\xbd\xc2\x29\xd1\x7b\xa2\x77\xca\x7e\x01\x7f\x0b\x22\x79\x2e\x22\x82\x26\x24\xe1\x6c\x26\x91\xe2\x4b\x6b\x40\xa1\x05\x4d\x5e\xd5\x27\x82\xfc\x23\xa7\x82\xe8\xbd\x52\x22\x27\x95\xa7\x6a\x91\xc1\x20\xa5\x12\x94\xcd\xc2\xa5\xf8\x57\xaf\xd5\xd4\x0c\x55\x6e\x30\x33\xf3\x41\xe3\xc4\x46\xac\xef\x5e\x89\x30\x43\x13\x82\xf4\x59\xa4\x31\x11\x24\x46\x58\x22\x8c\x64\x3e\x91\x44\xa1\x67\xaa\xe6\x94\xe9\x7f\x67\x24\xa2\x53\x1a\xb9\x35\x3b\x9c\xb5\x81\x3f\x57\xaf\xcc\x83\x24\x42\x0f\xfc\x89\xc6\x24\x46\x4f\x38\xc9\x09\x9a\x72\x51\x5a\x9e\xe3\x11\xbb\x9f\xeb\x75\x48\x27\x94\xc1\xc9\xd3\x6b\xe9\x28\xe4\xf7\x6e\xb9\x7e\x8f\x74\x7f\x28\x67\xf4\x1f\x39\x49\x16\x88\xc6\x84\x29\x3a\xa5\x44\x56\x5b\xfb\x3d\x87\xfe\x71\x82\x8e\x90\x5e\x67\x22\x14\xac\x37\x67\x8a\x7c\x56\x12\x1d\xa1\x84\x3e\x12\xf4\xd5\x05\x95\x0a\xf5\x6f\x86\x5f\xf5\xd0\x57\xe6\xbc\x20\xe0\x4d\x5f\xbd\xc2\x0a\xfb\xbf\xff\x16\x1c\x3d\x85\x67\xd5\x43\xf7\xa1\xaf\x4f\xf3\x9d\xb9\x1a\x8a\x16\xfe\xf6\x6f\x61\x3b\x76\xbf\x56\xf3\xdb\x82\xd9\x5a\x4e\xdb\x96\xbf\xc2\x32\x95\x59\xab\xd4\x3b\xb4\x2b\x67\xd5\xed\x56\x59\xab\x7c\x5f\xbc\x55\x4f\xe1\xa5\xf9\xeb\x2e\xcc\x15\x2b\xa0\x7a\x4c\x99\x39\x24\xfe\xcc\x08\xa9\xcf\x89\xa3\xde\x03\x61\x29\xbb\xf0\xda\x60\x66\x01\xbb\x75\x5c\x34\x58\x95\x03\x9c\x77\x42\x53\xba\x6e\x7f\x87\x2c\xd6\x22\x97\x65\x76\x2c\x4f\x27\x44\xe8\x65\x70\x6c\x0f\x66\x3b\xd1\x6c\x50\xe5\x82\x91\xb8\xc5\x34\xff\x91\x13\xb1\x58\x31\xcf\x29\x4e\x64\xd3\x44\x29\x53\x44\xcb\xb7\x95\xc7\x53\x2e\x52\xac\xec\x0b\x7f\xfe\x8f\x4d\x17\x42\xf1\x47\xb2\x6e\xff\x87\x66\x37\x23\x2c\x81\x0c\xd2\x3c\x51\x34\x4b\x08\xca\xf0\x8c\x48\xbb\x22\x79\xa2\x64\x0f\x5e\xd3\x32\x35\x11\x47\xfe\x06\x82\x1e\xdc\xcd\x9b\x4b\xf8\x05\x4d\xbd\x00\xc9\xc8\x67\x05\x2d\x8d\x18\xdc\xbd\xb0\x44\xe1\x8d\xf2\x02\x4b\xb9\x1d\xcd\x48\x2e\xd4\x78\xb2\x38\x7e\x24\x4b\xfd\x36\x52\x0e\x66\x08\x2b\x25\xe8\x24\x57\x44\xcf\x5b\xb7\xe1\xee\x4e\x60\x8f\xe6\x82\x6e\xc3\x1a\xde\x6e\xc2\x31\x15\x24\x82\xb9\x6d\x72\x60\xfc\x57\x7a\xde\x5a\x7f\x59\x98\xd9\x3f\x92\x05\xc8\x23\x35\x2b\xe0\xb7\x7c\xc4\x46\x0c\x1d\xa1\xf3\xc1\xdd\xd9\xe0\xea\x7c\x78\xf5\xe9\x14\x7d\xb7\x40\x31\x99\xe2\x3c\x51\x3d\x34\xa5\x24\x89\x25\xc2\x82\x40\x93\x24\xd6\x32\x87\x1e\x0c\x61\x31\x65\x33\xc4\x45\x4c\xc4\xcb\x2d\x63\xe5\x29\x61\x79\x5a\xb9\x57\xe0\xf7\x62\xf4\x95\x2f\xb4\x88\xe1\x1f\x95\x9e\xfc\x6d\x69\x81\x61\xc6\xba\xef\xa0\xb5\x57\x13\x6a\xa2\x39\x4d\x62\x41\xd8\x89\xc2\xf2\x71\x4c\x3e\x93\x28\x37\x77\xf2\x3f\xcb\x3f\x8c\xb5\x64\xca\x63\x52\xfe\xa5\xf4\x8f\x42\x14\xda\xf8\x53\xaf\xa5\x6e\xfc\x25\xe8\xb4\xed\xbe\x83\x5f\x68\x5c\xfb\x36\xfc\xb2\x66\x0e\xee\x9d\x15\x83\x75\xaf\x34\x8e\xca\xbd\x60\x25\xbe\xda\x77\x04\x51\x62\x31\xc6\x4a\x91\x34\x53\x1b\xea\xeb\x18\x25\x5a\xae\x5c\x25\x47\x5e\xf1\x98\x0c\x5c\x7f\xbf\x20\x23\xce\x92\x18\x4d\x16\x96\x6b\x4d\x89\x20\x2c\x22\xcd\x2d\xdc\x63\xf9\x58\xb4\xb0\x4e\x18\x2d\xf5\x27\x3f\x72\xa1\x3f\x7f\x0f\x02\x69\x69\xe0\xaf\x21\x93\x6e\x7b\xe2\xbe\x38\x0b\xc1\x96\xfc\xa3\xb3\x27\xec\xbe\x92\x6d\xad\x0f\x5c\x20\xb9\x90\x8a\xa4\x6b\xed\x10\xef\x67\x21\xec\x05\x71\xa8\x03\xae\xdc\x51\xbf\x81\x53\x5f\xbe\x71\xbb\xe3\xbd\xc1\x92\xed\xcb\x8a\x78\xe8\xf3\x74\x3e\x9c\xd5\x53\xbd\x73\xdb\x17\x38\x31\xde\xc5\x34\x4b\xb2\xe0\xbe\x07\xf9\x42\xe6\x86\xc6\xbd\x72\xab\x3d\x86\x01\xac\x51\x34\xcb\x76\x68\x7f\xfe\xf4\xa7\xa1\x85\xc6\x98\xe3\xd4\x9c\xca\xc0\x58\x85\x22\x2e\x8c\x2c\x18\xdb\xf3\x6e\x74\xcd\xfe\x7d\xff\x6e\x70\x7f\x8a\xfa\x28\xc6\x0a\xeb\x03\x2e\x48\x26\x88\x24\x4c\x81\x1e\xaf\xbf\x57\x0b\x94\xf2\x98\x24\x46\xe3\xfc\xa8\x25\x5f\x74\x8e\x15\x3e\xc3\x0a\x27\x7c\x76\x8c\xfa\xf0\x4f\xfd\x31\x95\x08\x27\x92\x23\xec\xc8\x8a\xc4\xae\x09\xcc\x62\xc7\x5a\x30\x8a\x78\x9a\xd1\xc4\xdb\xe0\xbd\x71\x85\xb2\x98\x3e\xd1\x38\xc7\x09\xe2\x13\xcd\x55\xb4\x86\x3c\x78\x22\x4c\xe5\x38\x49\x16\x08\x27\x09\xb2\xdd\xba\x17\x90\x9c\xf3\x3c\x89\x75\xbb\x6e\x94\x92\xa6\x34\xc1\x42\xab\xe0\x66\xb4\xd7\xb6\x2d\x74\x3f\x27\x7e\xac\x30\x2e\xbd\x9a\x29\x7e\x24\x12\x51\x85\x32\x2e\x25\x9d\x24\xc5\x99\x7f\x18\x22\x18\xf7\xd9\xc5\x10\xf4\xf9\x48\x21\x6e\x78\xa8\xeb\xdc\xda\x6f\x5c\x8f\x29\x66\x8c\x40\xc7\x5c\xcd\x89\xb0\xdd\xdb\x97\xdf\x5a\x35\x7f\xb8\xba\xbb\x19\x9c\x0d\x3f\x0e\x07\xe7\xcb\xba\xf9\x7d\xff\xee\x87\xe5\x5f\x7f\xba\xbe\xfd\xe1\xe3\xc5\xf5\x4f\xcb\x4f\x2e\xfa\x0f\x57\x67\xdf\x8f\x6f\x2e\xfa\x57\xcb\x0f\x2d\x59\xb5\x56\xf3\xc3\x91\x6d\x78\xb6\x3a\x9b\xe6\x4b\xd9\x34\x7b\x5f\xae\x51\x73\x4a\x13\xd0\x41\x5b\x1b\x34\xbd\x0d\xc1\x7e\x89\x32\x2c\xa5\x91\x8c\xcc\x08\x8e\x47\xec\x92\x0b\xcd\xc0\xa6\x5c\xf3\x08\x2d\x3d\x29\x91\x47\x8a\xb2\x99\xff\xe8\x14\x8d\xf2\x6f\xbf\xfd\x53\x74\x41\xd9\x23\xfc\x45\x0e\x71\x71\x3a\x8b\x6f\x67\xf1\xfd\x6d\x59\x7c\xb5\xe8\x73\x12\x1a\x7a\xf7\x1b\x32\xa4\x85\x0b\x96\xe5\x0a\x44\x09\x9e\x2b\xfd\xa7\xee\x12\xc8\x63\x45\xe0\x50\x3b\x83\xe2\x27\xa2\xfc\x8b\x5a\xb4\x79\x0f\x76\xc4\x9f\xb8\x78\x9c\x26\xfc\xd9\x0f\xfc\x13\x51\x7a\xec\xb7\xb6\x97\x2e\x94\xa8\x0b\x25\x7a\xdb\x50\xa2\x83\x32\xe6\xbd\x3c\xf3\x2b\x5b\xfe\x0c\x07\x6c\xf0\x64\x35\x3a\xaa\x1a\xfc\x50\x81\x9b\xe9\x55\xb8\x66\xd9\x99\xb3\x86\x73\x96\x5e\x7e\x2f\xdc\xb3\x34\xe8\xd7\xe7\x9c\xbf\x09\x7f\x4b\xe7\x4e\xd9\x72\xa1\xde\x25\x83\x6d\x79\x77\xbc\x9a\x33\xe4\xe5\x19\xfe\x52\x6c\xc3\x26\xc1\x0c\x1b\x44\x2f\xb4\x0e\x57\x58\x13\x9f\x50\x1b\x90\x50\x17\x81\xb0\x1c\x72\x50\x1b\x63\xb0\x5b\x50\xc1\xb6\x77\x53\xfb\x30\x81\x4f\x44\x95\x5e\x7e\x2f\x77\x53\x69\xd0\xaf\x7f\x37\xfd\x46\xa3\x03\xba\x70\x80\x17\x5c\xba\x2f\xfd\x46\x3b\x5c\x87\xff\x6f\xc0\xc3\xdf\xb9\xf4\x37\x5a\xa3\x2f\xcb\x87\xff\xa5\x3a\xed\xdf\xa7\x97\xbe\x73\xcb\x77\x6e\xf9\xb7\xf0\x9f\xbc\x3f\xb7\xfc\xcb\xaa\xa7\xc5\xf1\x1a\x3b\x5a\xb0\xfa\x5a\x70\x28\xff\xd5\xc2\x49\x03\x7f\x39\x95\x6f\xd3\xa0\xf1\x46\x1d\xee\xbc\x18\xdf\x00\x8e\xd0\x2f\x96\x90\xd6\xa8\x73\x4b\xdf\xbd\x07\x75\x6e\x79\xd0\x2f\xaf\xc3\xbd\x19\xf3\x7d\xa1\xcb\xf3\x9d\xb0\x81\xcd\x6f\xcb\x2f\x58\x26\xef\x64\xf1\x97\xcf\xc6\x3f\x98\x09\xbd\x1f\xd9\xfb\x0d\x2e\xde\x96\xb7\xee\xde\x73\xb2\x6a\xae\xd9\xe0\x76\x5a\x97\x61\x55\xfd\x9a\x12\xf9\xc7\x77\x79\xdf\xbe\x46\x92\x55\x77\xe1\x76\x17\xae\x6d\xaa\xbb\x70\xbf\xe0\x0b\xf7\xe0\xe0\x6f\x0e\x26\x02\xb4\x0b\x22\xef\x80\x31\xba\x18\xf2\x3d\x2e\x4e\x17\x43\xde\xc5\x90\xff\xc6\x62\xc8\x77\xd1\x9e\xb6\xc5\xa2\x7c\x0b\x3d\xaa\x53\xa3\x3a\x35\x2a\xfc\xbd\x53\xa3\x3a\x35\xaa\x53\xa3\xbe\x70\x14\xd1\x4e\x87\x6a\xbf\x10\x9d\x0e\xd5\x7a\xa9\x3a\x1d\x6a\xc5\xe2\x74\x3a\x54\xa7\x43\xfd\xb6\x74\x28\xf2\x44\x98\x92\x90\x8c\x16\x6a\x14\x1f\x32\x2e\x9b\x35\xa1\x90\x3b\xd4\x68\x41\xd0\x66\x39\x29\x0c\x02\x97\x7e\x41\x73\x2c\x11\x8f\xa2\x5c\x54\xce\x40\x55\x0f\x3a\x13\x04\x2b\x02\x2d\xe8\x0f\xdf\x83\xfe\xb3\x3c\xdd\xd7\x8a\xc1\x9f\xf0\x78\x89\xda\xcd\x41\xa8\x7b\xb2\x5a\x1e\xd9\xdb\xd4\xff\x91\x93\x76\xea\xdf\x0b\x12\xb5\xc2\xf2\x71\xcf\x44\x5d\xca\xb5\xd8\x8a\xa8\xa1\x85\xf7\x42\xd4\xcb\xd3\xfd\xcd\x10\x75\xdd\xd4\x0f\x81\xa8\x9f\x6d\x1e\xff\x9e\x09\x7b\x09\x1e\x60\x2b\xe2\xf6\xad\xbc\x17\x02\xaf\x9f\xf6\x6f\x86\xc8\x9b\xa6\xff\xb6\x84\xee\x53\x24\x5b\x93\xf8\xbd\xa0\xb3\x99\x56\x33\x40\xc3\xd3\xa4\xb8\xbe\x46\x50\x91\x14\xb8\x96\xac\xfd\xab\xef\x81\xa4\xfd\x60\xcd\xd8\x7f\x33\xb4\xbc\x34\xef\x03\x21\xe2\x13\x41\x22\xfe\x04\xf5\xc2\xda\x11\xf3\x2d\x01\x0a\x06\x7e\x9d\x09\xf2\x44\x79\x2e\x93\xc5\x91\xc8\x19\x72\xcc\x1f\xf9\xe6\x8d\xb5\xfa\x99\x26\x09\xe2\x4c\xeb\x5f\x0a\x0b\xe5\x1e\x6b\xfd\x5b\xf0\x14\x4e\x45\x82\xa5\x42\x8f\x8c\x3f\x33\x34\xc5\x34\xc9\x05\x41\x19\xa7\x4c\x1d\x8f\xd8\x90\xa1\x5b\x33\x46\xc8\x1b\xe8\xa1\x5c\xea\xb3\x14\x61\xc6\xb8\x42\xd1\x1c\xb3\x19\x41\x98\x2d\x6c\x02\x6e\x41\x19\x88\x0b\x94\x67\x31\xd6\x8a\xef\x9c\x54\xa3\xf4\xfc\x18\xc1\x7c\x47\x25\xa2\x12\x91\xcf\x4a\x90\x94\x24\x0b\xdd\x87\xa6\x7d\xc5\x91\x5d\x1f\x33\x54\x9b\xce\x47\x84\xe0\x42\x42\xc6\xc1\x64\xf1\x2b\x66\x8a\x32\x82\x40\x51\x92\xc6\x34\x77\x84\x2e\xb8\x04\xb3\xcd\x0f\x7f\x91\x28\x4a\x72\xa9\x88\xe8\xa1\x49\x3e\x93\x5a\x53\xcc\x12\xac\xa6\x5c\xa4\x7a\x84\x94\x49\x85\x27\x34\xa1\x6a\xd1\x43\x29\x8e\xe6\xa6\x2d\x58\x03\xd9\x1b\xb1\x98\x3f\x33\xa9\x04\xc1\xbe\x77\xf7\x10\x7d\x1d\x3e\x33\x04\x20\xbf\xe9\x41\xda\x21\x4d\xb5\xba\x1b\x0c\xbf\xd8\x71\xb3\x27\xba\x11\x12\xa3\x09\x89\x70\x2e\xad\x87\x41\x89\x05\x22\x9f\xe7\x38\x97\xb0\x77\x7a\x7a\x36\x67\x23\xe2\x69\x96\x10\x45\x10\x9d\x22\x25\x28\x89\x11\x9e\x61\xaa\x97\xee\x8e\xac\x00\x41\xf7\x44\x6f\x37\xd0\x52\xfd\x2f\xa0\x7e\xa7\x5c\x10\x14\x13\x85\x69\xb2\xd2\xeb\x64\xbf\xed\xb8\xdc\x7b\xe2\x72\xe5\x0d\x3f\x08\x36\x67\x40\xfc\xf7\x70\x69\x33\x6b\xba\x8f\x70\xb2\xe3\xfd\x7d\x6b\x07\xd5\xd1\xf6\xfb\xa2\x6d\xb3\x6b\x87\x43\xdc\xaf\x16\x83\xdd\xbe\xa2\x45\x51\xcd\xe2\x5d\xd1\xf4\x6b\x84\x05\x74\x0e\xe7\xce\xe1\xdc\xb8\x32\xef\xd3\xe1\x7c\x30\x1e\xa3\xce\xe7\xfc\x42\x3e\x67\x2a\x3b\xa7\x73\xe7\x74\x6e\xbb\x40\x9d\xd3\xb9\x73\x3a\xbf\x5f\xa7\xf3\x4b\xe2\x3e\xef\x15\xdd\xf9\x5d\x89\xd6\x9d\x58\xdd\x89\xd5\x1d\x84\xb3\x9f\xda\xbe\x58\x98\xfb\xfa\x43\x4c\x12\xa2\x48\xb3\x3d\x8b\x88\x54\x6b\x0b\xe6\x7a\xa6\x4c\xcb\x71\x33\x41\xa4\xdc\x95\x21\xf9\x86\xdf\x27\x5b\xf2\xc3\xef\xa0\xe6\x3b\x3e\xd5\xf1\xa9\x6d\xa6\x76\x38\xa6\xd9\xe0\x30\xbf\x96\x6d\xd6\xf3\xdf\x2c\x6f\x96\xfe\x1e\x8c\x1b\xb2\xf0\x8b\x1a\x0a\xd7\x52\xbb\xe2\xfe\x70\x5b\x3a\xdf\x91\x1f\x9b\xbe\xde\x27\x33\x36\x63\xef\x38\x71\xc7\x89\x3b\x4e\xfc\xbe\x39\xb1\x3b\xc9\x6f\xea\x22\x33\x7e\xba\x71\x96\x60\x36\xa6\xb1\x3c\xf9\x67\xa1\xcb\xbf\x94\x87\x4c\x1f\xa8\xd8\xa4\x98\xfa\x94\x4e\xf1\x8b\xfe\x24\x29\x0c\xe6\x1e\x33\x73\x8d\x13\xcd\xd8\xd8\x6f\x12\xcc\x86\xf1\xbb\xf0\xa3\xd5\xce\xfe\x35\x7c\x6a\xbb\xf0\x71\xac\xc0\xd3\x81\x29\x33\x26\xbc\x22\xaf\xb6\x64\xa0\x3c\x8c\x13\xbe\x0b\x57\x0f\x26\x16\x30\x76\xc7\xaf\x83\x45\x39\xbc\x69\x77\x7e\x9d\x2e\x97\xb0\xf3\x5c\xb4\x9c\x70\xe7\xb9\x38\x5c\xcf\xc5\x5b\xb9\x23\x5f\xf9\x78\xbe\x96\x58\xd7\x3e\x08\xdf\x44\xab\x41\x50\x6b\x9e\x25\x1c\xc7\xab\x5c\x31\x85\xe0\x15\x82\xa3\xac\x8d\xc4\x2f\x3e\x7b\x0f\xc2\x5a\x31\xda\xdf\x58\x24\xdf\xf2\xc4\x0f\x45\x4b\x79\xc5\x50\xbe\x7a\x12\xdf\x40\x25\x79\x1f\xf8\xa9\xc5\x78\xbb\xd0\xbe\xce\xa2\xf4\xf6\x16\xa5\x2e\xb4\xaf\x53\x01\x0f\x4c\x05\xec\x42\xfb\xba\xd0\xbe\x4e\x41\x5e\x3d\xed\x4e\x41\xfe\x22\x42\xfb\x5a\x89\xda\x2f\x88\xbd\xb9\xbb\xd0\xdd\xc9\xdc\xee\xbd\x4e\xe6\xee\x64\xee\x2f\x54\xe6\x3e\x8c\x15\xee\x04\xee\x4e\xe0\xee\x04\xee\x4e\xe0\xee\x04\xee\xbd\x2f\x63\x27\x70\xbf\x66\x81\xce\x7a\xa9\x7b\x4d\x92\xcd\x7b\xf5\xe5\x74\xe2\x76\x27\x6e\x1f\xb6\xb8\x7d\x30\x13\x7a\x3f\x65\x1e\xdb\xcd\xa7\x2b\x52\xde\x15\x29\xef\x8a\x94\xbf\x78\x91\x72\xf7\x75\x8b\x8c\x0f\x7b\xb8\x14\x56\xb9\x34\x80\x8f\x82\xcc\xa8\x54\xc0\xfe\xdb\xc8\x2b\xeb\x13\x3d\xde\xab\x9c\xd2\xa5\x7a\xf8\xa7\x9d\xd4\xd2\x49\x2d\xbf\x51\xa9\xe5\x80\x62\xc1\x0e\x22\x63\x25\xc5\x2a\x9a\xe3\x49\x42\xc6\xde\xe8\x23\xdb\xea\xc1\x17\x54\x2a\x89\xa2\x5c\x2a\x9e\x36\x5f\x2e\x97\xae\x87\xbe\xef\xe0\x8c\xb3\x29\x9d\xe5\xe6\x6e\x31\xe0\x9c\xc1\x89\x2e\x24\xc1\x45\x46\xd6\x79\xaa\x6a\x5a\x7f\x17\xd7\x52\xfd\xd0\x5f\xeb\x76\xda\x44\x70\x2f\x8c\x7c\x56\xea\xd6\xb2\xd6\xf8\x76\x70\x77\xfd\x70\x7b\x36\x38\x45\xfd\x2c\x4b\xa8\xb1\xbb\x1b\x52\xa0\xbf\xea\x49\x21\x85\xe5\x63\xb1\x97\xc2\x90\xb9\xc1\xb0\x05\x43\xbf\x96\x8d\xd1\x11\x3a\xbb\x78\xb8\xbb\x1f\xdc\x36\x34\x68\x09\x05\xf2\x56\x49\x9a\x25\x58\x91\x18\x3d\xe6\x13\x22\x18\xd1\xd2\x8e\x45\xba\x2d\xcc\xff\xa6\xd1\xc1\x7f\x0f\xce\x1e\xee\x87\xd7\x57\xe3\xbf\x3e\x0c\x1e\x06\xa7\xc8\x51\x9c\x6e\x56\x8f\x4b\x8f\x22\x5e\x30\x9c\x6a\x0d\x44\xff\x50\x64\xca\xfe\x23\x27\x39\x41\x58\x4a\x3a\x63\x29\x01\x44\xe0\x52\x8b\x6e\xc0\x17\xfd\xef\x06\x17\xe5\x96\xe7\x24\x84\xdf\x45\x09\x9e\x90\xc4\xfa\x23\xc0\xc4\xae\x09\x3d\x80\x2a\x36\x8e\x8a\xdc\xac\xea\x5f\x1f\xfa\x17\xc3\xfb\x9f\xc7\xd7\x1f\xc7\x77\x83\xdb\x1f\x87\x67\x83\xb1\x95\x2a\xcf\xfa\xba\xdf\x52\x4f\x56\xf8\x44\xff\xc8\x71\xa2\xb5\x13\x3e\x75\x78\xbc\xe8\x79\x4e\x18\xca\x19\x50\x9c\x51\x79\xb4\x1e\xe4\x3b\xd5\xa7\xcc\xcc\xe8\xe6\xe2\xe1\xd3\xf0\x6a\x7c\xfd\xe3\xe0\xf6\x76\x78\x3e\x38\x45\x77\x24\x01\xa5\xc0\x2d\x3a\xec\x62\x96\xe4\x33\xca\x10\x4d\xb3\x84\xe8\xd5\xc0\x36\x9b\x78\x8e\x9f\x28\x17\xf6\xe8\xce\xe8\x13\x61\x66\x1d\xe1\xcc\x42\xfb\x4e\xf8\x1e\x07\x4b\x77\x7d\xf5\x71\xf8\xe9\x14\xf5\xe3\xd8\xcf\x41\x42\x1b\x25\xca\x71\xb0\xce\x47\xe5\x61\x6b\xe6\x00\xdd\x1b\x22\xe2\x4f\x44\x08\x1a\x93\x0a\x1d\xf5\xef\xee\x86\x9f\xae\x2e\x07\x57\xf7\xb0\x62\x4a\xf0\x44\xa2\x39\x7f\x06\x53\x36\xcc\x10\x2c\xdc\x4f\x98\x26\xd0\x99\xdb\x2c\xce\xd0\xf3\x9c\x82\xfb\x03\x80\x99\x7d\xcf\x46\x3f\x13\x39\x7b\x73\xeb\x6c\xe9\xe0\x2d\xab\x2d\xd5\x93\xb4\xfc\x46\xe5\x58\xac\x7a\xa1\x44\xe5\xcb\x2f\xae\xa3\xd6\xe5\x2f\x2a\xe4\xd6\xac\xac\x2d\xd1\x4b\xf3\x4c\x8b\xbd\x6e\xad\xab\x95\xd7\xf0\xf5\xae\x59\xa2\x04\x8d\xe4\xcb\x42\x3d\x89\x9c\x29\x9a\x12\x64\x3b\xb3\x87\x73\x8f\xf0\x4f\x97\xa6\xe1\xf7\x70\xc1\x2e\x95\x72\xf8\x44\x94\x1d\x7e\xa7\x02\x76\x2a\xe0\x61\xa8\x80\xef\x2d\xdb\x3f\x26\xd9\x72\x87\x95\x89\xc1\x3b\xc6\xeb\xb5\x14\xa4\x61\xec\x89\xd6\xa2\x9a\x90\x27\x92\x80\x94\xa7\x04\xd6\x4a\xa3\x95\x5d\x26\x82\xe0\x47\x2d\xf0\xc5\xfc\x39\x94\x5c\x6a\x90\xfb\xd1\x7e\x6e\xe1\x36\x41\x1c\x7f\xfa\xe3\xeb\x5d\x16\x7a\xb9\xe3\xd7\x28\xe1\x7d\x0b\x41\x32\x2b\x31\x02\x83\x04\xfb\x5f\xac\x25\x78\xcd\x6d\x11\x7c\xf1\x1e\x2e\x8a\x70\xb8\x07\xa4\x75\xdd\x86\x4a\xb0\x63\xa1\x29\x51\x38\xc6\x0a\xeb\x43\x33\x23\xea\x18\x5d\x33\x78\x76\x8f\xe5\x63\x0f\xb9\x2b\x4f\xb3\x95\xc2\xca\xf0\x0a\xa9\xf5\xef\xc4\x80\xbf\x39\x1f\xef\xae\xef\xee\xfa\xae\x5f\x99\x2e\xcc\xb3\x61\x85\xf7\x75\x31\x6e\xe4\xf3\xda\xdf\xfd\x65\x5a\x7c\xbf\x57\xd8\xeb\x3a\xb9\xf6\x7a\xa1\x99\xca\x59\xdd\x6d\x65\xfe\xaf\xbb\xad\xba\xdb\xaa\xbb\xad\x0e\x60\x85\xdf\xdc\x61\x58\xc3\xdd\xdf\xd4\x63\xb8\x4e\x3b\xdd\x1a\xf2\xae\xd0\x46\x37\x01\xbd\xfb\xa5\x2d\xb6\x5d\xf1\x0d\x7d\x1f\x3e\xc2\x60\x92\xaf\x91\xd6\xb6\xd7\xcb\xdc\xe4\x8b\x74\xfa\xe9\x0b\xde\xf8\x1d\x02\xe1\x5e\x11\x08\x0f\x63\xae\x2f\x92\x02\xf7\x36\x16\xd3\xb7\x4f\x7b\xeb\xa0\x06\xbb\xc4\xae\x2e\xb1\x0b\x7e\xef\xa0\x06\xf7\x47\xad\x2f\x2b\x5d\xf3\x98\x8c\x2b\x51\x02\xfe\x9f\xe3\xaa\xe7\xa7\xf4\x24\x74\x03\x95\x1e\x14\x99\x6e\xd0\x3a\x8d\xf7\x59\x44\xea\x8a\xc7\xa4\x75\x24\x41\xe9\xe5\x03\x97\xc1\xdd\x3c\x8d\x2c\x5e\x1a\xf8\x0b\x4b\xe2\x0d\x5b\xfe\x25\x1a\x76\x6a\x08\xb8\xb3\xf2\xac\x5d\xa8\x2f\x35\xbe\xa0\xe0\x50\xef\xc8\x53\xd1\x8e\x8d\xbb\x98\xc6\x71\x03\x33\xaf\x7f\xee\x59\x7a\xfd\xe3\x97\xc1\x0c\x6a\xcf\xd1\xc1\xac\x12\xbe\xfd\x3e\xec\x2a\xe1\x88\x5f\xc3\xb2\xb2\x72\xef\xbf\x38\xae\xbe\x8a\x92\x3b\xde\xde\x72\xb9\xbe\x54\x0e\xdf\x41\xfc\xac\xb2\x75\x74\x18\x3a\x9d\xa9\xe5\x70\x26\xdc\x99\x5a\xde\xb5\xa9\xc5\xb8\x68\xc7\x19\x16\x84\xa9\x1a\x91\xba\x7a\x9d\xc0\xeb\x21\xe6\x82\x93\x3a\xa0\x01\xa4\x25\x5a\x64\x2f\x64\x7f\x55\x7d\x59\xb6\x17\x2b\x18\x04\x99\x90\x27\xff\x2c\xfe\xf6\xc2\x7a\xa9\x02\xc4\x8a\xe8\x24\x83\xf5\x2f\xf5\x1d\x9d\xdb\x40\xa5\xdd\x73\x25\xb1\x2a\x89\x82\x10\x44\xbd\x36\x9e\xe9\xc6\xbc\xfd\xbe\x52\x24\x97\x06\xfd\xba\xb1\x4d\xcb\x1b\xdf\xee\x00\xb9\x9d\xa1\x26\xdd\x2f\xc8\x29\xd3\xd2\x28\x9f\x16\x17\x83\x44\xcf\x34\x49\x00\x51\x04\x32\x1e\x9b\x6e\x80\xdf\x5c\xc4\x43\xe3\xce\xbf\x69\xdc\x43\x1d\x77\xa8\x63\x09\x6d\xec\xa9\xfb\xca\x99\x76\xc4\x06\xe9\xac\xa0\x0d\xad\x31\xc0\x7e\x19\x9c\xe0\x13\x51\xaf\xc5\x06\xb6\x3d\xfb\x2b\xcf\xbd\x20\x53\x22\x08\x8b\xc8\x01\x7a\xdb\x37\x09\x03\xf9\xc9\x4c\xd2\xc6\x80\x78\x28\x81\x70\xaa\x8a\x5b\x3d\xad\x24\xea\x76\x99\xe4\x5d\x26\x79\x97\x49\x5e\x3d\xea\x5d\x26\x79\x97\x49\x5e\x9b\x03\x11\x93\x84\x28\xd2\x28\x55\x9c\xc3\xe3\xb7\x92\x2a\x4c\xef\x5f\x86\x60\x61\xe6\xd2\xc9\x16\xbf\x19\xcd\xc2\x6d\xf8\x41\x68\x16\xe6\xac\xad\x33\x3f\x94\x7e\xac\x09\xb1\x7e\x75\x93\xc4\x36\x4c\xa3\x64\x97\x38\x87\xd7\xdf\x25\xeb\xa8\x0e\xbd\xb3\x51\xa0\x60\xeb\x5e\x8e\x93\x2c\x1d\x81\x76\x13\xb7\x1e\xc3\xf7\x3b\xef\x43\xe1\xa0\x4d\x74\x7f\xa8\x7c\x74\xeb\xa4\x94\x43\xb1\xd8\x7c\x41\x3c\xb2\xb3\xde\xbc\x71\xae\xc4\x12\x33\x7c\xb7\xd3\xed\x8c\x55\x9d\xb1\xaa\x33\x56\x75\xc6\xaa\xce\x58\x85\x3a\x63\xd5\xc6\xc6\xaa\x2f\x48\xa6\xea\x0c\x57\x9d\x58\xb5\xbf\xe9\x1e\xaa\x96\x79\x48\xd6\xba\xd6\x28\xe9\x45\x0e\xd5\xda\xc8\x7b\x3b\xed\x5f\xd6\x84\xdc\xdf\xb8\x11\xbc\x1f\x7e\x25\x5f\x9a\x25\xed\x12\x58\xec\x76\xf4\x8b\x8d\x2b\xee\x4a\x87\xd6\xae\x55\x17\xf6\xbc\x62\x71\xba\xb0\xe7\x2e\xec\xf9\xe0\xc2\x9e\xf7\xae\xac\x64\x5c\xae\x02\x24\x32\xa5\xb3\x56\xe6\x3f\xbb\x3b\x1b\x12\x8d\x80\x14\x0c\xca\x71\x4c\xb2\x84\x2f\xc0\x92\xb2\xe2\x3a\x77\x5d\xdc\x2c\x49\xd4\x87\x7e\xa3\xbb\x91\xbf\x96\xce\x71\x28\x32\x69\x31\xef\x83\x90\x42\x4f\xfe\x59\x49\xe7\x6f\x85\x97\xc9\x10\xf9\x4c\x25\xdc\x4a\xeb\x09\x7b\xc4\xea\x9f\x04\xa5\x0b\xed\x3d\x38\xc9\x55\x90\xbb\x27\xb5\x60\x95\x11\xa1\x16\xc1\x9b\x24\xcd\xd4\xe2\xbf\x46\x8c\x2a\xef\x61\xa3\x33\xc6\x85\xe1\x6a\xfa\xe3\x39\x66\x71\x42\x84\xbe\x54\x5d\x3b\x11\x66\x8c\x2b\x10\x37\x60\x06\x31\x7a\xa2\xd8\x08\x27\xfd\x9b\x61\x6b\x3f\xf3\x3b\x3a\x5d\xaf\x5d\xac\x6e\xcd\x5d\xf7\x29\xe1\x13\xa8\x60\x99\x97\x75\x7a\xdd\x40\xe7\x19\x2d\xed\xdc\x5b\x31\x04\x85\xe5\x63\x15\x38\xa4\x9c\x85\x3e\x5e\x09\x25\xb2\xe6\xdd\x12\xc6\xfc\xea\x57\x2b\x70\x23\xe5\x67\x16\x80\x04\x1e\xc3\x90\xab\xe3\x70\x3f\x86\x1d\xba\xdf\x8a\x96\xdd\x2f\xae\x74\x37\xfc\x28\x88\x12\x8b\x31\x56\x4a\x33\x99\x7d\x62\x9c\xdc\x63\xf9\xd8\x1a\xe3\xa4\xf4\xf2\x81\xb3\x9c\x12\xc6\x49\x79\xe0\x2f\xce\x72\x5a\x52\xe7\x1a\xce\xf4\xfe\xf2\xe3\xdb\x9e\xb5\x0d\x26\xfe\x5b\xc9\x95\x6f\xc7\x7b\xd6\x99\x69\xdf\x63\xde\xfc\x2a\x66\x7a\x30\x23\xac\xf0\xf3\x2f\xf1\xe4\x96\x6f\xa7\xee\x88\xae\x5a\xa3\x2f\xae\x10\x6e\x45\xe8\x58\x33\xb7\x77\x52\x10\xb7\x2a\x37\xed\x7b\x54\x2f\x63\xe6\x0e\x76\x63\x93\x18\xa0\x61\x19\xad\xdc\x9f\x21\x17\x15\x54\x94\x9e\x9d\x43\xa2\x35\x95\x61\x42\x7c\xc4\x85\x91\xbc\x62\x7b\x66\x8d\xd9\xce\x80\xf9\x9e\xa2\x3e\x8a\x6d\x6d\x7e\x41\x32\x41\x24\x61\xca\xa8\xda\xa6\xde\x95\x2b\xef\x4f\x99\xb5\x10\x9d\x63\x85\xcf\xb0\xc2\x09\x9f\x1d\xa3\xbe\x2f\xec\x4f\x25\xc2\x89\xe4\x08\x3b\xc2\x21\xb1\x6b\x02\xb3\xd8\xb1\x07\x8c\x22\x9e\x66\x34\xf1\x48\xed\xde\x8a\x4f\x59\x4c\x9f\x68\x9c\xe3\xc4\x23\x63\x8f\xd8\xe0\x89\x30\x95\x83\x0a\x87\x93\x04\xd9\x6e\xdd\x0b\x81\x7e\xee\x46\x29\x69\x4a\x13\x2c\x90\xe2\x76\xb4\xd7\xb6\x2d\x74\x3f\x27\x7e\xac\x0e\x05\x1c\xa5\xf8\x91\x48\x44\x15\xca\xb8\x94\x74\x92\x14\xc7\xf8\x61\x88\x60\xdc\x67\x17\x43\x30\x8d\x46\x0a\x71\xc3\x07\x5d\xe7\xd6\x4f\xe0\x7a\x4c\x31\x63\x04\x3a\xe6\x6a\x4e\x84\xed\xde\xbe\xfc\xd6\x56\xce\xb7\xc6\x88\x6e\xb6\x98\x86\x23\x7b\x3b\xa5\xb3\xb5\xc6\xd9\x56\xdd\x6c\xa7\x6b\x36\x2b\x9a\x2f\xe0\xa5\x6d\xaf\x0d\x5e\x50\x59\x56\x07\xdf\x85\xcb\xb6\x34\xe2\xd7\xc0\x47\xfb\x8d\x2a\x82\x9d\x16\xf8\x22\xeb\xf6\xa5\xaa\x80\x07\xae\xff\x75\xc8\x6e\x1d\x8a\x7d\x17\x80\xb1\xc7\xc5\xe9\x02\x30\xba\x00\x8c\x2f\x36\x00\xa3\x59\x9b\xa0\xf1\xce\xe9\x7a\x1b\x56\x90\xf2\x46\x01\xf1\x0b\x88\x52\x58\x3e\xb6\xad\x29\xa5\x45\xe5\x61\xfc\x2e\xa4\xfa\xda\x09\xbf\x86\x74\xdf\xd5\x29\xda\x6b\x9d\xa2\x83\x9b\x76\x27\xf8\x75\x82\x5f\x27\xdb\xb4\x9c\x70\x27\xdb\x1c\xae\x6c\xf3\x56\x0a\xcb\x97\x04\xa1\xab\x85\xa7\x52\x66\xcc\xca\x00\x5b\x03\x47\x03\xee\x81\x3c\x4b\x38\x8e\xd7\x05\xe1\xfc\x82\x0a\xb9\x66\x85\x68\x66\xda\xd5\x1f\x1c\xb8\x64\xb6\x14\x7f\x63\x46\xfe\x5b\x88\xa9\x6d\x9c\xfa\x9b\x86\xd5\x02\xfd\x42\x30\x59\x29\x28\xed\xa5\xb4\x90\x2a\x4d\xb7\x52\x38\xe4\x1f\x0f\x9c\xaa\xfd\x96\xbe\x86\x7a\xf1\x05\x3b\x08\x3a\x27\xc0\x6f\xb3\xf0\xf9\xc1\x48\xad\x9d\x6a\xd7\x65\x55\x76\x46\xfd\x4e\xf1\xed\x14\xdf\xbd\x2f\xe3\x21\x29\xbe\x6f\x28\x51\x9b\x34\x91\x17\x29\x63\xb8\x9d\x6c\xdd\x89\xd6\x9d\x68\xdd\x89\xd6\x5f\xac\x68\x7d\x18\x2b\xdc\xc9\xd5\x9d\x5c\xdd\xc9\xd5\x9d\x5c\xdd\xc9\xd5\x7b\x5f\xc6\x4e\xae\xae\xc8\xd5\xf0\x97\x4b\x93\xde\x54\xc8\x6e\x2d\x5c\xb7\xc8\x89\x7e\x2f\x92\x75\x27\x55\x77\x52\xf5\x61\x4b\xd5\x07\x33\xa1\x2f\x2f\x11\xb2\x4b\x25\xec\x52\x09\xbb\x54\xc2\xb7\x48\x25\x74\xbc\x64\x95\x84\xb2\x2c\x58\xfc\xb8\xc4\x81\x0e\x56\xb6\x28\x46\xbb\x6d\x78\xc7\xbe\x96\xda\x01\xcd\x6f\x53\x69\xaa\xf4\x9b\x6b\xe8\x80\xea\x4f\xf5\x9c\xb4\xa0\x19\x85\x1b\xdf\x7a\x84\xb0\x9f\xec\x9b\xef\x0b\x0c\x7c\x79\xd4\x5d\xfd\x29\x14\xec\x5a\x57\x7f\xea\x05\xe7\xed\x0e\xd7\x9a\x99\x3b\x1a\x35\x36\xde\x77\x3a\xed\x37\x07\x97\x6b\x3e\xe9\x6f\x1a\x2e\x57\x7b\x93\x2c\x25\xef\x9c\xfc\xb3\xf6\xa2\x78\x83\xb2\x5b\x1b\xdf\x0e\x9f\x88\xfa\x52\xae\x86\xae\xec\x56\x57\x1f\x62\x4f\xd3\xdd\x8a\xf5\xbf\xdb\xd9\x76\x45\xc6\xba\x22\x63\x5d\x91\xb1\xae\xc8\x58\x57\x64\x0c\xfd\xc6\x8b\x8c\x6d\x2c\x3e\x9a\x71\x7c\x29\x12\x64\x57\x64\xac\x13\x22\xf7\x37\xdd\xdf\x96\x10\x79\x80\x16\x84\x83\xa8\xa6\xe6\x2d\x08\x6f\x8e\xfb\xe1\x46\xd2\x16\xfb\xc3\x2d\x68\x87\xff\x61\xff\xaf\xc3\xff\xe8\xf0\x3f\x1a\x66\xdd\x05\xb3\x76\xf8\x1f\xa8\x0b\xd7\xec\xc2\x35\x0f\x39\x5c\xb3\xc5\x36\x76\xf8\x1f\x2d\xc5\xb9\x17\xc2\x00\x71\x32\xd7\x46\x38\x20\x3f\x2d\x2b\x1a\x07\x2b\xa5\xb9\xb1\xfe\x76\x70\x40\x6a\xa7\x7d\x10\x2a\xc9\x2b\xe2\x80\xd4\xd1\x75\x6b\x05\xe4\x7d\xe0\x81\xb8\xd1\x76\x89\x8b\x5d\x88\xf5\xe1\x87\x58\x1f\x5c\xe2\xe2\xc1\x48\xb2\x9d\xba\xd7\xe5\x2e\x76\xb9\x8b\x9d\x32\xdc\x29\xc3\x7b\x5f\xc6\x43\x52\x86\xdf\x58\xc2\x7e\x41\x5c\x90\xdd\x64\xed\x4e\xd4\x36\xef\x75\xa2\x76\x27\x6a\x7f\xa1\xa2\xf6\x61\xac\x70\x27\x67\x77\x72\x76\x27\x67\x77\x72\x76\x27\x67\xef\x7d\x19\x3b\x39\xfb\xd5\x70\x42\xea\x84\xed\x96\xf9\x36\xef\x49\xd2\xee\xa4\xec\x4e\xca\x3e\x6c\x29\xfb\x60\x26\xd4\x61\x86\x74\x98\x21\x1d\x66\x48\x87\x19\xb2\x95\x7c\xf3\x6f\xf6\x58\x7e\x08\x6e\x62\x7f\x65\x7f\xf8\x2e\xe1\x93\xfb\x45\x46\xf4\x7f\xcf\x69\x4a\x98\x04\x69\x94\xaa\x45\x28\xcf\x34\xac\xfc\xf2\x9a\x7f\xb8\x1b\x5e\x7d\xba\x08\xb3\x69\x3e\x5c\x3e\x5c\xdc\x0f\x6f\xfa\xb7\x7e\x5d\xfc\xac\xc2\xb5\xb0\xdf\x95\x44\x32\x4b\xf2\xb7\x44\xeb\x9e\x70\x6a\xee\x14\x56\xb9\xdc\x6e\x64\xb7\x83\xbb\xc1\xed\x8f\x90\x0d\x34\x3e\x1f\xde\xf5\xbf\xbb\x28\x11\x44\xe9\x79\xff\xec\xaf\x0f\xc3\xdb\xe6\xe7\x83\xff\x1e\xde\xdd\xdf\x35\x3d\xbd\x1d\x5c\x0c\xfa\x77\xcd\x5f\x7f\xec\x0f\x2f\x1e\x6e\x07\x2b\xd7\x63\xe5\x68\x57\x2b\x21\x12\x16\x09\xe2\xfc\x51\x64\xb9\x86\x28\xd6\x10\x79\xf1\xd1\xb1\xc3\xba\xbe\x4e\xd1\x83\xd5\xe9\xa9\x6d\xdc\x30\xd8\xa0\x21\xa3\x8c\xc4\x54\xe2\x49\x42\xe2\xa5\x96\xdc\x1a\x36\xb5\x84\x4b\x83\x7a\xd6\xda\xb3\x17\x39\x35\xcf\x8b\x0c\x2f\x40\x90\xa3\xa8\x08\x8b\x6b\xfa\x30\xfb\xd0\xd8\x03\xd3\xbc\x8b\x3e\x91\x52\x4f\x51\x2e\x04\x61\x2a\x59\x20\xf2\x99\x4a\x25\x97\x1a\x75\xdb\xd7\xd4\xac\xbd\x53\x7d\x83\x73\x2c\xd1\x84\x10\x56\x1e\xbf\x20\x09\xc1\xb2\x66\xcc\x76\xf7\xdb\x2d\x8b\xdf\x2b\x6b\x8d\x31\x97\xd1\x14\xd3\x24\x17\xa4\x72\x5a\x78\x9a\x61\x41\x25\x67\x83\xcf\xfa\x2e\xd3\x07\xf9\x1a\x3e\xe7\x62\xbb\x13\x33\xf8\x6b\x48\xc1\x57\xe5\x7f\x7e\xba\x2f\xff\xab\x74\xe6\x2f\xee\xcb\xff\x5a\x4d\xeb\x41\xc3\x55\xca\x3e\x42\x9f\xee\x4f\xd1\x27\x08\x71\x12\xe8\x7e\x8e\x0d\xc5\x5e\xdc\x9f\xa2\x0b\x22\x25\xfc\x52\x7c\xac\xa8\x4a\x60\x6e\xdf\x51\x86\xc5\x02\xb9\xe9\x9b\x44\x57\x1c\xcd\x11\xf1\x4b\x53\x5d\x3c\xf6\xf7\x9c\x81\xea\x5e\xac\xde\x05\x9f\xd1\x08\x27\xbb\x2d\x62\xff\xaa\xc4\x07\xae\x6f\x57\x2e\x45\xf8\xf6\xf2\x5a\xf4\xaf\xce\x21\x89\xd4\x0d\xb5\x66\xe6\x57\x44\x6a\x22\x89\x38\x8b\xad\x97\x46\xdf\xfe\x8b\x40\xa8\xff\x3b\x87\x44\xdc\x5c\x52\x36\xd3\x2d\xa2\x13\x74\x7d\x3b\x62\xd7\x22\x36\x86\x50\xa2\xa5\x61\x43\x73\x54\x22\xc6\x15\xa2\x69\xc6\x85\xc2\x4c\x69\x45\x00\xc4\x00\xbb\x22\x86\x03\x9c\xf1\x34\xcd\x15\xd6\x07\x6d\x69\x51\x99\x31\x87\xdc\x11\x35\x8c\xc1\xb5\x52\xb3\x86\x46\x4e\x28\xe6\x92\x09\xdd\xbe\x96\x51\xca\x3a\x34\x8d\x97\x54\x59\xd7\x04\x16\x02\x97\xa5\x89\x0f\x54\x91\xb4\xfa\x7e\xcb\x20\xcf\x7f\xd5\x1a\x08\xce\x4c\x52\x05\x11\x7d\x11\xcd\xa9\x22\x91\xd2\x47\x70\x2b\x9a\x78\xb8\xfa\xe1\xea\xfa\xa7\x50\x82\xf8\xd0\xbf\x3c\xff\xf3\x7f\x94\x7e\xb8\xbd\x5c\xfa\x61\xfc\xe3\x9f\x97\x7e\xf9\xff\xad\xa4\xa7\x6a\x4f\x4b\x7a\x7e\x30\x97\x23\x10\xa9\xc1\x26\xec\xa6\x8a\x68\x8a\x67\x04\xc9\x3c\xd3\x14\x20\x8f\xcb\xfb\xab\x45\xca\x0b\x8e\x63\xca\x66\x26\x03\xf4\x82\x2a\x22\x70\x72\x89\xb3\x8f\xce\x7e\xbd\xc5\xea\xfc\xdf\xbb\x52\xbe\xee\x87\x9f\xfb\x97\x61\xc6\xef\x87\x9b\xdb\xeb\xfb\xeb\x95\xb3\x2e\xb5\xb0\x7c\x8c\xf4\xe3\x53\xf8\x5f\x74\x82\x74\xeb\x5e\xf2\x4d\x89\xc2\x5a\x23\x40\x5f\x9b\xa4\x39\x9f\x48\x43\x59\x02\xa7\x26\x13\x34\xa5\x70\xa5\x18\x0b\xde\x37\x46\xb8\xf6\xda\x83\x3f\x37\xe6\x03\xd0\x96\xdd\xa5\xcc\x62\x2c\x62\xf4\x77\x59\x4d\x1f\x07\xc3\xb1\xf9\x81\xc4\xe8\x08\xcd\x95\xca\xe4\xe9\xc9\xc9\xf3\xf3\xf3\xb1\x7e\xfb\x98\x8b\xd9\x89\xfe\xe3\x88\xb0\xe3\xb9\x4a\x13\x93\x2e\xaf\x57\xe1\x14\xdd\x08\xae\xaf\x10\x50\xd0\x89\xa0\x38\xa1\xbf\x92\x18\x4d\x0c\xff\xe3\x53\xf4\x4b\xc4\x05\x39\x2e\x36\xc6\x1a\x95\xec\x3d\x62\x0d\x4f\x27\xfa\xa5\x1a\x66\x52\xdd\x4f\x14\x93\x88\xc6\x56\xcc\x20\x2c\xe2\x60\x79\x34\xbe\x0a\xdd\x9e\xcb\x34\xd4\x1a\x4d\x96\xab\x62\x39\x03\x65\x05\xc7\x24\xc8\x76\x57\xbc\x4c\x70\x5a\xf1\x19\x1a\xb5\x35\xd7\x2a\xba\xbe\x5b\x31\xdc\xaa\xee\xd5\x4c\x4f\x38\xe2\x09\x9a\xe4\xd3\x29\x11\xa1\x43\xba\xa7\xb5\x19\x2a\x91\x20\x11\x4f\x53\x90\x18\xf4\x57\xb9\x34\x54\x0d\x2b\x66\x47\x7b\x3c\x62\xb0\xff\x5a\xcd\x01\x0a\x88\x39\xb0\x3a\x46\x48\x8c\x30\x5b\x98\x6e\x26\xf9\x34\x6c\xdf\xc0\x50\xe0\x18\x51\x35\x62\xfd\x24\x41\x82\xa4\x5c\x91\x20\x87\x12\x9c\x67\xe5\x05\x07\x16\x29\x48\x96\xe0\x88\xc4\x86\x1e\x12\x1e\xe1\x04\x4d\x69\x42\xe4\x42\x2a\x92\x86\x0d\x7c\x0d\xb6\x1a\xbd\x66\x54\xa2\x98\x3f\xb3\x84\x63\x3b\x8f\xea\x67\xdf\x94\x4f\xe3\xc0\x41\x04\x0c\x84\xe0\x02\xfe\xe7\x07\xca\xe2\xbd\x71\xa8\x87\xbb\xc1\x6d\xf8\xef\xbb\x9f\xef\xee\x07\x97\x9b\x71\x1f\x4f\x59\x30\x3c\xd0\xe1\x4f\xd1\x9d\x59\x04\x2e\xb4\x44\x24\x1a\x26\x75\x69\x49\xa9\xf8\x81\xc7\x5b\x72\xdf\xcb\xfe\xd5\x43\xbf\xc4\x51\xee\xce\xbe\x1f\x9c\x3f\x54\xf4\x01\x3b\xbf\x92\x0c\x6f\xd4\xbf\xf0\xb7\xb3\xef\x87\x17\xe7\xe3\x1a\x85\xf1\xc3\xed\xe0\xec\xfa\xc7\xc1\x6d\xa1\xdb\xd5\x2e\x51\x65\x30\x55\x66\x75\x6f\x98\xd2\x9c\xc7\x68\xb2\xa8\x07\x84\xd0\x92\x73\x02\xbe\xd8\x02\x12\xc5\xb4\x7a\x0a\xbc\xc9\x61\x73\x14\x5f\xa4\x3c\x26\x3d\xfb\x0e\x20\x69\x18\xe3\x8a\x91\x98\xeb\x1b\xd6\xbd\x63\x16\x18\x2a\x0c\xc8\x85\x5f\xb8\x53\xd4\x47\x52\xbf\x98\xeb\x43\x2d\xe8\x6c\x06\x86\xc3\xca\x50\x4d\x6b\xf6\x53\x58\x5e\xf8\xce\xec\x7f\x26\x38\x9c\x73\xdd\xad\xb5\x38\x7b\xab\x84\xf9\x10\x50\x57\xca\x2d\x0a\x0c\x06\x87\x9a\xa1\xb9\xcd\xd2\x8b\xd0\xb8\x5e\xe6\x3c\x1a\x7b\x91\x3e\x5c\xc0\xb6\xa4\xb1\x77\x66\x82\x3c\x51\x9e\x07\x9f\x5a\x60\x8f\xd2\x8e\xd7\x36\x5f\x2c\x00\x2c\x9b\x31\x8a\x54\x9a\xf1\xe4\x51\xdb\x82\x66\x61\x4f\xd0\xc2\x54\xf0\xb4\xa6\x8d\xf2\x31\x19\x5e\xdf\x29\x81\x15\x99\x2d\xce\x2d\xcb\xd8\xfe\x78\x9c\x5f\xff\x74\x75\x71\xdd\x3f\x1f\x0f\xfa\x9f\xca\x27\xde\x3f\xb9\xbb\xbf\x1d\xf4\x2f\xcb\x8f\xc6\x57\xd7\xf7\x63\xf7\xc6\x4a\x92\x6f\xe8\x60\xf9\x9e\x2e\xbf\x78\x8a\x34\xcb\x05\xd6\xe8\x00\xef\x02\xfe\x38\x21\x53\x2e\x0c\x9f\x4f\x5d\xe8\x82\x15\x61\xdc\xda\x5a\x5d\xac\x32\x8b\x53\xb0\x8c\xd5\x35\x69\xac\xde\x4a\x10\x9c\xc2\x3d\x81\x19\x1a\xb0\xf8\xe8\x7a\x7a\x74\x67\x7e\x4c\xb1\x78\x24\xc2\x7f\xfa\x2c\xa8\x52\x84\x95\x54\x3a\xec\x86\xec\x95\xc4\xa2\x83\x63\x74\xab\xf9\xbe\x7e\xdf\x5f\x6a\x9a\xd8\x63\xa2\x30\x4d\xa4\x1d\x6c\x69\x5d\x4f\xd1\x05\x16\xb3\xc2\x0e\xf7\x35\x9f\x4e\x4d\x63\xdf\x98\x61\xe8\x3b\xac\x34\x8b\x1a\xde\xab\x49\xc3\xdd\x8b\xd0\x9f\x7d\xd9\xcb\xc3\xcb\x54\xf5\x90\xed\x46\x53\x0f\x37\xb0\xe2\x46\x63\x2f\xe9\x86\xf6\x49\x0d\xad\xc1\xc4\xcd\xe3\xd5\x97\x4c\x7d\xdb\xcb\xe4\x54\x7e\xb1\x86\x9c\x4c\x2e\x95\xde\xf9\xa9\xd6\x36\x6b\x68\x89\x7c\xa6\xd6\x60\x10\x8e\xbb\x42\x42\x45\x33\x60\x5e\xc5\x59\x46\xb0\x90\x75\xbb\x5d\x16\x03\x1b\xf6\xde\xf4\x14\xf6\x61\x37\xd9\xf5\xd3\x43\x9c\x81\xc1\xc1\x0b\x11\x15\x8a\x6c\x41\x03\xa6\xad\x25\x0a\xb8\x01\xb4\xa5\x6b\x8b\x6c\x74\x49\xa5\x56\x1a\xcd\x8f\xdf\x59\xc8\xa5\xed\x08\xe2\x63\x7f\x78\x51\x11\x2e\xc6\xe7\x83\x8f\xfd\x87\x8b\xd5\x66\xc2\xd2\x77\xd5\x2d\x46\x47\x48\x3f\x2f\xfb\xcd\xe9\xd4\xdc\x19\x0e\x38\xca\xa8\xb4\x84\x81\xd1\xca\x42\xd5\x18\x7b\x75\x4c\xb2\x84\x2f\x52\xc2\xc0\xc4\x53\xba\x09\xf5\x7a\x4e\x31\xb5\x57\x4b\x30\x58\xb0\xe2\x58\xb3\x1b\x5c\x63\x47\x0e\xad\x8a\xc4\xfe\xe6\x2d\x83\x55\x55\x58\xf7\x8d\xf1\x9e\xd9\xff\xdc\x29\xac\xb6\x3c\x63\xfd\xb3\xfb\xe1\x8f\x83\xb2\x7e\x78\xf6\xfd\xf0\xc7\x3a\xa9\x66\xfc\x69\x70\x35\xb8\xed\xdf\xaf\x11\x4e\x2a\x4d\xd6\x09\x27\x52\x0f\xb8\xea\x3d\xa5\xd2\x47\x04\x45\x06\xf2\x0a\x51\x25\xd1\x13\x95\x74\x42\x01\x20\xcc\x7a\x22\x1f\x86\xc0\x59\x9f\x70\x42\x63\xaa\x16\x4e\x7c\x31\xfd\x96\xf7\x51\x73\x52\xdb\xbe\x31\x3b\x84\xfe\x49\xb0\xf2\x99\xcd\x71\x93\x3e\x45\xa0\xdb\x3e\x81\xd2\x16\x7c\xc6\xb4\x20\xcd\x66\x44\x98\xe1\x80\xf7\x25\x1c\x4b\xf0\x5c\x8f\x2a\x14\x56\x8a\x55\xf3\x42\xeb\x8c\x30\x22\x00\x04\xce\x77\x62\x04\x29\x41\xd8\x57\x5a\xe6\xca\x12\x1a\x51\x95\x2c\x50\x04\x36\x2c\x30\x67\xa6\x98\xe1\x99\x15\x0e\x40\xcd\xa9\x90\xc4\x5f\x0d\x8a\xda\xf5\xd4\x9a\xf6\xef\x29\xd9\xf2\x98\x3d\x5c\x9d\x0f\x3e\x0e\xaf\xca\x24\xf0\xfd\xf0\x53\x49\x84\xbd\x1c\x9c\x0f\x1f\x4a\xb7\xb9\x96\x64\x57\xcb\xf5\xd5\x66\x6b\x8e\xa2\x7f\xe9\x14\x9d\x9b\x4f\x4f\xf5\xe2\xd6\x40\xc4\x79\xe5\xb7\xb2\x0e\xb7\x2e\x24\xcf\xfd\x31\x60\x4a\xd4\xfa\x25\xda\x9a\x90\xac\x0f\xb2\x64\x43\xaa\x0f\x55\x58\xea\xfb\xaa\xea\x54\xae\x4e\xd9\xbd\x08\x41\x97\xc7\x85\x65\x29\x8c\x61\x00\xa3\x41\x93\x11\xab\xc6\xad\x55\x30\xec\x1f\xc1\x45\x9d\xe6\x52\x19\x57\x22\x10\x27\x7a\xfc\x8b\xd4\x0b\x0a\xae\xc6\x63\x74\x47\xc8\x88\x39\xeb\xc1\x8c\xaa\x79\x3e\x39\x8e\x78\x7a\x52\xe0\x13\x9e\xe0\x8c\xa6\x58\x4b\xd2\x44\x2c\x4e\x26\x09\x9f\x9c\xa4\x58\x2a\x22\x4e\xb2\xc7\x19\x44\xc0\x38\x77\xea\x89\x6f\x76\xc6\xff\xfd\xe2\x4f\xdf\x1e\x5d\xfc\xe5\xdb\x0f\xcb\x16\xb2\xa6\xfd\x1f\xb0\x08\x67\x32\x4f\x6c\xc4\x9c\x08\xd7\xc6\x1d\xf9\x9c\xac\xdb\xef\xab\xf2\x76\xed\xa6\xbf\x9e\xdd\x3c\x94\x2c\xd6\xe5\x7f\x5e\x0e\x2e\xaf\x6f\x7f\x2e\x71\xca\xfb\xeb\xdb\xfe\xa7\x12\x43\x1d\xdc\x7c\x3f\xb8\x1c\xdc\xf6\x2f\xc6\xee\xe1\x2e\xb6\xb7\x1f\x18\x7f\x66\xe5\xa5\x91\x8e\x03\x2e\xf5\x74\x8a\x3e\x72\x81\x7e\xf0\x3b\x79\x34\xc1\x12\xae\x18\x77\x67\xc9\x1e\xca\x78\x0c\x8c\x17\x91\x6c\x4e\x52\x22\x70\x62\x6d\x06\x52\x71\x81\x67\xe6\xa6\x97\x91\xc0\x2a\x9a\x23\x99\xe1\x88\xf4\x50\x04\xd4\x30\xeb\xc1\xa6\x80\xaa\xc5\x67\x55\x3b\xdf\x6d\xce\x14\x4d\x89\x53\xc1\xed\x3f\xef\xcd\x66\x6c\xb1\x39\xd7\xf7\xdf\x97\x85\xbd\x8f\x17\x3f\xdf\x0f\xc6\x77\xe7\x3f\xac\x5c\x4f\xf3\x59\x69\x64\x77\x10\x80\x74\xc6\x93\x3c\x65\xe1\xdf\xdb\x8f\x6d\x78\x75\x3f\xf8\x54\x1d\xdd\x75\xff\xbe\x4c\x19\xb7\xe5\x00\xb7\x0f\xdf\x5d\x5f\x5f\x0c\x4a\x2e\xe1\x0f\xe7\xfd\xfb\xc1\xfd\xf0\xb2\x44\x3f\xe7\x0f\xb7\x06\x8d\x70\xd5\x34\xdd\x08\x6a\x26\xaa\xa7\x15\x4e\x73\xdf\xac\xb0\x15\x27\xea\xdb\x80\x72\x73\x96\x8f\x02\xb8\x1d\x13\x0e\x06\x56\x9d\x23\x6f\x52\x8d\xcc\x48\x6b\xd9\xa1\x2a\x6f\x13\x6a\x66\xc7\x2b\x37\x7a\x15\x57\xbe\xf7\x43\x30\x50\xa0\x46\xd9\xc6\x49\xc2\x9f\x4d\x28\x6f\x4a\xf5\xad\x6c\x81\xd1\xf4\x2b\xb2\xf0\x10\x1e\xd7\x70\xbc\xf2\xb6\x90\x48\x10\x75\xc9\x73\xa6\xb6\x27\xb9\xfe\x55\x89\xef\x0c\xae\x7e\x1c\xff\xd8\x2f\x53\xe0\xf0\x62\x35\xab\x09\x9b\xa8\xb9\x8a\xfb\x57\x3f\xfb\x4b\x18\x02\xbe\x7b\x5e\x43\x35\xb2\x6b\x94\x50\x2d\xf6\x46\x58\x6b\xaf\x09\x48\x34\x88\x50\x30\x39\xa4\x7a\x72\x10\x60\x9a\x19\x7f\x92\xe1\x4f\x66\x90\xa7\xee\x8f\x4a\x7b\x12\xd6\x05\xac\xa9\x2e\x9e\x1e\xda\xb1\x5a\x35\x43\x84\x3d\x51\xc1\x01\xcf\x16\x3d\x61\x41\xb5\x34\x6e\x5a\xd6\x73\x3d\x85\xff\xdd\xac\x4d\x30\x8c\x56\x18\xd7\x1d\x17\xea\xdc\x07\xf2\x6e\x67\x0d\xa9\x0b\x68\x5d\x0e\x65\xad\x37\x74\x2c\x7f\x5b\xb3\x39\x3b\x06\xfc\x96\x27\xfc\x8f\xe4\x9c\xe2\x44\x33\x80\xfd\xc9\x8b\xfd\xab\xbb\x61\x59\x7e\x2c\xab\x19\x01\x5f\xde\x5a\x5e\x04\x43\xa5\x19\xb9\x53\x26\xee\xfe\x7a\x61\xb4\x0b\x00\x3d\x36\xe7\x36\x50\x2c\x40\x00\x72\x28\x28\x19\x16\xb2\xf2\x85\x44\x00\x84\x56\x04\x5c\xe9\x3b\x0b\xc2\x99\x9e\x38\x8d\x47\x8c\x7c\xce\x08\x93\x10\x1c\x60\xee\xb3\xc2\xd7\x2e\x8f\xd1\x70\x0a\x2c\x41\xbf\xce\x50\xce\xac\x03\x4c\x5f\xb8\x66\x90\x3d\x2d\xca\xda\x21\x78\x0d\x11\x0c\x2f\x8c\xb8\x60\xa9\x62\xf0\x23\xf6\x93\x77\xa2\xc1\xa3\x29\xd7\x0c\x48\xef\xa2\x6d\xef\x14\x61\x26\x69\x0f\x69\x85\xa5\xba\xa7\x90\x3a\xa0\x15\x4a\x1b\xc2\xa5\x39\x8d\xfd\xf3\xf5\xaf\x81\xa5\x38\xe1\xf0\x32\xa8\xbf\x0b\x2a\x57\x41\x83\x68\x9c\x18\x8f\xc9\xb8\xfd\x9d\x10\x71\x41\xac\x9f\x65\xe3\x6b\x60\x1d\x63\xbf\xc7\xf2\x71\xc9\xf7\x30\x64\x52\x61\x16\x91\xb3\x04\xcb\x2d\x83\x90\x9c\x8d\xa3\x57\x96\x38\x6e\x6f\x1f\x6e\xee\x87\xdf\xad\xe1\xf2\xd5\x8f\x97\xc3\x80\xa2\x24\x77\xee\xb9\x89\xe0\x38\x46\x9a\x7d\xce\xb8\x71\x05\x5a\xc1\xbf\x80\xfe\x36\x79\x3d\x3e\xa0\xb2\x04\x3b\x5e\xa4\x23\x58\x3b\x47\xe8\x4a\xa0\x76\x21\x50\xa4\x57\x02\x05\x26\x0f\xb7\xd5\xe0\x59\x34\x05\x49\xac\x75\x2b\x4b\xb0\x9a\x72\x91\x1a\x2e\x5f\x9a\xb4\x69\x7c\x75\xa3\x94\x29\x22\x44\x9e\x29\xea\xb0\xdc\xab\x52\x2a\x54\x78\xe7\xb3\x4b\x22\x25\x9e\x91\x5d\x1c\xd0\x75\xca\xc3\xdd\x8f\xe1\x3f\xc1\xc1\xdc\x46\xf6\x2f\x8d\xd0\x45\xbe\x3b\x7a\xba\x66\x1f\x4d\x20\xcf\x0d\x4f\x68\xb4\x65\xc0\xdd\xc7\xfe\xf0\x62\x3c\xbc\xd4\x4a\x7c\xff\x7e\x70\x51\x12\x25\xe0\x59\xff\xe3\xfd\xe0\xd6\x82\x58\xf7\xbf\xbb\x18\x8c\xaf\xae\xcf\x07\x77\xe3\xb3\xeb\xcb\x9b\x8b\xc1\x9a\xc8\x9c\xc6\xc6\x97\xad\xab\xd5\x57\x4f\x97\x7e\x81\x1d\xd6\xbc\x2c\xb4\x97\x41\xd6\x18\xa6\x09\x38\xc1\xb9\x71\x86\x63\xc4\x78\x4c\xe0\x67\xe9\xac\x33\x1e\x39\x1a\x0d\xd5\x57\x49\x82\x70\xae\x78\x8a\xc1\x6b\x93\x2c\x46\x0c\x4f\x34\x6b\xc5\x49\x12\x84\x77\x89\x9c\x31\xcd\x62\x75\x63\x06\xa2\x3d\x4a\x88\x66\xe7\x59\x90\xec\x67\xfd\x06\x53\xca\x20\xd2\x36\xc5\xe2\xd1\xb8\x99\x8a\x2e\x8b\x43\x21\x11\x96\x23\xa6\xc7\x45\xac\x61\xa8\xcd\x0a\x9f\xb6\x7a\xab\x71\x75\x52\xfc\x48\xf4\xaa\xa4\x79\x34\x47\x99\xe0\x33\x41\xa4\xb4\xb6\xe5\x08\x33\x13\x80\x60\x5f\xd7\xd7\xd0\x88\x31\xae\x97\xc2\x99\xb0\x63\x92\x11\x16\x13\x16\x51\x93\xd6\x07\xbe\x7b\x6f\xda\x9c\x09\x9c\xcd\x91\xe4\xe0\xf4\x86\x65\x07\xfb\x95\xf9\xc8\xdd\x64\x66\xc6\xe6\x71\x68\x81\x16\xb9\xe6\x13\xd7\x20\x27\x9a\x55\x86\x8f\xdd\x65\xe8\xdc\x2e\xc6\x0e\x98\x66\x09\x51\x06\xac\x1f\x96\x1c\x36\x43\xaf\x75\x69\x3f\xf4\x36\xd5\x6d\x82\xbe\xb0\xdd\x98\xb1\xb4\x23\x3a\xae\xb1\x6c\xdb\x23\x85\xbe\xc7\x2c\x4e\x74\x2b\xce\x87\x51\x3e\x8b\x90\x8a\xd2\xd7\x54\xe3\x4e\xe3\x2e\xb7\x68\x84\x73\xb9\xcb\x35\x5a\xc9\xc5\x34\x56\xc1\xa3\x22\x28\x04\xc8\xdb\x26\x62\xc2\xea\x66\x9a\x45\xe2\x84\xdb\x55\x32\xaf\xe7\xa6\xfe\x13\x82\xd1\x34\x5c\xb3\x99\xa0\x2c\xa2\x19\x4e\xb6\xd2\xfd\x2a\xc1\xf8\x36\xc6\xfd\x6b\x3a\xd5\xe4\xf3\xcd\x92\xdb\x56\x11\x91\x42\x82\xb2\x1d\xa6\xdf\xc2\x0d\x2c\x49\x36\xab\x81\xc8\x22\x9a\x04\x0b\x9e\x1b\x7f\x1c\xac\x0b\x89\x6b\x8e\xea\x71\xdd\x76\xeb\x93\x81\xcb\x01\xd0\x5b\x6c\xb6\x89\xfc\x69\x5a\xbf\x4a\x2b\xb6\x77\x13\x8c\x87\x93\x9b\xfa\x36\xeb\x76\x20\x78\xf8\xaf\x55\xb4\x73\x89\x33\x4d\x33\x16\xb6\x1f\x17\x73\xb4\x4a\x92\xad\x0a\xe6\xe2\x67\x02\xdf\xb9\xcf\x0b\x69\xbf\x1b\xc5\x12\xda\x00\xa8\xe5\x4e\x4a\x31\x04\x41\x8e\xb9\xa5\xf1\x69\xae\x65\x59\x84\x21\x0a\x01\x7d\x4d\x8e\x67\xc7\xc8\x15\x61\xe8\xa1\xfe\xcd\xcd\xe0\xea\xbc\x87\x88\x8a\xbe\x71\x31\x8b\x36\x60\x69\xc4\x14\xb7\xd2\xca\xc2\x15\xd0\x48\x89\x98\x91\xd2\x9c\x5d\x74\x13\x84\x2a\xcf\xa8\x54\x36\x7c\x56\xf3\x95\xa0\xd4\x09\x4d\xab\x62\xb6\xa1\x90\x5c\xcd\x77\x21\x0d\x2c\x65\x9e\x6a\x5d\x76\x4c\x71\x3a\x16\x3c\xd9\x85\x29\x9c\xc3\x54\x40\x5d\xf6\xe9\xf9\x14\xa7\x48\x37\x6b\x43\x41\xbc\xcb\xd1\x8b\x74\x5a\x30\xd2\x7c\x59\xdf\x9b\xc1\xbd\xe5\xbc\x0f\x36\x1e\x8d\xba\x10\x08\x48\xdf\x6f\x60\x15\x85\xd9\x78\x6c\x2d\xf5\x63\x1c\x45\x5a\xe5\xde\xf3\xa4\x82\xfa\x39\xce\x25\x60\x3b\x7a\xb1\x69\xae\xa3\x73\x37\xcc\x4c\x73\x30\x08\x06\xd6\x57\xae\xe4\x11\x2d\xda\xaf\xe9\x77\xb2\x58\xea\xd5\x55\xb8\x79\x90\xde\xa4\x62\x2e\x61\x49\x60\x27\xa5\xa9\x90\xa3\xe6\x64\x81\xe6\xf8\x89\x94\xba\x74\x09\x31\xba\xe1\x05\xcf\x45\x1d\xa3\x1b\xb1\x73\x92\x09\xa2\x25\xfd\xaa\x03\xc5\xd3\xf4\x6d\x99\x12\x3b\xba\xee\xe8\xfa\xdd\xd3\xf5\x99\x29\x94\xd4\xf7\x85\xb1\x76\x12\xe0\x4c\x63\xe3\x8c\xf3\x64\xdc\xc2\x26\xd2\x7e\xc5\x4b\x9e\xb0\x4a\xd9\x28\x80\x04\xe0\x39\xc8\x47\xa5\x6b\x93\xeb\xbb\x2e\x48\xb1\xb5\xc3\x5b\xb1\x0c\xce\x65\x16\xd4\xcb\xd9\xe5\xbc\xd7\xb5\xb2\xaa\x25\xf4\xe2\x62\xce\x99\x91\x6f\xbc\xbb\x2c\xac\x7f\x5a\x3a\x4c\x4e\x14\xa1\x6c\xa9\x1a\x9b\xa1\x67\xbd\xc0\x46\xee\xf8\x47\xce\x15\x96\xdf\x1c\x8f\x98\x16\xa2\x1e\xc9\xc2\x98\x5b\xb5\x98\xf2\x3b\x2d\x8b\x1f\x49\xc2\x24\x84\x7b\xff\xce\xb8\xe7\x34\x89\x3b\x73\xb5\x51\x4d\x4d\x11\x38\x08\xba\xf6\xbd\x40\x88\xae\x6d\xd4\x4a\x49\x45\x00\x34\xc8\xf9\x66\x2e\xf6\x99\x19\xfe\x8c\x28\x48\xb1\x56\x54\x81\xce\x14\x9b\x2a\x73\x4b\x43\x5f\x6b\xba\x32\x54\x21\x38\xf8\x49\xe2\x7c\x37\xc6\x2f\x97\xdb\x58\xcb\x19\xbd\xb6\x70\x67\x63\xde\x4f\x9c\xdd\x28\x12\x7c\xa9\x74\x1b\x96\xc8\xec\xf4\xc4\xb0\x03\xe7\xbf\x26\xec\xf8\x99\x3e\xd2\x8c\xc4\x14\x43\x04\xbc\xfe\xd7\x89\x9e\xd7\xbf\x9f\xdd\x5e\x5f\x8d\x8b\x4c\x9e\xff\x1a\xb1\x7e\x22\xb9\xcf\x52\x40\x8c\x33\x1f\x6e\x9f\x09\xe2\x44\x42\x3b\x17\xb0\xba\x16\x66\xc4\x11\x6b\x1a\x41\xcc\x23\x79\x8c\x9f\xe5\x31\x4e\xf1\xaf\x9c\x81\x2b\xbd\x0f\x7f\x9e\x25\x3c\x8f\x7f\xc2\x2a\x9a\x9f\xc0\xb9\x56\x27\xe4\x89\x30\x65\xdc\x54\x7a\xb9\x62\x48\xde\x95\x10\xad\xff\xef\x7a\xcc\x45\x52\x91\xd4\x9a\x6c\x44\x32\x85\xfe\x1f\x41\x26\x9c\xab\xfa\x4b\x8a\x4f\xa7\x92\x6c\x74\x21\x15\x4a\xda\xdd\x35\xfa\xcb\x9f\xbf\xfd\x83\x26\xa1\x6d\xd6\x78\x78\x77\x3d\xd6\xdf\xff\xfb\xb9\xfd\x5e\x6e\xc0\xee\xae\xb3\x82\xb5\x39\xe2\x31\x81\xf3\x39\x83\xdb\x4f\x80\xf3\x02\xd8\x1b\x90\x43\xb1\x8f\x75\xdc\xed\xbc\xd4\xfa\x6e\x2a\xdb\x56\x8b\x09\x2a\x76\x30\x47\x74\x84\x18\x47\xa9\x89\x35\xc5\x0c\xfd\xc7\x0f\xdf\xd5\x6f\x60\x2e\xe8\x56\x1d\x52\x0b\xd7\x10\x74\x29\xe9\xaf\x44\x22\x4d\x35\x9a\x8a\x79\xaa\xbb\x16\x44\xce\x79\x12\xa3\x67\x02\x6a\x92\x8d\x03\xf5\x5a\xb9\x20\x23\x16\x36\x01\x21\x87\x08\x27\x8a\xcf\x08\xdc\xd5\x4e\x51\x53\x44\x68\x51\xc5\x64\x69\x28\x2e\x48\xcf\x40\x7d\xdd\xfd\xc9\xc5\x56\xc3\x34\xe1\x91\x4b\x6a\xb1\x26\xb9\x78\x52\x3f\xf3\x69\xd5\xf4\x8a\x9a\x6d\xf8\xd5\x4d\xb6\x66\xdb\xfa\xa5\xb1\x49\x28\xd6\x86\x55\xdd\x99\xfa\xc1\xd0\x88\xb3\x71\x42\xd9\xe3\x56\x9b\x71\xed\x44\x39\xdd\x82\x5d\x33\xdd\xa2\xb7\x73\x1b\x0b\xc8\x06\xe7\xe3\x63\x9e\x24\x26\xb5\x25\xdc\x1e\x90\xbb\xcc\xba\x81\x30\x90\x99\x1c\x50\x12\x5b\xbf\x97\xd5\x84\x05\x61\x10\xf0\x36\x62\x93\x85\xf5\xd9\xca\x1e\x92\x79\x34\x77\x99\x79\x11\x67\x52\x8b\xd1\x5c\xa0\x88\xa7\xa9\x29\x6e\xca\x08\x52\x9c\x27\xd2\x46\xbb\xb3\x23\x85\x23\x35\x62\x45\x7f\x6b\x4e\x9e\xa9\x80\xb4\x5b\xea\x5e\x7b\x97\x4e\x51\x69\x69\xa5\xc0\x4d\xe3\x10\xb3\x01\x8c\x60\xc6\x13\x15\xa0\x3f\xf0\xe5\xb3\x64\x36\xac\x41\x33\x90\x73\x2e\xd4\x38\xae\xe5\x39\x6b\x89\xa6\xca\x08\x19\x39\x4a\x20\x68\x98\x3f\x69\xe1\x9f\x3c\x7b\xe3\xeb\xaa\x21\x68\xaa\x5e\x35\x82\x76\xc7\x68\xe5\xc8\x36\x25\xc1\x86\xb5\x32\x08\x1e\x51\x39\x26\x7c\xdd\x18\xef\xe0\xab\x33\xfd\xd1\xca\xc5\xab\x9e\x3b\x27\x04\xf1\xb8\x00\x9b\x33\xf7\xba\xcd\x08\x59\xb5\xa6\x16\x3a\xe1\xe5\x32\x47\x57\x4d\xe5\xa1\x6c\xc9\xd5\x63\x01\x93\xbd\x24\x20\x6b\x62\x31\xa1\x4a\x60\x51\x42\x0a\xf1\xfa\xa0\x24\x58\x40\x7c\xd6\x88\x19\xdc\x38\xa3\x29\xc4\x28\xa6\x12\x12\x44\xe0\x2e\x0d\x9c\x61\xa8\x9d\x12\x58\x39\xda\x45\x9e\xa3\x89\x3f\x87\xc0\xb2\x82\x34\x1c\xb3\xd3\x1d\x79\x7c\x2c\xad\x9f\xf1\x28\x2f\x04\xb9\x08\x24\x5c\x8b\xa9\x83\x28\x93\x74\x36\x57\x88\x32\x6b\x77\xc4\xc9\x8c\x0b\xaa\xe6\xa9\xec\xa1\x49\x2e\xb5\x16\x6a\x82\xd5\x4c\x3c\x0a\x51\x51\x2b\x2e\xb4\x6b\x12\x71\x5c\x69\x70\x59\x45\xd9\x82\x34\xda\x1d\xca\x41\xe5\xae\x58\x43\x38\x7d\x8f\x33\x58\x6d\x83\x42\xdd\x46\x03\x4f\x89\x4c\x1c\x20\x77\xc8\x4e\x50\x05\xa4\xe9\x1c\x00\x2a\xe4\xde\xbc\x14\xaf\x51\x88\x0b\x99\x64\x50\x41\x5c\xec\x36\x48\x5e\x65\x64\x4a\x83\xde\xe4\x9d\x4e\x69\xa6\x6a\x03\xb7\x96\x5d\x45\xb7\x01\xe6\x4f\xbb\xc5\x86\x64\x2c\xa0\x66\x40\x6a\x1b\xb1\x3b\x42\x9a\x81\xdc\x96\xf6\xde\x94\xc6\x85\x29\xd8\x44\x8f\xd5\x24\xbf\x8b\x13\xfb\x7c\x70\x77\x76\x3b\xbc\x31\x90\x13\xd7\xb7\x97\xfd\xfb\x71\x8d\x5f\xbb\xe6\xad\xcb\xfe\xed\x0f\xe7\xeb\x5f\xfb\xfe\xbe\x9c\x95\x5d\xf3\xca\xed\xdd\xea\x64\x8e\x16\x43\xac\x49\x0a\xab\xed\xe7\x14\x65\x0b\x35\xe7\xcc\x87\x28\xc4\x25\xde\x74\x84\x4c\x46\xb0\x82\x10\x22\x21\x55\x8d\xe3\xf0\x1e\xe2\x72\xd6\x4b\x98\xe5\xcd\x32\x30\x6c\x7b\x15\x8d\x36\x38\x91\x9f\x12\x3e\x01\xbf\x75\x5e\x2a\x71\xbb\x22\x02\x7d\xc7\x78\x9f\x73\x2a\xb3\x04\x2f\x96\x7a\x58\x77\xe5\x5c\xe1\x94\x40\xc4\x71\x81\x1f\xe7\x92\x45\xf4\xce\x40\x02\x93\xbf\xd7\xe9\x14\x32\x99\x14\xc5\x8a\xa0\x09\x51\xcf\x90\x37\xe7\x7e\xf5\xb6\x54\x17\x30\x22\x8f\x47\x0c\xcc\x39\x23\xbd\xc8\x71\x0e\xd1\x7e\xa3\x0f\x3d\x34\xfa\x10\x93\x27\x92\xf0\x4c\xef\xbc\xfe\xa1\xe1\x92\x19\xa4\x98\x26\x57\x5c\x79\xcb\xdc\x2e\xfb\x29\x48\x44\x33\x90\xcc\xc7\x44\xb7\xfb\x7a\x82\x47\x89\x92\x1d\x3b\x83\x31\x20\x1c\xc7\x5a\xc9\x06\x56\xe6\x86\x57\x84\x00\xb1\x60\xea\xa5\x5a\x99\x9b\x88\x14\xde\xfc\x6d\x7a\x0c\xdb\x2c\x9b\x3d\x6b\x77\x80\x3d\xbd\xa0\x4b\x76\xd7\x8b\x5c\x6b\x25\x3f\x90\x05\xa4\x60\xdc\x60\x2a\xb6\x74\xcd\xd6\xc5\xbc\xbe\x88\x93\x76\x50\xd3\xd1\x01\xb9\x6b\xeb\xd7\x61\x37\xc7\xad\x8f\xd5\x7b\x2d\x2d\xd5\xc5\x72\xf9\x8e\x5b\xaa\xad\x0f\x4d\x4a\x6a\x63\x08\x03\xaa\x2a\x5e\x19\x89\x36\xd0\xb8\xfc\x00\xef\xf4\x77\x6b\x35\x15\x2f\xae\x45\x61\x4d\x7f\xd8\x05\x9b\x1c\x5f\xcd\xc7\x27\x6b\x47\x1c\x25\x5c\x96\xb1\x72\x5a\x0f\xfa\xcc\x7e\xba\x6a\xdc\x83\x90\x7c\xb5\x5c\xb8\x51\x40\x43\xcd\xc2\x57\xc0\x20\xcd\x3d\xa3\xac\x87\xcc\xbe\xdd\x43\x14\xa2\x2d\x41\x21\x4b\x0a\xe4\x00\x16\xa3\xc2\x0d\x32\x62\x45\xcc\x8a\x44\xcf\x24\x81\x30\xb7\x88\xa7\x19\x98\xf8\xed\x70\x6d\x4b\x24\x36\x11\xc3\x3d\xc4\x73\xa5\x1b\x33\x39\x39\xce\x88\x6b\x13\x7e\x0a\xb7\x87\xf1\xbd\xd9\xe0\x77\x0f\x2c\x6d\x68\xdd\xdc\xa5\x94\xa1\x4f\x44\x41\x2b\x00\xdc\x1f\x4e\x10\xf4\x84\x6a\x08\x65\xfd\xda\xef\x70\xa2\xec\x4c\x36\xd8\xf9\x02\x38\xe5\xbb\x84\x4f\x56\x1b\x09\xa0\x71\xf4\x70\x3b\x74\x16\xc9\x22\x7e\x2a\x40\x2f\x2e\x79\x14\x07\x37\xb7\x83\xb3\xfe\xfd\xe0\xfc\x18\x3d\x48\xa2\x97\xc7\x4f\x17\xf2\xab\xbd\x4a\x62\x46\x6e\x91\x58\x98\x54\x04\x37\x19\x42\x88\x10\xa5\x2c\xe8\x35\x8c\xa3\x0c\xd3\xb2\x9a\xb0\x01\x24\x85\x5a\x43\x1d\x00\x0b\x55\xe7\x69\x23\xf3\xd6\x9d\x40\x88\x93\x1a\xbf\x9f\x28\x35\x33\xde\x74\x39\x32\x6f\x1d\xf9\x94\x23\xfa\x5e\x7a\x32\x70\xb4\xd4\x9c\x50\x81\x5a\x4d\xcb\x10\xd5\xb8\xfd\x9c\x82\x10\xf7\x4b\x9c\xad\x4e\x3f\xc5\xcf\x25\xa2\x35\xa2\x70\xe0\xbb\x7f\xe9\x73\xe0\xd8\xda\xd8\xb0\xc2\xdd\x27\x58\x38\xb4\x0c\x6f\xf5\x7c\xd3\x64\x7c\x48\x67\x24\x0b\x27\x56\x19\x84\x8d\x63\x95\x08\xce\x0e\xfc\x42\x19\x2a\x5d\x89\x3d\x34\xa5\x9f\x6d\xa3\x45\x7c\xbb\x7b\x35\x08\x78\x68\x88\xa7\x9c\xe3\xe5\x33\xb5\x81\xd8\x70\x03\xdf\xaf\x14\x22\xb9\xd4\x22\x51\xa4\xc5\x25\x41\x22\x2e\xf4\x4d\x01\xdd\x16\x5e\x88\x75\x22\x83\xc2\x42\x2f\xca\xb2\x57\x66\xd5\xe9\x2f\x6a\x90\xc4\x58\x91\x23\x2d\x7a\xad\x49\x80\xb6\x39\x32\x90\x4d\x83\x55\x00\x07\x56\xdc\x3c\x13\x32\xc3\xcc\x85\x66\x37\x0c\xd7\x5d\x79\x3b\xb0\x2a\xad\x02\x61\x48\x0f\x03\xf9\x0a\x52\x7f\x4a\xe3\x90\x19\xac\xe7\xca\x71\xd8\xe8\x97\x43\x58\xb6\x67\xec\x83\x71\x1a\x06\x9b\x67\xf1\x21\x0d\x36\xc1\x52\x21\x3b\xa6\x26\x53\x44\xa0\x22\xbe\xac\x11\xb6\xa4\xdb\xb7\x55\xde\x34\x09\x95\xb5\x58\x02\x9e\x11\xe9\x70\x53\x0c\x4a\x8c\xd6\x69\x9c\x20\x6c\x4a\x31\xfb\xb3\x6d\x6b\x32\xbb\x5b\x22\x64\x26\x10\xa4\xbf\xdc\xf4\x31\xea\xb3\x25\xbc\x2c\x17\x97\x55\x5a\x2f\x73\x27\xe1\xe4\x19\x2f\x24\xca\x84\x81\x96\x31\x91\xfb\x6e\xf2\xa0\x81\x95\x3f\xf2\xa1\x10\xca\xa5\x4e\x20\xb0\xc5\xac\x0f\x9a\x73\x72\xef\xf8\x05\x5c\x79\x95\xa8\x72\x2f\x90\x17\xcd\x15\xb6\x8a\x16\xac\x4e\x91\x71\x34\xc7\x6c\x46\xc6\xce\xc8\xba\x8d\xb6\xa4\xdb\x39\x83\x66\xce\x6d\x2b\xf5\x97\xd3\x8d\x51\x98\x6c\xfd\x17\xf3\xaa\x37\x20\xea\x43\x20\x15\x9e\x11\x64\x46\xd4\xca\x2c\x5d\x8a\x18\xb3\x60\xc3\xa0\x27\xd8\x56\x07\xe5\x28\xfa\x26\xe1\x1d\x42\x9f\x2e\xf0\x84\x24\x6f\x13\x39\x01\x5d\x5b\xe3\x3c\x78\xeb\x4c\x36\x00\x41\xcf\x60\xcf\xaf\xb0\x0c\x6b\xbd\x17\x79\x5d\x6e\xc0\xaa\x79\x96\xaa\x9f\xef\x30\x51\x57\x2b\x64\x9b\xa9\x36\x55\x10\x09\xaf\xbd\xa0\xd2\x46\x9d\x81\x2d\xbc\xfe\xaa\x36\xe5\xed\x06\x12\x14\xfc\x68\x18\xc7\xce\x15\x3f\xd6\x4e\x65\x6b\x90\x81\x96\x55\xf0\x86\x53\xc4\x38\x23\x88\xca\xe2\x65\x55\x4e\x87\xf2\x10\x3d\x5a\xc4\x37\xc6\x17\x5f\xa5\xcb\x17\x5f\x7a\x69\x4b\x4b\x01\x9e\xe0\x6d\x03\x2e\xbf\x9b\x11\xad\xa8\x62\xb1\x00\x88\x4f\xc3\x87\xcb\x32\xdd\xda\x71\xee\x5d\xe0\xbe\x77\x08\xae\x41\xa4\xae\xe2\x08\xc4\xc8\xca\xe0\x90\xc1\x41\xb5\x2f\xd9\x8f\x2c\x4c\xcd\x88\x79\xcb\x06\x10\x22\x95\x28\xc5\x19\xf8\xf4\x18\x57\xc5\x57\x06\x76\x49\xf9\x2d\xec\x39\x41\x5c\x9a\x1a\x5a\x0d\x2b\xb0\xce\xb4\xe3\xae\xdf\x62\x5d\xcb\xf0\x96\x0e\x9a\x77\x46\x9f\x08\x73\x34\xdd\x73\x67\x42\x0f\xca\x75\x9a\x2c\x8e\x30\x84\x19\x93\x38\xf4\x7c\xac\xe6\x48\xc6\x20\x73\x08\xf6\xc8\xf6\x4b\x76\x5f\x1b\x46\x63\x40\xd2\x4a\xe8\xf6\x2e\x30\x3c\xa4\x52\x8b\xdb\x6b\x32\xc1\xb1\x44\xbf\x63\x5c\xfd\x2e\x40\x36\x76\xc6\x0b\xf8\xd4\x99\xa0\x7a\x4b\x25\x5b\xe0\xd0\x5a\xc2\x41\x38\x40\xd8\x5a\xbb\xf2\xbb\xc6\x06\x14\x81\xef\x2f\x2a\x8d\x0e\x96\xb3\xe0\x9a\x6a\x5e\x75\x1e\x7b\x54\xbd\x16\xaa\x06\x4f\x53\x56\xaf\x38\xe9\x25\x43\xa7\x5c\xe7\xa2\xf7\x7b\xd1\xca\x35\xbf\x84\x08\xb0\x0b\xb5\xa5\xad\x23\xa7\xd6\x80\x20\xd7\xdb\x25\xb6\xc9\xf3\x6c\x92\xcb\x45\x39\x74\xcd\x96\xc1\x68\x40\xf9\x3d\x1e\xb1\x8f\x5c\xd8\x2b\x58\xda\x3a\x03\x13\x1c\x3d\x1e\x11\x16\x23\x9c\xab\xb9\x41\xdb\xb5\x7e\x85\x85\xa5\x06\x2d\x69\x00\xd9\x78\x28\x0d\x2a\x23\x2c\x62\x57\xf1\xe2\x89\xbb\x51\x8c\x58\xd0\x08\x54\x32\x80\x42\x4f\x50\xaa\xb6\x49\xd5\x24\x52\xeb\x57\x4d\x6b\x51\x57\x84\x75\xa9\x04\xeb\xea\x73\x56\x2a\x2a\x0b\x35\x18\x20\xc0\x89\x4f\x97\x57\x67\xe8\xac\x8d\x4e\xbf\xd3\xf4\xbc\xec\x85\xe8\x59\x8d\xc2\x98\xa4\xec\x0c\xb4\xa4\xf3\xad\xe3\xb5\x25\xd4\xe0\x69\x2e\x20\x5c\xb7\xae\xcd\xaf\xa3\x39\x4d\x0a\xdf\xc5\x37\x3d\x3f\x4c\xdd\x64\x42\x9e\x48\x62\x30\xeb\x23\x01\x91\xf9\xc6\x6a\xf8\x2d\xfa\x3f\xa6\x30\x29\xfa\xc3\x88\x7d\x02\x36\x9c\x24\x0b\x40\xd4\xf4\x2d\x63\x55\x69\xe6\xb1\x76\x00\xca\xa6\x02\xa1\xf2\x40\xcc\x5e\xcf\xf1\x13\x19\x31\xd7\xcc\xff\x41\x8f\xe8\xf7\xe8\x0f\x4d\xea\x9d\x0b\xb0\x7f\x61\x3b\xc7\xc7\x20\x7c\x3d\xb8\xe5\x2c\xa3\xb4\xfc\xc6\x99\x41\x4a\x46\xc8\x1a\x64\x0d\x0f\x8c\x4d\xd9\x13\x8f\x96\xb2\x38\xc2\x53\x8b\x05\x61\x6a\xcc\x78\x4c\xc6\xa4\xc6\xa5\xb9\x82\x49\x68\x21\xe0\x8a\xc7\x64\xad\x43\xd2\x33\xd3\x9f\xc0\x74\x23\xf3\x89\xdf\x0e\x48\xf0\xf7\xd9\xdc\xde\xfa\x50\xa6\xb4\xfa\x91\x7b\xf4\xd9\x6d\xc6\xbd\xad\x33\xd5\x85\x89\xf6\xe0\x42\xb0\x03\xa8\x77\xe8\x25\x58\x39\xf7\x7a\xf5\x38\x56\x1d\x01\xfa\x65\x3d\x73\x7b\x59\x05\xb8\xba\x50\xfb\x44\xd0\x19\xd5\xf2\x7b\x7b\x87\x2d\x70\xc2\x6d\xbc\x19\x06\x64\xb4\x95\x3b\xa3\x58\x0a\x07\xb4\x72\xe4\xe9\xaf\x70\x42\x4e\x78\x5e\x15\xe0\xed\x02\x50\x19\xba\xfb\xad\xac\xbe\xd0\x7c\x78\x66\x32\x00\xc9\x9c\x9a\x9c\xfb\xfe\xd9\x05\xd2\xa7\x83\xa7\x06\x98\x0a\x16\x2d\x57\x73\x2e\xe8\xaf\x8d\x19\x4a\xcd\x32\x7a\xe1\x69\x2d\x12\xba\xcc\x38\xcb\xd2\x3a\x10\xab\x11\x29\x54\x49\x2b\xa9\xd3\x99\xd0\x24\x07\x0c\x56\xcd\x66\xa7\x79\x62\x0a\x37\x44\x5c\xc4\xa6\x72\xba\x2c\xa5\x8f\x41\x18\xae\x13\xef\xb1\xf2\x0d\x52\x0b\x55\x69\x4b\x43\x18\x0b\xce\x4a\x01\xf4\xaf\x39\xc9\xf7\x94\x81\xf7\xa6\x31\xcb\xf7\x78\x26\x8b\x20\x64\xb3\x36\x9a\x37\x17\xeb\xfb\x0f\x3d\x53\x19\xe4\xac\x3a\xcb\xa2\x87\x80\x32\x2a\xb9\x29\x0c\xba\x91\x45\xe7\xd6\x40\xdf\xef\xc1\xa4\xf3\x1a\xf1\x1c\xcb\x32\x52\x0d\xfb\xb1\xe4\xf7\xe4\x33\x38\xab\x2c\xe2\x85\xec\x24\xae\x86\x40\x45\xfa\x78\x41\x93\xc9\x16\x4c\x6e\x59\xa8\x5e\x19\x15\x5d\x18\x50\x3c\x5b\xab\x49\xa6\x56\x1c\xd2\x2e\x9e\x05\x05\x84\xb8\x45\xf1\xb2\xaf\x81\xeb\xae\x8b\x90\xc7\x68\x29\xc5\x88\xb5\x10\xd7\xe1\x96\x70\x51\xcf\xe3\x37\x30\x40\xd8\x86\xca\x5d\x2f\xfb\xed\x9b\x4e\x84\x61\x49\x87\x7a\x24\x96\xe1\x61\xd6\x1e\x06\x5f\x09\xe4\x6d\x0c\x88\x5e\xb4\x79\xbd\x93\xe1\xc9\x71\x1c\xe1\x68\xde\x38\xa9\x09\xe7\x09\xc1\xac\x49\x7a\xad\x7d\x5c\x3d\x22\x06\xdc\x14\x58\x77\x92\x00\xc2\xaf\x5b\x02\x5b\x15\xb2\x10\xdf\x59\x0c\xc8\xec\x86\x87\x9b\xd8\x40\x37\x50\x45\x98\xb3\xfc\x50\x36\x4b\x48\x75\xad\x2c\x84\x7e\xcf\x76\x92\x44\x79\x12\x94\x85\xcc\x88\xd0\xa3\xd6\x4b\xfc\x44\x98\xd6\x19\xec\x38\x9c\x33\xe3\xd9\x25\x44\xfb\x62\x50\x3d\xdf\xb5\xf3\xa7\x41\xd6\x61\x3c\x62\x70\x70\x79\xf9\xb0\x6a\x5a\x95\x5a\xcd\x08\xed\x52\x5b\x9f\xce\x40\x88\xd8\xf8\x78\xde\x95\xcd\xc4\x1b\x9f\x49\xd3\xf7\x18\x62\x0c\x76\x76\xad\x05\xee\x97\x02\xaa\xc1\x6c\xac\x83\xe3\x7a\x25\x23\x32\x44\x6d\x94\xc3\x4e\x83\xa0\x8d\x26\x38\xa8\x17\xbd\x4b\x8a\xf2\x17\xee\x36\x68\x39\x94\x95\xae\xea\x96\x8e\x67\xb0\x4e\xae\x3a\xb7\x17\x36\x64\xbb\xec\xb2\xf5\xf9\x3d\x45\x98\xa3\x2d\xf0\xaa\x04\x06\x74\x02\xc8\x29\xff\xc9\x68\xd8\x54\x1a\x0b\x98\x2b\x73\x91\x66\x6a\x61\xab\xa2\xc1\xbd\x18\xe6\xf4\x1a\xc4\xb7\x3a\xf7\x70\xf5\x8e\x8c\x4b\x0e\xe2\xba\xce\xa0\x23\x6b\x56\xa8\x6d\xd2\x2d\x74\x88\x20\x52\x41\x6c\x68\x8a\x06\x31\x05\x66\xc7\x38\x69\xb4\x65\xed\x81\x69\x42\x9a\x6d\x81\xd2\x60\xc1\x5f\x95\xc8\x89\xe6\x5d\x38\x49\x2a\xf3\xc2\x90\x0e\xad\x7c\x91\xb9\x49\x51\x09\xb7\xbd\xb3\x3a\xc1\x13\xb2\x91\x7b\xfa\xc2\x7c\xb0\x92\x8a\xe0\x15\x88\xec\xce\xb2\x64\xd1\x2e\xa2\x3c\x0c\xbd\xab\x05\x49\x5b\x37\xb0\x10\x5a\x6d\xe5\xdd\x54\x86\x27\xdb\x6e\x88\x92\x44\xb9\xa0\x6a\x31\xb6\x46\xbf\xf6\x4c\xeb\xce\x7e\x79\x66\x3f\x6c\xa3\x51\x9f\x22\xd7\x9f\x33\x32\xc2\x3d\x25\xa8\xa9\xa0\x63\xa7\xd0\x66\xbb\xb5\x96\x5c\x0b\x9e\xb4\x6a\x61\x1d\x7a\x53\xbb\xa1\xea\x2e\xb6\x1d\x9e\xad\xcc\x31\xe6\x53\x87\x8b\xd4\x7e\x61\xab\x25\x4b\x36\xb0\x96\x3a\xf8\xe5\x4c\x50\x2e\x6c\x65\x90\x36\x41\x6d\x29\xfe\x3c\xce\xb0\xc0\x49\x42\x12\x2a\xd3\xed\x6d\xbb\x7f\xfa\xe3\xca\xd1\x9e\x99\x0a\x36\xd2\xd6\x83\xfa\x4c\xd3\x3c\x45\x2c\x4f\x27\x56\xca\xc5\xf2\x31\x04\xbf\x74\xa9\xfa\x06\xc3\xc9\x0d\xb0\x04\x18\x20\x02\x38\xd3\x11\x0b\x80\xad\xad\xa9\x02\x47\x73\x4a\x9e\x00\x76\x53\x30\x22\xe5\x31\xba\xe2\x8a\x9c\xa2\x4b\x9c\xdd\x83\xa0\x66\x4a\x4a\xce\x8c\x75\x1c\x4b\xa4\xa5\xd6\x9c\x51\xd5\x1b\x31\x8b\x86\xed\x56\xe5\x24\xe2\xcc\x20\xa2\x46\xb0\xb0\xbe\x09\x30\xf7\x3a\x68\x50\xe5\x12\x1b\xa9\x6c\x58\x6c\x81\x9f\xc7\x41\xf4\xea\xd8\x64\x07\x6c\x40\xc7\xb7\xf8\xd9\xc4\x6b\x9f\x63\x85\x4d\xb5\xd8\x55\x92\xbb\x0d\x88\xb2\x15\x84\x0c\x10\xb0\x0b\x1c\xe1\x16\x8d\xc2\xd7\x3e\x33\xd1\xa9\x5f\xd3\x63\x72\x8c\xbe\x4b\xf8\x44\xf6\x90\xf4\xa0\xd9\xf0\x50\x12\x25\x7b\xc6\x41\x05\xff\x36\xa9\x60\xdf\xb8\xd5\x2f\xf8\x3e\x94\xfd\x9b\xd2\xcf\x06\x04\x43\xfe\xe9\xf4\xe4\x24\x5d\x1c\x4d\xf2\xe8\x91\x28\xfd\x17\xc8\x14\xb5\x2b\xe4\x10\xa4\x70\x1d\x1e\xd5\xba\xd5\x59\xc6\xb2\x6a\x45\x91\x36\xad\x46\x12\xc0\x4d\xd7\x57\xba\x2f\xac\xea\xa0\x8f\x38\xab\xaf\x1a\x69\xa7\x2c\xf2\xa6\xe3\x55\x02\x5c\x7e\x1d\x6d\xc5\x14\x8e\x0d\x71\x9e\xa7\x09\x9e\x55\x54\x96\x0d\x94\x94\xeb\x94\x5a\x2a\xd2\x73\x87\x78\x0b\x7d\xca\xca\x51\x66\x5f\x39\x77\x24\xb8\x15\xad\xbb\xe5\x78\xc4\xfa\x12\x3d\x13\x53\x0f\x16\x72\x12\xc1\x3b\x91\x53\x39\xf7\x19\x89\x60\x2f\x85\x46\x0d\x1c\xae\x41\x4d\xb0\x8a\xa3\xd3\xac\x9c\xff\xc6\x6a\xa0\x38\x91\xa4\xa7\x1b\x06\x48\x34\x17\x48\x88\x9e\x05\xce\x32\x22\x46\xcc\x42\x9b\x02\x80\x37\xe7\x36\x48\xa4\x29\x9a\xbc\xd3\x28\x5f\x57\xa3\x0c\x93\x3e\xca\x09\x8b\xeb\xce\x37\xe4\x37\xae\x4c\xf5\x58\x91\x1b\xa8\x65\xd1\xb6\x91\xde\x6f\x6f\x36\x6e\x39\xe6\x75\xda\x79\xbf\x12\xa6\x0f\xe5\xa6\x53\x50\x20\x65\x51\x55\xd3\xd9\xfa\xbc\xfa\x5e\x12\x73\x00\x19\x1b\x3e\x8e\x39\x91\x81\x11\x1f\x79\x5b\x5c\x42\xa7\x44\x4b\x1f\x23\xa6\xc9\x38\x74\x38\x18\x80\x6d\x87\xb7\xad\x3b\x8d\x04\x97\xd2\x46\xde\x9b\x76\x56\xe7\x4f\xed\x50\xcb\xcf\xa0\x84\x0f\xaf\xaf\xc6\xcb\x55\xfd\x82\x67\xae\xbe\x9f\x7d\x58\x9b\x64\xdf\xd8\xd4\xda\x6a\x7e\xc5\x5a\x6c\x50\xcf\xef\xe4\xec\x62\xe8\x8b\x58\x55\xba\x5e\x2e\xe8\x17\x22\xab\x37\x97\xf4\x5b\x9e\x71\x50\xdc\xaf\xd2\xc4\x8a\xf2\x7e\xeb\x37\xab\x1c\xef\xbb\x0b\x6c\x5e\x65\xeb\xd7\xf2\x87\x32\xcd\xac\x0b\x4b\xdf\xd3\x36\x35\x5c\x2b\x11\x08\x8c\x2f\xed\x61\x07\xc1\x4b\xbf\x25\x15\x4e\xb3\x30\xe5\xd2\xe1\x86\xda\x69\x9a\xa3\xd6\x74\x09\xbe\x2a\x9e\x79\x84\x4d\x34\x4b\x75\x70\x4b\x5b\xb1\x99\xc7\xeb\xde\xc2\xa4\xef\x23\x8c\xf9\xf5\x72\x98\x93\x45\x11\xb5\x27\xad\xec\xe6\x4a\x70\x37\xd8\xfd\x27\xc4\x43\xc2\x37\x6e\xe8\xae\x49\x8a\x1e\x3a\x4a\x10\x2c\x6d\x38\x06\xe4\xf2\x55\xf2\x7c\x36\x30\x0f\xfb\x31\x9b\x6c\xe0\x23\x5f\x84\x21\xb8\x6a\x6c\x5d\xb1\xc8\x1d\x44\x2a\x04\x79\x22\x02\x68\xc7\xc6\xfc\xb0\xf2\x51\xc5\x89\x20\x38\x5e\x04\x2b\xe2\x03\x0e\x4c\xcf\x60\x1e\x93\x34\xd5\x0a\x3c\xa8\x26\x8c\x1f\xf1\xcc\xe9\x2c\xa5\xb7\xa0\x82\x06\x9d\xea\x1b\x2b\x08\x57\xd0\x5f\xb0\x23\xf2\x99\x4a\xa5\xe5\x8a\x9a\x58\x4d\xd7\x08\x48\x3c\x50\x57\x6b\x4e\xec\x0d\x37\xfa\xd0\xff\xee\xfa\xf6\x7e\x70\x3e\xfa\x50\x44\xe7\xbb\xf4\x33\x8f\x08\xe5\x00\xfe\x39\x1b\x31\x1f\x50\xeb\x01\x90\x61\x2f\x11\x8e\xe3\x02\xd9\xc0\x2a\x91\x46\x66\x5b\xc9\x91\x83\x53\xb1\x36\x94\x76\x45\x33\x0f\x90\x83\x74\xa8\x27\x6b\x85\xeb\xac\x74\x72\x4c\x26\xd5\x8a\x94\x97\x3d\x5d\x36\x21\x76\xab\x32\xba\x36\x51\x0e\x5c\x90\x91\x67\xa7\x2b\xc1\xed\x7c\x82\xcd\x25\xbc\x19\xb7\x73\x1b\xb2\xc5\xa6\x7e\xa4\x9f\x49\x7c\xdb\x20\x55\xed\x25\xa3\xa5\x55\x24\x60\xed\x2e\xe4\x8c\x6e\xa2\xf1\xfb\xa9\x3c\xe8\xef\xda\xb3\xa5\xeb\x02\x92\xad\x80\x57\x05\x6c\x55\x85\x30\x8a\x88\x50\x98\x32\x34\x85\x83\xcd\xa2\x05\x02\xc0\x0e\x02\x3e\xec\x3f\xa2\x94\x32\x40\x0e\x58\xb5\xb4\x0f\xe5\x79\x6c\x20\xb4\x5e\x0e\xaf\x1e\xee\x4b\xa2\xea\xf7\xd7\x0f\xe5\xa2\xee\xfd\x9f\x57\xca\xaa\x95\x16\x56\x05\x0b\x05\x53\x2c\xb2\x10\x2d\xca\xac\x5f\x99\xda\x89\x26\x0b\x45\x1e\x6e\x2f\x76\x92\xef\xea\x9d\x65\x8d\x18\xe1\xa1\x74\x55\x8f\x88\xd0\xe6\xd3\x98\x44\xeb\x50\x4c\xdb\xd3\x91\x89\x82\xd2\xeb\x60\xad\x89\x16\xe1\x0c\x4b\x94\x61\x61\xfd\x50\xb1\x09\x80\x2a\x57\x06\x33\x9a\xd7\x2a\x04\x89\x4f\x44\xfd\xa8\xaf\x3e\xce\xf6\x91\x05\x61\x45\x59\xf0\x8f\x92\xf1\x93\x69\x78\x83\x93\x66\x87\xb2\x22\xd5\xc5\x09\xcb\xd0\x03\xb2\x3d\x84\xb8\x0b\xc7\xa6\x42\x7c\x5f\x37\x07\x2b\xe2\xe2\x09\xb5\x4a\xca\x99\xa6\x48\x03\xa7\xea\x30\x58\x83\xe6\xf8\xd4\x7c\xdc\x12\x91\x2e\x88\x6a\xd7\x6d\x15\x4b\x89\xfa\x37\xc3\x9a\xb5\xbe\xa8\xba\x90\xbe\xac\x72\x36\x89\xf7\x66\xed\x1b\x24\x29\x48\x4f\x3c\x08\x54\x24\x3b\xd3\xdd\x60\x90\x8c\xd3\xff\xa6\x1c\x49\x70\x08\x68\xbd\x75\x2a\x43\x29\xed\x78\x0d\x30\xef\x66\x99\x78\xc5\x32\x6c\x08\x7a\x14\x0e\xc8\xa6\x81\x84\x40\x3f\xcb\x31\xc6\xbd\x10\xf8\x87\x9b\x82\xb9\x36\xb6\x60\x6f\x60\x48\xc5\x6c\xda\xa0\x21\xfd\x68\x28\xda\x83\x65\x00\xfc\x87\x2b\xc8\xe8\x62\x83\x6d\xee\x7a\x38\xdd\x90\xda\x36\x03\x50\x2a\xc6\xe7\xcc\xdf\x16\x8b\x1a\x67\xd8\xda\x1d\x40\x89\x72\x95\x12\xea\x0a\xeb\x1d\x8f\x58\x10\xb0\x22\x8d\xda\xa3\xcf\x88\x2b\x4e\x02\x15\x6f\x19\x00\x5b\x43\x92\x8e\x17\x7e\x4a\x3b\x50\x4d\x91\x57\xf3\x72\x79\x91\xa5\x7e\xec\xe9\x94\x73\xec\x12\x11\x9d\x05\xc5\xc6\x01\x86\xf6\x25\x68\x2f\x28\x28\x60\x3b\x06\x73\x34\x18\x2d\x70\x50\xae\x2e\x48\x5e\x8f\x39\x91\xec\x2b\xe5\x53\x3d\x69\x62\x4b\xa2\xe0\xaa\x7b\x40\x4b\x75\x98\xda\x96\x57\x1f\xf0\x3d\xa0\x33\x6d\xaa\x38\x04\xc7\x6a\xad\x99\xca\xf9\x78\x81\x12\xc2\x58\x24\xe8\xb4\xc9\xaa\xfe\x39\x23\xd1\x36\x10\x32\x37\x58\xe0\x94\x28\x22\x56\x85\x23\x95\x8b\x49\x83\x88\xe3\x76\xd0\xf6\x6b\x76\xd1\x54\xda\xa8\x96\x64\xf1\xda\xed\xc5\x3a\x48\x18\x3f\x8b\x8d\xd0\xaf\xf4\x34\x7e\xb4\x96\xff\x0d\x67\x61\xfb\x29\xa6\x61\xa3\xad\x02\x04\xa0\x5d\xe7\xf4\x3a\x50\x28\xf7\x4b\xa0\x22\xa5\x70\xa1\x03\xc1\x40\x59\x3f\xca\x26\xf0\x93\x75\xbc\x74\x2f\xbc\xdb\x65\x38\xb8\x14\xda\xca\xa1\x2a\xe5\x4e\x00\x95\x80\x4a\x65\x70\x40\xea\x01\x4c\x40\x68\xa9\x8b\x90\x0c\xdc\x7e\x16\xde\xae\x30\xe8\x5a\xc9\xaa\x5a\x5c\xaa\xb2\x5c\x6b\x78\xdc\xbe\xc0\x1d\x3a\x89\x66\xdf\x12\xcd\x3a\x52\x2e\x45\xd7\x6a\xea\x24\xa2\x82\x33\x63\x8b\x3e\x5b\x80\x80\xf2\x04\x21\xf7\xc8\x5e\x91\xb6\x72\x2c\x5c\xfd\x94\xf9\x7f\x95\x39\xb8\x23\xea\x90\x54\xeb\x92\x2a\x8f\x03\x17\x14\x78\xa0\x92\x50\x1a\xb0\x71\x35\x30\x5a\x13\x06\x69\xac\xfc\xc3\x2b\xe3\xc0\x82\xe4\xe6\x05\xcf\xd1\x33\x95\x73\xa4\xf8\x88\x41\x9c\xa0\xf7\x06\x28\x8e\xcc\x8b\x3d\x78\x0b\x60\x10\x64\x3e\x49\xa9\x42\x38\x98\x61\xc9\x24\xd9\xb3\xe7\x59\x7f\x00\x33\xae\xcd\xb3\xaf\x83\xe8\x59\x73\x68\xb6\xb0\xaf\x15\x8d\xec\x9a\x4a\x1f\xc4\x34\xbf\x6c\x32\x7d\xa0\xf1\x84\x1a\x66\xed\x99\xeb\xb2\xe9\x51\xbd\xb5\xc1\x82\x86\x02\xb2\x2b\x95\xaa\x72\xb7\x58\x43\xcf\x9a\x4c\xfa\x62\x23\x5a\xa5\xd2\x17\xaf\xef\x23\x97\xbe\xa9\x4c\xd9\xaa\xdc\x4a\xf7\x49\x83\xfd\xdb\xe5\xec\x2a\xee\x02\xe7\x43\x49\xe9\xa6\x51\x52\x3a\x34\x54\xb3\x22\x21\x60\xfb\xf0\xf2\x4d\xd4\xc1\x22\x3f\x2b\xa4\xa2\x20\xdd\xb2\x8c\x09\x43\xaa\x9c\x9f\x71\x05\x39\x35\x11\x94\x70\x5f\xca\xf3\x1c\xb1\x7a\x09\x64\x35\x4f\xdc\x35\x45\x63\xaf\xe8\x67\xc1\xf9\x73\xb3\xb0\x16\xad\x9f\x7c\x90\x9b\x51\x96\x6d\x31\xf6\xaa\x88\x59\xb8\xf8\x9a\x82\x93\xb4\xe0\xb1\x4d\xc2\x71\xcd\xa9\xac\x1f\xfa\x52\x02\xc5\xda\x73\x61\x2f\xdd\x3d\xaa\x76\x4b\xdc\xb9\x75\xbe\x89\x97\x91\x2d\x37\xb6\x01\xd3\xb1\xd7\xe3\x2b\xae\xda\x6d\xaa\xcc\x02\xaa\xe8\xde\xb0\x50\xab\xf0\x04\xba\xf1\x1e\xb8\x77\xed\xd8\xb1\x09\x75\xf1\x08\xdd\x95\x3d\x29\xcd\xd8\x56\xef\x7f\x89\x59\x6f\x5a\x1a\x38\xf0\x37\x0a\x1b\xef\x4b\x43\xcb\x01\xd4\x04\xb6\x61\x92\x15\x4e\xec\x85\xbb\x9c\xc5\x44\x30\x82\xd5\xfc\xf5\xb2\x2c\xce\x76\x35\x4f\x07\xe3\x7b\xd9\x8c\x8b\xb3\xbd\xd4\x85\x0f\x87\x5b\xae\x91\xbe\x76\x9c\xfa\xf5\x36\x96\x22\x1b\x7c\xe0\xab\x04\x2f\xa9\x8e\x35\x66\xc3\x00\x84\x66\x13\x2a\xdd\x29\x11\xa3\x5e\x9d\x7b\x99\x94\x94\x1a\xbb\xcf\x52\x32\x8a\x3e\xed\x61\x6d\xe5\x35\x4b\xf2\x45\xe4\x7e\xbc\x7c\x3a\xc2\xaa\x2a\xce\x79\x90\xa1\x00\xa5\xb4\x15\xa6\xcc\x72\xaf\x55\x49\x09\x5a\xa6\x4c\x71\x5d\x1e\xc2\xc1\x67\xb8\x7c\xf1\x09\x2e\x5d\xba\x43\x97\xee\x50\xb3\x47\x5d\xba\x03\x42\x87\x96\xee\xb0\x4e\x05\x5d\x65\x00\xf5\x3e\x39\xa8\xb6\x59\x2a\x71\x63\xf6\x77\x8d\x1e\xb9\x7d\x48\xbf\xb3\x21\x86\xf1\x50\xf6\x17\xfb\x43\x6d\x48\xd4\xd2\x67\xd5\xd9\x86\xf6\x4c\xb6\xa8\xba\x05\xb0\x88\x13\x8b\x43\x67\x03\x96\xcb\xf6\xa7\x55\xa6\xd2\x11\xfb\x9e\x3f\x93\x27\x22\x7a\x08\x2b\x94\x72\xa9\x80\x0f\xbb\xf8\x18\x38\x08\x25\x48\x73\x13\x07\x81\xd1\x15\x4e\x49\x6c\x2a\x1e\x06\x61\x8d\xd6\x60\x6b\x5d\xad\x75\x70\xab\x80\x1c\x6a\xb6\xc1\xc5\x4d\x8c\x98\x09\x35\x34\xe1\x6d\x20\x2b\x50\x37\x31\x20\x98\xdf\x79\x47\xf0\xef\x8e\xd1\xbd\xbe\x9f\xa8\x2c\x8f\x37\x40\x5f\x6b\x1a\xdb\x88\xcd\x04\xcf\x33\x6f\x43\xe3\x13\x53\xfa\xd6\x44\x3f\x2d\x3b\x82\x61\x30\xce\x0b\x1c\xe1\x58\xeb\xe2\xab\x09\xe7\x4d\xa2\x50\xb7\x82\x30\x0a\x09\x48\x1f\x43\x1f\x5a\x67\x43\xdd\x8d\xff\x36\x00\x6e\x59\x05\xc4\xfe\x42\xce\xe5\x73\x22\xc1\x2a\xe4\xad\xee\xa5\x3c\xf2\x32\x56\x41\xed\x38\x57\xd9\x44\xbd\xdf\xc2\xd9\xf6\xeb\x61\x10\x8a\xce\x6d\xcc\x97\x49\x52\xb5\xf7\xc4\x8b\x59\x4b\x5b\x47\xcf\x36\xf1\x8b\x9b\x5c\x64\x1c\x24\xb1\x64\xe1\x60\x1b\x2c\xd2\x5b\xc6\xb3\xdc\xc4\xb5\xd1\x30\xcc\xa9\x96\xb2\xa9\x54\x97\x58\x45\x73\xcd\xb9\x0b\xc4\xb3\x3d\xc5\xfb\x15\x5c\xf9\x65\x2d\xa8\x35\x33\x38\x0b\x7b\x6f\x70\x29\xb4\xb0\xa8\x9b\x7b\xdf\x85\xd7\x3b\x49\x22\xd5\xfd\x19\xb7\x9b\x2d\x68\x1d\xd8\x45\xdd\x27\xf6\x89\x9e\xe8\x3a\x2a\x5a\x37\xfe\x76\xb4\x55\xae\xb8\xb5\xf7\x48\xc2\x1d\x20\x64\xce\x2d\x60\x57\xf1\xa2\xad\xd0\xda\xe0\xfe\x17\x74\xbb\x2c\x20\x8b\x92\xff\xa4\xc5\x11\x6f\x71\x4d\x71\xa6\x95\x08\xc5\xf5\x2d\x29\x66\x46\x8e\x35\x71\xb2\x08\xa3\x5c\x50\x77\xf6\x2b\x39\xe1\xcd\xd4\x01\x16\xca\x93\xb0\xa2\x52\x84\x83\x62\x73\xc6\xe1\x8f\x23\x95\x63\x1f\x98\x08\x34\xe1\x8a\xa0\x9b\xfc\x77\xe7\x58\x17\x4e\xbc\xab\xd9\xd3\xb5\x84\xbd\xc3\x2e\xe3\x3a\x7c\xc3\x56\x27\x8d\xb2\x59\x00\x8e\x58\x6f\x25\x6e\x53\xfb\xa0\xf6\xcb\x76\xf5\x1b\x6a\x3f\x75\xb2\xcf\x36\xdf\xae\x00\x6f\xda\x3a\x36\xbb\x14\xe7\x6e\x03\x61\xad\xf4\x14\xc2\x56\x5a\xfb\x1d\xa0\xcf\x52\x70\xd4\x63\x2b\x4d\xfd\x97\xff\xcb\xd4\xca\x32\x4b\xf3\x5f\x88\x8b\x11\x33\xbf\xf7\x7c\x9d\x0a\xfd\x42\x01\x00\x8b\x53\x52\x40\x64\x8a\x32\x98\x1e\x40\x8a\x58\x30\x34\x03\xf6\xeb\x61\xfa\xf5\x18\x1e\xf3\x09\x11\x8c\xe8\xa1\x39\xf0\x01\xcf\xcc\x52\xcc\xf0\x0c\xa0\x85\x7b\x10\x19\x07\xe2\x6a\xa1\x8a\x18\x92\x36\xf5\x0e\x81\x5b\x69\x66\x69\xf3\x6d\x8b\xba\xbf\xd0\xa7\x11\x65\x2d\xb2\x69\x11\x5e\x51\x4f\xfd\xb7\xb6\xff\xed\x24\xf6\xfb\xfe\xdd\x0f\xe3\xdb\xc1\xdd\xf5\xc3\xed\x59\x49\x6c\x3f\xbb\x78\xb8\xbb\x1f\xdc\xd6\x3e\x2b\x72\x55\xff\xfa\x30\x78\x68\x78\xe4\x1a\xb8\xe8\x7f\x37\x28\x15\xd1\xfe\xeb\x43\xff\x62\x78\xff\xf3\xf8\xfa\xe3\xf8\x6e\x70\xfb\xe3\xf0\x6c\x30\xbe\xbb\x19\x9c\x0d\x3f\x0e\xcf\xfa\xfa\xcb\xf0\xdd\x9b\x8b\x87\x4f\xc3\xab\xb1\x0b\x3b\x0e\x1f\xfd\x74\x7d\xfb\xc3\xc7\x8b\xeb\x9f\xc6\x41\x97\xd7\x57\x1f\x87\x9f\xea\x66\xd1\xbf\xbb\x1b\x7e\xba\xba\x1c\x5c\xad\x2e\xd6\x5d\xbf\x1a\x8d\x75\x80\x83\x8b\x2c\x30\x1a\x05\x62\xd2\x64\x61\x49\x9b\xfe\x0a\xbe\x8b\x1b\x43\x8f\x47\x3d\xf7\x97\x29\xad\x7d\xa4\x59\xa0\xf3\x8b\x15\xdc\x63\xc4\xbc\xe3\xd2\x5f\xaa\x0a\xcf\xa4\x4b\x3d\x2e\x8d\xf6\x14\xf5\xe1\xac\x80\xc2\x50\xea\x14\x32\x1b\xfc\x48\x9d\xab\x1b\xe8\x30\xa1\x29\x05\xaf\x37\x3a\x42\xd5\x0d\x2f\x37\x68\xe7\x04\x43\xb0\x7e\xbb\x78\xd5\x69\x90\xd5\xac\x66\xa0\x94\x53\xe4\x38\x34\x31\xe6\x04\x83\x3d\xbb\x60\x38\xa5\x51\x35\x05\x03\xe0\x57\x51\x01\x35\x52\x6d\xb1\x44\x60\xe5\x96\xe7\x04\xfd\xf0\x97\x62\x50\xe0\xc1\xb0\x9a\x77\xbe\x54\x51\xcf\x3e\x10\xb9\x59\xd5\x75\xe4\x59\xea\xc9\x1d\x73\x6b\x5a\x86\x73\x6b\x2b\x77\x83\xbb\x29\x67\x01\xdc\x58\xc9\xf7\xa4\x8f\xb7\x99\x51\x85\xc6\x4f\xd1\x1d\x40\x9d\xc8\x42\x75\xd7\xbb\x98\x25\xf9\x8c\x32\x44\xd3\x2c\x21\x45\xcd\xf7\x09\x99\xe3\x27\xca\x5d\xf9\x0a\x53\xe5\x03\xd6\xd1\x8a\x56\xe8\x08\x35\x1e\x94\x53\xd4\x8f\x63\x59\x66\x70\x25\xca\x71\x2c\xf3\xa8\x3c\xec\x10\x21\x8c\xc5\x9e\x6d\x56\xe8\xa8\x38\x72\xb0\x62\xfb\x07\x73\x59\x66\x87\xe5\xbb\x77\x87\xeb\x5f\xaf\xe0\xd8\x91\xf2\x78\x2b\x61\xe0\x1e\xcb\x47\xc7\x9a\xd7\x09\x04\x0e\x56\x67\xb7\x1e\x2d\xbe\x4e\xdb\x4e\xfd\xca\x8e\xe1\xa0\x6d\xd7\x67\x23\x2a\xf4\x9a\x2e\xdd\x8c\x93\x4a\xe9\xae\xd6\xfd\x95\x4a\x7f\xd5\x76\xb6\x57\x6f\x4f\xbd\x34\x06\x47\x72\xec\xe9\x7f\x83\x79\xdc\xc0\xa7\xd7\xfe\xcb\x95\x22\xdb\x38\x58\xb7\x4d\x7d\x40\x4b\x49\xba\xd6\x0f\xb4\x92\x0e\xf7\x04\xef\xd4\x5e\x18\x84\xc2\x0b\x34\x02\x77\x1f\xa6\xcc\x96\xe3\x21\xde\x1f\xe5\x0a\x50\xeb\x73\xec\x4b\xc4\xe1\x09\x7f\x2a\x29\x97\x29\x91\x12\x37\x00\x96\x04\x26\xb1\x5d\x18\x83\x3f\xa1\xf6\xc3\x96\xf4\xe4\xce\xe4\xbd\xfe\x6a\x95\xd1\xe7\x36\xd4\x8c\xdd\x44\xb5\xc0\x1a\xbb\x48\x5b\x74\x6d\xf2\xed\x34\x7f\xe9\x15\xc1\x34\x5c\x04\x31\x46\x4d\xee\x9f\x96\x66\xb5\xea\x82\xd5\x56\x59\x0a\x5d\x78\x9b\xc7\xe0\x04\xad\x6f\x8d\x88\x6d\xfd\x2a\xb8\xbc\x3e\x1b\x50\x5d\xc9\xdf\x19\x56\xa0\x8e\x78\x9a\x1a\xb9\xa0\x64\x4b\xed\x21\x6c\xd2\x1c\x0b\x69\x4a\xe6\xd1\xdc\x78\x99\xf4\x95\xd1\x1b\xb1\xe7\x60\x43\x4a\x81\xc0\xfd\xb0\x25\x40\x13\xfd\xac\x8f\x1b\x7d\x2a\x85\x57\x83\xc8\x48\x21\xd6\x37\x20\x04\xe3\x10\x2c\xca\x47\xad\x21\xf0\x60\xbf\x76\x20\xf5\x2d\x6a\x05\x56\xd6\xb7\xa9\x62\xa0\x9f\x5b\x50\xa8\x6f\x07\x4d\xb9\xed\x10\x82\x5a\x81\x75\x23\xd8\x43\xa9\xc0\x57\x85\xf7\xf6\xe9\x9a\x26\xbb\x37\x9d\x58\x8c\x0a\x3d\x5d\xb7\xda\xbf\x77\x33\xfa\xbd\xf1\x3b\xe4\x0d\xa0\x26\x41\x6b\x1e\xe1\x1b\x1d\x69\x99\xd5\x25\xdb\xdb\x40\x0c\x89\x8e\x0c\x6a\xe0\x57\x10\x69\xd9\xbf\x19\x7e\xd5\x43\x5f\x85\xd9\x66\x5f\x6d\x75\x00\xed\xb8\x6d\xb9\x40\xd0\xa6\x4a\x29\x07\xe5\x63\x07\x7b\x55\x39\x89\x76\xcf\xec\x41\x44\x4d\xe7\x50\x7f\x59\xfa\x06\x9c\xd3\x50\xfe\xce\xf8\x6f\x7d\xc0\xb3\x75\x01\x19\x19\x97\xca\x9a\xb5\x8b\x47\x6c\xb2\xa8\x3a\x79\x7a\xde\xcb\xd3\xfa\x94\xee\x5c\xd2\x4d\xb7\xb7\x9c\x9e\xbc\xe7\x40\xdc\xd5\xf7\xc1\x9a\x84\xe7\xbe\x89\xb9\xe6\xd3\x80\x8b\x35\x45\x29\x74\x11\xec\x75\xb3\x2a\xd9\xcb\xdc\x62\xd6\x6e\xca\x3a\xf9\xe7\xbd\x91\x5b\x8b\xb0\xef\x7e\xdd\x8a\xd8\x88\xff\x06\xe1\xba\xa3\xb2\x97\xa5\xb2\x7d\x64\x3c\x94\x07\xb7\xf9\x05\x7a\x66\xe4\xb8\xa0\x19\x67\x70\xd5\xca\x84\x67\xf0\xa5\xba\x7f\xeb\x0b\xe6\x6e\xe8\xf3\x0d\xd6\x64\xbd\xd3\xf7\xce\x04\x0e\x18\xb7\xeb\xf2\x58\xab\x43\xed\x2b\x5b\x84\x88\x53\x93\xdd\xa8\x68\x4a\x7a\x88\xb3\x64\x11\x04\x3b\xd8\xf3\x0a\xe4\x66\x62\x94\xe6\x84\x0a\xd7\x89\xc5\x18\xdc\x28\x1d\x7e\x43\x69\xbc\x89\x46\x76\x88\x34\xb9\xea\x5f\x0e\xce\xc7\x83\xab\xfb\xe1\xfd\xcf\x35\xf8\x91\xe5\xc7\x0e\x42\x32\x78\xe1\xee\xe7\xbb\xfb\xc1\xe5\xf8\xd3\xe0\x6a\x70\xdb\xbf\x5f\x03\x2f\xb9\xaa\xb3\x26\xe8\xc2\x5c\xd6\xa9\x6f\x9b\xc0\x17\x3a\x33\x6f\x4d\xef\xcb\x20\x93\x41\x27\x94\x34\x00\x4d\x9a\xd4\x7f\x16\x13\x81\x62\xf2\x44\x12\x9e\x15\x66\xd5\xda\x05\x0b\x10\x28\x6b\xda\x5f\x85\x42\x09\x6d\x56\xd7\xf8\x14\x99\x5a\x6f\x41\xb9\x5b\xdf\x20\x88\x7c\x58\x10\xf6\x95\x42\xe4\x73\x96\xd0\x88\xaa\x20\x35\x90\x0b\xeb\x5e\x31\xee\x43\x88\x4e\x5d\x43\x5c\x7b\x8b\x46\xd9\xbb\xce\x1f\x7a\xd2\x97\xb5\x7d\x7f\xa2\x3c\x22\xda\xda\x02\x42\x7b\x50\xec\x1b\x9c\xc6\x4b\x80\x6d\x5b\x8c\xee\x25\xcc\x03\xcb\x39\x3a\x36\xbd\xaf\x01\xcc\xad\x7e\x90\xeb\x6f\xc3\x55\x71\x32\xa5\x73\xbd\x3a\x50\xa6\x1d\xa5\xbe\x71\xb8\x4b\xa9\xb0\xe6\x1e\x90\x37\x6c\xec\xfa\x86\x01\x0b\x4b\xf5\x62\x98\x89\x39\xc5\x48\x90\x94\x2b\xad\x80\x99\x88\x80\x9e\x16\xaa\x28\x4e\xe8\xaf\x80\x51\x25\xc8\x71\x10\x41\xe1\x90\xbd\x0a\xf7\x81\xc5\x8f\x38\x1e\xb1\xf3\xc1\xcd\xed\xe0\x4c\x33\xa4\x63\xf4\x20\x01\x7e\xaa\x34\xf5\x73\x4b\xde\x46\x1c\x0b\x23\x19\x28\x93\x8a\xe0\xa6\x60\x30\x22\x04\x17\xed\xf9\x83\xef\x6f\x00\xdf\xd5\x93\x37\x3c\x2b\xd9\xa6\x9c\x01\xe0\xaa\xb1\x2a\x72\x90\x33\xb0\xf7\x9c\xac\x5b\xfc\x5c\x5a\x91\x10\x7e\x03\x24\x91\xf2\xaa\xbf\xe0\x6a\x03\x80\x67\xfb\xf9\x95\xfa\xbc\x81\x6f\x57\xcd\xf3\x1e\x42\xec\xa4\x2a\xd0\x40\x0d\x60\xa8\xaf\x7a\x53\x99\x67\xa3\xa8\x28\xde\x02\xaa\xa3\x42\xfa\x13\x32\xc3\x0c\x89\x9c\xb1\x0a\x3c\x6c\x68\x69\x5b\x0e\x9a\xd9\xf4\xa8\xea\x35\xc3\x29\xcf\x19\x28\x0d\x10\xc6\x5a\x33\x18\x99\x11\xa6\xd6\x0c\xe6\xad\x80\x58\x2a\x43\x3d\x5c\x2c\x96\x9a\x81\x36\xc1\xb1\xd4\xf9\x93\xa0\xf4\xf2\x66\xd7\xb2\x0b\xca\x2b\x39\x95\xf4\xa1\xf2\xf7\x73\xbd\x96\x8d\xe5\xe3\xce\xdd\xdd\x63\xf9\xb8\xbe\xab\x98\x44\x8f\x9b\x5e\x36\xd5\xcc\xcc\xc4\x56\xae\x5e\x32\xf6\x2d\xf4\x53\x5b\x9a\x05\x0a\x96\x47\x8f\xe8\xfb\xfb\xcb\x0b\x34\xa5\x5a\xee\xd5\xd7\xca\x15\xd6\x32\xf6\x83\x48\x9c\x5d\xd8\xda\x56\x73\x91\xf8\xbb\x17\x36\xde\x89\x52\x81\x94\xa0\x6f\x34\x3c\x23\xce\xd8\x2b\x2c\xda\x5e\xa5\x34\x8b\xc0\x2c\xe6\xa9\x99\xc7\x89\xcc\xa7\x53\xfa\xf9\x58\x61\xf1\x4d\xc3\x7a\x98\xa8\x8a\xf1\xdf\xf9\x64\xac\x47\xb4\xe3\x45\x5c\xd7\x1c\xb2\x05\x95\xfd\xb2\xd9\x99\x9d\x9b\x77\xff\x2f\x9f\x40\xb6\x7b\x26\x38\x20\x00\x82\x77\xce\x46\x2a\xd8\x57\x1c\x25\x1d\x23\x97\x40\x55\x02\x39\x89\xb8\x10\xc4\x26\xc9\x9b\xda\xa2\x19\x16\x8a\x82\xb5\xd6\x81\xa4\x94\xd0\xf1\x8b\x2d\x0a\x4b\x7e\xcf\x71\x81\x44\x3d\x21\x04\x1c\x3c\x19\x4d\x36\x53\x7a\xcf\x4a\xbe\xc9\xca\x09\xb4\x91\xa7\x16\x37\x13\x0c\x32\x6b\x45\xac\xc1\x13\x61\x6a\x2f\xfa\x09\x34\x51\x93\xb6\xdf\xce\xcb\x60\x4a\x7c\x0e\xcf\x8b\xcb\xcd\x85\xf4\x86\x51\x4d\x4a\x60\xb8\xe7\x6d\xa2\x94\x75\xa9\x37\x39\xfa\x9f\x5a\xfb\x8e\xe1\xd5\xe5\x75\x59\x13\x1a\x6f\x57\xbb\x28\xf5\x5d\x84\xb5\x3a\x68\xff\x2d\x81\x7c\x24\x31\x56\x8c\x00\x40\xc2\x2a\xa7\xd5\x3d\x37\x7d\x6a\xda\xaa\x74\xb9\x76\xcb\xb7\x40\xad\x29\x35\xf3\x89\x40\x4a\xe7\x3e\x02\xd1\x37\xc9\xdd\x87\x81\x3c\x88\x04\x42\xa8\x57\x5a\xb1\x4c\x99\x71\xcd\xf9\xbc\x64\x87\x5b\xc8\xe8\x66\x30\x5a\x68\x24\x99\x20\x91\xbe\xca\x4e\xd1\x4d\x42\xb4\xe4\x95\x6b\xe9\x2b\x4f\x12\x87\xf0\xb5\x5a\x3a\xdc\x08\x95\xee\xc5\xe7\x15\xe8\x1e\x2b\x26\xe6\x10\xee\x56\xcf\x2c\x58\x83\xfd\x23\x2e\x04\xeb\x0b\x26\x64\x30\x24\x96\xb5\x48\xe0\xf0\x0b\x13\x37\x0b\xa6\x24\x5c\xba\xc8\xe8\xaf\x9a\xfd\x0a\x22\xe7\xbc\x31\xc9\x31\x9c\xed\xcb\xcc\xc1\x2d\xe5\x0b\x4e\xc2\xdd\x87\x4d\x71\xd5\x2d\xe4\x9a\xca\x1d\x58\x12\x71\x56\x4d\xd1\x57\x7f\xf0\xd1\x1f\x16\x6f\xd5\xde\xad\x76\x68\x70\x4b\x16\xa6\xb6\x10\xfb\xac\x70\x5d\x14\xca\xcc\xc2\xf8\x5e\xfd\xe7\x85\x01\xb9\x48\x09\xa0\x4a\x16\x55\xe7\x90\xbe\x6b\x9b\xb6\x58\xcf\x73\x9c\x8b\x8d\x20\x29\x0a\xd4\xf2\x4d\x38\xb7\x4d\x46\x29\x86\xa5\x17\xa1\x9e\x5d\xda\x62\x12\x20\x46\xdb\x50\x23\x59\x42\x82\xb3\x64\x63\x96\xb1\x56\xc5\x6b\x66\xca\xbb\xba\xd5\x40\x4a\x2e\x44\x99\x97\xf2\xae\x95\x28\xb0\x34\x81\x0e\x5b\x6c\x73\x6c\x31\x5b\x59\xc4\xd3\x1e\x20\x01\x2a\x01\x89\xff\x85\x03\xad\x2a\x38\x58\xa3\xf7\xba\xcc\xa7\xd2\xee\xb4\x4a\x73\x2a\x7d\xa1\x79\xc9\xf9\x8e\x1e\x38\x3d\x99\xc5\x18\x12\x47\x77\x89\xc2\x29\xcd\xdf\x78\x0f\xa0\x4d\x12\x23\x83\x5e\x60\x90\x8f\xed\xda\x79\xcf\x49\x86\x05\x61\x6a\xc4\x6e\xf5\x28\xcc\x17\x45\x24\x86\x8b\xc3\x71\x68\xf4\x50\xb3\x76\x8a\xb0\xfd\x0a\x16\xbd\x29\x10\x4e\x8e\xcd\x4b\xa0\x9a\xbe\x60\x92\xfd\x77\xe6\x1d\x83\x79\x60\x31\x7f\xf4\x54\xe9\xb4\x50\xe3\xb5\x00\x19\xcd\x29\x40\x0e\xc4\x44\xda\x0b\x89\x2a\x8b\x29\xe1\xc5\xef\x9c\x38\xfc\x65\xf8\xcc\xf3\xaf\x3a\x86\xed\x0c\x05\xcc\x19\xe8\xe4\x88\x05\x7d\xac\x80\xeb\x34\xca\xfa\x96\xaa\x04\xec\x33\x8d\xbd\xe3\x0b\xfe\x69\x76\x88\x0b\x3a\xa3\x2c\x28\x9a\x64\xa7\x97\xe2\x0c\xcc\xbb\xe6\x0c\xf2\xa9\xbf\xd3\xee\x6d\x96\xc1\x31\x8c\xf8\x7f\xfe\xfb\x6f\xc7\xb4\xc9\xfb\x21\xc7\x76\x05\x0e\x61\x27\x37\xdb\x96\x70\xe7\x03\x14\x91\x06\x74\x8a\x40\xa7\x95\xa5\xcc\x89\xe2\x57\x7b\xb9\x69\xa2\xe1\x6a\x6e\xdc\xbd\x65\x72\x07\xdf\x88\xc8\x57\x9c\x0d\x73\xc5\xbc\xed\x5a\x52\x09\xd9\x01\x7a\x24\xe6\x24\x7b\x03\x41\x58\x90\x7c\xc9\x4c\x33\x62\xc5\x27\xd2\xe0\xa1\x18\x78\x57\xf3\x43\xb1\x3a\x2d\x17\x66\x15\xef\x2f\x22\x25\x0a\x77\x78\x10\x8d\xec\xca\x67\x98\x28\x52\xdd\x7e\xe5\xa6\xad\x70\xee\x00\xe7\x70\x97\xa8\xcd\x39\x96\x2f\x17\x9a\x53\x5b\xf6\xc9\x58\xd3\x43\xe1\x61\x5d\x90\x8e\x19\xa4\xc9\xf6\xd4\x1b\x92\x4b\x22\x0c\xa7\xf3\x70\x58\x96\x12\x42\x14\x47\x88\xd1\x5c\xe3\x6b\x24\x29\xa6\x1b\xe5\x13\xe8\xf7\xeb\x31\x26\x4b\xce\x06\x3c\x23\x62\x1c\xe7\x6a\xe9\x58\xac\x8a\xf1\xd7\x1f\x9d\xe7\x6a\xb1\xbe\x7d\x99\xe0\xe5\xb2\x37\xab\x70\x3d\xf5\xfb\x0d\xcd\xae\x97\x98\x83\x10\x9f\xb2\xd4\xdc\x80\x9a\x49\x2a\xa8\x99\x36\xe6\xb4\x64\x22\x81\x1b\x98\x29\x80\xd4\x2b\x34\x29\x7b\x45\x1b\x6c\x6f\x18\x39\x9a\xe4\x85\x49\xc9\x57\x4b\x88\x8f\x47\xec\xa3\x29\x37\x02\x5a\x9e\x19\x40\x04\x09\x3f\xe4\x73\xc6\x25\x29\x65\xa0\xd5\x54\x40\xb0\x19\xa4\x76\x18\xf5\xc2\x7a\xf1\xd1\xee\xb2\xfa\x9b\xe3\x9f\x2e\x6f\xf8\xf2\x94\xeb\x29\x70\x27\x71\x30\xa2\x19\xd5\xb4\x33\xae\x3d\x69\x2f\x57\x85\xb7\x88\xe9\x02\x1c\x2c\x95\x2c\x7a\xc8\x4f\xaf\x42\x10\x09\x79\x22\x60\x4e\x87\x31\x86\x75\x2e\xca\x76\xbd\x06\x76\xb2\xee\x00\x15\xe9\x9f\xc0\x16\x50\x5c\x1d\x41\x39\x49\xae\x8e\x16\xcb\xe9\x3f\x3b\x67\xaa\xd5\x05\xa6\x6c\x20\x9e\xf7\xc3\x7a\x1f\x0b\xa2\x10\xf9\xac\x88\xad\x08\x7a\xef\x72\x09\x97\xd3\x0f\x50\x7d\x3a\x54\xb3\xec\xf8\xe2\xb5\x99\xfb\x2e\x83\xdc\x25\x4b\xc6\xee\xca\xb7\xc9\x83\x73\xcc\x62\x9b\x11\x6b\x95\x0c\x2d\x6c\xc1\xec\x8c\xd1\xcd\xe7\x0a\xd8\xbc\xce\x00\x28\xdd\xb4\x69\x10\xdd\xe1\x22\x73\x0a\xa3\x56\x59\x20\xbc\x82\x0b\x2d\xb9\xe7\x4c\xd1\x44\x13\x87\x1d\x83\x44\x53\x88\x8c\xb3\x40\x85\x10\xd9\xde\x84\x85\x47\xa5\xa4\x6c\x36\xb6\x2b\xe9\x92\x3b\xdb\x5d\x0c\x65\x9a\xba\x34\x4d\x99\x1f\xbf\x73\x0d\xad\x36\xaa\x1b\xb2\x06\x9c\x32\x97\x56\x0a\x1a\x07\xe3\x6e\x32\x16\x60\xce\x65\xa3\x8e\x69\x6c\x96\x82\x9a\xc2\xd3\x30\xd1\x4d\xec\xee\x20\xd3\x2d\xe3\x38\x14\x57\x88\xb4\xa9\xa2\x26\x01\x0c\x22\xf5\x55\x43\x2e\xac\x6c\xcc\x81\x1d\x32\x2f\xa2\xd9\xb2\x57\x3e\xd3\xbf\x92\x4e\x8b\x5d\x77\x36\x1d\x01\x27\xc9\x04\x47\x8f\x5e\x0b\xf3\xb6\x08\x2e\x5c\xd9\x00\x2d\x57\x42\x5d\x34\x43\x5c\x7a\xa0\x11\x48\x37\xa1\xb7\xd0\x20\xf9\xd8\x61\x17\x9d\x9b\x55\xb3\x10\x69\x06\xba\xc9\x8c\xde\xe4\x36\xc4\x24\x4b\xf8\x22\x6d\xb8\xcf\xaa\x29\x84\xbb\x44\xea\x34\x65\x30\xee\xf5\x2a\xab\x30\xbd\x8d\x2f\xb3\xa5\x7c\xa4\x3d\xe0\x4a\x6d\xc0\x25\x3f\x25\x7c\x02\x26\x55\x6b\x7e\x70\x39\x36\x41\xaa\x47\xf5\x3c\x6f\x9a\xf9\x53\x3d\x91\x54\x66\x89\x56\x66\x9a\x7b\x30\x39\x27\x2f\xbb\x6f\x06\xa3\x60\xbd\x75\xb0\x7d\xb4\x76\xed\xe7\x2f\x81\x60\x7c\xe1\x24\x01\xf3\xae\xe1\x5f\x15\x2b\x9b\x49\xf6\x3b\x36\x4e\x6a\xc5\x47\x4c\xe1\x99\xdb\x5c\x2b\x5c\xf2\x67\x46\x84\x9c\xd3\xac\x54\x2f\x71\xe7\xf0\x70\x4b\xd1\xf6\x3f\x26\x18\x7a\x03\xde\xc9\xb3\x23\x83\x50\xa2\xe9\x43\x66\x38\x2a\xac\xa2\x51\x82\xa5\xa4\xd3\x45\x00\x2c\xe2\x23\x6d\x21\x7d\xab\x6c\x46\x08\x4a\x94\xd5\x31\x1a\x33\xbe\xfd\x64\xd6\xef\x9e\x55\xf8\x50\x3e\x7e\x34\x0e\x11\xdc\xf4\x7d\xb2\x8c\x22\xe3\x6e\x6a\x8b\x26\xd3\x88\x44\x6b\x20\x04\xb6\xcb\x84\x5f\x09\xfe\xd3\x6c\x46\x28\x84\x49\x3b\x6c\xab\xc8\x78\xc0\x8f\x10\x0c\x47\x95\x52\x29\x61\xf3\xb5\xe2\xe4\xec\xc2\x9a\x38\x3d\x58\x08\x60\x2a\x14\x1f\xf7\x90\xdc\x09\x64\xab\x0d\x5d\x9c\x93\x84\xec\x25\xe2\x7a\x0b\x22\xa9\x86\x33\x04\xe4\xb1\x92\x34\x8a\x32\x03\xeb\x8d\x0b\x5b\x04\x82\x37\x40\xf5\xd4\x0f\xfd\x27\x33\x50\x1b\x0b\x5e\xb7\x8b\x60\x18\x84\x55\x6e\xab\xbb\xd4\x61\xfe\x99\x16\x2c\xc9\x15\xdd\x94\xe8\xaa\xe8\xd4\xcb\x2b\x87\x48\x6a\x6f\x1c\x32\xbd\x34\xae\x4f\xa4\x4d\x78\xc7\xda\x03\xb0\x15\x07\x5a\xe6\xd3\xed\xe8\xc2\x3a\x50\x15\x47\x33\xa2\x4c\xf5\xff\x98\x3e\xd1\x38\xc7\xc9\xbb\xa2\x89\xbd\x25\x7c\xec\x69\xf5\xeb\x0f\xf9\x66\xa7\xf6\x8e\x28\xe9\xae\x84\x25\x18\x45\xbb\x39\x07\xb8\x05\x87\x71\x2c\x8d\xe0\xfa\xc5\xcb\x2d\x3b\x83\x24\xd8\x91\x59\xa8\x80\xdf\x90\x40\x65\xe6\x18\xdb\x2f\x3c\x2c\x40\x09\x10\x0b\x97\x40\x04\xcd\x1a\xbd\x3d\xd7\xab\x92\xf6\x97\x2e\x7a\x6d\x4e\xe3\xd5\x51\x15\xd4\xdd\xc9\x83\x9b\xc9\x83\x0e\x64\xf3\x00\x2f\xff\xa6\x63\x70\x98\xf7\xcf\x01\x08\x87\x4b\x57\xe2\xfe\x44\xc4\x77\x44\x26\x07\x21\x29\x2e\x6d\xc5\x6b\xc9\x8b\x47\x0e\xe5\xa8\xc0\x0c\x3a\xdc\x2d\x3a\x8c\x93\x7c\x6b\xdd\x40\x2f\x77\xc1\xae\xa7\x97\xbd\xd0\x07\x00\x7e\x62\xc8\x8b\xce\x6d\x05\x11\x38\xbc\x41\x2c\xdd\x92\xef\x61\x4d\x94\xa2\x1d\x5e\xab\xf8\xc4\xa5\xe5\x7c\x89\xed\xb5\x49\x70\xad\x37\xf7\x25\x49\x6d\xd3\xb1\xec\x43\x47\x79\x61\x2f\x8e\xa5\xc6\xe0\x83\x2e\x58\xb8\xdd\x2d\x5a\x03\xad\xe3\xb6\x6c\x9f\x87\xac\xae\xec\xdb\xee\x69\xfc\x2e\xc7\x6f\x9c\x09\x32\xa5\x9f\xb7\x12\xc5\x6f\xe0\x53\xab\x5e\xea\x65\xae\x14\x92\x03\xf7\x0c\x14\x9e\x0b\x02\x1a\xed\x4a\xdb\x62\x53\x23\x56\x64\x46\xda\xb4\xc8\x47\xb2\x40\x5c\x94\x7e\xda\x16\x04\x72\xff\x45\xef\xcc\xbe\xce\x95\xca\xe4\xe9\xc9\xc9\x8c\xaa\x79\x3e\x39\x8e\x78\x6a\xe2\xf0\xb9\x98\x99\x3f\x4e\xa8\x94\x39\x91\x27\x7f\xfc\xc3\x1f\x8a\x2d\x9e\xe0\xe8\x71\x66\x60\x75\x96\xfd\x4e\xe5\x2d\x27\x58\xee\x16\xd9\xe3\x52\xd8\x5e\x38\x95\x39\xe8\xc6\x25\x8f\xea\x6f\xa4\xc2\x69\x16\x86\x82\x9a\xb2\x71\x52\xe1\xa2\x58\x05\xe4\x25\xea\x69\xa2\x39\xce\x32\xc2\x9a\xcd\x0e\x26\xd1\x74\x07\xd6\xe3\x52\x55\xed\x08\xc9\xe7\x2c\xc1\xac\x0c\xbf\x00\x95\x97\x04\x89\x08\x53\x16\x1a\xa0\x28\x25\x0d\xd4\x68\x20\x80\x0c\xff\xdf\x2c\x15\x11\xe6\x48\x65\x51\x52\xcd\x0d\xc7\x96\x37\x75\x45\x2f\x71\xb0\x74\xd5\x92\xb2\xc5\xda\x11\xb7\x6a\xab\x92\x14\xef\x96\x4b\x8b\x6f\x5e\xd2\x46\x70\x36\x26\x9f\x35\x93\x93\xdb\x02\x76\x3d\x48\x22\x51\xff\xa7\x3b\x24\x17\x4c\xe1\xcf\xa7\xe8\x92\x32\x10\x60\xbf\xe7\xb9\x90\xe8\x1c\x2f\x8e\xf8\xf4\x28\xe5\x4c\xcd\xd1\x25\xfc\xaf\xfd\xe9\x99\x90\x47\xf4\x33\xc1\xc2\xf2\x07\x5b\x92\xce\xd7\x37\xd7\x24\x24\x72\x26\x11\x79\xd2\x27\xf4\x0f\xff\x89\x52\xd3\xf2\x29\xfa\xf6\xe4\x0f\xff\x89\x7e\x07\xff\xff\xff\x47\xbf\x6b\xd0\xf4\x37\x83\xfc\x82\xca\xc5\xb7\x65\x77\x6e\xaf\xb2\x52\x5b\x54\x73\x3f\x13\xbc\xd8\xa9\xda\x96\x1f\x69\xf4\xc8\xa7\xd3\xb1\x26\x0c\x93\xc8\x37\xc6\x62\x09\x2e\x7a\x4b\xfc\x54\x6a\x6b\x4f\x9b\x4a\x76\x45\x0d\x19\xdb\xa9\x41\x7c\x70\xec\x5a\xe6\x45\xe5\x5d\x08\x22\x2a\x55\x33\xa6\x12\xbe\x22\xb1\xe6\xaa\x9b\x9c\x0e\x67\xdd\x73\xc9\xdf\xce\x82\x13\x22\xa4\x84\xf5\xd4\x7d\xe0\x5f\x18\xc5\x6a\x02\x7d\xec\x42\xd6\x1e\x87\xa5\xf0\xda\x2f\x26\x66\x12\xa6\xf6\x56\xf1\x92\x72\xa9\xf3\xf5\xa1\x92\x77\x5c\xec\xa4\x6f\x3d\x92\xc6\x54\x86\x35\xf5\x92\x5c\x0d\xdf\xb0\xb2\x3f\x64\x88\x73\xe1\x71\x8c\x8d\x5d\xc4\x56\x55\x5c\x6f\xc5\xa4\xc2\x04\x97\xb5\x3b\xf4\x7a\xea\xe7\xfe\x93\x75\xc3\x84\x48\x33\xf7\x76\x51\x2f\x0e\x46\xab\x45\x24\xcd\x12\x6b\x46\x5c\x03\x76\xb8\x6e\x43\xef\x3c\xbe\x05\x34\x0e\x61\x8f\x90\xbf\xc1\x9c\x64\x6b\x01\x04\xea\xf7\x33\x17\x11\x39\xe3\xbb\x85\xbd\x26\x94\x2d\xc5\xcb\xb7\x2f\x45\xe4\x57\xef\xc2\x16\x9d\x72\x78\xc0\x3c\x2e\x94\x05\xe3\x16\xb0\x55\x28\x02\x20\xd2\xf2\x6c\x00\xd0\x6e\x1f\x58\x97\x4b\xb5\x11\x76\xe0\xda\xc6\x70\x5c\x30\x3c\x57\x5a\xa3\x52\x51\x43\x60\xcd\x0b\x57\xc4\xae\x41\x50\xd1\xce\xe3\x08\xaa\xc4\x14\x91\x4a\x95\x6a\xec\xd8\x94\x4a\x11\x5b\x62\x95\x9a\x82\x4d\x3d\x24\x30\x04\x65\xaa\xb9\x6e\x4f\x12\x71\x34\xc5\x11\x65\xb3\x5e\x00\x53\x09\x90\x11\xe1\x75\x50\x47\xa4\xf7\x58\x3e\xee\x37\xd0\x70\xe7\x02\x96\x34\x2e\x8a\xa8\x59\x60\x19\xe3\xd8\xa0\x4b\x18\x7d\x0a\xcb\xc7\x26\x64\xa5\x25\x58\xb7\x15\xa3\xf3\x4b\xe1\xc0\xe0\x56\x8d\xcf\xa5\xa0\x93\x50\x9f\x82\x9a\x0d\xae\xa4\xb2\x05\x79\x74\x19\x7f\xd8\xa3\xb0\x54\xd1\x4d\x57\x8c\x5f\xce\xb9\x50\xe3\x2d\x71\x61\xab\x69\xf4\x8c\x1c\x25\x00\xe8\xc2\x9f\x88\x78\xa2\xe4\xb9\x0c\xaf\xba\x09\x2d\x1a\xa3\x59\x10\x55\x07\xf8\x9b\x69\xc6\x21\x85\x66\x8a\x52\xcc\x16\x86\x51\x6a\xe6\x82\xe5\xa3\xf4\x85\x5c\x91\x4c\x71\x92\xf4\x90\x20\xb9\x34\x05\x8e\x25\x49\xa6\x47\xae\x14\x46\x8c\x12\x3e\xa3\x11\x4e\xd0\x24\xe1\xd1\xa3\x34\x19\x6e\x6c\x66\x98\x54\x26\x78\x44\xa4\x0c\x24\xab\x22\x9b\xdd\xe6\x18\x42\x15\x57\x45\x44\x4a\x19\x95\x8a\x46\x4e\x64\x2a\x40\x29\x4c\x2d\xf1\x08\x83\x49\x18\x32\x36\x61\xb8\x5a\xd2\x23\x06\x9c\x33\x67\xb6\x68\x12\x5c\xd7\x16\x73\xcf\x05\x89\x37\x1d\xa0\x3d\x40\x08\x3a\x0a\x19\xab\xf2\x81\x5c\x73\xa4\xce\xec\x67\x70\x8c\x57\x91\xc0\x6d\xf9\x44\x79\x82\xf4\x27\xad\x04\x6b\x04\x31\xe5\x3e\x04\xbe\x24\xb9\xf8\xc8\xf0\x03\x43\x34\x83\x21\x37\xe0\x98\xad\xa3\x69\xbd\x8a\x20\xf2\x40\x9d\xae\xaa\xd7\x9c\xb2\x28\xc9\x63\x5f\xa9\x51\x8b\x00\x4f\x9a\x48\xdc\xf2\xe8\xb5\xd7\x82\x42\x0f\x61\x89\x9e\x49\x92\xe8\xff\x9a\x08\xf8\x23\x5f\x38\x41\xb3\x64\x53\xdc\x02\x3a\x71\x5c\xba\x89\xa2\x0e\x0e\x9d\xf2\x06\xab\xb9\xc9\xf9\x4f\xb9\x32\x45\x32\x0d\x3a\xa5\xb3\x6f\x19\x38\xc3\x49\xc2\x27\x70\xd2\x01\xb8\xd2\xe5\xb9\x06\x69\x75\x79\x14\x11\x12\x93\x18\x7d\x1d\x1c\x5c\x8f\x47\xf1\x4d\x3d\x8c\x62\x69\x45\x0e\x00\xb4\xb2\x6a\x58\x6b\x84\xae\x2c\xd7\x79\x3b\x46\x37\x15\x60\x96\xb0\x7e\x3b\xae\xc2\x74\xf5\x96\xb6\xf0\x6d\x80\x2e\x2b\x93\x78\xb9\x1d\xda\x10\xe8\xb2\xd4\xe7\x1e\x80\x2e\x2b\xf3\x6c\x88\xdd\xe7\xb3\x17\xcd\x39\xd6\x93\xba\xe0\xed\x13\xc1\x0c\x40\x98\xb9\x3b\x4b\x24\xe8\x0e\xe4\xa2\x8e\x10\x0f\x0b\xc4\xb3\x52\x0d\xf1\x6d\x41\x3c\x2b\x83\x39\x64\x10\xcf\xca\x50\x0f\x17\xc4\xb3\x66\xa0\x2d\x40\x3c\x8d\x73\x7f\xac\x89\xba\x1d\x53\x80\xc4\x96\x49\x3e\xbd\x83\x54\xef\x95\x63\x3c\x33\x81\x03\xe6\x1a\x73\x77\xb4\xc5\xb4\x86\xd1\xda\x1c\xc8\xa6\x70\xa8\x8a\x13\x62\x53\xda\xf3\xde\x37\x03\xfe\xb0\xa9\xd9\xbd\x17\x5a\xbb\xc1\x0e\x19\xe1\xcc\xe6\x94\x37\x95\x9a\x39\x9c\xec\xd9\xed\xf0\x51\x01\x83\xb0\xc4\xf2\x5b\x21\x88\x5d\x56\xaa\x36\xcc\xf9\xb3\xad\x9c\x04\x64\x68\x88\xb2\x91\x04\xa1\xd3\xb1\x55\xda\x9a\x56\x8e\x32\x45\x66\x55\x9d\xb6\x38\x34\x94\xa9\x3f\xfd\x71\x2d\x27\x32\x10\x8b\x4e\x3d\x0c\x6a\x27\x78\x67\x87\x7d\x46\x62\x14\xcd\xb5\x56\x24\xb5\xfa\xa2\xa7\x63\x6e\x56\x89\x52\x4c\x9d\x22\x95\x4b\xe3\x5a\xa2\x72\xc4\x4a\x98\xa4\xc7\xe8\x23\x14\x84\xc5\x69\xa6\xf5\x2f\x3f\x3f\xaa\x29\x69\x94\x7f\xfb\xed\x9f\x08\xfa\x16\xa5\x04\xb3\x92\x0e\x0b\x6a\x93\xbe\xfa\x00\xc3\x4f\xcd\xc9\x88\xd5\x6e\x05\x1a\x7c\x36\x35\xa6\x5c\xbc\xdf\x90\x4d\xb9\xd3\x89\xa1\xd0\x21\x8e\xe6\x48\xe6\x13\x53\xa9\x37\xb0\x61\x38\x41\xfa\x82\xcf\xc0\x51\x0d\x37\xb2\x1b\xf4\xaa\x53\xf8\xb2\x31\x00\xd6\xdd\xd8\xf6\x36\xee\xc3\x3d\x72\x24\x49\x09\xdb\xa9\xc6\x69\x66\x38\x5f\x78\xf0\xa5\xc1\x7d\xe9\x19\x1f\x82\xd6\xcf\xb0\xb5\xec\x6b\x59\x1a\xc2\x79\xc1\x4b\x96\x27\x58\xd8\xa3\x3f\x62\x5a\xd1\x10\xe4\x89\xf2\x5c\x26\x0b\x14\x73\x46\x7a\x40\x09\x79\x34\x37\x8e\x55\xad\xb3\x60\x5b\xb0\xe2\x89\xca\x5c\x2b\xb4\xd0\x96\xab\x8f\x21\x15\x36\x98\x54\x73\x0a\xfd\x68\xf5\x9b\xc0\x57\x61\x96\x1c\x6a\xa7\x45\x85\xb0\xb1\x15\x9e\xdf\x12\x36\xb6\x44\x55\x1d\x6c\xac\x87\x8d\x5d\x5e\x97\x43\x84\x8d\xad\xec\x79\x3b\xd8\xd8\xba\x2d\xdf\x02\x36\xb6\xd4\xcc\x17\x03\x1b\x5b\x59\xd1\x2f\x06\x36\xb6\x32\xaf\x0e\x36\xf6\xcb\x83\x8d\xdd\x11\x18\xb5\x9e\x17\x1b\x7c\x25\x45\xd9\x62\x63\x22\xfb\x4a\xa2\xe1\xb5\x26\xb0\xe8\xb1\x1c\xd4\xe6\xaf\xab\xdd\xc1\x58\xeb\x99\xd0\x66\x60\xac\xb5\xaa\x7a\x33\xab\xdb\x15\xe0\x09\x14\x83\x57\x06\x63\x2d\x4d\xa0\x8b\xaf\xdc\x3c\xbe\xb2\x96\xf8\x6c\xdf\x7a\x78\x2e\xe8\xb2\x7a\x21\xb7\x84\x63\x2d\xed\x4f\xab\x48\x4c\x10\xdd\xf7\x40\x89\x2f\x2b\xcd\xdf\x97\x0e\xf9\x5a\x59\x3e\x5c\x45\x69\x81\xa1\xb5\x84\xe7\xd0\xe2\x8c\x12\x1e\xfa\xff\x3b\xca\xdd\x22\x32\xb8\xb2\xbc\xde\xaf\x62\x68\xb1\x05\xa9\xb6\xa6\x50\xa7\x95\xee\x27\x51\xd6\x25\x4f\x6e\xe8\x62\x76\x83\xb8\xcb\x48\xd4\x60\x63\xa6\x29\xdd\x57\xb3\xeb\x2e\x32\x8f\x85\x05\x0a\xf9\x52\x5e\xa8\xbe\x9e\xcc\x70\x8c\x8c\x5f\x49\x87\x05\xa0\x0e\xf3\xe5\x8c\x4a\x25\x1a\x63\x9b\x96\x46\xb8\x8b\xab\x34\xcb\x5b\x07\xc4\x04\xab\x3a\xdb\xee\xb3\x94\xa4\x5c\xac\x0b\xac\xaa\xfd\xd2\x96\xba\xd9\xe6\x53\x92\xcd\x49\xaa\x25\x99\xf1\xa6\x8d\xb4\xdd\x6f\x9f\x34\x6c\x73\xd7\x4c\xa0\x63\x89\x08\x02\x47\xa8\x7e\x37\x36\x88\x94\xad\xb7\x7b\xd7\x6d\xb6\x98\x99\x1b\x3a\x84\x1c\x98\xf2\x6a\x83\x9b\x7d\xa9\xe4\xee\x06\xfa\xae\x8d\xe9\xf0\x21\x35\xeb\xa3\x36\x56\xc4\x6b\xac\xc2\x9d\x2a\xbe\xb2\x85\xa0\x37\x70\xe5\x97\xbd\xf3\x9a\x13\x86\x55\x80\x37\x0f\xf0\x68\x40\x4d\x5d\x5e\x1e\x88\xcc\x91\x44\x1c\x85\x9a\x41\x69\x30\xcb\xeb\x55\xa2\x12\xa7\x51\xee\x40\x24\xb9\x68\x8c\x32\x6d\x63\xd0\x8e\x54\x8e\x13\xd0\x24\xc2\xea\x95\xd5\x4d\x9d\x2c\x6a\xd2\x1e\xdb\x79\x4c\x28\x53\x7f\xfe\x8f\x8d\x76\x53\xab\x56\x76\xdd\xa0\xe2\x16\x8e\x22\x22\x8d\x8d\xdd\x46\x21\xe3\x09\x7f\x82\x62\x5b\xbb\xec\xaa\x3e\xca\x7a\xde\x9a\xc1\x7b\x28\xe2\xb8\x20\x75\x23\x2e\xcc\x05\xcf\x67\x73\x67\x43\xd2\x67\x46\x4f\xad\x6e\x2f\x7f\x5c\xb2\x91\x6f\xbc\x97\xdf\xe5\x34\xd9\xce\x42\x77\x57\x2a\x43\xf6\x69\x78\x8f\xe4\xdc\x9f\xd6\x09\x34\x5b\xbb\xb1\xcb\x83\x6e\xdf\xa7\xfd\xd6\xfb\x6b\xa0\x9b\x9e\x83\xdf\x9c\xf2\x24\x01\x4f\x83\x24\xe9\x13\x11\xf5\xdd\xc3\x84\xef\xe9\x66\xc8\x79\x7e\x00\xf0\x75\x91\x18\xd1\x4a\xfe\xba\x31\xa2\xa1\x44\x6e\xf4\xd5\xa0\x05\x13\xaa\xc6\x19\x61\x75\x36\xb6\x9f\x96\x2b\xc0\xbc\xb3\x80\x41\x17\x3d\xb6\xb7\xa0\x41\xb7\x24\xaf\x1c\x38\xb8\x66\x1e\x87\x1a\x3c\x58\x61\x76\x3e\x96\xaf\xb8\x66\x5c\xe0\x90\x51\x7c\xfa\x7a\x89\x47\xac\x5f\xca\xa7\x70\x95\xb2\x27\x8b\x22\x20\xdb\xe8\x10\x21\x33\x83\x3a\x1b\xd6\xb0\x02\x6e\x34\xfd\x17\x68\x3a\x06\xbc\xd6\x84\x14\xba\xb0\x41\x88\x26\x27\xf1\x11\x8e\x16\x51\x42\xa3\x40\x67\x9e\x09\x9c\xcd\xeb\x38\x9e\xdb\xf9\x0e\x75\xe7\xad\x50\x77\x9a\x0a\x52\x6d\x12\xb7\xed\xe8\x8a\xe1\x94\x74\x68\x40\x75\x68\x40\x3d\x8f\x77\xc1\x8a\xd2\x5a\x6f\x08\xa3\xb0\x7c\xee\x3a\x48\xa0\x37\x80\x04\xda\xe6\xf0\x15\x78\x3f\xa5\x63\xd7\xc1\x14\x7d\x68\x05\x53\xe4\x2f\xc1\x83\x42\x9e\x69\x3e\x8f\x6f\x8c\x68\xb2\x3c\xb0\xb7\x84\x25\xaa\x11\x17\x36\x91\x9b\x56\xe1\x12\xad\xa2\x8b\x56\xeb\xf2\xb6\x28\x41\x9b\xad\xcc\x46\x00\x40\xb5\x77\xd7\x81\xc0\x01\x35\x6f\xc3\x81\x9c\x9b\x7d\x66\xb5\x6c\x56\x3b\x34\xcc\x6c\xd9\x44\xc1\xda\x2c\xc9\xc5\xd3\xc3\xfb\x4a\x74\x29\x8a\xac\x6d\x97\xec\xd2\x77\x3e\x68\x22\xd0\x9c\x27\xb1\x03\xa1\xf0\xab\xe5\x3b\xf0\x99\x00\x7e\x81\xdc\x66\x40\xb1\x73\xd0\xb6\x8a\x82\x60\xab\x52\x5a\xfc\x26\xc2\x70\xf7\xc0\x68\xf6\x61\x45\xf0\x9c\x64\x1b\xfb\xc1\x5a\x59\x44\x96\xcd\xdf\x2b\xc6\x58\x5a\x21\xb0\x9a\xd7\x0f\x73\xad\xdd\x77\xcd\xe0\x56\x89\x1e\x81\x71\x50\xd4\x95\xfa\x34\x74\x06\x4f\x9f\xa8\x33\x44\xe0\xb0\xc7\x95\x5e\x3a\x37\xbb\x56\x9e\xba\x2a\xb1\x6c\x11\x0c\xb6\x54\xb9\x6d\x77\x70\xa0\x14\x7f\x1e\x67\x58\xe0\x24\x21\x09\x95\xe9\x8b\x05\x03\x9f\x95\xdd\xb5\xfa\xac\x0a\x6e\x4c\x44\x2c\x4f\x27\x86\x14\xdd\x40\x6c\xb1\x3f\xc5\x91\xc8\x59\x08\x6d\xe6\x37\xc6\x17\x13\xcc\xe1\x5e\x00\xab\x52\x34\x87\xaa\xad\x53\x4c\x05\x23\xb2\xb1\x46\x26\x89\x72\x41\xd5\x62\x6c\x4b\x8e\xb6\x3f\x70\x77\xf6\xcb\x33\xfb\xe1\x6a\x0f\xb7\xcb\xea\x77\xfd\xf9\x12\xa7\x19\x11\x50\x26\xc8\x15\xbc\x09\xca\xaa\x5a\xd4\x06\xe2\x6b\x0d\x41\xf8\xf3\xd2\xb5\xdd\x14\x38\x8c\x9f\xc7\x41\x46\xd5\x38\xaa\x12\xc7\xba\xc3\x5a\x87\x3b\xb5\x6a\x92\x2f\x8c\xbc\xd4\xe0\x45\x7e\x81\x2a\x23\x36\x6d\xc2\x34\xad\x07\x1c\xb8\x82\xc1\x5e\x59\x6c\x4c\x90\xf2\x6e\x95\xaa\x86\x71\x5a\xac\x9f\xba\xe0\xa3\x15\x83\xed\x07\x5f\xb5\x18\x71\xd0\xc9\x9e\x86\xad\x0f\xba\x10\x79\xa6\xe8\x64\x19\xda\x46\xed\xaf\x84\x68\x3f\x81\x34\x6b\xe7\x66\x28\x75\x6b\xea\x8a\x96\x38\xb1\x9d\x9d\x96\xff\x2d\x8e\x98\x43\x08\x32\x08\x4b\x61\x1e\xdf\x75\x4a\x95\x72\x89\x02\xc6\x00\xad\xa9\xb3\x6c\x9b\xfd\xca\x85\x7b\x60\xa8\xf4\x6a\x4c\x44\xc7\x23\xd6\x97\xe8\x99\x20\x46\x2c\x84\x44\x4d\x0d\x57\x6f\xd5\x86\xda\x4f\x13\xa2\x7b\xf2\xb1\x29\x5a\x78\xa0\x4a\xfa\xf2\x63\xa6\x8f\x29\x4e\x24\xe9\xe9\x86\xa1\x6a\xa9\xe2\x10\xfc\x89\xd1\xb3\xc0\x59\x46\xc4\x88\xd9\x2c\x0e\x70\xb8\x70\x9e\x98\xf6\x9b\x42\x5c\xed\x1a\x90\x71\x84\xa3\xf9\x2b\xed\x11\x86\x64\x9c\x68\x4e\x62\x97\x2f\x5c\xde\x1e\x37\x6f\x63\xb0\xde\x60\xb3\x86\x53\x57\x3e\xab\x67\x3b\x49\x22\xcd\x51\x7c\x99\xe9\x8c\x08\x3d\x6a\x4d\xc3\x4f\x84\x21\x3a\x75\xe3\xb0\xb1\x3b\xe8\x19\x3c\x53\x9a\xf4\x9f\x30\x4d\x4c\x02\xbe\xeb\xda\x09\x81\xc6\xfc\x3e\x62\xc6\xdd\xcd\xa2\x52\x86\x2a\x65\x54\xce\x35\xa7\xce\xc1\x27\x09\x6a\x46\x53\xe2\x0c\x7b\xda\xe4\x34\x0f\xf4\xeb\xab\x39\xe8\x13\x15\x9c\xa5\x90\x24\x63\x71\x99\xdc\xf2\x49\xa2\xfc\xf1\xa8\x4d\x71\x5c\x2b\x11\xc7\xb1\x2c\x1b\x3f\x8d\x5a\x49\x7f\x2d\x99\x5d\x8e\x4a\x59\x81\x51\x00\x2b\x04\x41\x9c\xae\xb2\xd8\x2a\xf9\xb7\x4b\x6d\x58\x4e\x6d\xa8\x5f\x9b\x43\x4c\x6f\xf0\x87\x78\xd3\x14\x87\xa6\xed\xdf\x87\x64\xbb\xc7\x54\x87\x37\xce\x09\x78\x99\x74\x80\xb7\xcd\xdf\x78\x89\xd4\x8d\x2e\xc1\xe1\x0d\x13\x1c\x5a\x5b\x6a\xcb\xb1\xd9\xcd\xc7\x76\xa3\xe4\x80\x35\x60\x4e\x75\xbd\x5c\x12\x25\x68\x24\xf7\xc1\x1f\x64\x86\x5b\x46\xb5\x81\x16\x98\xad\x91\x9a\xf4\x0b\xde\x09\x09\x71\x62\xbe\xce\xdf\x44\x10\xfc\x18\xf3\xe7\x25\x5b\x9d\x0c\xd1\x34\x2e\xb9\x16\x7b\x04\x89\xa8\x24\xa5\x48\x16\x2a\x11\x23\xd2\x1a\x3b\xf1\x88\xcd\x29\x11\x58\x44\x73\xc8\x6e\x2c\x36\xc6\x64\xc9\x1a\x40\x23\x13\xcb\x10\x7a\x9b\x36\xd8\xf4\x16\xeb\x5e\xb5\x30\x79\x7c\x3a\xbb\xe7\x7a\x24\xa9\xf9\xc4\x0b\x33\x56\xca\x08\x4d\x72\xad\xb6\x7f\xd7\x40\x7c\xbf\xd8\x2f\x1a\x8c\xef\x83\x89\x82\x2f\x5a\x06\xe4\x17\xd4\xd0\x05\xe5\xbf\x50\x50\x7e\xcd\x12\x6f\x16\x98\xbf\x95\xc9\xef\xf5\x63\x86\x5d\xcf\xaf\x11\x37\xbc\x2e\x68\x2b\x9f\x8c\x5f\xfc\xe8\xd5\xce\xb9\xed\x09\xfc\xc9\x13\x85\x91\x88\x85\xa6\xb3\x09\x89\x63\xe0\xb4\x8a\xdb\x4a\xd1\x05\xed\x38\xf3\x80\xbe\x7b\xb1\xd4\xc4\x8e\x13\xce\x66\x92\xc6\x06\x6c\x25\xc3\x50\xb1\x35\x34\x5e\x00\xb8\x00\xec\x6f\x92\x10\xe1\xbc\x12\x02\x7d\x2d\x29\xb3\x68\x8a\xfe\xb7\x98\x13\xc9\xbe\x52\xc6\x58\x80\xd9\x02\x3d\x32\xfe\x9c\x90\x78\x06\x3b\x54\x1d\xcc\x11\xa2\xa4\x87\xa8\xf2\x9f\x09\x40\x23\xe0\xb9\x1a\xe9\xb1\x43\xac\x99\xd1\x00\x88\xfd\x36\xa8\x89\xee\x9b\xf9\xe6\x18\xa1\x21\x43\x53\x1c\xa9\x1e\x92\xf9\xa4\x68\x3f\xe6\xa6\xc8\xb5\xd6\xbe\x83\x89\x17\x8d\x74\x31\xe3\x35\x9d\xd7\x9f\x0d\xc7\x1d\x34\xb9\xf6\x13\x8a\x77\x8a\xad\x7b\xc2\xbb\x40\x8c\x5e\xe6\xd2\x06\x61\x20\xce\xfc\xd1\xb7\xf0\x4a\x1e\x23\x1a\xf0\x3e\x0d\xde\x32\xe3\x71\xa3\xad\xb3\x32\x95\x4d\xc7\x52\x04\x42\x5a\x41\xc9\x3a\xaa\xa0\x5d\xb3\xdc\x5a\x6a\x92\x4a\x10\x9c\x5a\xe7\x80\xbe\x6a\x40\xac\x31\x61\x90\x7a\xf4\x54\x18\x09\x73\x93\x2d\xbe\xa0\xec\x51\xef\x6e\x81\x8a\x0d\xf5\xe5\xa1\xe7\xba\x4d\xcb\xf4\x8d\x47\xce\x38\x33\x0e\xc2\x9d\xe4\x4e\x3a\x63\x38\xd9\xd0\xc6\xb1\xb4\x72\xcb\x3e\x3d\x27\x67\x59\x71\x41\x4b\x11\xc6\xd8\x87\x4c\x8f\x1b\xd9\x90\x2a\xf3\x0d\xe5\x3d\x8c\x62\x92\x11\x16\x13\x16\x2d\x80\x44\x18\x20\xe7\x08\x86\x13\x84\xe1\x3b\x9c\x1c\xa3\x73\x93\x5f\xe3\x25\x3c\x7b\xad\xc3\x85\x9e\x62\x46\xa7\x5a\x4f\x00\x23\xac\x1d\xe5\x88\x99\x61\x3a\x1f\x48\x50\xb4\xdf\xaf\x58\xdd\xce\xe8\x1b\xe4\x6a\x47\x54\x62\x56\xfe\x1e\xad\xbe\x70\xa0\xb7\x55\xbb\xa3\x9b\x73\x35\x08\x64\x3e\x39\x82\x7f\x97\x12\xce\x1c\x50\x4f\x81\x22\x43\x12\x02\xe6\x40\xeb\xf1\x82\x8b\xb1\x09\x58\x6e\x1f\x7e\xbb\x35\x79\x1c\x41\x1f\x25\xa5\x26\xa5\x8c\xa6\x79\x1a\x38\xef\x4c\xc5\x82\xc8\xda\x2f\x4d\x26\x46\xa6\xf5\x80\xc8\x81\x97\x23\x7d\xb9\xb2\x05\x9a\xd1\x27\xc2\x46\x2c\xe3\x94\xa9\x63\x74\xc5\x15\x09\x4a\x44\x18\xe8\x28\x9e\x29\x9a\x1a\xb4\x53\x41\xf4\x39\x30\xa0\xd8\x00\x34\x39\xc7\xaa\x87\xe2\x1c\x8e\x2a\x23\x4a\xb3\x0e\x7d\xe3\x2a\xd8\x19\x88\x8f\x16\x23\x66\x6e\xba\x29\xa6\x49\x2e\x88\x95\x59\xb1\xc9\x8b\x29\x86\x5c\x8c\xcc\x22\xa1\x05\x93\x48\xe9\x6c\xae\xf4\x16\x69\x19\xcf\xfa\x1b\xe7\x9a\x1b\xf1\x11\x9b\x10\x84\x51\xc6\x25\x55\xf4\xc9\xfb\x2f\xe9\x14\x61\x29\xc1\x82\x72\x8c\xce\x4b\xf6\x7f\x2a\x41\xf5\x6e\x8a\xab\xa5\x6c\x6c\x6d\xcf\xcd\xf9\x38\x3b\x6f\x64\xa9\x17\xbb\xca\x78\x22\x79\x92\xab\xd0\x05\x5b\xbf\xb7\x85\x69\xdc\x01\xf7\x83\x81\x98\x4f\x47\xcc\xd1\xb5\x3c\x46\x7d\x89\x24\xd7\xbb\x24\xcd\x56\x46\x82\x2a\x22\xa8\x41\x71\x22\xca\x6c\x82\x3f\xa7\xfe\x0c\xa4\x58\x3c\x6a\x11\x2a\xb4\xc0\x1b\x4c\xd1\x92\xb5\x63\x62\x24\x24\x80\xb5\x0a\xb7\x03\x4c\xff\x88\x71\x76\xc4\xc8\x0c\xaf\xdb\x91\x11\x2b\x6d\x09\xfa\x9a\x4e\x0b\x85\xb4\xc9\xe7\x18\xac\xdd\x18\x22\x9f\x9a\x76\xc9\x74\xdc\xb4\x49\xd3\x84\xe3\x35\x6e\xe3\x69\x71\xe8\xd1\xdf\xf9\xc4\x8c\x51\xeb\xfd\x5c\x81\x14\xa8\xd5\xab\x29\x17\x64\x8e\x59\xdc\x73\x9b\x55\x1e\x1b\xdc\x8c\xd6\xd4\xe6\x94\x31\x90\x04\x1d\x88\x30\x31\x58\x4c\x98\x05\x7b\x61\x15\x37\xbb\x15\xc5\x3e\x6c\x74\x57\xf8\xd6\xa0\xf6\x89\x31\x40\x18\x96\xb7\xc8\xec\x11\x97\x34\xcd\x92\x22\xa7\x29\xb0\x8d\x4e\xb5\x88\xe5\x78\x24\x7f\x02\xd3\x95\xd3\xda\xe0\x56\xb7\x3b\xa7\xe9\xac\x66\xe4\x9e\x91\xc2\xad\xe1\x6c\x5e\xa6\x0c\x66\xc0\xc2\xbe\x96\x44\xff\x53\x91\x42\xed\x33\xc2\xfa\x88\x39\x11\xe4\x1b\xe0\x32\xb6\xd9\xc0\x78\xa6\x45\x68\x03\xf3\x6a\xd7\x0f\x45\xc6\xc9\x5d\x3a\x27\xf6\x30\xb8\x57\x6b\x2e\xaa\xef\x28\xc3\xa5\xcc\xdb\x2d\x04\xbf\x24\xdf\x28\xb9\x2a\x70\xfb\x2d\x9a\x6a\x9a\x28\xbc\xae\xcc\xc8\x06\x94\x60\xf6\x99\x20\xdd\x9d\xa5\x66\x57\xf1\x06\x43\x44\xc0\x9c\x24\x19\x8a\xe9\x14\xcc\x52\x0a\xd8\xb7\x07\x16\x33\x58\xf0\xfa\xb0\xa7\x39\x33\x20\x71\xc6\x23\xf2\x6c\xf1\xb6\xed\xd5\x58\x34\x7e\x3c\x62\x43\xf5\x95\xd4\x22\x3a\x67\x33\x7d\xd1\xc4\x4f\x54\x16\x45\x4e\x22\xce\x64\x9e\x12\x61\xbb\xd0\x37\xb2\xa6\x48\x5b\x20\x00\x3b\x19\x4a\x8f\x4d\xef\xfd\x13\x4e\x68\xec\x0a\xf1\xe8\x1f\xcd\x99\xd3\xa3\x94\xce\xa3\x58\x13\x12\x66\x37\x37\xd6\x6b\xf5\x66\x62\xfd\x8f\xa1\xe4\x8e\xd2\x42\xc8\xc7\xd6\x56\x7f\x52\x15\xf1\xed\xaa\xaf\x10\xef\x27\x4b\x93\x42\xab\x05\x23\xbb\x0a\xe7\xeb\x50\x0c\x1d\xa2\x6e\x6e\x42\x80\x75\x3f\xce\xe8\x63\x06\xb7\x11\xfb\xa9\x4c\xd0\x8e\xda\x70\x96\x50\xbc\x27\x14\x64\x03\xa9\xb0\x16\x2f\xcc\x75\xc0\x85\xd5\x70\xec\x9d\xd3\xbc\xb5\xe7\x3b\x96\x89\x90\x11\x4e\x96\x77\x78\x85\xbd\xd9\xbc\xbf\x5a\x09\xb0\xc7\xcd\xb4\xbd\x32\xe9\x37\xe2\x49\xb2\x49\x09\x93\xca\xcc\xcf\x8a\xcf\x57\x8f\xa8\xe8\x47\x6f\x80\xdb\x0b\x38\x35\xe6\xf2\xc6\x89\x35\xa5\x48\x65\x77\x29\x7c\xc9\xa8\x61\x0b\xcb\x5a\x47\x8c\x4f\xa1\xc8\x4d\xd2\x14\xd5\x95\x09\x9e\xd2\x4d\x50\x96\x4d\xa0\xd3\xad\xb3\x8b\xaf\xb1\x32\x38\xeb\x39\x88\xa6\x86\xbc\x6c\x8f\x90\xaf\x87\xad\xb8\xb9\xe2\x0c\xa5\x38\xdb\x6a\xc1\xd7\x79\x85\xfa\x28\x35\x2e\x39\xbb\x7a\x80\xb7\x48\xa0\x5e\x0c\x2c\xf2\x33\x5e\x14\xa9\xd1\x4d\xf8\xb9\x6c\x23\x72\x78\xd0\xaf\x0f\xd9\x94\x6f\x70\x38\x8b\x54\x66\x7b\xfa\xb0\xa3\xd9\xe0\xfc\x79\x2f\x85\xd9\x7d\xb3\xa6\x6d\xce\xe3\x59\x1d\x51\x6f\x7c\x32\xdd\x0a\xbe\xa4\x8d\x32\x64\x22\xa1\x79\x72\x93\xbb\xb5\x7c\xb4\x82\x16\x11\x0c\x67\xf5\x52\x5d\x96\xe8\x70\xef\x6b\x54\x69\x07\x19\x53\xb8\x0b\xa6\xbe\xa9\x6f\xf5\x15\xd6\xcc\x1e\x92\x56\x8b\xb5\x23\x76\xc3\x66\x38\xc0\xae\x47\x8f\xfa\x5b\x7f\x42\xd7\x16\x39\x68\xbf\x18\xc0\xcd\xa4\xb5\x73\x15\x91\x99\x36\x45\x6d\x4a\x13\x2d\x62\x0f\x6b\x0c\x9c\x2e\x41\xcc\x07\x54\x99\x50\x79\x27\x3d\xe5\x82\x06\x85\x41\x9d\x8c\x84\x28\x14\x28\x09\x9d\x3c\x81\x42\x0f\xa6\xc5\x39\x7f\x36\xd1\xe9\x82\x6a\x9e\x65\x84\x55\x05\xe6\x1e\xcd\x0b\xa8\xb5\x96\x18\x63\x93\xff\x80\x9b\x98\x41\x6c\x6b\x1f\x17\xa3\x6a\xd8\xd2\x7d\x94\x78\x6a\x9f\x7f\xe7\x7a\xbd\xd7\x5f\x2c\xef\x4d\xed\x08\xef\xcb\xad\x6f\x3c\x3a\x2f\xe5\x6f\x1e\x30\xf5\x11\x3e\x75\x4a\x0f\x46\x53\x41\xc0\xc1\x9f\x7a\x4c\x0d\x03\xaa\xcb\x39\xdc\x77\x77\xe7\x3f\x9c\x3c\x0c\x11\x51\x11\x4a\xe8\x23\x19\xb1\x48\x3e\xf5\xb4\x78\xfc\x8f\x9c\x28\xfd\x73\x83\x47\x80\xa6\x84\x49\xe0\x04\x54\x2d\x61\x0f\xd5\x2f\xa4\x5b\x18\xfd\xdf\xf3\xf2\xf7\x2b\x48\x7e\x29\x7d\x18\x68\xd7\xd5\xbb\x01\x32\x85\x92\x1e\x66\x69\x65\x0d\xc5\x18\x5b\xe4\xa0\xae\x1a\xe6\x16\xe9\x42\xec\xef\x39\xdb\x50\xe8\x3a\x2b\x3e\x0a\x46\xd1\x20\xd3\xa5\x19\x06\xac\xeb\xcd\xf2\x90\xcc\x37\xb5\xad\xaf\x63\x22\x45\x5a\xb6\xb3\x2d\x17\x85\x43\x91\x12\x84\x00\x0b\xf1\xf4\x64\xef\x7a\x8b\xc4\xe1\x27\x16\x7c\x74\x3c\x62\x97\xce\xe3\x5c\xfc\x2a\x0b\x3d\x3c\x9d\x04\x10\xe0\xe5\x56\xa0\xd9\x98\x4a\xff\x03\x14\x74\x91\x79\xa2\x4c\x45\xbb\x29\x65\x38\xf1\x03\x35\x4f\xea\xb8\x84\xc0\x2c\x9a\xef\x6a\x42\xa6\xd3\x31\x49\x36\x91\x44\x87\xd3\x41\x22\x35\x7d\x47\x8f\x0d\xa7\x73\x9b\x9a\x8d\xc5\x64\x6c\x25\x5a\x53\xf7\x09\x15\x26\x68\x9c\x98\x8a\x72\x04\x81\x8f\xb2\x9a\x3d\x66\x00\x22\xf4\x2e\x5a\x49\xdd\xb8\x28\x4d\xda\x86\x0f\xc9\x86\x5e\x10\x56\x23\x26\x72\x06\xc5\x26\x7c\xc4\x02\x46\x05\x5e\x78\xe4\xfc\x07\xd6\x9b\x33\xd3\x6c\xc2\xc0\x71\x9b\x97\xb5\x7e\xc6\x73\x09\xb6\x9a\x94\x28\x7d\x41\x7d\x0d\x75\x60\x4d\xc8\x50\x0f\x65\x82\xa6\x60\x6e\x95\xdf\xd4\x6c\xdd\x19\x56\x38\xe1\xb3\xbe\x50\x74\x8a\x23\x75\x8f\x77\xd2\xc0\xb1\x6d\x66\xdb\xf0\x53\x37\x0c\x34\x3c\xd7\x8b\x3f\x23\x8c\x08\x98\xa8\xd6\xc9\xeb\x8f\x30\x3c\xd9\x8a\x73\x83\x95\xcd\x1a\x46\xa5\xb7\x58\xe0\x5c\xf1\x54\xeb\xb7\x38\x49\x16\x3d\x63\x91\x25\x68\x8e\xe5\xdc\x6d\xb4\x31\xa6\xb5\xb9\x9b\xec\xe2\x9e\xe1\x68\x4e\xee\xa0\x2a\x72\xdd\xe2\x56\x46\xf9\x81\xb0\x3c\xfd\x70\x8a\xfe\xa7\x98\xe3\x59\xff\xec\xfb\xc1\xf8\x7c\x78\xd7\xff\xee\x62\x70\x1e\xcc\xc7\x3e\xb9\x1c\xde\xdd\x2d\xff\xfa\xfd\xf0\x7e\xf9\xc7\x9b\xeb\x9b\x87\x8b\xfe\x7d\x5d\x2b\x17\xd7\xd7\x3f\x3c\xdc\x8c\x3f\xf6\x87\x17\x0f\xb7\x83\x9a\x4f\x1f\xee\x9b\x1f\xde\xfd\x30\xbc\xb9\x19\x9c\xbb\x55\xf9\x5b\x70\xba\xc0\x7a\x0c\xa9\x17\xf5\xd3\xa8\x1e\xc0\x23\x54\x7e\xf1\x14\x3d\x54\x4b\x1f\xd8\x58\x64\x83\x63\xf1\x8c\xa5\xe6\x61\x10\x0a\x3f\x62\xc8\x7d\xae\x17\xa5\xe9\x53\x13\xae\x13\xcd\x09\x4a\x38\x7f\xcc\x33\xcb\xda\x4c\x7c\x18\xe3\xc6\xf0\x43\x64\xd0\xda\xf7\xc3\xfb\xd3\xe5\x12\x0c\xbe\xb1\x00\x31\xcb\x9d\x01\x18\x17\x76\xec\x14\x6c\x29\x0e\x9a\xbf\xb0\xde\x06\x3d\xf8\x9d\x59\xd5\x8f\x69\x0d\x33\x55\xe9\x26\x8e\x6d\xd1\x5f\x37\xb1\xa0\xe1\xf2\xbe\xae\x5a\x4d\xbf\x1c\xa6\xf6\x14\x9a\x90\x08\xe7\x26\xa8\x49\xdf\x53\x42\x70\x11\x0e\xb8\xa0\x87\xfd\x35\x6a\xe9\xa8\xb6\xc1\xca\x9e\xe9\x89\xcb\x47\x9a\x65\x24\xfe\xb0\x2c\xbf\x94\xab\xc3\xda\x9a\xe4\x7c\x8a\x82\x33\xa9\xf5\x7a\xd0\xf9\x5d\xe1\x94\xf9\xc2\x7b\xd2\x20\x70\xa3\x08\x65\x01\x20\x67\x7d\x27\xf8\xc2\x16\x14\x5c\x63\x58\xa1\x67\x02\x29\xd5\xb9\xad\x1c\x65\x74\x6f\x7d\xb6\xa1\x3b\x63\xd3\x76\x75\xe0\x4a\xa9\xd6\x8d\xcc\x78\x1f\x02\xb7\xfe\x5e\x92\x3a\x46\xbc\x43\x5e\xec\xb9\x69\x14\xb8\xb3\x8b\x79\x83\x11\x37\x04\x37\xb8\xdb\xa0\xc6\x42\xbe\x42\xbe\x5a\xbe\x91\xd6\x5c\x16\x9a\x6d\xb7\x19\x8f\xc3\x02\x29\x01\x5c\xb7\x1f\x58\x09\x04\x79\xed\x5a\xdd\xf3\x18\x2f\x34\x71\x40\xac\xb1\xcc\xb3\x8c\x0b\x85\x1a\xda\x30\x6e\x7c\x33\x3e\xb8\x73\xec\x3c\x3c\x8f\x83\x46\xb4\x84\x21\x6b\x6a\x69\xb4\x83\x47\xb0\xeb\x5a\x30\x8e\x30\x40\x16\x14\x41\x5f\xf7\x28\x2d\xa9\xd4\x25\x0a\xad\x13\x7e\x77\xc9\x30\xc8\xf4\x05\xdf\xb6\x0c\x5f\x5d\xef\xd7\xae\x85\xda\x2d\x4f\xc8\x54\x8d\x6b\xbd\x3e\x2b\x0c\x9c\xba\x45\xd6\x84\x28\x43\x67\xf3\x3d\xb4\xd8\x5e\x4b\xf8\xa3\x0d\xec\xd1\xaa\x41\x60\x21\x10\x9c\x2b\x23\x9f\x16\x3a\x0c\x72\xab\x09\xe6\x05\xdb\xa9\xcd\x05\xf3\x42\xa0\x96\xf9\x8d\x3f\xd4\xa7\x4d\x1d\x8f\xd8\x00\x02\x28\x0a\x45\xc4\xa5\x88\x81\x16\xb0\x56\xfe\x2f\x15\x1d\x7d\xd5\x68\xcd\x66\x84\xd7\x82\xee\x6d\xbd\xfc\x64\x81\x8a\xc2\xb2\xa5\xef\xda\x9c\x1e\x63\xf5\x76\x22\xa0\x99\xb0\x2d\xe3\xae\x48\x66\x2d\xf3\x66\x9e\x45\xa4\x0f\xc4\x87\xe9\xae\x8e\xd1\x4f\xce\xf2\x03\x81\xaf\x45\x4d\x66\x1b\xbb\x91\xe0\x85\x03\x85\xac\x5b\xd8\x7d\xe0\x2c\xee\x3b\x14\x76\xf5\x02\x7b\x40\xa7\x9a\x55\x2e\x29\xe0\x8c\x19\x8b\xec\x06\x69\x1f\x67\xfe\xa3\x3b\xb2\x3a\x2a\xe0\x23\x94\xe1\xb4\x91\x55\x20\x74\xb0\x64\xf1\xbf\xcc\x66\x99\x4c\x54\x57\x58\xcb\x96\x45\xb4\x1e\x54\x7d\x7e\xc0\x03\x68\x12\x55\xd1\x94\x26\x09\xc8\x01\xc7\xa8\x0f\xe5\x81\x21\x91\x53\x5f\x85\x2e\xc0\x82\xce\x18\x5f\x97\x63\xd6\x40\x4c\x51\x40\x4c\x77\xcd\xc4\x24\x81\x9a\x8a\x3c\xfe\xfd\x50\xd4\x1e\x30\x5d\x34\x6f\xc1\xcb\x88\xd8\xed\x91\x5c\x36\x50\xde\xdf\x22\x3a\x7a\x69\xb8\xc1\x87\xff\xaa\x1f\xfa\xa7\x1c\x0b\xcc\x14\xc4\xfc\x5a\xd1\x5d\x90\x20\xf5\x88\x7c\x86\xf8\x0c\x66\x0c\xc1\xf0\x53\xb8\xb9\xce\xe5\x0f\xe1\x5e\x88\xc6\x3d\x44\x8f\xc9\x31\x54\x67\x13\x5a\x96\x98\x14\x6f\xce\xb5\xe4\x30\x62\x4b\xb1\x8c\xc7\xa8\x9f\x48\x6e\xbf\x20\x2c\x4a\xa0\x1c\x77\x10\x9e\xec\x29\xdf\xba\x95\x26\x0b\x50\x50\x60\x2b\x8b\xe6\xb9\x7d\x10\x7c\x08\x45\xc6\xc0\x27\x9e\xc0\x49\x2f\x7e\xff\x3d\xcf\x8c\xb7\xa2\x29\x4e\xe2\x05\xcb\x39\x2c\x5d\x43\x2f\xb6\x49\xa6\x54\xe0\xaa\x0d\x82\x37\x60\x63\x8a\x18\xd3\x00\x81\x05\x7d\x8d\x15\x4a\x08\x96\x0a\xfd\xe1\x9b\x8d\x62\x43\xdc\x04\x0b\xee\x6a\x8f\x6f\x91\x28\xe6\x52\x0d\x42\xe1\xce\x77\x0c\xb5\xe3\xb0\x50\x08\x23\x46\x9e\xc3\xc8\x52\x0e\xc1\xc0\xae\x20\x1c\x09\x72\x5b\x4d\x3c\x99\xc9\xcc\x87\x6c\x0d\xa3\x32\x35\xf0\x11\x07\x77\x6c\xdd\xa7\x76\x58\x35\x94\x65\x95\x27\x1b\xe2\x09\x90\x5c\x45\xd0\xff\x1c\xab\x11\xb3\x9c\xd5\x85\x8d\x04\x69\x5e\xfd\x24\x29\x07\xda\x63\xc8\x25\x61\x7a\xc2\x50\x9f\xfd\xd8\x2f\xd0\x15\xa8\x5f\x3e\xda\xb9\x64\xa7\x2b\x0e\x8b\x89\xc7\xf3\x78\x47\x61\xdb\xb5\xd2\x4e\x9d\x7d\xf9\x15\x85\xe0\x9a\xee\x2f\x4c\xa1\xfc\x16\xc2\x30\xa9\x1b\xf2\x9a\x83\xb5\x6c\xd3\x5f\x21\x1b\xef\xbb\x83\xf6\xa2\x72\xbd\x7d\x1c\xae\xd9\x67\x5e\x63\x6e\x6f\xd8\xdc\x40\xb6\xd8\x45\x01\xf7\x61\xf7\xaf\xe5\xf1\x2d\x0d\x7d\x18\x43\xd2\xdf\x7a\x2e\x58\x24\xd1\x39\xd6\x61\x62\xaf\xe3\x20\xa7\x27\x48\x21\x80\xe0\x3f\xc7\xf8\xec\x9b\x0d\x9e\xd7\xec\x7d\x4f\xbf\x57\xcc\xdf\x4d\xc5\x07\xc1\x2d\x4f\xbc\x59\xd8\xeb\xc7\x7f\xc7\x11\x44\xfa\x43\x4f\x2e\xc7\x60\x19\x90\xc9\xc1\x58\x63\x30\xe6\xd7\x8a\x87\x99\xe0\x11\x91\xf2\x18\x0d\xe0\xa2\xb1\xff\x44\x78\xea\x1c\x12\xc1\xcb\x23\xa6\x35\x13\x87\xdf\x12\xb4\x5f\x26\xf1\xba\x13\x60\xc0\xe0\x76\xf2\xe5\xa4\xeb\x6b\x94\x34\x69\x13\x0e\x8b\x0e\xda\x80\xb2\x06\x68\x30\x3b\x45\x31\x8f\x1e\x89\x38\x11\x24\xa6\xf2\x14\x7c\xeb\xaa\xd1\xa9\x97\x6a\x6d\x7b\x67\x49\xa3\x29\x50\x60\x4d\x52\xdc\x99\xe9\xdf\x06\x58\xbb\xf0\xda\x1e\xa2\x53\x50\x27\x5c\x4e\x86\x09\x42\x76\x70\x37\x84\x29\xb1\x80\xb8\x7e\x6f\xca\xaa\x2c\x84\xd3\x34\xb4\xd0\xd6\x94\x4d\x24\xf6\x11\x83\xb3\xe5\xb4\xef\xe7\x44\x12\x17\x70\x60\x26\xa5\xb8\x8d\x65\x36\xec\x22\xc3\x6a\x2e\x21\x75\xb5\xbc\x06\x56\xe9\x82\x4f\xf5\x0a\xe1\x0c\xe2\x15\x8c\x95\xa2\xf8\xc8\x27\x58\x4a\x45\x93\x64\xc4\x18\x21\xb1\x44\x90\x65\xfa\x55\x6d\x86\xbc\xfe\xb4\x87\x70\x1c\xa3\xff\xfd\xf5\xc7\x8b\x9f\xef\x07\xe3\xe1\x15\x18\xad\x87\x17\x83\x6f\x7a\xfe\xc7\xeb\x87\x7b\xff\xab\xb1\xb0\x3c\x11\x81\x52\xfc\x08\x2a\x1e\x93\xc4\x26\x4f\x90\x11\x0b\x47\xea\xb0\x03\xf4\x13\x49\x5c\xa4\xab\x15\x53\x3c\x84\xa2\xdd\xc3\xc6\x8a\xc5\xc6\xe6\xb7\x81\xf2\x7b\xeb\x3f\x59\x4d\x83\x8e\x78\x7c\x17\x4e\x0c\x84\x1c\x19\x2c\x83\x64\x72\xab\xfb\x16\x04\x47\xd8\x8c\xb2\xa6\x78\x3c\xc2\x9e\x5e\x52\x88\xff\x81\x2c\x7e\xd4\xea\xf5\x0d\xa6\xa2\x35\xed\xd5\xa3\x01\xb9\x13\xa3\xf5\x74\x2c\xab\x87\x4a\x1a\x59\xd8\x64\xdb\x34\xc6\x7c\xd6\x01\xc1\xbd\xf9\x74\x2d\xbc\x14\xf9\xac\x84\x43\xa9\xf0\xf9\x1c\x0e\xca\xc9\x5f\x34\x05\x0d\x8e\xd8\xfd\xf5\xf9\xf5\x29\x22\x09\x9e\x70\x08\xe5\xb7\x21\x41\xae\x09\xbb\x60\x11\x4f\x83\x86\x4a\x08\x25\x3d\x94\x15\x08\x25\xa1\x11\xed\xd8\xb4\xb1\x06\xa9\x24\xe3\x62\x19\xdf\x63\xbf\x2a\xa0\x9d\xec\x0d\x17\x6d\xae\x7f\xfd\x1a\x2c\x1d\xcf\xb4\x22\x57\xe1\xbc\xf6\x6e\x9e\x12\x6c\x6a\xe9\x1b\xb7\x90\xb5\xe5\xdb\x00\xd6\x24\x29\xd5\x53\xd4\x07\x47\x1e\x5b\x17\x7c\xf1\x26\x67\xe8\x87\xbf\x48\x34\xc9\xd5\x88\x95\xdb\xe0\x0c\xf5\x7f\xba\x43\xdf\x61\x15\xcd\xbf\x19\xb1\x6b\xad\x66\xfe\xf0\x97\x06\x28\xa5\x8d\xd1\x09\xf5\x9a\x9c\x63\x85\x2f\x38\x8e\x29\x9b\xd5\x41\x13\x16\xf5\x63\x06\xf7\xfd\x53\x74\x6d\x75\xf8\x22\x13\xc4\xa7\x04\x07\x0d\x01\x43\x86\x89\x38\x2e\x02\xac\x9c\x95\xe1\xdb\x8c\x66\x06\x17\xd6\x88\xdd\x1b\x4c\x46\xcd\x55\xa9\x42\x19\xb7\x35\x8c\xb4\x56\x66\xd0\x2a\xb1\xcb\x90\x22\xc9\x02\xe9\xd5\x01\x32\xf6\x9b\x61\xe5\x31\x90\x67\x96\x99\xfd\x88\x81\x82\xee\x73\x53\x12\x1e\xe1\x04\x62\xf2\x8e\x02\x9b\x9e\x56\xdb\x79\x0e\xf9\xe1\xa6\xe8\xf9\xa2\x1c\x3a\xeb\x21\x0b\xbc\x50\x16\x6e\x14\x18\x00\x60\x1f\xad\x37\x36\xe5\x9a\xe3\x18\x2c\x36\x30\xbe\x25\x66\x75\xf4\x87\x1e\x9b\xcd\x2c\x8b\x7e\xea\xd3\xb6\x78\xce\x1c\x16\x49\x04\xe6\x7b\xb6\x80\xf0\x6d\x28\x3a\xc2\x21\xf4\xa3\xe0\xce\x96\x28\x97\x76\xd1\xdf\x89\xc1\x67\x23\x66\x22\x05\x4b\xfb\x12\xa2\xf7\x04\xbd\x73\x06\x81\x8c\xcb\xb9\x62\x79\x66\x03\x1b\xad\xac\x9f\x09\x72\xe4\x33\xa0\xe2\xd2\x9a\xea\x1b\xf6\x18\xdd\x86\xea\x75\xcc\xa3\x3c\x75\xc8\xca\x90\x3d\x55\x94\x95\x2f\x49\x3c\xe6\x62\x5f\x47\xf1\x80\xd2\xa2\x08\xa4\x8f\xb7\xd6\x8f\x0d\xc1\xf4\xc3\x4f\x97\x25\xf5\x66\xc1\x17\x78\xc7\x6e\x51\x6b\xa6\xa1\x71\x56\x6e\xa9\xd4\xda\xce\x79\x89\x57\x05\xfa\x2b\x17\x20\x6c\x91\xcf\x19\x07\x23\xb7\x49\xcf\xe2\xf1\x57\x12\x0d\x6f\xb4\x04\xa4\x35\x5e\x7f\x06\x73\xa9\x4c\x70\x19\xa4\xeb\x98\xaf\x4d\xba\x40\x0f\x7d\x8b\x46\xf9\xb7\xdf\xfe\x29\x42\x9f\xdd\x1f\x7f\xfe\xcf\xff\xfc\xd3\x9f\x37\x49\x27\x71\x0a\x39\xb4\x5b\xac\x91\x2f\x27\x55\x16\x89\xc2\x1d\x58\xe6\x54\x3b\xec\x82\x3d\x80\x4d\xcb\xbf\x0d\xca\x63\x10\x3b\x84\x67\xf6\x84\xcb\xf0\x64\xa2\xd2\xd1\x2c\x22\x09\x24\x51\xbd\x32\x87\xf0\xc2\xae\x95\xe8\xff\xd7\x0a\xb0\xb2\xb1\x3e\x2a\xdb\xc5\x38\xd1\xc4\x8b\xd7\xba\x11\xf4\xb5\xb5\xff\x29\x70\x20\x7e\xe3\x2e\x38\x9e\xc4\x44\x98\x31\x79\x93\x9d\x37\x24\x02\x73\x20\x9f\xb3\x84\xc7\x0e\x1e\xb5\xc8\x05\xa4\x20\x20\x0c\x3e\x63\xcd\xb9\x7b\x16\x46\xcb\x7c\x64\x3c\x2f\x53\x1c\x19\x54\x50\x89\xbe\xfe\x7c\xaa\x7f\xeb\xa1\xc5\x29\x04\x91\xf6\xd0\xaf\xa7\x16\x2d\x07\x0b\x35\xd6\x3f\x7d\xe3\x64\x6d\xdb\x04\x0c\x9a\x4a\xf4\xd5\xc9\x13\x16\xa6\x66\xf4\x89\x19\xd1\x57\x96\xb3\xfa\xba\x78\xa1\x6c\x9e\x70\xfe\x68\x03\x6c\x97\x3e\x3c\x71\xc0\x6b\x40\xde\xde\x6f\x62\xb6\xde\x27\xe6\x2b\x74\x04\x2f\x10\x74\x9c\x4d\xd0\xf1\xdf\x25\x67\xe8\x78\x81\xd3\xc4\xfe\xea\x9e\xda\xf8\x5f\x2c\x6d\x4e\x5c\xec\x83\x7c\x92\x85\xb1\x94\x7e\x97\xf0\x09\xcc\xea\xd2\xcd\xd4\x44\xd0\xc2\x40\x8b\xdb\xa7\xb8\xb0\xec\x44\x5c\x22\x2a\xe0\x07\xa5\x5c\x99\x57\x80\xc7\xd5\xcd\xea\xb3\x1f\xd2\x7f\x1b\xbf\x30\x2c\x8a\x4b\xe2\x33\xc6\x61\x1f\xbd\xa6\x1b\xfd\x8c\xbe\xb6\x2c\xe8\x1b\x7d\xc7\xd8\x70\x65\xb3\x0c\x75\x1d\x2c\x7c\x07\x3f\x07\x1d\x50\x86\x4c\x5a\xe6\x8a\x2f\x7f\x3d\x39\x3e\x3e\xf6\x5f\x43\xd6\xfa\xff\x8b\xa8\x92\x24\x99\x9a\x96\xdc\x0d\xb6\x18\xb1\x4b\x57\x78\xc1\x19\xaf\x0b\x48\xc7\x4c\x70\xc5\x23\x9e\xa0\xa3\xc2\xa0\x1b\xf3\x48\xa2\x7f\xd7\x62\x6d\xb0\x94\xf0\xa3\xd6\xe3\x1a\x60\x60\x0d\xd2\xf3\x2b\x1d\x2a\x6b\x10\xaf\x1e\xab\x10\xc5\xcd\x2b\xb6\x58\x86\x55\x3c\x80\x16\x34\xe5\x9c\x58\xa4\x37\x21\xf4\xcb\xe4\xb3\x82\x47\x0d\x40\x7a\xb5\xa1\xec\xf5\x37\xe5\x12\xbb\x2d\xf0\xf4\x0c\x59\x37\x2c\x80\xc5\xbb\xb2\x9c\xc1\xcc\xb3\x17\xba\x4f\xf4\xe5\xc2\xc2\x52\x00\x32\x4f\x53\x2c\x16\x27\xc5\x69\x5b\x26\xce\x02\x69\x0d\x78\x4c\xe2\x16\x00\x5c\xb8\x89\x3d\x5a\x36\x8a\xc1\x8a\x97\xee\x46\xf3\x67\x37\x82\x5a\x86\x01\x62\x01\x61\x11\x8f\x2d\x5d\x17\xd9\xa7\x65\x89\xc5\xbf\xb3\x2c\xab\xb8\x88\x18\x59\x18\xe3\x98\x32\x10\x1e\xf6\x0d\xf7\x71\x03\xfb\xe6\x63\xa8\x8a\x4b\x66\x1b\xb8\x47\x87\xd7\x77\xee\x9b\xf6\x97\x2e\xac\x43\x59\x64\xc7\x49\x88\x8f\xc7\x66\x48\xe0\xe7\xe2\xfa\x85\xd8\x0e\x63\x9d\xc9\x7d\x6e\xae\xf9\xf7\x19\xbf\xa1\x89\xbe\xb5\x80\xc6\x8f\x47\xac\xf4\x73\x0f\x91\x84\xa6\x94\xf9\xd8\x3a\xc3\xdc\xf9\xd4\x48\xcf\x8f\x54\xe9\x2d\x93\xf1\xa3\xe6\x60\x0e\xd7\x29\x50\xa9\xfa\x6c\xe1\x48\xc7\x3b\xa6\xac\x05\x22\x97\x7a\x5c\x85\x8e\xae\x85\x59\xdd\xc4\x91\x15\x48\x69\x40\x78\x70\x7e\x47\x4c\xb7\xe6\xce\x52\x11\x2e\x1c\xb4\x17\x34\x77\xe4\x00\xf1\x03\x0e\x00\x7d\x94\x62\x7e\xbd\xfc\x5b\x23\xa0\x0c\x58\x9e\xee\x9a\x6c\x62\xc3\x87\xdf\xca\x4c\x77\x23\x88\xbb\xa9\x6c\xe2\x12\x61\x79\xea\x0e\xd4\x06\x14\x37\xb0\xe2\x4f\x4c\xa2\x04\x1b\xa4\x1a\xdd\x10\x44\x3e\xf6\x8c\x83\x34\x0b\xfa\x32\xd7\x8b\xe9\xc6\xd4\xd8\x49\x08\xfb\xda\xfc\xfb\x1b\x64\xef\x86\x6f\x7b\xf6\x3e\x17\xd2\x23\x80\x98\x3d\x87\x1a\x8d\x24\x36\x36\x74\x40\x25\x9e\x61\x11\x1b\x6b\x79\xa8\x55\x98\x0c\x5e\x2d\x7f\x2d\x78\x8e\x9e\xa9\x9c\x8f\xd8\x3d\x77\x06\x47\xc4\xb8\xc7\x75\xee\x81\x32\xba\xd4\x1f\x96\xc0\x04\x60\xd4\x75\x14\xa0\x99\xf0\x4e\xb9\x46\x10\x05\x3b\x66\x3c\x26\xbb\x01\x18\xdd\x17\xbe\x0a\xe7\xbf\x16\xc4\xe4\x83\xc1\x4d\xd1\x94\x4e\x4b\xa4\xdc\xd0\x36\x5f\xdd\x78\xb8\x87\x6c\x3b\x50\x12\xf8\x79\x23\x74\xed\x10\x1b\xcc\xdf\x6a\xd0\x8a\xd3\x38\x83\x6c\xe0\xd2\xda\x7b\xb4\xe4\x5d\x37\x21\xaa\x41\x2b\x6a\x75\xf7\x9b\xb9\x47\xb0\xec\x3e\xc0\x18\xa3\x99\xe0\x79\xe6\x53\xe6\x5d\xba\x9f\xd9\x06\x2b\xd3\x0c\xd9\x94\x9f\x5a\x9d\xea\x82\xb2\x47\x43\xf1\x2f\xb5\x47\x06\x10\x9b\xc4\x25\x18\x37\x57\xa5\x15\xe6\x70\x84\x28\x8b\x92\x1c\x2e\x3e\xa9\x70\xf4\x68\x40\xbd\x9b\x8c\xbe\xfa\x9b\xf1\xfa\x64\xca\x06\x89\x29\x4f\x12\xdb\x6d\x71\x81\x16\x65\xac\x9f\x28\x46\x18\x3d\xdc\x0e\xeb\xfb\x7e\xa4\xcb\xce\x9c\xfa\xdb\xb3\x4c\x20\xf0\x3f\x3f\xd0\x8d\xe2\x2e\x2b\xb0\x78\xa4\x44\xea\xde\xb8\xd4\x04\xba\x6a\x88\x54\x69\x05\x22\xbe\xad\x31\xed\x6f\x4c\xa7\xb3\x2c\x1f\xeb\x85\x4a\x36\x09\x10\xd0\xa3\xf8\x74\xf3\xd0\x0f\xbe\x5b\x45\x2a\x9f\x6e\x1e\x50\xd0\x87\x01\x3c\x4c\x48\xa4\x7c\xa4\xf1\x31\x3a\x2b\x70\x88\xab\x92\x79\x4c\x9e\x68\x64\x52\x5c\x7b\x5a\x2a\x1a\x31\x80\xf7\xd4\xba\xce\x91\xc3\x84\x42\x9f\x6e\x1e\x2c\x92\x94\x87\x9b\xb2\x90\xca\x00\x61\xb1\xd9\xb5\x53\x01\xd6\x64\x9c\x1d\x81\xc4\x86\x45\x5c\x78\x3b\x7a\xa0\x5c\xff\x7f\xec\xbd\x5b\x73\x1b\x49\x72\x36\x7c\xbf\xbf\xa2\x22\x7c\xa1\xd1\xf7\x81\xe0\x68\xf6\xb5\x63\xad\x08\x5f\x50\x14\xb5\xc3\x5d\x89\xd2\xf2\x30\xb3\x7e\x0d\x07\x54\xe8\x2e\x00\x65\x36\xaa\xa0\xae\x6e\x72\x60\xaf\xff\xfb\x1b\x95\x99\x75\xe8\x23\xba\x01\x52\x1a\xaf\xe7\xc2\xde\x11\x01\xd4\xf9\x90\x95\xf9\xe4\xf3\x24\x7c\x5b\x94\x64\x60\x3c\xbc\x9a\xba\x39\xb9\x0e\x91\x10\xdb\x2c\x3d\x53\xd6\x56\xc2\x2c\x03\x50\xff\x68\xea\xd3\xb7\x0c\xea\x31\xe0\x00\x18\xb4\xa3\x0e\x7f\xe9\x33\xfc\xb8\xda\x31\x9e\x2f\x64\x91\xdb\x67\x18\xfe\x18\xa6\xc2\xbd\x3d\x16\xee\x45\x15\x2c\x23\x12\x6c\x81\x09\x96\xaa\x30\x33\x15\x65\xb0\xf8\xac\x60\x4c\x5e\x90\x8a\x01\x1d\x1e\x60\x6f\x1c\x3d\x57\x92\xe9\x32\x75\xd7\x6a\xee\x05\x60\x76\x5b\x34\xa2\x66\x0a\x98\x49\xec\xdd\x0a\xc2\xe7\xe1\xee\x7f\xcd\x3e\xab\x07\x99\x4a\x7e\x52\x08\x93\xf1\x93\xe2\xff\x7c\x9e\xd4\xfe\xc4\x5f\x7d\xff\xfd\x67\xd4\xb2\xe9\xa2\x5d\xf0\xcb\xe8\x68\x07\x4f\x7b\x9c\xc2\x15\x3f\xb7\xab\xf4\x88\x79\x7a\x2f\xef\x05\xfb\x8c\xd3\xfd\x99\x08\xfc\x0e\x9b\xb6\x99\x6a\x9b\x37\x76\xc8\xb4\x01\x9d\x6a\xfb\xbc\xb1\x9e\x69\x7b\xb5\x9a\xfe\xe3\x6a\x61\x67\xeb\x87\xd5\xf4\xd5\xf7\xf0\x9f\xb5\x39\xda\xb7\x79\x7d\xf6\x4c\x5b\xb3\x5b\x0e\xa2\x96\x6d\xe9\xcf\xa2\x99\xda\x7f\x18\xb1\x71\x67\x11\xac\xda\xb6\x8d\xcf\x0b\x71\x6c\x76\x2b\xf2\x3a\x8e\x40\x5f\x37\x08\x33\x7b\x23\x82\x47\xb2\x4d\x06\xa6\x48\x80\x7b\x76\xd3\x5e\xc6\x00\x5c\xf8\x70\x04\x1f\x0f\x7c\x7f\x58\x7f\x6a\xdf\xdd\xd3\x9d\xfe\x66\x66\x42\x8c\x60\x90\xb9\xb1\x5f\x1f\xd8\xc8\xca\x57\xfb\xda\xf8\xc8\x51\x51\xa7\x49\xe4\x9e\xd2\x6b\x7d\xcc\x2e\x72\xcb\x11\x5d\x26\xc6\xe7\xfd\xf9\x96\x38\x68\xa5\x7f\x5f\xbb\x7a\x57\xb4\x97\x62\xc1\x1e\x1f\x75\x6b\x59\xf8\x91\x2b\xe2\x48\x28\x9c\x7d\x52\xcf\x37\x83\x49\x42\x43\xc5\x6f\xe9\xc7\x1f\x1a\x94\xa1\xde\xbc\xfc\x00\x99\xd9\x9e\x0c\x6b\xc3\x95\xb5\xd6\x5c\xad\x1d\x81\x25\x7c\xe5\x1f\xd4\xa4\xbb\xed\x41\x0d\xc2\x1a\x07\x6a\xd9\x52\x55\xae\x94\x47\x8c\xad\xf2\x0c\x63\x07\xc5\x1a\xdc\xca\x41\x03\xce\x1d\x73\xc1\xbd\x8c\x7a\x71\x19\xcf\x57\xe8\xf4\x32\xa2\x30\x2f\x5b\x66\x38\xe4\xb1\x1d\x31\xc3\x07\xe8\x6c\xc7\x58\x16\x70\xa9\xf4\xed\x34\xdf\xca\x2a\x61\xb4\x7f\x69\x79\xc5\xfa\x88\x0d\x35\x24\xd7\x25\x3a\x47\x75\x85\xd4\xee\x95\x6e\x1e\xac\xb1\x52\xef\xf5\x78\x1c\xdf\x78\x96\x17\xa7\xfa\x4e\x39\xbb\xd8\xb8\x85\x00\xae\xf3\xee\x36\x8c\xd7\x75\xef\x69\x02\x09\x1d\x77\xb5\x60\xa6\xce\xdc\x57\x02\x63\xa3\x91\xe8\x65\xc1\x74\xc4\x72\x81\x19\x2e\xe0\x33\xe3\x61\xd4\xa9\x73\x1d\x9d\x18\x9b\x90\x5f\xeb\xc2\x9d\x11\x79\xb8\x8d\x48\x05\xce\xf3\x32\xf7\x2a\xf0\x3d\x88\xbc\x0d\x76\x3c\xa2\xf2\x1b\xd7\x45\x2a\xca\x8d\x65\x5b\xc5\xc3\x1f\x2a\x54\x10\x24\x1c\x11\xaa\x16\xf3\x02\xb2\x5d\x58\xa6\x81\xf8\xb3\x56\x59\x73\xb7\x16\x47\x9d\xc6\x92\x6f\xe6\xb9\xee\x96\x28\x1c\x30\x4c\xae\x88\x8a\xcf\x7e\x8d\x92\x45\x3b\xf6\xa5\xe4\x19\x5e\x6e\x8a\x96\xa3\x6b\x36\xb8\x3f\x7e\xf8\x27\x76\x06\xb7\x0f\xfb\x00\xe7\x22\x80\xb6\xa0\xb4\x42\x33\xb9\xd9\x8a\xdc\x68\xc5\x3b\xb5\x3a\xef\xff\x60\xe6\xa4\x37\x66\x9f\xc6\xba\x6c\x6a\x8b\x8d\xe8\x49\x4b\x69\x71\xa7\x38\xbb\x2f\x17\x22\x57\x02\xf5\x48\xe1\x7b\xcc\x7d\x6f\x50\x73\x35\x2f\x8b\xf5\x0f\xf3\x24\x93\x83\x45\xd0\x20\x63\xf4\xcc\xfe\xec\x1c\x7f\xd5\xd7\x81\x4a\xf9\x95\xa6\x2b\x86\x9f\x31\xfc\x6c\xca\xde\xf0\xe4\x5e\xa8\x94\x6d\xb3\x72\x25\x89\x20\x06\xcd\x7d\x59\x7d\xd8\x57\x3b\x86\xb6\x05\x96\x6f\xaf\xa1\x99\xda\xf0\x7b\x24\x26\x27\x23\xd2\xbe\x1c\xba\xe8\x05\xbd\xab\x64\x2e\x9b\x6b\x77\xef\x6c\xf9\xfb\xb0\x59\x4c\x7d\xed\x99\x12\xf3\xe5\x1e\xd7\x9a\x50\x46\x15\x4f\xcd\x88\x8d\xeb\x57\x6b\x83\xc7\xcb\x71\xad\x78\x65\x5a\x6a\x0c\xee\x5e\x08\xe1\x01\xb9\x7e\xa9\x18\x07\x2a\xb0\x17\x86\x95\x5b\x67\x9f\x41\x6c\x29\x03\xa4\x0f\x4e\x81\xfd\x60\x2b\x93\x7b\xc4\x96\x42\xf6\x04\xf3\xdd\x6b\x08\x18\x32\x11\x40\x8e\x6d\x47\xc3\x12\x89\x70\x8e\xc3\xad\x34\xb8\xf9\xf7\xac\xd3\x81\x99\x21\xc5\x5a\xa8\xf9\x01\x14\xf1\xc3\x27\xad\x92\x05\x42\x66\xb0\x8f\xd1\xf9\x21\x2c\x95\x24\x51\xc0\xf0\xc6\xf6\xfc\xc7\x72\x59\x33\xa3\xa5\x61\x86\x17\xd2\xd8\xb3\xac\x75\xc4\x03\xfd\xd0\x31\xa3\xce\xc7\x71\x1e\xb5\xf0\x1d\xd5\xc6\xc2\x67\x9a\x4d\xd9\x3b\x88\x6c\x44\x2f\x03\xed\xd9\x83\xba\x0e\xac\x62\x2d\x3a\x69\x74\x9f\x02\xa2\xe9\x7a\x10\x7d\xbf\x37\x60\xe5\xb3\x0a\xa7\xec\x2c\x44\x94\x91\x3f\x09\x63\xc5\x7b\x7a\x24\x32\x23\x0e\x59\x7c\x83\x82\x2f\x80\xba\x82\x05\xc4\xc0\x92\x32\xf6\xef\x41\x15\xc4\x37\xf3\x11\x12\xf7\xf9\xbd\x50\x7d\x1e\xf6\xe1\x2d\xc4\x10\x48\xaf\x4b\xc0\xc7\x56\x34\x86\x57\x0e\x69\xe0\xf0\x6d\x17\x28\xab\xe4\xf2\xd4\x0e\xb9\x7d\x86\x24\xf7\x94\x2e\x88\x11\x36\x22\xbd\x7a\x5c\x6b\x13\xef\x33\x37\x7f\xf8\x92\xcd\x4b\xaf\xfc\x00\xe9\x96\x7e\x80\x11\x67\xa9\x74\xcc\x89\x05\xad\xf6\x9b\x14\xdd\x3a\x7e\xbe\x99\x3b\x42\x61\x18\x00\x99\xe0\x8a\x6a\xee\xe6\x3f\xff\xc1\x7c\x84\x1d\xfb\x14\xec\x2b\xed\x52\xdb\xc7\x67\x3e\x1d\x18\xf3\xf5\x98\xde\xa0\xd3\xcd\x53\xcf\x17\xb4\xd5\x29\x0b\xcb\x6b\xbc\x28\xf7\xb7\xef\x56\x4d\xcc\x7b\x50\xdf\xf6\xad\xec\x0f\x11\x30\x8c\x2d\x4a\x99\xa5\x48\x9f\x17\x19\x84\xda\x59\x1c\xc0\x69\x0f\xd7\xbf\x34\xfe\x3e\x69\x5f\x63\x9f\x74\x7a\xcc\xc2\x1a\x4f\x91\xda\x5c\xd7\x03\xf2\x46\x4c\x0c\xde\xd9\xec\x1f\x89\xad\xee\x46\xfc\xa7\x73\x53\x15\x71\xeb\x69\x30\x40\xbc\x16\xe5\xf2\x06\x14\xa3\xba\x58\x88\x22\x31\x15\x97\x56\x6c\xe7\xd9\x56\xe3\x93\xdc\xba\x26\x85\x10\x43\xe1\xfa\xe7\xec\x4f\x37\x1f\xaf\x4e\x36\x3c\x37\x6b\x0e\x2c\x0f\xae\xac\x89\x13\xe1\xc4\xe7\xb1\x43\x32\x48\x35\x53\x27\x6c\xa5\x27\x88\x9b\x79\xcd\xd6\x45\xb1\x35\xaf\x4f\x4f\x57\xb2\x58\x97\x8b\x69\xa2\x37\xa7\x61\x68\x4e\xf9\x56\x9e\x2e\x32\xbd\x38\xcd\x05\x64\x4e\x9c\xbc\x9a\xfe\xf0\x0a\x66\xe6\xf4\xe1\xd5\x29\xa0\x25\xa6\x2b\xfd\x0f\xef\x7f\xf8\xe7\xdf\xff\x93\x2d\x78\xbb\x2b\xd6\x5a\xbd\x26\x50\x4e\x6f\xd9\x27\x68\x95\x9f\xe2\x4f\x6a\xb5\xfc\xf3\xf4\xfb\xb8\x19\xf4\xd5\x8d\x4e\x45\x66\x4e\x1f\x5e\xcd\xdd\xc4\x4c\xb7\xbb\xdf\x72\x0d\xbe\x59\xae\xc1\xbd\x2c\x7e\xcb\x35\xf8\xa6\xb9\x06\xc3\x2d\x1c\x7f\xc6\x00\x79\x73\x38\x1f\xed\xdf\xfd\x19\xe9\x5c\xef\xfb\xce\xa1\x96\xcb\x21\xce\x04\x3b\xe2\x8a\xb8\x17\xa3\x9e\xd8\xb5\xee\xfa\xa7\x43\x87\x8b\x6d\xac\x80\x4a\xa7\x31\x3f\x8a\xf8\x02\x90\x7d\x32\x01\x72\x7e\x74\x09\x6e\xb9\x6c\xcb\x20\x20\x04\xeb\x31\xe3\xf7\x9c\x32\x13\x4f\xad\x2f\x41\xdd\x3d\x50\x5b\x22\xc3\x5f\x3b\xbc\xad\x7e\x74\x9a\x12\x4f\xa1\xc4\x30\x50\x9b\xdb\x13\xcc\xe3\xe2\x81\xb6\xb8\x76\x75\x34\x63\xcd\xcd\x61\xc0\xed\x33\xa4\x71\xf5\x71\x3a\x44\xbd\x4a\xe3\x2a\x74\x17\x87\x63\xc6\xb1\xf7\x90\x23\xe0\xdb\x96\xf9\x56\x1b\x61\xa6\xec\x5d\x4d\xbd\x36\x80\xd1\xaf\xdf\x9d\xb3\x57\x7f\xf8\xe7\xdf\xcf\xd4\x77\x2d\xf7\x36\x9c\xf7\x3a\x5f\x11\x36\x1e\x6e\xeb\x0d\x37\x85\xc8\x4f\xf3\x65\x72\x8a\xa7\xdc\xa9\xfd\xfd\x09\x55\x7a\xa2\x97\x27\x9e\x66\xfe\x84\x18\xb7\xa7\x9b\x74\x1c\x69\x4c\x65\xe9\xe1\x5d\x43\x17\x8d\x81\x4b\x09\xe9\xe5\xf4\xd2\x0b\x8a\x60\xee\x22\x6a\x0f\xe9\x65\xcb\x7f\xbc\xc9\xf4\xc2\xbc\xf4\xa4\x96\xdc\xb8\x3a\x02\xcb\x5c\xf7\xd6\x7c\x1a\xc5\x09\xb7\x44\x9e\xd3\x51\xe1\xce\x92\xf8\x39\x32\x66\xe0\xdb\x37\x5b\xb8\xee\x91\x63\x87\xe7\xba\x54\x8e\xb1\x5f\x2b\xa1\x97\x00\xdd\x00\x4b\xd8\x21\xcf\xc0\x57\x0b\x78\x26\xcf\xa7\x93\x8b\x2d\x5e\x30\x10\x55\xe8\x1e\xee\x23\x55\x2b\xf6\x8d\xf3\x73\xa8\x56\x1c\x3b\xee\x74\xa0\x7c\xa3\x01\x3f\x16\x1e\x8e\x5b\x69\x0c\xaa\xc2\x7e\x7f\x6f\x04\xd5\x9f\x03\x41\x51\x2e\x10\xc4\x6f\x79\x0e\x46\x9a\x38\x29\xf4\x09\x10\x91\x01\xbd\x15\xea\xc8\x74\xc1\x2a\x20\xf2\x3c\xe6\x9a\xb4\xdf\x1f\xd0\x4e\x34\xcc\x7f\x89\x1a\x4a\x36\x89\x41\x5a\x66\x82\xd9\x4a\xa5\x44\x4e\x31\xb5\xbd\x37\xea\xc8\xb8\x74\x3c\x95\xfd\x28\xdb\xf0\x12\x8d\x35\x3e\x7c\x8e\x15\x8f\x0e\x81\x29\x03\xeb\x73\xad\x37\xda\x9a\x33\xba\x34\xd1\x87\xf8\x7a\x81\x4b\xb8\xd3\xf6\xda\xf0\x2d\x12\x8f\x7e\xbb\xde\xd8\xad\x65\x3f\x42\xa7\x5e\xfc\xa5\x51\xb2\x49\x8b\xaa\x50\xcc\x9e\xf6\x7b\x85\x8f\xfe\x75\x03\xa8\x07\xd4\x1e\x05\xf9\x6f\xe2\xed\x97\xff\x69\xdf\x35\x76\x49\xf9\x97\x82\xbf\xb9\x11\xa4\x83\xfc\xba\x31\x24\xcd\x59\xf3\x9d\x0c\x18\xe5\x66\xe4\x1c\xf8\xc4\x91\x21\x13\xc0\x15\xa6\x52\xb8\x1c\x8a\x93\xd6\x24\x8a\xae\x7d\xe9\xc4\xb6\xd3\xb9\xe3\x80\x1e\xd7\xd4\x1b\x5f\x00\xd1\x3d\x37\xdb\x1d\x28\xf4\x20\xe3\x06\xc7\x18\x0f\x04\x67\x5b\x74\x01\x37\xc7\x6f\x46\x10\xcd\x1a\x33\x76\x50\x09\x2e\xce\xc6\x08\x46\x7b\xa1\x6b\x00\xc7\xb9\xd8\xfa\x3c\x56\x6d\x98\x5d\x64\x1d\x0d\x19\x99\xb6\x95\x8d\xc7\xa3\xff\xe1\x83\xdf\x5f\x08\x69\x5c\x94\xf0\xf9\xd5\xc7\xdb\x18\xad\x21\xb1\xb7\x27\xc9\x5a\x24\xf7\xe0\x30\xc1\x2b\xcf\x0b\xf1\x12\xc3\xe9\x4c\x05\x39\xc7\x42\x3b\xe8\xc1\xce\x2b\x5c\x78\x95\x17\x9d\xb3\x54\x9a\x6d\xc6\x77\x10\xe4\x55\x98\x7b\x15\x02\xc4\x3e\x69\xd1\x1e\x05\xfb\xfc\xc5\xc3\x67\xda\xce\xca\x59\xf8\xdd\xd8\xb1\x0c\x60\xda\x30\x98\xcd\xf3\x80\x19\xb1\xe1\xaa\x90\xc9\x4c\x6d\x04\x57\x31\x2a\x8f\x82\xdc\x76\x90\x53\x2d\x88\x03\x7e\xb9\x14\x49\x11\x48\x64\xc1\x78\xf7\x23\xb5\x6f\x0f\x8e\xeb\xbb\xdf\x79\xbd\x5d\xff\x11\x70\xbf\x18\xa3\xcf\xf5\x03\x1d\xc3\xee\x6a\x3c\x30\x78\x03\xf2\x9f\x74\xe5\xba\xc7\x20\xfc\xcb\xad\x29\xb6\x10\xc5\xa3\x00\x8e\x14\x4a\xea\x6e\xb3\xf1\x8f\x96\x80\x39\x4e\xd1\xbd\x5d\x0b\x3f\x42\x82\xe1\x06\x8b\xc1\x64\x9e\xcc\x4d\xd5\x58\xd9\x5e\x50\x9a\x39\x78\x7b\x5e\x90\xdf\xea\x05\x5c\xd3\xf6\xf5\x98\x3f\x88\x74\xa6\xaa\x54\x79\x64\x33\x86\x0d\xc7\x82\xb8\xe1\xd3\x9c\x36\x6e\x8c\x07\xf9\xf2\x2f\x80\x1e\x28\x10\x03\xfb\x44\xea\x1e\xb1\x45\xec\xf4\x73\xbe\xaa\x9c\xce\x6b\x6c\xdd\x0f\x80\x64\x09\xe3\xc4\xcb\x48\xeb\xb4\x82\xa7\xf0\x8b\xd2\x13\x81\x21\x4b\xa8\x07\xc0\x92\x5f\xb2\xe1\xe9\x6c\x2b\x63\xa6\x1c\x43\xc6\xb2\xcc\x90\xf9\xb9\x2b\x0f\x81\x78\x01\x5d\x36\xdf\xb7\xcb\xea\xf4\x7e\x35\x16\xe9\x45\x7a\xd8\x43\x04\x46\xc6\xb3\xce\xad\x7a\xa1\x4c\x09\x26\x85\x93\x8a\x03\xc7\xf3\x4a\x14\x70\x9b\xa7\x65\x86\x84\x0f\xe0\x31\x07\x8e\x41\x9e\x65\x4c\x16\x66\xa6\x3c\x25\x22\x26\x1b\xc0\x09\xeb\x5c\xea\x4e\x65\x5c\x79\xad\x72\xf8\x98\x2b\xb0\xc3\x64\x22\x8b\x06\x84\x7b\x17\xcb\x2b\x6d\xb7\x82\x63\x7e\x32\x4e\xdb\x4c\xc5\x6f\xae\xfa\x24\x50\x32\x2f\xcf\x24\xef\x51\x81\x7f\x8a\xa5\x7b\x66\xab\x38\x08\xb7\x80\xbd\xb3\x0f\x2e\xa7\x9c\x8c\xad\x25\x4e\x14\x42\x5a\xda\x57\x4d\x61\x9c\x8f\x3c\xbc\x5b\x21\x4f\x21\x29\x33\x9e\x63\x82\xc6\xb2\xcc\x98\x5c\x46\x22\xd0\x30\x07\x48\x88\x67\xa7\x2b\xd1\x70\x57\x3b\x2f\xb9\xe1\x1b\x11\x71\x71\x90\x7b\x27\x8b\x30\x14\xc8\xf2\x8f\xc1\x79\x5b\xd6\xcb\x29\x7b\x1b\x28\x3f\x71\x86\x61\x4f\x44\x44\xba\xd2\xe0\xf1\xe7\xdb\x1b\xa5\x91\x43\xef\x6c\x13\xb5\xb2\x3b\xd2\xef\xba\x8e\x19\x04\x41\x8e\x71\x00\x0d\x27\xc7\xd2\x8f\x1a\x6e\xa5\x91\xb0\x3f\xad\xc1\x36\xfc\x86\xe8\x68\xa0\xbb\x15\x46\x36\x32\x26\x21\x3e\xa0\xa1\x9e\xe4\xb9\xa5\xb1\x9b\x1e\xcd\x69\x98\xc7\x91\x4d\x8d\x14\xdc\xc6\x37\x34\x5a\x39\x31\x1c\x67\xc8\xc8\xae\x78\x31\x16\x9b\xe3\x93\x71\xc6\x37\xb4\x15\x07\x35\xa4\x99\x70\x7a\x8c\x6c\xa7\x17\xda\x3f\xa0\xa1\x5e\xce\x3f\x68\xbc\xc0\x51\x21\x78\xb2\xae\xe6\xc5\x3b\xf6\x5a\xdf\x03\xc8\x8b\x82\xfd\x38\x3e\xa5\xff\x2c\xac\x39\x10\xb1\x63\xb6\xf9\x53\xf6\x51\x09\x44\xce\xe9\x65\x74\xa9\x50\x03\x48\xed\x0e\x04\x44\xfc\x29\xb7\xb0\x0d\x53\xf7\x8e\x2e\xc8\x6e\xb9\x09\xe3\xa1\x74\x38\xf5\x70\xd9\xe0\x29\xd2\x61\x4b\xb6\xc9\xed\x1c\x61\x5e\x0e\x4b\xba\x6f\x7f\xf3\x47\x00\xd4\xf1\x27\x40\x5b\x3f\x86\x4f\x4b\x2f\x92\xdc\xbf\xe2\x1c\x7c\xbc\xba\x6e\x18\xc2\x49\xf7\x8d\xef\xa7\x75\x15\x85\x38\x42\x9c\xee\xee\xea\xed\xc5\xbb\xcb\xab\xaa\xa2\xdc\x5f\xee\x2e\xee\xaa\x7f\xb9\xbe\xbb\xba\xba\xbc\xfa\x63\xfc\xa7\x9b\xbb\xf3\xf3\x8b\x8b\xb7\xd5\xef\xbd\x3b\xbb\x7c\x5f\xfb\x9e\xfd\x53\xf5\x4b\x67\x6f\x3e\x5e\xd7\x34\xec\x9c\x00\x5d\xf4\xa7\xdb\xcb\x0f\x17\x6f\xe7\x1f\xef\x2a\x32\x78\x6f\xff\xf5\xea\xec\xc3\xe5\xf9\xbc\xa5\x3d\xd7\x17\xe7\x1f\x7f\xba\xb8\xde\xa3\x62\x17\xfa\xdb\x3a\xa4\x4f\x01\x1f\x3b\x58\xd3\xf0\x8c\x2d\x73\x29\x54\x9a\xed\x10\x7b\xef\x5e\xb6\x35\x30\x6d\x7c\xf7\xca\x8d\xd0\xe5\x31\x10\xfa\xdb\xb5\x60\xfa\x41\xe4\xc0\x6c\x84\xa5\x11\x0d\x42\xc8\xa2\xae\xd7\x9a\x8b\x22\x6f\x46\x05\x7a\x33\x85\x8a\x7c\xe7\x73\xd1\xfa\x9a\x13\x58\xf1\xa8\x12\xb6\x15\x79\x5f\x5b\xc0\x32\xca\xcb\x6d\x21\x17\xdd\x49\x11\xa3\x93\x89\x87\xbe\xbd\x91\xc3\xb5\x9d\xf0\xea\xaa\xfd\x60\xac\xe4\x06\x1c\x03\x3c\x86\x12\x0e\x95\xea\xf4\xbf\x76\x60\xcd\x6d\xb9\xc8\x64\xc2\x64\x5a\xf7\xa7\x50\x8e\x3f\xb8\x8c\xeb\x54\xcf\x5b\x91\x83\xa9\x6a\x5f\x00\xdb\x5c\x9c\xf0\xb2\x58\x23\x2d\x21\xa5\x22\x90\x30\xc7\x4c\x19\x91\xe4\x02\x63\x01\xc2\x80\x93\x16\x35\x1a\xa3\x9a\xa0\x31\xc4\xca\x91\x02\x01\xd8\x34\x92\xdd\xe8\x88\x11\xe0\x2f\xb1\xf4\x11\x4e\x52\xfc\x7e\xef\xd0\x50\x8b\xa5\xa9\x0b\xf4\xc3\x0d\x8f\x1f\x3a\xa5\x47\xdb\x6f\x7b\x52\x7b\xa5\x43\x9c\x64\x97\xbb\xd1\xde\x8d\x7d\x6b\x2c\x5e\x28\xd5\x64\x06\x2a\x9d\x3e\x3a\xcf\x05\x5c\x22\x04\x05\x70\xfe\x0b\x80\xae\x50\xae\x07\xa4\x78\xd8\xa7\xda\x42\xac\x79\xb6\x44\x8b\xc3\x4e\x4d\x3b\x53\x02\x96\x7f\xab\xef\x85\xba\xc6\x09\xfb\x26\xc7\xa1\xc2\x97\x4f\xe0\x69\xf1\x1e\xa1\xe0\xc2\xb4\x6d\x74\xab\xca\xe5\xba\x81\x31\x55\xe0\x3b\x21\xfa\x18\x53\x3a\x02\x0b\xbb\x4b\x93\x5b\x2e\xe5\x2f\xb6\xc0\x99\x12\xad\x3c\xd4\x80\x17\x72\x8c\x79\xfe\x5c\x06\x6c\x14\xd2\x8e\xdd\x0b\x05\x1a\x91\x28\x21\xbf\x77\xcd\x8e\xf3\x9f\x37\xe7\xa2\xc7\xa1\x0f\x3e\x3f\x59\x91\xce\x8c\xa3\x3c\x6e\x9c\x0a\xcc\xb1\xf1\xbc\x02\xb0\x6e\xce\xdf\x5f\x5e\x5c\xdd\xce\xcf\xaf\x2f\xde\x5e\x5c\xdd\x5e\x9e\xbd\xbf\x19\xba\xfd\x9e\x22\x2f\xaa\xb6\xfb\xea\xe9\x41\xfe\x84\x38\xa5\x9d\x17\xd2\x73\x7d\xa7\xc2\xb6\x83\x29\xd9\xdf\x7a\x99\x6e\xe7\xa9\x34\x89\xbd\xfe\x76\x73\xa1\x52\x20\xf0\x3f\x68\xa9\xb6\x17\x55\xef\x85\xff\x06\xf3\xdf\x70\x27\x08\xde\x76\x0f\x6e\x45\xfb\xcf\x01\x75\x07\x6e\xc8\x5c\xd8\xcd\x9f\x56\x78\x13\xa6\xfb\x55\x9b\x6c\x71\xc7\xf5\xad\x5a\x44\xbd\x4f\xd8\x5e\x69\x4c\x09\xf4\x0c\xee\x6b\x00\x39\xec\x18\x15\x62\x55\x8d\x55\x04\x64\xa4\x80\xcd\xa4\x99\xa9\x0d\x57\x29\x2f\x74\xbe\xeb\xe8\xe2\xb0\xc3\x33\xde\x36\xd5\x23\x34\xbe\xb2\x95\x10\xa9\x9b\x05\xfc\x2a\x57\xf5\xa5\x84\x5a\x03\xb7\x1f\xff\x7c\x71\x75\x33\xbf\xb8\xfa\x69\xfe\xe9\xfa\xe2\xdd\xe5\x5f\x3d\x12\x72\xcb\x4d\x9b\xe2\xed\x36\x17\xf6\x74\x71\xd4\x4d\xad\xe7\x0b\xca\xd0\xba\x72\x48\x7a\x50\x2e\x67\xca\x9d\x2c\x79\x28\x7e\x9d\xeb\x72\xb5\x6e\x2f\xa8\xde\xca\x4f\x67\xb7\x3f\x1e\xd4\x4c\x20\xd6\x43\xad\x4a\xdc\x6d\x4d\x44\xa8\x5c\xd2\xb9\x87\x30\xd2\x5a\xf3\x80\x1e\x12\xbe\xda\x16\x65\xe8\x38\xd1\x0e\x7a\xbd\x34\x0f\xad\x5e\xe3\xbf\xe5\xeb\x5d\x0b\xe8\x36\x3a\x37\x2b\xd7\x08\x20\x94\x51\xf2\xb8\x51\xda\xeb\x96\xbf\x55\x6e\xb0\x1f\x4e\x32\xb1\x5a\x89\x14\x97\x57\xbd\x60\xf2\xc1\xd1\x11\x98\x84\x7b\xbd\x6d\x14\x49\x94\xf4\x88\x8b\xd9\xe3\xbd\x86\x1f\xe0\x9f\xfc\x4f\xda\xcf\x8a\x73\x22\xc7\x81\xf8\x66\xc1\x55\x47\x20\xf9\xa1\x89\xd0\x1c\x74\x14\x7d\xcc\x99\x4f\x7e\x22\x87\x89\x0b\x19\x84\x7d\xd0\x05\x78\x39\x1e\x17\xea\xdb\x71\x2d\xb6\x19\x4f\x84\xcf\x61\x40\x56\x53\x78\xd7\x1f\x12\xc0\x23\xe9\x57\x45\xfe\x96\x48\x12\x36\xa8\x5d\xb5\x2d\x01\xf0\xdc\x5e\xbb\xf3\xf8\xf9\x5d\x2b\xbd\x0f\x37\xe2\x32\x04\x47\x33\x6a\xef\x11\xf4\x1d\x7d\x51\x20\x68\xd9\x09\x4b\x1e\xb5\x1c\x6a\x35\xff\x44\x13\x8f\x6f\xe6\xaa\xa3\x9b\x3b\xb6\x50\xbf\x3c\xbc\xe9\xd8\xe7\x2f\x2c\x8a\xbc\x97\x60\xf8\x29\xc2\x11\x9f\x72\xbd\x91\x46\x9c\x15\x45\x2e\x17\x65\xac\xb0\x3a\x12\x30\x57\x79\x9c\x84\x0e\x6f\x73\x9d\x96\x89\xa3\x04\x82\xde\x06\xd8\x0f\x79\xf9\x9c\xd5\x91\xb2\x13\xbb\xfa\xe8\xe5\x26\xd2\x13\x00\xf4\x23\x67\x55\x5b\x8c\xcd\x1d\x8c\x1d\xbe\xbf\x4f\xee\x2a\x3f\x66\x49\xb6\x2c\x8a\xee\xc1\x74\x6b\x60\x58\x62\x2d\x73\x5f\x07\x0b\xb8\x03\x35\x45\xcb\x65\xc1\x31\x80\x5e\xb5\x51\xba\x18\x40\xfc\x55\x33\x0e\xdc\x35\x0c\x1b\x53\xcd\x98\x41\xbb\x61\xcd\x0d\x9a\xf3\x45\xb2\xae\x36\x1c\x7a\x53\x65\x42\xad\x37\xd7\x9b\xc7\xc7\xb9\x4d\x06\x85\xd1\x26\xe8\x68\x90\xe4\xd8\xae\xa8\x5a\x7a\x89\xde\x71\xde\xee\xd8\x62\xf4\x2f\x3a\xbc\x0c\xe0\x1c\xcd\x78\xa9\x92\x35\xdb\x66\x1c\x93\xc9\xd7\xdc\xe0\x92\x76\x58\x12\xbe\x90\x99\x2c\x80\xa5\x07\x43\x9c\xb5\x11\xb6\xcf\x3c\x9e\xdf\x3b\xb2\x73\x1e\x28\x99\xfa\x16\xfd\x91\x98\x5d\xdf\xab\xaf\x8a\xda\x0d\x5b\x36\x3e\x86\x86\x2d\x4b\x42\xec\x86\xe9\xb0\x07\x31\x2c\xcb\xd0\x97\x71\x33\x4b\x25\x7e\xaa\xff\xbc\x32\xde\x2d\xd6\xcb\x78\xc4\x0a\xa9\x78\x8c\xb8\x7d\xea\x1a\x1f\xad\x3b\x6b\x99\x69\xde\xa1\x33\xef\xca\x46\xc9\x8e\xae\xb2\x53\x5d\x2e\xba\x48\xe2\xb1\x55\xfd\xa5\xf7\x05\x43\xdc\xbe\x7d\x2a\x67\x69\x7c\x00\xf2\x42\x14\x72\x9c\xbf\x27\xea\x34\x2f\xc4\x09\xfc\xbc\xbd\x70\xca\x30\x1c\xdc\xe7\xc6\x42\x0b\xc2\x51\xde\x68\x03\x2c\x61\xdb\xea\xaa\xdd\xce\xc7\x60\xc2\x8f\x9c\x2f\xa9\xf6\x2c\xa5\xfd\x5a\x34\xbf\xff\xa1\x65\x58\x1a\x9d\xfe\x4b\xc9\xed\x79\xf8\x71\x79\x83\x5c\x39\xc7\x74\xba\x90\xcd\x6d\xd5\x7e\xfc\xd4\x6b\xbd\xad\x86\xd7\xe2\x85\x3f\x38\x13\xb9\xad\x37\x37\xf6\xd7\xc3\x4f\xa1\xcb\x8a\x1b\x6d\x9b\x4b\x0d\x9c\x31\x7a\x89\x0c\x8c\xdd\x14\xc2\xad\xf5\x1e\x31\x92\x5f\x4a\x51\x0a\xbb\x80\x16\x65\xba\x6a\x7a\xb9\x47\x58\xca\xa1\x4b\x6b\xfd\xc8\x36\x65\xb2\x66\xae\x70\x96\x8a\x8c\xef\x2a\x5d\x03\x23\xb1\xd0\xc0\xe7\x39\x8a\x3a\x2b\x62\x61\x4e\x4a\x53\xe8\x0d\x00\x8c\x43\xb9\x79\xa9\x60\x97\x33\xee\x76\x57\xdb\xf9\x5e\x61\x97\x3b\x30\xb4\x79\xf3\xe9\xe2\xfc\xf2\xdd\x65\x2d\xae\x78\x76\xf3\xe7\xf8\xdf\x3f\x7f\xbc\xfe\xf3\xbb\xf7\x1f\x7f\x8e\xff\xf6\xfe\xec\xee\xea\xfc\xc7\xf9\xa7\xf7\x67\x57\x95\xe8\xe3\xd9\xed\xd9\xcd\xc5\xed\x9e\x00\x63\xb3\xd6\xee\x89\xe0\x11\xf9\x9d\x83\x3c\x3b\x65\x07\xe7\x67\xa0\x5a\x5f\xb3\x33\x47\x05\x58\x21\xab\x74\x41\x62\x40\x95\x64\x08\x8e\xc3\x58\xf2\x5b\x5e\xf0\x73\x5e\xf0\x4c\xaf\xa6\xec\x8c\x11\x20\x1c\x81\xfe\xc6\x5a\x48\xc4\x93\x66\x67\x07\x8b\xb0\x66\x52\x12\xde\xf0\x41\xba\x56\x2f\x89\xa1\x30\x13\xb1\xc8\x89\xcb\x6a\x9b\xa9\x8b\x07\xa1\x8a\x12\x48\x68\x79\x96\x31\xaa\xd6\x7d\x21\xca\xd8\x77\xad\x34\x72\x23\x33\x9e\x07\x95\xd1\x8f\x54\x16\xbc\x52\x5c\x5b\x3d\x41\x53\x33\x1d\xdc\x3d\xe4\xee\x2e\x19\xb4\xfb\xfc\xfd\x25\xd8\x7d\x49\xe1\x24\xb4\x5c\xe5\x33\x85\x0c\x78\x54\xe3\x86\x43\xf2\x49\xa1\xc9\xb3\x8a\xd5\xd3\x97\xbb\x17\xe2\x51\x54\xe0\x2e\x06\xf1\x5c\x2f\x4a\xdf\x48\xf7\x1f\x17\xaa\xc8\x77\x83\x8d\xb9\x5b\xc8\xb6\x36\x60\x90\x13\x96\xad\xaa\x3c\x8a\x8e\x2f\xe6\x4a\xbf\x02\x0b\xcf\x01\x2d\x29\x2e\xe3\xc3\x2f\x88\x6b\xe9\x78\x74\x64\xf6\xe6\xfd\xb5\x8e\x43\x4c\x88\x03\xa3\xb0\xd0\xa5\x4a\x0d\xa1\xee\x36\x52\x9d\x6e\xf8\x2f\x2f\x5d\x4f\x91\x60\xc2\xeb\xff\x00\x79\x98\xc8\xec\xf3\x6b\x67\x0f\xb9\xfe\xe1\x9a\xa9\x9e\xf1\xda\x6f\x22\xbb\x93\x15\xde\x7a\xe1\x61\x8e\xf8\xc1\x07\xb1\x6b\x9b\xbf\x86\x86\x1b\x8b\x89\xc8\xa1\x90\x6d\x2e\xec\x17\x3d\x38\x31\x43\xcc\xa9\xff\x37\x24\x21\x54\x74\x66\xdb\xcf\xee\x38\xde\x7f\xd4\xb6\x69\x45\x1a\x0c\x37\x7c\x06\x8b\xf0\x51\x4d\x76\xce\x10\x77\xe0\x5c\xde\x94\x74\x41\x01\x55\x3b\x59\xff\xa1\x17\x6c\x09\x19\x48\x98\x68\xc7\x72\x01\x21\x0e\x98\x0a\xa7\x1a\x01\x14\x53\x0d\x30\x83\x5b\x02\x99\x30\xe0\xf8\x57\xf6\x8d\x29\xbe\x94\x14\xbb\x7d\xf5\xfd\xb8\x7b\xb6\x40\xea\x71\xe4\x9a\xad\x93\x72\xfb\xbb\x1c\xda\x55\x2a\xd9\xc6\x3b\x77\x5d\x2a\x7b\x15\x3f\x05\xec\x65\x78\x5c\xb3\x56\x29\xfd\x73\x6f\x92\x90\x73\xc9\xe7\xf8\xfd\x67\xa3\x11\xfd\xa9\xc6\x1e\x4a\xd5\x01\x24\x9d\x4a\x8f\x2f\xb4\x05\x4f\xee\x1f\x79\x9e\xa2\xdf\x16\x70\x28\x53\xf6\xa3\x7e\x14\x0f\x22\x9f\xb0\x44\xe4\x05\x27\xea\x2e\x03\x81\x78\xd8\x50\x54\xce\x4c\x41\x86\x06\xf2\xa0\x29\x53\xe6\x82\x15\x72\xb5\xb6\x8f\xe8\x08\x46\xa1\x73\x7b\x1c\x15\xc8\xda\xb8\x15\x09\x91\x25\x75\x0c\xc0\x32\xe3\x0f\x4d\x2e\xb2\x43\x58\x1e\xd8\xa5\x4f\x33\x75\x71\x4a\xa7\xc4\xd3\x07\x7c\x71\xf4\x88\x76\xba\x08\xae\x6c\x76\x2a\xa1\xbf\x4f\x58\xf4\x8f\xe9\x74\x0a\x24\xf4\x2f\x47\xad\x7b\x9c\x90\xb8\xf6\x80\xb6\xce\xb4\x36\x22\xdb\x79\xbe\x1f\x9f\x0f\x03\x00\xcc\x5f\x0a\xa1\x8c\x44\xb7\x4f\xcb\x6e\xb8\xa9\x07\x09\xbe\x6e\x4c\xa5\xfd\xb5\x3e\x3a\xdb\xb2\xa3\x1c\xd0\xf9\x1b\x51\x12\x7e\xbf\xfd\x21\x76\x50\xf6\x70\x7b\x59\x4a\xab\xb1\x29\xb1\x3f\x69\xd9\x11\xd2\x3f\x88\x86\xaf\xb5\x24\xe2\x2c\x39\x28\x8d\xb0\x7d\xcc\x1a\x99\x9d\x47\x24\x75\xf6\xe4\x67\x8e\x4c\xcd\x1c\xe2\x17\xb8\xa9\x4f\xf7\xe8\x6d\xb1\x5f\x7a\xa8\xb5\x43\x23\x53\x5f\x43\x8e\xfa\x18\x4b\x0a\xb3\xe7\xb2\x1d\x1c\x58\x3e\x11\x16\xbc\xeb\x69\x14\x1d\xa8\x04\x3f\x20\x25\x2b\x44\x4f\x3c\x97\x54\x14\x2c\x31\x85\xce\xf9\x4a\xb0\x8d\x48\x65\xb9\x69\x3d\x6c\x7c\x73\x8f\x81\x01\xea\xac\xdc\x74\xb3\xfa\x1d\x6b\x4f\x87\x46\xe2\x7f\x9d\x43\x75\x83\xed\xe9\x33\x8f\x70\x77\x0a\x70\xd4\x5e\x0c\x05\xd0\x58\xdb\x8b\x33\x97\x06\xf8\x27\x0f\xc9\x80\xf4\xc5\x60\xd1\x10\x48\xdd\x6d\xd1\x05\x5d\x99\xdd\x13\x17\xe1\xa2\x9f\x18\x9c\x55\x88\xbe\x76\x5f\x0a\x75\x70\xe1\x78\x1d\xa8\x5c\x97\x0d\xee\x9d\x41\x01\x6f\xb0\x22\x23\x56\x78\x42\x3f\x41\x81\x04\xd1\x28\x34\x5b\xba\x9c\xba\x7b\x11\xb1\x94\xa5\xc0\x17\xff\x88\x94\x37\x7f\xfe\x83\x71\x60\x0e\xc2\xdb\x04\x03\xa6\x08\x95\x60\x7c\xe4\xe1\x95\x83\x59\x61\x0f\xb1\x08\xe0\x12\x4b\xb9\x2a\x5a\x0b\x08\x28\x44\x28\x0b\x7f\xf2\x13\x2f\xb3\xf6\xaf\x53\xf9\xf0\x55\xd4\x13\x3c\xfb\xf9\x86\xe1\x50\x13\xb3\x78\xde\xd7\xd0\xa8\x90\xfd\x40\x2f\x18\xae\xf9\x01\x86\x61\x65\x1e\x70\xd0\x1d\xb5\xbc\x1d\x76\x51\x24\xeb\x60\x79\x00\x97\x9a\xe7\x80\x23\xb1\x58\xea\xe7\x26\x70\xa5\x23\x86\x36\x06\x23\xca\x95\xd2\xb1\xcc\x87\x56\x02\x02\x55\xf6\x00\xd2\x71\xb1\x4c\x16\xfb\x11\x5f\x23\x09\xc4\xf6\x2d\xb5\x42\x23\x92\x87\xfa\x59\x89\x37\xc2\x0b\x43\x22\xed\x90\x83\xcb\xe2\x13\x89\xb4\x47\xeb\x1c\xda\x55\x22\x87\x99\xaa\x56\xd5\x18\x24\x07\xc9\x92\xb9\x40\xea\x5b\x63\xad\xb7\x42\x3e\xd8\x8d\xda\x5c\xd6\x7e\x81\xc2\x09\xd0\x5c\x7b\x33\x85\xcd\x8e\xf8\x73\xef\xc5\xce\xc4\x42\xa7\xb4\xa2\x58\xd7\x82\x94\xb6\x3f\x34\x5f\xfb\xa7\x02\x06\x6e\x9e\x07\xb9\xb2\x61\x77\x19\x56\xfa\xc1\xfe\xb8\x07\xeb\xd9\x28\xdc\xae\xc1\x90\xb4\x18\x5c\x8c\x74\x4c\x84\x71\xa6\x39\x0c\x70\x2e\x00\xeb\xc5\x70\xbc\x38\x03\x05\xde\xc1\xf6\xb9\x3b\x53\x44\xb1\x1d\x5d\x72\xf6\xc0\x69\x4e\x1b\x65\x52\x23\xb1\xef\xae\xc2\x02\x03\x2c\x88\x8e\x11\xb2\x5a\xa5\x8b\xbd\x3a\x9d\xec\x99\x82\xaa\x31\xd7\xd4\xb9\xf4\x5a\x2b\x3c\x10\x23\x48\x93\xdb\x89\x0b\x8c\x12\xba\xf0\x9b\x44\x04\x88\x8a\xb9\xf8\x18\x4a\x84\x1d\xbe\x33\xd5\x0a\xc9\x73\x80\xbc\x9b\x8b\xf3\xeb\x8b\xdb\xaf\x86\x1b\x74\xa0\xbd\xd1\xc0\x41\xd7\xce\xb7\x17\xef\xce\xee\xde\xdf\xce\xdf\x5e\x5e\x3f\x07\x72\x90\x3e\x3a\x00\x3a\x78\x43\xcc\xfd\xe7\x5a\x15\xe2\x97\xa3\xee\xe4\xbc\x54\x73\x3e\x22\x85\xc5\x6b\x77\xf4\x99\x3b\x58\x68\x53\x79\xc0\xcb\x02\x10\x0d\x25\xde\x68\x5e\x68\x60\x19\x7c\x88\x4b\x99\x65\x90\xd1\xeb\xbd\xed\x94\x2d\x66\x07\x15\xce\x1f\xc7\xbc\x49\x67\xea\x4c\x2d\x2a\xc2\x10\xe0\x01\x5c\xdb\x47\x30\xe6\xf2\x6e\xed\x00\xe4\x12\x32\x25\xfb\xc4\x09\x56\x52\x89\xd0\x0c\x54\xb7\x2f\x15\xeb\x64\x94\xa6\x49\x7c\x4e\x84\x14\x19\x5e\x43\x6d\x4d\xb7\xe2\x2a\xeb\xd3\x99\x9f\xee\x43\xdf\x43\xdc\xc4\x52\xa1\x61\x5a\xd9\xcd\x37\xed\x4b\xf7\x34\x6c\x01\x18\x77\x3b\x93\x1c\x42\x12\x20\x20\x1f\x26\x92\x26\x02\x45\x8b\x42\xac\xe2\x5e\x22\x92\x48\x2f\x6b\xe3\x6c\x8f\x42\x3b\xd6\x12\x02\x17\x9c\x48\x4a\x92\xac\x34\x85\xc8\xc9\x83\x72\xf6\xf3\xcd\x4c\xbd\xb1\xd7\xd7\x4b\xba\x85\x48\xd8\x06\xab\x40\x1c\x8b\xae\xd4\xef\x2c\x94\xf8\x04\xfb\x0e\x5d\xd6\x1b\xc1\x95\x61\xb0\x35\xb2\x4c\xe4\x61\x65\x60\x7b\x84\x48\x49\xe0\x15\x58\x59\xc3\xef\x5f\x32\x02\x29\xda\xa1\xb0\xed\xa5\x4f\x73\xb1\xd1\x45\x73\x3d\x75\x25\x8c\x03\x72\xf8\x39\x57\x4e\x4b\x02\xcb\xd0\x55\x44\xa0\xeb\xd6\x45\x54\x4d\x27\x19\xb4\x96\x6e\xb1\xb8\xdf\x96\xd2\x13\x2e\xa5\x01\xf7\x7a\x7c\x4b\xb0\xb5\xb6\x07\xa8\x57\x7d\x09\x51\x67\x4f\x58\x91\x01\x06\xcc\x0e\x63\xeb\xad\x53\x53\x3e\x3c\x06\x0a\x02\x45\x1d\x87\xb4\x3d\x6b\x61\xc6\x09\x12\x5b\x2e\xd4\xd3\x2b\xaa\xf8\x3c\x0c\x74\x67\x0e\x73\xa8\x74\xe1\xb8\x24\x3c\xcc\x8f\x30\x8b\xf6\x0b\x9e\xc4\xa4\xb7\x8d\x44\x0c\xe2\xac\x94\xf9\x91\xc2\x64\xb7\x31\x36\xb2\x92\x5d\x8b\xad\x88\xf3\xf2\x5d\x2e\xbe\xe7\xf2\x18\xb3\xf8\x0e\x97\xbe\xac\xae\x39\xcf\x0b\x79\x10\xf6\xe1\xea\xe3\xd5\x45\x8c\x5c\xb8\xbc\xba\xbd\xf8\xe3\xc5\x75\x25\x2f\xfb\xfd\xc7\xb3\x4a\x6e\xf5\xcd\xed\x75\x2d\xa5\xfa\xcd\xc7\x8f\xef\x2f\x1a\x10\x88\x8b\xdb\xcb\x0f\x95\xc2\xdf\xde\x5d\x9f\xdd\x5e\x7e\xac\x7c\xef\xcd\xe5\xd5\xd9\xf5\xbf\xc6\x7f\xb9\xb8\xbe\xfe\x78\x5d\xab\xef\xee\xbc\x1f\x4c\x51\xe9\x46\xbb\xfb\x27\xc4\x6a\x23\x8a\xcc\xd6\x6d\x5c\x95\x06\x3d\x62\x17\x0f\x04\xa2\xed\x5b\x8e\x2e\xed\x3a\x8d\x99\xf3\x71\x63\xd8\xa6\x8e\x5a\x75\x4f\xaf\x65\x5a\x19\xba\x2d\x3f\xee\xd8\xb3\xb7\xda\xfc\x29\x80\x81\xbd\x06\xa0\xaf\xa5\xe6\xb8\x25\xe9\x60\x1c\xda\x2d\x04\xb4\x56\xbc\x53\xc9\x47\xa5\xcf\xde\x52\x57\xc7\xbe\x76\x06\x4a\xa6\x3d\xcc\x36\x4f\xc5\x6a\xd1\xd7\xe8\xa8\x32\x97\x34\x2e\x53\x67\x28\xb8\x0f\xa3\x8b\x1b\xba\x61\x57\x4e\xb4\x1c\xbb\x44\x27\xdb\xd3\x4f\xfa\x59\xd4\xc6\xb6\x9f\x2a\x69\xb6\xbd\x46\xb9\x31\xa2\xdd\x40\x7d\x34\xa6\xdd\xb7\xdc\xdc\x8f\x6d\x37\x55\xd2\x6c\x37\x98\x7d\x07\xb5\x1b\x1c\xde\x45\x3b\x1d\xca\x88\x43\x2c\x2e\xa6\xda\x3c\x9f\xab\xed\xbf\x12\x69\xbb\x0e\x6b\xa3\xdd\x00\xcf\xfb\xbc\xdc\xf2\xe1\x81\x0c\x68\x8d\xdf\xae\xbc\xc6\x0e\x7e\x03\x9f\x42\x0f\x17\xb9\xe0\xf7\xa9\x7e\xa4\xf9\xa8\x03\x45\xd9\xa0\xd3\xbc\x3a\x40\xf6\x0c\x77\x57\x44\x91\x53\x04\x0a\x41\x6b\xa1\x78\x40\xcd\x49\xe2\xb7\x46\x1b\x2c\x12\x25\xad\x13\xca\x00\x85\x8f\x0a\xb3\x33\x53\x68\xcd\xb7\x09\x9b\xda\x59\xb5\x2d\x22\x0a\x08\xe8\xaa\xb7\xa1\x31\xb8\x6e\xa2\x89\xa5\x7c\x8e\x32\x07\x6c\xdd\x22\x87\x37\x13\x0c\x88\x54\xe0\x4c\xce\xed\x83\x27\x17\x89\x34\x22\x12\x77\x6a\xbd\xb1\xbf\x1c\x27\x05\x51\xf0\xa2\xd5\xed\x3a\xd8\x1f\xce\x93\xa2\xe4\x19\xfb\x52\x8a\x7c\x47\x4c\x7a\xe8\xab\xc4\xbf\x24\x5c\x61\xe2\x48\x21\x36\x5b\xc8\xce\x8e\x33\x1e\x66\xea\x67\xc0\x4d\xe0\x14\xbc\x30\xec\x8f\x3a\xe3\xd6\x2c\xc6\x2f\xd3\x25\xbc\xe1\x05\xdc\xc5\x7f\xc1\x3a\xfc\x67\xd3\x99\xaa\x88\xa5\x44\xbf\xaa\xe8\xa6\x4c\x67\xca\xa9\x15\xa4\x3a\x31\x53\x78\xf1\x4d\x75\xbe\x3a\x25\x9d\x5f\xbb\xd8\xf5\xfd\x42\xeb\xfb\x53\xa1\x4e\xc1\x27\x55\x9c\xf2\xb2\xd0\xa7\x80\x9e\xc2\xf9\x37\xa7\x4e\x0e\xd4\xe9\xa9\x9a\xd3\xb5\x7c\x10\xf0\xff\xa6\xeb\x62\x93\xfd\x83\xd9\xae\x7f\x39\x59\x65\xf9\x89\xfd\xed\x49\xfc\xdb\x13\xf7\xdb\x13\xf7\xdb\x13\xfb\x33\xfc\x7f\xdb\x1d\x86\x77\xc4\x2f\xdc\xde\x65\x93\x99\x92\xca\x88\xbc\x00\xeb\xe7\x31\x97\x45\x50\xa5\xd9\xb1\x17\xff\xf5\x5f\x6c\x9a\xf3\x47\xcc\x6c\x7c\xcb\x0b\xfe\x09\xfd\x8b\xff\xfd\xdf\x2f\x20\xa0\x8a\x39\x3e\x5b\x9e\x7f\x29\x45\x31\x53\x46\xd8\x4d\xc8\xfe\xbf\x99\x82\x08\xec\x66\x37\x2f\xd0\xef\x8a\x3e\xc8\xd4\xb0\x7f\xc1\x32\x2f\x91\x55\x32\x35\xb6\xa4\x8e\xec\x02\xc9\xb3\x16\x05\xe9\x0e\x17\xfd\x97\xec\x2d\x7d\x7f\xc4\xb6\xfe\x92\x55\x77\xb5\xd3\x45\x31\x5f\x32\xb8\x40\x33\xcd\x1d\x76\x8b\xf9\xc5\x0b\xef\x64\x6a\x5c\xdb\x1e\x69\x40\x03\x9e\x35\x4c\xdf\xbe\x57\x6e\x90\xd9\xda\x79\xee\x1b\xc7\x08\xc4\x0a\x42\x1c\x02\xa2\xe7\xd2\xee\x90\x1b\xf4\x84\x82\xe5\x86\x3d\x07\x9b\x94\x42\xe7\xbe\x3c\x74\x5c\x98\xdf\xbf\x3e\x3d\x9d\xb0\x95\x81\xff\x59\x7c\x81\xff\x01\xf4\xd0\x53\x91\xb3\x36\x06\xd3\xe3\xe2\x9a\xb3\xbc\x7f\x26\x9e\x02\x54\xf7\x35\xf8\xc0\x6b\xcb\xf4\x4d\xa9\xd2\x4c\x84\x8c\xc8\x4a\x48\x24\xd3\x4e\xc1\x1e\x1d\x63\x75\xe5\x15\x98\xe3\x85\x48\xb8\x3d\xf8\x1a\x75\x23\xd6\x54\x2f\x0b\xa1\xd0\x1b\x96\x07\x61\x36\x8e\x9e\x2b\x30\x8b\x01\x19\xc9\x0b\x42\xa0\x0b\xf8\x23\x54\x02\x04\xdb\x93\xfa\x47\x6c\xa7\x4b\xe2\x8a\x06\x06\xd4\x54\x24\x19\x10\xf2\x3b\x16\x18\x96\x8b\xa2\xcc\x15\xe3\x6c\xcb\x55\xca\x0d\xac\xc0\x65\x0e\xd1\xce\x9c\xf1\x66\x43\x27\x88\xce\xd5\x65\x01\xdc\x46\x88\x2c\x88\x47\x02\xc9\xbc\xa3\x36\x4f\xa2\x46\xe0\x9d\x00\x9c\xc2\x8d\x1f\x4e\x67\xca\x49\x87\x91\x58\x1c\x7a\xca\x12\xbd\xdd\x11\x73\x4d\x7d\xd0\xa5\xf3\x9c\xd1\x70\x4f\x02\xde\xa4\xfe\xdd\x09\x93\xd5\xd0\x1a\xf0\x86\x17\x91\xf8\xb1\x93\x8f\xfe\x4e\xa8\x44\xa7\x22\x37\x2f\xed\x36\x94\xfe\xdd\x81\xf6\x83\x34\x61\x32\xe0\x94\xb2\x97\x1b\x79\x0b\x6d\xf1\x5e\x60\xc7\x8e\x4e\x85\x69\xba\xcd\xce\xd9\xbf\x55\x7e\xed\x28\x98\xb6\xf6\xd2\x7f\x7e\x55\x44\x4c\x0c\xf3\x74\x6f\xce\xc3\x5d\x10\xb8\x65\xe3\x13\x17\x0b\x45\x1b\x87\x8c\x13\xa7\x34\x2b\x0b\x10\xb3\xcb\x85\x29\x66\x8a\x6e\xe0\x09\x5b\x0a\x6e\xed\xbc\x09\x4b\xcc\x03\x1e\xc6\x78\xdd\x17\x8f\x3a\x60\x70\x9c\x4c\x09\x60\x63\x2b\x85\x07\x27\x31\x7e\x0d\x10\x05\x3c\x29\x10\x60\xd0\x29\x4a\xee\x4c\x15\x18\xac\xd6\x03\xf1\x80\x71\x70\xaa\x17\x75\x85\xa9\x58\x74\x05\x46\x62\x87\x81\x62\x56\x6f\x07\x7e\x60\x0f\x1e\xec\x1d\xc2\x40\xa2\xc3\x11\x2c\x6e\x82\xd6\xe2\x3e\x0b\x31\xdc\x98\x7a\x1c\x7c\x33\x5d\x9b\xaa\x67\x20\xa0\x01\x87\xf9\x2d\xec\x4f\xf7\x3a\xac\x8c\xc8\x9d\x24\x07\xf6\x15\x89\x02\xd7\x32\x4f\x4f\xb6\x3c\x2f\x76\x6e\xf9\x66\x72\x01\x4c\xfe\x99\xbc\x17\xec\x2c\xcf\xf5\xe3\x53\x8f\x42\xe7\xd1\xd2\xf5\xc2\x3e\x06\xd8\x3e\xf6\x95\xdf\x4a\x13\x5a\x77\x77\x1c\x46\x49\xda\xe5\xf8\x68\xad\x27\x17\x45\xbe\x9b\xdb\x85\xb8\xd9\x76\x9e\x14\x83\x72\x28\x86\x1b\xb9\xe3\xd8\x4e\x6b\x2e\x8c\x4e\xb6\xd3\xca\xac\xfe\x7a\xd8\x4e\x5b\x88\x4c\x9b\x6c\xa7\x97\x57\x97\xb7\x97\x67\xef\x2f\xff\x6f\xad\xc4\x9f\xcf\x2e\x6f\x2f\xaf\xfe\x38\x7f\xf7\xf1\x7a\x7e\x7d\x71\xf3\xf1\xee\xfa\xfc\xa2\x9f\xbe\xa8\xd9\xfa\x60\x82\x9f\xb0\xb8\x9e\xd7\xec\x36\x02\x6a\x60\xee\x01\xd9\xdf\x24\x65\x09\xab\xca\x6e\x66\xa9\x56\x13\xd8\xa8\xaf\xd9\x45\x9e\x5f\x6e\xf8\x4a\x7c\x2a\xb3\x0c\xe0\x54\x98\xe8\x73\x9e\x0b\x78\x78\x4e\xd8\x27\x9d\x5e\x46\xbf\x83\xec\xc4\xd6\x6e\x40\xfd\x3c\x4d\x73\x61\x0c\x56\x3f\xa1\xfa\x23\xf0\x90\xcf\x7c\x24\xf0\x1c\x7f\xe0\x32\xb3\xef\xb7\xd7\xec\x0d\x4f\xee\xf5\x72\x89\xd9\x34\x13\x9f\x47\xc5\xbe\x94\xba\xe0\x4c\xfc\x92\x00\x65\x57\xfb\x3a\x79\xaf\x57\xdf\x00\xaa\x3c\x20\x3c\xd5\xf1\x48\x01\xc9\xb2\x79\xfb\x75\xde\x7e\x10\x50\x2f\x3f\xe0\x4f\xdf\xe1\x2f\xdb\x1d\x94\x45\xf6\x04\xd9\xf2\xef\xf5\xaa\x5d\x40\x06\xac\x6b\x52\xbd\xa1\x40\x42\x42\xdc\x1b\x7a\xc5\x8c\x54\xf7\x33\xf5\xf3\x5a\x28\xa6\xcb\x1c\xff\x04\xcf\x7c\x6b\x66\x66\xa5\x59\x0b\x50\x94\x9d\xb0\x47\xc1\x36\x7c\x87\x66\x33\xbc\x09\xbc\xea\x05\x2c\x19\xb8\x45\xec\xaf\x33\xa9\xec\x69\xb1\x95\x2e\x2f\xa1\x3e\xf5\x4f\xf1\xe2\x72\x84\x75\xfc\x78\x3e\xd9\xbe\xfb\xb4\x82\xcf\x03\x57\x59\xc0\x4d\x3a\x80\x10\x9d\xdc\x20\xaa\xa9\xf5\x7d\xb9\x0d\xd4\x96\x2f\x5c\x70\x12\x86\xfb\x41\xcb\x94\xa5\xe5\x36\x93\x89\x3f\x77\x1f\x75\xde\xc9\xdf\x8b\x09\x34\xc3\x6f\x9d\x7a\x96\x58\x5f\xc7\x5a\xb2\x73\x22\x24\x5d\x0f\x93\xef\x33\x73\x19\x33\xa9\x92\xac\x04\xb9\xb0\xd2\x88\xfc\xa4\xc8\xe5\x6a\x05\x06\xb8\x4b\xfd\xfb\xf5\x93\x1d\x07\x32\xc5\xe3\xb3\xdc\xe2\x1c\xf4\x4c\xaf\x64\xc2\xb3\x18\xdc\x1c\x50\x11\x9e\x4d\xd5\x6d\x7b\x12\x53\x85\x3c\x08\xd7\xa0\x4e\x42\xa4\x6d\x2e\x80\xd0\x77\x0e\x47\xf9\x9c\x8e\xbb\x63\xda\xbd\x64\xf6\x81\x8e\xed\x8a\xb9\x4e\x5d\x78\xc1\xdd\x70\xa1\x6e\xa7\xa8\x05\x26\x26\xaa\x6d\x33\xfd\xa8\x44\x0e\x16\x2c\xc0\x3e\x6c\x4f\x95\x06\xdb\xc4\xab\x6c\x79\x7c\xb2\x53\x99\x5b\x7a\x20\x36\x26\xd2\xae\xe4\x83\x50\x5f\x9f\x9c\x3a\xaa\x20\xe1\xc9\x5a\xcc\x9d\x5d\xfe\xd4\x47\x96\xbf\x00\x46\x1e\x56\x4e\xee\x22\x3e\x4a\x7d\x78\x13\x9e\x4e\xd8\xe2\xe6\xd9\x85\x81\xc4\x9e\x8c\x2c\xdb\x88\x79\x2a\x92\xfb\xaf\x7e\x34\x07\x90\x95\x6b\x08\xe3\xec\xad\x48\xee\xd9\xdd\xf5\x25\x26\x07\xcb\x82\xd9\xa3\xc0\xac\x83\x7c\x4f\xe7\xdb\xad\xe0\xab\x67\x20\x78\x1a\xaa\x3f\x14\x28\xe7\xbd\xea\x9a\x6d\x10\x01\xa2\x20\x5f\xd2\x1e\x92\x94\x4b\x03\x40\x30\x5e\x38\x55\x1a\x70\xc4\x33\xb3\x01\x11\x9a\xb2\x88\x94\xdb\x32\xbe\x10\x59\x07\x01\xe3\x56\xa7\x73\x17\x27\x39\x16\xcc\xd3\x28\xcb\xf9\x31\x28\xea\xe8\xf2\x18\xb8\xb5\x58\x6f\xe9\x8b\xec\xfe\x0f\x26\x62\xdb\xd0\x31\x0f\x34\xbc\xeb\xb9\x81\x6c\xef\xa5\x5c\xb9\x68\x9b\x5c\x92\x54\x0e\xe6\xf7\x83\x28\xbc\x3d\x2f\x6d\x49\x9f\x74\x4a\x30\x3d\xcf\x69\x66\xad\x20\x41\xde\x93\x80\xab\x88\x9b\xe0\x85\xf3\x0d\xf8\x06\x4c\x21\x78\xca\xf4\x92\xbc\x89\xdb\x6d\x26\x81\xe1\x37\x45\x32\x71\x20\xd3\x30\x55\x74\x7c\x5c\x9a\x6b\x6c\xc4\xf9\xf1\xc9\x01\xf1\x7a\xe3\x8d\x21\xc8\x65\xfb\x55\x75\x72\xd7\x6d\xaa\x63\x45\xe1\x7c\x3e\xd2\xa1\x4f\xe8\x7e\x6f\xda\x2a\xd3\x0b\x18\xa8\x6e\x50\x5c\xcf\x01\x6d\x4f\xa7\x5c\xa6\x63\xae\x77\x37\x26\x1f\xfd\x4f\xfb\x1a\xf8\xd1\x79\x3a\x7c\x4d\x6e\x9a\x19\xf1\xaf\xc7\x11\xfc\x5a\x56\xfb\xbe\xb7\x36\x04\x08\x8d\x8f\x10\x7a\x6b\xbc\x20\xf5\x01\xd8\x15\xfe\x38\xee\x78\x56\x57\xfb\x72\xd4\x44\x37\x79\x52\xf6\x8c\x65\xa0\x56\xe9\x9f\xe4\x23\xc8\x2e\x70\xe7\x7a\xc6\x8b\x6e\x47\x9a\x4a\x45\x3a\x3f\xa0\x0f\x17\xf4\xdb\x61\x7d\xf1\x23\x8d\xcd\x03\x97\x97\x3a\xb1\x37\x63\xca\xf3\x34\xf4\x63\x02\x2f\xe2\x84\x6f\xc1\xeb\x0c\x5e\xfc\x87\x57\x53\x57\xc7\x75\x48\xa6\xb1\xc7\x03\xa6\xb8\x23\x5c\x59\xb7\x48\x77\xec\x5b\x47\x7e\x91\x22\x9a\xd9\xae\x9c\xb0\x5c\x2b\x69\x26\x83\xd6\x6e\x7d\x85\xb9\xf3\xea\x98\xc5\xf5\x1c\x67\x47\x59\xe8\x10\xdc\x80\xfe\x5c\x02\x5b\x6a\x9c\xc0\x06\x07\xe4\x65\xda\x01\x8c\x70\xd6\xa6\x3b\x84\x46\xc0\x6d\x47\x01\x7e\xb7\xb9\x70\x61\xb2\x9d\x28\x3c\x8d\x41\xe6\xe4\xd0\x20\x0a\xe4\x7b\x5d\xa5\x75\x71\xcc\x0d\x9e\x8a\x0b\x62\x36\x64\xd9\x26\x7a\xb3\xd5\x0a\x50\x38\x98\x94\x35\x53\x54\xb8\x13\xb5\xf6\x81\xa4\x4a\x66\xdf\x84\xfc\x77\x98\x27\x22\x8c\xce\x1e\x28\x62\x18\x69\x2f\x80\x1c\x9e\x6d\xe0\xb9\x7d\x0a\xd9\x87\x3f\x84\xb2\xe9\x22\x03\xe0\x7b\x4d\xd9\x39\x17\x2b\x69\x0a\x11\x27\x43\xc6\xbf\x7f\x32\x11\xce\x8a\xaf\xa0\x6f\xe8\x3b\x45\x38\xf7\x19\xfd\xf6\x7c\x1a\xd1\x9e\xdd\x56\xa4\x97\xfe\x77\xfd\x8b\xa1\x96\xaf\x1e\x8e\xc3\xca\x7d\x87\x6b\x00\x1f\x3b\x06\x89\xae\x8c\x57\x4d\xf0\x93\x44\x14\x44\x3c\xe0\xf7\xec\x14\xad\x4a\x9e\x73\x55\x08\x61\x66\x8a\xe2\xac\x48\xd8\x16\x73\x92\xd4\x70\x7f\xde\x94\x4f\xb4\x29\x90\xff\x08\x7e\xb2\xe4\x32\x2b\xf3\xce\xd7\x35\xae\xca\x83\x58\x16\xfa\x46\xe9\x1c\x8a\x65\x6d\x93\xe6\xf3\x75\xa3\x5d\xe4\x49\x42\xea\x51\xd2\x6a\x3a\x6b\x47\x17\xdc\xe5\x32\x7c\xbe\xbd\x6b\xb5\x23\x85\xf7\x0f\x66\xbe\xd5\x23\x4e\xbc\x3f\xff\xc1\x7c\xd2\x1d\xc9\xcf\xe6\x4b\xc3\x05\xd8\x83\x16\xf8\xd2\xa5\x23\xc1\xcd\x3d\x04\xda\xf6\x79\x1e\x06\x71\x51\xee\x0d\xc7\x75\x9e\x5d\xb0\x6a\xd7\x5c\xa5\x99\x7d\x91\xf3\xa2\x76\x03\x05\x58\xb3\x7d\x01\x14\xee\x70\xec\xce\x61\x83\x94\x90\x79\xd2\xc8\x27\xdc\x37\x4e\xb5\x44\xc4\x5e\xe8\x60\xad\x96\x6a\x7a\x60\x5b\x5a\x4a\xb0\x61\x48\xbd\xd5\x6f\xd8\x6f\x6e\xbf\x5c\xc4\x6d\xff\x4a\xe6\x4b\x75\xaf\x2d\xe5\xea\x57\xf0\x6e\xfe\xd0\xbc\x12\x12\x3a\x73\xe8\xa2\xf6\x60\xfe\x23\x4f\x1d\xc8\x9b\xb2\xa7\x76\x4c\x3f\x3d\x53\xa4\x62\x8d\xc1\x74\x88\xa2\x22\xdb\x98\x61\xaf\x7c\x32\xed\xab\x7f\x74\x5c\x53\x3b\xb6\x84\x45\x05\x84\x6e\x3a\x49\xca\x1c\x22\xdd\xe4\x8d\x63\x02\x2f\x61\x33\x8a\x37\x05\x4c\x0f\x8f\x4f\x42\x3b\xb1\xcd\x4c\xf2\xee\xd7\x4a\xa7\x6e\xc1\xeb\x86\x7a\xdc\xfe\xd2\x27\x99\xa5\xdc\x14\xcc\x14\x62\xdb\x7a\xfc\x56\xac\xcb\xaa\xe4\xfc\x11\xf6\x65\x10\xbc\x1f\xb8\x75\x46\x5c\x46\x67\x91\x87\xe4\x4f\x37\x1f\xaf\xd8\x96\xef\x00\xea\x57\x68\x86\x5f\x05\xba\xcd\xfa\x41\xb5\x6f\x06\xaa\x9d\xaf\x9e\x2a\x38\xa6\x0e\x33\xdc\xee\x8e\xa7\x1a\x9b\xc6\x22\xac\x19\x5a\x92\xf6\xcc\xca\x75\x76\xb2\xcd\xb8\x8a\xd0\xdc\x66\xca\x6a\xd5\xc7\xe1\x7b\x1f\xc8\x23\x80\x14\x34\x00\x3c\x64\xb4\x16\xf2\xb2\x15\xef\x5b\x55\xd1\x3f\x2a\x62\xdf\x79\x46\xf4\xe2\x18\x3f\xa0\x78\x05\x4f\xec\x36\x41\xb2\x08\x87\x42\xf0\x40\x16\x6e\x00\x63\xda\xc9\x7f\xcd\x93\x8c\x1b\xd3\x0b\x4a\x79\x0e\x02\xf7\x38\x49\x6f\xff\xf1\x55\x6d\x27\xa2\xe6\x80\xca\x03\xdf\xa5\xfe\x63\x20\x07\x70\x47\x57\xd0\xaa\x8a\xec\xfd\x48\x33\x81\x22\xfd\x44\x8f\x04\xbf\x47\x1e\xc4\x7b\xb1\x73\x0e\x3a\x3a\xaa\xf8\x46\x4c\xbc\x6f\xd1\x3b\xcf\x22\x8c\x5b\xb3\xe0\x99\x02\x10\xe8\xbb\xb8\x79\xec\x9d\xd6\x13\x84\x23\x52\xe5\x1c\x8b\xe5\x31\xa0\x67\xa6\xde\x69\x3d\xe5\xfe\x11\x4b\xed\xa7\xe3\xa6\x5e\x21\x81\x80\x00\x62\x57\x9b\xce\xe1\x7b\xf3\x47\xa9\x50\x55\x4d\x6e\xec\x03\x8a\xc6\x09\x56\x14\x34\xc8\x89\x78\xeb\x47\xc3\x52\x64\x50\x29\xa5\x59\x43\x94\x01\xc3\x7a\x50\x3f\x5d\x29\x88\x3f\xca\xb9\x32\x76\x0f\x43\x64\x42\x3c\x08\x72\x4f\x56\x42\xea\x97\x6f\xdf\x7b\x94\x0e\xee\x4b\xd2\x59\xec\xd8\x6d\xd1\xa3\xe3\x98\xc7\x39\xa0\xab\x47\xf0\xb7\x51\x1e\xe6\x07\xbe\xed\xcb\xfd\x3c\xba\xc4\x7d\xb3\xe4\xf9\xa3\xea\x2f\x2a\x10\x60\x06\xe9\xb5\x4a\x02\x68\x3c\x7a\x77\xea\xc8\x1b\xa7\x95\xd1\x7d\xbf\x52\xc8\x60\x07\xc3\xc8\xa3\x62\xff\x75\x13\xa8\x30\x03\x42\xce\xbf\x05\xed\xc1\x0e\xc2\x56\xc0\x41\x87\x5b\x7a\xca\x6e\x84\x60\x9f\x61\xa4\x6c\x65\x9f\x49\x38\x11\x40\xbf\x05\x97\xad\xba\x56\xf0\xed\x4b\xb5\xd4\xc7\x9d\xff\xf9\xaa\x01\x2a\x3d\x6a\x54\xda\xdb\x79\x2c\x6c\x15\x12\x92\xd5\xf3\xb2\x68\x0c\xba\x18\x6a\x73\xfd\x29\xf8\x9b\x28\xb7\xd6\xb5\xd4\x9a\x64\x30\xc5\x87\xf0\xb4\xd5\x16\x89\xed\xe5\x04\xa9\xc8\xef\x95\x7e\x54\x78\x1e\x53\x4d\xec\x3b\xbb\xff\xc0\x66\xc1\x30\x08\x5a\x82\x25\x9e\x86\x2f\x81\x1b\xfd\xcc\xff\x9b\xdd\x60\xc4\x17\xdb\x0c\x8a\x47\x06\xec\x5d\xd2\x2a\x82\x0b\xfc\xbb\xb3\x09\x7b\x33\x61\xe7\x13\x36\x9d\x4e\x5f\x4e\x50\x8e\x9d\x5a\x84\x3f\xc1\xa3\xbf\xe0\x2b\x5b\x36\x69\xc0\x2c\xa3\x0a\x40\xd5\xcc\xda\x27\x8e\xf3\x8f\x87\x6f\x45\x5e\x35\xd7\x05\xcc\x44\xa6\xb4\x29\x42\xc7\x24\x6b\x2d\x43\xa3\x00\x68\x2d\x12\x9d\x3b\xa8\xb6\x29\x74\xee\x60\xa7\x0f\x3c\xe7\x52\x01\x41\x03\x6f\x82\xee\xa9\xe6\x88\xb1\x5d\xfc\xc2\x37\xd0\x7f\xa9\x3c\x69\xad\x1d\xa6\x5b\xdf\xfe\x62\xb7\xa5\xb0\xd2\x63\x2e\x8b\xc2\x1a\x64\x66\xa6\x6e\xd8\xeb\x7f\x61\x67\xdb\x6d\x26\xd8\x19\xfb\x1b\x7b\xc3\x15\x57\x9c\xbd\x61\x7f\x63\xe7\x5c\x15\x3c\xd3\xe5\x56\xb0\x73\xf6\x37\x3b\x6c\xb6\xbc\x2b\x6d\x2d\xa0\xdd\x84\x71\xa6\xca\x0c\x0d\xbd\xef\x1c\xa4\xf3\xa5\xef\x17\x0f\xb3\xb3\x10\xc5\xa3\x10\x8a\x19\xbd\xa1\xab\xf0\xaf\xfe\xf6\x37\x52\xad\x32\x51\xd0\x7a\xa8\x82\x6f\xb1\x82\x13\xe8\xe9\xeb\x99\xf2\x7e\xea\xbf\xda\x16\xff\x95\xfd\x8d\x5d\x95\x59\x66\x9b\x64\x0f\x1a\xbb\x90\x5e\x33\x97\x0c\x25\xd4\xf4\x51\xde\xcb\xad\x48\x25\x87\x74\x28\xfb\xaf\xd3\x5b\x98\xed\x79\x19\x98\x2f\xe3\x3d\xed\x55\xa4\x8e\x39\x7a\x9e\x85\x5a\xc1\x6b\x9c\xc5\xd6\x4a\x27\xe6\x22\xfe\xe9\x78\x23\x38\xd0\xff\xd2\x7e\xa0\x37\x0a\x2a\x80\xc5\x5a\x6a\x07\x1d\x01\xb5\xcb\xd6\x95\xd5\x72\x15\xc4\x97\xfa\xb1\x87\x2c\x08\x03\x7e\x45\x73\xfc\xa7\xc6\x10\x0d\x66\x9e\x27\xf1\xa3\x0a\x59\x05\xd8\x92\x81\xb0\x6b\x50\x6c\xd7\xcb\x28\xfd\x54\x55\x46\xac\x0c\xb1\x96\x83\x24\x24\x6b\x8d\xbd\xa3\x97\x00\xa6\x99\xda\x6d\x2a\xb3\x53\xbb\x55\x4f\xaf\xb4\x12\x8c\x1b\x23\x57\x48\x32\x06\x0e\x1d\xd4\x5e\x74\x46\xc1\x6d\xd5\x64\x8d\xb6\x00\xd8\x07\xb6\x49\x08\x50\x2d\xec\x29\x60\xa7\x20\xdb\xcd\x94\xfd\x05\xdd\x48\x90\xac\x22\x3d\x35\x35\xd6\x46\x54\xcf\xae\x2e\x3a\x90\xa3\xc2\x5b\x16\x58\x5f\x26\xfc\x11\x0b\x8e\x12\x2f\x8f\x88\xf8\x5c\x45\x3c\x8c\x54\x9a\x23\xe9\x41\xf4\xc2\x42\x64\x5a\xad\xec\xaa\xe8\x3a\x04\xf4\x86\xcb\x63\xe0\x61\x71\x13\xb0\xb0\xce\x16\xd8\xcb\x92\xbe\x42\x53\x62\xef\x49\x99\x06\x97\x8e\x29\x17\xd6\x8e\xf0\xd1\x06\x7f\x1b\x52\xe7\xba\x68\x01\x8e\x43\x89\xdc\x19\x91\x03\x77\x3a\xe2\x94\x7c\x24\x0b\x2f\xce\x40\x99\x83\x3d\x1a\xb6\xa9\x7a\xe1\xed\xed\xde\x2f\x8a\x94\x35\x08\x12\x06\xac\xc7\x6f\x89\x74\x1f\x82\x7f\x7f\x77\x76\xf9\xbe\xf6\xbd\x26\xfe\xbd\x05\x24\x7f\x7b\xf9\xe1\xe2\xed\xfc\xe3\xdd\x6d\xe3\x7b\xb6\x34\xfa\xd3\x1e\x08\x7c\xe7\xe8\x3d\x05\x08\xf8\x0b\x6a\x38\xcd\xf5\xd2\xe5\x43\x0f\xbf\xd3\x1b\x2a\x5a\xc3\xb0\x66\x45\xf4\xbe\x8a\xd5\xa6\x9a\x0b\xa7\x93\xd5\x41\xcd\x29\xda\x36\xac\xb1\xf5\x01\xfb\xa8\xde\xe1\xcf\x3f\xe9\x4c\x26\xfd\xd0\x55\x77\x5d\xad\xf5\x63\x0b\x16\x70\x21\x00\xcb\x4d\x2e\x3f\x6a\x14\x5a\xe8\x85\x48\x8a\x10\x4d\x6e\x76\xee\x7f\x35\x5c\x6e\xff\x1b\x1c\x3d\x71\x7e\xd8\x40\x55\xd7\xc7\xa7\xe1\x6e\x05\x9a\x5c\x10\x8b\x40\xf7\x3a\xf8\xf6\x00\xb7\x91\x70\x8a\x3a\x54\x46\x1e\x0e\xe8\xc7\xb5\xce\xc8\x23\x87\x94\xc3\x33\xb5\x15\x79\xa2\x01\x66\x86\x6c\x16\x9a\x25\x6b\x99\xa5\x41\x91\xe9\x3b\xc0\xe5\x03\x7a\xf6\x25\x69\x6d\x0a\x8f\x9f\x70\xc5\xf7\xdc\xba\x6e\xd9\xbd\xc5\xdd\x7d\x14\xf6\xe8\x29\x81\xb6\x7d\xcb\xfe\x67\x02\x84\xe2\x50\x10\x49\x58\x2d\x12\x6e\x07\xbd\xd2\x9e\x51\x4e\x7d\x7b\xdd\x92\xd8\x4e\x12\x1e\x4e\x45\x6d\x5e\x69\x99\xd5\x87\x12\xa8\xa3\xd1\x93\x8a\x30\x30\x23\xa0\x39\x1b\xc1\xd1\x16\x0b\x44\xae\x34\xa9\x33\x15\x62\xff\x2f\x4c\x6c\x97\xb5\xce\x33\xfa\x5f\x1d\x94\x77\xc2\x5e\x54\x3a\xfa\x02\xa8\x85\x95\x86\xfa\x28\x3e\x5b\x19\x1a\x58\xae\x13\x26\x8b\x99\x92\x06\x57\x66\x2e\x32\xf1\x60\x5b\x17\xc7\x07\x08\xb1\xe6\xde\xce\xae\xdb\x90\x0d\xc2\x1d\x89\x00\x2d\x1b\xda\x84\x79\x4c\x51\x8b\x81\xc9\x54\x18\x6b\x37\x82\xd6\x8e\xf8\xc5\x6e\x00\x09\xe1\x2f\x84\x36\xa5\x42\xb9\xf6\x01\xe2\x09\x05\xaa\x67\xea\x72\x09\x99\xdc\x90\x3f\x9e\xa6\xf8\x0a\x75\xea\x2b\x9e\x2f\x50\x52\x3c\x40\xd3\x9b\xdc\x4d\x04\x49\xc5\xe2\x4e\x12\x0f\x22\xdf\x15\xe0\xd4\x85\x71\x55\x82\x17\x6b\x26\x8b\x09\x10\x3d\xba\x93\x72\xa6\x78\x9a\x52\x02\x2c\x16\x67\x87\x06\xd6\x7d\xcf\x3c\xd3\xe7\x0b\xfd\xd0\x67\xd8\x1e\x8b\xdd\xc4\x5d\xbd\xcd\xb8\x9a\xe3\x0d\xf2\x0d\xd0\x9b\x91\x8a\x6f\x57\x18\xbf\x5c\xcc\x3d\x39\xd5\x93\xb4\x33\x12\x7a\x8f\xb5\xb5\xad\x1d\xeb\x2a\x9a\xe0\x62\x08\xe4\xf4\xee\x79\xe2\xfd\x34\x84\x9c\xc9\x99\x43\x17\x0c\x3f\x05\x02\xb0\x93\xd7\x50\x36\x6e\xb5\xee\x43\x76\xba\x15\xf0\x6b\xc5\xde\x0d\x99\xf9\xda\x1d\x52\x9f\xf6\xf1\xb0\xaf\x86\x85\x78\x10\xf4\x6b\x4f\xb3\x9e\x17\xfe\xd5\xe9\x47\x69\xc2\xc0\x5c\x6f\xa3\x08\x2f\xa6\x40\x09\xf4\xc3\x79\x37\x4f\xbb\x4a\x73\xfc\x0e\xd3\x2d\x08\xe9\xa7\xf4\x51\xc3\x39\x35\xd4\x53\x12\x18\x14\xa0\x5d\x53\x76\xa9\x98\x33\xf7\x26\xec\x05\x2e\x2c\xf3\x82\x5c\x90\x24\xf5\x4d\x70\x89\x94\x76\x0f\xe5\x9c\xd7\x61\x46\x98\xf9\x13\xb6\x1b\x46\x82\x7a\x09\x4a\x9f\x75\x5c\xde\x48\xc8\x3c\x3a\x84\x5c\x02\xa3\x88\x0b\x2c\x80\x2e\x49\x7c\x76\xef\xd0\x68\xd7\xc1\x9b\x1d\x3a\xec\xe2\x5d\xec\x8d\xfb\xa1\x1d\xa2\x6d\x49\xf7\xa9\xfb\x9c\xe9\x7c\xa6\x5c\x69\xe4\x92\x34\x28\x90\x56\x2f\x2a\x4a\x84\x20\x9b\x3f\x5a\xa9\x10\x0c\x76\x9a\x78\x20\xb5\x18\x58\x94\xeb\xa7\x00\xe0\x60\x16\x1e\x83\x08\xb4\xfb\xa1\x36\x6b\x78\xd8\x05\xbe\xc1\x6b\xbe\xce\xb4\x9a\x65\x76\x50\x64\xe1\x88\x5d\xa3\x24\x25\x53\x02\x3d\xf1\xb2\xb4\x87\x51\xc4\xe1\x3c\x53\x76\xf0\xd8\x52\x02\x7a\x9f\xc6\x65\xa6\x3e\x68\xe3\x38\x31\x4c\x18\x0f\x17\x5a\xa6\x61\x7b\xe1\xa5\x01\xe9\x0f\x6f\xe1\xd2\x26\x9f\x3f\xb2\x5b\xf9\xab\x05\xb2\xd3\x88\xd8\x66\xa7\xcb\x3c\x74\x2a\xe1\x6a\xa6\xfe\xc3\x0e\x0f\xca\xd3\x2b\x37\xad\x7a\x89\x5b\x18\x66\x10\x82\x25\x9f\xb1\xd0\xef\xfe\xf1\xe5\xe7\x97\x98\x4d\x52\x1a\x50\x63\x9d\x54\x2f\x10\x4f\xe7\x5f\x66\x19\x44\xa2\x5d\x0f\x3c\xa5\x4c\xa8\xa2\x17\x89\x45\x8f\xba\xb9\xaa\x9a\x18\x43\x36\x7a\xdf\x0a\x0e\xce\xe7\x33\x96\xf0\x22\x59\x9f\x38\x5b\x8e\x8e\x31\x77\xfb\xd1\xf4\xa1\x2c\xa3\xb5\xb4\xda\x19\xed\xed\x83\x33\xdf\x78\x8e\xcd\xca\x7a\xb1\x5d\x00\x2c\xd5\x6d\x5d\xde\xc9\x53\x00\xe3\xe2\x44\x24\x48\xd5\xce\xf3\x5f\x77\x5a\x8b\xe1\xc5\x49\x5e\x72\xc5\x37\x22\x65\x2f\x20\xef\xf1\x85\x9b\xfc\x99\xda\x2e\xa6\xd9\x6e\x59\x10\x51\x9b\x1d\x94\x29\xc8\x90\xed\xb9\xe5\xe6\x69\xf3\x99\xb4\x67\xb0\x3b\x1f\x5a\xed\xb6\x8e\x1f\x1b\x5f\xd3\x70\x83\x05\x7d\x5c\x7e\x74\x6e\xaa\xa8\xb0\xaa\x1e\x02\x37\xf7\x13\xb6\xc8\xb9\x02\x05\x99\x34\x36\xaa\xc2\xee\x84\xc7\x33\xb2\xa0\xb9\x44\x28\xc5\xb3\x1d\x64\x80\x4c\x66\x0a\x29\xe3\x80\x5b\x7c\x97\x64\x32\x61\xab\x9c\x6f\xd7\x35\x3b\x48\x3c\x08\x55\x80\x2e\xf1\xb5\xe0\xe6\xb8\x68\x7d\x5e\x2f\x81\x0d\x8e\xa7\x9c\x29\x78\x7d\x70\x55\x23\xf9\x85\xe6\x75\x5c\x2d\x80\xd0\x13\xe9\x7c\x1c\xc1\xcf\x5e\x1a\xda\x0a\xb9\x21\x31\x6d\x41\x04\xd2\x76\x8e\xb9\x5a\xf7\x85\xbf\x71\x5c\x89\x7b\xc6\x61\x3a\x8f\x0d\xd9\x7b\x2e\x9b\xa3\x18\x49\x2f\xab\x56\x24\x0f\x24\x3d\xc1\x73\x8d\x69\x7c\xe4\xa9\x70\x40\x78\x7f\x70\x4c\x48\x28\x12\xd8\x0a\xd9\x5f\xca\x85\xce\x1c\xdd\xe3\xe5\x5b\xa6\x73\x50\x5a\x29\x34\xfd\x49\xa6\x5d\xd6\x81\x54\xa9\xf8\xe5\x28\xce\x95\xfe\x8b\xde\x99\xcd\xb6\x9a\x48\xd0\xa3\xde\x59\x38\x9d\x72\x61\x2f\xe1\xc2\xbd\x8c\x1b\xdf\x32\x75\xb0\xea\x59\x56\xac\x01\x41\x8a\x49\x1a\x61\x50\x37\x7c\xc7\x92\x35\x57\xab\xc8\x35\x01\x80\x3e\xb1\xd5\x39\x0a\x94\x3e\x00\xb9\xa1\xce\x5d\x4e\x3b\x65\x6a\x53\xa6\x88\x0f\x24\x20\x40\x5b\xbb\x74\x6c\xbe\x5a\xe5\x62\x05\x34\x23\x33\x55\xe1\x9a\x00\x62\x47\x27\x86\x82\xf5\xf4\xa5\xea\x3f\x0d\xdf\x4d\xd7\x6b\xb0\xc8\x77\x3e\xd1\x99\xd4\x7d\xc3\x7e\xae\x0f\xeb\x84\x49\x31\x9d\xb0\x1f\x02\x28\x5d\x24\x5a\xf9\x4c\xe9\x8e\x34\xd9\x9a\xcb\x9f\xed\x79\x3a\x34\x89\x71\xda\xdb\x0e\x9f\x35\x34\x82\x5b\x17\x4d\x6f\xaa\x79\xc1\x8b\x72\xc4\x1d\x44\x3a\xf0\xe7\xf6\xc7\x37\xf8\xdb\xbe\x75\x7d\x8e\x88\x71\x47\x4a\x66\xbf\x6f\x6f\x4e\x5b\x77\x20\x2d\x6f\x1b\xeb\xbd\x0e\xe4\x4c\x77\x3b\x90\x9f\xc2\x54\x77\xcc\x33\xfb\x7d\xc8\x59\x07\x9b\x4a\x4f\x9f\xc6\xba\x88\x1d\xae\x9b\x52\x53\x4c\xfd\x19\xdb\x72\x02\x6c\x73\x9d\x96\x89\x48\xed\xce\x85\xf7\x10\x22\x62\x3c\xa9\x4b\xe5\x90\x6c\xbb\x68\x2b\xcc\x54\x70\xeb\x7e\x2d\x9f\xc3\x20\x32\x70\x3f\xfc\x77\x1d\xfe\x06\x67\xf1\xb5\x0d\x7a\xbc\x3f\x71\x9c\xf2\x91\xf7\x94\xaf\xbe\x4a\xe1\xad\x73\xb9\x92\x8a\x17\x3a\x67\xdf\xf9\xd4\xed\x97\x5e\xf7\xab\xdb\x42\x18\x79\x4c\x54\x86\x08\x8f\x89\xaf\x6a\x78\xb4\x2d\x52\xfb\x2d\x53\xf0\xcd\x36\x26\xc5\xf5\x22\xeb\x34\x32\x19\x0e\x82\xb7\x4d\xc0\x77\x2a\x4d\xc8\xdb\x9c\x29\x8a\x38\xe0\xbc\xe9\x3c\x66\x75\xef\xbc\x9b\xb7\x65\x31\x3f\x90\xe8\x09\x7f\x3c\xce\xf1\x44\x30\x84\x0f\x7c\xdb\x4f\x9d\xc3\xc9\xe5\x80\x89\x6b\x5e\x79\xde\x59\x2a\xd5\xf5\xd9\xaf\x9b\x32\x92\xca\xb7\x1e\x3a\xbf\x7e\xef\x02\x45\xe1\x3d\x58\x79\x60\xc1\x44\x20\x87\x28\x26\x02\xe1\xd3\xde\x1f\x6b\xf6\x16\x77\x7c\x3b\xe7\x99\x2e\x53\x46\x87\x1a\x85\xe1\xf3\x29\xde\x8e\x40\xea\x3b\x9d\x76\x25\x36\x8d\xd4\x73\xf6\xe7\x0f\xfc\xae\x7d\x07\xc2\x67\x1d\x27\x70\xef\xd6\xa7\x91\x7d\xb6\xa9\xa7\x91\x86\xb9\xf7\xc7\xf1\xa8\xb9\xf7\x5e\x70\x60\x18\x1c\xe7\x20\x85\xf7\xa8\x4c\x33\xd8\x6f\x71\x00\xa1\x85\x03\xb9\x12\x98\x35\xf7\x47\x57\xe7\x78\x08\xfa\xab\xda\xf2\x5c\xa8\x62\x0e\x35\x8e\xab\x0c\x2a\xf9\x04\x3f\xaf\x18\x4c\x83\x1c\xc1\xff\x76\xab\xd1\xbf\xef\xe8\x84\xfe\x9d\xdd\x90\x4f\xcb\x9e\x57\x12\x40\xa4\xe6\x9e\x7d\x27\x01\x73\x14\xc5\x42\xfd\xc4\x75\x4c\x17\x75\xe8\x80\xd1\x8b\x3a\x54\x39\xda\x07\x75\x28\xb4\x1e\x42\xd5\x50\x0a\xb9\xf7\x28\x2b\xdc\x1e\xb5\xee\x6f\x91\xc4\xc0\x55\xe5\xdf\x40\x07\x6b\xe7\x2f\x63\xff\x29\x72\x1d\x32\x80\xd0\x59\x15\x17\xdc\x6b\xaf\x1f\xae\x8e\x8c\xf6\x38\xea\xf2\xc6\xc2\x94\xf0\x17\x62\x6c\x42\x8f\xc2\x62\xe7\x9e\x23\x1d\x21\xa4\xad\x48\xe6\x1d\x2a\x24\x83\x9a\x12\x3d\x3c\x63\x55\x11\x59\xbb\xcc\xdc\x06\x3d\x05\x7f\x05\xa5\xd6\x6c\xf8\x96\xf0\x7d\x04\x25\xae\x07\x6f\xa6\xd0\x89\x7f\xfb\xeb\xbf\x4f\xbb\x74\xef\xa1\xe9\x63\xe1\x52\xbe\xf1\xef\x72\x29\x54\x0a\xc1\x58\x9e\x36\x05\xb2\x54\xc5\x3b\x5f\x39\x9e\xed\x32\x7c\x92\x8c\xe0\xf6\xab\xd6\xcc\x71\x11\x7d\x85\x88\x7e\x38\x64\xfd\xf6\xad\xc4\xfb\xba\x4c\x09\x33\x4f\x77\x8a\x6f\x64\xf2\x55\xdb\xb8\x93\x22\x4b\xa1\x89\x54\xfb\xbe\xa8\x54\x2a\x92\xfb\xb1\x36\xc1\xc1\xf4\xfe\x22\xb9\x67\x3f\xde\x7e\x78\x8f\x6a\xae\xd2\xcc\xd4\x15\x2f\xe4\x83\xb8\xcb\x33\x1f\x0e\x20\xbe\xa6\x3c\x73\x7b\xa4\x4a\x37\x1d\x51\x1b\x39\x6e\x6a\x67\x38\xc4\x6a\x00\x9b\xdd\xc9\xa2\x4c\xee\x45\x71\x9a\x73\x95\xea\x0d\x76\xe3\xd4\x94\xcb\xa5\xfc\x65\x5a\xf0\xbc\x43\x1a\x00\xfd\x08\xdf\xd0\xce\x0d\x82\x4f\x45\xb0\x79\xd1\xd4\x7d\x84\x44\x5f\x92\x11\xaf\x18\xb7\x98\x97\xc6\x37\x02\xb8\x1d\x59\x55\x56\x03\x4a\xc1\xdc\x59\x50\x9f\x34\x86\x10\xf4\x9a\xb4\xad\x3f\x47\xc6\xfd\xe7\xa8\x55\x55\x7d\x75\xd7\xa8\xa0\xe8\xb8\xe1\xf7\xf8\x3e\x5c\xe5\xc2\x98\x09\x33\x1a\x5a\x3c\x53\x0e\x8b\xee\xf2\xa5\x00\xf7\x02\xec\xb0\xd9\x8e\x25\x7a\x2b\x41\x00\xd3\xf7\x6b\xad\x1f\xc1\x4f\x1f\x67\x8a\x82\x66\x71\xa9\x0a\x99\x31\xbe\x2c\xc8\x89\x0f\x54\xf8\x4e\xfa\xca\x4c\x67\x0a\x42\xb1\x09\x74\x1f\x20\x12\x3e\xfc\xe2\x3b\x61\xd8\x92\x27\x32\x93\x05\x11\x74\x41\x92\x11\xb7\xfd\xb5\xf7\x81\x1d\xcb\x9c\xef\x78\x16\x1e\x56\x3c\x2b\x43\x72\xec\x89\x11\x3d\x04\x90\xd2\xcc\xd1\x41\xf0\x35\x18\xe7\x64\x1c\x7c\x40\xb2\xec\x33\x5b\xf9\x55\xed\x16\xfd\x5d\xfc\xbf\x95\x77\x78\x9f\x55\x70\xc4\x83\xfc\x98\xcb\xb1\xf9\xe4\xf6\x7a\xd1\xc1\xce\x90\xa9\xc3\x07\x57\x4c\xf1\x90\x7e\xea\xaf\x47\x88\x99\x74\x3c\xfa\xa7\x4e\xe5\xab\x59\xc3\x88\xd1\x6b\x37\x12\xbf\x92\x3b\xa3\x8b\xc1\x7c\x48\xf3\x9d\x37\xfe\x93\xd6\xd9\xb1\x1e\x79\x22\x65\x90\x5a\xcd\x41\xf8\xf6\x98\xe7\x24\x2e\x00\xef\xd8\xba\x7c\xeb\x63\xee\x9e\x12\xbc\x2a\x97\x45\x70\x30\x6a\x02\x1c\x64\xd0\x88\x1e\xa4\xb8\xd9\xb6\x80\x2e\x46\x22\xde\xa1\x0c\x44\x6b\x39\xd3\xbe\x19\x22\x88\xf8\x39\x78\x68\x23\xd0\xa6\xd6\x5a\x38\xca\x59\x87\x32\xb5\xb5\xaa\xbc\xe3\x2e\xa6\x57\xf6\xe3\x18\xd5\xed\xc6\x13\xc5\xf1\xed\xfd\x49\x56\xfc\x4c\x45\x16\x3b\x72\xa2\xb9\x94\x02\x3f\x6a\x6d\xfe\xbc\xca\x32\x3c\xda\x9f\x77\x0c\x87\x7e\xef\xc9\xf9\x36\x56\xc3\x03\x2c\x48\xa2\x37\x0b\xa9\x1c\x2b\x01\x39\xb9\xe1\xa9\x71\xe6\x28\x4a\x7d\x40\xc2\x3d\x19\x50\x23\xa5\x36\xf6\xde\xcc\x89\xd9\x5e\xe3\x23\x6b\xdf\x73\x3c\x7e\xdf\x3d\x2d\xdd\x7f\x47\xa4\xb1\xde\x03\x7b\x81\x64\x8f\x7c\x67\x40\x31\x5a\xd8\x53\x71\x89\x8e\xdd\x6a\xfb\x27\x91\xf9\xe1\xe8\x6f\x67\x0a\x46\xa8\x24\x21\x79\xea\x8b\x24\x06\x80\xcc\x69\x63\x07\xae\xaf\x17\xa6\x7d\x70\xbe\x4d\xac\x26\xef\x8d\xd5\x60\x10\xfa\x7f\x46\x78\xa6\xc7\x09\x7c\xa4\x2f\x3a\xba\x26\xd1\x62\x24\x98\x10\x24\x6e\xf9\x10\xf5\x84\x6d\xb8\x54\xb4\x0d\x50\x7f\x30\x15\x8b\x72\xb5\xea\x74\x91\xfe\xfa\x63\x2d\xd5\x7d\xf2\x77\xef\x0b\xef\x65\xab\x7b\x0a\x6f\xf1\xa5\xab\x09\xdd\xd7\xf6\xdd\xf7\x75\x1c\xc4\xdf\xd0\x1b\xdf\x1a\x12\x6b\x2c\xa2\xa7\xf1\xc6\x5f\x0e\xf1\xc6\x3b\x6c\x17\xa4\xd8\xd1\x73\xda\xe1\x6f\x7e\x73\xd3\x7f\x1d\x37\xfd\xa0\x45\x81\xb4\x2e\x73\x59\x35\xd0\x7b\x5a\x78\x20\xf3\xa1\x27\x03\x86\x56\x21\xbb\x98\x3d\xdd\x53\xc3\x16\x3c\x79\x06\x2a\x44\xb8\x1d\x8f\xf7\x07\xee\x01\xbf\xdc\xe8\x8d\x60\x50\x95\x41\xe5\x1a\x46\x59\x8c\x13\x40\xab\xda\x0e\x06\xc4\x08\xe1\x51\xe0\x3a\x45\xe4\x4a\x1a\x8c\xea\xef\x94\x78\x64\xf6\xb6\x9a\xc4\xf0\xbd\x68\x7a\x40\xd2\xec\xa5\xb5\x0e\x2b\x58\x7f\x4f\xd9\x90\x8b\x15\xcf\x53\xc8\x30\xa1\x2d\x99\xf1\xe4\xde\xfe\x37\xb4\x8f\x6a\x24\x88\xa1\x53\x57\x40\xd8\x6b\x28\x4d\xaa\x04\xc9\xf0\x08\xcd\x18\xda\x87\x3f\x37\x8c\x27\xb9\x36\xe8\x34\xf2\x4a\xc0\x90\xe1\x0c\x06\xec\x83\x4c\x4b\x9e\x61\x8d\x9d\x9e\xf6\xb1\xf0\xb5\x3a\xe0\x28\x12\xed\x6a\xa2\xd9\x68\x3a\x90\xa3\x08\x86\x71\x3a\x53\x6f\x7d\xc0\xe4\x35\xbb\x33\x82\x50\x66\xc6\xd1\x9e\xf7\xb6\xf4\xd9\xcc\x87\x06\x26\xb0\xd3\x86\xe8\x19\x00\x07\xb2\x8e\x06\xc2\x74\x8f\xc4\x1e\x42\xcd\x63\x26\x65\x34\x31\xf0\x65\xa4\x1c\x1e\x86\x05\xdf\x09\xb9\xe0\xe9\x2e\x66\xe3\x93\x8a\x41\x94\x8e\xf1\x74\x23\x95\xdd\x04\x4e\x9d\xd2\xdf\x34\x8e\xa8\x1e\x21\xc7\x20\xe2\x94\x65\xb5\x43\xd0\x30\x25\xac\x71\xc9\x73\x99\xed\xe0\x3d\xb1\xcd\xc5\x49\x54\x4f\x34\x3f\x94\xf1\x04\x94\xfb\x44\x23\x52\x1a\xb1\x2c\x33\x7c\x75\xc0\xbb\xdc\x77\x80\x4e\xa4\xbb\xcb\x89\x35\x38\x0a\x92\x4e\x89\x2a\x46\x41\xc2\xa7\xc8\x1e\x69\x44\x2b\xc7\x45\xdc\x02\x5b\x64\x0e\x20\xf7\xb5\x7e\x74\xa9\x6e\x8f\x3c\x60\x99\xbb\x6e\xd7\x27\x8b\xb2\xf4\xdb\xa1\xee\x05\xe8\xce\xa9\x88\xf2\xcd\x87\xd6\xe8\x33\x91\xfa\xb3\x49\x2a\xe8\x0e\x69\xfa\x06\xcf\x75\x69\x30\x63\xce\xce\x25\xdc\x5f\xce\xd1\x51\x75\x5c\x33\xdf\x3b\x69\xb4\x62\xb3\xf2\xfb\xef\x7f\x2f\xd8\xf7\x90\x42\x48\xef\x11\x8c\x8f\x01\x5f\x24\x96\x0e\x47\xb6\xaf\x40\x20\x99\x64\x63\x46\x58\x1b\x44\xd5\xe5\xeb\x03\xc8\x93\x27\x6b\x66\xca\x05\x22\x18\x39\x85\x58\xb8\xf2\xbc\xd3\xef\x35\x80\x11\xf1\x66\x77\xad\xff\x5f\x12\x50\x40\x95\x8b\x99\xda\x6a\xa4\x46\x07\xe8\xe7\x42\xb0\x0d\xcf\xef\x41\xb4\x14\xdd\xf3\x40\x05\xff\x9d\x14\xd3\x6a\x78\xe1\x65\xa5\x3d\x14\xd0\x41\xca\x63\x96\x97\x4a\x39\x15\x26\x66\x0d\xd3\xe0\xeb\x9f\xcc\xd4\xa2\x8c\xdf\x9e\x95\x60\x41\x58\x5a\x10\x30\x80\xc3\x56\x03\x57\x08\x35\x8a\x9b\xd0\xae\x29\x1b\x10\x35\x98\xa9\x27\x0e\x1b\xec\x73\xf8\x7d\x22\x1b\xcc\x39\xf3\xa2\x7c\x05\xe8\x6e\x2c\x14\x0c\xd3\x81\xcb\x1e\x8c\x9c\x4f\xa0\x16\x3c\x61\x3f\xca\x07\x31\x61\x37\x5b\x9e\xdf\x4f\xd8\x5b\x0c\xff\xfd\x49\x2f\xda\x7c\x78\x0d\x42\x89\xa3\xfd\x78\x87\xb9\xb1\xfa\x88\x56\xda\xad\xff\x9f\x1b\xc4\x00\xac\x2b\xf6\xfd\x3f\x13\x91\xd7\xc1\xf5\xf1\xf7\xee\x89\xd8\x13\xa6\xfe\x0d\xbc\xf6\x77\xf9\x2a\xee\xa7\xf9\xf8\x5d\xfc\xbf\xee\xfc\x72\x16\x17\xd8\x9e\x74\xca\xb5\xa2\xd2\x7e\x5d\x89\xcd\x32\xad\x5f\xca\xcd\xfc\xe6\x61\x5b\x81\xd2\xc7\x53\x9f\xda\x3e\x02\x74\x4f\x3f\x75\xe3\x75\x9e\x69\x53\xe6\xfd\x9b\xff\xba\xda\x6a\x57\x7b\x0b\xd5\x27\x2c\xb6\xcd\x42\x00\x6b\xc1\x50\xf8\x09\x7e\x6d\xfe\x1f\x7a\x31\x07\xac\xd5\x71\x3b\xbc\xad\x38\x4f\x20\xac\x93\x4a\x53\xc3\x0d\x79\xb3\x15\xc0\x38\x15\x4c\xd1\x10\x10\xa8\xad\x30\xef\x1a\x99\x29\xc7\xb9\x8e\x19\xb3\x79\x2e\x80\x1c\x3a\x17\xa0\x6c\xc7\xb6\x3c\xf7\x80\x07\x67\x11\x45\x2f\x9f\x00\x8a\x89\xb3\xdc\x20\x59\x95\xde\x5b\x0b\x21\x94\x1f\xed\x31\xa6\x04\x10\x21\xd7\x46\x9f\xd0\x6e\x8f\xc2\x51\xef\x77\xa8\x70\x36\x7e\x17\xbd\x05\xc1\xe4\x5e\x89\x22\x3a\xcd\x6b\xa6\x45\x65\x6b\x56\x22\x54\xbf\x2a\xc4\x7f\x6b\x0c\xba\x46\xce\x55\x71\xa0\x0c\x8a\xe9\x3d\x85\xbf\xfc\x13\x2f\xd6\xf8\xa0\xdd\xe8\x42\xe0\x99\x89\x2c\x41\xb8\x5e\xd0\xeb\xbc\xc8\xf4\x02\x24\xe5\xec\x27\x5d\x6f\xc3\x84\xb6\xf6\xa0\xa1\x6b\x4e\xd8\x90\x93\xc1\x9e\x26\x90\x69\x9b\x0b\x03\x84\x2b\xcd\x28\xd5\x50\x7c\xf2\xb8\x47\x77\xb3\xb9\xf6\xd0\x7f\xdb\x78\x6c\x37\x45\x19\xec\xb6\x06\xb0\xea\xc5\x01\x19\x34\x0d\x89\x0b\x22\x2b\xa6\x30\x30\xf2\x95\xd6\xfa\xeb\x94\xcb\x67\xea\x0c\x3f\x89\x2e\x01\x1e\x54\x96\x3c\x1e\x94\x44\x6a\xfd\xfe\xc3\xf4\x55\x76\x16\x23\x10\xc9\x43\x30\x09\xbe\x4c\x78\x0c\x4c\x20\xab\x51\x15\x32\x17\x4c\x01\x0a\x61\xa6\x4c\xb9\x38\x09\xc4\x24\xf6\x15\xf7\x00\x64\x3a\x46\x6c\x39\x3c\x65\x80\xaf\xe8\xa4\xe5\x1a\x46\xcf\x64\x50\x4b\x71\x04\x7e\x3c\xa3\xc3\x1f\x72\x25\x31\x33\xde\xf7\xdd\x97\x63\x1f\x6b\xf0\x8a\x76\x70\x25\xbc\xec\xfa\xce\x0b\xd0\x73\x82\x0c\xcc\x6b\x44\x51\x7c\xeb\x0b\x3c\x8e\x86\x0e\xbd\xba\x21\x9e\x36\x53\xff\xbf\xbb\x1b\xba\x41\xc5\x23\x56\xba\x1d\x19\x7b\x45\x75\x82\x9d\x2b\x6d\x73\x4f\xc8\xc8\x08\xec\x6e\x54\x63\xc9\xb7\x95\xca\x1d\xae\x25\x16\xf5\xd0\x94\x2e\x0b\x9f\x3e\x48\x13\xd1\x7d\x43\x6d\x37\x42\xb0\xd7\xb9\x58\xbe\xfe\x9c\x8b\xe5\xdc\xcd\xf4\x14\x3a\x34\xb5\x3d\x6a\x92\x7e\x0f\x5c\x1c\x66\xab\x55\x3b\xf9\xe1\x1e\x72\xd2\x5a\x97\xb0\x9c\xa8\x4f\x72\xc9\x82\x9c\xa7\xed\x0f\x30\x40\x88\xb4\xce\x46\xde\x68\xd9\x57\xbf\xe6\xba\x90\x60\x03\xa0\x56\x1d\x32\x98\x7f\xff\xd7\x5b\x65\xcc\x86\x5c\x6f\xb7\x55\xc8\x8c\x3b\xec\xb9\xf2\x17\x5e\x37\x2e\xf4\xeb\xa2\xd3\x61\x02\xcd\x96\x3f\x2a\xe2\xb1\x19\xe5\x7a\x1a\x76\xad\xd5\x00\x44\xd1\xb5\xd6\xc0\xc0\x85\x5d\xa6\x9c\xa7\x4f\x7a\x25\xc5\x49\x24\xb7\xce\xb3\x2c\xd6\x54\x08\x91\xb6\x99\x0a\x79\xa9\xd6\x6a\xcd\x32\xe7\xc2\xab\xd8\x1b\xc4\x5a\x94\x42\x42\xb0\x98\x38\xd2\x15\xa2\x2b\xa4\x78\xd8\xc9\x82\x83\x96\xaf\x57\xd1\xda\xb7\x9b\x9f\xea\x11\xf9\x2b\xcb\x8b\xde\x13\x79\xc6\x6a\xe7\xf7\xa2\x01\x67\xde\xdb\xd6\xf6\x48\x47\x44\x29\x01\x9b\xd9\x9d\xb2\x09\xcf\x73\x87\xf2\xa7\x5a\x99\x7d\x2b\x2d\x79\x52\x71\x73\x76\xb4\x73\x2d\x92\xfb\xad\x96\x6a\xf4\x59\x54\xa1\xb8\x80\xc5\x5e\xb0\x50\x9a\x7f\x1d\x0e\xba\x1c\x2b\xf6\x24\x76\xc4\x00\xbc\xc2\x41\x43\x03\x19\x1b\x67\x5e\x2b\xb9\x7b\xd9\x3d\xb5\xff\x42\x84\xbb\xe1\x19\x7c\xb1\x2d\xf1\xa1\xda\xad\xc2\x5b\x1c\x3b\x15\x26\x50\xde\xc8\xfe\x1a\x38\xd8\x9c\x55\x28\x0c\x5b\x87\x14\x5c\x90\xbf\x79\x86\x7e\xf3\x0c\xfd\x0f\xf7\x0c\x7d\x4d\xb7\x10\x60\x63\x9e\xd3\x27\xd4\x13\x20\x3f\x62\x3b\xfa\x5a\x47\xe7\x38\xb6\x5a\xc7\x93\x48\xf6\x39\xca\x74\x6c\x02\xfd\x1d\x11\x86\x1d\x9f\x05\x4f\xee\x85\xea\x8c\xd1\x3b\xfa\xa2\x4e\x05\xce\xa7\x45\xb0\xb4\xb1\x2f\x45\xbf\xee\x87\xb2\x04\xa8\x13\x91\x06\xb7\x11\x82\xd8\x7d\x02\xb6\xa7\xed\xf8\x09\x80\xc6\x74\xee\x89\xad\x0d\x65\xe1\x61\x30\x12\x69\x92\x10\x2c\x55\xa3\x82\x1e\x8a\x89\x73\x15\xcf\xb7\x5a\x67\xad\xd0\xb8\x27\x1d\xc0\x46\xa2\xcc\xd0\xc1\xbb\x44\x63\xd4\xc4\x80\x31\x37\x8a\x21\xe9\x22\xa4\x68\x60\x3e\x06\x68\x61\xc0\x6a\x4a\x4b\xc8\xa5\x0c\xc3\x11\x09\xec\x71\xef\x70\x21\x8c\xd8\x42\x24\x1c\xa4\x3f\x1d\x78\x2f\xe1\x3e\xfb\x24\x26\x45\x6a\xa4\x83\x98\x66\x3d\x1d\x51\x4b\x28\x77\x2e\xdb\x84\x2f\xc6\x6e\xae\x9a\x85\xe0\xa0\xe5\xd8\x72\x87\x24\x71\xb4\x8b\xfb\x24\x6d\x1d\xc7\xf4\x1c\xf4\xf7\x86\xdd\x70\xad\xe7\xce\x25\x15\x74\x0e\xe5\x0c\x3f\x48\x7f\x84\x74\x9c\xcd\x40\xe4\xce\x4c\x9d\x79\xa5\xd3\x80\xfd\xf2\xc8\x3d\x0c\x97\x22\x66\xb1\x31\x35\xc8\xe5\x18\x5e\x2e\x13\x66\xca\x64\x0d\x6c\x95\xd5\x73\x2a\x3e\xb7\x9a\x3b\x76\x32\x53\xf6\x41\x04\xae\x96\x0d\x87\xbc\xf8\x47\x6b\xac\x1a\xf9\x9f\xc2\xc3\xb3\x88\xbc\x2b\x46\x64\xe1\xc3\x49\xab\x56\xf4\x9a\x23\x0e\x45\x80\x45\xc0\x94\x94\xdb\x94\x17\x62\x3a\x0b\x68\x1b\x89\x9e\x4e\x87\xf2\x20\x93\xd9\xc4\x1d\x8b\x71\x8c\xb5\x93\x36\x93\x4b\x91\xec\x92\x86\x0e\x50\x3f\x4d\xc4\x6f\xcf\xb6\x5f\xd7\xb3\x0d\x59\x76\x31\x67\x70\xcc\xd0\x52\x53\xaf\xc3\xcf\x8f\x1b\x5c\xc1\xa2\x96\x98\x11\xe3\xfc\x15\x9f\x9d\x2d\x36\xf0\x38\x7b\x7e\xf0\x3b\xa8\xff\x3a\x0b\x0f\xdb\x70\x59\x47\x14\x08\x0d\xb3\x30\x0e\x2e\x16\xf1\xd2\xb1\x06\xed\xe0\xb0\x7e\x37\xcb\xcc\xaf\x0a\x9c\x34\xe4\xe1\x6a\x2d\x6e\x0f\x57\xba\x72\x96\xb6\x12\x78\xdf\xf5\x58\xdc\x11\xab\x3b\x2f\x5e\x18\x3f\xea\xd5\x13\xd0\x61\xff\xdf\x4b\x53\xfc\x54\xd3\x0c\x3d\x4c\x74\xf4\xd9\x4c\x53\xd7\x54\x6c\xe6\x50\x8b\xea\xba\x6a\xf3\xe8\xa5\x5b\x73\xf0\x78\x72\x2a\x71\xb6\xdd\x63\xde\x41\x9f\xfd\x78\x7d\xc6\xab\xe9\x31\xe7\xdb\xad\xc8\xdd\x45\xde\xb0\xb5\x40\x72\x0d\x6a\x01\xcd\xc4\xb5\x40\xad\xee\xda\x2b\xd7\x1e\x25\xb5\xa2\xe1\x6b\x30\x74\xd3\xf6\x99\xbb\x2a\xb3\xac\x73\xe6\xf6\x2b\x39\x5d\xdd\xbd\x7f\x3f\xff\xe9\xec\xfd\xdd\x85\xeb\x7e\xab\x32\x52\xf4\xb5\xce\x31\xf1\x2d\xa1\x31\x09\xda\x8b\xb6\x5a\xe1\xf4\xc2\x75\xe8\x35\x3a\xb9\xca\x2c\xab\xaa\x66\xcd\xd4\x67\x2a\x07\x60\xda\xa8\x08\x6a\xc7\x8d\xf5\x0e\x5c\xb5\x7e\xf8\xda\x67\x5b\xf8\x67\xfc\xed\x09\x0b\x9d\x78\x0d\xda\x8e\xa4\x19\xd7\x3e\xae\x94\x0d\x73\xc4\x76\x40\x30\x70\xd7\x76\x78\x6a\x5d\xc0\xc3\xb6\xc7\x9d\x02\x46\x72\x91\x3a\x39\xbf\x27\xd9\x1d\x38\x76\x9f\xab\x71\x6a\x7f\x96\xa7\xf8\xa4\x81\x72\x27\xa8\xe6\x06\x1a\xd5\x41\xf0\x6c\xa6\xd0\x07\x6a\xdb\x54\xe8\xee\x36\xb1\x4b\x32\x6f\x33\xae\x56\x25\x5f\x59\xeb\xd6\x55\x3e\x53\x1b\xb9\x5a\x23\x0f\x48\xb9\x0d\xf8\x64\xce\x14\xd0\xc5\xd4\x96\x50\x0d\x9f\x2c\xd5\x4c\x51\x9f\xd4\x2a\x14\x8f\x58\xd9\x3f\xdd\xf8\xee\x10\x28\x1d\x0b\x22\x41\x3a\x35\x53\x38\xb9\xc8\x4f\xe2\x22\x21\xf0\x62\xe1\x45\x7d\xe9\x72\x88\x5d\xa2\x4e\xbf\x3d\xd3\x57\x10\x93\x99\x29\x9f\xa2\x8b\x9e\x23\xea\x43\x24\x5c\x82\x4d\xda\x7f\x9e\xb8\xc9\x70\x7b\x82\xda\xd6\xbe\xea\x8f\xbe\x03\xec\x86\x9b\x8f\x50\x9f\x6e\x1e\x63\x03\xbd\x85\x3c\x3a\x38\xba\x78\x1b\x20\x2f\xbb\xbd\x35\xae\x5f\xf8\x9d\x4e\x68\xab\x2e\x17\xd9\x88\x26\xe1\xf7\x7b\x1b\x85\x47\x72\x7f\xa3\x06\x3c\x87\xaf\x6b\x5b\xcb\x2e\xd3\xbe\x6a\x17\x5a\x77\xcc\xcb\x13\x06\x14\x2b\x8d\xa2\x1f\xec\x1b\x8c\x32\x29\x0e\x59\x2f\x03\x92\x15\xeb\x43\xe4\x4e\x9f\xbe\x06\x65\xd2\x1c\xd4\x9c\x60\x3f\x0d\x6e\x91\xb7\x10\xe8\xb2\x1b\x75\xc2\xd2\x3d\x57\x39\x60\x3b\x8e\x49\x8a\x27\x39\x19\x67\x89\xc7\x8b\xdd\x3c\xa8\xb1\x6c\xd7\xff\xc4\x2f\xa2\x49\x98\xb9\x09\x34\x32\x29\x73\x63\x8f\x4b\x3a\xef\xe8\xd4\xd6\x39\xe3\x33\xe5\x52\xd5\xdc\x71\x7c\xe6\xc0\xb9\xb9\xff\x2b\x26\x80\x6e\x91\x4f\x1f\x2c\xd6\x82\x69\x25\xdc\x69\x38\x53\x4e\xfb\x7b\xc2\xf8\xc2\x38\x49\x6d\xae\x76\x5e\xe7\x5a\x7a\xfa\x22\xae\x18\xa0\x9e\xf7\x9f\x79\x35\x33\xa0\x72\xcf\xff\xce\xfe\xdf\x7f\xff\xee\xff\x05\x00\x00\xff\xff\xf8\xac\xeb\xb9\x8c\xb7\x04\x00") func adminSwaggerJsonBytes() ([]byte, error) { return bindataRead( @@ -93,7 +93,7 @@ func adminSwaggerJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "admin.swagger.json", size: 309117, mode: os.FileMode(420), modTime: time.Unix(1562572800, 0)} + info := bindataFileInfo{name: "admin.swagger.json", size: 309132, mode: os.FileMode(511), modTime: time.Unix(1562572800, 0)} a := &asset{bytes: bytes, info: info} return a, nil } diff --git a/flyteidl/gen/pb-java/flyteidl/core/Tasks.java b/flyteidl/gen/pb-java/flyteidl/core/Tasks.java index d4416668c6..811eb6e096 100644 --- a/flyteidl/gen/pb-java/flyteidl/core/Tasks.java +++ b/flyteidl/gen/pb-java/flyteidl/core/Tasks.java @@ -4015,7 +4015,7 @@ public interface RuntimeMetadataOrBuilder extends /** *
-     *+optional It can be used to provide extra information about the runtime (e.g. python, golang... etc.).
+     *+optional It can be used to provide extra information about the plugin type (e.g. async plugin, sync plugin... etc.).
      * 
* * string flavor = 3; @@ -4023,7 +4023,7 @@ public interface RuntimeMetadataOrBuilder extends java.lang.String getFlavor(); /** *
-     *+optional It can be used to provide extra information about the runtime (e.g. python, golang... etc.).
+     *+optional It can be used to provide extra information about the plugin type (e.g. async plugin, sync plugin... etc.).
      * 
* * string flavor = 3; @@ -4298,7 +4298,7 @@ public java.lang.String getVersion() { private volatile java.lang.Object flavor_; /** *
-     *+optional It can be used to provide extra information about the runtime (e.g. python, golang... etc.).
+     *+optional It can be used to provide extra information about the plugin type (e.g. async plugin, sync plugin... etc.).
      * 
* * string flavor = 3; @@ -4317,7 +4317,7 @@ public java.lang.String getFlavor() { } /** *
-     *+optional It can be used to provide extra information about the runtime (e.g. python, golang... etc.).
+     *+optional It can be used to provide extra information about the plugin type (e.g. async plugin, sync plugin... etc.).
      * 
* * string flavor = 3; @@ -4837,7 +4837,7 @@ public Builder setVersionBytes( private java.lang.Object flavor_ = ""; /** *
-       *+optional It can be used to provide extra information about the runtime (e.g. python, golang... etc.).
+       *+optional It can be used to provide extra information about the plugin type (e.g. async plugin, sync plugin... etc.).
        * 
* * string flavor = 3; @@ -4856,7 +4856,7 @@ public java.lang.String getFlavor() { } /** *
-       *+optional It can be used to provide extra information about the runtime (e.g. python, golang... etc.).
+       *+optional It can be used to provide extra information about the plugin type (e.g. async plugin, sync plugin... etc.).
        * 
* * string flavor = 3; @@ -4876,7 +4876,7 @@ public java.lang.String getFlavor() { } /** *
-       *+optional It can be used to provide extra information about the runtime (e.g. python, golang... etc.).
+       *+optional It can be used to provide extra information about the plugin type (e.g. async plugin, sync plugin... etc.).
        * 
* * string flavor = 3; @@ -4893,7 +4893,7 @@ public Builder setFlavor( } /** *
-       *+optional It can be used to provide extra information about the runtime (e.g. python, golang... etc.).
+       *+optional It can be used to provide extra information about the plugin type (e.g. async plugin, sync plugin... etc.).
        * 
* * string flavor = 3; @@ -4906,7 +4906,7 @@ public Builder clearFlavor() { } /** *
-       *+optional It can be used to provide extra information about the runtime (e.g. python, golang... etc.).
+       *+optional It can be used to provide extra information about the plugin type (e.g. async plugin, sync plugin... etc.).
        * 
* * string flavor = 3; diff --git a/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/core_runtime_metadata.py b/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/core_runtime_metadata.py index b14a330293..1d90ec3414 100644 --- a/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/core_runtime_metadata.py +++ b/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/core_runtime_metadata.py @@ -109,7 +109,7 @@ def version(self, version): def flavor(self): """Gets the flavor of this CoreRuntimeMetadata. # noqa: E501 - +optional It can be used to provide extra information about the runtime (e.g. python, golang... etc.). # noqa: E501 + +optional It can be used to provide extra information about the plugin type (e.g. async plugin, sync plugin... etc.). # noqa: E501 :return: The flavor of this CoreRuntimeMetadata. # noqa: E501 :rtype: str @@ -120,7 +120,7 @@ def flavor(self): def flavor(self, flavor): """Sets the flavor of this CoreRuntimeMetadata. - +optional It can be used to provide extra information about the runtime (e.g. python, golang... etc.). # noqa: E501 + +optional It can be used to provide extra information about the plugin type (e.g. async plugin, sync plugin... etc.). # noqa: E501 :param flavor: The flavor of this CoreRuntimeMetadata. # noqa: E501 :type: str diff --git a/flyteidl/gen/pb_rust/flyteidl.core.rs b/flyteidl/gen/pb_rust/flyteidl.core.rs index bc39cf1d9c..a87354f86b 100644 --- a/flyteidl/gen/pb_rust/flyteidl.core.rs +++ b/flyteidl/gen/pb_rust/flyteidl.core.rs @@ -1064,7 +1064,7 @@ pub struct RuntimeMetadata { /// checks to ensure tighter validation or setting expectations. #[prost(string, tag="2")] pub version: ::prost::alloc::string::String, - /// +optional It can be used to provide extra information about the runtime (e.g. python, golang... etc.). + /// +optional It can be used to provide extra information about the plugin type (e.g. async plugin, sync plugin... etc.). #[prost(string, tag="3")] pub flavor: ::prost::alloc::string::String, } From c5bcd9939b99ba24f4e4d8134c8600a2a0518ab4 Mon Sep 17 00:00:00 2001 From: Future Outlier Date: Thu, 9 Nov 2023 19:30:34 +0800 Subject: [PATCH 21/48] add task metadata runtime flavor error handling Signed-off-by: Future Outlier --- .../go/tasks/pluginmachinery/internal/webapi/core.go | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/flyteplugins/go/tasks/pluginmachinery/internal/webapi/core.go b/flyteplugins/go/tasks/pluginmachinery/internal/webapi/core.go index c7450fbe1b..d8f27367ff 100644 --- a/flyteplugins/go/tasks/pluginmachinery/internal/webapi/core.go +++ b/flyteplugins/go/tasks/pluginmachinery/internal/webapi/core.go @@ -111,8 +111,14 @@ func (c CorePlugin) Handle(ctx context.Context, tCtx core.TaskExecutionContext) } // Use the sync plugin to execute the task if the task template has the sync plugin flavor. - if taskTemplate.GetMetadata().GetRuntime().GetFlavor() == syncPlugin { - return c.syncHandle(ctx, tCtx) + metadata := taskTemplate.GetMetadata() + if metadata != nil { + runtime := metadata.GetRuntime() + if runtime != nil { + if runtime.GetFlavor() == syncPlugin { + return c.syncHandle(ctx, tCtx) + } + } } incomingState, err := c.unmarshalState(ctx, tCtx.PluginStateReader()) From e9ba32eafc193060016cba609931aecba8ebd916 Mon Sep 17 00:00:00 2001 From: Future Outlier Date: Fri, 10 Nov 2023 17:29:48 +0800 Subject: [PATCH 22/48] support more arguments in do task function, and add tests Signed-off-by: Future Outlier --- .../gen/pb-cpp/flyteidl/admin/agent.pb.cc | 182 ++++++- flyteidl/gen/pb-cpp/flyteidl/admin/agent.pb.h | 129 +++++ flyteidl/gen/pb-go/flyteidl/admin/agent.pb.go | 124 +++-- .../pb-go/flyteidl/admin/agent.pb.validate.go | 12 + .../gen/pb-java/flyteidl/admin/Agent.java | 451 +++++++++++++++++- flyteidl/gen/pb-js/flyteidl.d.ts | 12 + flyteidl/gen/pb-js/flyteidl.js | 36 ++ .../gen/pb_python/flyteidl/admin/agent_pb2.py | 14 +- .../pb_python/flyteidl/admin/agent_pb2.pyi | 8 +- flyteidl/gen/pb_rust/flyteidl.admin.rs | 6 + flyteidl/protos/flyteidl/admin/agent.proto | 4 + .../pluginmachinery/internal/webapi/core.go | 23 +- .../plugins/webapi/agent/integration_test.go | 5 + .../go/tasks/plugins/webapi/agent/plugin.go | 6 +- 14 files changed, 913 insertions(+), 99 deletions(-) diff --git a/flyteidl/gen/pb-cpp/flyteidl/admin/agent.pb.cc b/flyteidl/gen/pb-cpp/flyteidl/admin/agent.pb.cc index 586c6389b0..c964f8fac5 100644 --- a/flyteidl/gen/pb-cpp/flyteidl/admin/agent.pb.cc +++ b/flyteidl/gen/pb-cpp/flyteidl/admin/agent.pb.cc @@ -251,10 +251,11 @@ static void InitDefaultsDoTaskRequest_flyteidl_2fadmin_2fagent_2eproto() { ::flyteidl::admin::DoTaskRequest::InitAsDefaultInstance(); } -::google::protobuf::internal::SCCInfo<2> scc_info_DoTaskRequest_flyteidl_2fadmin_2fagent_2eproto = - {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 2, InitDefaultsDoTaskRequest_flyteidl_2fadmin_2fagent_2eproto}, { +::google::protobuf::internal::SCCInfo<3> scc_info_DoTaskRequest_flyteidl_2fadmin_2fagent_2eproto = + {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 3, InitDefaultsDoTaskRequest_flyteidl_2fadmin_2fagent_2eproto}, { &scc_info_Literal_flyteidl_2fcore_2fliterals_2eproto.base, - &scc_info_TaskTemplate_flyteidl_2fcore_2ftasks_2eproto.base,}}; + &scc_info_TaskTemplate_flyteidl_2fcore_2ftasks_2eproto.base, + &scc_info_TaskExecutionMetadata_flyteidl_2fadmin_2fagent_2eproto.base,}}; static void InitDefaultsDoTaskResponse_flyteidl_2fadmin_2fagent_2eproto() { GOOGLE_PROTOBUF_VERIFY_VERSION; @@ -385,6 +386,8 @@ const ::google::protobuf::uint32 TableStruct_flyteidl_2fadmin_2fagent_2eproto::o ~0u, // no _weak_field_map_ PROTOBUF_FIELD_OFFSET(::flyteidl::admin::DoTaskRequest, inputs_), PROTOBUF_FIELD_OFFSET(::flyteidl::admin::DoTaskRequest, template__), + PROTOBUF_FIELD_OFFSET(::flyteidl::admin::DoTaskRequest, output_prefix_), + PROTOBUF_FIELD_OFFSET(::flyteidl::admin::DoTaskRequest, task_execution_metadata_), ~0u, // no _has_bits_ PROTOBUF_FIELD_OFFSET(::flyteidl::admin::DoTaskResponse, _internal_metadata_), ~0u, // no _extensions_ @@ -405,7 +408,7 @@ static const ::google::protobuf::internal::MigrationSchema schemas[] PROTOBUF_SE { 74, -1, sizeof(::flyteidl::admin::DeleteTaskRequest)}, { 81, -1, sizeof(::flyteidl::admin::DeleteTaskResponse)}, { 86, -1, sizeof(::flyteidl::admin::DoTaskRequest)}, - { 93, -1, sizeof(::flyteidl::admin::DoTaskResponse)}, + { 95, -1, sizeof(::flyteidl::admin::DoTaskResponse)}, }; static ::google::protobuf::Message const * const file_default_instances[] = { @@ -462,21 +465,23 @@ const char descriptor_table_protodef_flyteidl_2fadmin_2fagent_2eproto[] = "dmin.State\022*\n\007outputs\030\002 \001(\0132\031.flyteidl.c" "ore.LiteralMap\022\017\n\007message\030\003 \001(\t\"=\n\021Delet" "eTaskRequest\022\021\n\ttask_type\030\001 \001(\t\022\025\n\rresou" - "rce_meta\030\002 \001(\014\"\024\n\022DeleteTaskResponse\"i\n\r" - "DoTaskRequest\022)\n\006inputs\030\001 \001(\0132\031.flyteidl" - ".core.LiteralMap\022-\n\010template\030\002 \001(\0132\033.fly" - "teidl.core.TaskTemplate\"<\n\016DoTaskRespons" - "e\022*\n\010resource\030\001 \001(\0132\030.flyteidl.admin.Res" - "ource*^\n\005State\022\025\n\021RETRYABLE_FAILURE\020\000\022\025\n" - "\021PERMANENT_FAILURE\020\001\022\013\n\007PENDING\020\002\022\013\n\007RUN" - "NING\020\003\022\r\n\tSUCCEEDED\020\004B=Z;github.com/flyt" - "eorg/flyte/flyteidl/gen/pb-go/flyteidl/a" - "dminb\006proto3" + "rce_meta\030\002 \001(\014\"\024\n\022DeleteTaskResponse\"\310\001\n" + "\rDoTaskRequest\022)\n\006inputs\030\001 \001(\0132\031.flyteid" + "l.core.LiteralMap\022-\n\010template\030\002 \001(\0132\033.fl" + "yteidl.core.TaskTemplate\022\025\n\routput_prefi" + "x\030\003 \001(\t\022F\n\027task_execution_metadata\030\004 \001(\013" + "2%.flyteidl.admin.TaskExecutionMetadata\"" + "<\n\016DoTaskResponse\022*\n\010resource\030\001 \001(\0132\030.fl" + "yteidl.admin.Resource*^\n\005State\022\025\n\021RETRYA" + "BLE_FAILURE\020\000\022\025\n\021PERMANENT_FAILURE\020\001\022\013\n\007" + "PENDING\020\002\022\013\n\007RUNNING\020\003\022\r\n\tSUCCEEDED\020\004B=Z" + ";github.com/flyteorg/flyte/flyteidl/gen/" + "pb-go/flyteidl/adminb\006proto3" ; ::google::protobuf::internal::DescriptorTable descriptor_table_flyteidl_2fadmin_2fagent_2eproto = { false, InitDefaults_flyteidl_2fadmin_2fagent_2eproto, descriptor_table_protodef_flyteidl_2fadmin_2fagent_2eproto, - "flyteidl/admin/agent.proto", &assign_descriptors_table_flyteidl_2fadmin_2fagent_2eproto, 1612, + "flyteidl/admin/agent.proto", &assign_descriptors_table_flyteidl_2fadmin_2fagent_2eproto, 1708, }; void AddDescriptors_flyteidl_2fadmin_2fagent_2eproto() { @@ -3994,11 +3999,14 @@ void DoTaskRequest::InitAsDefaultInstance() { ::flyteidl::core::LiteralMap::internal_default_instance()); ::flyteidl::admin::_DoTaskRequest_default_instance_._instance.get_mutable()->template__ = const_cast< ::flyteidl::core::TaskTemplate*>( ::flyteidl::core::TaskTemplate::internal_default_instance()); + ::flyteidl::admin::_DoTaskRequest_default_instance_._instance.get_mutable()->task_execution_metadata_ = const_cast< ::flyteidl::admin::TaskExecutionMetadata*>( + ::flyteidl::admin::TaskExecutionMetadata::internal_default_instance()); } class DoTaskRequest::HasBitSetters { public: static const ::flyteidl::core::LiteralMap& inputs(const DoTaskRequest* msg); static const ::flyteidl::core::TaskTemplate& template_(const DoTaskRequest* msg); + static const ::flyteidl::admin::TaskExecutionMetadata& task_execution_metadata(const DoTaskRequest* msg); }; const ::flyteidl::core::LiteralMap& @@ -4009,6 +4017,10 @@ const ::flyteidl::core::TaskTemplate& DoTaskRequest::HasBitSetters::template_(const DoTaskRequest* msg) { return *msg->template__; } +const ::flyteidl::admin::TaskExecutionMetadata& +DoTaskRequest::HasBitSetters::task_execution_metadata(const DoTaskRequest* msg) { + return *msg->task_execution_metadata_; +} void DoTaskRequest::clear_inputs() { if (GetArenaNoVirtual() == nullptr && inputs_ != nullptr) { delete inputs_; @@ -4024,6 +4036,8 @@ void DoTaskRequest::clear_template_() { #if !defined(_MSC_VER) || _MSC_VER >= 1900 const int DoTaskRequest::kInputsFieldNumber; const int DoTaskRequest::kTemplateFieldNumber; +const int DoTaskRequest::kOutputPrefixFieldNumber; +const int DoTaskRequest::kTaskExecutionMetadataFieldNumber; #endif // !defined(_MSC_VER) || _MSC_VER >= 1900 DoTaskRequest::DoTaskRequest() @@ -4035,6 +4049,10 @@ DoTaskRequest::DoTaskRequest(const DoTaskRequest& from) : ::google::protobuf::Message(), _internal_metadata_(nullptr) { _internal_metadata_.MergeFrom(from._internal_metadata_); + output_prefix_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + if (from.output_prefix().size() > 0) { + output_prefix_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.output_prefix_); + } if (from.has_inputs()) { inputs_ = new ::flyteidl::core::LiteralMap(*from.inputs_); } else { @@ -4045,15 +4063,21 @@ DoTaskRequest::DoTaskRequest(const DoTaskRequest& from) } else { template__ = nullptr; } + if (from.has_task_execution_metadata()) { + task_execution_metadata_ = new ::flyteidl::admin::TaskExecutionMetadata(*from.task_execution_metadata_); + } else { + task_execution_metadata_ = nullptr; + } // @@protoc_insertion_point(copy_constructor:flyteidl.admin.DoTaskRequest) } void DoTaskRequest::SharedCtor() { ::google::protobuf::internal::InitSCC( &scc_info_DoTaskRequest_flyteidl_2fadmin_2fagent_2eproto.base); + output_prefix_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); ::memset(&inputs_, 0, static_cast( - reinterpret_cast(&template__) - - reinterpret_cast(&inputs_)) + sizeof(template__)); + reinterpret_cast(&task_execution_metadata_) - + reinterpret_cast(&inputs_)) + sizeof(task_execution_metadata_)); } DoTaskRequest::~DoTaskRequest() { @@ -4062,8 +4086,10 @@ DoTaskRequest::~DoTaskRequest() { } void DoTaskRequest::SharedDtor() { + output_prefix_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); if (this != internal_default_instance()) delete inputs_; if (this != internal_default_instance()) delete template__; + if (this != internal_default_instance()) delete task_execution_metadata_; } void DoTaskRequest::SetCachedSize(int size) const { @@ -4081,6 +4107,7 @@ void DoTaskRequest::Clear() { // Prevent compiler warnings about cached_has_bits being unused (void) cached_has_bits; + output_prefix_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); if (GetArenaNoVirtual() == nullptr && inputs_ != nullptr) { delete inputs_; } @@ -4089,6 +4116,10 @@ void DoTaskRequest::Clear() { delete template__; } template__ = nullptr; + if (GetArenaNoVirtual() == nullptr && task_execution_metadata_ != nullptr) { + delete task_execution_metadata_; + } + task_execution_metadata_ = nullptr; _internal_metadata_.Clear(); } @@ -4131,6 +4162,35 @@ const char* DoTaskRequest::_InternalParse(const char* begin, const char* end, vo {parser_till_end, object}, ptr - size, ptr)); break; } + // string output_prefix = 3; + case 3: { + if (static_cast<::google::protobuf::uint8>(tag) != 26) goto handle_unusual; + ptr = ::google::protobuf::io::ReadSize(ptr, &size); + GOOGLE_PROTOBUF_PARSER_ASSERT(ptr); + ctx->extra_parse_data().SetFieldName("flyteidl.admin.DoTaskRequest.output_prefix"); + object = msg->mutable_output_prefix(); + if (size > end - ptr + ::google::protobuf::internal::ParseContext::kSlopBytes) { + parser_till_end = ::google::protobuf::internal::GreedyStringParserUTF8; + goto string_till_end; + } + GOOGLE_PROTOBUF_PARSER_ASSERT(::google::protobuf::internal::StringCheckUTF8(ptr, size, ctx)); + ::google::protobuf::internal::InlineGreedyStringParser(object, ptr, size, ctx); + ptr += size; + break; + } + // .flyteidl.admin.TaskExecutionMetadata task_execution_metadata = 4; + case 4: { + if (static_cast<::google::protobuf::uint8>(tag) != 34) goto handle_unusual; + ptr = ::google::protobuf::io::ReadSize(ptr, &size); + GOOGLE_PROTOBUF_PARSER_ASSERT(ptr); + parser_till_end = ::flyteidl::admin::TaskExecutionMetadata::_InternalParse; + object = msg->mutable_task_execution_metadata(); + if (size > end - ptr) goto len_delim_till_end; + ptr += size; + GOOGLE_PROTOBUF_PARSER_ASSERT(ctx->ParseExactRange( + {parser_till_end, object}, ptr - size, ptr)); + break; + } default: { handle_unusual: if ((tag & 7) == 4 || tag == 0) { @@ -4146,6 +4206,10 @@ const char* DoTaskRequest::_InternalParse(const char* begin, const char* end, vo } // switch } // while return ptr; +string_till_end: + static_cast<::std::string*>(object)->clear(); + static_cast<::std::string*>(object)->reserve(size); + goto len_delim_till_end; len_delim_till_end: return ctx->StoreAndTailCall(ptr, end, {_InternalParse, msg}, {parser_till_end, object}, size); @@ -4183,6 +4247,32 @@ bool DoTaskRequest::MergePartialFromCodedStream( break; } + // string output_prefix = 3; + case 3: { + if (static_cast< ::google::protobuf::uint8>(tag) == (26 & 0xFF)) { + DO_(::google::protobuf::internal::WireFormatLite::ReadString( + input, this->mutable_output_prefix())); + DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String( + this->output_prefix().data(), static_cast(this->output_prefix().length()), + ::google::protobuf::internal::WireFormatLite::PARSE, + "flyteidl.admin.DoTaskRequest.output_prefix")); + } else { + goto handle_unusual; + } + break; + } + + // .flyteidl.admin.TaskExecutionMetadata task_execution_metadata = 4; + case 4: { + if (static_cast< ::google::protobuf::uint8>(tag) == (34 & 0xFF)) { + DO_(::google::protobuf::internal::WireFormatLite::ReadMessage( + input, mutable_task_execution_metadata())); + } else { + goto handle_unusual; + } + break; + } + default: { handle_unusual: if (tag == 0) { @@ -4222,6 +4312,22 @@ void DoTaskRequest::SerializeWithCachedSizes( 2, HasBitSetters::template_(this), output); } + // string output_prefix = 3; + if (this->output_prefix().size() > 0) { + ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( + this->output_prefix().data(), static_cast(this->output_prefix().length()), + ::google::protobuf::internal::WireFormatLite::SERIALIZE, + "flyteidl.admin.DoTaskRequest.output_prefix"); + ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased( + 3, this->output_prefix(), output); + } + + // .flyteidl.admin.TaskExecutionMetadata task_execution_metadata = 4; + if (this->has_task_execution_metadata()) { + ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray( + 4, HasBitSetters::task_execution_metadata(this), output); + } + if (_internal_metadata_.have_unknown_fields()) { ::google::protobuf::internal::WireFormat::SerializeUnknownFields( _internal_metadata_.unknown_fields(), output); @@ -4249,6 +4355,24 @@ ::google::protobuf::uint8* DoTaskRequest::InternalSerializeWithCachedSizesToArra 2, HasBitSetters::template_(this), target); } + // string output_prefix = 3; + if (this->output_prefix().size() > 0) { + ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( + this->output_prefix().data(), static_cast(this->output_prefix().length()), + ::google::protobuf::internal::WireFormatLite::SERIALIZE, + "flyteidl.admin.DoTaskRequest.output_prefix"); + target = + ::google::protobuf::internal::WireFormatLite::WriteStringToArray( + 3, this->output_prefix(), target); + } + + // .flyteidl.admin.TaskExecutionMetadata task_execution_metadata = 4; + if (this->has_task_execution_metadata()) { + target = ::google::protobuf::internal::WireFormatLite:: + InternalWriteMessageToArray( + 4, HasBitSetters::task_execution_metadata(this), target); + } + if (_internal_metadata_.have_unknown_fields()) { target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray( _internal_metadata_.unknown_fields(), target); @@ -4270,6 +4394,13 @@ size_t DoTaskRequest::ByteSizeLong() const { // Prevent compiler warnings about cached_has_bits being unused (void) cached_has_bits; + // string output_prefix = 3; + if (this->output_prefix().size() > 0) { + total_size += 1 + + ::google::protobuf::internal::WireFormatLite::StringSize( + this->output_prefix()); + } + // .flyteidl.core.LiteralMap inputs = 1; if (this->has_inputs()) { total_size += 1 + @@ -4284,6 +4415,13 @@ size_t DoTaskRequest::ByteSizeLong() const { *template__); } + // .flyteidl.admin.TaskExecutionMetadata task_execution_metadata = 4; + if (this->has_task_execution_metadata()) { + total_size += 1 + + ::google::protobuf::internal::WireFormatLite::MessageSize( + *task_execution_metadata_); + } + int cached_size = ::google::protobuf::internal::ToCachedSize(total_size); SetCachedSize(cached_size); return total_size; @@ -4311,12 +4449,19 @@ void DoTaskRequest::MergeFrom(const DoTaskRequest& from) { ::google::protobuf::uint32 cached_has_bits = 0; (void) cached_has_bits; + if (from.output_prefix().size() > 0) { + + output_prefix_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.output_prefix_); + } if (from.has_inputs()) { mutable_inputs()->::flyteidl::core::LiteralMap::MergeFrom(from.inputs()); } if (from.has_template_()) { mutable_template_()->::flyteidl::core::TaskTemplate::MergeFrom(from.template_()); } + if (from.has_task_execution_metadata()) { + mutable_task_execution_metadata()->::flyteidl::admin::TaskExecutionMetadata::MergeFrom(from.task_execution_metadata()); + } } void DoTaskRequest::CopyFrom(const ::google::protobuf::Message& from) { @@ -4344,8 +4489,11 @@ void DoTaskRequest::Swap(DoTaskRequest* other) { void DoTaskRequest::InternalSwap(DoTaskRequest* other) { using std::swap; _internal_metadata_.Swap(&other->_internal_metadata_); + output_prefix_.Swap(&other->output_prefix_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(), + GetArenaNoVirtual()); swap(inputs_, other->inputs_); swap(template__, other->template__); + swap(task_execution_metadata_, other->task_execution_metadata_); } ::google::protobuf::Metadata DoTaskRequest::GetMetadata() const { diff --git a/flyteidl/gen/pb-cpp/flyteidl/admin/agent.pb.h b/flyteidl/gen/pb-cpp/flyteidl/admin/agent.pb.h index 2f0ac1b42c..43ac235dee 100644 --- a/flyteidl/gen/pb-cpp/flyteidl/admin/agent.pb.h +++ b/flyteidl/gen/pb-cpp/flyteidl/admin/agent.pb.h @@ -1400,6 +1400,20 @@ class DoTaskRequest final : // accessors ------------------------------------------------------- + // string output_prefix = 3; + void clear_output_prefix(); + static const int kOutputPrefixFieldNumber = 3; + const ::std::string& output_prefix() const; + void set_output_prefix(const ::std::string& value); + #if LANG_CXX11 + void set_output_prefix(::std::string&& value); + #endif + void set_output_prefix(const char* value); + void set_output_prefix(const char* value, size_t size); + ::std::string* mutable_output_prefix(); + ::std::string* release_output_prefix(); + void set_allocated_output_prefix(::std::string* output_prefix); + // .flyteidl.core.LiteralMap inputs = 1; bool has_inputs() const; void clear_inputs(); @@ -1418,13 +1432,24 @@ class DoTaskRequest final : ::flyteidl::core::TaskTemplate* mutable_template_(); void set_allocated_template_(::flyteidl::core::TaskTemplate* template_); + // .flyteidl.admin.TaskExecutionMetadata task_execution_metadata = 4; + bool has_task_execution_metadata() const; + void clear_task_execution_metadata(); + static const int kTaskExecutionMetadataFieldNumber = 4; + const ::flyteidl::admin::TaskExecutionMetadata& task_execution_metadata() const; + ::flyteidl::admin::TaskExecutionMetadata* release_task_execution_metadata(); + ::flyteidl::admin::TaskExecutionMetadata* mutable_task_execution_metadata(); + void set_allocated_task_execution_metadata(::flyteidl::admin::TaskExecutionMetadata* task_execution_metadata); + // @@protoc_insertion_point(class_scope:flyteidl.admin.DoTaskRequest) private: class HasBitSetters; ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_; + ::google::protobuf::internal::ArenaStringPtr output_prefix_; ::flyteidl::core::LiteralMap* inputs_; ::flyteidl::core::TaskTemplate* template__; + ::flyteidl::admin::TaskExecutionMetadata* task_execution_metadata_; mutable ::google::protobuf::internal::CachedSize _cached_size_; friend struct ::TableStruct_flyteidl_2fadmin_2fagent_2eproto; }; @@ -2509,6 +2534,110 @@ inline void DoTaskRequest::set_allocated_template_(::flyteidl::core::TaskTemplat // @@protoc_insertion_point(field_set_allocated:flyteidl.admin.DoTaskRequest.template) } +// string output_prefix = 3; +inline void DoTaskRequest::clear_output_prefix() { + output_prefix_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); +} +inline const ::std::string& DoTaskRequest::output_prefix() const { + // @@protoc_insertion_point(field_get:flyteidl.admin.DoTaskRequest.output_prefix) + return output_prefix_.GetNoArena(); +} +inline void DoTaskRequest::set_output_prefix(const ::std::string& value) { + + output_prefix_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value); + // @@protoc_insertion_point(field_set:flyteidl.admin.DoTaskRequest.output_prefix) +} +#if LANG_CXX11 +inline void DoTaskRequest::set_output_prefix(::std::string&& value) { + + output_prefix_.SetNoArena( + &::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::move(value)); + // @@protoc_insertion_point(field_set_rvalue:flyteidl.admin.DoTaskRequest.output_prefix) +} +#endif +inline void DoTaskRequest::set_output_prefix(const char* value) { + GOOGLE_DCHECK(value != nullptr); + + output_prefix_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); + // @@protoc_insertion_point(field_set_char:flyteidl.admin.DoTaskRequest.output_prefix) +} +inline void DoTaskRequest::set_output_prefix(const char* value, size_t size) { + + output_prefix_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), + ::std::string(reinterpret_cast(value), size)); + // @@protoc_insertion_point(field_set_pointer:flyteidl.admin.DoTaskRequest.output_prefix) +} +inline ::std::string* DoTaskRequest::mutable_output_prefix() { + + // @@protoc_insertion_point(field_mutable:flyteidl.admin.DoTaskRequest.output_prefix) + return output_prefix_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); +} +inline ::std::string* DoTaskRequest::release_output_prefix() { + // @@protoc_insertion_point(field_release:flyteidl.admin.DoTaskRequest.output_prefix) + + return output_prefix_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); +} +inline void DoTaskRequest::set_allocated_output_prefix(::std::string* output_prefix) { + if (output_prefix != nullptr) { + + } else { + + } + output_prefix_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), output_prefix); + // @@protoc_insertion_point(field_set_allocated:flyteidl.admin.DoTaskRequest.output_prefix) +} + +// .flyteidl.admin.TaskExecutionMetadata task_execution_metadata = 4; +inline bool DoTaskRequest::has_task_execution_metadata() const { + return this != internal_default_instance() && task_execution_metadata_ != nullptr; +} +inline void DoTaskRequest::clear_task_execution_metadata() { + if (GetArenaNoVirtual() == nullptr && task_execution_metadata_ != nullptr) { + delete task_execution_metadata_; + } + task_execution_metadata_ = nullptr; +} +inline const ::flyteidl::admin::TaskExecutionMetadata& DoTaskRequest::task_execution_metadata() const { + const ::flyteidl::admin::TaskExecutionMetadata* p = task_execution_metadata_; + // @@protoc_insertion_point(field_get:flyteidl.admin.DoTaskRequest.task_execution_metadata) + return p != nullptr ? *p : *reinterpret_cast( + &::flyteidl::admin::_TaskExecutionMetadata_default_instance_); +} +inline ::flyteidl::admin::TaskExecutionMetadata* DoTaskRequest::release_task_execution_metadata() { + // @@protoc_insertion_point(field_release:flyteidl.admin.DoTaskRequest.task_execution_metadata) + + ::flyteidl::admin::TaskExecutionMetadata* temp = task_execution_metadata_; + task_execution_metadata_ = nullptr; + return temp; +} +inline ::flyteidl::admin::TaskExecutionMetadata* DoTaskRequest::mutable_task_execution_metadata() { + + if (task_execution_metadata_ == nullptr) { + auto* p = CreateMaybeMessage<::flyteidl::admin::TaskExecutionMetadata>(GetArenaNoVirtual()); + task_execution_metadata_ = p; + } + // @@protoc_insertion_point(field_mutable:flyteidl.admin.DoTaskRequest.task_execution_metadata) + return task_execution_metadata_; +} +inline void DoTaskRequest::set_allocated_task_execution_metadata(::flyteidl::admin::TaskExecutionMetadata* task_execution_metadata) { + ::google::protobuf::Arena* message_arena = GetArenaNoVirtual(); + if (message_arena == nullptr) { + delete task_execution_metadata_; + } + if (task_execution_metadata) { + ::google::protobuf::Arena* submessage_arena = nullptr; + if (message_arena != submessage_arena) { + task_execution_metadata = ::google::protobuf::internal::GetOwnedMessage( + message_arena, task_execution_metadata, submessage_arena); + } + + } else { + + } + task_execution_metadata_ = task_execution_metadata; + // @@protoc_insertion_point(field_set_allocated:flyteidl.admin.DoTaskRequest.task_execution_metadata) +} + // ------------------------------------------------------------------- // DoTaskResponse diff --git a/flyteidl/gen/pb-go/flyteidl/admin/agent.pb.go b/flyteidl/gen/pb-go/flyteidl/admin/agent.pb.go index 9a25ed10e2..ae67cc93a1 100644 --- a/flyteidl/gen/pb-go/flyteidl/admin/agent.pb.go +++ b/flyteidl/gen/pb-go/flyteidl/admin/agent.pb.go @@ -492,10 +492,14 @@ type DoTaskRequest struct { // +optional Inputs *core.LiteralMap `protobuf:"bytes,1,opt,name=inputs,proto3" json:"inputs,omitempty"` // Template of the task that encapsulates all the metadata of the task. - Template *core.TaskTemplate `protobuf:"bytes,2,opt,name=template,proto3" json:"template,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Template *core.TaskTemplate `protobuf:"bytes,2,opt,name=template,proto3" json:"template,omitempty"` + // Prefix for where task output data will be written. (e.g. s3://my-bucket/randomstring) + OutputPrefix string `protobuf:"bytes,3,opt,name=output_prefix,json=outputPrefix,proto3" json:"output_prefix,omitempty"` + // subset of runtime task execution metadata. + TaskExecutionMetadata *TaskExecutionMetadata `protobuf:"bytes,4,opt,name=task_execution_metadata,json=taskExecutionMetadata,proto3" json:"task_execution_metadata,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *DoTaskRequest) Reset() { *m = DoTaskRequest{} } @@ -537,6 +541,20 @@ func (m *DoTaskRequest) GetTemplate() *core.TaskTemplate { return nil } +func (m *DoTaskRequest) GetOutputPrefix() string { + if m != nil { + return m.OutputPrefix + } + return "" +} + +func (m *DoTaskRequest) GetTaskExecutionMetadata() *TaskExecutionMetadata { + if m != nil { + return m.TaskExecutionMetadata + } + return nil +} + type DoTaskResponse struct { Resource *Resource `protobuf:"bytes,1,opt,name=resource,proto3" json:"resource,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` @@ -596,53 +614,53 @@ func init() { func init() { proto.RegisterFile("flyteidl/admin/agent.proto", fileDescriptor_c434e52bb0028071) } var fileDescriptor_c434e52bb0028071 = []byte{ - // 758 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x55, 0xef, 0x6f, 0x2a, 0x45, - 0x14, 0x15, 0x28, 0x14, 0x2e, 0x2d, 0x0f, 0xc6, 0x12, 0xb7, 0xbc, 0xa7, 0x69, 0xd6, 0x68, 0x1a, - 0x8d, 0x4b, 0x1e, 0xcf, 0x68, 0x9f, 0x46, 0x0d, 0x2d, 0x5b, 0x42, 0x42, 0x49, 0x33, 0x05, 0xa3, - 0x26, 0x4a, 0x86, 0xe5, 0x82, 0x1b, 0x96, 0xd9, 0x75, 0x67, 0x96, 0x94, 0xf8, 0xd1, 0xc4, 0xbf, - 0xc1, 0x3f, 0xd7, 0xec, 0xec, 0x8f, 0x02, 0x41, 0xd3, 0xa6, 0x1f, 0xde, 0xb7, 0x9d, 0x7b, 0xee, - 0x3d, 0xf7, 0xec, 0x3d, 0x77, 0x32, 0xd0, 0x98, 0x39, 0x6b, 0x89, 0xf6, 0xd4, 0x69, 0xb2, 0xe9, - 0xd2, 0xe6, 0x4d, 0x36, 0x47, 0x2e, 0x0d, 0xcf, 0x77, 0xa5, 0x4b, 0x2a, 0x09, 0x66, 0x28, 0xac, - 0xf1, 0x2a, 0xcd, 0xb5, 0x5c, 0x1f, 0x9b, 0x8e, 0x2d, 0xd1, 0x67, 0x8e, 0x88, 0xb2, 0x1b, 0xa7, - 0xdb, 0xa8, 0x64, 0x62, 0x91, 0x40, 0x1f, 0x6e, 0x43, 0x36, 0x97, 0xe8, 0xcf, 0x98, 0x85, 0x31, - 0xfc, 0xd1, 0x0e, 0x3c, 0x45, 0x2e, 0xed, 0x99, 0x8d, 0x7e, 0x84, 0xeb, 0xff, 0xe4, 0xa1, 0x3e, - 0x64, 0x62, 0x61, 0xde, 0xa3, 0x15, 0x48, 0xdb, 0xe5, 0x37, 0x28, 0xd9, 0x94, 0x49, 0x46, 0x28, - 0xd4, 0xc2, 0x3e, 0x63, 0x4c, 0x90, 0xb1, 0x3d, 0xd5, 0x32, 0x67, 0x99, 0xf3, 0x72, 0xeb, 0x53, - 0x23, 0x55, 0x1f, 0xb2, 0x1a, 0x5b, 0x04, 0xbd, 0xb4, 0x05, 0x7d, 0x21, 0xb7, 0x01, 0xf2, 0x0a, - 0x4a, 0x9c, 0x2d, 0x51, 0x78, 0xcc, 0x42, 0x2d, 0x7b, 0x96, 0x39, 0x2f, 0xd1, 0x87, 0x00, 0xe9, - 0x41, 0xc1, 0x61, 0x13, 0x74, 0x84, 0x96, 0x3b, 0xcb, 0x9d, 0x97, 0x5b, 0xaf, 0x8d, 0xed, 0x21, - 0x19, 0x7b, 0x85, 0x1a, 0x7d, 0x55, 0x63, 0x72, 0xe9, 0xaf, 0x69, 0x4c, 0x40, 0x7e, 0x82, 0x32, - 0xe3, 0xdc, 0x95, 0x2c, 0xcc, 0x14, 0xda, 0x81, 0xe2, 0xfb, 0xea, 0x71, 0x7c, 0xed, 0x87, 0xc2, - 0x88, 0x74, 0x93, 0x8a, 0x18, 0xf0, 0xfe, 0xe2, 0x42, 0x8c, 0x05, 0xfa, 0x2b, 0xdb, 0xc2, 0x31, - 0xb3, 0x2c, 0x37, 0xe0, 0x52, 0xcb, 0xab, 0x9f, 0xa9, 0x2d, 0x2e, 0xc4, 0x5d, 0x84, 0xb4, 0x23, - 0x80, 0x48, 0xa8, 0x23, 0x5f, 0xd9, 0xbe, 0xcb, 0x97, 0xc8, 0xe5, 0x78, 0xc5, 0x7c, 0x9b, 0x4d, - 0x1c, 0x14, 0x5a, 0x41, 0x69, 0xfa, 0xe1, 0x71, 0x9a, 0xcc, 0x07, 0x8a, 0x1f, 0x13, 0x86, 0x48, - 0xdc, 0x09, 0xee, 0x81, 0x1a, 0x6f, 0xa1, 0xbc, 0x31, 0x16, 0x52, 0x85, 0xdc, 0x02, 0xd7, 0xca, - 0xbd, 0x12, 0x0d, 0x3f, 0xc9, 0x09, 0xe4, 0x57, 0xcc, 0x09, 0x12, 0x17, 0xa2, 0xc3, 0x37, 0xd9, - 0x8b, 0x4c, 0xe3, 0x7b, 0xa8, 0xee, 0x4e, 0xe0, 0x49, 0xf5, 0x5d, 0x38, 0xfd, 0x4f, 0xb5, 0x4f, - 0x21, 0xd2, 0xff, 0xca, 0x42, 0xed, 0xca, 0x47, 0x26, 0x31, 0x9c, 0x09, 0xc5, 0x3f, 0x02, 0x14, - 0x92, 0xbc, 0x86, 0x82, 0xcd, 0xbd, 0x40, 0x8a, 0x78, 0x17, 0x4f, 0x77, 0x76, 0xb1, 0x1f, 0xdd, - 0x9c, 0x1b, 0xe6, 0xd1, 0x38, 0x91, 0x7c, 0x0d, 0x45, 0x89, 0x4b, 0xcf, 0x61, 0x32, 0xea, 0x52, - 0x6e, 0xbd, 0xdc, 0xb3, 0xc0, 0xc3, 0x38, 0x85, 0xa6, 0xc9, 0xe4, 0x63, 0x38, 0x76, 0x03, 0xe9, - 0x05, 0x72, 0xec, 0xf9, 0x38, 0xb3, 0xef, 0xb5, 0x9c, 0xd2, 0x78, 0x14, 0x05, 0x6f, 0x55, 0x8c, - 0xfc, 0x0a, 0x1f, 0xec, 0xdc, 0x93, 0x65, 0xec, 0x9a, 0x76, 0xa0, 0x9a, 0x7d, 0xf2, 0x28, 0x8b, - 0x69, 0x5d, 0xee, 0x0b, 0xeb, 0x6f, 0x81, 0x6c, 0x0e, 0x41, 0x78, 0x2e, 0x17, 0x4a, 0x99, 0x8f, - 0xc2, 0x0d, 0x7c, 0x0b, 0x55, 0x3b, 0x35, 0x8c, 0x23, 0x7a, 0x94, 0x04, 0xc3, 0x72, 0x9d, 0x42, - 0xa5, 0x8b, 0x72, 0x73, 0x78, 0x2f, 0xa1, 0xa4, 0xb4, 0xca, 0xb5, 0x87, 0xb1, 0x09, 0xc5, 0x30, - 0x30, 0x5c, 0x7b, 0x7b, 0x38, 0xb3, 0x7b, 0x38, 0xbb, 0xf0, 0x22, 0xe5, 0x8c, 0xb5, 0x7c, 0x09, - 0xc5, 0x24, 0x25, 0xf6, 0x44, 0xdb, 0xfd, 0x63, 0x1a, 0xe3, 0x34, 0xcd, 0xd4, 0xff, 0xce, 0x40, - 0x31, 0x09, 0x93, 0xcf, 0x21, 0x2f, 0x64, 0x68, 0x4f, 0x58, 0x5f, 0x69, 0xd5, 0x77, 0xeb, 0xef, - 0x42, 0x90, 0x46, 0x39, 0xe4, 0x0d, 0x1c, 0x46, 0x06, 0x88, 0xd8, 0xcd, 0xff, 0x59, 0x81, 0x24, - 0x93, 0x68, 0x70, 0xb8, 0x44, 0x21, 0xd8, 0x1c, 0x63, 0x13, 0x93, 0xa3, 0x3e, 0x82, 0x5a, 0x07, - 0x1d, 0xdc, 0xde, 0xb2, 0xe7, 0x0f, 0xea, 0x04, 0xc8, 0x26, 0x6d, 0x34, 0x2b, 0xfd, 0x4f, 0x38, - 0xee, 0xb8, 0xef, 0x68, 0x9d, 0xf5, 0x6b, 0xa8, 0x24, 0xcd, 0x9f, 0x63, 0xdd, 0x67, 0xbf, 0x41, - 0x5e, 0x19, 0x42, 0xea, 0x50, 0xa3, 0xe6, 0x90, 0xfe, 0xdc, 0xbe, 0xec, 0x9b, 0xe3, 0xeb, 0x76, - 0xaf, 0x3f, 0xa2, 0x66, 0xf5, 0xbd, 0x30, 0x7c, 0x6b, 0xd2, 0x9b, 0xf6, 0xc0, 0x1c, 0x0c, 0xd3, - 0x70, 0x86, 0x94, 0xe1, 0xf0, 0xd6, 0x1c, 0x74, 0x7a, 0x83, 0x6e, 0x35, 0x1b, 0x1e, 0xe8, 0x68, - 0x30, 0x08, 0x0f, 0x39, 0x72, 0x0c, 0xa5, 0xbb, 0xd1, 0xd5, 0x95, 0x69, 0x76, 0xcc, 0x4e, 0xf5, - 0xe0, 0xf2, 0xbb, 0x5f, 0xbe, 0x9d, 0xdb, 0xf2, 0xf7, 0x60, 0x62, 0x58, 0xee, 0xb2, 0xa9, 0xf4, - 0xb8, 0xfe, 0x3c, 0xfa, 0x68, 0xa6, 0xef, 0xd9, 0x1c, 0x79, 0xd3, 0x9b, 0x7c, 0x31, 0x77, 0x9b, - 0xdb, 0xcf, 0xec, 0xa4, 0xa0, 0x5e, 0xb6, 0x37, 0xff, 0x06, 0x00, 0x00, 0xff, 0xff, 0x87, 0x95, - 0xfa, 0x59, 0x7f, 0x07, 0x00, 0x00, + // 757 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x55, 0xdf, 0x6f, 0x32, 0x45, + 0x14, 0x15, 0x28, 0x14, 0x2e, 0x2d, 0x1f, 0x8c, 0x25, 0x6e, 0xf9, 0xaa, 0x69, 0x30, 0x9a, 0x46, + 0xe3, 0x92, 0x52, 0xa3, 0xad, 0x46, 0x0d, 0x2d, 0x5b, 0x42, 0x42, 0x49, 0x33, 0x05, 0xa3, 0x26, + 0x4a, 0x86, 0xe5, 0x82, 0x1b, 0x96, 0xd9, 0x75, 0x67, 0x96, 0x94, 0x67, 0x13, 0xff, 0x06, 0xff, + 0x5b, 0xcd, 0xce, 0xfe, 0x28, 0x10, 0x34, 0x6d, 0xfa, 0xf8, 0xbd, 0xed, 0xdc, 0x73, 0xef, 0x99, + 0xb3, 0xe7, 0xdc, 0xcd, 0x42, 0x6d, 0x6a, 0xaf, 0x24, 0x5a, 0x13, 0xbb, 0xc1, 0x26, 0x0b, 0x8b, + 0x37, 0xd8, 0x0c, 0xb9, 0xd4, 0x5d, 0xcf, 0x91, 0x0e, 0x29, 0xc5, 0x98, 0xae, 0xb0, 0xda, 0x49, + 0xd2, 0x6b, 0x3a, 0x1e, 0x36, 0x6c, 0x4b, 0xa2, 0xc7, 0x6c, 0x11, 0x76, 0xd7, 0x8e, 0x37, 0x51, + 0xc9, 0xc4, 0x3c, 0x86, 0x3e, 0xdc, 0x84, 0x2c, 0x2e, 0xd1, 0x9b, 0x32, 0x13, 0x23, 0xf8, 0xa3, + 0x2d, 0x78, 0x82, 0x5c, 0x5a, 0x53, 0x0b, 0xbd, 0x10, 0xaf, 0xff, 0x9d, 0x85, 0xea, 0x80, 0x89, + 0xb9, 0xf1, 0x88, 0xa6, 0x2f, 0x2d, 0x87, 0xdf, 0xa1, 0x64, 0x13, 0x26, 0x19, 0xa1, 0x50, 0x09, + 0xee, 0x19, 0x61, 0x8c, 0x8c, 0xac, 0x89, 0x96, 0x3a, 0x4d, 0x9d, 0x15, 0x9b, 0x9f, 0xea, 0x89, + 0xfa, 0x80, 0x55, 0xdf, 0x20, 0xe8, 0x26, 0x57, 0xd0, 0x37, 0x72, 0x13, 0x20, 0x27, 0x50, 0xe0, + 0x6c, 0x81, 0xc2, 0x65, 0x26, 0x6a, 0xe9, 0xd3, 0xd4, 0x59, 0x81, 0x3e, 0x15, 0x48, 0x17, 0x72, + 0x36, 0x1b, 0xa3, 0x2d, 0xb4, 0xcc, 0x69, 0xe6, 0xac, 0xd8, 0x3c, 0xd7, 0x37, 0x4d, 0xd2, 0x77, + 0x0a, 0xd5, 0x7b, 0x6a, 0xc6, 0xe0, 0xd2, 0x5b, 0xd1, 0x88, 0x80, 0xfc, 0x04, 0x45, 0xc6, 0xb9, + 0x23, 0x59, 0xd0, 0x29, 0xb4, 0x3d, 0xc5, 0xf7, 0xd5, 0xf3, 0xf8, 0x5a, 0x4f, 0x83, 0x21, 0xe9, + 0x3a, 0x15, 0xd1, 0xe1, 0xfd, 0xf9, 0xa5, 0x18, 0x09, 0xf4, 0x96, 0x96, 0x89, 0x23, 0x66, 0x9a, + 0x8e, 0xcf, 0xa5, 0x96, 0x55, 0x2f, 0x53, 0x99, 0x5f, 0x8a, 0x87, 0x10, 0x69, 0x85, 0x00, 0x91, + 0x50, 0x45, 0xbe, 0xb4, 0x3c, 0x87, 0x2f, 0x90, 0xcb, 0xd1, 0x92, 0x79, 0x16, 0x1b, 0xdb, 0x28, + 0xb4, 0x9c, 0xd2, 0xf4, 0xc3, 0xf3, 0x34, 0x19, 0x4f, 0x14, 0x3f, 0xc6, 0x0c, 0xa1, 0xb8, 0x23, + 0xdc, 0x01, 0xd5, 0xae, 0xa0, 0xb8, 0x66, 0x0b, 0x29, 0x43, 0x66, 0x8e, 0x2b, 0x95, 0x5e, 0x81, + 0x06, 0x8f, 0xe4, 0x08, 0xb2, 0x4b, 0x66, 0xfb, 0x71, 0x0a, 0xe1, 0xe1, 0x9b, 0xf4, 0x65, 0xaa, + 0xf6, 0x3d, 0x94, 0xb7, 0x1d, 0x78, 0xd1, 0x7c, 0x07, 0x8e, 0xff, 0x53, 0xed, 0x4b, 0x88, 0xea, + 0x7f, 0xa6, 0xa1, 0x72, 0xe3, 0x21, 0x93, 0x18, 0x78, 0x42, 0xf1, 0x0f, 0x1f, 0x85, 0x24, 0xe7, + 0x90, 0xb3, 0xb8, 0xeb, 0x4b, 0x11, 0xed, 0xe2, 0xf1, 0xd6, 0x2e, 0xf6, 0xc2, 0x2f, 0xe7, 0x8e, + 0xb9, 0x34, 0x6a, 0x24, 0x5f, 0x43, 0x5e, 0xe2, 0xc2, 0xb5, 0x99, 0x0c, 0x6f, 0x29, 0x36, 0xdf, + 0xee, 0x58, 0xe0, 0x41, 0xd4, 0x42, 0x93, 0x66, 0xf2, 0x31, 0x1c, 0x3a, 0xbe, 0x74, 0x7d, 0x39, + 0x72, 0x3d, 0x9c, 0x5a, 0x8f, 0x5a, 0x46, 0x69, 0x3c, 0x08, 0x8b, 0xf7, 0xaa, 0x46, 0x7e, 0x85, + 0x0f, 0xb6, 0xbe, 0x93, 0x45, 0x94, 0x9a, 0xb6, 0xa7, 0x2e, 0xfb, 0xe4, 0x59, 0x11, 0xd3, 0xaa, + 0xdc, 0x55, 0xae, 0x5f, 0x01, 0x59, 0x37, 0x41, 0xb8, 0x0e, 0x17, 0x4a, 0x99, 0x87, 0xc2, 0xf1, + 0x3d, 0x13, 0xd5, 0x75, 0xca, 0x8c, 0x03, 0x7a, 0x10, 0x17, 0x83, 0xf1, 0x3a, 0x85, 0x52, 0x07, + 0xe5, 0xba, 0x79, 0x6f, 0xa1, 0xa0, 0xb4, 0xca, 0x95, 0x8b, 0x51, 0x08, 0xf9, 0xa0, 0x30, 0x58, + 0xb9, 0x3b, 0x38, 0xd3, 0x3b, 0x38, 0x3b, 0xf0, 0x26, 0xe1, 0x8c, 0xb4, 0x7c, 0x09, 0xf9, 0xb8, + 0x25, 0xca, 0x44, 0xdb, 0x7e, 0x63, 0x1a, 0xe1, 0x34, 0xe9, 0xac, 0xff, 0x95, 0x82, 0x7c, 0x5c, + 0x26, 0x9f, 0x43, 0x56, 0xc8, 0x20, 0x9e, 0x60, 0xbe, 0xd4, 0xac, 0x6e, 0xcf, 0x3f, 0x04, 0x20, + 0x0d, 0x7b, 0xc8, 0x05, 0xec, 0x87, 0x01, 0x88, 0x28, 0xcd, 0xff, 0x59, 0x81, 0xb8, 0x93, 0x68, + 0xb0, 0xbf, 0x40, 0x21, 0xd8, 0x0c, 0xa3, 0x10, 0xe3, 0x63, 0x7d, 0x08, 0x95, 0x36, 0xda, 0xb8, + 0xb9, 0x65, 0xaf, 0x37, 0xea, 0x08, 0xc8, 0x3a, 0x6d, 0xe8, 0x55, 0xfd, 0x9f, 0x14, 0x1c, 0xb6, + 0x9d, 0x77, 0x79, 0x9f, 0x6f, 0xa1, 0x14, 0x1b, 0xf0, 0x9a, 0xfd, 0xf9, 0xec, 0x37, 0xc8, 0xaa, + 0xad, 0x20, 0x55, 0xa8, 0x50, 0x63, 0x40, 0x7f, 0x6e, 0x5d, 0xf7, 0x8c, 0xd1, 0x6d, 0xab, 0xdb, + 0x1b, 0x52, 0xa3, 0xfc, 0x5e, 0x50, 0xbe, 0x37, 0xe8, 0x5d, 0xab, 0x6f, 0xf4, 0x07, 0x49, 0x39, + 0x45, 0x8a, 0xb0, 0x7f, 0x6f, 0xf4, 0xdb, 0xdd, 0x7e, 0xa7, 0x9c, 0x0e, 0x0e, 0x74, 0xd8, 0xef, + 0x07, 0x87, 0x0c, 0x39, 0x84, 0xc2, 0xc3, 0xf0, 0xe6, 0xc6, 0x30, 0xda, 0x46, 0xbb, 0xbc, 0x77, + 0xfd, 0xdd, 0x2f, 0xdf, 0xce, 0x2c, 0xf9, 0xbb, 0x3f, 0xd6, 0x4d, 0x67, 0xd1, 0x50, 0x7a, 0x1c, + 0x6f, 0x16, 0x3e, 0x34, 0x92, 0x9f, 0xea, 0x0c, 0x79, 0xc3, 0x1d, 0x7f, 0x31, 0x73, 0x1a, 0x9b, + 0xff, 0xfa, 0x71, 0x4e, 0xfd, 0x5e, 0x2f, 0xfe, 0x0d, 0x00, 0x00, 0xff, 0xff, 0x15, 0xe0, 0x43, + 0xe4, 0x04, 0x08, 0x00, 0x00, } diff --git a/flyteidl/gen/pb-go/flyteidl/admin/agent.pb.validate.go b/flyteidl/gen/pb-go/flyteidl/admin/agent.pb.validate.go index e49831566c..708ae6d341 100644 --- a/flyteidl/gen/pb-go/flyteidl/admin/agent.pb.validate.go +++ b/flyteidl/gen/pb-go/flyteidl/admin/agent.pb.validate.go @@ -679,6 +679,18 @@ func (m *DoTaskRequest) Validate() error { } } + // no validation rules for OutputPrefix + + if v, ok := interface{}(m.GetTaskExecutionMetadata()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return DoTaskRequestValidationError{ + field: "TaskExecutionMetadata", + reason: "embedded message failed validation", + cause: err, + } + } + } + return nil } diff --git a/flyteidl/gen/pb-java/flyteidl/admin/Agent.java b/flyteidl/gen/pb-java/flyteidl/admin/Agent.java index 9db1ab4207..b2b833dc9b 100644 --- a/flyteidl/gen/pb-java/flyteidl/admin/Agent.java +++ b/flyteidl/gen/pb-java/flyteidl/admin/Agent.java @@ -7565,6 +7565,49 @@ public interface DoTaskRequestOrBuilder extends * .flyteidl.core.TaskTemplate template = 2; */ flyteidl.core.Tasks.TaskTemplateOrBuilder getTemplateOrBuilder(); + + /** + *
+     * Prefix for where task output data will be written. (e.g. s3://my-bucket/randomstring)
+     * 
+ * + * string output_prefix = 3; + */ + java.lang.String getOutputPrefix(); + /** + *
+     * Prefix for where task output data will be written. (e.g. s3://my-bucket/randomstring)
+     * 
+ * + * string output_prefix = 3; + */ + com.google.protobuf.ByteString + getOutputPrefixBytes(); + + /** + *
+     * subset of runtime task execution metadata.
+     * 
+ * + * .flyteidl.admin.TaskExecutionMetadata task_execution_metadata = 4; + */ + boolean hasTaskExecutionMetadata(); + /** + *
+     * subset of runtime task execution metadata.
+     * 
+ * + * .flyteidl.admin.TaskExecutionMetadata task_execution_metadata = 4; + */ + flyteidl.admin.Agent.TaskExecutionMetadata getTaskExecutionMetadata(); + /** + *
+     * subset of runtime task execution metadata.
+     * 
+ * + * .flyteidl.admin.TaskExecutionMetadata task_execution_metadata = 4; + */ + flyteidl.admin.Agent.TaskExecutionMetadataOrBuilder getTaskExecutionMetadataOrBuilder(); } /** *
@@ -7583,6 +7626,7 @@ private DoTaskRequest(com.google.protobuf.GeneratedMessageV3.Builder builder)
       super(builder);
     }
     private DoTaskRequest() {
+      outputPrefix_ = "";
     }
 
     @java.lang.Override
@@ -7635,6 +7679,25 @@ private DoTaskRequest(
 
               break;
             }
+            case 26: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              outputPrefix_ = s;
+              break;
+            }
+            case 34: {
+              flyteidl.admin.Agent.TaskExecutionMetadata.Builder subBuilder = null;
+              if (taskExecutionMetadata_ != null) {
+                subBuilder = taskExecutionMetadata_.toBuilder();
+              }
+              taskExecutionMetadata_ = input.readMessage(flyteidl.admin.Agent.TaskExecutionMetadata.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(taskExecutionMetadata_);
+                taskExecutionMetadata_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
             default: {
               if (!parseUnknownField(
                   input, unknownFields, extensionRegistry, tag)) {
@@ -7739,6 +7802,81 @@ public flyteidl.core.Tasks.TaskTemplateOrBuilder getTemplateOrBuilder() {
       return getTemplate();
     }
 
+    public static final int OUTPUT_PREFIX_FIELD_NUMBER = 3;
+    private volatile java.lang.Object outputPrefix_;
+    /**
+     * 
+     * Prefix for where task output data will be written. (e.g. s3://my-bucket/randomstring)
+     * 
+ * + * string output_prefix = 3; + */ + public java.lang.String getOutputPrefix() { + java.lang.Object ref = outputPrefix_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + outputPrefix_ = s; + return s; + } + } + /** + *
+     * Prefix for where task output data will be written. (e.g. s3://my-bucket/randomstring)
+     * 
+ * + * string output_prefix = 3; + */ + public com.google.protobuf.ByteString + getOutputPrefixBytes() { + java.lang.Object ref = outputPrefix_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + outputPrefix_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int TASK_EXECUTION_METADATA_FIELD_NUMBER = 4; + private flyteidl.admin.Agent.TaskExecutionMetadata taskExecutionMetadata_; + /** + *
+     * subset of runtime task execution metadata.
+     * 
+ * + * .flyteidl.admin.TaskExecutionMetadata task_execution_metadata = 4; + */ + public boolean hasTaskExecutionMetadata() { + return taskExecutionMetadata_ != null; + } + /** + *
+     * subset of runtime task execution metadata.
+     * 
+ * + * .flyteidl.admin.TaskExecutionMetadata task_execution_metadata = 4; + */ + public flyteidl.admin.Agent.TaskExecutionMetadata getTaskExecutionMetadata() { + return taskExecutionMetadata_ == null ? flyteidl.admin.Agent.TaskExecutionMetadata.getDefaultInstance() : taskExecutionMetadata_; + } + /** + *
+     * subset of runtime task execution metadata.
+     * 
+ * + * .flyteidl.admin.TaskExecutionMetadata task_execution_metadata = 4; + */ + public flyteidl.admin.Agent.TaskExecutionMetadataOrBuilder getTaskExecutionMetadataOrBuilder() { + return getTaskExecutionMetadata(); + } + private byte memoizedIsInitialized = -1; @java.lang.Override public final boolean isInitialized() { @@ -7759,6 +7897,12 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) if (template_ != null) { output.writeMessage(2, getTemplate()); } + if (!getOutputPrefixBytes().isEmpty()) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 3, outputPrefix_); + } + if (taskExecutionMetadata_ != null) { + output.writeMessage(4, getTaskExecutionMetadata()); + } unknownFields.writeTo(output); } @@ -7776,6 +7920,13 @@ public int getSerializedSize() { size += com.google.protobuf.CodedOutputStream .computeMessageSize(2, getTemplate()); } + if (!getOutputPrefixBytes().isEmpty()) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, outputPrefix_); + } + if (taskExecutionMetadata_ != null) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(4, getTaskExecutionMetadata()); + } size += unknownFields.getSerializedSize(); memoizedSize = size; return size; @@ -7801,6 +7952,13 @@ public boolean equals(final java.lang.Object obj) { if (!getTemplate() .equals(other.getTemplate())) return false; } + if (!getOutputPrefix() + .equals(other.getOutputPrefix())) return false; + if (hasTaskExecutionMetadata() != other.hasTaskExecutionMetadata()) return false; + if (hasTaskExecutionMetadata()) { + if (!getTaskExecutionMetadata() + .equals(other.getTaskExecutionMetadata())) return false; + } if (!unknownFields.equals(other.unknownFields)) return false; return true; } @@ -7820,6 +7978,12 @@ public int hashCode() { hash = (37 * hash) + TEMPLATE_FIELD_NUMBER; hash = (53 * hash) + getTemplate().hashCode(); } + hash = (37 * hash) + OUTPUT_PREFIX_FIELD_NUMBER; + hash = (53 * hash) + getOutputPrefix().hashCode(); + if (hasTaskExecutionMetadata()) { + hash = (37 * hash) + TASK_EXECUTION_METADATA_FIELD_NUMBER; + hash = (53 * hash) + getTaskExecutionMetadata().hashCode(); + } hash = (29 * hash) + unknownFields.hashCode(); memoizedHashCode = hash; return hash; @@ -7969,6 +8133,14 @@ public Builder clear() { template_ = null; templateBuilder_ = null; } + outputPrefix_ = ""; + + if (taskExecutionMetadataBuilder_ == null) { + taskExecutionMetadata_ = null; + } else { + taskExecutionMetadata_ = null; + taskExecutionMetadataBuilder_ = null; + } return this; } @@ -8005,6 +8177,12 @@ public flyteidl.admin.Agent.DoTaskRequest buildPartial() { } else { result.template_ = templateBuilder_.build(); } + result.outputPrefix_ = outputPrefix_; + if (taskExecutionMetadataBuilder_ == null) { + result.taskExecutionMetadata_ = taskExecutionMetadata_; + } else { + result.taskExecutionMetadata_ = taskExecutionMetadataBuilder_.build(); + } onBuilt(); return result; } @@ -8059,6 +8237,13 @@ public Builder mergeFrom(flyteidl.admin.Agent.DoTaskRequest other) { if (other.hasTemplate()) { mergeTemplate(other.getTemplate()); } + if (!other.getOutputPrefix().isEmpty()) { + outputPrefix_ = other.outputPrefix_; + onChanged(); + } + if (other.hasTaskExecutionMetadata()) { + mergeTaskExecutionMetadata(other.getTaskExecutionMetadata()); + } this.mergeUnknownFields(other.unknownFields); onChanged(); return this; @@ -8411,6 +8596,248 @@ public flyteidl.core.Tasks.TaskTemplateOrBuilder getTemplateOrBuilder() { } return templateBuilder_; } + + private java.lang.Object outputPrefix_ = ""; + /** + *
+       * Prefix for where task output data will be written. (e.g. s3://my-bucket/randomstring)
+       * 
+ * + * string output_prefix = 3; + */ + public java.lang.String getOutputPrefix() { + java.lang.Object ref = outputPrefix_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + outputPrefix_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + *
+       * Prefix for where task output data will be written. (e.g. s3://my-bucket/randomstring)
+       * 
+ * + * string output_prefix = 3; + */ + public com.google.protobuf.ByteString + getOutputPrefixBytes() { + java.lang.Object ref = outputPrefix_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + outputPrefix_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + *
+       * Prefix for where task output data will be written. (e.g. s3://my-bucket/randomstring)
+       * 
+ * + * string output_prefix = 3; + */ + public Builder setOutputPrefix( + java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + + outputPrefix_ = value; + onChanged(); + return this; + } + /** + *
+       * Prefix for where task output data will be written. (e.g. s3://my-bucket/randomstring)
+       * 
+ * + * string output_prefix = 3; + */ + public Builder clearOutputPrefix() { + + outputPrefix_ = getDefaultInstance().getOutputPrefix(); + onChanged(); + return this; + } + /** + *
+       * Prefix for where task output data will be written. (e.g. s3://my-bucket/randomstring)
+       * 
+ * + * string output_prefix = 3; + */ + public Builder setOutputPrefixBytes( + com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + + outputPrefix_ = value; + onChanged(); + return this; + } + + private flyteidl.admin.Agent.TaskExecutionMetadata taskExecutionMetadata_; + private com.google.protobuf.SingleFieldBuilderV3< + flyteidl.admin.Agent.TaskExecutionMetadata, flyteidl.admin.Agent.TaskExecutionMetadata.Builder, flyteidl.admin.Agent.TaskExecutionMetadataOrBuilder> taskExecutionMetadataBuilder_; + /** + *
+       * subset of runtime task execution metadata.
+       * 
+ * + * .flyteidl.admin.TaskExecutionMetadata task_execution_metadata = 4; + */ + public boolean hasTaskExecutionMetadata() { + return taskExecutionMetadataBuilder_ != null || taskExecutionMetadata_ != null; + } + /** + *
+       * subset of runtime task execution metadata.
+       * 
+ * + * .flyteidl.admin.TaskExecutionMetadata task_execution_metadata = 4; + */ + public flyteidl.admin.Agent.TaskExecutionMetadata getTaskExecutionMetadata() { + if (taskExecutionMetadataBuilder_ == null) { + return taskExecutionMetadata_ == null ? flyteidl.admin.Agent.TaskExecutionMetadata.getDefaultInstance() : taskExecutionMetadata_; + } else { + return taskExecutionMetadataBuilder_.getMessage(); + } + } + /** + *
+       * subset of runtime task execution metadata.
+       * 
+ * + * .flyteidl.admin.TaskExecutionMetadata task_execution_metadata = 4; + */ + public Builder setTaskExecutionMetadata(flyteidl.admin.Agent.TaskExecutionMetadata value) { + if (taskExecutionMetadataBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + taskExecutionMetadata_ = value; + onChanged(); + } else { + taskExecutionMetadataBuilder_.setMessage(value); + } + + return this; + } + /** + *
+       * subset of runtime task execution metadata.
+       * 
+ * + * .flyteidl.admin.TaskExecutionMetadata task_execution_metadata = 4; + */ + public Builder setTaskExecutionMetadata( + flyteidl.admin.Agent.TaskExecutionMetadata.Builder builderForValue) { + if (taskExecutionMetadataBuilder_ == null) { + taskExecutionMetadata_ = builderForValue.build(); + onChanged(); + } else { + taskExecutionMetadataBuilder_.setMessage(builderForValue.build()); + } + + return this; + } + /** + *
+       * subset of runtime task execution metadata.
+       * 
+ * + * .flyteidl.admin.TaskExecutionMetadata task_execution_metadata = 4; + */ + public Builder mergeTaskExecutionMetadata(flyteidl.admin.Agent.TaskExecutionMetadata value) { + if (taskExecutionMetadataBuilder_ == null) { + if (taskExecutionMetadata_ != null) { + taskExecutionMetadata_ = + flyteidl.admin.Agent.TaskExecutionMetadata.newBuilder(taskExecutionMetadata_).mergeFrom(value).buildPartial(); + } else { + taskExecutionMetadata_ = value; + } + onChanged(); + } else { + taskExecutionMetadataBuilder_.mergeFrom(value); + } + + return this; + } + /** + *
+       * subset of runtime task execution metadata.
+       * 
+ * + * .flyteidl.admin.TaskExecutionMetadata task_execution_metadata = 4; + */ + public Builder clearTaskExecutionMetadata() { + if (taskExecutionMetadataBuilder_ == null) { + taskExecutionMetadata_ = null; + onChanged(); + } else { + taskExecutionMetadata_ = null; + taskExecutionMetadataBuilder_ = null; + } + + return this; + } + /** + *
+       * subset of runtime task execution metadata.
+       * 
+ * + * .flyteidl.admin.TaskExecutionMetadata task_execution_metadata = 4; + */ + public flyteidl.admin.Agent.TaskExecutionMetadata.Builder getTaskExecutionMetadataBuilder() { + + onChanged(); + return getTaskExecutionMetadataFieldBuilder().getBuilder(); + } + /** + *
+       * subset of runtime task execution metadata.
+       * 
+ * + * .flyteidl.admin.TaskExecutionMetadata task_execution_metadata = 4; + */ + public flyteidl.admin.Agent.TaskExecutionMetadataOrBuilder getTaskExecutionMetadataOrBuilder() { + if (taskExecutionMetadataBuilder_ != null) { + return taskExecutionMetadataBuilder_.getMessageOrBuilder(); + } else { + return taskExecutionMetadata_ == null ? + flyteidl.admin.Agent.TaskExecutionMetadata.getDefaultInstance() : taskExecutionMetadata_; + } + } + /** + *
+       * subset of runtime task execution metadata.
+       * 
+ * + * .flyteidl.admin.TaskExecutionMetadata task_execution_metadata = 4; + */ + private com.google.protobuf.SingleFieldBuilderV3< + flyteidl.admin.Agent.TaskExecutionMetadata, flyteidl.admin.Agent.TaskExecutionMetadata.Builder, flyteidl.admin.Agent.TaskExecutionMetadataOrBuilder> + getTaskExecutionMetadataFieldBuilder() { + if (taskExecutionMetadataBuilder_ == null) { + taskExecutionMetadataBuilder_ = new com.google.protobuf.SingleFieldBuilderV3< + flyteidl.admin.Agent.TaskExecutionMetadata, flyteidl.admin.Agent.TaskExecutionMetadata.Builder, flyteidl.admin.Agent.TaskExecutionMetadataOrBuilder>( + getTaskExecutionMetadata(), + getParentForChildren(), + isClean()); + taskExecutionMetadata_ = null; + } + return taskExecutionMetadataBuilder_; + } @java.lang.Override public final Builder setUnknownFields( final com.google.protobuf.UnknownFieldSet unknownFields) { @@ -9175,16 +9602,18 @@ public flyteidl.admin.Agent.DoTaskResponse getDefaultInstanceForType() { "dmin.State\022*\n\007outputs\030\002 \001(\0132\031.flyteidl.c" + "ore.LiteralMap\022\017\n\007message\030\003 \001(\t\"=\n\021Delet" + "eTaskRequest\022\021\n\ttask_type\030\001 \001(\t\022\025\n\rresou" + - "rce_meta\030\002 \001(\014\"\024\n\022DeleteTaskResponse\"i\n\r" + - "DoTaskRequest\022)\n\006inputs\030\001 \001(\0132\031.flyteidl" + - ".core.LiteralMap\022-\n\010template\030\002 \001(\0132\033.fly" + - "teidl.core.TaskTemplate\"<\n\016DoTaskRespons" + - "e\022*\n\010resource\030\001 \001(\0132\030.flyteidl.admin.Res" + - "ource*^\n\005State\022\025\n\021RETRYABLE_FAILURE\020\000\022\025\n" + - "\021PERMANENT_FAILURE\020\001\022\013\n\007PENDING\020\002\022\013\n\007RUN" + - "NING\020\003\022\r\n\tSUCCEEDED\020\004B=Z;github.com/flyt" + - "eorg/flyte/flyteidl/gen/pb-go/flyteidl/a" + - "dminb\006proto3" + "rce_meta\030\002 \001(\014\"\024\n\022DeleteTaskResponse\"\310\001\n" + + "\rDoTaskRequest\022)\n\006inputs\030\001 \001(\0132\031.flyteid" + + "l.core.LiteralMap\022-\n\010template\030\002 \001(\0132\033.fl" + + "yteidl.core.TaskTemplate\022\025\n\routput_prefi" + + "x\030\003 \001(\t\022F\n\027task_execution_metadata\030\004 \001(\013" + + "2%.flyteidl.admin.TaskExecutionMetadata\"" + + "<\n\016DoTaskResponse\022*\n\010resource\030\001 \001(\0132\030.fl" + + "yteidl.admin.Resource*^\n\005State\022\025\n\021RETRYA" + + "BLE_FAILURE\020\000\022\025\n\021PERMANENT_FAILURE\020\001\022\013\n\007" + + "PENDING\020\002\022\013\n\007RUNNING\020\003\022\r\n\tSUCCEEDED\020\004B=Z" + + ";github.com/flyteorg/flyte/flyteidl/gen/" + + "pb-go/flyteidl/adminb\006proto3" }; com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner = new com.google.protobuf.Descriptors.FileDescriptor. InternalDescriptorAssigner() { @@ -9273,7 +9702,7 @@ public com.google.protobuf.ExtensionRegistry assignDescriptors( internal_static_flyteidl_admin_DoTaskRequest_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( internal_static_flyteidl_admin_DoTaskRequest_descriptor, - new java.lang.String[] { "Inputs", "Template", }); + new java.lang.String[] { "Inputs", "Template", "OutputPrefix", "TaskExecutionMetadata", }); internal_static_flyteidl_admin_DoTaskResponse_descriptor = getDescriptor().getMessageTypes().get(9); internal_static_flyteidl_admin_DoTaskResponse_fieldAccessorTable = new diff --git a/flyteidl/gen/pb-js/flyteidl.d.ts b/flyteidl/gen/pb-js/flyteidl.d.ts index a2696e89d2..9393596ed7 100644 --- a/flyteidl/gen/pb-js/flyteidl.d.ts +++ b/flyteidl/gen/pb-js/flyteidl.d.ts @@ -8355,6 +8355,12 @@ export namespace flyteidl { /** DoTaskRequest template */ template?: (flyteidl.core.ITaskTemplate|null); + + /** DoTaskRequest outputPrefix */ + outputPrefix?: (string|null); + + /** DoTaskRequest taskExecutionMetadata */ + taskExecutionMetadata?: (flyteidl.admin.ITaskExecutionMetadata|null); } /** Represents a DoTaskRequest. */ @@ -8372,6 +8378,12 @@ export namespace flyteidl { /** DoTaskRequest template. */ public template?: (flyteidl.core.ITaskTemplate|null); + /** DoTaskRequest outputPrefix. */ + public outputPrefix: string; + + /** DoTaskRequest taskExecutionMetadata. */ + public taskExecutionMetadata?: (flyteidl.admin.ITaskExecutionMetadata|null); + /** * Creates a new DoTaskRequest instance using the specified properties. * @param [properties] Properties to set diff --git a/flyteidl/gen/pb-js/flyteidl.js b/flyteidl/gen/pb-js/flyteidl.js index b065652e52..9f109ff056 100644 --- a/flyteidl/gen/pb-js/flyteidl.js +++ b/flyteidl/gen/pb-js/flyteidl.js @@ -20362,6 +20362,8 @@ * @interface IDoTaskRequest * @property {flyteidl.core.ILiteralMap|null} [inputs] DoTaskRequest inputs * @property {flyteidl.core.ITaskTemplate|null} [template] DoTaskRequest template + * @property {string|null} [outputPrefix] DoTaskRequest outputPrefix + * @property {flyteidl.admin.ITaskExecutionMetadata|null} [taskExecutionMetadata] DoTaskRequest taskExecutionMetadata */ /** @@ -20395,6 +20397,22 @@ */ DoTaskRequest.prototype.template = null; + /** + * DoTaskRequest outputPrefix. + * @member {string} outputPrefix + * @memberof flyteidl.admin.DoTaskRequest + * @instance + */ + DoTaskRequest.prototype.outputPrefix = ""; + + /** + * DoTaskRequest taskExecutionMetadata. + * @member {flyteidl.admin.ITaskExecutionMetadata|null|undefined} taskExecutionMetadata + * @memberof flyteidl.admin.DoTaskRequest + * @instance + */ + DoTaskRequest.prototype.taskExecutionMetadata = null; + /** * Creates a new DoTaskRequest instance using the specified properties. * @function create @@ -20423,6 +20441,10 @@ $root.flyteidl.core.LiteralMap.encode(message.inputs, writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim(); if (message.template != null && message.hasOwnProperty("template")) $root.flyteidl.core.TaskTemplate.encode(message.template, writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim(); + if (message.outputPrefix != null && message.hasOwnProperty("outputPrefix")) + writer.uint32(/* id 3, wireType 2 =*/26).string(message.outputPrefix); + if (message.taskExecutionMetadata != null && message.hasOwnProperty("taskExecutionMetadata")) + $root.flyteidl.admin.TaskExecutionMetadata.encode(message.taskExecutionMetadata, writer.uint32(/* id 4, wireType 2 =*/34).fork()).ldelim(); return writer; }; @@ -20450,6 +20472,12 @@ case 2: message.template = $root.flyteidl.core.TaskTemplate.decode(reader, reader.uint32()); break; + case 3: + message.outputPrefix = reader.string(); + break; + case 4: + message.taskExecutionMetadata = $root.flyteidl.admin.TaskExecutionMetadata.decode(reader, reader.uint32()); + break; default: reader.skipType(tag & 7); break; @@ -20479,6 +20507,14 @@ if (error) return "template." + error; } + if (message.outputPrefix != null && message.hasOwnProperty("outputPrefix")) + if (!$util.isString(message.outputPrefix)) + return "outputPrefix: string expected"; + if (message.taskExecutionMetadata != null && message.hasOwnProperty("taskExecutionMetadata")) { + var error = $root.flyteidl.admin.TaskExecutionMetadata.verify(message.taskExecutionMetadata); + if (error) + return "taskExecutionMetadata." + error; + } return null; }; diff --git a/flyteidl/gen/pb_python/flyteidl/admin/agent_pb2.py b/flyteidl/gen/pb_python/flyteidl/admin/agent_pb2.py index 1071be9f4d..06c9bbbd7d 100644 --- a/flyteidl/gen/pb_python/flyteidl/admin/agent_pb2.py +++ b/flyteidl/gen/pb_python/flyteidl/admin/agent_pb2.py @@ -17,7 +17,7 @@ from flyteidl.core import identifier_pb2 as flyteidl_dot_core_dot_identifier__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1a\x66lyteidl/admin/agent.proto\x12\x0e\x66lyteidl.admin\x1a\x1c\x66lyteidl/core/literals.proto\x1a\x19\x66lyteidl/core/tasks.proto\x1a\x1d\x66lyteidl/core/interface.proto\x1a\x1e\x66lyteidl/core/identifier.proto\"\x98\x05\n\x15TaskExecutionMetadata\x12R\n\x11task_execution_id\x18\x01 \x01(\x0b\x32&.flyteidl.core.TaskExecutionIdentifierR\x0ftaskExecutionId\x12\x1c\n\tnamespace\x18\x02 \x01(\tR\tnamespace\x12I\n\x06labels\x18\x03 \x03(\x0b\x32\x31.flyteidl.admin.TaskExecutionMetadata.LabelsEntryR\x06labels\x12X\n\x0b\x61nnotations\x18\x04 \x03(\x0b\x32\x36.flyteidl.admin.TaskExecutionMetadata.AnnotationsEntryR\x0b\x61nnotations\x12.\n\x13k8s_service_account\x18\x05 \x01(\tR\x11k8sServiceAccount\x12t\n\x15\x65nvironment_variables\x18\x06 \x03(\x0b\x32?.flyteidl.admin.TaskExecutionMetadata.EnvironmentVariablesEntryR\x14\x65nvironmentVariables\x1a\x39\n\x0bLabelsEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x1a>\n\x10\x41nnotationsEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x1aG\n\x19\x45nvironmentVariablesEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\"\x83\x02\n\x11\x43reateTaskRequest\x12\x31\n\x06inputs\x18\x01 \x01(\x0b\x32\x19.flyteidl.core.LiteralMapR\x06inputs\x12\x37\n\x08template\x18\x02 \x01(\x0b\x32\x1b.flyteidl.core.TaskTemplateR\x08template\x12#\n\routput_prefix\x18\x03 \x01(\tR\x0coutputPrefix\x12]\n\x17task_execution_metadata\x18\x04 \x01(\x0b\x32%.flyteidl.admin.TaskExecutionMetadataR\x15taskExecutionMetadata\"9\n\x12\x43reateTaskResponse\x12#\n\rresource_meta\x18\x01 \x01(\x0cR\x0cresourceMeta\"R\n\x0eGetTaskRequest\x12\x1b\n\ttask_type\x18\x01 \x01(\tR\x08taskType\x12#\n\rresource_meta\x18\x02 \x01(\x0cR\x0cresourceMeta\"G\n\x0fGetTaskResponse\x12\x34\n\x08resource\x18\x01 \x01(\x0b\x32\x18.flyteidl.admin.ResourceR\x08resource\"\x86\x01\n\x08Resource\x12+\n\x05state\x18\x01 \x01(\x0e\x32\x15.flyteidl.admin.StateR\x05state\x12\x33\n\x07outputs\x18\x02 \x01(\x0b\x32\x19.flyteidl.core.LiteralMapR\x07outputs\x12\x18\n\x07message\x18\x03 \x01(\tR\x07message\"U\n\x11\x44\x65leteTaskRequest\x12\x1b\n\ttask_type\x18\x01 \x01(\tR\x08taskType\x12#\n\rresource_meta\x18\x02 \x01(\x0cR\x0cresourceMeta\"\x14\n\x12\x44\x65leteTaskResponse\"{\n\rDoTaskRequest\x12\x31\n\x06inputs\x18\x01 \x01(\x0b\x32\x19.flyteidl.core.LiteralMapR\x06inputs\x12\x37\n\x08template\x18\x02 \x01(\x0b\x32\x1b.flyteidl.core.TaskTemplateR\x08template\"F\n\x0e\x44oTaskResponse\x12\x34\n\x08resource\x18\x01 \x01(\x0b\x32\x18.flyteidl.admin.ResourceR\x08resource*^\n\x05State\x12\x15\n\x11RETRYABLE_FAILURE\x10\x00\x12\x15\n\x11PERMANENT_FAILURE\x10\x01\x12\x0b\n\x07PENDING\x10\x02\x12\x0b\n\x07RUNNING\x10\x03\x12\r\n\tSUCCEEDED\x10\x04\x42\xb6\x01\n\x12\x63om.flyteidl.adminB\nAgentProtoP\x01Z;github.com/flyteorg/flyte/flyteidl/gen/pb-go/flyteidl/admin\xa2\x02\x03\x46\x41X\xaa\x02\x0e\x46lyteidl.Admin\xca\x02\x0e\x46lyteidl\\Admin\xe2\x02\x1a\x46lyteidl\\Admin\\GPBMetadata\xea\x02\x0f\x46lyteidl::Adminb\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1a\x66lyteidl/admin/agent.proto\x12\x0e\x66lyteidl.admin\x1a\x1c\x66lyteidl/core/literals.proto\x1a\x19\x66lyteidl/core/tasks.proto\x1a\x1d\x66lyteidl/core/interface.proto\x1a\x1e\x66lyteidl/core/identifier.proto\"\x98\x05\n\x15TaskExecutionMetadata\x12R\n\x11task_execution_id\x18\x01 \x01(\x0b\x32&.flyteidl.core.TaskExecutionIdentifierR\x0ftaskExecutionId\x12\x1c\n\tnamespace\x18\x02 \x01(\tR\tnamespace\x12I\n\x06labels\x18\x03 \x03(\x0b\x32\x31.flyteidl.admin.TaskExecutionMetadata.LabelsEntryR\x06labels\x12X\n\x0b\x61nnotations\x18\x04 \x03(\x0b\x32\x36.flyteidl.admin.TaskExecutionMetadata.AnnotationsEntryR\x0b\x61nnotations\x12.\n\x13k8s_service_account\x18\x05 \x01(\tR\x11k8sServiceAccount\x12t\n\x15\x65nvironment_variables\x18\x06 \x03(\x0b\x32?.flyteidl.admin.TaskExecutionMetadata.EnvironmentVariablesEntryR\x14\x65nvironmentVariables\x1a\x39\n\x0bLabelsEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x1a>\n\x10\x41nnotationsEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x1aG\n\x19\x45nvironmentVariablesEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\"\x83\x02\n\x11\x43reateTaskRequest\x12\x31\n\x06inputs\x18\x01 \x01(\x0b\x32\x19.flyteidl.core.LiteralMapR\x06inputs\x12\x37\n\x08template\x18\x02 \x01(\x0b\x32\x1b.flyteidl.core.TaskTemplateR\x08template\x12#\n\routput_prefix\x18\x03 \x01(\tR\x0coutputPrefix\x12]\n\x17task_execution_metadata\x18\x04 \x01(\x0b\x32%.flyteidl.admin.TaskExecutionMetadataR\x15taskExecutionMetadata\"9\n\x12\x43reateTaskResponse\x12#\n\rresource_meta\x18\x01 \x01(\x0cR\x0cresourceMeta\"R\n\x0eGetTaskRequest\x12\x1b\n\ttask_type\x18\x01 \x01(\tR\x08taskType\x12#\n\rresource_meta\x18\x02 \x01(\x0cR\x0cresourceMeta\"G\n\x0fGetTaskResponse\x12\x34\n\x08resource\x18\x01 \x01(\x0b\x32\x18.flyteidl.admin.ResourceR\x08resource\"\x86\x01\n\x08Resource\x12+\n\x05state\x18\x01 \x01(\x0e\x32\x15.flyteidl.admin.StateR\x05state\x12\x33\n\x07outputs\x18\x02 \x01(\x0b\x32\x19.flyteidl.core.LiteralMapR\x07outputs\x12\x18\n\x07message\x18\x03 \x01(\tR\x07message\"U\n\x11\x44\x65leteTaskRequest\x12\x1b\n\ttask_type\x18\x01 \x01(\tR\x08taskType\x12#\n\rresource_meta\x18\x02 \x01(\x0cR\x0cresourceMeta\"\x14\n\x12\x44\x65leteTaskResponse\"\xff\x01\n\rDoTaskRequest\x12\x31\n\x06inputs\x18\x01 \x01(\x0b\x32\x19.flyteidl.core.LiteralMapR\x06inputs\x12\x37\n\x08template\x18\x02 \x01(\x0b\x32\x1b.flyteidl.core.TaskTemplateR\x08template\x12#\n\routput_prefix\x18\x03 \x01(\tR\x0coutputPrefix\x12]\n\x17task_execution_metadata\x18\x04 \x01(\x0b\x32%.flyteidl.admin.TaskExecutionMetadataR\x15taskExecutionMetadata\"F\n\x0e\x44oTaskResponse\x12\x34\n\x08resource\x18\x01 \x01(\x0b\x32\x18.flyteidl.admin.ResourceR\x08resource*^\n\x05State\x12\x15\n\x11RETRYABLE_FAILURE\x10\x00\x12\x15\n\x11PERMANENT_FAILURE\x10\x01\x12\x0b\n\x07PENDING\x10\x02\x12\x0b\n\x07RUNNING\x10\x03\x12\r\n\tSUCCEEDED\x10\x04\x42\xb6\x01\n\x12\x63om.flyteidl.adminB\nAgentProtoP\x01Z;github.com/flyteorg/flyte/flyteidl/gen/pb-go/flyteidl/admin\xa2\x02\x03\x46\x41X\xaa\x02\x0e\x46lyteidl.Admin\xca\x02\x0e\x46lyteidl\\Admin\xe2\x02\x1a\x46lyteidl\\Admin\\GPBMetadata\xea\x02\x0f\x46lyteidl::Adminb\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -32,8 +32,8 @@ _TASKEXECUTIONMETADATA_ANNOTATIONSENTRY._serialized_options = b'8\001' _TASKEXECUTIONMETADATA_ENVIRONMENTVARIABLESENTRY._options = None _TASKEXECUTIONMETADATA_ENVIRONMENTVARIABLESENTRY._serialized_options = b'8\001' - _globals['_STATE']._serialized_start=1754 - _globals['_STATE']._serialized_end=1848 + _globals['_STATE']._serialized_start=1887 + _globals['_STATE']._serialized_end=1981 _globals['_TASKEXECUTIONMETADATA']._serialized_start=167 _globals['_TASKEXECUTIONMETADATA']._serialized_end=831 _globals['_TASKEXECUTIONMETADATA_LABELSENTRY']._serialized_start=637 @@ -56,8 +56,8 @@ _globals['_DELETETASKREQUEST']._serialized_end=1533 _globals['_DELETETASKRESPONSE']._serialized_start=1535 _globals['_DELETETASKRESPONSE']._serialized_end=1555 - _globals['_DOTASKREQUEST']._serialized_start=1557 - _globals['_DOTASKREQUEST']._serialized_end=1680 - _globals['_DOTASKRESPONSE']._serialized_start=1682 - _globals['_DOTASKRESPONSE']._serialized_end=1752 + _globals['_DOTASKREQUEST']._serialized_start=1558 + _globals['_DOTASKREQUEST']._serialized_end=1813 + _globals['_DOTASKRESPONSE']._serialized_start=1815 + _globals['_DOTASKRESPONSE']._serialized_end=1885 # @@protoc_insertion_point(module_scope) diff --git a/flyteidl/gen/pb_python/flyteidl/admin/agent_pb2.pyi b/flyteidl/gen/pb_python/flyteidl/admin/agent_pb2.pyi index f0490ca6f6..c658554cd1 100644 --- a/flyteidl/gen/pb_python/flyteidl/admin/agent_pb2.pyi +++ b/flyteidl/gen/pb_python/flyteidl/admin/agent_pb2.pyi @@ -115,12 +115,16 @@ class DeleteTaskResponse(_message.Message): def __init__(self) -> None: ... class DoTaskRequest(_message.Message): - __slots__ = ["inputs", "template"] + __slots__ = ["inputs", "template", "output_prefix", "task_execution_metadata"] INPUTS_FIELD_NUMBER: _ClassVar[int] TEMPLATE_FIELD_NUMBER: _ClassVar[int] + OUTPUT_PREFIX_FIELD_NUMBER: _ClassVar[int] + TASK_EXECUTION_METADATA_FIELD_NUMBER: _ClassVar[int] inputs: _literals_pb2.LiteralMap template: _tasks_pb2.TaskTemplate - def __init__(self, inputs: _Optional[_Union[_literals_pb2.LiteralMap, _Mapping]] = ..., template: _Optional[_Union[_tasks_pb2.TaskTemplate, _Mapping]] = ...) -> None: ... + output_prefix: str + task_execution_metadata: TaskExecutionMetadata + def __init__(self, inputs: _Optional[_Union[_literals_pb2.LiteralMap, _Mapping]] = ..., template: _Optional[_Union[_tasks_pb2.TaskTemplate, _Mapping]] = ..., output_prefix: _Optional[str] = ..., task_execution_metadata: _Optional[_Union[TaskExecutionMetadata, _Mapping]] = ...) -> None: ... class DoTaskResponse(_message.Message): __slots__ = ["resource"] diff --git a/flyteidl/gen/pb_rust/flyteidl.admin.rs b/flyteidl/gen/pb_rust/flyteidl.admin.rs index 99d6cac5c2..025465aae3 100644 --- a/flyteidl/gen/pb_rust/flyteidl.admin.rs +++ b/flyteidl/gen/pb_rust/flyteidl.admin.rs @@ -110,6 +110,12 @@ pub struct DoTaskRequest { /// Template of the task that encapsulates all the metadata of the task. #[prost(message, optional, tag="2")] pub template: ::core::option::Option, + /// Prefix for where task output data will be written. (e.g. s3://my-bucket/randomstring) + #[prost(string, tag="3")] + pub output_prefix: ::prost::alloc::string::String, + /// subset of runtime task execution metadata. + #[prost(message, optional, tag="4")] + pub task_execution_metadata: ::core::option::Option, } #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] diff --git a/flyteidl/protos/flyteidl/admin/agent.proto b/flyteidl/protos/flyteidl/admin/agent.proto index 65b43e7088..2e83e043f2 100644 --- a/flyteidl/protos/flyteidl/admin/agent.proto +++ b/flyteidl/protos/flyteidl/admin/agent.proto @@ -97,6 +97,10 @@ message DoTaskRequest { core.LiteralMap inputs = 1; // Template of the task that encapsulates all the metadata of the task. core.TaskTemplate template = 2; + // Prefix for where task output data will be written. (e.g. s3://my-bucket/randomstring) + string output_prefix = 3; + // subset of runtime task execution metadata. + TaskExecutionMetadata task_execution_metadata = 4; } message DoTaskResponse { diff --git a/flyteplugins/go/tasks/pluginmachinery/internal/webapi/core.go b/flyteplugins/go/tasks/pluginmachinery/internal/webapi/core.go index d8f27367ff..1cc65d88e0 100644 --- a/flyteplugins/go/tasks/pluginmachinery/internal/webapi/core.go +++ b/flyteplugins/go/tasks/pluginmachinery/internal/webapi/core.go @@ -8,6 +8,7 @@ import ( "k8s.io/utils/clock" + flyteIdlCore "github.com/flyteorg/flyte/flyteidl/gen/pb-go/flyteidl/core" "github.com/flyteorg/flyte/flyteplugins/go/tasks/errors" "github.com/flyteorg/flyte/flyteplugins/go/tasks/pluginmachinery/core" "github.com/flyteorg/flyte/flyteplugins/go/tasks/pluginmachinery/webapi" @@ -104,23 +105,31 @@ func (c CorePlugin) syncHandle(ctx context.Context, tCtx core.TaskExecutionConte return core.DoTransition(phaseInfo), nil } -func (c CorePlugin) Handle(ctx context.Context, tCtx core.TaskExecutionContext) (core.Transition, error) { - taskTemplate, err := tCtx.TaskReader().Read(ctx) - if err != nil { - return core.UnknownTransition, err - } - +func (c CorePlugin) useSyncPlugin(taskTemplate *flyteIdlCore.TaskTemplate) bool { // Use the sync plugin to execute the task if the task template has the sync plugin flavor. metadata := taskTemplate.GetMetadata() if metadata != nil { runtime := metadata.GetRuntime() if runtime != nil { if runtime.GetFlavor() == syncPlugin { - return c.syncHandle(ctx, tCtx) + return true } } } + return false +} + +func (c CorePlugin) Handle(ctx context.Context, tCtx core.TaskExecutionContext) (core.Transition, error) { + taskTemplate, err := tCtx.TaskReader().Read(ctx) + if err != nil { + return core.UnknownTransition, err + } + + if c.useSyncPlugin(taskTemplate) { + return c.syncHandle(ctx, tCtx) + } + incomingState, err := c.unmarshalState(ctx, tCtx.PluginStateReader()) if err != nil { return core.UnknownTransition, err diff --git a/flyteplugins/go/tasks/plugins/webapi/agent/integration_test.go b/flyteplugins/go/tasks/plugins/webapi/agent/integration_test.go index 9b586b9e7c..62fc91bf6d 100644 --- a/flyteplugins/go/tasks/plugins/webapi/agent/integration_test.go +++ b/flyteplugins/go/tasks/plugins/webapi/agent/integration_test.go @@ -242,6 +242,11 @@ func getTaskContext(t *testing.T) *pluginCoreMocks.TaskExecutionContext { }) tMeta := &pluginCoreMocks.TaskExecutionMetadata{} tMeta.OnGetTaskExecutionID().Return(tID) + tMeta.OnGetNamespace().Return("test-namespace") + tMeta.OnGetLabels().Return(map[string]string{"foo": "bar"}) + tMeta.OnGetAnnotations().Return(map[string]string{"foo": "bar"}) + tMeta.OnGetK8sServiceAccount().Return("k8s-account") + tMeta.OnGetEnvironmentVariables().Return(map[string]string{"foo": "bar"}) resourceManager := &pluginCoreMocks.ResourceManager{} resourceManager.OnAllocateResourceMatch(mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(pluginCore.AllocationStatusGranted, nil) resourceManager.OnReleaseResourceMatch(mock.Anything, mock.Anything, mock.Anything).Return(nil) diff --git a/flyteplugins/go/tasks/plugins/webapi/agent/plugin.go b/flyteplugins/go/tasks/plugins/webapi/agent/plugin.go index 17a4dc502c..ff688c3e5d 100644 --- a/flyteplugins/go/tasks/plugins/webapi/agent/plugin.go +++ b/flyteplugins/go/tasks/plugins/webapi/agent/plugin.go @@ -74,7 +74,6 @@ func (p pluginContext) ResourceMeta() webapi.ResourceMeta { } func (p Plugin) Do(ctx context.Context, taskCtx webapi.TaskExecutionContext) (phase core.PhaseInfo, err error) { - // write the resource here taskTemplate, err := taskCtx.TaskReader().Read(ctx) if err != nil { return core.PhaseInfoUndefined, err @@ -85,6 +84,8 @@ func (p Plugin) Do(ctx context.Context, taskCtx webapi.TaskExecutionContext) (ph return core.PhaseInfoUndefined, err } + outputPrefix := taskCtx.OutputWriter().GetOutputPrefixPath().String() + agent, err := getFinalAgent(taskTemplate.Type, p.cfg) if err != nil { return core.PhaseInfoUndefined, fmt.Errorf("failed to find agent agent with error: %v", err) @@ -98,7 +99,8 @@ func (p Plugin) Do(ctx context.Context, taskCtx webapi.TaskExecutionContext) (ph finalCtx, cancel := getFinalContext(ctx, "DoTask", agent) defer cancel() - res, err := client.DoTask(finalCtx, &admin.DoTaskRequest{Inputs: inputs, Template: taskTemplate}) + taskExecutionMetadata := buildTaskExecutionMetadata(taskCtx.TaskExecutionMetadata()) + res, err := client.DoTask(finalCtx, &admin.DoTaskRequest{Inputs: inputs, Template: taskTemplate, OutputPrefix: outputPrefix, TaskExecutionMetadata: &taskExecutionMetadata}) if err != nil { return core.PhaseInfoUndefined, err } From fd139d4cc920a992863640101048662c26ed7c19 Mon Sep 17 00:00:00 2001 From: Future Outlier Date: Sat, 11 Nov 2023 22:26:53 +0800 Subject: [PATCH 23/48] fix file mode Signed-off-by: Future Outlier --- flyteidl/gen/pb-go/flyteidl/service/openapi.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/flyteidl/gen/pb-go/flyteidl/service/openapi.go b/flyteidl/gen/pb-go/flyteidl/service/openapi.go index 73a73e4f4c..cf2b68c8de 100644 --- a/flyteidl/gen/pb-go/flyteidl/service/openapi.go +++ b/flyteidl/gen/pb-go/flyteidl/service/openapi.go @@ -93,7 +93,7 @@ func adminSwaggerJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "admin.swagger.json", size: 309132, mode: os.FileMode(511), modTime: time.Unix(1562572800, 0)} + info := bindataFileInfo{name: "admin.swagger.json", size: 309132, mode: os.FileMode(420), modTime: time.Unix(1562572800, 0)} a := &asset{bytes: bytes, info: info} return a, nil } From b8ebdabefdcf03349aaf6f81cfb804febcbbf5ff Mon Sep 17 00:00:00 2001 From: Future Outlier Date: Sun, 12 Nov 2023 11:15:29 +0800 Subject: [PATCH 24/48] add toSyncPlugin and toAsyncPlugin 2 functions Signed-off-by: Future Outlier --- .../pluginmachinery/internal/webapi/core.go | 35 ++++++++++--------- 1 file changed, 18 insertions(+), 17 deletions(-) diff --git a/flyteplugins/go/tasks/pluginmachinery/internal/webapi/core.go b/flyteplugins/go/tasks/pluginmachinery/internal/webapi/core.go index 1cc65d88e0..a3608d67ad 100644 --- a/flyteplugins/go/tasks/pluginmachinery/internal/webapi/core.go +++ b/flyteplugins/go/tasks/pluginmachinery/internal/webapi/core.go @@ -68,26 +68,24 @@ func (c CorePlugin) GetProperties() core.PluginProperties { return core.PluginProperties{} } -func (c CorePlugin) getPlugin(pluginType string) (webapi.AsyncPlugin, webapi.SyncPlugin, error) { - if pluginType == syncPlugin { - plugin, ok := c.p.(webapi.SyncPlugin) - if !ok { - return nil, nil, fmt.Errorf("Core plugin does not implement the sync plugin interface") - } - return nil, plugin, nil +func (c CorePlugin) toSyncPlugin() (webapi.SyncPlugin, error) { + plugin, ok := c.p.(webapi.SyncPlugin) + if !ok { + return nil, fmt.Errorf("Core plugin does not implement the sync plugin interface") } - // Assume the plugin is an async plugin if not explicitly specified as sync. - // This helps maintain backward compatibility with existing implementations that - // expect an async plugin by default, thereby avoiding breaking changes. + return plugin, nil +} + +func (c CorePlugin) toAsyncPlugin() (webapi.AsyncPlugin, error) { plugin, ok := c.p.(webapi.AsyncPlugin) if !ok { - return nil, nil, fmt.Errorf("Core plugin does not implement the async plugin interface") + return nil, fmt.Errorf("Core plugin does not implement the async plugin interface") } - return plugin, nil, nil + return plugin, nil } func (c CorePlugin) syncHandle(ctx context.Context, tCtx core.TaskExecutionContext) (core.Transition, error) { - _, plugin, err := c.getPlugin(syncPlugin) + plugin, err := c.toSyncPlugin() if err != nil { return core.UnknownTransition, err } @@ -125,7 +123,9 @@ func (c CorePlugin) Handle(ctx context.Context, tCtx core.TaskExecutionContext) if err != nil { return core.UnknownTransition, err } - + // Assume the plugin is an async plugin if not explicitly specified as sync. + // This helps maintain backward compatibility with existing implementations that + // expect an async plugin by default, thereby avoiding breaking changes. if c.useSyncPlugin(taskTemplate) { return c.syncHandle(ctx, tCtx) } @@ -137,7 +137,8 @@ func (c CorePlugin) Handle(ctx context.Context, tCtx core.TaskExecutionContext) var nextState *State var phaseInfo core.PhaseInfo - plugin, _, err := c.getPlugin(asyncPlugin) + + plugin, err := c.toAsyncPlugin() if err != nil { return core.UnknownTransition, err } @@ -174,7 +175,7 @@ func (c CorePlugin) Abort(ctx context.Context, tCtx core.TaskExecutionContext) e logger.Infof(ctx, "Attempting to abort resource [%v].", tCtx.TaskExecutionMetadata().GetTaskExecutionID().GetID()) - plugin, _, err := c.getPlugin(asyncPlugin) + plugin, err := c.toAsyncPlugin() if err != nil { return err } @@ -198,7 +199,7 @@ func (c CorePlugin) Finalize(ctx context.Context, tCtx core.TaskExecutionContext logger.Infof(ctx, "Attempting to finalize resource [%v].", tCtx.TaskExecutionMetadata().GetTaskExecutionID().GetGeneratedName()) - plugin, _, err := c.getPlugin(asyncPlugin) + plugin, err := c.toAsyncPlugin() if err != nil { return err } From c33b458005a20ce10be880a2c60ff5baeecbb094 Mon Sep 17 00:00:00 2001 From: Future Outlier Date: Sun, 12 Nov 2023 11:40:59 +0800 Subject: [PATCH 25/48] split handle into syncHandle and asyncHandle Signed-off-by: Future Outlier --- .../pluginmachinery/internal/webapi/core.go | 58 ++++++++++--------- 1 file changed, 31 insertions(+), 27 deletions(-) diff --git a/flyteplugins/go/tasks/pluginmachinery/internal/webapi/core.go b/flyteplugins/go/tasks/pluginmachinery/internal/webapi/core.go index a3608d67ad..730c2fdaf4 100644 --- a/flyteplugins/go/tasks/pluginmachinery/internal/webapi/core.go +++ b/flyteplugins/go/tasks/pluginmachinery/internal/webapi/core.go @@ -103,33 +103,7 @@ func (c CorePlugin) syncHandle(ctx context.Context, tCtx core.TaskExecutionConte return core.DoTransition(phaseInfo), nil } -func (c CorePlugin) useSyncPlugin(taskTemplate *flyteIdlCore.TaskTemplate) bool { - // Use the sync plugin to execute the task if the task template has the sync plugin flavor. - metadata := taskTemplate.GetMetadata() - if metadata != nil { - runtime := metadata.GetRuntime() - if runtime != nil { - if runtime.GetFlavor() == syncPlugin { - return true - } - } - } - - return false -} - -func (c CorePlugin) Handle(ctx context.Context, tCtx core.TaskExecutionContext) (core.Transition, error) { - taskTemplate, err := tCtx.TaskReader().Read(ctx) - if err != nil { - return core.UnknownTransition, err - } - // Assume the plugin is an async plugin if not explicitly specified as sync. - // This helps maintain backward compatibility with existing implementations that - // expect an async plugin by default, thereby avoiding breaking changes. - if c.useSyncPlugin(taskTemplate) { - return c.syncHandle(ctx, tCtx) - } - +func (c CorePlugin) asyncHandle(ctx context.Context, tCtx core.TaskExecutionContext) (core.Transition, error) { incomingState, err := c.unmarshalState(ctx, tCtx.PluginStateReader()) if err != nil { return core.UnknownTransition, err @@ -167,6 +141,36 @@ func (c CorePlugin) Handle(ctx context.Context, tCtx core.TaskExecutionContext) return core.DoTransition(phaseInfo), nil } +func (c CorePlugin) useSyncPlugin(taskTemplate *flyteIdlCore.TaskTemplate) bool { + // Use the sync plugin to execute the task if the task template has the sync plugin flavor. + metadata := taskTemplate.GetMetadata() + if metadata != nil { + runtime := metadata.GetRuntime() + if runtime != nil { + if runtime.GetFlavor() == syncPlugin { + return true + } + } + } + + return false +} + +func (c CorePlugin) Handle(ctx context.Context, tCtx core.TaskExecutionContext) (core.Transition, error) { + taskTemplate, err := tCtx.TaskReader().Read(ctx) + if err != nil { + return core.UnknownTransition, err + } + // Assume the plugin is an async plugin if not explicitly specified as sync. + // This helps maintain backward compatibility with existing implementations that + // expect an async plugin by default, thereby avoiding breaking changes. + if c.useSyncPlugin(taskTemplate) { + return c.syncHandle(ctx, tCtx) + } + + return c.asyncHandle(ctx, tCtx) +} + func (c CorePlugin) Abort(ctx context.Context, tCtx core.TaskExecutionContext) error { incomingState, err := c.unmarshalState(ctx, tCtx.PluginStateReader()) if err != nil { From c8fb51ac8caff97af826ee795c69ebad7f1bf4de Mon Sep 17 00:00:00 2001 From: Future Outlier Date: Wed, 15 Nov 2023 02:06:19 +0800 Subject: [PATCH 26/48] better error messages Signed-off-by: Future Outlier --- flyteplugins/go/tasks/pluginmachinery/internal/webapi/core.go | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/flyteplugins/go/tasks/pluginmachinery/internal/webapi/core.go b/flyteplugins/go/tasks/pluginmachinery/internal/webapi/core.go index 730c2fdaf4..25ed1a4896 100644 --- a/flyteplugins/go/tasks/pluginmachinery/internal/webapi/core.go +++ b/flyteplugins/go/tasks/pluginmachinery/internal/webapi/core.go @@ -29,7 +29,6 @@ const ( maxBurst = 10000 minQPS = 1 maxQPS = 100000 - asyncPlugin = "async_plugin" syncPlugin = "sync_plugin" ) @@ -96,7 +95,7 @@ func (c CorePlugin) syncHandle(ctx context.Context, tCtx core.TaskExecutionConte if err != nil { return core.UnknownTransition, err } - logger.Errorf(ctx, "please check if [%v] task type has implemented sync plugin method or not", taskTemplate.GetType()) + logger.Errorf(ctx, "failed to run [%v] task with err: [%v]", taskTemplate.GetType(), err) return core.UnknownTransition, err } From d84bbb33baa5cff437a7b22ab1e1c3995287e043 Mon Sep 17 00:00:00 2001 From: Future Outlier Date: Wed, 15 Nov 2023 02:11:49 +0800 Subject: [PATCH 27/48] move the annotation Signed-off-by: Future Outlier --- .../go/tasks/pluginmachinery/internal/webapi/core.go | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/flyteplugins/go/tasks/pluginmachinery/internal/webapi/core.go b/flyteplugins/go/tasks/pluginmachinery/internal/webapi/core.go index 25ed1a4896..398b099506 100644 --- a/flyteplugins/go/tasks/pluginmachinery/internal/webapi/core.go +++ b/flyteplugins/go/tasks/pluginmachinery/internal/webapi/core.go @@ -142,6 +142,9 @@ func (c CorePlugin) asyncHandle(ctx context.Context, tCtx core.TaskExecutionCont func (c CorePlugin) useSyncPlugin(taskTemplate *flyteIdlCore.TaskTemplate) bool { // Use the sync plugin to execute the task if the task template has the sync plugin flavor. + // Assume the plugin is an async plugin if not explicitly specified as sync. + // This helps maintain backward compatibility with existing implementations that + // expect an async plugin by default, thereby avoiding breaking changes. metadata := taskTemplate.GetMetadata() if metadata != nil { runtime := metadata.GetRuntime() @@ -160,9 +163,7 @@ func (c CorePlugin) Handle(ctx context.Context, tCtx core.TaskExecutionContext) if err != nil { return core.UnknownTransition, err } - // Assume the plugin is an async plugin if not explicitly specified as sync. - // This helps maintain backward compatibility with existing implementations that - // expect an async plugin by default, thereby avoiding breaking changes. + if c.useSyncPlugin(taskTemplate) { return c.syncHandle(ctx, tCtx) } From 82baf29c4993462b5c3da1da12bdfe5f1555fef9 Mon Sep 17 00:00:00 2001 From: Future Outlier Date: Fri, 17 Nov 2023 12:18:53 +0800 Subject: [PATCH 28/48] add Sync Agent Service Signed-off-by: Future Outlier --- .../go/admin/mocks/AsyncAgentServiceClient.go | 48 --- .../go/admin/mocks/AsyncAgentServiceServer.go | 41 --- .../go/admin/mocks/SyncAgentServiceClient.go | 66 ++++ .../go/admin/mocks/SyncAgentServiceServer.go | 57 +++ .../pb-cpp/flyteidl/service/agent.grpc.pb.cc | 91 +++-- .../pb-cpp/flyteidl/service/agent.grpc.pb.h | 345 ++++++++++-------- .../gen/pb-cpp/flyteidl/service/agent.pb.cc | 14 +- flyteidl/gen/pb-go/flyteidl/admin/agent.pb.go | 2 +- .../gen/pb-go/flyteidl/service/agent.pb.go | 138 ++++--- .../gen/pb-java/flyteidl/service/Agent.java | 12 +- flyteidl/gen/pb-js/flyteidl.d.ts | 54 ++- flyteidl/gen/pb-js/flyteidl.js | 49 ++- .../pb_python/flyteidl/service/agent_pb2.py | 6 +- .../flyteidl/service/agent_pb2_grpc.py | 64 +++- flyteidl/protos/flyteidl/service/agent.proto | 3 + .../plugins/webapi/agent/integration_test.go | 41 ++- .../go/tasks/plugins/webapi/agent/plugin.go | 66 +++- .../tasks/plugins/webapi/agent/plugin_test.go | 24 +- .../plugins/webapi/athena/plugin_test.go | 1 - 19 files changed, 712 insertions(+), 410 deletions(-) create mode 100644 flyteidl/clients/go/admin/mocks/SyncAgentServiceClient.go create mode 100644 flyteidl/clients/go/admin/mocks/SyncAgentServiceServer.go diff --git a/flyteidl/clients/go/admin/mocks/AsyncAgentServiceClient.go b/flyteidl/clients/go/admin/mocks/AsyncAgentServiceClient.go index d816a2c2f5..4a2b2c25f3 100644 --- a/flyteidl/clients/go/admin/mocks/AsyncAgentServiceClient.go +++ b/flyteidl/clients/go/admin/mocks/AsyncAgentServiceClient.go @@ -113,54 +113,6 @@ func (_m *AsyncAgentServiceClient) DeleteTask(ctx context.Context, in *admin.Del return r0, r1 } -type AsyncAgentServiceClient_DoTask struct { - *mock.Call -} - -func (_m AsyncAgentServiceClient_DoTask) Return(_a0 *admin.DoTaskResponse, _a1 error) *AsyncAgentServiceClient_DoTask { - return &AsyncAgentServiceClient_DoTask{Call: _m.Call.Return(_a0, _a1)} -} - -func (_m *AsyncAgentServiceClient) OnDoTask(ctx context.Context, in *admin.DoTaskRequest, opts ...grpc.CallOption) *AsyncAgentServiceClient_DoTask { - c_call := _m.On("DoTask", ctx, in, opts) - return &AsyncAgentServiceClient_DoTask{Call: c_call} -} - -func (_m *AsyncAgentServiceClient) OnDoTaskMatch(matchers ...interface{}) *AsyncAgentServiceClient_DoTask { - c_call := _m.On("DoTask", matchers...) - return &AsyncAgentServiceClient_DoTask{Call: c_call} -} - -// DoTask provides a mock function with given fields: ctx, in, opts -func (_m *AsyncAgentServiceClient) DoTask(ctx context.Context, in *admin.DoTaskRequest, opts ...grpc.CallOption) (*admin.DoTaskResponse, 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 *admin.DoTaskResponse - if rf, ok := ret.Get(0).(func(context.Context, *admin.DoTaskRequest, ...grpc.CallOption) *admin.DoTaskResponse); ok { - r0 = rf(ctx, in, opts...) - } else { - if ret.Get(0) != nil { - r0 = ret.Get(0).(*admin.DoTaskResponse) - } - } - - var r1 error - if rf, ok := ret.Get(1).(func(context.Context, *admin.DoTaskRequest, ...grpc.CallOption) error); ok { - r1 = rf(ctx, in, opts...) - } else { - r1 = ret.Error(1) - } - - return r0, r1 -} - type AsyncAgentServiceClient_GetTask struct { *mock.Call } diff --git a/flyteidl/clients/go/admin/mocks/AsyncAgentServiceServer.go b/flyteidl/clients/go/admin/mocks/AsyncAgentServiceServer.go index f35939d49d..722d6731ff 100644 --- a/flyteidl/clients/go/admin/mocks/AsyncAgentServiceServer.go +++ b/flyteidl/clients/go/admin/mocks/AsyncAgentServiceServer.go @@ -97,47 +97,6 @@ func (_m *AsyncAgentServiceServer) DeleteTask(_a0 context.Context, _a1 *admin.De return r0, r1 } -type AsyncAgentServiceServer_DoTask struct { - *mock.Call -} - -func (_m AsyncAgentServiceServer_DoTask) Return(_a0 *admin.DoTaskResponse, _a1 error) *AsyncAgentServiceServer_DoTask { - return &AsyncAgentServiceServer_DoTask{Call: _m.Call.Return(_a0, _a1)} -} - -func (_m *AsyncAgentServiceServer) OnDoTask(_a0 context.Context, _a1 *admin.DoTaskRequest) *AsyncAgentServiceServer_DoTask { - c_call := _m.On("DoTask", _a0, _a1) - return &AsyncAgentServiceServer_DoTask{Call: c_call} -} - -func (_m *AsyncAgentServiceServer) OnDoTaskMatch(matchers ...interface{}) *AsyncAgentServiceServer_DoTask { - c_call := _m.On("DoTask", matchers...) - return &AsyncAgentServiceServer_DoTask{Call: c_call} -} - -// DoTask provides a mock function with given fields: _a0, _a1 -func (_m *AsyncAgentServiceServer) DoTask(_a0 context.Context, _a1 *admin.DoTaskRequest) (*admin.DoTaskResponse, error) { - ret := _m.Called(_a0, _a1) - - var r0 *admin.DoTaskResponse - if rf, ok := ret.Get(0).(func(context.Context, *admin.DoTaskRequest) *admin.DoTaskResponse); ok { - r0 = rf(_a0, _a1) - } else { - if ret.Get(0) != nil { - r0 = ret.Get(0).(*admin.DoTaskResponse) - } - } - - var r1 error - if rf, ok := ret.Get(1).(func(context.Context, *admin.DoTaskRequest) error); ok { - r1 = rf(_a0, _a1) - } else { - r1 = ret.Error(1) - } - - return r0, r1 -} - type AsyncAgentServiceServer_GetTask struct { *mock.Call } diff --git a/flyteidl/clients/go/admin/mocks/SyncAgentServiceClient.go b/flyteidl/clients/go/admin/mocks/SyncAgentServiceClient.go new file mode 100644 index 0000000000..c41be39d71 --- /dev/null +++ b/flyteidl/clients/go/admin/mocks/SyncAgentServiceClient.go @@ -0,0 +1,66 @@ +// Code generated by mockery v1.0.1. DO NOT EDIT. + +package mocks + +import ( + context "context" + + admin "github.com/flyteorg/flyte/flyteidl/gen/pb-go/flyteidl/admin" + + grpc "google.golang.org/grpc" + + mock "github.com/stretchr/testify/mock" +) + +// SyncAgentServiceClient is an autogenerated mock type for the SyncAgentServiceClient type +type SyncAgentServiceClient struct { + mock.Mock +} + +type SyncAgentServiceClient_DoTask struct { + *mock.Call +} + +func (_m SyncAgentServiceClient_DoTask) Return(_a0 *admin.DoTaskResponse, _a1 error) *SyncAgentServiceClient_DoTask { + return &SyncAgentServiceClient_DoTask{Call: _m.Call.Return(_a0, _a1)} +} + +func (_m *SyncAgentServiceClient) OnDoTask(ctx context.Context, in *admin.DoTaskRequest, opts ...grpc.CallOption) *SyncAgentServiceClient_DoTask { + c_call := _m.On("DoTask", ctx, in, opts) + return &SyncAgentServiceClient_DoTask{Call: c_call} +} + +func (_m *SyncAgentServiceClient) OnDoTaskMatch(matchers ...interface{}) *SyncAgentServiceClient_DoTask { + c_call := _m.On("DoTask", matchers...) + return &SyncAgentServiceClient_DoTask{Call: c_call} +} + +// DoTask provides a mock function with given fields: ctx, in, opts +func (_m *SyncAgentServiceClient) DoTask(ctx context.Context, in *admin.DoTaskRequest, opts ...grpc.CallOption) (*admin.DoTaskResponse, 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 *admin.DoTaskResponse + if rf, ok := ret.Get(0).(func(context.Context, *admin.DoTaskRequest, ...grpc.CallOption) *admin.DoTaskResponse); ok { + r0 = rf(ctx, in, opts...) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*admin.DoTaskResponse) + } + } + + var r1 error + if rf, ok := ret.Get(1).(func(context.Context, *admin.DoTaskRequest, ...grpc.CallOption) error); ok { + r1 = rf(ctx, in, opts...) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} diff --git a/flyteidl/clients/go/admin/mocks/SyncAgentServiceServer.go b/flyteidl/clients/go/admin/mocks/SyncAgentServiceServer.go new file mode 100644 index 0000000000..169787a902 --- /dev/null +++ b/flyteidl/clients/go/admin/mocks/SyncAgentServiceServer.go @@ -0,0 +1,57 @@ +// Code generated by mockery v1.0.1. DO NOT EDIT. + +package mocks + +import ( + context "context" + + admin "github.com/flyteorg/flyte/flyteidl/gen/pb-go/flyteidl/admin" + + mock "github.com/stretchr/testify/mock" +) + +// SyncAgentServiceServer is an autogenerated mock type for the SyncAgentServiceServer type +type SyncAgentServiceServer struct { + mock.Mock +} + +type SyncAgentServiceServer_DoTask struct { + *mock.Call +} + +func (_m SyncAgentServiceServer_DoTask) Return(_a0 *admin.DoTaskResponse, _a1 error) *SyncAgentServiceServer_DoTask { + return &SyncAgentServiceServer_DoTask{Call: _m.Call.Return(_a0, _a1)} +} + +func (_m *SyncAgentServiceServer) OnDoTask(_a0 context.Context, _a1 *admin.DoTaskRequest) *SyncAgentServiceServer_DoTask { + c_call := _m.On("DoTask", _a0, _a1) + return &SyncAgentServiceServer_DoTask{Call: c_call} +} + +func (_m *SyncAgentServiceServer) OnDoTaskMatch(matchers ...interface{}) *SyncAgentServiceServer_DoTask { + c_call := _m.On("DoTask", matchers...) + return &SyncAgentServiceServer_DoTask{Call: c_call} +} + +// DoTask provides a mock function with given fields: _a0, _a1 +func (_m *SyncAgentServiceServer) DoTask(_a0 context.Context, _a1 *admin.DoTaskRequest) (*admin.DoTaskResponse, error) { + ret := _m.Called(_a0, _a1) + + var r0 *admin.DoTaskResponse + if rf, ok := ret.Get(0).(func(context.Context, *admin.DoTaskRequest) *admin.DoTaskResponse); ok { + r0 = rf(_a0, _a1) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*admin.DoTaskResponse) + } + } + + var r1 error + if rf, ok := ret.Get(1).(func(context.Context, *admin.DoTaskRequest) error); ok { + r1 = rf(_a0, _a1) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} diff --git a/flyteidl/gen/pb-cpp/flyteidl/service/agent.grpc.pb.cc b/flyteidl/gen/pb-cpp/flyteidl/service/agent.grpc.pb.cc index ee7d66e1dd..c8d6d1b2e1 100644 --- a/flyteidl/gen/pb-cpp/flyteidl/service/agent.grpc.pb.cc +++ b/flyteidl/gen/pb-cpp/flyteidl/service/agent.grpc.pb.cc @@ -23,7 +23,6 @@ static const char* AsyncAgentService_method_names[] = { "/flyteidl.service.AsyncAgentService/CreateTask", "/flyteidl.service.AsyncAgentService/GetTask", "/flyteidl.service.AsyncAgentService/DeleteTask", - "/flyteidl.service.AsyncAgentService/DoTask", }; std::unique_ptr< AsyncAgentService::Stub> AsyncAgentService::NewStub(const std::shared_ptr< ::grpc::ChannelInterface>& channel, const ::grpc::StubOptions& options) { @@ -36,7 +35,6 @@ AsyncAgentService::Stub::Stub(const std::shared_ptr< ::grpc::ChannelInterface>& : channel_(channel), rpcmethod_CreateTask_(AsyncAgentService_method_names[0], ::grpc::internal::RpcMethod::NORMAL_RPC, channel) , rpcmethod_GetTask_(AsyncAgentService_method_names[1], ::grpc::internal::RpcMethod::NORMAL_RPC, channel) , rpcmethod_DeleteTask_(AsyncAgentService_method_names[2], ::grpc::internal::RpcMethod::NORMAL_RPC, channel) - , rpcmethod_DoTask_(AsyncAgentService_method_names[3], ::grpc::internal::RpcMethod::NORMAL_RPC, channel) {} ::grpc::Status AsyncAgentService::Stub::CreateTask(::grpc::ClientContext* context, const ::flyteidl::admin::CreateTaskRequest& request, ::flyteidl::admin::CreateTaskResponse* response) { @@ -123,34 +121,6 @@ ::grpc::ClientAsyncResponseReader< ::flyteidl::admin::DeleteTaskResponse>* Async return ::grpc::internal::ClientAsyncResponseReaderFactory< ::flyteidl::admin::DeleteTaskResponse>::Create(channel_.get(), cq, rpcmethod_DeleteTask_, context, request, false); } -::grpc::Status AsyncAgentService::Stub::DoTask(::grpc::ClientContext* context, const ::flyteidl::admin::DoTaskRequest& request, ::flyteidl::admin::DoTaskResponse* response) { - return ::grpc::internal::BlockingUnaryCall(channel_.get(), rpcmethod_DoTask_, context, request, response); -} - -void AsyncAgentService::Stub::experimental_async::DoTask(::grpc::ClientContext* context, const ::flyteidl::admin::DoTaskRequest* request, ::flyteidl::admin::DoTaskResponse* response, std::function f) { - ::grpc::internal::CallbackUnaryCall(stub_->channel_.get(), stub_->rpcmethod_DoTask_, context, request, response, std::move(f)); -} - -void AsyncAgentService::Stub::experimental_async::DoTask(::grpc::ClientContext* context, const ::grpc::ByteBuffer* request, ::flyteidl::admin::DoTaskResponse* response, std::function f) { - ::grpc::internal::CallbackUnaryCall(stub_->channel_.get(), stub_->rpcmethod_DoTask_, context, request, response, std::move(f)); -} - -void AsyncAgentService::Stub::experimental_async::DoTask(::grpc::ClientContext* context, const ::flyteidl::admin::DoTaskRequest* request, ::flyteidl::admin::DoTaskResponse* response, ::grpc::experimental::ClientUnaryReactor* reactor) { - ::grpc::internal::ClientCallbackUnaryFactory::Create(stub_->channel_.get(), stub_->rpcmethod_DoTask_, context, request, response, reactor); -} - -void AsyncAgentService::Stub::experimental_async::DoTask(::grpc::ClientContext* context, const ::grpc::ByteBuffer* request, ::flyteidl::admin::DoTaskResponse* response, ::grpc::experimental::ClientUnaryReactor* reactor) { - ::grpc::internal::ClientCallbackUnaryFactory::Create(stub_->channel_.get(), stub_->rpcmethod_DoTask_, context, request, response, reactor); -} - -::grpc::ClientAsyncResponseReader< ::flyteidl::admin::DoTaskResponse>* AsyncAgentService::Stub::AsyncDoTaskRaw(::grpc::ClientContext* context, const ::flyteidl::admin::DoTaskRequest& request, ::grpc::CompletionQueue* cq) { - return ::grpc::internal::ClientAsyncResponseReaderFactory< ::flyteidl::admin::DoTaskResponse>::Create(channel_.get(), cq, rpcmethod_DoTask_, context, request, true); -} - -::grpc::ClientAsyncResponseReader< ::flyteidl::admin::DoTaskResponse>* AsyncAgentService::Stub::PrepareAsyncDoTaskRaw(::grpc::ClientContext* context, const ::flyteidl::admin::DoTaskRequest& request, ::grpc::CompletionQueue* cq) { - return ::grpc::internal::ClientAsyncResponseReaderFactory< ::flyteidl::admin::DoTaskResponse>::Create(channel_.get(), cq, rpcmethod_DoTask_, context, request, false); -} - AsyncAgentService::Service::Service() { AddMethod(new ::grpc::internal::RpcServiceMethod( AsyncAgentService_method_names[0], @@ -167,11 +137,6 @@ AsyncAgentService::Service::Service() { ::grpc::internal::RpcMethod::NORMAL_RPC, new ::grpc::internal::RpcMethodHandler< AsyncAgentService::Service, ::flyteidl::admin::DeleteTaskRequest, ::flyteidl::admin::DeleteTaskResponse>( std::mem_fn(&AsyncAgentService::Service::DeleteTask), this))); - AddMethod(new ::grpc::internal::RpcServiceMethod( - AsyncAgentService_method_names[3], - ::grpc::internal::RpcMethod::NORMAL_RPC, - new ::grpc::internal::RpcMethodHandler< AsyncAgentService::Service, ::flyteidl::admin::DoTaskRequest, ::flyteidl::admin::DoTaskResponse>( - std::mem_fn(&AsyncAgentService::Service::DoTask), this))); } AsyncAgentService::Service::~Service() { @@ -198,7 +163,61 @@ ::grpc::Status AsyncAgentService::Service::DeleteTask(::grpc::ServerContext* con return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, ""); } -::grpc::Status AsyncAgentService::Service::DoTask(::grpc::ServerContext* context, const ::flyteidl::admin::DoTaskRequest* request, ::flyteidl::admin::DoTaskResponse* response) { + +static const char* SyncAgentService_method_names[] = { + "/flyteidl.service.SyncAgentService/DoTask", +}; + +std::unique_ptr< SyncAgentService::Stub> SyncAgentService::NewStub(const std::shared_ptr< ::grpc::ChannelInterface>& channel, const ::grpc::StubOptions& options) { + (void)options; + std::unique_ptr< SyncAgentService::Stub> stub(new SyncAgentService::Stub(channel)); + return stub; +} + +SyncAgentService::Stub::Stub(const std::shared_ptr< ::grpc::ChannelInterface>& channel) + : channel_(channel), rpcmethod_DoTask_(SyncAgentService_method_names[0], ::grpc::internal::RpcMethod::NORMAL_RPC, channel) + {} + +::grpc::Status SyncAgentService::Stub::DoTask(::grpc::ClientContext* context, const ::flyteidl::admin::DoTaskRequest& request, ::flyteidl::admin::DoTaskResponse* response) { + return ::grpc::internal::BlockingUnaryCall(channel_.get(), rpcmethod_DoTask_, context, request, response); +} + +void SyncAgentService::Stub::experimental_async::DoTask(::grpc::ClientContext* context, const ::flyteidl::admin::DoTaskRequest* request, ::flyteidl::admin::DoTaskResponse* response, std::function f) { + ::grpc::internal::CallbackUnaryCall(stub_->channel_.get(), stub_->rpcmethod_DoTask_, context, request, response, std::move(f)); +} + +void SyncAgentService::Stub::experimental_async::DoTask(::grpc::ClientContext* context, const ::grpc::ByteBuffer* request, ::flyteidl::admin::DoTaskResponse* response, std::function f) { + ::grpc::internal::CallbackUnaryCall(stub_->channel_.get(), stub_->rpcmethod_DoTask_, context, request, response, std::move(f)); +} + +void SyncAgentService::Stub::experimental_async::DoTask(::grpc::ClientContext* context, const ::flyteidl::admin::DoTaskRequest* request, ::flyteidl::admin::DoTaskResponse* response, ::grpc::experimental::ClientUnaryReactor* reactor) { + ::grpc::internal::ClientCallbackUnaryFactory::Create(stub_->channel_.get(), stub_->rpcmethod_DoTask_, context, request, response, reactor); +} + +void SyncAgentService::Stub::experimental_async::DoTask(::grpc::ClientContext* context, const ::grpc::ByteBuffer* request, ::flyteidl::admin::DoTaskResponse* response, ::grpc::experimental::ClientUnaryReactor* reactor) { + ::grpc::internal::ClientCallbackUnaryFactory::Create(stub_->channel_.get(), stub_->rpcmethod_DoTask_, context, request, response, reactor); +} + +::grpc::ClientAsyncResponseReader< ::flyteidl::admin::DoTaskResponse>* SyncAgentService::Stub::AsyncDoTaskRaw(::grpc::ClientContext* context, const ::flyteidl::admin::DoTaskRequest& request, ::grpc::CompletionQueue* cq) { + return ::grpc::internal::ClientAsyncResponseReaderFactory< ::flyteidl::admin::DoTaskResponse>::Create(channel_.get(), cq, rpcmethod_DoTask_, context, request, true); +} + +::grpc::ClientAsyncResponseReader< ::flyteidl::admin::DoTaskResponse>* SyncAgentService::Stub::PrepareAsyncDoTaskRaw(::grpc::ClientContext* context, const ::flyteidl::admin::DoTaskRequest& request, ::grpc::CompletionQueue* cq) { + return ::grpc::internal::ClientAsyncResponseReaderFactory< ::flyteidl::admin::DoTaskResponse>::Create(channel_.get(), cq, rpcmethod_DoTask_, context, request, false); +} + +SyncAgentService::Service::Service() { + AddMethod(new ::grpc::internal::RpcServiceMethod( + SyncAgentService_method_names[0], + ::grpc::internal::RpcMethod::NORMAL_RPC, + new ::grpc::internal::RpcMethodHandler< SyncAgentService::Service, ::flyteidl::admin::DoTaskRequest, ::flyteidl::admin::DoTaskResponse>( + std::mem_fn(&SyncAgentService::Service::DoTask), this))); +} + +SyncAgentService::Service::~Service() { +} + +::grpc::Status SyncAgentService::Service::DoTask(::grpc::ServerContext* context, const ::flyteidl::admin::DoTaskRequest* request, ::flyteidl::admin::DoTaskResponse* response) { (void) context; (void) request; (void) response; diff --git a/flyteidl/gen/pb-cpp/flyteidl/service/agent.grpc.pb.h b/flyteidl/gen/pb-cpp/flyteidl/service/agent.grpc.pb.h index 5dba840b9d..b918fa5893 100644 --- a/flyteidl/gen/pb-cpp/flyteidl/service/agent.grpc.pb.h +++ b/flyteidl/gen/pb-cpp/flyteidl/service/agent.grpc.pb.h @@ -73,14 +73,6 @@ class AsyncAgentService final { std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flyteidl::admin::DeleteTaskResponse>> PrepareAsyncDeleteTask(::grpc::ClientContext* context, const ::flyteidl::admin::DeleteTaskRequest& request, ::grpc::CompletionQueue* cq) { return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flyteidl::admin::DeleteTaskResponse>>(PrepareAsyncDeleteTaskRaw(context, request, cq)); } - // Do a job and get response from the agent server. - virtual ::grpc::Status DoTask(::grpc::ClientContext* context, const ::flyteidl::admin::DoTaskRequest& request, ::flyteidl::admin::DoTaskResponse* response) = 0; - std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flyteidl::admin::DoTaskResponse>> AsyncDoTask(::grpc::ClientContext* context, const ::flyteidl::admin::DoTaskRequest& request, ::grpc::CompletionQueue* cq) { - return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flyteidl::admin::DoTaskResponse>>(AsyncDoTaskRaw(context, request, cq)); - } - std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flyteidl::admin::DoTaskResponse>> PrepareAsyncDoTask(::grpc::ClientContext* context, const ::flyteidl::admin::DoTaskRequest& request, ::grpc::CompletionQueue* cq) { - return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flyteidl::admin::DoTaskResponse>>(PrepareAsyncDoTaskRaw(context, request, cq)); - } class experimental_async_interface { public: virtual ~experimental_async_interface() {} @@ -99,11 +91,6 @@ class AsyncAgentService final { virtual void DeleteTask(::grpc::ClientContext* context, const ::grpc::ByteBuffer* request, ::flyteidl::admin::DeleteTaskResponse* response, std::function) = 0; virtual void DeleteTask(::grpc::ClientContext* context, const ::flyteidl::admin::DeleteTaskRequest* request, ::flyteidl::admin::DeleteTaskResponse* response, ::grpc::experimental::ClientUnaryReactor* reactor) = 0; virtual void DeleteTask(::grpc::ClientContext* context, const ::grpc::ByteBuffer* request, ::flyteidl::admin::DeleteTaskResponse* response, ::grpc::experimental::ClientUnaryReactor* reactor) = 0; - // Do a job and get response from the agent server. - virtual void DoTask(::grpc::ClientContext* context, const ::flyteidl::admin::DoTaskRequest* request, ::flyteidl::admin::DoTaskResponse* response, std::function) = 0; - virtual void DoTask(::grpc::ClientContext* context, const ::grpc::ByteBuffer* request, ::flyteidl::admin::DoTaskResponse* response, std::function) = 0; - virtual void DoTask(::grpc::ClientContext* context, const ::flyteidl::admin::DoTaskRequest* request, ::flyteidl::admin::DoTaskResponse* response, ::grpc::experimental::ClientUnaryReactor* reactor) = 0; - virtual void DoTask(::grpc::ClientContext* context, const ::grpc::ByteBuffer* request, ::flyteidl::admin::DoTaskResponse* response, ::grpc::experimental::ClientUnaryReactor* reactor) = 0; }; virtual class experimental_async_interface* experimental_async() { return nullptr; } private: @@ -113,8 +100,6 @@ class AsyncAgentService final { virtual ::grpc::ClientAsyncResponseReaderInterface< ::flyteidl::admin::GetTaskResponse>* PrepareAsyncGetTaskRaw(::grpc::ClientContext* context, const ::flyteidl::admin::GetTaskRequest& request, ::grpc::CompletionQueue* cq) = 0; virtual ::grpc::ClientAsyncResponseReaderInterface< ::flyteidl::admin::DeleteTaskResponse>* AsyncDeleteTaskRaw(::grpc::ClientContext* context, const ::flyteidl::admin::DeleteTaskRequest& request, ::grpc::CompletionQueue* cq) = 0; virtual ::grpc::ClientAsyncResponseReaderInterface< ::flyteidl::admin::DeleteTaskResponse>* PrepareAsyncDeleteTaskRaw(::grpc::ClientContext* context, const ::flyteidl::admin::DeleteTaskRequest& request, ::grpc::CompletionQueue* cq) = 0; - virtual ::grpc::ClientAsyncResponseReaderInterface< ::flyteidl::admin::DoTaskResponse>* AsyncDoTaskRaw(::grpc::ClientContext* context, const ::flyteidl::admin::DoTaskRequest& request, ::grpc::CompletionQueue* cq) = 0; - virtual ::grpc::ClientAsyncResponseReaderInterface< ::flyteidl::admin::DoTaskResponse>* PrepareAsyncDoTaskRaw(::grpc::ClientContext* context, const ::flyteidl::admin::DoTaskRequest& request, ::grpc::CompletionQueue* cq) = 0; }; class Stub final : public StubInterface { public: @@ -140,13 +125,6 @@ class AsyncAgentService final { std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::flyteidl::admin::DeleteTaskResponse>> PrepareAsyncDeleteTask(::grpc::ClientContext* context, const ::flyteidl::admin::DeleteTaskRequest& request, ::grpc::CompletionQueue* cq) { return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::flyteidl::admin::DeleteTaskResponse>>(PrepareAsyncDeleteTaskRaw(context, request, cq)); } - ::grpc::Status DoTask(::grpc::ClientContext* context, const ::flyteidl::admin::DoTaskRequest& request, ::flyteidl::admin::DoTaskResponse* response) override; - std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::flyteidl::admin::DoTaskResponse>> AsyncDoTask(::grpc::ClientContext* context, const ::flyteidl::admin::DoTaskRequest& request, ::grpc::CompletionQueue* cq) { - return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::flyteidl::admin::DoTaskResponse>>(AsyncDoTaskRaw(context, request, cq)); - } - std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::flyteidl::admin::DoTaskResponse>> PrepareAsyncDoTask(::grpc::ClientContext* context, const ::flyteidl::admin::DoTaskRequest& request, ::grpc::CompletionQueue* cq) { - return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::flyteidl::admin::DoTaskResponse>>(PrepareAsyncDoTaskRaw(context, request, cq)); - } class experimental_async final : public StubInterface::experimental_async_interface { public: @@ -162,10 +140,6 @@ class AsyncAgentService final { void DeleteTask(::grpc::ClientContext* context, const ::grpc::ByteBuffer* request, ::flyteidl::admin::DeleteTaskResponse* response, std::function) override; void DeleteTask(::grpc::ClientContext* context, const ::flyteidl::admin::DeleteTaskRequest* request, ::flyteidl::admin::DeleteTaskResponse* response, ::grpc::experimental::ClientUnaryReactor* reactor) override; void DeleteTask(::grpc::ClientContext* context, const ::grpc::ByteBuffer* request, ::flyteidl::admin::DeleteTaskResponse* response, ::grpc::experimental::ClientUnaryReactor* reactor) override; - void DoTask(::grpc::ClientContext* context, const ::flyteidl::admin::DoTaskRequest* request, ::flyteidl::admin::DoTaskResponse* response, std::function) override; - void DoTask(::grpc::ClientContext* context, const ::grpc::ByteBuffer* request, ::flyteidl::admin::DoTaskResponse* response, std::function) override; - void DoTask(::grpc::ClientContext* context, const ::flyteidl::admin::DoTaskRequest* request, ::flyteidl::admin::DoTaskResponse* response, ::grpc::experimental::ClientUnaryReactor* reactor) override; - void DoTask(::grpc::ClientContext* context, const ::grpc::ByteBuffer* request, ::flyteidl::admin::DoTaskResponse* response, ::grpc::experimental::ClientUnaryReactor* reactor) override; private: friend class Stub; explicit experimental_async(Stub* stub): stub_(stub) { } @@ -183,12 +157,9 @@ class AsyncAgentService final { ::grpc::ClientAsyncResponseReader< ::flyteidl::admin::GetTaskResponse>* PrepareAsyncGetTaskRaw(::grpc::ClientContext* context, const ::flyteidl::admin::GetTaskRequest& request, ::grpc::CompletionQueue* cq) override; ::grpc::ClientAsyncResponseReader< ::flyteidl::admin::DeleteTaskResponse>* AsyncDeleteTaskRaw(::grpc::ClientContext* context, const ::flyteidl::admin::DeleteTaskRequest& request, ::grpc::CompletionQueue* cq) override; ::grpc::ClientAsyncResponseReader< ::flyteidl::admin::DeleteTaskResponse>* PrepareAsyncDeleteTaskRaw(::grpc::ClientContext* context, const ::flyteidl::admin::DeleteTaskRequest& request, ::grpc::CompletionQueue* cq) override; - ::grpc::ClientAsyncResponseReader< ::flyteidl::admin::DoTaskResponse>* AsyncDoTaskRaw(::grpc::ClientContext* context, const ::flyteidl::admin::DoTaskRequest& request, ::grpc::CompletionQueue* cq) override; - ::grpc::ClientAsyncResponseReader< ::flyteidl::admin::DoTaskResponse>* PrepareAsyncDoTaskRaw(::grpc::ClientContext* context, const ::flyteidl::admin::DoTaskRequest& request, ::grpc::CompletionQueue* cq) override; const ::grpc::internal::RpcMethod rpcmethod_CreateTask_; const ::grpc::internal::RpcMethod rpcmethod_GetTask_; const ::grpc::internal::RpcMethod rpcmethod_DeleteTask_; - const ::grpc::internal::RpcMethod rpcmethod_DoTask_; }; static std::unique_ptr NewStub(const std::shared_ptr< ::grpc::ChannelInterface>& channel, const ::grpc::StubOptions& options = ::grpc::StubOptions()); @@ -202,8 +173,6 @@ class AsyncAgentService final { virtual ::grpc::Status GetTask(::grpc::ServerContext* context, const ::flyteidl::admin::GetTaskRequest* request, ::flyteidl::admin::GetTaskResponse* response); // Delete the task resource. virtual ::grpc::Status DeleteTask(::grpc::ServerContext* context, const ::flyteidl::admin::DeleteTaskRequest* request, ::flyteidl::admin::DeleteTaskResponse* response); - // Do a job and get response from the agent server. - virtual ::grpc::Status DoTask(::grpc::ServerContext* context, const ::flyteidl::admin::DoTaskRequest* request, ::flyteidl::admin::DoTaskResponse* response); }; template class WithAsyncMethod_CreateTask : public BaseClass { @@ -265,27 +234,7 @@ class AsyncAgentService final { ::grpc::Service::RequestAsyncUnary(2, context, request, response, new_call_cq, notification_cq, tag); } }; - template - class WithAsyncMethod_DoTask : public BaseClass { - private: - void BaseClassMustBeDerivedFromService(const Service *service) {} - public: - WithAsyncMethod_DoTask() { - ::grpc::Service::MarkMethodAsync(3); - } - ~WithAsyncMethod_DoTask() override { - BaseClassMustBeDerivedFromService(this); - } - // disable synchronous version of this method - ::grpc::Status DoTask(::grpc::ServerContext* context, const ::flyteidl::admin::DoTaskRequest* request, ::flyteidl::admin::DoTaskResponse* response) override { - abort(); - return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, ""); - } - void RequestDoTask(::grpc::ServerContext* context, ::flyteidl::admin::DoTaskRequest* request, ::grpc::ServerAsyncResponseWriter< ::flyteidl::admin::DoTaskResponse>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) { - ::grpc::Service::RequestAsyncUnary(3, context, request, response, new_call_cq, notification_cq, tag); - } - }; - typedef WithAsyncMethod_CreateTask > > > AsyncService; + typedef WithAsyncMethod_CreateTask > > AsyncService; template class ExperimentalWithCallbackMethod_CreateTask : public BaseClass { private: @@ -379,38 +328,7 @@ class AsyncAgentService final { } virtual void DeleteTask(::grpc::ServerContext* context, const ::flyteidl::admin::DeleteTaskRequest* request, ::flyteidl::admin::DeleteTaskResponse* response, ::grpc::experimental::ServerCallbackRpcController* controller) { controller->Finish(::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "")); } }; - template - class ExperimentalWithCallbackMethod_DoTask : public BaseClass { - private: - void BaseClassMustBeDerivedFromService(const Service *service) {} - public: - ExperimentalWithCallbackMethod_DoTask() { - ::grpc::Service::experimental().MarkMethodCallback(3, - new ::grpc::internal::CallbackUnaryHandler< ::flyteidl::admin::DoTaskRequest, ::flyteidl::admin::DoTaskResponse>( - [this](::grpc::ServerContext* context, - const ::flyteidl::admin::DoTaskRequest* request, - ::flyteidl::admin::DoTaskResponse* response, - ::grpc::experimental::ServerCallbackRpcController* controller) { - return this->DoTask(context, request, response, controller); - })); - } - void SetMessageAllocatorFor_DoTask( - ::grpc::experimental::MessageAllocator< ::flyteidl::admin::DoTaskRequest, ::flyteidl::admin::DoTaskResponse>* allocator) { - static_cast<::grpc::internal::CallbackUnaryHandler< ::flyteidl::admin::DoTaskRequest, ::flyteidl::admin::DoTaskResponse>*>( - ::grpc::Service::experimental().GetHandler(3)) - ->SetMessageAllocator(allocator); - } - ~ExperimentalWithCallbackMethod_DoTask() override { - BaseClassMustBeDerivedFromService(this); - } - // disable synchronous version of this method - ::grpc::Status DoTask(::grpc::ServerContext* context, const ::flyteidl::admin::DoTaskRequest* request, ::flyteidl::admin::DoTaskResponse* response) override { - abort(); - return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, ""); - } - virtual void DoTask(::grpc::ServerContext* context, const ::flyteidl::admin::DoTaskRequest* request, ::flyteidl::admin::DoTaskResponse* response, ::grpc::experimental::ServerCallbackRpcController* controller) { controller->Finish(::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "")); } - }; - typedef ExperimentalWithCallbackMethod_CreateTask > > > ExperimentalCallbackService; + typedef ExperimentalWithCallbackMethod_CreateTask > > ExperimentalCallbackService; template class WithGenericMethod_CreateTask : public BaseClass { private: @@ -463,23 +381,6 @@ class AsyncAgentService final { } }; template - class WithGenericMethod_DoTask : public BaseClass { - private: - void BaseClassMustBeDerivedFromService(const Service *service) {} - public: - WithGenericMethod_DoTask() { - ::grpc::Service::MarkMethodGeneric(3); - } - ~WithGenericMethod_DoTask() override { - BaseClassMustBeDerivedFromService(this); - } - // disable synchronous version of this method - ::grpc::Status DoTask(::grpc::ServerContext* context, const ::flyteidl::admin::DoTaskRequest* request, ::flyteidl::admin::DoTaskResponse* response) override { - abort(); - return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, ""); - } - }; - template class WithRawMethod_CreateTask : public BaseClass { private: void BaseClassMustBeDerivedFromService(const Service *service) {} @@ -540,26 +441,6 @@ class AsyncAgentService final { } }; template - class WithRawMethod_DoTask : public BaseClass { - private: - void BaseClassMustBeDerivedFromService(const Service *service) {} - public: - WithRawMethod_DoTask() { - ::grpc::Service::MarkMethodRaw(3); - } - ~WithRawMethod_DoTask() override { - BaseClassMustBeDerivedFromService(this); - } - // disable synchronous version of this method - ::grpc::Status DoTask(::grpc::ServerContext* context, const ::flyteidl::admin::DoTaskRequest* request, ::flyteidl::admin::DoTaskResponse* response) override { - abort(); - return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, ""); - } - void RequestDoTask(::grpc::ServerContext* context, ::grpc::ByteBuffer* request, ::grpc::ServerAsyncResponseWriter< ::grpc::ByteBuffer>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) { - ::grpc::Service::RequestAsyncUnary(3, context, request, response, new_call_cq, notification_cq, tag); - } - }; - template class ExperimentalWithRawCallbackMethod_CreateTask : public BaseClass { private: void BaseClassMustBeDerivedFromService(const Service *service) {} @@ -635,31 +516,6 @@ class AsyncAgentService final { virtual void DeleteTask(::grpc::ServerContext* context, const ::grpc::ByteBuffer* request, ::grpc::ByteBuffer* response, ::grpc::experimental::ServerCallbackRpcController* controller) { controller->Finish(::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "")); } }; template - class ExperimentalWithRawCallbackMethod_DoTask : public BaseClass { - private: - void BaseClassMustBeDerivedFromService(const Service *service) {} - public: - ExperimentalWithRawCallbackMethod_DoTask() { - ::grpc::Service::experimental().MarkMethodRawCallback(3, - new ::grpc::internal::CallbackUnaryHandler< ::grpc::ByteBuffer, ::grpc::ByteBuffer>( - [this](::grpc::ServerContext* context, - const ::grpc::ByteBuffer* request, - ::grpc::ByteBuffer* response, - ::grpc::experimental::ServerCallbackRpcController* controller) { - this->DoTask(context, request, response, controller); - })); - } - ~ExperimentalWithRawCallbackMethod_DoTask() override { - BaseClassMustBeDerivedFromService(this); - } - // disable synchronous version of this method - ::grpc::Status DoTask(::grpc::ServerContext* context, const ::flyteidl::admin::DoTaskRequest* request, ::flyteidl::admin::DoTaskResponse* response) override { - abort(); - return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, ""); - } - virtual void DoTask(::grpc::ServerContext* context, const ::grpc::ByteBuffer* request, ::grpc::ByteBuffer* response, ::grpc::experimental::ServerCallbackRpcController* controller) { controller->Finish(::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "")); } - }; - template class WithStreamedUnaryMethod_CreateTask : public BaseClass { private: void BaseClassMustBeDerivedFromService(const Service *service) {} @@ -719,13 +575,204 @@ class AsyncAgentService final { // replace default version of method with streamed unary virtual ::grpc::Status StreamedDeleteTask(::grpc::ServerContext* context, ::grpc::ServerUnaryStreamer< ::flyteidl::admin::DeleteTaskRequest,::flyteidl::admin::DeleteTaskResponse>* server_unary_streamer) = 0; }; + typedef WithStreamedUnaryMethod_CreateTask > > StreamedUnaryService; + typedef Service SplitStreamedService; + typedef WithStreamedUnaryMethod_CreateTask > > StreamedService; +}; + +class SyncAgentService final { + public: + static constexpr char const* service_full_name() { + return "flyteidl.service.SyncAgentService"; + } + class StubInterface { + public: + virtual ~StubInterface() {} + // Do a job and get response from the agent server. + virtual ::grpc::Status DoTask(::grpc::ClientContext* context, const ::flyteidl::admin::DoTaskRequest& request, ::flyteidl::admin::DoTaskResponse* response) = 0; + std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flyteidl::admin::DoTaskResponse>> AsyncDoTask(::grpc::ClientContext* context, const ::flyteidl::admin::DoTaskRequest& request, ::grpc::CompletionQueue* cq) { + return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flyteidl::admin::DoTaskResponse>>(AsyncDoTaskRaw(context, request, cq)); + } + std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flyteidl::admin::DoTaskResponse>> PrepareAsyncDoTask(::grpc::ClientContext* context, const ::flyteidl::admin::DoTaskRequest& request, ::grpc::CompletionQueue* cq) { + return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flyteidl::admin::DoTaskResponse>>(PrepareAsyncDoTaskRaw(context, request, cq)); + } + class experimental_async_interface { + public: + virtual ~experimental_async_interface() {} + // Do a job and get response from the agent server. + virtual void DoTask(::grpc::ClientContext* context, const ::flyteidl::admin::DoTaskRequest* request, ::flyteidl::admin::DoTaskResponse* response, std::function) = 0; + virtual void DoTask(::grpc::ClientContext* context, const ::grpc::ByteBuffer* request, ::flyteidl::admin::DoTaskResponse* response, std::function) = 0; + virtual void DoTask(::grpc::ClientContext* context, const ::flyteidl::admin::DoTaskRequest* request, ::flyteidl::admin::DoTaskResponse* response, ::grpc::experimental::ClientUnaryReactor* reactor) = 0; + virtual void DoTask(::grpc::ClientContext* context, const ::grpc::ByteBuffer* request, ::flyteidl::admin::DoTaskResponse* response, ::grpc::experimental::ClientUnaryReactor* reactor) = 0; + }; + virtual class experimental_async_interface* experimental_async() { return nullptr; } + private: + virtual ::grpc::ClientAsyncResponseReaderInterface< ::flyteidl::admin::DoTaskResponse>* AsyncDoTaskRaw(::grpc::ClientContext* context, const ::flyteidl::admin::DoTaskRequest& request, ::grpc::CompletionQueue* cq) = 0; + virtual ::grpc::ClientAsyncResponseReaderInterface< ::flyteidl::admin::DoTaskResponse>* PrepareAsyncDoTaskRaw(::grpc::ClientContext* context, const ::flyteidl::admin::DoTaskRequest& request, ::grpc::CompletionQueue* cq) = 0; + }; + class Stub final : public StubInterface { + public: + Stub(const std::shared_ptr< ::grpc::ChannelInterface>& channel); + ::grpc::Status DoTask(::grpc::ClientContext* context, const ::flyteidl::admin::DoTaskRequest& request, ::flyteidl::admin::DoTaskResponse* response) override; + std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::flyteidl::admin::DoTaskResponse>> AsyncDoTask(::grpc::ClientContext* context, const ::flyteidl::admin::DoTaskRequest& request, ::grpc::CompletionQueue* cq) { + return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::flyteidl::admin::DoTaskResponse>>(AsyncDoTaskRaw(context, request, cq)); + } + std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::flyteidl::admin::DoTaskResponse>> PrepareAsyncDoTask(::grpc::ClientContext* context, const ::flyteidl::admin::DoTaskRequest& request, ::grpc::CompletionQueue* cq) { + return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::flyteidl::admin::DoTaskResponse>>(PrepareAsyncDoTaskRaw(context, request, cq)); + } + class experimental_async final : + public StubInterface::experimental_async_interface { + public: + void DoTask(::grpc::ClientContext* context, const ::flyteidl::admin::DoTaskRequest* request, ::flyteidl::admin::DoTaskResponse* response, std::function) override; + void DoTask(::grpc::ClientContext* context, const ::grpc::ByteBuffer* request, ::flyteidl::admin::DoTaskResponse* response, std::function) override; + void DoTask(::grpc::ClientContext* context, const ::flyteidl::admin::DoTaskRequest* request, ::flyteidl::admin::DoTaskResponse* response, ::grpc::experimental::ClientUnaryReactor* reactor) override; + void DoTask(::grpc::ClientContext* context, const ::grpc::ByteBuffer* request, ::flyteidl::admin::DoTaskResponse* response, ::grpc::experimental::ClientUnaryReactor* reactor) override; + private: + friend class Stub; + explicit experimental_async(Stub* stub): stub_(stub) { } + Stub* stub() { return stub_; } + Stub* stub_; + }; + class experimental_async_interface* experimental_async() override { return &async_stub_; } + + private: + std::shared_ptr< ::grpc::ChannelInterface> channel_; + class experimental_async async_stub_{this}; + ::grpc::ClientAsyncResponseReader< ::flyteidl::admin::DoTaskResponse>* AsyncDoTaskRaw(::grpc::ClientContext* context, const ::flyteidl::admin::DoTaskRequest& request, ::grpc::CompletionQueue* cq) override; + ::grpc::ClientAsyncResponseReader< ::flyteidl::admin::DoTaskResponse>* PrepareAsyncDoTaskRaw(::grpc::ClientContext* context, const ::flyteidl::admin::DoTaskRequest& request, ::grpc::CompletionQueue* cq) override; + const ::grpc::internal::RpcMethod rpcmethod_DoTask_; + }; + static std::unique_ptr NewStub(const std::shared_ptr< ::grpc::ChannelInterface>& channel, const ::grpc::StubOptions& options = ::grpc::StubOptions()); + + class Service : public ::grpc::Service { + public: + Service(); + virtual ~Service(); + // Do a job and get response from the agent server. + virtual ::grpc::Status DoTask(::grpc::ServerContext* context, const ::flyteidl::admin::DoTaskRequest* request, ::flyteidl::admin::DoTaskResponse* response); + }; + template + class WithAsyncMethod_DoTask : public BaseClass { + private: + void BaseClassMustBeDerivedFromService(const Service *service) {} + public: + WithAsyncMethod_DoTask() { + ::grpc::Service::MarkMethodAsync(0); + } + ~WithAsyncMethod_DoTask() override { + BaseClassMustBeDerivedFromService(this); + } + // disable synchronous version of this method + ::grpc::Status DoTask(::grpc::ServerContext* context, const ::flyteidl::admin::DoTaskRequest* request, ::flyteidl::admin::DoTaskResponse* response) override { + abort(); + return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, ""); + } + void RequestDoTask(::grpc::ServerContext* context, ::flyteidl::admin::DoTaskRequest* request, ::grpc::ServerAsyncResponseWriter< ::flyteidl::admin::DoTaskResponse>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) { + ::grpc::Service::RequestAsyncUnary(0, context, request, response, new_call_cq, notification_cq, tag); + } + }; + typedef WithAsyncMethod_DoTask AsyncService; + template + class ExperimentalWithCallbackMethod_DoTask : public BaseClass { + private: + void BaseClassMustBeDerivedFromService(const Service *service) {} + public: + ExperimentalWithCallbackMethod_DoTask() { + ::grpc::Service::experimental().MarkMethodCallback(0, + new ::grpc::internal::CallbackUnaryHandler< ::flyteidl::admin::DoTaskRequest, ::flyteidl::admin::DoTaskResponse>( + [this](::grpc::ServerContext* context, + const ::flyteidl::admin::DoTaskRequest* request, + ::flyteidl::admin::DoTaskResponse* response, + ::grpc::experimental::ServerCallbackRpcController* controller) { + return this->DoTask(context, request, response, controller); + })); + } + void SetMessageAllocatorFor_DoTask( + ::grpc::experimental::MessageAllocator< ::flyteidl::admin::DoTaskRequest, ::flyteidl::admin::DoTaskResponse>* allocator) { + static_cast<::grpc::internal::CallbackUnaryHandler< ::flyteidl::admin::DoTaskRequest, ::flyteidl::admin::DoTaskResponse>*>( + ::grpc::Service::experimental().GetHandler(0)) + ->SetMessageAllocator(allocator); + } + ~ExperimentalWithCallbackMethod_DoTask() override { + BaseClassMustBeDerivedFromService(this); + } + // disable synchronous version of this method + ::grpc::Status DoTask(::grpc::ServerContext* context, const ::flyteidl::admin::DoTaskRequest* request, ::flyteidl::admin::DoTaskResponse* response) override { + abort(); + return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, ""); + } + virtual void DoTask(::grpc::ServerContext* context, const ::flyteidl::admin::DoTaskRequest* request, ::flyteidl::admin::DoTaskResponse* response, ::grpc::experimental::ServerCallbackRpcController* controller) { controller->Finish(::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "")); } + }; + typedef ExperimentalWithCallbackMethod_DoTask ExperimentalCallbackService; + template + class WithGenericMethod_DoTask : public BaseClass { + private: + void BaseClassMustBeDerivedFromService(const Service *service) {} + public: + WithGenericMethod_DoTask() { + ::grpc::Service::MarkMethodGeneric(0); + } + ~WithGenericMethod_DoTask() override { + BaseClassMustBeDerivedFromService(this); + } + // disable synchronous version of this method + ::grpc::Status DoTask(::grpc::ServerContext* context, const ::flyteidl::admin::DoTaskRequest* request, ::flyteidl::admin::DoTaskResponse* response) override { + abort(); + return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, ""); + } + }; + template + class WithRawMethod_DoTask : public BaseClass { + private: + void BaseClassMustBeDerivedFromService(const Service *service) {} + public: + WithRawMethod_DoTask() { + ::grpc::Service::MarkMethodRaw(0); + } + ~WithRawMethod_DoTask() override { + BaseClassMustBeDerivedFromService(this); + } + // disable synchronous version of this method + ::grpc::Status DoTask(::grpc::ServerContext* context, const ::flyteidl::admin::DoTaskRequest* request, ::flyteidl::admin::DoTaskResponse* response) override { + abort(); + return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, ""); + } + void RequestDoTask(::grpc::ServerContext* context, ::grpc::ByteBuffer* request, ::grpc::ServerAsyncResponseWriter< ::grpc::ByteBuffer>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) { + ::grpc::Service::RequestAsyncUnary(0, context, request, response, new_call_cq, notification_cq, tag); + } + }; + template + class ExperimentalWithRawCallbackMethod_DoTask : public BaseClass { + private: + void BaseClassMustBeDerivedFromService(const Service *service) {} + public: + ExperimentalWithRawCallbackMethod_DoTask() { + ::grpc::Service::experimental().MarkMethodRawCallback(0, + new ::grpc::internal::CallbackUnaryHandler< ::grpc::ByteBuffer, ::grpc::ByteBuffer>( + [this](::grpc::ServerContext* context, + const ::grpc::ByteBuffer* request, + ::grpc::ByteBuffer* response, + ::grpc::experimental::ServerCallbackRpcController* controller) { + this->DoTask(context, request, response, controller); + })); + } + ~ExperimentalWithRawCallbackMethod_DoTask() override { + BaseClassMustBeDerivedFromService(this); + } + // disable synchronous version of this method + ::grpc::Status DoTask(::grpc::ServerContext* context, const ::flyteidl::admin::DoTaskRequest* request, ::flyteidl::admin::DoTaskResponse* response) override { + abort(); + return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, ""); + } + virtual void DoTask(::grpc::ServerContext* context, const ::grpc::ByteBuffer* request, ::grpc::ByteBuffer* response, ::grpc::experimental::ServerCallbackRpcController* controller) { controller->Finish(::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "")); } + }; template class WithStreamedUnaryMethod_DoTask : public BaseClass { private: void BaseClassMustBeDerivedFromService(const Service *service) {} public: WithStreamedUnaryMethod_DoTask() { - ::grpc::Service::MarkMethodStreamed(3, + ::grpc::Service::MarkMethodStreamed(0, new ::grpc::internal::StreamedUnaryHandler< ::flyteidl::admin::DoTaskRequest, ::flyteidl::admin::DoTaskResponse>(std::bind(&WithStreamedUnaryMethod_DoTask::StreamedDoTask, this, std::placeholders::_1, std::placeholders::_2))); } ~WithStreamedUnaryMethod_DoTask() override { @@ -739,9 +786,9 @@ class AsyncAgentService final { // replace default version of method with streamed unary virtual ::grpc::Status StreamedDoTask(::grpc::ServerContext* context, ::grpc::ServerUnaryStreamer< ::flyteidl::admin::DoTaskRequest,::flyteidl::admin::DoTaskResponse>* server_unary_streamer) = 0; }; - typedef WithStreamedUnaryMethod_CreateTask > > > StreamedUnaryService; + typedef WithStreamedUnaryMethod_DoTask StreamedUnaryService; typedef Service SplitStreamedService; - typedef WithStreamedUnaryMethod_CreateTask > > > StreamedService; + typedef WithStreamedUnaryMethod_DoTask StreamedService; }; } // namespace service diff --git a/flyteidl/gen/pb-cpp/flyteidl/service/agent.pb.cc b/flyteidl/gen/pb-cpp/flyteidl/service/agent.pb.cc index fd64d2530c..c9055eb0f5 100644 --- a/flyteidl/gen/pb-cpp/flyteidl/service/agent.pb.cc +++ b/flyteidl/gen/pb-cpp/flyteidl/service/agent.pb.cc @@ -38,23 +38,23 @@ ::google::protobuf::internal::AssignDescriptorsTable assign_descriptors_table_fl const char descriptor_table_protodef_flyteidl_2fservice_2fagent_2eproto[] = "\n\034flyteidl/service/agent.proto\022\020flyteidl" - ".service\032\032flyteidl/admin/agent.proto2\332\002\n" + ".service\032\032flyteidl/admin/agent.proto2\217\002\n" "\021AsyncAgentService\022U\n\nCreateTask\022!.flyte" "idl.admin.CreateTaskRequest\032\".flyteidl.a" "dmin.CreateTaskResponse\"\000\022L\n\007GetTask\022\036.f" "lyteidl.admin.GetTaskRequest\032\037.flyteidl." "admin.GetTaskResponse\"\000\022U\n\nDeleteTask\022!." "flyteidl.admin.DeleteTaskRequest\032\".flyte" - "idl.admin.DeleteTaskResponse\"\000\022I\n\006DoTask" - "\022\035.flyteidl.admin.DoTaskRequest\032\036.flytei" - "dl.admin.DoTaskResponse\"\000B\?Z=github.com/" - "flyteorg/flyte/flyteidl/gen/pb-go/flytei" - "dl/serviceb\006proto3" + "idl.admin.DeleteTaskResponse\"\0002]\n\020SyncAg" + "entService\022I\n\006DoTask\022\035.flyteidl.admin.Do" + "TaskRequest\032\036.flyteidl.admin.DoTaskRespo" + "nse\"\000B\?Z=github.com/flyteorg/flyte/flyte" + "idl/gen/pb-go/flyteidl/serviceb\006proto3" ; ::google::protobuf::internal::DescriptorTable descriptor_table_flyteidl_2fservice_2fagent_2eproto = { false, InitDefaults_flyteidl_2fservice_2fagent_2eproto, descriptor_table_protodef_flyteidl_2fservice_2fagent_2eproto, - "flyteidl/service/agent.proto", &assign_descriptors_table_flyteidl_2fservice_2fagent_2eproto, 498, + "flyteidl/service/agent.proto", &assign_descriptors_table_flyteidl_2fservice_2fagent_2eproto, 518, }; void AddDescriptors_flyteidl_2fservice_2fagent_2eproto() { diff --git a/flyteidl/gen/pb-go/flyteidl/admin/agent.pb.go b/flyteidl/gen/pb-go/flyteidl/admin/agent.pb.go index ae67cc93a1..54afdbdd19 100644 --- a/flyteidl/gen/pb-go/flyteidl/admin/agent.pb.go +++ b/flyteidl/gen/pb-go/flyteidl/admin/agent.pb.go @@ -493,7 +493,7 @@ type DoTaskRequest struct { Inputs *core.LiteralMap `protobuf:"bytes,1,opt,name=inputs,proto3" json:"inputs,omitempty"` // Template of the task that encapsulates all the metadata of the task. Template *core.TaskTemplate `protobuf:"bytes,2,opt,name=template,proto3" json:"template,omitempty"` - // Prefix for where task output data will be written. (e.g. s3://my-bucket/randomstring) + // Prefix for where task output data will be written. (e.g. s3://my-bucket/randomstring) OutputPrefix string `protobuf:"bytes,3,opt,name=output_prefix,json=outputPrefix,proto3" json:"output_prefix,omitempty"` // subset of runtime task execution metadata. TaskExecutionMetadata *TaskExecutionMetadata `protobuf:"bytes,4,opt,name=task_execution_metadata,json=taskExecutionMetadata,proto3" json:"task_execution_metadata,omitempty"` diff --git a/flyteidl/gen/pb-go/flyteidl/service/agent.pb.go b/flyteidl/gen/pb-go/flyteidl/service/agent.pb.go index fbd1ed3e73..a46971dd2d 100644 --- a/flyteidl/gen/pb-go/flyteidl/service/agent.pb.go +++ b/flyteidl/gen/pb-go/flyteidl/service/agent.pb.go @@ -28,22 +28,22 @@ const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package func init() { proto.RegisterFile("flyteidl/service/agent.proto", fileDescriptor_f7d1dfd1fb77d2ef) } var fileDescriptor_f7d1dfd1fb77d2ef = []byte{ - // 231 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x91, 0xc1, 0x4a, 0xc4, 0x30, - 0x10, 0x40, 0xc5, 0xc3, 0x0a, 0x73, 0xd2, 0x1c, 0x8b, 0xae, 0xb8, 0x77, 0x13, 0xd0, 0xb3, 0xc8, - 0xea, 0x82, 0x08, 0x9e, 0xd4, 0xbd, 0x78, 0x4b, 0xbb, 0x63, 0x0c, 0xb6, 0x99, 0x9a, 0xa4, 0x42, - 0x7f, 0xd5, 0xaf, 0x11, 0xd3, 0x36, 0x2d, 0x95, 0xec, 0x2d, 0xe4, 0xbd, 0x79, 0x0c, 0x0c, 0x9c, - 0xbe, 0x97, 0xad, 0x47, 0xbd, 0x2b, 0x85, 0x43, 0xfb, 0xad, 0x0b, 0x14, 0x52, 0xa1, 0xf1, 0xbc, - 0xb6, 0xe4, 0x89, 0x1d, 0x0f, 0x94, 0xf7, 0x34, 0xcb, 0xa2, 0x2f, 0x77, 0x95, 0x36, 0x53, 0xfb, - 0xea, 0xe7, 0x10, 0x4e, 0xd6, 0xae, 0x35, 0xc5, 0xfa, 0xef, 0xf3, 0xa5, 0x9b, 0x60, 0x5b, 0x80, - 0x7b, 0x8b, 0xd2, 0xe3, 0xab, 0x74, 0x9f, 0xec, 0x82, 0xc7, 0x64, 0x08, 0xf0, 0x91, 0x3d, 0xe3, - 0x57, 0x83, 0xce, 0x67, 0xab, 0x7d, 0x8a, 0xab, 0xc9, 0x38, 0x5c, 0x1d, 0xb0, 0x27, 0x38, 0x7a, - 0x40, 0x1f, 0x9a, 0xcb, 0xf9, 0x40, 0x0f, 0x86, 0xe0, 0x79, 0x92, 0xc7, 0xda, 0x16, 0x60, 0x83, - 0x25, 0xa6, 0x96, 0x1c, 0x59, 0x72, 0xc9, 0xa9, 0x12, 0xb3, 0x8f, 0xb0, 0xd8, 0x50, 0x48, 0x9e, - 0xfd, 0xf3, 0x69, 0x9a, 0x5b, 0xa6, 0xf0, 0x90, 0xba, 0xbb, 0x7d, 0xbb, 0x51, 0xda, 0x7f, 0x34, - 0x39, 0x2f, 0xa8, 0x12, 0xc1, 0x26, 0xab, 0xba, 0x87, 0x88, 0x47, 0x51, 0x68, 0x44, 0x9d, 0x5f, - 0x2a, 0x12, 0xf3, 0xbb, 0xe6, 0x8b, 0x70, 0xa4, 0xeb, 0xdf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x01, - 0xb8, 0x9c, 0xe0, 0xf2, 0x01, 0x00, 0x00, + // 240 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0x49, 0xcb, 0xa9, 0x2c, + 0x49, 0xcd, 0x4c, 0xc9, 0xd1, 0x2f, 0x4e, 0x2d, 0x2a, 0xcb, 0x4c, 0x4e, 0xd5, 0x4f, 0x4c, 0x4f, + 0xcd, 0x2b, 0xd1, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x12, 0x80, 0xc9, 0xea, 0x41, 0x65, 0xa5, + 0xa4, 0xe0, 0xea, 0x13, 0x53, 0x72, 0x33, 0xf3, 0x90, 0x55, 0x1b, 0xf5, 0x33, 0x71, 0x09, 0x3a, + 0x16, 0x57, 0xe6, 0x25, 0x3b, 0x82, 0x04, 0x83, 0x21, 0x3a, 0x84, 0x42, 0xb9, 0xb8, 0x9c, 0x8b, + 0x52, 0x13, 0x4b, 0x52, 0x43, 0x12, 0x8b, 0xb3, 0x85, 0x14, 0xf5, 0xe0, 0x46, 0x82, 0x0d, 0xd0, + 0x43, 0xc8, 0x05, 0xa5, 0x16, 0x96, 0xa6, 0x16, 0x97, 0x48, 0x29, 0xe1, 0x53, 0x52, 0x5c, 0x90, + 0x9f, 0x57, 0x9c, 0xaa, 0xc4, 0x20, 0xe4, 0xc3, 0xc5, 0xee, 0x9e, 0x5a, 0x02, 0x36, 0x53, 0x0e, + 0x5d, 0x03, 0x54, 0x02, 0x66, 0xa0, 0x3c, 0x4e, 0x79, 0xb8, 0x69, 0xa1, 0x5c, 0x5c, 0x2e, 0xa9, + 0x39, 0xa9, 0xb8, 0x1c, 0x89, 0x90, 0xc3, 0xe9, 0x48, 0x64, 0x25, 0x30, 0x63, 0x8d, 0x62, 0xb9, + 0x04, 0x82, 0xd1, 0xc3, 0xc3, 0x93, 0x8b, 0xcd, 0x25, 0x1f, 0x6c, 0x8d, 0x2c, 0x86, 0x19, 0xf9, + 0xc8, 0x56, 0xc8, 0xe1, 0x92, 0x86, 0x19, 0xef, 0x64, 0x1f, 0x65, 0x9b, 0x9e, 0x59, 0x92, 0x51, + 0x9a, 0xa4, 0x97, 0x9c, 0x9f, 0xab, 0x0f, 0x56, 0x9d, 0x5f, 0x94, 0x0e, 0x61, 0xe8, 0xc3, 0x23, + 0x2a, 0x3d, 0x35, 0x4f, 0xbf, 0x20, 0x49, 0x37, 0x3d, 0x5f, 0x1f, 0x3d, 0xae, 0x93, 0xd8, 0xc0, + 0x11, 0x67, 0x0c, 0x08, 0x00, 0x00, 0xff, 0xff, 0xc7, 0x0e, 0x26, 0x76, 0x06, 0x02, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -64,8 +64,6 @@ type AsyncAgentServiceClient interface { GetTask(ctx context.Context, in *admin.GetTaskRequest, opts ...grpc.CallOption) (*admin.GetTaskResponse, error) // Delete the task resource. DeleteTask(ctx context.Context, in *admin.DeleteTaskRequest, opts ...grpc.CallOption) (*admin.DeleteTaskResponse, error) - // Do a job and get response from the agent server. - DoTask(ctx context.Context, in *admin.DoTaskRequest, opts ...grpc.CallOption) (*admin.DoTaskResponse, error) } type asyncAgentServiceClient struct { @@ -103,15 +101,6 @@ func (c *asyncAgentServiceClient) DeleteTask(ctx context.Context, in *admin.Dele return out, nil } -func (c *asyncAgentServiceClient) DoTask(ctx context.Context, in *admin.DoTaskRequest, opts ...grpc.CallOption) (*admin.DoTaskResponse, error) { - out := new(admin.DoTaskResponse) - err := c.cc.Invoke(ctx, "/flyteidl.service.AsyncAgentService/DoTask", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - // AsyncAgentServiceServer is the server API for AsyncAgentService service. type AsyncAgentServiceServer interface { // Send a task create request to the agent server. @@ -120,8 +109,6 @@ type AsyncAgentServiceServer interface { GetTask(context.Context, *admin.GetTaskRequest) (*admin.GetTaskResponse, error) // Delete the task resource. DeleteTask(context.Context, *admin.DeleteTaskRequest) (*admin.DeleteTaskResponse, error) - // Do a job and get response from the agent server. - DoTask(context.Context, *admin.DoTaskRequest) (*admin.DoTaskResponse, error) } // UnimplementedAsyncAgentServiceServer can be embedded to have forward compatible implementations. @@ -137,9 +124,6 @@ func (*UnimplementedAsyncAgentServiceServer) GetTask(ctx context.Context, req *a func (*UnimplementedAsyncAgentServiceServer) DeleteTask(ctx context.Context, req *admin.DeleteTaskRequest) (*admin.DeleteTaskResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method DeleteTask not implemented") } -func (*UnimplementedAsyncAgentServiceServer) DoTask(ctx context.Context, req *admin.DoTaskRequest) (*admin.DoTaskResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method DoTask not implemented") -} func RegisterAsyncAgentServiceServer(s *grpc.Server, srv AsyncAgentServiceServer) { s.RegisterService(&_AsyncAgentService_serviceDesc, srv) @@ -199,24 +183,6 @@ func _AsyncAgentService_DeleteTask_Handler(srv interface{}, ctx context.Context, return interceptor(ctx, in, info, handler) } -func _AsyncAgentService_DoTask_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(admin.DoTaskRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(AsyncAgentServiceServer).DoTask(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/flyteidl.service.AsyncAgentService/DoTask", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(AsyncAgentServiceServer).DoTask(ctx, req.(*admin.DoTaskRequest)) - } - return interceptor(ctx, in, info, handler) -} - var _AsyncAgentService_serviceDesc = grpc.ServiceDesc{ ServiceName: "flyteidl.service.AsyncAgentService", HandlerType: (*AsyncAgentServiceServer)(nil), @@ -233,9 +199,79 @@ var _AsyncAgentService_serviceDesc = grpc.ServiceDesc{ MethodName: "DeleteTask", Handler: _AsyncAgentService_DeleteTask_Handler, }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "flyteidl/service/agent.proto", +} + +// SyncAgentServiceClient is the client API for SyncAgentService service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. +type SyncAgentServiceClient interface { + // Do a job and get response from the agent server. + DoTask(ctx context.Context, in *admin.DoTaskRequest, opts ...grpc.CallOption) (*admin.DoTaskResponse, error) +} + +type syncAgentServiceClient struct { + cc *grpc.ClientConn +} + +func NewSyncAgentServiceClient(cc *grpc.ClientConn) SyncAgentServiceClient { + return &syncAgentServiceClient{cc} +} + +func (c *syncAgentServiceClient) DoTask(ctx context.Context, in *admin.DoTaskRequest, opts ...grpc.CallOption) (*admin.DoTaskResponse, error) { + out := new(admin.DoTaskResponse) + err := c.cc.Invoke(ctx, "/flyteidl.service.SyncAgentService/DoTask", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// SyncAgentServiceServer is the server API for SyncAgentService service. +type SyncAgentServiceServer interface { + // Do a job and get response from the agent server. + DoTask(context.Context, *admin.DoTaskRequest) (*admin.DoTaskResponse, error) +} + +// UnimplementedSyncAgentServiceServer can be embedded to have forward compatible implementations. +type UnimplementedSyncAgentServiceServer struct { +} + +func (*UnimplementedSyncAgentServiceServer) DoTask(ctx context.Context, req *admin.DoTaskRequest) (*admin.DoTaskResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method DoTask not implemented") +} + +func RegisterSyncAgentServiceServer(s *grpc.Server, srv SyncAgentServiceServer) { + s.RegisterService(&_SyncAgentService_serviceDesc, srv) +} + +func _SyncAgentService_DoTask_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(admin.DoTaskRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SyncAgentServiceServer).DoTask(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/flyteidl.service.SyncAgentService/DoTask", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SyncAgentServiceServer).DoTask(ctx, req.(*admin.DoTaskRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _SyncAgentService_serviceDesc = grpc.ServiceDesc{ + ServiceName: "flyteidl.service.SyncAgentService", + HandlerType: (*SyncAgentServiceServer)(nil), + Methods: []grpc.MethodDesc{ { MethodName: "DoTask", - Handler: _AsyncAgentService_DoTask_Handler, + Handler: _SyncAgentService_DoTask_Handler, }, }, Streams: []grpc.StreamDesc{}, diff --git a/flyteidl/gen/pb-java/flyteidl/service/Agent.java b/flyteidl/gen/pb-java/flyteidl/service/Agent.java index 7d95656b4b..1731ba435f 100644 --- a/flyteidl/gen/pb-java/flyteidl/service/Agent.java +++ b/flyteidl/gen/pb-java/flyteidl/service/Agent.java @@ -24,18 +24,18 @@ public static void registerAllExtensions( static { java.lang.String[] descriptorData = { "\n\034flyteidl/service/agent.proto\022\020flyteidl" + - ".service\032\032flyteidl/admin/agent.proto2\332\002\n" + + ".service\032\032flyteidl/admin/agent.proto2\217\002\n" + "\021AsyncAgentService\022U\n\nCreateTask\022!.flyte" + "idl.admin.CreateTaskRequest\032\".flyteidl.a" + "dmin.CreateTaskResponse\"\000\022L\n\007GetTask\022\036.f" + "lyteidl.admin.GetTaskRequest\032\037.flyteidl." + "admin.GetTaskResponse\"\000\022U\n\nDeleteTask\022!." + "flyteidl.admin.DeleteTaskRequest\032\".flyte" + - "idl.admin.DeleteTaskResponse\"\000\022I\n\006DoTask" + - "\022\035.flyteidl.admin.DoTaskRequest\032\036.flytei" + - "dl.admin.DoTaskResponse\"\000B?Z=github.com/" + - "flyteorg/flyte/flyteidl/gen/pb-go/flytei" + - "dl/serviceb\006proto3" + "idl.admin.DeleteTaskResponse\"\0002]\n\020SyncAg" + + "entService\022I\n\006DoTask\022\035.flyteidl.admin.Do" + + "TaskRequest\032\036.flyteidl.admin.DoTaskRespo" + + "nse\"\000B?Z=github.com/flyteorg/flyte/flyte" + + "idl/gen/pb-go/flyteidl/serviceb\006proto3" }; com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner = new com.google.protobuf.Descriptors.FileDescriptor. InternalDescriptorAssigner() { diff --git a/flyteidl/gen/pb-js/flyteidl.d.ts b/flyteidl/gen/pb-js/flyteidl.d.ts index 9393596ed7..1c2c02b51c 100644 --- a/flyteidl/gen/pb-js/flyteidl.d.ts +++ b/flyteidl/gen/pb-js/flyteidl.d.ts @@ -19820,20 +19820,6 @@ export namespace flyteidl { * @returns Promise */ public deleteTask(request: flyteidl.admin.IDeleteTaskRequest): Promise; - - /** - * Calls DoTask. - * @param request DoTaskRequest message or plain object - * @param callback Node-style callback called with the error, if any, and DoTaskResponse - */ - public doTask(request: flyteidl.admin.IDoTaskRequest, callback: flyteidl.service.AsyncAgentService.DoTaskCallback): void; - - /** - * Calls DoTask. - * @param request DoTaskRequest message or plain object - * @returns Promise - */ - public doTask(request: flyteidl.admin.IDoTaskRequest): Promise; } namespace AsyncAgentService { @@ -19858,9 +19844,47 @@ export namespace flyteidl { * @param [response] DeleteTaskResponse */ type DeleteTaskCallback = (error: (Error|null), response?: flyteidl.admin.DeleteTaskResponse) => void; + } + + /** Represents a SyncAgentService */ + class SyncAgentService extends $protobuf.rpc.Service { + + /** + * Constructs a new SyncAgentService service. + * @param rpcImpl RPC implementation + * @param [requestDelimited=false] Whether requests are length-delimited + * @param [responseDelimited=false] Whether responses are length-delimited + */ + constructor(rpcImpl: $protobuf.RPCImpl, requestDelimited?: boolean, responseDelimited?: boolean); + + /** + * Creates new SyncAgentService service using the specified rpc implementation. + * @param rpcImpl RPC implementation + * @param [requestDelimited=false] Whether requests are length-delimited + * @param [responseDelimited=false] Whether responses are length-delimited + * @returns RPC service. Useful where requests and/or responses are streamed. + */ + public static create(rpcImpl: $protobuf.RPCImpl, requestDelimited?: boolean, responseDelimited?: boolean): SyncAgentService; + + /** + * Calls DoTask. + * @param request DoTaskRequest message or plain object + * @param callback Node-style callback called with the error, if any, and DoTaskResponse + */ + public doTask(request: flyteidl.admin.IDoTaskRequest, callback: flyteidl.service.SyncAgentService.DoTaskCallback): void; + + /** + * Calls DoTask. + * @param request DoTaskRequest message or plain object + * @returns Promise + */ + public doTask(request: flyteidl.admin.IDoTaskRequest): Promise; + } + + namespace SyncAgentService { /** - * Callback as used by {@link flyteidl.service.AsyncAgentService#doTask}. + * Callback as used by {@link flyteidl.service.SyncAgentService#doTask}. * @param error Error, if any * @param [response] DoTaskResponse */ diff --git a/flyteidl/gen/pb-js/flyteidl.js b/flyteidl/gen/pb-js/flyteidl.js index 9f109ff056..117acd4893 100644 --- a/flyteidl/gen/pb-js/flyteidl.js +++ b/flyteidl/gen/pb-js/flyteidl.js @@ -46398,9 +46398,44 @@ * @variation 2 */ + return AsyncAgentService; + })(); + + service.SyncAgentService = (function() { + /** - * Callback as used by {@link flyteidl.service.AsyncAgentService#doTask}. - * @memberof flyteidl.service.AsyncAgentService + * Constructs a new SyncAgentService service. + * @memberof flyteidl.service + * @classdesc Represents a SyncAgentService + * @extends $protobuf.rpc.Service + * @constructor + * @param {$protobuf.RPCImpl} rpcImpl RPC implementation + * @param {boolean} [requestDelimited=false] Whether requests are length-delimited + * @param {boolean} [responseDelimited=false] Whether responses are length-delimited + */ + function SyncAgentService(rpcImpl, requestDelimited, responseDelimited) { + $protobuf.rpc.Service.call(this, rpcImpl, requestDelimited, responseDelimited); + } + + (SyncAgentService.prototype = Object.create($protobuf.rpc.Service.prototype)).constructor = SyncAgentService; + + /** + * Creates new SyncAgentService service using the specified rpc implementation. + * @function create + * @memberof flyteidl.service.SyncAgentService + * @static + * @param {$protobuf.RPCImpl} rpcImpl RPC implementation + * @param {boolean} [requestDelimited=false] Whether requests are length-delimited + * @param {boolean} [responseDelimited=false] Whether responses are length-delimited + * @returns {SyncAgentService} RPC service. Useful where requests and/or responses are streamed. + */ + SyncAgentService.create = function create(rpcImpl, requestDelimited, responseDelimited) { + return new this(rpcImpl, requestDelimited, responseDelimited); + }; + + /** + * Callback as used by {@link flyteidl.service.SyncAgentService#doTask}. + * @memberof flyteidl.service.SyncAgentService * @typedef DoTaskCallback * @type {function} * @param {Error|null} error Error, if any @@ -46410,28 +46445,28 @@ /** * Calls DoTask. * @function doTask - * @memberof flyteidl.service.AsyncAgentService + * @memberof flyteidl.service.SyncAgentService * @instance * @param {flyteidl.admin.IDoTaskRequest} request DoTaskRequest message or plain object - * @param {flyteidl.service.AsyncAgentService.DoTaskCallback} callback Node-style callback called with the error, if any, and DoTaskResponse + * @param {flyteidl.service.SyncAgentService.DoTaskCallback} callback Node-style callback called with the error, if any, and DoTaskResponse * @returns {undefined} * @variation 1 */ - Object.defineProperty(AsyncAgentService.prototype.doTask = function doTask(request, callback) { + Object.defineProperty(SyncAgentService.prototype.doTask = function doTask(request, callback) { return this.rpcCall(doTask, $root.flyteidl.admin.DoTaskRequest, $root.flyteidl.admin.DoTaskResponse, request, callback); }, "name", { value: "DoTask" }); /** * Calls DoTask. * @function doTask - * @memberof flyteidl.service.AsyncAgentService + * @memberof flyteidl.service.SyncAgentService * @instance * @param {flyteidl.admin.IDoTaskRequest} request DoTaskRequest message or plain object * @returns {Promise} Promise * @variation 2 */ - return AsyncAgentService; + return SyncAgentService; })(); service.OAuth2MetadataRequest = (function() { diff --git a/flyteidl/gen/pb_python/flyteidl/service/agent_pb2.py b/flyteidl/gen/pb_python/flyteidl/service/agent_pb2.py index 8154ba5d7f..8bb637c039 100644 --- a/flyteidl/gen/pb_python/flyteidl/service/agent_pb2.py +++ b/flyteidl/gen/pb_python/flyteidl/service/agent_pb2.py @@ -14,7 +14,7 @@ from flyteidl.admin import agent_pb2 as flyteidl_dot_admin_dot_agent__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1c\x66lyteidl/service/agent.proto\x12\x10\x66lyteidl.service\x1a\x1a\x66lyteidl/admin/agent.proto2\xda\x02\n\x11\x41syncAgentService\x12U\n\nCreateTask\x12!.flyteidl.admin.CreateTaskRequest\x1a\".flyteidl.admin.CreateTaskResponse\"\x00\x12L\n\x07GetTask\x12\x1e.flyteidl.admin.GetTaskRequest\x1a\x1f.flyteidl.admin.GetTaskResponse\"\x00\x12U\n\nDeleteTask\x12!.flyteidl.admin.DeleteTaskRequest\x1a\".flyteidl.admin.DeleteTaskResponse\"\x00\x12I\n\x06\x44oTask\x12\x1d.flyteidl.admin.DoTaskRequest\x1a\x1e.flyteidl.admin.DoTaskResponse\"\x00\x42\xc2\x01\n\x14\x63om.flyteidl.serviceB\nAgentProtoP\x01Z=github.com/flyteorg/flyte/flyteidl/gen/pb-go/flyteidl/service\xa2\x02\x03\x46SX\xaa\x02\x10\x46lyteidl.Service\xca\x02\x10\x46lyteidl\\Service\xe2\x02\x1c\x46lyteidl\\Service\\GPBMetadata\xea\x02\x11\x46lyteidl::Serviceb\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1c\x66lyteidl/service/agent.proto\x12\x10\x66lyteidl.service\x1a\x1a\x66lyteidl/admin/agent.proto2\x8f\x02\n\x11\x41syncAgentService\x12U\n\nCreateTask\x12!.flyteidl.admin.CreateTaskRequest\x1a\".flyteidl.admin.CreateTaskResponse\"\x00\x12L\n\x07GetTask\x12\x1e.flyteidl.admin.GetTaskRequest\x1a\x1f.flyteidl.admin.GetTaskResponse\"\x00\x12U\n\nDeleteTask\x12!.flyteidl.admin.DeleteTaskRequest\x1a\".flyteidl.admin.DeleteTaskResponse\"\x00\x32]\n\x10SyncAgentService\x12I\n\x06\x44oTask\x12\x1d.flyteidl.admin.DoTaskRequest\x1a\x1e.flyteidl.admin.DoTaskResponse\"\x00\x42\xc2\x01\n\x14\x63om.flyteidl.serviceB\nAgentProtoP\x01Z=github.com/flyteorg/flyte/flyteidl/gen/pb-go/flyteidl/service\xa2\x02\x03\x46SX\xaa\x02\x10\x46lyteidl.Service\xca\x02\x10\x46lyteidl\\Service\xe2\x02\x1c\x46lyteidl\\Service\\GPBMetadata\xea\x02\x11\x46lyteidl::Serviceb\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -24,5 +24,7 @@ DESCRIPTOR._options = None DESCRIPTOR._serialized_options = b'\n\024com.flyteidl.serviceB\nAgentProtoP\001Z=github.com/flyteorg/flyte/flyteidl/gen/pb-go/flyteidl/service\242\002\003FSX\252\002\020Flyteidl.Service\312\002\020Flyteidl\\Service\342\002\034Flyteidl\\Service\\GPBMetadata\352\002\021Flyteidl::Service' _globals['_ASYNCAGENTSERVICE']._serialized_start=79 - _globals['_ASYNCAGENTSERVICE']._serialized_end=425 + _globals['_ASYNCAGENTSERVICE']._serialized_end=350 + _globals['_SYNCAGENTSERVICE']._serialized_start=352 + _globals['_SYNCAGENTSERVICE']._serialized_end=445 # @@protoc_insertion_point(module_scope) diff --git a/flyteidl/gen/pb_python/flyteidl/service/agent_pb2_grpc.py b/flyteidl/gen/pb_python/flyteidl/service/agent_pb2_grpc.py index 7600774187..116a45a35e 100644 --- a/flyteidl/gen/pb_python/flyteidl/service/agent_pb2_grpc.py +++ b/flyteidl/gen/pb_python/flyteidl/service/agent_pb2_grpc.py @@ -30,11 +30,6 @@ def __init__(self, channel): request_serializer=flyteidl_dot_admin_dot_agent__pb2.DeleteTaskRequest.SerializeToString, response_deserializer=flyteidl_dot_admin_dot_agent__pb2.DeleteTaskResponse.FromString, ) - self.DoTask = channel.unary_unary( - '/flyteidl.service.AsyncAgentService/DoTask', - request_serializer=flyteidl_dot_admin_dot_agent__pb2.DoTaskRequest.SerializeToString, - response_deserializer=flyteidl_dot_admin_dot_agent__pb2.DoTaskResponse.FromString, - ) class AsyncAgentServiceServicer(object): @@ -62,13 +57,6 @@ def DeleteTask(self, request, context): context.set_details('Method not implemented!') raise NotImplementedError('Method not implemented!') - def DoTask(self, request, context): - """Do a job and get response from the agent server. - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - def add_AsyncAgentServiceServicer_to_server(servicer, server): rpc_method_handlers = { @@ -87,11 +75,6 @@ def add_AsyncAgentServiceServicer_to_server(servicer, server): request_deserializer=flyteidl_dot_admin_dot_agent__pb2.DeleteTaskRequest.FromString, response_serializer=flyteidl_dot_admin_dot_agent__pb2.DeleteTaskResponse.SerializeToString, ), - 'DoTask': grpc.unary_unary_rpc_method_handler( - servicer.DoTask, - request_deserializer=flyteidl_dot_admin_dot_agent__pb2.DoTaskRequest.FromString, - response_serializer=flyteidl_dot_admin_dot_agent__pb2.DoTaskResponse.SerializeToString, - ), } generic_handler = grpc.method_handlers_generic_handler( 'flyteidl.service.AsyncAgentService', rpc_method_handlers) @@ -154,6 +137,51 @@ def DeleteTask(request, options, channel_credentials, insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + +class SyncAgentServiceStub(object): + """Missing associated documentation comment in .proto file.""" + + def __init__(self, channel): + """Constructor. + + Args: + channel: A grpc.Channel. + """ + self.DoTask = channel.unary_unary( + '/flyteidl.service.SyncAgentService/DoTask', + request_serializer=flyteidl_dot_admin_dot_agent__pb2.DoTaskRequest.SerializeToString, + response_deserializer=flyteidl_dot_admin_dot_agent__pb2.DoTaskResponse.FromString, + ) + + +class SyncAgentServiceServicer(object): + """Missing associated documentation comment in .proto file.""" + + def DoTask(self, request, context): + """Do a job and get response from the agent server. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + +def add_SyncAgentServiceServicer_to_server(servicer, server): + rpc_method_handlers = { + 'DoTask': grpc.unary_unary_rpc_method_handler( + servicer.DoTask, + request_deserializer=flyteidl_dot_admin_dot_agent__pb2.DoTaskRequest.FromString, + response_serializer=flyteidl_dot_admin_dot_agent__pb2.DoTaskResponse.SerializeToString, + ), + } + generic_handler = grpc.method_handlers_generic_handler( + 'flyteidl.service.SyncAgentService', rpc_method_handlers) + server.add_generic_rpc_handlers((generic_handler,)) + + + # This class is part of an EXPERIMENTAL API. +class SyncAgentService(object): + """Missing associated documentation comment in .proto file.""" + @staticmethod def DoTask(request, target, @@ -165,7 +193,7 @@ def DoTask(request, wait_for_ready=None, timeout=None, metadata=None): - return grpc.experimental.unary_unary(request, target, '/flyteidl.service.AsyncAgentService/DoTask', + return grpc.experimental.unary_unary(request, target, '/flyteidl.service.SyncAgentService/DoTask', flyteidl_dot_admin_dot_agent__pb2.DoTaskRequest.SerializeToString, flyteidl_dot_admin_dot_agent__pb2.DoTaskResponse.FromString, options, channel_credentials, diff --git a/flyteidl/protos/flyteidl/service/agent.proto b/flyteidl/protos/flyteidl/service/agent.proto index 4454eedead..a9b88b9291 100644 --- a/flyteidl/protos/flyteidl/service/agent.proto +++ b/flyteidl/protos/flyteidl/service/agent.proto @@ -12,6 +12,9 @@ service AsyncAgentService { rpc GetTask (flyteidl.admin.GetTaskRequest) returns (flyteidl.admin.GetTaskResponse){}; // Delete the task resource. rpc DeleteTask (flyteidl.admin.DeleteTaskRequest) returns (flyteidl.admin.DeleteTaskResponse){}; +} + +service SyncAgentService { // Do a job and get response from the agent server. rpc DoTask (flyteidl.admin.DoTaskRequest) returns (flyteidl.admin.DoTaskResponse){}; } diff --git a/flyteplugins/go/tasks/plugins/webapi/agent/integration_test.go b/flyteplugins/go/tasks/plugins/webapi/agent/integration_test.go index 62fc91bf6d..c20104cdbc 100644 --- a/flyteplugins/go/tasks/plugins/webapi/agent/integration_test.go +++ b/flyteplugins/go/tasks/plugins/webapi/agent/integration_test.go @@ -37,10 +37,13 @@ type MockPlugin struct { Plugin } -type MockClient struct { +type MockAsyncClient struct { } -func (m *MockClient) CreateTask(_ context.Context, createTaskRequest *admin.CreateTaskRequest, _ ...grpc.CallOption) (*admin.CreateTaskResponse, error) { +type MockSyncClient struct { +} + +func (m *MockAsyncClient) CreateTask(_ context.Context, createTaskRequest *admin.CreateTaskRequest, _ ...grpc.CallOption) (*admin.CreateTaskResponse, error) { expectedArgs := []string{"pyflyte-fast-execute", "--output-prefix", "fake://bucket/prefix/nhv"} if slices.Equal(createTaskRequest.Template.GetContainer().Args, expectedArgs) { return nil, fmt.Errorf("args not as expected") @@ -48,7 +51,7 @@ func (m *MockClient) CreateTask(_ context.Context, createTaskRequest *admin.Crea return &admin.CreateTaskResponse{ResourceMeta: []byte{1, 2, 3, 4}}, nil } -func (m *MockClient) GetTask(_ context.Context, req *admin.GetTaskRequest, _ ...grpc.CallOption) (*admin.GetTaskResponse, error) { +func (m *MockAsyncClient) GetTask(_ context.Context, req *admin.GetTaskRequest, _ ...grpc.CallOption) (*admin.GetTaskResponse, error) { if req.GetTaskType() == "bigquery_query_job_task" { return &admin.GetTaskResponse{Resource: &admin.Resource{State: admin.State_SUCCEEDED, Outputs: &flyteIdlCore.LiteralMap{ Literals: map[string]*flyteIdlCore.Literal{ @@ -59,11 +62,11 @@ func (m *MockClient) GetTask(_ context.Context, req *admin.GetTaskRequest, _ ... return &admin.GetTaskResponse{Resource: &admin.Resource{State: admin.State_SUCCEEDED}}, nil } -func (m *MockClient) DeleteTask(_ context.Context, _ *admin.DeleteTaskRequest, _ ...grpc.CallOption) (*admin.DeleteTaskResponse, error) { +func (m *MockAsyncClient) DeleteTask(_ context.Context, _ *admin.DeleteTaskRequest, _ ...grpc.CallOption) (*admin.DeleteTaskResponse, error) { return &admin.DeleteTaskResponse{}, nil } -func (m *MockClient) DoTask(_ context.Context, _ *admin.DoTaskRequest, _ ...grpc.CallOption) (*admin.DoTaskResponse, error) { +func (m *MockSyncClient) DoTask(_ context.Context, _ *admin.DoTaskRequest, _ ...grpc.CallOption) (*admin.DoTaskResponse, error) { return &admin.DoTaskResponse{Resource: &admin.Resource{State: admin.State_SUCCEEDED, Outputs: &flyteIdlCore.LiteralMap{ Literals: map[string]*flyteIdlCore.Literal{ "arr": coreutils.MustMakeLiteral([]interface{}{[]interface{}{"a", "b"}, []interface{}{1, 2}}), @@ -71,11 +74,19 @@ func (m *MockClient) DoTask(_ context.Context, _ *admin.DoTaskRequest, _ ...grpc }}}, nil } -func mockGetClientFunc(_ context.Context, _ *Agent, _ map[*Agent]*grpc.ClientConn) (service.AsyncAgentServiceClient, error) { - return &MockClient{}, nil +func mockGetAsyncClientFunc(_ context.Context, _ *Agent, _ map[*Agent]*grpc.ClientConn) (service.AsyncAgentServiceClient, error) { + return &MockAsyncClient{}, nil +} + +func mockGetSyncClientFunc(_ context.Context, _ *Agent, _ map[*Agent]*grpc.ClientConn) (service.SyncAgentServiceClient, error) { + return &MockSyncClient{}, nil +} + +func mockGetBadAsyncClientFunc(_ context.Context, _ *Agent, _ map[*Agent]*grpc.ClientConn) (service.AsyncAgentServiceClient, error) { + return nil, fmt.Errorf("error") } -func mockGetBadClientFunc(_ context.Context, _ *Agent, _ map[*Agent]*grpc.ClientConn) (service.AsyncAgentServiceClient, error) { +func mockGetBadSyncClientFunc(_ context.Context, _ *Agent, _ map[*Agent]*grpc.ClientConn) (service.SyncAgentServiceClient, error) { return nil, fmt.Errorf("error") } @@ -136,9 +147,10 @@ func TestEndToEnd(t *testing.T) { agentPlugin.PluginLoader = func(ctx context.Context, iCtx webapi.PluginSetupContext) (webapi.AsyncPlugin, error) { return &MockPlugin{ Plugin{ - metricScope: iCtx.MetricsScope(), - cfg: GetConfig(), - getClient: mockGetBadClientFunc, + metricScope: iCtx.MetricsScope(), + cfg: GetConfig(), + getAsyncClient: mockGetBadAsyncClientFunc, + getSyncClient: mockGetBadSyncClientFunc, }, }, nil } @@ -276,9 +288,10 @@ func newMockAgentPlugin() webapi.PluginEntry { PluginLoader: func(ctx context.Context, iCtx webapi.PluginSetupContext) (webapi.AsyncPlugin, error) { return &MockPlugin{ Plugin{ - metricScope: iCtx.MetricsScope(), - cfg: GetConfig(), - getClient: mockGetClientFunc, + metricScope: iCtx.MetricsScope(), + cfg: GetConfig(), + getAsyncClient: mockGetAsyncClientFunc, + getSyncClient: mockGetSyncClientFunc, }, }, nil }, diff --git a/flyteplugins/go/tasks/plugins/webapi/agent/plugin.go b/flyteplugins/go/tasks/plugins/webapi/agent/plugin.go index ff688c3e5d..3fcc919eda 100644 --- a/flyteplugins/go/tasks/plugins/webapi/agent/plugin.go +++ b/flyteplugins/go/tasks/plugins/webapi/agent/plugin.go @@ -27,12 +27,14 @@ import ( "github.com/flyteorg/flyte/flytestdlib/promutils" ) -type GetClientFunc func(ctx context.Context, agent *Agent, connectionCache map[*Agent]*grpc.ClientConn) (service.AsyncAgentServiceClient, error) +type GetAsyncClientFunc func(ctx context.Context, agent *Agent, connectionCache map[*Agent]*grpc.ClientConn) (service.AsyncAgentServiceClient, error) +type GetSyncClientFunc func(ctx context.Context, agent *Agent, connectionCache map[*Agent]*grpc.ClientConn) (service.SyncAgentServiceClient, error) type Plugin struct { metricScope promutils.Scope cfg *Config - getClient GetClientFunc + getAsyncClient GetAsyncClientFunc + getSyncClient GetSyncClientFunc connectionCache map[*Agent]*grpc.ClientConn } @@ -91,7 +93,7 @@ func (p Plugin) Do(ctx context.Context, taskCtx webapi.TaskExecutionContext) (ph return core.PhaseInfoUndefined, fmt.Errorf("failed to find agent agent with error: %v", err) } - client, err := p.getClient(ctx, agent, p.connectionCache) + client, err := p.getSyncClient(ctx, agent, p.connectionCache) if err != nil { return core.PhaseInfoUndefined, fmt.Errorf("failed to connect to agent with error: %v", err) } @@ -146,7 +148,7 @@ func (p Plugin) Create(ctx context.Context, taskCtx webapi.TaskExecutionContextR if err != nil { return nil, nil, fmt.Errorf("failed to find agent agent with error: %v", err) } - client, err := p.getClient(ctx, agent, p.connectionCache) + client, err := p.getAsyncClient(ctx, agent, p.connectionCache) if err != nil { return nil, nil, fmt.Errorf("failed to connect to agent with error: %v", err) } @@ -180,7 +182,7 @@ func (p Plugin) Get(ctx context.Context, taskCtx webapi.GetContext) (latest weba if err != nil { return nil, fmt.Errorf("failed to find agent with error: %v", err) } - client, err := p.getClient(ctx, agent, p.connectionCache) + client, err := p.getAsyncClient(ctx, agent, p.connectionCache) if err != nil { return nil, fmt.Errorf("failed to connect to agent with error: %v", err) } @@ -210,7 +212,7 @@ func (p Plugin) Delete(ctx context.Context, taskCtx webapi.DeleteContext) error if err != nil { return fmt.Errorf("failed to find agent agent with error: %v", err) } - client, err := p.getClient(ctx, agent, p.connectionCache) + client, err := p.getAsyncClient(ctx, agent, p.connectionCache) if err != nil { return fmt.Errorf("failed to connect to agent with error: %v", err) } @@ -279,7 +281,7 @@ func getFinalAgent(taskType string, cfg *Config) (*Agent, error) { return &cfg.DefaultAgent, nil } -func getClientFunc(ctx context.Context, agent *Agent, connectionCache map[*Agent]*grpc.ClientConn) (service.AsyncAgentServiceClient, error) { +func getAsyncClientFunc(ctx context.Context, agent *Agent, connectionCache map[*Agent]*grpc.ClientConn) (service.AsyncAgentServiceClient, error) { conn, ok := connectionCache[agent] if ok { return service.NewAsyncAgentServiceClient(conn), nil @@ -326,6 +328,53 @@ func getClientFunc(ctx context.Context, agent *Agent, connectionCache map[*Agent return service.NewAsyncAgentServiceClient(conn), nil } +func getSyncClientFunc(ctx context.Context, agent *Agent, connectionCache map[*Agent]*grpc.ClientConn) (service.SyncAgentServiceClient, error) { + conn, ok := connectionCache[agent] + if ok { + return service.NewSyncAgentServiceClient(conn), nil + } + + var opts []grpc.DialOption + + if agent.Insecure { + opts = append(opts, grpc.WithTransportCredentials(insecure.NewCredentials())) + } else { + pool, err := x509.SystemCertPool() + if err != nil { + return nil, err + } + + creds := credentials.NewClientTLSFromCert(pool, "") + opts = append(opts, grpc.WithTransportCredentials(creds)) + } + + if len(agent.DefaultServiceConfig) != 0 { + opts = append(opts, grpc.WithDefaultServiceConfig(agent.DefaultServiceConfig)) + } + + var err error + conn, err = grpc.Dial(agent.Endpoint, opts...) + if err != nil { + return nil, err + } + connectionCache[agent] = conn + defer func() { + if err != nil { + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", agent, cerr) + } + return + } + go func() { + <-ctx.Done() + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", agent, cerr) + } + }() + }() + return service.NewSyncAgentServiceClient(conn), nil +} + func buildTaskExecutionMetadata(taskExecutionMetadata core.TaskExecutionMetadata) admin.TaskExecutionMetadata { taskExecutionID := taskExecutionMetadata.GetTaskExecutionID().GetID() return admin.TaskExecutionMetadata{ @@ -364,7 +413,8 @@ func newAgentPlugin() webapi.PluginEntry { return &Plugin{ metricScope: iCtx.MetricsScope(), cfg: GetConfig(), - getClient: getClientFunc, + getAsyncClient: getAsyncClientFunc, + getSyncClient: getSyncClientFunc, connectionCache: make(map[*Agent]*grpc.ClientConn), }, nil }, diff --git a/flyteplugins/go/tasks/plugins/webapi/agent/plugin_test.go b/flyteplugins/go/tasks/plugins/webapi/agent/plugin_test.go index 45c5ea96ca..8c15cfc97d 100644 --- a/flyteplugins/go/tasks/plugins/webapi/agent/plugin_test.go +++ b/flyteplugins/go/tasks/plugins/webapi/agent/plugin_test.go @@ -103,14 +103,26 @@ func TestPlugin(t *testing.T) { assert.NotNil(t, err) }) - t.Run("test getClientFunc", func(t *testing.T) { - client, err := getClientFunc(context.Background(), &Agent{Endpoint: "localhost:80"}, map[*Agent]*grpc.ClientConn{}) + t.Run("test getAsyncClientFunc", func(t *testing.T) { + client, err := getAsyncClientFunc(context.Background(), &Agent{Endpoint: "localhost:80"}, map[*Agent]*grpc.ClientConn{}) assert.NoError(t, err) assert.NotNil(t, client) }) - t.Run("test getClientFunc more config", func(t *testing.T) { - client, err := getClientFunc(context.Background(), &Agent{Endpoint: "localhost:80", Insecure: true, DefaultServiceConfig: "{\"loadBalancingConfig\": [{\"round_robin\":{}}]}"}, map[*Agent]*grpc.ClientConn{}) + t.Run("test getSyncClientFunc", func(t *testing.T) { + client, err := getSyncClientFunc(context.Background(), &Agent{Endpoint: "localhost:80"}, map[*Agent]*grpc.ClientConn{}) + assert.NoError(t, err) + assert.NotNil(t, client) + }) + + t.Run("test getAsyncClientFunc more config", func(t *testing.T) { + client, err := getAsyncClientFunc(context.Background(), &Agent{Endpoint: "localhost:80", Insecure: true, DefaultServiceConfig: "{\"loadBalancingConfig\": [{\"round_robin\":{}}]}"}, map[*Agent]*grpc.ClientConn{}) + assert.NoError(t, err) + assert.NotNil(t, client) + }) + + t.Run("test getSyncClientFunc more config", func(t *testing.T) { + client, err := getSyncClientFunc(context.Background(), &Agent{Endpoint: "localhost:80", Insecure: true, DefaultServiceConfig: "{\"loadBalancingConfig\": [{\"round_robin\":{}}]}"}, map[*Agent]*grpc.ClientConn{}) assert.NoError(t, err) assert.NotNil(t, client) }) @@ -119,12 +131,12 @@ func TestPlugin(t *testing.T) { connectionCache := make(map[*Agent]*grpc.ClientConn) agent := &Agent{Endpoint: "localhost:80", Insecure: true, DefaultServiceConfig: "{\"loadBalancingConfig\": [{\"round_robin\":{}}]}"} - client, err := getClientFunc(context.Background(), agent, connectionCache) + client, err := getAsyncClientFunc(context.Background(), agent, connectionCache) assert.NoError(t, err) assert.NotNil(t, client) assert.NotNil(t, client, connectionCache[agent]) - cachedClient, err := getClientFunc(context.Background(), agent, connectionCache) + cachedClient, err := getAsyncClientFunc(context.Background(), agent, connectionCache) assert.NoError(t, err) assert.NotNil(t, cachedClient) assert.Equal(t, client, cachedClient) diff --git a/flyteplugins/go/tasks/plugins/webapi/athena/plugin_test.go b/flyteplugins/go/tasks/plugins/webapi/athena/plugin_test.go index e19829447e..c3fc39f451 100644 --- a/flyteplugins/go/tasks/plugins/webapi/athena/plugin_test.go +++ b/flyteplugins/go/tasks/plugins/webapi/athena/plugin_test.go @@ -23,7 +23,6 @@ func TestCreateTaskInfo(t *testing.T) { assert.Equal(t, taskInfo.ExternalResources[0].ExternalID, "query_id") } - func TestCreateTaskInfoGovAWS(t *testing.T) { taskInfo := createTaskInfo("query_id", awsSdk.Config{ Region: "us-gov-east-1", From eb6d5d143ed3ec3c58acd3f684077d86387f8cfb Mon Sep 17 00:00:00 2001 From: Future Outlier Date: Fri, 17 Nov 2023 23:01:41 +0800 Subject: [PATCH 29/48] better annotation for plugin loader and Plugin interface Signed-off-by: Future Outlier --- flyteplugins/go/tasks/pluginmachinery/webapi/plugin.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/flyteplugins/go/tasks/pluginmachinery/webapi/plugin.go b/flyteplugins/go/tasks/pluginmachinery/webapi/plugin.go index fd454198f5..7e0145f649 100644 --- a/flyteplugins/go/tasks/pluginmachinery/webapi/plugin.go +++ b/flyteplugins/go/tasks/pluginmachinery/webapi/plugin.go @@ -20,6 +20,9 @@ import ( // A Lazy loading function, that will load the plugin. Plugins should be initialized in this method. It is guaranteed // that the plugin loader will be called before any Handle/Abort/Finalize functions are invoked +// Although the function returns an AsyncPlugin, it internally handles type casting to convert it to a SyncPlugin as needed. +// This approach is used in flyteplugins/go/tasks/pluginmachinery/internal/webapi/core.go. +// Ideally, changing the return type of the PluginLoader to a more generic 'Plugin' would be preferable. However, this change is currently not feasible without introducing breaking changes to existing plugins. Thus, the current implementation prioritizes compatibility with existing plugins. type PluginLoader func(ctx context.Context, iCtx PluginSetupContext) (AsyncPlugin, error) // PluginEntry is a structure that is used to indicate to the system a K8s plugin @@ -97,6 +100,7 @@ type StatusContext interface { type ResourceMeta = interface{} type Resource = interface{} +// A plugin interface for type casting in flyteplugins/go/tasks/pluginmachinery/internal/webapi/core.go type Plugin interface { GetConfig() PluginConfig } From 6416fcd5fda51a6eef4bd9e64549c686b43a5fa2 Mon Sep 17 00:00:00 2001 From: Kevin Su Date: Tue, 21 Nov 2023 00:01:28 -0800 Subject: [PATCH 30/48] Kevin update Signed-off-by: Kevin Su --- .../pluginmachinery/internal/webapi/core.go | 14 ++--- .../go/tasks/plugins/webapi/agent/plugin.go | 55 +++++-------------- 2 files changed, 20 insertions(+), 49 deletions(-) diff --git a/flyteplugins/go/tasks/pluginmachinery/internal/webapi/core.go b/flyteplugins/go/tasks/pluginmachinery/internal/webapi/core.go index 398b099506..7dd14fc7c3 100644 --- a/flyteplugins/go/tasks/pluginmachinery/internal/webapi/core.go +++ b/flyteplugins/go/tasks/pluginmachinery/internal/webapi/core.go @@ -70,7 +70,7 @@ func (c CorePlugin) GetProperties() core.PluginProperties { func (c CorePlugin) toSyncPlugin() (webapi.SyncPlugin, error) { plugin, ok := c.p.(webapi.SyncPlugin) if !ok { - return nil, fmt.Errorf("Core plugin does not implement the sync plugin interface") + return nil, fmt.Errorf("core plugin does not implement the sync plugin interface") } return plugin, nil } @@ -78,7 +78,7 @@ func (c CorePlugin) toSyncPlugin() (webapi.SyncPlugin, error) { func (c CorePlugin) toAsyncPlugin() (webapi.AsyncPlugin, error) { plugin, ok := c.p.(webapi.AsyncPlugin) if !ok { - return nil, fmt.Errorf("Core plugin does not implement the async plugin interface") + return nil, fmt.Errorf("core plugin does not implement the async plugin interface") } return plugin, nil } @@ -91,11 +91,6 @@ func (c CorePlugin) syncHandle(ctx context.Context, tCtx core.TaskExecutionConte phaseInfo, err := plugin.Do(ctx, tCtx) if err != nil { - taskTemplate, err := tCtx.TaskReader().Read(ctx) - if err != nil { - return core.UnknownTransition, err - } - logger.Errorf(ctx, "failed to run [%v] task with err: [%v]", taskTemplate.GetType(), err) return core.UnknownTransition, err } @@ -165,6 +160,11 @@ func (c CorePlugin) Handle(ctx context.Context, tCtx core.TaskExecutionContext) } if c.useSyncPlugin(taskTemplate) { + phase, err := c.syncHandle(ctx, tCtx) + if err != nil { + logger.Errorf(ctx, "failed to run [%v] task with err: [%v]", taskTemplate.GetType(), err) + return phase, err + } return c.syncHandle(ctx, tCtx) } diff --git a/flyteplugins/go/tasks/plugins/webapi/agent/plugin.go b/flyteplugins/go/tasks/plugins/webapi/agent/plugin.go index 3fcc919eda..6c4b24d6b4 100644 --- a/flyteplugins/go/tasks/plugins/webapi/agent/plugin.go +++ b/flyteplugins/go/tasks/plugins/webapi/agent/plugin.go @@ -281,12 +281,11 @@ func getFinalAgent(taskType string, cfg *Config) (*Agent, error) { return &cfg.DefaultAgent, nil } -func getAsyncClientFunc(ctx context.Context, agent *Agent, connectionCache map[*Agent]*grpc.ClientConn) (service.AsyncAgentServiceClient, error) { +func getGrpcConnection(ctx context.Context, agent *Agent, connectionCache map[*Agent]*grpc.ClientConn) (*grpc.ClientConn, error) { conn, ok := connectionCache[agent] if ok { - return service.NewAsyncAgentServiceClient(conn), nil + return conn, nil } - var opts []grpc.DialOption if agent.Insecure { @@ -325,53 +324,25 @@ func getAsyncClientFunc(ctx context.Context, agent *Agent, connectionCache map[* } }() }() - return service.NewAsyncAgentServiceClient(conn), nil -} - -func getSyncClientFunc(ctx context.Context, agent *Agent, connectionCache map[*Agent]*grpc.ClientConn) (service.SyncAgentServiceClient, error) { - conn, ok := connectionCache[agent] - if ok { - return service.NewSyncAgentServiceClient(conn), nil - } - var opts []grpc.DialOption - - if agent.Insecure { - opts = append(opts, grpc.WithTransportCredentials(insecure.NewCredentials())) - } else { - pool, err := x509.SystemCertPool() - if err != nil { - return nil, err - } + return conn, nil +} - creds := credentials.NewClientTLSFromCert(pool, "") - opts = append(opts, grpc.WithTransportCredentials(creds)) +func getAsyncClientFunc(ctx context.Context, agent *Agent, connectionCache map[*Agent]*grpc.ClientConn) (service.AsyncAgentServiceClient, error) { + conn, err := getGrpcConnection(ctx, agent, connectionCache) + if err != nil { + return nil, err } - if len(agent.DefaultServiceConfig) != 0 { - opts = append(opts, grpc.WithDefaultServiceConfig(agent.DefaultServiceConfig)) - } + return service.NewAsyncAgentServiceClient(conn), nil +} - var err error - conn, err = grpc.Dial(agent.Endpoint, opts...) +func getSyncClientFunc(ctx context.Context, agent *Agent, connectionCache map[*Agent]*grpc.ClientConn) (service.SyncAgentServiceClient, error) { + conn, err := getGrpcConnection(ctx, agent, connectionCache) if err != nil { return nil, err } - connectionCache[agent] = conn - defer func() { - if err != nil { - if cerr := conn.Close(); cerr != nil { - grpclog.Infof("Failed to close conn to %s: %v", agent, cerr) - } - return - } - go func() { - <-ctx.Done() - if cerr := conn.Close(); cerr != nil { - grpclog.Infof("Failed to close conn to %s: %v", agent, cerr) - } - }() - }() + return service.NewSyncAgentServiceClient(conn), nil } From 85da8242f48d07e65cdd9e19a2acc3a52c67ccc4 Mon Sep 17 00:00:00 2001 From: Kevin Su Date: Tue, 21 Nov 2023 00:31:12 -0800 Subject: [PATCH 31/48] Kevin update Signed-off-by: Kevin Su --- .../pluginmachinery/internal/webapi/core.go | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/flyteplugins/go/tasks/pluginmachinery/internal/webapi/core.go b/flyteplugins/go/tasks/pluginmachinery/internal/webapi/core.go index 7dd14fc7c3..4113cc1726 100644 --- a/flyteplugins/go/tasks/pluginmachinery/internal/webapi/core.go +++ b/flyteplugins/go/tasks/pluginmachinery/internal/webapi/core.go @@ -158,17 +158,17 @@ func (c CorePlugin) Handle(ctx context.Context, tCtx core.TaskExecutionContext) if err != nil { return core.UnknownTransition, err } - + var phase core.Transition if c.useSyncPlugin(taskTemplate) { - phase, err := c.syncHandle(ctx, tCtx) - if err != nil { - logger.Errorf(ctx, "failed to run [%v] task with err: [%v]", taskTemplate.GetType(), err) - return phase, err - } - return c.syncHandle(ctx, tCtx) + phase, err = c.syncHandle(ctx, tCtx) + } else { + phase, err = c.asyncHandle(ctx, tCtx) + } + if err != nil { + logger.Errorf(ctx, "failed to run [%v] task with err: [%v]", taskTemplate.GetType(), err) } - return c.asyncHandle(ctx, tCtx) + return phase, err } func (c CorePlugin) Abort(ctx context.Context, tCtx core.TaskExecutionContext) error { From f469fd080a62a062f4e9b8ca5fcf6a0f5499ce8e Mon Sep 17 00:00:00 2001 From: Future Outlier Date: Tue, 21 Nov 2023 22:41:37 +0800 Subject: [PATCH 32/48] use is_sync_plugin variable Signed-off-by: Future Outlier --- .../go/tasks/pluginmachinery/internal/webapi/core.go | 10 ++++------ .../tasks/pluginmachinery/internal/webapi/core_test.go | 2 +- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/flyteplugins/go/tasks/pluginmachinery/internal/webapi/core.go b/flyteplugins/go/tasks/pluginmachinery/internal/webapi/core.go index 4113cc1726..659f794b3f 100644 --- a/flyteplugins/go/tasks/pluginmachinery/internal/webapi/core.go +++ b/flyteplugins/go/tasks/pluginmachinery/internal/webapi/core.go @@ -29,7 +29,6 @@ const ( maxBurst = 10000 minQPS = 1 maxQPS = 100000 - syncPlugin = "sync_plugin" ) type CorePlugin struct { @@ -136,17 +135,15 @@ func (c CorePlugin) asyncHandle(ctx context.Context, tCtx core.TaskExecutionCont } func (c CorePlugin) useSyncPlugin(taskTemplate *flyteIdlCore.TaskTemplate) bool { - // Use the sync plugin to execute the task if the task template has the sync plugin flavor. - // Assume the plugin is an async plugin if not explicitly specified as sync. + // Use the sync plugin to execute the task if the task template set is_sync_plugin as True. + // Assume the plugin is an async plugin by default. // This helps maintain backward compatibility with existing implementations that // expect an async plugin by default, thereby avoiding breaking changes. metadata := taskTemplate.GetMetadata() if metadata != nil { runtime := metadata.GetRuntime() if runtime != nil { - if runtime.GetFlavor() == syncPlugin { - return true - } + return runtime.GetIsSyncPlugin() } } @@ -158,6 +155,7 @@ func (c CorePlugin) Handle(ctx context.Context, tCtx core.TaskExecutionContext) if err != nil { return core.UnknownTransition, err } + var phase core.Transition if c.useSyncPlugin(taskTemplate) { phase, err = c.syncHandle(ctx, tCtx) diff --git a/flyteplugins/go/tasks/pluginmachinery/internal/webapi/core_test.go b/flyteplugins/go/tasks/pluginmachinery/internal/webapi/core_test.go index 5338030d9d..f384f410b2 100644 --- a/flyteplugins/go/tasks/pluginmachinery/internal/webapi/core_test.go +++ b/flyteplugins/go/tasks/pluginmachinery/internal/webapi/core_test.go @@ -31,7 +31,7 @@ func TestHandle(t *testing.T) { Type: "api_task", Metadata: &flyteIdlCore.TaskMetadata{ Runtime: &flyteIdlCore.RuntimeMetadata{ - Flavor: "sync_plugin", + IsSyncPlugin: true, }, }, } From c651a6c26cca2018a6d0f6708e89a7f85336d4a5 Mon Sep 17 00:00:00 2001 From: Future Outlier Date: Wed, 22 Nov 2023 08:44:33 +0800 Subject: [PATCH 33/48] add proto Signed-off-by: Future Outlier --- flyteidl/gen/pb-cpp/flyteidl/core/tasks.pb.cc | 222 +++++++++------- flyteidl/gen/pb-cpp/flyteidl/core/tasks.pb.h | 21 ++ flyteidl/gen/pb-go/flyteidl/admin/agent.pb.go | 2 +- flyteidl/gen/pb-go/flyteidl/core/tasks.pb.go | 241 ++++++++--------- .../pb-go/flyteidl/core/tasks.pb.validate.go | 2 + .../pb-go/flyteidl/service/admin.swagger.json | 7 +- .../pb-go/flyteidl/service/agent.swagger.json | 7 +- .../external_plugin_service.swagger.json | 7 +- .../service/flyteadmin/api/swagger.yaml | 29 ++- .../flyteadmin/model_core_runtime_metadata.go | 4 +- .../gen/pb-go/flyteidl/service/openapi.go | 4 +- flyteidl/gen/pb-java/flyteidl/core/Tasks.java | 244 ++++++++++++------ flyteidl/gen/pb-js/flyteidl.d.ts | 6 + flyteidl/gen/pb-js/flyteidl.js | 17 ++ .../gen/pb_python/flyteidl/core/tasks_pb2.py | 80 +++--- .../gen/pb_python/flyteidl/core/tasks_pb2.pyi | 6 +- .../models/core_runtime_metadata.py | 38 ++- flyteidl/gen/pb_rust/flyteidl.core.rs | 5 +- flyteidl/protos/flyteidl/core/tasks.proto | 5 +- .../tasks/plugins/webapi/agent/plugin_test.go | 2 +- 20 files changed, 609 insertions(+), 340 deletions(-) diff --git a/flyteidl/gen/pb-cpp/flyteidl/core/tasks.pb.cc b/flyteidl/gen/pb-cpp/flyteidl/core/tasks.pb.cc index 7a06a09340..d202f3cd98 100644 --- a/flyteidl/gen/pb-cpp/flyteidl/core/tasks.pb.cc +++ b/flyteidl/gen/pb-cpp/flyteidl/core/tasks.pb.cc @@ -459,6 +459,7 @@ const ::google::protobuf::uint32 TableStruct_flyteidl_2fcore_2ftasks_2eproto::of PROTOBUF_FIELD_OFFSET(::flyteidl::core::RuntimeMetadata, type_), PROTOBUF_FIELD_OFFSET(::flyteidl::core::RuntimeMetadata, version_), PROTOBUF_FIELD_OFFSET(::flyteidl::core::RuntimeMetadata, flavor_), + PROTOBUF_FIELD_OFFSET(::flyteidl::core::RuntimeMetadata, is_sync_plugin_), PROTOBUF_FIELD_OFFSET(::flyteidl::core::TaskMetadata_TagsEntry_DoNotUse, _has_bits_), PROTOBUF_FIELD_OFFSET(::flyteidl::core::TaskMetadata_TagsEntry_DoNotUse, _internal_metadata_), ~0u, // no _extensions_ @@ -596,19 +597,19 @@ static const ::google::protobuf::internal::MigrationSchema schemas[] PROTOBUF_SE { 14, -1, sizeof(::flyteidl::core::GPUAccelerator)}, { 23, -1, sizeof(::flyteidl::core::ExtendedResources)}, { 29, -1, sizeof(::flyteidl::core::RuntimeMetadata)}, - { 37, 44, sizeof(::flyteidl::core::TaskMetadata_TagsEntry_DoNotUse)}, - { 46, -1, sizeof(::flyteidl::core::TaskMetadata)}, - { 63, 70, sizeof(::flyteidl::core::TaskTemplate_ConfigEntry_DoNotUse)}, - { 72, -1, sizeof(::flyteidl::core::TaskTemplate)}, - { 90, -1, sizeof(::flyteidl::core::ContainerPort)}, - { 96, -1, sizeof(::flyteidl::core::Container)}, - { 110, -1, sizeof(::flyteidl::core::IOStrategy)}, - { 117, -1, sizeof(::flyteidl::core::DataLoadingConfig)}, - { 127, -1, sizeof(::flyteidl::core::K8sPod)}, - { 135, 142, sizeof(::flyteidl::core::K8sObjectMetadata_LabelsEntry_DoNotUse)}, - { 144, 151, sizeof(::flyteidl::core::K8sObjectMetadata_AnnotationsEntry_DoNotUse)}, - { 153, -1, sizeof(::flyteidl::core::K8sObjectMetadata)}, - { 160, -1, sizeof(::flyteidl::core::Sql)}, + { 38, 45, sizeof(::flyteidl::core::TaskMetadata_TagsEntry_DoNotUse)}, + { 47, -1, sizeof(::flyteidl::core::TaskMetadata)}, + { 64, 71, sizeof(::flyteidl::core::TaskTemplate_ConfigEntry_DoNotUse)}, + { 73, -1, sizeof(::flyteidl::core::TaskTemplate)}, + { 91, -1, sizeof(::flyteidl::core::ContainerPort)}, + { 97, -1, sizeof(::flyteidl::core::Container)}, + { 111, -1, sizeof(::flyteidl::core::IOStrategy)}, + { 118, -1, sizeof(::flyteidl::core::DataLoadingConfig)}, + { 128, -1, sizeof(::flyteidl::core::K8sPod)}, + { 136, 143, sizeof(::flyteidl::core::K8sObjectMetadata_LabelsEntry_DoNotUse)}, + { 145, 152, sizeof(::flyteidl::core::K8sObjectMetadata_AnnotationsEntry_DoNotUse)}, + { 154, -1, sizeof(::flyteidl::core::K8sObjectMetadata)}, + { 161, -1, sizeof(::flyteidl::core::Sql)}, }; static ::google::protobuf::Message const * const file_default_instances[] = { @@ -657,82 +658,83 @@ const char descriptor_table_protodef_flyteidl_2fcore_2ftasks_2eproto[] = "rtition_size\030\003 \001(\tH\000B\026\n\024partition_size_v" "alue\"K\n\021ExtendedResources\0226\n\017gpu_acceler" "ator\030\001 \001(\0132\035.flyteidl.core.GPUAccelerato" - "r\"\225\001\n\017RuntimeMetadata\0228\n\004type\030\001 \001(\0162*.fl" + "r\"\255\001\n\017RuntimeMetadata\0228\n\004type\030\001 \001(\0162*.fl" "yteidl.core.RuntimeMetadata.RuntimeType\022" - "\017\n\007version\030\002 \001(\t\022\016\n\006flavor\030\003 \001(\t\"\'\n\013Runt" - "imeType\022\t\n\005OTHER\020\000\022\r\n\tFLYTE_SDK\020\001\"\316\003\n\014Ta" - "skMetadata\022\024\n\014discoverable\030\001 \001(\010\022/\n\007runt" - "ime\030\002 \001(\0132\036.flyteidl.core.RuntimeMetadat" - "a\022*\n\007timeout\030\004 \001(\0132\031.google.protobuf.Dur" - "ation\022-\n\007retries\030\005 \001(\0132\034.flyteidl.core.R" - "etryStrategy\022\031\n\021discovery_version\030\006 \001(\t\022" - " \n\030deprecated_error_message\030\007 \001(\t\022\027\n\rint" - "erruptible\030\010 \001(\010H\000\022\032\n\022cache_serializable" - "\030\t \001(\010\022\026\n\016generates_deck\030\n \001(\010\0223\n\004tags\030\013" - " \003(\0132%.flyteidl.core.TaskMetadata.TagsEn" - "try\022\031\n\021pod_template_name\030\014 \001(\t\032+\n\tTagsEn" - "try\022\013\n\003key\030\001 \001(\t\022\r\n\005value\030\002 \001(\t:\0028\001B\025\n\023i" - "nterruptible_value\"\316\004\n\014TaskTemplate\022%\n\002i" - "d\030\001 \001(\0132\031.flyteidl.core.Identifier\022\014\n\004ty" - "pe\030\002 \001(\t\022-\n\010metadata\030\003 \001(\0132\033.flyteidl.co" - "re.TaskMetadata\0220\n\tinterface\030\004 \001(\0132\035.fly" - "teidl.core.TypedInterface\022\'\n\006custom\030\005 \001(" - "\0132\027.google.protobuf.Struct\022-\n\tcontainer\030" - "\006 \001(\0132\030.flyteidl.core.ContainerH\000\022(\n\007k8s" - "_pod\030\021 \001(\0132\025.flyteidl.core.K8sPodH\000\022!\n\003s" - "ql\030\022 \001(\0132\022.flyteidl.core.SqlH\000\022\031\n\021task_t" - "ype_version\030\007 \001(\005\0228\n\020security_context\030\010 " - "\001(\0132\036.flyteidl.core.SecurityContext\022<\n\022e" - "xtended_resources\030\t \001(\0132 .flyteidl.core." - "ExtendedResources\0227\n\006config\030\020 \003(\0132\'.flyt" - "eidl.core.TaskTemplate.ConfigEntry\032-\n\013Co" - "nfigEntry\022\013\n\003key\030\001 \001(\t\022\r\n\005value\030\002 \001(\t:\0028" - "\001B\010\n\006target\"\'\n\rContainerPort\022\026\n\016containe" - "r_port\030\001 \001(\r\"\255\003\n\tContainer\022\r\n\005image\030\001 \001(" - "\t\022\017\n\007command\030\002 \003(\t\022\014\n\004args\030\003 \003(\t\022+\n\treso" - "urces\030\004 \001(\0132\030.flyteidl.core.Resources\022(\n" - "\003env\030\005 \003(\0132\033.flyteidl.core.KeyValuePair\022" - "/\n\006config\030\006 \003(\0132\033.flyteidl.core.KeyValue" - "PairB\002\030\001\022+\n\005ports\030\007 \003(\0132\034.flyteidl.core." - "ContainerPort\0225\n\013data_config\030\t \001(\0132 .fly" - "teidl.core.DataLoadingConfig\022;\n\014architec" - "ture\030\n \001(\0162%.flyteidl.core.Container.Arc" - "hitecture\"I\n\014Architecture\022\013\n\007UNKNOWN\020\000\022\t" - "\n\005AMD64\020\001\022\t\n\005ARM64\020\002\022\n\n\006ARM_V6\020\003\022\n\n\006ARM_" - "V7\020\004\"\233\002\n\nIOStrategy\022=\n\rdownload_mode\030\001 \001" - "(\0162&.flyteidl.core.IOStrategy.DownloadMo" - "de\0229\n\013upload_mode\030\002 \001(\0162$.flyteidl.core." - "IOStrategy.UploadMode\"L\n\014DownloadMode\022\022\n" - "\016DOWNLOAD_EAGER\020\000\022\023\n\017DOWNLOAD_STREAM\020\001\022\023" - "\n\017DO_NOT_DOWNLOAD\020\002\"E\n\nUploadMode\022\022\n\016UPL" - "OAD_ON_EXIT\020\000\022\020\n\014UPLOAD_EAGER\020\001\022\021\n\rDO_NO" - "T_UPLOAD\020\002\"\363\001\n\021DataLoadingConfig\022\017\n\007enab" - "led\030\001 \001(\010\022\022\n\ninput_path\030\002 \001(\t\022\023\n\013output_" - "path\030\003 \001(\t\022A\n\006format\030\004 \001(\01621.flyteidl.co" - "re.DataLoadingConfig.LiteralMapFormat\022.\n" - "\013io_strategy\030\005 \001(\0132\031.flyteidl.core.IOStr" - "ategy\"1\n\020LiteralMapFormat\022\010\n\004JSON\020\000\022\010\n\004Y" - "AML\020\001\022\t\n\005PROTO\020\002\"\236\001\n\006K8sPod\0222\n\010metadata\030" - "\001 \001(\0132 .flyteidl.core.K8sObjectMetadata\022" - ")\n\010pod_spec\030\002 \001(\0132\027.google.protobuf.Stru" - "ct\0225\n\013data_config\030\003 \001(\0132 .flyteidl.core." - "DataLoadingConfig\"\374\001\n\021K8sObjectMetadata\022" - "<\n\006labels\030\001 \003(\0132,.flyteidl.core.K8sObjec" - "tMetadata.LabelsEntry\022F\n\013annotations\030\002 \003" - "(\01321.flyteidl.core.K8sObjectMetadata.Ann" - "otationsEntry\032-\n\013LabelsEntry\022\013\n\003key\030\001 \001(" - "\t\022\r\n\005value\030\002 \001(\t:\0028\001\0322\n\020AnnotationsEntry" - "\022\013\n\003key\030\001 \001(\t\022\r\n\005value\030\002 \001(\t:\0028\001\"~\n\003Sql\022" - "\021\n\tstatement\030\001 \001(\t\022+\n\007dialect\030\002 \001(\0162\032.fl" - "yteidl.core.Sql.Dialect\"7\n\007Dialect\022\r\n\tUN" - "DEFINED\020\000\022\010\n\004ANSI\020\001\022\010\n\004HIVE\020\002\022\t\n\005OTHER\020\003" - "B= 1900 RuntimeMetadata::RuntimeMetadata() @@ -2382,7 +2385,9 @@ RuntimeMetadata::RuntimeMetadata(const RuntimeMetadata& from) if (from.flavor().size() > 0) { flavor_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.flavor_); } - type_ = from.type_; + ::memcpy(&type_, &from.type_, + static_cast(reinterpret_cast(&is_sync_plugin_) - + reinterpret_cast(&type_)) + sizeof(is_sync_plugin_)); // @@protoc_insertion_point(copy_constructor:flyteidl.core.RuntimeMetadata) } @@ -2391,7 +2396,9 @@ void RuntimeMetadata::SharedCtor() { &scc_info_RuntimeMetadata_flyteidl_2fcore_2ftasks_2eproto.base); version_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); flavor_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - type_ = 0; + ::memset(&type_, 0, static_cast( + reinterpret_cast(&is_sync_plugin_) - + reinterpret_cast(&type_)) + sizeof(is_sync_plugin_)); } RuntimeMetadata::~RuntimeMetadata() { @@ -2421,7 +2428,9 @@ void RuntimeMetadata::Clear() { version_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); flavor_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - type_ = 0; + ::memset(&type_, 0, static_cast( + reinterpret_cast(&is_sync_plugin_) - + reinterpret_cast(&type_)) + sizeof(is_sync_plugin_)); _internal_metadata_.Clear(); } @@ -2478,6 +2487,13 @@ const char* RuntimeMetadata::_InternalParse(const char* begin, const char* end, ptr += size; break; } + // bool is_sync_plugin = 4; + case 4: { + if (static_cast<::google::protobuf::uint8>(tag) != 32) goto handle_unusual; + msg->set_is_sync_plugin(::google::protobuf::internal::ReadVarint(&ptr)); + GOOGLE_PROTOBUF_PARSER_ASSERT(ptr); + break; + } default: { handle_unusual: if ((tag & 7) == 4 || tag == 0) { @@ -2556,6 +2572,19 @@ bool RuntimeMetadata::MergePartialFromCodedStream( break; } + // bool is_sync_plugin = 4; + case 4: { + if (static_cast< ::google::protobuf::uint8>(tag) == (32 & 0xFF)) { + + DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive< + bool, ::google::protobuf::internal::WireFormatLite::TYPE_BOOL>( + input, &is_sync_plugin_))); + } else { + goto handle_unusual; + } + break; + } + default: { handle_unusual: if (tag == 0) { @@ -2609,6 +2638,11 @@ void RuntimeMetadata::SerializeWithCachedSizes( 3, this->flavor(), output); } + // bool is_sync_plugin = 4; + if (this->is_sync_plugin() != 0) { + ::google::protobuf::internal::WireFormatLite::WriteBool(4, this->is_sync_plugin(), output); + } + if (_internal_metadata_.have_unknown_fields()) { ::google::protobuf::internal::WireFormat::SerializeUnknownFields( _internal_metadata_.unknown_fields(), output); @@ -2650,6 +2684,11 @@ ::google::protobuf::uint8* RuntimeMetadata::InternalSerializeWithCachedSizesToAr 3, this->flavor(), target); } + // bool is_sync_plugin = 4; + if (this->is_sync_plugin() != 0) { + target = ::google::protobuf::internal::WireFormatLite::WriteBoolToArray(4, this->is_sync_plugin(), target); + } + if (_internal_metadata_.have_unknown_fields()) { target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray( _internal_metadata_.unknown_fields(), target); @@ -2691,6 +2730,11 @@ size_t RuntimeMetadata::ByteSizeLong() const { ::google::protobuf::internal::WireFormatLite::EnumSize(this->type()); } + // bool is_sync_plugin = 4; + if (this->is_sync_plugin() != 0) { + total_size += 1 + 1; + } + int cached_size = ::google::protobuf::internal::ToCachedSize(total_size); SetCachedSize(cached_size); return total_size; @@ -2729,6 +2773,9 @@ void RuntimeMetadata::MergeFrom(const RuntimeMetadata& from) { if (from.type() != 0) { set_type(from.type()); } + if (from.is_sync_plugin() != 0) { + set_is_sync_plugin(from.is_sync_plugin()); + } } void RuntimeMetadata::CopyFrom(const ::google::protobuf::Message& from) { @@ -2761,6 +2808,7 @@ void RuntimeMetadata::InternalSwap(RuntimeMetadata* other) { flavor_.Swap(&other->flavor_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(), GetArenaNoVirtual()); swap(type_, other->type_); + swap(is_sync_plugin_, other->is_sync_plugin_); } ::google::protobuf::Metadata RuntimeMetadata::GetMetadata() const { diff --git a/flyteidl/gen/pb-cpp/flyteidl/core/tasks.pb.h b/flyteidl/gen/pb-cpp/flyteidl/core/tasks.pb.h index 37446ea345..14d644af8b 100644 --- a/flyteidl/gen/pb-cpp/flyteidl/core/tasks.pb.h +++ b/flyteidl/gen/pb-cpp/flyteidl/core/tasks.pb.h @@ -1032,6 +1032,12 @@ class RuntimeMetadata final : ::flyteidl::core::RuntimeMetadata_RuntimeType type() const; void set_type(::flyteidl::core::RuntimeMetadata_RuntimeType value); + // bool is_sync_plugin = 4; + void clear_is_sync_plugin(); + static const int kIsSyncPluginFieldNumber = 4; + bool is_sync_plugin() const; + void set_is_sync_plugin(bool value); + // @@protoc_insertion_point(class_scope:flyteidl.core.RuntimeMetadata) private: class HasBitSetters; @@ -1040,6 +1046,7 @@ class RuntimeMetadata final : ::google::protobuf::internal::ArenaStringPtr version_; ::google::protobuf::internal::ArenaStringPtr flavor_; int type_; + bool is_sync_plugin_; mutable ::google::protobuf::internal::CachedSize _cached_size_; friend struct ::TableStruct_flyteidl_2fcore_2ftasks_2eproto; }; @@ -3309,6 +3316,20 @@ inline void RuntimeMetadata::set_allocated_flavor(::std::string* flavor) { // @@protoc_insertion_point(field_set_allocated:flyteidl.core.RuntimeMetadata.flavor) } +// bool is_sync_plugin = 4; +inline void RuntimeMetadata::clear_is_sync_plugin() { + is_sync_plugin_ = false; +} +inline bool RuntimeMetadata::is_sync_plugin() const { + // @@protoc_insertion_point(field_get:flyteidl.core.RuntimeMetadata.is_sync_plugin) + return is_sync_plugin_; +} +inline void RuntimeMetadata::set_is_sync_plugin(bool value) { + + is_sync_plugin_ = value; + // @@protoc_insertion_point(field_set:flyteidl.core.RuntimeMetadata.is_sync_plugin) +} + // ------------------------------------------------------------------- // ------------------------------------------------------------------- diff --git a/flyteidl/gen/pb-go/flyteidl/admin/agent.pb.go b/flyteidl/gen/pb-go/flyteidl/admin/agent.pb.go index 54afdbdd19..ae67cc93a1 100644 --- a/flyteidl/gen/pb-go/flyteidl/admin/agent.pb.go +++ b/flyteidl/gen/pb-go/flyteidl/admin/agent.pb.go @@ -493,7 +493,7 @@ type DoTaskRequest struct { Inputs *core.LiteralMap `protobuf:"bytes,1,opt,name=inputs,proto3" json:"inputs,omitempty"` // Template of the task that encapsulates all the metadata of the task. Template *core.TaskTemplate `protobuf:"bytes,2,opt,name=template,proto3" json:"template,omitempty"` - // Prefix for where task output data will be written. (e.g. s3://my-bucket/randomstring) + // Prefix for where task output data will be written. (e.g. s3://my-bucket/randomstring) OutputPrefix string `protobuf:"bytes,3,opt,name=output_prefix,json=outputPrefix,proto3" json:"output_prefix,omitempty"` // subset of runtime task execution metadata. TaskExecutionMetadata *TaskExecutionMetadata `protobuf:"bytes,4,opt,name=task_execution_metadata,json=taskExecutionMetadata,proto3" json:"task_execution_metadata,omitempty"` diff --git a/flyteidl/gen/pb-go/flyteidl/core/tasks.pb.go b/flyteidl/gen/pb-go/flyteidl/core/tasks.pb.go index cac46f8a94..94616cce90 100644 --- a/flyteidl/gen/pb-go/flyteidl/core/tasks.pb.go +++ b/flyteidl/gen/pb-go/flyteidl/core/tasks.pb.go @@ -500,8 +500,10 @@ type RuntimeMetadata struct { // Version of the runtime. All versions should be backward compatible. However, certain cases call for version // checks to ensure tighter validation or setting expectations. Version string `protobuf:"bytes,2,opt,name=version,proto3" json:"version,omitempty"` - //+optional It can be used to provide extra information about the plugin type (e.g. async plugin, sync plugin... etc.). - Flavor string `protobuf:"bytes,3,opt,name=flavor,proto3" json:"flavor,omitempty"` + //+optional It can be used to provide extra information about the runtime (e.g. python, golang... etc.). + Flavor string `protobuf:"bytes,3,opt,name=flavor,proto3" json:"flavor,omitempty"` + //+optional It can be used to decide use sync plugin or async plugin during runtime. + IsSyncPlugin bool `protobuf:"varint,4,opt,name=is_sync_plugin,json=isSyncPlugin,proto3" json:"is_sync_plugin,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -553,6 +555,13 @@ func (m *RuntimeMetadata) GetFlavor() string { return "" } +func (m *RuntimeMetadata) GetIsSyncPlugin() bool { + if m != nil { + return m.IsSyncPlugin + } + return false +} + // Task Metadata type TaskMetadata struct { // Indicates whether the system should attempt to lookup this task's output to avoid duplication of work. @@ -1409,117 +1418,119 @@ func init() { func init() { proto.RegisterFile("flyteidl/core/tasks.proto", fileDescriptor_bd8423ba58d6ed80) } var fileDescriptor_bd8423ba58d6ed80 = []byte{ - // 1787 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x57, 0xdd, 0x72, 0xdb, 0xb8, - 0x15, 0xb6, 0x24, 0x5b, 0xb2, 0x8e, 0x2c, 0x9b, 0xc2, 0x6e, 0x52, 0xc6, 0x4d, 0xd2, 0x0c, 0xa7, - 0x9b, 0xa4, 0xdb, 0x46, 0x6e, 0xb4, 0x19, 0xdb, 0x9b, 0xee, 0xa4, 0x23, 0x47, 0x4c, 0xac, 0xda, - 0xfa, 0x19, 0x48, 0xce, 0x36, 0xed, 0x74, 0x58, 0x98, 0x84, 0x69, 0xd6, 0x14, 0xc1, 0x80, 0xa0, - 0xbb, 0xca, 0x5b, 0xb4, 0x2f, 0xd1, 0xe9, 0x4c, 0x6f, 0x7b, 0xd9, 0x77, 0xe8, 0x55, 0xdf, 0xa4, - 0x77, 0xbd, 0xe8, 0x00, 0xfc, 0xd1, 0x8f, 0x9d, 0x78, 0x7c, 0x45, 0x9c, 0x73, 0xbe, 0x73, 0x00, - 0x1c, 0x9c, 0x3f, 0xc2, 0xbd, 0x33, 0x7f, 0x2a, 0xa8, 0xe7, 0xf8, 0x3b, 0x36, 0xe3, 0x74, 0x47, - 0x90, 0xe8, 0x22, 0x6a, 0x86, 0x9c, 0x09, 0x86, 0xea, 0x99, 0xa8, 0x29, 0x45, 0xdb, 0x0f, 0x17, - 0x91, 0x9e, 0x43, 0x03, 0xe1, 0x9d, 0x79, 0x94, 0x27, 0xf0, 0xed, 0x07, 0x4b, 0xf2, 0x40, 0x50, - 0x7e, 0x46, 0x6c, 0x9a, 0x8a, 0xef, 0x2f, 0x8a, 0x7d, 0x4f, 0x50, 0x4e, 0xfc, 0xe8, 0x7a, 0x69, - 0x44, 0xed, 0x98, 0x7b, 0x62, 0x9a, 0x4a, 0x1f, 0xba, 0x8c, 0xb9, 0x3e, 0xdd, 0x51, 0xd4, 0x69, - 0x7c, 0xb6, 0xe3, 0xc4, 0x9c, 0x08, 0x8f, 0x05, 0x99, 0xf6, 0xb2, 0x3c, 0x12, 0x3c, 0xb6, 0x45, - 0x22, 0x35, 0xfe, 0x5d, 0x84, 0x2a, 0xa6, 0x11, 0x8b, 0xb9, 0x4d, 0x23, 0x74, 0x00, 0xeb, 0x9c, - 0x7e, 0x88, 0x69, 0x24, 0x22, 0xbd, 0xf0, 0xa8, 0xf4, 0xb4, 0xd6, 0x7a, 0xdc, 0x5c, 0xb8, 0x68, - 0x33, 0xc7, 0xe6, 0x2b, 0x33, 0x10, 0x7c, 0x8a, 0x73, 0x3d, 0xf4, 0x0a, 0xca, 0xbe, 0x37, 0xf1, - 0x44, 0xa4, 0x17, 0x6f, 0x65, 0x21, 0xd5, 0xda, 0xfe, 0x23, 0xd4, 0x17, 0x04, 0xe8, 0x5b, 0x58, - 0x0d, 0xc8, 0x84, 0xea, 0x85, 0x47, 0x85, 0xa7, 0x9b, 0xad, 0xaf, 0x6e, 0x34, 0xd7, 0x27, 0x13, - 0x8a, 0x95, 0x0a, 0xfa, 0x12, 0xd6, 0x2e, 0x89, 0x1f, 0x53, 0xbd, 0xf8, 0xa8, 0xf0, 0xb4, 0x8a, - 0x13, 0xc2, 0xf8, 0x03, 0x6c, 0xcc, 0x63, 0x51, 0x0d, 0x2a, 0x27, 0xfd, 0xa3, 0xfe, 0xe0, 0xfb, - 0xbe, 0xb6, 0x82, 0x2a, 0x50, 0x7a, 0x3d, 0x3c, 0xd1, 0x0a, 0x72, 0xf1, 0x76, 0x78, 0xa2, 0x15, - 0x11, 0x40, 0xb9, 0x67, 0xf6, 0x06, 0xf8, 0xbd, 0x56, 0x92, 0xd0, 0xd1, 0x78, 0x80, 0xdb, 0x6f, - 0x4d, 0x6d, 0x15, 0xdd, 0x81, 0x86, 0x39, 0x3c, 0x34, 0x7b, 0x26, 0x6e, 0x1f, 0x5b, 0x19, 0x7b, - 0xcd, 0xf8, 0x4b, 0x01, 0x36, 0xdf, 0x0e, 0x4f, 0xda, 0xb6, 0x4d, 0x7d, 0xca, 0x89, 0x60, 0x1c, - 0xdd, 0x85, 0xb2, 0x43, 0x2f, 0x3d, 0x3b, 0xb9, 0x44, 0x15, 0xa7, 0x14, 0x7a, 0x0c, 0xf5, 0x38, - 0x08, 0x09, 0x17, 0x9e, 0x7c, 0x30, 0xea, 0xa8, 0x73, 0xae, 0x1f, 0xae, 0xe0, 0x45, 0x36, 0x7a, - 0x02, 0x9b, 0x39, 0x69, 0x45, 0xde, 0x47, 0xaa, 0x97, 0xa4, 0x1d, 0x09, 0xcc, 0xf9, 0x23, 0xef, - 0x23, 0x3d, 0xb8, 0x0b, 0x5f, 0x2e, 0x02, 0xad, 0xe4, 0xca, 0xbf, 0x87, 0x86, 0xf9, 0x83, 0xa0, - 0x81, 0x43, 0x9d, 0xd9, 0x6b, 0xbf, 0x81, 0x2d, 0x37, 0x8c, 0x2d, 0x32, 0x3b, 0xa8, 0x3a, 0x5e, - 0xad, 0xf5, 0x60, 0xc9, 0xc7, 0x8b, 0xb7, 0xc1, 0x9b, 0x6e, 0x18, 0xcf, 0xd1, 0xc6, 0x3f, 0x0a, - 0xb0, 0x85, 0xe3, 0x40, 0x78, 0x13, 0xda, 0xa3, 0x82, 0x38, 0x44, 0x10, 0xf4, 0x0a, 0x56, 0xc5, - 0x34, 0xcc, 0x1e, 0xed, 0xeb, 0xe5, 0x47, 0x5b, 0x44, 0x67, 0xf4, 0x78, 0x1a, 0x52, 0xac, 0xf4, - 0x90, 0x0e, 0x95, 0x4b, 0xca, 0x23, 0x8f, 0x05, 0xe9, 0xdb, 0x65, 0xa4, 0xf4, 0xe5, 0x99, 0x4f, - 0x2e, 0x19, 0x4f, 0x7c, 0x80, 0x53, 0xca, 0x78, 0x02, 0xb5, 0x39, 0x33, 0xa8, 0x0a, 0x6b, 0x83, - 0xf1, 0xa1, 0x89, 0xb5, 0x15, 0x54, 0x87, 0xea, 0x9b, 0xe3, 0xf7, 0x63, 0xd3, 0x1a, 0x75, 0x8e, - 0xb4, 0x82, 0xf1, 0xdf, 0x55, 0xd8, 0x18, 0x93, 0xe8, 0x22, 0x3f, 0xab, 0x01, 0x1b, 0x8e, 0x17, - 0xd9, 0xec, 0x92, 0x72, 0x72, 0xea, 0x27, 0x67, 0x5e, 0xc7, 0x0b, 0x3c, 0xb4, 0x0f, 0x15, 0x9e, - 0x58, 0x57, 0xe7, 0xa9, 0xb5, 0x1e, 0x7e, 0xfe, 0x4a, 0x38, 0x83, 0xa3, 0x6f, 0xa0, 0x22, 0xbf, - 0x2c, 0x16, 0xfa, 0xaa, 0xd2, 0xbc, 0xd7, 0x4c, 0x32, 0xb2, 0x99, 0x65, 0x64, 0xb3, 0x93, 0x66, - 0x2c, 0xce, 0x90, 0x68, 0x17, 0x2a, 0x9c, 0x0a, 0xee, 0xd1, 0x48, 0x5f, 0x53, 0x4a, 0xf7, 0xaf, - 0x84, 0xbd, 0xe0, 0xd3, 0x91, 0xe0, 0x44, 0x50, 0x77, 0x8a, 0x33, 0x30, 0xfa, 0x39, 0x34, 0xb2, - 0x63, 0x4f, 0xad, 0xcc, 0x81, 0x65, 0xe5, 0x27, 0x2d, 0x17, 0xbc, 0x4b, 0x3d, 0xb9, 0x0f, 0xba, - 0x43, 0x43, 0x4e, 0x6d, 0x22, 0xa8, 0x63, 0x51, 0xce, 0x19, 0xb7, 0x26, 0x34, 0x8a, 0x88, 0x4b, - 0xf5, 0x8a, 0xd2, 0xb9, 0x3b, 0x93, 0x9b, 0x52, 0xdc, 0x4b, 0xa4, 0x32, 0x6e, 0x55, 0x09, 0xe3, - 0x71, 0x28, 0x3c, 0xe9, 0xb2, 0xf5, 0x2c, 0x6e, 0x17, 0xd8, 0xe8, 0x19, 0x20, 0x9b, 0xd8, 0xe7, - 0xd4, 0x8a, 0x28, 0xf7, 0x88, 0xef, 0x7d, 0x54, 0xfe, 0xad, 0x2a, 0xff, 0x36, 0x94, 0x64, 0x34, - 0x27, 0x40, 0x5f, 0xc1, 0xa6, 0x4b, 0x03, 0x19, 0x55, 0x34, 0xb2, 0x1c, 0x6a, 0x5f, 0xe8, 0xa0, - 0xa0, 0xf5, 0x9c, 0xdb, 0xa1, 0xf6, 0x85, 0x2c, 0x08, 0x82, 0xb8, 0x91, 0x5e, 0x53, 0xf5, 0x65, - 0xb9, 0x20, 0xcc, 0x3f, 0x6d, 0x73, 0x4c, 0xdc, 0x28, 0x29, 0x2f, 0x4a, 0x05, 0x7d, 0x0d, 0x8d, - 0x90, 0x39, 0x96, 0xa0, 0x93, 0xd0, 0x27, 0x82, 0x5a, 0xaa, 0xb0, 0x6c, 0xa8, 0xbb, 0x6e, 0x85, - 0xcc, 0x19, 0xa7, 0x7c, 0x59, 0x16, 0xb6, 0xf7, 0xa0, 0x9a, 0xab, 0x23, 0x0d, 0x4a, 0x17, 0x74, - 0x9a, 0xa6, 0xaf, 0x5c, 0x5e, 0x5f, 0x5b, 0x5e, 0x16, 0xf7, 0x0b, 0x07, 0x77, 0xe0, 0x8b, 0x05, - 0x37, 0xa4, 0x39, 0xf8, 0x9f, 0xb5, 0x24, 0xee, 0xb2, 0x4d, 0xd0, 0xcf, 0xa0, 0xe8, 0x39, 0x69, - 0xca, 0xdd, 0x5b, 0xba, 0x45, 0x37, 0xef, 0x20, 0xb8, 0xe8, 0x39, 0x08, 0xa5, 0xe9, 0x94, 0xec, - 0x95, 0xa4, 0xc8, 0x1e, 0xac, 0x4f, 0xd2, 0x7b, 0xaa, 0x54, 0xa8, 0xb5, 0x7e, 0xfc, 0x19, 0x57, - 0xe0, 0x1c, 0x8c, 0x7e, 0x05, 0xd5, 0xbc, 0x01, 0xa5, 0x31, 0xb9, 0x9c, 0xf1, 0x32, 0x85, 0x9c, - 0x6e, 0x06, 0xc2, 0x33, 0x3c, 0xda, 0x81, 0xb2, 0x1d, 0x47, 0x82, 0x4d, 0xd2, 0xc0, 0xfc, 0xd1, - 0x95, 0x68, 0x1e, 0xa9, 0xfe, 0x82, 0x53, 0x18, 0xda, 0x87, 0xaa, 0xcd, 0x02, 0x41, 0xbc, 0x80, - 0x72, 0x15, 0x8a, 0xb5, 0x96, 0xbe, 0xb4, 0xdb, 0xeb, 0x4c, 0x7e, 0xb8, 0x82, 0x67, 0x60, 0xf4, - 0x4b, 0xa8, 0x5c, 0xec, 0x47, 0x56, 0xc8, 0x1c, 0xbd, 0xa1, 0xf4, 0xee, 0x2c, 0xe9, 0x1d, 0xed, - 0x47, 0x43, 0xe6, 0x1c, 0xae, 0xe0, 0xf2, 0x85, 0x5a, 0xa1, 0xc7, 0x50, 0x8a, 0x3e, 0xf8, 0x3a, - 0x52, 0x68, 0xb4, 0x84, 0x1e, 0x7d, 0xf0, 0x0f, 0x57, 0xb0, 0x04, 0xc8, 0x30, 0x90, 0xcd, 0xdc, - 0x92, 0x7e, 0xcc, 0xd3, 0x44, 0x86, 0xfc, 0x1a, 0xde, 0x92, 0x02, 0x79, 0xfd, 0x2c, 0x4b, 0xba, - 0xa0, 0x65, 0x1d, 0xd7, 0x92, 0x67, 0xa3, 0x3f, 0x08, 0x15, 0xee, 0x57, 0x4b, 0xc0, 0x28, 0x85, - 0xbd, 0x4e, 0x50, 0x78, 0x2b, 0x5a, 0x64, 0xa0, 0x01, 0x20, 0x9a, 0x56, 0x61, 0x8b, 0x67, 0x65, - 0x58, 0xa5, 0x43, 0xad, 0xf5, 0x68, 0xc9, 0xd8, 0x95, 0x72, 0x8d, 0x1b, 0xf4, 0x4a, 0x05, 0xff, - 0x35, 0x94, 0x6d, 0x16, 0x9c, 0x79, 0xae, 0xae, 0xa9, 0x5c, 0x78, 0x72, 0x4d, 0x00, 0x64, 0xe1, - 0x26, 0xbd, 0x7c, 0xe6, 0xb9, 0x69, 0xb3, 0x4d, 0xd4, 0xb6, 0xbf, 0x85, 0xda, 0x1c, 0xfb, 0x56, - 0x51, 0xbe, 0x0e, 0x65, 0x41, 0xb8, 0x4b, 0x85, 0xb1, 0x0b, 0xf5, 0xfc, 0x05, 0x87, 0x8c, 0x0b, - 0x99, 0xc7, 0xf9, 0x2b, 0x5a, 0x21, 0xe3, 0x42, 0x59, 0xac, 0xe3, 0xba, 0x3d, 0x0f, 0x33, 0xfe, - 0x57, 0x82, 0x6a, 0xae, 0x28, 0x77, 0xf2, 0x26, 0xb2, 0xf4, 0x24, 0xbb, 0x27, 0x84, 0xec, 0x03, - 0x36, 0x9b, 0x4c, 0x48, 0xe0, 0xa8, 0x71, 0xa2, 0x8a, 0x33, 0x52, 0xa6, 0x04, 0xe1, 0x6e, 0xa4, - 0x97, 0x14, 0x5b, 0xad, 0xd1, 0x2e, 0x54, 0x67, 0x7e, 0x5d, 0xbd, 0x36, 0xd6, 0x66, 0xfe, 0x9c, - 0x41, 0xd1, 0x33, 0x28, 0xd1, 0xe0, 0x52, 0x5f, 0x53, 0x4e, 0x5c, 0xce, 0xa2, 0x23, 0x3a, 0x7d, - 0x27, 0x6f, 0x3d, 0x24, 0x1e, 0xc7, 0x12, 0x87, 0xf6, 0x72, 0xb7, 0x97, 0x6f, 0xd4, 0x38, 0x28, - 0xea, 0x85, 0xcc, 0xdd, 0xa8, 0x05, 0x6b, 0xd2, 0x1d, 0x91, 0x5e, 0x51, 0x7a, 0xf7, 0x3f, 0x95, - 0x07, 0xd2, 0x3d, 0x38, 0x81, 0xa2, 0x36, 0xd4, 0x64, 0xd6, 0x5a, 0xe9, 0x8e, 0xd7, 0x47, 0x4b, - 0x87, 0x08, 0x72, 0xcc, 0x88, 0xe3, 0x05, 0x6e, 0xf2, 0x9e, 0x18, 0xa4, 0x52, 0xb2, 0x46, 0x5d, - 0xd8, 0x20, 0xdc, 0x3e, 0xf7, 0x04, 0xb5, 0x45, 0xcc, 0xa9, 0xaa, 0xaa, 0x57, 0x27, 0xa9, 0x7c, - 0xf7, 0x66, 0x7b, 0x0e, 0x8c, 0x17, 0x54, 0x8d, 0x2e, 0x6c, 0xcc, 0x4b, 0x17, 0x67, 0xa7, 0x2a, - 0xac, 0xb5, 0x7b, 0x9d, 0xdd, 0x17, 0x5a, 0x41, 0x2d, 0x71, 0x6f, 0xf7, 0x45, 0x32, 0x3f, 0xb5, - 0x71, 0xcf, 0x7a, 0xb7, 0xab, 0x95, 0xf2, 0xf5, 0x9e, 0xb6, 0x6a, 0xfc, 0xb3, 0x08, 0xd0, 0x1d, - 0x64, 0x3d, 0x0c, 0x1d, 0x41, 0xdd, 0x61, 0x7f, 0x0e, 0x7c, 0x46, 0x1c, 0x6b, 0xc2, 0x9c, 0x6c, - 0x74, 0x58, 0x1e, 0x1f, 0x67, 0x1a, 0xcd, 0x4e, 0x0a, 0xef, 0x31, 0x87, 0xe2, 0x0d, 0x67, 0x8e, - 0x42, 0x26, 0xd4, 0xe2, 0x70, 0x66, 0xaa, 0xa8, 0x4c, 0xfd, 0xf4, 0xd3, 0xa6, 0x4e, 0xc2, 0xdc, - 0x10, 0xc4, 0xf9, 0xda, 0x38, 0x86, 0x8d, 0xf9, 0x4d, 0x10, 0x82, 0xcd, 0xce, 0xe0, 0xfb, 0xfe, - 0xf1, 0xa0, 0xdd, 0xb1, 0xcc, 0xf6, 0x5b, 0x35, 0x5d, 0x7c, 0x01, 0x5b, 0x39, 0x6f, 0x34, 0xc6, - 0x66, 0xbb, 0xa7, 0x15, 0x12, 0xa6, 0xd5, 0x1f, 0x8c, 0xad, 0x4c, 0xa6, 0x15, 0x0d, 0x13, 0x60, - 0xb6, 0x8f, 0xb4, 0x75, 0x32, 0x54, 0x5a, 0x83, 0xbe, 0x65, 0xfe, 0xb6, 0x3b, 0xd6, 0x56, 0x90, - 0x06, 0x1b, 0x29, 0x2f, 0xb1, 0x5e, 0x40, 0x0d, 0xa8, 0xa7, 0x86, 0x12, 0x81, 0x56, 0x34, 0xfe, - 0x56, 0x84, 0xc6, 0x95, 0xf7, 0x96, 0x89, 0x42, 0x03, 0xd9, 0x45, 0x9d, 0x74, 0x7e, 0xc9, 0x48, - 0xf4, 0x00, 0xc0, 0x0b, 0xc2, 0x58, 0x58, 0x21, 0x11, 0xe7, 0x69, 0x1e, 0x57, 0x15, 0x67, 0x48, - 0xc4, 0x39, 0xfa, 0x09, 0xd4, 0x58, 0x2c, 0x72, 0x79, 0x32, 0x54, 0x41, 0xc2, 0x52, 0x80, 0x2e, - 0x94, 0xcf, 0x18, 0x9f, 0x90, 0x64, 0x7e, 0xd9, 0x6c, 0x3d, 0xbf, 0x29, 0xf6, 0x9a, 0xc7, 0xc9, - 0xff, 0x4b, 0x8f, 0x84, 0x6f, 0x94, 0x22, 0x4e, 0x0d, 0xa0, 0x97, 0x50, 0xf3, 0x98, 0x15, 0xa5, - 0x5e, 0x4f, 0x3b, 0xc8, 0xbd, 0x4f, 0x3e, 0x0b, 0x06, 0x8f, 0x65, 0x6b, 0xe3, 0x39, 0x68, 0xcb, - 0x76, 0xd1, 0x3a, 0xac, 0xfe, 0x66, 0x34, 0x90, 0xa1, 0xb7, 0x0e, 0xab, 0xef, 0xdb, 0xbd, 0xe3, - 0x24, 0xf2, 0x86, 0x78, 0x30, 0x1e, 0x68, 0x45, 0xe3, 0x5f, 0x05, 0x28, 0x27, 0x3d, 0x02, 0x7d, - 0x37, 0xd7, 0x2c, 0x0b, 0xd7, 0xa6, 0xd0, 0xd1, 0x7e, 0x34, 0x38, 0xfd, 0x13, 0xb5, 0xc5, 0x35, - 0x1d, 0xb3, 0x05, 0xeb, 0x72, 0x6c, 0x88, 0x42, 0x6a, 0xa7, 0xe3, 0xdf, 0x27, 0xdb, 0x5e, 0x25, - 0x64, 0xce, 0x28, 0xa4, 0xf6, 0x72, 0xde, 0x96, 0x6e, 0x9f, 0xb7, 0xc6, 0xdf, 0x8b, 0xd0, 0xb8, - 0x72, 0x2c, 0xd4, 0x81, 0xb2, 0x4f, 0x4e, 0xa9, 0x9f, 0xfd, 0xa2, 0xfd, 0xe2, 0xa6, 0x8b, 0x34, - 0x8f, 0x15, 0x3c, 0xfb, 0xcd, 0x52, 0x04, 0x1a, 0x41, 0x8d, 0x04, 0x01, 0x13, 0x6a, 0xf0, 0xcc, - 0xfe, 0xd5, 0x9e, 0xdf, 0x68, 0xaa, 0x3d, 0xd3, 0x49, 0xec, 0xcd, 0x5b, 0x91, 0xed, 0x64, 0x6e, - 0xaf, 0xdb, 0xb4, 0x93, 0xed, 0x57, 0xa0, 0x2d, 0xdb, 0xbe, 0x8d, 0xbe, 0xf1, 0xd7, 0x02, 0x94, - 0x46, 0x1f, 0x7c, 0x74, 0x1f, 0xaa, 0x91, 0x20, 0x82, 0x4e, 0x68, 0x20, 0x52, 0xcd, 0x19, 0x03, - 0xbd, 0x80, 0x8a, 0xe3, 0x11, 0x9f, 0xda, 0x22, 0xad, 0x09, 0xdb, 0x57, 0x87, 0x84, 0x66, 0x27, - 0x41, 0xe0, 0x0c, 0x6a, 0xec, 0x41, 0x25, 0xe5, 0xc9, 0x7f, 0x89, 0x93, 0x7e, 0xc7, 0x7c, 0xd3, - 0xed, 0x9b, 0x9d, 0x24, 0xec, 0xda, 0xfd, 0x51, 0x57, 0x2b, 0xc8, 0xd5, 0x61, 0xf7, 0x9d, 0xa9, - 0x15, 0x67, 0x7f, 0x1e, 0xa5, 0x83, 0xef, 0x7e, 0xf7, 0xd2, 0xf5, 0xc4, 0x79, 0x7c, 0xda, 0xb4, - 0xd9, 0x64, 0x47, 0xed, 0xc4, 0xb8, 0x9b, 0x2c, 0x76, 0xf2, 0xbf, 0x7a, 0x97, 0x06, 0x3b, 0xe1, - 0xe9, 0x33, 0x97, 0xed, 0x2c, 0xfc, 0xe8, 0x9f, 0x96, 0x55, 0x6c, 0x7d, 0xf3, 0xff, 0x00, 0x00, - 0x00, 0xff, 0xff, 0x61, 0xf6, 0x49, 0xdf, 0x87, 0x10, 0x00, 0x00, + // 1814 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x58, 0xdd, 0x72, 0xdb, 0xb8, + 0x15, 0xb6, 0x24, 0x5b, 0xb2, 0x8e, 0x24, 0x9b, 0xc2, 0x6e, 0x52, 0xc6, 0x4d, 0xd2, 0x0c, 0x67, + 0x37, 0x49, 0xb7, 0x8d, 0xdc, 0x68, 0x33, 0xb6, 0x37, 0xdd, 0x49, 0x47, 0x8e, 0x94, 0x58, 0xb5, + 0xf5, 0x33, 0x90, 0x9c, 0x6d, 0xda, 0xe9, 0xb0, 0x30, 0x09, 0xd3, 0xac, 0x29, 0x82, 0x01, 0x41, + 0x77, 0x95, 0xb7, 0x68, 0x5f, 0xa2, 0xd3, 0x07, 0xe8, 0x65, 0xdf, 0xa1, 0xd3, 0x8b, 0xbe, 0x49, + 0xef, 0x7a, 0xb1, 0x03, 0xf0, 0x47, 0x7f, 0xce, 0x7a, 0x7c, 0x25, 0xe0, 0x9c, 0xef, 0x1c, 0xe0, + 0x1c, 0x9c, 0x3f, 0x0a, 0xee, 0x9d, 0x7b, 0x53, 0x41, 0x5d, 0xdb, 0xdb, 0xb5, 0x18, 0xa7, 0xbb, + 0x82, 0x84, 0x97, 0x61, 0x23, 0xe0, 0x4c, 0x30, 0x54, 0x4b, 0x59, 0x0d, 0xc9, 0xda, 0x79, 0xb8, + 0x88, 0x74, 0x6d, 0xea, 0x0b, 0xf7, 0xdc, 0xa5, 0x3c, 0x86, 0xef, 0x3c, 0x58, 0xe2, 0xfb, 0x82, + 0xf2, 0x73, 0x62, 0xd1, 0x84, 0x7d, 0x7f, 0x91, 0xed, 0xb9, 0x82, 0x72, 0xe2, 0x85, 0xd7, 0x73, + 0x43, 0x6a, 0x45, 0xdc, 0x15, 0xd3, 0x84, 0xfb, 0xd0, 0x61, 0xcc, 0xf1, 0xe8, 0xae, 0xda, 0x9d, + 0x45, 0xe7, 0xbb, 0x76, 0xc4, 0x89, 0x70, 0x99, 0x9f, 0x4a, 0x2f, 0xf3, 0x43, 0xc1, 0x23, 0x4b, + 0xc4, 0x5c, 0xe3, 0xdf, 0x79, 0x28, 0x63, 0x1a, 0xb2, 0x88, 0x5b, 0x34, 0x44, 0x87, 0xb0, 0xc9, + 0xe9, 0x87, 0x88, 0x86, 0x22, 0xd4, 0x73, 0x8f, 0x0a, 0x4f, 0x2b, 0xcd, 0xc7, 0x8d, 0x05, 0x43, + 0x1b, 0x19, 0x36, 0x5b, 0x75, 0x7c, 0xc1, 0xa7, 0x38, 0x93, 0x43, 0xaf, 0xa0, 0xe8, 0xb9, 0x13, + 0x57, 0x84, 0x7a, 0xfe, 0x56, 0x1a, 0x12, 0xa9, 0x9d, 0x3f, 0x41, 0x6d, 0x81, 0x81, 0xbe, 0x81, + 0x75, 0x9f, 0x4c, 0xa8, 0x9e, 0x7b, 0x94, 0x7b, 0xba, 0xd5, 0xfc, 0xf2, 0x46, 0x75, 0x7d, 0x32, + 0xa1, 0x58, 0x89, 0xa0, 0xcf, 0x61, 0xe3, 0x8a, 0x78, 0x11, 0xd5, 0xf3, 0x8f, 0x72, 0x4f, 0xcb, + 0x38, 0xde, 0x18, 0x7f, 0x84, 0xea, 0x3c, 0x16, 0x55, 0xa0, 0x74, 0xda, 0x3f, 0xee, 0x0f, 0xbe, + 0xeb, 0x6b, 0x6b, 0xa8, 0x04, 0x85, 0xd7, 0xc3, 0x53, 0x2d, 0x27, 0x17, 0x6f, 0x87, 0xa7, 0x5a, + 0x1e, 0x01, 0x14, 0x7b, 0x9d, 0xde, 0x00, 0xbf, 0xd7, 0x0a, 0x12, 0x3a, 0x1a, 0x0f, 0x70, 0xeb, + 0x6d, 0x47, 0x5b, 0x47, 0x77, 0xa0, 0xde, 0x19, 0x1e, 0x75, 0x7a, 0x1d, 0xdc, 0x3a, 0x31, 0x53, + 0xf2, 0x86, 0xf1, 0xd7, 0x1c, 0x6c, 0xbd, 0x1d, 0x9e, 0xb6, 0x2c, 0x8b, 0x7a, 0x94, 0x13, 0xc1, + 0x38, 0xba, 0x0b, 0x45, 0x9b, 0x5e, 0xb9, 0x56, 0x6c, 0x44, 0x19, 0x27, 0x3b, 0xf4, 0x18, 0x6a, + 0x91, 0x1f, 0x10, 0x2e, 0x5c, 0xf9, 0x60, 0xd4, 0x56, 0xf7, 0xdc, 0x3c, 0x5a, 0xc3, 0x8b, 0x64, + 0xf4, 0x04, 0xb6, 0xb2, 0xad, 0x19, 0xba, 0x1f, 0xa9, 0x5e, 0x90, 0x7a, 0x24, 0x30, 0xa3, 0x8f, + 0xdc, 0x8f, 0xf4, 0xf0, 0x2e, 0x7c, 0xbe, 0x08, 0x34, 0x63, 0x93, 0xff, 0x00, 0xf5, 0xce, 0xf7, + 0x82, 0xfa, 0x36, 0xb5, 0x67, 0xaf, 0xfd, 0x06, 0xb6, 0x9d, 0x20, 0x32, 0xc9, 0xec, 0xa2, 0xea, + 0x7a, 0x95, 0xe6, 0x83, 0x25, 0x1f, 0x2f, 0x5a, 0x83, 0xb7, 0x9c, 0x20, 0x9a, 0xdb, 0x1b, 0xff, + 0xc9, 0xc1, 0x36, 0x8e, 0x7c, 0xe1, 0x4e, 0x68, 0x8f, 0x0a, 0x62, 0x13, 0x41, 0xd0, 0x2b, 0x58, + 0x17, 0xd3, 0x20, 0x7d, 0xb4, 0xaf, 0x96, 0x1f, 0x6d, 0x11, 0x9d, 0xee, 0xc7, 0xd3, 0x80, 0x62, + 0x25, 0x87, 0x74, 0x28, 0x5d, 0x51, 0x1e, 0xba, 0xcc, 0x4f, 0xde, 0x2e, 0xdd, 0x4a, 0x5f, 0x9e, + 0x7b, 0xe4, 0x8a, 0xf1, 0xd8, 0x07, 0x38, 0xd9, 0xa1, 0x2f, 0x60, 0xcb, 0x0d, 0xcd, 0x70, 0xea, + 0x5b, 0x66, 0xe0, 0x45, 0x8e, 0xeb, 0xeb, 0xeb, 0xd2, 0x99, 0xb8, 0xea, 0x86, 0xa3, 0xa9, 0x6f, + 0x0d, 0x15, 0xcd, 0x78, 0x02, 0x95, 0xb9, 0xc3, 0x50, 0x19, 0x36, 0x06, 0xe3, 0xa3, 0x0e, 0xd6, + 0xd6, 0x50, 0x0d, 0xca, 0x6f, 0x4e, 0xde, 0x8f, 0x3b, 0xe6, 0xa8, 0x7d, 0xac, 0xe5, 0x8c, 0xff, + 0xad, 0x43, 0x75, 0x4c, 0xc2, 0xcb, 0xcc, 0x22, 0x03, 0xaa, 0xb6, 0x1b, 0x5a, 0xec, 0x8a, 0x72, + 0x72, 0xe6, 0xc5, 0x96, 0x6d, 0xe2, 0x05, 0x1a, 0x3a, 0x80, 0x12, 0x8f, 0xb5, 0xab, 0x5b, 0x57, + 0x9a, 0x0f, 0x7f, 0xdc, 0x70, 0x9c, 0xc2, 0xd1, 0xd7, 0x50, 0x92, 0xbf, 0x2c, 0x12, 0xea, 0xda, + 0x95, 0xe6, 0xbd, 0x46, 0x9c, 0xb7, 0x8d, 0x34, 0x6f, 0x1b, 0xed, 0x24, 0xaf, 0x71, 0x8a, 0x44, + 0x7b, 0x50, 0xe2, 0x54, 0x70, 0x97, 0x86, 0xfa, 0x86, 0x12, 0xba, 0xbf, 0x92, 0x1c, 0x82, 0x4f, + 0x47, 0x82, 0x13, 0x41, 0x9d, 0x29, 0x4e, 0xc1, 0xe8, 0x17, 0x50, 0x4f, 0xaf, 0x3d, 0x35, 0x53, + 0x37, 0x17, 0x95, 0x37, 0xb5, 0x8c, 0xf1, 0x2e, 0xf1, 0xf7, 0x01, 0xe8, 0x36, 0x0d, 0x38, 0xb5, + 0x88, 0xa0, 0xb6, 0x49, 0x39, 0x67, 0xdc, 0x9c, 0xd0, 0x30, 0x24, 0x0e, 0xd5, 0x4b, 0x4a, 0xe6, + 0xee, 0x8c, 0xdf, 0x91, 0xec, 0x5e, 0xcc, 0x95, 0xd1, 0xad, 0x0a, 0x1d, 0x8f, 0x02, 0xe1, 0x4a, + 0x97, 0x6d, 0xa6, 0xd1, 0xbd, 0x40, 0x46, 0xcf, 0x00, 0x59, 0xc4, 0xba, 0xa0, 0x66, 0x48, 0xb9, + 0x4b, 0x3c, 0xf7, 0xa3, 0xf2, 0x6f, 0x59, 0xf9, 0xb7, 0xae, 0x38, 0xa3, 0x39, 0x06, 0xfa, 0x12, + 0xb6, 0x1c, 0xea, 0xcb, 0xd8, 0xa3, 0xa1, 0x69, 0x53, 0xeb, 0x52, 0x07, 0x05, 0xad, 0x65, 0xd4, + 0x36, 0xb5, 0x2e, 0x65, 0xd9, 0x10, 0xc4, 0x09, 0xf5, 0x8a, 0xaa, 0x42, 0xcb, 0x65, 0x63, 0xfe, + 0x69, 0x1b, 0x63, 0xe2, 0x84, 0x71, 0x11, 0x52, 0x22, 0xe8, 0x2b, 0xa8, 0x07, 0xcc, 0x36, 0x05, + 0x9d, 0x04, 0x1e, 0x11, 0xd4, 0x54, 0xe5, 0xa7, 0xaa, 0x6c, 0xdd, 0x0e, 0x98, 0x3d, 0x4e, 0xe8, + 0xb2, 0x78, 0xec, 0xec, 0x43, 0x39, 0x13, 0x47, 0x1a, 0x14, 0x2e, 0xe9, 0x34, 0x49, 0x72, 0xb9, + 0xbc, 0xbe, 0x02, 0xbd, 0xcc, 0x1f, 0xe4, 0x0e, 0xef, 0xc0, 0x67, 0x0b, 0x6e, 0x48, 0x32, 0xf5, + 0xbf, 0x1b, 0x71, 0xdc, 0xa5, 0x87, 0xa0, 0x9f, 0x43, 0xde, 0xb5, 0x93, 0xc4, 0xbc, 0xb7, 0x64, + 0x45, 0x37, 0xeb, 0x33, 0x38, 0xef, 0xda, 0x08, 0x25, 0x49, 0x17, 0x9f, 0x15, 0x27, 0xd2, 0x3e, + 0x6c, 0x4e, 0x12, 0x3b, 0x55, 0xc2, 0x54, 0x9a, 0x3f, 0xfd, 0x11, 0x57, 0xe0, 0x0c, 0x8c, 0x7e, + 0x0d, 0xe5, 0xac, 0x4d, 0x25, 0x31, 0xb9, 0x5c, 0x17, 0x64, 0x0a, 0xd9, 0xdd, 0x14, 0x84, 0x67, + 0x78, 0xb4, 0x0b, 0x45, 0x2b, 0x0a, 0x05, 0x9b, 0x24, 0x81, 0xf9, 0x93, 0x95, 0x68, 0x1e, 0xa9, + 0x2e, 0x84, 0x13, 0x18, 0x3a, 0x80, 0xb2, 0xc5, 0x7c, 0x41, 0x5c, 0x9f, 0x72, 0x15, 0x8a, 0x95, + 0xa6, 0xbe, 0x74, 0xda, 0xeb, 0x94, 0x7f, 0xb4, 0x86, 0x67, 0x60, 0xf4, 0x2b, 0x28, 0x5d, 0x1e, + 0x84, 0x66, 0xc0, 0x6c, 0xbd, 0xae, 0xe4, 0xee, 0x2c, 0xc9, 0x1d, 0x1f, 0x84, 0x43, 0x66, 0x1f, + 0xad, 0xe1, 0xe2, 0xa5, 0x5a, 0xa1, 0xc7, 0x50, 0x08, 0x3f, 0x78, 0x3a, 0x52, 0x68, 0xb4, 0x84, + 0x1e, 0x7d, 0xf0, 0x8e, 0xd6, 0xb0, 0x04, 0xc8, 0x30, 0x90, 0x2d, 0xdf, 0x94, 0x7e, 0xcc, 0xd2, + 0x44, 0x86, 0xfc, 0x06, 0xde, 0x96, 0x0c, 0x69, 0x7e, 0x9a, 0x25, 0x5d, 0xd0, 0xd2, 0xbe, 0x6c, + 0xca, 0xbb, 0xd1, 0xef, 0x85, 0x0a, 0xf7, 0xd5, 0x12, 0x30, 0x4a, 0x60, 0xaf, 0x63, 0x14, 0xde, + 0x0e, 0x17, 0x09, 0x68, 0x00, 0x88, 0x26, 0xb5, 0xda, 0xe4, 0x69, 0xb1, 0x56, 0xe9, 0x50, 0x69, + 0x3e, 0x5a, 0x52, 0xb6, 0x52, 0xd4, 0x71, 0x9d, 0xae, 0xd4, 0xf9, 0xdf, 0x40, 0xd1, 0x62, 0xfe, + 0xb9, 0xeb, 0xe8, 0x9a, 0xca, 0x85, 0x27, 0xd7, 0x04, 0x40, 0x1a, 0x6e, 0xd2, 0xcb, 0xe7, 0xae, + 0x93, 0xb4, 0xe4, 0x58, 0x6c, 0xe7, 0x1b, 0xa8, 0xcc, 0x91, 0x6f, 0x15, 0xe5, 0x9b, 0x50, 0x14, + 0x84, 0x3b, 0x54, 0x18, 0x7b, 0x50, 0xcb, 0x5e, 0x70, 0xc8, 0xb8, 0x90, 0x79, 0x9c, 0xbd, 0xa2, + 0x19, 0x30, 0x2e, 0x94, 0xc6, 0x1a, 0xae, 0x59, 0xf3, 0x30, 0xe3, 0xff, 0x05, 0x28, 0x67, 0x82, + 0xf2, 0x24, 0x77, 0x22, 0x4b, 0x4f, 0x7c, 0x7a, 0xbc, 0x91, 0xdd, 0xc2, 0x62, 0x93, 0x09, 0xf1, + 0x6d, 0x35, 0x74, 0x94, 0x71, 0xba, 0x95, 0x29, 0x41, 0xb8, 0x13, 0xea, 0x05, 0x45, 0x56, 0x6b, + 0xb4, 0x07, 0xe5, 0x99, 0x5f, 0xd7, 0xaf, 0x8d, 0xb5, 0x99, 0x3f, 0x67, 0x50, 0xf4, 0x0c, 0x0a, + 0xd4, 0xbf, 0xd2, 0x37, 0x94, 0x13, 0x97, 0xb3, 0xe8, 0x98, 0x4e, 0xdf, 0x49, 0xab, 0x87, 0xc4, + 0xe5, 0x58, 0xe2, 0xd0, 0x7e, 0xe6, 0xf6, 0xe2, 0x8d, 0x12, 0x87, 0x79, 0x3d, 0x97, 0xba, 0x1b, + 0x35, 0x61, 0x43, 0xba, 0x23, 0xd4, 0x4b, 0x4a, 0xee, 0xfe, 0xa7, 0xf2, 0x40, 0xba, 0x07, 0xc7, + 0x50, 0xd4, 0x82, 0x8a, 0xcc, 0x5a, 0x33, 0x39, 0xf1, 0xfa, 0x68, 0x69, 0x13, 0x41, 0x4e, 0x18, + 0xb1, 0x5d, 0xdf, 0x89, 0xdf, 0x13, 0x83, 0x14, 0x8a, 0xd7, 0xa8, 0x0b, 0x55, 0xc2, 0xad, 0x0b, + 0x57, 0x50, 0x4b, 0x44, 0x9c, 0xaa, 0xaa, 0xba, 0x3a, 0x6f, 0x65, 0xa7, 0x37, 0x5a, 0x73, 0x60, + 0xbc, 0x20, 0x6a, 0x74, 0xa1, 0x3a, 0xcf, 0x5d, 0x9c, 0xb0, 0xca, 0xb0, 0xd1, 0xea, 0xb5, 0xf7, + 0x5e, 0x68, 0x39, 0xb5, 0xc4, 0xbd, 0xbd, 0x17, 0xf1, 0x94, 0xd5, 0xc2, 0x3d, 0xf3, 0xdd, 0x9e, + 0x56, 0xc8, 0xd6, 0xfb, 0xda, 0xba, 0xf1, 0xcf, 0x3c, 0x40, 0x77, 0x90, 0xf6, 0x30, 0x74, 0x0c, + 0x35, 0x9b, 0xfd, 0xc5, 0xf7, 0x18, 0xb1, 0xcd, 0x09, 0xb3, 0xd3, 0x01, 0x63, 0x79, 0xc8, 0x9c, + 0x49, 0x34, 0xda, 0x09, 0xbc, 0xc7, 0x6c, 0x8a, 0xab, 0xf6, 0xdc, 0x0e, 0x75, 0xa0, 0x12, 0x05, + 0x33, 0x55, 0x79, 0xa5, 0xea, 0x8b, 0x4f, 0xab, 0x3a, 0x0d, 0x32, 0x45, 0x10, 0x65, 0x6b, 0xe3, + 0x04, 0xaa, 0xf3, 0x87, 0x20, 0x04, 0x5b, 0xed, 0xc1, 0x77, 0xfd, 0x93, 0x41, 0xab, 0x6d, 0x76, + 0x5a, 0x6f, 0xd5, 0x74, 0xf1, 0x19, 0x6c, 0x67, 0xb4, 0xd1, 0x18, 0x77, 0x5a, 0x3d, 0x2d, 0x17, + 0x13, 0xcd, 0xfe, 0x60, 0x6c, 0xa6, 0x3c, 0x2d, 0x6f, 0x74, 0x00, 0x66, 0xe7, 0x48, 0x5d, 0xa7, + 0x43, 0x25, 0x35, 0xe8, 0x9b, 0x9d, 0xdf, 0x75, 0xc7, 0xda, 0x1a, 0xd2, 0xa0, 0x9a, 0xd0, 0x62, + 0xed, 0x39, 0x54, 0x87, 0x5a, 0xa2, 0x28, 0x66, 0x68, 0x79, 0xe3, 0xef, 0x79, 0xa8, 0xaf, 0xbc, + 0xb7, 0x4c, 0x14, 0xea, 0xcb, 0x2e, 0x6a, 0x27, 0xf3, 0x4b, 0xba, 0x45, 0x0f, 0x00, 0x5c, 0x3f, + 0x88, 0x84, 0x19, 0x10, 0x71, 0x91, 0xe4, 0x71, 0x59, 0x51, 0x86, 0x44, 0x5c, 0xa0, 0x9f, 0x41, + 0x85, 0x45, 0x22, 0xe3, 0xc7, 0xa3, 0x17, 0xc4, 0x24, 0x05, 0xe8, 0x42, 0xf1, 0x9c, 0xf1, 0x09, + 0x89, 0xe7, 0x97, 0xad, 0xe6, 0xf3, 0x9b, 0x62, 0xaf, 0x71, 0x12, 0x7f, 0xe5, 0xf4, 0x48, 0xf0, + 0x46, 0x09, 0xe2, 0x44, 0x01, 0x7a, 0x09, 0x15, 0x97, 0x99, 0x61, 0xe2, 0xf5, 0xa4, 0x83, 0xdc, + 0xfb, 0xe4, 0xb3, 0x60, 0x70, 0x59, 0xba, 0x36, 0x9e, 0x83, 0xb6, 0xac, 0x17, 0x6d, 0xc2, 0xfa, + 0x6f, 0x47, 0x03, 0x19, 0x7a, 0x9b, 0xb0, 0xfe, 0xbe, 0xd5, 0x3b, 0x89, 0x23, 0x6f, 0x88, 0x07, + 0xe3, 0x81, 0x96, 0x37, 0xfe, 0x95, 0x83, 0x62, 0xdc, 0x23, 0xd0, 0xb7, 0x73, 0xcd, 0x32, 0x77, + 0x6d, 0x0a, 0x1d, 0x1f, 0x84, 0x83, 0xb3, 0x3f, 0x53, 0x4b, 0x5c, 0xd3, 0x31, 0x9b, 0xb0, 0x29, + 0xc7, 0x86, 0x30, 0xa0, 0x56, 0x32, 0xfe, 0x7d, 0xb2, 0xed, 0x95, 0x02, 0x66, 0x8f, 0x02, 0x6a, + 0x2d, 0xe7, 0x6d, 0xe1, 0xf6, 0x79, 0x6b, 0xfc, 0x23, 0x0f, 0xf5, 0x95, 0x6b, 0xa1, 0x36, 0x14, + 0x3d, 0x72, 0x46, 0xbd, 0xf4, 0x43, 0xee, 0x97, 0x37, 0x19, 0xd2, 0x38, 0x51, 0xf0, 0xf4, 0x63, + 0x4c, 0x6d, 0xd0, 0x08, 0x2a, 0xc4, 0xf7, 0x99, 0x50, 0x83, 0x67, 0xfa, 0x45, 0xf7, 0xfc, 0x46, + 0x55, 0xad, 0x99, 0x4c, 0xac, 0x6f, 0x5e, 0x8b, 0x6c, 0x27, 0x73, 0x67, 0xdd, 0xa6, 0x9d, 0xec, + 0xbc, 0x02, 0x6d, 0x59, 0xf7, 0x6d, 0xe4, 0x8d, 0xbf, 0xe5, 0xa0, 0x30, 0xfa, 0xe0, 0xa1, 0xfb, + 0x50, 0x0e, 0x05, 0x11, 0x74, 0x42, 0x7d, 0x91, 0x48, 0xce, 0x08, 0xe8, 0x05, 0x94, 0x6c, 0x97, + 0x78, 0xd4, 0x12, 0x49, 0x4d, 0xd8, 0x59, 0x1d, 0x12, 0x1a, 0xed, 0x18, 0x81, 0x53, 0xa8, 0xb1, + 0x0f, 0xa5, 0x84, 0x26, 0xbf, 0x25, 0x4e, 0xfb, 0xed, 0xce, 0x9b, 0x6e, 0xbf, 0xd3, 0x8e, 0xc3, + 0xae, 0xd5, 0x1f, 0x75, 0xb5, 0x9c, 0x5c, 0x1d, 0x75, 0xdf, 0x75, 0xb4, 0xfc, 0xec, 0xcb, 0xa3, + 0x70, 0xf8, 0xed, 0xef, 0x5f, 0x3a, 0xae, 0xb8, 0x88, 0xce, 0x1a, 0x16, 0x9b, 0xec, 0xaa, 0x93, + 0x18, 0x77, 0xe2, 0xc5, 0x6e, 0xf6, 0xed, 0xef, 0x50, 0x7f, 0x37, 0x38, 0x7b, 0xe6, 0xb0, 0xdd, + 0x85, 0xbf, 0x03, 0xce, 0x8a, 0x2a, 0xb6, 0xbe, 0xfe, 0x21, 0x00, 0x00, 0xff, 0xff, 0x49, 0xe9, + 0x46, 0x7b, 0xad, 0x10, 0x00, 0x00, } diff --git a/flyteidl/gen/pb-go/flyteidl/core/tasks.pb.validate.go b/flyteidl/gen/pb-go/flyteidl/core/tasks.pb.validate.go index 7731c43125..4f87d15b24 100644 --- a/flyteidl/gen/pb-go/flyteidl/core/tasks.pb.validate.go +++ b/flyteidl/gen/pb-go/flyteidl/core/tasks.pb.validate.go @@ -298,6 +298,8 @@ func (m *RuntimeMetadata) Validate() error { // no validation rules for Flavor + // no validation rules for IsSyncPlugin + return nil } diff --git a/flyteidl/gen/pb-go/flyteidl/service/admin.swagger.json b/flyteidl/gen/pb-go/flyteidl/service/admin.swagger.json index 2965288df5..d549d000c0 100644 --- a/flyteidl/gen/pb-go/flyteidl/service/admin.swagger.json +++ b/flyteidl/gen/pb-go/flyteidl/service/admin.swagger.json @@ -6666,7 +6666,12 @@ }, "flavor": { "type": "string", - "description": "+optional It can be used to provide extra information about the plugin type (e.g. async plugin, sync plugin... etc.)." + "description": "+optional It can be used to provide extra information about the runtime (e.g. python, golang... etc.)." + }, + "is_sync_plugin": { + "type": "boolean", + "format": "boolean", + "description": "+optional It can be used to decide use sync plugin or async plugin during runtime." } }, "description": "Runtime information. This is loosely defined to allow for extensibility." diff --git a/flyteidl/gen/pb-go/flyteidl/service/agent.swagger.json b/flyteidl/gen/pb-go/flyteidl/service/agent.swagger.json index f71c404135..926d18fef2 100644 --- a/flyteidl/gen/pb-go/flyteidl/service/agent.swagger.json +++ b/flyteidl/gen/pb-go/flyteidl/service/agent.swagger.json @@ -759,7 +759,12 @@ }, "flavor": { "type": "string", - "description": "+optional It can be used to provide extra information about the plugin type (e.g. async plugin, sync plugin... etc.)." + "description": "+optional It can be used to provide extra information about the runtime (e.g. python, golang... etc.)." + }, + "is_sync_plugin": { + "type": "boolean", + "format": "boolean", + "description": "+optional It can be used to decide use sync plugin or async plugin during runtime." } }, "description": "Runtime information. This is loosely defined to allow for extensibility." diff --git a/flyteidl/gen/pb-go/flyteidl/service/external_plugin_service.swagger.json b/flyteidl/gen/pb-go/flyteidl/service/external_plugin_service.swagger.json index 0ccc813ddd..ddbe2f1f66 100644 --- a/flyteidl/gen/pb-go/flyteidl/service/external_plugin_service.swagger.json +++ b/flyteidl/gen/pb-go/flyteidl/service/external_plugin_service.swagger.json @@ -698,7 +698,12 @@ }, "flavor": { "type": "string", - "description": "+optional It can be used to provide extra information about the plugin type (e.g. async plugin, sync plugin... etc.)." + "description": "+optional It can be used to provide extra information about the runtime (e.g. python, golang... etc.)." + }, + "is_sync_plugin": { + "type": "boolean", + "format": "boolean", + "description": "+optional It can be used to decide use sync plugin or async plugin during runtime." } }, "description": "Runtime information. This is loosely defined to allow for extensibility." diff --git a/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/api/swagger.yaml b/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/api/swagger.yaml index 22b501d122..28bee081ed 100644 --- a/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/api/swagger.yaml +++ b/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/api/swagger.yaml @@ -15752,6 +15752,7 @@ definitions: discoverable: true runtime: flavor: "flavor" + is_sync_plugin: true type: {} version: "version" cache_serializable: true @@ -16022,6 +16023,7 @@ definitions: discoverable: true runtime: flavor: "flavor" + is_sync_plugin: true type: {} version: "version" cache_serializable: true @@ -21299,6 +21301,7 @@ definitions: discoverable: true runtime: flavor: "flavor" + is_sync_plugin: true type: {} version: "version" cache_serializable: true @@ -21585,6 +21588,7 @@ definitions: discoverable: true runtime: flavor: "flavor" + is_sync_plugin: true type: {} version: "version" cache_serializable: true @@ -22284,6 +22288,7 @@ definitions: discoverable: true runtime: flavor: "flavor" + is_sync_plugin: true type: {} version: "version" cache_serializable: true @@ -22564,6 +22569,7 @@ definitions: discoverable: true runtime: flavor: "flavor" + is_sync_plugin: true type: {} version: "version" cache_serializable: true @@ -30856,6 +30862,7 @@ definitions: discoverable: true runtime: flavor: "flavor" + is_sync_plugin: true type: {} version: "version" cache_serializable: true @@ -31126,6 +31133,7 @@ definitions: discoverable: true runtime: flavor: "flavor" + is_sync_plugin: true type: {} version: "version" cache_serializable: true @@ -43542,6 +43550,7 @@ definitions: discoverable: true runtime: flavor: "flavor" + is_sync_plugin: true type: {} version: "version" cache_serializable: true @@ -43812,6 +43821,7 @@ definitions: discoverable: true runtime: flavor: "flavor" + is_sync_plugin: true type: {} version: "version" cache_serializable: true @@ -56175,6 +56185,7 @@ definitions: discoverable: true runtime: flavor: "flavor" + is_sync_plugin: true type: {} version: "version" cache_serializable: true @@ -56445,6 +56456,7 @@ definitions: discoverable: true runtime: flavor: "flavor" + is_sync_plugin: true type: {} version: "version" cache_serializable: true @@ -68587,6 +68599,7 @@ definitions: discoverable: true runtime: flavor: "flavor" + is_sync_plugin: true type: {} version: "version" cache_serializable: true @@ -68857,6 +68870,7 @@ definitions: discoverable: true runtime: flavor: "flavor" + is_sync_plugin: true type: {} version: "version" cache_serializable: true @@ -74877,6 +74891,7 @@ definitions: discoverable: true runtime: flavor: "flavor" + is_sync_plugin: true type: {} version: "version" cache_serializable: true @@ -87047,6 +87062,7 @@ definitions: discoverable: true runtime: flavor: "flavor" + is_sync_plugin: true type: {} version: "version" cache_serializable: true @@ -87317,6 +87333,7 @@ definitions: discoverable: true runtime: flavor: "flavor" + is_sync_plugin: true type: {} version: "version" cache_serializable: true @@ -95170,10 +95187,16 @@ definitions: flavor: type: "string" description: "+optional It can be used to provide extra information about\ - \ the plugin type (e.g. async plugin, sync plugin... etc.)." + \ the runtime (e.g. python, golang... etc.)." + is_sync_plugin: + type: "boolean" + format: "boolean" + description: "+optional It can be used to decide use sync plugin or async\ + \ plugin during runtime." description: "Runtime information. This is loosely defined to allow for extensibility." example: flavor: "flavor" + is_sync_plugin: true type: {} version: "version" coreScalar: @@ -95807,6 +95830,7 @@ definitions: discoverable: true runtime: flavor: "flavor" + is_sync_plugin: true type: {} version: "version" cache_serializable: true @@ -95983,6 +96007,7 @@ definitions: discoverable: true runtime: flavor: "flavor" + is_sync_plugin: true type: {} version: "version" cache_serializable: true @@ -108993,6 +109018,7 @@ definitions: discoverable: true runtime: flavor: "flavor" + is_sync_plugin: true type: {} version: "version" cache_serializable: true @@ -109263,6 +109289,7 @@ definitions: discoverable: true runtime: flavor: "flavor" + is_sync_plugin: true type: {} version: "version" cache_serializable: true diff --git a/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/model_core_runtime_metadata.go b/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/model_core_runtime_metadata.go index f0bb33480b..88d8551e9d 100644 --- a/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/model_core_runtime_metadata.go +++ b/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/model_core_runtime_metadata.go @@ -15,6 +15,8 @@ type CoreRuntimeMetadata struct { Type_ *RuntimeMetadataRuntimeType `json:"type,omitempty"` // Version of the runtime. All versions should be backward compatible. However, certain cases call for version checks to ensure tighter validation or setting expectations. Version string `json:"version,omitempty"` - // +optional It can be used to provide extra information about the plugin type (e.g. async plugin, sync plugin... etc.). + // +optional It can be used to provide extra information about the runtime (e.g. python, golang... etc.). Flavor string `json:"flavor,omitempty"` + // +optional It can be used to decide use sync plugin or async plugin during runtime. + IsSyncPlugin bool `json:"is_sync_plugin,omitempty"` } diff --git a/flyteidl/gen/pb-go/flyteidl/service/openapi.go b/flyteidl/gen/pb-go/flyteidl/service/openapi.go index cf2b68c8de..79ad385bd4 100644 --- a/flyteidl/gen/pb-go/flyteidl/service/openapi.go +++ b/flyteidl/gen/pb-go/flyteidl/service/openapi.go @@ -78,7 +78,7 @@ func (fi bindataFileInfo) Sys() interface{} { return nil } -var _adminSwaggerJson = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\xfd\x7b\x73\xeb\xb8\x95\x2f\x0c\xff\x3f\x9f\x02\x67\xcf\xa9\xea\xee\x44\xb6\x3b\xc9\x4c\xde\x94\xa7\x4e\xbd\x8f\xda\xd6\xde\xad\xd3\xbe\xc5\x97\xee\xe9\x67\x94\x52\x43\x24\x24\x21\x26\x01\x06\x00\xed\xad\x4e\xe5\xbb\x3f\x85\x85\x0b\x41\x8a\x94\xa8\x8b\x6d\x79\x37\x67\xaa\xd2\xde\x22\x89\xeb\xc2\xc2\xba\xfe\xd6\x3f\xff\x0d\xa1\x0f\xf2\x19\xcf\x66\x44\x7c\x38\x45\x1f\xfe\x78\xfc\xed\x87\x9e\xfe\x8d\xb2\x29\xff\x70\x8a\xf4\x73\x84\x3e\x28\xaa\x12\xa2\x9f\x4f\x93\x85\x22\x34\x4e\x4e\x24\x11\x4f\x34\x22\x27\x38\x4e\x29\x3b\xce\x04\x57\x1c\x3e\x44\xe8\xc3\x13\x11\x92\x72\xa6\x5f\xb7\x7f\x22\xc6\x15\x92\x44\x7d\xf8\x37\x84\xfe\x05\xcd\xcb\x68\x4e\x52\x22\x3f\x9c\xa2\xff\x31\x1f\xcd\x95\xca\x5c\x03\xfa\x6f\xa9\xdf\xfd\x1b\xbc\x1b\x71\x26\xf3\xd2\xcb\x38\xcb\x12\x1a\x61\x45\x39\x3b\xf9\xbb\xe4\xac\x78\x37\x13\x3c\xce\xa3\x96\xef\x62\x35\x97\xc5\x1c\x4f\x70\x46\x4f\x9e\xfe\x70\x82\x23\x45\x9f\xc8\x38\xc1\x39\x8b\xe6\xe3\x2c\xc1\x4c\x9e\xfc\x93\xc6\x7a\x8e\x7f\x27\x91\xfa\x17\xfc\x23\xe6\x29\xa6\xcc\xfc\xcd\x70\x4a\xfe\xe5\xdb\x41\xe8\xc3\x8c\xa8\xe0\x9f\x7a\xb6\x79\x9a\x62\xb1\xd0\x2b\xf2\x91\xa8\x68\x8e\xd4\x9c\x20\xd3\x0f\x72\x4b\xc4\xa7\x08\xa3\x53\x41\xa6\xa7\xbf\x08\x32\x1d\xbb\x85\x3e\x36\x0b\x7c\x01\xa3\xb9\x49\x30\xfb\xe5\xd8\x2e\x13\xb4\xcc\x33\x22\x60\x6e\xc3\x58\xb7\xfe\x89\xa8\x3e\x34\x5b\xbc\x1f\xbe\x2d\x88\xcc\x38\x93\x44\x96\x86\x87\xd0\x87\x3f\x7e\xfb\x6d\xe5\x27\x84\x3e\xc4\x44\x46\x82\x66\xca\xee\x65\x1f\xc9\x3c\x8a\x88\x94\xd3\x3c\x41\xae\xa5\x70\x30\x66\xaa\x7a\x63\xf1\x52\x63\x08\x7d\xf8\xdf\x82\x4c\x75\x3b\xff\x7e\x12\x93\x29\x65\x54\xb7\x2b\x0d\xfd\x04\xa3\x2d\x7d\xf5\xaf\x7f\xab\xfb\xfb\x5f\xc1\x8c\x32\x2c\x70\x4a\x14\x11\xc5\x8e\x9b\xff\xab\xcc\x45\xef\x91\xee\xbc\xd8\xc7\xea\xc0\x2b\xb3\xbd\xc2\x29\xd1\x7b\xa2\x77\xca\x7e\x01\x7f\x0b\x22\x79\x2e\x22\x82\x26\x24\xe1\x6c\x26\x91\xe2\x4b\x6b\x40\xa1\x05\x4d\x5e\xd5\x27\x82\xfc\x23\xa7\x82\xe8\xbd\x52\x22\x27\x95\xa7\x6a\x91\xc1\x20\xa5\x12\x94\xcd\xc2\xa5\xf8\x57\xaf\xd5\xd4\x0c\x55\x6e\x30\x33\xf3\x41\xe3\xc4\x46\xac\xef\x5e\x89\x30\x43\x13\x82\xf4\x59\xa4\x31\x11\x24\x46\x58\x22\x8c\x64\x3e\x91\x44\xa1\x67\xaa\xe6\x94\xe9\x7f\x67\x24\xa2\x53\x1a\xb9\x35\x3b\x9c\xb5\x81\x3f\x57\xaf\xcc\x83\x24\x42\x0f\xfc\x89\xc6\x24\x46\x4f\x38\xc9\x09\x9a\x72\x51\x5a\x9e\xe3\x11\xbb\x9f\xeb\x75\x48\x27\x94\xc1\xc9\xd3\x6b\xe9\x28\xe4\xf7\x6e\xb9\x7e\x8f\x74\x7f\x28\x67\xf4\x1f\x39\x49\x16\x88\xc6\x84\x29\x3a\xa5\x44\x56\x5b\xfb\x3d\x87\xfe\x71\x82\x8e\x90\x5e\x67\x22\x14\xac\x37\x67\x8a\x7c\x56\x12\x1d\xa1\x84\x3e\x12\xf4\xd5\x05\x95\x0a\xf5\x6f\x86\x5f\xf5\xd0\x57\xe6\xbc\x20\xe0\x4d\x5f\xbd\xc2\x0a\xfb\xbf\xff\x16\x1c\x3d\x85\x67\xd5\x43\xf7\xa1\xaf\x4f\xf3\x9d\xb9\x1a\x8a\x16\xfe\xf6\x6f\x61\x3b\x76\xbf\x56\xf3\xdb\x82\xd9\x5a\x4e\xdb\x96\xbf\xc2\x32\x95\x59\xab\xd4\x3b\xb4\x2b\x67\xd5\xed\x56\x59\xab\x7c\x5f\xbc\x55\x4f\xe1\xa5\xf9\xeb\x2e\xcc\x15\x2b\xa0\x7a\x4c\x99\x39\x24\xfe\xcc\x08\xa9\xcf\x89\xa3\xde\x03\x61\x29\xbb\xf0\xda\x60\x66\x01\xbb\x75\x5c\x34\x58\x95\x03\x9c\x77\x42\x53\xba\x6e\x7f\x87\x2c\xd6\x22\x97\x65\x76\x2c\x4f\x27\x44\xe8\x65\x70\x6c\x0f\x66\x3b\xd1\x6c\x50\xe5\x82\x91\xb8\xc5\x34\xff\x91\x13\xb1\x58\x31\xcf\x29\x4e\x64\xd3\x44\x29\x53\x44\xcb\xb7\x95\xc7\x53\x2e\x52\xac\xec\x0b\x7f\xfe\x8f\x4d\x17\x42\xf1\x47\xb2\x6e\xff\x87\x66\x37\x23\x2c\x81\x0c\xd2\x3c\x51\x34\x4b\x08\xca\xf0\x8c\x48\xbb\x22\x79\xa2\x64\x0f\x5e\xd3\x32\x35\x11\x47\xfe\x06\x82\x1e\xdc\xcd\x9b\x4b\xf8\x05\x4d\xbd\x00\xc9\xc8\x67\x05\x2d\x8d\x18\xdc\xbd\xb0\x44\xe1\x8d\xf2\x02\x4b\xb9\x1d\xcd\x48\x2e\xd4\x78\xb2\x38\x7e\x24\x4b\xfd\x36\x52\x0e\x66\x08\x2b\x25\xe8\x24\x57\x44\xcf\x5b\xb7\xe1\xee\x4e\x60\x8f\xe6\x82\x6e\xc3\x1a\xde\x6e\xc2\x31\x15\x24\x82\xb9\x6d\x72\x60\xfc\x57\x7a\xde\x5a\x7f\x59\x98\xd9\x3f\x92\x05\xc8\x23\x35\x2b\xe0\xb7\x7c\xc4\x46\x0c\x1d\xa1\xf3\xc1\xdd\xd9\xe0\xea\x7c\x78\xf5\xe9\x14\x7d\xb7\x40\x31\x99\xe2\x3c\x51\x3d\x34\xa5\x24\x89\x25\xc2\x82\x40\x93\x24\xd6\x32\x87\x1e\x0c\x61\x31\x65\x33\xc4\x45\x4c\xc4\xcb\x2d\x63\xe5\x29\x61\x79\x5a\xb9\x57\xe0\xf7\x62\xf4\x95\x2f\xb4\x88\xe1\x1f\x95\x9e\xfc\x6d\x69\x81\x61\xc6\xba\xef\xa0\xb5\x57\x13\x6a\xa2\x39\x4d\x62\x41\xd8\x89\xc2\xf2\x71\x4c\x3e\x93\x28\x37\x77\xf2\x3f\xcb\x3f\x8c\xb5\x64\xca\x63\x52\xfe\xa5\xf4\x8f\x42\x14\xda\xf8\x53\xaf\xa5\x6e\xfc\x25\xe8\xb4\xed\xbe\x83\x5f\x68\x5c\xfb\x36\xfc\xb2\x66\x0e\xee\x9d\x15\x83\x75\xaf\x34\x8e\xca\xbd\x60\x25\xbe\xda\x77\x04\x51\x62\x31\xc6\x4a\x91\x34\x53\x1b\xea\xeb\x18\x25\x5a\xae\x5c\x25\x47\x5e\xf1\x98\x0c\x5c\x7f\xbf\x20\x23\xce\x92\x18\x4d\x16\x96\x6b\x4d\x89\x20\x2c\x22\xcd\x2d\xdc\x63\xf9\x58\xb4\xb0\x4e\x18\x2d\xf5\x27\x3f\x72\xa1\x3f\x7f\x0f\x02\x69\x69\xe0\xaf\x21\x93\x6e\x7b\xe2\xbe\x38\x0b\xc1\x96\xfc\xa3\xb3\x27\xec\xbe\x92\x6d\xad\x0f\x5c\x20\xb9\x90\x8a\xa4\x6b\xed\x10\xef\x67\x21\xec\x05\x71\xa8\x03\xae\xdc\x51\xbf\x81\x53\x5f\xbe\x71\xbb\xe3\xbd\xc1\x92\xed\xcb\x8a\x78\xe8\xf3\x74\x3e\x9c\xd5\x53\xbd\x73\xdb\x17\x38\x31\xde\xc5\x34\x4b\xb2\xe0\xbe\x07\xf9\x42\xe6\x86\xc6\xbd\x72\xab\x3d\x86\x01\xac\x51\x34\xcb\x76\x68\x7f\xfe\xf4\xa7\xa1\x85\xc6\x98\xe3\xd4\x9c\xca\xc0\x58\x85\x22\x2e\x8c\x2c\x18\xdb\xf3\x6e\x74\xcd\xfe\x7d\xff\x6e\x70\x7f\x8a\xfa\x28\xc6\x0a\xeb\x03\x2e\x48\x26\x88\x24\x4c\x81\x1e\xaf\xbf\x57\x0b\x94\xf2\x98\x24\x46\xe3\xfc\xa8\x25\x5f\x74\x8e\x15\x3e\xc3\x0a\x27\x7c\x76\x8c\xfa\xf0\x4f\xfd\x31\x95\x08\x27\x92\x23\xec\xc8\x8a\xc4\xae\x09\xcc\x62\xc7\x5a\x30\x8a\x78\x9a\xd1\xc4\xdb\xe0\xbd\x71\x85\xb2\x98\x3e\xd1\x38\xc7\x09\xe2\x13\xcd\x55\xb4\x86\x3c\x78\x22\x4c\xe5\x38\x49\x16\x08\x27\x09\xb2\xdd\xba\x17\x90\x9c\xf3\x3c\x89\x75\xbb\x6e\x94\x92\xa6\x34\xc1\x42\xab\xe0\x66\xb4\xd7\xb6\x2d\x74\x3f\x27\x7e\xac\x30\x2e\xbd\x9a\x29\x7e\x24\x12\x51\x85\x32\x2e\x25\x9d\x24\xc5\x99\x7f\x18\x22\x18\xf7\xd9\xc5\x10\xf4\xf9\x48\x21\x6e\x78\xa8\xeb\xdc\xda\x6f\x5c\x8f\x29\x66\x8c\x40\xc7\x5c\xcd\x89\xb0\xdd\xdb\x97\xdf\x5a\x35\x7f\xb8\xba\xbb\x19\x9c\x0d\x3f\x0e\x07\xe7\xcb\xba\xf9\x7d\xff\xee\x87\xe5\x5f\x7f\xba\xbe\xfd\xe1\xe3\xc5\xf5\x4f\xcb\x4f\x2e\xfa\x0f\x57\x67\xdf\x8f\x6f\x2e\xfa\x57\xcb\x0f\x2d\x59\xb5\x56\xf3\xc3\x91\x6d\x78\xb6\x3a\x9b\xe6\x4b\xd9\x34\x7b\x5f\xae\x51\x73\x4a\x13\xd0\x41\x5b\x1b\x34\xbd\x0d\xc1\x7e\x89\x32\x2c\xa5\x91\x8c\xcc\x08\x8e\x47\xec\x92\x0b\xcd\xc0\xa6\x5c\xf3\x08\x2d\x3d\x29\x91\x47\x8a\xb2\x99\xff\xe8\x14\x8d\xf2\x6f\xbf\xfd\x53\x74\x41\xd9\x23\xfc\x45\x0e\x71\x71\x3a\x8b\x6f\x67\xf1\xfd\x6d\x59\x7c\xb5\xe8\x73\x12\x1a\x7a\xf7\x1b\x32\xa4\x85\x0b\x96\xe5\x0a\x44\x09\x9e\x2b\xfd\xa7\xee\x12\xc8\x63\x45\xe0\x50\x3b\x83\xe2\x27\xa2\xfc\x8b\x5a\xb4\x79\x0f\x76\xc4\x9f\xb8\x78\x9c\x26\xfc\xd9\x0f\xfc\x13\x51\x7a\xec\xb7\xb6\x97\x2e\x94\xa8\x0b\x25\x7a\xdb\x50\xa2\x83\x32\xe6\xbd\x3c\xf3\x2b\x5b\xfe\x0c\x07\x6c\xf0\x64\x35\x3a\xaa\x1a\xfc\x50\x81\x9b\xe9\x55\xb8\x66\xd9\x99\xb3\x86\x73\x96\x5e\x7e\x2f\xdc\xb3\x34\xe8\xd7\xe7\x9c\xbf\x09\x7f\x4b\xe7\x4e\xd9\x72\xa1\xde\x25\x83\x6d\x79\x77\xbc\x9a\x33\xe4\xe5\x19\xfe\x52\x6c\xc3\x26\xc1\x0c\x1b\x44\x2f\xb4\x0e\x57\x58\x13\x9f\x50\x1b\x90\x50\x17\x81\xb0\x1c\x72\x50\x1b\x63\xb0\x5b\x50\xc1\xb6\x77\x53\xfb\x30\x81\x4f\x44\x95\x5e\x7e\x2f\x77\x53\x69\xd0\xaf\x7f\x37\xfd\x46\xa3\x03\xba\x70\x80\x17\x5c\xba\x2f\xfd\x46\x3b\x5c\x87\xff\x6f\xc0\xc3\xdf\xb9\xf4\x37\x5a\xa3\x2f\xcb\x87\xff\xa5\x3a\xed\xdf\xa7\x97\xbe\x73\xcb\x77\x6e\xf9\xb7\xf0\x9f\xbc\x3f\xb7\xfc\xcb\xaa\xa7\xc5\xf1\x1a\x3b\x5a\xb0\xfa\x5a\x70\x28\xff\xd5\xc2\x49\x03\x7f\x39\x95\x6f\xd3\xa0\xf1\x46\x1d\xee\xbc\x18\xdf\x00\x8e\xd0\x2f\x96\x90\xd6\xa8\x73\x4b\xdf\xbd\x07\x75\x6e\x79\xd0\x2f\xaf\xc3\xbd\x19\xf3\x7d\xa1\xcb\xf3\x9d\xb0\x81\xcd\x6f\xcb\x2f\x58\x26\xef\x64\xf1\x97\xcf\xc6\x3f\x98\x09\xbd\x1f\xd9\xfb\x0d\x2e\xde\x96\xb7\xee\xde\x73\xb2\x6a\xae\xd9\xe0\x76\x5a\x97\x61\x55\xfd\x9a\x12\xf9\xc7\x77\x79\xdf\xbe\x46\x92\x55\x77\xe1\x76\x17\xae\x6d\xaa\xbb\x70\xbf\xe0\x0b\xf7\xe0\xe0\x6f\x0e\x26\x02\xb4\x0b\x22\xef\x80\x31\xba\x18\xf2\x3d\x2e\x4e\x17\x43\xde\xc5\x90\xff\xc6\x62\xc8\x77\xd1\x9e\xb6\xc5\xa2\x7c\x0b\x3d\xaa\x53\xa3\x3a\x35\x2a\xfc\xbd\x53\xa3\x3a\x35\xaa\x53\xa3\xbe\x70\x14\xd1\x4e\x87\x6a\xbf\x10\x9d\x0e\xd5\x7a\xa9\x3a\x1d\x6a\xc5\xe2\x74\x3a\x54\xa7\x43\xfd\xb6\x74\x28\xf2\x44\x98\x92\x90\x8c\x16\x6a\x14\x1f\x32\x2e\x9b\x35\xa1\x90\x3b\xd4\x68\x41\xd0\x66\x39\x29\x0c\x02\x97\x7e\x41\x73\x2c\x11\x8f\xa2\x5c\x54\xce\x40\x55\x0f\x3a\x13\x04\x2b\x02\x2d\xe8\x0f\xdf\x83\xfe\xb3\x3c\xdd\xd7\x8a\xc1\x9f\xf0\x78\x89\xda\xcd\x41\xa8\x7b\xb2\x5a\x1e\xd9\xdb\xd4\xff\x91\x93\x76\xea\xdf\x0b\x12\xb5\xc2\xf2\x71\xcf\x44\x5d\xca\xb5\xd8\x8a\xa8\xa1\x85\xf7\x42\xd4\xcb\xd3\xfd\xcd\x10\x75\xdd\xd4\x0f\x81\xa8\x9f\x6d\x1e\xff\x9e\x09\x7b\x09\x1e\x60\x2b\xe2\xf6\xad\xbc\x17\x02\xaf\x9f\xf6\x6f\x86\xc8\x9b\xa6\xff\xb6\x84\xee\x53\x24\x5b\x93\xf8\xbd\xa0\xb3\x99\x56\x33\x40\xc3\xd3\xa4\xb8\xbe\x46\x50\x91\x14\xb8\x96\xac\xfd\xab\xef\x81\xa4\xfd\x60\xcd\xd8\x7f\x33\xb4\xbc\x34\xef\x03\x21\xe2\x13\x41\x22\xfe\x04\xf5\xc2\xda\x11\xf3\x2d\x01\x0a\x06\x7e\x9d\x09\xf2\x44\x79\x2e\x93\xc5\x91\xc8\x19\x72\xcc\x1f\xf9\xe6\x8d\xb5\xfa\x99\x26\x09\xe2\x4c\xeb\x5f\x0a\x0b\xe5\x1e\x6b\xfd\x5b\xf0\x14\x4e\x45\x82\xa5\x42\x8f\x8c\x3f\x33\x34\xc5\x34\xc9\x05\x41\x19\xa7\x4c\x1d\x8f\xd8\x90\xa1\x5b\x33\x46\xc8\x1b\xe8\xa1\x5c\xea\xb3\x14\x61\xc6\xb8\x42\xd1\x1c\xb3\x19\x41\x98\x2d\x6c\x02\x6e\x41\x19\x88\x0b\x94\x67\x31\xd6\x8a\xef\x9c\x54\xa3\xf4\xfc\x18\xc1\x7c\x47\x25\xa2\x12\x91\xcf\x4a\x90\x94\x24\x0b\xdd\x87\xa6\x7d\xc5\x91\x5d\x1f\x33\x54\x9b\xce\x47\x84\xe0\x42\x42\xc6\xc1\x64\xf1\x2b\x66\x8a\x32\x82\x40\x51\x92\xc6\x34\x77\x84\x2e\xb8\x04\xb3\xcd\x0f\x7f\x91\x28\x4a\x72\xa9\x88\xe8\xa1\x49\x3e\x93\x5a\x53\xcc\x12\xac\xa6\x5c\xa4\x7a\x84\x94\x49\x85\x27\x34\xa1\x6a\xd1\x43\x29\x8e\xe6\xa6\x2d\x58\x03\xd9\x1b\xb1\x98\x3f\x33\xa9\x04\xc1\xbe\x77\xf7\x10\x7d\x1d\x3e\x33\x04\x20\xbf\xe9\x41\xda\x21\x4d\xb5\xba\x1b\x0c\xbf\xd8\x71\xb3\x27\xba\x11\x12\xa3\x09\x89\x70\x2e\xad\x87\x41\x89\x05\x22\x9f\xe7\x38\x97\xb0\x77\x7a\x7a\x36\x67\x23\xe2\x69\x96\x10\x45\x10\x9d\x22\x25\x28\x89\x11\x9e\x61\xaa\x97\xee\x8e\xac\x00\x41\xf7\x44\x6f\x37\xd0\x52\xfd\x2f\xa0\x7e\xa7\x5c\x10\x14\x13\x85\x69\xb2\xd2\xeb\x64\xbf\xed\xb8\xdc\x7b\xe2\x72\xe5\x0d\x3f\x08\x36\x67\x40\xfc\xf7\x70\x69\x33\x6b\xba\x8f\x70\xb2\xe3\xfd\x7d\x6b\x07\xd5\xd1\xf6\xfb\xa2\x6d\xb3\x6b\x87\x43\xdc\xaf\x16\x83\xdd\xbe\xa2\x45\x51\xcd\xe2\x5d\xd1\xf4\x6b\x84\x05\x74\x0e\xe7\xce\xe1\xdc\xb8\x32\xef\xd3\xe1\x7c\x30\x1e\xa3\xce\xe7\xfc\x42\x3e\x67\x2a\x3b\xa7\x73\xe7\x74\x6e\xbb\x40\x9d\xd3\xb9\x73\x3a\xbf\x5f\xa7\xf3\x4b\xe2\x3e\xef\x15\xdd\xf9\x5d\x89\xd6\x9d\x58\xdd\x89\xd5\x1d\x84\xb3\x9f\xda\xbe\x58\x98\xfb\xfa\x43\x4c\x12\xa2\x48\xb3\x3d\x8b\x88\x54\x6b\x0b\xe6\x7a\xa6\x4c\xcb\x71\x33\x41\xa4\xdc\x95\x21\xf9\x86\xdf\x27\x5b\xf2\xc3\xef\xa0\xe6\x3b\x3e\xd5\xf1\xa9\x6d\xa6\x76\x38\xa6\xd9\xe0\x30\xbf\x96\x6d\xd6\xf3\xdf\x2c\x6f\x96\xfe\x1e\x8c\x1b\xb2\xf0\x8b\x1a\x0a\xd7\x52\xbb\xe2\xfe\x70\x5b\x3a\xdf\x91\x1f\x9b\xbe\xde\x27\x33\x36\x63\xef\x38\x71\xc7\x89\x3b\x4e\xfc\xbe\x39\xb1\x3b\xc9\x6f\xea\x22\x33\x7e\xba\x71\x96\x60\x36\xa6\xb1\x3c\xf9\x67\xa1\xcb\xbf\x94\x87\x4c\x1f\xa8\xd8\xa4\x98\xfa\x94\x4e\xf1\x8b\xfe\x24\x29\x0c\xe6\x1e\x33\x73\x8d\x13\xcd\xd8\xd8\x6f\x12\xcc\x86\xf1\xbb\xf0\xa3\xd5\xce\xfe\x35\x7c\x6a\xbb\xf0\x71\xac\xc0\xd3\x81\x29\x33\x26\xbc\x22\xaf\xb6\x64\xa0\x3c\x8c\x13\xbe\x0b\x57\x0f\x26\x16\x30\x76\xc7\xaf\x83\x45\x39\xbc\x69\x77\x7e\x9d\x2e\x97\xb0\xf3\x5c\xb4\x9c\x70\xe7\xb9\x38\x5c\xcf\xc5\x5b\xb9\x23\x5f\xf9\x78\xbe\x96\x58\xd7\x3e\x08\xdf\x44\xab\x41\x50\x6b\x9e\x25\x1c\xc7\xab\x5c\x31\x85\xe0\x15\x82\xa3\xac\x8d\xc4\x2f\x3e\x7b\x0f\xc2\x5a\x31\xda\xdf\x58\x24\xdf\xf2\xc4\x0f\x45\x4b\x79\xc5\x50\xbe\x7a\x12\xdf\x40\x25\x79\x1f\xf8\xa9\xc5\x78\xbb\xd0\xbe\xce\xa2\xf4\xf6\x16\xa5\x2e\xb4\xaf\x53\x01\x0f\x4c\x05\xec\x42\xfb\xba\xd0\xbe\x4e\x41\x5e\x3d\xed\x4e\x41\xfe\x22\x42\xfb\x5a\x89\xda\x2f\x88\xbd\xb9\xbb\xd0\xdd\xc9\xdc\xee\xbd\x4e\xe6\xee\x64\xee\x2f\x54\xe6\x3e\x8c\x15\xee\x04\xee\x4e\xe0\xee\x04\xee\x4e\xe0\xee\x04\xee\xbd\x2f\x63\x27\x70\xbf\x66\x81\xce\x7a\xa9\x7b\x4d\x92\xcd\x7b\xf5\xe5\x74\xe2\x76\x27\x6e\x1f\xb6\xb8\x7d\x30\x13\x7a\x3f\x65\x1e\xdb\xcd\xa7\x2b\x52\xde\x15\x29\xef\x8a\x94\xbf\x78\x91\x72\xf7\x75\x8b\x8c\x0f\x7b\xb8\x14\x56\xb9\x34\x80\x8f\x82\xcc\xa8\x54\xc0\xfe\xdb\xc8\x2b\xeb\x13\x3d\xde\xab\x9c\xd2\xa5\x7a\xf8\xa7\x9d\xd4\xd2\x49\x2d\xbf\x51\xa9\xe5\x80\x62\xc1\x0e\x22\x63\x25\xc5\x2a\x9a\xe3\x49\x42\xc6\xde\xe8\x23\xdb\xea\xc1\x17\x54\x2a\x89\xa2\x5c\x2a\x9e\x36\x5f\x2e\x97\xae\x87\xbe\xef\xe0\x8c\xb3\x29\x9d\xe5\xe6\x6e\x31\xe0\x9c\xc1\x89\x2e\x24\xc1\x45\x46\xd6\x79\xaa\x6a\x5a\x7f\x17\xd7\x52\xfd\xd0\x5f\xeb\x76\xda\x44\x70\x2f\x8c\x7c\x56\xea\xd6\xb2\xd6\xf8\x76\x70\x77\xfd\x70\x7b\x36\x38\x45\xfd\x2c\x4b\xa8\xb1\xbb\x1b\x52\xa0\xbf\xea\x49\x21\x85\xe5\x63\xb1\x97\xc2\x90\xb9\xc1\xb0\x05\x43\xbf\x96\x8d\xd1\x11\x3a\xbb\x78\xb8\xbb\x1f\xdc\x36\x34\x68\x09\x05\xf2\x56\x49\x9a\x25\x58\x91\x18\x3d\xe6\x13\x22\x18\xd1\xd2\x8e\x45\xba\x2d\xcc\xff\xa6\xd1\xc1\x7f\x0f\xce\x1e\xee\x87\xd7\x57\xe3\xbf\x3e\x0c\x1e\x06\xa7\xc8\x51\x9c\x6e\x56\x8f\x4b\x8f\x22\x5e\x30\x9c\x6a\x0d\x44\xff\x50\x64\xca\xfe\x23\x27\x39\x41\x58\x4a\x3a\x63\x29\x01\x44\xe0\x52\x8b\x6e\xc0\x17\xfd\xef\x06\x17\xe5\x96\xe7\x24\x84\xdf\x45\x09\x9e\x90\xc4\xfa\x23\xc0\xc4\xae\x09\x3d\x80\x2a\x36\x8e\x8a\xdc\xac\xea\x5f\x1f\xfa\x17\xc3\xfb\x9f\xc7\xd7\x1f\xc7\x77\x83\xdb\x1f\x87\x67\x83\xb1\x95\x2a\xcf\xfa\xba\xdf\x52\x4f\x56\xf8\x44\xff\xc8\x71\xa2\xb5\x13\x3e\x75\x78\xbc\xe8\x79\x4e\x18\xca\x19\x50\x9c\x51\x79\xb4\x1e\xe4\x3b\xd5\xa7\xcc\xcc\xe8\xe6\xe2\xe1\xd3\xf0\x6a\x7c\xfd\xe3\xe0\xf6\x76\x78\x3e\x38\x45\x77\x24\x01\xa5\xc0\x2d\x3a\xec\x62\x96\xe4\x33\xca\x10\x4d\xb3\x84\xe8\xd5\xc0\x36\x9b\x78\x8e\x9f\x28\x17\xf6\xe8\xce\xe8\x13\x61\x66\x1d\xe1\xcc\x42\xfb\x4e\xf8\x1e\x07\x4b\x77\x7d\xf5\x71\xf8\xe9\x14\xf5\xe3\xd8\xcf\x41\x42\x1b\x25\xca\x71\xb0\xce\x47\xe5\x61\x6b\xe6\x00\xdd\x1b\x22\xe2\x4f\x44\x08\x1a\x93\x0a\x1d\xf5\xef\xee\x86\x9f\xae\x2e\x07\x57\xf7\xb0\x62\x4a\xf0\x44\xa2\x39\x7f\x06\x53\x36\xcc\x10\x2c\xdc\x4f\x98\x26\xd0\x99\xdb\x2c\xce\xd0\xf3\x9c\x82\xfb\x03\x80\x99\x7d\xcf\x46\x3f\x13\x39\x7b\x73\xeb\x6c\xe9\xe0\x2d\xab\x2d\xd5\x93\xb4\xfc\x46\xe5\x58\xac\x7a\xa1\x44\xe5\xcb\x2f\xae\xa3\xd6\xe5\x2f\x2a\xe4\xd6\xac\xac\x2d\xd1\x4b\xf3\x4c\x8b\xbd\x6e\xad\xab\x95\xd7\xf0\xf5\xae\x59\xa2\x04\x8d\xe4\xcb\x42\x3d\x89\x9c\x29\x9a\x12\x64\x3b\xb3\x87\x73\x8f\xf0\x4f\x97\xa6\xe1\xf7\x70\xc1\x2e\x95\x72\xf8\x44\x94\x1d\x7e\xa7\x02\x76\x2a\xe0\x61\xa8\x80\xef\x2d\xdb\x3f\x26\xd9\x72\x87\x95\x89\xc1\x3b\xc6\xeb\xb5\x14\xa4\x61\xec\x89\xd6\xa2\x9a\x90\x27\x92\x80\x94\xa7\x04\xd6\x4a\xa3\x95\x5d\x26\x82\xe0\x47\x2d\xf0\xc5\xfc\x39\x94\x5c\x6a\x90\xfb\xd1\x7e\x6e\xe1\x36\x41\x1c\x7f\xfa\xe3\xeb\x5d\x16\x7a\xb9\xe3\xd7\x28\xe1\x7d\x0b\x41\x32\x2b\x31\x02\x83\x04\xfb\x5f\xac\x25\x78\xcd\x6d\x11\x7c\xf1\x1e\x2e\x8a\x70\xb8\x07\xa4\x75\xdd\x86\x4a\xb0\x63\xa1\x29\x51\x38\xc6\x0a\xeb\x43\x33\x23\xea\x18\x5d\x33\x78\x76\x8f\xe5\x63\x0f\xb9\x2b\x4f\xb3\x95\xc2\xca\xf0\x0a\xa9\xf5\xef\xc4\x80\xbf\x39\x1f\xef\xae\xef\xee\xfa\xae\x5f\x99\x2e\xcc\xb3\x61\x85\xf7\x75\x31\x6e\xe4\xf3\xda\xdf\xfd\x65\x5a\x7c\xbf\x57\xd8\xeb\x3a\xb9\xf6\x7a\xa1\x99\xca\x59\xdd\x6d\x65\xfe\xaf\xbb\xad\xba\xdb\xaa\xbb\xad\x0e\x60\x85\xdf\xdc\x61\x58\xc3\xdd\xdf\xd4\x63\xb8\x4e\x3b\xdd\x1a\xf2\xae\xd0\x46\x37\x01\xbd\xfb\xa5\x2d\xb6\x5d\xf1\x0d\x7d\x1f\x3e\xc2\x60\x92\xaf\x91\xd6\xb6\xd7\xcb\xdc\xe4\x8b\x74\xfa\xe9\x0b\xde\xf8\x1d\x02\xe1\x5e\x11\x08\x0f\x63\xae\x2f\x92\x02\xf7\x36\x16\xd3\xb7\x4f\x7b\xeb\xa0\x06\xbb\xc4\xae\x2e\xb1\x0b\x7e\xef\xa0\x06\xf7\x47\xad\x2f\x2b\x5d\xf3\x98\x8c\x2b\x51\x02\xfe\x9f\xe3\xaa\xe7\xa7\xf4\x24\x74\x03\x95\x1e\x14\x99\x6e\xd0\x3a\x8d\xf7\x59\x44\xea\x8a\xc7\xa4\x75\x24\x41\xe9\xe5\x03\x97\xc1\xdd\x3c\x8d\x2c\x5e\x1a\xf8\x0b\x4b\xe2\x0d\x5b\xfe\x25\x1a\x76\x6a\x08\xb8\xb3\xf2\xac\x5d\xa8\x2f\x35\xbe\xa0\xe0\x50\xef\xc8\x53\xd1\x8e\x8d\xbb\x98\xc6\x71\x03\x33\xaf\x7f\xee\x59\x7a\xfd\xe3\x97\xc1\x0c\x6a\xcf\xd1\xc1\xac\x12\xbe\xfd\x3e\xec\x2a\xe1\x88\x5f\xc3\xb2\xb2\x72\xef\xbf\x38\xae\xbe\x8a\x92\x3b\xde\xde\x72\xb9\xbe\x54\x0e\xdf\x41\xfc\xac\xb2\x75\x74\x18\x3a\x9d\xa9\xe5\x70\x26\xdc\x99\x5a\xde\xb5\xa9\xc5\xb8\x68\xc7\x19\x16\x84\xa9\x1a\x91\xba\x7a\x9d\xc0\xeb\x21\xe6\x82\x93\x3a\xa0\x01\xa4\x25\x5a\x64\x2f\x64\x7f\x55\x7d\x59\xb6\x17\x2b\x18\x04\x99\x90\x27\xff\x2c\xfe\xf6\xc2\x7a\xa9\x02\xc4\x8a\xe8\x24\x83\xf5\x2f\xf5\x1d\x9d\xdb\x40\xa5\xdd\x73\x25\xb1\x2a\x89\x82\x10\x44\xbd\x36\x9e\xe9\xc6\xbc\xfd\xbe\x52\x24\x97\x06\xfd\xba\xb1\x4d\xcb\x1b\xdf\xee\x00\xb9\x9d\xa1\x26\xdd\x2f\xc8\x29\xd3\xd2\x28\x9f\x16\x17\x83\x44\xcf\x34\x49\x00\x51\x04\x32\x1e\x9b\x6e\x80\xdf\x5c\xc4\x43\xe3\xce\xbf\x69\xdc\x43\x1d\x77\xa8\x63\x09\x6d\xec\xa9\xfb\xca\x99\x76\xc4\x06\xe9\xac\xa0\x0d\xad\x31\xc0\x7e\x19\x9c\xe0\x13\x51\xaf\xc5\x06\xb6\x3d\xfb\x2b\xcf\xbd\x20\x53\x22\x08\x8b\xc8\x01\x7a\xdb\x37\x09\x03\xf9\xc9\x4c\xd2\xc6\x80\x78\x28\x81\x70\xaa\x8a\x5b\x3d\xad\x24\xea\x76\x99\xe4\x5d\x26\x79\x97\x49\x5e\x3d\xea\x5d\x26\x79\x97\x49\x5e\x9b\x03\x11\x93\x84\x28\xd2\x28\x55\x9c\xc3\xe3\xb7\x92\x2a\x4c\xef\x5f\x86\x60\x61\xe6\xd2\xc9\x16\xbf\x19\xcd\xc2\x6d\xf8\x41\x68\x16\xe6\xac\xad\x33\x3f\x94\x7e\xac\x09\xb1\x7e\x75\x93\xc4\x36\x4c\xa3\x64\x97\x38\x87\xd7\xdf\x25\xeb\xa8\x0e\xbd\xb3\x51\xa0\x60\xeb\x5e\x8e\x93\x2c\x1d\x81\x76\x13\xb7\x1e\xc3\xf7\x3b\xef\x43\xe1\xa0\x4d\x74\x7f\xa8\x7c\x74\xeb\xa4\x94\x43\xb1\xd8\x7c\x41\x3c\xb2\xb3\xde\xbc\x71\xae\xc4\x12\x33\x7c\xb7\xd3\xed\x8c\x55\x9d\xb1\xaa\x33\x56\x75\xc6\xaa\xce\x58\x85\x3a\x63\xd5\xc6\xc6\xaa\x2f\x48\xa6\xea\x0c\x57\x9d\x58\xb5\xbf\xe9\x1e\xaa\x96\x79\x48\xd6\xba\xd6\x28\xe9\x45\x0e\xd5\xda\xc8\x7b\x3b\xed\x5f\xd6\x84\xdc\xdf\xb8\x11\xbc\x1f\x7e\x25\x5f\x9a\x25\xed\x12\x58\xec\x76\xf4\x8b\x8d\x2b\xee\x4a\x87\xd6\xae\x55\x17\xf6\xbc\x62\x71\xba\xb0\xe7\x2e\xec\xf9\xe0\xc2\x9e\xf7\xae\xac\x64\x5c\xae\x02\x24\x32\xa5\xb3\x56\xe6\x3f\xbb\x3b\x1b\x12\x8d\x80\x14\x0c\xca\x71\x4c\xb2\x84\x2f\xc0\x92\xb2\xe2\x3a\x77\x5d\xdc\x2c\x49\xd4\x87\x7e\xa3\xbb\x91\xbf\x96\xce\x71\x28\x32\x69\x31\xef\x83\x90\x42\x4f\xfe\x59\x49\xe7\x6f\x85\x97\xc9\x10\xf9\x4c\x25\xdc\x4a\xeb\x09\x7b\xc4\xea\x9f\x04\xa5\x0b\xed\x3d\x38\xc9\x55\x90\xbb\x27\xb5\x60\x95\x11\xa1\x16\xc1\x9b\x24\xcd\xd4\xe2\xbf\x46\x8c\x2a\xef\x61\xa3\x33\xc6\x85\xe1\x6a\xfa\xe3\x39\x66\x71\x42\x84\xbe\x54\x5d\x3b\x11\x66\x8c\x2b\x10\x37\x60\x06\x31\x7a\xa2\xd8\x08\x27\xfd\x9b\x61\x6b\x3f\xf3\x3b\x3a\x5d\xaf\x5d\xac\x6e\xcd\x5d\xf7\x29\xe1\x13\xa8\x60\x99\x97\x75\x7a\xdd\x40\xe7\x19\x2d\xed\xdc\x5b\x31\x04\x85\xe5\x63\x15\x38\xa4\x9c\x85\x3e\x5e\x09\x25\xb2\xe6\xdd\x12\xc6\xfc\xea\x57\x2b\x70\x23\xe5\x67\x16\x80\x04\x1e\xc3\x90\xab\xe3\x70\x3f\x86\x1d\xba\xdf\x8a\x96\xdd\x2f\xae\x74\x37\xfc\x28\x88\x12\x8b\x31\x56\x4a\x33\x99\x7d\x62\x9c\xdc\x63\xf9\xd8\x1a\xe3\xa4\xf4\xf2\x81\xb3\x9c\x12\xc6\x49\x79\xe0\x2f\xce\x72\x5a\x52\xe7\x1a\xce\xf4\xfe\xf2\xe3\xdb\x9e\xb5\x0d\x26\xfe\x5b\xc9\x95\x6f\xc7\x7b\xd6\x99\x69\xdf\x63\xde\xfc\x2a\x66\x7a\x30\x23\xac\xf0\xf3\x2f\xf1\xe4\x96\x6f\xa7\xee\x88\xae\x5a\xa3\x2f\xae\x10\x6e\x45\xe8\x58\x33\xb7\x77\x52\x10\xb7\x2a\x37\xed\x7b\x54\x2f\x63\xe6\x0e\x76\x63\x93\x18\xa0\x61\x19\xad\xdc\x9f\x21\x17\x15\x54\x94\x9e\x9d\x43\xa2\x35\x95\x61\x42\x7c\xc4\x85\x91\xbc\x62\x7b\x66\x8d\xd9\xce\x80\xf9\x9e\xa2\x3e\x8a\x6d\x6d\x7e\x41\x32\x41\x24\x61\xca\xa8\xda\xa6\xde\x95\x2b\xef\x4f\x99\xb5\x10\x9d\x63\x85\xcf\xb0\xc2\x09\x9f\x1d\xa3\xbe\x2f\xec\x4f\x25\xc2\x89\xe4\x08\x3b\xc2\x21\xb1\x6b\x02\xb3\xd8\xb1\x07\x8c\x22\x9e\x66\x34\xf1\x48\xed\xde\x8a\x4f\x59\x4c\x9f\x68\x9c\xe3\xc4\x23\x63\x8f\xd8\xe0\x89\x30\x95\x83\x0a\x87\x93\x04\xd9\x6e\xdd\x0b\x81\x7e\xee\x46\x29\x69\x4a\x13\x2c\x90\xe2\x76\xb4\xd7\xb6\x2d\x74\x3f\x27\x7e\xac\x0e\x05\x1c\xa5\xf8\x91\x48\x44\x15\xca\xb8\x94\x74\x92\x14\xc7\xf8\x61\x88\x60\xdc\x67\x17\x43\x30\x8d\x46\x0a\x71\xc3\x07\x5d\xe7\xd6\x4f\xe0\x7a\x4c\x31\x63\x04\x3a\xe6\x6a\x4e\x84\xed\xde\xbe\xfc\xd6\x56\xce\xb7\xc6\x88\x6e\xb6\x98\x86\x23\x7b\x3b\xa5\xb3\xb5\xc6\xd9\x56\xdd\x6c\xa7\x6b\x36\x2b\x9a\x2f\xe0\xa5\x6d\xaf\x0d\x5e\x50\x59\x56\x07\xdf\x85\xcb\xb6\x34\xe2\xd7\xc0\x47\xfb\x8d\x2a\x82\x9d\x16\xf8\x22\xeb\xf6\xa5\xaa\x80\x07\xae\xff\x75\xc8\x6e\x1d\x8a\x7d\x17\x80\xb1\xc7\xc5\xe9\x02\x30\xba\x00\x8c\x2f\x36\x00\xa3\x59\x9b\xa0\xf1\xce\xe9\x7a\x1b\x56\x90\xf2\x46\x01\xf1\x0b\x88\x52\x58\x3e\xb6\xad\x29\xa5\x45\xe5\x61\xfc\x2e\xa4\xfa\xda\x09\xbf\x86\x74\xdf\xd5\x29\xda\x6b\x9d\xa2\x83\x9b\x76\x27\xf8\x75\x82\x5f\x27\xdb\xb4\x9c\x70\x27\xdb\x1c\xae\x6c\xf3\x56\x0a\xcb\x97\x04\xa1\xab\x85\xa7\x52\x66\xcc\xca\x00\x5b\x03\x47\x03\xee\x81\x3c\x4b\x38\x8e\xd7\x05\xe1\xfc\x82\x0a\xb9\x66\x85\x68\x66\xda\xd5\x1f\x1c\xb8\x64\xb6\x14\x7f\x63\x46\xfe\x5b\x88\xa9\x6d\x9c\xfa\x9b\x86\xd5\x02\xfd\x42\x30\x59\x29\x28\xed\xa5\xb4\x90\x2a\x4d\xb7\x52\x38\xe4\x1f\x0f\x9c\xaa\xfd\x96\xbe\x86\x7a\xf1\x05\x3b\x08\x3a\x27\xc0\x6f\xb3\xf0\xf9\xc1\x48\xad\x9d\x6a\xd7\x65\x55\x76\x46\xfd\x4e\xf1\xed\x14\xdf\xbd\x2f\xe3\x21\x29\xbe\x6f\x28\x51\x9b\x34\x91\x17\x29\x63\xb8\x9d\x6c\xdd\x89\xd6\x9d\x68\xdd\x89\xd6\x5f\xac\x68\x7d\x18\x2b\xdc\xc9\xd5\x9d\x5c\xdd\xc9\xd5\x9d\x5c\xdd\xc9\xd5\x7b\x5f\xc6\x4e\xae\xae\xc8\xd5\xf0\x97\x4b\x93\xde\x54\xc8\x6e\x2d\x5c\xb7\xc8\x89\x7e\x2f\x92\x75\x27\x55\x77\x52\xf5\x61\x4b\xd5\x07\x33\xa1\x2f\x2f\x11\xb2\x4b\x25\xec\x52\x09\xbb\x54\xc2\xb7\x48\x25\x74\xbc\x64\x95\x84\xb2\x2c\x58\xfc\xb8\xc4\x81\x0e\x56\xb6\x28\x46\xbb\x6d\x78\xc7\xbe\x96\xda\x01\xcd\x6f\x53\x69\xaa\xf4\x9b\x6b\xe8\x80\xea\x4f\xf5\x9c\xb4\xa0\x19\x85\x1b\xdf\x7a\x84\xb0\x9f\xec\x9b\xef\x0b\x0c\x7c\x79\xd4\x5d\xfd\x29\x14\xec\x5a\x57\x7f\xea\x05\xe7\xed\x0e\xd7\x9a\x99\x3b\x1a\x35\x36\xde\x77\x3a\xed\x37\x07\x97\x6b\x3e\xe9\x6f\x1a\x2e\x57\x7b\x93\x2c\x25\xef\x9c\xfc\xb3\xf6\xa2\x78\x83\xb2\x5b\x1b\xdf\x0e\x9f\x88\xfa\x52\xae\x86\xae\xec\x56\x57\x1f\x62\x4f\xd3\xdd\x8a\xf5\xbf\xdb\xd9\x76\x45\xc6\xba\x22\x63\x5d\x91\xb1\xae\xc8\x58\x57\x64\x0c\xfd\xc6\x8b\x8c\x6d\x2c\x3e\x9a\x71\x7c\x29\x12\x64\x57\x64\xac\x13\x22\xf7\x37\xdd\xdf\x96\x10\x79\x80\x16\x84\x83\xa8\xa6\xe6\x2d\x08\x6f\x8e\xfb\xe1\x46\xd2\x16\xfb\xc3\x2d\x68\x87\xff\x61\xff\xaf\xc3\xff\xe8\xf0\x3f\x1a\x66\xdd\x05\xb3\x76\xf8\x1f\xa8\x0b\xd7\xec\xc2\x35\x0f\x39\x5c\xb3\xc5\x36\x76\xf8\x1f\x2d\xc5\xb9\x17\xc2\x00\x71\x32\xd7\x46\x38\x20\x3f\x2d\x2b\x1a\x07\x2b\xa5\xb9\xb1\xfe\x76\x70\x40\x6a\xa7\x7d\x10\x2a\xc9\x2b\xe2\x80\xd4\xd1\x75\x6b\x05\xe4\x7d\xe0\x81\xb8\xd1\x76\x89\x8b\x5d\x88\xf5\xe1\x87\x58\x1f\x5c\xe2\xe2\xc1\x48\xb2\x9d\xba\xd7\xe5\x2e\x76\xb9\x8b\x9d\x32\xdc\x29\xc3\x7b\x5f\xc6\x43\x52\x86\xdf\x58\xc2\x7e\x41\x5c\x90\xdd\x64\xed\x4e\xd4\x36\xef\x75\xa2\x76\x27\x6a\x7f\xa1\xa2\xf6\x61\xac\x70\x27\x67\x77\x72\x76\x27\x67\x77\x72\x76\x27\x67\xef\x7d\x19\x3b\x39\xfb\xd5\x70\x42\xea\x84\xed\x96\xf9\x36\xef\x49\xd2\xee\xa4\xec\x4e\xca\x3e\x6c\x29\xfb\x60\x26\xd4\x61\x86\x74\x98\x21\x1d\x66\x48\x87\x19\xb2\x95\x7c\xf3\x6f\xf6\x58\x7e\x08\x6e\x62\x7f\x65\x7f\xf8\x2e\xe1\x93\xfb\x45\x46\xf4\x7f\xcf\x69\x4a\x98\x04\x69\x94\xaa\x45\x28\xcf\x34\xac\xfc\xf2\x9a\x7f\xb8\x1b\x5e\x7d\xba\x08\xb3\x69\x3e\x5c\x3e\x5c\xdc\x0f\x6f\xfa\xb7\x7e\x5d\xfc\xac\xc2\xb5\xb0\xdf\x95\x44\x32\x4b\xf2\xb7\x44\xeb\x9e\x70\x6a\xee\x14\x56\xb9\xdc\x6e\x64\xb7\x83\xbb\xc1\xed\x8f\x90\x0d\x34\x3e\x1f\xde\xf5\xbf\xbb\x28\x11\x44\xe9\x79\xff\xec\xaf\x0f\xc3\xdb\xe6\xe7\x83\xff\x1e\xde\xdd\xdf\x35\x3d\xbd\x1d\x5c\x0c\xfa\x77\xcd\x5f\x7f\xec\x0f\x2f\x1e\x6e\x07\x2b\xd7\x63\xe5\x68\x57\x2b\x21\x12\x16\x09\xe2\xfc\x51\x64\xb9\x86\x28\xd6\x10\x79\xf1\xd1\xb1\xc3\xba\xbe\x4e\xd1\x83\xd5\xe9\xa9\x6d\xdc\x30\xd8\xa0\x21\xa3\x8c\xc4\x54\xe2\x49\x42\xe2\xa5\x96\xdc\x1a\x36\xb5\x84\x4b\x83\x7a\xd6\xda\xb3\x17\x39\x35\xcf\x8b\x0c\x2f\x40\x90\xa3\xa8\x08\x8b\x6b\xfa\x30\xfb\xd0\xd8\x03\xd3\xbc\x8b\x3e\x91\x52\x4f\x51\x2e\x04\x61\x2a\x59\x20\xf2\x99\x4a\x25\x97\x1a\x75\xdb\xd7\xd4\xac\xbd\x53\x7d\x83\x73\x2c\xd1\x84\x10\x56\x1e\xbf\x20\x09\xc1\xb2\x66\xcc\x76\xf7\xdb\x2d\x8b\xdf\x2b\x6b\x8d\x31\x97\xd1\x14\xd3\x24\x17\xa4\x72\x5a\x78\x9a\x61\x41\x25\x67\x83\xcf\xfa\x2e\xd3\x07\xf9\x1a\x3e\xe7\x62\xbb\x13\x33\xf8\x6b\x48\xc1\x57\xe5\x7f\x7e\xba\x2f\xff\xab\x74\xe6\x2f\xee\xcb\xff\x5a\x4d\xeb\x41\xc3\x55\xca\x3e\x42\x9f\xee\x4f\xd1\x27\x08\x71\x12\xe8\x7e\x8e\x0d\xc5\x5e\xdc\x9f\xa2\x0b\x22\x25\xfc\x52\x7c\xac\xa8\x4a\x60\x6e\xdf\x51\x86\xc5\x02\xb9\xe9\x9b\x44\x57\x1c\xcd\x11\xf1\x4b\x53\x5d\x3c\xf6\xf7\x9c\x81\xea\x5e\xac\xde\x05\x9f\xd1\x08\x27\xbb\x2d\x62\xff\xaa\xc4\x07\xae\x6f\x57\x2e\x45\xf8\xf6\xf2\x5a\xf4\xaf\xce\x21\x89\xd4\x0d\xb5\x66\xe6\x57\x44\x6a\x22\x89\x38\x8b\xad\x97\x46\xdf\xfe\x8b\x40\xa8\xff\x3b\x87\x44\xdc\x5c\x52\x36\xd3\x2d\xa2\x13\x74\x7d\x3b\x62\xd7\x22\x36\x86\x50\xa2\xa5\x61\x43\x73\x54\x22\xc6\x15\xa2\x69\xc6\x85\xc2\x4c\x69\x45\x00\xc4\x00\xbb\x22\x86\x03\x9c\xf1\x34\xcd\x15\xd6\x07\x6d\x69\x51\x99\x31\x87\xdc\x11\x35\x8c\xc1\xb5\x52\xb3\x86\x46\x4e\x28\xe6\x92\x09\xdd\xbe\x96\x51\xca\x3a\x34\x8d\x97\x54\x59\xd7\x04\x16\x02\x97\xa5\x89\x0f\x54\x91\xb4\xfa\x7e\xcb\x20\xcf\x7f\xd5\x1a\x08\xce\x4c\x52\x05\x11\x7d\x11\xcd\xa9\x22\x91\xd2\x47\x70\x2b\x9a\x78\xb8\xfa\xe1\xea\xfa\xa7\x50\x82\xf8\xd0\xbf\x3c\xff\xf3\x7f\x94\x7e\xb8\xbd\x5c\xfa\x61\xfc\xe3\x9f\x97\x7e\xf9\xff\xad\xa4\xa7\x6a\x4f\x4b\x7a\x7e\x30\x97\x23\x10\xa9\xc1\x26\xec\xa6\x8a\x68\x8a\x67\x04\xc9\x3c\xd3\x14\x20\x8f\xcb\xfb\xab\x45\xca\x0b\x8e\x63\xca\x66\x26\x03\xf4\x82\x2a\x22\x70\x72\x89\xb3\x8f\xce\x7e\xbd\xc5\xea\xfc\xdf\xbb\x52\xbe\xee\x87\x9f\xfb\x97\x61\xc6\xef\x87\x9b\xdb\xeb\xfb\xeb\x95\xb3\x2e\xb5\xb0\x7c\x8c\xf4\xe3\x53\xf8\x5f\x74\x82\x74\xeb\x5e\xf2\x4d\x89\xc2\x5a\x23\x40\x5f\x9b\xa4\x39\x9f\x48\x43\x59\x02\xa7\x26\x13\x34\xa5\x70\xa5\x18\x0b\xde\x37\x46\xb8\xf6\xda\x83\x3f\x37\xe6\x03\xd0\x96\xdd\xa5\xcc\x62\x2c\x62\xf4\x77\x59\x4d\x1f\x07\xc3\xb1\xf9\x81\xc4\xe8\x08\xcd\x95\xca\xe4\xe9\xc9\xc9\xf3\xf3\xf3\xb1\x7e\xfb\x98\x8b\xd9\x89\xfe\xe3\x88\xb0\xe3\xb9\x4a\x13\x93\x2e\xaf\x57\xe1\x14\xdd\x08\xae\xaf\x10\x50\xd0\x89\xa0\x38\xa1\xbf\x92\x18\x4d\x0c\xff\xe3\x53\xf4\x4b\xc4\x05\x39\x2e\x36\xc6\x1a\x95\xec\x3d\x62\x0d\x4f\x27\xfa\xa5\x1a\x66\x52\xdd\x4f\x14\x93\x88\xc6\x56\xcc\x20\x2c\xe2\x60\x79\x34\xbe\x0a\xdd\x9e\xcb\x34\xd4\x1a\x4d\x96\xab\x62\x39\x03\x65\x05\xc7\x24\xc8\x76\x57\xbc\x4c\x70\x5a\xf1\x19\x1a\xb5\x35\xd7\x2a\xba\xbe\x5b\x31\xdc\xaa\xee\xd5\x4c\x4f\x38\xe2\x09\x9a\xe4\xd3\x29\x11\xa1\x43\xba\xa7\xb5\x19\x2a\x91\x20\x11\x4f\x53\x90\x18\xf4\x57\xb9\x34\x54\x0d\x2b\x66\x47\x7b\x3c\x62\xb0\xff\x5a\xcd\x01\x0a\x88\x39\xb0\x3a\x46\x48\x8c\x30\x5b\x98\x6e\x26\xf9\x34\x6c\xdf\xc0\x50\xe0\x18\x51\x35\x62\xfd\x24\x41\x82\xa4\x5c\x91\x20\x87\x12\x9c\x67\xe5\x05\x07\x16\x29\x48\x96\xe0\x88\xc4\x86\x1e\x12\x1e\xe1\x04\x4d\x69\x42\xe4\x42\x2a\x92\x86\x0d\x7c\x0d\xb6\x1a\xbd\x66\x54\xa2\x98\x3f\xb3\x84\x63\x3b\x8f\xea\x67\xdf\x94\x4f\xe3\xc0\x41\x04\x0c\x84\xe0\x02\xfe\xe7\x07\xca\xe2\xbd\x71\xa8\x87\xbb\xc1\x6d\xf8\xef\xbb\x9f\xef\xee\x07\x97\x9b\x71\x1f\x4f\x59\x30\x3c\xd0\xe1\x4f\xd1\x9d\x59\x04\x2e\xb4\x44\x24\x1a\x26\x75\x69\x49\xa9\xf8\x81\xc7\x5b\x72\xdf\xcb\xfe\xd5\x43\xbf\xc4\x51\xee\xce\xbe\x1f\x9c\x3f\x54\xf4\x01\x3b\xbf\x92\x0c\x6f\xd4\xbf\xf0\xb7\xb3\xef\x87\x17\xe7\xe3\x1a\x85\xf1\xc3\xed\xe0\xec\xfa\xc7\xc1\x6d\xa1\xdb\xd5\x2e\x51\x65\x30\x55\x66\x75\x6f\x98\xd2\x9c\xc7\x68\xb2\xa8\x07\x84\xd0\x92\x73\x02\xbe\xd8\x02\x12\xc5\xb4\x7a\x0a\xbc\xc9\x61\x73\x14\x5f\xa4\x3c\x26\x3d\xfb\x0e\x20\x69\x18\xe3\x8a\x91\x98\xeb\x1b\xd6\xbd\x63\x16\x18\x2a\x0c\xc8\x85\x5f\xb8\x53\xd4\x47\x52\xbf\x98\xeb\x43\x2d\xe8\x6c\x06\x86\xc3\xca\x50\x4d\x6b\xf6\x53\x58\x5e\xf8\xce\xec\x7f\x26\x38\x9c\x73\xdd\xad\xb5\x38\x7b\xab\x84\xf9\x10\x50\x57\xca\x2d\x0a\x0c\x06\x87\x9a\xa1\xb9\xcd\xd2\x8b\xd0\xb8\x5e\xe6\x3c\x1a\x7b\x91\x3e\x5c\xc0\xb6\xa4\xb1\x77\x66\x82\x3c\x51\x9e\x07\x9f\x5a\x60\x8f\xd2\x8e\xd7\x36\x5f\x2c\x00\x2c\x9b\x31\x8a\x54\x9a\xf1\xe4\x51\xdb\x82\x66\x61\x4f\xd0\xc2\x54\xf0\xb4\xa6\x8d\xf2\x31\x19\x5e\xdf\x29\x81\x15\x99\x2d\xce\x2d\xcb\xd8\xfe\x78\x9c\x5f\xff\x74\x75\x71\xdd\x3f\x1f\x0f\xfa\x9f\xca\x27\xde\x3f\xb9\xbb\xbf\x1d\xf4\x2f\xcb\x8f\xc6\x57\xd7\xf7\x63\xf7\xc6\x4a\x92\x6f\xe8\x60\xf9\x9e\x2e\xbf\x78\x8a\x34\xcb\x05\xd6\xe8\x00\xef\x02\xfe\x38\x21\x53\x2e\x0c\x9f\x4f\x5d\xe8\x82\x15\x61\xdc\xda\x5a\x5d\xac\x32\x8b\x53\xb0\x8c\xd5\x35\x69\xac\xde\x4a\x10\x9c\xc2\x3d\x81\x19\x1a\xb0\xf8\xe8\x7a\x7a\x74\x67\x7e\x4c\xb1\x78\x24\xc2\x7f\xfa\x2c\xa8\x52\x84\x95\x54\x3a\xec\x86\xec\x95\xc4\xa2\x83\x63\x74\xab\xf9\xbe\x7e\xdf\x5f\x6a\x9a\xd8\x63\xa2\x30\x4d\xa4\x1d\x6c\x69\x5d\x4f\xd1\x05\x16\xb3\xc2\x0e\xf7\x35\x9f\x4e\x4d\x63\xdf\x98\x61\xe8\x3b\xac\x34\x8b\x1a\xde\xab\x49\xc3\xdd\x8b\xd0\x9f\x7d\xd9\xcb\xc3\xcb\x54\xf5\x90\xed\x46\x53\x0f\x37\xb0\xe2\x46\x63\x2f\xe9\x86\xf6\x49\x0d\xad\xc1\xc4\xcd\xe3\xd5\x97\x4c\x7d\xdb\xcb\xe4\x54\x7e\xb1\x86\x9c\x4c\x2e\x95\xde\xf9\xa9\xd6\x36\x6b\x68\x89\x7c\xa6\xd6\x60\x10\x8e\xbb\x42\x42\x45\x33\x60\x5e\xc5\x59\x46\xb0\x90\x75\xbb\x5d\x16\x03\x1b\xf6\xde\xf4\x14\xf6\x61\x37\xd9\xf5\xd3\x43\x9c\x81\xc1\xc1\x0b\x11\x15\x8a\x6c\x41\x03\xa6\xad\x25\x0a\xb8\x01\xb4\xa5\x6b\x8b\x6c\x74\x49\xa5\x56\x1a\xcd\x8f\xdf\x59\xc8\xa5\xed\x08\xe2\x63\x7f\x78\x51\x11\x2e\xc6\xe7\x83\x8f\xfd\x87\x8b\xd5\x66\xc2\xd2\x77\xd5\x2d\x46\x47\x48\x3f\x2f\xfb\xcd\xe9\xd4\xdc\x19\x0e\x38\xca\xa8\xb4\x84\x81\xd1\xca\x42\xd5\x18\x7b\x75\x4c\xb2\x84\x2f\x52\xc2\xc0\xc4\x53\xba\x09\xf5\x7a\x4e\x31\xb5\x57\x4b\x30\x58\xb0\xe2\x58\xb3\x1b\x5c\x63\x47\x0e\xad\x8a\xc4\xfe\xe6\x2d\x83\x55\x55\x58\xf7\x8d\xf1\x9e\xd9\xff\xdc\x29\xac\xb6\x3c\x63\xfd\xb3\xfb\xe1\x8f\x83\xb2\x7e\x78\xf6\xfd\xf0\xc7\x3a\xa9\x66\xfc\x69\x70\x35\xb8\xed\xdf\xaf\x11\x4e\x2a\x4d\xd6\x09\x27\x52\x0f\xb8\xea\x3d\xa5\xd2\x47\x04\x45\x06\xf2\x0a\x51\x25\xd1\x13\x95\x74\x42\x01\x20\xcc\x7a\x22\x1f\x86\xc0\x59\x9f\x70\x42\x63\xaa\x16\x4e\x7c\x31\xfd\x96\xf7\x51\x73\x52\xdb\xbe\x31\x3b\x84\xfe\x49\xb0\xf2\x99\xcd\x71\x93\x3e\x45\xa0\xdb\x3e\x81\xd2\x16\x7c\xc6\xb4\x20\xcd\x66\x44\x98\xe1\x80\xf7\x25\x1c\x4b\xf0\x5c\x8f\x2a\x14\x56\x8a\x55\xf3\x42\xeb\x8c\x30\x22\x00\x04\xce\x77\x62\x04\x29\x41\xd8\x57\x5a\xe6\xca\x12\x1a\x51\x95\x2c\x50\x04\x36\x2c\x30\x67\xa6\x98\xe1\x99\x15\x0e\x40\xcd\xa9\x90\xc4\x5f\x0d\x8a\xda\xf5\xd4\x9a\xf6\xef\x29\xd9\xf2\x98\x3d\x5c\x9d\x0f\x3e\x0e\xaf\xca\x24\xf0\xfd\xf0\x53\x49\x84\xbd\x1c\x9c\x0f\x1f\x4a\xb7\xb9\x96\x64\x57\xcb\xf5\xd5\x66\x6b\x8e\xa2\x7f\xe9\x14\x9d\x9b\x4f\x4f\xf5\xe2\xd6\x40\xc4\x79\xe5\xb7\xb2\x0e\xb7\x2e\x24\xcf\xfd\x31\x60\x4a\xd4\xfa\x25\xda\x9a\x90\xac\x0f\xb2\x64\x43\xaa\x0f\x55\x58\xea\xfb\xaa\xea\x54\xae\x4e\xd9\xbd\x08\x41\x97\xc7\x85\x65\x29\x8c\x61\x00\xa3\x41\x93\x11\xab\xc6\xad\x55\x30\xec\x1f\xc1\x45\x9d\xe6\x52\x19\x57\x22\x10\x27\x7a\xfc\x8b\xd4\x0b\x0a\xae\xc6\x63\x74\x47\xc8\x88\x39\xeb\xc1\x8c\xaa\x79\x3e\x39\x8e\x78\x7a\x52\xe0\x13\x9e\xe0\x8c\xa6\x58\x4b\xd2\x44\x2c\x4e\x26\x09\x9f\x9c\xa4\x58\x2a\x22\x4e\xb2\xc7\x19\x44\xc0\x38\x77\xea\x89\x6f\x76\xc6\xff\xfd\xe2\x4f\xdf\x1e\x5d\xfc\xe5\xdb\x0f\xcb\x16\xb2\xa6\xfd\x1f\xb0\x08\x67\x32\x4f\x6c\xc4\x9c\x08\xd7\xc6\x1d\xf9\x9c\xac\xdb\xef\xab\xf2\x76\xed\xa6\xbf\x9e\xdd\x3c\x94\x2c\xd6\xe5\x7f\x5e\x0e\x2e\xaf\x6f\x7f\x2e\x71\xca\xfb\xeb\xdb\xfe\xa7\x12\x43\x1d\xdc\x7c\x3f\xb8\x1c\xdc\xf6\x2f\xc6\xee\xe1\x2e\xb6\xb7\x1f\x18\x7f\x66\xe5\xa5\x91\x8e\x03\x2e\xf5\x74\x8a\x3e\x72\x81\x7e\xf0\x3b\x79\x34\xc1\x12\xae\x18\x77\x67\xc9\x1e\xca\x78\x0c\x8c\x17\x91\x6c\x4e\x52\x22\x70\x62\x6d\x06\x52\x71\x81\x67\xe6\xa6\x97\x91\xc0\x2a\x9a\x23\x99\xe1\x88\xf4\x50\x04\xd4\x30\xeb\xc1\xa6\x80\xaa\xc5\x67\x55\x3b\xdf\x6d\xce\x14\x4d\x89\x53\xc1\xed\x3f\xef\xcd\x66\x6c\xb1\x39\xd7\xf7\xdf\x97\x85\xbd\x8f\x17\x3f\xdf\x0f\xc6\x77\xe7\x3f\xac\x5c\x4f\xf3\x59\x69\x64\x77\x10\x80\x74\xc6\x93\x3c\x65\xe1\xdf\xdb\x8f\x6d\x78\x75\x3f\xf8\x54\x1d\xdd\x75\xff\xbe\x4c\x19\xb7\xe5\x00\xb7\x0f\xdf\x5d\x5f\x5f\x0c\x4a\x2e\xe1\x0f\xe7\xfd\xfb\xc1\xfd\xf0\xb2\x44\x3f\xe7\x0f\xb7\x06\x8d\x70\xd5\x34\xdd\x08\x6a\x26\xaa\xa7\x15\x4e\x73\xdf\xac\xb0\x15\x27\xea\xdb\x80\x72\x73\x96\x8f\x02\xb8\x1d\x13\x0e\x06\x56\x9d\x23\x6f\x52\x8d\xcc\x48\x6b\xd9\xa1\x2a\x6f\x13\x6a\x66\xc7\x2b\x37\x7a\x15\x57\xbe\xf7\x43\x30\x50\xa0\x46\xd9\xc6\x49\xc2\x9f\x4d\x28\x6f\x4a\xf5\xad\x6c\x81\xd1\xf4\x2b\xb2\xf0\x10\x1e\xd7\x70\xbc\xf2\xb6\x90\x48\x10\x75\xc9\x73\xa6\xb6\x27\xb9\xfe\x55\x89\xef\x0c\xae\x7e\x1c\xff\xd8\x2f\x53\xe0\xf0\x62\x35\xab\x09\x9b\xa8\xb9\x8a\xfb\x57\x3f\xfb\x4b\x18\x02\xbe\x7b\x5e\x43\x35\xb2\x6b\x94\x50\x2d\xf6\x46\x58\x6b\xaf\x09\x48\x34\x88\x50\x30\x39\xa4\x7a\x72\x10\x60\x9a\x19\x7f\x92\xe1\x4f\x66\x90\xa7\xee\x8f\x4a\x7b\x12\xd6\x05\xac\xa9\x2e\x9e\x1e\xda\xb1\x5a\x35\x43\x84\x3d\x51\xc1\x01\xcf\x16\x3d\x61\x41\xb5\x34\x6e\x5a\xd6\x73\x3d\x85\xff\xdd\xac\x4d\x30\x8c\x56\x18\xd7\x1d\x17\xea\xdc\x07\xf2\x6e\x67\x0d\xa9\x0b\x68\x5d\x0e\x65\xad\x37\x74\x2c\x7f\x5b\xb3\x39\x3b\x06\xfc\x96\x27\xfc\x8f\xe4\x9c\xe2\x44\x33\x80\xfd\xc9\x8b\xfd\xab\xbb\x61\x59\x7e\x2c\xab\x19\x01\x5f\xde\x5a\x5e\x04\x43\xa5\x19\xb9\x53\x26\xee\xfe\x7a\x61\xb4\x0b\x00\x3d\x36\xe7\x36\x50\x2c\x40\x00\x72\x28\x28\x19\x16\xb2\xf2\x85\x44\x00\x84\x56\x04\x5c\xe9\x3b\x0b\xc2\x99\x9e\x38\x8d\x47\x8c\x7c\xce\x08\x93\x10\x1c\x60\xee\xb3\xc2\xd7\x2e\x8f\xd1\x70\x0a\x2c\x41\xbf\xce\x50\xce\xac\x03\x4c\x5f\xb8\x66\x90\x3d\x2d\xca\xda\x21\x78\x0d\x11\x0c\x2f\x8c\xb8\x60\xa9\x62\xf0\x23\xf6\x93\x77\xa2\xc1\xa3\x29\xd7\x0c\x48\xef\xa2\x6d\xef\x14\x61\x26\x69\x0f\x69\x85\xa5\xba\xa7\x90\x3a\xa0\x15\x4a\x1b\xc2\xa5\x39\x8d\xfd\xf3\xf5\xaf\x81\xa5\x38\xe1\xf0\x32\xa8\xbf\x0b\x2a\x57\x41\x83\x68\x9c\x18\x8f\xc9\xb8\xfd\x9d\x10\x71\x41\xac\x9f\x65\xe3\x6b\x60\x1d\x63\xbf\xc7\xf2\x71\xc9\xf7\x30\x64\x52\x61\x16\x91\xb3\x04\xcb\x2d\x83\x90\x9c\x8d\xa3\x57\x96\x38\x6e\x6f\x1f\x6e\xee\x87\xdf\xad\xe1\xf2\xd5\x8f\x97\xc3\x80\xa2\x24\x77\xee\xb9\x89\xe0\x38\x46\x9a\x7d\xce\xb8\x71\x05\x5a\xc1\xbf\x80\xfe\x36\x79\x3d\x3e\xa0\xb2\x04\x3b\x5e\xa4\x23\x58\x3b\x47\xe8\x4a\xa0\x76\x21\x50\xa4\x57\x02\x05\x26\x0f\xb7\xd5\xe0\x59\x34\x05\x49\xac\x75\x2b\x4b\xb0\x9a\x72\x91\x1a\x2e\x5f\x9a\xb4\x69\x7c\x75\xa3\x94\x29\x22\x44\x9e\x29\xea\xb0\xdc\xab\x52\x2a\x54\x78\xe7\xb3\x4b\x22\x25\x9e\x91\x5d\x1c\xd0\x75\xca\xc3\xdd\x8f\xe1\x3f\xc1\xc1\xdc\x46\xf6\x2f\x8d\xd0\x45\xbe\x3b\x7a\xba\x66\x1f\x4d\x20\xcf\x0d\x4f\x68\xb4\x65\xc0\xdd\xc7\xfe\xf0\x62\x3c\xbc\xd4\x4a\x7c\xff\x7e\x70\x51\x12\x25\xe0\x59\xff\xe3\xfd\xe0\xd6\x82\x58\xf7\xbf\xbb\x18\x8c\xaf\xae\xcf\x07\x77\xe3\xb3\xeb\xcb\x9b\x8b\xc1\x9a\xc8\x9c\xc6\xc6\x97\xad\xab\xd5\x57\x4f\x97\x7e\x81\x1d\xd6\xbc\x2c\xb4\x97\x41\xd6\x18\xa6\x09\x38\xc1\xb9\x71\x86\x63\xc4\x78\x4c\xe0\x67\xe9\xac\x33\x1e\x39\x1a\x0d\xd5\x57\x49\x82\x70\xae\x78\x8a\xc1\x6b\x93\x2c\x46\x0c\x4f\x34\x6b\xc5\x49\x12\x84\x77\x89\x9c\x31\xcd\x62\x75\x63\x06\xa2\x3d\x4a\x88\x66\xe7\x59\x90\xec\x67\xfd\x06\x53\xca\x20\xd2\x36\xc5\xe2\xd1\xb8\x99\x8a\x2e\x8b\x43\x21\x11\x96\x23\xa6\xc7\x45\xac\x61\xa8\xcd\x0a\x9f\xb6\x7a\xab\x71\x75\x52\xfc\x48\xf4\xaa\xa4\x79\x34\x47\x99\xe0\x33\x41\xa4\xb4\xb6\xe5\x08\x33\x13\x80\x60\x5f\xd7\xd7\xd0\x88\x31\xae\x97\xc2\x99\xb0\x63\x92\x11\x16\x13\x16\x51\x93\xd6\x07\xbe\x7b\x6f\xda\x9c\x09\x9c\xcd\x91\xe4\xe0\xf4\x86\x65\x07\xfb\x95\xf9\xc8\xdd\x64\x66\xc6\xe6\x71\x68\x81\x16\xb9\xe6\x13\xd7\x20\x27\x9a\x55\x86\x8f\xdd\x65\xe8\xdc\x2e\xc6\x0e\x98\x66\x09\x51\x06\xac\x1f\x96\x1c\x36\x43\xaf\x75\x69\x3f\xf4\x36\xd5\x6d\x82\xbe\xb0\xdd\x98\xb1\xb4\x23\x3a\xae\xb1\x6c\xdb\x23\x85\xbe\xc7\x2c\x4e\x74\x2b\xce\x87\x51\x3e\x8b\x90\x8a\xd2\xd7\x54\xe3\x4e\xe3\x2e\xb7\x68\x84\x73\xb9\xcb\x35\x5a\xc9\xc5\x34\x56\xc1\xa3\x22\x28\x04\xc8\xdb\x26\x62\xc2\xea\x66\x9a\x45\xe2\x84\xdb\x55\x32\xaf\xe7\xa6\xfe\x13\x82\xd1\x34\x5c\xb3\x99\xa0\x2c\xa2\x19\x4e\xb6\xd2\xfd\x2a\xc1\xf8\x36\xc6\xfd\x6b\x3a\xd5\xe4\xf3\xcd\x92\xdb\x56\x11\x91\x42\x82\xb2\x1d\xa6\xdf\xc2\x0d\x2c\x49\x36\xab\x81\xc8\x22\x9a\x04\x0b\x9e\x1b\x7f\x1c\xac\x0b\x89\x6b\x8e\xea\x71\xdd\x76\xeb\x93\x81\xcb\x01\xd0\x5b\x6c\xb6\x89\xfc\x69\x5a\xbf\x4a\x2b\xb6\x77\x13\x8c\x87\x93\x9b\xfa\x36\xeb\x76\x20\x78\xf8\xaf\x55\xb4\x73\x89\x33\x4d\x33\x16\xb6\x1f\x17\x73\xb4\x4a\x92\xad\x0a\xe6\xe2\x67\x02\xdf\xb9\xcf\x0b\x69\xbf\x1b\xc5\x12\xda\x00\xa8\xe5\x4e\x4a\x31\x04\x41\x8e\xb9\xa5\xf1\x69\xae\x65\x59\x84\x21\x0a\x01\x7d\x4d\x8e\x67\xc7\xc8\x15\x61\xe8\xa1\xfe\xcd\xcd\xe0\xea\xbc\x87\x88\x8a\xbe\x71\x31\x8b\x36\x60\x69\xc4\x14\xb7\xd2\xca\xc2\x15\xd0\x48\x89\x98\x91\xd2\x9c\x5d\x74\x13\x84\x2a\xcf\xa8\x54\x36\x7c\x56\xf3\x95\xa0\xd4\x09\x4d\xab\x62\xb6\xa1\x90\x5c\xcd\x77\x21\x0d\x2c\x65\x9e\x6a\x5d\x76\x4c\x71\x3a\x16\x3c\xd9\x85\x29\x9c\xc3\x54\x40\x5d\xf6\xe9\xf9\x14\xa7\x48\x37\x6b\x43\x41\xbc\xcb\xd1\x8b\x74\x5a\x30\xd2\x7c\x59\xdf\x9b\xc1\xbd\xe5\xbc\x0f\x36\x1e\x8d\xba\x10\x08\x48\xdf\x6f\x60\x15\x85\xd9\x78\x6c\x2d\xf5\x63\x1c\x45\x5a\xe5\xde\xf3\xa4\x82\xfa\x39\xce\x25\x60\x3b\x7a\xb1\x69\xae\xa3\x73\x37\xcc\x4c\x73\x30\x08\x06\xd6\x57\xae\xe4\x11\x2d\xda\xaf\xe9\x77\xb2\x58\xea\xd5\x55\xb8\x79\x90\xde\xa4\x62\x2e\x61\x49\x60\x27\xa5\xa9\x90\xa3\xe6\x64\x81\xe6\xf8\x89\x94\xba\x74\x09\x31\xba\xe1\x05\xcf\x45\x1d\xa3\x1b\xb1\x73\x92\x09\xa2\x25\xfd\xaa\x03\xc5\xd3\xf4\x6d\x99\x12\x3b\xba\xee\xe8\xfa\xdd\xd3\xf5\x99\x29\x94\xd4\xf7\x85\xb1\x76\x12\xe0\x4c\x63\xe3\x8c\xf3\x64\xdc\xc2\x26\xd2\x7e\xc5\x4b\x9e\xb0\x4a\xd9\x28\x80\x04\xe0\x39\xc8\x47\xa5\x6b\x93\xeb\xbb\x2e\x48\xb1\xb5\xc3\x5b\xb1\x0c\xce\x65\x16\xd4\xcb\xd9\xe5\xbc\xd7\xb5\xb2\xaa\x25\xf4\xe2\x62\xce\x99\x91\x6f\xbc\xbb\x2c\xac\x7f\x5a\x3a\x4c\x4e\x14\xa1\x6c\xa9\x1a\x9b\xa1\x67\xbd\xc0\x46\xee\xf8\x47\xce\x15\x96\xdf\x1c\x8f\x98\x16\xa2\x1e\xc9\xc2\x98\x5b\xb5\x98\xf2\x3b\x2d\x8b\x1f\x49\xc2\x24\x84\x7b\xff\xce\xb8\xe7\x34\x89\x3b\x73\xb5\x51\x4d\x4d\x11\x38\x08\xba\xf6\xbd\x40\x88\xae\x6d\xd4\x4a\x49\x45\x00\x34\xc8\xf9\x66\x2e\xf6\x99\x19\xfe\x8c\x28\x48\xb1\x56\x54\x81\xce\x14\x9b\x2a\x73\x4b\x43\x5f\x6b\xba\x32\x54\x21\x38\xf8\x49\xe2\x7c\x37\xc6\x2f\x97\xdb\x58\xcb\x19\xbd\xb6\x70\x67\x63\xde\x4f\x9c\xdd\x28\x12\x7c\xa9\x74\x1b\x96\xc8\xec\xf4\xc4\xb0\x03\xe7\xbf\x26\xec\xf8\x99\x3e\xd2\x8c\xc4\x14\x43\x04\xbc\xfe\xd7\x89\x9e\xd7\xbf\x9f\xdd\x5e\x5f\x8d\x8b\x4c\x9e\xff\x1a\xb1\x7e\x22\xb9\xcf\x52\x40\x8c\x33\x1f\x6e\x9f\x09\xe2\x44\x42\x3b\x17\xb0\xba\x16\x66\xc4\x11\x6b\x1a\x41\xcc\x23\x79\x8c\x9f\xe5\x31\x4e\xf1\xaf\x9c\x81\x2b\xbd\x0f\x7f\x9e\x25\x3c\x8f\x7f\xc2\x2a\x9a\x9f\xc0\xb9\x56\x27\xe4\x89\x30\x65\xdc\x54\x7a\xb9\x62\x48\xde\x95\x10\xad\xff\xef\x7a\xcc\x45\x52\x91\xd4\x9a\x6c\x44\x32\x85\xfe\x1f\x41\x26\x9c\xab\xfa\x4b\x8a\x4f\xa7\x92\x6c\x74\x21\x15\x4a\xda\xdd\x35\xfa\xcb\x9f\xbf\xfd\x83\x26\xa1\x6d\xd6\x78\x78\x77\x3d\xd6\xdf\xff\xfb\xb9\xfd\x5e\x6e\xc0\xee\xae\xb3\x82\xb5\x39\xe2\x31\x81\xf3\x39\x83\xdb\x4f\x80\xf3\x02\xd8\x1b\x90\x43\xb1\x8f\x75\xdc\xed\xbc\xd4\xfa\x6e\x2a\xdb\x56\x8b\x09\x2a\x76\x30\x47\x74\x84\x18\x47\xa9\x89\x35\xc5\x0c\xfd\xc7\x0f\xdf\xd5\x6f\x60\x2e\xe8\x56\x1d\x52\x0b\xd7\x10\x74\x29\xe9\xaf\x44\x22\x4d\x35\x9a\x8a\x79\xaa\xbb\x16\x44\xce\x79\x12\xa3\x67\x02\x6a\x92\x8d\x03\xf5\x5a\xb9\x20\x23\x16\x36\x01\x21\x87\x08\x27\x8a\xcf\x08\xdc\xd5\x4e\x51\x53\x44\x68\x51\xc5\x64\x69\x28\x2e\x48\xcf\x40\x7d\xdd\xfd\xc9\xc5\x56\xc3\x34\xe1\x91\x4b\x6a\xb1\x26\xb9\x78\x52\x3f\xf3\x69\xd5\xf4\x8a\x9a\x6d\xf8\xd5\x4d\xb6\x66\xdb\xfa\xa5\xb1\x49\x28\xd6\x86\x55\xdd\x99\xfa\xc1\xd0\x88\xb3\x71\x42\xd9\xe3\x56\x9b\x71\xed\x44\x39\xdd\x82\x5d\x33\xdd\xa2\xb7\x73\x1b\x0b\xc8\x06\xe7\xe3\x63\x9e\x24\x26\xb5\x25\xdc\x1e\x90\xbb\xcc\xba\x81\x30\x90\x99\x1c\x50\x12\x5b\xbf\x97\xd5\x84\x05\x61\x10\xf0\x36\x62\x93\x85\xf5\xd9\xca\x1e\x92\x79\x34\x77\x99\x79\x11\x67\x52\x8b\xd1\x5c\xa0\x88\xa7\xa9\x29\x6e\xca\x08\x52\x9c\x27\xd2\x46\xbb\xb3\x23\x85\x23\x35\x62\x45\x7f\x6b\x4e\x9e\xa9\x80\xb4\x5b\xea\x5e\x7b\x97\x4e\x51\x69\x69\xa5\xc0\x4d\xe3\x10\xb3\x01\x8c\x60\xc6\x13\x15\xa0\x3f\xf0\xe5\xb3\x64\x36\xac\x41\x33\x90\x73\x2e\xd4\x38\xae\xe5\x39\x6b\x89\xa6\xca\x08\x19\x39\x4a\x20\x68\x98\x3f\x69\xe1\x9f\x3c\x7b\xe3\xeb\xaa\x21\x68\xaa\x5e\x35\x82\x76\xc7\x68\xe5\xc8\x36\x25\xc1\x86\xb5\x32\x08\x1e\x51\x39\x26\x7c\xdd\x18\xef\xe0\xab\x33\xfd\xd1\xca\xc5\xab\x9e\x3b\x27\x04\xf1\xb8\x00\x9b\x33\xf7\xba\xcd\x08\x59\xb5\xa6\x16\x3a\xe1\xe5\x32\x47\x57\x4d\xe5\xa1\x6c\xc9\xd5\x63\x01\x93\xbd\x24\x20\x6b\x62\x31\xa1\x4a\x60\x51\x42\x0a\xf1\xfa\xa0\x24\x58\x40\x7c\xd6\x88\x19\xdc\x38\xa3\x29\xc4\x28\xa6\x12\x12\x44\xe0\x2e\x0d\x9c\x61\xa8\x9d\x12\x58\x39\xda\x45\x9e\xa3\x89\x3f\x87\xc0\xb2\x82\x34\x1c\xb3\xd3\x1d\x79\x7c\x2c\xad\x9f\xf1\x28\x2f\x04\xb9\x08\x24\x5c\x8b\xa9\x83\x28\x93\x74\x36\x57\x88\x32\x6b\x77\xc4\xc9\x8c\x0b\xaa\xe6\xa9\xec\xa1\x49\x2e\xb5\x16\x6a\x82\xd5\x4c\x3c\x0a\x51\x51\x2b\x2e\xb4\x6b\x12\x71\x5c\x69\x70\x59\x45\xd9\x82\x34\xda\x1d\xca\x41\xe5\xae\x58\x43\x38\x7d\x8f\x33\x58\x6d\x83\x42\xdd\x46\x03\x4f\x89\x4c\x1c\x20\x77\xc8\x4e\x50\x05\xa4\xe9\x1c\x00\x2a\xe4\xde\xbc\x14\xaf\x51\x88\x0b\x99\x64\x50\x41\x5c\xec\x36\x48\x5e\x65\x64\x4a\x83\xde\xe4\x9d\x4e\x69\xa6\x6a\x03\xb7\x96\x5d\x45\xb7\x01\xe6\x4f\xbb\xc5\x86\x64\x2c\xa0\x66\x40\x6a\x1b\xb1\x3b\x42\x9a\x81\xdc\x96\xf6\xde\x94\xc6\x85\x29\xd8\x44\x8f\xd5\x24\xbf\x8b\x13\xfb\x7c\x70\x77\x76\x3b\xbc\x31\x90\x13\xd7\xb7\x97\xfd\xfb\x71\x8d\x5f\xbb\xe6\xad\xcb\xfe\xed\x0f\xe7\xeb\x5f\xfb\xfe\xbe\x9c\x95\x5d\xf3\xca\xed\xdd\xea\x64\x8e\x16\x43\xac\x49\x0a\xab\xed\xe7\x14\x65\x0b\x35\xe7\xcc\x87\x28\xc4\x25\xde\x74\x84\x4c\x46\xb0\x82\x10\x22\x21\x55\x8d\xe3\xf0\x1e\xe2\x72\xd6\x4b\x98\xe5\xcd\x32\x30\x6c\x7b\x15\x8d\x36\x38\x91\x9f\x12\x3e\x01\xbf\x75\x5e\x2a\x71\xbb\x22\x02\x7d\xc7\x78\x9f\x73\x2a\xb3\x04\x2f\x96\x7a\x58\x77\xe5\x5c\xe1\x94\x40\xc4\x71\x81\x1f\xe7\x92\x45\xf4\xce\x40\x02\x93\xbf\xd7\xe9\x14\x32\x99\x14\xc5\x8a\xa0\x09\x51\xcf\x90\x37\xe7\x7e\xf5\xb6\x54\x17\x30\x22\x8f\x47\x0c\xcc\x39\x23\xbd\xc8\x71\x0e\xd1\x7e\xa3\x0f\x3d\x34\xfa\x10\x93\x27\x92\xf0\x4c\xef\xbc\xfe\xa1\xe1\x92\x19\xa4\x98\x26\x57\x5c\x79\xcb\xdc\x2e\xfb\x29\x48\x44\x33\x90\xcc\xc7\x44\xb7\xfb\x7a\x82\x47\x89\x92\x1d\x3b\x83\x31\x20\x1c\xc7\x5a\xc9\x06\x56\xe6\x86\x57\x84\x00\xb1\x60\xea\xa5\x5a\x99\x9b\x88\x14\xde\xfc\x6d\x7a\x0c\xdb\x2c\x9b\x3d\x6b\x77\x80\x3d\xbd\xa0\x4b\x76\xd7\x8b\x5c\x6b\x25\x3f\x90\x05\xa4\x60\xdc\x60\x2a\xb6\x74\xcd\xd6\xc5\xbc\xbe\x88\x93\x76\x50\xd3\xd1\x01\xb9\x6b\xeb\xd7\x61\x37\xc7\xad\x8f\xd5\x7b\x2d\x2d\xd5\xc5\x72\xf9\x8e\x5b\xaa\xad\x0f\x4d\x4a\x6a\x63\x08\x03\xaa\x2a\x5e\x19\x89\x36\xd0\xb8\xfc\x00\xef\xf4\x77\x6b\x35\x15\x2f\xae\x45\x61\x4d\x7f\xd8\x05\x9b\x1c\x5f\xcd\xc7\x27\x6b\x47\x1c\x25\x5c\x96\xb1\x72\x5a\x0f\xfa\xcc\x7e\xba\x6a\xdc\x83\x90\x7c\xb5\x5c\xb8\x51\x40\x43\xcd\xc2\x57\xc0\x20\xcd\x3d\xa3\xac\x87\xcc\xbe\xdd\x43\x14\xa2\x2d\x41\x21\x4b\x0a\xe4\x00\x16\xa3\xc2\x0d\x32\x62\x45\xcc\x8a\x44\xcf\x24\x81\x30\xb7\x88\xa7\x19\x98\xf8\xed\x70\x6d\x4b\x24\x36\x11\xc3\x3d\xc4\x73\xa5\x1b\x33\x39\x39\xce\x88\x6b\x13\x7e\x0a\xb7\x87\xf1\xbd\xd9\xe0\x77\x0f\x2c\x6d\x68\xdd\xdc\xa5\x94\xa1\x4f\x44\x41\x2b\x00\xdc\x1f\x4e\x10\xf4\x84\x6a\x08\x65\xfd\xda\xef\x70\xa2\xec\x4c\x36\xd8\xf9\x02\x38\xe5\xbb\x84\x4f\x56\x1b\x09\xa0\x71\xf4\x70\x3b\x74\x16\xc9\x22\x7e\x2a\x40\x2f\x2e\x79\x14\x07\x37\xb7\x83\xb3\xfe\xfd\xe0\xfc\x18\x3d\x48\xa2\x97\xc7\x4f\x17\xf2\xab\xbd\x4a\x62\x46\x6e\x91\x58\x98\x54\x04\x37\x19\x42\x88\x10\xa5\x2c\xe8\x35\x8c\xa3\x0c\xd3\xb2\x9a\xb0\x01\x24\x85\x5a\x43\x1d\x00\x0b\x55\xe7\x69\x23\xf3\xd6\x9d\x40\x88\x93\x1a\xbf\x9f\x28\x35\x33\xde\x74\x39\x32\x6f\x1d\xf9\x94\x23\xfa\x5e\x7a\x32\x70\xb4\xd4\x9c\x50\x81\x5a\x4d\xcb\x10\xd5\xb8\xfd\x9c\x82\x10\xf7\x4b\x9c\xad\x4e\x3f\xc5\xcf\x25\xa2\x35\xa2\x70\xe0\xbb\x7f\xe9\x73\xe0\xd8\xda\xd8\xb0\xc2\xdd\x27\x58\x38\xb4\x0c\x6f\xf5\x7c\xd3\x64\x7c\x48\x67\x24\x0b\x27\x56\x19\x84\x8d\x63\x95\x08\xce\x0e\xfc\x42\x19\x2a\x5d\x89\x3d\x34\xa5\x9f\x6d\xa3\x45\x7c\xbb\x7b\x35\x08\x78\x68\x88\xa7\x9c\xe3\xe5\x33\xb5\x81\xd8\x70\x03\xdf\xaf\x14\x22\xb9\xd4\x22\x51\xa4\xc5\x25\x41\x22\x2e\xf4\x4d\x01\xdd\x16\x5e\x88\x75\x22\x83\xc2\x42\x2f\xca\xb2\x57\x66\xd5\xe9\x2f\x6a\x90\xc4\x58\x91\x23\x2d\x7a\xad\x49\x80\xb6\x39\x32\x90\x4d\x83\x55\x00\x07\x56\xdc\x3c\x13\x32\xc3\xcc\x85\x66\x37\x0c\xd7\x5d\x79\x3b\xb0\x2a\xad\x02\x61\x48\x0f\x03\xf9\x0a\x52\x7f\x4a\xe3\x90\x19\xac\xe7\xca\x71\xd8\xe8\x97\x43\x58\xb6\x67\xec\x83\x71\x1a\x06\x9b\x67\xf1\x21\x0d\x36\xc1\x52\x21\x3b\xa6\x26\x53\x44\xa0\x22\xbe\xac\x11\xb6\xa4\xdb\xb7\x55\xde\x34\x09\x95\xb5\x58\x02\x9e\x11\xe9\x70\x53\x0c\x4a\x8c\xd6\x69\x9c\x20\x6c\x4a\x31\xfb\xb3\x6d\x6b\x32\xbb\x5b\x22\x64\x26\x10\xa4\xbf\xdc\xf4\x31\xea\xb3\x25\xbc\x2c\x17\x97\x55\x5a\x2f\x73\x27\xe1\xe4\x19\x2f\x24\xca\x84\x81\x96\x31\x91\xfb\x6e\xf2\xa0\x81\x95\x3f\xf2\xa1\x10\xca\xa5\x4e\x20\xb0\xc5\xac\x0f\x9a\x73\x72\xef\xf8\x05\x5c\x79\x95\xa8\x72\x2f\x90\x17\xcd\x15\xb6\x8a\x16\xac\x4e\x91\x71\x34\xc7\x6c\x46\xc6\xce\xc8\xba\x8d\xb6\xa4\xdb\x39\x83\x66\xce\x6d\x2b\xf5\x97\xd3\x8d\x51\x98\x6c\xfd\x17\xf3\xaa\x37\x20\xea\x43\x20\x15\x9e\x11\x64\x46\xd4\xca\x2c\x5d\x8a\x18\xb3\x60\xc3\xa0\x27\xd8\x56\x07\xe5\x28\xfa\x26\xe1\x1d\x42\x9f\x2e\xf0\x84\x24\x6f\x13\x39\x01\x5d\x5b\xe3\x3c\x78\xeb\x4c\x36\x00\x41\xcf\x60\xcf\xaf\xb0\x0c\x6b\xbd\x17\x79\x5d\x6e\xc0\xaa\x79\x96\xaa\x9f\xef\x30\x51\x57\x2b\x64\x9b\xa9\x36\x55\x10\x09\xaf\xbd\xa0\xd2\x46\x9d\x81\x2d\xbc\xfe\xaa\x36\xe5\xed\x06\x12\x14\xfc\x68\x18\xc7\xce\x15\x3f\xd6\x4e\x65\x6b\x90\x81\x96\x55\xf0\x86\x53\xc4\x38\x23\x88\xca\xe2\x65\x55\x4e\x87\xf2\x10\x3d\x5a\xc4\x37\xc6\x17\x5f\xa5\xcb\x17\x5f\x7a\x69\x4b\x4b\x01\x9e\xe0\x6d\x03\x2e\xbf\x9b\x11\xad\xa8\x62\xb1\x00\x88\x4f\xc3\x87\xcb\x32\xdd\xda\x71\xee\x5d\xe0\xbe\x77\x08\xae\x41\xa4\xae\xe2\x08\xc4\xc8\xca\xe0\x90\xc1\x41\xb5\x2f\xd9\x8f\x2c\x4c\xcd\x88\x79\xcb\x06\x10\x22\x95\x28\xc5\x19\xf8\xf4\x18\x57\xc5\x57\x06\x76\x49\xf9\x2d\xec\x39\x41\x5c\x9a\x1a\x5a\x0d\x2b\xb0\xce\xb4\xe3\xae\xdf\x62\x5d\xcb\xf0\x96\x0e\x9a\x77\x46\x9f\x08\x73\x34\xdd\x73\x67\x42\x0f\xca\x75\x9a\x2c\x8e\x30\x84\x19\x93\x38\xf4\x7c\xac\xe6\x48\xc6\x20\x73\x08\xf6\xc8\xf6\x4b\x76\x5f\x1b\x46\x63\x40\xd2\x4a\xe8\xf6\x2e\x30\x3c\xa4\x52\x8b\xdb\x6b\x32\xc1\xb1\x44\xbf\x63\x5c\xfd\x2e\x40\x36\x76\xc6\x0b\xf8\xd4\x99\xa0\x7a\x4b\x25\x5b\xe0\xd0\x5a\xc2\x41\x38\x40\xd8\x5a\xbb\xf2\xbb\xc6\x06\x14\x81\xef\x2f\x2a\x8d\x0e\x96\xb3\xe0\x9a\x6a\x5e\x75\x1e\x7b\x54\xbd\x16\xaa\x06\x4f\x53\x56\xaf\x38\xe9\x25\x43\xa7\x5c\xe7\xa2\xf7\x7b\xd1\xca\x35\xbf\x84\x08\xb0\x0b\xb5\xa5\xad\x23\xa7\xd6\x80\x20\xd7\xdb\x25\xb6\xc9\xf3\x6c\x92\xcb\x45\x39\x74\xcd\x96\xc1\x68\x40\xf9\x3d\x1e\xb1\x8f\x5c\xd8\x2b\x58\xda\x3a\x03\x13\x1c\x3d\x1e\x11\x16\x23\x9c\xab\xb9\x41\xdb\xb5\x7e\x85\x85\xa5\x06\x2d\x69\x00\xd9\x78\x28\x0d\x2a\x23\x2c\x62\x57\xf1\xe2\x89\xbb\x51\x8c\x58\xd0\x08\x54\x32\x80\x42\x4f\x50\xaa\xb6\x49\xd5\x24\x52\xeb\x57\x4d\x6b\x51\x57\x84\x75\xa9\x04\xeb\xea\x73\x56\x2a\x2a\x0b\x35\x18\x20\xc0\x89\x4f\x97\x57\x67\xe8\xac\x8d\x4e\xbf\xd3\xf4\xbc\xec\x85\xe8\x59\x8d\xc2\x98\xa4\xec\x0c\xb4\xa4\xf3\xad\xe3\xb5\x25\xd4\xe0\x69\x2e\x20\x5c\xb7\xae\xcd\xaf\xa3\x39\x4d\x0a\xdf\xc5\x37\x3d\x3f\x4c\xdd\x64\x42\x9e\x48\x62\x30\xeb\x23\x01\x91\xf9\xc6\x6a\xf8\x2d\xfa\x3f\xa6\x30\x29\xfa\xc3\x88\x7d\x02\x36\x9c\x24\x0b\x40\xd4\xf4\x2d\x63\x55\x69\xe6\xb1\x76\x00\xca\xa6\x02\xa1\xf2\x40\xcc\x5e\xcf\xf1\x13\x19\x31\xd7\xcc\xff\x41\x8f\xe8\xf7\xe8\x0f\x4d\xea\x9d\x0b\xb0\x7f\x61\x3b\xc7\xc7\x20\x7c\x3d\xb8\xe5\x2c\xa3\xb4\xfc\xc6\x99\x41\x4a\x46\xc8\x1a\x64\x0d\x0f\x8c\x4d\xd9\x13\x8f\x96\xb2\x38\xc2\x53\x8b\x05\x61\x6a\xcc\x78\x4c\xc6\xa4\xc6\xa5\xb9\x82\x49\x68\x21\xe0\x8a\xc7\x64\xad\x43\xd2\x33\xd3\x9f\xc0\x74\x23\xf3\x89\xdf\x0e\x48\xf0\xf7\xd9\xdc\xde\xfa\x50\xa6\xb4\xfa\x91\x7b\xf4\xd9\x6d\xc6\xbd\xad\x33\xd5\x85\x89\xf6\xe0\x42\xb0\x03\xa8\x77\xe8\x25\x58\x39\xf7\x7a\xf5\x38\x56\x1d\x01\xfa\x65\x3d\x73\x7b\x59\x05\xb8\xba\x50\xfb\x44\xd0\x19\xd5\xf2\x7b\x7b\x87\x2d\x70\xc2\x6d\xbc\x19\x06\x64\xb4\x95\x3b\xa3\x58\x0a\x07\xb4\x72\xe4\xe9\xaf\x70\x42\x4e\x78\x5e\x15\xe0\xed\x02\x50\x19\xba\xfb\xad\xac\xbe\xd0\x7c\x78\x66\x32\x00\xc9\x9c\x9a\x9c\xfb\xfe\xd9\x05\xd2\xa7\x83\xa7\x06\x98\x0a\x16\x2d\x57\x73\x2e\xe8\xaf\x8d\x19\x4a\xcd\x32\x7a\xe1\x69\x2d\x12\xba\xcc\x38\xcb\xd2\x3a\x10\xab\x11\x29\x54\x49\x2b\xa9\xd3\x99\xd0\x24\x07\x0c\x56\xcd\x66\xa7\x79\x62\x0a\x37\x44\x5c\xc4\xa6\x72\xba\x2c\xa5\x8f\x41\x18\xae\x13\xef\xb1\xf2\x0d\x52\x0b\x55\x69\x4b\x43\x18\x0b\xce\x4a\x01\xf4\xaf\x39\xc9\xf7\x94\x81\xf7\xa6\x31\xcb\xf7\x78\x26\x8b\x20\x64\xb3\x36\x9a\x37\x17\xeb\xfb\x0f\x3d\x53\x19\xe4\xac\x3a\xcb\xa2\x87\x80\x32\x2a\xb9\x29\x0c\xba\x91\x45\xe7\xd6\x40\xdf\xef\xc1\xa4\xf3\x1a\xf1\x1c\xcb\x32\x52\x0d\xfb\xb1\xe4\xf7\xe4\x33\x38\xab\x2c\xe2\x85\xec\x24\xae\x86\x40\x45\xfa\x78\x41\x93\xc9\x16\x4c\x6e\x59\xa8\x5e\x19\x15\x5d\x18\x50\x3c\x5b\xab\x49\xa6\x56\x1c\xd2\x2e\x9e\x05\x05\x84\xb8\x45\xf1\xb2\xaf\x81\xeb\xae\x8b\x90\xc7\x68\x29\xc5\x88\xb5\x10\xd7\xe1\x96\x70\x51\xcf\xe3\x37\x30\x40\xd8\x86\xca\x5d\x2f\xfb\xed\x9b\x4e\x84\x61\x49\x87\x7a\x24\x96\xe1\x61\xd6\x1e\x06\x5f\x09\xe4\x6d\x0c\x88\x5e\xb4\x79\xbd\x93\xe1\xc9\x71\x1c\xe1\x68\xde\x38\xa9\x09\xe7\x09\xc1\xac\x49\x7a\xad\x7d\x5c\x3d\x22\x06\xdc\x14\x58\x77\x92\x00\xc2\xaf\x5b\x02\x5b\x15\xb2\x10\xdf\x59\x0c\xc8\xec\x86\x87\x9b\xd8\x40\x37\x50\x45\x98\xb3\xfc\x50\x36\x4b\x48\x75\xad\x2c\x84\x7e\xcf\x76\x92\x44\x79\x12\x94\x85\xcc\x88\xd0\xa3\xd6\x4b\xfc\x44\x98\xd6\x19\xec\x38\x9c\x33\xe3\xd9\x25\x44\xfb\x62\x50\x3d\xdf\xb5\xf3\xa7\x41\xd6\x61\x3c\x62\x70\x70\x79\xf9\xb0\x6a\x5a\x95\x5a\xcd\x08\xed\x52\x5b\x9f\xce\x40\x88\xd8\xf8\x78\xde\x95\xcd\xc4\x1b\x9f\x49\xd3\xf7\x18\x62\x0c\x76\x76\xad\x05\xee\x97\x02\xaa\xc1\x6c\xac\x83\xe3\x7a\x25\x23\x32\x44\x6d\x94\xc3\x4e\x83\xa0\x8d\x26\x38\xa8\x17\xbd\x4b\x8a\xf2\x17\xee\x36\x68\x39\x94\x95\xae\xea\x96\x8e\x67\xb0\x4e\xae\x3a\xb7\x17\x36\x64\xbb\xec\xb2\xf5\xf9\x3d\x45\x98\xa3\x2d\xf0\xaa\x04\x06\x74\x02\xc8\x29\xff\xc9\x68\xd8\x54\x1a\x0b\x98\x2b\x73\x91\x66\x6a\x61\xab\xa2\xc1\xbd\x18\xe6\xf4\x1a\xc4\xb7\x3a\xf7\x70\xf5\x8e\x8c\x4b\x0e\xe2\xba\xce\xa0\x23\x6b\x56\xa8\x6d\xd2\x2d\x74\x88\x20\x52\x41\x6c\x68\x8a\x06\x31\x05\x66\xc7\x38\x69\xb4\x65\xed\x81\x69\x42\x9a\x6d\x81\xd2\x60\xc1\x5f\x95\xc8\x89\xe6\x5d\x38\x49\x2a\xf3\xc2\x90\x0e\xad\x7c\x91\xb9\x49\x51\x09\xb7\xbd\xb3\x3a\xc1\x13\xb2\x91\x7b\xfa\xc2\x7c\xb0\x92\x8a\xe0\x15\x88\xec\xce\xb2\x64\xd1\x2e\xa2\x3c\x0c\xbd\xab\x05\x49\x5b\x37\xb0\x10\x5a\x6d\xe5\xdd\x54\x86\x27\xdb\x6e\x88\x92\x44\xb9\xa0\x6a\x31\xb6\x46\xbf\xf6\x4c\xeb\xce\x7e\x79\x66\x3f\x6c\xa3\x51\x9f\x22\xd7\x9f\x33\x32\xc2\x3d\x25\xa8\xa9\xa0\x63\xa7\xd0\x66\xbb\xb5\x96\x5c\x0b\x9e\xb4\x6a\x61\x1d\x7a\x53\xbb\xa1\xea\x2e\xb6\x1d\x9e\xad\xcc\x31\xe6\x53\x87\x8b\xd4\x7e\x61\xab\x25\x4b\x36\xb0\x96\x3a\xf8\xe5\x4c\x50\x2e\x6c\x65\x90\x36\x41\x6d\x29\xfe\x3c\xce\xb0\xc0\x49\x42\x12\x2a\xd3\xed\x6d\xbb\x7f\xfa\xe3\xca\xd1\x9e\x99\x0a\x36\xd2\xd6\x83\xfa\x4c\xd3\x3c\x45\x2c\x4f\x27\x56\xca\xc5\xf2\x31\x04\xbf\x74\xa9\xfa\x06\xc3\xc9\x0d\xb0\x04\x18\x20\x02\x38\xd3\x11\x0b\x80\xad\xad\xa9\x02\x47\x73\x4a\x9e\x00\x76\x53\x30\x22\xe5\x31\xba\xe2\x8a\x9c\xa2\x4b\x9c\xdd\x83\xa0\x66\x4a\x4a\xce\x8c\x75\x1c\x4b\xa4\xa5\xd6\x9c\x51\xd5\x1b\x31\x8b\x86\xed\x56\xe5\x24\xe2\xcc\x20\xa2\x46\xb0\xb0\xbe\x09\x30\xf7\x3a\x68\x50\xe5\x12\x1b\xa9\x6c\x58\x6c\x81\x9f\xc7\x41\xf4\xea\xd8\x64\x07\x6c\x40\xc7\xb7\xf8\xd9\xc4\x6b\x9f\x63\x85\x4d\xb5\xd8\x55\x92\xbb\x0d\x88\xb2\x15\x84\x0c\x10\xb0\x0b\x1c\xe1\x16\x8d\xc2\xd7\x3e\x33\xd1\xa9\x5f\xd3\x63\x72\x8c\xbe\x4b\xf8\x44\xf6\x90\xf4\xa0\xd9\xf0\x50\x12\x25\x7b\xc6\x41\x05\xff\x36\xa9\x60\xdf\xb8\xd5\x2f\xf8\x3e\x94\xfd\x9b\xd2\xcf\x06\x04\x43\xfe\xe9\xf4\xe4\x24\x5d\x1c\x4d\xf2\xe8\x91\x28\xfd\x17\xc8\x14\xb5\x2b\xe4\x10\xa4\x70\x1d\x1e\xd5\xba\xd5\x59\xc6\xb2\x6a\x45\x91\x36\xad\x46\x12\xc0\x4d\xd7\x57\xba\x2f\xac\xea\xa0\x8f\x38\xab\xaf\x1a\x69\xa7\x2c\xf2\xa6\xe3\x55\x02\x5c\x7e\x1d\x6d\xc5\x14\x8e\x0d\x71\x9e\xa7\x09\x9e\x55\x54\x96\x0d\x94\x94\xeb\x94\x5a\x2a\xd2\x73\x87\x78\x0b\x7d\xca\xca\x51\x66\x5f\x39\x77\x24\xb8\x15\xad\xbb\xe5\x78\xc4\xfa\x12\x3d\x13\x53\x0f\x16\x72\x12\xc1\x3b\x91\x53\x39\xf7\x19\x89\x60\x2f\x85\x46\x0d\x1c\xae\x41\x4d\xb0\x8a\xa3\xd3\xac\x9c\xff\xc6\x6a\xa0\x38\x91\xa4\xa7\x1b\x06\x48\x34\x17\x48\x88\x9e\x05\xce\x32\x22\x46\xcc\x42\x9b\x02\x80\x37\xe7\x36\x48\xa4\x29\x9a\xbc\xd3\x28\x5f\x57\xa3\x0c\x93\x3e\xca\x09\x8b\xeb\xce\x37\xe4\x37\xae\x4c\xf5\x58\x91\x1b\xa8\x65\xd1\xb6\x91\xde\x6f\x6f\x36\x6e\x39\xe6\x75\xda\x79\xbf\x12\xa6\x0f\xe5\xa6\x53\x50\x20\x65\x51\x55\xd3\xd9\xfa\xbc\xfa\x5e\x12\x73\x00\x19\x1b\x3e\x8e\x39\x91\x81\x11\x1f\x79\x5b\x5c\x42\xa7\x44\x4b\x1f\x23\xa6\xc9\x38\x74\x38\x18\x80\x6d\x87\xb7\xad\x3b\x8d\x04\x97\xd2\x46\xde\x9b\x76\x56\xe7\x4f\xed\x50\xcb\xcf\xa0\x84\x0f\xaf\xaf\xc6\xcb\x55\xfd\x82\x67\xae\xbe\x9f\x7d\x58\x9b\x64\xdf\xd8\xd4\xda\x6a\x7e\xc5\x5a\x6c\x50\xcf\xef\xe4\xec\x62\xe8\x8b\x58\x55\xba\x5e\x2e\xe8\x17\x22\xab\x37\x97\xf4\x5b\x9e\x71\x50\xdc\xaf\xd2\xc4\x8a\xf2\x7e\xeb\x37\xab\x1c\xef\xbb\x0b\x6c\x5e\x65\xeb\xd7\xf2\x87\x32\xcd\xac\x0b\x4b\xdf\xd3\x36\x35\x5c\x2b\x11\x08\x8c\x2f\xed\x61\x07\xc1\x4b\xbf\x25\x15\x4e\xb3\x30\xe5\xd2\xe1\x86\xda\x69\x9a\xa3\xd6\x74\x09\xbe\x2a\x9e\x79\x84\x4d\x34\x4b\x75\x70\x4b\x5b\xb1\x99\xc7\xeb\xde\xc2\xa4\xef\x23\x8c\xf9\xf5\x72\x98\x93\x45\x11\xb5\x27\xad\xec\xe6\x4a\x70\x37\xd8\xfd\x27\xc4\x43\xc2\x37\x6e\xe8\xae\x49\x8a\x1e\x3a\x4a\x10\x2c\x6d\x38\x06\xe4\xf2\x55\xf2\x7c\x36\x30\x0f\xfb\x31\x9b\x6c\xe0\x23\x5f\x84\x21\xb8\x6a\x6c\x5d\xb1\xc8\x1d\x44\x2a\x04\x79\x22\x02\x68\xc7\xc6\xfc\xb0\xf2\x51\xc5\x89\x20\x38\x5e\x04\x2b\xe2\x03\x0e\x4c\xcf\x60\x1e\x93\x34\xd5\x0a\x3c\xa8\x26\x8c\x1f\xf1\xcc\xe9\x2c\xa5\xb7\xa0\x82\x06\x9d\xea\x1b\x2b\x08\x57\xd0\x5f\xb0\x23\xf2\x99\x4a\xa5\xe5\x8a\x9a\x58\x4d\xd7\x08\x48\x3c\x50\x57\x6b\x4e\xec\x0d\x37\xfa\xd0\xff\xee\xfa\xf6\x7e\x70\x3e\xfa\x50\x44\xe7\xbb\xf4\x33\x8f\x08\xe5\x00\xfe\x39\x1b\x31\x1f\x50\xeb\x01\x90\x61\x2f\x11\x8e\xe3\x02\xd9\xc0\x2a\x91\x46\x66\x5b\xc9\x91\x83\x53\xb1\x36\x94\x76\x45\x33\x0f\x90\x83\x74\xa8\x27\x6b\x85\xeb\xac\x74\x72\x4c\x26\xd5\x8a\x94\x97\x3d\x5d\x36\x21\x76\xab\x32\xba\x36\x51\x0e\x5c\x90\x91\x67\xa7\x2b\xc1\xed\x7c\x82\xcd\x25\xbc\x19\xb7\x73\x1b\xb2\xc5\xa6\x7e\xa4\x9f\x49\x7c\xdb\x20\x55\xed\x25\xa3\xa5\x55\x24\x60\xed\x2e\xe4\x8c\x6e\xa2\xf1\xfb\xa9\x3c\xe8\xef\xda\xb3\xa5\xeb\x02\x92\xad\x80\x57\x05\x6c\x55\x85\x30\x8a\x88\x50\x98\x32\x34\x85\x83\xcd\xa2\x05\x02\xc0\x0e\x02\x3e\xec\x3f\xa2\x94\x32\x40\x0e\x58\xb5\xb4\x0f\xe5\x79\x6c\x20\xb4\x5e\x0e\xaf\x1e\xee\x4b\xa2\xea\xf7\xd7\x0f\xe5\xa2\xee\xfd\x9f\x57\xca\xaa\x95\x16\x56\x05\x0b\x05\x53\x2c\xb2\x10\x2d\xca\xac\x5f\x99\xda\x89\x26\x0b\x45\x1e\x6e\x2f\x76\x92\xef\xea\x9d\x65\x8d\x18\xe1\xa1\x74\x55\x8f\x88\xd0\xe6\xd3\x98\x44\xeb\x50\x4c\xdb\xd3\x91\x89\x82\xd2\xeb\x60\xad\x89\x16\xe1\x0c\x4b\x94\x61\x61\xfd\x50\xb1\x09\x80\x2a\x57\x06\x33\x9a\xd7\x2a\x04\x89\x4f\x44\xfd\xa8\xaf\x3e\xce\xf6\x91\x05\x61\x45\x59\xf0\x8f\x92\xf1\x93\x69\x78\x83\x93\x66\x87\xb2\x22\xd5\xc5\x09\xcb\xd0\x03\xb2\x3d\x84\xb8\x0b\xc7\xa6\x42\x7c\x5f\x37\x07\x2b\xe2\xe2\x09\xb5\x4a\xca\x99\xa6\x48\x03\xa7\xea\x30\x58\x83\xe6\xf8\xd4\x7c\xdc\x12\x91\x2e\x88\x6a\xd7\x6d\x15\x4b\x89\xfa\x37\xc3\x9a\xb5\xbe\xa8\xba\x90\xbe\xac\x72\x36\x89\xf7\x66\xed\x1b\x24\x29\x48\x4f\x3c\x08\x54\x24\x3b\xd3\xdd\x60\x90\x8c\xd3\xff\xa6\x1c\x49\x70\x08\x68\xbd\x75\x2a\x43\x29\xed\x78\x0d\x30\xef\x66\x99\x78\xc5\x32\x6c\x08\x7a\x14\x0e\xc8\xa6\x81\x84\x40\x3f\xcb\x31\xc6\xbd\x10\xf8\x87\x9b\x82\xb9\x36\xb6\x60\x6f\x60\x48\xc5\x6c\xda\xa0\x21\xfd\x68\x28\xda\x83\x65\x00\xfc\x87\x2b\xc8\xe8\x62\x83\x6d\xee\x7a\x38\xdd\x90\xda\x36\x03\x50\x2a\xc6\xe7\xcc\xdf\x16\x8b\x1a\x67\xd8\xda\x1d\x40\x89\x72\x95\x12\xea\x0a\xeb\x1d\x8f\x58\x10\xb0\x22\x8d\xda\xa3\xcf\x88\x2b\x4e\x02\x15\x6f\x19\x00\x5b\x43\x92\x8e\x17\x7e\x4a\x3b\x50\x4d\x91\x57\xf3\x72\x79\x91\xa5\x7e\xec\xe9\x94\x73\xec\x12\x11\x9d\x05\xc5\xc6\x01\x86\xf6\x25\x68\x2f\x28\x28\x60\x3b\x06\x73\x34\x18\x2d\x70\x50\xae\x2e\x48\x5e\x8f\x39\x91\xec\x2b\xe5\x53\x3d\x69\x62\x4b\xa2\xe0\xaa\x7b\x40\x4b\x75\x98\xda\x96\x57\x1f\xf0\x3d\xa0\x33\x6d\xaa\x38\x04\xc7\x6a\xad\x99\xca\xf9\x78\x81\x12\xc2\x58\x24\xe8\xb4\xc9\xaa\xfe\x39\x23\xd1\x36\x10\x32\x37\x58\xe0\x94\x28\x22\x56\x85\x23\x95\x8b\x49\x83\x88\xe3\x76\xd0\xf6\x6b\x76\xd1\x54\xda\xa8\x96\x64\xf1\xda\xed\xc5\x3a\x48\x18\x3f\x8b\x8d\xd0\xaf\xf4\x34\x7e\xb4\x96\xff\x0d\x67\x61\xfb\x29\xa6\x61\xa3\xad\x02\x04\xa0\x5d\xe7\xf4\x3a\x50\x28\xf7\x4b\xa0\x22\xa5\x70\xa1\x03\xc1\x40\x59\x3f\xca\x26\xf0\x93\x75\xbc\x74\x2f\xbc\xdb\x65\x38\xb8\x14\xda\xca\xa1\x2a\xe5\x4e\x00\x95\x80\x4a\x65\x70\x40\xea\x01\x4c\x40\x68\xa9\x8b\x90\x0c\xdc\x7e\x16\xde\xae\x30\xe8\x5a\xc9\xaa\x5a\x5c\xaa\xb2\x5c\x6b\x78\xdc\xbe\xc0\x1d\x3a\x89\x66\xdf\x12\xcd\x3a\x52\x2e\x45\xd7\x6a\xea\x24\xa2\x82\x33\x63\x8b\x3e\x5b\x80\x80\xf2\x04\x21\xf7\xc8\x5e\x91\xb6\x72\x2c\x5c\xfd\x94\xf9\x7f\x95\x39\xb8\x23\xea\x90\x54\xeb\x92\x2a\x8f\x03\x17\x14\x78\xa0\x92\x50\x1a\xb0\x71\x35\x30\x5a\x13\x06\x69\xac\xfc\xc3\x2b\xe3\xc0\x82\xe4\xe6\x05\xcf\xd1\x33\x95\x73\xa4\xf8\x88\x41\x9c\xa0\xf7\x06\x28\x8e\xcc\x8b\x3d\x78\x0b\x60\x10\x64\x3e\x49\xa9\x42\x38\x98\x61\xc9\x24\xd9\xb3\xe7\x59\x7f\x00\x33\xae\xcd\xb3\xaf\x83\xe8\x59\x73\x68\xb6\xb0\xaf\x15\x8d\xec\x9a\x4a\x1f\xc4\x34\xbf\x6c\x32\x7d\xa0\xf1\x84\x1a\x66\xed\x99\xeb\xb2\xe9\x51\xbd\xb5\xc1\x82\x86\x02\xb2\x2b\x95\xaa\x72\xb7\x58\x43\xcf\x9a\x4c\xfa\x62\x23\x5a\xa5\xd2\x17\xaf\xef\x23\x97\xbe\xa9\x4c\xd9\xaa\xdc\x4a\xf7\x49\x83\xfd\xdb\xe5\xec\x2a\xee\x02\xe7\x43\x49\xe9\xa6\x51\x52\x3a\x34\x54\xb3\x22\x21\x60\xfb\xf0\xf2\x4d\xd4\xc1\x22\x3f\x2b\xa4\xa2\x20\xdd\xb2\x8c\x09\x43\xaa\x9c\x9f\x71\x05\x39\x35\x11\x94\x70\x5f\xca\xf3\x1c\xb1\x7a\x09\x64\x35\x4f\xdc\x35\x45\x63\xaf\xe8\x67\xc1\xf9\x73\xb3\xb0\x16\xad\x9f\x7c\x90\x9b\x51\x96\x6d\x31\xf6\xaa\x88\x59\xb8\xf8\x9a\x82\x93\xb4\xe0\xb1\x4d\xc2\x71\xcd\xa9\xac\x1f\xfa\x52\x02\xc5\xda\x73\x61\x2f\xdd\x3d\xaa\x76\x4b\xdc\xb9\x75\xbe\x89\x97\x91\x2d\x37\xb6\x01\xd3\xb1\xd7\xe3\x2b\xae\xda\x6d\xaa\xcc\x02\xaa\xe8\xde\xb0\x50\xab\xf0\x04\xba\xf1\x1e\xb8\x77\xed\xd8\xb1\x09\x75\xf1\x08\xdd\x95\x3d\x29\xcd\xd8\x56\xef\x7f\x89\x59\x6f\x5a\x1a\x38\xf0\x37\x0a\x1b\xef\x4b\x43\xcb\x01\xd4\x04\xb6\x61\x92\x15\x4e\xec\x85\xbb\x9c\xc5\x44\x30\x82\xd5\xfc\xf5\xb2\x2c\xce\x76\x35\x4f\x07\xe3\x7b\xd9\x8c\x8b\xb3\xbd\xd4\x85\x0f\x87\x5b\xae\x91\xbe\x76\x9c\xfa\xf5\x36\x96\x22\x1b\x7c\xe0\xab\x04\x2f\xa9\x8e\x35\x66\xc3\x00\x84\x66\x13\x2a\xdd\x29\x11\xa3\x5e\x9d\x7b\x99\x94\x94\x1a\xbb\xcf\x52\x32\x8a\x3e\xed\x61\x6d\xe5\x35\x4b\xf2\x45\xe4\x7e\xbc\x7c\x3a\xc2\xaa\x2a\xce\x79\x90\xa1\x00\xa5\xb4\x15\xa6\xcc\x72\xaf\x55\x49\x09\x5a\xa6\x4c\x71\x5d\x1e\xc2\xc1\x67\xb8\x7c\xf1\x09\x2e\x5d\xba\x43\x97\xee\x50\xb3\x47\x5d\xba\x03\x42\x87\x96\xee\xb0\x4e\x05\x5d\x65\x00\xf5\x3e\x39\xa8\xb6\x59\x2a\x71\x63\xf6\x77\x8d\x1e\xb9\x7d\x48\xbf\xb3\x21\x86\xf1\x50\xf6\x17\xfb\x43\x6d\x48\xd4\xd2\x67\xd5\xd9\x86\xf6\x4c\xb6\xa8\xba\x05\xb0\x88\x13\x8b\x43\x67\x03\x96\xcb\xf6\xa7\x55\xa6\xd2\x11\xfb\x9e\x3f\x93\x27\x22\x7a\x08\x2b\x94\x72\xa9\x80\x0f\xbb\xf8\x18\x38\x08\x25\x48\x73\x13\x07\x81\xd1\x15\x4e\x49\x6c\x2a\x1e\x06\x61\x8d\xd6\x60\x6b\x5d\xad\x75\x70\xab\x80\x1c\x6a\xb6\xc1\xc5\x4d\x8c\x98\x09\x35\x34\xe1\x6d\x20\x2b\x50\x37\x31\x20\x98\xdf\x79\x47\xf0\xef\x8e\xd1\xbd\xbe\x9f\xa8\x2c\x8f\x37\x40\x5f\x6b\x1a\xdb\x88\xcd\x04\xcf\x33\x6f\x43\xe3\x13\x53\xfa\xd6\x44\x3f\x2d\x3b\x82\x61\x30\xce\x0b\x1c\xe1\x58\xeb\xe2\xab\x09\xe7\x4d\xa2\x50\xb7\x82\x30\x0a\x09\x48\x1f\x43\x1f\x5a\x67\x43\xdd\x8d\xff\x36\x00\x6e\x59\x05\xc4\xfe\x42\xce\xe5\x73\x22\xc1\x2a\xe4\xad\xee\xa5\x3c\xf2\x32\x56\x41\xed\x38\x57\xd9\x44\xbd\xdf\xc2\xd9\xf6\xeb\x61\x10\x8a\xce\x6d\xcc\x97\x49\x52\xb5\xf7\xc4\x8b\x59\x4b\x5b\x47\xcf\x36\xf1\x8b\x9b\x5c\x64\x1c\x24\xb1\x64\xe1\x60\x1b\x2c\xd2\x5b\xc6\xb3\xdc\xc4\xb5\xd1\x30\xcc\xa9\x96\xb2\xa9\x54\x97\x58\x45\x73\xcd\xb9\x0b\xc4\xb3\x3d\xc5\xfb\x15\x5c\xf9\x65\x2d\xa8\x35\x33\x38\x0b\x7b\x6f\x70\x29\xb4\xb0\xa8\x9b\x7b\xdf\x85\xd7\x3b\x49\x22\xd5\xfd\x19\xb7\x9b\x2d\x68\x1d\xd8\x45\xdd\x27\xf6\x89\x9e\xe8\x3a\x2a\x5a\x37\xfe\x76\xb4\x55\xae\xb8\xb5\xf7\x48\xc2\x1d\x20\x64\xce\x2d\x60\x57\xf1\xa2\xad\xd0\xda\xe0\xfe\x17\x74\xbb\x2c\x20\x8b\x92\xff\xa4\xc5\x11\x6f\x71\x4d\x71\xa6\x95\x08\xc5\xf5\x2d\x29\x66\x46\x8e\x35\x71\xb2\x08\xa3\x5c\x50\x77\xf6\x2b\x39\xe1\xcd\xd4\x01\x16\xca\x93\xb0\xa2\x52\x84\x83\x62\x73\xc6\xe1\x8f\x23\x95\x63\x1f\x98\x08\x34\xe1\x8a\xa0\x9b\xfc\x77\xe7\x58\x17\x4e\xbc\xab\xd9\xd3\xb5\x84\xbd\xc3\x2e\xe3\x3a\x7c\xc3\x56\x27\x8d\xb2\x59\x00\x8e\x58\x6f\x25\x6e\x53\xfb\xa0\xf6\xcb\x76\xf5\x1b\x6a\x3f\x75\xb2\xcf\x36\xdf\xae\x00\x6f\xda\x3a\x36\xbb\x14\xe7\x6e\x03\x61\xad\xf4\x14\xc2\x56\x5a\xfb\x1d\xa0\xcf\x52\x70\xd4\x63\x2b\x4d\xfd\x97\xff\xcb\xd4\xca\x32\x4b\xf3\x5f\x88\x8b\x11\x33\xbf\xf7\x7c\x9d\x0a\xfd\x42\x01\x00\x8b\x53\x52\x40\x64\x8a\x32\x98\x1e\x40\x8a\x58\x30\x34\x03\xf6\xeb\x61\xfa\xf5\x18\x1e\xf3\x09\x11\x8c\xe8\xa1\x39\xf0\x01\xcf\xcc\x52\xcc\xf0\x0c\xa0\x85\x7b\x10\x19\x07\xe2\x6a\xa1\x8a\x18\x92\x36\xf5\x0e\x81\x5b\x69\x66\x69\xf3\x6d\x8b\xba\xbf\xd0\xa7\x11\x65\x2d\xb2\x69\x11\x5e\x51\x4f\xfd\xb7\xb6\xff\xed\x24\xf6\xfb\xfe\xdd\x0f\xe3\xdb\xc1\xdd\xf5\xc3\xed\x59\x49\x6c\x3f\xbb\x78\xb8\xbb\x1f\xdc\xd6\x3e\x2b\x72\x55\xff\xfa\x30\x78\x68\x78\xe4\x1a\xb8\xe8\x7f\x37\x28\x15\xd1\xfe\xeb\x43\xff\x62\x78\xff\xf3\xf8\xfa\xe3\xf8\x6e\x70\xfb\xe3\xf0\x6c\x30\xbe\xbb\x19\x9c\x0d\x3f\x0e\xcf\xfa\xfa\xcb\xf0\xdd\x9b\x8b\x87\x4f\xc3\xab\xb1\x0b\x3b\x0e\x1f\xfd\x74\x7d\xfb\xc3\xc7\x8b\xeb\x9f\xc6\x41\x97\xd7\x57\x1f\x87\x9f\xea\x66\xd1\xbf\xbb\x1b\x7e\xba\xba\x1c\x5c\xad\x2e\xd6\x5d\xbf\x1a\x8d\x75\x80\x83\x8b\x2c\x30\x1a\x05\x62\xd2\x64\x61\x49\x9b\xfe\x0a\xbe\x8b\x1b\x43\x8f\x47\x3d\xf7\x97\x29\xad\x7d\xa4\x59\xa0\xf3\x8b\x15\xdc\x63\xc4\xbc\xe3\xd2\x5f\xaa\x0a\xcf\xa4\x4b\x3d\x2e\x8d\xf6\x14\xf5\xe1\xac\x80\xc2\x50\xea\x14\x32\x1b\xfc\x48\x9d\xab\x1b\xe8\x30\xa1\x29\x05\xaf\x37\x3a\x42\xd5\x0d\x2f\x37\x68\xe7\x04\x43\xb0\x7e\xbb\x78\xd5\x69\x90\xd5\xac\x66\xa0\x94\x53\xe4\x38\x34\x31\xe6\x04\x83\x3d\xbb\x60\x38\xa5\x51\x35\x05\x03\xe0\x57\x51\x01\x35\x52\x6d\xb1\x44\x60\xe5\x96\xe7\x04\xfd\xf0\x97\x62\x50\xe0\xc1\xb0\x9a\x77\xbe\x54\x51\xcf\x3e\x10\xb9\x59\xd5\x75\xe4\x59\xea\xc9\x1d\x73\x6b\x5a\x86\x73\x6b\x2b\x77\x83\xbb\x29\x67\x01\xdc\x58\xc9\xf7\xa4\x8f\xb7\x99\x51\x85\xc6\x4f\xd1\x1d\x40\x9d\xc8\x42\x75\xd7\xbb\x98\x25\xf9\x8c\x32\x44\xd3\x2c\x21\x45\xcd\xf7\x09\x99\xe3\x27\xca\x5d\xf9\x0a\x53\xe5\x03\xd6\xd1\x8a\x56\xe8\x08\x35\x1e\x94\x53\xd4\x8f\x63\x59\x66\x70\x25\xca\x71\x2c\xf3\xa8\x3c\xec\x10\x21\x8c\xc5\x9e\x6d\x56\xe8\xa8\x38\x72\xb0\x62\xfb\x07\x73\x59\x66\x87\xe5\xbb\x77\x87\xeb\x5f\xaf\xe0\xd8\x91\xf2\x78\x2b\x61\xe0\x1e\xcb\x47\xc7\x9a\xd7\x09\x04\x0e\x56\x67\xb7\x1e\x2d\xbe\x4e\xdb\x4e\xfd\xca\x8e\xe1\xa0\x6d\xd7\x67\x23\x2a\xf4\x9a\x2e\xdd\x8c\x93\x4a\xe9\xae\xd6\xfd\x95\x4a\x7f\xd5\x76\xb6\x57\x6f\x4f\xbd\x34\x06\x47\x72\xec\xe9\x7f\x83\x79\xdc\xc0\xa7\xd7\xfe\xcb\x95\x22\xdb\x38\x58\xb7\x4d\x7d\x40\x4b\x49\xba\xd6\x0f\xb4\x92\x0e\xf7\x04\xef\xd4\x5e\x18\x84\xc2\x0b\x34\x02\x77\x1f\xa6\xcc\x96\xe3\x21\xde\x1f\xe5\x0a\x50\xeb\x73\xec\x4b\xc4\xe1\x09\x7f\x2a\x29\x97\x29\x91\x12\x37\x00\x96\x04\x26\xb1\x5d\x18\x83\x3f\xa1\xf6\xc3\x96\xf4\xe4\xce\xe4\xbd\xfe\x6a\x95\xd1\xe7\x36\xd4\x8c\xdd\x44\xb5\xc0\x1a\xbb\x48\x5b\x74\x6d\xf2\xed\x34\x7f\xe9\x15\xc1\x34\x5c\x04\x31\x46\x4d\xee\x9f\x96\x66\xb5\xea\x82\xd5\x56\x59\x0a\x5d\x78\x9b\xc7\xe0\x04\xad\x6f\x8d\x88\x6d\xfd\x2a\xb8\xbc\x3e\x1b\x50\x5d\xc9\xdf\x19\x56\xa0\x8e\x78\x9a\x1a\xb9\xa0\x64\x4b\xed\x21\x6c\xd2\x1c\x0b\x69\x4a\xe6\xd1\xdc\x78\x99\xf4\x95\xd1\x1b\xb1\xe7\x60\x43\x4a\x81\xc0\xfd\xb0\x25\x40\x13\xfd\xac\x8f\x1b\x7d\x2a\x85\x57\x83\xc8\x48\x21\xd6\x37\x20\x04\xe3\x10\x2c\xca\x47\xad\x21\xf0\x60\xbf\x76\x20\xf5\x2d\x6a\x05\x56\xd6\xb7\xa9\x62\xa0\x9f\x5b\x50\xa8\x6f\x07\x4d\xb9\xed\x10\x82\x5a\x81\x75\x23\xd8\x43\xa9\xc0\x57\x85\xf7\xf6\xe9\x9a\x26\xbb\x37\x9d\x58\x8c\x0a\x3d\x5d\xb7\xda\xbf\x77\x33\xfa\xbd\xf1\x3b\xe4\x0d\xa0\x26\x41\x6b\x1e\xe1\x1b\x1d\x69\x99\xd5\x25\xdb\xdb\x40\x0c\x89\x8e\x0c\x6a\xe0\x57\x10\x69\xd9\xbf\x19\x7e\xd5\x43\x5f\x85\xd9\x66\x5f\x6d\x75\x00\xed\xb8\x6d\xb9\x40\xd0\xa6\x4a\x29\x07\xe5\x63\x07\x7b\x55\x39\x89\x76\xcf\xec\x41\x44\x4d\xe7\x50\x7f\x59\xfa\x06\x9c\xd3\x50\xfe\xce\xf8\x6f\x7d\xc0\xb3\x75\x01\x19\x19\x97\xca\x9a\xb5\x8b\x47\x6c\xb2\xa8\x3a\x79\x7a\xde\xcb\xd3\xfa\x94\xee\x5c\xd2\x4d\xb7\xb7\x9c\x9e\xbc\xe7\x40\xdc\xd5\xf7\xc1\x9a\x84\xe7\xbe\x89\xb9\xe6\xd3\x80\x8b\x35\x45\x29\x74\x11\xec\x75\xb3\x2a\xd9\xcb\xdc\x62\xd6\x6e\xca\x3a\xf9\xe7\xbd\x91\x5b\x8b\xb0\xef\x7e\xdd\x8a\xd8\x88\xff\x06\xe1\xba\xa3\xb2\x97\xa5\xb2\x7d\x64\x3c\x94\x07\xb7\xf9\x05\x7a\x66\xe4\xb8\xa0\x19\x67\x70\xd5\xca\x84\x67\xf0\xa5\xba\x7f\xeb\x0b\xe6\x6e\xe8\xf3\x0d\xd6\x64\xbd\xd3\xf7\xce\x04\x0e\x18\xb7\xeb\xf2\x58\xab\x43\xed\x2b\x5b\x84\x88\x53\x93\xdd\xa8\x68\x4a\x7a\x88\xb3\x64\x11\x04\x3b\xd8\xf3\x0a\xe4\x66\x62\x94\xe6\x84\x0a\xd7\x89\xc5\x18\xdc\x28\x1d\x7e\x43\x69\xbc\x89\x46\x76\x88\x34\xb9\xea\x5f\x0e\xce\xc7\x83\xab\xfb\xe1\xfd\xcf\x35\xf8\x91\xe5\xc7\x0e\x42\x32\x78\xe1\xee\xe7\xbb\xfb\xc1\xe5\xf8\xd3\xe0\x6a\x70\xdb\xbf\x5f\x03\x2f\xb9\xaa\xb3\x26\xe8\xc2\x5c\xd6\xa9\x6f\x9b\xc0\x17\x3a\x33\x6f\x4d\xef\xcb\x20\x93\x41\x27\x94\x34\x00\x4d\x9a\xd4\x7f\x16\x13\x81\x62\xf2\x44\x12\x9e\x15\x66\xd5\xda\x05\x0b\x10\x28\x6b\xda\x5f\x85\x42\x09\x6d\x56\xd7\xf8\x14\x99\x5a\x6f\x41\xb9\x5b\xdf\x20\x88\x7c\x58\x10\xf6\x95\x42\xe4\x73\x96\xd0\x88\xaa\x20\x35\x90\x0b\xeb\x5e\x31\xee\x43\x88\x4e\x5d\x43\x5c\x7b\x8b\x46\xd9\xbb\xce\x1f\x7a\xd2\x97\xb5\x7d\x7f\xa2\x3c\x22\xda\xda\x02\x42\x7b\x50\xec\x1b\x9c\xc6\x4b\x80\x6d\x5b\x8c\xee\x25\xcc\x03\xcb\x39\x3a\x36\xbd\xaf\x01\xcc\xad\x7e\x90\xeb\x6f\xc3\x55\x71\x32\xa5\x73\xbd\x3a\x50\xa6\x1d\xa5\xbe\x71\xb8\x4b\xa9\xb0\xe6\x1e\x90\x37\x6c\xec\xfa\x86\x01\x0b\x4b\xf5\x62\x98\x89\x39\xc5\x48\x90\x94\x2b\xad\x80\x99\x88\x80\x9e\x16\xaa\x28\x4e\xe8\xaf\x80\x51\x25\xc8\x71\x10\x41\xe1\x90\xbd\x0a\xf7\x81\xc5\x8f\x38\x1e\xb1\xf3\xc1\xcd\xed\xe0\x4c\x33\xa4\x63\xf4\x20\x01\x7e\xaa\x34\xf5\x73\x4b\xde\x46\x1c\x0b\x23\x19\x28\x93\x8a\xe0\xa6\x60\x30\x22\x04\x17\xed\xf9\x83\xef\x6f\x00\xdf\xd5\x93\x37\x3c\x2b\xd9\xa6\x9c\x01\xe0\xaa\xb1\x2a\x72\x90\x33\xb0\xf7\x9c\xac\x5b\xfc\x5c\x5a\x91\x10\x7e\x03\x24\x91\xf2\xaa\xbf\xe0\x6a\x03\x80\x67\xfb\xf9\x95\xfa\xbc\x81\x6f\x57\xcd\xf3\x1e\x42\xec\xa4\x2a\xd0\x40\x0d\x60\xa8\xaf\x7a\x53\x99\x67\xa3\xa8\x28\xde\x02\xaa\xa3\x42\xfa\x13\x32\xc3\x0c\x89\x9c\xb1\x0a\x3c\x6c\x68\x69\x5b\x0e\x9a\xd9\xf4\xa8\xea\x35\xc3\x29\xcf\x19\x28\x0d\x10\xc6\x5a\x33\x18\x99\x11\xa6\xd6\x0c\xe6\xad\x80\x58\x2a\x43\x3d\x5c\x2c\x96\x9a\x81\x36\xc1\xb1\xd4\xf9\x93\xa0\xf4\xf2\x66\xd7\xb2\x0b\xca\x2b\x39\x95\xf4\xa1\xf2\xf7\x73\xbd\x96\x8d\xe5\xe3\xce\xdd\xdd\x63\xf9\xb8\xbe\xab\x98\x44\x8f\x9b\x5e\x36\xd5\xcc\xcc\xc4\x56\xae\x5e\x32\xf6\x2d\xf4\x53\x5b\x9a\x05\x0a\x96\x47\x8f\xe8\xfb\xfb\xcb\x0b\x34\xa5\x5a\xee\xd5\xd7\xca\x15\xd6\x32\xf6\x83\x48\x9c\x5d\xd8\xda\x56\x73\x91\xf8\xbb\x17\x36\xde\x89\x52\x81\x94\xa0\x6f\x34\x3c\x23\xce\xd8\x2b\x2c\xda\x5e\xa5\x34\x8b\xc0\x2c\xe6\xa9\x99\xc7\x89\xcc\xa7\x53\xfa\xf9\x58\x61\xf1\x4d\xc3\x7a\x98\xa8\x8a\xf1\xdf\xf9\x64\xac\x47\xb4\xe3\x45\x5c\xd7\x1c\xb2\x05\x95\xfd\xb2\xd9\x99\x9d\x9b\x77\xff\x2f\x9f\x40\xb6\x7b\x26\x38\x20\x00\x82\x77\xce\x46\x2a\xd8\x57\x1c\x25\x1d\x23\x97\x40\x55\x02\x39\x89\xb8\x10\xc4\x26\xc9\x9b\xda\xa2\x19\x16\x8a\x82\xb5\xd6\x81\xa4\x94\xd0\xf1\x8b\x2d\x0a\x4b\x7e\xcf\x71\x81\x44\x3d\x21\x04\x1c\x3c\x19\x4d\x36\x53\x7a\xcf\x4a\xbe\xc9\xca\x09\xb4\x91\xa7\x16\x37\x13\x0c\x32\x6b\x45\xac\xc1\x13\x61\x6a\x2f\xfa\x09\x34\x51\x93\xb6\xdf\xce\xcb\x60\x4a\x7c\x0e\xcf\x8b\xcb\xcd\x85\xf4\x86\x51\x4d\x4a\x60\xb8\xe7\x6d\xa2\x94\x75\xa9\x37\x39\xfa\x9f\x5a\xfb\x8e\xe1\xd5\xe5\x75\x59\x13\x1a\x6f\x57\xbb\x28\xf5\x5d\x84\xb5\x3a\x68\xff\x2d\x81\x7c\x24\x31\x56\x8c\x00\x40\xc2\x2a\xa7\xd5\x3d\x37\x7d\x6a\xda\xaa\x74\xb9\x76\xcb\xb7\x40\xad\x29\x35\xf3\x89\x40\x4a\xe7\x3e\x02\xd1\x37\xc9\xdd\x87\x81\x3c\x88\x04\x42\xa8\x57\x5a\xb1\x4c\x99\x71\xcd\xf9\xbc\x64\x87\x5b\xc8\xe8\x66\x30\x5a\x68\x24\x99\x20\x91\xbe\xca\x4e\xd1\x4d\x42\xb4\xe4\x95\x6b\xe9\x2b\x4f\x12\x87\xf0\xb5\x5a\x3a\xdc\x08\x95\xee\xc5\xe7\x15\xe8\x1e\x2b\x26\xe6\x10\xee\x56\xcf\x2c\x58\x83\xfd\x23\x2e\x04\xeb\x0b\x26\x64\x30\x24\x96\xb5\x48\xe0\xf0\x0b\x13\x37\x0b\xa6\x24\x5c\xba\xc8\xe8\xaf\x9a\xfd\x0a\x22\xe7\xbc\x31\xc9\x31\x9c\xed\xcb\xcc\xc1\x2d\xe5\x0b\x4e\xc2\xdd\x87\x4d\x71\xd5\x2d\xe4\x9a\xca\x1d\x58\x12\x71\x56\x4d\xd1\x57\x7f\xf0\xd1\x1f\x16\x6f\xd5\xde\xad\x76\x68\x70\x4b\x16\xa6\xb6\x10\xfb\xac\x70\x5d\x14\xca\xcc\xc2\xf8\x5e\xfd\xe7\x85\x01\xb9\x48\x09\xa0\x4a\x16\x55\xe7\x90\xbe\x6b\x9b\xb6\x58\xcf\x73\x9c\x8b\x8d\x20\x29\x0a\xd4\xf2\x4d\x38\xb7\x4d\x46\x29\x86\xa5\x17\xa1\x9e\x5d\xda\x62\x12\x20\x46\xdb\x50\x23\x59\x42\x82\xb3\x64\x63\x96\xb1\x56\xc5\x6b\x66\xca\xbb\xba\xd5\x40\x4a\x2e\x44\x99\x97\xf2\xae\x95\x28\xb0\x34\x81\x0e\x5b\x6c\x73\x6c\x31\x5b\x59\xc4\xd3\x1e\x20\x01\x2a\x01\x89\xff\x85\x03\xad\x2a\x38\x58\xa3\xf7\xba\xcc\xa7\xd2\xee\xb4\x4a\x73\x2a\x7d\xa1\x79\xc9\xf9\x8e\x1e\x38\x3d\x99\xc5\x18\x12\x47\x77\x89\xc2\x29\xcd\xdf\x78\x0f\xa0\x4d\x12\x23\x83\x5e\x60\x90\x8f\xed\xda\x79\xcf\x49\x86\x05\x61\x6a\xc4\x6e\xf5\x28\xcc\x17\x45\x24\x86\x8b\xc3\x71\x68\xf4\x50\xb3\x76\x8a\xb0\xfd\x0a\x16\xbd\x29\x10\x4e\x8e\xcd\x4b\xa0\x9a\xbe\x60\x92\xfd\x77\xe6\x1d\x83\x79\x60\x31\x7f\xf4\x54\xe9\xb4\x50\xe3\xb5\x00\x19\xcd\x29\x40\x0e\xc4\x44\xda\x0b\x89\x2a\x8b\x29\xe1\xc5\xef\x9c\x38\xfc\x65\xf8\xcc\xf3\xaf\x3a\x86\xed\x0c\x05\xcc\x19\xe8\xe4\x88\x05\x7d\xac\x80\xeb\x34\xca\xfa\x96\xaa\x04\xec\x33\x8d\xbd\xe3\x0b\xfe\x69\x76\x88\x0b\x3a\xa3\x2c\x28\x9a\x64\xa7\x97\xe2\x0c\xcc\xbb\xe6\x0c\xf2\xa9\xbf\xd3\xee\x6d\x96\xc1\x31\x8c\xf8\x7f\xfe\xfb\x6f\xc7\xb4\xc9\xfb\x21\xc7\x76\x05\x0e\x61\x27\x37\xdb\x96\x70\xe7\x03\x14\x91\x06\x74\x8a\x40\xa7\x95\xa5\xcc\x89\xe2\x57\x7b\xb9\x69\xa2\xe1\x6a\x6e\xdc\xbd\x65\x72\x07\xdf\x88\xc8\x57\x9c\x0d\x73\xc5\xbc\xed\x5a\x52\x09\xd9\x01\x7a\x24\xe6\x24\x7b\x03\x41\x58\x90\x7c\xc9\x4c\x33\x62\xc5\x27\xd2\xe0\xa1\x18\x78\x57\xf3\x43\xb1\x3a\x2d\x17\x66\x15\xef\x2f\x22\x25\x0a\x77\x78\x10\x8d\xec\xca\x67\x98\x28\x52\xdd\x7e\xe5\xa6\xad\x70\xee\x00\xe7\x70\x97\xa8\xcd\x39\x96\x2f\x17\x9a\x53\x5b\xf6\xc9\x58\xd3\x43\xe1\x61\x5d\x90\x8e\x19\xa4\xc9\xf6\xd4\x1b\x92\x4b\x22\x0c\xa7\xf3\x70\x58\x96\x12\x42\x14\x47\x88\xd1\x5c\xe3\x6b\x24\x29\xa6\x1b\xe5\x13\xe8\xf7\xeb\x31\x26\x4b\xce\x06\x3c\x23\x62\x1c\xe7\x6a\xe9\x58\xac\x8a\xf1\xd7\x1f\x9d\xe7\x6a\xb1\xbe\x7d\x99\xe0\xe5\xb2\x37\xab\x70\x3d\xf5\xfb\x0d\xcd\xae\x97\x98\x83\x10\x9f\xb2\xd4\xdc\x80\x9a\x49\x2a\xa8\x99\x36\xe6\xb4\x64\x22\x81\x1b\x98\x29\x80\xd4\x2b\x34\x29\x7b\x45\x1b\x6c\x6f\x18\x39\x9a\xe4\x85\x49\xc9\x57\x4b\x88\x8f\x47\xec\xa3\x29\x37\x02\x5a\x9e\x19\x40\x04\x09\x3f\xe4\x73\xc6\x25\x29\x65\xa0\xd5\x54\x40\xb0\x19\xa4\x76\x18\xf5\xc2\x7a\xf1\xd1\xee\xb2\xfa\x9b\xe3\x9f\x2e\x6f\xf8\xf2\x94\xeb\x29\x70\x27\x71\x30\xa2\x19\xd5\xb4\x33\xae\x3d\x69\x2f\x57\x85\xb7\x88\xe9\x02\x1c\x2c\x95\x2c\x7a\xc8\x4f\xaf\x42\x10\x09\x79\x22\x60\x4e\x87\x31\x86\x75\x2e\xca\x76\xbd\x06\x76\xb2\xee\x00\x15\xe9\x9f\xc0\x16\x50\x5c\x1d\x41\x39\x49\xae\x8e\x16\xcb\xe9\x3f\x3b\x67\xaa\xd5\x05\xa6\x6c\x20\x9e\xf7\xc3\x7a\x1f\x0b\xa2\x10\xf9\xac\x88\xad\x08\x7a\xef\x72\x09\x97\xd3\x0f\x50\x7d\x3a\x54\xb3\xec\xf8\xe2\xb5\x99\xfb\x2e\x83\xdc\x25\x4b\xc6\xee\xca\xb7\xc9\x83\x73\xcc\x62\x9b\x11\x6b\x95\x0c\x2d\x6c\xc1\xec\x8c\xd1\xcd\xe7\x0a\xd8\xbc\xce\x00\x28\xdd\xb4\x69\x10\xdd\xe1\x22\x73\x0a\xa3\x56\x59\x20\xbc\x82\x0b\x2d\xb9\xe7\x4c\xd1\x44\x13\x87\x1d\x83\x44\x53\x88\x8c\xb3\x40\x85\x10\xd9\xde\x84\x85\x47\xa5\xa4\x6c\x36\xb6\x2b\xe9\x92\x3b\xdb\x5d\x0c\x65\x9a\xba\x34\x4d\x99\x1f\xbf\x73\x0d\xad\x36\xaa\x1b\xb2\x06\x9c\x32\x97\x56\x0a\x1a\x07\xe3\x6e\x32\x16\x60\xce\x65\xa3\x8e\x69\x6c\x96\x82\x9a\xc2\xd3\x30\xd1\x4d\xec\xee\x20\xd3\x2d\xe3\x38\x14\x57\x88\xb4\xa9\xa2\x26\x01\x0c\x22\xf5\x55\x43\x2e\xac\x6c\xcc\x81\x1d\x32\x2f\xa2\xd9\xb2\x57\x3e\xd3\xbf\x92\x4e\x8b\x5d\x77\x36\x1d\x01\x27\xc9\x04\x47\x8f\x5e\x0b\xf3\xb6\x08\x2e\x5c\xd9\x00\x2d\x57\x42\x5d\x34\x43\x5c\x7a\xa0\x11\x48\x37\xa1\xb7\xd0\x20\xf9\xd8\x61\x17\x9d\x9b\x55\xb3\x10\x69\x06\xba\xc9\x8c\xde\xe4\x36\xc4\x24\x4b\xf8\x22\x6d\xb8\xcf\xaa\x29\x84\xbb\x44\xea\x34\x65\x30\xee\xf5\x2a\xab\x30\xbd\x8d\x2f\xb3\xa5\x7c\xa4\x3d\xe0\x4a\x6d\xc0\x25\x3f\x25\x7c\x02\x26\x55\x6b\x7e\x70\x39\x36\x41\xaa\x47\xf5\x3c\x6f\x9a\xf9\x53\x3d\x91\x54\x66\x89\x56\x66\x9a\x7b\x30\x39\x27\x2f\xbb\x6f\x06\xa3\x60\xbd\x75\xb0\x7d\xb4\x76\xed\xe7\x2f\x81\x60\x7c\xe1\x24\x01\xf3\xae\xe1\x5f\x15\x2b\x9b\x49\xf6\x3b\x36\x4e\x6a\xc5\x47\x4c\xe1\x99\xdb\x5c\x2b\x5c\xf2\x67\x46\x84\x9c\xd3\xac\x54\x2f\x71\xe7\xf0\x70\x4b\xd1\xf6\x3f\x26\x18\x7a\x03\xde\xc9\xb3\x23\x83\x50\xa2\xe9\x43\x66\x38\x2a\xac\xa2\x51\x82\xa5\xa4\xd3\x45\x00\x2c\xe2\x23\x6d\x21\x7d\xab\x6c\x46\x08\x4a\x94\xd5\x31\x1a\x33\xbe\xfd\x64\xd6\xef\x9e\x55\xf8\x50\x3e\x7e\x34\x0e\x11\xdc\xf4\x7d\xb2\x8c\x22\xe3\x6e\x6a\x8b\x26\xd3\x88\x44\x6b\x20\x04\xb6\xcb\x84\x5f\x09\xfe\xd3\x6c\x46\x28\x84\x49\x3b\x6c\xab\xc8\x78\xc0\x8f\x10\x0c\x47\x95\x52\x29\x61\xf3\xb5\xe2\xe4\xec\xc2\x9a\x38\x3d\x58\x08\x60\x2a\x14\x1f\xf7\x90\xdc\x09\x64\xab\x0d\x5d\x9c\x93\x84\xec\x25\xe2\x7a\x0b\x22\xa9\x86\x33\x04\xe4\xb1\x92\x34\x8a\x32\x03\xeb\x8d\x0b\x5b\x04\x82\x37\x40\xf5\xd4\x0f\xfd\x27\x33\x50\x1b\x0b\x5e\xb7\x8b\x60\x18\x84\x55\x6e\xab\xbb\xd4\x61\xfe\x99\x16\x2c\xc9\x15\xdd\x94\xe8\xaa\xe8\xd4\xcb\x2b\x87\x48\x6a\x6f\x1c\x32\xbd\x34\xae\x4f\xa4\x4d\x78\xc7\xda\x03\xb0\x15\x07\x5a\xe6\xd3\xed\xe8\xc2\x3a\x50\x15\x47\x33\xa2\x4c\xf5\xff\x98\x3e\xd1\x38\xc7\xc9\xbb\xa2\x89\xbd\x25\x7c\xec\x69\xf5\xeb\x0f\xf9\x66\xa7\xf6\x8e\x28\xe9\xae\x84\x25\x18\x45\xbb\x39\x07\xb8\x05\x87\x71\x2c\x8d\xe0\xfa\xc5\xcb\x2d\x3b\x83\x24\xd8\x91\x59\xa8\x80\xdf\x90\x40\x65\xe6\x18\xdb\x2f\x3c\x2c\x40\x09\x10\x0b\x97\x40\x04\xcd\x1a\xbd\x3d\xd7\xab\x92\xf6\x97\x2e\x7a\x6d\x4e\xe3\xd5\x51\x15\xd4\xdd\xc9\x83\x9b\xc9\x83\x0e\x64\xf3\x00\x2f\xff\xa6\x63\x70\x98\xf7\xcf\x01\x08\x87\x4b\x57\xe2\xfe\x44\xc4\x77\x44\x26\x07\x21\x29\x2e\x6d\xc5\x6b\xc9\x8b\x47\x0e\xe5\xa8\xc0\x0c\x3a\xdc\x2d\x3a\x8c\x93\x7c\x6b\xdd\x40\x2f\x77\xc1\xae\xa7\x97\xbd\xd0\x07\x00\x7e\x62\xc8\x8b\xce\x6d\x05\x11\x38\xbc\x41\x2c\xdd\x92\xef\x61\x4d\x94\xa2\x1d\x5e\xab\xf8\xc4\xa5\xe5\x7c\x89\xed\xb5\x49\x70\xad\x37\xf7\x25\x49\x6d\xd3\xb1\xec\x43\x47\x79\x61\x2f\x8e\xa5\xc6\xe0\x83\x2e\x58\xb8\xdd\x2d\x5a\x03\xad\xe3\xb6\x6c\x9f\x87\xac\xae\xec\xdb\xee\x69\xfc\x2e\xc7\x6f\x9c\x09\x32\xa5\x9f\xb7\x12\xc5\x6f\xe0\x53\xab\x5e\xea\x65\xae\x14\x92\x03\xf7\x0c\x14\x9e\x0b\x02\x1a\xed\x4a\xdb\x62\x53\x23\x56\x64\x46\xda\xb4\xc8\x47\xb2\x40\x5c\x94\x7e\xda\x16\x04\x72\xff\x45\xef\xcc\xbe\xce\x95\xca\xe4\xe9\xc9\xc9\x8c\xaa\x79\x3e\x39\x8e\x78\x6a\xe2\xf0\xb9\x98\x99\x3f\x4e\xa8\x94\x39\x91\x27\x7f\xfc\xc3\x1f\x8a\x2d\x9e\xe0\xe8\x71\x66\x60\x75\x96\xfd\x4e\xe5\x2d\x27\x58\xee\x16\xd9\xe3\x52\xd8\x5e\x38\x95\x39\xe8\xc6\x25\x8f\xea\x6f\xa4\xc2\x69\x16\x86\x82\x9a\xb2\x71\x52\xe1\xa2\x58\x05\xe4\x25\xea\x69\xa2\x39\xce\x32\xc2\x9a\xcd\x0e\x26\xd1\x74\x07\xd6\xe3\x52\x55\xed\x08\xc9\xe7\x2c\xc1\xac\x0c\xbf\x00\x95\x97\x04\x89\x08\x53\x16\x1a\xa0\x28\x25\x0d\xd4\x68\x20\x80\x0c\xff\xdf\x2c\x15\x11\xe6\x48\x65\x51\x52\xcd\x0d\xc7\x96\x37\x75\x45\x2f\x71\xb0\x74\xd5\x92\xb2\xc5\xda\x11\xb7\x6a\xab\x92\x14\xef\x96\x4b\x8b\x6f\x5e\xd2\x46\x70\x36\x26\x9f\x35\x93\x93\xdb\x02\x76\x3d\x48\x22\x51\xff\xa7\x3b\x24\x17\x4c\xe1\xcf\xa7\xe8\x92\x32\x10\x60\xbf\xe7\xb9\x90\xe8\x1c\x2f\x8e\xf8\xf4\x28\xe5\x4c\xcd\xd1\x25\xfc\xaf\xfd\xe9\x99\x90\x47\xf4\x33\xc1\xc2\xf2\x07\x5b\x92\xce\xd7\x37\xd7\x24\x24\x72\x26\x11\x79\xd2\x27\xf4\x0f\xff\x89\x52\xd3\xf2\x29\xfa\xf6\xe4\x0f\xff\x89\x7e\x07\xff\xff\xff\x47\xbf\x6b\xd0\xf4\x37\x83\xfc\x82\xca\xc5\xb7\x65\x77\x6e\xaf\xb2\x52\x5b\x54\x73\x3f\x13\xbc\xd8\xa9\xda\x96\x1f\x69\xf4\xc8\xa7\xd3\xb1\x26\x0c\x93\xc8\x37\xc6\x62\x09\x2e\x7a\x4b\xfc\x54\x6a\x6b\x4f\x9b\x4a\x76\x45\x0d\x19\xdb\xa9\x41\x7c\x70\xec\x5a\xe6\x45\xe5\x5d\x08\x22\x2a\x55\x33\xa6\x12\xbe\x22\xb1\xe6\xaa\x9b\x9c\x0e\x67\xdd\x73\xc9\xdf\xce\x82\x13\x22\xa4\x84\xf5\xd4\x7d\xe0\x5f\x18\xc5\x6a\x02\x7d\xec\x42\xd6\x1e\x87\xa5\xf0\xda\x2f\x26\x66\x12\xa6\xf6\x56\xf1\x92\x72\xa9\xf3\xf5\xa1\x92\x77\x5c\xec\xa4\x6f\x3d\x92\xc6\x54\x86\x35\xf5\x92\x5c\x0d\xdf\xb0\xb2\x3f\x64\x88\x73\xe1\x71\x8c\x8d\x5d\xc4\x56\x55\x5c\x6f\xc5\xa4\xc2\x04\x97\xb5\x3b\xf4\x7a\xea\xe7\xfe\x93\x75\xc3\x84\x48\x33\xf7\x76\x51\x2f\x0e\x46\xab\x45\x24\xcd\x12\x6b\x46\x5c\x03\x76\xb8\x6e\x43\xef\x3c\xbe\x05\x34\x0e\x61\x8f\x90\xbf\xc1\x9c\x64\x6b\x01\x04\xea\xf7\x33\x17\x11\x39\xe3\xbb\x85\xbd\x26\x94\x2d\xc5\xcb\xb7\x2f\x45\xe4\x57\xef\xc2\x16\x9d\x72\x78\xc0\x3c\x2e\x94\x05\xe3\x16\xb0\x55\x28\x02\x20\xd2\xf2\x6c\x00\xd0\x6e\x1f\x58\x97\x4b\xb5\x11\x76\xe0\xda\xc6\x70\x5c\x30\x3c\x57\x5a\xa3\x52\x51\x43\x60\xcd\x0b\x57\xc4\xae\x41\x50\xd1\xce\xe3\x08\xaa\xc4\x14\x91\x4a\x95\x6a\xec\xd8\x94\x4a\x11\x5b\x62\x95\x9a\x82\x4d\x3d\x24\x30\x04\x65\xaa\xb9\x6e\x4f\x12\x71\x34\xc5\x11\x65\xb3\x5e\x00\x53\x09\x90\x11\xe1\x75\x50\x47\xa4\xf7\x58\x3e\xee\x37\xd0\x70\xe7\x02\x96\x34\x2e\x8a\xa8\x59\x60\x19\xe3\xd8\xa0\x4b\x18\x7d\x0a\xcb\xc7\x26\x64\xa5\x25\x58\xb7\x15\xa3\xf3\x4b\xe1\xc0\xe0\x56\x8d\xcf\xa5\xa0\x93\x50\x9f\x82\x9a\x0d\xae\xa4\xb2\x05\x79\x74\x19\x7f\xd8\xa3\xb0\x54\xd1\x4d\x57\x8c\x5f\xce\xb9\x50\xe3\x2d\x71\x61\xab\x69\xf4\x8c\x1c\x25\x00\xe8\xc2\x9f\x88\x78\xa2\xe4\xb9\x0c\xaf\xba\x09\x2d\x1a\xa3\x59\x10\x55\x07\xf8\x9b\x69\xc6\x21\x85\x66\x8a\x52\xcc\x16\x86\x51\x6a\xe6\x82\xe5\xa3\xf4\x85\x5c\x91\x4c\x71\x92\xf4\x90\x20\xb9\x34\x05\x8e\x25\x49\xa6\x47\xae\x14\x46\x8c\x12\x3e\xa3\x11\x4e\xd0\x24\xe1\xd1\xa3\x34\x19\x6e\x6c\x66\x98\x54\x26\x78\x44\xa4\x0c\x24\xab\x22\x9b\xdd\xe6\x18\x42\x15\x57\x45\x44\x4a\x19\x95\x8a\x46\x4e\x64\x2a\x40\x29\x4c\x2d\xf1\x08\x83\x49\x18\x32\x36\x61\xb8\x5a\xd2\x23\x06\x9c\x33\x67\xb6\x68\x12\x5c\xd7\x16\x73\xcf\x05\x89\x37\x1d\xa0\x3d\x40\x08\x3a\x0a\x19\xab\xf2\x81\x5c\x73\xa4\xce\xec\x67\x70\x8c\x57\x91\xc0\x6d\xf9\x44\x79\x82\xf4\x27\xad\x04\x6b\x04\x31\xe5\x3e\x04\xbe\x24\xb9\xf8\xc8\xf0\x03\x43\x34\x83\x21\x37\xe0\x98\xad\xa3\x69\xbd\x8a\x20\xf2\x40\x9d\xae\xaa\xd7\x9c\xb2\x28\xc9\x63\x5f\xa9\x51\x8b\x00\x4f\x9a\x48\xdc\xf2\xe8\xb5\xd7\x82\x42\x0f\x61\x89\x9e\x49\x92\xe8\xff\x9a\x08\xf8\x23\x5f\x38\x41\xb3\x64\x53\xdc\x02\x3a\x71\x5c\xba\x89\xa2\x0e\x0e\x9d\xf2\x06\xab\xb9\xc9\xf9\x4f\xb9\x32\x45\x32\x0d\x3a\xa5\xb3\x6f\x19\x38\xc3\x49\xc2\x27\x70\xd2\x01\xb8\xd2\xe5\xb9\x06\x69\x75\x79\x14\x11\x12\x93\x18\x7d\x1d\x1c\x5c\x8f\x47\xf1\x4d\x3d\x8c\x62\x69\x45\x0e\x00\xb4\xb2\x6a\x58\x6b\x84\xae\x2c\xd7\x79\x3b\x46\x37\x15\x60\x96\xb0\x7e\x3b\xae\xc2\x74\xf5\x96\xb6\xf0\x6d\x80\x2e\x2b\x93\x78\xb9\x1d\xda\x10\xe8\xb2\xd4\xe7\x1e\x80\x2e\x2b\xf3\x6c\x88\xdd\xe7\xb3\x17\xcd\x39\xd6\x93\xba\xe0\xed\x13\xc1\x0c\x40\x98\xb9\x3b\x4b\x24\xe8\x0e\xe4\xa2\x8e\x10\x0f\x0b\xc4\xb3\x52\x0d\xf1\x6d\x41\x3c\x2b\x83\x39\x64\x10\xcf\xca\x50\x0f\x17\xc4\xb3\x66\xa0\x2d\x40\x3c\x8d\x73\x7f\xac\x89\xba\x1d\x53\x80\xc4\x96\x49\x3e\xbd\x83\x54\xef\x95\x63\x3c\x33\x81\x03\xe6\x1a\x73\x77\xb4\xc5\xb4\x86\xd1\xda\x1c\xc8\xa6\x70\xa8\x8a\x13\x62\x53\xda\xf3\xde\x37\x03\xfe\xb0\xa9\xd9\xbd\x17\x5a\xbb\xc1\x0e\x19\xe1\xcc\xe6\x94\x37\x95\x9a\x39\x9c\xec\xd9\xed\xf0\x51\x01\x83\xb0\xc4\xf2\x5b\x21\x88\x5d\x56\xaa\x36\xcc\xf9\xb3\xad\x9c\x04\x64\x68\x88\xb2\x91\x04\xa1\xd3\xb1\x55\xda\x9a\x56\x8e\x32\x45\x66\x55\x9d\xb6\x38\x34\x94\xa9\x3f\xfd\x71\x2d\x27\x32\x10\x8b\x4e\x3d\x0c\x6a\x27\x78\x67\x87\x7d\x46\x62\x14\xcd\xb5\x56\x24\xb5\xfa\xa2\xa7\x63\x6e\x56\x89\x52\x4c\x9d\x22\x95\x4b\xe3\x5a\xa2\x72\xc4\x4a\x98\xa4\xc7\xe8\x23\x14\x84\xc5\x69\xa6\xf5\x2f\x3f\x3f\xaa\x29\x69\x94\x7f\xfb\xed\x9f\x08\xfa\x16\xa5\x04\xb3\x92\x0e\x0b\x6a\x93\xbe\xfa\x00\xc3\x4f\xcd\xc9\x88\xd5\x6e\x05\x1a\x7c\x36\x35\xa6\x5c\xbc\xdf\x90\x4d\xb9\xd3\x89\xa1\xd0\x21\x8e\xe6\x48\xe6\x13\x53\xa9\x37\xb0\x61\x38\x41\xfa\x82\xcf\xc0\x51\x0d\x37\xb2\x1b\xf4\xaa\x53\xf8\xb2\x31\x00\xd6\xdd\xd8\xf6\x36\xee\xc3\x3d\x72\x24\x49\x09\xdb\xa9\xc6\x69\x66\x38\x5f\x78\xf0\xa5\xc1\x7d\xe9\x19\x1f\x82\xd6\xcf\xb0\xb5\xec\x6b\x59\x1a\xc2\x79\xc1\x4b\x96\x27\x58\xd8\xa3\x3f\x62\x5a\xd1\x10\xe4\x89\xf2\x5c\x26\x0b\x14\x73\x46\x7a\x40\x09\x79\x34\x37\x8e\x55\xad\xb3\x60\x5b\xb0\xe2\x89\xca\x5c\x2b\xb4\xd0\x96\xab\x8f\x21\x15\x36\x98\x54\x73\x0a\xfd\x68\xf5\x9b\xc0\x57\x61\x96\x1c\x6a\xa7\x45\x85\xb0\xb1\x15\x9e\xdf\x12\x36\xb6\x44\x55\x1d\x6c\xac\x87\x8d\x5d\x5e\x97\x43\x84\x8d\xad\xec\x79\x3b\xd8\xd8\xba\x2d\xdf\x02\x36\xb6\xd4\xcc\x17\x03\x1b\x5b\x59\xd1\x2f\x06\x36\xb6\x32\xaf\x0e\x36\xf6\xcb\x83\x8d\xdd\x11\x18\xb5\x9e\x17\x1b\x7c\x25\x45\xd9\x62\x63\x22\xfb\x4a\xa2\xe1\xb5\x26\xb0\xe8\xb1\x1c\xd4\xe6\xaf\xab\xdd\xc1\x58\xeb\x99\xd0\x66\x60\xac\xb5\xaa\x7a\x33\xab\xdb\x15\xe0\x09\x14\x83\x57\x06\x63\x2d\x4d\xa0\x8b\xaf\xdc\x3c\xbe\xb2\x96\xf8\x6c\xdf\x7a\x78\x2e\xe8\xb2\x7a\x21\xb7\x84\x63\x2d\xed\x4f\xab\x48\x4c\x10\xdd\xf7\x40\x89\x2f\x2b\xcd\xdf\x97\x0e\xf9\x5a\x59\x3e\x5c\x45\x69\x81\xa1\xb5\x84\xe7\xd0\xe2\x8c\x12\x1e\xfa\xff\x3b\xca\xdd\x22\x32\xb8\xb2\xbc\xde\xaf\x62\x68\xb1\x05\xa9\xb6\xa6\x50\xa7\x95\xee\x27\x51\xd6\x25\x4f\x6e\xe8\x62\x76\x83\xb8\xcb\x48\xd4\x60\x63\xa6\x29\xdd\x57\xb3\xeb\x2e\x32\x8f\x85\x05\x0a\xf9\x52\x5e\xa8\xbe\x9e\xcc\x70\x8c\x8c\x5f\x49\x87\x05\xa0\x0e\xf3\xe5\x8c\x4a\x25\x1a\x63\x9b\x96\x46\xb8\x8b\xab\x34\xcb\x5b\x07\xc4\x04\xab\x3a\xdb\xee\xb3\x94\xa4\x5c\xac\x0b\xac\xaa\xfd\xd2\x96\xba\xd9\xe6\x53\x92\xcd\x49\xaa\x25\x99\xf1\xa6\x8d\xb4\xdd\x6f\x9f\x34\x6c\x73\xd7\x4c\xa0\x63\x89\x08\x02\x47\xa8\x7e\x37\x36\x88\x94\xad\xb7\x7b\xd7\x6d\xb6\x98\x99\x1b\x3a\x84\x1c\x98\xf2\x6a\x83\x9b\x7d\xa9\xe4\xee\x06\xfa\xae\x8d\xe9\xf0\x21\x35\xeb\xa3\x36\x56\xc4\x6b\xac\xc2\x9d\x2a\xbe\xb2\x85\xa0\x37\x70\xe5\x97\xbd\xf3\x9a\x13\x86\x55\x80\x37\x0f\xf0\x68\x40\x4d\x5d\x5e\x1e\x88\xcc\x91\x44\x1c\x85\x9a\x41\x69\x30\xcb\xeb\x55\xa2\x12\xa7\x51\xee\x40\x24\xb9\x68\x8c\x32\x6d\x63\xd0\x8e\x54\x8e\x13\xd0\x24\xc2\xea\x95\xd5\x4d\x9d\x2c\x6a\xd2\x1e\xdb\x79\x4c\x28\x53\x7f\xfe\x8f\x8d\x76\x53\xab\x56\x76\xdd\xa0\xe2\x16\x8e\x22\x22\x8d\x8d\xdd\x46\x21\xe3\x09\x7f\x82\x62\x5b\xbb\xec\xaa\x3e\xca\x7a\xde\x9a\xc1\x7b\x28\xe2\xb8\x20\x75\x23\x2e\xcc\x05\xcf\x67\x73\x67\x43\xd2\x67\x46\x4f\xad\x6e\x2f\x7f\x5c\xb2\x91\x6f\xbc\x97\xdf\xe5\x34\xd9\xce\x42\x77\x57\x2a\x43\xf6\x69\x78\x8f\xe4\xdc\x9f\xd6\x09\x34\x5b\xbb\xb1\xcb\x83\x6e\xdf\xa7\xfd\xd6\xfb\x6b\xa0\x9b\x9e\x83\xdf\x9c\xf2\x24\x01\x4f\x83\x24\xe9\x13\x11\xf5\xdd\xc3\x84\xef\xe9\x66\xc8\x79\x7e\x00\xf0\x75\x91\x18\xd1\x4a\xfe\xba\x31\xa2\xa1\x44\x6e\xf4\xd5\xa0\x05\x13\xaa\xc6\x19\x61\x75\x36\xb6\x9f\x96\x2b\xc0\xbc\xb3\x80\x41\x17\x3d\xb6\xb7\xa0\x41\xb7\x24\xaf\x1c\x38\xb8\x66\x1e\x87\x1a\x3c\x58\x61\x76\x3e\x96\xaf\xb8\x66\x5c\xe0\x90\x51\x7c\xfa\x7a\x89\x47\xac\x5f\xca\xa7\x70\x95\xb2\x27\x8b\x22\x20\xdb\xe8\x10\x21\x33\x83\x3a\x1b\xd6\xb0\x02\x6e\x34\xfd\x17\x68\x3a\x06\xbc\xd6\x84\x14\xba\xb0\x41\x88\x26\x27\xf1\x11\x8e\x16\x51\x42\xa3\x40\x67\x9e\x09\x9c\xcd\xeb\x38\x9e\xdb\xf9\x0e\x75\xe7\xad\x50\x77\x9a\x0a\x52\x6d\x12\xb7\xed\xe8\x8a\xe1\x94\x74\x68\x40\x75\x68\x40\x3d\x8f\x77\xc1\x8a\xd2\x5a\x6f\x08\xa3\xb0\x7c\xee\x3a\x48\xa0\x37\x80\x04\xda\xe6\xf0\x15\x78\x3f\xa5\x63\xd7\xc1\x14\x7d\x68\x05\x53\xe4\x2f\xc1\x83\x42\x9e\x69\x3e\x8f\x6f\x8c\x68\xb2\x3c\xb0\xb7\x84\x25\xaa\x11\x17\x36\x91\x9b\x56\xe1\x12\xad\xa2\x8b\x56\xeb\xf2\xb6\x28\x41\x9b\xad\xcc\x46\x00\x40\xb5\x77\xd7\x81\xc0\x01\x35\x6f\xc3\x81\x9c\x9b\x7d\x66\xb5\x6c\x56\x3b\x34\xcc\x6c\xd9\x44\xc1\xda\x2c\xc9\xc5\xd3\xc3\xfb\x4a\x74\x29\x8a\xac\x6d\x97\xec\xd2\x77\x3e\x68\x22\xd0\x9c\x27\xb1\x03\xa1\xf0\xab\xe5\x3b\xf0\x99\x00\x7e\x81\xdc\x66\x40\xb1\x73\xd0\xb6\x8a\x82\x60\xab\x52\x5a\xfc\x26\xc2\x70\xf7\xc0\x68\xf6\x61\x45\xf0\x9c\x64\x1b\xfb\xc1\x5a\x59\x44\x96\xcd\xdf\x2b\xc6\x58\x5a\x21\xb0\x9a\xd7\x0f\x73\xad\xdd\x77\xcd\xe0\x56\x89\x1e\x81\x71\x50\xd4\x95\xfa\x34\x74\x06\x4f\x9f\xa8\x33\x44\xe0\xb0\xc7\x95\x5e\x3a\x37\xbb\x56\x9e\xba\x2a\xb1\x6c\x11\x0c\xb6\x54\xb9\x6d\x77\x70\xa0\x14\x7f\x1e\x67\x58\xe0\x24\x21\x09\x95\xe9\x8b\x05\x03\x9f\x95\xdd\xb5\xfa\xac\x0a\x6e\x4c\x44\x2c\x4f\x27\x86\x14\xdd\x40\x6c\xb1\x3f\xc5\x91\xc8\x59\x08\x6d\xe6\x37\xc6\x17\x13\xcc\xe1\x5e\x00\xab\x52\x34\x87\xaa\xad\x53\x4c\x05\x23\xb2\xb1\x46\x26\x89\x72\x41\xd5\x62\x6c\x4b\x8e\xb6\x3f\x70\x77\xf6\xcb\x33\xfb\xe1\x6a\x0f\xb7\xcb\xea\x77\xfd\xf9\x12\xa7\x19\x11\x50\x26\xc8\x15\xbc\x09\xca\xaa\x5a\xd4\x06\xe2\x6b\x0d\x41\xf8\xf3\xd2\xb5\xdd\x14\x38\x8c\x9f\xc7\x41\x46\xd5\x38\xaa\x12\xc7\xba\xc3\x5a\x87\x3b\xb5\x6a\x92\x2f\x8c\xbc\xd4\xe0\x45\x7e\x81\x2a\x23\x36\x6d\xc2\x34\xad\x07\x1c\xb8\x82\xc1\x5e\x59\x6c\x4c\x90\xf2\x6e\x95\xaa\x86\x71\x5a\xac\x9f\xba\xe0\xa3\x15\x83\xed\x07\x5f\xb5\x18\x71\xd0\xc9\x9e\x86\xad\x0f\xba\x10\x79\xa6\xe8\x64\x19\xda\x46\xed\xaf\x84\x68\x3f\x81\x34\x6b\xe7\x66\x28\x75\x6b\xea\x8a\x96\x38\xb1\x9d\x9d\x96\xff\x2d\x8e\x98\x43\x08\x32\x08\x4b\x61\x1e\xdf\x75\x4a\x95\x72\x89\x02\xc6\x00\xad\xa9\xb3\x6c\x9b\xfd\xca\x85\x7b\x60\xa8\xf4\x6a\x4c\x44\xc7\x23\xd6\x97\xe8\x99\x20\x46\x2c\x84\x44\x4d\x0d\x57\x6f\xd5\x86\xda\x4f\x13\xa2\x7b\xf2\xb1\x29\x5a\x78\xa0\x4a\xfa\xf2\x63\xa6\x8f\x29\x4e\x24\xe9\xe9\x86\xa1\x6a\xa9\xe2\x10\xfc\x89\xd1\xb3\xc0\x59\x46\xc4\x88\xd9\x2c\x0e\x70\xb8\x70\x9e\x98\xf6\x9b\x42\x5c\xed\x1a\x90\x71\x84\xa3\xf9\x2b\xed\x11\x86\x64\x9c\x68\x4e\x62\x97\x2f\x5c\xde\x1e\x37\x6f\x63\xb0\xde\x60\xb3\x86\x53\x57\x3e\xab\x67\x3b\x49\x22\xcd\x51\x7c\x99\xe9\x8c\x08\x3d\x6a\x4d\xc3\x4f\x84\x21\x3a\x75\xe3\xb0\xb1\x3b\xe8\x19\x3c\x53\x9a\xf4\x9f\x30\x4d\x4c\x02\xbe\xeb\xda\x09\x81\xc6\xfc\x3e\x62\xc6\xdd\xcd\xa2\x52\x86\x2a\x65\x54\xce\x35\xa7\xce\xc1\x27\x09\x6a\x46\x53\xe2\x0c\x7b\xda\xe4\x34\x0f\xf4\xeb\xab\x39\xe8\x13\x15\x9c\xa5\x90\x24\x63\x71\x99\xdc\xf2\x49\xa2\xfc\xf1\xa8\x4d\x71\x5c\x2b\x11\xc7\xb1\x2c\x1b\x3f\x8d\x5a\x49\x7f\x2d\x99\x5d\x8e\x4a\x59\x81\x51\x00\x2b\x04\x41\x9c\xae\xb2\xd8\x2a\xf9\xb7\x4b\x6d\x58\x4e\x6d\xa8\x5f\x9b\x43\x4c\x6f\xf0\x87\x78\xd3\x14\x87\xa6\xed\xdf\x87\x64\xbb\xc7\x54\x87\x37\xce\x09\x78\x99\x74\x80\xb7\xcd\xdf\x78\x89\xd4\x8d\x2e\xc1\xe1\x0d\x13\x1c\x5a\x5b\x6a\xcb\xb1\xd9\xcd\xc7\x76\xa3\xe4\x80\x35\x60\x4e\x75\xbd\x5c\x12\x25\x68\x24\xf7\xc1\x1f\x64\x86\x5b\x46\xb5\x81\x16\x98\xad\x91\x9a\xf4\x0b\xde\x09\x09\x71\x62\xbe\xce\xdf\x44\x10\xfc\x18\xf3\xe7\x25\x5b\x9d\x0c\xd1\x34\x2e\xb9\x16\x7b\x04\x89\xa8\x24\xa5\x48\x16\x2a\x11\x23\xd2\x1a\x3b\xf1\x88\xcd\x29\x11\x58\x44\x73\xc8\x6e\x2c\x36\xc6\x64\xc9\x1a\x40\x23\x13\xcb\x10\x7a\x9b\x36\xd8\xf4\x16\xeb\x5e\xb5\x30\x79\x7c\x3a\xbb\xe7\x7a\x24\xa9\xf9\xc4\x0b\x33\x56\xca\x08\x4d\x72\xad\xb6\x7f\xd7\x40\x7c\xbf\xd8\x2f\x1a\x8c\xef\x83\x89\x82\x2f\x5a\x06\xe4\x17\xd4\xd0\x05\xe5\xbf\x50\x50\x7e\xcd\x12\x6f\x16\x98\xbf\x95\xc9\xef\xf5\x63\x86\x5d\xcf\xaf\x11\x37\xbc\x2e\x68\x2b\x9f\x8c\x5f\xfc\xe8\xd5\xce\xb9\xed\x09\xfc\xc9\x13\x85\x91\x88\x85\xa6\xb3\x09\x89\x63\xe0\xb4\x8a\xdb\x4a\xd1\x05\xed\x38\xf3\x80\xbe\x7b\xb1\xd4\xc4\x8e\x13\xce\x66\x92\xc6\x06\x6c\x25\xc3\x50\xb1\x35\x34\x5e\x00\xb8\x00\xec\x6f\x92\x10\xe1\xbc\x12\x02\x7d\x2d\x29\xb3\x68\x8a\xfe\xb7\x98\x13\xc9\xbe\x52\xc6\x58\x80\xd9\x02\x3d\x32\xfe\x9c\x90\x78\x06\x3b\x54\x1d\xcc\x11\xa2\xa4\x87\xa8\xf2\x9f\x09\x40\x23\xe0\xb9\x1a\xe9\xb1\x43\xac\x99\xd1\x00\x88\xfd\x36\xa8\x89\xee\x9b\xf9\xe6\x18\xa1\x21\x43\x53\x1c\xa9\x1e\x92\xf9\xa4\x68\x3f\xe6\xa6\xc8\xb5\xd6\xbe\x83\x89\x17\x8d\x74\x31\xe3\x35\x9d\xd7\x9f\x0d\xc7\x1d\x34\xb9\xf6\x13\x8a\x77\x8a\xad\x7b\xc2\xbb\x40\x8c\x5e\xe6\xd2\x06\x61\x20\xce\xfc\xd1\xb7\xf0\x4a\x1e\x23\x1a\xf0\x3e\x0d\xde\x32\xe3\x71\xa3\xad\xb3\x32\x95\x4d\xc7\x52\x04\x42\x5a\x41\xc9\x3a\xaa\xa0\x5d\xb3\xdc\x5a\x6a\x92\x4a\x10\x9c\x5a\xe7\x80\xbe\x6a\x40\xac\x31\x61\x90\x7a\xf4\x54\x18\x09\x73\x93\x2d\xbe\xa0\xec\x51\xef\x6e\x81\x8a\x0d\xf5\xe5\xa1\xe7\xba\x4d\xcb\xf4\x8d\x47\xce\x38\x33\x0e\xc2\x9d\xe4\x4e\x3a\x63\x38\xd9\xd0\xc6\xb1\xb4\x72\xcb\x3e\x3d\x27\x67\x59\x71\x41\x4b\x11\xc6\xd8\x87\x4c\x8f\x1b\xd9\x90\x2a\xf3\x0d\xe5\x3d\x8c\x62\x92\x11\x16\x13\x16\x2d\x80\x44\x18\x20\xe7\x08\x86\x13\x84\xe1\x3b\x9c\x1c\xa3\x73\x93\x5f\xe3\x25\x3c\x7b\xad\xc3\x85\x9e\x62\x46\xa7\x5a\x4f\x00\x23\xac\x1d\xe5\x88\x99\x61\x3a\x1f\x48\x50\xb4\xdf\xaf\x58\xdd\xce\xe8\x1b\xe4\x6a\x47\x54\x62\x56\xfe\x1e\xad\xbe\x70\xa0\xb7\x55\xbb\xa3\x9b\x73\x35\x08\x64\x3e\x39\x82\x7f\x97\x12\xce\x1c\x50\x4f\x81\x22\x43\x12\x02\xe6\x40\xeb\xf1\x82\x8b\xb1\x09\x58\x6e\x1f\x7e\xbb\x35\x79\x1c\x41\x1f\x25\xa5\x26\xa5\x8c\xa6\x79\x1a\x38\xef\x4c\xc5\x82\xc8\xda\x2f\x4d\x26\x46\xa6\xf5\x80\xc8\x81\x97\x23\x7d\xb9\xb2\x05\x9a\xd1\x27\xc2\x46\x2c\xe3\x94\xa9\x63\x74\xc5\x15\x09\x4a\x44\x18\xe8\x28\x9e\x29\x9a\x1a\xb4\x53\x41\xf4\x39\x30\xa0\xd8\x00\x34\x39\xc7\xaa\x87\xe2\x1c\x8e\x2a\x23\x4a\xb3\x0e\x7d\xe3\x2a\xd8\x19\x88\x8f\x16\x23\x66\x6e\xba\x29\xa6\x49\x2e\x88\x95\x59\xb1\xc9\x8b\x29\x86\x5c\x8c\xcc\x22\xa1\x05\x93\x48\xe9\x6c\xae\xf4\x16\x69\x19\xcf\xfa\x1b\xe7\x9a\x1b\xf1\x11\x9b\x10\x84\x51\xc6\x25\x55\xf4\xc9\xfb\x2f\xe9\x14\x61\x29\xc1\x82\x72\x8c\xce\x4b\xf6\x7f\x2a\x41\xf5\x6e\x8a\xab\xa5\x6c\x6c\x6d\xcf\xcd\xf9\x38\x3b\x6f\x64\xa9\x17\xbb\xca\x78\x22\x79\x92\xab\xd0\x05\x5b\xbf\xb7\x85\x69\xdc\x01\xf7\x83\x81\x98\x4f\x47\xcc\xd1\xb5\x3c\x46\x7d\x89\x24\xd7\xbb\x24\xcd\x56\x46\x82\x2a\x22\xa8\x41\x71\x22\xca\x6c\x82\x3f\xa7\xfe\x0c\xa4\x58\x3c\x6a\x11\x2a\xb4\xc0\x1b\x4c\xd1\x92\xb5\x63\x62\x24\x24\x80\xb5\x0a\xb7\x03\x4c\xff\x88\x71\x76\xc4\xc8\x0c\xaf\xdb\x91\x11\x2b\x6d\x09\xfa\x9a\x4e\x0b\x85\xb4\xc9\xe7\x18\xac\xdd\x18\x22\x9f\x9a\x76\xc9\x74\xdc\xb4\x49\xd3\x84\xe3\x35\x6e\xe3\x69\x71\xe8\xd1\xdf\xf9\xc4\x8c\x51\xeb\xfd\x5c\x81\x14\xa8\xd5\xab\x29\x17\x64\x8e\x59\xdc\x73\x9b\x55\x1e\x1b\xdc\x8c\xd6\xd4\xe6\x94\x31\x90\x04\x1d\x88\x30\x31\x58\x4c\x98\x05\x7b\x61\x15\x37\xbb\x15\xc5\x3e\x6c\x74\x57\xf8\xd6\xa0\xf6\x89\x31\x40\x18\x96\xb7\xc8\xec\x11\x97\x34\xcd\x92\x22\xa7\x29\xb0\x8d\x4e\xb5\x88\xe5\x78\x24\x7f\x02\xd3\x95\xd3\xda\xe0\x56\xb7\x3b\xa7\xe9\xac\x66\xe4\x9e\x91\xc2\xad\xe1\x6c\x5e\xa6\x0c\x66\xc0\xc2\xbe\x96\x44\xff\x53\x91\x42\xed\x33\xc2\xfa\x88\x39\x11\xe4\x1b\xe0\x32\xb6\xd9\xc0\x78\xa6\x45\x68\x03\xf3\x6a\xd7\x0f\x45\xc6\xc9\x5d\x3a\x27\xf6\x30\xb8\x57\x6b\x2e\xaa\xef\x28\xc3\xa5\xcc\xdb\x2d\x04\xbf\x24\xdf\x28\xb9\x2a\x70\xfb\x2d\x9a\x6a\x9a\x28\xbc\xae\xcc\xc8\x06\x94\x60\xf6\x99\x20\xdd\x9d\xa5\x66\x57\xf1\x06\x43\x44\xc0\x9c\x24\x19\x8a\xe9\x14\xcc\x52\x0a\xd8\xb7\x07\x16\x33\x58\xf0\xfa\xb0\xa7\x39\x33\x20\x71\xc6\x23\xf2\x6c\xf1\xb6\xed\xd5\x58\x34\x7e\x3c\x62\x43\xf5\x95\xd4\x22\x3a\x67\x33\x7d\xd1\xc4\x4f\x54\x16\x45\x4e\x22\xce\x64\x9e\x12\x61\xbb\xd0\x37\xb2\xa6\x48\x5b\x20\x00\x3b\x19\x4a\x8f\x4d\xef\xfd\x13\x4e\x68\xec\x0a\xf1\xe8\x1f\xcd\x99\xd3\xa3\x94\xce\xa3\x58\x13\x12\x66\x37\x37\xd6\x6b\xf5\x66\x62\xfd\x8f\xa1\xe4\x8e\xd2\x42\xc8\xc7\xd6\x56\x7f\x52\x15\xf1\xed\xaa\xaf\x10\xef\x27\x4b\x93\x42\xab\x05\x23\xbb\x0a\xe7\xeb\x50\x0c\x1d\xa2\x6e\x6e\x42\x80\x75\x3f\xce\xe8\x63\x06\xb7\x11\xfb\xa9\x4c\xd0\x8e\xda\x70\x96\x50\xbc\x27\x14\x64\x03\xa9\xb0\x16\x2f\xcc\x75\xc0\x85\xd5\x70\xec\x9d\xd3\xbc\xb5\xe7\x3b\x96\x89\x90\x11\x4e\x96\x77\x78\x85\xbd\xd9\xbc\xbf\x5a\x09\xb0\xc7\xcd\xb4\xbd\x32\xe9\x37\xe2\x49\xb2\x49\x09\x93\xca\xcc\xcf\x8a\xcf\x57\x8f\xa8\xe8\x47\x6f\x80\xdb\x0b\x38\x35\xe6\xf2\xc6\x89\x35\xa5\x48\x65\x77\x29\x7c\xc9\xa8\x61\x0b\xcb\x5a\x47\x8c\x4f\xa1\xc8\x4d\xd2\x14\xd5\x95\x09\x9e\xd2\x4d\x50\x96\x4d\xa0\xd3\xad\xb3\x8b\xaf\xb1\x32\x38\xeb\x39\x88\xa6\x86\xbc\x6c\x8f\x90\xaf\x87\xad\xb8\xb9\xe2\x0c\xa5\x38\xdb\x6a\xc1\xd7\x79\x85\xfa\x28\x35\x2e\x39\xbb\x7a\x80\xb7\x48\xa0\x5e\x0c\x2c\xf2\x33\x5e\x14\xa9\xd1\x4d\xf8\xb9\x6c\x23\x72\x78\xd0\xaf\x0f\xd9\x94\x6f\x70\x38\x8b\x54\x66\x7b\xfa\xb0\xa3\xd9\xe0\xfc\x79\x2f\x85\xd9\x7d\xb3\xa6\x6d\xce\xe3\x59\x1d\x51\x6f\x7c\x32\xdd\x0a\xbe\xa4\x8d\x32\x64\x22\xa1\x79\x72\x93\xbb\xb5\x7c\xb4\x82\x16\x11\x0c\x67\xf5\x52\x5d\x96\xe8\x70\xef\x6b\x54\x69\x07\x19\x53\xb8\x0b\xa6\xbe\xa9\x6f\xf5\x15\xd6\xcc\x1e\x92\x56\x8b\xb5\x23\x76\xc3\x66\x38\xc0\xae\x47\x8f\xfa\x5b\x7f\x42\xd7\x16\x39\x68\xbf\x18\xc0\xcd\xa4\xb5\x73\x15\x91\x99\x36\x45\x6d\x4a\x13\x2d\x62\x0f\x6b\x0c\x9c\x2e\x41\xcc\x07\x54\x99\x50\x79\x27\x3d\xe5\x82\x06\x85\x41\x9d\x8c\x84\x28\x14\x28\x09\x9d\x3c\x81\x42\x0f\xa6\xc5\x39\x7f\x36\xd1\xe9\x82\x6a\x9e\x65\x84\x55\x05\xe6\x1e\xcd\x0b\xa8\xb5\x96\x18\x63\x93\xff\x80\x9b\x98\x41\x6c\x6b\x1f\x17\xa3\x6a\xd8\xd2\x7d\x94\x78\x6a\x9f\x7f\xe7\x7a\xbd\xd7\x5f\x2c\xef\x4d\xed\x08\xef\xcb\xad\x6f\x3c\x3a\x2f\xe5\x6f\x1e\x30\xf5\x11\x3e\x75\x4a\x0f\x46\x53\x41\xc0\xc1\x9f\x7a\x4c\x0d\x03\xaa\xcb\x39\xdc\x77\x77\xe7\x3f\x9c\x3c\x0c\x11\x51\x11\x4a\xe8\x23\x19\xb1\x48\x3e\xf5\xb4\x78\xfc\x8f\x9c\x28\xfd\x73\x83\x47\x80\xa6\x84\x49\xe0\x04\x54\x2d\x61\x0f\xd5\x2f\xa4\x5b\x18\xfd\xdf\xf3\xf2\xf7\x2b\x48\x7e\x29\x7d\x18\x68\xd7\xd5\xbb\x01\x32\x85\x92\x1e\x66\x69\x65\x0d\xc5\x18\x5b\xe4\xa0\xae\x1a\xe6\x16\xe9\x42\xec\xef\x39\xdb\x50\xe8\x3a\x2b\x3e\x0a\x46\xd1\x20\xd3\xa5\x19\x06\xac\xeb\xcd\xf2\x90\xcc\x37\xb5\xad\xaf\x63\x22\x45\x5a\xb6\xb3\x2d\x17\x85\x43\x91\x12\x84\x00\x0b\xf1\xf4\x64\xef\x7a\x8b\xc4\xe1\x27\x16\x7c\x74\x3c\x62\x97\xce\xe3\x5c\xfc\x2a\x0b\x3d\x3c\x9d\x04\x10\xe0\xe5\x56\xa0\xd9\x98\x4a\xff\x03\x14\x74\x91\x79\xa2\x4c\x45\xbb\x29\x65\x38\xf1\x03\x35\x4f\xea\xb8\x84\xc0\x2c\x9a\xef\x6a\x42\xa6\xd3\x31\x49\x36\x91\x44\x87\xd3\x41\x22\x35\x7d\x47\x8f\x0d\xa7\x73\x9b\x9a\x8d\xc5\x64\x6c\x25\x5a\x53\xf7\x09\x15\x26\x68\x9c\x98\x8a\x72\x04\x81\x8f\xb2\x9a\x3d\x66\x00\x22\xf4\x2e\x5a\x49\xdd\xb8\x28\x4d\xda\x86\x0f\xc9\x86\x5e\x10\x56\x23\x26\x72\x06\xc5\x26\x7c\xc4\x02\x46\x05\x5e\x78\xe4\xfc\x07\xd6\x9b\x33\xd3\x6c\xc2\xc0\x71\x9b\x97\xb5\x7e\xc6\x73\x09\xb6\x9a\x94\x28\x7d\x41\x7d\x0d\x75\x60\x4d\xc8\x50\x0f\x65\x82\xa6\x60\x6e\x95\xdf\xd4\x6c\xdd\x19\x56\x38\xe1\xb3\xbe\x50\x74\x8a\x23\x75\x8f\x77\xd2\xc0\xb1\x6d\x66\xdb\xf0\x53\x37\x0c\x34\x3c\xd7\x8b\x3f\x23\x8c\x08\x98\xa8\xd6\xc9\xeb\x8f\x30\x3c\xd9\x8a\x73\x83\x95\xcd\x1a\x46\xa5\xb7\x58\xe0\x5c\xf1\x54\xeb\xb7\x38\x49\x16\x3d\x63\x91\x25\x68\x8e\xe5\xdc\x6d\xb4\x31\xa6\xb5\xb9\x9b\xec\xe2\x9e\xe1\x68\x4e\xee\xa0\x2a\x72\xdd\xe2\x56\x46\xf9\x81\xb0\x3c\xfd\x70\x8a\xfe\xa7\x98\xe3\x59\xff\xec\xfb\xc1\xf8\x7c\x78\xd7\xff\xee\x62\x70\x1e\xcc\xc7\x3e\xb9\x1c\xde\xdd\x2d\xff\xfa\xfd\xf0\x7e\xf9\xc7\x9b\xeb\x9b\x87\x8b\xfe\x7d\x5d\x2b\x17\xd7\xd7\x3f\x3c\xdc\x8c\x3f\xf6\x87\x17\x0f\xb7\x83\x9a\x4f\x1f\xee\x9b\x1f\xde\xfd\x30\xbc\xb9\x19\x9c\xbb\x55\xf9\x5b\x70\xba\xc0\x7a\x0c\xa9\x17\xf5\xd3\xa8\x1e\xc0\x23\x54\x7e\xf1\x14\x3d\x54\x4b\x1f\xd8\x58\x64\x83\x63\xf1\x8c\xa5\xe6\x61\x10\x0a\x3f\x62\xc8\x7d\xae\x17\xa5\xe9\x53\x13\xae\x13\xcd\x09\x4a\x38\x7f\xcc\x33\xcb\xda\x4c\x7c\x18\xe3\xc6\xf0\x43\x64\xd0\xda\xf7\xc3\xfb\xd3\xe5\x12\x0c\xbe\xb1\x00\x31\xcb\x9d\x01\x18\x17\x76\xec\x14\x6c\x29\x0e\x9a\xbf\xb0\xde\x06\x3d\xf8\x9d\x59\xd5\x8f\x69\x0d\x33\x55\xe9\x26\x8e\x6d\xd1\x5f\x37\xb1\xa0\xe1\xf2\xbe\xae\x5a\x4d\xbf\x1c\xa6\xf6\x14\x9a\x90\x08\xe7\x26\xa8\x49\xdf\x53\x42\x70\x11\x0e\xb8\xa0\x87\xfd\x35\x6a\xe9\xa8\xb6\xc1\xca\x9e\xe9\x89\xcb\x47\x9a\x65\x24\xfe\xb0\x2c\xbf\x94\xab\xc3\xda\x9a\xe4\x7c\x8a\x82\x33\xa9\xf5\x7a\xd0\xf9\x5d\xe1\x94\xf9\xc2\x7b\xd2\x20\x70\xa3\x08\x65\x01\x20\x67\x7d\x27\xf8\xc2\x16\x14\x5c\x63\x58\xa1\x67\x02\x29\xd5\xb9\xad\x1c\x65\x74\x6f\x7d\xb6\xa1\x3b\x63\xd3\x76\x75\xe0\x4a\xa9\xd6\x8d\xcc\x78\x1f\x02\xb7\xfe\x5e\x92\x3a\x46\xbc\x43\x5e\xec\xb9\x69\x14\xb8\xb3\x8b\x79\x83\x11\x37\x04\x37\xb8\xdb\xa0\xc6\x42\xbe\x42\xbe\x5a\xbe\x91\xd6\x5c\x16\x9a\x6d\xb7\x19\x8f\xc3\x02\x29\x01\x5c\xb7\x1f\x58\x09\x04\x79\xed\x5a\xdd\xf3\x18\x2f\x34\x71\x40\xac\xb1\xcc\xb3\x8c\x0b\x85\x1a\xda\x30\x6e\x7c\x33\x3e\xb8\x73\xec\x3c\x3c\x8f\x83\x46\xb4\x84\x21\x6b\x6a\x69\xb4\x83\x47\xb0\xeb\x5a\x30\x8e\x30\x40\x16\x14\x41\x5f\xf7\x28\x2d\xa9\xd4\x25\x0a\xad\x13\x7e\x77\xc9\x30\xc8\xf4\x05\xdf\xb6\x0c\x5f\x5d\xef\xd7\xae\x85\xda\x2d\x4f\xc8\x54\x8d\x6b\xbd\x3e\x2b\x0c\x9c\xba\x45\xd6\x84\x28\x43\x67\xf3\x3d\xb4\xd8\x5e\x4b\xf8\xa3\x0d\xec\xd1\xaa\x41\x60\x21\x10\x9c\x2b\x23\x9f\x16\x3a\x0c\x72\xab\x09\xe6\x05\xdb\xa9\xcd\x05\xf3\x42\xa0\x96\xf9\x8d\x3f\xd4\xa7\x4d\x1d\x8f\xd8\x00\x02\x28\x0a\x45\xc4\xa5\x88\x81\x16\xb0\x56\xfe\x2f\x15\x1d\x7d\xd5\x68\xcd\x66\x84\xd7\x82\xee\x6d\xbd\xfc\x64\x81\x8a\xc2\xb2\xa5\xef\xda\x9c\x1e\x63\xf5\x76\x22\xa0\x99\xb0\x2d\xe3\xae\x48\x66\x2d\xf3\x66\x9e\x45\xa4\x0f\xc4\x87\xe9\xae\x8e\xd1\x4f\xce\xf2\x03\x81\xaf\x45\x4d\x66\x1b\xbb\x91\xe0\x85\x03\x85\xac\x5b\xd8\x7d\xe0\x2c\xee\x3b\x14\x76\xf5\x02\x7b\x40\xa7\x9a\x55\x2e\x29\xe0\x8c\x19\x8b\xec\x06\x69\x1f\x67\xfe\xa3\x3b\xb2\x3a\x2a\xe0\x23\x94\xe1\xb4\x91\x55\x20\x74\xb0\x64\xf1\xbf\xcc\x66\x99\x4c\x54\x57\x58\xcb\x96\x45\xb4\x1e\x54\x7d\x7e\xc0\x03\x68\x12\x55\xd1\x94\x26\x09\xc8\x01\xc7\xa8\x0f\xe5\x81\x21\x91\x53\x5f\x85\x2e\xc0\x82\xce\x18\x5f\x97\x63\xd6\x40\x4c\x51\x40\x4c\x77\xcd\xc4\x24\x81\x9a\x8a\x3c\xfe\xfd\x50\xd4\x1e\x30\x5d\x34\x6f\xc1\xcb\x88\xd8\xed\x91\x5c\x36\x50\xde\xdf\x22\x3a\x7a\x69\xb8\xc1\x87\xff\xaa\x1f\xfa\xa7\x1c\x0b\xcc\x14\xc4\xfc\x5a\xd1\x5d\x90\x20\xf5\x88\x7c\x86\xf8\x0c\x66\x0c\xc1\xf0\x53\xb8\xb9\xce\xe5\x0f\xe1\x5e\x88\xc6\x3d\x44\x8f\xc9\x31\x54\x67\x13\x5a\x96\x98\x14\x6f\xce\xb5\xe4\x30\x62\x4b\xb1\x8c\xc7\xa8\x9f\x48\x6e\xbf\x20\x2c\x4a\xa0\x1c\x77\x10\x9e\xec\x29\xdf\xba\x95\x26\x0b\x50\x50\x60\x2b\x8b\xe6\xb9\x7d\x10\x7c\x08\x45\xc6\xc0\x27\x9e\xc0\x49\x2f\x7e\xff\x3d\xcf\x8c\xb7\xa2\x29\x4e\xe2\x05\xcb\x39\x2c\x5d\x43\x2f\xb6\x49\xa6\x54\xe0\xaa\x0d\x82\x37\x60\x63\x8a\x18\xd3\x00\x81\x05\x7d\x8d\x15\x4a\x08\x96\x0a\xfd\xe1\x9b\x8d\x62\x43\xdc\x04\x0b\xee\x6a\x8f\x6f\x91\x28\xe6\x52\x0d\x42\xe1\xce\x77\x0c\xb5\xe3\xb0\x50\x08\x23\x46\x9e\xc3\xc8\x52\x0e\xc1\xc0\xae\x20\x1c\x09\x72\x5b\x4d\x3c\x99\xc9\xcc\x87\x6c\x0d\xa3\x32\x35\xf0\x11\x07\x77\x6c\xdd\xa7\x76\x58\x35\x94\x65\x95\x27\x1b\xe2\x09\x90\x5c\x45\xd0\xff\x1c\xab\x11\xb3\x9c\xd5\x85\x8d\x04\x69\x5e\xfd\x24\x29\x07\xda\x63\xc8\x25\x61\x7a\xc2\x50\x9f\xfd\xd8\x2f\xd0\x15\xa8\x5f\x3e\xda\xb9\x64\xa7\x2b\x0e\x8b\x89\xc7\xf3\x78\x47\x61\xdb\xb5\xd2\x4e\x9d\x7d\xf9\x15\x85\xe0\x9a\xee\x2f\x4c\xa1\xfc\x16\xc2\x30\xa9\x1b\xf2\x9a\x83\xb5\x6c\xd3\x5f\x21\x1b\xef\xbb\x83\xf6\xa2\x72\xbd\x7d\x1c\xae\xd9\x67\x5e\x63\x6e\x6f\xd8\xdc\x40\xb6\xd8\x45\x01\xf7\x61\xf7\xaf\xe5\xf1\x2d\x0d\x7d\x18\x43\xd2\xdf\x7a\x2e\x58\x24\xd1\x39\xd6\x61\x62\xaf\xe3\x20\xa7\x27\x48\x21\x80\xe0\x3f\xc7\xf8\xec\x9b\x0d\x9e\xd7\xec\x7d\x4f\xbf\x57\xcc\xdf\x4d\xc5\x07\xc1\x2d\x4f\xbc\x59\xd8\xeb\xc7\x7f\xc7\x11\x44\xfa\x43\x4f\x2e\xc7\x60\x19\x90\xc9\xc1\x58\x63\x30\xe6\xd7\x8a\x87\x99\xe0\x11\x91\xf2\x18\x0d\xe0\xa2\xb1\xff\x44\x78\xea\x1c\x12\xc1\xcb\x23\xa6\x35\x13\x87\xdf\x12\xb4\x5f\x26\xf1\xba\x13\x60\xc0\xe0\x76\xf2\xe5\xa4\xeb\x6b\x94\x34\x69\x13\x0e\x8b\x0e\xda\x80\xb2\x06\x68\x30\x3b\x45\x31\x8f\x1e\x89\x38\x11\x24\xa6\xf2\x14\x7c\xeb\xaa\xd1\xa9\x97\x6a\x6d\x7b\x67\x49\xa3\x29\x50\x60\x4d\x52\xdc\x99\xe9\xdf\x06\x58\xbb\xf0\xda\x1e\xa2\x53\x50\x27\x5c\x4e\x86\x09\x42\x76\x70\x37\x84\x29\xb1\x80\xb8\x7e\x6f\xca\xaa\x2c\x84\xd3\x34\xb4\xd0\xd6\x94\x4d\x24\xf6\x11\x83\xb3\xe5\xb4\xef\xe7\x44\x12\x17\x70\x60\x26\xa5\xb8\x8d\x65\x36\xec\x22\xc3\x6a\x2e\x21\x75\xb5\xbc\x06\x56\xe9\x82\x4f\xf5\x0a\xe1\x0c\xe2\x15\x8c\x95\xa2\xf8\xc8\x27\x58\x4a\x45\x93\x64\xc4\x18\x21\xb1\x44\x90\x65\xfa\x55\x6d\x86\xbc\xfe\xb4\x87\x70\x1c\xa3\xff\xfd\xf5\xc7\x8b\x9f\xef\x07\xe3\xe1\x15\x18\xad\x87\x17\x83\x6f\x7a\xfe\xc7\xeb\x87\x7b\xff\xab\xb1\xb0\x3c\x11\x81\x52\xfc\x08\x2a\x1e\x93\xc4\x26\x4f\x90\x11\x0b\x47\xea\xb0\x03\xf4\x13\x49\x5c\xa4\xab\x15\x53\x3c\x84\xa2\xdd\xc3\xc6\x8a\xc5\xc6\xe6\xb7\x81\xf2\x7b\xeb\x3f\x59\x4d\x83\x8e\x78\x7c\x17\x4e\x0c\x84\x1c\x19\x2c\x83\x64\x72\xab\xfb\x16\x04\x47\xd8\x8c\xb2\xa6\x78\x3c\xc2\x9e\x5e\x52\x88\xff\x81\x2c\x7e\xd4\xea\xf5\x0d\xa6\xa2\x35\xed\xd5\xa3\x01\xb9\x13\xa3\xf5\x74\x2c\xab\x87\x4a\x1a\x59\xd8\x64\xdb\x34\xc6\x7c\xd6\x01\xc1\xbd\xf9\x74\x2d\xbc\x14\xf9\xac\x84\x43\xa9\xf0\xf9\x1c\x0e\xca\xc9\x5f\x34\x05\x0d\x8e\xd8\xfd\xf5\xf9\xf5\x29\x22\x09\x9e\x70\x08\xe5\xb7\x21\x41\xae\x09\xbb\x60\x11\x4f\x83\x86\x4a\x08\x25\x3d\x94\x15\x08\x25\xa1\x11\xed\xd8\xb4\xb1\x06\xa9\x24\xe3\x62\x19\xdf\x63\xbf\x2a\xa0\x9d\xec\x0d\x17\x6d\xae\x7f\xfd\x1a\x2c\x1d\xcf\xb4\x22\x57\xe1\xbc\xf6\x6e\x9e\x12\x6c\x6a\xe9\x1b\xb7\x90\xb5\xe5\xdb\x00\xd6\x24\x29\xd5\x53\xd4\x07\x47\x1e\x5b\x17\x7c\xf1\x26\x67\xe8\x87\xbf\x48\x34\xc9\xd5\x88\x95\xdb\xe0\x0c\xf5\x7f\xba\x43\xdf\x61\x15\xcd\xbf\x19\xb1\x6b\xad\x66\xfe\xf0\x97\x06\x28\xa5\x8d\xd1\x09\xf5\x9a\x9c\x63\x85\x2f\x38\x8e\x29\x9b\xd5\x41\x13\x16\xf5\x63\x06\xf7\xfd\x53\x74\x6d\x75\xf8\x22\x13\xc4\xa7\x04\x07\x0d\x01\x43\x86\x89\x38\x2e\x02\xac\x9c\x95\xe1\xdb\x8c\x66\x06\x17\xd6\x88\xdd\x1b\x4c\x46\xcd\x55\xa9\x42\x19\xb7\x35\x8c\xb4\x56\x66\xd0\x2a\xb1\xcb\x90\x22\xc9\x02\xe9\xd5\x01\x32\xf6\x9b\x61\xe5\x31\x90\x67\x96\x99\xfd\x88\x81\x82\xee\x73\x53\x12\x1e\xe1\x04\x62\xf2\x8e\x02\x9b\x9e\x56\xdb\x79\x0e\xf9\xe1\xa6\xe8\xf9\xa2\x1c\x3a\xeb\x21\x0b\xbc\x50\x16\x6e\x14\x18\x00\x60\x1f\xad\x37\x36\xe5\x9a\xe3\x18\x2c\x36\x30\xbe\x25\x66\x75\xf4\x87\x1e\x9b\xcd\x2c\x8b\x7e\xea\xd3\xb6\x78\xce\x1c\x16\x49\x04\xe6\x7b\xb6\x80\xf0\x6d\x28\x3a\xc2\x21\xf4\xa3\xe0\xce\x96\x28\x97\x76\xd1\xdf\x89\xc1\x67\x23\x66\x22\x05\x4b\xfb\x12\xa2\xf7\x04\xbd\x73\x06\x81\x8c\xcb\xb9\x62\x79\x66\x03\x1b\xad\xac\x9f\x09\x72\xe4\x33\xa0\xe2\xd2\x9a\xea\x1b\xf6\x18\xdd\x86\xea\x75\xcc\xa3\x3c\x75\xc8\xca\x90\x3d\x55\x94\x95\x2f\x49\x3c\xe6\x62\x5f\x47\xf1\x80\xd2\xa2\x08\xa4\x8f\xb7\xd6\x8f\x0d\xc1\xf4\xc3\x4f\x97\x25\xf5\x66\xc1\x17\x78\xc7\x6e\x51\x6b\xa6\xa1\x71\x56\x6e\xa9\xd4\xda\xce\x79\x89\x57\x05\xfa\x2b\x17\x20\x6c\x91\xcf\x19\x07\x23\xb7\x49\xcf\xe2\xf1\x57\x12\x0d\x6f\xb4\x04\xa4\x35\x5e\x7f\x06\x73\xa9\x4c\x70\x19\xa4\xeb\x98\xaf\x4d\xba\x40\x0f\x7d\x8b\x46\xf9\xb7\xdf\xfe\x29\x42\x9f\xdd\x1f\x7f\xfe\xcf\xff\xfc\xd3\x9f\x37\x49\x27\x71\x0a\x39\xb4\x5b\xac\x91\x2f\x27\x55\x16\x89\xc2\x1d\x58\xe6\x54\x3b\xec\x82\x3d\x80\x4d\xcb\xbf\x0d\xca\x63\x10\x3b\x84\x67\xf6\x84\xcb\xf0\x64\xa2\xd2\xd1\x2c\x22\x09\x24\x51\xbd\x32\x87\xf0\xc2\xae\x95\xe8\xff\xd7\x0a\xb0\xb2\xb1\x3e\x2a\xdb\xc5\x38\xd1\xc4\x8b\xd7\xba\x11\xf4\xb5\xb5\xff\x29\x70\x20\x7e\xe3\x2e\x38\x9e\xc4\x44\x98\x31\x79\x93\x9d\x37\x24\x02\x73\x20\x9f\xb3\x84\xc7\x0e\x1e\xb5\xc8\x05\xa4\x20\x20\x0c\x3e\x63\xcd\xb9\x7b\x16\x46\xcb\x7c\x64\x3c\x2f\x53\x1c\x19\x54\x50\x89\xbe\xfe\x7c\xaa\x7f\xeb\xa1\xc5\x29\x04\x91\xf6\xd0\xaf\xa7\x16\x2d\x07\x0b\x35\xd6\x3f\x7d\xe3\x64\x6d\xdb\x04\x0c\x9a\x4a\xf4\xd5\xc9\x13\x16\xa6\x66\xf4\x89\x19\xd1\x57\x96\xb3\xfa\xba\x78\xa1\x6c\x9e\x70\xfe\x68\x03\x6c\x97\x3e\x3c\x71\xc0\x6b\x40\xde\xde\x6f\x62\xb6\xde\x27\xe6\x2b\x74\x04\x2f\x10\x74\x9c\x4d\xd0\xf1\xdf\x25\x67\xe8\x78\x81\xd3\xc4\xfe\xea\x9e\xda\xf8\x5f\x2c\x6d\x4e\x5c\xec\x83\x7c\x92\x85\xb1\x94\x7e\x97\xf0\x09\xcc\xea\xd2\xcd\xd4\x44\xd0\xc2\x40\x8b\xdb\xa7\xb8\xb0\xec\x44\x5c\x22\x2a\xe0\x07\xa5\x5c\x99\x57\x80\xc7\xd5\xcd\xea\xb3\x1f\xd2\x7f\x1b\xbf\x30\x2c\x8a\x4b\xe2\x33\xc6\x61\x1f\xbd\xa6\x1b\xfd\x8c\xbe\xb6\x2c\xe8\x1b\x7d\xc7\xd8\x70\x65\xb3\x0c\x75\x1d\x2c\x7c\x07\x3f\x07\x1d\x50\x86\x4c\x5a\xe6\x8a\x2f\x7f\x3d\x39\x3e\x3e\xf6\x5f\x43\xd6\xfa\xff\x8b\xa8\x92\x24\x99\x9a\x96\xdc\x0d\xb6\x18\xb1\x4b\x57\x78\xc1\x19\xaf\x0b\x48\xc7\x4c\x70\xc5\x23\x9e\xa0\xa3\xc2\xa0\x1b\xf3\x48\xa2\x7f\xd7\x62\x6d\xb0\x94\xf0\xa3\xd6\xe3\x1a\x60\x60\x0d\xd2\xf3\x2b\x1d\x2a\x6b\x10\xaf\x1e\xab\x10\xc5\xcd\x2b\xb6\x58\x86\x55\x3c\x80\x16\x34\xe5\x9c\x58\xa4\x37\x21\xf4\xcb\xe4\xb3\x82\x47\x0d\x40\x7a\xb5\xa1\xec\xf5\x37\xe5\x12\xbb\x2d\xf0\xf4\x0c\x59\x37\x2c\x80\xc5\xbb\xb2\x9c\xc1\xcc\xb3\x17\xba\x4f\xf4\xe5\xc2\xc2\x52\x00\x32\x4f\x53\x2c\x16\x27\xc5\x69\x5b\x26\xce\x02\x69\x0d\x78\x4c\xe2\x16\x00\x5c\xb8\x89\x3d\x5a\x36\x8a\xc1\x8a\x97\xee\x46\xf3\x67\x37\x82\x5a\x86\x01\x62\x01\x61\x11\x8f\x2d\x5d\x17\xd9\xa7\x65\x89\xc5\xbf\xb3\x2c\xab\xb8\x88\x18\x59\x18\xe3\x98\x32\x10\x1e\xf6\x0d\xf7\x71\x03\xfb\xe6\x63\xa8\x8a\x4b\x66\x1b\xb8\x47\x87\xd7\x77\xee\x9b\xf6\x97\x2e\xac\x43\x59\x64\xc7\x49\x88\x8f\xc7\x66\x48\xe0\xe7\xe2\xfa\x85\xd8\x0e\x63\x9d\xc9\x7d\x6e\xae\xf9\xf7\x19\xbf\xa1\x89\xbe\xb5\x80\xc6\x8f\x47\xac\xf4\x73\x0f\x91\x84\xa6\x94\xf9\xd8\x3a\xc3\xdc\xf9\xd4\x48\xcf\x8f\x54\xe9\x2d\x93\xf1\xa3\xe6\x60\x0e\xd7\x29\x50\xa9\xfa\x6c\xe1\x48\xc7\x3b\xa6\xac\x05\x22\x97\x7a\x5c\x85\x8e\xae\x85\x59\xdd\xc4\x91\x15\x48\x69\x40\x78\x70\x7e\x47\x4c\xb7\xe6\xce\x52\x11\x2e\x1c\xb4\x17\x34\x77\xe4\x00\xf1\x03\x0e\x00\x7d\x94\x62\x7e\xbd\xfc\x5b\x23\xa0\x0c\x58\x9e\xee\x9a\x6c\x62\xc3\x87\xdf\xca\x4c\x77\x23\x88\xbb\xa9\x6c\xe2\x12\x61\x79\xea\x0e\xd4\x06\x14\x37\xb0\xe2\x4f\x4c\xa2\x04\x1b\xa4\x1a\xdd\x10\x44\x3e\xf6\x8c\x83\x34\x0b\xfa\x32\xd7\x8b\xe9\xc6\xd4\xd8\x49\x08\xfb\xda\xfc\xfb\x1b\x64\xef\x86\x6f\x7b\xf6\x3e\x17\xd2\x23\x80\x98\x3d\x87\x1a\x8d\x24\x36\x36\x74\x40\x25\x9e\x61\x11\x1b\x6b\x79\xa8\x55\x98\x0c\x5e\x2d\x7f\x2d\x78\x8e\x9e\xa9\x9c\x8f\xd8\x3d\x77\x06\x47\xc4\xb8\xc7\x75\xee\x81\x32\xba\xd4\x1f\x96\xc0\x04\x60\xd4\x75\x14\xa0\x99\xf0\x4e\xb9\x46\x10\x05\x3b\x66\x3c\x26\xbb\x01\x18\xdd\x17\xbe\x0a\xe7\xbf\x16\xc4\xe4\x83\xc1\x4d\xd1\x94\x4e\x4b\xa4\xdc\xd0\x36\x5f\xdd\x78\xb8\x87\x6c\x3b\x50\x12\xf8\x79\x23\x74\xed\x10\x1b\xcc\xdf\x6a\xd0\x8a\xd3\x38\x83\x6c\xe0\xd2\xda\x7b\xb4\xe4\x5d\x37\x21\xaa\x41\x2b\x6a\x75\xf7\x9b\xb9\x47\xb0\xec\x3e\xc0\x18\xa3\x99\xe0\x79\xe6\x53\xe6\x5d\xba\x9f\xd9\x06\x2b\xd3\x0c\xd9\x94\x9f\x5a\x9d\xea\x82\xb2\x47\x43\xf1\x2f\xb5\x47\x06\x10\x9b\xc4\x25\x18\x37\x57\xa5\x15\xe6\x70\x84\x28\x8b\x92\x1c\x2e\x3e\xa9\x70\xf4\x68\x40\xbd\x9b\x8c\xbe\xfa\x9b\xf1\xfa\x64\xca\x06\x89\x29\x4f\x12\xdb\x6d\x71\x81\x16\x65\xac\x9f\x28\x46\x18\x3d\xdc\x0e\xeb\xfb\x7e\xa4\xcb\xce\x9c\xfa\xdb\xb3\x4c\x20\xf0\x3f\x3f\xd0\x8d\xe2\x2e\x2b\xb0\x78\xa4\x44\xea\xde\xb8\xd4\x04\xba\x6a\x88\x54\x69\x05\x22\xbe\xad\x31\xed\x6f\x4c\xa7\xb3\x2c\x1f\xeb\x85\x4a\x36\x09\x10\xd0\xa3\xf8\x74\xf3\xd0\x0f\xbe\x5b\x45\x2a\x9f\x6e\x1e\x50\xd0\x87\x01\x3c\x4c\x48\xa4\x7c\xa4\xf1\x31\x3a\x2b\x70\x88\xab\x92\x79\x4c\x9e\x68\x64\x52\x5c\x7b\x5a\x2a\x1a\x31\x80\xf7\xd4\xba\xce\x91\xc3\x84\x42\x9f\x6e\x1e\x2c\x92\x94\x87\x9b\xb2\x90\xca\x00\x61\xb1\xd9\xb5\x53\x01\xd6\x64\x9c\x1d\x81\xc4\x86\x45\x5c\x78\x3b\x7a\xa0\x5c\xff\x7f\xec\xbd\x5b\x73\x1b\x49\x72\x36\x7c\xbf\xbf\xa2\x22\x7c\xa1\xd1\xf7\x81\xe0\x68\xf6\xb5\x63\xad\x08\x5f\x50\x14\xb5\xc3\x5d\x89\xd2\xf2\x30\xb3\x7e\x0d\x07\x54\xe8\x2e\x00\x65\x36\xaa\xa0\xae\x6e\x72\x60\xaf\xff\xfb\x1b\x95\x99\x75\xe8\x23\xba\x01\x52\x1a\xaf\xe7\xc2\xde\x11\x01\xd4\xf9\x90\x95\xf9\xe4\xf3\x24\x7c\x5b\x94\x64\x60\x3c\xbc\x9a\xba\x39\xb9\x0e\x91\x10\xdb\x2c\x3d\x53\xd6\x56\xc2\x2c\x03\x50\xff\x68\xea\xd3\xb7\x0c\xea\x31\xe0\x00\x18\xb4\xa3\x0e\x7f\xe9\x33\xfc\xb8\xda\x31\x9e\x2f\x64\x91\xdb\x67\x18\xfe\x18\xa6\xc2\xbd\x3d\x16\xee\x45\x15\x2c\x23\x12\x6c\x81\x09\x96\xaa\x30\x33\x15\x65\xb0\xf8\xac\x60\x4c\x5e\x90\x8a\x01\x1d\x1e\x60\x6f\x1c\x3d\x57\x92\xe9\x32\x75\xd7\x6a\xee\x05\x60\x76\x5b\x34\xa2\x66\x0a\x98\x49\xec\xdd\x0a\xc2\xe7\xe1\xee\x7f\xcd\x3e\xab\x07\x99\x4a\x7e\x52\x08\x93\xf1\x93\xe2\xff\x7c\x9e\xd4\xfe\xc4\x5f\x7d\xff\xfd\x67\xd4\xb2\xe9\xa2\x5d\xf0\xcb\xe8\x68\x07\x4f\x7b\x9c\xc2\x15\x3f\xb7\xab\xf4\x88\x79\x7a\x2f\xef\x05\xfb\x8c\xd3\xfd\x99\x08\xfc\x0e\x9b\xb6\x99\x6a\x9b\x37\x76\xc8\xb4\x01\x9d\x6a\xfb\xbc\xb1\x9e\x69\x7b\xb5\x9a\xfe\xe3\x6a\x61\x67\xeb\x87\xd5\xf4\xd5\xf7\xf0\x9f\xb5\x39\xda\xb7\x79\x7d\xf6\x4c\x5b\xb3\x5b\x0e\xa2\x96\x6d\xe9\xcf\xa2\x99\xda\x7f\x18\xb1\x71\x67\x11\xac\xda\xb6\x8d\xcf\x0b\x71\x6c\x76\x2b\xf2\x3a\x8e\x40\x5f\x37\x08\x33\x7b\x23\x82\x47\xb2\x4d\x06\xa6\x48\x80\x7b\x76\xd3\x5e\xc6\x00\x5c\xf8\x70\x04\x1f\x0f\x7c\x7f\x58\x7f\x6a\xdf\xdd\xd3\x9d\xfe\x66\x66\x42\x8c\x60\x90\xb9\xb1\x5f\x1f\xd8\xc8\xca\x57\xfb\xda\xf8\xc8\x51\x51\xa7\x49\xe4\x9e\xd2\x6b\x7d\xcc\x2e\x72\xcb\x11\x5d\x26\xc6\xe7\xfd\xf9\x96\x38\x68\xa5\x7f\x5f\xbb\x7a\x57\xb4\x97\x62\xc1\x1e\x1f\x75\x6b\x59\xf8\x91\x2b\xe2\x48\x28\x9c\x7d\x52\xcf\x37\x83\x49\x42\x43\xc5\x6f\xe9\xc7\x1f\x1a\x94\xa1\xde\xbc\xfc\x00\x99\xd9\x9e\x0c\x6b\xc3\x95\xb5\xd6\x5c\xad\x1d\x81\x25\x7c\xe5\x1f\xd4\xa4\xbb\xed\x41\x0d\xc2\x1a\x07\x6a\xd9\x52\x55\xae\x94\x47\x8c\xad\xf2\x0c\x63\x07\xc5\x1a\xdc\xca\x41\x03\xce\x1d\x73\xc1\xbd\x8c\x7a\x71\x19\xcf\x57\xe8\xf4\x32\xa2\x30\x2f\x5b\x66\x38\xe4\xb1\x1d\x31\xc3\x07\xe8\x6c\xc7\x58\x16\x70\xa9\xf4\xed\x34\xdf\xca\x2a\x61\xb4\x7f\x69\x79\xc5\xfa\x88\x0d\x35\x24\xd7\x25\x3a\x47\x75\x85\xd4\xee\x95\x6e\x1e\xac\xb1\x52\xef\xf5\x78\x1c\xdf\x78\x96\x17\xa7\xfa\x4e\x39\xbb\xd8\xb8\x85\x00\xae\xf3\xee\x36\x8c\xd7\x75\xef\x69\x02\x09\x1d\x77\xb5\x60\xa6\xce\xdc\x57\x02\x63\xa3\x91\xe8\x65\xc1\x74\xc4\x72\x81\x19\x2e\xe0\x33\xe3\x61\xd4\xa9\x73\x1d\x9d\x18\x9b\x90\x5f\xeb\xc2\x9d\x11\x79\xb8\x8d\x48\x05\xce\xf3\x32\xf7\x2a\xf0\x3d\x88\xbc\x0d\x76\x3c\xa2\xf2\x1b\xd7\x45\x2a\xca\x8d\x65\x5b\xc5\xc3\x1f\x2a\x54\x10\x24\x1c\x11\xaa\x16\xf3\x02\xb2\x5d\x58\xa6\x81\xf8\xb3\x56\x59\x73\xb7\x16\x47\x9d\xc6\x92\x6f\xe6\xb9\xee\x96\x28\x1c\x30\x4c\xae\x88\x8a\xcf\x7e\x8d\x92\x45\x3b\xf6\xa5\xe4\x19\x5e\x6e\x8a\x96\xa3\x6b\x36\xb8\x3f\x7e\xf8\x27\x76\x06\xb7\x0f\xfb\x00\xe7\x22\x80\xb6\xa0\xb4\x42\x33\xb9\xd9\x8a\xdc\x68\xc5\x3b\xb5\x3a\xef\xff\x60\xe6\xa4\x37\x66\x9f\xc6\xba\x6c\x6a\x8b\x8d\xe8\x49\x4b\x69\x71\xa7\x38\xbb\x2f\x17\x22\x57\x02\xf5\x48\xe1\x7b\xcc\x7d\x6f\x50\x73\x35\x2f\x8b\xf5\x0f\xf3\x24\x93\x83\x45\xd0\x20\x63\xf4\xcc\xfe\xec\x1c\x7f\xd5\xd7\x81\x4a\xf9\x95\xa6\x2b\x86\x9f\x31\xfc\x6c\xca\xde\xf0\xe4\x5e\xa8\x94\x6d\xb3\x72\x25\x89\x20\x06\xcd\x7d\x59\x7d\xd8\x57\x3b\x86\xb6\x05\x96\x6f\xaf\xa1\x99\xda\xf0\x7b\x24\x26\x27\x23\xd2\xbe\x1c\xba\xe8\x05\xbd\xab\x64\x2e\x9b\x6b\x77\xef\x6c\xf9\xfb\xb0\x59\x4c\x7d\xed\x99\x12\xf3\xe5\x1e\xd7\x9a\x50\x46\x15\x4f\xcd\x88\x8d\xeb\x57\x6b\x83\xc7\xcb\x71\xad\x78\x65\x5a\x6a\x0c\xee\x5e\x08\xe1\x01\xb9\x7e\xa9\x18\x07\x2a\xb0\x17\x86\x95\x5b\x67\x9f\x41\x6c\x29\x03\xa4\x0f\x4e\x81\xfd\x60\x2b\x93\x7b\xc4\x96\x42\xf6\x04\xf3\xdd\x6b\x08\x18\x32\x11\x40\x8e\x6d\x47\xc3\x12\x89\x70\x8e\xc3\xad\x34\xb8\xf9\xf7\xac\xd3\x81\x99\x21\xc5\x5a\xa8\xf9\x01\x14\xf1\xc3\x27\xad\x92\x05\x42\x66\xb0\x8f\xd1\xf9\x21\x2c\x95\x24\x51\xc0\xf0\xc6\xf6\xfc\xc7\x72\x59\x33\xa3\xa5\x61\x86\x17\xd2\xd8\xb3\xac\x75\xc4\x03\xfd\xd0\x31\xa3\xce\xc7\x71\x1e\xb5\xf0\x1d\xd5\xc6\xc2\x67\x9a\x4d\xd9\x3b\x88\x6c\x44\x2f\x03\xed\xd9\x83\xba\x0e\xac\x62\x2d\x3a\x69\x74\x9f\x02\xa2\xe9\x7a\x10\x7d\xbf\x37\x60\xe5\xb3\x0a\xa7\xec\x2c\x44\x94\x91\x3f\x09\x63\xc5\x7b\x7a\x24\x32\x23\x0e\x59\x7c\x83\x82\x2f\x80\xba\x82\x05\xc4\xc0\x92\x32\xf6\xef\x41\x15\xc4\x37\xf3\x11\x12\xf7\xf9\xbd\x50\x7d\x1e\xf6\xe1\x2d\xc4\x10\x48\xaf\x4b\xc0\xc7\x56\x34\x86\x57\x0e\x69\xe0\xf0\x6d\x17\x28\xab\xe4\xf2\xd4\x0e\xb9\x7d\x86\x24\xf7\x94\x2e\x88\x11\x36\x22\xbd\x7a\x5c\x6b\x13\xef\x33\x37\x7f\xf8\x92\xcd\x4b\xaf\xfc\x00\xe9\x96\x7e\x80\x11\x67\xa9\x74\xcc\x89\x05\xad\xf6\x9b\x14\xdd\x3a\x7e\xbe\x99\x3b\x42\x61\x18\x00\x99\xe0\x8a\x6a\xee\xe6\x3f\xff\xc1\x7c\x84\x1d\xfb\x14\xec\x2b\xed\x52\xdb\xc7\x67\x3e\x1d\x18\xf3\xf5\x98\xde\xa0\xd3\xcd\x53\xcf\x17\xb4\xd5\x29\x0b\xcb\x6b\xbc\x28\xf7\xb7\xef\x56\x4d\xcc\x7b\x50\xdf\xf6\xad\xec\x0f\x11\x30\x8c\x2d\x4a\x99\xa5\x48\x9f\x17\x19\x84\xda\x59\x1c\xc0\x69\x0f\xd7\xbf\x34\xfe\x3e\x69\x5f\x63\x9f\x74\x7a\xcc\xc2\x1a\x4f\x91\xda\x5c\xd7\x03\xf2\x46\x4c\x0c\xde\xd9\xec\x1f\x89\xad\xee\x46\xfc\xa7\x73\x53\x15\x71\xeb\x69\x30\x40\xbc\x16\xe5\xf2\x06\x14\xa3\xba\x58\x88\x22\x31\x15\x97\x56\x6c\xe7\xd9\x56\xe3\x93\xdc\xba\x26\x85\x10\x43\xe1\xfa\xe7\xec\x4f\x37\x1f\xaf\x4e\x36\x3c\x37\x6b\x0e\x2c\x0f\xae\xac\x89\x13\xe1\xc4\xe7\xb1\x43\x32\x48\x35\x53\x27\x6c\xa5\x27\x88\x9b\x79\xcd\xd6\x45\xb1\x35\xaf\x4f\x4f\x57\xb2\x58\x97\x8b\x69\xa2\x37\xa7\x61\x68\x4e\xf9\x56\x9e\x2e\x32\xbd\x38\xcd\x05\x64\x4e\x9c\xbc\x9a\xfe\xf0\x0a\x66\xe6\xf4\xe1\xd5\x29\xa0\x25\xa6\x2b\xfd\x0f\xef\x7f\xf8\xe7\xdf\xff\x93\x2d\x78\xbb\x2b\xd6\x5a\xbd\x26\x50\x4e\x6f\xd9\x27\x68\x95\x9f\xe2\x4f\x6a\xb5\xfc\xf3\xf4\xfb\xb8\x19\xf4\xd5\x8d\x4e\x45\x66\x4e\x1f\x5e\xcd\xdd\xc4\x4c\xb7\xbb\xdf\x72\x0d\xbe\x59\xae\xc1\xbd\x2c\x7e\xcb\x35\xf8\xa6\xb9\x06\xc3\x2d\x1c\x7f\xc6\x00\x79\x73\x38\x1f\xed\xdf\xfd\x19\xe9\x5c\xef\xfb\xce\xa1\x96\xcb\x21\xce\x04\x3b\xe2\x8a\xb8\x17\xa3\x9e\xd8\xb5\xee\xfa\xa7\x43\x87\x8b\x6d\xac\x80\x4a\xa7\x31\x3f\x8a\xf8\x02\x90\x7d\x32\x01\x72\x7e\x74\x09\x6e\xb9\x6c\xcb\x20\x20\x04\xeb\x31\xe3\xf7\x9c\x32\x13\x4f\xad\x2f\x41\xdd\x3d\x50\x5b\x22\xc3\x5f\x3b\xbc\xad\x7e\x74\x9a\x12\x4f\xa1\xc4\x30\x50\x9b\xdb\x13\xcc\xe3\xe2\x81\xb6\xb8\x76\x75\x34\x63\xcd\xcd\x61\xc0\xed\x33\xa4\x71\xf5\x71\x3a\x44\xbd\x4a\xe3\x2a\x74\x17\x87\x63\xc6\xb1\xf7\x90\x23\xe0\xdb\x96\xf9\x56\x1b\x61\xa6\xec\x5d\x4d\xbd\x36\x80\xd1\xaf\xdf\x9d\xb3\x57\x7f\xf8\xe7\xdf\xcf\xd4\x77\x2d\xf7\x36\x9c\xf7\x3a\x5f\x11\x36\x1e\x6e\xeb\x0d\x37\x85\xc8\x4f\xf3\x65\x72\x8a\xa7\xdc\xa9\xfd\xfd\x09\x55\x7a\xa2\x97\x27\x9e\x66\xfe\x84\x18\xb7\xa7\x9b\x74\x1c\x69\x4c\x65\xe9\xe1\x5d\x43\x17\x8d\x81\x4b\x09\xe9\xe5\xf4\xd2\x0b\x8a\x60\xee\x22\x6a\x0f\xe9\x65\xcb\x7f\xbc\xc9\xf4\xc2\xbc\xf4\xa4\x96\xdc\xb8\x3a\x02\xcb\x5c\xf7\xd6\x7c\x1a\xc5\x09\xb7\x44\x9e\xd3\x51\xe1\xce\x92\xf8\x39\x32\x66\xe0\xdb\x37\x5b\xb8\xee\x91\x63\x87\xe7\xba\x54\x8e\xb1\x5f\x2b\xa1\x97\x00\xdd\x00\x4b\xd8\x21\xcf\xc0\x57\x0b\x78\x26\xcf\xa7\x93\x8b\x2d\x5e\x30\x10\x55\xe8\x1e\xee\x23\x55\x2b\xf6\x8d\xf3\x73\xa8\x56\x1c\x3b\xee\x74\xa0\x7c\xa3\x01\x3f\x16\x1e\x8e\x5b\x69\x0c\xaa\xc2\x7e\x7f\x6f\x04\xd5\x9f\x03\x41\x51\x2e\x10\xc4\x6f\x79\x0e\x46\x9a\x38\x29\xf4\x09\x10\x91\x01\xbd\x15\xea\xc8\x74\xc1\x2a\x20\xf2\x3c\xe6\x9a\xb4\xdf\x1f\xd0\x4e\x34\xcc\x7f\x89\x1a\x4a\x36\x89\x41\x5a\x66\x82\xd9\x4a\xa5\x44\x4e\x31\xb5\xbd\x37\xea\xc8\xb8\x74\x3c\x95\xfd\x28\xdb\xf0\x12\x8d\x35\x3e\x7c\x8e\x15\x8f\x0e\x81\x29\x03\xeb\x73\xad\x37\xda\x9a\x33\xba\x34\xd1\x87\xf8\x7a\x81\x4b\xb8\xd3\xf6\xda\xf0\x2d\x12\x8f\x7e\xbb\xde\xd8\xad\x65\x3f\x42\xa7\x5e\xfc\xa5\x51\xb2\x49\x8b\xaa\x50\xcc\x9e\xf6\x7b\x85\x8f\xfe\x75\x03\xa8\x07\xd4\x1e\x05\xf9\x6f\xe2\xed\x97\xff\x69\xdf\x35\x76\x49\xf9\x97\x82\xbf\xb9\x11\xa4\x83\xfc\xba\x31\x24\xcd\x59\xf3\x9d\x0c\x18\xe5\x66\xe4\x1c\xf8\xc4\x91\x21\x13\xc0\x15\xa6\x52\xb8\x1c\x8a\x93\xd6\x24\x8a\xae\x7d\xe9\xc4\xb6\xd3\xb9\xe3\x80\x1e\xd7\xd4\x1b\x5f\x00\xd1\x3d\x37\xdb\x1d\x28\xf4\x20\xe3\x06\xc7\x18\x0f\x04\x67\x5b\x74\x01\x37\xc7\x6f\x46\x10\xcd\x1a\x33\x76\x50\x09\x2e\xce\xc6\x08\x46\x7b\xa1\x6b\x00\xc7\xb9\xd8\xfa\x3c\x56\x6d\x98\x5d\x64\x1d\x0d\x19\x99\xb6\x95\x8d\xc7\xa3\xff\xe1\x83\xdf\x5f\x08\x69\x5c\x94\xf0\xf9\xd5\xc7\xdb\x18\xad\x21\xb1\xb7\x27\xc9\x5a\x24\xf7\xe0\x30\xc1\x2b\xcf\x0b\xf1\x12\xc3\xe9\x4c\x05\x39\xc7\x42\x3b\xe8\xc1\xce\x2b\x5c\x78\x95\x17\x9d\xb3\x54\x9a\x6d\xc6\x77\x10\xe4\x55\x98\x7b\x15\x02\xc4\x3e\x69\xd1\x1e\x05\xfb\xfc\xc5\xc3\x67\xda\xce\xca\x59\xf8\xdd\xd8\xb1\x0c\x60\xda\x30\x98\xcd\xf3\x80\x19\xb1\xe1\xaa\x90\xc9\x4c\x6d\x04\x57\x31\x2a\x8f\x82\xdc\x76\x90\x53\x2d\x88\x03\x7e\xb9\x14\x49\x11\x48\x64\xc1\x78\xf7\x23\xb5\x6f\x0f\x8e\xeb\xbb\xdf\x79\xbd\x5d\xff\x11\x70\xbf\x18\xa3\xcf\xf5\x03\x1d\xc3\xee\x6a\x3c\x30\x78\x03\xf2\x9f\x74\xe5\xba\xc7\x20\xfc\xcb\xad\x29\xb6\x10\xc5\xa3\x00\x8e\x14\x4a\xea\x6e\xb3\xf1\x8f\x96\x80\x39\x4e\xd1\xbd\x5d\x0b\x3f\x42\x82\xe1\x06\x8b\xc1\x64\x9e\xcc\x4d\xd5\x58\xd9\x5e\x50\x9a\x39\x78\x7b\x5e\x90\xdf\xea\x05\x5c\xd3\xf6\xf5\x98\x3f\x88\x74\xa6\xaa\x54\x79\x64\x33\x86\x0d\xc7\x82\xb8\xe1\xd3\x9c\x36\x6e\x8c\x07\xf9\xf2\x2f\x80\x1e\x28\x10\x03\xfb\x44\xea\x1e\xb1\x45\xec\xf4\x73\xbe\xaa\x9c\xce\x6b\x6c\xdd\x0f\x80\x64\x09\xe3\xc4\xcb\x48\xeb\xb4\x82\xa7\xf0\x8b\xd2\x13\x81\x21\x4b\xa8\x07\xc0\x92\x5f\xb2\xe1\xe9\x6c\x2b\x63\xa6\x1c\x43\xc6\xb2\xcc\x90\xf9\xb9\x2b\x0f\x81\x78\x01\x5d\x36\xdf\xb7\xcb\xea\xf4\x7e\x35\x16\xe9\x45\x7a\xd8\x43\x04\x46\xc6\xb3\xce\xad\x7a\xa1\x4c\x09\x26\x85\x93\x8a\x03\xc7\xf3\x4a\x14\x70\x9b\xa7\x65\x86\x84\x0f\xe0\x31\x07\x8e\x41\x9e\x65\x4c\x16\x66\xa6\x3c\x25\x22\x26\x1b\xc0\x09\xeb\x5c\xea\x4e\x65\x5c\x79\xad\x72\xf8\x98\x2b\xb0\xc3\x64\x22\x8b\x06\x84\x7b\x17\xcb\x2b\x6d\xb7\x82\x63\x7e\x32\x4e\xdb\x4c\xc5\x6f\xae\xfa\x24\x50\x32\x2f\xcf\x24\xef\x51\x81\x7f\x8a\xa5\x7b\x66\xab\x38\x08\xb7\x80\xbd\xb3\x0f\x2e\xa7\x9c\x8c\xad\x25\x4e\x14\x42\x5a\xda\x57\x4d\x61\x9c\x8f\x3c\xbc\x5b\x21\x4f\x21\x29\x33\x9e\x63\x82\xc6\xb2\xcc\x98\x5c\x46\x22\xd0\x30\x07\x48\x88\x67\xa7\x2b\xd1\x70\x57\x3b\x2f\xb9\xe1\x1b\x11\x71\x71\x90\x7b\x27\x8b\x30\x14\xc8\xf2\x8f\xc1\x79\x5b\xd6\xcb\x29\x7b\x1b\x28\x3f\x71\x86\x61\x4f\x44\x44\xba\xd2\xe0\xf1\xe7\xdb\x1b\xa5\x91\x43\xef\x6c\x13\xb5\xb2\x3b\xd2\xef\xba\x8e\x19\x04\x41\x8e\x71\x00\x0d\x27\xc7\xd2\x8f\x1a\x6e\xa5\x91\xb0\x3f\xad\xc1\x36\xfc\x86\xe8\x68\xa0\xbb\x15\x46\x36\x32\x26\x21\x3e\xa0\xa1\x9e\xe4\xb9\xa5\xb1\x9b\x1e\xcd\x69\x98\xc7\x91\x4d\x8d\x14\xdc\xc6\x37\x34\x5a\x39\x31\x1c\x67\xc8\xc8\xae\x78\x31\x16\x9b\xe3\x93\x71\xc6\x37\xb4\x15\x07\x35\xa4\x99\x70\x7a\x8c\x6c\xa7\x17\xda\x3f\xa0\xa1\x5e\xce\x3f\x68\xbc\xc0\x51\x21\x78\xb2\xae\xe6\xc5\x3b\xf6\x5a\xdf\x03\xc8\x8b\x82\xfd\x38\x3e\xa5\xff\x2c\xac\x39\x10\xb1\x63\xb6\xf9\x53\xf6\x51\x09\x44\xce\xe9\x65\x74\xa9\x50\x03\x48\xed\x0e\x04\x44\xfc\x29\xb7\xb0\x0d\x53\xf7\x8e\x2e\xc8\x6e\xb9\x09\xe3\xa1\x74\x38\xf5\x70\xd9\xe0\x29\xd2\x61\x4b\xb6\xc9\xed\x1c\x61\x5e\x0e\x4b\xba\x6f\x7f\xf3\x47\x00\xd4\xf1\x27\x40\x5b\x3f\x86\x4f\x4b\x2f\x92\xdc\xbf\xe2\x1c\x7c\xbc\xba\x6e\x18\xc2\x49\xf7\x8d\xef\xa7\x75\x15\x85\x38\x42\x9c\xee\xee\xea\xed\xc5\xbb\xcb\xab\xaa\xa2\xdc\x5f\xee\x2e\xee\xaa\x7f\xb9\xbe\xbb\xba\xba\xbc\xfa\x63\xfc\xa7\x9b\xbb\xf3\xf3\x8b\x8b\xb7\xd5\xef\xbd\x3b\xbb\x7c\x5f\xfb\x9e\xfd\x53\xf5\x4b\x67\x6f\x3e\x5e\xd7\x34\xec\x9c\x00\x5d\xf4\xa7\xdb\xcb\x0f\x17\x6f\xe7\x1f\xef\x2a\x32\x78\x6f\xff\xf5\xea\xec\xc3\xe5\xf9\xbc\xa5\x3d\xd7\x17\xe7\x1f\x7f\xba\xb8\xde\xa3\x62\x17\xfa\xdb\x3a\xa4\x4f\x01\x1f\x3b\x58\xd3\xf0\x8c\x2d\x73\x29\x54\x9a\xed\x10\x7b\xef\x5e\xb6\x35\x30\x6d\x7c\xf7\xca\x8d\xd0\xe5\x31\x10\xfa\xdb\xb5\x60\xfa\x41\xe4\xc0\x6c\x84\xa5\x11\x0d\x42\xc8\xa2\xae\xd7\x9a\x8b\x22\x6f\x46\x05\x7a\x33\x85\x8a\x7c\xe7\x73\xd1\xfa\x9a\x13\x58\xf1\xa8\x12\xb6\x15\x79\x5f\x5b\xc0\x32\xca\xcb\x6d\x21\x17\xdd\x49\x11\xa3\x93\x89\x87\xbe\xbd\x91\xc3\xb5\x9d\xf0\xea\xaa\xfd\x60\xac\xe4\x06\x1c\x03\x3c\x86\x12\x0e\x95\xea\xf4\xbf\x76\x60\xcd\x6d\xb9\xc8\x64\xc2\x64\x5a\xf7\xa7\x50\x8e\x3f\xb8\x8c\xeb\x54\xcf\x5b\x91\x83\xa9\x6a\x5f\x00\xdb\x5c\x9c\xf0\xb2\x58\x23\x2d\x21\xa5\x22\x90\x30\xc7\x4c\x19\x91\xe4\x02\x63\x01\xc2\x80\x93\x16\x35\x1a\xa3\x9a\xa0\x31\xc4\xca\x91\x02\x01\xd8\x34\x92\xdd\xe8\x88\x11\xe0\x2f\xb1\xf4\x11\x4e\x52\xfc\x7e\xef\xd0\x50\x8b\xa5\xa9\x0b\xf4\xc3\x0d\x8f\x1f\x3a\xa5\x47\xdb\x6f\x7b\x52\x7b\xa5\x43\x9c\x64\x97\xbb\xd1\xde\x8d\x7d\x6b\x2c\x5e\x28\xd5\x64\x06\x2a\x9d\x3e\x3a\xcf\x05\x5c\x22\x04\x05\x70\xfe\x0b\x80\xae\x50\xae\x07\xa4\x78\xd8\xa7\xda\x42\xac\x79\xb6\x44\x8b\xc3\x4e\x4d\x3b\x53\x02\x96\x7f\xab\xef\x85\xba\xc6\x09\xfb\x26\xc7\xa1\xc2\x97\x4f\xe0\x69\xf1\x1e\xa1\xe0\xc2\xb4\x6d\x74\xab\xca\xe5\xba\x81\x31\x55\xe0\x3b\x21\xfa\x18\x53\x3a\x02\x0b\xbb\x4b\x93\x5b\x2e\xe5\x2f\xb6\xc0\x99\x12\xad\x3c\xd4\x80\x17\x72\x8c\x79\xfe\x5c\x06\x6c\x14\xd2\x8e\xdd\x0b\x05\x1a\x91\x28\x21\xbf\x77\xcd\x8e\xf3\x9f\x37\xe7\xa2\xc7\xa1\x0f\x3e\x3f\x59\x91\xce\x8c\xa3\x3c\x6e\x9c\x0a\xcc\xb1\xf1\xbc\x02\xb0\x6e\xce\xdf\x5f\x5e\x5c\xdd\xce\xcf\xaf\x2f\xde\x5e\x5c\xdd\x5e\x9e\xbd\xbf\x19\xba\xfd\x9e\x22\x2f\xaa\xb6\xfb\xea\xe9\x41\xfe\x84\x38\xa5\x9d\x17\xd2\x73\x7d\xa7\xc2\xb6\x83\x29\xd9\xdf\x7a\x99\x6e\xe7\xa9\x34\x89\xbd\xfe\x76\x73\xa1\x52\x20\xf0\x3f\x68\xa9\xb6\x17\x55\xef\x85\xff\x06\xf3\xdf\x70\x27\x08\xde\x76\x0f\x6e\x45\xfb\xcf\x01\x75\x07\x6e\xc8\x5c\xd8\xcd\x9f\x56\x78\x13\xa6\xfb\x55\x9b\x6c\x71\xc7\xf5\xad\x5a\x44\xbd\x4f\xd8\x5e\x69\x4c\x09\xf4\x0c\xee\x6b\x00\x39\xec\x18\x15\x62\x55\x8d\x55\x04\x64\xa4\x80\xcd\xa4\x99\xa9\x0d\x57\x29\x2f\x74\xbe\xeb\xe8\xe2\xb0\xc3\x33\xde\x36\xd5\x23\x34\xbe\xb2\x95\x10\xa9\x9b\x05\xfc\x2a\x57\xf5\xa5\x84\x5a\x03\xb7\x1f\xff\x7c\x71\x75\x33\xbf\xb8\xfa\x69\xfe\xe9\xfa\xe2\xdd\xe5\x5f\x3d\x12\x72\xcb\x4d\x9b\xe2\xed\x36\x17\xf6\x74\x71\xd4\x4d\xad\xe7\x0b\xca\xd0\xba\x72\x48\x7a\x50\x2e\x67\xca\x9d\x2c\x79\x28\x7e\x9d\xeb\x72\xb5\x6e\x2f\xa8\xde\xca\x4f\x67\xb7\x3f\x1e\xd4\x4c\x20\xd6\x43\xad\x4a\xdc\x6d\x4d\x44\xa8\x5c\xd2\xb9\x87\x30\xd2\x5a\xf3\x80\x1e\x12\xbe\xda\x16\x65\xe8\x38\xd1\x0e\x7a\xbd\x34\x0f\xad\x5e\xe3\xbf\xe5\xeb\x5d\x0b\xe8\x36\x3a\x37\x2b\xd7\x08\x20\x94\x51\xf2\xb8\x51\xda\xeb\x96\xbf\x55\x6e\xb0\x1f\x4e\x32\xb1\x5a\x89\x14\x97\x57\xbd\x60\xf2\xc1\xd1\x11\x98\x84\x7b\xbd\x6d\x14\x49\x94\xf4\x88\x8b\xd9\xe3\xbd\x86\x1f\xe0\x9f\xfc\x4f\xda\xcf\x8a\x73\x22\xc7\x81\xf8\x66\xc1\x55\x47\x20\xf9\xa1\x89\xd0\x1c\x74\x14\x7d\xcc\x99\x4f\x7e\x22\x87\x89\x0b\x19\x84\x7d\xd0\x05\x78\x39\x1e\x17\xea\xdb\x71\x2d\xb6\x19\x4f\x84\xcf\x61\x40\x56\x53\x78\xd7\x1f\x12\xc0\x23\xe9\x57\x45\xfe\x96\x48\x12\x36\xa8\x5d\xb5\x2d\x01\xf0\xdc\x5e\xbb\xf3\xf8\xf9\x5d\x2b\xbd\x0f\x37\xe2\x32\x04\x47\x33\x6a\xef\x11\xf4\x1d\x7d\x51\x20\x68\xd9\x09\x4b\x1e\xb5\x1c\x6a\x35\xff\x44\x13\x8f\x6f\xe6\xaa\xa3\x9b\x3b\xb6\x50\xbf\x3c\xbc\xe9\xd8\xe7\x2f\x2c\x8a\xbc\x97\x60\xf8\x29\xc2\x11\x9f\x72\xbd\x91\x46\x9c\x15\x45\x2e\x17\x65\xac\xb0\x3a\x12\x30\x57\x79\x9c\x84\x0e\x6f\x73\x9d\x96\x89\xa3\x04\x82\xde\x06\xd8\x0f\x79\xf9\x9c\xd5\x91\xb2\x13\xbb\xfa\xe8\xe5\x26\xd2\x13\x00\xf4\x23\x67\x55\x5b\x8c\xcd\x1d\x8c\x1d\xbe\xbf\x4f\xee\x2a\x3f\x66\x49\xb6\x2c\x8a\xee\xc1\x74\x6b\x60\x58\x62\x2d\x73\x5f\x07\x0b\xb8\x03\x35\x45\xcb\x65\xc1\x31\x80\x5e\xb5\x51\xba\x18\x40\xfc\x55\x33\x0e\xdc\x35\x0c\x1b\x53\xcd\x98\x41\xbb\x61\xcd\x0d\x9a\xf3\x45\xb2\xae\x36\x1c\x7a\x53\x65\x42\xad\x37\xd7\x9b\xc7\xc7\xb9\x4d\x06\x85\xd1\x26\xe8\x68\x90\xe4\xd8\xae\xa8\x5a\x7a\x89\xde\x71\xde\xee\xd8\x62\xf4\x2f\x3a\xbc\x0c\xe0\x1c\xcd\x78\xa9\x92\x35\xdb\x66\x1c\x93\xc9\xd7\xdc\xe0\x92\x76\x58\x12\xbe\x90\x99\x2c\x80\xa5\x07\x43\x9c\xb5\x11\xb6\xcf\x3c\x9e\xdf\x3b\xb2\x73\x1e\x28\x99\xfa\x16\xfd\x91\x98\x5d\xdf\xab\xaf\x8a\xda\x0d\x5b\x36\x3e\x86\x86\x2d\x4b\x42\xec\x86\xe9\xb0\x07\x31\x2c\xcb\xd0\x97\x71\x33\x4b\x25\x7e\xaa\xff\xbc\x32\xde\x2d\xd6\xcb\x78\xc4\x0a\xa9\x78\x8c\xb8\x7d\xea\x1a\x1f\xad\x3b\x6b\x99\x69\xde\xa1\x33\xef\xca\x46\xc9\x8e\xae\xb2\x53\x5d\x2e\xba\x48\xe2\xb1\x55\xfd\xa5\xf7\x05\x43\xdc\xbe\x7d\x2a\x67\x69\x7c\x00\xf2\x42\x14\x72\x9c\xbf\x27\xea\x34\x2f\xc4\x09\xfc\xbc\xbd\x70\xca\x30\x1c\xdc\xe7\xc6\x42\x0b\xc2\x51\xde\x68\x03\x2c\x61\xdb\xea\xaa\xdd\xce\xc7\x60\xc2\x8f\x9c\x2f\xa9\xf6\x2c\xa5\xfd\x5a\x34\xbf\xff\xa1\x65\x58\x1a\x9d\xfe\x4b\xc9\xed\x79\xf8\x71\x79\x83\x5c\x39\xc7\x74\xba\x90\xcd\x6d\xd5\x7e\xfc\xd4\x6b\xbd\xad\x86\xd7\xe2\x85\x3f\x38\x13\xb9\xad\x37\x37\xf6\xd7\xc3\x4f\xa1\xcb\x8a\x1b\x6d\x9b\x4b\x0d\x9c\x31\x7a\x89\x0c\x8c\xdd\x14\xc2\xad\xf5\x1e\x31\x92\x5f\x4a\x51\x0a\xbb\x80\x16\x65\xba\x6a\x7a\xb9\x47\x58\xca\xa1\x4b\x6b\xfd\xc8\x36\x65\xb2\x66\xae\x70\x96\x8a\x8c\xef\x2a\x5d\x03\x23\xb1\xd0\xc0\xe7\x39\x8a\x3a\x2b\x62\x61\x4e\x4a\x53\xe8\x0d\x00\x8c\x43\xb9\x79\xa9\x60\x97\x33\xee\x76\x57\xdb\xf9\x5e\x61\x97\x3b\x30\xb4\x79\xf3\xe9\xe2\xfc\xf2\xdd\x65\x2d\xae\x78\x76\xf3\xe7\xf8\xdf\x3f\x7f\xbc\xfe\xf3\xbb\xf7\x1f\x7f\x8e\xff\xf6\xfe\xec\xee\xea\xfc\xc7\xf9\xa7\xf7\x67\x57\x95\xe8\xe3\xd9\xed\xd9\xcd\xc5\xed\x9e\x00\x63\xb3\xd6\xee\x89\xe0\x11\xf9\x9d\x83\x3c\x3b\x65\x07\xe7\x67\xa0\x5a\x5f\xb3\x33\x47\x05\x58\x21\xab\x74\x41\x62\x40\x95\x64\x08\x8e\xc3\x58\xf2\x5b\x5e\xf0\x73\x5e\xf0\x4c\xaf\xa6\xec\x8c\x11\x20\x1c\x81\xfe\xc6\x5a\x48\xc4\x93\x66\x67\x07\x8b\xb0\x66\x52\x12\xde\xf0\x41\xba\x56\x2f\x89\xa1\x30\x13\xb1\xc8\x89\xcb\x6a\x9b\xa9\x8b\x07\xa1\x8a\x12\x48\x68\x79\x96\x31\xaa\xd6\x7d\x21\xca\xd8\x77\xad\x34\x72\x23\x33\x9e\x07\x95\xd1\x8f\x54\x16\xbc\x52\x5c\x5b\x3d\x41\x53\x33\x1d\xdc\x3d\xe4\xee\x2e\x19\xb4\xfb\xfc\xfd\x25\xd8\x7d\x49\xe1\x24\xb4\x5c\xe5\x33\x85\x0c\x78\x54\xe3\x86\x43\xf2\x49\xa1\xc9\xb3\x8a\xd5\xd3\x97\xbb\x17\xe2\x51\x54\xe0\x2e\x06\xf1\x5c\x2f\x4a\xdf\x48\xf7\x1f\x17\xaa\xc8\x77\x83\x8d\xb9\x5b\xc8\xb6\x36\x60\x90\x13\x96\xad\xaa\x3c\x8a\x8e\x2f\xe6\x4a\xbf\x02\x0b\xcf\x01\x2d\x29\x2e\xe3\xc3\x2f\x88\x6b\xe9\x78\x74\x64\xf6\xe6\xfd\xb5\x8e\x43\x4c\x88\x03\xa3\xb0\xd0\xa5\x4a\x0d\xa1\xee\x36\x52\x9d\x6e\xf8\x2f\x2f\x5d\x4f\x91\x60\xc2\xeb\xff\x00\x79\x98\xc8\xec\xf3\x6b\x67\x0f\xb9\xfe\xe1\x9a\xa9\x9e\xf1\xda\x6f\x22\xbb\x93\x15\xde\x7a\xe1\x61\x8e\xf8\xc1\x07\xb1\x6b\x9b\xbf\x86\x86\x1b\x8b\x89\xc8\xa1\x90\x6d\x2e\xec\x17\x3d\x38\x31\x43\xcc\xa9\xff\x37\x24\x21\x54\x74\x66\xdb\xcf\xee\x38\xde\x7f\xd4\xb6\x69\x45\x1a\x0c\x37\x7c\x06\x8b\xf0\x51\x4d\x76\xce\x10\x77\xe0\x5c\xde\x94\x74\x41\x01\x55\x3b\x59\xff\xa1\x17\x6c\x09\x19\x48\x98\x68\xc7\x72\x01\x21\x0e\x98\x0a\xa7\x1a\x01\x14\x53\x0d\x30\x83\x5b\x02\x99\x30\xe0\xf8\x57\xf6\x8d\x29\xbe\x94\x14\xbb\x7d\xf5\xfd\xb8\x7b\xb6\x40\xea\x71\xe4\x9a\xad\x93\x72\xfb\xbb\x1c\xda\x55\x2a\xd9\xc6\x3b\x77\x5d\x2a\x7b\x15\x3f\x05\xec\x65\x78\x5c\xb3\x56\x29\xfd\x73\x6f\x92\x90\x73\xc9\xe7\xf8\xfd\x67\xa3\x11\xfd\xa9\xc6\x1e\x4a\xd5\x01\x24\x9d\x4a\x8f\x2f\xb4\x05\x4f\xee\x1f\x79\x9e\xa2\xdf\x16\x70\x28\x53\xf6\xa3\x7e\x14\x0f\x22\x9f\xb0\x44\xe4\x05\x27\xea\x2e\x03\x81\x78\xd8\x50\x54\xce\x4c\x41\x86\x06\xf2\xa0\x29\x53\xe6\x82\x15\x72\xb5\xb6\x8f\xe8\x08\x46\xa1\x73\x7b\x1c\x15\xc8\xda\xb8\x15\x09\x91\x25\x75\x0c\xc0\x32\xe3\x0f\x4d\x2e\xb2\x43\x58\x1e\xd8\xa5\x4f\x33\x75\x71\x4a\xa7\xc4\xd3\x07\x7c\x71\xf4\x88\x76\xba\x08\xae\x6c\x76\x2a\xa1\xbf\x4f\x58\xf4\x8f\xe9\x74\x0a\x24\xf4\x2f\x47\xad\x7b\x9c\x90\xb8\xf6\x80\xb6\xce\xb4\x36\x22\xdb\x79\xbe\x1f\x9f\x0f\x03\x00\xcc\x5f\x0a\xa1\x8c\x44\xb7\x4f\xcb\x6e\xb8\xa9\x07\x09\xbe\x6e\x4c\xa5\xfd\xb5\x3e\x3a\xdb\xb2\xa3\x1c\xd0\xf9\x1b\x51\x12\x7e\xbf\xfd\x21\x76\x50\xf6\x70\x7b\x59\x4a\xab\xb1\x29\xb1\x3f\x69\xd9\x11\xd2\x3f\x88\x86\xaf\xb5\x24\xe2\x2c\x39\x28\x8d\xb0\x7d\xcc\x1a\x99\x9d\x47\x24\x75\xf6\xe4\x67\x8e\x4c\xcd\x1c\xe2\x17\xb8\xa9\x4f\xf7\xe8\x6d\xb1\x5f\x7a\xa8\xb5\x43\x23\x53\x5f\x43\x8e\xfa\x18\x4b\x0a\xb3\xe7\xb2\x1d\x1c\x58\x3e\x11\x16\xbc\xeb\x69\x14\x1d\xa8\x04\x3f\x20\x25\x2b\x44\x4f\x3c\x97\x54\x14\x2c\x31\x85\xce\xf9\x4a\xb0\x8d\x48\x65\xb9\x69\x3d\x6c\x7c\x73\x8f\x81\x01\xea\xac\xdc\x74\xb3\xfa\x1d\x6b\x4f\x87\x46\xe2\x7f\x9d\x43\x75\x83\xed\xe9\x33\x8f\x70\x77\x0a\x70\xd4\x5e\x0c\x05\xd0\x58\xdb\x8b\x33\x97\x06\xf8\x27\x0f\xc9\x80\xf4\xc5\x60\xd1\x10\x48\xdd\x6d\xd1\x05\x5d\x99\xdd\x13\x17\xe1\xa2\x9f\x18\x9c\x55\x88\xbe\x76\x5f\x0a\x75\x70\xe1\x78\x1d\xa8\x5c\x97\x0d\xee\x9d\x41\x01\x6f\xb0\x22\x23\x56\x78\x42\x3f\x41\x81\x04\xd1\x28\x34\x5b\xba\x9c\xba\x7b\x11\xb1\x94\xa5\xc0\x17\xff\x88\x94\x37\x7f\xfe\x83\x71\x60\x0e\xc2\xdb\x04\x03\xa6\x08\x95\x60\x7c\xe4\xe1\x95\x83\x59\x61\x0f\xb1\x08\xe0\x12\x4b\xb9\x2a\x5a\x0b\x08\x28\x44\x28\x0b\x7f\xf2\x13\x2f\xb3\xf6\xaf\x53\xf9\xf0\x55\xd4\x13\x3c\xfb\xf9\x86\xe1\x50\x13\xb3\x78\xde\xd7\xd0\xa8\x90\xfd\x40\x2f\x18\xae\xf9\x01\x86\x61\x65\x1e\x70\xd0\x1d\xb5\xbc\x1d\x76\x51\x24\xeb\x60\x79\x00\x97\x9a\xe7\x80\x23\xb1\x58\xea\xe7\x26\x70\xa5\x23\x86\x36\x06\x23\xca\x95\xd2\xb1\xcc\x87\x56\x02\x02\x55\xf6\x00\xd2\x71\xb1\x4c\x16\xfb\x11\x5f\x23\x09\xc4\xf6\x2d\xb5\x42\x23\x92\x87\xfa\x59\x89\x37\xc2\x0b\x43\x22\xed\x90\x83\xcb\xe2\x13\x89\xb4\x47\xeb\x1c\xda\x55\x22\x87\x99\xaa\x56\xd5\x18\x24\x07\xc9\x92\xb9\x40\xea\x5b\x63\xad\xb7\x42\x3e\xd8\x8d\xda\x5c\xd6\x7e\x81\xc2\x09\xd0\x5c\x7b\x33\x85\xcd\x8e\xf8\x73\xef\xc5\xce\xc4\x42\xa7\xb4\xa2\x58\xd7\x82\x94\xb6\x3f\x34\x5f\xfb\xa7\x02\x06\x6e\x9e\x07\xb9\xb2\x61\x77\x19\x56\xfa\xc1\xfe\xb8\x07\xeb\xd9\x28\xdc\xae\xc1\x90\xb4\x18\x5c\x8c\x74\x4c\x84\x71\xa6\x39\x0c\x70\x2e\x00\xeb\xc5\x70\xbc\x38\x03\x05\xde\xc1\xf6\xb9\x3b\x53\x44\xb1\x1d\x5d\x72\xf6\xc0\x69\x4e\x1b\x65\x52\x23\xb1\xef\xae\xc2\x02\x03\x2c\x88\x8e\x11\xb2\x5a\xa5\x8b\xbd\x3a\x9d\xec\x99\x82\xaa\x31\xd7\xd4\xb9\xf4\x5a\x2b\x3c\x10\x23\x48\x93\xdb\x89\x0b\x8c\x12\xba\xf0\x9b\x44\x04\x88\x8a\xb9\xf8\x18\x4a\x84\x1d\xbe\x33\xd5\x0a\xc9\x73\x80\xbc\x9b\x8b\xf3\xeb\x8b\xdb\xaf\x86\x1b\x74\xa0\xbd\xd1\xc0\x41\xd7\xce\xb7\x17\xef\xce\xee\xde\xdf\xce\xdf\x5e\x5e\x3f\x07\x72\x90\x3e\x3a\x00\x3a\x78\x43\xcc\xfd\xe7\x5a\x15\xe2\x97\xa3\xee\xe4\xbc\x54\x73\x3e\x22\x85\xc5\x6b\x77\xf4\x99\x3b\x58\x68\x53\x79\xc0\xcb\x02\x10\x0d\x25\xde\x68\x5e\x68\x60\x19\x7c\x88\x4b\x99\x65\x90\xd1\xeb\xbd\xed\x94\x2d\x66\x07\x15\xce\x1f\xc7\xbc\x49\x67\xea\x4c\x2d\x2a\xc2\x10\xe0\x01\x5c\xdb\x47\x30\xe6\xf2\x6e\xed\x00\xe4\x12\x32\x25\xfb\xc4\x09\x56\x52\x89\xd0\x0c\x54\xb7\x2f\x15\xeb\x64\x94\xa6\x49\x7c\x4e\x84\x14\x19\x5e\x43\x6d\x4d\xb7\xe2\x2a\xeb\xd3\x99\x9f\xee\x43\xdf\x43\xdc\xc4\x52\xa1\x61\x5a\xd9\xcd\x37\xed\x4b\xf7\x34\x6c\x01\x18\x77\x3b\x93\x1c\x42\x12\x20\x20\x1f\x26\x92\x26\x02\x45\x8b\x42\xac\xe2\x5e\x22\x92\x48\x2f\x6b\xe3\x6c\x8f\x42\x3b\xd6\x12\x02\x17\x9c\x48\x4a\x92\xac\x34\x85\xc8\xc9\x83\x72\xf6\xf3\xcd\x4c\xbd\xb1\xd7\xd7\x4b\xba\x85\x48\xd8\x06\xab\x40\x1c\x8b\xae\xd4\xef\x2c\x94\xf8\x04\xfb\x0e\x5d\xd6\x1b\xc1\x95\x61\xb0\x35\xb2\x4c\xe4\x61\x65\x60\x7b\x84\x48\x49\xe0\x15\x58\x59\xc3\xef\x5f\x32\x02\x29\xda\xa1\xb0\xed\xa5\x4f\x73\xb1\xd1\x45\x73\x3d\x75\x25\x8c\x03\x72\xf8\x39\x57\x4e\x4b\x02\xcb\xd0\x55\x44\xa0\xeb\xd6\x45\x54\x4d\x27\x19\xb4\x96\x6e\xb1\xb8\xdf\x96\xd2\x13\x2e\xa5\x01\xf7\x7a\x7c\x4b\xb0\xb5\xb6\x07\xa8\x57\x7d\x09\x51\x67\x4f\x58\x91\x01\x06\xcc\x0e\x63\xeb\xad\x53\x53\x3e\x3c\x06\x0a\x02\x45\x1d\x87\xb4\x3d\x6b\x61\xc6\x09\x12\x5b\x2e\xd4\xd3\x2b\xaa\xf8\x3c\x0c\x74\x67\x0e\x73\xa8\x74\xe1\xb8\x24\x3c\xcc\x8f\x30\x8b\xf6\x0b\x9e\xc4\xa4\xb7\x8d\x44\x0c\xe2\xac\x94\xf9\x91\xc2\x64\xb7\x31\x36\xb2\x92\x5d\x8b\xad\x88\xf3\xf2\x5d\x2e\xbe\xe7\xf2\x18\xb3\xf8\x0e\x97\xbe\xac\xae\x39\xcf\x0b\x79\x10\xf6\xe1\xea\xe3\xd5\x45\x8c\x5c\xb8\xbc\xba\xbd\xf8\xe3\xc5\x75\x25\x2f\xfb\xfd\xc7\xb3\x4a\x6e\xf5\xcd\xed\x75\x2d\xa5\xfa\xcd\xc7\x8f\xef\x2f\x1a\x10\x88\x8b\xdb\xcb\x0f\x95\xc2\xdf\xde\x5d\x9f\xdd\x5e\x7e\xac\x7c\xef\xcd\xe5\xd5\xd9\xf5\xbf\xc6\x7f\xb9\xb8\xbe\xfe\x78\x5d\xab\xef\xee\xbc\x1f\x4c\x51\xe9\x46\xbb\xfb\x27\xc4\x6a\x23\x8a\xcc\xd6\x6d\x5c\x95\x06\x3d\x62\x17\x0f\x04\xa2\xed\x5b\x8e\x2e\xed\x3a\x8d\x99\xf3\x71\x63\xd8\xa6\x8e\x5a\x75\x4f\xaf\x65\x5a\x19\xba\x2d\x3f\xee\xd8\xb3\xb7\xda\xfc\x29\x80\x81\xbd\x06\xa0\xaf\xa5\xe6\xb8\x25\xe9\x60\x1c\xda\x2d\x04\xb4\x56\xbc\x53\xc9\x47\xa5\xcf\xde\x52\x57\xc7\xbe\x76\x06\x4a\xa6\x3d\xcc\x36\x4f\xc5\x6a\xd1\xd7\xe8\xa8\x32\x97\x34\x2e\x53\x67\x28\xb8\x0f\xa3\x8b\x1b\xba\x61\x57\x4e\xb4\x1c\xbb\x44\x27\xdb\xd3\x4f\xfa\x59\xd4\xc6\xb6\x9f\x2a\x69\xb6\xbd\x46\xb9\x31\xa2\xdd\x40\x7d\x34\xa6\xdd\xb7\xdc\xdc\x8f\x6d\x37\x55\xd2\x6c\x37\x98\x7d\x07\xb5\x1b\x1c\xde\x45\x3b\x1d\xca\x88\x43\x2c\x2e\xa6\xda\x3c\x9f\xab\xed\xbf\x12\x69\xbb\x0e\x6b\xa3\xdd\x00\xcf\xfb\xbc\xdc\xf2\xe1\x81\x0c\x68\x8d\xdf\xae\xbc\xc6\x0e\x7e\x03\x9f\x42\x0f\x17\xb9\xe0\xf7\xa9\x7e\xa4\xf9\xa8\x03\x45\xd9\xa0\xd3\xbc\x3a\x40\xf6\x0c\x77\x57\x44\x91\x53\x04\x0a\x41\x6b\xa1\x78\x40\xcd\x49\xe2\xb7\x46\x1b\x2c\x12\x25\xad\x13\xca\x00\x85\x8f\x0a\xb3\x33\x53\x68\xcd\xb7\x09\x9b\xda\x59\xb5\x2d\x22\x0a\x08\xe8\xaa\xb7\xa1\x31\xb8\x6e\xa2\x89\xa5\x7c\x8e\x32\x07\x6c\xdd\x22\x87\x37\x13\x0c\x88\x54\xe0\x4c\xce\xed\x83\x27\x17\x89\x34\x22\x12\x77\x6a\xbd\xb1\xbf\x1c\x27\x05\x51\xf0\xa2\xd5\xed\x3a\xd8\x1f\xce\x93\xa2\xe4\x19\xfb\x52\x8a\x7c\x47\x4c\x7a\xe8\xab\xc4\xbf\x24\x5c\x61\xe2\x48\x21\x36\x5b\xc8\xce\x8e\x33\x1e\x66\xea\x67\xc0\x4d\xe0\x14\xbc\x30\xec\x8f\x3a\xe3\xd6\x2c\xc6\x2f\xd3\x25\xbc\xe1\x05\xdc\xc5\x7f\xc1\x3a\xfc\x67\xd3\x99\xaa\x88\xa5\x44\xbf\xaa\xe8\xa6\x4c\x67\xca\xa9\x15\xa4\x3a\x31\x53\x78\xf1\x4d\x75\xbe\x3a\x25\x9d\x5f\xbb\xd8\xf5\xfd\x42\xeb\xfb\x53\xa1\x4e\xc1\x27\x55\x9c\xf2\xb2\xd0\xa7\x80\x9e\xc2\xf9\x37\xa7\x4e\x0e\xd4\xe9\xa9\x9a\xd3\xb5\x7c\x10\xf0\xff\xa6\xeb\x62\x93\xfd\x83\xd9\xae\x7f\x39\x59\x65\xf9\x89\xfd\xed\x49\xfc\xdb\x13\xf7\xdb\x13\xf7\xdb\x13\xfb\x33\xfc\x7f\xdb\x1d\x86\x77\xc4\x2f\xdc\xde\x65\x93\x99\x92\xca\x88\xbc\x00\xeb\xe7\x31\x97\x45\x50\xa5\xd9\xb1\x17\xff\xf5\x5f\x6c\x9a\xf3\x47\xcc\x6c\x7c\xcb\x0b\xfe\x09\xfd\x8b\xff\xfd\xdf\x2f\x20\xa0\x8a\x39\x3e\x5b\x9e\x7f\x29\x45\x31\x53\x46\xd8\x4d\xc8\xfe\xbf\x99\x82\x08\xec\x66\x37\x2f\xd0\xef\x8a\x3e\xc8\xd4\xb0\x7f\xc1\x32\x2f\x91\x55\x32\x35\xb6\xa4\x8e\xec\x02\xc9\xb3\x16\x05\xe9\x0e\x17\xfd\x97\xec\x2d\x7d\x7f\xc4\xb6\xfe\x92\x55\x77\xb5\xd3\x45\x31\x5f\x32\xb8\x40\x33\xcd\x1d\x76\x8b\xf9\xc5\x0b\xef\x64\x6a\x5c\xdb\x1e\x69\x40\x03\x9e\x35\x4c\xdf\xbe\x57\x6e\x90\xd9\xda\x79\xee\x1b\xc7\x08\xc4\x0a\x42\x1c\x02\xa2\xe7\xd2\xee\x90\x1b\xf4\x84\x82\xe5\x86\x3d\x07\x9b\x94\x42\xe7\xbe\x3c\x74\x5c\x98\xdf\xbf\x3e\x3d\x9d\xb0\x95\x81\xff\x59\x7c\x81\xff\x01\xf4\xd0\x53\x91\xb3\x36\x06\xd3\xe3\xe2\x9a\xb3\xbc\x7f\x26\x9e\x02\x54\xf7\x35\xf8\xc0\x6b\xcb\xf4\x4d\xa9\xd2\x4c\x84\x8c\xc8\x4a\x48\x24\xd3\x4e\xc1\x1e\x1d\x63\x75\xe5\x15\x98\xe3\x85\x48\xb8\x3d\xf8\x1a\x75\x23\xd6\x54\x2f\x0b\xa1\xd0\x1b\x96\x07\x61\x36\x8e\x9e\x2b\x30\x8b\x01\x19\xc9\x0b\x42\xa0\x0b\xf8\x23\x54\x02\x04\xdb\x93\xfa\x47\x6c\xa7\x4b\xe2\x8a\x06\x06\xd4\x54\x24\x19\x10\xf2\x3b\x16\x18\x96\x8b\xa2\xcc\x15\xe3\x6c\xcb\x55\xca\x0d\xac\xc0\x65\x0e\xd1\xce\x9c\xf1\x66\x43\x27\x88\xce\xd5\x65\x01\xdc\x46\x88\x2c\x88\x47\x02\xc9\xbc\xa3\x36\x4f\xa2\x46\xe0\x9d\x00\x9c\xc2\x8d\x1f\x4e\x67\xca\x49\x87\x91\x58\x1c\x7a\xca\x12\xbd\xdd\x11\x73\x4d\x7d\xd0\xa5\xf3\x9c\xd1\x70\x4f\x02\xde\xa4\xfe\xdd\x09\x93\xd5\xd0\x1a\xf0\x86\x17\x91\xf8\xb1\x93\x8f\xfe\x4e\xa8\x44\xa7\x22\x37\x2f\xed\x36\x94\xfe\xdd\x81\xf6\x83\x34\x61\x32\xe0\x94\xb2\x97\x1b\x79\x0b\x6d\xf1\x5e\x60\xc7\x8e\x4e\x85\x69\xba\xcd\xce\xd9\xbf\x55\x7e\xed\x28\x98\xb6\xf6\xd2\x7f\x7e\x55\x44\x4c\x0c\xf3\x74\x6f\xce\xc3\x5d\x10\xb8\x65\xe3\x13\x17\x0b\x45\x1b\x87\x8c\x13\xa7\x34\x2b\x0b\x10\xb3\xcb\x85\x29\x66\x8a\x6e\xe0\x09\x5b\x0a\x6e\xed\xbc\x09\x4b\xcc\x03\x1e\xc6\x78\xdd\x17\x8f\x3a\x60\x70\x9c\x4c\x09\x60\x63\x2b\x85\x07\x27\x31\x7e\x0d\x10\x05\x3c\x29\x10\x60\xd0\x29\x4a\xee\x4c\x15\x18\xac\xd6\x03\xf1\x80\x71\x70\xaa\x17\x75\x85\xa9\x58\x74\x05\x46\x62\x87\x81\x62\x56\x6f\x07\x7e\x60\x0f\x1e\xec\x1d\xc2\x40\xa2\xc3\x11\x2c\x6e\x82\xd6\xe2\x3e\x0b\x31\xdc\x98\x7a\x1c\x7c\x33\x5d\x9b\xaa\x67\x20\xa0\x01\x87\xf9\x2d\xec\x4f\xf7\x3a\xac\x8c\xc8\x9d\x24\x07\xf6\x15\x89\x02\xd7\x32\x4f\x4f\xb6\x3c\x2f\x76\x6e\xf9\x66\x72\x01\x4c\xfe\x99\xbc\x17\xec\x2c\xcf\xf5\xe3\x53\x8f\x42\xe7\xd1\xd2\xf5\xc2\x3e\x06\xd8\x3e\xf6\x95\xdf\x4a\x13\x5a\x77\x77\x1c\x46\x49\xda\xe5\xf8\x68\xad\x27\x17\x45\xbe\x9b\xdb\x85\xb8\xd9\x76\x9e\x14\x83\x72\x28\x86\x1b\xb9\xe3\xd8\x4e\x6b\x2e\x8c\x4e\xb6\xd3\xca\xac\xfe\x7a\xd8\x4e\x5b\x88\x4c\x9b\x6c\xa7\x97\x57\x97\xb7\x97\x67\xef\x2f\xff\x6f\xad\xc4\x9f\xcf\x2e\x6f\x2f\xaf\xfe\x38\x7f\xf7\xf1\x7a\x7e\x7d\x71\xf3\xf1\xee\xfa\xfc\xa2\x9f\xbe\xa8\xd9\xfa\x60\x82\x9f\xb0\xb8\x9e\xd7\xec\x36\x02\x6a\x60\xee\x01\xd9\xdf\x24\x65\x09\xab\xca\x6e\x66\xa9\x56\x13\xd8\xa8\xaf\xd9\x45\x9e\x5f\x6e\xf8\x4a\x7c\x2a\xb3\x0c\xe0\x54\x98\xe8\x73\x9e\x0b\x78\x78\x4e\xd8\x27\x9d\x5e\x46\xbf\x83\xec\xc4\xd6\x6e\x40\xfd\x3c\x4d\x73\x61\x0c\x56\x3f\xa1\xfa\x23\xf0\x90\xcf\x7c\x24\xf0\x1c\x7f\xe0\x32\xb3\xef\xb7\xd7\xec\x0d\x4f\xee\xf5\x72\x89\xd9\x34\x13\x9f\x47\xc5\xbe\x94\xba\xe0\x4c\xfc\x92\x00\x65\x57\xfb\x3a\x79\xaf\x57\xdf\x00\xaa\x3c\x20\x3c\xd5\xf1\x48\x01\xc9\xb2\x79\xfb\x75\xde\x7e\x10\x50\x2f\x3f\xe0\x4f\xdf\xe1\x2f\xdb\x1d\x94\x45\xf6\x04\xd9\xf2\xef\xf5\xaa\x5d\x40\x06\xac\x6b\x52\xbd\xa1\x40\x42\x42\xdc\x1b\x7a\xc5\x8c\x54\xf7\x33\xf5\xf3\x5a\x28\xa6\xcb\x1c\xff\x04\xcf\x7c\x6b\x66\x66\xa5\x59\x0b\x50\x94\x9d\xb0\x47\xc1\x36\x7c\x87\x66\x33\xbc\x09\xbc\xea\x05\x2c\x19\xb8\x45\xec\xaf\x33\xa9\xec\x69\xb1\x95\x2e\x2f\xa1\x3e\xf5\x4f\xf1\xe2\x72\x84\x75\xfc\x78\x3e\xd9\xbe\xfb\xb4\x82\xcf\x03\x57\x59\xc0\x4d\x3a\x80\x10\x9d\xdc\x20\xaa\xa9\xf5\x7d\xb9\x0d\xd4\x96\x2f\x5c\x70\x12\x86\xfb\x41\xcb\x94\xa5\xe5\x36\x93\x89\x3f\x77\x1f\x75\xde\xc9\xdf\x8b\x09\x34\xc3\x6f\x9d\x7a\x96\x58\x5f\xc7\x5a\xb2\x73\x22\x24\x5d\x0f\x93\xef\x33\x73\x19\x33\xa9\x92\xac\x04\xb9\xb0\xd2\x88\xfc\xa4\xc8\xe5\x6a\x05\x06\xb8\x4b\xfd\xfb\xf5\x93\x1d\x07\x32\xc5\xe3\xb3\xdc\xe2\x1c\xf4\x4c\xaf\x64\xc2\xb3\x18\xdc\x1c\x50\x11\x9e\x4d\xd5\x6d\x7b\x12\x53\x85\x3c\x08\xd7\xa0\x4e\x42\xa4\x6d\x2e\x80\xd0\x77\x0e\x47\xf9\x9c\x8e\xbb\x63\xda\xbd\x64\xf6\x81\x8e\xed\x8a\xb9\x4e\x5d\x78\xc1\xdd\x70\xa1\x6e\xa7\xa8\x05\x26\x26\xaa\x6d\x33\xfd\xa8\x44\x0e\x16\x2c\xc0\x3e\x6c\x4f\x95\x06\xdb\xc4\xab\x6c\x79\x7c\xb2\x53\x99\x5b\x7a\x20\x36\x26\xd2\xae\xe4\x83\x50\x5f\x9f\x9c\x3a\xaa\x20\xe1\xc9\x5a\xcc\x9d\x5d\xfe\xd4\x47\x96\xbf\x00\x46\x1e\x56\x4e\xee\x22\x3e\x4a\x7d\x78\x13\x9e\x4e\xd8\xe2\xe6\xd9\x85\x81\xc4\x9e\x8c\x2c\xdb\x88\x79\x2a\x92\xfb\xaf\x7e\x34\x07\x90\x95\x6b\x08\xe3\xec\xad\x48\xee\xd9\xdd\xf5\x25\x26\x07\xcb\x82\xd9\xa3\xc0\xac\x83\x7c\x4f\xe7\xdb\xad\xe0\xab\x67\x20\x78\x1a\xaa\x3f\x14\x28\xe7\xbd\xea\x9a\x6d\x10\x01\xa2\x20\x5f\xd2\x1e\x92\x94\x4b\x03\x40\x30\x5e\x38\x55\x1a\x70\xc4\x33\xb3\x01\x11\x9a\xb2\x88\x94\xdb\x32\xbe\x10\x59\x07\x01\xe3\x56\xa7\x73\x17\x27\x39\x16\xcc\xd3\x28\xcb\xf9\x31\x28\xea\xe8\xf2\x18\xb8\xb5\x58\x6f\xe9\x8b\xec\xfe\x0f\x26\x62\xdb\xd0\x31\x0f\x34\xbc\xeb\xb9\x81\x6c\xef\xa5\x5c\xb9\x68\x9b\x5c\x92\x54\x0e\xe6\xf7\x83\x28\xbc\x3d\x2f\x6d\x49\x9f\x74\x4a\x30\x3d\xcf\x69\x66\xad\x20\x41\xde\x93\x80\xab\x88\x9b\xe0\x85\xf3\x0d\xf8\x06\x4c\x21\x78\xca\xf4\x92\xbc\x89\xdb\x6d\x26\x81\xe1\x37\x45\x32\x71\x20\xd3\x30\x55\x74\x7c\x5c\x9a\x6b\x6c\xc4\xf9\xf1\xc9\x01\xf1\x7a\xe3\x8d\x21\xc8\x65\xfb\x55\x75\x72\xd7\x6d\xaa\x63\x45\xe1\x7c\x3e\xd2\xa1\x4f\xe8\x7e\x6f\xda\x2a\xd3\x0b\x18\xa8\x6e\x50\x5c\xcf\x01\x6d\x4f\xa7\x5c\xa6\x63\xae\x77\x37\x26\x1f\xfd\x4f\xfb\x1a\xf8\xd1\x79\x3a\x7c\x4d\x6e\x9a\x19\xf1\xaf\xc7\x11\xfc\x5a\x56\xfb\xbe\xb7\x36\x04\x08\x8d\x8f\x10\x7a\x6b\xbc\x20\xf5\x01\xd8\x15\xfe\x38\xee\x78\x56\x57\xfb\x72\xd4\x44\x37\x79\x52\xf6\x8c\x65\xa0\x56\xe9\x9f\xe4\x23\xc8\x2e\x70\xe7\x7a\xc6\x8b\x6e\x47\x9a\x4a\x45\x3a\x3f\xa0\x0f\x17\xf4\xdb\x61\x7d\xf1\x23\x8d\xcd\x03\x97\x97\x3a\xb1\x37\x63\xca\xf3\x34\xf4\x63\x02\x2f\xe2\x84\x6f\xc1\xeb\x0c\x5e\xfc\x87\x57\x53\x57\xc7\x75\x48\xa6\xb1\xc7\x03\xa6\xb8\x23\x5c\x59\xb7\x48\x77\xec\x5b\x47\x7e\x91\x22\x9a\xd9\xae\x9c\xb0\x5c\x2b\x69\x26\x83\xd6\x6e\x7d\x85\xb9\xf3\xea\x98\xc5\xf5\x1c\x67\x47\x59\xe8\x10\xdc\x80\xfe\x5c\x02\x5b\x6a\x9c\xc0\x06\x07\xe4\x65\xda\x01\x8c\x70\xd6\xa6\x3b\x84\x46\xc0\x6d\x47\x01\x7e\xb7\xb9\x70\x61\xb2\x9d\x28\x3c\x8d\x41\xe6\xe4\xd0\x20\x0a\xe4\x7b\x5d\xa5\x75\x71\xcc\x0d\x9e\x8a\x0b\x62\x36\x64\xd9\x26\x7a\xb3\xd5\x0a\x50\x38\x98\x94\x35\x53\x54\xb8\x13\xb5\xf6\x81\xa4\x4a\x66\xdf\x84\xfc\x77\x98\x27\x22\x8c\xce\x1e\x28\x62\x18\x69\x2f\x80\x1c\x9e\x6d\xe0\xb9\x7d\x0a\xd9\x87\x3f\x84\xb2\xe9\x22\x03\xe0\x7b\x4d\xd9\x39\x17\x2b\x69\x0a\x11\x27\x43\xc6\xbf\x7f\x32\x11\xce\x8a\xaf\xa0\x6f\xe8\x3b\x45\x38\xf7\x19\xfd\xf6\x7c\x1a\xd1\x9e\xdd\x56\xa4\x97\xfe\x77\xfd\x8b\xa1\x96\xaf\x1e\x8e\xc3\xca\x7d\x87\x6b\x00\x1f\x3b\x06\x89\xae\x8c\x57\x4d\xf0\x93\x44\x14\x44\x3c\xe0\xf7\xec\x14\xad\x4a\x9e\x73\x55\x08\x61\x66\x8a\xe2\xac\x48\xd8\x16\x73\x92\xd4\x70\x7f\xde\x94\x4f\xb4\x29\x90\xff\x08\x7e\xb2\xe4\x32\x2b\xf3\xce\xd7\x35\xae\xca\x83\x58\x16\xfa\x46\xe9\x1c\x8a\x65\x6d\x93\xe6\xf3\x75\xa3\x5d\xe4\x49\x42\xea\x51\xd2\x6a\x3a\x6b\x47\x17\xdc\xe5\x32\x7c\xbe\xbd\x6b\xb5\x23\x85\xf7\x0f\x66\xbe\xd5\x23\x4e\xbc\x3f\xff\xc1\x7c\xd2\x1d\xc9\xcf\xe6\x4b\xc3\x05\xd8\x83\x16\xf8\xd2\xa5\x23\xc1\xcd\x3d\x04\xda\xf6\x79\x1e\x06\x71\x51\xee\x0d\xc7\x75\x9e\x5d\xb0\x6a\xd7\x5c\xa5\x99\x7d\x91\xf3\xa2\x76\x03\x05\x58\xb3\x7d\x01\x14\xee\x70\xec\xce\x61\x83\x94\x90\x79\xd2\xc8\x27\xdc\x37\x4e\xb5\x44\xc4\x5e\xe8\x60\xad\x96\x6a\x7a\x60\x5b\x5a\x4a\xb0\x61\x48\xbd\xd5\x6f\xd8\x6f\x6e\xbf\x5c\xc4\x6d\xff\x4a\xe6\x4b\x75\xaf\x2d\xe5\xea\x57\xf0\x6e\xfe\xd0\xbc\x12\x12\x3a\x73\xe8\xa2\xf6\x60\xfe\x23\x4f\x1d\xc8\x9b\xb2\xa7\x76\x4c\x3f\x3d\x53\xa4\x62\x8d\xc1\x74\x88\xa2\x22\xdb\x98\x61\xaf\x7c\x32\xed\xab\x7f\x74\x5c\x53\x3b\xb6\x84\x45\x05\x84\x6e\x3a\x49\xca\x1c\x22\xdd\xe4\x8d\x63\x02\x2f\x61\x33\x8a\x37\x05\x4c\x0f\x8f\x4f\x42\x3b\xb1\xcd\x4c\xf2\xee\xd7\x4a\xa7\x6e\xc1\xeb\x86\x7a\xdc\xfe\xd2\x27\x99\xa5\xdc\x14\xcc\x14\x62\xdb\x7a\xfc\x56\xac\xcb\xaa\xe4\xfc\x11\xf6\x65\x10\xbc\x1f\xb8\x75\x46\x5c\x46\x67\x91\x87\xe4\x4f\x37\x1f\xaf\xd8\x96\xef\x00\xea\x57\x68\x86\x5f\x05\xba\xcd\xfa\x41\xb5\x6f\x06\xaa\x9d\xaf\x9e\x2a\x38\xa6\x0e\x33\xdc\xee\x8e\xa7\x1a\x9b\xc6\x22\xac\x19\x5a\x92\xf6\xcc\xca\x75\x76\xb2\xcd\xb8\x8a\xd0\xdc\x66\xca\x6a\xd5\xc7\xe1\x7b\x1f\xc8\x23\x80\x14\x34\x00\x3c\x64\xb4\x16\xf2\xb2\x15\xef\x5b\x55\xd1\x3f\x2a\x62\xdf\x79\x46\xf4\xe2\x18\x3f\xa0\x78\x05\x4f\xec\x36\x41\xb2\x08\x87\x42\xf0\x40\x16\x6e\x00\x63\xda\xc9\x7f\xcd\x93\x8c\x1b\xd3\x0b\x4a\x79\x0e\x02\xf7\x38\x49\x6f\xff\xf1\x55\x6d\x27\xa2\xe6\x80\xca\x03\xdf\xa5\xfe\x63\x20\x07\x70\x47\x57\xd0\xaa\x8a\xec\xfd\x48\x33\x81\x22\xfd\x44\x8f\x04\xbf\x47\x1e\xc4\x7b\xb1\x73\x0e\x3a\x3a\xaa\xf8\x46\x4c\xbc\x6f\xd1\x3b\xcf\x22\x8c\x5b\xb3\xe0\x99\x02\x10\xe8\xbb\xb8\x79\xec\x9d\xd6\x13\x84\x23\x52\xe5\x1c\x8b\xe5\x31\xa0\x67\xa6\xde\x69\x3d\xe5\xfe\x11\x4b\xed\xa7\xe3\xa6\x5e\x21\x81\x80\x00\x62\x57\x9b\xce\xe1\x7b\xf3\x47\xa9\x50\x55\x4d\x6e\xec\x03\x8a\xc6\x09\x56\x14\x34\xc8\x89\x78\xeb\x47\xc3\x52\x64\x50\x29\xa5\x59\x43\x94\x01\xc3\x7a\x50\x3f\x5d\x29\x88\x3f\xca\xb9\x32\x76\x0f\x43\x64\x42\x3c\x08\x72\x4f\x56\x42\xea\x97\x6f\xdf\x7b\x94\x0e\xee\x4b\xd2\x59\xec\xd8\x6d\xd1\xa3\xe3\x98\xc7\x39\xa0\xab\x47\xf0\xb7\x51\x1e\xe6\x07\xbe\xed\xcb\xfd\x3c\xba\xc4\x7d\xb3\xe4\xf9\xa3\xea\x2f\x2a\x10\x60\x06\xe9\xb5\x4a\x02\x68\x3c\x7a\x77\xea\xc8\x1b\xa7\x95\xd1\x7d\xbf\x52\xc8\x60\x07\xc3\xc8\xa3\x62\xff\x75\x13\xa8\x30\x03\x42\xce\xbf\x05\xed\xc1\x0e\xc2\x56\xc0\x41\x87\x5b\x7a\xca\x6e\x84\x60\x9f\x61\xa4\x6c\x65\x9f\x49\x38\x11\x40\xbf\x05\x97\xad\xba\x56\xf0\xed\x4b\xb5\xd4\xc7\x9d\xff\xf9\xaa\x01\x2a\x3d\x6a\x54\xda\xdb\x79\x2c\x6c\x15\x12\x92\xd5\xf3\xb2\x68\x0c\xba\x18\x6a\x73\xfd\x29\xf8\x9b\x28\xb7\xd6\xb5\xd4\x9a\x64\x30\xc5\x87\xf0\xb4\xd5\x16\x89\xed\xe5\x04\xa9\xc8\xef\x95\x7e\x54\x78\x1e\x53\x4d\xec\x3b\xbb\xff\xc0\x66\xc1\x30\x08\x5a\x82\x25\x9e\x86\x2f\x81\x1b\xfd\xcc\xff\x9b\xdd\x60\xc4\x17\xdb\x0c\x8a\x47\x06\xec\x5d\xd2\x2a\x82\x0b\xfc\xbb\xb3\x09\x7b\x33\x61\xe7\x13\x36\x9d\x4e\x5f\x4e\x50\x8e\x9d\x5a\x84\x3f\xc1\xa3\xbf\xe0\x2b\x5b\x36\x69\xc0\x2c\xa3\x0a\x40\xd5\xcc\xda\x27\x8e\xf3\x8f\x87\x6f\x45\x5e\x35\xd7\x05\xcc\x44\xa6\xb4\x29\x42\xc7\x24\x6b\x2d\x43\xa3\x00\x68\x2d\x12\x9d\x3b\xa8\xb6\x29\x74\xee\x60\xa7\x0f\x3c\xe7\x52\x01\x41\x03\x6f\x82\xee\xa9\xe6\x88\xb1\x5d\xfc\xc2\x37\xd0\x7f\xa9\x3c\x69\xad\x1d\xa6\x5b\xdf\xfe\x62\xb7\xa5\xb0\xd2\x63\x2e\x8b\xc2\x1a\x64\x66\xa6\x6e\xd8\xeb\x7f\x61\x67\xdb\x6d\x26\xd8\x19\xfb\x1b\x7b\xc3\x15\x57\x9c\xbd\x61\x7f\x63\xe7\x5c\x15\x3c\xd3\xe5\x56\xb0\x73\xf6\x37\x3b\x6c\xb6\xbc\x2b\x6d\x2d\xa0\xdd\x84\x71\xa6\xca\x0c\x0d\xbd\xef\x1c\xa4\xf3\xa5\xef\x17\x0f\xb3\xb3\x10\xc5\xa3\x10\x8a\x19\xbd\xa1\xab\xf0\xaf\xfe\xf6\x37\x52\xad\x32\x51\xd0\x7a\xa8\x82\x6f\xb1\x82\x13\xe8\xe9\xeb\x99\xf2\x7e\xea\xbf\xda\x16\xff\x95\xfd\x8d\x5d\x95\x59\x66\x9b\x64\x0f\x1a\xbb\x90\x5e\x33\x97\x0c\x25\xd4\xf4\x51\xde\xcb\xad\x48\x25\x87\x74\x28\xfb\xaf\xd3\x5b\x98\xed\x79\x19\x98\x2f\xe3\x3d\xed\x55\xa4\x8e\x39\x7a\x9e\x85\x5a\xc1\x6b\x9c\xc5\xd6\x4a\x27\xe6\x22\xfe\xe9\x78\x23\x38\xd0\xff\xd2\x7e\xa0\x37\x0a\x2a\x80\xc5\x5a\x6a\x07\x1d\x01\xb5\xcb\xd6\x95\xd5\x72\x15\xc4\x97\xfa\xb1\x87\x2c\x08\x03\x7e\x45\x73\xfc\xa7\xc6\x10\x0d\x66\x9e\x27\xf1\xa3\x0a\x59\x05\xd8\x92\x81\xb0\x6b\x50\x6c\xd7\xcb\x28\xfd\x54\x55\x46\xac\x0c\xb1\x96\x83\x24\x24\x6b\x8d\xbd\xa3\x97\x00\xa6\x99\xda\x6d\x2a\xb3\x53\xbb\x55\x4f\xaf\xb4\x12\x8c\x1b\x23\x57\x48\x32\x06\x0e\x1d\xd4\x5e\x74\x46\xc1\x6d\xd5\x64\x8d\xb6\x00\xd8\x07\xb6\x49\x08\x50\x2d\xec\x29\x60\xa7\x20\xdb\xcd\x94\xfd\x05\xdd\x48\x90\xac\x22\x3d\x35\x35\xd6\x46\x54\xcf\xae\x2e\x3a\x90\xa3\xc2\x5b\x16\x58\x5f\x26\xfc\x11\x0b\x8e\x12\x2f\x8f\x88\xf8\x5c\x45\x3c\x8c\x54\x9a\x23\xe9\x41\xf4\xc2\x42\x64\x5a\xad\xec\xaa\xe8\x3a\x04\xf4\x86\xcb\x63\xe0\x61\x71\x13\xb0\xb0\xce\x16\xd8\xcb\x92\xbe\x42\x53\x62\xef\x49\x99\x06\x97\x8e\x29\x17\xd6\x8e\xf0\xd1\x06\x7f\x1b\x52\xe7\xba\x68\x01\x8e\x43\x89\xdc\x19\x91\x03\x77\x3a\xe2\x94\x7c\x24\x0b\x2f\xce\x40\x99\x83\x3d\x1a\xb6\xa9\x7a\xe1\xed\xed\xde\x2f\x8a\x94\x35\x08\x12\x06\xac\xc7\x6f\x89\x74\x1f\x82\x7f\x7f\x77\x76\xf9\xbe\xf6\xbd\x26\xfe\xbd\x05\x24\x7f\x7b\xf9\xe1\xe2\xed\xfc\xe3\xdd\x6d\xe3\x7b\xb6\x34\xfa\xd3\x1e\x08\x7c\xe7\xe8\x3d\x05\x08\xf8\x0b\x6a\x38\xcd\xf5\xd2\xe5\x43\x0f\xbf\xd3\x1b\x2a\x5a\xc3\xb0\x66\x45\xf4\xbe\x8a\xd5\xa6\x9a\x0b\xa7\x93\xd5\x41\xcd\x29\xda\x36\xac\xb1\xf5\x01\xfb\xa8\xde\xe1\xcf\x3f\xe9\x4c\x26\xfd\xd0\x55\x77\x5d\xad\xf5\x63\x0b\x16\x70\x21\x00\xcb\x4d\x2e\x3f\x6a\x14\x5a\xe8\x85\x48\x8a\x10\x4d\x6e\x76\xee\x7f\x35\x5c\x6e\xff\x1b\x1c\x3d\x71\x7e\xd8\x40\x55\xd7\xc7\xa7\xe1\x6e\x05\x9a\x5c\x10\x8b\x40\xf7\x3a\xf8\xf6\x00\xb7\x91\x70\x8a\x3a\x54\x46\x1e\x0e\xe8\xc7\xb5\xce\xc8\x23\x87\x94\xc3\x33\xb5\x15\x79\xa2\x01\x66\x86\x6c\x16\x9a\x25\x6b\x99\xa5\x41\x91\xe9\x3b\xc0\xe5\x03\x7a\xf6\x25\x69\x6d\x0a\x8f\x9f\x70\xc5\xf7\xdc\xba\x6e\xd9\xbd\xc5\xdd\x7d\x14\xf6\xe8\x29\x81\xb6\x7d\xcb\xfe\x67\x02\x84\xe2\x50\x10\x49\x58\x2d\x12\x6e\x07\xbd\xd2\x9e\x51\x4e\x7d\x7b\xdd\x92\xd8\x4e\x12\x1e\x4e\x45\x6d\x5e\x69\x99\xd5\x87\x12\xa8\xa3\xd1\x93\x8a\x30\x30\x23\xa0\x39\x1b\xc1\xd1\x16\x0b\x44\xae\x34\xa9\x33\x15\x62\xff\x2f\x4c\x6c\x97\xb5\xce\x33\xfa\x5f\x1d\x94\x77\xc2\x5e\x54\x3a\xfa\x02\xa8\x85\x95\x86\xfa\x28\x3e\x5b\x19\x1a\x58\xae\x13\x26\x8b\x99\x92\x06\x57\x66\x2e\x32\xf1\x60\x5b\x17\xc7\x07\x08\xb1\xe6\xde\xce\xae\xdb\x90\x0d\xc2\x1d\x89\x00\x2d\x1b\xda\x84\x79\x4c\x51\x8b\x81\xc9\x54\x18\x6b\x37\x82\xd6\x8e\xf8\xc5\x6e\x00\x09\xe1\x2f\x84\x36\xa5\x42\xb9\xf6\x01\xe2\x09\x05\xaa\x67\xea\x72\x09\x99\xdc\x90\x3f\x9e\xa6\xf8\x0a\x75\xea\x2b\x9e\x2f\x50\x52\x3c\x40\xd3\x9b\xdc\x4d\x04\x49\xc5\xe2\x4e\x12\x0f\x22\xdf\x15\xe0\xd4\x85\x71\x55\x82\x17\x6b\x26\x8b\x09\x10\x3d\xba\x93\x72\xa6\x78\x9a\x52\x02\x2c\x16\x67\x87\x06\xd6\x7d\xcf\x3c\xd3\xe7\x0b\xfd\xd0\x67\xd8\x1e\x8b\xdd\xc4\x5d\xbd\xcd\xb8\x9a\xe3\x0d\xf2\x0d\xd0\x9b\x91\x8a\x6f\x57\x18\xbf\x5c\xcc\x3d\x39\xd5\x93\xb4\x33\x12\x7a\x8f\xb5\xb5\xad\x1d\xeb\x2a\x9a\xe0\x62\x08\xe4\xf4\xee\x79\xe2\xfd\x34\x84\x9c\xc9\x99\x43\x17\x0c\x3f\x05\x02\xb0\x93\xd7\x50\x36\x6e\xb5\xee\x43\x76\xba\x15\xf0\x6b\xc5\xde\x0d\x99\xf9\xda\x1d\x52\x9f\xf6\xf1\xb0\xaf\x86\x85\x78\x10\xf4\x6b\x4f\xb3\x9e\x17\xfe\xd5\xe9\x47\x69\xc2\xc0\x5c\x6f\xa3\x08\x2f\xa6\x40\x09\xf4\xc3\x79\x37\x4f\xbb\x4a\x73\xfc\x0e\xd3\x2d\x08\xe9\xa7\xf4\x51\xc3\x39\x35\xd4\x53\x12\x18\x14\xa0\x5d\x53\x76\xa9\x98\x33\xf7\x26\xec\x05\x2e\x2c\xf3\x82\x5c\x90\x24\xf5\x4d\x70\x89\x94\x76\x0f\xe5\x9c\xd7\x61\x46\x98\xf9\x13\xb6\x1b\x46\x82\x7a\x09\x4a\x9f\x75\x5c\xde\x48\xc8\x3c\x3a\x84\x5c\x02\xa3\x88\x0b\x2c\x80\x2e\x49\x7c\x76\xef\xd0\x68\xd7\xc1\x9b\x1d\x3a\xec\xe2\x5d\xec\x8d\xfb\xa1\x1d\xa2\x6d\x49\xf7\xa9\xfb\x9c\xe9\x7c\xa6\x5c\x69\xe4\x92\x34\x28\x90\x56\x2f\x2a\x4a\x84\x20\x9b\x3f\x5a\xa9\x10\x0c\x76\x9a\x78\x20\xb5\x18\x58\x94\xeb\xa7\x00\xe0\x60\x16\x1e\x83\x08\xb4\xfb\xa1\x36\x6b\x78\xd8\x05\xbe\xc1\x6b\xbe\xce\xb4\x9a\x65\x76\x50\x64\xe1\x88\x5d\xa3\x24\x25\x53\x02\x3d\xf1\xb2\xb4\x87\x51\xc4\xe1\x3c\x53\x76\xf0\xd8\x52\x02\x7a\x9f\xc6\x65\xa6\x3e\x68\xe3\x38\x31\x4c\x18\x0f\x17\x5a\xa6\x61\x7b\xe1\xa5\x01\xe9\x0f\x6f\xe1\xd2\x26\x9f\x3f\xb2\x5b\xf9\xab\x05\xb2\xd3\x88\xd8\x66\xa7\xcb\x3c\x74\x2a\xe1\x6a\xa6\xfe\xc3\x0e\x0f\xca\xd3\x2b\x37\xad\x7a\x89\x5b\x18\x66\x10\x82\x25\x9f\xb1\xd0\xef\xfe\xf1\xe5\xe7\x97\x98\x4d\x52\x1a\x50\x63\x9d\x54\x2f\x10\x4f\xe7\x5f\x66\x19\x44\xa2\x5d\x0f\x3c\xa5\x4c\xa8\xa2\x17\x89\x45\x8f\xba\xb9\xaa\x9a\x18\x43\x36\x7a\xdf\x0a\x0e\xce\xe7\x33\x96\xf0\x22\x59\x9f\x38\x5b\x8e\x8e\x31\x77\xfb\xd1\xf4\xa1\x2c\xa3\xb5\xb4\xda\x19\xed\xed\x83\x33\xdf\x78\x8e\xcd\xca\x7a\xb1\x5d\x00\x2c\xd5\x6d\x5d\xde\xc9\x53\x00\xe3\xe2\x44\x24\x48\xd5\xce\xf3\x5f\x77\x5a\x8b\xe1\xc5\x49\x5e\x72\xc5\x37\x22\x65\x2f\x20\xef\xf1\x85\x9b\xfc\x99\xda\x2e\xa6\xd9\x6e\x59\x10\x51\x9b\x1d\x94\x29\xc8\x90\xed\xb9\xe5\xe6\x69\xf3\x99\xb4\x67\xb0\x3b\x1f\x5a\xed\xb6\x8e\x1f\x1b\x5f\xd3\x70\x83\x05\x7d\x5c\x7e\x74\x6e\xaa\xa8\xb0\xaa\x1e\x02\x37\xf7\x13\xb6\xc8\xb9\x02\x05\x99\x34\x36\xaa\xc2\xee\x84\xc7\x33\xb2\xa0\xb9\x44\x28\xc5\xb3\x1d\x64\x80\x4c\x66\x0a\x29\xe3\x80\x5b\x7c\x97\x64\x32\x61\xab\x9c\x6f\xd7\x35\x3b\x48\x3c\x08\x55\x80\x2e\xf1\xb5\xe0\xe6\xb8\x68\x7d\x5e\x2f\x81\x0d\x8e\xa7\x9c\x29\x78\x7d\x70\x55\x23\xf9\x85\xe6\x75\x5c\x2d\x80\xd0\x13\xe9\x7c\x1c\xc1\xcf\x5e\x1a\xda\x0a\xb9\x21\x31\x6d\x41\x04\xd2\x76\x8e\xb9\x5a\xf7\x85\xbf\x71\x5c\x89\x7b\xc6\x61\x3a\x8f\x0d\xd9\x7b\x2e\x9b\xa3\x18\x49\x2f\xab\x56\x24\x0f\x24\x3d\xc1\x73\x8d\x69\x7c\xe4\xa9\x70\x40\x78\x7f\x70\x4c\x48\x28\x12\xd8\x0a\xd9\x5f\xca\x85\xce\x1c\xdd\xe3\xe5\x5b\xa6\x73\x50\x5a\x29\x34\xfd\x49\xa6\x5d\xd6\x81\x54\xa9\xf8\xe5\x28\xce\x95\xfe\x8b\xde\x99\xcd\xb6\x9a\x48\xd0\xa3\xde\x59\x38\x9d\x72\x61\x2f\xe1\xc2\xbd\x8c\x1b\xdf\x32\x75\xb0\xea\x59\x56\xac\x01\x41\x8a\x49\x1a\x61\x50\x37\x7c\xc7\x92\x35\x57\xab\xc8\x35\x01\x80\x3e\xb1\xd5\x39\x0a\x94\x3e\x00\xb9\xa1\xce\x5d\x4e\x3b\x65\x6a\x53\xa6\x88\x0f\x24\x20\x40\x5b\xbb\x74\x6c\xbe\x5a\xe5\x62\x05\x34\x23\x33\x55\xe1\x9a\x00\x62\x47\x27\x86\x82\xf5\xf4\xa5\xea\x3f\x0d\xdf\x4d\xd7\x6b\xb0\xc8\x77\x3e\xd1\x99\xd4\x7d\xc3\x7e\xae\x0f\xeb\x84\x49\x31\x9d\xb0\x1f\x02\x28\x5d\x24\x5a\xf9\x4c\xe9\x8e\x34\xd9\x9a\xcb\x9f\xed\x79\x3a\x34\x89\x71\xda\xdb\x0e\x9f\x35\x34\x82\x5b\x17\x4d\x6f\xaa\x79\xc1\x8b\x72\xc4\x1d\x44\x3a\xf0\xe7\xf6\xc7\x37\xf8\xdb\xbe\x75\x7d\x8e\x88\x71\x47\x4a\x66\xbf\x6f\x6f\x4e\x5b\x77\x20\x2d\x6f\x1b\xeb\xbd\x0e\xe4\x4c\x77\x3b\x90\x9f\xc2\x54\x77\xcc\x33\xfb\x7d\xc8\x59\x07\x9b\x4a\x4f\x9f\xc6\xba\x88\x1d\xae\x9b\x52\x53\x4c\xfd\x19\xdb\x72\x02\x6c\x73\x9d\x96\x89\x48\xed\xce\x85\xf7\x10\x22\x62\x3c\xa9\x4b\xe5\x90\x6c\xbb\x68\x2b\xcc\x54\x70\xeb\x7e\x2d\x9f\xc3\x20\x32\x70\x3f\xfc\x77\x1d\xfe\x06\x67\xf1\xb5\x0d\x7a\xbc\x3f\x71\x9c\xf2\x91\xf7\x94\xaf\xbe\x4a\xe1\xad\x73\xb9\x92\x8a\x17\x3a\x67\xdf\xf9\xd4\xed\x97\x5e\xf7\xab\xdb\x42\x18\x79\x4c\x54\x86\x08\x8f\x89\xaf\x6a\x78\xb4\x2d\x52\xfb\x2d\x53\xf0\xcd\x36\x26\xc5\xf5\x22\xeb\x34\x32\x19\x0e\x82\xb7\x4d\xc0\x77\x2a\x4d\xc8\xdb\x9c\x29\x8a\x38\xe0\xbc\xe9\x3c\x66\x75\xef\xbc\x9b\xb7\x65\x31\x3f\x90\xe8\x09\x7f\x3c\xce\xf1\x44\x30\x84\x0f\x7c\xdb\x4f\x9d\xc3\xc9\xe5\x80\x89\x6b\x5e\x79\xde\x59\x2a\xd5\xf5\xd9\xaf\x9b\x32\x92\xca\xb7\x1e\x3a\xbf\x7e\xef\x02\x45\xe1\x3d\x58\x79\x60\xc1\x44\x20\x87\x28\x26\x02\xe1\xd3\xde\x1f\x6b\xf6\x16\x77\x7c\x3b\xe7\x99\x2e\x53\x46\x87\x1a\x85\xe1\xf3\x29\xde\x8e\x40\xea\x3b\x9d\x76\x25\x36\x8d\xd4\x73\xf6\xe7\x0f\xfc\xae\x7d\x07\xc2\x67\x1d\x27\x70\xef\xd6\xa7\x91\x7d\xb6\xa9\xa7\x91\x86\xb9\xf7\xc7\xf1\xa8\xb9\xf7\x5e\x70\x60\x18\x1c\xe7\x20\x85\xf7\xa8\x4c\x33\xd8\x6f\x71\x00\xa1\x85\x03\xb9\x12\x98\x35\xf7\x47\x57\xe7\x78\x08\xfa\xab\xda\xf2\x5c\xa8\x62\x0e\x35\x8e\xab\x0c\x2a\xf9\x04\x3f\xaf\x18\x4c\x83\x1c\xc1\xff\x76\xab\xd1\xbf\xef\xe8\x84\xfe\x9d\xdd\x90\x4f\xcb\x9e\x57\x12\x40\xa4\xe6\x9e\x7d\x27\x01\x73\x14\xc5\x42\xfd\xc4\x75\x4c\x17\x75\xe8\x80\xd1\x8b\x3a\x54\x39\xda\x07\x75\x28\xb4\x1e\x42\xd5\x50\x0a\xb9\xf7\x28\x2b\xdc\x1e\xb5\xee\x6f\x91\xc4\xc0\x55\xe5\xdf\x40\x07\x6b\xe7\x2f\x63\xff\x29\x72\x1d\x32\x80\xd0\x59\x15\x17\xdc\x6b\xaf\x1f\xae\x8e\x8c\xf6\x38\xea\xf2\xc6\xc2\x94\xf0\x17\x62\x6c\x42\x8f\xc2\x62\xe7\x9e\x23\x1d\x21\xa4\xad\x48\xe6\x1d\x2a\x24\x83\x9a\x12\x3d\x3c\x63\x55\x11\x59\xbb\xcc\xdc\x06\x3d\x05\x7f\x05\xa5\xd6\x6c\xf8\x96\xf0\x7d\x04\x25\xae\x07\x6f\xa6\xd0\x89\x7f\xfb\xeb\xbf\x4f\xbb\x74\xef\xa1\xe9\x63\xe1\x52\xbe\xf1\xef\x72\x29\x54\x0a\xc1\x58\x9e\x36\x05\xb2\x54\xc5\x3b\x5f\x39\x9e\xed\x32\x7c\x92\x8c\xe0\xf6\xab\xd6\xcc\x71\x11\x7d\x85\x88\x7e\x38\x64\xfd\xf6\xad\xc4\xfb\xba\x4c\x09\x33\x4f\x77\x8a\x6f\x64\xf2\x55\xdb\xb8\x93\x22\x4b\xa1\x89\x54\xfb\xbe\xa8\x54\x2a\x92\xfb\xb1\x36\xc1\xc1\xf4\xfe\x22\xb9\x67\x3f\xde\x7e\x78\x8f\x6a\xae\xd2\xcc\xd4\x15\x2f\xe4\x83\xb8\xcb\x33\x1f\x0e\x20\xbe\xa6\x3c\x73\x7b\xa4\x4a\x37\x1d\x51\x1b\x39\x6e\x6a\x67\x38\xc4\x6a\x00\x9b\xdd\xc9\xa2\x4c\xee\x45\x71\x9a\x73\x95\xea\x0d\x76\xe3\xd4\x94\xcb\xa5\xfc\x65\x5a\xf0\xbc\x43\x1a\x00\xfd\x08\xdf\xd0\xce\x0d\x82\x4f\x45\xb0\x79\xd1\xd4\x7d\x84\x44\x5f\x92\x11\xaf\x18\xb7\x98\x97\xc6\x37\x02\xb8\x1d\x59\x55\x56\x03\x4a\xc1\xdc\x59\x50\x9f\x34\x86\x10\xf4\x9a\xb4\xad\x3f\x47\xc6\xfd\xe7\xa8\x55\x55\x7d\x75\xd7\xa8\xa0\xe8\xb8\xe1\xf7\xf8\x3e\x5c\xe5\xc2\x98\x09\x33\x1a\x5a\x3c\x53\x0e\x8b\xee\xf2\xa5\x00\xf7\x02\xec\xb0\xd9\x8e\x25\x7a\x2b\x41\x00\xd3\xf7\x6b\xad\x1f\xc1\x4f\x1f\x67\x8a\x82\x66\x71\xa9\x0a\x99\x31\xbe\x2c\xc8\x89\x0f\x54\xf8\x4e\xfa\xca\x4c\x67\x0a\x42\xb1\x09\x74\x1f\x20\x12\x3e\xfc\xe2\x3b\x61\xd8\x92\x27\x32\x93\x05\x11\x74\x41\x92\x11\xb7\xfd\xb5\xf7\x81\x1d\xcb\x9c\xef\x78\x16\x1e\x56\x3c\x2b\x43\x72\xec\x89\x11\x3d\x04\x90\xd2\xcc\xd1\x41\xf0\x35\x18\xe7\x64\x1c\x7c\x40\xb2\xec\x33\x5b\xf9\x55\xed\x16\xfd\x5d\xfc\xbf\x95\x77\x78\x9f\x55\x70\xc4\x83\xfc\x98\xcb\xb1\xf9\xe4\xf6\x7a\xd1\xc1\xce\x90\xa9\xc3\x07\x57\x4c\xf1\x90\x7e\xea\xaf\x47\x88\x99\x74\x3c\xfa\xa7\x4e\xe5\xab\x59\xc3\x88\xd1\x6b\x37\x12\xbf\x92\x3b\xa3\x8b\xc1\x7c\x48\xf3\x9d\x37\xfe\x93\xd6\xd9\xb1\x1e\x79\x22\x65\x90\x5a\xcd\x41\xf8\xf6\x98\xe7\x24\x2e\x00\xef\xd8\xba\x7c\xeb\x63\xee\x9e\x12\xbc\x2a\x97\x45\x70\x30\x6a\x02\x1c\x64\xd0\x88\x1e\xa4\xb8\xd9\xb6\x80\x2e\x46\x22\xde\xa1\x0c\x44\x6b\x39\xd3\xbe\x19\x22\x88\xf8\x39\x78\x68\x23\xd0\xa6\xd6\x5a\x38\xca\x59\x87\x32\xb5\xb5\xaa\xbc\xe3\x2e\xa6\x57\xf6\xe3\x18\xd5\xed\xc6\x13\xc5\xf1\xed\xfd\x49\x56\xfc\x4c\x45\x16\x3b\x72\xa2\xb9\x94\x02\x3f\x6a\x6d\xfe\xbc\xca\x32\x3c\xda\x9f\x77\x0c\x87\x7e\xef\xc9\xf9\x36\x56\xc3\x03\x2c\x48\xa2\x37\x0b\xa9\x1c\x2b\x01\x39\xb9\xe1\xa9\x71\xe6\x28\x4a\x7d\x40\xc2\x3d\x19\x50\x23\xa5\x36\xf6\xde\xcc\x89\xd9\x5e\xe3\x23\x6b\xdf\x73\x3c\x7e\xdf\x3d\x2d\xdd\x7f\x47\xa4\xb1\xde\x03\x7b\x81\x64\x8f\x7c\x67\x40\x31\x5a\xd8\x53\x71\x89\x8e\xdd\x6a\xfb\x27\x91\xf9\xe1\xe8\x6f\x67\x0a\x46\xa8\x24\x21\x79\xea\x8b\x24\x06\x80\xcc\x69\x63\x07\xae\xaf\x17\xa6\x7d\x70\xbe\x4d\xac\x26\xef\x8d\xd5\x60\x10\xfa\x7f\x46\x78\xa6\xc7\x09\x7c\xa4\x2f\x3a\xba\x26\xd1\x62\x24\x98\x10\x24\x6e\xf9\x10\xf5\x84\x6d\xb8\x54\xb4\x0d\x50\x7f\x30\x15\x8b\x72\xb5\xea\x74\x91\xfe\xfa\x63\x2d\xd5\x7d\xf2\x77\xef\x0b\xef\x65\xab\x7b\x0a\x6f\xf1\xa5\xab\x09\xdd\xd7\xf6\xdd\xf7\x75\x1c\xc4\xdf\xd0\x1b\xdf\x1a\x12\x6b\x2c\xa2\xa7\xf1\xc6\x5f\x0e\xf1\xc6\x3b\x6c\x17\xa4\xd8\xd1\x73\xda\xe1\x6f\x7e\x73\xd3\x7f\x1d\x37\xfd\xa0\x45\x81\xb4\x2e\x73\x59\x35\xd0\x7b\x5a\x78\x20\xf3\xa1\x27\x03\x86\x56\x21\xbb\x98\x3d\xdd\x53\xc3\x16\x3c\x79\x06\x2a\x44\xb8\x1d\x8f\xf7\x07\xee\x01\xbf\xdc\xe8\x8d\x60\x50\x95\x41\xe5\x1a\x46\x59\x8c\x13\x40\xab\xda\x0e\x06\xc4\x08\xe1\x51\xe0\x3a\x45\xe4\x4a\x1a\x8c\xea\xef\x94\x78\x64\xf6\xb6\x9a\xc4\xf0\xbd\x68\x7a\x40\xd2\xec\xa5\xb5\x0e\x2b\x58\x7f\x4f\xd9\x90\x8b\x15\xcf\x53\xc8\x30\xa1\x2d\x99\xf1\xe4\xde\xfe\x37\xb4\x8f\x6a\x24\x88\xa1\x53\x57\x40\xd8\x6b\x28\x4d\xaa\x04\xc9\xf0\x08\xcd\x18\xda\x87\x3f\x37\x8c\x27\xb9\x36\xe8\x34\xf2\x4a\xc0\x90\xe1\x0c\x06\xec\x83\x4c\x4b\x9e\x61\x8d\x9d\x9e\xf6\xb1\xf0\xb5\x3a\xe0\x28\x12\xed\x6a\xa2\xd9\x68\x3a\x90\xa3\x08\x86\x71\x3a\x53\x6f\x7d\xc0\xe4\x35\xbb\x33\x82\x50\x66\xc6\xd1\x9e\xf7\xb6\xf4\xd9\xcc\x87\x06\x26\xb0\xd3\x86\xe8\x19\x00\x07\xb2\x8e\x06\xc2\x74\x8f\xc4\x1e\x42\xcd\x63\x26\x65\x34\x31\xf0\x65\xa4\x1c\x1e\x86\x05\xdf\x09\xb9\xe0\xe9\x2e\x66\xe3\x93\x8a\x41\x94\x8e\xf1\x74\x23\x95\xdd\x04\x4e\x9d\xd2\xdf\x34\x8e\xa8\x1e\x21\xc7\x20\xe2\x94\x65\xb5\x43\xd0\x30\x25\xac\x71\xc9\x73\x99\xed\xe0\x3d\xb1\xcd\xc5\x49\x54\x4f\x34\x3f\x94\xf1\x04\x94\xfb\x44\x23\x52\x1a\xb1\x2c\x33\x7c\x75\xc0\xbb\xdc\x77\x80\x4e\xa4\xbb\xcb\x89\x35\x38\x0a\x92\x4e\x89\x2a\x46\x41\xc2\xa7\xc8\x1e\x69\x44\x2b\xc7\x45\xdc\x02\x5b\x64\x0e\x20\xf7\xb5\x7e\x74\xa9\x6e\x8f\x3c\x60\x99\xbb\x6e\xd7\x27\x8b\xb2\xf4\xdb\xa1\xee\x05\xe8\xce\xa9\x88\xf2\xcd\x87\xd6\xe8\x33\x91\xfa\xb3\x49\x2a\xe8\x0e\x69\xfa\x06\xcf\x75\x69\x30\x63\xce\xce\x25\xdc\x5f\xce\xd1\x51\x75\x5c\x33\xdf\x3b\x69\xb4\x62\xb3\xf2\xfb\xef\x7f\x2f\xd8\xf7\x90\x42\x48\xef\x11\x8c\x8f\x01\x5f\x24\x96\x0e\x47\xb6\xaf\x40\x20\x99\x64\x63\x46\x58\x1b\x44\xd5\xe5\xeb\x03\xc8\x93\x27\x6b\x66\xca\x05\x22\x18\x39\x85\x58\xb8\xf2\xbc\xd3\xef\x35\x80\x11\xf1\x66\x77\xad\xff\x5f\x12\x50\x40\x95\x8b\x99\xda\x6a\xa4\x46\x07\xe8\xe7\x42\xb0\x0d\xcf\xef\x41\xb4\x14\xdd\xf3\x40\x05\xff\x9d\x14\xd3\x6a\x78\xe1\x65\xa5\x3d\x14\xd0\x41\xca\x63\x96\x97\x4a\x39\x15\x26\x66\x0d\xd3\xe0\xeb\x9f\xcc\xd4\xa2\x8c\xdf\x9e\x95\x60\x41\x58\x5a\x10\x30\x80\xc3\x56\x03\x57\x08\x35\x8a\x9b\xd0\xae\x29\x1b\x10\x35\x98\xa9\x27\x0e\x1b\xec\x73\xf8\x7d\x22\x1b\xcc\x39\xf3\xa2\x7c\x05\xe8\x6e\x2c\x14\x0c\xd3\x81\xcb\x1e\x8c\x9c\x4f\xa0\x16\x3c\x61\x3f\xca\x07\x31\x61\x37\x5b\x9e\xdf\x4f\xd8\x5b\x0c\xff\xfd\x49\x2f\xda\x7c\x78\x0d\x42\x89\xa3\xfd\x78\x87\xb9\xb1\xfa\x88\x56\xda\xad\xff\x9f\x1b\xc4\x00\xac\x2b\xf6\xfd\x3f\x13\x91\xd7\xc1\xf5\xf1\xf7\xee\x89\xd8\x13\xa6\xfe\x0d\xbc\xf6\x77\xf9\x2a\xee\xa7\xf9\xf8\x5d\xfc\xbf\xee\xfc\x72\x16\x17\xd8\x9e\x74\xca\xb5\xa2\xd2\x7e\x5d\x89\xcd\x32\xad\x5f\xca\xcd\xfc\xe6\x61\x5b\x81\xd2\xc7\x53\x9f\xda\x3e\x02\x74\x4f\x3f\x75\xe3\x75\x9e\x69\x53\xe6\xfd\x9b\xff\xba\xda\x6a\x57\x7b\x0b\xd5\x27\x2c\xb6\xcd\x42\x00\x6b\xc1\x50\xf8\x09\x7e\x6d\xfe\x1f\x7a\x31\x07\xac\xd5\x71\x3b\xbc\xad\x38\x4f\x20\xac\x93\x4a\x53\xc3\x0d\x79\xb3\x15\xc0\x38\x15\x4c\xd1\x10\x10\xa8\xad\x30\xef\x1a\x99\x29\xc7\xb9\x8e\x19\xb3\x79\x2e\x80\x1c\x3a\x17\xa0\x6c\xc7\xb6\x3c\xf7\x80\x07\x67\x11\x45\x2f\x9f\x00\x8a\x89\xb3\xdc\x20\x59\x95\xde\x5b\x0b\x21\x94\x1f\xed\x31\xa6\x04\x10\x21\xd7\x46\x9f\xd0\x6e\x8f\xc2\x51\xef\x77\xa8\x70\x36\x7e\x17\xbd\x05\xc1\xe4\x5e\x89\x22\x3a\xcd\x6b\xa6\x45\x65\x6b\x56\x22\x54\xbf\x2a\xc4\x7f\x6b\x0c\xba\x46\xce\x55\x71\xa0\x0c\x8a\xe9\x3d\x85\xbf\xfc\x13\x2f\xd6\xf8\xa0\xdd\xe8\x42\xe0\x99\x89\x2c\x41\xb8\x5e\xd0\xeb\xbc\xc8\xf4\x02\x24\xe5\xec\x27\x5d\x6f\xc3\x84\xb6\xf6\xa0\xa1\x6b\x4e\xd8\x90\x93\xc1\x9e\x26\x90\x69\x9b\x0b\x03\x84\x2b\xcd\x28\xd5\x50\x7c\xf2\xb8\x47\x77\xb3\xb9\xf6\xd0\x7f\xdb\x78\x6c\x37\x45\x19\xec\xb6\x06\xb0\xea\xc5\x01\x19\x34\x0d\x89\x0b\x22\x2b\xa6\x30\x30\xf2\x95\xd6\xfa\xeb\x94\xcb\x67\xea\x0c\x3f\x89\x2e\x01\x1e\x54\x96\x3c\x1e\x94\x44\x6a\xfd\xfe\xc3\xf4\x55\x76\x16\x23\x10\xc9\x43\x30\x09\xbe\x4c\x78\x0c\x4c\x20\xab\x51\x15\x32\x17\x4c\x01\x0a\x61\xa6\x4c\xb9\x38\x09\xc4\x24\xf6\x15\xf7\x00\x64\x3a\x46\x6c\x39\x3c\x65\x80\xaf\xe8\xa4\xe5\x1a\x46\xcf\x64\x50\x4b\x71\x04\x7e\x3c\xa3\xc3\x1f\x72\x25\x31\x33\xde\xf7\xdd\x97\x63\x1f\x6b\xf0\x8a\x76\x70\x25\xbc\xec\xfa\xce\x0b\xd0\x73\x82\x0c\xcc\x6b\x44\x51\x7c\xeb\x0b\x3c\x8e\x86\x0e\xbd\xba\x21\x9e\x36\x53\xff\xbf\xbb\x1b\xba\x41\xc5\x23\x56\xba\x1d\x19\x7b\x45\x75\x82\x9d\x2b\x6d\x73\x4f\xc8\xc8\x08\xec\x6e\x54\x63\xc9\xb7\x95\xca\x1d\xae\x25\x16\xf5\xd0\x94\x2e\x0b\x9f\x3e\x48\x13\xd1\x7d\x43\x6d\x37\x42\xb0\xd7\xb9\x58\xbe\xfe\x9c\x8b\xe5\xdc\xcd\xf4\x14\x3a\x34\xb5\x3d\x6a\x92\x7e\x0f\x5c\x1c\x66\xab\x55\x3b\xf9\xe1\x1e\x72\xd2\x5a\x97\xb0\x9c\xa8\x4f\x72\xc9\x82\x9c\xa7\xed\x0f\x30\x40\x88\xb4\xce\x46\xde\x68\xd9\x57\xbf\xe6\xba\x90\x60\x03\xa0\x56\x1d\x32\x98\x7f\xff\xd7\x5b\x65\xcc\x86\x5c\x6f\xb7\x55\xc8\x8c\x3b\xec\xb9\xf2\x17\x5e\x37\x2e\xf4\xeb\xa2\xd3\x61\x02\xcd\x96\x3f\x2a\xe2\xb1\x19\xe5\x7a\x1a\x76\xad\xd5\x00\x44\xd1\xb5\xd6\xc0\xc0\x85\x5d\xa6\x9c\xa7\x4f\x7a\x25\xc5\x49\x24\xb7\xce\xb3\x2c\xd6\x54\x08\x91\xb6\x99\x0a\x79\xa9\xd6\x6a\xcd\x32\xe7\xc2\xab\xd8\x1b\xc4\x5a\x94\x42\x42\xb0\x98\x38\xd2\x15\xa2\x2b\xa4\x78\xd8\xc9\x82\x83\x96\xaf\x57\xd1\xda\xb7\x9b\x9f\xea\x11\xf9\x2b\xcb\x8b\xde\x13\x79\xc6\x6a\xe7\xf7\xa2\x01\x67\xde\xdb\xd6\xf6\x48\x47\x44\x29\x01\x9b\xd9\x9d\xb2\x09\xcf\x73\x87\xf2\xa7\x5a\x99\x7d\x2b\x2d\x79\x52\x71\x73\x76\xb4\x73\x2d\x92\xfb\xad\x96\x6a\xf4\x59\x54\xa1\xb8\x80\xc5\x5e\xb0\x50\x9a\x7f\x1d\x0e\xba\x1c\x2b\xf6\x24\x76\xc4\x00\xbc\xc2\x41\x43\x03\x19\x1b\x67\x5e\x2b\xb9\x7b\xd9\x3d\xb5\xff\x42\x84\xbb\xe1\x19\x7c\xb1\x2d\xf1\xa1\xda\xad\xc2\x5b\x1c\x3b\x15\x26\x50\xde\xc8\xfe\x1a\x38\xd8\x9c\x55\x28\x0c\x5b\x87\x14\x5c\x90\xbf\x79\x86\x7e\xf3\x0c\xfd\x0f\xf7\x0c\x7d\x4d\xb7\x10\x60\x63\x9e\xd3\x27\xd4\x13\x20\x3f\x62\x3b\xfa\x5a\x47\xe7\x38\xb6\x5a\xc7\x93\x48\xf6\x39\xca\x74\x6c\x02\xfd\x1d\x11\x86\x1d\x9f\x05\x4f\xee\x85\xea\x8c\xd1\x3b\xfa\xa2\x4e\x05\xce\xa7\x45\xb0\xb4\xb1\x2f\x45\xbf\xee\x87\xb2\x04\xa8\x13\x91\x06\xb7\x11\x82\xd8\x7d\x02\xb6\xa7\xed\xf8\x09\x80\xc6\x74\xee\x89\xad\x0d\x65\xe1\x61\x30\x12\x69\x92\x10\x2c\x55\xa3\x82\x1e\x8a\x89\x73\x15\xcf\xb7\x5a\x67\xad\xd0\xb8\x27\x1d\xc0\x46\xa2\xcc\xd0\xc1\xbb\x44\x63\xd4\xc4\x80\x31\x37\x8a\x21\xe9\x22\xa4\x68\x60\x3e\x06\x68\x61\xc0\x6a\x4a\x4b\xc8\xa5\x0c\xc3\x11\x09\xec\x71\xef\x70\x21\x8c\xd8\x42\x24\x1c\xa4\x3f\x1d\x78\x2f\xe1\x3e\xfb\x24\x26\x45\x6a\xa4\x83\x98\x66\x3d\x1d\x51\x4b\x28\x77\x2e\xdb\x84\x2f\xc6\x6e\xae\x9a\x85\xe0\xa0\xe5\xd8\x72\x87\x24\x71\xb4\x8b\xfb\x24\x6d\x1d\xc7\xf4\x1c\xf4\xf7\x86\xdd\x70\xad\xe7\xce\x25\x15\x74\x0e\xe5\x0c\x3f\x48\x7f\x84\x74\x9c\xcd\x40\xe4\xce\x4c\x9d\x79\xa5\xd3\x80\xfd\xf2\xc8\x3d\x0c\x97\x22\x66\xb1\x31\x35\xc8\xe5\x18\x5e\x2e\x13\x66\xca\x64\x0d\x6c\x95\xd5\x73\x2a\x3e\xb7\x9a\x3b\x76\x32\x53\xf6\x41\x04\xae\x96\x0d\x87\xbc\xf8\x47\x6b\xac\x1a\xf9\x9f\xc2\xc3\xb3\x88\xbc\x2b\x46\x64\xe1\xc3\x49\xab\x56\xf4\x9a\x23\x0e\x45\x80\x45\xc0\x94\x94\xdb\x94\x17\x62\x3a\x0b\x68\x1b\x89\x9e\x4e\x87\xf2\x20\x93\xd9\xc4\x1d\x8b\x71\x8c\xb5\x93\x36\x93\x4b\x91\xec\x92\x86\x0e\x50\x3f\x4d\xc4\x6f\xcf\xb6\x5f\xd7\xb3\x0d\x59\x76\x31\x67\x70\xcc\xd0\x52\x53\xaf\xc3\xcf\x8f\x1b\x5c\xc1\xa2\x96\x98\x11\xe3\xfc\x15\x9f\x9d\x2d\x36\xf0\x38\x7b\x7e\xf0\x3b\xa8\xff\x3a\x0b\x0f\xdb\x70\x59\x47\x14\x08\x0d\xb3\x30\x0e\x2e\x16\xf1\xd2\xb1\x06\xed\xe0\xb0\x7e\x37\xcb\xcc\xaf\x0a\x9c\x34\xe4\xe1\x6a\x2d\x6e\x0f\x57\xba\x72\x96\xb6\x12\x78\xdf\xf5\x58\xdc\x11\xab\x3b\x2f\x5e\x18\x3f\xea\xd5\x13\xd0\x61\xff\xdf\x4b\x53\xfc\x54\xd3\x0c\x3d\x4c\x74\xf4\xd9\x4c\x53\xd7\x54\x6c\xe6\x50\x8b\xea\xba\x6a\xf3\xe8\xa5\x5b\x73\xf0\x78\x72\x2a\x71\xb6\xdd\x63\xde\x41\x9f\xfd\x78\x7d\xc6\xab\xe9\x31\xe7\xdb\xad\xc8\xdd\x45\xde\xb0\xb5\x40\x72\x0d\x6a\x01\xcd\xc4\xb5\x40\xad\xee\xda\x2b\xd7\x1e\x25\xb5\xa2\xe1\x6b\x30\x74\xd3\xf6\x99\xbb\x2a\xb3\xac\x73\xe6\xf6\x2b\x39\x5d\xdd\xbd\x7f\x3f\xff\xe9\xec\xfd\xdd\x85\xeb\x7e\xab\x32\x52\xf4\xb5\xce\x31\xf1\x2d\xa1\x31\x09\xda\x8b\xb6\x5a\xe1\xf4\xc2\x75\xe8\x35\x3a\xb9\xca\x2c\xab\xaa\x66\xcd\xd4\x67\x2a\x07\x60\xda\xa8\x08\x6a\xc7\x8d\xf5\x0e\x5c\xb5\x7e\xf8\xda\x67\x5b\xf8\x67\xfc\xed\x09\x0b\x9d\x78\x0d\xda\x8e\xa4\x19\xd7\x3e\xae\x94\x0d\x73\xc4\x76\x40\x30\x70\xd7\x76\x78\x6a\x5d\xc0\xc3\xb6\xc7\x9d\x02\x46\x72\x91\x3a\x39\xbf\x27\xd9\x1d\x38\x76\x9f\xab\x71\x6a\x7f\x96\xa7\xf8\xa4\x81\x72\x27\xa8\xe6\x06\x1a\xd5\x41\xf0\x6c\xa6\xd0\x07\x6a\xdb\x54\xe8\xee\x36\xb1\x4b\x32\x6f\x33\xae\x56\x25\x5f\x59\xeb\xd6\x55\x3e\x53\x1b\xb9\x5a\x23\x0f\x48\xb9\x0d\xf8\x64\xce\x14\xd0\xc5\xd4\x96\x50\x0d\x9f\x2c\xd5\x4c\x51\x9f\xd4\x2a\x14\x8f\x58\xd9\x3f\xdd\xf8\xee\x10\x28\x1d\x0b\x22\x41\x3a\x35\x53\x38\xb9\xc8\x4f\xe2\x22\x21\xf0\x62\xe1\x45\x7d\xe9\x72\x88\x5d\xa2\x4e\xbf\x3d\xd3\x57\x10\x93\x99\x29\x9f\xa2\x8b\x9e\x23\xea\x43\x24\x5c\x82\x4d\xda\x7f\x9e\xb8\xc9\x70\x7b\x82\xda\xd6\xbe\xea\x8f\xbe\x03\xec\x86\x9b\x8f\x50\x9f\x6e\x1e\x63\x03\xbd\x85\x3c\x3a\x38\xba\x78\x1b\x20\x2f\xbb\xbd\x35\xae\x5f\xf8\x9d\x4e\x68\xab\x2e\x17\xd9\x88\x26\xe1\xf7\x7b\x1b\x85\x47\x72\x7f\xa3\x06\x3c\x87\xaf\x6b\x5b\xcb\x2e\xd3\xbe\x6a\x17\x5a\x77\xcc\xcb\x13\x06\x14\x2b\x8d\xa2\x1f\xec\x1b\x8c\x32\x29\x0e\x59\x2f\x03\x92\x15\xeb\x43\xe4\x4e\x9f\xbe\x06\x65\xd2\x1c\xd4\x9c\x60\x3f\x0d\x6e\x91\xb7\x10\xe8\xb2\x1b\x75\xc2\xd2\x3d\x57\x39\x60\x3b\x8e\x49\x8a\x27\x39\x19\x67\x89\xc7\x8b\xdd\x3c\xa8\xb1\x6c\xd7\xff\xc4\x2f\xa2\x49\x98\xb9\x09\x34\x32\x29\x73\x63\x8f\x4b\x3a\xef\xe8\xd4\xd6\x39\xe3\x33\xe5\x52\xd5\xdc\x71\x7c\xe6\xc0\xb9\xb9\xff\x2b\x26\x80\x6e\x91\x4f\x1f\x2c\xd6\x82\x69\x25\xdc\x69\x38\x53\x4e\xfb\x7b\xc2\xf8\xc2\x38\x49\x6d\xae\x76\x5e\xe7\x5a\x7a\xfa\x22\xae\x18\xa0\x9e\xf7\x9f\x79\x35\x33\xa0\x72\xcf\xff\xce\xfe\xdf\x7f\xff\xee\xff\x05\x00\x00\xff\xff\xf8\xac\xeb\xb9\x8c\xb7\x04\x00") +var _adminSwaggerJson = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\xfd\x7b\x73\xeb\xb8\x95\x2f\x0c\xff\x3f\x9f\x02\x67\xcf\xa9\xea\xee\x44\xb6\x3b\xc9\x4c\xde\x94\xa7\x4e\xbd\x8f\xda\xd6\xde\xad\xd3\xbe\xc5\x97\xee\xe9\x67\x94\x52\x43\x24\x24\x21\x26\x01\x06\x00\xed\xad\x4e\xe5\xbb\x3f\x85\x85\x0b\x41\x8a\x94\xa8\x8b\x6d\x79\x37\x67\xaa\xd2\xde\x22\x89\xeb\xc2\xc2\xba\xfe\xd6\x3f\xff\x0d\xa1\x0f\xf2\x19\xcf\x66\x44\x7c\x38\x45\x1f\xfe\x78\xfc\xed\x87\x9e\xfe\x8d\xb2\x29\xff\x70\x8a\xf4\x73\x84\x3e\x28\xaa\x12\xa2\x9f\x4f\x93\x85\x22\x34\x4e\x4e\x24\x11\x4f\x34\x22\x27\x38\x4e\x29\x3b\xce\x04\x57\x1c\x3e\x44\xe8\xc3\x13\x11\x92\x72\xa6\x5f\xb7\x7f\x22\xc6\x15\x92\x44\x7d\xf8\x37\x84\xfe\x05\xcd\xcb\x68\x4e\x52\x22\x3f\x9c\xa2\xff\x31\x1f\xcd\x95\xca\x5c\x03\xfa\x6f\xa9\xdf\xfd\x1b\xbc\x1b\x71\x26\xf3\xd2\xcb\x38\xcb\x12\x1a\x61\x45\x39\x3b\xf9\xbb\xe4\xac\x78\x37\x13\x3c\xce\xa3\x96\xef\x62\x35\x97\xc5\x1c\x4f\x70\x46\x4f\x9e\xfe\x70\x82\x23\x45\x9f\xc8\x38\xc1\x39\x8b\xe6\xe3\x2c\xc1\x4c\x9e\xfc\x93\xc6\x7a\x8e\x7f\x27\x91\xfa\x17\xfc\x23\xe6\x29\xa6\xcc\xfc\xcd\x70\x4a\xfe\xe5\xdb\x41\xe8\xc3\x8c\xa8\xe0\x9f\x7a\xb6\x79\x9a\x62\xb1\xd0\x2b\xf2\x91\xa8\x68\x8e\xd4\x9c\x20\xd3\x0f\x72\x4b\xc4\xa7\x08\xa3\x53\x41\xa6\xa7\xbf\x08\x32\x1d\xbb\x85\x3e\x36\x0b\x7c\x01\xa3\xb9\x49\x30\xfb\xe5\xd8\x2e\x13\xb4\xcc\x33\x22\x60\x6e\xc3\x58\xb7\xfe\x89\xa8\x3e\x34\x5b\xbc\x1f\xbe\x2d\x88\xcc\x38\x93\x44\x96\x86\x87\xd0\x87\x3f\x7e\xfb\x6d\xe5\x27\x84\x3e\xc4\x44\x46\x82\x66\xca\xee\x65\x1f\xc9\x3c\x8a\x88\x94\xd3\x3c\x41\xae\xa5\x70\x30\x66\xaa\x7a\x63\xf1\x52\x63\x08\x7d\xf8\xdf\x82\x4c\x75\x3b\xff\x7e\x12\x93\x29\x65\x54\xb7\x2b\x0d\xfd\x04\xa3\x2d\x7d\xf5\xaf\x7f\xab\xfb\xfb\x5f\xc1\x8c\x32\x2c\x70\x4a\x14\x11\xc5\x8e\x9b\xff\xab\xcc\x45\xef\x91\xee\xbc\xd8\xc7\xea\xc0\x2b\xb3\xbd\xc2\x29\xd1\x7b\xa2\x77\xca\x7e\x01\x7f\x0b\x22\x79\x2e\x22\x82\x26\x24\xe1\x6c\x26\x91\xe2\x4b\x6b\x40\xa1\x05\x4d\x5e\xd5\x27\x82\xfc\x23\xa7\x82\xe8\xbd\x52\x22\x27\x95\xa7\x6a\x91\xc1\x20\xa5\x12\x94\xcd\xc2\xa5\xf8\x57\xaf\xd5\xd4\x0c\x55\x6e\x30\x33\xf3\x41\xe3\xc4\x46\xac\xef\x5e\x89\x30\x43\x13\x82\xf4\x59\xa4\x31\x11\x24\x46\x58\x22\x8c\x64\x3e\x91\x44\xa1\x67\xaa\xe6\x94\xe9\x7f\x67\x24\xa2\x53\x1a\xb9\x35\x3b\x9c\xb5\x81\x3f\x57\xaf\xcc\x83\x24\x42\x0f\xfc\x89\xc6\x24\x46\x4f\x38\xc9\x09\x9a\x72\x51\x5a\x9e\xe3\x11\xbb\x9f\xeb\x75\x48\x27\x94\xc1\xc9\xd3\x6b\xe9\x28\xe4\xf7\x6e\xb9\x7e\x8f\x74\x7f\x28\x67\xf4\x1f\x39\x49\x16\x88\xc6\x84\x29\x3a\xa5\x44\x56\x5b\xfb\x3d\x87\xfe\x71\x82\x8e\x90\x5e\x67\x22\x14\xac\x37\x67\x8a\x7c\x56\x12\x1d\xa1\x84\x3e\x12\xf4\xd5\x05\x95\x0a\xf5\x6f\x86\x5f\xf5\xd0\x57\xe6\xbc\x20\xe0\x4d\x5f\xbd\xc2\x0a\xfb\xbf\xff\x16\x1c\x3d\x85\x67\xd5\x43\xf7\xa1\xaf\x4f\xf3\x9d\xb9\x1a\x8a\x16\xfe\xf6\x6f\x61\x3b\x76\xbf\x56\xf3\xdb\x82\xd9\x5a\x4e\xdb\x96\xbf\xc2\x32\x95\x59\xab\xd4\x3b\xb4\x2b\x67\xd5\xed\x56\x59\xab\x7c\x5f\xbc\x55\x4f\xe1\xa5\xf9\xeb\x2e\xcc\x15\x2b\xa0\x7a\x4c\x99\x39\x24\xfe\xcc\x08\xa9\xcf\x89\xa3\xde\x03\x61\x29\xbb\xf0\xda\x60\x66\x01\xbb\x75\x5c\x34\x58\x95\x03\x9c\x77\x42\x53\xba\x6e\x7f\x87\x2c\xd6\x22\x97\x65\x76\x2c\x4f\x27\x44\xe8\x65\x70\x6c\x0f\x66\x3b\xd1\x6c\x50\xe5\x82\x91\xb8\xc5\x34\xff\x91\x13\xb1\x58\x31\xcf\x29\x4e\x64\xd3\x44\x29\x53\x44\xcb\xb7\x95\xc7\x53\x2e\x52\xac\xec\x0b\x7f\xfe\x8f\x4d\x17\x42\xf1\x47\xb2\x6e\xff\x87\x66\x37\x23\x2c\x81\x0c\xd2\x3c\x51\x34\x4b\x08\xca\xf0\x8c\x48\xbb\x22\x79\xa2\x64\x0f\x5e\xd3\x32\x35\x11\x47\xfe\x06\x82\x1e\xdc\xcd\x9b\x4b\xf8\x05\x4d\xbd\x00\xc9\xc8\x67\x05\x2d\x8d\x18\xdc\xbd\xb0\x44\xe1\x8d\xf2\x02\x4b\xb9\x1d\xcd\x48\x2e\xd4\x78\xb2\x38\x7e\x24\x4b\xfd\x36\x52\x0e\x66\x08\x2b\x25\xe8\x24\x57\x44\xcf\x5b\xb7\xe1\xee\x4e\x60\x8f\xe6\x82\x6e\xc3\x1a\xde\x6e\xc2\x31\x15\x24\x82\xb9\x6d\x72\x60\xfc\x57\x7a\xde\x5a\x7f\x59\x98\xd9\x3f\x92\x05\xc8\x23\x35\x2b\xe0\xb7\x7c\xc4\x46\x0c\x1d\xa1\xf3\xc1\xdd\xd9\xe0\xea\x7c\x78\xf5\xe9\x14\x7d\xb7\x40\x31\x99\xe2\x3c\x51\x3d\x34\xa5\x24\x89\x25\xc2\x82\x40\x93\x24\xd6\x32\x87\x1e\x0c\x61\x31\x65\x33\xc4\x45\x4c\xc4\xcb\x2d\x63\xe5\x29\x61\x79\x5a\xb9\x57\xe0\xf7\x62\xf4\x95\x2f\xb4\x88\xe1\x1f\x95\x9e\xfc\x6d\x69\x81\x61\xc6\xba\xef\xa0\xb5\x57\x13\x6a\xa2\x39\x4d\x62\x41\xd8\x89\xc2\xf2\x71\x4c\x3e\x93\x28\x37\x77\xf2\x3f\xcb\x3f\x8c\xb5\x64\xca\x63\x52\xfe\xa5\xf4\x8f\x42\x14\xda\xf8\x53\xaf\xa5\x6e\xfc\x25\xe8\xb4\xed\xbe\x83\x5f\x68\x5c\xfb\x36\xfc\xb2\x66\x0e\xee\x9d\x15\x83\x75\xaf\x34\x8e\xca\xbd\x60\x25\xbe\xda\x77\x04\x51\x62\x31\xc6\x4a\x91\x34\x53\x1b\xea\xeb\x18\x25\x5a\xae\x5c\x25\x47\x5e\xf1\x98\x0c\x5c\x7f\xbf\x20\x23\xce\x92\x18\x4d\x16\x96\x6b\x4d\x89\x20\x2c\x22\xcd\x2d\xdc\x63\xf9\x58\xb4\xb0\x4e\x18\x2d\xf5\x27\x3f\x72\xa1\x3f\x7f\x0f\x02\x69\x69\xe0\xaf\x21\x93\x6e\x7b\xe2\xbe\x38\x0b\xc1\x96\xfc\xa3\xb3\x27\xec\xbe\x92\x6d\xad\x0f\x5c\x20\xb9\x90\x8a\xa4\x6b\xed\x10\xef\x67\x21\xec\x05\x71\xa8\x03\xae\xdc\x51\xbf\x81\x53\x5f\xbe\x71\xbb\xe3\xbd\xc1\x92\xed\xcb\x8a\x78\xe8\xf3\x74\x3e\x9c\xd5\x53\xbd\x73\xdb\x17\x38\x31\xde\xc5\x34\x4b\xb2\xe0\xbe\x07\xf9\x42\xe6\x86\xc6\xbd\x72\xab\x3d\x86\x01\xac\x51\x34\xcb\x76\x68\x7f\xfe\xf4\xa7\xa1\x85\xc6\x98\xe3\xd4\x9c\xca\xc0\x58\x85\x22\x2e\x8c\x2c\x18\xdb\xf3\x6e\x74\xcd\xfe\x7d\xff\x6e\x70\x7f\x8a\xfa\x28\xc6\x0a\xeb\x03\x2e\x48\x26\x88\x24\x4c\x81\x1e\xaf\xbf\x57\x0b\x94\xf2\x98\x24\x46\xe3\xfc\xa8\x25\x5f\x74\x8e\x15\x3e\xc3\x0a\x27\x7c\x76\x8c\xfa\xf0\x4f\xfd\x31\x95\x08\x27\x92\x23\xec\xc8\x8a\xc4\xae\x09\xcc\x62\xc7\x5a\x30\x8a\x78\x9a\xd1\xc4\xdb\xe0\xbd\x71\x85\xb2\x98\x3e\xd1\x38\xc7\x09\xe2\x13\xcd\x55\xb4\x86\x3c\x78\x22\x4c\xe5\x38\x49\x16\x08\x27\x09\xb2\xdd\xba\x17\x90\x9c\xf3\x3c\x89\x75\xbb\x6e\x94\x92\xa6\x34\xc1\x42\xab\xe0\x66\xb4\xd7\xb6\x2d\x74\x3f\x27\x7e\xac\x30\x2e\xbd\x9a\x29\x7e\x24\x12\x51\x85\x32\x2e\x25\x9d\x24\xc5\x99\x7f\x18\x22\x18\xf7\xd9\xc5\x10\xf4\xf9\x48\x21\x6e\x78\xa8\xeb\xdc\xda\x6f\x5c\x8f\x29\x66\x8c\x40\xc7\x5c\xcd\x89\xb0\xdd\xdb\x97\xdf\x5a\x35\x7f\xb8\xba\xbb\x19\x9c\x0d\x3f\x0e\x07\xe7\xcb\xba\xf9\x7d\xff\xee\x87\xe5\x5f\x7f\xba\xbe\xfd\xe1\xe3\xc5\xf5\x4f\xcb\x4f\x2e\xfa\x0f\x57\x67\xdf\x8f\x6f\x2e\xfa\x57\xcb\x0f\x2d\x59\xb5\x56\xf3\xc3\x91\x6d\x78\xb6\x3a\x9b\xe6\x4b\xd9\x34\x7b\x5f\xae\x51\x73\x4a\x13\xd0\x41\x5b\x1b\x34\xbd\x0d\xc1\x7e\x89\x32\x2c\xa5\x91\x8c\xcc\x08\x8e\x47\xec\x92\x0b\xcd\xc0\xa6\x5c\xf3\x08\x2d\x3d\x29\x91\x47\x8a\xb2\x99\xff\xe8\x14\x8d\xf2\x6f\xbf\xfd\x53\x74\x41\xd9\x23\xfc\x45\x0e\x71\x71\x3a\x8b\x6f\x67\xf1\xfd\x6d\x59\x7c\xb5\xe8\x73\x12\x1a\x7a\xf7\x1b\x32\xa4\x85\x0b\x96\xe5\x0a\x44\x09\x9e\x2b\xfd\xa7\xee\x12\xc8\x63\x45\xe0\x50\x3b\x83\xe2\x27\xa2\xfc\x8b\x5a\xb4\x79\x0f\x76\xc4\x9f\xb8\x78\x9c\x26\xfc\xd9\x0f\xfc\x13\x51\x7a\xec\xb7\xb6\x97\x2e\x94\xa8\x0b\x25\x7a\xdb\x50\xa2\x83\x32\xe6\xbd\x3c\xf3\x2b\x5b\xfe\x0c\x07\x6c\xf0\x64\x35\x3a\xaa\x1a\xfc\x50\x81\x9b\xe9\x55\xb8\x66\xd9\x99\xb3\x86\x73\x96\x5e\x7e\x2f\xdc\xb3\x34\xe8\xd7\xe7\x9c\xbf\x09\x7f\x4b\xe7\x4e\xd9\x72\xa1\xde\x25\x83\x6d\x79\x77\xbc\x9a\x33\xe4\xe5\x19\xfe\x52\x6c\xc3\x26\xc1\x0c\x1b\x44\x2f\xb4\x0e\x57\x58\x13\x9f\x50\x1b\x90\x50\x17\x81\xb0\x1c\x72\x50\x1b\x63\xb0\x5b\x50\xc1\xb6\x77\x53\xfb\x30\x81\x4f\x44\x95\x5e\x7e\x2f\x77\x53\x69\xd0\xaf\x7f\x37\xfd\x46\xa3\x03\xba\x70\x80\x17\x5c\xba\x2f\xfd\x46\x3b\x5c\x87\xff\x6f\xc0\xc3\xdf\xb9\xf4\x37\x5a\xa3\x2f\xcb\x87\xff\xa5\x3a\xed\xdf\xa7\x97\xbe\x73\xcb\x77\x6e\xf9\xb7\xf0\x9f\xbc\x3f\xb7\xfc\xcb\xaa\xa7\xc5\xf1\x1a\x3b\x5a\xb0\xfa\x5a\x70\x28\xff\xd5\xc2\x49\x03\x7f\x39\x95\x6f\xd3\xa0\xf1\x46\x1d\xee\xbc\x18\xdf\x00\x8e\xd0\x2f\x96\x90\xd6\xa8\x73\x4b\xdf\xbd\x07\x75\x6e\x79\xd0\x2f\xaf\xc3\xbd\x19\xf3\x7d\xa1\xcb\xf3\x9d\xb0\x81\xcd\x6f\xcb\x2f\x58\x26\xef\x64\xf1\x97\xcf\xc6\x3f\x98\x09\xbd\x1f\xd9\xfb\x0d\x2e\xde\x96\xb7\xee\xde\x73\xb2\x6a\xae\xd9\xe0\x76\x5a\x97\x61\x55\xfd\x9a\x12\xf9\xc7\x77\x79\xdf\xbe\x46\x92\x55\x77\xe1\x76\x17\xae\x6d\xaa\xbb\x70\xbf\xe0\x0b\xf7\xe0\xe0\x6f\x0e\x26\x02\xb4\x0b\x22\xef\x80\x31\xba\x18\xf2\x3d\x2e\x4e\x17\x43\xde\xc5\x90\xff\xc6\x62\xc8\x77\xd1\x9e\xb6\xc5\xa2\x7c\x0b\x3d\xaa\x53\xa3\x3a\x35\x2a\xfc\xbd\x53\xa3\x3a\x35\xaa\x53\xa3\xbe\x70\x14\xd1\x4e\x87\x6a\xbf\x10\x9d\x0e\xd5\x7a\xa9\x3a\x1d\x6a\xc5\xe2\x74\x3a\x54\xa7\x43\xfd\xb6\x74\x28\xf2\x44\x98\x92\x90\x8c\x16\x6a\x14\x1f\x32\x2e\x9b\x35\xa1\x90\x3b\xd4\x68\x41\xd0\x66\x39\x29\x0c\x02\x97\x7e\x41\x73\x2c\x11\x8f\xa2\x5c\x54\xce\x40\x55\x0f\x3a\x13\x04\x2b\x02\x2d\xe8\x0f\xdf\x83\xfe\xb3\x3c\xdd\xd7\x8a\xc1\x9f\xf0\x78\x89\xda\xcd\x41\xa8\x7b\xb2\x5a\x1e\xd9\xdb\xd4\xff\x91\x93\x76\xea\xdf\x0b\x12\xb5\xc2\xf2\x71\xcf\x44\x5d\xca\xb5\xd8\x8a\xa8\xa1\x85\xf7\x42\xd4\xcb\xd3\xfd\xcd\x10\x75\xdd\xd4\x0f\x81\xa8\x9f\x6d\x1e\xff\x9e\x09\x7b\x09\x1e\x60\x2b\xe2\xf6\xad\xbc\x17\x02\xaf\x9f\xf6\x6f\x86\xc8\x9b\xa6\xff\xb6\x84\xee\x53\x24\x5b\x93\xf8\xbd\xa0\xb3\x99\x56\x33\x40\xc3\xd3\xa4\xb8\xbe\x46\x50\x91\x14\xb8\x96\xac\xfd\xab\xef\x81\xa4\xfd\x60\xcd\xd8\x7f\x33\xb4\xbc\x34\xef\x03\x21\xe2\x13\x41\x22\xfe\x04\xf5\xc2\xda\x11\xf3\x2d\x01\x0a\x06\x7e\x9d\x09\xf2\x44\x79\x2e\x93\xc5\x91\xc8\x19\x72\xcc\x1f\xf9\xe6\x8d\xb5\xfa\x99\x26\x09\xe2\x4c\xeb\x5f\x0a\x0b\xe5\x1e\x6b\xfd\x5b\xf0\x14\x4e\x45\x82\xa5\x42\x8f\x8c\x3f\x33\x34\xc5\x34\xc9\x05\x41\x19\xa7\x4c\x1d\x8f\xd8\x90\xa1\x5b\x33\x46\xc8\x1b\xe8\xa1\x5c\xea\xb3\x14\x61\xc6\xb8\x42\xd1\x1c\xb3\x19\x41\x98\x2d\x6c\x02\x6e\x41\x19\x88\x0b\x94\x67\x31\xd6\x8a\xef\x9c\x54\xa3\xf4\xfc\x18\xc1\x7c\x47\x25\xa2\x12\x91\xcf\x4a\x90\x94\x24\x0b\xdd\x87\xa6\x7d\xc5\x91\x5d\x1f\x33\x54\x9b\xce\x47\x84\xe0\x42\x42\xc6\xc1\x64\xf1\x2b\x66\x8a\x32\x82\x40\x51\x92\xc6\x34\x77\x84\x2e\xb8\x04\xb3\xcd\x0f\x7f\x91\x28\x4a\x72\xa9\x88\xe8\xa1\x49\x3e\x93\x5a\x53\xcc\x12\xac\xa6\x5c\xa4\x7a\x84\x94\x49\x85\x27\x34\xa1\x6a\xd1\x43\x29\x8e\xe6\xa6\x2d\x58\x03\xd9\x1b\xb1\x98\x3f\x33\xa9\x04\xc1\xbe\x77\xf7\x10\x7d\x1d\x3e\x33\x04\x20\xbf\xe9\x41\xda\x21\x4d\xb5\xba\x1b\x0c\xbf\xd8\x71\xb3\x27\xba\x11\x12\xa3\x09\x89\x70\x2e\xad\x87\x41\x89\x05\x22\x9f\xe7\x38\x97\xb0\x77\x7a\x7a\x36\x67\x23\xe2\x69\x96\x10\x45\x10\x9d\x22\x25\x28\x89\x11\x9e\x61\xaa\x97\xee\x8e\xac\x00\x41\xf7\x44\x6f\x37\xd0\x52\xfd\x2f\xa0\x7e\xa7\x5c\x10\x14\x13\x85\x69\xb2\xd2\xeb\x64\xbf\xed\xb8\xdc\x7b\xe2\x72\xe5\x0d\x3f\x08\x36\x67\x40\xfc\xf7\x70\x69\x33\x6b\xba\x8f\x70\xb2\xe3\xfd\x7d\x6b\x07\xd5\xd1\xf6\xfb\xa2\x6d\xb3\x6b\x87\x43\xdc\xaf\x16\x83\xdd\xbe\xa2\x45\x51\xcd\xe2\x5d\xd1\xf4\x6b\x84\x05\x74\x0e\xe7\xce\xe1\xdc\xb8\x32\xef\xd3\xe1\x7c\x30\x1e\xa3\xce\xe7\xfc\x42\x3e\x67\x2a\x3b\xa7\x73\xe7\x74\x6e\xbb\x40\x9d\xd3\xb9\x73\x3a\xbf\x5f\xa7\xf3\x4b\xe2\x3e\xef\x15\xdd\xf9\x5d\x89\xd6\x9d\x58\xdd\x89\xd5\x1d\x84\xb3\x9f\xda\xbe\x58\x98\xfb\xfa\x43\x4c\x12\xa2\x48\xb3\x3d\x8b\x88\x54\x6b\x0b\xe6\x7a\xa6\x4c\xcb\x71\x33\x41\xa4\xdc\x95\x21\xf9\x86\xdf\x27\x5b\xf2\xc3\xef\xa0\xe6\x3b\x3e\xd5\xf1\xa9\x6d\xa6\x76\x38\xa6\xd9\xe0\x30\xbf\x96\x6d\xd6\xf3\xdf\x2c\x6f\x96\xfe\x1e\x8c\x1b\xb2\xf0\x8b\x1a\x0a\xd7\x52\xbb\xe2\xfe\x70\x5b\x3a\xdf\x91\x1f\x9b\xbe\xde\x27\x33\x36\x63\xef\x38\x71\xc7\x89\x3b\x4e\xfc\xbe\x39\xb1\x3b\xc9\x6f\xea\x22\x33\x7e\xba\x71\x96\x60\x36\xa6\xb1\x3c\xf9\x67\xa1\xcb\xbf\x94\x87\x4c\x1f\xa8\xd8\xa4\x98\xfa\x94\x4e\xf1\x8b\xfe\x24\x29\x0c\xe6\x1e\x33\x73\x8d\x13\xcd\xd8\xd8\x6f\x12\xcc\x86\xf1\xbb\xf0\xa3\xd5\xce\xfe\x35\x7c\x6a\xbb\xf0\x71\xac\xc0\xd3\x81\x29\x33\x26\xbc\x22\xaf\xb6\x64\xa0\x3c\x8c\x13\xbe\x0b\x57\x0f\x26\x16\x30\x76\xc7\xaf\x83\x45\x39\xbc\x69\x77\x7e\x9d\x2e\x97\xb0\xf3\x5c\xb4\x9c\x70\xe7\xb9\x38\x5c\xcf\xc5\x5b\xb9\x23\x5f\xf9\x78\xbe\x96\x58\xd7\x3e\x08\xdf\x44\xab\x41\x50\x6b\x9e\x25\x1c\xc7\xab\x5c\x31\x85\xe0\x15\x82\xa3\xac\x8d\xc4\x2f\x3e\x7b\x0f\xc2\x5a\x31\xda\xdf\x58\x24\xdf\xf2\xc4\x0f\x45\x4b\x79\xc5\x50\xbe\x7a\x12\xdf\x40\x25\x79\x1f\xf8\xa9\xc5\x78\xbb\xd0\xbe\xce\xa2\xf4\xf6\x16\xa5\x2e\xb4\xaf\x53\x01\x0f\x4c\x05\xec\x42\xfb\xba\xd0\xbe\x4e\x41\x5e\x3d\xed\x4e\x41\xfe\x22\x42\xfb\x5a\x89\xda\x2f\x88\xbd\xb9\xbb\xd0\xdd\xc9\xdc\xee\xbd\x4e\xe6\xee\x64\xee\x2f\x54\xe6\x3e\x8c\x15\xee\x04\xee\x4e\xe0\xee\x04\xee\x4e\xe0\xee\x04\xee\xbd\x2f\x63\x27\x70\xbf\x66\x81\xce\x7a\xa9\x7b\x4d\x92\xcd\x7b\xf5\xe5\x74\xe2\x76\x27\x6e\x1f\xb6\xb8\x7d\x30\x13\x7a\x3f\x65\x1e\xdb\xcd\xa7\x2b\x52\xde\x15\x29\xef\x8a\x94\xbf\x78\x91\x72\xf7\x75\x8b\x8c\x0f\x7b\xb8\x14\x56\xb9\x34\x80\x8f\x82\xcc\xa8\x54\xc0\xfe\xdb\xc8\x2b\xeb\x13\x3d\xde\xab\x9c\xd2\xa5\x7a\xf8\xa7\x9d\xd4\xd2\x49\x2d\xbf\x51\xa9\xe5\x80\x62\xc1\x0e\x22\x63\x25\xc5\x2a\x9a\xe3\x49\x42\xc6\xde\xe8\x23\xdb\xea\xc1\x17\x54\x2a\x89\xa2\x5c\x2a\x9e\x36\x5f\x2e\x97\xae\x87\xbe\xef\xe0\x8c\xb3\x29\x9d\xe5\xe6\x6e\x31\xe0\x9c\xc1\x89\x2e\x24\xc1\x45\x46\xd6\x79\xaa\x6a\x5a\x7f\x17\xd7\x52\xfd\xd0\x5f\xeb\x76\xda\x44\x70\x2f\x8c\x7c\x56\xea\xd6\xb2\xd6\xf8\x76\x70\x77\xfd\x70\x7b\x36\x38\x45\xfd\x2c\x4b\xa8\xb1\xbb\x1b\x52\xa0\xbf\xea\x49\x21\x85\xe5\x63\xb1\x97\xc2\x90\xb9\xc1\xb0\x05\x43\xbf\x96\x8d\xd1\x11\x3a\xbb\x78\xb8\xbb\x1f\xdc\x36\x34\x68\x09\x05\xf2\x56\x49\x9a\x25\x58\x91\x18\x3d\xe6\x13\x22\x18\xd1\xd2\x8e\x45\xba\x2d\xcc\xff\xa6\xd1\xc1\x7f\x0f\xce\x1e\xee\x87\xd7\x57\xe3\xbf\x3e\x0c\x1e\x06\xa7\xc8\x51\x9c\x6e\x56\x8f\x4b\x8f\x22\x5e\x30\x9c\x6a\x0d\x44\xff\x50\x64\xca\xfe\x23\x27\x39\x41\x58\x4a\x3a\x63\x29\x01\x44\xe0\x52\x8b\x6e\xc0\x17\xfd\xef\x06\x17\xe5\x96\xe7\x24\x84\xdf\x45\x09\x9e\x90\xc4\xfa\x23\xc0\xc4\xae\x09\x3d\x80\x2a\x36\x8e\x8a\xdc\xac\xea\x5f\x1f\xfa\x17\xc3\xfb\x9f\xc7\xd7\x1f\xc7\x77\x83\xdb\x1f\x87\x67\x83\xb1\x95\x2a\xcf\xfa\xba\xdf\x52\x4f\x56\xf8\x44\xff\xc8\x71\xa2\xb5\x13\x3e\x75\x78\xbc\xe8\x79\x4e\x18\xca\x19\x50\x9c\x51\x79\xb4\x1e\xe4\x3b\xd5\xa7\xcc\xcc\xe8\xe6\xe2\xe1\xd3\xf0\x6a\x7c\xfd\xe3\xe0\xf6\x76\x78\x3e\x38\x45\x77\x24\x01\xa5\xc0\x2d\x3a\xec\x62\x96\xe4\x33\xca\x10\x4d\xb3\x84\xe8\xd5\xc0\x36\x9b\x78\x8e\x9f\x28\x17\xf6\xe8\xce\xe8\x13\x61\x66\x1d\xe1\xcc\x42\xfb\x4e\xf8\x1e\x07\x4b\x77\x7d\xf5\x71\xf8\xe9\x14\xf5\xe3\xd8\xcf\x41\x42\x1b\x25\xca\x71\xb0\xce\x47\xe5\x61\x6b\xe6\x00\xdd\x1b\x22\xe2\x4f\x44\x08\x1a\x93\x0a\x1d\xf5\xef\xee\x86\x9f\xae\x2e\x07\x57\xf7\xb0\x62\x4a\xf0\x44\xa2\x39\x7f\x06\x53\x36\xcc\x10\x2c\xdc\x4f\x98\x26\xd0\x99\xdb\x2c\xce\xd0\xf3\x9c\x82\xfb\x03\x80\x99\x7d\xcf\x46\x3f\x13\x39\x7b\x73\xeb\x6c\xe9\xe0\x2d\xab\x2d\xd5\x93\xb4\xfc\x46\xe5\x58\xac\x7a\xa1\x44\xe5\xcb\x2f\xae\xa3\xd6\xe5\x2f\x2a\xe4\xd6\xac\xac\x2d\xd1\x4b\xf3\x4c\x8b\xbd\x6e\xad\xab\x95\xd7\xf0\xf5\xae\x59\xa2\x04\x8d\xe4\xcb\x42\x3d\x89\x9c\x29\x9a\x12\x64\x3b\xb3\x87\x73\x8f\xf0\x4f\x97\xa6\xe1\xf7\x70\xc1\x2e\x95\x72\xf8\x44\x94\x1d\x7e\xa7\x02\x76\x2a\xe0\x61\xa8\x80\xef\x2d\xdb\x3f\x26\xd9\x72\x87\x95\x89\xc1\x3b\xc6\xeb\xb5\x14\xa4\x61\xec\x89\xd6\xa2\x9a\x90\x27\x92\x80\x94\xa7\x04\xd6\x4a\xa3\x95\x5d\x26\x82\xe0\x47\x2d\xf0\xc5\xfc\x39\x94\x5c\x6a\x90\xfb\xd1\x7e\x6e\xe1\x36\x41\x1c\x7f\xfa\xe3\xeb\x5d\x16\x7a\xb9\xe3\xd7\x28\xe1\x7d\x0b\x41\x32\x2b\x31\x02\x83\x04\xfb\x5f\xac\x25\x78\xcd\x6d\x11\x7c\xf1\x1e\x2e\x8a\x70\xb8\x07\xa4\x75\xdd\x86\x4a\xb0\x63\xa1\x29\x51\x38\xc6\x0a\xeb\x43\x33\x23\xea\x18\x5d\x33\x78\x76\x8f\xe5\x63\x0f\xb9\x2b\x4f\xb3\x95\xc2\xca\xf0\x0a\xa9\xf5\xef\xc4\x80\xbf\x39\x1f\xef\xae\xef\xee\xfa\xae\x5f\x99\x2e\xcc\xb3\x61\x85\xf7\x75\x31\x6e\xe4\xf3\xda\xdf\xfd\x65\x5a\x7c\xbf\x57\xd8\xeb\x3a\xb9\xf6\x7a\xa1\x99\xca\x59\xdd\x6d\x65\xfe\xaf\xbb\xad\xba\xdb\xaa\xbb\xad\x0e\x60\x85\xdf\xdc\x61\x58\xc3\xdd\xdf\xd4\x63\xb8\x4e\x3b\xdd\x1a\xf2\xae\xd0\x46\x37\x01\xbd\xfb\xa5\x2d\xb6\x5d\xf1\x0d\x7d\x1f\x3e\xc2\x60\x92\xaf\x91\xd6\xb6\xd7\xcb\xdc\xe4\x8b\x74\xfa\xe9\x0b\xde\xf8\x1d\x02\xe1\x5e\x11\x08\x0f\x63\xae\x2f\x92\x02\xf7\x36\x16\xd3\xb7\x4f\x7b\xeb\xa0\x06\xbb\xc4\xae\x2e\xb1\x0b\x7e\xef\xa0\x06\xf7\x47\xad\x2f\x2b\x5d\xf3\x98\x8c\x2b\x51\x02\xfe\x9f\xe3\xaa\xe7\xa7\xf4\x24\x74\x03\x95\x1e\x14\x99\x6e\xd0\x3a\x8d\xf7\x59\x44\xea\x8a\xc7\xa4\x75\x24\x41\xe9\xe5\x03\x97\xc1\xdd\x3c\x8d\x2c\x5e\x1a\xf8\x0b\x4b\xe2\x0d\x5b\xfe\x25\x1a\x76\x6a\x08\xb8\xb3\xf2\xac\x5d\xa8\x2f\x35\xbe\xa0\xe0\x50\xef\xc8\x53\xd1\x8e\x8d\xbb\x98\xc6\x71\x03\x33\xaf\x7f\xee\x59\x7a\xfd\xe3\x97\xc1\x0c\x6a\xcf\xd1\xc1\xac\x12\xbe\xfd\x3e\xec\x2a\xe1\x88\x5f\xc3\xb2\xb2\x72\xef\xbf\x38\xae\xbe\x8a\x92\x3b\xde\xde\x72\xb9\xbe\x54\x0e\xdf\x41\xfc\xac\xb2\x75\x74\x18\x3a\x9d\xa9\xe5\x70\x26\xdc\x99\x5a\xde\xb5\xa9\xc5\xb8\x68\xc7\x19\x16\x84\xa9\x1a\x91\xba\x7a\x9d\xc0\xeb\x21\xe6\x82\x93\x3a\xa0\x01\xa4\x25\x5a\x64\x2f\x64\x7f\x55\x7d\x59\xb6\x17\x2b\x18\x04\x99\x90\x27\xff\x2c\xfe\xf6\xc2\x7a\xa9\x02\xc4\x8a\xe8\x24\x83\xf5\x2f\xf5\x1d\x9d\xdb\x40\xa5\xdd\x73\x25\xb1\x2a\x89\x82\x10\x44\xbd\x36\x9e\xe9\xc6\xbc\xfd\xbe\x52\x24\x97\x06\xfd\xba\xb1\x4d\xcb\x1b\xdf\xee\x00\xb9\x9d\xa1\x26\xdd\x2f\xc8\x29\xd3\xd2\x28\x9f\x16\x17\x83\x44\xcf\x34\x49\x00\x51\x04\x32\x1e\x9b\x6e\x80\xdf\x5c\xc4\x43\xe3\xce\xbf\x69\xdc\x43\x1d\x77\xa8\x63\x09\x6d\xec\xa9\xfb\xca\x99\x76\xc4\x06\xe9\xac\xa0\x0d\xad\x31\xc0\x7e\x19\x9c\xe0\x13\x51\xaf\xc5\x06\xb6\x3d\xfb\x2b\xcf\xbd\x20\x53\x22\x08\x8b\xc8\x01\x7a\xdb\x37\x09\x03\xf9\xc9\x4c\xd2\xc6\x80\x78\x28\x81\x70\xaa\x8a\x5b\x3d\xad\x24\xea\x76\x99\xe4\x5d\x26\x79\x97\x49\x5e\x3d\xea\x5d\x26\x79\x97\x49\x5e\x9b\x03\x11\x93\x84\x28\xd2\x28\x55\x9c\xc3\xe3\xb7\x92\x2a\x4c\xef\x5f\x86\x60\x61\xe6\xd2\xc9\x16\xbf\x19\xcd\xc2\x6d\xf8\x41\x68\x16\xe6\xac\xad\x33\x3f\x94\x7e\xac\x09\xb1\x7e\x75\x93\xc4\x36\x4c\xa3\x64\x97\x38\x87\xd7\xdf\x25\xeb\xa8\x0e\xbd\xb3\x51\xa0\x60\xeb\x5e\x8e\x93\x2c\x1d\x81\x76\x13\xb7\x1e\xc3\xf7\x3b\xef\x43\xe1\xa0\x4d\x74\x7f\xa8\x7c\x74\xeb\xa4\x94\x43\xb1\xd8\x7c\x41\x3c\xb2\xb3\xde\xbc\x71\xae\xc4\x12\x33\x7c\xb7\xd3\xed\x8c\x55\x9d\xb1\xaa\x33\x56\x75\xc6\xaa\xce\x58\x85\x3a\x63\xd5\xc6\xc6\xaa\x2f\x48\xa6\xea\x0c\x57\x9d\x58\xb5\xbf\xe9\x1e\xaa\x96\x79\x48\xd6\xba\xd6\x28\xe9\x45\x0e\xd5\xda\xc8\x7b\x3b\xed\x5f\xd6\x84\xdc\xdf\xb8\x11\xbc\x1f\x7e\x25\x5f\x9a\x25\xed\x12\x58\xec\x76\xf4\x8b\x8d\x2b\xee\x4a\x87\xd6\xae\x55\x17\xf6\xbc\x62\x71\xba\xb0\xe7\x2e\xec\xf9\xe0\xc2\x9e\xf7\xae\xac\x64\x5c\xae\x02\x24\x32\xa5\xb3\x56\xe6\x3f\xbb\x3b\x1b\x12\x8d\x80\x14\x0c\xca\x71\x4c\xb2\x84\x2f\xc0\x92\xb2\xe2\x3a\x77\x5d\xdc\x2c\x49\xd4\x87\x7e\xa3\xbb\x91\xbf\x96\xce\x71\x28\x32\x69\x31\xef\x83\x90\x42\x4f\xfe\x59\x49\xe7\x6f\x85\x97\xc9\x10\xf9\x4c\x25\xdc\x4a\xeb\x09\x7b\xc4\xea\x9f\x04\xa5\x0b\xed\x3d\x38\xc9\x55\x90\xbb\x27\xb5\x60\x95\x11\xa1\x16\xc1\x9b\x24\xcd\xd4\xe2\xbf\x46\x8c\x2a\xef\x61\xa3\x33\xc6\x85\xe1\x6a\xfa\xe3\x39\x66\x71\x42\x84\xbe\x54\x5d\x3b\x11\x66\x8c\x2b\x10\x37\x60\x06\x31\x7a\xa2\xd8\x08\x27\xfd\x9b\x61\x6b\x3f\xf3\x3b\x3a\x5d\xaf\x5d\xac\x6e\xcd\x5d\xf7\x29\xe1\x13\xa8\x60\x99\x97\x75\x7a\xdd\x40\xe7\x19\x2d\xed\xdc\x5b\x31\x04\x85\xe5\x63\x15\x38\xa4\x9c\x85\x3e\x5e\x09\x25\xb2\xe6\xdd\x12\xc6\xfc\xea\x57\x2b\x70\x23\xe5\x67\x16\x80\x04\x1e\xc3\x90\xab\xe3\x70\x3f\x86\x1d\xba\xdf\x8a\x96\xdd\x2f\xae\x74\x37\xfc\x28\x88\x12\x8b\x31\x56\x4a\x33\x99\x7d\x62\x9c\xdc\x63\xf9\xd8\x1a\xe3\xa4\xf4\xf2\x81\xb3\x9c\x12\xc6\x49\x79\xe0\x2f\xce\x72\x5a\x52\xe7\x1a\xce\xf4\xfe\xf2\xe3\xdb\x9e\xb5\x0d\x26\xfe\x5b\xc9\x95\x6f\xc7\x7b\xd6\x99\x69\xdf\x63\xde\xfc\x2a\x66\x7a\x30\x23\xac\xf0\xf3\x2f\xf1\xe4\x96\x6f\xa7\xee\x88\xae\x5a\xa3\x2f\xae\x10\x6e\x45\xe8\x58\x33\xb7\x77\x52\x10\xb7\x2a\x37\xed\x7b\x54\x2f\x63\xe6\x0e\x76\x63\x93\x18\xa0\x61\x19\xad\xdc\x9f\x21\x17\x15\x54\x94\x9e\x9d\x43\xa2\x35\x95\x61\x42\x7c\xc4\x85\x91\xbc\x62\x7b\x66\x8d\xd9\xce\x80\xf9\x9e\xa2\x3e\x8a\x6d\x6d\x7e\x41\x32\x41\x24\x61\xca\xa8\xda\xa6\xde\x95\x2b\xef\x4f\x99\xb5\x10\x9d\x63\x85\xcf\xb0\xc2\x09\x9f\x1d\xa3\xbe\x2f\xec\x4f\x25\xc2\x89\xe4\x08\x3b\xc2\x21\xb1\x6b\x02\xb3\xd8\xb1\x07\x8c\x22\x9e\x66\x34\xf1\x48\xed\xde\x8a\x4f\x59\x4c\x9f\x68\x9c\xe3\xc4\x23\x63\x8f\xd8\xe0\x89\x30\x95\x83\x0a\x87\x93\x04\xd9\x6e\xdd\x0b\x81\x7e\xee\x46\x29\x69\x4a\x13\x2c\x90\xe2\x76\xb4\xd7\xb6\x2d\x74\x3f\x27\x7e\xac\x0e\x05\x1c\xa5\xf8\x91\x48\x44\x15\xca\xb8\x94\x74\x92\x14\xc7\xf8\x61\x88\x60\xdc\x67\x17\x43\x30\x8d\x46\x0a\x71\xc3\x07\x5d\xe7\xd6\x4f\xe0\x7a\x4c\x31\x63\x04\x3a\xe6\x6a\x4e\x84\xed\xde\xbe\xfc\xd6\x56\xce\xb7\xc6\x88\x6e\xb6\x98\x86\x23\x7b\x3b\xa5\xb3\xb5\xc6\xd9\x56\xdd\x6c\xa7\x6b\x36\x2b\x9a\x2f\xe0\xa5\x6d\xaf\x0d\x5e\x50\x59\x56\x07\xdf\x85\xcb\xb6\x34\xe2\xd7\xc0\x47\xfb\x8d\x2a\x82\x9d\x16\xf8\x22\xeb\xf6\xa5\xaa\x80\x07\xae\xff\x75\xc8\x6e\x1d\x8a\x7d\x17\x80\xb1\xc7\xc5\xe9\x02\x30\xba\x00\x8c\x2f\x36\x00\xa3\x59\x9b\xa0\xf1\xce\xe9\x7a\x1b\x56\x90\xf2\x46\x01\xf1\x0b\x88\x52\x58\x3e\xb6\xad\x29\xa5\x45\xe5\x61\xfc\x2e\xa4\xfa\xda\x09\xbf\x86\x74\xdf\xd5\x29\xda\x6b\x9d\xa2\x83\x9b\x76\x27\xf8\x75\x82\x5f\x27\xdb\xb4\x9c\x70\x27\xdb\x1c\xae\x6c\xf3\x56\x0a\xcb\x97\x04\xa1\xab\x85\xa7\x52\x66\xcc\xca\x00\x5b\x03\x47\x03\xee\x81\x3c\x4b\x38\x8e\xd7\x05\xe1\xfc\x82\x0a\xb9\x66\x85\x68\x66\xda\xd5\x1f\x1c\xb8\x64\xb6\x14\x7f\x63\x46\xfe\x5b\x88\xa9\x6d\x9c\xfa\x9b\x86\xd5\x02\xfd\x42\x30\x59\x29\x28\xed\xa5\xb4\x90\x2a\x4d\xb7\x52\x38\xe4\x1f\x0f\x9c\xaa\xfd\x96\xbe\x86\x7a\xf1\x05\x3b\x08\x3a\x27\xc0\x6f\xb3\xf0\xf9\xc1\x48\xad\x9d\x6a\xd7\x65\x55\x76\x46\xfd\x4e\xf1\xed\x14\xdf\xbd\x2f\xe3\x21\x29\xbe\x6f\x28\x51\x9b\x34\x91\x17\x29\x63\xb8\x9d\x6c\xdd\x89\xd6\x9d\x68\xdd\x89\xd6\x5f\xac\x68\x7d\x18\x2b\xdc\xc9\xd5\x9d\x5c\xdd\xc9\xd5\x9d\x5c\xdd\xc9\xd5\x7b\x5f\xc6\x4e\xae\xae\xc8\xd5\xf0\x97\x4b\x93\xde\x54\xc8\x6e\x2d\x5c\xb7\xc8\x89\x7e\x2f\x92\x75\x27\x55\x77\x52\xf5\x61\x4b\xd5\x07\x33\xa1\x2f\x2f\x11\xb2\x4b\x25\xec\x52\x09\xbb\x54\xc2\xb7\x48\x25\x74\xbc\x64\x95\x84\xb2\x2c\x58\xfc\xb8\xc4\x81\x0e\x56\xb6\x28\x46\xbb\x6d\x78\xc7\xbe\x96\xda\x01\xcd\x6f\x53\x69\xaa\xf4\x9b\x6b\xe8\x80\xea\x4f\xf5\x9c\xb4\xa0\x19\x85\x1b\xdf\x7a\x84\xb0\x9f\xec\x9b\xef\x0b\x0c\x7c\x79\xd4\x5d\xfd\x29\x14\xec\x5a\x57\x7f\xea\x05\xe7\xed\x0e\xd7\x9a\x99\x3b\x1a\x35\x36\xde\x77\x3a\xed\x37\x07\x97\x6b\x3e\xe9\x6f\x1a\x2e\x57\x7b\x93\x2c\x25\xef\x9c\xfc\xb3\xf6\xa2\x78\x83\xb2\x5b\x1b\xdf\x0e\x9f\x88\xfa\x52\xae\x86\xae\xec\x56\x57\x1f\x62\x4f\xd3\xdd\x8a\xf5\xbf\xdb\xd9\x76\x45\xc6\xba\x22\x63\x5d\x91\xb1\xae\xc8\x58\x57\x64\x0c\xfd\xc6\x8b\x8c\x6d\x2c\x3e\x9a\x71\x7c\x29\x12\x64\x57\x64\xac\x13\x22\xf7\x37\xdd\xdf\x96\x10\x79\x80\x16\x84\x83\xa8\xa6\xe6\x2d\x08\x6f\x8e\xfb\xe1\x46\xd2\x16\xfb\xc3\x2d\x68\x87\xff\x61\xff\xaf\xc3\xff\xe8\xf0\x3f\x1a\x66\xdd\x05\xb3\x76\xf8\x1f\xa8\x0b\xd7\xec\xc2\x35\x0f\x39\x5c\xb3\xc5\x36\x76\xf8\x1f\x2d\xc5\xb9\x17\xc2\x00\x71\x32\xd7\x46\x38\x20\x3f\x2d\x2b\x1a\x07\x2b\xa5\xb9\xb1\xfe\x76\x70\x40\x6a\xa7\x7d\x10\x2a\xc9\x2b\xe2\x80\xd4\xd1\x75\x6b\x05\xe4\x7d\xe0\x81\xb8\xd1\x76\x89\x8b\x5d\x88\xf5\xe1\x87\x58\x1f\x5c\xe2\xe2\xc1\x48\xb2\x9d\xba\xd7\xe5\x2e\x76\xb9\x8b\x9d\x32\xdc\x29\xc3\x7b\x5f\xc6\x43\x52\x86\xdf\x58\xc2\x7e\x41\x5c\x90\xdd\x64\xed\x4e\xd4\x36\xef\x75\xa2\x76\x27\x6a\x7f\xa1\xa2\xf6\x61\xac\x70\x27\x67\x77\x72\x76\x27\x67\x77\x72\x76\x27\x67\xef\x7d\x19\x3b\x39\xfb\xd5\x70\x42\xea\x84\xed\x96\xf9\x36\xef\x49\xd2\xee\xa4\xec\x4e\xca\x3e\x6c\x29\xfb\x60\x26\xd4\x61\x86\x74\x98\x21\x1d\x66\x48\x87\x19\xb2\x95\x7c\xf3\x6f\xf6\x58\x7e\x08\x6e\x62\x7f\x65\x7f\xf8\x2e\xe1\x93\xfb\x45\x46\xf4\x7f\xcf\x69\x4a\x98\x04\x69\x94\xaa\x45\x28\xcf\x34\xac\xfc\xf2\x9a\x7f\xb8\x1b\x5e\x7d\xba\x08\xb3\x69\x3e\x5c\x3e\x5c\xdc\x0f\x6f\xfa\xb7\x7e\x5d\xfc\xac\xc2\xb5\xb0\xdf\x95\x44\x32\x4b\xf2\xb7\x44\xeb\x9e\x70\x6a\xee\x14\x56\xb9\xdc\x6e\x64\xb7\x83\xbb\xc1\xed\x8f\x90\x0d\x34\x3e\x1f\xde\xf5\xbf\xbb\x28\x11\x44\xe9\x79\xff\xec\xaf\x0f\xc3\xdb\xe6\xe7\x83\xff\x1e\xde\xdd\xdf\x35\x3d\xbd\x1d\x5c\x0c\xfa\x77\xcd\x5f\x7f\xec\x0f\x2f\x1e\x6e\x07\x2b\xd7\x63\xe5\x68\x57\x2b\x21\x12\x16\x09\xe2\xfc\x51\x64\xb9\x86\x28\xd6\x10\x79\xf1\xd1\xb1\xc3\xba\xbe\x4e\xd1\x83\xd5\xe9\xa9\x6d\xdc\x30\xd8\xa0\x21\xa3\x8c\xc4\x54\xe2\x49\x42\xe2\xa5\x96\xdc\x1a\x36\xb5\x84\x4b\x83\x7a\xd6\xda\xb3\x17\x39\x35\xcf\x8b\x0c\x2f\x40\x90\xa3\xa8\x08\x8b\x6b\xfa\x30\xfb\xd0\xd8\x03\xd3\xbc\x8b\x3e\x91\x52\x4f\x51\x2e\x04\x61\x2a\x59\x20\xf2\x99\x4a\x25\x97\x1a\x75\xdb\xd7\xd4\xac\xbd\x53\x7d\x83\x73\x2c\xd1\x84\x10\x56\x1e\xbf\x20\x09\xc1\xb2\x66\xcc\x76\xf7\xdb\x2d\x8b\xdf\x2b\x6b\x8d\x31\x97\xd1\x14\xd3\x24\x17\xa4\x72\x5a\x78\x9a\x61\x41\x25\x67\x83\xcf\xfa\x2e\xd3\x07\xf9\x1a\x3e\xe7\x62\xbb\x13\x33\xf8\x6b\x48\xc1\x57\xe5\x7f\x7e\xba\x2f\xff\xab\x74\xe6\x2f\xee\xcb\xff\x5a\x4d\xeb\x41\xc3\x55\xca\x3e\x42\x9f\xee\x4f\xd1\x27\x08\x71\x12\xe8\x7e\x8e\x0d\xc5\x5e\xdc\x9f\xa2\x0b\x22\x25\xfc\x52\x7c\xac\xa8\x4a\x60\x6e\xdf\x51\x86\xc5\x02\xb9\xe9\x9b\x44\x57\x1c\xcd\x11\xf1\x4b\x53\x5d\x3c\xf6\xf7\x9c\x81\xea\x5e\xac\xde\x05\x9f\xd1\x08\x27\xbb\x2d\x62\xff\xaa\xc4\x07\xae\x6f\x57\x2e\x45\xf8\xf6\xf2\x5a\xf4\xaf\xce\x21\x89\xd4\x0d\xb5\x66\xe6\x57\x44\x6a\x22\x89\x38\x8b\xad\x97\x46\xdf\xfe\x8b\x40\xa8\xff\x3b\x87\x44\xdc\x5c\x52\x36\xd3\x2d\xa2\x13\x74\x7d\x3b\x62\xd7\x22\x36\x86\x50\xa2\xa5\x61\x43\x73\x54\x22\xc6\x15\xa2\x69\xc6\x85\xc2\x4c\x69\x45\x00\xc4\x00\xbb\x22\x86\x03\x9c\xf1\x34\xcd\x15\xd6\x07\x6d\x69\x51\x99\x31\x87\xdc\x11\x35\x8c\xc1\xb5\x52\xb3\x86\x46\x4e\x28\xe6\x92\x09\xdd\xbe\x96\x51\xca\x3a\x34\x8d\x97\x54\x59\xd7\x04\x16\x02\x97\xa5\x89\x0f\x54\x91\xb4\xfa\x7e\xcb\x20\xcf\x7f\xd5\x1a\x08\xce\x4c\x52\x05\x11\x7d\x11\xcd\xa9\x22\x91\xd2\x47\x70\x2b\x9a\x78\xb8\xfa\xe1\xea\xfa\xa7\x50\x82\xf8\xd0\xbf\x3c\xff\xf3\x7f\x94\x7e\xb8\xbd\x5c\xfa\x61\xfc\xe3\x9f\x97\x7e\xf9\xff\xad\xa4\xa7\x6a\x4f\x4b\x7a\x7e\x30\x97\x23\x10\xa9\xc1\x26\xec\xa6\x8a\x68\x8a\x67\x04\xc9\x3c\xd3\x14\x20\x8f\xcb\xfb\xab\x45\xca\x0b\x8e\x63\xca\x66\x26\x03\xf4\x82\x2a\x22\x70\x72\x89\xb3\x8f\xce\x7e\xbd\xc5\xea\xfc\xdf\xbb\x52\xbe\xee\x87\x9f\xfb\x97\x61\xc6\xef\x87\x9b\xdb\xeb\xfb\xeb\x95\xb3\x2e\xb5\xb0\x7c\x8c\xf4\xe3\x53\xf8\x5f\x74\x82\x74\xeb\x5e\xf2\x4d\x89\xc2\x5a\x23\x40\x5f\x9b\xa4\x39\x9f\x48\x43\x59\x02\xa7\x26\x13\x34\xa5\x70\xa5\x18\x0b\xde\x37\x46\xb8\xf6\xda\x83\x3f\x37\xe6\x03\xd0\x96\xdd\xa5\xcc\x62\x2c\x62\xf4\x77\x59\x4d\x1f\x07\xc3\xb1\xf9\x81\xc4\xe8\x08\xcd\x95\xca\xe4\xe9\xc9\xc9\xf3\xf3\xf3\xb1\x7e\xfb\x98\x8b\xd9\x89\xfe\xe3\x88\xb0\xe3\xb9\x4a\x13\x93\x2e\xaf\x57\xe1\x14\xdd\x08\xae\xaf\x10\x50\xd0\x89\xa0\x38\xa1\xbf\x92\x18\x4d\x0c\xff\xe3\x53\xf4\x4b\xc4\x05\x39\x2e\x36\xc6\x1a\x95\xec\x3d\x62\x0d\x4f\x27\xfa\xa5\x1a\x66\x52\xdd\x4f\x14\x93\x88\xc6\x56\xcc\x20\x2c\xe2\x60\x79\x34\xbe\x0a\xdd\x9e\xcb\x34\xd4\x1a\x4d\x96\xab\x62\x39\x03\x65\x05\xc7\x24\xc8\x76\x57\xbc\x4c\x70\x5a\xf1\x19\x1a\xb5\x35\xd7\x2a\xba\xbe\x5b\x31\xdc\xaa\xee\xd5\x4c\x4f\x38\xe2\x09\x9a\xe4\xd3\x29\x11\xa1\x43\xba\xa7\xb5\x19\x2a\x91\x20\x11\x4f\x53\x90\x18\xf4\x57\xb9\x34\x54\x0d\x2b\x66\x47\x7b\x3c\x62\xb0\xff\x5a\xcd\x01\x0a\x88\x39\xb0\x3a\x46\x48\x8c\x30\x5b\x98\x6e\x26\xf9\x34\x6c\xdf\xc0\x50\xe0\x18\x51\x35\x62\xfd\x24\x41\x82\xa4\x5c\x91\x20\x87\x12\x9c\x67\xe5\x05\x07\x16\x29\x48\x96\xe0\x88\xc4\x86\x1e\x12\x1e\xe1\x04\x4d\x69\x42\xe4\x42\x2a\x92\x86\x0d\x7c\x0d\xb6\x1a\xbd\x66\x54\xa2\x98\x3f\xb3\x84\x63\x3b\x8f\xea\x67\xdf\x94\x4f\xe3\xc0\x41\x04\x0c\x84\xe0\x02\xfe\xe7\x07\xca\xe2\xbd\x71\xa8\x87\xbb\xc1\x6d\xf8\xef\xbb\x9f\xef\xee\x07\x97\x9b\x71\x1f\x4f\x59\x30\x3c\xd0\xe1\x4f\xd1\x9d\x59\x04\x2e\xb4\x44\x24\x1a\x26\x75\x69\x49\xa9\xf8\x81\xc7\x5b\x72\xdf\xcb\xfe\xd5\x43\xbf\xc4\x51\xee\xce\xbe\x1f\x9c\x3f\x54\xf4\x01\x3b\xbf\x92\x0c\x6f\xd4\xbf\xf0\xb7\xb3\xef\x87\x17\xe7\xe3\x1a\x85\xf1\xc3\xed\xe0\xec\xfa\xc7\xc1\x6d\xa1\xdb\xd5\x2e\x51\x65\x30\x55\x66\x75\x6f\x98\xd2\x9c\xc7\x68\xb2\xa8\x07\x84\xd0\x92\x73\x02\xbe\xd8\x02\x12\xc5\xb4\x7a\x0a\xbc\xc9\x61\x73\x14\x5f\xa4\x3c\x26\x3d\xfb\x0e\x20\x69\x18\xe3\x8a\x91\x98\xeb\x1b\xd6\xbd\x63\x16\x18\x2a\x0c\xc8\x85\x5f\xb8\x53\xd4\x47\x52\xbf\x98\xeb\x43\x2d\xe8\x6c\x06\x86\xc3\xca\x50\x4d\x6b\xf6\x53\x58\x5e\xf8\xce\xec\x7f\x26\x38\x9c\x73\xdd\xad\xb5\x38\x7b\xab\x84\xf9\x10\x50\x57\xca\x2d\x0a\x0c\x06\x87\x9a\xa1\xb9\xcd\xd2\x8b\xd0\xb8\x5e\xe6\x3c\x1a\x7b\x91\x3e\x5c\xc0\xb6\xa4\xb1\x77\x66\x82\x3c\x51\x9e\x07\x9f\x5a\x60\x8f\xd2\x8e\xd7\x36\x5f\x2c\x00\x2c\x9b\x31\x8a\x54\x9a\xf1\xe4\x51\xdb\x82\x66\x61\x4f\xd0\xc2\x54\xf0\xb4\xa6\x8d\xf2\x31\x19\x5e\xdf\x29\x81\x15\x99\x2d\xce\x2d\xcb\xd8\xfe\x78\x9c\x5f\xff\x74\x75\x71\xdd\x3f\x1f\x0f\xfa\x9f\xca\x27\xde\x3f\xb9\xbb\xbf\x1d\xf4\x2f\xcb\x8f\xc6\x57\xd7\xf7\x63\xf7\xc6\x4a\x92\x6f\xe8\x60\xf9\x9e\x2e\xbf\x78\x8a\x34\xcb\x05\xd6\xe8\x00\xef\x02\xfe\x38\x21\x53\x2e\x0c\x9f\x4f\x5d\xe8\x82\x15\x61\xdc\xda\x5a\x5d\xac\x32\x8b\x53\xb0\x8c\xd5\x35\x69\xac\xde\x4a\x10\x9c\xc2\x3d\x81\x19\x1a\xb0\xf8\xe8\x7a\x7a\x74\x67\x7e\x4c\xb1\x78\x24\xc2\x7f\xfa\x2c\xa8\x52\x84\x95\x54\x3a\xec\x86\xec\x95\xc4\xa2\x83\x63\x74\xab\xf9\xbe\x7e\xdf\x5f\x6a\x9a\xd8\x63\xa2\x30\x4d\xa4\x1d\x6c\x69\x5d\x4f\xd1\x05\x16\xb3\xc2\x0e\xf7\x35\x9f\x4e\x4d\x63\xdf\x98\x61\xe8\x3b\xac\x34\x8b\x1a\xde\xab\x49\xc3\xdd\x8b\xd0\x9f\x7d\xd9\xcb\xc3\xcb\x54\xf5\x90\xed\x46\x53\x0f\x37\xb0\xe2\x46\x63\x2f\xe9\x86\xf6\x49\x0d\xad\xc1\xc4\xcd\xe3\xd5\x97\x4c\x7d\xdb\xcb\xe4\x54\x7e\xb1\x86\x9c\x4c\x2e\x95\xde\xf9\xa9\xd6\x36\x6b\x68\x89\x7c\xa6\xd6\x60\x10\x8e\xbb\x42\x42\x45\x33\x60\x5e\xc5\x59\x46\xb0\x90\x75\xbb\x5d\x16\x03\x1b\xf6\xde\xf4\x14\xf6\x61\x37\xd9\xf5\xd3\x43\x9c\x81\xc1\xc1\x0b\x11\x15\x8a\x6c\x41\x03\xa6\xad\x25\x0a\xb8\x01\xb4\xa5\x6b\x8b\x6c\x74\x49\xa5\x56\x1a\xcd\x8f\xdf\x59\xc8\xa5\xed\x08\xe2\x63\x7f\x78\x51\x11\x2e\xc6\xe7\x83\x8f\xfd\x87\x8b\xd5\x66\xc2\xd2\x77\xd5\x2d\x46\x47\x48\x3f\x2f\xfb\xcd\xe9\xd4\xdc\x19\x0e\x38\xca\xa8\xb4\x84\x81\xd1\xca\x42\xd5\x18\x7b\x75\x4c\xb2\x84\x2f\x52\xc2\xc0\xc4\x53\xba\x09\xf5\x7a\x4e\x31\xb5\x57\x4b\x30\x58\xb0\xe2\x58\xb3\x1b\x5c\x63\x47\x0e\xad\x8a\xc4\xfe\xe6\x2d\x83\x55\x55\x58\xf7\x8d\xf1\x9e\xd9\xff\xdc\x29\xac\xb6\x3c\x63\xfd\xb3\xfb\xe1\x8f\x83\xb2\x7e\x78\xf6\xfd\xf0\xc7\x3a\xa9\x66\xfc\x69\x70\x35\xb8\xed\xdf\xaf\x11\x4e\x2a\x4d\xd6\x09\x27\x52\x0f\xb8\xea\x3d\xa5\xd2\x47\x04\x45\x06\xf2\x0a\x51\x25\xd1\x13\x95\x74\x42\x01\x20\xcc\x7a\x22\x1f\x86\xc0\x59\x9f\x70\x42\x63\xaa\x16\x4e\x7c\x31\xfd\x96\xf7\x51\x73\x52\xdb\xbe\x31\x3b\x84\xfe\x49\xb0\xf2\x99\xcd\x71\x93\x3e\x45\xa0\xdb\x3e\x81\xd2\x16\x7c\xc6\xb4\x20\xcd\x66\x44\x98\xe1\x80\xf7\x25\x1c\x4b\xf0\x5c\x8f\x2a\x14\x56\x8a\x55\xf3\x42\xeb\x8c\x30\x22\x00\x04\xce\x77\x62\x04\x29\x41\xd8\x57\x5a\xe6\xca\x12\x1a\x51\x95\x2c\x50\x04\x36\x2c\x30\x67\xa6\x98\xe1\x99\x15\x0e\x40\xcd\xa9\x90\xc4\x5f\x0d\x8a\xda\xf5\xd4\x9a\xf6\xef\x29\xd9\xf2\x98\x3d\x5c\x9d\x0f\x3e\x0e\xaf\xca\x24\xf0\xfd\xf0\x53\x49\x84\xbd\x1c\x9c\x0f\x1f\x4a\xb7\xb9\x96\x64\x57\xcb\xf5\xd5\x66\x6b\x8e\xa2\x7f\xe9\x14\x9d\x9b\x4f\x4f\xf5\xe2\xd6\x40\xc4\x79\xe5\xb7\xb2\x0e\xb7\x2e\x24\xcf\xfd\x31\x60\x4a\xd4\xfa\x25\xda\x9a\x90\xac\x0f\xb2\x64\x43\xaa\x0f\x55\x58\xea\xfb\xaa\xea\x54\xae\x4e\xd9\xbd\x08\x41\x97\xc7\x85\x65\x29\x8c\x61\x00\xa3\x41\x93\x11\xab\xc6\xad\x55\x30\xec\x1f\xc1\x45\x9d\xe6\x52\x19\x57\x22\x10\x27\x7a\xfc\x8b\xd4\x0b\x0a\xae\xc6\x63\x74\x47\xc8\x88\x39\xeb\xc1\x8c\xaa\x79\x3e\x39\x8e\x78\x7a\x52\xe0\x13\x9e\xe0\x8c\xa6\x58\x4b\xd2\x44\x2c\x4e\x26\x09\x9f\x9c\xa4\x58\x2a\x22\x4e\xb2\xc7\x19\x44\xc0\x38\x77\xea\x89\x6f\x76\xc6\xff\xfd\xe2\x4f\xdf\x1e\x5d\xfc\xe5\xdb\x0f\xcb\x16\xb2\xa6\xfd\x1f\xb0\x08\x67\x32\x4f\x6c\xc4\x9c\x08\xd7\xc6\x1d\xf9\x9c\xac\xdb\xef\xab\xf2\x76\xed\xa6\xbf\x9e\xdd\x3c\x94\x2c\xd6\xe5\x7f\x5e\x0e\x2e\xaf\x6f\x7f\x2e\x71\xca\xfb\xeb\xdb\xfe\xa7\x12\x43\x1d\xdc\x7c\x3f\xb8\x1c\xdc\xf6\x2f\xc6\xee\xe1\x2e\xb6\xb7\x1f\x18\x7f\x66\xe5\xa5\x91\x8e\x03\x2e\xf5\x74\x8a\x3e\x72\x81\x7e\xf0\x3b\x79\x34\xc1\x12\xae\x18\x77\x67\xc9\x1e\xca\x78\x0c\x8c\x17\x91\x6c\x4e\x52\x22\x70\x62\x6d\x06\x52\x71\x81\x67\xe6\xa6\x97\x91\xc0\x2a\x9a\x23\x99\xe1\x88\xf4\x50\x04\xd4\x30\xeb\xc1\xa6\x80\xaa\xc5\x67\x55\x3b\xdf\x6d\xce\x14\x4d\x89\x53\xc1\xed\x3f\xef\xcd\x66\x6c\xb1\x39\xd7\xf7\xdf\x97\x85\xbd\x8f\x17\x3f\xdf\x0f\xc6\x77\xe7\x3f\xac\x5c\x4f\xf3\x59\x69\x64\x77\x10\x80\x74\xc6\x93\x3c\x65\xe1\xdf\xdb\x8f\x6d\x78\x75\x3f\xf8\x54\x1d\xdd\x75\xff\xbe\x4c\x19\xb7\xe5\x00\xb7\x0f\xdf\x5d\x5f\x5f\x0c\x4a\x2e\xe1\x0f\xe7\xfd\xfb\xc1\xfd\xf0\xb2\x44\x3f\xe7\x0f\xb7\x06\x8d\x70\xd5\x34\xdd\x08\x6a\x26\xaa\xa7\x15\x4e\x73\xdf\xac\xb0\x15\x27\xea\xdb\x80\x72\x73\x96\x8f\x02\xb8\x1d\x13\x0e\x06\x56\x9d\x23\x6f\x52\x8d\xcc\x48\x6b\xd9\xa1\x2a\x6f\x13\x6a\x66\xc7\x2b\x37\x7a\x15\x57\xbe\xf7\x43\x30\x50\xa0\x46\xd9\xc6\x49\xc2\x9f\x4d\x28\x6f\x4a\xf5\xad\x6c\x81\xd1\xf4\x2b\xb2\xf0\x10\x1e\xd7\x70\xbc\xf2\xb6\x90\x48\x10\x75\xc9\x73\xa6\xb6\x27\xb9\xfe\x55\x89\xef\x0c\xae\x7e\x1c\xff\xd8\x2f\x53\xe0\xf0\x62\x35\xab\x09\x9b\xa8\xb9\x8a\xfb\x57\x3f\xfb\x4b\x18\x02\xbe\x7b\x5e\x43\x35\xb2\x6b\x94\x50\x2d\xf6\x46\x58\x6b\xaf\x09\x48\x34\x88\x50\x30\x39\xa4\x7a\x72\x10\x60\x9a\x19\x7f\x92\xe1\x4f\x66\x90\xa7\xee\x8f\x4a\x7b\x12\xd6\x05\xac\xa9\x2e\x9e\x1e\xda\xb1\x5a\x35\x43\x84\x3d\x51\xc1\x01\xcf\x16\x3d\x61\x41\xb5\x34\x6e\x5a\xd6\x73\x3d\x85\xff\xdd\xac\x4d\x30\x8c\x56\x18\xd7\x1d\x17\xea\xdc\x07\xf2\x6e\x67\x0d\xa9\x0b\x68\x5d\x0e\x65\xad\x37\x74\x2c\x7f\x5b\xb3\x39\x3b\x06\xfc\x96\x27\xfc\x8f\xe4\x9c\xe2\x44\x33\x80\xfd\xc9\x8b\xfd\xab\xbb\x61\x59\x7e\x2c\xab\x19\x01\x5f\xde\x5a\x5e\x04\x43\xa5\x19\xb9\x53\x26\xee\xfe\x7a\x61\xb4\x0b\x00\x3d\x36\xe7\x36\x50\x2c\x40\x00\x72\x28\x28\x19\x16\xb2\xf2\x85\x44\x00\x84\x56\x04\x5c\xe9\x3b\x0b\xc2\x99\x9e\x38\x8d\x47\x8c\x7c\xce\x08\x93\x10\x1c\x60\xee\xb3\xc2\xd7\x2e\x8f\xd1\x70\x0a\x2c\x41\xbf\xce\x50\xce\xac\x03\x4c\x5f\xb8\x66\x90\x3d\x2d\xca\xda\x21\x78\x0d\x11\x0c\x2f\x8c\xb8\x60\xa9\x62\xf0\x23\xf6\x93\x77\xa2\xc1\xa3\x29\xd7\x0c\x48\xef\xa2\x6d\xef\x14\x61\x26\x69\x0f\x69\x85\xa5\xba\xa7\x90\x3a\xa0\x15\x4a\x1b\xc2\xa5\x39\x8d\xfd\xf3\xf5\xaf\x81\xa5\x38\xe1\xf0\x32\xa8\xbf\x0b\x2a\x57\x41\x83\x68\x9c\x18\x8f\xc9\xb8\xfd\x9d\x10\x71\x41\xac\x9f\x65\xe3\x6b\x60\x1d\x63\xbf\xc7\xf2\x71\xc9\xf7\x30\x64\x52\x61\x16\x91\xb3\x04\xcb\x2d\x83\x90\x9c\x8d\xa3\x57\x96\x38\x6e\x6f\x1f\x6e\xee\x87\xdf\xad\xe1\xf2\xd5\x8f\x97\xc3\x80\xa2\x24\x77\xee\xb9\x89\xe0\x38\x46\x9a\x7d\xce\xb8\x71\x05\x5a\xc1\xbf\x80\xfe\x36\x79\x3d\x3e\xa0\xb2\x04\x3b\x5e\xa4\x23\x58\x3b\x47\xe8\x4a\xa0\x76\x21\x50\xa4\x57\x02\x05\x26\x0f\xb7\xd5\xe0\x59\x34\x05\x49\xac\x75\x2b\x4b\xb0\x9a\x72\x91\x1a\x2e\x5f\x9a\xb4\x69\x7c\x75\xa3\x94\x29\x22\x44\x9e\x29\xea\xb0\xdc\xab\x52\x2a\x54\x78\xe7\xb3\x4b\x22\x25\x9e\x91\x5d\x1c\xd0\x75\xca\xc3\xdd\x8f\xe1\x3f\xc1\xc1\xdc\x46\xf6\x2f\x8d\xd0\x45\xbe\x3b\x7a\xba\x66\x1f\x4d\x20\xcf\x0d\x4f\x68\xb4\x65\xc0\xdd\xc7\xfe\xf0\x62\x3c\xbc\xd4\x4a\x7c\xff\x7e\x70\x51\x12\x25\xe0\x59\xff\xe3\xfd\xe0\xd6\x82\x58\xf7\xbf\xbb\x18\x8c\xaf\xae\xcf\x07\x77\xe3\xb3\xeb\xcb\x9b\x8b\xc1\x9a\xc8\x9c\xc6\xc6\x97\xad\xab\xd5\x57\x4f\x97\x7e\x81\x1d\xd6\xbc\x2c\xb4\x97\x41\xd6\x18\xa6\x09\x38\xc1\xb9\x71\x86\x63\xc4\x78\x4c\xe0\x67\xe9\xac\x33\x1e\x39\x1a\x0d\xd5\x57\x49\x82\x70\xae\x78\x8a\xc1\x6b\x93\x2c\x46\x0c\x4f\x34\x6b\xc5\x49\x12\x84\x77\x89\x9c\x31\xcd\x62\x75\x63\x06\xa2\x3d\x4a\x88\x66\xe7\x59\x90\xec\x67\xfd\x06\x53\xca\x20\xd2\x36\xc5\xe2\xd1\xb8\x99\x8a\x2e\x8b\x43\x21\x11\x96\x23\xa6\xc7\x45\xac\x61\xa8\xcd\x0a\x9f\xb6\x7a\xab\x71\x75\x52\xfc\x48\xf4\xaa\xa4\x79\x34\x47\x99\xe0\x33\x41\xa4\xb4\xb6\xe5\x08\x33\x13\x80\x60\x5f\xd7\xd7\xd0\x88\x31\xae\x97\xc2\x99\xb0\x63\x92\x11\x16\x13\x16\x51\x93\xd6\x07\xbe\x7b\x6f\xda\x9c\x09\x9c\xcd\x91\xe4\xe0\xf4\x86\x65\x07\xfb\x95\xf9\xc8\xdd\x64\x66\xc6\xe6\x71\x68\x81\x16\xb9\xe6\x13\xd7\x20\x27\x9a\x55\x86\x8f\xdd\x65\xe8\xdc\x2e\xc6\x0e\x98\x66\x09\x51\x06\xac\x1f\x96\x1c\x36\x43\xaf\x75\x69\x3f\xf4\x36\xd5\x6d\x82\xbe\xb0\xdd\x98\xb1\xb4\x23\x3a\xae\xb1\x6c\xdb\x23\x85\xbe\xc7\x2c\x4e\x74\x2b\xce\x87\x51\x3e\x8b\x90\x8a\xd2\xd7\x54\xe3\x4e\xe3\x2e\xb7\x68\x84\x73\xb9\xcb\x35\x5a\xc9\xc5\x34\x56\xc1\xa3\x22\x28\x04\xc8\xdb\x26\x62\xc2\xea\x66\x9a\x45\xe2\x84\xdb\x55\x32\xaf\xe7\xa6\xfe\x13\x82\xd1\x34\x5c\xb3\x99\xa0\x2c\xa2\x19\x4e\xb6\xd2\xfd\x2a\xc1\xf8\x36\xc6\xfd\x6b\x3a\xd5\xe4\xf3\xcd\x92\xdb\x56\x11\x91\x42\x82\xb2\x1d\xa6\xdf\xc2\x0d\x2c\x49\x36\xab\x81\xc8\x22\x9a\x04\x0b\x9e\x1b\x7f\x1c\xac\x0b\x89\x6b\x8e\xea\x71\xdd\x76\xeb\x93\x81\xcb\x01\xd0\x5b\x6c\xb6\x89\xfc\x69\x5a\xbf\x4a\x2b\xb6\x77\x13\x8c\x87\x93\x9b\xfa\x36\xeb\x76\x20\x78\xf8\xaf\x55\xb4\x73\x89\x33\x4d\x33\x16\xb6\x1f\x17\x73\xb4\x4a\x92\xad\x0a\xe6\xe2\x67\x02\xdf\xb9\xcf\x0b\x69\xbf\x1b\xc5\x12\xda\x00\xa8\xe5\x4e\x4a\x31\x04\x41\x8e\xb9\xa5\xf1\x69\xae\x65\x59\x84\x21\x0a\x01\x7d\x4d\x8e\x67\xc7\xc8\x15\x61\xe8\xa1\xfe\xcd\xcd\xe0\xea\xbc\x87\x88\x8a\xbe\x71\x31\x8b\x36\x60\x69\xc4\x14\xb7\xd2\xca\xc2\x15\xd0\x48\x89\x98\x91\xd2\x9c\x5d\x74\x13\x84\x2a\xcf\xa8\x54\x36\x7c\x56\xf3\x95\xa0\xd4\x09\x4d\xab\x62\xb6\xa1\x90\x5c\xcd\x77\x21\x0d\x2c\x65\x9e\x6a\x5d\x76\x4c\x71\x3a\x16\x3c\xd9\x85\x29\x9c\xc3\x54\x40\x5d\xf6\xe9\xf9\x14\xa7\x48\x37\x6b\x43\x41\xbc\xcb\xd1\x8b\x74\x5a\x30\xd2\x7c\x59\xdf\x9b\xc1\xbd\xe5\xbc\x0f\x36\x1e\x8d\xba\x10\x08\x48\xdf\x6f\x60\x15\x85\xd9\x78\x6c\x2d\xf5\x63\x1c\x45\x5a\xe5\xde\xf3\xa4\x82\xfa\x39\xce\x25\x60\x3b\x7a\xb1\x69\xae\xa3\x73\x37\xcc\x4c\x73\x30\x08\x06\xd6\x57\xae\xe4\x11\x2d\xda\xaf\xe9\x77\xb2\x58\xea\xd5\x55\xb8\x79\x90\xde\xa4\x62\x2e\x61\x49\x60\x27\xa5\xa9\x90\xa3\xe6\x64\x81\xe6\xf8\x89\x94\xba\x74\x09\x31\xba\xe1\x05\xcf\x45\x1d\xa3\x1b\xb1\x73\x92\x09\xa2\x25\xfd\xaa\x03\xc5\xd3\xf4\x6d\x99\x12\x3b\xba\xee\xe8\xfa\xdd\xd3\xf5\x99\x29\x94\xd4\xf7\x85\xb1\x76\x12\xe0\x4c\x63\xe3\x8c\xf3\x64\xdc\xc2\x26\xd2\x7e\xc5\x4b\x9e\xb0\x4a\xd9\x28\x80\x04\xe0\x39\xc8\x47\xa5\x6b\x93\xeb\xbb\x2e\x48\xb1\xb5\xc3\x5b\xb1\x0c\xce\x65\x16\xd4\xcb\xd9\xe5\xbc\xd7\xb5\xb2\xaa\x25\xf4\xe2\x62\xce\x99\x91\x6f\xbc\xbb\x2c\xac\x7f\x5a\x3a\x4c\x4e\x14\xa1\x6c\xa9\x1a\x9b\xa1\x67\xbd\xc0\x46\xee\xf8\x47\xce\x15\x96\xdf\x1c\x8f\x98\x16\xa2\x1e\xc9\xc2\x98\x5b\xb5\x98\xf2\x3b\x2d\x8b\x1f\x49\xc2\x24\x84\x7b\xff\xce\xb8\xe7\x34\x89\x3b\x73\xb5\x51\x4d\x4d\x11\x38\x08\xba\xf6\xbd\x40\x88\xae\x6d\xd4\x4a\x49\x45\x00\x34\xc8\xf9\x66\x2e\xf6\x99\x19\xfe\x8c\x28\x48\xb1\x56\x54\x81\xce\x14\x9b\x2a\x73\x4b\x43\x5f\x6b\xba\x32\x54\x21\x38\xf8\x49\xe2\x7c\x37\xc6\x2f\x97\xdb\x58\xcb\x19\xbd\xb6\x70\x67\x63\xde\x4f\x9c\xdd\x28\x12\x7c\xa9\x74\x1b\x96\xc8\xec\xf4\xc4\xb0\x03\xe7\xbf\x26\xec\xf8\x99\x3e\xd2\x8c\xc4\x14\x43\x04\xbc\xfe\xd7\x89\x9e\xd7\xbf\x9f\xdd\x5e\x5f\x8d\x8b\x4c\x9e\xff\x1a\xb1\x7e\x22\xb9\xcf\x52\x40\x8c\x33\x1f\x6e\x9f\x09\xe2\x44\x42\x3b\x17\xb0\xba\x16\x66\xc4\x11\x6b\x1a\x41\xcc\x23\x79\x8c\x9f\xe5\x31\x4e\xf1\xaf\x9c\x81\x2b\xbd\x0f\x7f\x9e\x25\x3c\x8f\x7f\xc2\x2a\x9a\x9f\xc0\xb9\x56\x27\xe4\x89\x30\x65\xdc\x54\x7a\xb9\x62\x48\xde\x95\x10\xad\xff\xef\x7a\xcc\x45\x52\x91\xd4\x9a\x6c\x44\x32\x85\xfe\x1f\x41\x26\x9c\xab\xfa\x4b\x8a\x4f\xa7\x92\x6c\x74\x21\x15\x4a\xda\xdd\x35\xfa\xcb\x9f\xbf\xfd\x83\x26\xa1\x6d\xd6\x78\x78\x77\x3d\xd6\xdf\xff\xfb\xb9\xfd\x5e\x6e\xc0\xee\xae\xb3\x82\xb5\x39\xe2\x31\x81\xf3\x39\x83\xdb\x4f\x80\xf3\x02\xd8\x1b\x90\x43\xb1\x8f\x75\xdc\xed\xbc\xd4\xfa\x6e\x2a\xdb\x56\x8b\x09\x2a\x76\x30\x47\x74\x84\x18\x47\xa9\x89\x35\xc5\x0c\xfd\xc7\x0f\xdf\xd5\x6f\x60\x2e\xe8\x56\x1d\x52\x0b\xd7\x10\x74\x29\xe9\xaf\x44\x22\x4d\x35\x9a\x8a\x79\xaa\xbb\x16\x44\xce\x79\x12\xa3\x67\x02\x6a\x92\x8d\x03\xf5\x5a\xb9\x20\x23\x16\x36\x01\x21\x87\x08\x27\x8a\xcf\x08\xdc\xd5\x4e\x51\x53\x44\x68\x51\xc5\x64\x69\x28\x2e\x48\xcf\x40\x7d\xdd\xfd\xc9\xc5\x56\xc3\x34\xe1\x91\x4b\x6a\xb1\x26\xb9\x78\x52\x3f\xf3\x69\xd5\xf4\x8a\x9a\x6d\xf8\xd5\x4d\xb6\x66\xdb\xfa\xa5\xb1\x49\x28\xd6\x86\x55\xdd\x99\xfa\xc1\xd0\x88\xb3\x71\x42\xd9\xe3\x56\x9b\x71\xed\x44\x39\xdd\x82\x5d\x33\xdd\xa2\xb7\x73\x1b\x0b\xc8\x06\xe7\xe3\x63\x9e\x24\x26\xb5\x25\xdc\x1e\x90\xbb\xcc\xba\x81\x30\x90\x99\x1c\x50\x12\x5b\xbf\x97\xd5\x84\x05\x61\x10\xf0\x36\x62\x93\x85\xf5\xd9\xca\x1e\x92\x79\x34\x77\x99\x79\x11\x67\x52\x8b\xd1\x5c\xa0\x88\xa7\xa9\x29\x6e\xca\x08\x52\x9c\x27\xd2\x46\xbb\xb3\x23\x85\x23\x35\x62\x45\x7f\x6b\x4e\x9e\xa9\x80\xb4\x5b\xea\x5e\x7b\x97\x4e\x51\x69\x69\xa5\xc0\x4d\xe3\x10\xb3\x01\x8c\x60\xc6\x13\x15\xa0\x3f\xf0\xe5\xb3\x64\x36\xac\x41\x33\x90\x73\x2e\xd4\x38\xae\xe5\x39\x6b\x89\xa6\xca\x08\x19\x39\x4a\x20\x68\x98\x3f\x69\xe1\x9f\x3c\x7b\xe3\xeb\xaa\x21\x68\xaa\x5e\x35\x82\x76\xc7\x68\xe5\xc8\x36\x25\xc1\x86\xb5\x32\x08\x1e\x51\x39\x26\x7c\xdd\x18\xef\xe0\xab\x33\xfd\xd1\xca\xc5\xab\x9e\x3b\x27\x04\xf1\xb8\x00\x9b\x33\xf7\xba\xcd\x08\x59\xb5\xa6\x16\x3a\xe1\xe5\x32\x47\x57\x4d\xe5\xa1\x6c\xc9\xd5\x63\x01\x93\xbd\x24\x20\x6b\x62\x31\xa1\x4a\x60\x51\x42\x0a\xf1\xfa\xa0\x24\x58\x40\x7c\xd6\x88\x19\xdc\x38\xa3\x29\xc4\x28\xa6\x12\x12\x44\xe0\x2e\x0d\x9c\x61\xa8\x9d\x12\x58\x39\xda\x45\x9e\xa3\x89\x3f\x87\xc0\xb2\x82\x34\x1c\xb3\xd3\x1d\x79\x7c\x2c\xad\x9f\xf1\x28\x2f\x04\xb9\x08\x24\x5c\x8b\xa9\x83\x28\x93\x74\x36\x57\x88\x32\x6b\x77\xc4\xc9\x8c\x0b\xaa\xe6\xa9\xec\xa1\x49\x2e\xb5\x16\x6a\x82\xd5\x4c\x3c\x0a\x51\x51\x2b\x2e\xb4\x6b\x12\x71\x5c\x69\x70\x59\x45\xd9\x82\x34\xda\x1d\xca\x41\xe5\xae\x58\x43\x38\x7d\x8f\x33\x58\x6d\x83\x42\xdd\x46\x03\x4f\x89\x4c\x1c\x20\x77\xc8\x4e\x50\x05\xa4\xe9\x1c\x00\x2a\xe4\xde\xbc\x14\xaf\x51\x88\x0b\x99\x64\x50\x41\x5c\xec\x36\x48\x5e\x65\x64\x4a\x83\xde\xe4\x9d\x4e\x69\xa6\x6a\x03\xb7\x96\x5d\x45\xb7\x01\xe6\x4f\xbb\xc5\x86\x64\x2c\xa0\x66\x40\x6a\x1b\xb1\x3b\x42\x9a\x81\xdc\x96\xf6\xde\x94\xc6\x85\x29\xd8\x44\x8f\xd5\x24\xbf\x8b\x13\xfb\x7c\x70\x77\x76\x3b\xbc\x31\x90\x13\xd7\xb7\x97\xfd\xfb\x71\x8d\x5f\xbb\xe6\xad\xcb\xfe\xed\x0f\xe7\xeb\x5f\xfb\xfe\xbe\x9c\x95\x5d\xf3\xca\xed\xdd\xea\x64\x8e\x16\x43\xac\x49\x0a\xab\xed\xe7\x14\x65\x0b\x35\xe7\xcc\x87\x28\xc4\x25\xde\x74\x84\x4c\x46\xb0\x82\x10\x22\x21\x55\x8d\xe3\xf0\x1e\xe2\x72\xd6\x4b\x98\xe5\xcd\x32\x30\x6c\x7b\x15\x8d\x36\x38\x91\x9f\x12\x3e\x01\xbf\x75\x5e\x2a\x71\xbb\x22\x02\x7d\xc7\x78\x9f\x73\x2a\xb3\x04\x2f\x96\x7a\x58\x77\xe5\x5c\xe1\x94\x40\xc4\x71\x81\x1f\xe7\x92\x45\xf4\xce\x40\x02\x93\xbf\xd7\xe9\x14\x32\x99\x14\xc5\x8a\xa0\x09\x51\xcf\x90\x37\xe7\x7e\xf5\xb6\x54\x17\x30\x22\x8f\x47\x0c\xcc\x39\x23\xbd\xc8\x71\x0e\xd1\x7e\xa3\x0f\x3d\x34\xfa\x10\x93\x27\x92\xf0\x4c\xef\xbc\xfe\xa1\xe1\x92\x19\xa4\x98\x26\x57\x5c\x79\xcb\xdc\x2e\xfb\x29\x48\x44\x33\x90\xcc\xc7\x44\xb7\xfb\x7a\x82\x47\x89\x92\x1d\x3b\x83\x31\x20\x1c\xc7\x5a\xc9\x06\x56\xe6\x86\x57\x84\x00\xb1\x60\xea\xa5\x5a\x99\x9b\x88\x14\xde\xfc\x6d\x7a\x0c\xdb\x2c\x9b\x3d\x6b\x77\x80\x3d\xbd\xa0\x4b\x76\xd7\x8b\x5c\x6b\x25\x3f\x90\x05\xa4\x60\xdc\x60\x2a\xb6\x74\xcd\xd6\xc5\xbc\xbe\x88\x93\x76\x50\xd3\xd1\x01\xb9\x6b\xeb\xd7\x61\x37\xc7\xad\x8f\xd5\x7b\x2d\x2d\xd5\xc5\x72\xf9\x8e\x5b\xaa\xad\x0f\x4d\x4a\x6a\x63\x08\x03\xaa\x2a\x5e\x19\x89\x36\xd0\xb8\xfc\x00\xef\xf4\x77\x6b\x35\x15\x2f\xae\x45\x61\x4d\x7f\xd8\x05\x9b\x1c\x5f\xcd\xc7\x27\x6b\x47\x1c\x25\x5c\x96\xb1\x72\x5a\x0f\xfa\xcc\x7e\xba\x6a\xdc\x83\x90\x7c\xb5\x5c\xb8\x51\x40\x43\xcd\xc2\x57\xc0\x20\xcd\x3d\xa3\xac\x87\xcc\xbe\xdd\x43\x14\xa2\x2d\x41\x21\x4b\x0a\xe4\x00\x16\xa3\xc2\x0d\x32\x62\x45\xcc\x8a\x44\xcf\x24\x81\x30\xb7\x88\xa7\x19\x98\xf8\xed\x70\x6d\x4b\x24\x36\x11\xc3\x3d\xc4\x73\xa5\x1b\x33\x39\x39\xce\x88\x6b\x13\x7e\x0a\xb7\x87\xf1\xbd\xd9\xe0\x77\x0f\x2c\x6d\x68\xdd\xdc\xa5\x94\xa1\x4f\x44\x41\x2b\x00\xdc\x1f\x4e\x10\xf4\x84\x6a\x08\x65\xfd\xda\xef\x70\xa2\xec\x4c\x36\xd8\xf9\x02\x38\xe5\xbb\x84\x4f\x56\x1b\x09\xa0\x71\xf4\x70\x3b\x74\x16\xc9\x22\x7e\x2a\x40\x2f\x2e\x79\x14\x07\x37\xb7\x83\xb3\xfe\xfd\xe0\xfc\x18\x3d\x48\xa2\x97\xc7\x4f\x17\xf2\xab\xbd\x4a\x62\x46\x6e\x91\x58\x98\x54\x04\x37\x19\x42\x88\x10\xa5\x2c\xe8\x35\x8c\xa3\x0c\xd3\xb2\x9a\xb0\x01\x24\x85\x5a\x43\x1d\x00\x0b\x55\xe7\x69\x23\xf3\xd6\x9d\x40\x88\x93\x1a\xbf\x9f\x28\x35\x33\xde\x74\x39\x32\x6f\x1d\xf9\x94\x23\xfa\x5e\x7a\x32\x70\xb4\xd4\x9c\x50\x81\x5a\x4d\xcb\x10\xd5\xb8\xfd\x9c\x82\x10\xf7\x4b\x9c\xad\x4e\x3f\xc5\xcf\x25\xa2\x35\xa2\x70\xe0\xbb\x7f\xe9\x73\xe0\xd8\xda\xd8\xb0\xc2\xdd\x27\x58\x38\xb4\x0c\x6f\xf5\x7c\xd3\x64\x7c\x48\x67\x24\x0b\x27\x56\x19\x84\x8d\x63\x95\x08\xce\x0e\xfc\x42\x19\x2a\x5d\x89\x3d\x34\xa5\x9f\x6d\xa3\x45\x7c\xbb\x7b\x35\x08\x78\x68\x88\xa7\x9c\xe3\xe5\x33\xb5\x81\xd8\x70\x03\xdf\xaf\x14\x22\xb9\xd4\x22\x51\xa4\xc5\x25\x41\x22\x2e\xf4\x4d\x01\xdd\x16\x5e\x88\x75\x22\x83\xc2\x42\x2f\xca\xb2\x57\x66\xd5\xe9\x2f\x6a\x90\xc4\x58\x91\x23\x2d\x7a\xad\x49\x80\xb6\x39\x32\x90\x4d\x83\x55\x00\x07\x56\xdc\x3c\x13\x32\xc3\xcc\x85\x66\x37\x0c\xd7\x5d\x79\x3b\xb0\x2a\xad\x02\x61\x48\x0f\x03\xf9\x0a\x52\x7f\x4a\xe3\x90\x19\xac\xe7\xca\x71\xd8\xe8\x97\x43\x58\xb6\x67\xec\x83\x71\x1a\x06\x9b\x67\xf1\x21\x0d\x36\xc1\x52\x21\x3b\xa6\x26\x53\x44\xa0\x22\xbe\xac\x11\xb6\xa4\xdb\xb7\x55\xde\x34\x09\x95\xb5\x58\x02\x9e\x11\xe9\x70\x53\x0c\x4a\x8c\xd6\x69\x9c\x20\x6c\x4a\x31\xfb\xb3\x6d\x6b\x32\xbb\x5b\x22\x64\x26\x10\xa4\xbf\xdc\xf4\x31\xea\xb3\x25\xbc\x2c\x17\x97\x55\x5a\x2f\x73\x27\xe1\xe4\x19\x2f\x24\xca\x84\x81\x96\x31\x91\xfb\x6e\xf2\xa0\x81\x95\x3f\xf2\xa1\x10\xca\xa5\x4e\x20\xb0\xc5\xac\x0f\x9a\x73\x72\xef\xf8\x05\x5c\x79\x95\xa8\x72\x2f\x90\x17\xcd\x15\xb6\x8a\x16\xac\x4e\x91\x71\x34\xc7\x6c\x46\xc6\xce\xc8\xba\x8d\xb6\xa4\xdb\x39\x83\x66\xce\x6d\x2b\xf5\x97\xd3\x8d\x51\x98\x6c\xfd\x17\xf3\xaa\x37\x20\xea\x43\x20\x15\x9e\x11\x64\x46\xd4\xca\x2c\x5d\x8a\x18\xb3\x60\xc3\xa0\x27\xd8\x56\x07\xe5\x28\xfa\x26\xe1\x1d\x42\x9f\x2e\xf0\x84\x24\x6f\x13\x39\x01\x5d\x5b\xe3\x3c\x78\xeb\x4c\x36\x00\x41\xcf\x60\xcf\xaf\xb0\x0c\x6b\xbd\x17\x79\x5d\x6e\xc0\xaa\x79\x96\xaa\x9f\xef\x30\x51\x57\x2b\x64\x9b\xa9\x36\x55\x10\x09\xaf\xbd\xa0\xd2\x46\x9d\x81\x2d\xbc\xfe\xaa\x36\xe5\xed\x06\x12\x14\xfc\x68\x18\xc7\xce\x15\x3f\xd6\x4e\x65\x6b\x90\x81\x96\x55\xf0\x86\x53\xc4\x38\x23\x88\xca\xe2\x65\x55\x4e\x87\xf2\x10\x3d\x5a\xc4\x37\xc6\x17\x5f\xa5\xcb\x17\x5f\x7a\x69\x4b\x4b\x01\x9e\xe0\x6d\x03\x2e\xbf\x9b\x11\xad\xa8\x62\xb1\x00\x88\x4f\xc3\x87\xcb\x32\xdd\xda\x71\xee\x5d\xe0\xbe\x77\x08\xae\x41\xa4\xae\xe2\x08\xc4\xc8\xca\xe0\x90\xc1\x41\xb5\x2f\xd9\x8f\x2c\x4c\xcd\x88\x79\xcb\x06\x10\x22\x95\x28\xc5\x19\xf8\xf4\x18\x57\xc5\x57\x06\x76\x49\xf9\x2d\xec\x39\x41\x5c\x9a\x1a\x5a\x0d\x2b\xb0\xce\xb4\xe3\xae\xdf\x62\x5d\xcb\xf0\x96\x0e\x9a\x77\x46\x9f\x08\x73\x34\xdd\x73\x67\x42\x0f\xca\x75\x9a\x2c\x8e\x30\x84\x19\x93\x38\xf4\x7c\xac\xe6\x48\xc6\x20\x73\x08\xf6\xc8\xf6\x4b\x76\x5f\x1b\x46\x63\x40\xd2\x4a\xe8\xf6\x2e\x30\x3c\xa4\x52\x8b\xdb\x6b\x32\xc1\xb1\x44\xbf\x63\x5c\xfd\x2e\x40\x36\x76\xc6\x0b\xf8\xd4\x99\xa0\x7a\x4b\x25\x5b\xe0\xd0\x5a\xc2\x41\x38\x40\xd8\x5a\xbb\xf2\xbb\xc6\x06\x14\x81\xef\x2f\x2a\x8d\x0e\x96\xb3\xe0\x9a\x6a\x5e\x75\x1e\x7b\x54\xbd\x16\xaa\x06\x4f\x53\x56\xaf\x38\xe9\x25\x43\xa7\x5c\xe7\xa2\xf7\x7b\xd1\xca\x35\xbf\x84\x08\xb0\x0b\xb5\xa5\xad\x23\xa7\xd6\x80\x20\xd7\xdb\x25\xb6\xc9\xf3\x6c\x92\xcb\x45\x39\x74\xcd\x96\xc1\x68\x40\xf9\x3d\x1e\xb1\x8f\x5c\xd8\x2b\x58\xda\x3a\x03\x13\x1c\x3d\x1e\x11\x16\x23\x9c\xab\xb9\x41\xdb\xb5\x7e\x85\x85\xa5\x06\x2d\x69\x00\xd9\x78\x28\x0d\x2a\x23\x2c\x62\x57\xf1\xe2\x89\xbb\x51\x8c\x58\xd0\x08\x54\x32\x80\x42\x4f\x50\xaa\xb6\x49\xd5\x24\x52\xeb\x57\x4d\x6b\x51\x57\x84\x75\xa9\x04\xeb\xea\x73\x56\x2a\x2a\x0b\x35\x18\x20\xc0\x89\x4f\x97\x57\x67\xe8\xac\x8d\x4e\xbf\xd3\xf4\xbc\xec\x85\xe8\x59\x8d\xc2\x98\xa4\xec\x0c\xb4\xa4\xf3\xad\xe3\xb5\x25\xd4\xe0\x69\x2e\x20\x5c\xb7\xae\xcd\xaf\xa3\x39\x4d\x0a\xdf\xc5\x37\x3d\x3f\x4c\xdd\x64\x42\x9e\x48\x62\x30\xeb\x23\x01\x91\xf9\xc6\x6a\xf8\x2d\xfa\x3f\xa6\x30\x29\xfa\xc3\x88\x7d\x02\x36\x9c\x24\x0b\x40\xd4\xf4\x2d\x63\x55\x69\xe6\xb1\x76\x00\xca\xa6\x02\xa1\xf2\x40\xcc\x5e\xcf\xf1\x13\x19\x31\xd7\xcc\xff\x41\x8f\xe8\xf7\xe8\x0f\x4d\xea\x9d\x0b\xb0\x7f\x61\x3b\xc7\xc7\x20\x7c\x3d\xb8\xe5\x2c\xa3\xb4\xfc\xc6\x99\x41\x4a\x46\xc8\x1a\x64\x0d\x0f\x8c\x4d\xd9\x13\x8f\x96\xb2\x38\xc2\x53\x8b\x05\x61\x6a\xcc\x78\x4c\xc6\xa4\xc6\xa5\xb9\x82\x49\x68\x21\xe0\x8a\xc7\x64\xad\x43\xd2\x33\xd3\x9f\xc0\x74\x23\xf3\x89\xdf\x0e\x48\xf0\xf7\xd9\xdc\xde\xfa\x50\xa6\xb4\xfa\x91\x7b\xf4\xd9\x6d\xc6\xbd\xad\x33\xd5\x85\x89\xf6\xe0\x42\xb0\x03\xa8\x77\xe8\x25\x58\x39\xf7\x7a\xf5\x38\x56\x1d\x01\xfa\x65\x3d\x73\x7b\x59\x05\xb8\xba\x50\xfb\x44\xd0\x19\xd5\xf2\x7b\x7b\x87\x2d\x70\xc2\x6d\xbc\x19\x06\x64\xb4\x95\x3b\xa3\x58\x0a\x07\xb4\x72\xe4\xe9\xaf\x70\x42\x4e\x78\x5e\x15\xe0\xed\x02\x50\x19\xba\xfb\xad\xac\xbe\xd0\x7c\x78\x66\x32\x00\xc9\x9c\x9a\x9c\xfb\xfe\xd9\x05\xd2\xa7\x83\xa7\x06\x98\x0a\x16\x2d\x57\x73\x2e\xe8\xaf\x8d\x19\x4a\xcd\x32\x7a\xe1\x69\x2d\x12\xba\xcc\x38\xcb\xd2\x3a\x10\xab\x11\x29\x54\x49\x2b\xa9\xd3\x99\xd0\x24\x07\x0c\x56\xcd\x66\xa7\x79\x62\x0a\x37\x44\x5c\xc4\xa6\x72\xba\x2c\xa5\x8f\x41\x18\xae\x13\xef\xb1\xf2\x0d\x52\x0b\x55\x69\x4b\x43\x18\x0b\xce\x4a\x01\xf4\xaf\x39\xc9\xf7\x94\x81\xf7\xa6\x31\xcb\xf7\x78\x26\x8b\x20\x64\xb3\x36\x9a\x37\x17\xeb\xfb\x0f\x3d\x53\x19\xe4\xac\x3a\xcb\xa2\x87\x80\x32\x2a\xb9\x29\x0c\xba\x91\x45\xe7\xd6\x40\xdf\xef\xc1\xa4\xf3\x1a\xf1\x1c\xcb\x32\x52\x0d\xfb\xb1\xe4\xf7\xe4\x33\x38\xab\x2c\xe2\x85\xec\x24\xae\x86\x40\x45\xfa\x78\x41\x93\xc9\x16\x4c\x6e\x59\xa8\x5e\x19\x15\x5d\x18\x50\x3c\x5b\xab\x49\xa6\x56\x1c\xd2\x2e\x9e\x05\x05\x84\xb8\x45\xf1\xb2\xaf\x81\xeb\xae\x8b\x90\xc7\x68\x29\xc5\x88\xb5\x10\xd7\xe1\x96\x70\x51\xcf\xe3\x37\x30\x40\xd8\x86\xca\x5d\x2f\xfb\xed\x9b\x4e\x84\x61\x49\x87\x7a\x24\x96\xe1\x61\xd6\x1e\x06\x5f\x09\xe4\x6d\x0c\x88\x5e\xb4\x79\xbd\x93\xe1\xc9\x71\x1c\xe1\x68\xde\x38\xa9\x09\xe7\x09\xc1\xac\x49\x7a\xad\x7d\x5c\x3d\x22\x06\xdc\x14\x58\x77\x92\x00\xc2\xaf\x5b\x02\x5b\x15\xb2\x10\xdf\x59\x0c\xc8\xec\x86\x87\x9b\xd8\x40\x37\x50\x45\x98\xb3\xfc\x50\x36\x4b\x48\x75\xad\x2c\x84\x7e\xcf\x76\x92\x44\x79\x12\x94\x85\xcc\x88\xd0\xa3\xd6\x4b\xfc\x44\x98\xd6\x19\xec\x38\x9c\x33\xe3\xd9\x25\x44\xfb\x62\x50\x3d\xdf\xb5\xf3\xa7\x41\xd6\x61\x3c\x62\x70\x70\x79\xf9\xb0\x6a\x5a\x95\x5a\xcd\x08\xed\x52\x5b\x9f\xce\x40\x88\xd8\xf8\x78\xde\x95\xcd\xc4\x1b\x9f\x49\xd3\xf7\x18\x62\x0c\x76\x76\xad\x05\xee\x97\x02\xaa\xc1\x6c\xac\x83\xe3\x7a\x25\x23\x32\x44\x6d\x94\xc3\x4e\x83\xa0\x8d\x26\x38\xa8\x17\xbd\x4b\x8a\xf2\x17\xee\x36\x68\x39\x94\x95\xae\xea\x96\x8e\x67\xb0\x4e\xae\x3a\xb7\x17\x36\x64\xbb\xec\xb2\xf5\xf9\x3d\x45\x98\xa3\x2d\xf0\xaa\x04\x06\x74\x02\xc8\x29\xff\xc9\x68\xd8\x54\x1a\x0b\x98\x2b\x73\x91\x66\x6a\x61\xab\xa2\xc1\xbd\x18\xe6\xf4\x1a\xc4\xb7\x3a\xf7\x70\xf5\x8e\x8c\x4b\x0e\xe2\xba\xce\xa0\x23\x6b\x56\xa8\x6d\xd2\x2d\x74\x88\x20\x52\x41\x6c\x68\x8a\x06\x31\x05\x66\xc7\x38\x69\xb4\x65\xed\x81\x69\x42\x9a\x6d\x81\xd2\x60\xc1\x5f\x95\xc8\x89\xe6\x5d\x38\x49\x2a\xf3\xc2\x90\x0e\xad\x7c\x91\xb9\x49\x51\x09\xb7\xbd\xb3\x3a\xc1\x13\xb2\x91\x7b\xfa\xc2\x7c\xb0\x92\x8a\xe0\x15\x88\xec\xce\xb2\x64\xd1\x2e\xa2\x3c\x0c\xbd\xab\x05\x49\x5b\x37\xb0\x10\x5a\x6d\xe5\xdd\x54\x86\x27\xdb\x6e\x88\x92\x44\xb9\xa0\x6a\x31\xb6\x46\xbf\xf6\x4c\xeb\xce\x7e\x79\x66\x3f\x6c\xa3\x51\x9f\x22\xd7\x9f\x33\x32\xc2\x3d\x25\xa8\xa9\xa0\x63\xa7\xd0\x66\xbb\xb5\x96\x5c\x0b\x9e\xb4\x6a\x61\x1d\x7a\x53\xbb\xa1\xea\x2e\xb6\x1d\x9e\xad\xcc\x31\xe6\x53\x87\x8b\xd4\x7e\x61\xab\x25\x4b\x36\xb0\x96\x3a\xf8\xe5\x4c\x50\x2e\x6c\x65\x90\x36\x41\x6d\x29\xfe\x3c\xce\xb0\xc0\x49\x42\x12\x2a\xd3\xed\x6d\xbb\x7f\xfa\xe3\xca\xd1\x9e\x99\x0a\x36\xd2\xd6\x83\xfa\x4c\xd3\x3c\x45\x2c\x4f\x27\x56\xca\xc5\xf2\x31\x04\xbf\x74\xa9\xfa\x06\xc3\xc9\x0d\xb0\x04\x18\x20\x02\x38\xd3\x11\x0b\x80\xad\xad\xa9\x02\x47\x73\x4a\x9e\x00\x76\x53\x30\x22\xe5\x31\xba\xe2\x8a\x9c\xa2\x4b\x9c\xdd\x83\xa0\x66\x4a\x4a\xce\x8c\x75\x1c\x4b\xa4\xa5\xd6\x9c\x51\xd5\x1b\x31\x8b\x86\xed\x56\xe5\x24\xe2\xcc\x20\xa2\x46\xb0\xb0\xbe\x09\x30\xf7\x3a\x68\x50\xe5\x12\x1b\xa9\x6c\x58\x6c\x81\x9f\xc7\x41\xf4\xea\xd8\x64\x07\x6c\x40\xc7\xb7\xf8\xd9\xc4\x6b\x9f\x63\x85\x4d\xb5\xd8\x55\x92\xbb\x0d\x88\xb2\x15\x84\x0c\x10\xb0\x0b\x1c\xe1\x16\x8d\xc2\xd7\x3e\x33\xd1\xa9\x5f\xd3\x63\x72\x8c\xbe\x4b\xf8\x44\xf6\x90\xf4\xa0\xd9\xf0\x50\x12\x25\x7b\xc6\x41\x05\xff\x36\xa9\x60\xdf\xb8\xd5\x2f\xf8\x3e\x94\xfd\x9b\xd2\xcf\x06\x04\x43\xfe\xe9\xf4\xe4\x24\x5d\x1c\x4d\xf2\xe8\x91\x28\xfd\x17\xc8\x14\xb5\x2b\xe4\x10\xa4\x70\x1d\x1e\xd5\xba\xd5\x59\xc6\xb2\x6a\x45\x91\x36\xad\x46\x12\xc0\x4d\xd7\x57\xba\x2f\xac\xea\xa0\x8f\x38\xab\xaf\x1a\x69\xa7\x2c\xf2\xa6\xe3\x55\x02\x5c\x7e\x1d\x6d\xc5\x14\x8e\x0d\x71\x9e\xa7\x09\x9e\x55\x54\x96\x0d\x94\x94\xeb\x94\x5a\x2a\xd2\x73\x87\x78\x0b\x7d\xca\xca\x51\x66\x5f\x39\x77\x24\xb8\x15\xad\xbb\xe5\x78\xc4\xfa\x12\x3d\x13\x53\x0f\x16\x72\x12\xc1\x3b\x91\x53\x39\xf7\x19\x89\x60\x2f\x85\x46\x0d\x1c\xae\x41\x4d\xb0\x8a\xa3\xd3\xac\x9c\xff\xc6\x6a\xa0\x38\x91\xa4\xa7\x1b\x06\x48\x34\x17\x48\x88\x9e\x05\xce\x32\x22\x46\xcc\x42\x9b\x02\x80\x37\xe7\x36\x48\xa4\x29\x9a\xbc\xd3\x28\x5f\x57\xa3\x0c\x93\x3e\xca\x09\x8b\xeb\xce\x37\xe4\x37\xae\x4c\xf5\x58\x91\x1b\xa8\x65\xd1\xb6\x91\xde\x6f\x6f\x36\x6e\x39\xe6\x75\xda\x79\xbf\x12\xa6\x0f\xe5\xa6\x53\x50\x20\x65\x51\x55\xd3\xd9\xfa\xbc\xfa\x5e\x12\x73\x00\x19\x1b\x3e\x8e\x39\x91\x81\x11\x1f\x79\x5b\x5c\x42\xa7\x44\x4b\x1f\x23\xa6\xc9\x38\x74\x38\x18\x80\x6d\x87\xb7\xad\x3b\x8d\x04\x97\xd2\x46\xde\x9b\x76\x56\xe7\x4f\xed\x50\xcb\xcf\xa0\x84\x0f\xaf\xaf\xc6\xcb\x55\xfd\x82\x67\xae\xbe\x9f\x7d\x58\x9b\x64\xdf\xd8\xd4\xda\x6a\x7e\xc5\x5a\x6c\x50\xcf\xef\xe4\xec\x62\xe8\x8b\x58\x55\xba\x5e\x2e\xe8\x17\x22\xab\x37\x97\xf4\x5b\x9e\x71\x50\xdc\xaf\xd2\xc4\x8a\xf2\x7e\xeb\x37\xab\x1c\xef\xbb\x0b\x6c\x5e\x65\xeb\xd7\xf2\x87\x32\xcd\xac\x0b\x4b\xdf\xd3\x36\x35\x5c\x2b\x11\x08\x8c\x2f\xed\x61\x07\xc1\x4b\xbf\x25\x15\x4e\xb3\x30\xe5\xd2\xe1\x86\xda\x69\x9a\xa3\xd6\x74\x09\xbe\x2a\x9e\x79\x84\x4d\x34\x4b\x75\x70\x4b\x5b\xb1\x99\xc7\xeb\xde\xc2\xa4\xef\x23\x8c\xf9\xf5\x72\x98\x93\x45\x11\xb5\x27\xad\xec\xe6\x4a\x70\x37\xd8\xfd\x27\xc4\x43\xc2\x37\x6e\xe8\xae\x49\x8a\x1e\x3a\x4a\x10\x2c\x6d\x38\x06\xe4\xf2\x55\xf2\x7c\x36\x30\x0f\xfb\x31\x9b\x6c\xe0\x23\x5f\x84\x21\xb8\x6a\x6c\x5d\xb1\xc8\x1d\x44\x2a\x04\x79\x22\x02\x68\xc7\xc6\xfc\xb0\xf2\x51\xc5\x89\x20\x38\x5e\x04\x2b\xe2\x03\x0e\x4c\xcf\x60\x1e\x93\x34\xd5\x0a\x3c\xa8\x26\x8c\x1f\xf1\xcc\xe9\x2c\xa5\xb7\xa0\x82\x06\x9d\xea\x1b\x2b\x08\x57\xd0\x5f\xb0\x23\xf2\x99\x4a\xa5\xe5\x8a\x9a\x58\x4d\xd7\x08\x48\x3c\x50\x57\x6b\x4e\xec\x0d\x37\xfa\xd0\xff\xee\xfa\xf6\x7e\x70\x3e\xfa\x50\x44\xe7\xbb\xf4\x33\x8f\x08\xe5\x00\xfe\x39\x1b\x31\x1f\x50\xeb\x01\x90\x61\x2f\x11\x8e\xe3\x02\xd9\xc0\x2a\x91\x46\x66\x5b\xc9\x91\x83\x53\xb1\x36\x94\x76\x45\x33\x0f\x90\x83\x74\xa8\x27\x6b\x85\xeb\xac\x74\x72\x4c\x26\xd5\x8a\x94\x97\x3d\x5d\x36\x21\x76\xab\x32\xba\x36\x51\x0e\x5c\x90\x91\x67\xa7\x2b\xc1\xed\x7c\x82\xcd\x25\xbc\x19\xb7\x73\x1b\xb2\xc5\xa6\x7e\xa4\x9f\x49\x7c\xdb\x20\x55\xed\x25\xa3\xa5\x55\x24\x60\xed\x2e\xe4\x8c\x6e\xa2\xf1\xfb\xa9\x3c\xe8\xef\xda\xb3\xa5\xeb\x02\x92\xad\x80\x57\x05\x6c\x55\x85\x30\x8a\x88\x50\x98\x32\x34\x85\x83\xcd\xa2\x05\x02\xc0\x0e\x02\x3e\xec\x3f\xa2\x94\x32\x40\x0e\x58\xb5\xb4\x0f\xe5\x79\x6c\x20\xb4\x5e\x0e\xaf\x1e\xee\x4b\xa2\xea\xf7\xd7\x0f\xe5\xa2\xee\xfd\x9f\x57\xca\xaa\x95\x16\x56\x05\x0b\x05\x53\x2c\xb2\x10\x2d\xca\xac\x5f\x99\xda\x89\x26\x0b\x45\x1e\x6e\x2f\x76\x92\xef\xea\x9d\x65\x8d\x18\xe1\xa1\x74\x55\x8f\x88\xd0\xe6\xd3\x98\x44\xeb\x50\x4c\xdb\xd3\x91\x89\x82\xd2\xeb\x60\xad\x89\x16\xe1\x0c\x4b\x94\x61\x61\xfd\x50\xb1\x09\x80\x2a\x57\x06\x33\x9a\xd7\x2a\x04\x89\x4f\x44\xfd\xa8\xaf\x3e\xce\xf6\x91\x05\x61\x45\x59\xf0\x8f\x92\xf1\x93\x69\x78\x83\x93\x66\x87\xb2\x22\xd5\xc5\x09\xcb\xd0\x03\xb2\x3d\x84\xb8\x0b\xc7\xa6\x42\x7c\x5f\x37\x07\x2b\xe2\xe2\x09\xb5\x4a\xca\x99\xa6\x48\x03\xa7\xea\x30\x58\x83\xe6\xf8\xd4\x7c\xdc\x12\x91\x2e\x88\x6a\xd7\x6d\x15\x4b\x89\xfa\x37\xc3\x9a\xb5\xbe\xa8\xba\x90\xbe\xac\x72\x36\x89\xf7\x66\xed\x1b\x24\x29\x48\x4f\x3c\x08\x54\x24\x3b\xd3\xdd\x60\x90\x8c\xd3\xff\xa6\x1c\x49\x70\x08\x68\xbd\x75\x2a\x43\x29\xed\x78\x0d\x30\xef\x66\x99\x78\xc5\x32\x6c\x08\x7a\x14\x0e\xc8\xa6\x81\x84\x40\x3f\xcb\x31\xc6\xbd\x10\xf8\x87\x9b\x82\xb9\x36\xb6\x60\x6f\x60\x48\xc5\x6c\xda\xa0\x21\xfd\x68\x28\xda\x83\x65\x00\xfc\x87\x2b\xc8\xe8\x62\x83\x6d\xee\x7a\x38\xdd\x90\xda\x36\x03\x50\x2a\xc6\xe7\xcc\xdf\x16\x8b\x1a\x67\xd8\xda\x1d\x40\x89\x72\x95\x12\xea\x0a\xeb\x1d\x8f\x58\x10\xb0\x22\x8d\xda\xa3\xcf\x88\x2b\x4e\x02\x15\x6f\x19\x00\x5b\x43\x92\x8e\x17\x7e\x4a\x3b\x50\x4d\x91\x57\xf3\x72\x79\x91\xa5\x7e\xec\xe9\x94\x73\xec\x12\x11\x9d\x05\xc5\xc6\x01\x86\xf6\x25\x68\x2f\x28\x28\x60\x3b\x06\x73\x34\x18\x2d\x70\x50\xae\x2e\x48\x5e\x8f\x39\x91\xec\x2b\xe5\x53\x3d\x69\x62\x4b\xa2\xe0\xaa\x7b\x40\x4b\x75\x98\xda\x96\x57\x1f\xf0\x3d\xa0\x33\x6d\xaa\x38\x04\xc7\x6a\xad\x99\xca\xf9\x78\x81\x12\xc2\x58\x24\xe8\xb4\xc9\xaa\xfe\x39\x23\xd1\x36\x10\x32\x37\x58\xe0\x94\x28\x22\x56\x85\x23\x95\x8b\x49\x83\x88\xe3\x76\xd0\xf6\x6b\x76\xd1\x54\xda\xa8\x96\x64\xf1\xda\xed\xc5\x3a\x48\x18\x3f\x8b\x8d\xd0\xaf\xf4\x34\x7e\xb4\x96\xff\x0d\x67\x61\xfb\x29\xa6\x61\xa3\xad\x02\x04\xa0\x5d\xe7\xf4\x3a\x50\x28\xf7\x4b\xa0\x22\xa5\x70\xa1\x03\xc1\x40\x59\x3f\xca\x26\xf0\x93\x75\xbc\x74\x2f\xbc\xdb\x65\x38\xb8\x14\xda\xca\xa1\x2a\xe5\x4e\x00\x95\x80\x4a\x65\x70\x40\xea\x01\x4c\x40\x68\xa9\x8b\x90\x0c\xdc\x7e\x16\xde\xae\x30\xe8\x5a\xc9\xaa\x5a\x5c\xaa\xb2\x5c\x6b\x78\xdc\xbe\xc0\x1d\x3a\x89\x66\xdf\x12\xcd\x3a\x52\x2e\x45\xd7\x6a\xea\x24\xa2\x82\x33\x63\x8b\x3e\x5b\x80\x80\xf2\x04\x21\xf7\xc8\x5e\x91\xb6\x72\x2c\x5c\xfd\x94\xf9\x7f\x95\x39\xb8\x23\xea\x90\x54\xeb\x92\x2a\x8f\x03\x17\x14\x78\xa0\x92\x50\x1a\xb0\x71\x35\x30\x5a\x13\x06\x69\xac\xfc\xc3\x2b\xe3\xc0\x82\xe4\xe6\x05\xcf\xd1\x33\x95\x73\xa4\xf8\x88\x41\x9c\xa0\xf7\x06\x28\x8e\xcc\x8b\x3d\x78\x0b\x60\x10\x64\x3e\x49\xa9\x42\x38\x98\x61\xc9\x24\xd9\xb3\xe7\x59\x7f\x00\x33\xae\xcd\xb3\xaf\x83\xe8\x59\x73\x68\xb6\xb0\xaf\x15\x8d\xec\x9a\x4a\x1f\xc4\x34\xbf\x6c\x32\x7d\xa0\xf1\x84\x1a\x66\xed\x99\xeb\xb2\xe9\x51\xbd\xb5\xc1\x82\x86\x02\xb2\x2b\x95\xaa\x72\xb7\x58\x43\xcf\x9a\x4c\xfa\x62\x23\x5a\xa5\xd2\x17\xaf\xef\x23\x97\xbe\xa9\x4c\xd9\xaa\xdc\x4a\xf7\x49\x83\xfd\xdb\xe5\xec\x2a\xee\x02\xe7\x43\x49\xe9\xa6\x51\x52\x3a\x34\x54\xb3\x22\x21\x60\xfb\xf0\xf2\x4d\xd4\xc1\x22\x3f\x2b\xa4\xa2\x20\xdd\xb2\x8c\x09\x43\xaa\x9c\x9f\x71\x05\x39\x35\x11\x94\x70\x5f\xca\xf3\x1c\xb1\x7a\x09\x64\x35\x4f\xdc\x35\x45\x63\xaf\xe8\x67\xc1\xf9\x73\xb3\xb0\x16\xad\x9f\x7c\x90\x9b\x51\x96\x6d\x31\xf6\xaa\x88\x59\xb8\xf8\x9a\x82\x93\xb4\xe0\xb1\x4d\xc2\x71\xcd\xa9\xac\x1f\xfa\x52\x02\xc5\xda\x73\x61\x2f\xdd\x3d\xaa\x76\x4b\xdc\xb9\x75\xbe\x89\x97\x91\x2d\x37\xb6\x01\xd3\xb1\xd7\xe3\x2b\xae\xda\x6d\xaa\xcc\x02\xaa\xe8\xde\xb0\x50\xab\xf0\x04\xba\xf1\x1e\xb8\x77\xed\xd8\xb1\x09\x75\xf1\x08\xdd\x95\x3d\x29\xcd\xd8\x56\xef\x7f\x89\x59\x6f\x5a\x1a\x38\xf0\x37\x0a\x1b\xef\x4b\x43\xcb\x01\xd4\x04\xb6\x61\x92\x15\x4e\xec\x85\xbb\x9c\xc5\x44\x30\x82\xd5\xfc\xf5\xb2\x2c\xce\x76\x35\x4f\x07\xe3\x7b\xd9\x8c\x8b\xb3\xbd\xd4\x85\x0f\x87\x5b\xae\x91\xbe\x76\x9c\xfa\xf5\x36\x96\x22\x1b\x7c\xe0\xab\x04\x2f\xa9\x8e\x35\x66\xc3\x00\x84\x66\x13\x2a\xdd\x29\x11\xa3\x5e\x9d\x7b\x99\x94\x94\x1a\xbb\xcf\x52\x32\x8a\x3e\xed\x61\x6d\xe5\x35\x4b\xf2\x45\xe4\x7e\xbc\x7c\x3a\xc2\xaa\x2a\xce\x79\x90\xa1\x00\xa5\xb4\x15\xa6\xcc\x72\xaf\x55\x49\x09\x5a\xa6\x4c\x71\x5d\x1e\xc2\xc1\x67\xb8\x7c\xf1\x09\x2e\x5d\xba\x43\x97\xee\x50\xb3\x47\x5d\xba\x03\x42\x87\x96\xee\xb0\x4e\x05\x5d\x65\x00\xf5\x3e\x39\xa8\xb6\x59\x2a\x71\x63\xf6\x77\x8d\x1e\xb9\x7d\x48\xbf\xb3\x21\x86\xf1\x50\xf6\x17\xfb\x43\x6d\x48\xd4\xd2\x67\xd5\xd9\x86\xf6\x4c\xb6\xa8\xba\x05\xb0\x88\x13\x8b\x43\x67\x03\x96\xcb\xf6\xa7\x55\xa6\xd2\x11\xfb\x9e\x3f\x93\x27\x22\x7a\x08\x2b\x94\x72\xa9\x80\x0f\xbb\xf8\x18\x38\x08\x25\x48\x73\x13\x07\x81\xd1\x15\x4e\x49\x6c\x2a\x1e\x06\x61\x8d\xd6\x60\x6b\x5d\xad\x75\x70\xab\x80\x1c\x6a\xb6\xc1\xc5\x4d\x8c\x98\x09\x35\x34\xe1\x6d\x20\x2b\x50\x37\x31\x20\x98\xdf\x79\x47\xf0\xef\x8e\xd1\xbd\xbe\x9f\xa8\x2c\x8f\x37\x40\x5f\x6b\x1a\xdb\x88\xcd\x04\xcf\x33\x6f\x43\xe3\x13\x53\xfa\xd6\x44\x3f\x2d\x3b\x82\x61\x30\xce\x0b\x1c\xe1\x58\xeb\xe2\xab\x09\xe7\x4d\xa2\x50\xb7\x82\x30\x0a\x09\x48\x1f\x43\x1f\x5a\x67\x43\xdd\x8d\xff\x36\x00\x6e\x59\x05\xc4\xfe\x42\xce\xe5\x73\x22\xc1\x2a\xe4\xad\xee\xa5\x3c\xf2\x32\x56\x41\xed\x38\x57\xd9\x44\xbd\xdf\xc2\xd9\xf6\xeb\x61\x10\x8a\xce\x6d\xcc\x97\x49\x52\xb5\xf7\xc4\x8b\x59\x4b\x5b\x47\xcf\x36\xf1\x8b\x9b\x5c\x64\x1c\x24\xb1\x64\xe1\x60\x1b\x2c\xd2\x5b\xc6\xb3\xdc\xc4\xb5\xd1\x30\xcc\xa9\x96\xb2\xa9\x54\x97\x58\x45\x73\xcd\xb9\x0b\xc4\xb3\x3d\xc5\xfb\x15\x5c\xf9\x65\x2d\xa8\x35\x33\x38\x0b\x7b\x6f\x70\x29\xb4\xb0\xa8\x9b\x7b\xdf\x85\xd7\x3b\x49\x22\xd5\xfd\x19\xb7\x9b\x2d\x68\x1d\xd8\x45\xdd\x27\xf6\x89\x9e\xe8\x3a\x2a\x5a\x37\xfe\x76\xb4\x55\xae\xb8\xb5\xf7\x48\xc2\x1d\x20\x64\xce\x2d\x60\x57\xf1\xa2\xad\xd0\xda\xe0\xfe\x17\x74\xbb\x2c\x20\x8b\x92\xff\xa4\xc5\x11\x6f\x71\x4d\x71\xa6\x95\x08\xc5\xf5\x2d\x29\x66\x46\x8e\x35\x71\xb2\x08\xa3\x5c\x50\x77\xf6\x2b\x39\xe1\xcd\xd4\x01\x16\xca\x93\xb0\xa2\x52\x84\x83\x62\x73\xc6\xe1\x8f\x23\x95\x63\x1f\x98\x08\x34\xe1\x8a\xa0\x9b\xfc\x77\xe7\x58\x17\x4e\xbc\xab\xd9\xd3\xb5\x84\xbd\xc3\x2e\xe3\x3a\x7c\xc3\x56\x27\x8d\xb2\x59\x00\x8e\x58\x6f\x25\x6e\x53\xfb\xa0\xf6\xcb\x76\xf5\x1b\x6a\x3f\x75\xb2\xcf\x36\xdf\xae\x00\x6f\xda\x3a\x36\xbb\x14\xe7\x6e\x03\x61\xad\xf4\x14\xc2\x56\x5a\xfb\x1d\xa0\xcf\x52\x70\xd4\x63\x2b\x4d\xfd\x97\xff\xcb\xd4\xca\x32\x4b\xf3\x5f\x88\x8b\x11\x33\xbf\xf7\x7c\x9d\x0a\xfd\x42\x01\x00\x8b\x53\x52\x40\x64\x8a\x32\x98\x1e\x40\x8a\x58\x30\x34\x03\xf6\xeb\x61\xfa\xf5\x18\x1e\xf3\x09\x11\x8c\xe8\xa1\x39\xf0\x01\xcf\xcc\x52\xcc\xf0\x0c\xa0\x85\x7b\x10\x19\x07\xe2\x6a\xa1\x8a\x18\x92\x36\xf5\x0e\x81\x5b\x69\x66\x69\xf3\x6d\x8b\xba\xbf\xd0\xa7\x11\x65\x2d\xb2\x69\x11\x5e\x51\x4f\xfd\xb7\xb6\xff\xed\x24\xf6\xfb\xfe\xdd\x0f\xe3\xdb\xc1\xdd\xf5\xc3\xed\x59\x49\x6c\x3f\xbb\x78\xb8\xbb\x1f\xdc\xd6\x3e\x2b\x72\x55\xff\xfa\x30\x78\x68\x78\xe4\x1a\xb8\xe8\x7f\x37\x28\x15\xd1\xfe\xeb\x43\xff\x62\x78\xff\xf3\xf8\xfa\xe3\xf8\x6e\x70\xfb\xe3\xf0\x6c\x30\xbe\xbb\x19\x9c\x0d\x3f\x0e\xcf\xfa\xfa\xcb\xf0\xdd\x9b\x8b\x87\x4f\xc3\xab\xb1\x0b\x3b\x0e\x1f\xfd\x74\x7d\xfb\xc3\xc7\x8b\xeb\x9f\xc6\x41\x97\xd7\x57\x1f\x87\x9f\xea\x66\xd1\xbf\xbb\x1b\x7e\xba\xba\x1c\x5c\xad\x2e\xd6\x5d\xbf\x1a\x8d\x75\x80\x83\x8b\x2c\x30\x1a\x05\x62\xd2\x64\x61\x49\x9b\xfe\x0a\xbe\x8b\x1b\x43\x8f\x47\x3d\xf7\x97\x29\xad\x7d\xa4\x59\xa0\xf3\x8b\x15\xdc\x63\xc4\xbc\xe3\xd2\x5f\xaa\x0a\xcf\xa4\x4b\x3d\x2e\x8d\xf6\x14\xf5\xe1\xac\x80\xc2\x50\xea\x14\x32\x1b\xfc\x48\x9d\xab\x1b\xe8\x30\xa1\x29\x05\xaf\x37\x3a\x42\xd5\x0d\x2f\x37\x68\xe7\x04\x43\xb0\x7e\xbb\x78\xd5\x69\x90\xd5\xac\x66\xa0\x94\x53\xe4\x38\x34\x31\xe6\x04\x83\x3d\xbb\x60\x38\xa5\x51\x35\x05\x03\xe0\x57\x51\x01\x35\x52\x6d\xb1\x44\x60\xe5\x96\xe7\x04\xfd\xf0\x97\x62\x50\xe0\xc1\xb0\x9a\x77\xbe\x54\x51\xcf\x3e\x10\xb9\x59\xd5\x75\xe4\x59\xea\xc9\x1d\x73\x6b\x5a\x86\x73\x6b\x2b\x77\x83\xbb\x29\x67\x01\xdc\x58\xc9\xf7\xa4\x8f\xb7\x99\x51\x85\xc6\x4f\xd1\x1d\x40\x9d\xc8\x42\x75\xd7\xbb\x98\x25\xf9\x8c\x32\x44\xd3\x2c\x21\x45\xcd\xf7\x09\x99\xe3\x27\xca\x5d\xf9\x0a\x53\xe5\x03\xd6\xd1\x8a\x56\xe8\x08\x35\x1e\x94\x53\xd4\x8f\x63\x59\x66\x70\x25\xca\x71\x2c\xf3\xa8\x3c\xec\x10\x21\x8c\xc5\x9e\x6d\x56\xe8\xa8\x38\x72\xb0\x62\xfb\x07\x73\x59\x66\x87\xe5\xbb\x77\x87\xeb\x5f\xaf\xe0\xd8\x91\xf2\x78\x2b\x61\xe0\x1e\xcb\x47\xc7\x9a\xd7\x09\x04\x0e\x56\x67\xb7\x1e\x2d\xbe\x4e\xdb\x4e\xfd\xca\x8e\xe1\xa0\x6d\xd7\x67\x23\x2a\xf4\x9a\x2e\xdd\x8c\x93\x4a\xe9\xae\xd6\xfd\x95\x4a\x7f\xd5\x76\xb6\x57\x6f\x4f\xbd\x34\x06\x47\x72\xec\xe9\x7f\x83\x79\xdc\xc0\xa7\xd7\xfe\xcb\x95\x22\xdb\x38\x58\xb7\x4d\x7d\x40\x4b\x49\xba\xd6\x0f\xb4\x92\x0e\xf7\x04\xef\xd4\x5e\x18\x84\xc2\x0b\x34\x02\x77\x1f\xa6\xcc\x96\xe3\x21\xde\x1f\xe5\x0a\x50\xeb\x73\xec\x4b\xc4\xe1\x09\x7f\x2a\x29\x97\x29\x91\x12\x37\x00\x96\x04\x26\xb1\x5d\x18\x83\x3f\xa1\xf6\xc3\x96\xf4\xe4\xce\xe4\xbd\xfe\x6a\x95\xd1\xe7\x36\xd4\x8c\xdd\x44\xb5\xc0\x1a\xbb\x48\x5b\x74\x6d\xf2\xed\x34\x7f\xe9\x15\xc1\x34\x5c\x04\x31\x46\x4d\xee\x9f\x96\x66\xb5\xea\x82\xd5\x56\x59\x0a\x5d\x78\x9b\xc7\xe0\x04\xad\x6f\x8d\x88\x6d\xfd\x2a\xb8\xbc\x3e\x1b\x50\x5d\xc9\xdf\x19\x56\xa0\x8e\x78\x9a\x1a\xb9\xa0\x64\x4b\xed\x21\x6c\xd2\x1c\x0b\x69\x4a\xe6\xd1\xdc\x78\x99\xf4\x95\xd1\x1b\xb1\xe7\x60\x43\x4a\x81\xc0\xfd\xb0\x25\x40\x13\xfd\xac\x8f\x1b\x7d\x2a\x85\x57\x83\xc8\x48\x21\xd6\x37\x20\x04\xe3\x10\x2c\xca\x47\xad\x21\xf0\x60\xbf\x76\x20\xf5\x2d\x6a\x05\x56\xd6\xb7\xa9\x62\xa0\x9f\x5b\x50\xa8\x6f\x07\x4d\xb9\xed\x10\x82\x5a\x81\x75\x23\xd8\x43\xa9\xc0\x57\x85\xf7\xf6\xe9\x9a\x26\xbb\x37\x9d\x58\x8c\x0a\x3d\x5d\xb7\xda\xbf\x77\x33\xfa\xbd\xf1\x3b\xe4\x0d\xa0\x26\x41\x6b\x1e\xe1\x1b\x1d\x69\x99\xd5\x25\xdb\xdb\x40\x0c\x89\x8e\x0c\x6a\xe0\x57\x10\x69\xd9\xbf\x19\x7e\xd5\x43\x5f\x85\xd9\x66\x5f\x6d\x75\x00\xed\xb8\x6d\xb9\x40\xd0\xa6\x4a\x29\x07\xe5\x63\x07\x7b\x55\x39\x89\x76\xcf\xec\x41\x44\x4d\xe7\x50\x7f\x59\xfa\x06\x9c\xd3\x50\xfe\xce\xf8\x6f\x7d\xc0\xb3\x75\x01\x19\x19\x97\xca\x9a\xb5\x8b\x47\x6c\xb2\xa8\x3a\x79\x7a\xde\xcb\xd3\xfa\x94\xee\x5c\xd2\x4d\xb7\xb7\x9c\x9e\xbc\xe7\x40\xdc\xd5\xf7\xc1\x9a\x84\xe7\xbe\x89\xb9\xe6\xd3\x80\x8b\x35\x45\x29\x74\x11\xec\x75\xb3\x2a\xd9\xcb\xdc\x62\xd6\x6e\xca\x3a\xf9\xe7\xbd\x91\x5b\x8b\xb0\xef\x7e\xdd\x8a\xd8\x88\xff\x06\xe1\xba\xa3\xb2\x97\xa5\xb2\x7d\x64\x3c\x94\x07\xb7\xf9\x05\x7a\x66\xe4\xb8\xa0\x19\x67\x70\xd5\xca\x84\x67\xf0\xa5\xba\x7f\xeb\x0b\xe6\x6e\xe8\xf3\x0d\xd6\x64\xbd\xd3\xf7\xce\x04\x0e\x18\xb7\xeb\xf2\x58\xab\x43\xed\x2b\x5b\x84\x88\x53\x93\xdd\xa8\x68\x4a\x7a\x88\xb3\x64\x11\x04\x3b\xd8\xf3\x0a\xe4\x66\x62\x94\xe6\x84\x0a\xd7\x89\xc5\x18\xdc\x28\x1d\x7e\x43\x69\xbc\x89\x46\x76\x88\x34\xb9\xea\x5f\x0e\xce\xc7\x83\xab\xfb\xe1\xfd\xcf\x35\xf8\x91\xe5\xc7\x0e\x42\x32\x78\xe1\xee\xe7\xbb\xfb\xc1\xe5\xf8\xd3\xe0\x6a\x70\xdb\xbf\x5f\x03\x2f\xb9\xaa\xb3\x26\xe8\xc2\x5c\xd6\xa9\x6f\x9b\xc0\x17\x3a\x33\x6f\x4d\xef\xcb\x20\x93\x41\x27\x94\x34\x00\x4d\x9a\xd4\x7f\x16\x13\x81\x62\xf2\x44\x12\x9e\x15\x66\xd5\xda\x05\x0b\x10\x28\x6b\xda\x5f\x85\x42\x09\x6d\x56\xd7\xf8\x14\x99\x5a\x6f\x41\xb9\x5b\xdf\x20\x88\x7c\x58\x10\xf6\x95\x42\xe4\x73\x96\xd0\x88\xaa\x20\x35\x90\x0b\xeb\x5e\x31\xee\x43\x88\x4e\x5d\x43\x5c\x7b\x8b\x46\xd9\xbb\xce\x1f\x7a\xd2\x97\xb5\x7d\x7f\xa2\x3c\x22\xda\xda\x02\x42\x7b\x50\xec\x1b\x9c\xc6\x4b\x80\x6d\x5b\x8c\xee\x25\xcc\x03\xcb\x39\x3a\x36\xbd\xaf\x01\xcc\xad\x7e\x90\xeb\x6f\xc3\x55\x71\x32\xa5\x73\xbd\x3a\x50\xa6\x1d\xa5\xbe\x71\xb8\x4b\xa9\xb0\xe6\x1e\x90\x37\x6c\xec\xfa\x86\x01\x0b\x4b\xf5\x62\x98\x89\x39\xc5\x48\x90\x94\x2b\xad\x80\x99\x88\x80\x9e\x16\xaa\x28\x4e\xe8\xaf\x80\x51\x25\xc8\x71\x10\x41\xe1\x90\xbd\x0a\xf7\x81\xc5\x8f\x38\x1e\xb1\xf3\xc1\xcd\xed\xe0\x4c\x33\xa4\x63\xf4\x20\x01\x7e\xaa\x34\xf5\x73\x4b\xde\x46\x1c\x0b\x23\x19\x28\x93\x8a\xe0\xa6\x60\x30\x22\x04\x17\xed\xf9\x83\xef\x6f\x00\xdf\xd5\x93\x37\x3c\x2b\xd9\xa6\x9c\x01\xe0\xaa\xb1\x2a\x72\x90\x33\xb0\xf7\x9c\xac\x5b\xfc\x5c\x5a\x91\x10\x7e\x03\x24\x91\xf2\xaa\xbf\xe0\x6a\x03\x80\x67\xfb\xf9\x95\xfa\xbc\x81\x6f\x57\xcd\xf3\x1e\x42\xec\xa4\x2a\xd0\x40\x0d\x60\xa8\xaf\x7a\x53\x99\x67\xa3\xa8\x28\xde\x02\xaa\xa3\x42\xfa\x13\x32\xc3\x0c\x89\x9c\xb1\x0a\x3c\x6c\x68\x69\x5b\x0e\x9a\xd9\xf4\xa8\xea\x35\xc3\x29\xcf\x19\x28\x0d\x10\xc6\x5a\x33\x18\x99\x11\xa6\xd6\x0c\xe6\xad\x80\x58\x2a\x43\x3d\x5c\x2c\x96\x9a\x81\x36\xc1\xb1\xd4\xf9\x93\xa0\xf4\xf2\x66\xd7\xb2\x0b\xca\x2b\x39\x95\xf4\xa1\xf2\xf7\x73\xbd\x96\x8d\xe5\xe3\xce\xdd\xdd\x63\xf9\xb8\xbe\xab\x98\x44\x8f\x9b\x5e\x36\xd5\xcc\xcc\xc4\x56\xae\x5e\x32\xf6\x2d\xf4\x53\x5b\x9a\x05\x0a\x96\x47\x8f\xe8\xfb\xfb\xcb\x0b\x34\xa5\x5a\xee\xd5\xd7\xca\x15\xd6\x32\xf6\x83\x48\x9c\x5d\xd8\xda\x56\x73\x91\xf8\xbb\x17\x36\xde\x89\x52\x81\x94\xa0\x6f\x34\x3c\x23\xce\xd8\x2b\x2c\xda\x5e\xa5\x34\x8b\xc0\x2c\xe6\xa9\x99\xc7\x89\xcc\xa7\x53\xfa\xf9\x58\x61\xf1\x4d\xc3\x7a\x98\xa8\x8a\xf1\xdf\xf9\x64\xac\x47\xb4\xe3\x45\x5c\xd7\x1c\xb2\x05\x95\xfd\xb2\xd9\x99\x9d\x9b\x77\xff\x2f\x9f\x40\xb6\x7b\x26\x38\x20\x00\x82\x77\xce\x46\x2a\xd8\x57\x1c\x25\x1d\x23\x97\x40\x55\x02\x39\x89\xb8\x10\xc4\x26\xc9\x9b\xda\xa2\x19\x16\x8a\x82\xb5\xd6\x81\xa4\x94\xd0\xf1\x8b\x2d\x0a\x4b\x7e\xcf\x71\x81\x44\x3d\x21\x04\x1c\x3c\x19\x4d\x36\x53\x7a\xcf\x4a\xbe\xc9\xca\x09\xb4\x91\xa7\x16\x37\x13\x0c\x32\x6b\x45\xac\xc1\x13\x61\x6a\x2f\xfa\x09\x34\x51\x93\xb6\xdf\xce\xcb\x60\x4a\x7c\x0e\xcf\x8b\xcb\xcd\x85\xf4\x86\x51\x4d\x4a\x60\xb8\xe7\x6d\xa2\x94\x75\xa9\x37\x39\xfa\x9f\x5a\xfb\x8e\xe1\xd5\xe5\x75\x59\x13\x1a\x6f\x57\xbb\x28\xf5\x5d\x84\xb5\x3a\x68\xff\x2d\x81\x7c\x24\x31\x56\x8c\x00\x40\xc2\x2a\xa7\xd5\x3d\x37\x7d\x6a\xda\xaa\x74\xb9\x76\xcb\xb7\x40\xad\x29\x35\xf3\x89\x40\x4a\xe7\x3e\x02\xd1\x37\xc9\xdd\x87\x81\x3c\x88\x04\x42\xa8\x57\x5a\xb1\x4c\x99\x71\xcd\xf9\xbc\x64\x87\x5b\xc8\xe8\x66\x30\x5a\x68\x24\x99\x20\x91\xbe\xca\x4e\xd1\x4d\x42\xb4\xe4\x95\x6b\xe9\x2b\x4f\x12\x87\xf0\xb5\x5a\x3a\xdc\x08\x95\xee\xc5\xe7\x15\xe8\x1e\x2b\x26\xe6\x10\xee\x56\xcf\x2c\x58\x83\xfd\x23\x2e\x04\xeb\x0b\x26\x64\x30\x24\x96\xb5\x48\xe0\xf0\x0b\x13\x37\x0b\xa6\x24\x5c\xba\xc8\xe8\xaf\x9a\xfd\x0a\x22\xe7\xbc\x31\xc9\x31\x9c\xed\xcb\xcc\xc1\x2d\xe5\x0b\x4e\xc2\xdd\x87\x4d\x71\xd5\x2d\xe4\x9a\xca\x1d\x58\x12\x71\x56\x4d\xd1\x57\x7f\xf0\xd1\x1f\x16\x6f\xd5\xde\xad\x76\x68\x70\x4b\x16\xa6\xb6\x10\xfb\xac\x70\x5d\x14\xca\xcc\xc2\xf8\x5e\xfd\xe7\x85\x01\xb9\x48\x09\xa0\x4a\x16\x55\xe7\x90\xbe\x6b\x9b\xb6\x58\xcf\x73\x9c\x8b\x8d\x20\x29\x0a\xd4\xf2\x4d\x38\xb7\x4d\x46\x29\x86\xa5\x17\xa1\x9e\x5d\xda\x62\x12\x20\x46\xdb\x50\x23\x59\x42\x82\xb3\x64\x63\x96\xb1\x56\xc5\x6b\x66\xca\xbb\xba\xd5\x40\x4a\x2e\x44\x99\x97\xf2\xae\x95\x28\xb0\x34\x81\x0e\x5b\x6c\x73\x6c\x31\x5b\x59\xc4\xd3\x1e\x20\x01\x2a\x01\x89\xff\x85\x03\xad\x2a\x38\x58\xa3\xf7\xba\xcc\xa7\xd2\xee\xb4\x4a\x73\x2a\x7d\xa1\x79\xc9\xf9\x8e\x1e\x38\x3d\x99\xc5\x18\x12\x47\x77\x89\xc2\x29\xcd\xdf\x78\x0f\xa0\x4d\x12\x23\x83\x5e\x60\x90\x8f\xed\xda\x79\xcf\x49\x86\x05\x61\x6a\xc4\x6e\xf5\x28\xcc\x17\x45\x24\x86\x8b\xc3\x71\x68\xf4\x50\xb3\x76\x8a\xb0\xfd\x0a\x16\xbd\x29\x10\x4e\x8e\xcd\x4b\xa0\x9a\xbe\x60\x92\xfd\x77\xe6\x1d\x83\x79\x60\x31\x7f\xf4\x54\xe9\xb4\x50\xe3\xb5\x00\x19\xcd\x29\x40\x0e\xc4\x44\xda\x0b\x89\x2a\x8b\x29\xe1\xc5\xef\x9c\x38\xfc\x65\xf8\xcc\xf3\xaf\x3a\x86\xed\x0c\x05\xcc\x19\xe8\xe4\x88\x05\x7d\xac\x80\xeb\x34\xca\xfa\x96\xaa\x04\xec\x33\x8d\xbd\xe3\x0b\xfe\x69\x76\x88\x0b\x3a\xa3\x2c\x28\x9a\x64\xa7\x97\xe2\x0c\xcc\xbb\xe6\x0c\xf2\xa9\xbf\xd3\xee\x6d\x96\xc1\x31\x8c\xf8\x7f\xfe\xfb\x6f\xc7\xb4\xc9\xfb\x21\xc7\x76\x05\x0e\x61\x27\x37\xdb\x96\x70\xe7\x03\x14\x91\x06\x74\x8a\x40\xa7\x95\xa5\xcc\x89\xe2\x57\x7b\xb9\x69\xa2\xe1\x6a\x6e\xdc\xbd\x65\x72\x07\xdf\x88\xc8\x57\x9c\x0d\x73\xc5\xbc\xed\x5a\x52\x09\xd9\x01\x7a\x24\xe6\x24\x7b\x03\x41\x58\x90\x7c\xc9\x4c\x33\x62\xc5\x27\xd2\xe0\xa1\x18\x78\x57\xf3\x43\xb1\x3a\x2d\x17\x66\x15\xef\x2f\x22\x25\x0a\x77\x78\x10\x8d\xec\xca\x67\x98\x28\x52\xdd\x7e\xe5\xa6\xad\x70\xee\x00\xe7\x70\x97\xa8\xcd\x39\x96\x2f\x17\x9a\x53\x5b\xf6\xc9\x58\xd3\x43\xe1\x61\x5d\x90\x8e\x19\xa4\xc9\xf6\xd4\x1b\x92\x4b\x22\x0c\xa7\xf3\x70\x58\x96\x12\x42\x14\x47\x88\xd1\x5c\xe3\x6b\x24\x29\xa6\x1b\xe5\x13\xe8\xf7\xeb\x31\x26\x4b\xce\x06\x3c\x23\x62\x1c\xe7\x6a\xe9\x58\xac\x8a\xf1\xd7\x1f\x9d\xe7\x6a\xb1\xbe\x7d\x99\xe0\xe5\xb2\x37\xab\x70\x3d\xf5\xfb\x0d\xcd\xae\x97\x98\x83\x10\x9f\xb2\xd4\xdc\x80\x9a\x49\x2a\xa8\x99\x36\xe6\xb4\x64\x22\x81\x1b\x98\x29\x80\xd4\x2b\x34\x29\x7b\x45\x1b\x6c\x6f\x18\x39\x9a\xe4\x85\x49\xc9\x57\x4b\x88\x8f\x47\xec\xa3\x29\x37\x02\x5a\x9e\x19\x40\x04\x09\x3f\xe4\x73\xc6\x25\x29\x65\xa0\xd5\x54\x40\xb0\x19\xa4\x76\x18\xf5\xc2\x7a\xf1\xd1\xee\xb2\xfa\x9b\xe3\x9f\x2e\x6f\xf8\xf2\x94\xeb\x29\x70\x27\x71\x30\xa2\x19\xd5\xb4\x33\xae\x3d\x69\x2f\x57\x85\xb7\x88\xe9\x02\x1c\x2c\x95\x2c\x7a\xc8\x4f\xaf\x42\x10\x09\x79\x22\x60\x4e\x87\x31\x86\x75\x2e\xca\x76\xbd\x06\x76\xb2\xee\x00\x15\xe9\x9f\xc0\x16\x50\x5c\x1d\x41\x39\x49\xae\x8e\x16\xcb\xe9\x3f\x3b\x67\xaa\xd5\x05\xa6\x6c\x20\x9e\xf7\xc3\x7a\x1f\x0b\xa2\x10\xf9\xac\x88\xad\x08\x7a\xef\x72\x09\x97\xd3\x0f\x50\x7d\x3a\x54\xb3\xec\xf8\xe2\xb5\x99\xfb\x2e\x83\xdc\x25\x4b\xc6\xee\xca\xb7\xc9\x83\x73\xcc\x62\x9b\x11\x6b\x95\x0c\x2d\x6c\xc1\xec\x8c\xd1\xcd\xe7\x0a\xd8\xbc\xce\x00\x28\xdd\xb4\x69\x10\xdd\xe1\x22\x73\x0a\xa3\x56\x59\x20\xbc\x82\x0b\x2d\xb9\xe7\x4c\xd1\x44\x13\x87\x1d\x83\x44\x53\x88\x8c\xb3\x40\x85\x10\xd9\xde\x84\x85\x47\xa5\xa4\x6c\x36\xb6\x2b\xe9\x92\x3b\xdb\x5d\x0c\x65\x9a\xba\x34\x4d\x99\x1f\xbf\x73\x0d\xad\x36\xaa\x1b\xb2\x06\x9c\x32\x97\x56\x0a\x1a\x07\xe3\x6e\x32\x16\x60\xce\x65\xa3\x8e\x69\x6c\x96\x82\x9a\xc2\xd3\x30\xd1\x4d\xec\xee\x20\xd3\x2d\xe3\x38\x14\x57\x88\xb4\xa9\xa2\x26\x01\x0c\x22\xf5\x55\x43\x2e\xac\x6c\xcc\x81\x1d\x32\x2f\xa2\xd9\xb2\x57\x3e\xd3\xbf\x92\x4e\x8b\x5d\x77\x36\x1d\x01\x27\xc9\x04\x47\x8f\x5e\x0b\xf3\xb6\x08\x2e\x5c\xd9\x00\x2d\x57\x42\x5d\x34\x43\x5c\x7a\xa0\x11\x48\x37\xa1\xb7\xd0\x20\xf9\xd8\x61\x17\x9d\x9b\x55\xb3\x10\x69\x06\xba\xc9\x8c\xde\xe4\x36\xc4\x24\x4b\xf8\x22\x6d\xb8\xcf\xaa\x29\x84\xbb\x44\xea\x34\x65\x30\xee\xf5\x2a\xab\x30\xbd\x8d\x2f\xb3\xa5\x7c\xa4\x3d\xe0\x4a\x6d\xc0\x25\x3f\x25\x7c\x02\x26\x55\x6b\x7e\x70\x39\x36\x41\xaa\x47\xf5\x3c\x6f\x9a\xf9\x53\x3d\x91\x54\x66\x89\x56\x66\x9a\x7b\x30\x39\x27\x2f\xbb\x6f\x06\xa3\x60\xbd\x75\xb0\x7d\xb4\x76\xed\xe7\x2f\x81\x60\x7c\xe1\x24\x01\xf3\xae\xe1\x5f\x15\x2b\x9b\x49\xf6\x3b\x36\x4e\x6a\xc5\x47\x4c\xe1\x99\xdb\x5c\x2b\x5c\xf2\x67\x46\x84\x9c\xd3\xac\x54\x2f\x71\xe7\xf0\x70\x4b\xd1\xf6\x3f\x26\x18\x7a\x03\xde\xc9\xb3\x23\x83\x50\xa2\xe9\x43\x66\x38\x2a\xac\xa2\x51\x82\xa5\xa4\xd3\x45\x00\x2c\xe2\x23\x6d\x21\x7d\xab\x6c\x46\x08\x4a\x94\xd5\x31\x1a\x33\xbe\xfd\x64\xd6\xef\x9e\x55\xf8\x50\x3e\x7e\x34\x0e\x11\xdc\xf4\x7d\xb2\x8c\x22\xe3\x6e\x6a\x8b\x26\xd3\x88\x44\x6b\x20\x04\xb6\xcb\x84\x5f\x09\xfe\xd3\x6c\x46\x28\x84\x49\x3b\x6c\xab\xc8\x78\xc0\x8f\x10\x0c\x47\x95\x52\x29\x61\xf3\xb5\xe2\xe4\xec\xc2\x9a\x38\x3d\x58\x08\x60\x2a\x14\x1f\xf7\x90\xdc\x09\x64\xab\x0d\x5d\x9c\x93\x84\xec\x25\xe2\x7a\x0b\x22\xa9\x86\x33\x04\xe4\xb1\x92\x34\x8a\x32\x03\xeb\x8d\x0b\x5b\x04\x82\x37\x40\xf5\xd4\x0f\xfd\x27\x33\x50\x1b\x0b\x5e\xb7\x8b\x60\x18\x84\x55\x6e\xab\xbb\xd4\x61\xfe\x99\x16\x2c\xc9\x15\xdd\x94\xe8\xaa\xe8\xd4\xcb\x2b\x87\x48\x6a\x6f\x1c\x32\xbd\x34\xae\x4f\xa4\x4d\x78\xc7\xda\x03\xb0\x15\x07\x5a\xe6\xd3\xed\xe8\xc2\x3a\x50\x15\x47\x33\xa2\x4c\xf5\xff\x98\x3e\xd1\x38\xc7\xc9\xbb\xa2\x89\xbd\x25\x7c\xec\x69\xf5\xeb\x0f\xf9\x66\xa7\xf6\x8e\x28\xe9\xae\x84\x25\x18\x45\xbb\x39\x07\xb8\x05\x87\x71\x2c\x8d\xe0\xfa\xc5\xcb\x2d\x3b\x83\x24\xd8\x91\x59\xa8\x80\xdf\x90\x40\x65\xe6\x18\xdb\x2f\x3c\x2c\x40\x09\x10\x0b\x97\x40\x04\xcd\x1a\xbd\x3d\xd7\xab\x92\xf6\x97\x2e\x7a\x6d\x4e\xe3\xd5\x51\x15\xd4\xdd\xc9\x83\x9b\xc9\x83\x0e\x64\xf3\x00\x2f\xff\xa6\x63\x70\x98\xf7\xcf\x01\x08\x87\x4b\x57\xe2\xfe\x44\xc4\x77\x44\x26\x07\x21\x29\x2e\x6d\xc5\x6b\xc9\x8b\x47\x0e\xe5\xa8\xc0\x0c\x3a\xdc\x2d\x3a\x8c\x93\x7c\x6b\xdd\x40\x2f\x77\xc1\xae\xa7\x97\xbd\xd0\x07\x00\x7e\x62\xc8\x8b\xce\x6d\x05\x11\x38\xbc\x41\x2c\xdd\x92\xef\x61\x4d\x94\xa2\x1d\x5e\xab\xf8\xc4\xa5\xe5\x7c\x89\xed\xb5\x49\x70\xad\x37\xf7\x25\x49\x6d\xd3\xb1\xec\x43\x47\x79\x61\x2f\x8e\xa5\xc6\xe0\x83\x2e\x58\xb8\xdd\x2d\x5a\x03\xad\xe3\xb6\x6c\x9f\x87\xac\xae\xec\xdb\xee\x69\xfc\x2e\xc7\x6f\x9c\x09\x32\xa5\x9f\xb7\x12\xc5\x6f\xe0\x53\xab\x5e\xea\x65\xae\x14\x92\x03\xf7\x0c\x14\x9e\x0b\x02\x1a\xed\x4a\xdb\x62\x53\x23\x56\x64\x46\xda\xb4\xc8\x47\xb2\x40\x5c\x94\x7e\xda\x16\x04\x72\xff\x45\xef\xcc\xbe\xce\x95\xca\xe4\xe9\xc9\xc9\x8c\xaa\x79\x3e\x39\x8e\x78\x6a\xe2\xf0\xb9\x98\x99\x3f\x4e\xa8\x94\x39\x91\x27\x7f\xfc\xc3\x1f\x8a\x2d\x9e\xe0\xe8\x71\x66\x60\x75\x96\xfd\x4e\xe5\x2d\x27\x58\xee\x16\xd9\xe3\x52\xd8\x5e\x38\x95\x39\xe8\xc6\x25\x8f\xea\x6f\xa4\xc2\x69\x16\x86\x82\x9a\xb2\x71\x52\xe1\xa2\x58\x05\xe4\x25\xea\x69\xa2\x39\xce\x32\xc2\x9a\xcd\x0e\x26\xd1\x74\x07\xd6\xe3\x52\x55\xed\x08\xc9\xe7\x2c\xc1\xac\x0c\xbf\x00\x95\x97\x04\x89\x08\x53\x16\x1a\xa0\x28\x25\x0d\xd4\x68\x20\x80\x0c\xff\xdf\x2c\x15\x11\xe6\x48\x65\x51\x52\xcd\x0d\xc7\x96\x37\x75\x45\x2f\x71\xb0\x74\xd5\x92\xb2\xc5\xda\x11\xb7\x6a\xab\x92\x14\xef\x96\x4b\x8b\x6f\x5e\xd2\x46\x70\x36\x26\x9f\x35\x93\x93\xdb\x02\x76\x3d\x48\x22\x51\xff\xa7\x3b\x24\x17\x4c\xe1\xcf\xa7\xe8\x92\x32\x10\x60\xbf\xe7\xb9\x90\xe8\x1c\x2f\x8e\xf8\xf4\x28\xe5\x4c\xcd\xd1\x25\xfc\xaf\xfd\xe9\x99\x90\x47\xf4\x33\xc1\xc2\xf2\x07\x5b\x92\xce\xd7\x37\xd7\x24\x24\x72\x26\x11\x79\xd2\x27\xf4\x0f\xff\x89\x52\xd3\xf2\x29\xfa\xf6\xe4\x0f\xff\x89\x7e\x07\xff\xff\xff\x47\xbf\x6b\xd0\xf4\x37\x83\xfc\x82\xca\xc5\xb7\x65\x77\x6e\xaf\xb2\x52\x5b\x54\x73\x3f\x13\xbc\xd8\xa9\xda\x96\x1f\x69\xf4\xc8\xa7\xd3\xb1\x26\x0c\x93\xc8\x37\xc6\x62\x09\x2e\x7a\x4b\xfc\x54\x6a\x6b\x4f\x9b\x4a\x76\x45\x0d\x19\xdb\xa9\x41\x7c\x70\xec\x5a\xe6\x45\xe5\x5d\x08\x22\x2a\x55\x33\xa6\x12\xbe\x22\xb1\xe6\xaa\x9b\x9c\x0e\x67\xdd\x73\xc9\xdf\xce\x82\x13\x22\xa4\x84\xf5\xd4\x7d\xe0\x5f\x18\xc5\x6a\x02\x7d\xec\x42\xd6\x1e\x87\xa5\xf0\xda\x2f\x26\x66\x12\xa6\xf6\x56\xf1\x92\x72\xa9\xf3\xf5\xa1\x92\x77\x5c\xec\xa4\x6f\x3d\x92\xc6\x54\x86\x35\xf5\x92\x5c\x0d\xdf\xb0\xb2\x3f\x64\x88\x73\xe1\x71\x8c\x8d\x5d\xc4\x56\x55\x5c\x6f\xc5\xa4\xc2\x04\x97\xb5\x3b\xf4\x7a\xea\xe7\xfe\x93\x75\xc3\x84\x48\x33\xf7\x76\x51\x2f\x0e\x46\xab\x45\x24\xcd\x12\x6b\x46\x5c\x03\x76\xb8\x6e\x43\xef\x3c\xbe\x05\x34\x0e\x61\x8f\x90\xbf\xc1\x9c\x64\x6b\x01\x04\xea\xf7\x33\x17\x11\x39\xe3\xbb\x85\xbd\x26\x94\x2d\xc5\xcb\xb7\x2f\x45\xe4\x57\xef\xc2\x16\x9d\x72\x78\xc0\x3c\x2e\x94\x05\xe3\x16\xb0\x55\x28\x02\x20\xd2\xf2\x6c\x00\xd0\x6e\x1f\x58\x97\x4b\xb5\x11\x76\xe0\xda\xc6\x70\x5c\x30\x3c\x57\x5a\xa3\x52\x51\x43\x60\xcd\x0b\x57\xc4\xae\x41\x50\xd1\xce\xe3\x08\xaa\xc4\x14\x91\x4a\x95\x6a\xec\xd8\x94\x4a\x11\x5b\x62\x95\x9a\x82\x4d\x3d\x24\x30\x04\x65\xaa\xb9\x6e\x4f\x12\x71\x34\xc5\x11\x65\xb3\x5e\x00\x53\x09\x90\x11\xe1\x75\x50\x47\xa4\xf7\x58\x3e\xee\x37\xd0\x70\xe7\x02\x96\x34\x2e\x8a\xa8\x59\x60\x19\xe3\xd8\xa0\x4b\x18\x7d\x0a\xcb\xc7\x26\x64\xa5\x25\x58\xb7\x15\xa3\xf3\x4b\xe1\xc0\xe0\x56\x8d\xcf\xa5\xa0\x93\x50\x9f\x82\x9a\x0d\xae\xa4\xb2\x05\x79\x74\x19\x7f\xd8\xa3\xb0\x54\xd1\x4d\x57\x8c\x5f\xce\xb9\x50\xe3\x2d\x71\x61\xab\x69\xf4\x8c\x1c\x25\x00\xe8\xc2\x9f\x88\x78\xa2\xe4\xb9\x0c\xaf\xba\x09\x2d\x1a\xa3\x59\x10\x55\x07\xf8\x9b\x69\xc6\x21\x85\x66\x8a\x52\xcc\x16\x86\x51\x6a\xe6\x82\xe5\xa3\xf4\x85\x5c\x91\x4c\x71\x92\xf4\x90\x20\xb9\x34\x05\x8e\x25\x49\xa6\x47\xae\x14\x46\x8c\x12\x3e\xa3\x11\x4e\xd0\x24\xe1\xd1\xa3\x34\x19\x6e\x6c\x66\x98\x54\x26\x78\x44\xa4\x0c\x24\xab\x22\x9b\xdd\xe6\x18\x42\x15\x57\x45\x44\x4a\x19\x95\x8a\x46\x4e\x64\x2a\x40\x29\x4c\x2d\xf1\x08\x83\x49\x18\x32\x36\x61\xb8\x5a\xd2\x23\x06\x9c\x33\x67\xb6\x68\x12\x5c\xd7\x16\x73\xcf\x05\x89\x37\x1d\xa0\x3d\x40\x08\x3a\x0a\x19\xab\xf2\x81\x5c\x73\xa4\xce\xec\x67\x70\x8c\x57\x91\xc0\x6d\xf9\x44\x79\x82\xf4\x27\xad\x04\x6b\x04\x31\xe5\x3e\x04\xbe\x24\xb9\xf8\xc8\xf0\x03\x43\x34\x83\x21\x37\xe0\x98\xad\xa3\x69\xbd\x8a\x20\xf2\x40\x9d\xae\xaa\xd7\x9c\xb2\x28\xc9\x63\x5f\xa9\x51\x8b\x00\x4f\x9a\x48\xdc\xf2\xe8\xb5\xd7\x82\x42\x0f\x61\x89\x9e\x49\x92\xe8\xff\x9a\x08\xf8\x23\x5f\x38\x41\xb3\x64\x53\xdc\x02\x3a\x71\x5c\xba\x89\xa2\x0e\x0e\x9d\xf2\x06\xab\xb9\xc9\xf9\x4f\xb9\x32\x45\x32\x0d\x3a\xa5\xb3\x6f\x19\x38\xc3\x49\xc2\x27\x70\xd2\x01\xb8\xd2\xe5\xb9\x06\x69\x75\x79\x14\x11\x12\x93\x18\x7d\x1d\x1c\x5c\x8f\x47\xf1\x4d\x3d\x8c\x62\x69\x45\x0e\x00\xb4\xb2\x6a\x58\x6b\x84\xae\x2c\xd7\x79\x3b\x46\x37\x15\x60\x96\xb0\x7e\x3b\xae\xc2\x74\xf5\x96\xb6\xf0\x6d\x80\x2e\x2b\x93\x78\xb9\x1d\xda\x10\xe8\xb2\xd4\xe7\x1e\x80\x2e\x2b\xf3\x6c\x88\xdd\xe7\xb3\x17\xcd\x39\xd6\x93\xba\xe0\xed\x13\xc1\x0c\x40\x98\xb9\x3b\x4b\x24\xe8\x0e\xe4\xa2\x8e\x10\x0f\x0b\xc4\xb3\x52\x0d\xf1\x6d\x41\x3c\x2b\x83\x39\x64\x10\xcf\xca\x50\x0f\x17\xc4\xb3\x66\xa0\x2d\x40\x3c\x8d\x73\x7f\xac\x89\xba\x1d\x53\x80\xc4\x96\x49\x3e\xbd\x83\x54\xef\x95\x63\x3c\x33\x81\x03\xe6\x1a\x73\x77\xb4\xc5\xb4\x86\xd1\xda\x1c\xc8\xa6\x70\xa8\x8a\x13\x62\x53\xda\xf3\xde\x37\x03\xfe\xb0\xa9\xd9\xbd\x17\x5a\xbb\xc1\x0e\x19\xe1\xcc\xe6\x94\x37\x95\x9a\x39\x9c\xec\xd9\xed\xf0\x51\x01\x83\xb0\xc4\xf2\x5b\x21\x88\x5d\x56\xaa\x36\xcc\xf9\xb3\xad\x9c\x04\x64\x68\x88\xb2\x91\x04\xa1\xd3\xb1\x55\xda\x9a\x56\x8e\x32\x45\x66\x55\x9d\xb6\x38\x34\x94\xa9\x3f\xfd\x71\x2d\x27\x32\x10\x8b\x4e\x3d\x0c\x6a\x27\x78\x67\x87\x7d\x46\x62\x14\xcd\xb5\x56\x24\xb5\xfa\xa2\xa7\x63\x6e\x56\x89\x52\x4c\x9d\x22\x95\x4b\xe3\x5a\xa2\x72\xc4\x4a\x98\xa4\xc7\xe8\x23\x14\x84\xc5\x69\xa6\xf5\x2f\x3f\x3f\xaa\x29\x69\x94\x7f\xfb\xed\x9f\x08\xfa\x16\xa5\x04\xb3\x92\x0e\x0b\x6a\x93\xbe\xfa\x00\xc3\x4f\xcd\xc9\x88\xd5\x6e\x05\x1a\x7c\x36\x35\xa6\x5c\xbc\xdf\x90\x4d\xb9\xd3\x89\xa1\xd0\x21\x8e\xe6\x48\xe6\x13\x53\xa9\x37\xb0\x61\x38\x41\xfa\x82\xcf\xc0\x51\x0d\x37\xb2\x1b\xf4\xaa\x53\xf8\xb2\x31\x00\xd6\xdd\xd8\xf6\x36\xee\xc3\x3d\x72\x24\x49\x09\xdb\xa9\xc6\x69\x66\x38\x5f\x78\xf0\xa5\xc1\x7d\xe9\x19\x1f\x82\xd6\xcf\xb0\xb5\xec\x6b\x59\x1a\xc2\x79\xc1\x4b\x96\x27\x58\xd8\xa3\x3f\x62\x5a\xd1\x10\xe4\x89\xf2\x5c\x26\x0b\x14\x73\x46\x7a\x40\x09\x79\x34\x37\x8e\x55\xad\xb3\x60\x5b\xb0\xe2\x89\xca\x5c\x2b\xb4\xd0\x96\xab\x8f\x21\x15\x36\x98\x54\x73\x0a\xfd\x68\xf5\x9b\xc0\x57\x61\x96\x1c\x6a\xa7\x45\x85\xb0\xb1\x15\x9e\xdf\x12\x36\xb6\x44\x55\x1d\x6c\xac\x87\x8d\x5d\x5e\x97\x43\x84\x8d\xad\xec\x79\x3b\xd8\xd8\xba\x2d\xdf\x02\x36\xb6\xd4\xcc\x17\x03\x1b\x5b\x59\xd1\x2f\x06\x36\xb6\x32\xaf\x0e\x36\xf6\xcb\x83\x8d\xdd\x11\x18\xb5\x9e\x17\x1b\x7c\x25\x45\xd9\x62\x63\x22\xfb\x4a\xa2\xe1\xb5\x26\xb0\xe8\xb1\x1c\xd4\xe6\xaf\xab\xdd\xc1\x58\xeb\x99\xd0\x66\x60\xac\xb5\xaa\x7a\x33\xab\xdb\x15\xe0\x09\x14\x83\x57\x06\x63\x2d\x4d\xa0\x8b\xaf\xdc\x3c\xbe\xb2\x96\xf8\x6c\xdf\x7a\x78\x2e\xe8\xb2\x7a\x21\xb7\x84\x63\x2d\xed\x4f\xab\x48\x4c\x10\xdd\xf7\x40\x89\x2f\x2b\xcd\xdf\x97\x0e\xf9\x5a\x59\x3e\x5c\x45\x69\x81\xa1\xb5\x84\xe7\xd0\xe2\x8c\x12\x1e\xfa\xff\x3b\xca\xdd\x22\x32\xb8\xb2\xbc\xde\xaf\x62\x68\xb1\x05\xa9\xb6\xa6\x50\xa7\x95\xee\x27\x51\xd6\x25\x4f\x6e\xe8\x62\x76\x83\xb8\xcb\x48\xd4\x60\x63\xa6\x29\xdd\x57\xb3\xeb\x2e\x32\x8f\x85\x05\x0a\xf9\x52\x5e\xa8\xbe\x9e\xcc\x70\x8c\x8c\x5f\x49\x87\x05\xa0\x0e\xf3\xe5\x8c\x4a\x25\x1a\x63\x9b\x96\x46\xb8\x8b\xab\x34\xcb\x5b\x07\xc4\x04\xab\x3a\xdb\xee\xb3\x94\xa4\x5c\xac\x0b\xac\xaa\xfd\xd2\x96\xba\xd9\xe6\x53\x92\xcd\x49\xaa\x25\x99\xf1\xa6\x8d\xb4\xdd\x6f\x9f\x34\x6c\x73\xd7\x4c\xa0\x63\x89\x08\x02\x47\xa8\x7e\x37\x36\x88\x94\xad\xb7\x7b\xd7\x6d\xb6\x98\x99\x1b\x3a\x84\x1c\x98\xf2\x6a\x83\x9b\x7d\xa9\xe4\xee\x06\xfa\xae\x8d\xe9\xf0\x21\x35\xeb\xa3\x36\x56\xc4\x6b\xac\xc2\x9d\x2a\xbe\xb2\x85\xa0\x37\x70\xe5\x97\xbd\xf3\x9a\x13\x86\x55\x80\x37\x0f\xf0\x68\x40\x4d\x5d\x5e\x1e\x88\xcc\x91\x44\x1c\x85\x9a\x41\x69\x30\xcb\xeb\x55\xa2\x12\xa7\x51\xee\x40\x24\xb9\x68\x8c\x32\x6d\x63\xd0\x8e\x54\x8e\x13\xd0\x24\xc2\xea\x95\xd5\x4d\x9d\x2c\x6a\xd2\x1e\xdb\x79\x4c\x28\x53\x7f\xfe\x8f\x8d\x76\x53\xab\x56\x76\xdd\xa0\xe2\x16\x8e\x22\x22\x8d\x8d\xdd\x46\x21\xe3\x09\x7f\x82\x62\x5b\xbb\xec\xaa\x3e\xca\x7a\xde\x9a\xc1\x7b\x28\xe2\xb8\x20\x75\x23\x2e\xcc\x05\xcf\x67\x73\x67\x43\xd2\x67\x46\x4f\xad\x6e\x2f\x7f\x5c\xb2\x91\x6f\xbc\x97\xdf\xe5\x34\xd9\xce\x42\x77\x57\x2a\x43\xf6\x69\x78\x8f\xe4\xdc\x9f\xd6\x09\x34\x5b\xbb\xb1\xcb\x83\x6e\xdf\xa7\xfd\xd6\xfb\x6b\xa0\x9b\x9e\x83\xdf\x9c\xf2\x24\x01\x4f\x83\x24\xe9\x13\x11\xf5\xdd\xc3\x84\xef\xe9\x66\xc8\x79\x7e\x00\xf0\x75\x91\x18\xd1\x4a\xfe\xba\x31\xa2\xa1\x44\x6e\xf4\xd5\xa0\x05\x13\xaa\xc6\x19\x61\x75\x36\xb6\x9f\x96\x2b\xc0\xbc\xb3\x80\x41\x17\x3d\xb6\xb7\xa0\x41\xb7\x24\xaf\x1c\x38\xb8\x66\x1e\x87\x1a\x3c\x58\x61\x76\x3e\x96\xaf\xb8\x66\x5c\xe0\x90\x51\x7c\xfa\x7a\x89\x47\xac\x5f\xca\xa7\x70\x95\xb2\x27\x8b\x22\x20\xdb\xe8\x10\x21\x33\x83\x3a\x1b\xd6\xb0\x02\x6e\x34\xfd\x17\x68\x3a\x06\xbc\xd6\x84\x14\xba\xb0\x41\x88\x26\x27\xf1\x11\x8e\x16\x51\x42\xa3\x40\x67\x9e\x09\x9c\xcd\xeb\x38\x9e\xdb\xf9\x0e\x75\xe7\xad\x50\x77\x9a\x0a\x52\x6d\x12\xb7\xed\xe8\x8a\xe1\x94\x74\x68\x40\x75\x68\x40\x3d\x8f\x77\xc1\x8a\xd2\x5a\x6f\x08\xa3\xb0\x7c\xee\x3a\x48\xa0\x37\x80\x04\xda\xe6\xf0\x15\x78\x3f\xa5\x63\xd7\xc1\x14\x7d\x68\x05\x53\xe4\x2f\xc1\x83\x42\x9e\x69\x3e\x8f\x6f\x8c\x68\xb2\x3c\xb0\xb7\x84\x25\xaa\x11\x17\x36\x91\x9b\x56\xe1\x12\xad\xa2\x8b\x56\xeb\xf2\xb6\x28\x41\x9b\xad\xcc\x46\x00\x40\xb5\x77\xd7\x81\xc0\x01\x35\x6f\xc3\x81\x9c\x9b\x7d\x66\xb5\x6c\x56\x3b\x34\xcc\x6c\xd9\x44\xc1\xda\x2c\xc9\xc5\xd3\xc3\xfb\x4a\x74\x29\x8a\xac\x6d\x97\xec\xd2\x77\x3e\x68\x22\xd0\x9c\x27\xb1\x03\xa1\xf0\xab\xe5\x3b\xf0\x99\x00\x7e\x81\xdc\x66\x40\xb1\x73\xd0\xb6\x8a\x82\x60\xab\x52\x5a\xfc\x26\xc2\x70\xf7\xc0\x68\xf6\x61\x45\xf0\x9c\x64\x1b\xfb\xc1\x5a\x59\x44\x96\xcd\xdf\x2b\xc6\x58\x5a\x21\xb0\x9a\xd7\x0f\x73\xad\xdd\x77\xcd\xe0\x56\x89\x1e\x81\x71\x50\xd4\x95\xfa\x34\x74\x06\x4f\x9f\xa8\x33\x44\xe0\xb0\xc7\x95\x5e\x3a\x37\xbb\x56\x9e\xba\x2a\xb1\x6c\x11\x0c\xb6\x54\xb9\x6d\x77\x70\xa0\x14\x7f\x1e\x67\x58\xe0\x24\x21\x09\x95\xe9\x8b\x05\x03\x9f\x95\xdd\xb5\xfa\xac\x0a\x6e\x4c\x44\x2c\x4f\x27\x86\x14\xdd\x40\x6c\xb1\x3f\xc5\x91\xc8\x59\x08\x6d\xe6\x37\xc6\x17\x13\xcc\xe1\x5e\x00\xab\x52\x34\x87\xaa\xad\x53\x4c\x05\x23\xb2\xb1\x46\x26\x89\x72\x41\xd5\x62\x6c\x4b\x8e\xb6\x3f\x70\x77\xf6\xcb\x33\xfb\xe1\x6a\x0f\xb7\xcb\xea\x77\xfd\xf9\x12\xa7\x19\x11\x50\x26\xc8\x15\xbc\x09\xca\xaa\x5a\xd4\x06\xe2\x6b\x0d\x41\xf8\xf3\xd2\xb5\xdd\x14\x38\x8c\x9f\xc7\x41\x46\xd5\x38\xaa\x12\xc7\xba\xc3\x5a\x87\x3b\xb5\x6a\x92\x2f\x8c\xbc\xd4\xe0\x45\x7e\x81\x2a\x23\x36\x6d\xc2\x34\xad\x07\x1c\xb8\x82\xc1\x5e\x59\x6c\x4c\x90\xf2\x6e\x95\xaa\x86\x71\x5a\xac\x9f\xba\xe0\xa3\x15\x83\xed\x07\x5f\xb5\x18\x71\xd0\xc9\x9e\x86\xad\x0f\xba\x10\x79\xa6\xe8\x64\x19\xda\x46\xed\xaf\x84\x68\x3f\x81\x34\x6b\xe7\x66\x28\x75\x6b\xea\x8a\x96\x38\xb1\x9d\x9d\x96\xff\x2d\x8e\x98\x43\x08\x32\x08\x4b\x61\x1e\xdf\x75\x4a\x95\x72\x89\x02\xc6\x00\xad\xa9\xb3\x6c\x9b\xfd\xca\x85\x7b\x60\xa8\xf4\x6a\x4c\x44\xc7\x23\xd6\x97\xe8\x99\x20\x46\x2c\x84\x44\x4d\x0d\x57\x6f\xd5\x86\xda\x4f\x13\xa2\x7b\xf2\xb1\x29\x5a\x78\xa0\x4a\xfa\xf2\x63\xa6\x8f\x29\x4e\x24\xe9\xe9\x86\xa1\x6a\xa9\xe2\x10\xfc\x89\xd1\xb3\xc0\x59\x46\xc4\x88\xd9\x2c\x0e\x70\xb8\x70\x9e\x98\xf6\x9b\x42\x5c\xed\x1a\x90\x71\x84\xa3\xf9\x2b\xed\x11\x86\x64\x9c\x68\x4e\x62\x97\x2f\x5c\xde\x1e\x37\x6f\x63\xb0\xde\x60\xb3\x86\x53\x57\x3e\xab\x67\x3b\x49\x22\xcd\x51\x7c\x99\xe9\x8c\x08\x3d\x6a\x4d\xc3\x4f\x84\x21\x3a\x75\xe3\xb0\xb1\x3b\xe8\x19\x3c\x53\x9a\xf4\x9f\x30\x4d\x4c\x02\xbe\xeb\xda\x09\x81\xc6\xfc\x3e\x62\xc6\xdd\xcd\xa2\x52\x86\x2a\x65\x54\xce\x35\xa7\xce\xc1\x27\x09\x6a\x46\x53\xe2\x0c\x7b\xda\xe4\x34\x0f\xf4\xeb\xab\x39\xe8\x13\x15\x9c\xa5\x90\x24\x63\x71\x99\xdc\xf2\x49\xa2\xfc\xf1\xa8\x4d\x71\x5c\x2b\x11\xc7\xb1\x2c\x1b\x3f\x8d\x5a\x49\x7f\x2d\x99\x5d\x8e\x4a\x59\x81\x51\x00\x2b\x04\x41\x9c\xae\xb2\xd8\x2a\xf9\xb7\x4b\x6d\x58\x4e\x6d\xa8\x5f\x9b\x43\x4c\x6f\xf0\x87\x78\xd3\x14\x87\xa6\xed\xdf\x87\x64\xbb\xc7\x54\x87\x37\xce\x09\x78\x99\x74\x80\xb7\xcd\xdf\x78\x89\xd4\x8d\x2e\xc1\xe1\x0d\x13\x1c\x5a\x5b\x6a\xcb\xb1\xd9\xcd\xc7\x76\xa3\xe4\x80\x35\x60\x4e\x75\xbd\x5c\x12\x25\x68\x24\xf7\xc1\x1f\x64\x86\x5b\x46\xb5\x81\x16\x98\xad\x91\x9a\xf4\x0b\xde\x09\x09\x71\x62\xbe\xce\xdf\x44\x10\xfc\x18\xf3\xe7\x25\x5b\x9d\x0c\xd1\x34\x2e\xb9\x16\x7b\x04\x89\xa8\x24\xa5\x48\x16\x2a\x11\x23\xd2\x1a\x3b\xf1\x88\xcd\x29\x11\x58\x44\x73\xc8\x6e\x2c\x36\xc6\x64\xc9\x1a\x40\x23\x13\xcb\x10\x7a\x9b\x36\xd8\xf4\x16\xeb\x5e\xb5\x30\x79\x7c\x3a\xbb\xe7\x7a\x24\xa9\xf9\xc4\x0b\x33\x56\xca\x08\x4d\x72\xad\xb6\x7f\xd7\x40\x7c\xbf\xd8\x2f\x1a\x8c\xef\x83\x89\x82\x2f\x5a\x06\xe4\x17\xd4\xd0\x05\xe5\xbf\x50\x50\x7e\xcd\x12\x6f\x16\x98\xbf\x95\xc9\xef\xf5\x63\x86\x5d\xcf\xaf\x11\x37\xbc\x2e\x68\x2b\x9f\x8c\x5f\xfc\xe8\xd5\xce\xb9\xed\x09\xfc\xc9\x13\x85\x91\x88\x85\xa6\xb3\x09\x89\x63\xe0\xb4\x8a\xdb\x4a\xd1\x05\xed\x38\xf3\x80\xbe\x7b\xb1\xd4\xc4\x8e\x13\xce\x66\x92\xc6\x06\x6c\x25\xc3\x50\xb1\x35\x34\x5e\x00\xb8\x00\xec\x6f\x92\x10\xe1\xbc\x12\x02\x7d\x2d\x29\xb3\x68\x8a\xfe\xb7\x98\x13\xc9\xbe\x52\xc6\x58\x80\xd9\x02\x3d\x32\xfe\x9c\x90\x78\x06\x3b\x54\x1d\xcc\x11\xa2\xa4\x87\xa8\xf2\x9f\x09\x40\x23\xe0\xb9\x1a\xe9\xb1\x43\xac\x99\xd1\x00\x88\xfd\x36\xa8\x89\xee\x9b\xf9\xe6\x18\xa1\x21\x43\x53\x1c\xa9\x1e\x92\xf9\xa4\x68\x3f\xe6\xa6\xc8\xb5\xd6\xbe\x83\x89\x17\x8d\x74\x31\xe3\x35\x9d\xd7\x9f\x0d\xc7\x1d\x34\xb9\xf6\x13\x8a\x77\x8a\xad\x7b\xc2\xbb\x40\x8c\x5e\xe6\xd2\x06\x61\x20\xce\xfc\xd1\xb7\xf0\x4a\x1e\x23\x1a\xf0\x3e\x0d\xde\x32\xe3\x71\xa3\xad\xb3\x32\x95\x4d\xc7\x52\x04\x42\x5a\x41\xc9\x3a\xaa\xa0\x5d\xb3\xdc\x5a\x6a\x92\x4a\x10\x9c\x5a\xe7\x80\xbe\x6a\x40\xac\x31\x61\x90\x7a\xf4\x54\x18\x09\x73\x93\x2d\xbe\xa0\xec\x51\xef\x6e\x81\x8a\x0d\xf5\xe5\xa1\xe7\xba\x4d\xcb\xf4\x8d\x47\xce\x38\x33\x0e\xc2\x9d\xe4\x4e\x3a\x63\x38\xd9\xd0\xc6\xb1\xb4\x72\xcb\x3e\x3d\x27\x67\x59\x71\x41\x4b\x11\xc6\xd8\x87\x4c\x8f\x1b\xd9\x90\x2a\xf3\x0d\xe5\x3d\x8c\x62\x92\x11\x16\x13\x16\x2d\x80\x44\x18\x20\xe7\x08\x86\x13\x84\xe1\x3b\x9c\x1c\xa3\x73\x93\x5f\xe3\x25\x3c\x7b\xad\xc3\x85\x9e\x62\x46\xa7\x5a\x4f\x00\x23\xac\x1d\xe5\x88\x99\x61\x3a\x1f\x48\x50\xb4\xdf\xaf\x58\xdd\xce\xe8\x1b\xe4\x6a\x47\x54\x62\x56\xfe\x1e\xad\xbe\x70\xa0\xb7\x55\xbb\xa3\x9b\x73\x35\x08\x64\x3e\x39\x82\x7f\x97\x12\xce\x1c\x50\x4f\x81\x22\x43\x12\x02\xe6\x40\xeb\xf1\x82\x8b\xb1\x09\x58\x6e\x1f\x7e\xbb\x35\x79\x1c\x41\x1f\x25\xa5\x26\xa5\x8c\xa6\x79\x1a\x38\xef\x4c\xc5\x82\xc8\xda\x2f\x4d\x26\x46\xa6\xf5\x80\xc8\x81\x97\x23\x7d\xb9\xb2\x05\x9a\xd1\x27\xc2\x46\x2c\xe3\x94\xa9\x63\x74\xc5\x15\x09\x4a\x44\x18\xe8\x28\x9e\x29\x9a\x1a\xb4\x53\x41\xf4\x39\x30\xa0\xd8\x00\x34\x39\xc7\xaa\x87\xe2\x1c\x8e\x2a\x23\x4a\xb3\x0e\x7d\xe3\x2a\xd8\x19\x88\x8f\x16\x23\x66\x6e\xba\x29\xa6\x49\x2e\x88\x95\x59\xb1\xc9\x8b\x29\x86\x5c\x8c\xcc\x22\xa1\x05\x93\x48\xe9\x6c\xae\xf4\x16\x69\x19\xcf\xfa\x1b\xe7\x9a\x1b\xf1\x11\x9b\x10\x84\x51\xc6\x25\x55\xf4\xc9\xfb\x2f\xe9\x14\x61\x29\xc1\x82\x72\x8c\xce\x4b\xf6\x7f\x2a\x41\xf5\x6e\x8a\xab\xa5\x6c\x6c\x6d\xcf\xcd\xf9\x38\x3b\x6f\x64\xa9\x17\xbb\xca\x78\x22\x79\x92\xab\xd0\x05\x5b\xbf\xb7\x85\x69\xdc\x01\xf7\x83\x81\x98\x4f\x47\xcc\xd1\xb5\x3c\x46\x7d\x89\x24\xd7\xbb\x24\xcd\x56\x46\x82\x2a\x22\xa8\x41\x71\x22\xca\x6c\x82\x3f\xa7\xfe\x0c\xa4\x58\x3c\x6a\x11\x2a\xb4\xc0\x1b\x4c\xd1\x92\xb5\x63\x62\x24\x24\x80\xb5\x0a\xb7\x03\x4c\xff\x88\x71\x76\xc4\xc8\x0c\xaf\xdb\x91\x11\x2b\x6d\x09\xfa\x9a\x4e\x0b\x85\xb4\xc9\xe7\x18\xac\xdd\x18\x22\x9f\x9a\x76\xc9\x74\xdc\xb4\x49\xd3\x84\xe3\x35\x6e\xe3\x69\x71\xe8\xd1\xdf\xf9\xc4\x8c\x51\xeb\xfd\x5c\x81\x14\xa8\xd5\xab\x29\x17\x64\x8e\x59\xdc\x73\x9b\x55\x1e\x1b\xdc\x8c\xd6\xd4\xe6\x94\x31\x90\x04\x1d\x88\x30\x31\x58\x4c\x98\x05\x7b\x61\x15\x37\xbb\x15\xc5\x3e\x6c\x74\x57\xf8\xd6\xa0\xf6\x89\x31\x40\x18\x96\xb7\xc8\xec\x11\x97\x34\xcd\x92\x22\xa7\x29\xb0\x8d\x4e\xb5\x88\xe5\x78\x24\x7f\x02\xd3\x95\xd3\xda\xe0\x56\xb7\x3b\xa7\xe9\xac\x66\xe4\x9e\x91\xc2\xad\xe1\x6c\x5e\xa6\x0c\x66\xc0\xc2\xbe\x96\x44\xff\x53\x91\x42\xed\x33\xc2\xfa\x88\x39\x11\xe4\x1b\xe0\x32\xb6\xd9\xc0\x78\xa6\x45\x68\x03\xf3\x6a\xd7\x0f\x45\xc6\xc9\x5d\x3a\x27\xf6\x30\xb8\x57\x6b\x2e\xaa\xef\x28\xc3\xa5\xcc\xdb\x2d\x04\xbf\x24\xdf\x28\xb9\x2a\x70\xfb\x2d\x9a\x6a\x9a\x28\xbc\xae\xcc\xc8\x06\x94\x60\xf6\x99\x20\xdd\x9d\xa5\x66\x57\xf1\x06\x43\x44\xc0\x9c\x24\x19\x8a\xe9\x14\xcc\x52\x0a\xd8\xb7\x07\x16\x33\x58\xf0\xfa\xb0\xa7\x39\x33\x20\x71\xc6\x23\xf2\x6c\xf1\xb6\xed\xd5\x58\x34\x7e\x3c\x62\x43\xf5\x95\xd4\x22\x3a\x67\x33\x7d\xd1\xc4\x4f\x54\x16\x45\x4e\x22\xce\x64\x9e\x12\x61\xbb\xd0\x37\xb2\xa6\x48\x5b\x20\x00\x3b\x19\x4a\x8f\x4d\xef\xfd\x13\x4e\x68\xec\x0a\xf1\xe8\x1f\xcd\x99\xd3\xa3\x94\xce\xa3\x58\x13\x12\x66\x37\x37\xd6\x6b\xf5\x66\x62\xfd\x8f\xa1\xe4\x8e\xd2\x42\xc8\xc7\xd6\x56\x7f\x52\x15\xf1\xed\xaa\xaf\x10\xef\x27\x4b\x93\x42\xab\x05\x23\xbb\x0a\xe7\xeb\x50\x0c\x1d\xa2\x6e\x6e\x42\x80\x75\x3f\xce\xe8\x63\x06\xb7\x11\xfb\xa9\x4c\xd0\x8e\xda\x70\x96\x50\xbc\x27\x14\x64\x03\xa9\xb0\x16\x2f\xcc\x75\xc0\x85\xd5\x70\xec\x9d\xd3\xbc\xb5\xe7\x3b\x96\x89\x90\x11\x4e\x96\x77\x78\x85\xbd\xd9\xbc\xbf\x5a\x09\xb0\xc7\xcd\xb4\xbd\x32\xe9\x37\xe2\x49\xb2\x49\x09\x93\xca\xcc\xcf\x8a\xcf\x57\x8f\xa8\xe8\x47\x6f\x80\xdb\x0b\x38\x35\xe6\xf2\xc6\x89\x35\xa5\x48\x65\x77\x29\x7c\xc9\xa8\x61\x0b\xcb\x5a\x47\x8c\x4f\xa1\xc8\x4d\xd2\x14\xd5\x95\x09\x9e\xd2\x4d\x50\x96\x4d\xa0\xd3\xad\xb3\x8b\xaf\xb1\x32\x38\xeb\x39\x88\xa6\x86\xbc\x6c\x8f\x90\xaf\x87\xad\xb8\xb9\xe2\x0c\xa5\x38\xdb\x6a\xc1\xd7\x79\x85\xfa\x28\x35\x2e\x39\xbb\x7a\x80\xb7\x48\xa0\x5e\x0c\x2c\xf2\x33\x5e\x14\xa9\xd1\x4d\xf8\xb9\x6c\x23\x72\x78\xd0\xaf\x0f\xd9\x94\x6f\x70\x38\x8b\x54\x66\x7b\xfa\xb0\xa3\xd9\xe0\xfc\x79\x2f\x85\xd9\x7d\xb3\xa6\x6d\xce\xe3\x59\x1d\x51\x6f\x7c\x32\xdd\x0a\xbe\xa4\x8d\x32\x64\x22\xa1\x79\x72\x93\xbb\xb5\x7c\xb4\x82\x16\x11\x0c\x67\xf5\x52\x5d\x96\xe8\x70\xef\x6b\x54\x69\x07\x19\x53\xb8\x0b\xa6\xbe\xa9\x6f\xf5\x15\xd6\xcc\x1e\x92\x56\x8b\xb5\x23\x76\xc3\x66\x38\xc0\xae\x47\x8f\xfa\x5b\x7f\x42\xd7\x16\x39\x68\xbf\x18\xc0\xcd\xa4\xb5\x73\x15\x91\x99\x36\x45\x6d\x4a\x13\x2d\x62\x0f\x6b\x0c\x9c\x2e\x41\xcc\x07\x54\x99\x50\x79\x27\x3d\xe5\x82\x06\x85\x41\x9d\x8c\x84\x28\x14\x28\x09\x9d\x3c\x81\x42\x0f\xa6\xc5\x39\x7f\x36\xd1\xe9\x82\x6a\x9e\x65\x84\x55\x05\xe6\x1e\xcd\x0b\xa8\xb5\x96\x18\x63\x93\xff\x80\x9b\x98\x41\x6c\x6b\x1f\x17\xa3\x6a\xd8\xd2\x7d\x94\x78\x6a\x9f\x7f\xe7\x7a\xbd\xd7\x5f\x2c\xef\x4d\xed\x08\xef\xcb\xad\x6f\x3c\x3a\x2f\xe5\x6f\x1e\x30\xf5\x11\x3e\x75\x4a\x0f\x46\x53\x41\xc0\xc1\x9f\x7a\x4c\x0d\x03\xaa\xcb\x39\xdc\x77\x77\xe7\x3f\x9c\x3c\x0c\x11\x51\x11\x4a\xe8\x23\x19\xb1\x48\x3e\xf5\xb4\x78\xfc\x8f\x9c\x28\xfd\x73\x83\x47\x80\xa6\x84\x49\xe0\x04\x54\x2d\x61\x0f\xd5\x2f\xa4\x5b\x18\xfd\xdf\xf3\xf2\xf7\x2b\x48\x7e\x29\x7d\x18\x68\xd7\xd5\xbb\x01\x32\x85\x92\x1e\x66\x69\x65\x0d\xc5\x18\x5b\xe4\xa0\xae\x1a\xe6\x16\xe9\x42\xec\xef\x39\xdb\x50\xe8\x3a\x2b\x3e\x0a\x46\xd1\x20\xd3\xa5\x19\x06\xac\xeb\xcd\xf2\x90\xcc\x37\xb5\xad\xaf\x63\x22\x45\x5a\xb6\xb3\x2d\x17\x85\x43\x91\x12\x84\x00\x0b\xf1\xf4\x64\xef\x7a\x8b\xc4\xe1\x27\x16\x7c\x74\x3c\x62\x97\xce\xe3\x5c\xfc\x2a\x0b\x3d\x3c\x9d\x04\x10\xe0\xe5\x56\xa0\xd9\x98\x4a\xff\x03\x14\x74\x91\x79\xa2\x4c\x45\xbb\x29\x65\x38\xf1\x03\x35\x4f\xea\xb8\x84\xc0\x2c\x9a\xef\x6a\x42\xa6\xd3\x31\x49\x36\x91\x44\x87\xd3\x41\x22\x35\x7d\x47\x8f\x0d\xa7\x73\x9b\x9a\x8d\xc5\x64\x6c\x25\x5a\x53\xf7\x09\x15\x26\x68\x9c\x98\x8a\x72\x04\x81\x8f\xb2\x9a\x3d\x66\x00\x22\xf4\x2e\x5a\x49\xdd\xb8\x28\x4d\xda\x86\x0f\xc9\x86\x5e\x10\x56\x23\x26\x72\x06\xc5\x26\x7c\xc4\x02\x46\x05\x5e\x78\xe4\xfc\x07\xd6\x9b\x33\xd3\x6c\xc2\xc0\x71\x9b\x97\xb5\x7e\xc6\x73\x09\xb6\x9a\x94\x28\x7d\x41\x7d\x0d\x75\x60\x4d\xc8\x50\x0f\x65\x82\xa6\x60\x6e\x95\xdf\xd4\x6c\xdd\x19\x56\x38\xe1\xb3\xbe\x50\x74\x8a\x23\x75\x8f\x77\xd2\xc0\xb1\x6d\x66\xdb\xf0\x53\x37\x0c\x34\x3c\xd7\x8b\x3f\x23\x8c\x08\x98\xa8\xd6\xc9\xeb\x8f\x30\x3c\xd9\x8a\x73\x83\x95\xcd\x1a\x46\xa5\xb7\x58\xe0\x5c\xf1\x54\xeb\xb7\x38\x49\x16\x3d\x63\x91\x25\x68\x8e\xe5\xdc\x6d\xb4\x31\xa6\xb5\xb9\x9b\xec\xe2\x9e\xe1\x68\x4e\xee\xa0\x2a\x72\xdd\xe2\x56\x46\xf9\x81\xb0\x3c\xfd\x70\x8a\xfe\xa7\x98\xe3\x59\xff\xec\xfb\xc1\xf8\x7c\x78\xd7\xff\xee\x62\x70\x1e\xcc\xc7\x3e\xb9\x1c\xde\xdd\x2d\xff\xfa\xfd\xf0\x7e\xf9\xc7\x9b\xeb\x9b\x87\x8b\xfe\x7d\x5d\x2b\x17\xd7\xd7\x3f\x3c\xdc\x8c\x3f\xf6\x87\x17\x0f\xb7\x83\x9a\x4f\x1f\xee\x9b\x1f\xde\xfd\x30\xbc\xb9\x19\x9c\xbb\x55\xf9\x5b\x70\xba\xc0\x7a\x0c\xa9\x17\xf5\xd3\xa8\x1e\xc0\x23\x54\x7e\xf1\x14\x3d\x54\x4b\x1f\xd8\x58\x64\x83\x63\xf1\x8c\xa5\xe6\x61\x10\x0a\x3f\x62\xc8\x7d\xae\x17\xa5\xe9\x53\x13\xae\x13\xcd\x09\x4a\x38\x7f\xcc\x33\xcb\xda\x4c\x7c\x18\xe3\xc6\xf0\x43\x64\xd0\xda\xf7\xc3\xfb\xd3\xe5\x12\x0c\xbe\xb1\x00\x31\xcb\x9d\x01\x18\x17\x76\xec\x14\x6c\x29\x0e\x9a\xbf\xb0\xde\x06\x3d\xf8\x9d\x59\xd5\x8f\x69\x0d\x33\x55\xe9\x26\x8e\x6d\xd1\x5f\x37\xb1\xa0\xe1\xf2\xbe\xae\x5a\x4d\xbf\x1c\xa6\xf6\x14\x9a\x90\x08\xe7\x26\xa8\x49\xdf\x53\x42\x70\x11\x0e\xb8\xa0\x87\xfd\x35\x6a\xe9\xa8\xb6\xc1\xca\x9e\xe9\x89\xcb\x47\x9a\x65\x24\xfe\xb0\x2c\xbf\x94\xab\xc3\xda\x9a\xe4\x7c\x8a\x82\x33\xa9\xf5\x7a\xd0\xf9\x5d\xe1\x94\xf9\xc2\x7b\xd2\x20\x70\xa3\x08\x65\x01\x20\x67\x7d\x27\xf8\xc2\x16\x14\x5c\x63\x58\xa1\x67\x02\x29\xd5\xb9\xad\x1c\x65\x74\x6f\x7d\xb6\xa1\x3b\x63\xd3\x76\x75\xe0\x4a\xa9\xd6\x8d\xcc\x78\x1f\x02\xb7\xfe\x5e\x92\x3a\x46\xbc\x43\x5e\xec\xb9\x69\x14\xb8\xb3\x8b\x79\x83\x11\x37\x04\x37\xb8\xdb\xa0\xc6\x42\xbe\x42\xbe\x5a\xbe\x91\xd6\x5c\x16\x9a\x6d\xb7\x19\x8f\xc3\x02\x29\x01\x5c\xb7\x1f\x58\x09\x04\x79\xed\x5a\xdd\xf3\x18\x2f\x34\x71\x40\xac\xb1\xcc\xb3\x8c\x0b\x85\x1a\xda\x30\x6e\x7c\x33\x3e\xb8\x73\xec\x3c\x3c\x8f\x83\x46\xb4\x84\x21\x6b\x6a\x69\xb4\x83\x47\xb0\xeb\x5a\x30\x8e\x30\x40\x16\x14\x41\x5f\xf7\x28\x2d\xa9\xd4\x25\x0a\xad\x13\x7e\x77\xc9\x30\xc8\xf4\x05\xdf\xb6\x0c\x5f\x5d\xef\xd7\xae\x85\xda\x2d\x4f\xc8\x54\x8d\x6b\xbd\x3e\x2b\x0c\x9c\xba\x45\xd6\x84\x28\x43\x67\xf3\x3d\xb4\xd8\x5e\x4b\xf8\xa3\x0d\xec\xd1\xaa\x41\x60\x21\x10\x9c\x2b\x23\x9f\x16\x3a\x0c\x72\xab\x09\xe6\x05\xdb\xa9\xcd\x05\xf3\x42\xa0\x96\xf9\x8d\x3f\xd4\xa7\x4d\x1d\x8f\xd8\x00\x02\x28\x0a\x45\xc4\xa5\x88\x81\x16\xb0\x56\xfe\x2f\x15\x1d\x7d\xd5\x68\xcd\x66\x84\xd7\x82\xee\x6d\xbd\xfc\x64\x81\x8a\xc2\xb2\xa5\xef\xda\x9c\x1e\x63\xf5\x76\x22\xa0\x99\xb0\x2d\xe3\xae\x48\x66\x2d\xf3\x66\x9e\x45\xa4\x0f\xc4\x87\xe9\xae\x8e\xd1\x4f\xce\xf2\x03\x81\xaf\x45\x4d\x66\x1b\xbb\x91\xe0\x85\x03\x85\xac\x5b\xd8\x7d\xe0\x2c\xee\x3b\x14\x76\xf5\x02\x7b\x40\xa7\x9a\x55\x2e\x29\xe0\x8c\x19\x8b\xec\x06\x69\x1f\x67\xfe\xa3\x3b\xb2\x3a\x2a\xe0\x23\x94\xe1\xb4\x91\x55\x20\x74\xb0\x64\xf1\xbf\xcc\x66\x99\x4c\x54\x57\x58\xcb\x96\x45\xb4\x1e\x54\x7d\x7e\xc0\x03\x68\x12\x55\xd1\x94\x26\x09\xc8\x01\xc7\xa8\x0f\xe5\x81\x21\x91\x53\x5f\x85\x2e\xc0\x82\xce\x18\x5f\x97\x63\xd6\x40\x4c\x51\x40\x4c\x77\xcd\xc4\x24\x81\x9a\x8a\x3c\xfe\xfd\x50\xd4\x1e\x30\x5d\x34\x6f\xc1\xcb\x88\xd8\xed\x91\x5c\x36\x50\xde\xdf\x22\x3a\x7a\x69\xb8\xc1\x87\xff\xaa\x1f\xfa\xa7\x1c\x0b\xcc\x14\xc4\xfc\x5a\xd1\x5d\x90\x20\xf5\x88\x7c\x86\xf8\x0c\x66\x0c\xc1\xf0\x53\xb8\xb9\xce\xe5\x0f\xe1\x5e\x88\xc6\x3d\x44\x8f\xc9\x31\x54\x67\x13\x5a\x96\x98\x14\x6f\xce\xb5\xe4\x30\x62\x4b\xb1\x8c\xc7\xa8\x9f\x48\x6e\xbf\x20\x2c\x4a\xa0\x1c\x77\x10\x9e\xec\x29\xdf\xba\x95\x26\x0b\x50\x50\x60\x2b\x8b\xe6\xb9\x7d\x10\x7c\x08\x45\xc6\xc0\x27\x9e\xc0\x49\x2f\x7e\xff\x3d\xcf\x8c\xb7\xa2\x29\x4e\xe2\x05\xcb\x39\x2c\x5d\x43\x2f\xb6\x49\xa6\x54\xe0\xaa\x0d\x82\x37\x60\x63\x8a\x18\xd3\x00\x81\x05\x7d\x8d\x15\x4a\x08\x96\x0a\xfd\xe1\x9b\x8d\x62\x43\xdc\x04\x0b\xee\x6a\x8f\x6f\x91\x28\xe6\x52\x0d\x42\xe1\xce\x77\x0c\xb5\xe3\xb0\x50\x08\x23\x46\x9e\xc3\xc8\x52\x0e\xc1\xc0\xae\x20\x1c\x09\x72\x5b\x4d\x3c\x99\xc9\xcc\x87\x6c\x0d\xa3\x32\x35\xf0\x11\x07\x77\x6c\xdd\xa7\x76\x58\x35\x94\x65\x95\x27\x1b\xe2\x09\x90\x5c\x45\xd0\xff\x1c\xab\x11\xb3\x9c\xd5\x85\x8d\x04\x69\x5e\xfd\x24\x29\x07\xda\x63\xc8\x25\x61\x7a\xc2\x50\x9f\xfd\xd8\x2f\xd0\x15\xa8\x5f\x3e\xda\xb9\x64\xa7\x2b\x0e\x8b\x89\xc7\xf3\x78\x47\x61\xdb\xb5\xd2\x4e\x9d\x7d\xf9\x15\x85\xe0\x9a\xee\x2f\x4c\xa1\xfc\x16\xc2\x30\xa9\x1b\xf2\x9a\x83\xb5\x6c\xd3\x5f\x21\x1b\xef\xbb\x83\xf6\xa2\x72\xbd\x7d\x1c\xae\xd9\x67\x5e\x63\x6e\x6f\xd8\xdc\x40\xb6\xd8\x45\x01\xf7\x61\xf7\xaf\xe5\xf1\x2d\x0d\x7d\x18\x43\xd2\xdf\x7a\x2e\x58\x24\xd1\x39\xd6\x61\x62\xaf\xe3\x20\xa7\x27\x48\x21\x80\xe0\x3f\xc7\xf8\xec\x9b\x0d\x9e\xd7\xec\x7d\x4f\xbf\x57\xcc\xdf\x4d\xc5\x07\xc1\x2d\x4f\xbc\x59\xd8\xeb\xc7\x7f\xc7\x11\x44\xfa\x43\x4f\x2e\xc7\x60\x19\x90\xc9\xc1\x58\x63\x30\xe6\xd7\x8a\x87\x99\xe0\x11\x91\xf2\x18\x0d\xe0\xa2\xb1\xff\x44\x78\xea\x1c\x12\xc1\xcb\x23\xa6\x35\x13\x87\xdf\x12\xb4\x5f\x26\xf1\xba\x13\x60\xc0\xe0\x76\xf2\xe5\xa4\xeb\x6b\x94\x34\x69\x13\x0e\x8b\x0e\xda\x80\xb2\x06\x68\x30\x3b\x45\x31\x8f\x1e\x89\x38\x11\x24\xa6\xf2\x14\x7c\xeb\xaa\xd1\xa9\x97\x6a\x6d\x7b\x67\x49\xa3\x29\x50\x60\x4d\x52\xdc\x99\xe9\xdf\x06\x58\xbb\xf0\xda\x1e\xa2\x53\x50\x27\x5c\x4e\x86\x09\x42\x76\x70\x37\x84\x29\xb1\x80\xb8\x7e\x6f\xca\xaa\x2c\x84\xd3\x34\xb4\xd0\xd6\x94\x4d\x24\xf6\x11\x83\xb3\xe5\xb4\xef\xe7\x44\x12\x17\x70\x60\x26\xa5\xb8\x8d\x65\x36\xec\x22\xc3\x6a\x2e\x21\x75\xb5\xbc\x06\x56\xe9\x82\x4f\xf5\x0a\xe1\x0c\xe2\x15\x8c\x95\xa2\xf8\xc8\x27\x58\x4a\x45\x93\x64\xc4\x18\x21\xb1\x44\x90\x65\xfa\x55\x6d\x86\xbc\xfe\xb4\x87\x70\x1c\xa3\xff\xfd\xf5\xc7\x8b\x9f\xef\x07\xe3\xe1\x15\x18\xad\x87\x17\x83\x6f\x7a\xfe\xc7\xeb\x87\x7b\xff\xab\xb1\xb0\x3c\x11\x81\x52\xfc\x08\x2a\x1e\x93\xc4\x26\x4f\x90\x11\x0b\x47\xea\xb0\x03\xf4\x13\x49\x5c\xa4\xab\x15\x53\x3c\x84\xa2\xdd\xc3\xc6\x8a\xc5\xc6\xe6\xb7\x81\xf2\x7b\xeb\x3f\x59\x4d\x83\x8e\x78\x7c\x17\x4e\x0c\x84\x1c\x19\x2c\x83\x64\x72\xab\xfb\x16\x04\x47\xd8\x8c\xb2\xa6\x78\x3c\xc2\x9e\x5e\x52\x88\xff\x81\x2c\x7e\xd4\xea\xf5\x0d\xa6\xa2\x35\xed\xd5\xa3\x01\xb9\x13\xa3\xf5\x74\x2c\xab\x87\x4a\x1a\x59\xd8\x64\xdb\x34\xc6\x7c\xd6\x01\xc1\xbd\xf9\x74\x2d\xbc\x14\xf9\xac\x84\x43\xa9\xf0\xf9\x1c\x0e\xca\xc9\x5f\x34\x05\x0d\x8e\xd8\xfd\xf5\xf9\xf5\x29\x22\x09\x9e\x70\x08\xe5\xb7\x21\x41\xae\x09\xbb\x60\x11\x4f\x83\x86\x4a\x08\x25\x3d\x94\x15\x08\x25\xa1\x11\xed\xd8\xb4\xb1\x06\xa9\x24\xe3\x62\x19\xdf\x63\xbf\x2a\xa0\x9d\xec\x0d\x17\x6d\xae\x7f\xfd\x1a\x2c\x1d\xcf\xb4\x22\x57\xe1\xbc\xf6\x6e\x9e\x12\x6c\x6a\xe9\x1b\xb7\x90\xb5\xe5\xdb\x00\xd6\x24\x29\xd5\x53\xd4\x07\x47\x1e\x5b\x17\x7c\xf1\x26\x67\xe8\x87\xbf\x48\x34\xc9\xd5\x88\x95\xdb\xe0\x0c\xf5\x7f\xba\x43\xdf\x61\x15\xcd\xbf\x19\xb1\x6b\xad\x66\xfe\xf0\x97\x06\x28\xa5\x8d\xd1\x09\xf5\x9a\x9c\x63\x85\x2f\x38\x8e\x29\x9b\xd5\x41\x13\x16\xf5\x63\x06\xf7\xfd\x53\x74\x6d\x75\xf8\x22\x13\xc4\xa7\x04\x07\x0d\x01\x43\x86\x89\x38\x2e\x02\xac\x9c\x95\xe1\xdb\x8c\x66\x06\x17\xd6\x88\xdd\x1b\x4c\x46\xcd\x55\xa9\x42\x19\xb7\x35\x8c\xb4\x56\x66\xd0\x2a\xb1\xcb\x90\x22\xc9\x02\xe9\xd5\x01\x32\xf6\x9b\x61\xe5\x31\x90\x67\x96\x99\xfd\x88\x81\x82\xee\x73\x53\x12\x1e\xe1\x04\x62\xf2\x8e\x02\x9b\x9e\x56\xdb\x79\x0e\xf9\xe1\xa6\xe8\xf9\xa2\x1c\x3a\xeb\x21\x0b\xbc\x50\x16\x6e\x14\x18\x00\x60\x1f\xad\x37\x36\xe5\x9a\xe3\x18\x2c\x36\x30\xbe\x25\x66\x75\xf4\x87\x1e\x9b\xcd\x2c\x8b\x7e\xea\xd3\xb6\x78\xce\x1c\x16\x49\x04\xe6\x7b\xb6\x80\xf0\x6d\x28\x3a\xc2\x21\xf4\xa3\xe0\xce\x96\x28\x97\x76\xd1\xdf\x89\xc1\x67\x23\x66\x22\x05\x4b\xfb\x12\xa2\xf7\x04\xbd\x73\x06\x81\x8c\xcb\xb9\x62\x79\x66\x03\x1b\xad\xac\x9f\x09\x72\xe4\x33\xa0\xe2\xd2\x9a\xea\x1b\xf6\x18\xdd\x86\xea\x75\xcc\xa3\x3c\x75\xc8\xca\x90\x3d\x55\x94\x95\x2f\x49\x3c\xe6\x62\x5f\x47\xf1\x80\xd2\xa2\x08\xa4\x8f\xb7\xd6\x8f\x0d\xc1\xf4\xc3\x4f\x97\x25\xf5\x66\xc1\x17\x78\xc7\x6e\x51\x6b\xa6\xa1\x71\x56\x6e\xa9\xd4\xda\xce\x79\x89\x57\x05\xfa\x2b\x17\x20\x6c\x91\xcf\x19\x07\x23\xb7\x49\xcf\xe2\xf1\x57\x12\x0d\x6f\xb4\x04\xa4\x35\x5e\x7f\x06\x73\xa9\x4c\x70\x19\xa4\xeb\x98\xaf\x4d\xba\x40\x0f\x7d\x8b\x46\xf9\xb7\xdf\xfe\x29\x42\x9f\xdd\x1f\x7f\xfe\xcf\xff\xfc\xd3\x9f\x37\x49\x27\x71\x0a\x39\xb4\x5b\xac\x91\x2f\x27\x55\x16\x89\xc2\x1d\x58\xe6\x54\x3b\xec\x82\x3d\x80\x4d\xcb\xbf\x0d\xca\x63\x10\x3b\x84\x67\xf6\x84\xcb\xf0\x64\xa2\xd2\xd1\x2c\x22\x09\x24\x51\xbd\x32\x87\xf0\xc2\xae\x95\xe8\xff\xd7\x0a\xb0\xb2\xb1\x3e\x2a\xdb\xc5\x38\xd1\xc4\x8b\xd7\xba\x11\xf4\xb5\xb5\xff\x29\x70\x20\x7e\xe3\x2e\x38\x9e\xc4\x44\x98\x31\x79\x93\x9d\x37\x24\x02\x73\x20\x9f\xb3\x84\xc7\x0e\x1e\xb5\xc8\x05\xa4\x20\x20\x0c\x3e\x63\xcd\xb9\x7b\x16\x46\xcb\x7c\x64\x3c\x2f\x53\x1c\x19\x54\x50\x89\xbe\xfe\x7c\xaa\x7f\xeb\xa1\xc5\x29\x04\x91\xf6\xd0\xaf\xa7\x16\x2d\x07\x0b\x35\xd6\x3f\x7d\xe3\x64\x6d\xdb\x04\x0c\x9a\x4a\xf4\xd5\xc9\x13\x16\xa6\x66\xf4\x89\x19\xd1\x57\x96\xb3\xfa\xba\x78\xa1\x6c\x9e\x70\xfe\x68\x03\x6c\x97\x3e\x3c\x71\xc0\x6b\x40\xde\xde\x6f\x62\xb6\xde\x27\xe6\x2b\x74\x04\x2f\x10\x74\x9c\x4d\xd0\xf1\xdf\x25\x67\xe8\x78\x81\xd3\xc4\xfe\xea\x9e\xda\xf8\x5f\x2c\x6d\x4e\x5c\xec\x83\x7c\x92\x85\xb1\x94\x7e\x97\xf0\x09\xcc\xea\xd2\xcd\xd4\x44\xd0\xc2\x40\x8b\xdb\xa7\xb8\xb0\xec\x44\x5c\x22\x2a\xe0\x07\xa5\x5c\x99\x57\x80\xc7\xd5\xcd\xea\xb3\x1f\xd2\x7f\x1b\xbf\x30\x2c\x8a\x4b\xe2\x33\xc6\x61\x1f\xbd\xa6\x1b\xfd\x8c\xbe\xb6\x2c\xe8\x1b\x7d\xc7\xd8\x70\x65\xb3\x0c\x75\x1d\x2c\x7c\x07\x3f\x07\x1d\x50\x86\x4c\x5a\xe6\x8a\x2f\x7f\x3d\x39\x3e\x3e\xf6\x5f\x43\xd6\xfa\xff\x8b\xa8\x92\x24\x99\x9a\x96\xdc\x0d\xb6\x18\xb1\x4b\x57\x78\xc1\x19\xaf\x0b\x48\xc7\x4c\x70\xc5\x23\x9e\xa0\xa3\xc2\xa0\x1b\xf3\x48\xa2\x7f\xd7\x62\x6d\xb0\x94\xf0\xa3\xd6\xe3\x1a\x60\x60\x0d\xd2\xf3\x2b\x1d\x2a\x6b\x10\xaf\x1e\xab\x10\xc5\xcd\x2b\xb6\x58\x86\x55\x3c\x80\x16\x34\xe5\x9c\x58\xa4\x37\x21\xf4\xcb\xe4\xb3\x82\x47\x0d\x40\x7a\xb5\xa1\xec\xf5\x37\xe5\x12\xbb\x2d\xf0\xf4\x0c\x59\x37\x2c\x80\xc5\xbb\xb2\x9c\xc1\xcc\xb3\x17\xba\x4f\xf4\xe5\xc2\xc2\x52\x00\x32\x4f\x53\x2c\x16\x27\xc5\x69\x5b\x26\xce\x02\x69\x0d\x78\x4c\xe2\x16\x00\x5c\xb8\x89\x3d\x5a\x36\x8a\xc1\x8a\x97\xee\x46\xf3\x67\x37\x82\x5a\x86\x01\x62\x01\x61\x11\x8f\x2d\x5d\x17\xd9\xa7\x65\x89\xc5\xbf\xb3\x2c\xab\xb8\x88\x18\x59\x18\xe3\x98\x32\x10\x1e\xf6\x0d\xf7\x71\x03\xfb\xe6\x63\xa8\x8a\x4b\x66\x1b\xb8\x47\x87\xd7\x77\xee\x9b\xf6\x97\x2e\xac\x43\x59\x64\xc7\x49\x88\x8f\xc7\x66\x48\xe0\xe7\xe2\xfa\x85\xd8\x0e\x63\x9d\xc9\x7d\x6e\xae\xf9\xf7\x19\xbf\xa1\x89\xbe\xb5\x80\xc6\x8f\x47\xac\xf4\x73\x0f\x91\x84\xa6\x94\xf9\xd8\x3a\xc3\xdc\xf9\xd4\x48\xcf\x8f\x54\xe9\x2d\x93\xf1\xa3\xe6\x60\x0e\xd7\x29\x50\xa9\xfa\x6c\xe1\x48\xc7\x3b\xa6\xac\x05\x22\x97\x7a\x5c\x85\x8e\xae\x85\x59\xdd\xc4\x91\x15\x48\x69\x40\x78\x70\x7e\x47\x4c\xb7\xe6\xce\x52\x11\x2e\x1c\xb4\x17\x34\x77\xe4\x00\xf1\x03\x0e\x00\x7d\x94\x62\x7e\xbd\xfc\x5b\x23\xa0\x0c\x58\x9e\xee\x9a\x6c\x62\xc3\x87\xdf\xca\x4c\x77\x23\x88\xbb\xa9\x6c\xe2\x12\x61\x79\xea\x0e\xd4\x06\x14\x37\xb0\xe2\x4f\x4c\xa2\x04\x1b\xa4\x1a\xdd\x10\x44\x3e\xf6\x8c\x83\x34\x0b\xfa\x32\xd7\x8b\xe9\xc6\xd4\xd8\x49\x08\xfb\xda\xfc\xfb\x1b\x64\xef\x86\x6f\x7b\xf6\x3e\x17\xd2\x23\x80\x98\x3d\x87\x1a\x8d\x24\x36\x36\x74\x40\x25\x9e\x61\x11\x1b\x6b\x79\xa8\x55\x98\x0c\x5e\x2d\x7f\x2d\x78\x8e\x9e\xa9\x9c\x8f\xd8\x3d\x77\x06\x47\xc4\xb8\xc7\x75\xee\x81\x32\xba\xd4\x1f\x96\xc0\x04\x60\xd4\x75\x14\xa0\x99\xf0\x4e\xb9\x46\x10\x05\x3b\x66\x3c\x26\xbb\x01\x18\xdd\x17\xbe\x0a\xe7\xbf\x16\xc4\xe4\x83\xc1\x4d\xd1\x94\x4e\x4b\xa4\xdc\xd0\x36\x5f\xdd\x78\xb8\x87\x6c\x3b\x50\x12\xf8\x79\x23\x74\xed\x10\x1b\xcc\xdf\x6a\xd0\x8a\xd3\x38\x83\x6c\xe0\xd2\xda\x7b\xb4\xe4\x5d\x37\x21\xaa\x41\x2b\x6a\x75\xf7\x9b\xb9\x47\xb0\xec\x3e\xc0\x18\xa3\x99\xe0\x79\xe6\x53\xe6\x5d\xba\x9f\xd9\x06\x2b\xd3\x0c\xd9\x94\x9f\x5a\x9d\xea\x82\xb2\x47\x43\xf1\x2f\xb5\x47\x06\x10\x9b\xc4\x25\x18\x37\x57\xa5\x15\xe6\x70\x84\x28\x8b\x92\x1c\x2e\x3e\xa9\x70\xf4\x68\x40\xbd\x9b\x8c\xbe\xfa\x9b\xf1\xfa\x64\xca\x06\x89\x29\x4f\x12\xdb\x6d\x71\x81\x16\x65\xac\x9f\x28\x46\x18\x3d\xdc\x0e\xeb\xfb\x7e\xa4\xcb\xce\x9c\xfa\xdb\xb3\x4c\x20\xf0\x3f\x3f\xd0\x8d\xe2\x2e\x2b\xb0\x78\xa4\x44\xea\xde\xb8\xd4\x04\xba\x6a\x88\x54\x69\x05\x22\xbe\xad\x31\xed\x6f\x4c\xa7\xb3\x2c\x1f\xeb\x85\x4a\x36\x09\x10\xd0\xa3\xf8\x74\xf3\xd0\x0f\xbe\x5b\x45\x2a\x9f\x6e\x1e\x50\xd0\x87\x01\x3c\x4c\x48\xa4\x7c\xa4\xf1\x31\x3a\x2b\x70\x88\xab\x92\x79\x4c\x9e\x68\x64\x52\x5c\x7b\x5a\x2a\x1a\x31\x80\xf7\xd4\xba\xce\x91\xc3\x84\x42\x9f\x6e\x1e\x2c\x92\x94\x87\x9b\xb2\x90\xca\x00\x61\xb1\xd9\xb5\x53\x01\xd6\x64\x9c\x1d\x81\xc4\x86\x45\x5c\x78\x3b\x7a\xa0\x5c\xff\x7f\xec\xbd\x5b\x77\xdb\x48\x76\x36\x7c\x3f\xbf\xa2\xd6\xca\x85\xdb\xdf\x47\x51\xed\x9e\x37\x59\x1d\xaf\x95\x0b\x5a\x96\xa7\x35\x6d\x4b\x1e\x1d\xba\x27\x6f\x98\x45\x17\x81\x22\x89\x08\xac\x82\x51\x80\xd4\x4c\x26\xff\xfd\x5d\xb5\xf7\xae\x03\x8e\x04\x48\xc9\x76\x26\x7d\x91\x4c\x5b\x04\x0a\x75\xae\x5d\x7b\x3f\xfb\x79\x22\x9e\x15\x25\x19\x18\x0f\xaf\xa6\x76\x4c\xae\x7d\x24\xc4\x54\x4b\xcd\xa5\xb1\x95\x30\xcb\x00\xd4\x3f\x9a\xfa\xf4\x2d\x9d\x7a\x0c\x38\x00\x3a\xed\xa8\xcd\x3f\x71\x19\x7e\x5c\xee\x18\xcf\x97\x49\x91\x9b\x6b\x18\xbe\x0c\x43\x61\xef\x1e\x4b\x7b\xa3\xf2\x96\x11\x09\xb6\xc0\x00\x27\xb2\xd0\x73\x19\x64\xb0\xb8\xac\x60\x4c\x5e\x48\x24\x03\x3a\x3c\xc0\xde\x58\x7a\xae\x28\x55\x65\x6c\x8f\xd5\xdc\x09\xc0\xec\x32\x34\xa2\xe6\x12\x98\x49\xcc\xd9\x0a\xc2\xe7\xfe\xec\x7f\xcd\x3e\xc9\x87\x24\x4e\xf8\x49\x21\x74\xca\x4f\x8a\xff\xf3\x69\x52\xfb\x13\x7f\xf5\xfd\xf7\x9f\x50\xcb\xa6\x8b\x76\xc1\x4d\xa3\xa3\x1d\x3c\xed\x71\x0a\x5b\xfc\xc2\xcc\xd2\x23\xc6\xe9\x7d\x72\x2f\xd8\x27\x1c\xee\x4f\x44\xe0\x77\xd8\xb0\xcd\x65\xdb\xb8\xb1\x43\x86\x0d\xe8\x54\xdb\xc7\x8d\xf5\x0c\xdb\xab\xf5\xf4\x1f\xd7\x4b\x33\x5a\x3f\xac\xa7\xaf\xbe\x87\xff\xac\x8d\xd1\xbe\xc5\xeb\xb2\x67\xda\xaa\xdd\xb2\x11\xb5\x2c\x4b\xb7\x17\xcd\xe5\xfe\xcd\x88\x8d\xdb\x8b\x60\xd6\xb6\x2d\x7c\x5e\x88\x63\xb3\x5b\x91\xd7\x71\x04\xfa\xba\x41\x98\xd9\x1b\x11\x3c\x92\x6d\xd2\x33\x45\x02\xdc\xb3\x9b\xf6\x32\x04\xe0\xc2\x8f\x23\xf8\x78\xe0\xf9\x61\xed\xa9\x3d\xbb\xa7\x39\xfd\xd5\x4c\x85\x18\xc1\x20\x73\x63\x1e\x1f\x58\xc9\xca\xa3\x7d\x75\x7c\xe4\xa8\xa8\xd3\x24\x72\x8f\xe9\xb6\x3e\x66\x15\xd9\xe9\x88\x2e\x13\xed\xf2\xfe\x5c\x4d\x2c\xb4\xd2\xdd\xaf\xed\x77\xd7\xb4\x96\x42\xc1\x1e\x17\x75\x6b\x99\xf8\x81\x2b\xe2\x48\x28\x9c\xb9\x52\x2f\xb6\x83\x49\x42\xfd\x87\xdf\xd2\xcb\x1f\x1a\x94\xa1\xce\xbc\xfc\x00\x99\xd9\x8e\x0c\x6b\xcb\xa5\xb1\xd6\xec\x57\x3b\x02\x4b\x78\xcb\x3f\xa8\x4a\x77\xd9\x41\x15\xc2\x2f\x0e\xd4\xb2\xa5\x4f\xd9\x52\x1e\x31\xb6\xca\x53\x8c\x1d\x14\x1b\x70\x2b\x7b\x0d\x38\xbb\xcd\x79\xf7\x32\xea\xc5\xa5\x3c\x5f\xa3\xd3\x4b\x8b\x42\xbf\x6c\x19\x61\x9f\xc7\x76\xc4\x08\x1f\xa0\xb3\x1d\x62\x59\xc0\xa5\xd2\xb7\xd2\x5c\x2d\xab\x84\xd1\xee\xa6\xe5\x14\xeb\x03\x36\x54\x9f\x5c\x17\xa9\x1c\xd5\x15\x62\xb3\x56\xba\x79\xb0\xc6\x4a\xbd\xd7\xe3\x71\x7c\xeb\x58\x5e\xac\xea\x3b\xe5\xec\x62\xe5\x96\x02\xb8\xce\xbb\xeb\x30\x5e\xd7\xbd\xa7\x0a\x24\x74\xdc\x55\x83\xb9\x9c\xd9\x47\x3c\x63\xa3\x4e\xd0\xcb\x82\xe9\x88\xe5\x12\x33\x5c\xc0\x67\xc6\x7d\xaf\x53\xe3\x3a\x1a\x31\x36\x21\xbf\xd6\x84\x3b\x2d\x72\x7f\x1a\x91\x0a\x9c\xe3\x65\xee\x55\xe0\x7b\x10\x79\x1b\xec\x78\xc4\xc7\x6f\x6c\x13\xa9\x28\xdb\x97\x6d\x1f\x1e\x7e\x51\xa1\x82\x20\xe1\x88\x50\xb5\x98\x17\x90\xee\xfc\x34\xf5\xc4\x9f\xb5\x8f\x35\x57\x6b\x71\xd4\x6e\x9c\xf0\xed\x22\x57\xdd\x12\x85\x03\xba\xc9\x16\x51\xf1\xd9\x6f\x50\xb2\x68\xc7\x3e\x97\x3c\xc5\xc3\x4d\xd2\x74\xb4\xd5\x06\xf7\xc7\x0f\xff\xc4\x66\x70\xfa\xb0\x0f\xb0\x2f\x02\x68\x0b\x4a\x2b\x14\x4b\xb6\x99\xc8\xb5\x92\xbc\x53\xab\xf3\xfe\x47\xbd\x20\xbd\x31\x73\x35\x56\x65\x53\x5b\x6c\x44\x4b\x5a\x4a\x0b\x1b\xc5\xd9\x7d\xb9\x14\xb9\x14\xa8\x47\x0a\xcf\x31\xfb\xdc\xa0\xea\x2a\x5e\x16\x9b\x1f\x16\x51\x9a\x0c\x16\x41\x83\x8c\xd1\x99\x79\xed\x0c\xdf\xea\x6b\x40\xa5\xfc\x4a\xd5\x25\xc3\xdf\x18\xfe\x36\x65\x6f\x78\x74\x2f\x64\xcc\xb2\xb4\x5c\x27\x44\x10\x83\xe6\x7e\x52\xbd\xd8\x57\x1b\x86\xb6\x05\x96\x6f\x8e\xa1\xb9\xdc\xf2\x7b\x24\x26\x27\x23\xd2\xdc\x1c\xba\xe8\x05\x9d\xab\x64\x91\x34\xe7\xee\xde\xd1\x72\xe7\x61\xb3\x98\xfa\xdc\xd3\x25\xe6\xcb\x3d\x6e\x14\xa1\x8c\x2a\x9e\x9a\x11\x0b\xd7\xcd\xd6\x06\x8f\x97\xe5\x5a\x71\xca\xb4\x54\x19\x5c\xbd\x10\xc2\x03\x72\xfd\x52\x32\x0e\x54\x60\x2f\x34\x2b\x33\x6b\x9f\x41\x6c\x29\x05\xa4\x0f\x0e\x81\xf9\x21\x4b\xa2\x7b\xc4\x96\x42\xf6\x04\x73\xcd\x6b\x08\x18\x32\xe1\x41\x8e\x6d\x5b\xc3\x0a\x89\x70\x8e\xc3\xad\x34\xb8\xf9\xf7\xcc\xd3\x81\x99\x21\xc5\x46\xc8\xc5\x01\x14\xf1\xc3\x07\xad\x92\x05\x42\x66\xb0\x8b\xd1\xb9\x2e\x2c\x65\x42\xa2\x80\xfe\x8e\xed\xf8\x8f\x93\x55\xcd\x8c\x4e\x34\xd3\xbc\x48\xb4\xd9\xcb\x5a\x7b\xdc\xd3\x0f\x1d\xd3\xeb\x7c\x1c\xe7\x51\x0b\xdf\x51\xad\x2f\x5c\xa6\xd9\x94\xbd\x83\xc8\x46\x70\x33\x50\x8e\x3d\xa8\x6b\xc3\x2a\x36\xa2\x93\x46\xf7\x29\x20\x9a\xb6\x05\xc1\xf3\xbd\x01\x2b\x97\x55\x38\x65\x33\x1f\x51\x46\xfe\x24\x8c\x15\xef\x69\x91\x48\xb5\x38\x64\xf2\x0d\x0a\xbe\x00\xea\x0a\x26\x10\x03\x4b\x4a\x9b\xbf\x7b\x55\x10\x57\xcd\x47\x48\xdc\xe7\xf7\x42\xf6\x79\xd8\x87\xd7\x10\x43\x20\xbd\x2e\x01\x17\x5b\x51\x18\x5e\x39\xa4\x82\xc3\x97\x9d\xa7\xac\x4a\x56\xa7\xa6\xcb\xcd\x35\x24\xba\xa7\x74\x41\x8c\xb0\x11\xe9\xd5\xe3\x46\xe9\x70\x9d\xd9\xf1\xc3\x9b\x6c\x5e\x3a\xe5\x07\x48\xb7\x74\x1d\x8c\x38\x4b\xa9\x42\x4e\x2c\xa8\xb5\x5b\xa4\xe8\xd6\x71\xe3\xcd\xec\x16\x0a\xdd\x00\xc8\x04\x5b\x54\x73\x35\xff\xfc\xa3\xbe\x82\x15\xfb\x14\xec\x2b\xed\x52\xdb\xc7\x67\x3e\x1d\x18\xf3\x75\x98\x5e\xaf\xd3\xcd\x63\xc7\x17\x94\xa9\x98\xf9\xe9\x35\x5e\x94\xfb\xeb\x37\xab\x26\xe6\x3d\xa8\x6d\xfb\x66\xf6\x87\x00\x18\xc6\x96\x65\x92\xc6\x48\x9f\x17\x18\x84\xca\x5a\x1c\xc0\x69\x0f\xc7\x7f\xa2\xdd\x79\xd2\x3e\xc7\x3e\xaa\xf8\x98\x89\x35\x9e\x22\xb5\x39\xaf\x07\xe4\x8d\xe8\x10\xbc\xb3\xdd\xdf\x13\x99\xea\x46\xfc\xc7\x0b\x5d\x15\x71\xeb\xa9\x30\x40\xbc\x96\xe5\xea\x06\x14\xa3\xba\x58\x88\x02\x31\x15\x9b\x56\x6c\xc6\xd9\x7c\xc6\x25\xb9\x75\x0d\x0a\x21\x86\xfc\xf1\xcf\xd9\x9f\x6f\xae\x2e\x4f\xb6\x3c\xd7\x1b\x0e\x2c\x0f\xb6\xac\x89\x15\xe1\xc4\xeb\xb1\x45\x32\x24\x72\x2e\x4f\xd8\x5a\x4d\x10\x37\xf3\x9a\x6d\x8a\x22\xd3\xaf\x4f\x4f\xd7\x49\xb1\x29\x97\xd3\x48\x6d\x4f\x7d\xd7\x9c\xf2\x2c\x39\x5d\xa6\x6a\x79\x9a\x0b\xc8\x9c\x38\x79\x35\xfd\xe1\x15\x8c\xcc\xe9\xc3\xab\x53\x40\x4b\x4c\xd7\xea\x1f\xde\xff\xf0\xcf\x7f\xfc\x27\x53\x70\xb6\x2b\x36\x4a\xbe\x26\x50\x4e\x6f\xd9\x27\x68\x95\x9f\xe2\x2b\xb5\xaf\xfc\xf3\xf4\xfb\xb0\x1a\xf4\xe8\x56\xc5\x22\xd5\xa7\x0f\xaf\x16\x76\x60\xa6\xd9\xee\xf7\x5c\x83\xaf\x96\x6b\x70\x9f\x14\xbf\xe7\x1a\x7c\xd5\x5c\x83\xe1\x16\x8e\xdb\x63\x80\xbc\xd9\xef\x8f\xe6\xef\x6e\x8f\xb4\xae\xf7\x7d\xfb\x50\xcb\xe1\x10\x66\x82\x1d\x71\x44\xdc\x8b\x51\x57\xec\x5a\x73\xdd\xd5\xa1\xc3\xc5\x36\x56\x40\xa5\xd3\x98\x1f\x45\x7c\x01\xc8\xbe\x24\x02\x72\x7e\x74\x09\x66\x3c\x69\xcb\x20\x20\x04\xeb\x31\xfd\xf7\x9c\x32\x13\x4f\xad\x2f\x41\xcd\x3d\x50\x5b\x22\xc5\xb7\x2d\xde\x56\x3d\x5a\x4d\x89\xa7\x50\x62\x18\xa8\xcd\xed\x08\xe6\x71\xf2\x40\x5d\x6c\xbd\x3a\xaa\xb1\xe1\xfa\x30\xe0\xf6\x0c\x69\x5c\x5d\x9c\x0e\x51\xaf\x89\xb6\x1f\xb4\x07\x87\x65\xc6\x31\xe7\x90\x25\xe0\xcb\xca\x3c\x53\x5a\xe8\x29\x7b\x57\x53\xaf\xf5\x60\xf4\xeb\x77\x67\xec\xd5\x8f\xff\xfc\xc7\xb9\xfc\xae\xe5\xdc\x86\xfd\x5e\xe5\x6b\xc2\xc6\xc3\x69\xbd\xe5\xba\x10\xf9\x69\xbe\x8a\x4e\x71\x97\x3b\x35\xef\x9f\xd0\x47\x4f\xd4\xea\xc4\xd1\xcc\x9f\x10\xe3\xf6\x74\x1b\x8f\x23\x8d\xa9\x4c\x3d\x3c\x6b\xe8\xa0\xd1\x70\x28\x21\xbd\x9c\x5a\x39\x41\x11\xcc\x5d\x44\xed\x21\xb5\x6a\xf9\x8f\x37\xa9\x5a\xea\x97\x8e\xd4\x92\x6b\xfb\x0d\xcf\x32\xd7\xbd\x34\x9f\x46\x71\xc2\x4e\x91\xe7\x74\x54\xd8\xbd\x24\xbc\x8e\x8c\xe9\xf8\xf6\xc5\xe6\x8f\x7b\xe4\xd8\xe1\xb9\x2a\xa5\x65\xec\x57\x52\xa8\x15\x40\x37\xc0\x12\xb6\xc8\x33\xf0\xd5\x02\x9e\xc9\xf1\xe9\xe4\x22\xc3\x03\x06\xa2\x0a\xdd\xdd\x7d\xa4\x6a\xc5\xbe\x7e\x7e\x0e\xd5\x8a\x63\xfb\x9d\x36\x94\xaf\xd4\xe1\xc7\xc2\xc3\x71\x29\x8d\x41\x55\x98\xe7\xf7\x46\x50\xdd\x3e\xe0\x15\xe5\x3c\x41\x7c\xc6\x73\x30\xd2\xc4\x49\xa1\x4e\x80\x88\x0c\xe8\xad\x50\x47\xa6\x0b\x56\x01\x91\xe7\x31\xc7\xa4\x79\x7e\x40\x3d\xd1\x30\xff\x2d\xa8\x28\xd9\x24\x1a\x69\x99\x09\x66\x9b\x48\x29\x72\x8a\xa9\xed\x3d\x51\x47\xc6\xa5\xc3\xa1\xec\x47\xd9\xfa\x9b\x68\xa8\xf1\xe1\x72\xac\x78\xb0\x09\x4c\x19\x58\x9f\x1b\xb5\x55\xc6\x9c\x51\xa5\x0e\x7e\xc4\xdb\x0b\x1c\xc2\x9d\xb6\xd7\x96\x67\x48\x3c\xfa\xf5\x5a\x63\x96\x96\xf9\x09\x9d\x7a\xe1\x43\xa3\x64\x93\x96\x55\xa1\x98\x3d\xf5\x77\x0a\x1f\xfd\xf3\x06\x50\x0f\xa8\x3d\x0a\xf2\xdf\xc4\xdb\x9f\xfc\xa7\xb9\xd7\x98\x29\xe5\x6e\x0a\xee\xe4\x46\x90\x0e\xf2\xeb\x86\x90\x34\x6b\xcd\x77\x32\x60\x94\xdb\x91\x63\xe0\x12\x47\x86\x0c\x00\x97\x98\x4a\x61\x73\x28\x4e\x5a\x93\x28\xba\xd6\xa5\x15\xdb\x8e\x17\x96\x03\x7a\x5c\x55\x6f\x5c\x01\x44\xf7\xdc\xac\xb7\xa7\xd0\x83\x8c\x1b\xec\x63\xdc\x10\xac\x6d\xd1\x05\xdc\x1c\xbf\x18\x41\x34\x6b\x4c\xdf\xc1\x47\x70\x72\x36\x7a\x30\x58\x0b\x5d\x1d\x38\xce\xc5\xd6\xe7\xb1\x6a\xc3\xec\x22\xeb\xa8\xcf\xc8\x34\xb5\x6c\x5c\x1e\xdd\x8b\x0f\x6e\x7d\x21\xa4\x71\x59\xc2\xef\x97\x57\xb7\x21\x5a\x23\xc1\xd6\x9e\x44\x1b\x11\xdd\x83\xc3\x04\x8f\x3c\x27\xc4\x4b\x0c\xa7\x73\xe9\xe5\x1c\x0b\x65\xa1\x07\x3b\xa7\x70\xe1\x54\x5e\x54\xce\xe2\x44\x67\x29\xdf\x41\x90\x57\x62\xee\x95\x0f\x10\xbb\xa4\x45\xb3\x15\xec\xf3\x17\x0f\x1f\x69\x33\x2a\x33\xff\xde\xd8\xbe\xf4\x60\x5a\xdf\x99\xcd\xfd\x80\x69\xb1\xe5\xb2\x48\xa2\xb9\xdc\x0a\x2e\x43\x54\x1e\x05\xb9\x4d\x27\xc7\x4a\x10\x07\xfc\x6a\x25\xa2\xc2\x93\xc8\x82\xf1\xee\x7a\x6a\xdf\x1a\x1c\xd7\x76\xb7\xf2\x7a\x9b\xfe\x13\xe0\x7e\x31\x46\x9f\xab\x07\xda\x86\xed\xd1\x78\x60\xf0\x06\xe4\x3f\xe9\xc8\xb5\x97\x41\xf8\x97\x9d\x53\x6c\x29\x8a\x47\x01\x1c\x29\x94\xd4\xdd\x66\xe3\x1f\x2d\x01\x73\x9c\xa2\x7b\xbb\x16\x7e\x80\x04\xc3\x05\x16\x82\xc9\x1c\x99\x9b\xac\xb1\xb2\xbd\xa0\x34\x73\xf0\xf6\xbc\x20\xbf\xd5\x0b\x38\xa6\xcd\xed\x31\x7f\x10\xf1\x5c\x56\xa9\xf2\xc8\x66\xf4\x0b\x8e\x79\x71\xc3\xa7\xd9\x6d\x6c\x1f\x0f\xf2\xe5\x9f\x03\x3d\x90\x27\x06\x76\x89\xd4\x3d\x62\x8b\xd8\xe8\xe7\xbc\x55\x59\x9d\xd7\xd0\xba\x1f\x00\xc9\x12\xda\x8a\x97\x91\xd6\x69\x05\x4f\xe1\x26\xa5\x23\x02\x43\x96\x50\x07\x80\x25\xbf\x64\xc3\xd3\xd9\x56\xc6\x5c\x5a\x86\x8c\x55\x99\x22\xf3\x73\x57\x1e\x02\xf1\x02\xda\x6c\xbe\xaf\x97\xd5\xe9\xfc\x6a\x2c\xd0\x8b\x74\xb0\x87\x00\x8c\x8c\x7b\x9d\x9d\xf5\x42\xea\x12\x4c\x0a\x2b\x15\x07\x8e\xe7\xb5\x28\xe0\x34\x8f\xcb\x14\x09\x1f\xc0\x63\x0e\x1c\x83\x3c\x4d\x59\x52\xe8\xb9\x74\x94\x88\x98\x6c\x00\x3b\xac\x75\xa9\x5b\x95\x71\xe9\xb4\xca\xe1\x67\x2e\xc1\x0e\x4b\xa2\xa4\x68\x40\xb8\x77\xa1\xbc\x52\x96\x09\x8e\xf9\xc9\x38\x6c\x73\x19\xde\xb9\xea\x83\x40\xc9\xbc\x3c\x4d\x78\x8f\x0a\xfc\x53\x4c\xdd\x99\xf9\xc4\x41\xb8\x05\x6c\x9d\xb9\x70\x59\xe5\x64\xac\x2d\x71\xa2\x10\xd2\xd2\xdc\x6a\x0a\x6d\x7d\xe4\xfe\xde\x0a\x79\x0a\x51\x99\xf2\x1c\x13\x34\x56\x65\xca\x92\x55\x20\x02\x0d\x63\x80\x84\x78\x66\xb8\x22\x05\x67\xb5\xf5\x92\x6b\xbe\x15\x01\x17\x07\xb9\x77\xd2\x00\x43\x81\x2c\xff\x18\x9c\x37\x65\xbd\x9c\xb2\xb7\x9e\xf2\x13\x47\x18\xd6\x44\x40\xa4\x9b\x68\xdc\xfe\x5c\x7d\x83\x34\x72\x68\x9d\xa9\xa2\x92\x66\x45\xba\x55\xd7\x31\x82\x20\xc8\x31\x0e\xa0\x61\xe5\x58\xfa\x51\xc3\xad\x34\x12\xe6\xd5\x1a\x6c\xc3\x2d\x88\x8e\x0a\xda\x53\x61\x64\x25\x43\x12\xe2\x03\x2a\xea\x48\x9e\x5b\x2a\xbb\xed\xd1\x9c\x86\x71\x1c\x59\xd5\x40\xc1\x6d\x7c\x45\x83\x99\x13\xc2\x71\x86\xf4\xec\x9a\x17\x63\xb1\x39\x2e\x19\x67\x7c\x45\x5b\x71\x50\x43\xaa\x09\xbb\xc7\xc8\x7a\x3a\xa1\xfd\x03\x2a\xea\xe4\xfc\xbd\xc6\x0b\x6c\x15\x82\x47\x9b\x6a\x5e\xbc\x65\xaf\x75\x2d\x80\xbc\x28\x58\x8f\xe3\x53\xfa\x67\x7e\xce\x81\x88\x1d\x33\xd5\x9f\xb2\x2b\x29\x10\x39\xa7\x56\xc1\xa1\x42\x15\x20\xb5\x3b\x10\x10\x71\xbb\xdc\xd2\x54\x4c\xde\x5b\xba\x20\xb3\xe4\x26\x8c\xfb\xd2\x61\xd7\xc3\x69\x83\xbb\x48\x87\x2d\xd9\x26\xb7\x73\x84\x79\x39\x2c\xe9\xbe\xfd\xce\x1f\x00\x50\xc7\xef\x00\x6d\xed\x18\x3e\x2c\xbd\x48\x72\x77\x8b\xb3\xf0\xf1\xea\xbc\x61\x08\x27\xdd\xd7\xbf\x1f\x37\x55\x14\xe2\x08\x71\xba\xbb\xcb\xb7\xe7\xef\x2e\x2e\xab\x8a\x72\x7f\xb9\x3b\xbf\xab\xfe\xe5\xfa\xee\xf2\xf2\xe2\xf2\x4f\xe1\x9f\x6e\xee\xce\xce\xce\xcf\xdf\x56\x9f\x7b\x37\xbb\x78\x5f\x7b\xce\xfc\xa9\xfa\xd0\xec\xcd\xd5\x75\x4d\xc3\xce\x0a\xd0\x05\x7f\xba\xbd\xf8\x70\xfe\x76\x71\x75\x57\x91\xc1\x7b\xfb\xaf\x97\xb3\x0f\x17\x67\x8b\x96\xfa\x5c\x9f\x9f\x5d\xfd\x72\x7e\xbd\x47\xc5\xce\xb7\xb7\xb5\x4b\x9f\x02\x3e\x76\xb0\xa6\xe1\x8c\xad\xf2\x44\xc8\x38\xdd\x21\xf6\xde\xde\x6c\x6b\x60\xda\xf0\xec\x4d\xb6\x42\x95\xc7\x40\xe8\x6f\x37\x82\xa9\x07\x91\x03\xb3\x11\x96\x46\x34\x08\x3e\x8b\xba\xfe\xd5\x5c\x14\x79\x33\x2a\xd0\x9b\x29\x54\xe4\x3b\x97\x8b\xd6\x57\x1d\xcf\x8a\x47\x1f\x61\x99\xc8\xfb\xea\x02\x96\x51\x5e\x66\x45\xb2\xec\x4e\x8a\x18\x9d\x4c\x3c\xf4\xee\x8d\x1c\xae\xed\x84\x57\x97\xed\x1b\x63\x25\x37\xe0\x18\xe0\x31\x94\x70\xa8\x54\xa7\x7b\xdb\x82\x35\xb3\x72\x99\x26\x11\x4b\xe2\xba\x3f\x85\x72\xfc\xc1\x65\x5c\xa7\x7a\xce\x44\x0e\xa6\xaa\xb9\x01\x64\xb9\x38\xe1\x65\xb1\x41\x5a\x42\x4a\x45\x20\x61\x8e\xb9\xd4\x22\xca\x05\xc6\x02\x84\x06\x27\x2d\x6a\x34\x06\x5f\x82\xca\x10\x2b\x47\x0c\x04\x60\xd3\x40\x76\xa3\x23\x46\x80\x6f\x62\xe9\x23\x9c\xa4\xf8\x7c\x6f\xd7\x50\x8d\x13\x5d\x17\xe8\x87\x13\x1e\x7f\xb4\x4a\x8f\xa6\xdd\x66\xa7\x76\x4a\x87\x38\xc8\x36\x77\xa3\xbd\x19\xfb\xe6\x58\x38\x51\xaa\xc9\x0c\x54\x3a\xfd\x74\x96\x0b\x38\x44\x08\x0a\x60\xfd\x17\x00\x5d\xa1\x5c\x0f\x48\xf1\x30\x57\xb5\xa5\xd8\xf0\x74\x85\x16\x87\x19\x9a\x76\xa6\x04\x2c\xff\x56\xdd\x0b\x79\x8d\x03\xf6\x55\xb6\x43\x89\x37\x1f\xcf\xd3\xe2\x3c\x42\xde\x85\x69\xea\x68\x67\x95\xcd\x75\x03\x63\xaa\xc0\x7b\x42\xf0\x33\xa6\x74\x78\x16\x76\x9b\x26\xb7\x5a\x25\xbf\x99\x02\xe7\x52\xb4\xf2\x50\x03\x5e\xc8\x32\xe6\xb9\x7d\x19\xb0\x51\x48\x3b\x76\x2f\x24\x68\x44\xa2\x84\xfc\xde\x39\x3b\xce\x7f\xde\x1c\x8b\x1e\x87\x3e\xf8\xfc\x92\x8a\x74\x66\x18\xe5\xb1\xfd\x54\x60\x8e\x8d\xe3\x15\x80\x79\x73\xf6\xfe\xe2\xfc\xf2\x76\x71\x76\x7d\xfe\xf6\xfc\xf2\xf6\x62\xf6\xfe\x66\xe8\xf2\x7b\x8a\xbc\xa8\xda\xea\xab\xa7\x07\xb9\x1d\xe2\x94\x56\x9e\x4f\xcf\x75\x8d\xf2\xcb\x0e\x86\x64\x7f\xed\x93\x38\x5b\xc4\x89\x8e\xcc\xf1\xb7\x5b\x08\x19\x03\x81\xff\x41\x53\xb5\xbd\xa8\x7a\x2b\xdc\x13\xcc\x3d\x61\x77\x10\x3c\xed\x1e\xec\x8c\x76\xbf\x03\xea\x0e\xdc\x90\xb9\x30\x8b\x3f\xae\xf0\x26\x4c\xf7\xab\x36\x99\xe2\x8e\x6b\x5b\xb5\x88\x7a\x9b\xb0\xbe\x89\xd6\x25\xd0\x33\xd8\xc7\x00\x72\xd8\xd1\x2b\xc4\xaa\x1a\xaa\x08\x24\x81\x02\x36\x4b\xf4\x5c\x6e\xb9\x8c\x79\xa1\xf2\x5d\x47\x13\x87\x6d\x9e\xe1\xb2\xa9\x6e\xa1\xe1\x91\x2d\x85\x88\xed\x28\xe0\xa3\x5c\xd6\xa7\x12\x6a\x0d\xdc\x5e\xfd\x7c\x7e\x79\xb3\x38\xbf\xfc\x65\xf1\xf1\xfa\xfc\xdd\xc5\x5f\x1d\x12\x32\xe3\xba\x4d\xf1\x36\xcb\x85\xd9\x5d\x2c\x75\x53\xeb\xfe\x82\x32\xb4\xb6\x1c\x92\x1e\x4c\x56\x73\x69\x77\x96\xdc\x17\xbf\xc9\x55\xb9\xde\xb4\x17\x54\xaf\xe5\xc7\xd9\xed\x4f\x07\x55\x13\x88\xf5\x50\xab\x12\x57\x5b\x13\x11\x9a\xac\x68\xdf\x43\x18\x69\xad\x7a\x40\x0f\x09\x8f\xb6\x45\x19\x3a\x76\xb4\x83\x6e\x2f\xcd\x4d\xab\xd7\xf8\x6f\x79\xbc\x6b\x02\xdd\x06\xfb\x66\xe5\x18\x01\x84\x32\x4a\x1e\x37\x4a\x7b\xdd\xf2\xb7\xca\x09\xf6\xc3\x49\x2a\xd6\x6b\x11\xe3\xf4\xaa\x17\x4c\x3e\x38\xda\x02\x23\x7f\xae\xb7\xf5\x22\x89\x92\x1e\x71\x30\x3b\xbc\xd7\xf0\x0d\xfc\xa3\x7b\xa5\x7d\xaf\x38\x23\x72\x1c\x88\x6f\x16\x5c\x76\x04\x92\x1f\x9a\x08\xcd\x41\x5b\xd1\x55\xce\x5c\xf2\x13\x39\x4c\x6c\xc8\xc0\xaf\x83\x2e\xc0\xcb\xf1\xb8\x50\x57\x8f\x6b\x91\xa5\x3c\x12\x2e\x87\x01\x59\x4d\xe1\x5e\x7f\x48\x00\x8f\xa4\x5f\x25\xf9\x5b\x02\x49\x58\xaf\x76\xd5\x36\x05\xc0\x73\x7b\x6d\xf7\xe3\xe7\x77\xad\xf4\x5e\xdc\x88\xcb\x10\x1c\xcd\xa8\xbd\x47\xd0\x77\xf4\x45\x81\xa0\x65\x27\x2c\x79\xd4\x74\xa8\x7d\xf9\x17\x1a\x78\xbc\x33\x57\x1d\xdd\xdc\xb2\x85\xba\xe9\xe1\x4c\xc7\x3e\x7f\x61\x51\xe4\xbd\x04\xc3\x4f\x11\x8e\xf8\x98\xab\x6d\xa2\xc5\xac\x28\xf2\x64\x59\x86\x0a\xab\x23\x01\x73\x95\xcb\x89\x6f\x70\x96\xab\xb8\x8c\x2c\x25\x10\xb4\xd6\xc3\x7e\xc8\xcb\x67\xad\x8e\x98\x9d\x98\xd9\x47\x37\x37\x11\x9f\x00\xa0\x1f\x39\xab\xda\x62\x6c\x76\x63\xec\xf0\xfd\x7d\xb4\x47\xf9\x31\x53\xb2\x65\x52\x74\x77\xa6\x9d\x03\xc3\x12\x6b\x99\x7d\x1c\x2c\xe0\x0e\xd4\x14\x4d\x97\x25\xc7\x00\x7a\xd5\x46\xe9\x62\x00\x71\x47\xcd\x38\x70\xd7\x30\x6c\x4c\x35\x63\x06\xed\x86\x0d\xd7\x68\xce\x17\xd1\xa6\x5a\x71\x68\x4d\x95\x09\xb5\x5e\x5d\x67\x1e\x1f\xe7\x36\x19\x14\x46\x9b\xa0\xa3\x21\x21\xc7\x76\x45\xd5\xd2\x49\xf4\x8e\xf3\x76\x87\x16\xa3\xbb\xd1\xe1\x61\x00\xfb\x68\xca\x4b\x19\x6d\x58\x96\x72\x4c\x26\xdf\x70\x8d\x53\xda\x62\x49\xf8\x32\x49\x93\x02\x58\x7a\x30\xc4\x59\xeb\x61\x73\xcd\xe3\xf9\xbd\x25\x3b\xe7\x9e\x92\xa9\x6f\xd2\x1f\x89\xd9\x75\xad\xfa\xa2\xa8\x5d\xbf\x64\xc3\x6d\x68\xd8\xb4\x24\xc4\xae\x1f\x0e\xb3\x11\xc3\xb4\xf4\x6d\x19\x37\xb2\x54\xe2\xc7\xfa\xeb\x95\xfe\x6e\xb1\x5e\xc6\x23\x56\x48\xc5\x63\xc4\xe9\x53\xd7\xf8\x68\x5d\x59\xab\x54\xf1\x0e\x9d\x79\x5b\x36\x4a\x76\x74\x95\x1d\xab\x72\xd9\x45\x12\x8f\xb5\xea\x2f\xbd\x2f\x18\x62\xd7\xed\x53\x39\x4b\xc3\x0d\x90\x17\xa2\x48\xc6\xf9\x7b\x82\x46\xf3\x42\x9c\xc0\xeb\xed\x85\x53\x86\xe1\xe0\x36\x37\x26\x9a\x17\x8e\x72\x46\x1b\x60\x09\xdb\x66\x57\xed\x74\x3e\x06\x13\x7e\xe4\x78\x25\x72\xcf\x54\xda\xaf\x45\xf3\xc7\x1f\x5a\xba\xa5\xd1\xe8\xbf\x94\xdc\xec\x87\x57\xab\x1b\xe4\xca\x39\xa6\xd1\x45\xd2\x5c\x56\xed\xdb\x4f\xfd\xab\xb7\xd5\xf0\x5a\x38\xf1\x07\x67\x22\xb7\xb5\xe6\xc6\xbc\x3d\x7c\x17\xba\xa8\xb8\xd1\xb2\x3c\x51\xc0\x19\xa3\x56\xc8\xc0\xd8\x4d\x21\xdc\xfa\xdd\x23\x7a\xf2\x73\x29\x4a\x61\x26\xd0\xb2\x8c\xd7\x4d\x2f\xf7\x08\x4b\xd9\x37\x69\xa3\x1e\xd9\xb6\x8c\x36\xcc\x16\xce\x62\x91\xf2\x5d\xa5\x69\x60\x24\x16\x0a\xf8\x3c\x47\x51\x67\x05\x2c\xcc\x51\xa9\x0b\xb5\x05\x80\xb1\x2f\x37\x2f\x25\xac\x72\xc6\xed\xea\x6a\xdb\xdf\x2b\xec\x72\x07\x86\x36\x6f\x3e\x9e\x9f\x5d\xbc\xbb\xa8\xc5\x15\x67\x37\x3f\x87\xff\xfe\xf5\xea\xfa\xe7\x77\xef\xaf\x7e\x0d\xff\xf6\x7e\x76\x77\x79\xf6\xd3\xe2\xe3\xfb\xd9\x65\x25\xfa\x38\xbb\x9d\xdd\x9c\xdf\xee\x09\x30\x36\xbf\xda\x3d\x10\x3c\x20\xbf\xb3\x90\x67\xab\xec\x60\xfd\x0c\xf4\xd5\xd7\x6c\x66\xa9\x00\x2b\x64\x95\x36\x48\x0c\xa8\x92\x14\xc1\x71\x18\x4b\x7e\xcb\x0b\x7e\xc6\x0b\x9e\xaa\xf5\x94\xcd\x18\x01\xc2\x11\xe8\xaf\x8d\x85\x44\x3c\x69\x66\x74\xb0\x08\x63\x26\x45\xfe\x0e\xef\xa5\x6b\xd5\x8a\x18\x0a\x53\x11\x8a\x9c\xd8\xac\xb6\xb9\x3c\x7f\x10\xb2\x28\x81\x84\x96\xa7\x29\xa3\xcf\xda\x07\x82\x8c\x7d\x5b\x4b\x9d\x6c\x93\x94\xe7\x5e\x65\xf4\x8a\xca\x82\x5b\x8a\xad\xab\x23\x68\x6a\xa6\x83\xdb\x8b\xdc\xdd\x05\x83\x7a\x9f\xbd\xbf\x00\xbb\x2f\x2a\xac\x84\x96\xfd\xf8\x5c\x22\x03\x1e\x7d\x71\xcb\x21\xf9\xa4\x50\xe4\x59\xc5\xcf\xd3\xc3\xdd\x13\xf1\x28\x2a\x70\x1b\x83\x78\xae\x1b\xa5\xab\xa4\xfd\x8f\x73\x59\xe4\xbb\xc1\xc6\xdc\x2d\x64\x5b\x6b\x30\xc8\x09\xcb\x56\x55\x1e\x45\xc7\x17\xb3\xa5\x5f\x82\x85\x67\x81\x96\x14\x97\x71\xe1\x17\xc4\xb5\x74\x5c\x3a\x52\x73\xf2\x7e\xab\xfd\x10\x12\xe2\x40\x2f\x2c\x55\x29\x63\x4d\xa8\xbb\x6d\x22\x4f\xb7\xfc\xb7\x97\xb6\xa5\x48\x30\xe1\xf4\x7f\x80\x3c\x4c\xa4\xe6\xfa\xb5\x33\x9b\x5c\x7f\x77\xcd\x65\x4f\x7f\xed\x37\x91\xed\xce\x0a\x77\x3d\x7f\x31\x47\xfc\xe0\x83\xd8\xb5\x8d\x5f\x43\xc3\x8d\x85\x44\xe4\x50\x48\x96\x0b\xf3\xa0\x03\x27\xa6\x88\x39\x75\xff\x86\x24\x84\x8a\xce\x6c\xfb\xde\x1d\xc6\xfb\x8f\x5a\x36\xad\x48\x83\xe1\x86\xcf\x60\x11\x3e\xfa\x92\x19\x33\xc4\x1d\x58\x97\x37\x25\x5d\x50\x40\xd5\x0c\xd6\x7f\xa8\x25\x5b\x41\x06\x12\x26\xda\xb1\x5c\x40\x88\x03\x86\xc2\xaa\x46\x00\xc5\x54\x03\xcc\x60\xa7\x40\x2a\x34\x38\xfe\xa5\xb9\x63\x8a\xcf\x25\xc5\x6e\x5f\x7d\x3f\xee\x9c\x2d\x90\x7a\x1c\xb9\x66\xeb\xa4\xdc\xee\x2c\x87\x7a\x95\x32\x69\xe3\x9d\xbb\x2e\xa5\x39\x8a\x9f\x02\xf6\x32\x3c\xae\x59\xfb\x28\xfd\x73\x6f\x92\x90\x75\xc9\xe7\xf8\xfc\xb3\xd1\x88\xfe\x52\x63\x0f\xa5\xcf\x01\x24\x9d\x4a\x0f\x0f\xb4\x25\x8f\xee\x1f\x79\x1e\xa3\xdf\x16\x70\x28\x53\xf6\x93\x7a\x14\x0f\x22\x9f\xb0\x48\xe4\x05\x27\xea\x2e\x0d\x81\x78\x58\x50\x54\xce\x5c\x42\x86\x06\xf2\xa0\x49\x5d\xe6\x82\x15\xc9\x7a\x63\x2e\xd1\x01\x8c\x42\xe5\x66\x3b\x2a\x90\xb5\x31\x13\x11\x91\x25\x75\x74\xc0\x2a\xe5\x0f\x4d\x2e\xb2\x43\x58\x1e\xd8\x85\x4b\x33\xb5\x71\x4a\xab\xc4\xd3\x07\x7c\xa1\x0e\xa3\x4d\x13\xe9\x6d\x26\x6c\xad\x52\x2e\xd7\xd3\xe9\x14\x58\xe7\x5f\x76\xc1\x79\xf4\x42\xef\x64\xb4\x40\x8a\xc5\x2f\xe1\x98\x6a\x69\x24\x2a\x91\x41\x80\xd9\x54\xc6\xf2\x3d\x9a\xcd\x33\xfc\x77\x8c\xe0\xfb\x96\xe9\xb8\x77\xe5\x52\x0f\x85\xa1\x5c\x87\x17\x4f\x95\xd2\x22\xdd\x39\xc6\x22\x97\xd1\x03\x10\xd2\xdf\x0a\x21\x75\x82\x8e\xab\x96\xf5\x7c\x53\x0f\x73\x7c\xd9\xa8\x50\xbb\xbf\x61\x74\xbe\x68\x47\x39\xa0\x54\x38\xa2\x24\x7c\xbe\xfd\x2a\x79\x50\xfe\x73\x7b\x59\x52\xc9\xb1\x49\xbd\xbf\xa8\xa4\x03\x94\x70\x10\x91\x60\x6b\x49\xc4\xba\x72\x50\x22\x64\x7b\x9f\x35\x72\x53\x8f\x48\x4b\xed\xc9\x30\x1d\x99\x5c\x3a\xc4\xb3\x71\x53\x1f\xee\xd1\xcb\x62\xbf\x78\x52\x6b\x83\x46\x26\xef\xfa\x2c\xfb\x31\xb6\x20\xe6\xff\xa5\x3b\xb8\x42\xba\x54\x5e\x88\x0f\xc4\x41\x7c\xa3\x12\xbe\x81\xa4\x32\x1f\xff\x71\x6c\x58\x41\xb8\x47\x17\x2a\xe7\x6b\xc1\xb6\x22\x4e\xca\x6d\xeb\x66\xe3\xaa\x7b\x0c\x90\x51\xa5\xe5\xb6\x9b\x97\xf0\xd8\x1b\x81\xaf\x24\xfe\xd7\x19\x7c\x6e\xf0\x8d\x60\xe6\x30\xfa\x56\xc3\x8e\xea\x8b\xc1\x0c\xea\x6b\x73\xf4\xe7\x89\x06\x06\xcd\x43\x72\x38\x5d\x31\x58\x34\x84\x82\x77\x19\x3a\xd1\x2b\xa3\x7b\x62\x63\x74\xf4\x8a\xc6\x51\x85\xf8\x71\xf7\xa1\x50\x87\x47\x8e\x57\xb2\xca\x55\xd9\x60\x0f\x1a\x14\xb2\x07\x3b\x38\xe0\xb5\x27\xfc\x16\x14\x48\x20\x93\x42\xb1\x95\xcd\x0a\xbc\x17\x01\xcf\x5a\x0c\x8c\xf7\x8f\x48\xda\xf3\xf3\x8f\xda\xc2\x51\x08\x31\xe4\x4d\xb0\xc2\x7f\x04\x23\x3c\x0f\xaf\x2c\x50\x0c\x5b\x88\x45\x00\x1b\x5a\xcc\x65\xd1\x5a\x80\xc7\x51\x42\x59\xf8\xca\x2f\xbc\x4c\xdb\x1f\xa7\xf2\xe1\x51\x54\x44\x9c\xfd\x7a\xc3\xb0\xab\x89\x1b\x3d\xef\xab\x68\x50\xc8\x7e\xa8\x1a\x74\xd7\xe2\x00\xd3\xb6\x32\x0e\xd8\xe9\x96\x1c\xdf\x74\xbb\x28\xa2\x8d\xb7\x3c\x80\x0d\xce\xb1\xd8\x91\xdc\x2d\xb5\x73\xeb\xd9\xde\x11\x05\x1c\xc2\x29\x93\xb5\x54\xa1\x50\x89\x92\x02\x42\x6d\x66\x03\x52\x61\xb1\x2c\x29\xf6\x63\xd6\x46\x52\xa0\xed\x9b\x6a\x85\x42\x2c\x12\xb5\xb3\x12\x31\x85\x3b\x52\x82\xc4\x49\x16\xf0\x8b\x97\x3c\x52\x4f\xad\xb3\x80\x57\xa9\x28\xe6\xb2\xfa\xa9\x46\x27\x59\x50\x59\x92\x0b\x24\xef\xd5\xc6\x7a\x2b\x92\x07\xb3\x50\x9b\xd3\xda\x4d\x50\xd8\x01\x9a\x73\x6f\x2e\xb1\xda\x01\x03\xf0\xbd\xd8\xe9\x50\xaa\x95\x66\x14\xeb\x9a\x90\x89\x69\x0f\x8d\xd7\xfe\xa1\x80\x8e\x5b\xe4\x5e\x70\x6d\xd8\x59\x86\x1f\xfd\x60\x5e\xee\x41\xab\x36\x0a\x37\x73\xd0\xa7\x5d\x7a\x27\x29\x6d\x13\xbe\x9f\x69\x0c\x3d\x20\x0d\xe0\x86\x21\xa0\x30\xcc\xa1\x81\x9b\xbc\xb9\xb0\xcf\x25\x91\x84\x07\x87\x9c\xd9\x70\x9a\xc3\x46\xb9\xe0\x48\x4d\xbc\xab\xf0\xd8\x00\x8f\xa3\xe5\xb4\xac\x7e\xd2\x46\x8f\xad\xd2\xf7\x5c\xc2\xa7\x31\x5b\xd6\x3a\x25\x5b\x3f\x78\x20\xca\x91\x06\xb7\x13\xd9\x18\xa4\xa4\xe1\x93\x44\x65\x88\x9a\xbf\x78\x9d\x8b\x84\xe9\xbe\x99\x6c\x05\x15\x5a\x48\xe1\xcd\xf9\xd9\xf5\xf9\xed\x17\x43\x3e\x5a\xd8\xe1\x68\xe8\xa3\xad\xe7\xdb\xf3\x77\xb3\xbb\xf7\xb7\x8b\xb7\x17\xd7\xcf\x81\x7d\xa4\x9f\x0e\x00\x3f\xde\x90\xf6\xc0\x99\x92\x85\xf8\xed\xa8\x33\x39\x2f\xe5\x82\x8f\x48\xc2\x71\xea\x23\x7d\xe6\x0e\x16\xda\xd4\x4e\x70\xc2\x06\x44\xa4\x89\x27\x9a\x93\x4a\x58\x79\x2f\xe8\x2a\x49\x53\xc8\x49\x76\xf1\x02\xca\x77\x33\x9d\x0a\xfb\x8f\xe5\x0e\xa5\x3d\x75\x2e\x97\x15\x69\x0b\xf0\x61\x6e\xcc\x25\x18\xb3\x91\x33\xd3\x01\x79\x02\xb9\x9e\x7d\xf2\x0a\xeb\x44\x0a\x5f\x0d\xd4\xe7\x2f\x25\xeb\xe4\xc4\xa6\x41\x7c\x4e\x8c\x17\x19\x5e\x43\x6d\x4d\x3b\xe3\x2a\xf3\xd3\x9a\x9f\xf6\x47\xd7\x42\x5c\xc4\xe0\x97\x88\x31\x9c\xe1\x56\xf3\x4d\xfb\xd4\x3d\xf5\x4b\x00\xfa\xdd\x8c\x24\x87\xa0\x0a\x48\xe0\xfb\x81\xa4\x81\x40\xd9\x25\x1f\x6d\xb9\x4f\x10\x0b\xa5\x56\xb5\x7e\x36\x5b\xa1\xe9\xeb\x04\x42\x2f\x9c\x68\x56\xa2\xb4\xd4\x85\xc8\xc9\x0f\x34\xfb\xf5\x66\x2e\xdf\x98\xe3\xeb\x25\x9d\x42\x24\xcd\x83\x9f\x40\x24\x8e\xaa\x7c\xdf\x5a\x28\xe1\x0e\xf6\x1d\x3a\xdd\xb7\x82\x4b\xcd\x60\x69\xa4\xa9\xc8\xfd\xcc\xc0\xfa\x08\x11\x93\x44\x2d\xf0\xca\xfa\xf7\x5f\x32\x82\x59\x9a\xae\x30\xf5\xa5\x5f\x73\xb1\x55\x45\x73\x3e\x75\xa5\xbc\x03\xf6\xf9\x39\x67\x4e\x4b\x0a\xce\xd0\x59\x44\xb0\xf1\xd6\x49\x54\x4d\x88\x19\x34\x97\x6e\xb1\xb8\xdf\xa7\xd2\x13\x4e\xa5\x01\xe7\x7a\x78\x4a\xb0\x8d\x32\x1b\xa8\xd3\xad\xf1\x71\x73\x47\xb9\x91\x02\x8a\xcd\x74\x63\xeb\xa9\x53\xd3\x6e\x3c\x06\xcc\x02\x45\x1d\x87\x15\x9e\xb5\x70\xfb\x78\x91\x30\x1b\xac\xea\x95\x85\x7c\x1e\x0e\xbd\x99\x45\x4d\x4a\x55\x58\x36\x0c\x07\x54\x24\xd4\xa5\x79\xc0\xd1\xb0\xf4\xd6\x91\xa8\x4d\xac\x95\xb2\x38\x52\x5a\xed\x36\x44\x77\x56\xf2\x83\xb1\x16\x21\xb3\x80\x65\x13\x70\x6c\x24\x63\x26\xdf\xe1\xe2\x9d\xd5\x39\xe7\x98\x2d\x0f\x42\x6f\x5c\x5e\x5d\x9e\x87\xd8\x8b\x8b\xcb\xdb\xf3\x3f\x9d\x5f\x57\x32\xcb\xdf\x5f\xcd\x2a\xd9\xe1\x37\xb7\xd7\xb5\xa4\xf0\x37\x57\x57\xef\xcf\x1b\x20\x8e\xf3\xdb\x8b\x0f\x95\xc2\xdf\xde\x5d\xcf\x6e\x2f\xae\x2a\xcf\xbd\xb9\xb8\x9c\x5d\xff\x6b\xf8\x97\xf3\xeb\xeb\xab\xeb\xda\xf7\xee\xce\xfa\xe1\x20\x95\x66\xb4\xbb\x7f\x7c\xb4\x39\x20\xf9\x6c\x5d\xc6\x55\x71\xd3\x23\x56\xf1\x40\x28\xdd\xbe\xe9\x68\x13\xc7\xe3\x90\xfb\x1f\x17\x86\xa9\xea\xa8\x59\xf7\xf4\x6a\xac\x95\xae\xcb\xf8\x71\xdb\x9e\x39\xd5\x16\x4f\x01\x6d\xec\x35\x00\xdd\x57\x6a\x8e\x5b\x12\x3f\xc6\xae\xcd\x20\x5a\xb5\xe6\x9d\x5a\x44\x32\x7e\xf6\x9a\xda\x6f\xec\xab\xa7\x27\x95\xda\xc3\xcd\xf3\x54\xbc\x1c\x7d\x95\x0e\x3e\x66\xd3\xde\x93\xd8\x1a\x0a\xf6\xc7\xe0\xe0\x86\x66\x98\x99\x13\x4c\xc7\x2e\xd9\xcc\xf6\x04\x9a\x7e\x1e\xb8\xb1\xf5\xa7\x8f\x34\xeb\x5e\x23\x0d\x19\x51\x6f\x20\x6f\x1a\x53\xef\x5b\xae\xef\xc7\xd6\x9b\x3e\xd2\xac\x37\x98\x7d\x07\xd5\x1b\x1c\xde\x45\x3b\xa1\xcb\x88\x4d\x2c\x2c\xa6\x5a\x3d\x97\x6d\xee\x1e\x09\xd4\x69\x87\xd5\xd1\x2c\x80\xe7\xbd\x5e\x66\x7c\x78\x20\x03\x6a\xe3\x96\x2b\xaf\xf1\x9b\xdf\xc0\xaf\xd0\xc2\x65\x2e\xf8\x7d\xac\x1e\x69\x3c\xea\x50\x57\x36\x68\x37\xaf\x76\x90\xd9\xc3\xed\x11\x51\xe4\x14\x81\x42\xd8\x9d\x2f\x1e\x70\x7f\x09\x31\x74\xa3\x0d\x16\xc8\xaa\xd6\x29\x71\x20\x1a\x2f\xfd\xe8\xcc\x25\x5a\xf3\x6d\xd2\xac\x66\x54\x4d\x8d\x88\xc4\x02\x9a\xea\x6c\x68\x0c\xae\xeb\x60\x60\x29\x23\xa5\xcc\x01\x1d\xb8\xcc\xe1\xce\x04\x1d\x92\x48\x70\x26\xe7\xe6\xc2\x93\x8b\x28\xd1\x22\x90\xa7\x6a\x3d\xb1\x3f\x1f\x27\x66\x51\xf0\xa2\xd5\xed\x3a\xd8\x1f\xce\xa3\xa2\xe4\x29\xfb\x5c\x8a\x7c\x47\x5c\x80\xe8\xab\xc4\xbf\x44\x5c\x62\xea\x4b\x21\xb6\x19\xe4\x97\x87\x39\x1b\x73\xf9\x2b\xa2\x20\x60\x08\x5e\x68\xf6\x27\xc0\x70\xd8\x87\xe9\x10\xde\xf2\x02\xce\xe2\xbf\xe0\x37\xdc\x6f\xd3\xb9\xac\xc8\xbd\x04\x6f\x55\x94\x5f\xa6\x73\x69\xf5\x16\x62\x15\xe9\x29\xdc\xf8\xa6\x2a\x5f\x9f\x92\x52\xb1\x99\xec\xea\x7e\xa9\xd4\xfd\xa9\x90\xa7\xe0\x93\x2a\x4e\x79\x59\xa8\x53\xc0\x7f\xe1\xf8\xeb\x53\x2b\x68\x6a\x15\x61\xf5\xe9\x26\x79\x10\xf0\xff\xa6\x9b\x62\x9b\xfe\x83\xce\x36\xbf\x9d\xac\xd3\xfc\xc4\xbc\x7b\x12\xbe\x7b\x62\xdf\x3d\xb1\xef\x9e\x98\xd7\xf0\xff\x65\x3b\x0c\xef\x88\xdf\xb8\x39\xcb\x26\x73\x99\x48\x2d\xf2\x02\xac\x9f\xc7\x3c\x29\xbc\xae\xce\x8e\xbd\xf8\xaf\xff\x62\xd3\x9c\x3f\x62\x6e\xe6\x5b\x5e\xf0\x8f\xe8\x5f\xfc\xef\xff\x7e\x01\x01\x55\xcc\x52\xca\x78\xfe\xb9\x14\xc5\x5c\x6a\x61\x16\x21\xfb\xff\xe6\x12\x22\xb0\xdb\xdd\xa2\x40\xbf\x2b\xfa\x20\x63\xcd\xfe\x05\xcb\xbc\x40\x5e\xcc\x58\x9b\x92\x3a\xf2\x23\x12\x9e\xb6\x68\x60\x77\xb8\xe8\x3f\xa7\x6f\xe9\xf9\x11\xcb\xfa\x73\x5a\x5d\xd5\x56\xd9\x45\x7f\x4e\xe1\x00\x4d\x15\xb7\xe8\x33\xe6\x26\x2f\xdc\x93\xa9\x72\x6d\x6b\xa4\x01\x0d\x78\xd6\x30\x7d\xfb\x5a\xb9\x41\x6e\x6e\xeb\xb9\x6f\x6c\x23\x10\x2b\xf0\x71\x08\x88\x9e\x27\x66\x85\xdc\xa0\x27\x14\x2c\x37\x6c\x39\xd8\xa4\x14\x3a\x77\xe5\xa1\xe3\x42\xff\xf1\xf5\xe9\xe9\x84\xad\x35\xfc\xcf\xf2\x33\xfc\x0f\xc0\xa1\x9e\x8a\x5e\xb6\xd1\x99\x0e\xd9\xd7\x1c\xe5\xfd\x23\xf1\x14\xb0\xc0\x2f\xc1\x68\x5e\x9b\xa6\x6f\x4a\x19\xa7\xc2\xe7\x74\x56\x42\x22\xa9\xb2\x1a\xfc\xe8\x18\xab\x6b\xc7\xc0\x18\x2f\x45\xc4\xcd\xc6\xd7\xf8\x36\xa2\x65\xd5\xaa\x10\x12\xbd\x61\xb9\x97\x96\xe3\xe8\xb9\x02\xb3\x18\xb0\x9d\xbc\x20\x0c\xbd\x80\x3f\xc2\x47\x80\x22\x7c\x52\xff\x89\xed\x54\x49\x6c\xd7\xc0\xe1\x1a\x8b\x28\x05\x49\x01\xcb\x63\xc3\x72\x51\x94\xb9\x64\x9c\x65\x5c\xc6\x5c\xc3\x0c\x5c\xe5\x10\xed\xcc\x19\x6f\x56\x74\x82\xf8\x62\x55\x16\xc0\xce\x84\xc8\x82\xb0\x27\x90\x8e\x3c\xa8\xf3\x24\xa8\x04\x9e\x09\xc0\x8a\xdc\x78\x71\x3a\x97\x56\xfc\x8c\xc0\x7d\xe8\x29\x8b\x54\xb6\x23\xee\x9d\x7a\xa7\x27\xd6\x73\x46\xdd\x3d\xf1\x78\x93\xfa\xb3\x13\x96\x54\x43\x6b\xc0\x7c\x5e\x04\xf2\xcd\x56\x00\xfb\x3b\x21\x23\x15\x8b\x5c\xbf\x34\xcb\x30\x71\xf7\x0e\xb4\x1f\x12\xed\x07\x03\x76\x29\x73\xb8\x91\xb7\xd0\x14\xef\x24\x82\x4c\xef\x54\xb8\xb2\xdb\xec\x9c\xfd\x4b\xe5\x5b\x47\xc1\xb4\xd5\x97\xfe\xf3\x8b\x22\x62\x42\xa0\xaa\xbd\x73\x1e\xee\x82\xc0\x25\x1b\xee\xb8\x58\x28\xda\x38\x64\x9c\x58\xad\xdc\xa4\x00\x39\xbe\x5c\xe8\x62\x2e\xe9\x04\x9e\xb0\x95\xe0\xc6\xce\x9b\xb0\x48\x3f\xe0\x66\x8c\xc7\x7d\xf1\xa8\x3c\x06\xc7\x0a\xad\x00\xba\xb7\x52\xb8\x77\x12\xe3\x63\x80\x28\xe0\x51\x81\x00\x83\x4e\x59\x75\x6b\xaa\x40\x67\xb5\x6e\x88\x07\xf4\x83\xd5\xed\xa8\x6b\x64\x85\xb2\x31\xd0\x13\x3b\x0c\x14\xb3\x7a\x3d\xf0\x07\xb3\xf1\x60\xeb\x10\x06\x12\x6c\x8e\x60\x71\x13\x6e\x16\xd7\x99\x8f\xe1\x86\xe4\xe9\xe0\x9b\xe9\x5a\x54\x3d\x1d\x01\x15\x38\xcc\x6f\x61\x5e\xdd\xeb\xb0\xd2\x22\xb7\xa2\x22\xd8\x56\xa4\x3a\xdc\x24\x79\x7c\x92\xf1\xbc\xd8\xd9\xe9\x9b\x26\x4b\xd0\x22\x48\x93\x7b\xc1\x66\x79\xae\x1e\x9f\xba\x17\x3a\xb7\x96\xae\x1b\xf6\x31\xd0\xfc\xb1\xb7\xfc\x56\xa2\xd3\xba\xbb\xe3\x30\x52\xd5\x2e\xc7\x47\xeb\x77\x72\x51\xe4\xbb\x85\x99\x88\xdb\xac\x73\xa7\x18\x94\x05\x32\xdc\xc8\x1d\xc7\xd7\x5a\x73\x61\x74\xf2\xb5\x56\x46\xf5\xdb\xe1\x6b\x6d\xa1\x62\x6d\xf2\xb5\x5e\x5c\x5e\xdc\x5e\xcc\xde\x5f\xfc\xdf\x5a\x89\xbf\xce\x2e\x6e\x2f\x2e\xff\xb4\x78\x77\x75\xbd\xb8\x3e\xbf\xb9\xba\xbb\x3e\x3b\xef\x27\x60\x6a\xd6\xde\x9b\xe0\x27\x2c\xfc\xce\x6b\x76\x1b\x00\x35\x30\x7b\x82\xec\x6f\x12\xe3\x84\x59\x65\x16\x73\x22\xd7\x13\x58\xa8\xaf\xd9\x79\x9e\x5f\x6c\xf9\x5a\x7c\x2c\xd3\x14\xe0\x54\x98\xaa\x74\x96\x0b\xb8\x78\x4e\xd8\x47\x15\x5f\x04\xef\x41\x7e\x65\x6b\x33\xe0\xfb\x3c\x8e\x73\xa1\x35\x7e\x7e\x42\xdf\x0f\xc0\x43\x2e\x77\x93\xc0\x73\xfc\x81\x27\xa9\xb9\xbf\xbd\x66\x6f\x78\x74\xaf\x56\x2b\xcc\x07\x9a\xb8\x4c\x30\xf6\xb9\x54\x05\x67\xe2\xb7\x08\x48\xc7\xda\xe7\xc9\x7b\xb5\xfe\x0a\x50\xe5\x01\xe1\xa9\x8e\x4b\x0a\x88\xae\x2d\xda\x8f\xf3\xf6\x8d\x80\x5a\xf9\x01\x5f\x7d\x87\x6f\xb6\x3b\x28\x8b\xf4\x09\xf2\xfd\xdf\xab\x75\xbb\x04\x0e\x58\xd7\xa4\xdb\x43\x81\x84\x88\xd8\x43\xd4\x9a\xe9\x44\xde\xcf\xe5\xaf\x1b\x21\x99\x2a\x73\xfc\x13\x5c\xf3\x8d\x99\x99\x96\x7a\x23\x40\x13\x77\xc2\x1e\x05\xdb\xf2\x1d\x9a\xcd\x70\x27\x70\xba\x1d\x30\x65\xe0\x14\x31\x6f\xa7\x89\x34\xbb\x45\x96\xd8\xbc\x84\xfa\xd0\x3f\xc5\x8d\xcb\x52\xee\xf1\xe3\x19\x71\xfb\xce\xd3\x0a\x3e\x0f\x5c\x65\x1e\x37\x69\x01\x42\xb4\x73\x83\x2c\xa8\x52\xf7\x65\xe6\xc9\x39\x5f\xd8\xe0\x24\x74\xf7\x83\x4a\x62\x16\x97\x59\x9a\x44\x6e\xdf\x7d\x54\x79\x27\x03\x31\x26\xd0\x0c\x3f\x75\xea\x79\x6e\x7d\x0d\x6b\xc9\xce\x09\x90\x74\x3d\x5c\xc4\xcf\xcc\xc6\xcc\x12\x19\xa5\x25\x08\x9e\x95\x5a\xe4\x27\x45\x9e\xac\xd7\x60\x80\xdb\xe4\xc5\x6f\x9f\xae\xd9\xd3\x41\x1e\x9f\xa7\x17\x66\xd1\xa7\x6a\x9d\x44\x3c\x0d\xc1\xcd\x1e\x15\xe1\xf8\x60\xed\xb2\x27\x39\x58\xc8\x83\xb0\x15\xea\xa4\x74\xca\x72\x01\x94\xc4\x0b\xd8\xca\x17\xb4\xdd\x1d\x53\xef\x15\x33\x17\x74\xac\x57\xc8\xd6\x6a\xc3\x0b\xf6\x84\xf3\xdf\xb6\x9a\x60\x60\x62\xa2\x5e\x38\x53\x8f\x52\xe4\x60\xc1\x02\xec\xc3\xb4\x54\x2a\xb0\x4d\x9c\x4e\x98\xc3\x27\x5b\x9d\xbc\x95\x03\x62\x63\x2a\xf0\x3a\x79\x10\xf2\xcb\xd3\x6b\x07\x1f\x88\x78\xb4\x11\x0b\x6b\x97\x3f\xf5\x96\xe5\x0e\x80\x91\x9b\x95\x15\xec\x08\xb7\x52\x17\xde\x84\xab\x13\xd6\xb8\xb9\x77\x61\x20\xb1\x27\x23\xcb\x54\x62\x11\x8b\xe8\xfe\x8b\x6f\xcd\x1e\x64\x65\x2b\xc2\x38\x7b\x2b\xa2\x7b\x76\x77\x7d\x81\xe9\xcd\x49\xc1\xcc\x56\xa0\x37\x5e\x80\xa8\xf3\xee\x56\xf0\xf5\x33\x50\x54\x0d\x55\x50\xf2\xa4\xf9\x4e\x37\xce\x54\x88\x00\x51\x90\x2f\x69\x36\x49\xca\xa5\x01\x20\x18\x2f\xac\xae\x0e\x38\xe2\x99\xde\x82\x8c\x4e\x59\x04\xda\x73\x29\x5f\x8a\xb4\x83\x42\x32\x53\xf1\xc2\xc6\x49\x8e\x05\xf3\x34\xca\xb2\x7e\x0c\x8a\x3a\xda\x3c\x06\x6e\x2c\xd6\x5b\x7a\x90\xdd\xff\xa8\x03\xbe\x10\x15\x32\x59\xc3\xbd\x9e\x6b\xc8\x57\x5f\x25\x6b\x1b\x6d\x4b\x56\x24\xf6\x83\x0c\x05\x20\x6b\x6f\xf6\x4b\x53\xd2\x47\x15\x13\x4c\xcf\xb1\xb2\x19\x2b\x48\x90\xf7\xc4\xe3\x2a\xc2\x2a\x38\xe9\x7f\x0d\xbe\x01\x5d\x08\x1e\x33\xb5\x22\x6f\x62\x96\xa5\x09\x70\x14\xc7\x48\x87\x0e\x74\x20\xba\x8a\x8e\x0f\x4b\xb3\x95\x0d\x58\x4b\x3e\x5a\x20\x5e\x6f\xbc\xd1\x07\xb9\x4c\xbb\xaa\x4e\xee\xba\x4d\x75\xac\xac\x9d\xcb\x47\x3a\xf4\x0a\xdd\xef\x4d\x5b\xa7\x6a\x09\x1d\xd5\x0d\x8a\xeb\xd9\xa0\xcd\xee\x94\x27\xf1\x98\xe3\xdd\xf6\xc9\x95\x7b\xb5\xaf\x82\x57\xd6\xd3\xe1\xbe\x64\x87\x99\x11\x83\x7c\x18\xc1\x1f\x9b\x08\x6d\xba\x56\xbb\x08\xa1\xb3\xc6\x0b\xd2\x4f\x80\x55\xe1\xb6\xe3\x8e\x6b\x75\xb5\x2d\x47\x0d\x74\x93\xe9\x65\x4f\x5f\x7a\x72\x98\xfe\x41\x3e\x82\xae\x03\x57\xae\xe3\xec\xe8\x76\xa4\xc9\x58\xc4\x8b\x03\xda\x70\x4e\xef\x0e\x6b\x8b\xeb\x69\xac\x1e\xb8\xbc\xe4\x89\x39\x19\x63\x9e\xc7\xbe\x1d\x13\xb8\x11\x47\x3c\x03\xaf\x33\x78\xf1\x1f\x5e\x4d\xed\x37\xae\x7d\x32\x8d\xd9\x1e\x30\xc5\x1d\xe1\xca\xaa\x45\x7c\x64\xdf\x3c\x72\x93\x14\xd1\xcc\x66\xe6\xf8\xe9\x5a\x49\x33\x19\x34\x77\xeb\x33\xcc\xee\x57\xc7\x4c\xae\xe7\xd8\x3b\xca\x42\xf9\xe0\x06\xb4\xe7\x02\xf8\x5e\xc3\x04\x36\xd8\x20\x2f\xe2\x0e\x60\x84\xb5\x36\xed\x26\x34\x02\x6e\x3b\x0a\xf0\x9b\xe5\xc2\x86\xc9\x76\xa2\x70\x34\x06\xa9\x15\x74\x83\x28\x90\x6b\x75\x95\x98\xc6\xd2\x32\x38\x32\x31\x88\xd9\x90\x65\x1b\xa9\x6d\xa6\x24\xa0\x70\x30\x29\x6b\x2e\xa9\x70\x2b\xcb\xed\x02\x49\x95\xcc\xbe\x09\xf9\xef\x30\x4f\x44\x68\x95\x3e\x50\xc4\x30\x50\x8f\x00\x41\x3f\x53\xc1\x33\x73\x15\x32\x17\x7f\x08\x65\xd3\x41\x06\xc0\xf7\x9a\x36\x75\x2e\xd6\x89\x2e\x44\x98\x0c\x19\xbe\xff\x64\x32\xa2\x15\x5f\x41\x5f\xd7\x77\xca\x88\xee\x33\xfa\xcd\xfe\x34\xa2\x3e\xbb\x4c\xc4\x17\xee\xbd\xfe\xc9\x50\xcb\x57\xf7\xdb\x61\xe5\xbc\xc3\x39\x80\x97\x1d\x8d\x54\x5d\xda\xe9\x3e\xb8\x41\x22\x12\x25\xee\xf1\x7b\x66\x88\xd6\x25\xcf\xb9\x2c\x84\xd0\x73\x49\x71\x56\xa4\x9c\x0b\x59\x55\x6a\xb8\x3f\x67\xca\x47\x4a\x17\xc8\xe0\x04\xaf\xac\x78\x92\x96\x79\xe7\xed\x1a\x67\xe5\x41\x2c\x0b\x7d\xbd\x74\x06\xc5\xb2\xb6\x41\x73\xf9\xba\xc1\x2a\x72\x24\x21\xf5\x28\x69\x35\x9d\xb5\xa3\x09\xf6\x70\x19\x3e\xde\xce\xb5\xda\x91\xc2\xfb\xa3\x5e\x64\x6a\xc4\x8e\xf7\xf3\x8f\xfa\xa3\xea\x48\x7e\xd6\x9f\x1b\x2e\xc0\x1e\xb4\xc0\xe7\x2e\x25\x0c\xae\xef\x21\xd0\xb6\xcf\xf3\x30\x88\x4d\x73\x6f\x38\xae\x73\xef\x82\x59\xbb\xe1\x32\x4e\xcd\x8d\x9c\x17\xb5\x13\xc8\xc3\x9a\xcd\x0d\xa0\xb0\x9b\x63\x77\x0e\x1b\xa4\x84\x2c\xa2\x46\x3e\xe1\xbe\x7e\xaa\x25\x22\xf6\x42\x07\x6b\x5f\xa9\xa6\x07\xb6\xa5\xa5\x78\x1b\x86\xf4\x67\xdd\x82\xfd\xea\xf6\xcb\x79\x58\xf7\x2f\x64\xbe\x54\xd7\xda\x2a\x59\x7f\x03\xf7\xe6\x0f\xcd\x23\x21\xa2\x3d\x87\x0e\x6a\x07\xe6\x3f\x72\xd7\x81\xbc\x29\xb3\x6b\x87\x04\xda\x73\x49\x3a\xdc\x18\x4c\x87\x28\x2a\xf2\xa5\x69\xf6\xca\x25\xd3\xbe\xfa\x47\xcb\x96\xb5\x63\x2b\x98\x54\x40\x49\xa7\xa2\xa8\xcc\x21\xd2\x4d\xde\x38\x26\xf0\x10\xd6\xa3\x78\x53\xc0\xf4\x70\xf8\x24\xb4\x13\xdb\xcc\x24\xe7\x7e\xad\x34\xea\x16\xbc\x6e\xa8\x28\xee\x0e\x7d\x12\x8a\xca\x75\xc1\x74\x21\xb2\xd6\xed\xb7\x62\x5d\x56\x45\xf3\x8f\xb0\x2f\xbd\x64\xff\xc0\xa5\x33\xe2\x30\x9a\x05\x1e\x92\x3f\xdf\x5c\x5d\xb2\x8c\xef\x00\xea\x07\x64\x59\xe6\x51\x20\x0c\xad\x6f\x54\xfb\x46\xa0\xda\xf8\xea\xae\x82\x7d\x6a\x31\xc3\xed\xee\x78\xfa\x62\xd3\x58\x84\x39\x43\x53\xd2\xec\x59\xb9\x4a\x4f\xb2\x94\xcb\x00\xcd\xad\xa7\xac\xf6\xf9\x30\x7c\xef\x02\x79\x04\x90\x82\x0a\x80\x87\x8c\xe6\x42\x5e\xb6\xe2\x7d\x81\x66\xc6\x4e\xa8\xe3\x22\xf6\x9d\x7b\x44\x2f\x8e\xf1\x03\xca\x6f\xf0\xc8\x2c\x13\x24\x8b\xb0\x28\x04\x07\x64\xe1\x1a\x30\xa6\x9d\x0c\xde\x3c\x4a\xb9\xd6\xbd\xa0\x94\xe7\xa0\xa0\x0f\x93\xf4\xf6\x6f\x5f\xd5\x7a\x22\x6a\x0e\xa8\x3c\xf0\x5e\xea\x7e\x06\x72\x00\xbb\x75\x79\xb5\xad\xc0\xde\x0f\x54\x1f\x28\xd2\x4f\xf4\x48\xf0\x3e\x32\x39\xde\x8b\x9d\x75\xd0\xd1\x56\xc5\xb7\x62\xe2\x7c\x8b\xce\x79\x16\x60\xdc\x9a\x05\xcf\x25\x80\x40\xdf\x85\xd5\x63\xef\x94\x9a\x20\x1c\x91\x3e\xce\xb1\x58\x1e\x02\x7a\xe6\xf2\x9d\x52\x53\xee\x2e\xb1\x54\x7f\xda\x6e\xea\x1f\x24\x10\x10\x40\xec\x6a\xc3\x39\x7c\x6d\xfe\x94\x48\xd4\x85\x4b\xb6\xe6\x02\x45\xfd\x04\x33\x0a\x2a\x64\x65\xc8\xd5\xa3\x66\x31\x32\xa8\x94\x89\xde\x40\x94\x01\xc3\x7a\xf0\x7d\x3a\x52\x10\x7f\x94\x73\xa9\xcd\x1a\x86\xc8\x84\x78\x10\xe4\x9e\xac\x84\xd4\x2f\xde\xbe\x77\x28\x1d\x5c\x97\xa4\x14\xd9\xb1\xda\x82\x4b\xc7\x31\x97\x73\x40\x57\x8f\xe0\x6f\xa3\x3c\xcc\x0f\x3c\xeb\xcb\xfd\x3c\xba\xc4\x7d\xa3\xe4\xf8\xa3\xea\x37\x2a\x90\x90\x06\xf1\xb8\x4a\x02\x68\xd8\x7b\x77\xf2\xc8\x13\xa7\x95\x93\x7e\xbf\xd6\xc9\x60\x07\xc3\xc8\xad\x62\xff\x71\x13\x70\x53\x3a\x84\x9c\xbb\x0b\x9a\x8d\x1d\xa4\xb9\x80\x83\x0e\x97\xf4\x94\xdd\x08\xc1\x3e\x41\x4f\x99\x8f\x7d\x22\xe9\x47\x00\xfd\x16\x3c\x69\x55\xe6\x82\xa7\x2f\xe4\x4a\x1d\xb7\xff\xe7\xeb\x06\xa8\xf4\xa8\x5e\x69\xaf\xe7\xb1\xb0\x55\x48\x48\x96\xcf\xcb\xa2\x31\xe8\x60\xa8\x8d\xf5\x47\xef\x6f\xa2\xdc\x5a\x5b\x53\x63\x92\xc1\x10\x1f\xc2\xd3\x56\x9b\x24\xa6\x95\x13\x24\x53\xbf\x97\xea\x51\xe2\x7e\x4c\x5f\x62\xdf\x99\xf5\x07\x36\x0b\x86\x41\xd0\x12\x2c\x71\x37\x7c\x09\xec\xee\x33\xf7\x6f\x76\x83\x11\x5f\xac\x33\x68\x36\x69\xb0\x77\x49\x6d\x09\x0e\xf0\xef\x66\x13\xf6\x66\xc2\xce\x26\x6c\x3a\x9d\xbe\x9c\xa0\xa0\x3c\xd5\x08\x5f\xc1\xad\xbf\xe0\x6b\x53\x36\xa9\xd8\xac\x82\x0f\x80\x2e\x9b\xb1\x4f\x2c\xe7\x1f\xf7\x4f\x05\x5e\x35\xdb\x04\xcc\x44\xa6\xb4\x29\x42\xc7\x44\x1b\x95\xf8\x4a\x01\xd0\x5a\x44\x2a\xb7\x50\x6d\x5d\xa8\xdc\xc2\x4e\x1f\x78\xce\x13\x09\x04\x0d\xbc\x09\xba\xa7\x2f\x07\x9c\xf3\xe2\x37\xbe\x85\xf6\x27\xd2\xd1\xaa\x9a\x6e\xba\x75\xf5\x2f\x76\x19\x85\x95\x1e\xf3\xa4\x28\x8c\x41\xa6\xe7\xf2\x86\xbd\xfe\x17\x36\xcb\xb2\x54\xb0\x19\xfb\x1b\x7b\xc3\x25\x97\x9c\xbd\x61\x7f\x63\x67\x5c\x16\x3c\x55\x65\x26\xd8\x19\xfb\x9b\xe9\x36\x53\xde\xa5\x32\x16\xd0\x6e\xc2\x38\x93\x65\x8a\x86\xde\x77\x16\xd2\xf9\xd2\xb5\x8b\xfb\xd1\x59\x8a\xe2\x51\x08\xc9\xb4\xda\xd2\x51\xf8\x57\x77\xfa\xeb\x44\xae\x53\x51\xd0\x7c\xa8\x82\x6f\xf1\x03\x27\xd0\xd2\xd7\x73\xe9\xfc\xd4\x7f\x35\x35\xfe\x2b\xfb\x1b\xbb\x2c\xd3\xd4\x54\xc9\x6c\x34\x66\x22\xbd\x66\x36\x19\x4a\xc8\xe9\x63\x72\x9f\x64\x22\x4e\x38\xa4\x43\x99\x7f\x9d\xde\xc2\x68\x2f\x4a\xcf\x7c\x19\xae\x69\xa7\x83\x75\xcc\xd6\xf3\x2c\xd4\x0a\x4e\xa5\x2d\xb4\x56\x3a\x31\x17\xe1\xab\xe3\x8d\x60\xcf\xed\x4b\xeb\x81\xee\x28\xa8\x61\x16\xaa\xc1\x1d\xb4\x05\xd4\x0e\x5b\x5b\x56\xcb\x51\x10\x1e\xea\xc7\x6e\xb2\x20\x6d\xf8\x05\xcd\xf1\x5f\x1a\x5d\x34\x98\x3b\x9f\xe4\x9b\x2a\x64\x15\x60\x4b\x7a\xc2\xae\x41\xb1\x5d\x27\x04\xf5\x4b\x55\xdb\xb1\xd2\xc5\x2a\x19\x24\x82\x59\xab\xec\x9d\xa3\x7a\x96\x0a\x70\x10\x32\x49\x4f\xcd\x52\x3d\xbd\x54\x52\x30\xae\x75\xb2\x46\x92\x31\x70\xe8\xa0\x7a\xa4\x35\x0a\x6e\xab\x26\x6b\xb0\x04\xc0\x3e\x30\x55\x42\x80\x6a\x61\x76\x01\x33\x04\xe9\x6e\x2e\xcd\x1b\x74\x22\x41\xb2\x4a\xe2\x78\xa7\xf1\x6b\x44\xf5\x6c\xbf\x45\x1b\x72\x50\x78\xcb\x04\xeb\xcb\x84\x3f\x62\xc2\x51\xe2\xe5\x11\x11\x9f\xcb\x80\x87\x91\x4a\xb3\x24\x3d\x88\x5e\x58\x8a\x54\xc9\xb5\x99\x15\x5d\x9b\x80\xda\xf2\x6e\x06\xf0\x91\x55\xc0\xc2\x3a\x6b\x60\x0e\x4b\x7a\x84\x86\xc4\x9c\x93\x49\xec\x5d\x3a\xba\x5c\x1a\x3b\xc2\x45\x1b\xdc\x69\x48\x8d\xeb\xa2\x05\x38\x0e\x25\x72\xa7\x45\x0e\xec\xef\x88\x53\x72\x91\x2c\x3c\x38\x3d\x65\x0e\xb6\x68\xd8\xa2\xea\x85\xb7\xb7\x7b\xbf\x28\x52\xd6\x20\x48\x18\x30\x1f\xbf\x26\xd2\x7d\x08\xfe\xfd\xdd\xec\xe2\x7d\xed\xb9\x26\xfe\xbd\x05\x24\x7f\x7b\xf1\xe1\xfc\xed\xe2\xea\xee\xb6\xf1\x9c\x29\x8d\xfe\xb4\x07\x02\xdf\xd9\x7b\x4f\x01\x02\xfe\x8c\x2a\x54\x0b\xb5\xb2\xf9\xd0\xc3\xcf\xf4\x86\x0e\xd8\x30\xac\x59\xc8\xfd\x1f\xea\x65\x35\x27\x4e\x27\xab\x83\x5c\x50\xb4\x6d\x58\x65\xeb\x1d\x76\x25\xdf\xe1\xeb\x1f\x55\x9a\x44\xfd\xd0\x55\x7b\x5c\x6d\xd4\x63\x0b\x16\x70\x29\x00\xcb\x4d\x2e\x3f\xaa\x14\x5a\xe8\x85\x88\x0a\x1f\x4d\x6e\x36\xee\x7f\x35\x5c\x6e\xff\x1d\x1c\x3d\x71\xae\xdb\x40\x17\xd8\xc5\xa7\xe1\x6c\x05\x9a\x5c\x90\xbb\x40\xf7\x3a\xf8\xf6\x00\xb7\x11\x71\x8a\x3a\x54\x7a\x1e\x36\xe8\xc7\x8d\x4a\xc9\x23\x87\x94\xc3\x73\x99\x89\x3c\x52\x00\x33\x43\x36\x0b\xc5\xa2\x4d\x92\xc6\x5e\x53\xea\x3b\xc0\xe5\x03\x7a\xf6\x25\xa9\x85\x0a\x87\x9f\xb0\xc5\xf7\x9c\xba\x76\xda\xbd\xc5\xd5\x7d\x14\xf6\xe8\x29\x81\xb6\x7d\xd3\xfe\x57\x02\x84\x62\x57\x10\x49\x58\x2d\x12\x6e\x3a\xbd\x52\x9f\x51\x4e\x7d\x73\xdc\x92\x5c\x50\xe4\x2f\x4e\x45\x6d\x5c\x69\x9a\xd5\xbb\x12\xa8\xa3\xd1\x93\x8a\x30\x30\x2d\xa0\x3a\x5b\xc1\xd1\x16\xf3\x44\xae\x34\xa8\x73\xe9\x63\xff\x2f\x74\x68\x97\xb5\x8e\x33\xfa\x5f\x2d\x94\x77\xc2\x5e\x54\x1a\xfa\x02\xa8\x85\xa5\x82\xef\x51\x7c\xb6\xd2\x35\x30\x5d\x27\x2c\x29\xe6\x32\xd1\x38\x33\x73\x91\x8a\x07\x53\xbb\x30\x3e\x40\x88\x35\x7b\x77\xb6\xcd\x86\x6c\x10\x6e\x49\x04\x68\xda\xd0\x22\xcc\x43\x8a\x5a\x0c\x4c\xc6\x42\x1b\xbb\x11\xd4\x82\xc4\x6f\x66\x01\x24\x10\xfe\x42\x68\x53\x2c\xa4\xad\x1f\x20\x9e\x50\x62\x7b\x2e\x2f\x56\x90\xc9\x0d\xf9\xe3\x71\x8c\xb7\x50\xab\x1f\xe3\xf8\x02\x13\x8a\x07\x28\xba\x93\xdb\x81\x20\xb1\x5b\x5c\x49\xe2\x41\xe4\xbb\x02\x9c\xba\xd0\xaf\x52\xf0\x62\xc3\x92\x62\x02\x44\x8f\x76\xa7\x9c\x4b\x1e\xc7\x94\x00\x8b\xc5\x99\xae\x81\x79\xdf\x33\xce\xf4\xfb\x52\x3d\xf4\x19\xb6\xc7\x62\x37\x71\x55\x67\x29\x97\x0b\x3c\x41\xbe\x02\x7a\x33\xd0\x21\xee\x0a\xe3\x97\xcb\x85\x23\xa7\x7a\x92\x7a\x06\x52\xf5\xa1\x3a\xb8\xb1\x63\xed\x87\x26\x38\x19\x3c\x39\xbd\xbd\x9e\x38\x3f\x0d\x21\x67\x72\x66\xd1\x05\xc3\x77\x01\x0f\xec\xe4\x35\x94\x8d\x9d\xad\xfb\x90\x9d\x76\x06\x7c\xab\xd8\xbb\x21\x23\x5f\x3b\x43\xea\xc3\x3e\x1e\xf6\xd5\xb0\x10\x0f\x82\x7e\xed\xa9\xd6\xf3\xc2\xbf\x3a\xfd\x28\x4d\x18\x98\x6d\x6d\x10\xe1\xc5\x14\x28\x81\x7e\x38\xe7\xe6\x69\xd7\x99\x0e\xef\x61\xaa\x05\x21\xfd\x94\x3e\x6a\xd8\xa7\x86\x7a\x4a\x3c\x83\x02\xd4\x6b\xca\x2e\x24\xb3\xe6\xde\x84\xbd\xc0\x89\xa5\x5f\x90\x0b\x92\xc4\xca\x09\x2e\x11\xd3\xea\xa1\x9c\xf3\x3a\xcc\x08\x33\x7f\xfc\x72\xc3\x48\x50\x2f\x41\xe9\xb3\xf6\xcb\x9b\x04\x32\x8f\x0e\x21\x97\xc0\x28\xe2\x12\x0b\xa0\x43\x12\xaf\xdd\x3b\x34\xda\x95\xf7\x66\xfb\x06\xdb\x78\x17\x7b\x63\x5f\x34\x5d\x94\x95\x74\x9e\xda\xdf\x99\xca\xe7\xd2\x96\x46\x2e\x49\x8d\x12\x6f\xf5\xa2\x82\x44\x08\xb2\xf9\x83\x99\x0a\xc1\x60\xab\xea\x07\x62\x91\x9e\x45\xb9\xbe\x0b\x00\x0e\x66\xe9\x30\x88\x40\xbb\xef\xbf\x66\x0c\x0f\x33\xc1\xb7\x78\xcc\xd7\x99\x56\xd3\xd4\x74\x4a\x52\x58\x62\xd7\x20\x49\x49\x97\x40\x4f\xbc\x2a\xcd\x66\x14\x70\x38\xcf\xa5\xe9\x3c\xb6\x4a\x00\xbd\x4f\xfd\x32\x97\x1f\x94\xb6\x9c\x18\xda\xf7\x87\x0d\x2d\x53\xb7\xbd\x70\xe2\x86\xf4\x87\xb7\x70\x68\x93\xcf\x1f\xd9\xad\xdc\xd1\x02\xd9\x69\x44\x6c\xb3\x53\x65\xee\x1b\x15\x71\x39\x97\xff\x61\xba\x07\x05\xf6\xa5\x1d\x56\xb5\xc2\x25\x0c\x23\x08\xc1\x92\x4f\x58\xe8\x77\xff\xf8\xf2\xd3\x4b\xcc\x26\x29\x35\xe8\xc9\x4e\xaa\x07\x88\xa3\xf3\x2f\xd3\x14\x22\xd1\xb6\x05\x8e\x52\xc6\x7f\xa2\x17\x89\x45\x97\xba\x85\xac\x9a\x18\x43\x16\x7a\xdf\x0c\xf6\xce\xe7\x19\x8b\x78\x11\x6d\x4e\xac\x2d\x47\xdb\x98\x3d\xfd\x68\xf8\x50\x58\xd2\x58\x5a\xed\x8c\xf6\xe6\xc2\x99\x6f\x1d\xc7\x66\x65\xbe\x98\x26\x00\x96\xea\xb6\x2e\xef\xe4\x28\x80\x71\x72\x22\x12\xa4\x6a\xe7\xb9\xc7\xad\x5a\xa4\xbf\x71\x92\x97\x5c\xf2\xad\x88\xd9\x0b\xc8\x7b\x7c\x61\x07\x7f\x2e\xb3\xe5\x34\xdd\xad\x0a\x22\x6a\x33\x9d\x32\x05\x19\xb2\x3d\xa7\xdc\x22\x6e\x5e\x93\xf6\x74\x76\xe7\x45\xab\xdd\xd6\x71\x7d\xe3\xbe\x34\xdc\x60\x41\x1f\x97\xeb\x9d\x9b\x2a\x2a\xac\xaa\x87\xc0\xf5\xfd\x84\x2d\x73\x2e\x41\x41\x26\x0e\x8d\x2a\xbf\x3a\xe1\xf2\x8c\x2c\x68\x36\x11\x4a\xf2\x74\x07\x19\x20\x93\xb9\x44\xca\x38\xe0\x16\xdf\x45\x69\x12\xb1\x75\xce\xb3\x4d\xcd\x0e\x12\x0f\x42\x16\xa0\xac\x7c\x2d\xb8\x3e\x2e\x5a\x9f\xd7\x4b\x60\x83\xe3\x29\x33\x09\xb7\x0f\x2e\x6b\x24\xbf\x50\xbd\x8e\xa3\x05\x10\x7a\x22\x5e\x8c\x23\xf8\xd9\x4b\x43\x5b\x21\x37\x24\xa6\x2d\x88\x40\x9a\xc6\x31\xfb\xd5\x7d\xe1\x6f\xec\x57\xe2\x9e\xb1\x98\xce\x63\x43\xf6\x8e\xcb\xe6\x28\x46\xd2\x8b\xaa\x15\xc9\x3d\x49\x8f\xf7\x5c\x63\x1a\x1f\x79\x2a\x2c\x10\xde\x6d\x1c\x13\x12\x8a\x04\xb6\x42\xf6\x97\x72\xa9\x52\x4b\xf7\x78\xf1\x96\xa9\x1c\x94\x56\x0a\x45\x7f\x4a\xe2\x2e\xeb\x20\x91\xb1\xf8\xed\x28\xce\x95\xfe\x83\xde\x9a\xcd\xe6\x33\x81\xa0\x47\xbd\xb1\xb0\x3b\xe5\xc2\x1c\xc2\x85\xbd\x19\x37\x9e\xd2\x75\xb0\xea\x2c\x2d\x36\x80\x20\xc5\x24\x0d\xdf\xa9\x5b\xbe\x63\xd1\x86\xcb\x75\xe0\x9a\x00\x40\x9f\xc8\x54\x8e\x12\xab\x0f\x40\x6e\xa8\x72\x9b\xd3\x4e\x99\xda\x94\x29\xe2\x02\x09\x08\xd0\x56\x36\x1d\x9b\xaf\xd7\xb9\x58\x03\xcd\xc8\x5c\x56\xb8\x26\x80\xd8\xd1\x8a\xa1\xe0\x77\xfa\x52\xf5\x9f\x86\xef\xa6\xeb\x36\x58\xe4\x3b\x97\xe8\x4c\xfa\xc4\x7e\x3d\xd7\xbb\x75\xc2\x12\x31\x9d\xb0\x1f\x3c\x28\x5d\x44\x4a\xba\x4c\xe9\x8e\x34\xd9\x9a\xcb\x9f\xed\xb9\x3a\x34\x89\x71\xda\xeb\x0e\xbf\x35\x54\x8e\x5b\x27\x4d\x6f\xaa\x79\xc1\x8b\x72\xc4\x19\x44\x4a\xf6\x67\xe6\xe5\x1b\x7c\xb7\x6f\x5e\x9f\x21\x62\xdc\x92\x92\x99\xe7\xcd\xc9\x69\xbe\xed\x49\xcb\xdb\xfa\x7a\xaf\x03\x39\x55\xdd\x0e\xe4\xa7\x30\xd5\x2d\xf3\xcc\x7e\x1f\x72\xda\xc1\xa6\xd2\xd3\xa6\xb1\x2e\x62\x8b\xeb\xa6\xd4\x14\x5d\xbf\xc6\xb6\xec\x00\x59\xae\xe2\x32\x12\xb1\x59\xb9\x70\x1f\x42\x44\x8c\x23\x75\xa9\x6c\x92\x6d\x07\x6d\x85\x99\x0a\x4e\xdd\x2f\xe5\x73\x18\x44\x06\xee\xba\xff\xae\xc3\xdf\x60\x2d\xbe\xb6\x4e\x0f\xd7\x27\xf6\x53\x3e\xf2\x9c\x72\x9f\xaf\x52\x78\xab\x3c\x59\x27\x92\x17\x2a\x67\xdf\xb9\xd4\xed\x97\x4e\xf7\xab\xdb\x42\x18\xb9\x4d\x54\xba\x08\xb7\x89\x2f\x6a\x78\xb4\x4d\x52\xf3\x94\x2e\xf8\x36\x0b\x49\x71\x9d\x4c\x3c\xf5\x4c\x8a\x9d\xe0\x6c\x13\xf0\x9d\x26\xda\xe7\x6d\xce\x25\x45\x1c\x70\xdc\x54\x1e\xb2\xba\x77\x9e\xcd\x59\x59\x2c\x0e\x24\x7a\xc2\x97\xc7\x39\x9e\x08\x86\xf0\x81\x67\xfd\xd4\x39\x9c\x5c\x0e\x98\xb8\xe6\xb4\xf3\xad\xa5\x52\x9d\x9f\xfd\xba\x29\x23\xa9\x7c\xeb\xa1\xf3\xeb\xf7\x36\x50\xe4\xef\x83\x95\x0b\x16\x0c\x04\x72\x88\x62\x22\x10\x5e\xed\xdd\xb6\x66\x4e\x71\xcb\xb7\x73\x96\xaa\x32\x66\xb4\xa9\x51\x18\x3e\x9f\xe2\xe9\x08\xa4\xbe\xd3\x69\x57\x62\xd3\x48\x3d\x67\xb7\xff\xc0\x7b\xed\x2b\x10\x7e\xeb\xd8\x81\x7b\x97\x3e\xf5\xec\xb3\x0d\x3d\xf5\x34\x8c\xbd\xdb\x8e\x47\x8d\xbd\xf3\x82\x03\xc3\xe0\x38\x07\x29\xdc\x47\x93\x38\x85\xf5\x16\x06\x10\x5a\x38\x90\x2b\x81\x59\x7d\x7f\xf4\xe7\x2c\x0f\x41\xff\xa7\x32\x9e\x0b\x59\x2c\xe0\x8b\xe3\x3e\x06\x1f\xf9\x08\xaf\x57\x0c\xa6\x41\x8e\xe0\x7f\xbb\x55\xe8\xdf\xb7\x74\x42\xff\xce\x6e\xc8\xa7\x65\xf6\xab\x04\x40\xa4\xfa\x9e\x7d\x97\x00\xe6\x28\x88\x85\xba\x81\xeb\x18\x2e\x6a\xd0\x01\xbd\x17\x34\xa8\xb2\xb5\x0f\x6a\x90\xaf\x3d\x84\xaa\xa1\x14\x72\xef\x51\x56\xb8\xd9\x6a\xed\xdf\x02\x89\x81\xcb\xca\xbf\x81\x0e\xd6\x8c\x5f\xca\xfe\x53\xe4\xca\x67\x00\xa1\xb3\x2a\x2c\xb8\xd7\x5e\x3f\x5c\x1d\x19\xed\x71\xd4\xe5\x0d\x85\x29\xe1\x2f\xc4\xd8\x84\x1e\x85\xe5\xce\x5e\x47\x3a\x42\x48\x99\x88\x16\x1d\x2a\x24\x83\xaa\x12\x5c\x3c\x43\x55\x91\xa4\x76\x98\xd9\x05\x7a\x0a\xfe\x0a\x4a\xad\xd9\xf2\x8c\xf0\x7d\x04\x25\xae\x07\x6f\xa6\xd0\x88\x7f\xfb\xeb\xbf\x4f\xbb\x74\xef\xa1\xea\x63\xe1\x52\xae\xf2\xef\xf2\x44\xc8\x18\x82\xb1\x3c\x6e\x0a\x64\xc9\x8a\x77\xbe\xb2\x3d\x9b\x69\xf8\x24\x19\xc1\xed\x47\xad\x5e\xe0\x24\xfa\x02\x11\x7d\xbf\xc9\xba\xe5\x5b\x89\xf7\x75\x99\x12\x7a\x11\xef\x24\xdf\x26\xd1\x17\xad\xe3\x2e\x11\x69\x0c\x55\xa4\xaf\xef\x8b\x4a\xc5\x22\xba\x1f\x6b\x13\x1c\x4c\xef\x2f\xa2\x7b\xf6\xd3\xed\x87\xf7\xa8\xe6\x9a\xe8\xb9\xbc\xe4\x45\xf2\x20\xee\xf2\xd4\x85\x03\x88\xaf\x29\x4f\xed\x1a\xa9\xd2\x4d\x07\xd4\x46\x96\x9b\xda\x1a\x0e\xa1\x1a\xc0\x76\x77\xb2\x2c\xa3\x7b\x51\x9c\xe6\x5c\xc6\x6a\x8b\xcd\x38\xd5\xe5\x6a\x95\xfc\x36\x2d\x78\xde\x21\x0d\x80\x7e\x84\xaf\x68\xe7\x7a\xc1\xa7\xc2\xdb\xbc\x68\xea\x3e\x42\xa2\x2f\xc9\x88\x57\x8c\x5b\xcc\x4b\xe3\x5b\x01\xdc\x8e\xac\x2a\xab\x01\xa5\x60\xee\x2c\xa8\x4f\x6a\x4d\x08\x7a\x45\xda\xd6\x9f\x02\xe3\xfe\x53\x50\xab\xaa\xbe\xba\xad\x94\x57\x74\xdc\xf2\x7b\xbc\x1f\xae\x73\xa1\xf5\x84\x69\x05\x35\x9e\x4b\x8b\x45\xb7\xf9\x52\x80\x7b\x01\x76\xd8\x74\xc7\x22\x95\x25\x20\x80\xe9\xda\xb5\x51\x8f\xe0\xa7\x0f\x33\x45\x41\xb3\xb8\x94\x45\x92\x32\xbe\x2a\xc8\x89\x0f\x54\xf8\x56\xfa\x4a\x4f\xe7\x12\x42\xb1\x11\x34\x1f\x20\x12\x2e\xfc\xe2\x1a\xa1\xd9\x8a\x47\x49\x9a\x14\x44\xd0\x05\x49\x46\xdc\xb4\xd7\x9c\x07\xa6\x2f\x73\xbe\xe3\xa9\xbf\x58\xf1\xb4\xf4\xc9\xb1\x27\x5a\xf4\x10\x40\x26\x7a\x81\x0e\x82\x2f\xc1\x38\x97\x84\xc1\x07\x24\xcb\x9e\x99\x8f\x5f\xd6\x4e\xd1\x3f\x84\xff\x5b\xb9\x87\xf7\x59\x05\x47\x5c\xc8\x8f\x39\x1c\x9b\x57\x6e\xa7\x17\xed\xed\x8c\x24\xb6\xf8\xe0\x8a\x29\xee\xd3\x4f\xdd\xf1\x08\x31\x93\x8e\x4b\xff\xd4\xaa\x7c\x35\xbf\x30\xa2\xf7\xda\x8d\xc4\x2f\xe4\xce\xe8\x62\x30\x1f\x52\x7d\xeb\x8d\xff\xa8\x54\x7a\xac\x47\x9e\x48\x19\x12\x25\x17\x20\x7c\x7b\xcc\x75\x12\x27\x80\x73\x6c\x5d\xbc\x75\x31\x77\x47\x09\x5e\x95\xcb\x22\x38\x18\x55\x01\x36\x32\xa8\x44\x0f\x52\x5c\x67\x2d\xa0\x8b\x91\x88\x77\x28\x03\xd1\x5a\xd6\xb4\x6f\x86\x08\x02\x7e\x0e\xee\xeb\x08\xb4\xa9\xb5\x1a\x8e\x72\xd6\xa1\x4c\x6d\xed\x53\xce\x71\x17\xd2\x2b\xbb\x7e\x0c\xbe\x6d\xfb\x13\xc5\xf1\xcd\xf9\x49\x56\xfc\x5c\x06\x16\x3b\x72\xa2\xd9\x94\x02\xd7\x6b\x6d\xfe\xbc\xca\x34\x3c\xda\x9f\x77\x0c\x87\x7e\xef\xce\xf9\x36\x54\xc3\x03\x2c\x48\xa4\xb6\xcb\x44\x5a\x56\x02\x72\x72\xc3\x55\x63\x66\x29\x4a\x5d\x40\xc2\x5e\x19\x50\x23\xa5\xd6\xf7\xce\xcc\x09\xd9\x5e\xc3\x2d\x6b\xdf\x75\x3c\xbc\xdf\x3d\x2d\xdd\x7f\x47\xa4\xb1\xde\x02\x73\x80\xa4\x8f\x7c\xa7\x41\x31\x5a\x98\x5d\x71\x85\x8e\xdd\x6a\xfd\x27\x81\xf9\x61\xe9\x6f\xe7\x12\x7a\xa8\x24\x21\x79\x6a\x4b\x42\x0c\x00\xa9\xd5\xc6\xf6\x5c\x5f\x2f\x74\x7b\xe7\x7c\x9d\x58\x4d\xde\x1b\xab\xc1\x20\xf4\xff\x8c\xf0\x4c\x8f\x13\xf8\x48\x5f\x74\x70\x4c\xa2\xc5\x48\x30\x21\x48\xdc\x72\x21\xea\x09\xdb\xf2\x44\xd2\x32\x40\xfd\xc1\x58\x2c\xcb\xf5\xba\xd3\x45\xfa\xed\xc7\x5a\xaa\xeb\xe4\xef\xde\x17\xde\xcb\x56\xf7\x14\xde\xe2\x0b\xfb\x25\x74\x5f\x9b\x7b\xdf\x97\x71\x10\x7f\x45\x6f\x7c\x6b\x48\xac\x31\x89\x9e\xc6\x1b\x7f\x31\xc4\x1b\x6f\xb1\x5d\x90\x62\x47\xd7\x69\x8b\xbf\xf9\xdd\x4d\xff\x65\xdc\xf4\x83\x26\x05\xd2\xba\x2c\x92\xaa\x81\xde\x53\xc3\x03\x99\x0f\x1d\x19\x30\xd4\x0a\xd9\xc5\xcc\xee\x1e\x6b\xb6\xe4\xd1\x33\x50\x21\xc2\xe9\x78\xbc\x3f\x70\x0f\xf8\xe5\x46\x6d\x05\x83\x4f\x69\x54\xae\x61\x94\xc5\x38\x01\xb4\xaa\x69\xa0\x47\x8c\x10\x1e\x05\x8e\x53\x44\xae\xc4\xde\xa8\xfe\x4e\x8a\x47\x66\x4e\xab\x49\x08\xdf\x0b\x86\x07\x24\xcd\x5e\x1a\xeb\xb0\x82\xf5\x77\x94\x0d\xb9\x58\xf3\x3c\x86\x0c\x13\x5a\x92\x29\x8f\xee\xcd\x7f\x43\xfd\xe8\x8b\x04\x31\xb4\xea\x0a\x08\x7b\xf5\xa5\x25\x32\x42\x32\x3c\x42\x33\xfa\xfa\xe1\xeb\x9a\xf1\x28\x57\x1a\x9d\x46\x4e\x09\x18\x32\x9c\xc1\x80\x7d\x48\xe2\x92\xa7\xf8\xc5\x4e\x4f\xfb\x58\xf8\x5a\x1d\x70\x14\x88\x76\x35\xd1\x6c\x34\x1c\xc8\x51\x04\xdd\x38\x9d\xcb\xb7\x2e\x60\xf2\x9a\xdd\x69\x41\x28\x33\x6d\x69\xcf\x7b\x6b\xfa\x6c\xe6\x43\x03\x13\xd8\x69\x43\xf4\x74\x80\x05\x59\x07\x1d\xa1\xbb\x7b\x62\x0f\xa1\xe6\x31\x83\x32\x9a\x18\xf8\x22\x50\x0e\xf7\xdd\x82\xf7\x84\x5c\xf0\x78\x17\xb2\xf1\x25\x92\x41\x94\x8e\xf1\x78\x9b\x48\xb3\x08\xac\x3a\xa5\x3b\x69\x2c\x51\x3d\x42\x8e\x41\xc4\x29\x4d\x6b\x9b\xa0\x66\x52\x18\xe3\x92\xe7\x49\xba\x83\xfb\x44\x96\x8b\x93\xe0\x3b\xc1\xf8\x50\xc6\x13\x50\xee\x13\x8d\x48\xa9\xc5\xaa\x4c\xf1\xd6\x01\xf7\x72\xd7\x00\xda\x91\xee\x2e\x26\xc6\xe0\x28\x48\x3a\x25\xf8\x30\x0a\x12\x3e\x45\xf6\x48\x23\x5a\x39\x2e\xe2\xe6\xd9\x22\x73\x00\xb9\x6f\xd4\xa3\x4d\x75\x7b\xe4\x1e\xcb\xdc\x75\xba\x3e\x59\x94\xa5\xdf\x0e\xb5\x37\x40\xbb\x4f\x05\x94\x6f\x2e\xb4\x46\xbf\x89\xd8\xed\x4d\x89\x84\xe6\x90\xa6\xaf\xf7\x5c\x97\x1a\x33\xe6\xcc\x58\xc2\xf9\x65\x1d\x1d\x55\xc7\x35\x73\xad\x4b\xb4\x92\x6c\x5e\x7e\xff\xfd\x1f\x05\xfb\x1e\x52\x08\xe9\x3e\x82\xf1\x31\xe0\x8b\xc4\xd2\x61\xcb\x76\x1f\x10\x48\x26\xd9\x18\x11\xd6\x06\x51\xb5\xf9\xfa\x00\xf2\xe4\xd1\x86\xe9\x72\x89\x08\x46\x4e\x21\x16\x2e\x1d\xef\xf4\x7b\x05\x60\x44\x3c\xd9\x6d\xed\xff\x97\x04\x14\x50\xe5\x62\x2e\x33\x85\xd4\xe8\x00\xfd\x5c\x0a\xb6\xe5\xf9\x3d\x88\x96\xa2\x7b\x1e\xa8\xe0\xbf\x4b\xc4\xb4\x1a\x5e\x78\x59\xa9\x0f\x05\x74\x90\xf2\x98\xe5\xa5\x94\x56\x85\x89\x19\xc3\xd4\xfb\xfa\x27\x73\xb9\x2c\xc3\xbb\x67\x25\x58\xe0\xa7\x16\x04\x0c\x60\xb3\x55\xc0\x15\x42\x95\xe2\xda\xd7\x6b\xca\x06\x44\x0d\xe6\xf2\x89\xc3\x06\xfb\x1c\x7e\x1f\xc9\x06\xb3\xce\xbc\x20\x5f\x01\x9a\x1b\x0a\x05\xc3\x70\xe0\xb4\x07\x23\xe7\x23\xa8\x05\x4f\xd8\x4f\xc9\x83\x98\xb0\x9b\x8c\xe7\xf7\x13\xf6\x16\xc3\x7f\x7f\x56\xcb\x36\x1f\x5e\x83\x50\xe2\x68\x3f\xde\x61\x6e\xac\x3e\xa2\x95\x76\xeb\xff\xd7\x06\x31\x00\xeb\x8a\x7d\xff\xcf\x44\xe4\x75\x70\x7d\xfc\xbd\x7b\x22\xf6\x84\xa9\x7f\x07\xaf\xfd\x5d\xde\x8a\xfb\x69\x3e\xfe\x10\xfe\xaf\xdd\xbf\xac\xc5\x05\xb6\x27\xed\x72\xad\xa8\xb4\x6f\x2b\xb1\x39\x89\xeb\x87\x72\x33\xbf\x79\xd8\x52\xa0\xf4\xf1\xd8\xa5\xb6\x8f\x00\xdd\xd3\xab\xb6\xbf\xce\x52\xa5\xcb\xbc\x7f\xf1\x5f\x57\x6b\x6d\xbf\xde\x42\xf5\x09\x93\x6d\xbb\x14\xc0\x5a\x30\x14\x7e\x82\x8f\x2d\xfe\x43\x2d\x17\x80\xb5\x3a\x6e\x85\xb7\x15\xe7\x08\x84\x55\x54\xa9\xaa\x3f\x21\x6f\x32\x01\x8c\x53\xde\x14\xf5\x01\x81\xda\x0c\x73\xae\x91\xb9\xb4\x9c\xeb\x98\x31\x9b\xe7\x02\xc8\xa1\x73\x01\xca\x76\x2c\xe3\xb9\x03\x3c\x58\x8b\x28\xb8\xf9\x78\x50\x4c\x98\xe5\x06\xc9\xaa\x74\xdf\x5a\x0a\x21\x5d\x6f\x8f\x31\x25\x80\x08\xb9\xd6\xfb\x84\x76\x7b\x14\x96\x7a\xbf\x43\x85\xb3\xf1\x5e\x70\x17\x04\x93\x7b\x2d\x8a\x60\x37\xaf\x99\x16\x95\xa5\x59\x89\x50\x7d\x53\x88\xff\xd6\x18\x74\x8d\x9c\xab\xe2\x40\x19\x14\xd3\x7b\x0a\x7f\xf9\x47\x5e\x6c\xf0\x42\xbb\x55\x85\xc0\x3d\x13\x59\x82\x70\xbe\xa0\xd7\x79\x99\xaa\x25\x48\xca\x99\x5f\xba\xee\x86\x11\x2d\xed\x41\x5d\xd7\x1c\xb0\x21\x3b\x83\xd9\x4d\x20\xd3\x36\x17\x1a\x08\x57\x9a\x51\xaa\xa1\xf8\xe4\x71\x97\xee\x66\x75\xcd\xa6\xff\xb6\x71\xd9\x6e\x8a\x32\x98\x65\x0d\x60\xd5\xf3\x03\x32\x68\x1a\x12\x17\x44\x56\x4c\x61\x60\xe4\x2b\xad\xb5\xd7\x2a\x97\xcf\xe5\x0c\x7f\x09\x0e\x01\xee\x55\x96\x1c\x1e\x94\x44\x6a\xdd\xfa\xc3\xf4\x55\x36\x0b\x11\x88\xe4\x21\x98\x78\x5f\x26\x5c\x06\x26\x90\xd5\x28\x8b\x24\x17\x4c\x02\x0a\x61\x2e\x75\xb9\x3c\xf1\xc4\x24\xe6\x16\xf7\x00\x64\x3a\x5a\x64\x1c\xae\x32\xc0\x57\x74\xd2\x72\x0c\xa3\x67\xd2\xab\xa5\x58\x02\x3f\x9e\xd2\xe6\x0f\xb9\x92\x98\x19\xef\xda\xee\xca\x31\x97\x35\xb8\x45\x5b\xb8\x12\x1e\x76\x7d\xfb\x05\xe8\x39\x41\x06\xe6\x35\xa2\x28\xbe\xf6\x01\x1e\x46\x43\x87\x1e\xdd\x10\x4f\x9b\xcb\xff\xdf\x9e\x0d\xdd\xa0\xe2\x11\x33\xdd\xf4\x8c\x39\xa2\x3a\xc1\xce\x95\xba\xd9\x2b\x64\x60\x04\x76\x57\xaa\x31\xe5\xdb\x4a\xe5\x16\xd7\x12\x8a\x7a\x28\x4a\x97\x85\x5f\x1f\x12\x1d\xd0\x7d\xc3\xd7\x6e\x84\x60\xaf\x73\xb1\x7a\xfd\x29\x17\xab\x85\x1d\xe9\x29\x34\x68\x6a\x5a\xd4\x24\xfd\x1e\x38\x39\x74\xa6\x64\x3b\xf9\xe1\x1e\x72\xd2\x5a\x93\xb0\x9c\xa0\x4d\xc9\x8a\x79\x39\x4f\xd3\x1e\x60\x80\x10\x71\x9d\x8d\xbc\x51\xb3\x2f\x7e\xcc\x75\x21\xc1\x06\x40\xad\x3a\x64\x30\xff\xfe\x8f\xb7\x4a\x9f\x0d\x39\xde\x6e\xab\x90\x19\xbb\xd9\x73\xe9\x0e\xbc\x6e\x5c\xe8\x97\x45\xa7\xc3\x00\xea\x8c\x3f\x4a\xe2\xb1\x19\xe5\x7a\x1a\x76\xac\xd5\x00\x44\xc1\xb1\xd6\xc0\xc0\xf9\x55\x26\xad\xa7\x2f\x71\x4a\x8a\x93\x40\x6e\x9d\xa7\x69\xa8\xa9\xe0\x23\x6d\x73\xe9\xf3\x52\x8d\xd5\x9a\xa6\xd6\x85\x57\xb1\x37\x88\xb5\x28\x86\x84\x60\x31\xb1\xa4\x2b\x44\x57\x48\xf1\xb0\x93\x25\x07\x2d\x5f\xa7\xa2\xb5\x6f\x35\x3f\xd5\x25\xf2\x1b\xcb\x8b\xde\x13\x79\xc6\xcf\x2e\xee\x45\x03\xce\xbc\xb7\xae\xed\x91\x8e\x80\x52\x02\x16\xb3\xdd\x65\x23\x9e\xe7\x16\xe5\x4f\x5f\x65\xe6\xae\xb4\xe2\x51\xc5\xcd\xd9\x51\xcf\x8d\x88\xee\x33\x95\xc8\xd1\x7b\x51\x85\xe2\x02\x26\x7b\xc1\x7c\x69\xee\x76\x38\xe8\x70\xac\xd8\x93\xd8\x10\x0d\xf0\x0a\x0b\x0d\xf5\x64\x6c\x9c\x39\xad\xe4\xee\x69\xf7\xd4\xfe\x0b\xe1\xcf\x86\x67\xf0\xc5\xb6\xc4\x87\x6a\xa7\x0a\x6f\x71\xec\x54\x98\x40\x79\x23\xfb\x6b\x60\x67\x73\x56\xa1\x30\x6c\xed\x52\x70\x41\xfe\xee\x19\xfa\xdd\x33\xf4\x3f\xdc\x33\xf4\x25\xdd\x42\x80\x8d\x79\x4e\x9f\x50\x4f\x80\xfc\x88\xe5\xe8\xbe\x3a\x3a\xc7\xb1\xd5\x3a\x9e\x04\xb2\xcf\x41\xa6\x63\x13\xe8\x6f\x89\x30\x4c\xff\x2c\x79\x74\x2f\x64\x67\x8c\xde\xd2\x17\x75\x2a\x70\x3e\x2d\x82\xa5\x8d\x7d\x29\x78\xbb\x1f\xca\xe2\xa1\x4e\x44\x1a\xdc\x46\x08\x62\xd6\x09\xd8\x9e\xa6\xe1\x27\x00\x1a\x53\xb9\x23\xb6\xd6\x94\x85\x87\xc1\x48\xa4\x49\x42\xb0\x54\x8d\x0a\x7a\x28\x26\xce\x7e\x78\x91\x29\x95\xb6\x42\xe3\x9e\xb4\x03\x1b\x89\x32\x43\x3b\xef\x02\x8d\x51\x1d\x02\xc6\x6c\x2f\xfa\xa4\x0b\x9f\xa2\x81\xf9\x18\xa0\x85\x01\xb3\x29\x2e\x21\x97\xd2\x77\x47\x20\xb0\xc7\x9d\xc3\x85\x30\x62\x4b\x11\x71\x90\xfe\xb4\xe0\xbd\x88\xbb\xec\x93\x90\x14\xa9\x91\x0e\xa2\x9b\xdf\xe9\x88\x5a\x42\xb9\x8b\xa4\x4d\xf8\x62\xec\xe2\xaa\x59\x08\x16\x5a\x8e\x35\xb7\x48\x12\x4b\xbb\xb8\x4f\xd2\xd6\x72\x4c\x2f\x40\x7f\x6f\xd8\x09\xd7\xba\xef\x5c\x50\x41\x67\x50\xce\xf0\x8d\xf4\x27\x48\xc7\xd9\x0e\x44\xee\xcc\xe5\xcc\x29\x9d\x7a\xec\x97\x43\xee\x61\xb8\x14\x31\x8b\x8d\xa1\x41\x2e\x47\x7f\x73\x99\x30\x5d\x46\x1b\x60\xab\xac\xee\x53\xe1\xbe\xd5\x5c\xb1\x93\xb9\x34\x17\x22\x70\xb5\x6c\x39\xe4\xc5\x3f\x1a\x63\x55\x27\xff\x29\x1c\x3c\x8b\xc8\xbb\x42\x44\x16\x5e\x9c\x94\x6c\x45\xaf\x59\xe2\x50\x04\x58\x78\x4c\x49\x99\xc5\xbc\x10\xd3\xb9\x47\xdb\x24\xe8\xe9\xb4\x28\x0f\x32\x99\x75\xd8\xb0\x10\xc7\x58\xdb\x69\xd3\x64\x25\xa2\x5d\xd4\xd0\x01\xea\xa7\x89\xf8\xfd\xda\xf6\x6d\x5d\xdb\x90\x65\x17\x73\x06\xc7\x74\x2d\x55\xf5\xda\xbf\x7e\x5c\xe7\x0a\x16\xd4\x44\x8f\xe8\xe7\x2f\x78\xed\x6c\xb1\x81\xc7\xd9\xf3\x83\xef\x41\xfd\xc7\x99\xbf\xd8\xfa\xc3\x3a\xa0\x40\x68\x98\x85\x61\x70\xb1\x08\xa7\x8e\x31\x68\x07\x87\xf5\xbb\x59\x66\xbe\x29\x70\xd2\x90\x8b\xab\xb1\xb8\x1d\x5c\xe9\xd2\x5a\xda\x52\xe0\x79\xd7\x63\x71\x07\xac\xee\xbc\x78\xa1\x5d\xaf\x57\x77\x40\x8b\xfd\x7f\x9f\xe8\xe2\x97\x9a\x66\xe8\x61\xa2\xa3\xcf\x66\x9a\xda\xaa\x62\x35\x87\x5a\x54\xd7\x55\x9b\x47\xad\xec\x9c\x83\xcb\x93\x55\x89\x33\xf5\x1e\x73\x0f\xfa\xe4\xfa\xeb\x13\x1e\x4d\x8f\x39\xcf\x32\x91\xdb\x83\xbc\x61\x6b\x81\xe4\x1a\x7c\x05\x34\x13\x37\x02\xb5\xba\x6b\xb7\x5c\xb3\x95\xd4\x8a\x86\xc7\xa0\xeb\xa6\xed\x23\x77\x59\xa6\x69\xe7\xc8\xed\x57\x72\xba\xbc\x7b\xff\x7e\xf1\xcb\xec\xfd\xdd\xb9\x6d\x7e\xab\x32\x52\xf0\x58\x67\x9f\xb8\x9a\x50\x9f\x78\xed\x45\xf3\x59\x61\xf5\xc2\x95\x6f\x35\x3a\xb9\xca\x34\xad\xaa\x66\xcd\xe5\x27\x2a\x07\x60\xda\xa8\x08\x6a\xfa\x8d\xf5\x76\x5c\xf5\xfb\xf0\xd8\x27\x53\xf8\x27\x7c\xf7\x84\xf9\x46\xbc\x06\x6d\x47\xd2\x8c\x6b\xef\x57\xca\x86\x39\x62\x39\x20\x18\xb8\x6b\x39\x3c\xb5\x2e\xe0\x61\xcb\xe3\x4e\x02\x23\xb9\x88\xad\x9c\xdf\x93\xac\x0e\xec\xbb\x4f\xd5\x38\xb5\xdb\xcb\x63\xbc\xd2\x40\xb9\x13\x54\x73\x03\x8d\x6a\x2f\x78\x36\x97\xe8\x03\x35\x75\x2a\x54\x77\x9d\xd8\x05\x99\xb7\x29\x97\xeb\x92\xaf\x8d\x75\x6b\x3f\x3e\x97\xdb\x64\xbd\x41\x1e\x90\x32\xf3\xf8\x64\xce\x24\xd0\xc5\xd4\xa6\x50\x0d\x9f\x9c\xc8\xb9\xa4\x36\xc9\xb5\x2f\x1e\xb1\xb2\x7f\xbe\x71\xcd\x21\x50\x3a\x16\x44\x82\x74\x72\x2e\x71\x70\x91\x9f\xc4\x46\x42\xe0\xc6\xc2\x8b\xfa\xd4\xe5\x10\xbb\x44\x9d\x7e\xb3\xa7\xaf\x21\x26\x33\x97\x2e\x45\x17\x3d\x47\xd4\x86\x40\xb8\x04\xab\xb4\x7f\x3f\xb1\x83\x61\xd7\x04\xd5\xad\x7d\xd6\x1f\x7d\x06\x98\x05\xb7\x18\xa1\x3e\xdd\xdc\xc6\x06\x7a\x0b\x79\xb0\x71\x74\xf1\x36\x40\x5e\x76\x7b\x6d\x6c\xbb\xf0\x99\x4e\x68\xab\x2a\x97\xe9\x88\x2a\xe1\xf3\xbd\x95\xc2\x2d\xb9\xbf\x52\x03\xae\xc3\xd7\xb5\xa5\x65\xa6\x69\xdf\x67\x97\x4a\x75\x8c\xcb\x13\x06\x14\x2b\x95\xa2\x17\xf6\x75\x46\x19\x15\x87\xcc\x97\x01\xc9\x8a\xf5\x2e\xb2\xbb\x4f\x5f\x85\xd2\x44\x1f\x54\x1d\x6f\x3f\x0d\xae\x91\xb3\x10\xe8\xb0\x1b\xb5\xc3\xd2\x39\x57\xd9\x60\x3b\xb6\x49\x8a\x27\x59\x19\xe7\x04\xb7\x17\xb3\x78\x50\x63\xd9\xcc\xff\x89\x9b\x44\x13\x3f\x72\x13\xa8\x64\x54\xe6\xda\x6c\x97\xb4\xdf\xd1\xae\xad\x72\xc6\xe7\xd2\xa6\xaa\xd9\xed\x78\x66\xc1\xb9\xb9\xfb\x2b\x26\x80\x66\xc8\xa7\x0f\x16\x6b\xc1\x94\x14\x76\x37\x9c\x4b\xab\xfd\x3d\x61\x7c\xa9\xad\xa4\x36\x97\x3b\xa7\x73\x9d\x38\xfa\x22\x2e\x19\xa0\x9e\xf7\xef\x79\x35\x33\xa0\x72\xce\xff\xc1\xfc\xdf\x7f\xff\xe1\xff\x05\x00\x00\xff\xff\x49\x47\xa1\x59\x4e\xb8\x04\x00") func adminSwaggerJsonBytes() ([]byte, error) { return bindataRead( @@ -93,7 +93,7 @@ func adminSwaggerJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "admin.swagger.json", size: 309132, mode: os.FileMode(420), modTime: time.Unix(1562572800, 0)} + info := bindataFileInfo{name: "admin.swagger.json", size: 309326, mode: os.FileMode(420), modTime: time.Unix(1562572800, 0)} a := &asset{bytes: bytes, info: info} return a, nil } diff --git a/flyteidl/gen/pb-java/flyteidl/core/Tasks.java b/flyteidl/gen/pb-java/flyteidl/core/Tasks.java index 811eb6e096..a9cc5a9c0b 100644 --- a/flyteidl/gen/pb-java/flyteidl/core/Tasks.java +++ b/flyteidl/gen/pb-java/flyteidl/core/Tasks.java @@ -4015,7 +4015,7 @@ public interface RuntimeMetadataOrBuilder extends /** *
-     *+optional It can be used to provide extra information about the plugin type (e.g. async plugin, sync plugin... etc.).
+     *+optional It can be used to provide extra information about the runtime (e.g. python, golang... etc.).
      * 
* * string flavor = 3; @@ -4023,13 +4023,22 @@ public interface RuntimeMetadataOrBuilder extends java.lang.String getFlavor(); /** *
-     *+optional It can be used to provide extra information about the plugin type (e.g. async plugin, sync plugin... etc.).
+     *+optional It can be used to provide extra information about the runtime (e.g. python, golang... etc.).
      * 
* * string flavor = 3; */ com.google.protobuf.ByteString getFlavorBytes(); + + /** + *
+     *+optional It can be used to decide use sync plugin or async plugin during runtime.
+     * 
+ * + * bool is_sync_plugin = 4; + */ + boolean getIsSyncPlugin(); } /** *
@@ -4095,6 +4104,11 @@ private RuntimeMetadata(
               flavor_ = s;
               break;
             }
+            case 32: {
+
+              isSyncPlugin_ = input.readBool();
+              break;
+            }
             default: {
               if (!parseUnknownField(
                   input, unknownFields, extensionRegistry, tag)) {
@@ -4298,7 +4312,7 @@ public java.lang.String getVersion() {
     private volatile java.lang.Object flavor_;
     /**
      * 
-     *+optional It can be used to provide extra information about the plugin type (e.g. async plugin, sync plugin... etc.).
+     *+optional It can be used to provide extra information about the runtime (e.g. python, golang... etc.).
      * 
* * string flavor = 3; @@ -4317,7 +4331,7 @@ public java.lang.String getFlavor() { } /** *
-     *+optional It can be used to provide extra information about the plugin type (e.g. async plugin, sync plugin... etc.).
+     *+optional It can be used to provide extra information about the runtime (e.g. python, golang... etc.).
      * 
* * string flavor = 3; @@ -4336,6 +4350,19 @@ public java.lang.String getFlavor() { } } + public static final int IS_SYNC_PLUGIN_FIELD_NUMBER = 4; + private boolean isSyncPlugin_; + /** + *
+     *+optional It can be used to decide use sync plugin or async plugin during runtime.
+     * 
+ * + * bool is_sync_plugin = 4; + */ + public boolean getIsSyncPlugin() { + return isSyncPlugin_; + } + private byte memoizedIsInitialized = -1; @java.lang.Override public final boolean isInitialized() { @@ -4359,6 +4386,9 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) if (!getFlavorBytes().isEmpty()) { com.google.protobuf.GeneratedMessageV3.writeString(output, 3, flavor_); } + if (isSyncPlugin_ != false) { + output.writeBool(4, isSyncPlugin_); + } unknownFields.writeTo(output); } @@ -4378,6 +4408,10 @@ public int getSerializedSize() { if (!getFlavorBytes().isEmpty()) { size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, flavor_); } + if (isSyncPlugin_ != false) { + size += com.google.protobuf.CodedOutputStream + .computeBoolSize(4, isSyncPlugin_); + } size += unknownFields.getSerializedSize(); memoizedSize = size; return size; @@ -4398,6 +4432,8 @@ public boolean equals(final java.lang.Object obj) { .equals(other.getVersion())) return false; if (!getFlavor() .equals(other.getFlavor())) return false; + if (getIsSyncPlugin() + != other.getIsSyncPlugin()) return false; if (!unknownFields.equals(other.unknownFields)) return false; return true; } @@ -4415,6 +4451,9 @@ public int hashCode() { hash = (53 * hash) + getVersion().hashCode(); hash = (37 * hash) + FLAVOR_FIELD_NUMBER; hash = (53 * hash) + getFlavor().hashCode(); + hash = (37 * hash) + IS_SYNC_PLUGIN_FIELD_NUMBER; + hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean( + getIsSyncPlugin()); hash = (29 * hash) + unknownFields.hashCode(); memoizedHashCode = hash; return hash; @@ -4558,6 +4597,8 @@ public Builder clear() { flavor_ = ""; + isSyncPlugin_ = false; + return this; } @@ -4587,6 +4628,7 @@ public flyteidl.core.Tasks.RuntimeMetadata buildPartial() { result.type_ = type_; result.version_ = version_; result.flavor_ = flavor_; + result.isSyncPlugin_ = isSyncPlugin_; onBuilt(); return result; } @@ -4646,6 +4688,9 @@ public Builder mergeFrom(flyteidl.core.Tasks.RuntimeMetadata other) { flavor_ = other.flavor_; onChanged(); } + if (other.getIsSyncPlugin() != false) { + setIsSyncPlugin(other.getIsSyncPlugin()); + } this.mergeUnknownFields(other.unknownFields); onChanged(); return this; @@ -4837,7 +4882,7 @@ public Builder setVersionBytes( private java.lang.Object flavor_ = ""; /** *
-       *+optional It can be used to provide extra information about the plugin type (e.g. async plugin, sync plugin... etc.).
+       *+optional It can be used to provide extra information about the runtime (e.g. python, golang... etc.).
        * 
* * string flavor = 3; @@ -4856,7 +4901,7 @@ public java.lang.String getFlavor() { } /** *
-       *+optional It can be used to provide extra information about the plugin type (e.g. async plugin, sync plugin... etc.).
+       *+optional It can be used to provide extra information about the runtime (e.g. python, golang... etc.).
        * 
* * string flavor = 3; @@ -4876,7 +4921,7 @@ public java.lang.String getFlavor() { } /** *
-       *+optional It can be used to provide extra information about the plugin type (e.g. async plugin, sync plugin... etc.).
+       *+optional It can be used to provide extra information about the runtime (e.g. python, golang... etc.).
        * 
* * string flavor = 3; @@ -4893,7 +4938,7 @@ public Builder setFlavor( } /** *
-       *+optional It can be used to provide extra information about the plugin type (e.g. async plugin, sync plugin... etc.).
+       *+optional It can be used to provide extra information about the runtime (e.g. python, golang... etc.).
        * 
* * string flavor = 3; @@ -4906,7 +4951,7 @@ public Builder clearFlavor() { } /** *
-       *+optional It can be used to provide extra information about the plugin type (e.g. async plugin, sync plugin... etc.).
+       *+optional It can be used to provide extra information about the runtime (e.g. python, golang... etc.).
        * 
* * string flavor = 3; @@ -4922,6 +4967,44 @@ public Builder setFlavorBytes( onChanged(); return this; } + + private boolean isSyncPlugin_ ; + /** + *
+       *+optional It can be used to decide use sync plugin or async plugin during runtime.
+       * 
+ * + * bool is_sync_plugin = 4; + */ + public boolean getIsSyncPlugin() { + return isSyncPlugin_; + } + /** + *
+       *+optional It can be used to decide use sync plugin or async plugin during runtime.
+       * 
+ * + * bool is_sync_plugin = 4; + */ + public Builder setIsSyncPlugin(boolean value) { + + isSyncPlugin_ = value; + onChanged(); + return this; + } + /** + *
+       *+optional It can be used to decide use sync plugin or async plugin during runtime.
+       * 
+ * + * bool is_sync_plugin = 4; + */ + public Builder clearIsSyncPlugin() { + + isSyncPlugin_ = false; + onChanged(); + return this; + } @java.lang.Override public final Builder setUnknownFields( final com.google.protobuf.UnknownFieldSet unknownFields) { @@ -20636,77 +20719,78 @@ public flyteidl.core.Tasks.Sql getDefaultInstanceForType() { "rtition_size\030\003 \001(\tH\000B\026\n\024partition_size_v" + "alue\"K\n\021ExtendedResources\0226\n\017gpu_acceler" + "ator\030\001 \001(\0132\035.flyteidl.core.GPUAccelerato" + - "r\"\225\001\n\017RuntimeMetadata\0228\n\004type\030\001 \001(\0162*.fl" + + "r\"\255\001\n\017RuntimeMetadata\0228\n\004type\030\001 \001(\0162*.fl" + "yteidl.core.RuntimeMetadata.RuntimeType\022" + - "\017\n\007version\030\002 \001(\t\022\016\n\006flavor\030\003 \001(\t\"\'\n\013Runt" + - "imeType\022\t\n\005OTHER\020\000\022\r\n\tFLYTE_SDK\020\001\"\316\003\n\014Ta" + - "skMetadata\022\024\n\014discoverable\030\001 \001(\010\022/\n\007runt" + - "ime\030\002 \001(\0132\036.flyteidl.core.RuntimeMetadat" + - "a\022*\n\007timeout\030\004 \001(\0132\031.google.protobuf.Dur" + - "ation\022-\n\007retries\030\005 \001(\0132\034.flyteidl.core.R" + - "etryStrategy\022\031\n\021discovery_version\030\006 \001(\t\022" + - " \n\030deprecated_error_message\030\007 \001(\t\022\027\n\rint" + - "erruptible\030\010 \001(\010H\000\022\032\n\022cache_serializable" + - "\030\t \001(\010\022\026\n\016generates_deck\030\n \001(\010\0223\n\004tags\030\013" + - " \003(\0132%.flyteidl.core.TaskMetadata.TagsEn" + - "try\022\031\n\021pod_template_name\030\014 \001(\t\032+\n\tTagsEn" + - "try\022\013\n\003key\030\001 \001(\t\022\r\n\005value\030\002 \001(\t:\0028\001B\025\n\023i" + - "nterruptible_value\"\316\004\n\014TaskTemplate\022%\n\002i" + - "d\030\001 \001(\0132\031.flyteidl.core.Identifier\022\014\n\004ty" + - "pe\030\002 \001(\t\022-\n\010metadata\030\003 \001(\0132\033.flyteidl.co" + - "re.TaskMetadata\0220\n\tinterface\030\004 \001(\0132\035.fly" + - "teidl.core.TypedInterface\022\'\n\006custom\030\005 \001(" + - "\0132\027.google.protobuf.Struct\022-\n\tcontainer\030" + - "\006 \001(\0132\030.flyteidl.core.ContainerH\000\022(\n\007k8s" + - "_pod\030\021 \001(\0132\025.flyteidl.core.K8sPodH\000\022!\n\003s" + - "ql\030\022 \001(\0132\022.flyteidl.core.SqlH\000\022\031\n\021task_t" + - "ype_version\030\007 \001(\005\0228\n\020security_context\030\010 " + - "\001(\0132\036.flyteidl.core.SecurityContext\022<\n\022e" + - "xtended_resources\030\t \001(\0132 .flyteidl.core." + - "ExtendedResources\0227\n\006config\030\020 \003(\0132\'.flyt" + - "eidl.core.TaskTemplate.ConfigEntry\032-\n\013Co" + - "nfigEntry\022\013\n\003key\030\001 \001(\t\022\r\n\005value\030\002 \001(\t:\0028" + - "\001B\010\n\006target\"\'\n\rContainerPort\022\026\n\016containe" + - "r_port\030\001 \001(\r\"\255\003\n\tContainer\022\r\n\005image\030\001 \001(" + - "\t\022\017\n\007command\030\002 \003(\t\022\014\n\004args\030\003 \003(\t\022+\n\treso" + - "urces\030\004 \001(\0132\030.flyteidl.core.Resources\022(\n" + - "\003env\030\005 \003(\0132\033.flyteidl.core.KeyValuePair\022" + - "/\n\006config\030\006 \003(\0132\033.flyteidl.core.KeyValue" + - "PairB\002\030\001\022+\n\005ports\030\007 \003(\0132\034.flyteidl.core." + - "ContainerPort\0225\n\013data_config\030\t \001(\0132 .fly" + - "teidl.core.DataLoadingConfig\022;\n\014architec" + - "ture\030\n \001(\0162%.flyteidl.core.Container.Arc" + - "hitecture\"I\n\014Architecture\022\013\n\007UNKNOWN\020\000\022\t" + - "\n\005AMD64\020\001\022\t\n\005ARM64\020\002\022\n\n\006ARM_V6\020\003\022\n\n\006ARM_" + - "V7\020\004\"\233\002\n\nIOStrategy\022=\n\rdownload_mode\030\001 \001" + - "(\0162&.flyteidl.core.IOStrategy.DownloadMo" + - "de\0229\n\013upload_mode\030\002 \001(\0162$.flyteidl.core." + - "IOStrategy.UploadMode\"L\n\014DownloadMode\022\022\n" + - "\016DOWNLOAD_EAGER\020\000\022\023\n\017DOWNLOAD_STREAM\020\001\022\023" + - "\n\017DO_NOT_DOWNLOAD\020\002\"E\n\nUploadMode\022\022\n\016UPL" + - "OAD_ON_EXIT\020\000\022\020\n\014UPLOAD_EAGER\020\001\022\021\n\rDO_NO" + - "T_UPLOAD\020\002\"\363\001\n\021DataLoadingConfig\022\017\n\007enab" + - "led\030\001 \001(\010\022\022\n\ninput_path\030\002 \001(\t\022\023\n\013output_" + - "path\030\003 \001(\t\022A\n\006format\030\004 \001(\01621.flyteidl.co" + - "re.DataLoadingConfig.LiteralMapFormat\022.\n" + - "\013io_strategy\030\005 \001(\0132\031.flyteidl.core.IOStr" + - "ategy\"1\n\020LiteralMapFormat\022\010\n\004JSON\020\000\022\010\n\004Y" + - "AML\020\001\022\t\n\005PROTO\020\002\"\236\001\n\006K8sPod\0222\n\010metadata\030" + - "\001 \001(\0132 .flyteidl.core.K8sObjectMetadata\022" + - ")\n\010pod_spec\030\002 \001(\0132\027.google.protobuf.Stru" + - "ct\0225\n\013data_config\030\003 \001(\0132 .flyteidl.core." + - "DataLoadingConfig\"\374\001\n\021K8sObjectMetadata\022" + - "<\n\006labels\030\001 \003(\0132,.flyteidl.core.K8sObjec" + - "tMetadata.LabelsEntry\022F\n\013annotations\030\002 \003" + - "(\01321.flyteidl.core.K8sObjectMetadata.Ann" + - "otationsEntry\032-\n\013LabelsEntry\022\013\n\003key\030\001 \001(" + - "\t\022\r\n\005value\030\002 \001(\t:\0028\001\0322\n\020AnnotationsEntry" + - "\022\013\n\003key\030\001 \001(\t\022\r\n\005value\030\002 \001(\t:\0028\001\"~\n\003Sql\022" + - "\021\n\tstatement\030\001 \001(\t\022+\n\007dialect\030\002 \001(\0162\032.fl" + - "yteidl.core.Sql.Dialect\"7\n\007Dialect\022\r\n\tUN" + - "DEFINED\020\000\022\010\n\004ANSI\020\001\022\010\n\004HIVE\020\002\022\t\n\005OTHER\020\003" + - "B\n\x06limits\x18\x02 \x03(\x0b\x32&.flyteidl.core.Resources.ResourceEntryR\x06limits\x1a`\n\rResourceEntry\x12\x39\n\x04name\x18\x01 \x01(\x0e\x32%.flyteidl.core.Resources.ResourceNameR\x04name\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value\"]\n\x0cResourceName\x12\x0b\n\x07UNKNOWN\x10\x00\x12\x07\n\x03\x43PU\x10\x01\x12\x07\n\x03GPU\x10\x02\x12\n\n\x06MEMORY\x10\x03\x12\x0b\n\x07STORAGE\x10\x04\x12\x15\n\x11\x45PHEMERAL_STORAGE\x10\x05\"\x91\x01\n\x0eGPUAccelerator\x12\x16\n\x06\x64\x65vice\x18\x01 \x01(\tR\x06\x64\x65vice\x12&\n\runpartitioned\x18\x02 \x01(\x08H\x00R\runpartitioned\x12\'\n\x0epartition_size\x18\x03 \x01(\tH\x00R\rpartitionSizeB\x16\n\x14partition_size_value\"[\n\x11\x45xtendedResources\x12\x46\n\x0fgpu_accelerator\x18\x01 \x01(\x0b\x32\x1d.flyteidl.core.GPUAcceleratorR\x0egpuAccelerator\"\xac\x01\n\x0fRuntimeMetadata\x12>\n\x04type\x18\x01 \x01(\x0e\x32*.flyteidl.core.RuntimeMetadata.RuntimeTypeR\x04type\x12\x18\n\x07version\x18\x02 \x01(\tR\x07version\x12\x16\n\x06\x66lavor\x18\x03 \x01(\tR\x06\x66lavor\"\'\n\x0bRuntimeType\x12\t\n\x05OTHER\x10\x00\x12\r\n\tFLYTE_SDK\x10\x01\"\xf5\x04\n\x0cTaskMetadata\x12\"\n\x0c\x64iscoverable\x18\x01 \x01(\x08R\x0c\x64iscoverable\x12\x38\n\x07runtime\x18\x02 \x01(\x0b\x32\x1e.flyteidl.core.RuntimeMetadataR\x07runtime\x12\x33\n\x07timeout\x18\x04 \x01(\x0b\x32\x19.google.protobuf.DurationR\x07timeout\x12\x36\n\x07retries\x18\x05 \x01(\x0b\x32\x1c.flyteidl.core.RetryStrategyR\x07retries\x12+\n\x11\x64iscovery_version\x18\x06 \x01(\tR\x10\x64iscoveryVersion\x12\x38\n\x18\x64\x65precated_error_message\x18\x07 \x01(\tR\x16\x64\x65precatedErrorMessage\x12&\n\rinterruptible\x18\x08 \x01(\x08H\x00R\rinterruptible\x12-\n\x12\x63\x61\x63he_serializable\x18\t \x01(\x08R\x11\x63\x61\x63heSerializable\x12%\n\x0egenerates_deck\x18\n \x01(\x08R\rgeneratesDeck\x12\x39\n\x04tags\x18\x0b \x03(\x0b\x32%.flyteidl.core.TaskMetadata.TagsEntryR\x04tags\x12*\n\x11pod_template_name\x18\x0c \x01(\tR\x0fpodTemplateName\x1a\x37\n\tTagsEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x42\x15\n\x13interruptible_value\"\xd6\x05\n\x0cTaskTemplate\x12)\n\x02id\x18\x01 \x01(\x0b\x32\x19.flyteidl.core.IdentifierR\x02id\x12\x12\n\x04type\x18\x02 \x01(\tR\x04type\x12\x37\n\x08metadata\x18\x03 \x01(\x0b\x32\x1b.flyteidl.core.TaskMetadataR\x08metadata\x12;\n\tinterface\x18\x04 \x01(\x0b\x32\x1d.flyteidl.core.TypedInterfaceR\tinterface\x12/\n\x06\x63ustom\x18\x05 \x01(\x0b\x32\x17.google.protobuf.StructR\x06\x63ustom\x12\x38\n\tcontainer\x18\x06 \x01(\x0b\x32\x18.flyteidl.core.ContainerH\x00R\tcontainer\x12\x30\n\x07k8s_pod\x18\x11 \x01(\x0b\x32\x15.flyteidl.core.K8sPodH\x00R\x06k8sPod\x12&\n\x03sql\x18\x12 \x01(\x0b\x32\x12.flyteidl.core.SqlH\x00R\x03sql\x12*\n\x11task_type_version\x18\x07 \x01(\x05R\x0ftaskTypeVersion\x12I\n\x10security_context\x18\x08 \x01(\x0b\x32\x1e.flyteidl.core.SecurityContextR\x0fsecurityContext\x12O\n\x12\x65xtended_resources\x18\t \x01(\x0b\x32 .flyteidl.core.ExtendedResourcesR\x11\x65xtendedResources\x12?\n\x06\x63onfig\x18\x10 \x03(\x0b\x32\'.flyteidl.core.TaskTemplate.ConfigEntryR\x06\x63onfig\x1a\x39\n\x0b\x43onfigEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x42\x08\n\x06target\"6\n\rContainerPort\x12%\n\x0e\x63ontainer_port\x18\x01 \x01(\rR\rcontainerPort\"\xfc\x03\n\tContainer\x12\x14\n\x05image\x18\x01 \x01(\tR\x05image\x12\x18\n\x07\x63ommand\x18\x02 \x03(\tR\x07\x63ommand\x12\x12\n\x04\x61rgs\x18\x03 \x03(\tR\x04\x61rgs\x12\x36\n\tresources\x18\x04 \x01(\x0b\x32\x18.flyteidl.core.ResourcesR\tresources\x12-\n\x03\x65nv\x18\x05 \x03(\x0b\x32\x1b.flyteidl.core.KeyValuePairR\x03\x65nv\x12\x37\n\x06\x63onfig\x18\x06 \x03(\x0b\x32\x1b.flyteidl.core.KeyValuePairB\x02\x18\x01R\x06\x63onfig\x12\x32\n\x05ports\x18\x07 \x03(\x0b\x32\x1c.flyteidl.core.ContainerPortR\x05ports\x12\x41\n\x0b\x64\x61ta_config\x18\t \x01(\x0b\x32 .flyteidl.core.DataLoadingConfigR\ndataConfig\x12I\n\x0c\x61rchitecture\x18\n \x01(\x0e\x32%.flyteidl.core.Container.ArchitectureR\x0c\x61rchitecture\"I\n\x0c\x41rchitecture\x12\x0b\n\x07UNKNOWN\x10\x00\x12\t\n\x05\x41MD64\x10\x01\x12\t\n\x05\x41RM64\x10\x02\x12\n\n\x06\x41RM_V6\x10\x03\x12\n\n\x06\x41RM_V7\x10\x04\"\xb5\x02\n\nIOStrategy\x12K\n\rdownload_mode\x18\x01 \x01(\x0e\x32&.flyteidl.core.IOStrategy.DownloadModeR\x0c\x64ownloadMode\x12\x45\n\x0bupload_mode\x18\x02 \x01(\x0e\x32$.flyteidl.core.IOStrategy.UploadModeR\nuploadMode\"L\n\x0c\x44ownloadMode\x12\x12\n\x0e\x44OWNLOAD_EAGER\x10\x00\x12\x13\n\x0f\x44OWNLOAD_STREAM\x10\x01\x12\x13\n\x0f\x44O_NOT_DOWNLOAD\x10\x02\"E\n\nUploadMode\x12\x12\n\x0eUPLOAD_ON_EXIT\x10\x00\x12\x10\n\x0cUPLOAD_EAGER\x10\x01\x12\x11\n\rDO_NOT_UPLOAD\x10\x02\"\xa7\x02\n\x11\x44\x61taLoadingConfig\x12\x18\n\x07\x65nabled\x18\x01 \x01(\x08R\x07\x65nabled\x12\x1d\n\ninput_path\x18\x02 \x01(\tR\tinputPath\x12\x1f\n\x0boutput_path\x18\x03 \x01(\tR\noutputPath\x12I\n\x06\x66ormat\x18\x04 \x01(\x0e\x32\x31.flyteidl.core.DataLoadingConfig.LiteralMapFormatR\x06\x66ormat\x12:\n\x0bio_strategy\x18\x05 \x01(\x0b\x32\x19.flyteidl.core.IOStrategyR\nioStrategy\"1\n\x10LiteralMapFormat\x12\x08\n\x04JSON\x10\x00\x12\x08\n\x04YAML\x10\x01\x12\t\n\x05PROTO\x10\x02\"\xbd\x01\n\x06K8sPod\x12<\n\x08metadata\x18\x01 \x01(\x0b\x32 .flyteidl.core.K8sObjectMetadataR\x08metadata\x12\x32\n\x08pod_spec\x18\x02 \x01(\x0b\x32\x17.google.protobuf.StructR\x07podSpec\x12\x41\n\x0b\x64\x61ta_config\x18\x03 \x01(\x0b\x32 .flyteidl.core.DataLoadingConfigR\ndataConfig\"\xa9\x02\n\x11K8sObjectMetadata\x12\x44\n\x06labels\x18\x01 \x03(\x0b\x32,.flyteidl.core.K8sObjectMetadata.LabelsEntryR\x06labels\x12S\n\x0b\x61nnotations\x18\x02 \x03(\x0b\x32\x31.flyteidl.core.K8sObjectMetadata.AnnotationsEntryR\x0b\x61nnotations\x1a\x39\n\x0bLabelsEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x1a>\n\x10\x41nnotationsEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\"\x92\x01\n\x03Sql\x12\x1c\n\tstatement\x18\x01 \x01(\tR\tstatement\x12\x34\n\x07\x64ialect\x18\x02 \x01(\x0e\x32\x1a.flyteidl.core.Sql.DialectR\x07\x64ialect\"7\n\x07\x44ialect\x12\r\n\tUNDEFINED\x10\x00\x12\x08\n\x04\x41NSI\x10\x01\x12\x08\n\x04HIVE\x10\x02\x12\t\n\x05OTHER\x10\x03\x42\xb0\x01\n\x11\x63om.flyteidl.coreB\nTasksProtoP\x01Z:github.com/flyteorg/flyte/flyteidl/gen/pb-go/flyteidl/core\xa2\x02\x03\x46\x43X\xaa\x02\rFlyteidl.Core\xca\x02\rFlyteidl\\Core\xe2\x02\x19\x46lyteidl\\Core\\GPBMetadata\xea\x02\x0e\x46lyteidl::Coreb\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x19\x66lyteidl/core/tasks.proto\x12\rflyteidl.core\x1a\x1e\x66lyteidl/core/identifier.proto\x1a\x1d\x66lyteidl/core/interface.proto\x1a\x1c\x66lyteidl/core/literals.proto\x1a\x1c\x66lyteidl/core/security.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x1cgoogle/protobuf/struct.proto\"\xd0\x02\n\tResources\x12\x42\n\x08requests\x18\x01 \x03(\x0b\x32&.flyteidl.core.Resources.ResourceEntryR\x08requests\x12>\n\x06limits\x18\x02 \x03(\x0b\x32&.flyteidl.core.Resources.ResourceEntryR\x06limits\x1a`\n\rResourceEntry\x12\x39\n\x04name\x18\x01 \x01(\x0e\x32%.flyteidl.core.Resources.ResourceNameR\x04name\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value\"]\n\x0cResourceName\x12\x0b\n\x07UNKNOWN\x10\x00\x12\x07\n\x03\x43PU\x10\x01\x12\x07\n\x03GPU\x10\x02\x12\n\n\x06MEMORY\x10\x03\x12\x0b\n\x07STORAGE\x10\x04\x12\x15\n\x11\x45PHEMERAL_STORAGE\x10\x05\"\x91\x01\n\x0eGPUAccelerator\x12\x16\n\x06\x64\x65vice\x18\x01 \x01(\tR\x06\x64\x65vice\x12&\n\runpartitioned\x18\x02 \x01(\x08H\x00R\runpartitioned\x12\'\n\x0epartition_size\x18\x03 \x01(\tH\x00R\rpartitionSizeB\x16\n\x14partition_size_value\"[\n\x11\x45xtendedResources\x12\x46\n\x0fgpu_accelerator\x18\x01 \x01(\x0b\x32\x1d.flyteidl.core.GPUAcceleratorR\x0egpuAccelerator\"\xd2\x01\n\x0fRuntimeMetadata\x12>\n\x04type\x18\x01 \x01(\x0e\x32*.flyteidl.core.RuntimeMetadata.RuntimeTypeR\x04type\x12\x18\n\x07version\x18\x02 \x01(\tR\x07version\x12\x16\n\x06\x66lavor\x18\x03 \x01(\tR\x06\x66lavor\x12$\n\x0eis_sync_plugin\x18\x04 \x01(\x08R\x0cisSyncPlugin\"\'\n\x0bRuntimeType\x12\t\n\x05OTHER\x10\x00\x12\r\n\tFLYTE_SDK\x10\x01\"\xf5\x04\n\x0cTaskMetadata\x12\"\n\x0c\x64iscoverable\x18\x01 \x01(\x08R\x0c\x64iscoverable\x12\x38\n\x07runtime\x18\x02 \x01(\x0b\x32\x1e.flyteidl.core.RuntimeMetadataR\x07runtime\x12\x33\n\x07timeout\x18\x04 \x01(\x0b\x32\x19.google.protobuf.DurationR\x07timeout\x12\x36\n\x07retries\x18\x05 \x01(\x0b\x32\x1c.flyteidl.core.RetryStrategyR\x07retries\x12+\n\x11\x64iscovery_version\x18\x06 \x01(\tR\x10\x64iscoveryVersion\x12\x38\n\x18\x64\x65precated_error_message\x18\x07 \x01(\tR\x16\x64\x65precatedErrorMessage\x12&\n\rinterruptible\x18\x08 \x01(\x08H\x00R\rinterruptible\x12-\n\x12\x63\x61\x63he_serializable\x18\t \x01(\x08R\x11\x63\x61\x63heSerializable\x12%\n\x0egenerates_deck\x18\n \x01(\x08R\rgeneratesDeck\x12\x39\n\x04tags\x18\x0b \x03(\x0b\x32%.flyteidl.core.TaskMetadata.TagsEntryR\x04tags\x12*\n\x11pod_template_name\x18\x0c \x01(\tR\x0fpodTemplateName\x1a\x37\n\tTagsEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x42\x15\n\x13interruptible_value\"\xd6\x05\n\x0cTaskTemplate\x12)\n\x02id\x18\x01 \x01(\x0b\x32\x19.flyteidl.core.IdentifierR\x02id\x12\x12\n\x04type\x18\x02 \x01(\tR\x04type\x12\x37\n\x08metadata\x18\x03 \x01(\x0b\x32\x1b.flyteidl.core.TaskMetadataR\x08metadata\x12;\n\tinterface\x18\x04 \x01(\x0b\x32\x1d.flyteidl.core.TypedInterfaceR\tinterface\x12/\n\x06\x63ustom\x18\x05 \x01(\x0b\x32\x17.google.protobuf.StructR\x06\x63ustom\x12\x38\n\tcontainer\x18\x06 \x01(\x0b\x32\x18.flyteidl.core.ContainerH\x00R\tcontainer\x12\x30\n\x07k8s_pod\x18\x11 \x01(\x0b\x32\x15.flyteidl.core.K8sPodH\x00R\x06k8sPod\x12&\n\x03sql\x18\x12 \x01(\x0b\x32\x12.flyteidl.core.SqlH\x00R\x03sql\x12*\n\x11task_type_version\x18\x07 \x01(\x05R\x0ftaskTypeVersion\x12I\n\x10security_context\x18\x08 \x01(\x0b\x32\x1e.flyteidl.core.SecurityContextR\x0fsecurityContext\x12O\n\x12\x65xtended_resources\x18\t \x01(\x0b\x32 .flyteidl.core.ExtendedResourcesR\x11\x65xtendedResources\x12?\n\x06\x63onfig\x18\x10 \x03(\x0b\x32\'.flyteidl.core.TaskTemplate.ConfigEntryR\x06\x63onfig\x1a\x39\n\x0b\x43onfigEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x42\x08\n\x06target\"6\n\rContainerPort\x12%\n\x0e\x63ontainer_port\x18\x01 \x01(\rR\rcontainerPort\"\xfc\x03\n\tContainer\x12\x14\n\x05image\x18\x01 \x01(\tR\x05image\x12\x18\n\x07\x63ommand\x18\x02 \x03(\tR\x07\x63ommand\x12\x12\n\x04\x61rgs\x18\x03 \x03(\tR\x04\x61rgs\x12\x36\n\tresources\x18\x04 \x01(\x0b\x32\x18.flyteidl.core.ResourcesR\tresources\x12-\n\x03\x65nv\x18\x05 \x03(\x0b\x32\x1b.flyteidl.core.KeyValuePairR\x03\x65nv\x12\x37\n\x06\x63onfig\x18\x06 \x03(\x0b\x32\x1b.flyteidl.core.KeyValuePairB\x02\x18\x01R\x06\x63onfig\x12\x32\n\x05ports\x18\x07 \x03(\x0b\x32\x1c.flyteidl.core.ContainerPortR\x05ports\x12\x41\n\x0b\x64\x61ta_config\x18\t \x01(\x0b\x32 .flyteidl.core.DataLoadingConfigR\ndataConfig\x12I\n\x0c\x61rchitecture\x18\n \x01(\x0e\x32%.flyteidl.core.Container.ArchitectureR\x0c\x61rchitecture\"I\n\x0c\x41rchitecture\x12\x0b\n\x07UNKNOWN\x10\x00\x12\t\n\x05\x41MD64\x10\x01\x12\t\n\x05\x41RM64\x10\x02\x12\n\n\x06\x41RM_V6\x10\x03\x12\n\n\x06\x41RM_V7\x10\x04\"\xb5\x02\n\nIOStrategy\x12K\n\rdownload_mode\x18\x01 \x01(\x0e\x32&.flyteidl.core.IOStrategy.DownloadModeR\x0c\x64ownloadMode\x12\x45\n\x0bupload_mode\x18\x02 \x01(\x0e\x32$.flyteidl.core.IOStrategy.UploadModeR\nuploadMode\"L\n\x0c\x44ownloadMode\x12\x12\n\x0e\x44OWNLOAD_EAGER\x10\x00\x12\x13\n\x0f\x44OWNLOAD_STREAM\x10\x01\x12\x13\n\x0f\x44O_NOT_DOWNLOAD\x10\x02\"E\n\nUploadMode\x12\x12\n\x0eUPLOAD_ON_EXIT\x10\x00\x12\x10\n\x0cUPLOAD_EAGER\x10\x01\x12\x11\n\rDO_NOT_UPLOAD\x10\x02\"\xa7\x02\n\x11\x44\x61taLoadingConfig\x12\x18\n\x07\x65nabled\x18\x01 \x01(\x08R\x07\x65nabled\x12\x1d\n\ninput_path\x18\x02 \x01(\tR\tinputPath\x12\x1f\n\x0boutput_path\x18\x03 \x01(\tR\noutputPath\x12I\n\x06\x66ormat\x18\x04 \x01(\x0e\x32\x31.flyteidl.core.DataLoadingConfig.LiteralMapFormatR\x06\x66ormat\x12:\n\x0bio_strategy\x18\x05 \x01(\x0b\x32\x19.flyteidl.core.IOStrategyR\nioStrategy\"1\n\x10LiteralMapFormat\x12\x08\n\x04JSON\x10\x00\x12\x08\n\x04YAML\x10\x01\x12\t\n\x05PROTO\x10\x02\"\xbd\x01\n\x06K8sPod\x12<\n\x08metadata\x18\x01 \x01(\x0b\x32 .flyteidl.core.K8sObjectMetadataR\x08metadata\x12\x32\n\x08pod_spec\x18\x02 \x01(\x0b\x32\x17.google.protobuf.StructR\x07podSpec\x12\x41\n\x0b\x64\x61ta_config\x18\x03 \x01(\x0b\x32 .flyteidl.core.DataLoadingConfigR\ndataConfig\"\xa9\x02\n\x11K8sObjectMetadata\x12\x44\n\x06labels\x18\x01 \x03(\x0b\x32,.flyteidl.core.K8sObjectMetadata.LabelsEntryR\x06labels\x12S\n\x0b\x61nnotations\x18\x02 \x03(\x0b\x32\x31.flyteidl.core.K8sObjectMetadata.AnnotationsEntryR\x0b\x61nnotations\x1a\x39\n\x0bLabelsEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x1a>\n\x10\x41nnotationsEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\"\x92\x01\n\x03Sql\x12\x1c\n\tstatement\x18\x01 \x01(\tR\tstatement\x12\x34\n\x07\x64ialect\x18\x02 \x01(\x0e\x32\x1a.flyteidl.core.Sql.DialectR\x07\x64ialect\"7\n\x07\x44ialect\x12\r\n\tUNDEFINED\x10\x00\x12\x08\n\x04\x41NSI\x10\x01\x12\x08\n\x04HIVE\x10\x02\x12\t\n\x05OTHER\x10\x03\x42\xb0\x01\n\x11\x63om.flyteidl.coreB\nTasksProtoP\x01Z:github.com/flyteorg/flyte/flyteidl/gen/pb-go/flyteidl/core\xa2\x02\x03\x46\x43X\xaa\x02\rFlyteidl.Core\xca\x02\rFlyteidl\\Core\xe2\x02\x19\x46lyteidl\\Core\\GPBMetadata\xea\x02\x0e\x46lyteidl::Coreb\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -49,43 +49,43 @@ _globals['_EXTENDEDRESOURCES']._serialized_start=716 _globals['_EXTENDEDRESOURCES']._serialized_end=807 _globals['_RUNTIMEMETADATA']._serialized_start=810 - _globals['_RUNTIMEMETADATA']._serialized_end=982 - _globals['_RUNTIMEMETADATA_RUNTIMETYPE']._serialized_start=943 - _globals['_RUNTIMEMETADATA_RUNTIMETYPE']._serialized_end=982 - _globals['_TASKMETADATA']._serialized_start=985 - _globals['_TASKMETADATA']._serialized_end=1614 - _globals['_TASKMETADATA_TAGSENTRY']._serialized_start=1536 - _globals['_TASKMETADATA_TAGSENTRY']._serialized_end=1591 - _globals['_TASKTEMPLATE']._serialized_start=1617 - _globals['_TASKTEMPLATE']._serialized_end=2343 - _globals['_TASKTEMPLATE_CONFIGENTRY']._serialized_start=2276 - _globals['_TASKTEMPLATE_CONFIGENTRY']._serialized_end=2333 - _globals['_CONTAINERPORT']._serialized_start=2345 - _globals['_CONTAINERPORT']._serialized_end=2399 - _globals['_CONTAINER']._serialized_start=2402 - _globals['_CONTAINER']._serialized_end=2910 - _globals['_CONTAINER_ARCHITECTURE']._serialized_start=2837 - _globals['_CONTAINER_ARCHITECTURE']._serialized_end=2910 - _globals['_IOSTRATEGY']._serialized_start=2913 - _globals['_IOSTRATEGY']._serialized_end=3222 - _globals['_IOSTRATEGY_DOWNLOADMODE']._serialized_start=3075 - _globals['_IOSTRATEGY_DOWNLOADMODE']._serialized_end=3151 - _globals['_IOSTRATEGY_UPLOADMODE']._serialized_start=3153 - _globals['_IOSTRATEGY_UPLOADMODE']._serialized_end=3222 - _globals['_DATALOADINGCONFIG']._serialized_start=3225 - _globals['_DATALOADINGCONFIG']._serialized_end=3520 - _globals['_DATALOADINGCONFIG_LITERALMAPFORMAT']._serialized_start=3471 - _globals['_DATALOADINGCONFIG_LITERALMAPFORMAT']._serialized_end=3520 - _globals['_K8SPOD']._serialized_start=3523 - _globals['_K8SPOD']._serialized_end=3712 - _globals['_K8SOBJECTMETADATA']._serialized_start=3715 - _globals['_K8SOBJECTMETADATA']._serialized_end=4012 - _globals['_K8SOBJECTMETADATA_LABELSENTRY']._serialized_start=3891 - _globals['_K8SOBJECTMETADATA_LABELSENTRY']._serialized_end=3948 - _globals['_K8SOBJECTMETADATA_ANNOTATIONSENTRY']._serialized_start=3950 - _globals['_K8SOBJECTMETADATA_ANNOTATIONSENTRY']._serialized_end=4012 - _globals['_SQL']._serialized_start=4015 - _globals['_SQL']._serialized_end=4161 - _globals['_SQL_DIALECT']._serialized_start=4106 - _globals['_SQL_DIALECT']._serialized_end=4161 + _globals['_RUNTIMEMETADATA']._serialized_end=1020 + _globals['_RUNTIMEMETADATA_RUNTIMETYPE']._serialized_start=981 + _globals['_RUNTIMEMETADATA_RUNTIMETYPE']._serialized_end=1020 + _globals['_TASKMETADATA']._serialized_start=1023 + _globals['_TASKMETADATA']._serialized_end=1652 + _globals['_TASKMETADATA_TAGSENTRY']._serialized_start=1574 + _globals['_TASKMETADATA_TAGSENTRY']._serialized_end=1629 + _globals['_TASKTEMPLATE']._serialized_start=1655 + _globals['_TASKTEMPLATE']._serialized_end=2381 + _globals['_TASKTEMPLATE_CONFIGENTRY']._serialized_start=2314 + _globals['_TASKTEMPLATE_CONFIGENTRY']._serialized_end=2371 + _globals['_CONTAINERPORT']._serialized_start=2383 + _globals['_CONTAINERPORT']._serialized_end=2437 + _globals['_CONTAINER']._serialized_start=2440 + _globals['_CONTAINER']._serialized_end=2948 + _globals['_CONTAINER_ARCHITECTURE']._serialized_start=2875 + _globals['_CONTAINER_ARCHITECTURE']._serialized_end=2948 + _globals['_IOSTRATEGY']._serialized_start=2951 + _globals['_IOSTRATEGY']._serialized_end=3260 + _globals['_IOSTRATEGY_DOWNLOADMODE']._serialized_start=3113 + _globals['_IOSTRATEGY_DOWNLOADMODE']._serialized_end=3189 + _globals['_IOSTRATEGY_UPLOADMODE']._serialized_start=3191 + _globals['_IOSTRATEGY_UPLOADMODE']._serialized_end=3260 + _globals['_DATALOADINGCONFIG']._serialized_start=3263 + _globals['_DATALOADINGCONFIG']._serialized_end=3558 + _globals['_DATALOADINGCONFIG_LITERALMAPFORMAT']._serialized_start=3509 + _globals['_DATALOADINGCONFIG_LITERALMAPFORMAT']._serialized_end=3558 + _globals['_K8SPOD']._serialized_start=3561 + _globals['_K8SPOD']._serialized_end=3750 + _globals['_K8SOBJECTMETADATA']._serialized_start=3753 + _globals['_K8SOBJECTMETADATA']._serialized_end=4050 + _globals['_K8SOBJECTMETADATA_LABELSENTRY']._serialized_start=3929 + _globals['_K8SOBJECTMETADATA_LABELSENTRY']._serialized_end=3986 + _globals['_K8SOBJECTMETADATA_ANNOTATIONSENTRY']._serialized_start=3988 + _globals['_K8SOBJECTMETADATA_ANNOTATIONSENTRY']._serialized_end=4050 + _globals['_SQL']._serialized_start=4053 + _globals['_SQL']._serialized_end=4199 + _globals['_SQL_DIALECT']._serialized_start=4144 + _globals['_SQL_DIALECT']._serialized_end=4199 # @@protoc_insertion_point(module_scope) diff --git a/flyteidl/gen/pb_python/flyteidl/core/tasks_pb2.pyi b/flyteidl/gen/pb_python/flyteidl/core/tasks_pb2.pyi index 0545239443..05983b257f 100644 --- a/flyteidl/gen/pb_python/flyteidl/core/tasks_pb2.pyi +++ b/flyteidl/gen/pb_python/flyteidl/core/tasks_pb2.pyi @@ -58,7 +58,7 @@ class ExtendedResources(_message.Message): def __init__(self, gpu_accelerator: _Optional[_Union[GPUAccelerator, _Mapping]] = ...) -> None: ... class RuntimeMetadata(_message.Message): - __slots__ = ["type", "version", "flavor"] + __slots__ = ["type", "version", "flavor", "is_sync_plugin"] class RuntimeType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): __slots__ = [] OTHER: _ClassVar[RuntimeMetadata.RuntimeType] @@ -68,10 +68,12 @@ class RuntimeMetadata(_message.Message): TYPE_FIELD_NUMBER: _ClassVar[int] VERSION_FIELD_NUMBER: _ClassVar[int] FLAVOR_FIELD_NUMBER: _ClassVar[int] + IS_SYNC_PLUGIN_FIELD_NUMBER: _ClassVar[int] type: RuntimeMetadata.RuntimeType version: str flavor: str - def __init__(self, type: _Optional[_Union[RuntimeMetadata.RuntimeType, str]] = ..., version: _Optional[str] = ..., flavor: _Optional[str] = ...) -> None: ... + is_sync_plugin: bool + def __init__(self, type: _Optional[_Union[RuntimeMetadata.RuntimeType, str]] = ..., version: _Optional[str] = ..., flavor: _Optional[str] = ..., is_sync_plugin: bool = ...) -> None: ... class TaskMetadata(_message.Message): __slots__ = ["discoverable", "runtime", "timeout", "retries", "discovery_version", "deprecated_error_message", "interruptible", "cache_serializable", "generates_deck", "tags", "pod_template_name"] diff --git a/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/core_runtime_metadata.py b/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/core_runtime_metadata.py index 1d90ec3414..601d4b358e 100644 --- a/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/core_runtime_metadata.py +++ b/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/core_runtime_metadata.py @@ -35,21 +35,24 @@ class CoreRuntimeMetadata(object): swagger_types = { 'type': 'RuntimeMetadataRuntimeType', 'version': 'str', - 'flavor': 'str' + 'flavor': 'str', + 'is_sync_plugin': 'bool' } attribute_map = { 'type': 'type', 'version': 'version', - 'flavor': 'flavor' + 'flavor': 'flavor', + 'is_sync_plugin': 'is_sync_plugin' } - def __init__(self, type=None, version=None, flavor=None): # noqa: E501 + def __init__(self, type=None, version=None, flavor=None, is_sync_plugin=None): # noqa: E501 """CoreRuntimeMetadata - a model defined in Swagger""" # noqa: E501 self._type = None self._version = None self._flavor = None + self._is_sync_plugin = None self.discriminator = None if type is not None: @@ -58,6 +61,8 @@ def __init__(self, type=None, version=None, flavor=None): # noqa: E501 self.version = version if flavor is not None: self.flavor = flavor + if is_sync_plugin is not None: + self.is_sync_plugin = is_sync_plugin @property def type(self): @@ -109,7 +114,7 @@ def version(self, version): def flavor(self): """Gets the flavor of this CoreRuntimeMetadata. # noqa: E501 - +optional It can be used to provide extra information about the plugin type (e.g. async plugin, sync plugin... etc.). # noqa: E501 + +optional It can be used to provide extra information about the runtime (e.g. python, golang... etc.). # noqa: E501 :return: The flavor of this CoreRuntimeMetadata. # noqa: E501 :rtype: str @@ -120,7 +125,7 @@ def flavor(self): def flavor(self, flavor): """Sets the flavor of this CoreRuntimeMetadata. - +optional It can be used to provide extra information about the plugin type (e.g. async plugin, sync plugin... etc.). # noqa: E501 + +optional It can be used to provide extra information about the runtime (e.g. python, golang... etc.). # noqa: E501 :param flavor: The flavor of this CoreRuntimeMetadata. # noqa: E501 :type: str @@ -128,6 +133,29 @@ def flavor(self, flavor): self._flavor = flavor + @property + def is_sync_plugin(self): + """Gets the is_sync_plugin of this CoreRuntimeMetadata. # noqa: E501 + + +optional It can be used to decide use sync plugin or async plugin during runtime. # noqa: E501 + + :return: The is_sync_plugin of this CoreRuntimeMetadata. # noqa: E501 + :rtype: bool + """ + return self._is_sync_plugin + + @is_sync_plugin.setter + def is_sync_plugin(self, is_sync_plugin): + """Sets the is_sync_plugin of this CoreRuntimeMetadata. + + +optional It can be used to decide use sync plugin or async plugin during runtime. # noqa: E501 + + :param is_sync_plugin: The is_sync_plugin of this CoreRuntimeMetadata. # noqa: E501 + :type: bool + """ + + self._is_sync_plugin = is_sync_plugin + def to_dict(self): """Returns the model properties as a dict""" result = {} diff --git a/flyteidl/gen/pb_rust/flyteidl.core.rs b/flyteidl/gen/pb_rust/flyteidl.core.rs index a87354f86b..51f28d6ee6 100644 --- a/flyteidl/gen/pb_rust/flyteidl.core.rs +++ b/flyteidl/gen/pb_rust/flyteidl.core.rs @@ -1064,9 +1064,12 @@ pub struct RuntimeMetadata { /// checks to ensure tighter validation or setting expectations. #[prost(string, tag="2")] pub version: ::prost::alloc::string::String, - /// +optional It can be used to provide extra information about the plugin type (e.g. async plugin, sync plugin... etc.). + /// +optional It can be used to provide extra information about the runtime (e.g. python, golang... etc.). #[prost(string, tag="3")] pub flavor: ::prost::alloc::string::String, + /// +optional It can be used to decide use sync plugin or async plugin during runtime. + #[prost(bool, tag="4")] + pub is_sync_plugin: bool, } /// Nested message and enum types in `RuntimeMetadata`. pub mod runtime_metadata { diff --git a/flyteidl/protos/flyteidl/core/tasks.proto b/flyteidl/protos/flyteidl/core/tasks.proto index 64b18a7a3f..f3f72243be 100644 --- a/flyteidl/protos/flyteidl/core/tasks.proto +++ b/flyteidl/protos/flyteidl/core/tasks.proto @@ -82,8 +82,11 @@ message RuntimeMetadata { // checks to ensure tighter validation or setting expectations. string version = 2; - //+optional It can be used to provide extra information about the plugin type (e.g. async plugin, sync plugin... etc.). + //+optional It can be used to provide extra information about the runtime (e.g. python, golang... etc.). string flavor = 3; + + //+optional It can be used to decide use sync plugin or async plugin during runtime. + bool is_sync_plugin = 4; } // Task Metadata diff --git a/flyteplugins/go/tasks/plugins/webapi/agent/plugin_test.go b/flyteplugins/go/tasks/plugins/webapi/agent/plugin_test.go index 8c15cfc97d..ece757055f 100644 --- a/flyteplugins/go/tasks/plugins/webapi/agent/plugin_test.go +++ b/flyteplugins/go/tasks/plugins/webapi/agent/plugin_test.go @@ -30,7 +30,7 @@ func TestDo(t *testing.T) { Type: "api_task", Metadata: &flyteIdlCore.TaskMetadata{ Runtime: &flyteIdlCore.RuntimeMetadata{ - Flavor: "sync_plugin", + IsSyncPlugin: true, }, }, } From 173dd3aa939c3e6ae9331e47b3af7b8ba3dc9b96 Mon Sep 17 00:00:00 2001 From: Future Outlier Date: Wed, 22 Nov 2023 12:35:28 +0800 Subject: [PATCH 34/48] use new proto, pluginMetadata Signed-off-by: Future Outlier --- flyteidl/gen/pb-cpp/flyteidl/core/tasks.pb.cc | 572 ++++++-- flyteidl/gen/pb-cpp/flyteidl/core/tasks.pb.h | 220 +++- flyteidl/gen/pb-go/flyteidl/core/tasks.pb.go | 308 +++-- .../pb-go/flyteidl/core/tasks.pb.validate.go | 77 +- .../pb-go/flyteidl/service/admin.swagger.json | 17 +- .../pb-go/flyteidl/service/agent.swagger.json | 17 +- .../external_plugin_service.swagger.json | 17 +- .../flyteidl/service/flyteadmin/README.md | 1 + .../service/flyteadmin/api/swagger.yaml | 85 +- .../flyteadmin/model_core_plugin_metadata.go | 15 + .../flyteadmin/model_core_runtime_metadata.go | 4 +- .../gen/pb-go/flyteidl/service/openapi.go | 4 +- flyteidl/gen/pb-java/flyteidl/core/Tasks.java | 1169 +++++++++++++---- flyteidl/gen/pb-js/flyteidl.d.ts | 60 +- flyteidl/gen/pb-js/flyteidl.js | 132 +- .../gen/pb_python/flyteidl/core/tasks_pb2.py | 82 +- .../gen/pb_python/flyteidl/core/tasks_pb2.pyi | 12 +- .../flyteidl/service/flyteadmin/README.md | 1 + .../service/flyteadmin/flyteadmin/__init__.py | 1 + .../flyteadmin/flyteadmin/models/__init__.py | 1 + .../flyteadmin/models/core_plugin_metadata.py | 117 ++ .../models/core_runtime_metadata.py | 39 +- .../test/test_core_plugin_metadata.py | 40 + flyteidl/gen/pb_rust/flyteidl.core.rs | 13 +- flyteidl/protos/flyteidl/core/tasks.proto | 7 +- .../pluginmachinery/internal/webapi/core.go | 5 +- .../internal/webapi/core_test.go | 4 +- .../tasks/plugins/webapi/agent/plugin_test.go | 4 +- 28 files changed, 2368 insertions(+), 656 deletions(-) create mode 100644 flyteidl/gen/pb-go/flyteidl/service/flyteadmin/model_core_plugin_metadata.go create mode 100644 flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/core_plugin_metadata.py create mode 100644 flyteidl/gen/pb_python/flyteidl/service/flyteadmin/test/test_core_plugin_metadata.py diff --git a/flyteidl/gen/pb-cpp/flyteidl/core/tasks.pb.cc b/flyteidl/gen/pb-cpp/flyteidl/core/tasks.pb.cc index d202f3cd98..e2a8bacc5e 100644 --- a/flyteidl/gen/pb-cpp/flyteidl/core/tasks.pb.cc +++ b/flyteidl/gen/pb-cpp/flyteidl/core/tasks.pb.cc @@ -26,14 +26,15 @@ extern PROTOBUF_INTERNAL_EXPORT_flyteidl_2fcore_2ftasks_2eproto ::google::protob extern PROTOBUF_INTERNAL_EXPORT_flyteidl_2fcore_2ftasks_2eproto ::google::protobuf::internal::SCCInfo<0> scc_info_IOStrategy_flyteidl_2fcore_2ftasks_2eproto; extern PROTOBUF_INTERNAL_EXPORT_flyteidl_2fcore_2ftasks_2eproto ::google::protobuf::internal::SCCInfo<0> scc_info_K8sObjectMetadata_AnnotationsEntry_DoNotUse_flyteidl_2fcore_2ftasks_2eproto; extern PROTOBUF_INTERNAL_EXPORT_flyteidl_2fcore_2ftasks_2eproto ::google::protobuf::internal::SCCInfo<0> scc_info_K8sObjectMetadata_LabelsEntry_DoNotUse_flyteidl_2fcore_2ftasks_2eproto; +extern PROTOBUF_INTERNAL_EXPORT_flyteidl_2fcore_2ftasks_2eproto ::google::protobuf::internal::SCCInfo<0> scc_info_PluginMetadata_flyteidl_2fcore_2ftasks_2eproto; extern PROTOBUF_INTERNAL_EXPORT_flyteidl_2fcore_2ftasks_2eproto ::google::protobuf::internal::SCCInfo<0> scc_info_Resources_ResourceEntry_flyteidl_2fcore_2ftasks_2eproto; -extern PROTOBUF_INTERNAL_EXPORT_flyteidl_2fcore_2ftasks_2eproto ::google::protobuf::internal::SCCInfo<0> scc_info_RuntimeMetadata_flyteidl_2fcore_2ftasks_2eproto; extern PROTOBUF_INTERNAL_EXPORT_flyteidl_2fcore_2ftasks_2eproto ::google::protobuf::internal::SCCInfo<0> scc_info_Sql_flyteidl_2fcore_2ftasks_2eproto; extern PROTOBUF_INTERNAL_EXPORT_flyteidl_2fcore_2ftasks_2eproto ::google::protobuf::internal::SCCInfo<0> scc_info_TaskMetadata_TagsEntry_DoNotUse_flyteidl_2fcore_2ftasks_2eproto; extern PROTOBUF_INTERNAL_EXPORT_flyteidl_2fcore_2ftasks_2eproto ::google::protobuf::internal::SCCInfo<0> scc_info_TaskTemplate_ConfigEntry_DoNotUse_flyteidl_2fcore_2ftasks_2eproto; extern PROTOBUF_INTERNAL_EXPORT_flyteidl_2fcore_2ftasks_2eproto ::google::protobuf::internal::SCCInfo<1> scc_info_DataLoadingConfig_flyteidl_2fcore_2ftasks_2eproto; extern PROTOBUF_INTERNAL_EXPORT_flyteidl_2fcore_2ftasks_2eproto ::google::protobuf::internal::SCCInfo<1> scc_info_ExtendedResources_flyteidl_2fcore_2ftasks_2eproto; extern PROTOBUF_INTERNAL_EXPORT_flyteidl_2fcore_2ftasks_2eproto ::google::protobuf::internal::SCCInfo<1> scc_info_Resources_flyteidl_2fcore_2ftasks_2eproto; +extern PROTOBUF_INTERNAL_EXPORT_flyteidl_2fcore_2ftasks_2eproto ::google::protobuf::internal::SCCInfo<1> scc_info_RuntimeMetadata_flyteidl_2fcore_2ftasks_2eproto; extern PROTOBUF_INTERNAL_EXPORT_flyteidl_2fcore_2ftasks_2eproto ::google::protobuf::internal::SCCInfo<2> scc_info_K8sObjectMetadata_flyteidl_2fcore_2ftasks_2eproto; extern PROTOBUF_INTERNAL_EXPORT_flyteidl_2fcore_2ftasks_2eproto ::google::protobuf::internal::SCCInfo<3> scc_info_K8sPod_flyteidl_2fcore_2ftasks_2eproto; extern PROTOBUF_INTERNAL_EXPORT_flyteidl_2fcore_2ftasks_2eproto ::google::protobuf::internal::SCCInfo<4> scc_info_Container_flyteidl_2fcore_2ftasks_2eproto; @@ -64,6 +65,10 @@ class RuntimeMetadataDefaultTypeInternal { public: ::google::protobuf::internal::ExplicitlyConstructed _instance; } _RuntimeMetadata_default_instance_; +class PluginMetadataDefaultTypeInternal { + public: + ::google::protobuf::internal::ExplicitlyConstructed _instance; +} _PluginMetadata_default_instance_; class TaskMetadata_TagsEntry_DoNotUseDefaultTypeInternal { public: ::google::protobuf::internal::ExplicitlyConstructed _instance; @@ -191,8 +196,23 @@ static void InitDefaultsRuntimeMetadata_flyteidl_2fcore_2ftasks_2eproto() { ::flyteidl::core::RuntimeMetadata::InitAsDefaultInstance(); } -::google::protobuf::internal::SCCInfo<0> scc_info_RuntimeMetadata_flyteidl_2fcore_2ftasks_2eproto = - {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 0, InitDefaultsRuntimeMetadata_flyteidl_2fcore_2ftasks_2eproto}, {}}; +::google::protobuf::internal::SCCInfo<1> scc_info_RuntimeMetadata_flyteidl_2fcore_2ftasks_2eproto = + {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 1, InitDefaultsRuntimeMetadata_flyteidl_2fcore_2ftasks_2eproto}, { + &scc_info_PluginMetadata_flyteidl_2fcore_2ftasks_2eproto.base,}}; + +static void InitDefaultsPluginMetadata_flyteidl_2fcore_2ftasks_2eproto() { + GOOGLE_PROTOBUF_VERIFY_VERSION; + + { + void* ptr = &::flyteidl::core::_PluginMetadata_default_instance_; + new (ptr) ::flyteidl::core::PluginMetadata(); + ::google::protobuf::internal::OnShutdownDestroyMessage(ptr); + } + ::flyteidl::core::PluginMetadata::InitAsDefaultInstance(); +} + +::google::protobuf::internal::SCCInfo<0> scc_info_PluginMetadata_flyteidl_2fcore_2ftasks_2eproto = + {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 0, InitDefaultsPluginMetadata_flyteidl_2fcore_2ftasks_2eproto}, {}}; static void InitDefaultsTaskMetadata_TagsEntry_DoNotUse_flyteidl_2fcore_2ftasks_2eproto() { GOOGLE_PROTOBUF_VERIFY_VERSION; @@ -402,6 +422,7 @@ void InitDefaults_flyteidl_2fcore_2ftasks_2eproto() { ::google::protobuf::internal::InitSCC(&scc_info_GPUAccelerator_flyteidl_2fcore_2ftasks_2eproto.base); ::google::protobuf::internal::InitSCC(&scc_info_ExtendedResources_flyteidl_2fcore_2ftasks_2eproto.base); ::google::protobuf::internal::InitSCC(&scc_info_RuntimeMetadata_flyteidl_2fcore_2ftasks_2eproto.base); + ::google::protobuf::internal::InitSCC(&scc_info_PluginMetadata_flyteidl_2fcore_2ftasks_2eproto.base); ::google::protobuf::internal::InitSCC(&scc_info_TaskMetadata_TagsEntry_DoNotUse_flyteidl_2fcore_2ftasks_2eproto.base); ::google::protobuf::internal::InitSCC(&scc_info_TaskMetadata_flyteidl_2fcore_2ftasks_2eproto.base); ::google::protobuf::internal::InitSCC(&scc_info_TaskTemplate_ConfigEntry_DoNotUse_flyteidl_2fcore_2ftasks_2eproto.base); @@ -417,7 +438,7 @@ void InitDefaults_flyteidl_2fcore_2ftasks_2eproto() { ::google::protobuf::internal::InitSCC(&scc_info_Sql_flyteidl_2fcore_2ftasks_2eproto.base); } -::google::protobuf::Metadata file_level_metadata_flyteidl_2fcore_2ftasks_2eproto[18]; +::google::protobuf::Metadata file_level_metadata_flyteidl_2fcore_2ftasks_2eproto[19]; const ::google::protobuf::EnumDescriptor* file_level_enum_descriptors_flyteidl_2fcore_2ftasks_2eproto[7]; constexpr ::google::protobuf::ServiceDescriptor const** file_level_service_descriptors_flyteidl_2fcore_2ftasks_2eproto = nullptr; @@ -459,7 +480,13 @@ const ::google::protobuf::uint32 TableStruct_flyteidl_2fcore_2ftasks_2eproto::of PROTOBUF_FIELD_OFFSET(::flyteidl::core::RuntimeMetadata, type_), PROTOBUF_FIELD_OFFSET(::flyteidl::core::RuntimeMetadata, version_), PROTOBUF_FIELD_OFFSET(::flyteidl::core::RuntimeMetadata, flavor_), - PROTOBUF_FIELD_OFFSET(::flyteidl::core::RuntimeMetadata, is_sync_plugin_), + PROTOBUF_FIELD_OFFSET(::flyteidl::core::RuntimeMetadata, plugin_metadata_), + ~0u, // no _has_bits_ + PROTOBUF_FIELD_OFFSET(::flyteidl::core::PluginMetadata, _internal_metadata_), + ~0u, // no _extensions_ + ~0u, // no _oneof_case_ + ~0u, // no _weak_field_map_ + PROTOBUF_FIELD_OFFSET(::flyteidl::core::PluginMetadata, is_sync_plugin_), PROTOBUF_FIELD_OFFSET(::flyteidl::core::TaskMetadata_TagsEntry_DoNotUse, _has_bits_), PROTOBUF_FIELD_OFFSET(::flyteidl::core::TaskMetadata_TagsEntry_DoNotUse, _internal_metadata_), ~0u, // no _extensions_ @@ -597,19 +624,20 @@ static const ::google::protobuf::internal::MigrationSchema schemas[] PROTOBUF_SE { 14, -1, sizeof(::flyteidl::core::GPUAccelerator)}, { 23, -1, sizeof(::flyteidl::core::ExtendedResources)}, { 29, -1, sizeof(::flyteidl::core::RuntimeMetadata)}, - { 38, 45, sizeof(::flyteidl::core::TaskMetadata_TagsEntry_DoNotUse)}, - { 47, -1, sizeof(::flyteidl::core::TaskMetadata)}, - { 64, 71, sizeof(::flyteidl::core::TaskTemplate_ConfigEntry_DoNotUse)}, - { 73, -1, sizeof(::flyteidl::core::TaskTemplate)}, - { 91, -1, sizeof(::flyteidl::core::ContainerPort)}, - { 97, -1, sizeof(::flyteidl::core::Container)}, - { 111, -1, sizeof(::flyteidl::core::IOStrategy)}, - { 118, -1, sizeof(::flyteidl::core::DataLoadingConfig)}, - { 128, -1, sizeof(::flyteidl::core::K8sPod)}, - { 136, 143, sizeof(::flyteidl::core::K8sObjectMetadata_LabelsEntry_DoNotUse)}, - { 145, 152, sizeof(::flyteidl::core::K8sObjectMetadata_AnnotationsEntry_DoNotUse)}, - { 154, -1, sizeof(::flyteidl::core::K8sObjectMetadata)}, - { 161, -1, sizeof(::flyteidl::core::Sql)}, + { 38, -1, sizeof(::flyteidl::core::PluginMetadata)}, + { 44, 51, sizeof(::flyteidl::core::TaskMetadata_TagsEntry_DoNotUse)}, + { 53, -1, sizeof(::flyteidl::core::TaskMetadata)}, + { 70, 77, sizeof(::flyteidl::core::TaskTemplate_ConfigEntry_DoNotUse)}, + { 79, -1, sizeof(::flyteidl::core::TaskTemplate)}, + { 97, -1, sizeof(::flyteidl::core::ContainerPort)}, + { 103, -1, sizeof(::flyteidl::core::Container)}, + { 117, -1, sizeof(::flyteidl::core::IOStrategy)}, + { 124, -1, sizeof(::flyteidl::core::DataLoadingConfig)}, + { 134, -1, sizeof(::flyteidl::core::K8sPod)}, + { 142, 149, sizeof(::flyteidl::core::K8sObjectMetadata_LabelsEntry_DoNotUse)}, + { 151, 158, sizeof(::flyteidl::core::K8sObjectMetadata_AnnotationsEntry_DoNotUse)}, + { 160, -1, sizeof(::flyteidl::core::K8sObjectMetadata)}, + { 167, -1, sizeof(::flyteidl::core::Sql)}, }; static ::google::protobuf::Message const * const file_default_instances[] = { @@ -618,6 +646,7 @@ static ::google::protobuf::Message const * const file_default_instances[] = { reinterpret_cast(&::flyteidl::core::_GPUAccelerator_default_instance_), reinterpret_cast(&::flyteidl::core::_ExtendedResources_default_instance_), reinterpret_cast(&::flyteidl::core::_RuntimeMetadata_default_instance_), + reinterpret_cast(&::flyteidl::core::_PluginMetadata_default_instance_), reinterpret_cast(&::flyteidl::core::_TaskMetadata_TagsEntry_DoNotUse_default_instance_), reinterpret_cast(&::flyteidl::core::_TaskMetadata_default_instance_), reinterpret_cast(&::flyteidl::core::_TaskTemplate_ConfigEntry_DoNotUse_default_instance_), @@ -636,7 +665,7 @@ static ::google::protobuf::Message const * const file_default_instances[] = { ::google::protobuf::internal::AssignDescriptorsTable assign_descriptors_table_flyteidl_2fcore_2ftasks_2eproto = { {}, AddDescriptors_flyteidl_2fcore_2ftasks_2eproto, "flyteidl/core/tasks.proto", schemas, file_default_instances, TableStruct_flyteidl_2fcore_2ftasks_2eproto::offsets, - file_level_metadata_flyteidl_2fcore_2ftasks_2eproto, 18, file_level_enum_descriptors_flyteidl_2fcore_2ftasks_2eproto, file_level_service_descriptors_flyteidl_2fcore_2ftasks_2eproto, + file_level_metadata_flyteidl_2fcore_2ftasks_2eproto, 19, file_level_enum_descriptors_flyteidl_2fcore_2ftasks_2eproto, file_level_service_descriptors_flyteidl_2fcore_2ftasks_2eproto, }; const char descriptor_table_protodef_flyteidl_2fcore_2ftasks_2eproto[] = @@ -658,83 +687,85 @@ const char descriptor_table_protodef_flyteidl_2fcore_2ftasks_2eproto[] = "rtition_size\030\003 \001(\tH\000B\026\n\024partition_size_v" "alue\"K\n\021ExtendedResources\0226\n\017gpu_acceler" "ator\030\001 \001(\0132\035.flyteidl.core.GPUAccelerato" - "r\"\255\001\n\017RuntimeMetadata\0228\n\004type\030\001 \001(\0162*.fl" + "r\"\315\001\n\017RuntimeMetadata\0228\n\004type\030\001 \001(\0162*.fl" "yteidl.core.RuntimeMetadata.RuntimeType\022" - "\017\n\007version\030\002 \001(\t\022\016\n\006flavor\030\003 \001(\t\022\026\n\016is_s" - "ync_plugin\030\004 \001(\010\"\'\n\013RuntimeType\022\t\n\005OTHER" - "\020\000\022\r\n\tFLYTE_SDK\020\001\"\316\003\n\014TaskMetadata\022\024\n\014di" - "scoverable\030\001 \001(\010\022/\n\007runtime\030\002 \001(\0132\036.flyt" - "eidl.core.RuntimeMetadata\022*\n\007timeout\030\004 \001" - "(\0132\031.google.protobuf.Duration\022-\n\007retries" - "\030\005 \001(\0132\034.flyteidl.core.RetryStrategy\022\031\n\021" - "discovery_version\030\006 \001(\t\022 \n\030deprecated_er" - "ror_message\030\007 \001(\t\022\027\n\rinterruptible\030\010 \001(\010" - "H\000\022\032\n\022cache_serializable\030\t \001(\010\022\026\n\016genera" - "tes_deck\030\n \001(\010\0223\n\004tags\030\013 \003(\0132%.flyteidl." - "core.TaskMetadata.TagsEntry\022\031\n\021pod_templ" - "ate_name\030\014 \001(\t\032+\n\tTagsEntry\022\013\n\003key\030\001 \001(\t" - "\022\r\n\005value\030\002 \001(\t:\0028\001B\025\n\023interruptible_val" - "ue\"\316\004\n\014TaskTemplate\022%\n\002id\030\001 \001(\0132\031.flytei" - "dl.core.Identifier\022\014\n\004type\030\002 \001(\t\022-\n\010meta" - "data\030\003 \001(\0132\033.flyteidl.core.TaskMetadata\022" - "0\n\tinterface\030\004 \001(\0132\035.flyteidl.core.Typed" - "Interface\022\'\n\006custom\030\005 \001(\0132\027.google.proto" - "buf.Struct\022-\n\tcontainer\030\006 \001(\0132\030.flyteidl" - ".core.ContainerH\000\022(\n\007k8s_pod\030\021 \001(\0132\025.fly" - "teidl.core.K8sPodH\000\022!\n\003sql\030\022 \001(\0132\022.flyte" - "idl.core.SqlH\000\022\031\n\021task_type_version\030\007 \001(" - "\005\0228\n\020security_context\030\010 \001(\0132\036.flyteidl.c" - "ore.SecurityContext\022<\n\022extended_resource" - "s\030\t \001(\0132 .flyteidl.core.ExtendedResource" - "s\0227\n\006config\030\020 \003(\0132\'.flyteidl.core.TaskTe" - "mplate.ConfigEntry\032-\n\013ConfigEntry\022\013\n\003key" - "\030\001 \001(\t\022\r\n\005value\030\002 \001(\t:\0028\001B\010\n\006target\"\'\n\rC" - "ontainerPort\022\026\n\016container_port\030\001 \001(\r\"\255\003\n" - "\tContainer\022\r\n\005image\030\001 \001(\t\022\017\n\007command\030\002 \003" - "(\t\022\014\n\004args\030\003 \003(\t\022+\n\tresources\030\004 \001(\0132\030.fl" - "yteidl.core.Resources\022(\n\003env\030\005 \003(\0132\033.fly" - "teidl.core.KeyValuePair\022/\n\006config\030\006 \003(\0132" - "\033.flyteidl.core.KeyValuePairB\002\030\001\022+\n\005port" - "s\030\007 \003(\0132\034.flyteidl.core.ContainerPort\0225\n" - "\013data_config\030\t \001(\0132 .flyteidl.core.DataL" - "oadingConfig\022;\n\014architecture\030\n \001(\0162%.fly" - "teidl.core.Container.Architecture\"I\n\014Arc" - "hitecture\022\013\n\007UNKNOWN\020\000\022\t\n\005AMD64\020\001\022\t\n\005ARM" - "64\020\002\022\n\n\006ARM_V6\020\003\022\n\n\006ARM_V7\020\004\"\233\002\n\nIOStrat" - "egy\022=\n\rdownload_mode\030\001 \001(\0162&.flyteidl.co" - "re.IOStrategy.DownloadMode\0229\n\013upload_mod" - "e\030\002 \001(\0162$.flyteidl.core.IOStrategy.Uploa" - "dMode\"L\n\014DownloadMode\022\022\n\016DOWNLOAD_EAGER\020" - "\000\022\023\n\017DOWNLOAD_STREAM\020\001\022\023\n\017DO_NOT_DOWNLOA" - "D\020\002\"E\n\nUploadMode\022\022\n\016UPLOAD_ON_EXIT\020\000\022\020\n" - "\014UPLOAD_EAGER\020\001\022\021\n\rDO_NOT_UPLOAD\020\002\"\363\001\n\021D" - "ataLoadingConfig\022\017\n\007enabled\030\001 \001(\010\022\022\n\ninp" - "ut_path\030\002 \001(\t\022\023\n\013output_path\030\003 \001(\t\022A\n\006fo" - "rmat\030\004 \001(\01621.flyteidl.core.DataLoadingCo" - "nfig.LiteralMapFormat\022.\n\013io_strategy\030\005 \001" - "(\0132\031.flyteidl.core.IOStrategy\"1\n\020Literal" - "MapFormat\022\010\n\004JSON\020\000\022\010\n\004YAML\020\001\022\t\n\005PROTO\020\002" - "\"\236\001\n\006K8sPod\0222\n\010metadata\030\001 \001(\0132 .flyteidl" - ".core.K8sObjectMetadata\022)\n\010pod_spec\030\002 \001(" - "\0132\027.google.protobuf.Struct\0225\n\013data_confi" - "g\030\003 \001(\0132 .flyteidl.core.DataLoadingConfi" - "g\"\374\001\n\021K8sObjectMetadata\022<\n\006labels\030\001 \003(\0132" - ",.flyteidl.core.K8sObjectMetadata.Labels" - "Entry\022F\n\013annotations\030\002 \003(\01321.flyteidl.co" - "re.K8sObjectMetadata.AnnotationsEntry\032-\n" - "\013LabelsEntry\022\013\n\003key\030\001 \001(\t\022\r\n\005value\030\002 \001(\t" - ":\0028\001\0322\n\020AnnotationsEntry\022\013\n\003key\030\001 \001(\t\022\r\n" - "\005value\030\002 \001(\t:\0028\001\"~\n\003Sql\022\021\n\tstatement\030\001 \001" - "(\t\022+\n\007dialect\030\002 \001(\0162\032.flyteidl.core.Sql." - "Dialect\"7\n\007Dialect\022\r\n\tUNDEFINED\020\000\022\010\n\004ANS" - "I\020\001\022\010\n\004HIVE\020\002\022\t\n\005OTHER\020\003Bplugin_metadata_ = const_cast< ::flyteidl::core::PluginMetadata*>( + ::flyteidl::core::PluginMetadata::internal_default_instance()); } class RuntimeMetadata::HasBitSetters { public: + static const ::flyteidl::core::PluginMetadata& plugin_metadata(const RuntimeMetadata* msg); }; +const ::flyteidl::core::PluginMetadata& +RuntimeMetadata::HasBitSetters::plugin_metadata(const RuntimeMetadata* msg) { + return *msg->plugin_metadata_; +} #if !defined(_MSC_VER) || _MSC_VER >= 1900 const int RuntimeMetadata::kTypeFieldNumber; const int RuntimeMetadata::kVersionFieldNumber; const int RuntimeMetadata::kFlavorFieldNumber; -const int RuntimeMetadata::kIsSyncPluginFieldNumber; +const int RuntimeMetadata::kPluginMetadataFieldNumber; #endif // !defined(_MSC_VER) || _MSC_VER >= 1900 RuntimeMetadata::RuntimeMetadata() @@ -2385,9 +2423,12 @@ RuntimeMetadata::RuntimeMetadata(const RuntimeMetadata& from) if (from.flavor().size() > 0) { flavor_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.flavor_); } - ::memcpy(&type_, &from.type_, - static_cast(reinterpret_cast(&is_sync_plugin_) - - reinterpret_cast(&type_)) + sizeof(is_sync_plugin_)); + if (from.has_plugin_metadata()) { + plugin_metadata_ = new ::flyteidl::core::PluginMetadata(*from.plugin_metadata_); + } else { + plugin_metadata_ = nullptr; + } + type_ = from.type_; // @@protoc_insertion_point(copy_constructor:flyteidl.core.RuntimeMetadata) } @@ -2396,9 +2437,9 @@ void RuntimeMetadata::SharedCtor() { &scc_info_RuntimeMetadata_flyteidl_2fcore_2ftasks_2eproto.base); version_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); flavor_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - ::memset(&type_, 0, static_cast( - reinterpret_cast(&is_sync_plugin_) - - reinterpret_cast(&type_)) + sizeof(is_sync_plugin_)); + ::memset(&plugin_metadata_, 0, static_cast( + reinterpret_cast(&type_) - + reinterpret_cast(&plugin_metadata_)) + sizeof(type_)); } RuntimeMetadata::~RuntimeMetadata() { @@ -2409,6 +2450,7 @@ RuntimeMetadata::~RuntimeMetadata() { void RuntimeMetadata::SharedDtor() { version_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); flavor_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + if (this != internal_default_instance()) delete plugin_metadata_; } void RuntimeMetadata::SetCachedSize(int size) const { @@ -2428,9 +2470,11 @@ void RuntimeMetadata::Clear() { version_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); flavor_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - ::memset(&type_, 0, static_cast( - reinterpret_cast(&is_sync_plugin_) - - reinterpret_cast(&type_)) + sizeof(is_sync_plugin_)); + if (GetArenaNoVirtual() == nullptr && plugin_metadata_ != nullptr) { + delete plugin_metadata_; + } + plugin_metadata_ = nullptr; + type_ = 0; _internal_metadata_.Clear(); } @@ -2487,11 +2531,17 @@ const char* RuntimeMetadata::_InternalParse(const char* begin, const char* end, ptr += size; break; } - // bool is_sync_plugin = 4; + // .flyteidl.core.PluginMetadata plugin_metadata = 4; case 4: { - if (static_cast<::google::protobuf::uint8>(tag) != 32) goto handle_unusual; - msg->set_is_sync_plugin(::google::protobuf::internal::ReadVarint(&ptr)); + if (static_cast<::google::protobuf::uint8>(tag) != 34) goto handle_unusual; + ptr = ::google::protobuf::io::ReadSize(ptr, &size); GOOGLE_PROTOBUF_PARSER_ASSERT(ptr); + parser_till_end = ::flyteidl::core::PluginMetadata::_InternalParse; + object = msg->mutable_plugin_metadata(); + if (size > end - ptr) goto len_delim_till_end; + ptr += size; + GOOGLE_PROTOBUF_PARSER_ASSERT(ctx->ParseExactRange( + {parser_till_end, object}, ptr - size, ptr)); break; } default: { @@ -2572,13 +2622,11 @@ bool RuntimeMetadata::MergePartialFromCodedStream( break; } - // bool is_sync_plugin = 4; + // .flyteidl.core.PluginMetadata plugin_metadata = 4; case 4: { - if (static_cast< ::google::protobuf::uint8>(tag) == (32 & 0xFF)) { - - DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive< - bool, ::google::protobuf::internal::WireFormatLite::TYPE_BOOL>( - input, &is_sync_plugin_))); + if (static_cast< ::google::protobuf::uint8>(tag) == (34 & 0xFF)) { + DO_(::google::protobuf::internal::WireFormatLite::ReadMessage( + input, mutable_plugin_metadata())); } else { goto handle_unusual; } @@ -2638,9 +2686,10 @@ void RuntimeMetadata::SerializeWithCachedSizes( 3, this->flavor(), output); } - // bool is_sync_plugin = 4; - if (this->is_sync_plugin() != 0) { - ::google::protobuf::internal::WireFormatLite::WriteBool(4, this->is_sync_plugin(), output); + // .flyteidl.core.PluginMetadata plugin_metadata = 4; + if (this->has_plugin_metadata()) { + ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray( + 4, HasBitSetters::plugin_metadata(this), output); } if (_internal_metadata_.have_unknown_fields()) { @@ -2684,9 +2733,11 @@ ::google::protobuf::uint8* RuntimeMetadata::InternalSerializeWithCachedSizesToAr 3, this->flavor(), target); } - // bool is_sync_plugin = 4; - if (this->is_sync_plugin() != 0) { - target = ::google::protobuf::internal::WireFormatLite::WriteBoolToArray(4, this->is_sync_plugin(), target); + // .flyteidl.core.PluginMetadata plugin_metadata = 4; + if (this->has_plugin_metadata()) { + target = ::google::protobuf::internal::WireFormatLite:: + InternalWriteMessageToArray( + 4, HasBitSetters::plugin_metadata(this), target); } if (_internal_metadata_.have_unknown_fields()) { @@ -2724,17 +2775,19 @@ size_t RuntimeMetadata::ByteSizeLong() const { this->flavor()); } + // .flyteidl.core.PluginMetadata plugin_metadata = 4; + if (this->has_plugin_metadata()) { + total_size += 1 + + ::google::protobuf::internal::WireFormatLite::MessageSize( + *plugin_metadata_); + } + // .flyteidl.core.RuntimeMetadata.RuntimeType type = 1; if (this->type() != 0) { total_size += 1 + ::google::protobuf::internal::WireFormatLite::EnumSize(this->type()); } - // bool is_sync_plugin = 4; - if (this->is_sync_plugin() != 0) { - total_size += 1 + 1; - } - int cached_size = ::google::protobuf::internal::ToCachedSize(total_size); SetCachedSize(cached_size); return total_size; @@ -2770,12 +2823,12 @@ void RuntimeMetadata::MergeFrom(const RuntimeMetadata& from) { flavor_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.flavor_); } + if (from.has_plugin_metadata()) { + mutable_plugin_metadata()->::flyteidl::core::PluginMetadata::MergeFrom(from.plugin_metadata()); + } if (from.type() != 0) { set_type(from.type()); } - if (from.is_sync_plugin() != 0) { - set_is_sync_plugin(from.is_sync_plugin()); - } } void RuntimeMetadata::CopyFrom(const ::google::protobuf::Message& from) { @@ -2807,8 +2860,8 @@ void RuntimeMetadata::InternalSwap(RuntimeMetadata* other) { GetArenaNoVirtual()); flavor_.Swap(&other->flavor_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(), GetArenaNoVirtual()); + swap(plugin_metadata_, other->plugin_metadata_); swap(type_, other->type_); - swap(is_sync_plugin_, other->is_sync_plugin_); } ::google::protobuf::Metadata RuntimeMetadata::GetMetadata() const { @@ -2817,6 +2870,264 @@ ::google::protobuf::Metadata RuntimeMetadata::GetMetadata() const { } +// =================================================================== + +void PluginMetadata::InitAsDefaultInstance() { +} +class PluginMetadata::HasBitSetters { + public: +}; + +#if !defined(_MSC_VER) || _MSC_VER >= 1900 +const int PluginMetadata::kIsSyncPluginFieldNumber; +#endif // !defined(_MSC_VER) || _MSC_VER >= 1900 + +PluginMetadata::PluginMetadata() + : ::google::protobuf::Message(), _internal_metadata_(nullptr) { + SharedCtor(); + // @@protoc_insertion_point(constructor:flyteidl.core.PluginMetadata) +} +PluginMetadata::PluginMetadata(const PluginMetadata& from) + : ::google::protobuf::Message(), + _internal_metadata_(nullptr) { + _internal_metadata_.MergeFrom(from._internal_metadata_); + is_sync_plugin_ = from.is_sync_plugin_; + // @@protoc_insertion_point(copy_constructor:flyteidl.core.PluginMetadata) +} + +void PluginMetadata::SharedCtor() { + is_sync_plugin_ = false; +} + +PluginMetadata::~PluginMetadata() { + // @@protoc_insertion_point(destructor:flyteidl.core.PluginMetadata) + SharedDtor(); +} + +void PluginMetadata::SharedDtor() { +} + +void PluginMetadata::SetCachedSize(int size) const { + _cached_size_.Set(size); +} +const PluginMetadata& PluginMetadata::default_instance() { + ::google::protobuf::internal::InitSCC(&::scc_info_PluginMetadata_flyteidl_2fcore_2ftasks_2eproto.base); + return *internal_default_instance(); +} + + +void PluginMetadata::Clear() { +// @@protoc_insertion_point(message_clear_start:flyteidl.core.PluginMetadata) + ::google::protobuf::uint32 cached_has_bits = 0; + // Prevent compiler warnings about cached_has_bits being unused + (void) cached_has_bits; + + is_sync_plugin_ = false; + _internal_metadata_.Clear(); +} + +#if GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER +const char* PluginMetadata::_InternalParse(const char* begin, const char* end, void* object, + ::google::protobuf::internal::ParseContext* ctx) { + auto msg = static_cast(object); + ::google::protobuf::int32 size; (void)size; + int depth; (void)depth; + ::google::protobuf::uint32 tag; + ::google::protobuf::internal::ParseFunc parser_till_end; (void)parser_till_end; + auto ptr = begin; + while (ptr < end) { + ptr = ::google::protobuf::io::Parse32(ptr, &tag); + GOOGLE_PROTOBUF_PARSER_ASSERT(ptr); + switch (tag >> 3) { + // bool is_sync_plugin = 1; + case 1: { + if (static_cast<::google::protobuf::uint8>(tag) != 8) goto handle_unusual; + msg->set_is_sync_plugin(::google::protobuf::internal::ReadVarint(&ptr)); + GOOGLE_PROTOBUF_PARSER_ASSERT(ptr); + break; + } + default: { + handle_unusual: + if ((tag & 7) == 4 || tag == 0) { + ctx->EndGroup(tag); + return ptr; + } + auto res = UnknownFieldParse(tag, {_InternalParse, msg}, + ptr, end, msg->_internal_metadata_.mutable_unknown_fields(), ctx); + ptr = res.first; + GOOGLE_PROTOBUF_PARSER_ASSERT(ptr != nullptr); + if (res.second) return ptr; + } + } // switch + } // while + return ptr; +} +#else // GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER +bool PluginMetadata::MergePartialFromCodedStream( + ::google::protobuf::io::CodedInputStream* input) { +#define DO_(EXPRESSION) if (!PROTOBUF_PREDICT_TRUE(EXPRESSION)) goto failure + ::google::protobuf::uint32 tag; + // @@protoc_insertion_point(parse_start:flyteidl.core.PluginMetadata) + for (;;) { + ::std::pair<::google::protobuf::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u); + tag = p.first; + if (!p.second) goto handle_unusual; + switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) { + // bool is_sync_plugin = 1; + case 1: { + if (static_cast< ::google::protobuf::uint8>(tag) == (8 & 0xFF)) { + + DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive< + bool, ::google::protobuf::internal::WireFormatLite::TYPE_BOOL>( + input, &is_sync_plugin_))); + } else { + goto handle_unusual; + } + break; + } + + default: { + handle_unusual: + if (tag == 0) { + goto success; + } + DO_(::google::protobuf::internal::WireFormat::SkipField( + input, tag, _internal_metadata_.mutable_unknown_fields())); + break; + } + } + } +success: + // @@protoc_insertion_point(parse_success:flyteidl.core.PluginMetadata) + return true; +failure: + // @@protoc_insertion_point(parse_failure:flyteidl.core.PluginMetadata) + return false; +#undef DO_ +} +#endif // GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER + +void PluginMetadata::SerializeWithCachedSizes( + ::google::protobuf::io::CodedOutputStream* output) const { + // @@protoc_insertion_point(serialize_start:flyteidl.core.PluginMetadata) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + + // bool is_sync_plugin = 1; + if (this->is_sync_plugin() != 0) { + ::google::protobuf::internal::WireFormatLite::WriteBool(1, this->is_sync_plugin(), output); + } + + if (_internal_metadata_.have_unknown_fields()) { + ::google::protobuf::internal::WireFormat::SerializeUnknownFields( + _internal_metadata_.unknown_fields(), output); + } + // @@protoc_insertion_point(serialize_end:flyteidl.core.PluginMetadata) +} + +::google::protobuf::uint8* PluginMetadata::InternalSerializeWithCachedSizesToArray( + ::google::protobuf::uint8* target) const { + // @@protoc_insertion_point(serialize_to_array_start:flyteidl.core.PluginMetadata) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + + // bool is_sync_plugin = 1; + if (this->is_sync_plugin() != 0) { + target = ::google::protobuf::internal::WireFormatLite::WriteBoolToArray(1, this->is_sync_plugin(), target); + } + + if (_internal_metadata_.have_unknown_fields()) { + target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray( + _internal_metadata_.unknown_fields(), target); + } + // @@protoc_insertion_point(serialize_to_array_end:flyteidl.core.PluginMetadata) + return target; +} + +size_t PluginMetadata::ByteSizeLong() const { +// @@protoc_insertion_point(message_byte_size_start:flyteidl.core.PluginMetadata) + size_t total_size = 0; + + if (_internal_metadata_.have_unknown_fields()) { + total_size += + ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize( + _internal_metadata_.unknown_fields()); + } + ::google::protobuf::uint32 cached_has_bits = 0; + // Prevent compiler warnings about cached_has_bits being unused + (void) cached_has_bits; + + // bool is_sync_plugin = 1; + if (this->is_sync_plugin() != 0) { + total_size += 1 + 1; + } + + int cached_size = ::google::protobuf::internal::ToCachedSize(total_size); + SetCachedSize(cached_size); + return total_size; +} + +void PluginMetadata::MergeFrom(const ::google::protobuf::Message& from) { +// @@protoc_insertion_point(generalized_merge_from_start:flyteidl.core.PluginMetadata) + GOOGLE_DCHECK_NE(&from, this); + const PluginMetadata* source = + ::google::protobuf::DynamicCastToGenerated( + &from); + if (source == nullptr) { + // @@protoc_insertion_point(generalized_merge_from_cast_fail:flyteidl.core.PluginMetadata) + ::google::protobuf::internal::ReflectionOps::Merge(from, this); + } else { + // @@protoc_insertion_point(generalized_merge_from_cast_success:flyteidl.core.PluginMetadata) + MergeFrom(*source); + } +} + +void PluginMetadata::MergeFrom(const PluginMetadata& from) { +// @@protoc_insertion_point(class_specific_merge_from_start:flyteidl.core.PluginMetadata) + GOOGLE_DCHECK_NE(&from, this); + _internal_metadata_.MergeFrom(from._internal_metadata_); + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + + if (from.is_sync_plugin() != 0) { + set_is_sync_plugin(from.is_sync_plugin()); + } +} + +void PluginMetadata::CopyFrom(const ::google::protobuf::Message& from) { +// @@protoc_insertion_point(generalized_copy_from_start:flyteidl.core.PluginMetadata) + if (&from == this) return; + Clear(); + MergeFrom(from); +} + +void PluginMetadata::CopyFrom(const PluginMetadata& from) { +// @@protoc_insertion_point(class_specific_copy_from_start:flyteidl.core.PluginMetadata) + if (&from == this) return; + Clear(); + MergeFrom(from); +} + +bool PluginMetadata::IsInitialized() const { + return true; +} + +void PluginMetadata::Swap(PluginMetadata* other) { + if (other == this) return; + InternalSwap(other); +} +void PluginMetadata::InternalSwap(PluginMetadata* other) { + using std::swap; + _internal_metadata_.Swap(&other->_internal_metadata_); + swap(is_sync_plugin_, other->is_sync_plugin_); +} + +::google::protobuf::Metadata PluginMetadata::GetMetadata() const { + ::google::protobuf::internal::AssignDescriptors(&::assign_descriptors_table_flyteidl_2fcore_2ftasks_2eproto); + return ::file_level_metadata_flyteidl_2fcore_2ftasks_2eproto[kIndexInFileMessages]; +} + + // =================================================================== TaskMetadata_TagsEntry_DoNotUse::TaskMetadata_TagsEntry_DoNotUse() {} @@ -2827,7 +3138,7 @@ void TaskMetadata_TagsEntry_DoNotUse::MergeFrom(const TaskMetadata_TagsEntry_DoN } ::google::protobuf::Metadata TaskMetadata_TagsEntry_DoNotUse::GetMetadata() const { ::google::protobuf::internal::AssignDescriptors(&::assign_descriptors_table_flyteidl_2fcore_2ftasks_2eproto); - return ::file_level_metadata_flyteidl_2fcore_2ftasks_2eproto[5]; + return ::file_level_metadata_flyteidl_2fcore_2ftasks_2eproto[6]; } void TaskMetadata_TagsEntry_DoNotUse::MergeFrom( const ::google::protobuf::Message& other) { @@ -3896,7 +4207,7 @@ void TaskTemplate_ConfigEntry_DoNotUse::MergeFrom(const TaskTemplate_ConfigEntry } ::google::protobuf::Metadata TaskTemplate_ConfigEntry_DoNotUse::GetMetadata() const { ::google::protobuf::internal::AssignDescriptors(&::assign_descriptors_table_flyteidl_2fcore_2ftasks_2eproto); - return ::file_level_metadata_flyteidl_2fcore_2ftasks_2eproto[7]; + return ::file_level_metadata_flyteidl_2fcore_2ftasks_2eproto[8]; } void TaskTemplate_ConfigEntry_DoNotUse::MergeFrom( const ::google::protobuf::Message& other) { @@ -7463,7 +7774,7 @@ void K8sObjectMetadata_LabelsEntry_DoNotUse::MergeFrom(const K8sObjectMetadata_L } ::google::protobuf::Metadata K8sObjectMetadata_LabelsEntry_DoNotUse::GetMetadata() const { ::google::protobuf::internal::AssignDescriptors(&::assign_descriptors_table_flyteidl_2fcore_2ftasks_2eproto); - return ::file_level_metadata_flyteidl_2fcore_2ftasks_2eproto[14]; + return ::file_level_metadata_flyteidl_2fcore_2ftasks_2eproto[15]; } void K8sObjectMetadata_LabelsEntry_DoNotUse::MergeFrom( const ::google::protobuf::Message& other) { @@ -7504,7 +7815,7 @@ void K8sObjectMetadata_AnnotationsEntry_DoNotUse::MergeFrom(const K8sObjectMetad } ::google::protobuf::Metadata K8sObjectMetadata_AnnotationsEntry_DoNotUse::GetMetadata() const { ::google::protobuf::internal::AssignDescriptors(&::assign_descriptors_table_flyteidl_2fcore_2ftasks_2eproto); - return ::file_level_metadata_flyteidl_2fcore_2ftasks_2eproto[15]; + return ::file_level_metadata_flyteidl_2fcore_2ftasks_2eproto[16]; } void K8sObjectMetadata_AnnotationsEntry_DoNotUse::MergeFrom( const ::google::protobuf::Message& other) { @@ -8444,6 +8755,9 @@ template<> PROTOBUF_NOINLINE ::flyteidl::core::ExtendedResources* Arena::CreateM template<> PROTOBUF_NOINLINE ::flyteidl::core::RuntimeMetadata* Arena::CreateMaybeMessage< ::flyteidl::core::RuntimeMetadata >(Arena* arena) { return Arena::CreateInternal< ::flyteidl::core::RuntimeMetadata >(arena); } +template<> PROTOBUF_NOINLINE ::flyteidl::core::PluginMetadata* Arena::CreateMaybeMessage< ::flyteidl::core::PluginMetadata >(Arena* arena) { + return Arena::CreateInternal< ::flyteidl::core::PluginMetadata >(arena); +} template<> PROTOBUF_NOINLINE ::flyteidl::core::TaskMetadata_TagsEntry_DoNotUse* Arena::CreateMaybeMessage< ::flyteidl::core::TaskMetadata_TagsEntry_DoNotUse >(Arena* arena) { return Arena::CreateInternal< ::flyteidl::core::TaskMetadata_TagsEntry_DoNotUse >(arena); } diff --git a/flyteidl/gen/pb-cpp/flyteidl/core/tasks.pb.h b/flyteidl/gen/pb-cpp/flyteidl/core/tasks.pb.h index 14d644af8b..1d284dcb0b 100644 --- a/flyteidl/gen/pb-cpp/flyteidl/core/tasks.pb.h +++ b/flyteidl/gen/pb-cpp/flyteidl/core/tasks.pb.h @@ -51,7 +51,7 @@ struct TableStruct_flyteidl_2fcore_2ftasks_2eproto { PROTOBUF_SECTION_VARIABLE(protodesc_cold); static const ::google::protobuf::internal::AuxillaryParseTableField aux[] PROTOBUF_SECTION_VARIABLE(protodesc_cold); - static const ::google::protobuf::internal::ParseTable schema[18] + static const ::google::protobuf::internal::ParseTable schema[19] PROTOBUF_SECTION_VARIABLE(protodesc_cold); static const ::google::protobuf::internal::FieldMetadata field_metadata[]; static const ::google::protobuf::internal::SerializationTable serialization_table[]; @@ -90,6 +90,9 @@ extern K8sObjectMetadata_LabelsEntry_DoNotUseDefaultTypeInternal _K8sObjectMetad class K8sPod; class K8sPodDefaultTypeInternal; extern K8sPodDefaultTypeInternal _K8sPod_default_instance_; +class PluginMetadata; +class PluginMetadataDefaultTypeInternal; +extern PluginMetadataDefaultTypeInternal _PluginMetadata_default_instance_; class Resources; class ResourcesDefaultTypeInternal; extern ResourcesDefaultTypeInternal _Resources_default_instance_; @@ -128,6 +131,7 @@ template<> ::flyteidl::core::K8sObjectMetadata* Arena::CreateMaybeMessage<::flyt template<> ::flyteidl::core::K8sObjectMetadata_AnnotationsEntry_DoNotUse* Arena::CreateMaybeMessage<::flyteidl::core::K8sObjectMetadata_AnnotationsEntry_DoNotUse>(Arena*); template<> ::flyteidl::core::K8sObjectMetadata_LabelsEntry_DoNotUse* Arena::CreateMaybeMessage<::flyteidl::core::K8sObjectMetadata_LabelsEntry_DoNotUse>(Arena*); template<> ::flyteidl::core::K8sPod* Arena::CreateMaybeMessage<::flyteidl::core::K8sPod>(Arena*); +template<> ::flyteidl::core::PluginMetadata* Arena::CreateMaybeMessage<::flyteidl::core::PluginMetadata>(Arena*); template<> ::flyteidl::core::Resources* Arena::CreateMaybeMessage<::flyteidl::core::Resources>(Arena*); template<> ::flyteidl::core::Resources_ResourceEntry* Arena::CreateMaybeMessage<::flyteidl::core::Resources_ResourceEntry>(Arena*); template<> ::flyteidl::core::RuntimeMetadata* Arena::CreateMaybeMessage<::flyteidl::core::RuntimeMetadata>(Arena*); @@ -1026,18 +1030,21 @@ class RuntimeMetadata final : ::std::string* release_flavor(); void set_allocated_flavor(::std::string* flavor); + // .flyteidl.core.PluginMetadata plugin_metadata = 4; + bool has_plugin_metadata() const; + void clear_plugin_metadata(); + static const int kPluginMetadataFieldNumber = 4; + const ::flyteidl::core::PluginMetadata& plugin_metadata() const; + ::flyteidl::core::PluginMetadata* release_plugin_metadata(); + ::flyteidl::core::PluginMetadata* mutable_plugin_metadata(); + void set_allocated_plugin_metadata(::flyteidl::core::PluginMetadata* plugin_metadata); + // .flyteidl.core.RuntimeMetadata.RuntimeType type = 1; void clear_type(); static const int kTypeFieldNumber = 1; ::flyteidl::core::RuntimeMetadata_RuntimeType type() const; void set_type(::flyteidl::core::RuntimeMetadata_RuntimeType value); - // bool is_sync_plugin = 4; - void clear_is_sync_plugin(); - static const int kIsSyncPluginFieldNumber = 4; - bool is_sync_plugin() const; - void set_is_sync_plugin(bool value); - // @@protoc_insertion_point(class_scope:flyteidl.core.RuntimeMetadata) private: class HasBitSetters; @@ -1045,7 +1052,119 @@ class RuntimeMetadata final : ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_; ::google::protobuf::internal::ArenaStringPtr version_; ::google::protobuf::internal::ArenaStringPtr flavor_; + ::flyteidl::core::PluginMetadata* plugin_metadata_; int type_; + mutable ::google::protobuf::internal::CachedSize _cached_size_; + friend struct ::TableStruct_flyteidl_2fcore_2ftasks_2eproto; +}; +// ------------------------------------------------------------------- + +class PluginMetadata final : + public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:flyteidl.core.PluginMetadata) */ { + public: + PluginMetadata(); + virtual ~PluginMetadata(); + + PluginMetadata(const PluginMetadata& from); + + inline PluginMetadata& operator=(const PluginMetadata& from) { + CopyFrom(from); + return *this; + } + #if LANG_CXX11 + PluginMetadata(PluginMetadata&& from) noexcept + : PluginMetadata() { + *this = ::std::move(from); + } + + inline PluginMetadata& operator=(PluginMetadata&& from) noexcept { + if (GetArenaNoVirtual() == from.GetArenaNoVirtual()) { + if (this != &from) InternalSwap(&from); + } else { + CopyFrom(from); + } + return *this; + } + #endif + static const ::google::protobuf::Descriptor* descriptor() { + return default_instance().GetDescriptor(); + } + static const PluginMetadata& default_instance(); + + static void InitAsDefaultInstance(); // FOR INTERNAL USE ONLY + static inline const PluginMetadata* internal_default_instance() { + return reinterpret_cast( + &_PluginMetadata_default_instance_); + } + static constexpr int kIndexInFileMessages = + 5; + + void Swap(PluginMetadata* other); + friend void swap(PluginMetadata& a, PluginMetadata& b) { + a.Swap(&b); + } + + // implements Message ---------------------------------------------- + + inline PluginMetadata* New() const final { + return CreateMaybeMessage(nullptr); + } + + PluginMetadata* New(::google::protobuf::Arena* arena) const final { + return CreateMaybeMessage(arena); + } + void CopyFrom(const ::google::protobuf::Message& from) final; + void MergeFrom(const ::google::protobuf::Message& from) final; + void CopyFrom(const PluginMetadata& from); + void MergeFrom(const PluginMetadata& from); + PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final; + bool IsInitialized() const final; + + size_t ByteSizeLong() const final; + #if GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER + static const char* _InternalParse(const char* begin, const char* end, void* object, ::google::protobuf::internal::ParseContext* ctx); + ::google::protobuf::internal::ParseFunc _ParseFunc() const final { return _InternalParse; } + #else + bool MergePartialFromCodedStream( + ::google::protobuf::io::CodedInputStream* input) final; + #endif // GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER + void SerializeWithCachedSizes( + ::google::protobuf::io::CodedOutputStream* output) const final; + ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray( + ::google::protobuf::uint8* target) const final; + int GetCachedSize() const final { return _cached_size_.Get(); } + + private: + void SharedCtor(); + void SharedDtor(); + void SetCachedSize(int size) const final; + void InternalSwap(PluginMetadata* other); + private: + inline ::google::protobuf::Arena* GetArenaNoVirtual() const { + return nullptr; + } + inline void* MaybeArenaPtr() const { + return nullptr; + } + public: + + ::google::protobuf::Metadata GetMetadata() const final; + + // nested types ---------------------------------------------------- + + // accessors ------------------------------------------------------- + + // bool is_sync_plugin = 1; + void clear_is_sync_plugin(); + static const int kIsSyncPluginFieldNumber = 1; + bool is_sync_plugin() const; + void set_is_sync_plugin(bool value); + + // @@protoc_insertion_point(class_scope:flyteidl.core.PluginMetadata) + private: + class HasBitSetters; + + ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_; bool is_sync_plugin_; mutable ::google::protobuf::internal::CachedSize _cached_size_; friend struct ::TableStruct_flyteidl_2fcore_2ftasks_2eproto; @@ -1119,7 +1238,7 @@ class TaskMetadata final : &_TaskMetadata_default_instance_); } static constexpr int kIndexInFileMessages = - 6; + 7; void Swap(TaskMetadata* other); friend void swap(TaskMetadata& a, TaskMetadata& b) { @@ -1388,7 +1507,7 @@ class TaskTemplate final : &_TaskTemplate_default_instance_); } static constexpr int kIndexInFileMessages = - 8; + 9; void Swap(TaskTemplate* other); friend void swap(TaskTemplate& a, TaskTemplate& b) { @@ -1634,7 +1753,7 @@ class ContainerPort final : &_ContainerPort_default_instance_); } static constexpr int kIndexInFileMessages = - 9; + 10; void Swap(ContainerPort* other); friend void swap(ContainerPort& a, ContainerPort& b) { @@ -1746,7 +1865,7 @@ class Container final : &_Container_default_instance_); } static constexpr int kIndexInFileMessages = - 10; + 11; void Swap(Container* other); friend void swap(Container& a, Container& b) { @@ -2010,7 +2129,7 @@ class IOStrategy final : &_IOStrategy_default_instance_); } static constexpr int kIndexInFileMessages = - 11; + 12; void Swap(IOStrategy* other); friend void swap(IOStrategy& a, IOStrategy& b) { @@ -2185,7 +2304,7 @@ class DataLoadingConfig final : &_DataLoadingConfig_default_instance_); } static constexpr int kIndexInFileMessages = - 12; + 13; void Swap(DataLoadingConfig* other); friend void swap(DataLoadingConfig& a, DataLoadingConfig& b) { @@ -2372,7 +2491,7 @@ class K8sPod final : &_K8sPod_default_instance_); } static constexpr int kIndexInFileMessages = - 13; + 14; void Swap(K8sPod* other); friend void swap(K8sPod& a, K8sPod& b) { @@ -2555,7 +2674,7 @@ class K8sObjectMetadata final : &_K8sObjectMetadata_default_instance_); } static constexpr int kIndexInFileMessages = - 16; + 17; void Swap(K8sObjectMetadata* other); friend void swap(K8sObjectMetadata& a, K8sObjectMetadata& b) { @@ -2691,7 +2810,7 @@ class Sql final : &_Sql_default_instance_); } static constexpr int kIndexInFileMessages = - 17; + 18; void Swap(Sql* other); friend void swap(Sql& a, Sql& b) { @@ -3316,18 +3435,73 @@ inline void RuntimeMetadata::set_allocated_flavor(::std::string* flavor) { // @@protoc_insertion_point(field_set_allocated:flyteidl.core.RuntimeMetadata.flavor) } -// bool is_sync_plugin = 4; -inline void RuntimeMetadata::clear_is_sync_plugin() { +// .flyteidl.core.PluginMetadata plugin_metadata = 4; +inline bool RuntimeMetadata::has_plugin_metadata() const { + return this != internal_default_instance() && plugin_metadata_ != nullptr; +} +inline void RuntimeMetadata::clear_plugin_metadata() { + if (GetArenaNoVirtual() == nullptr && plugin_metadata_ != nullptr) { + delete plugin_metadata_; + } + plugin_metadata_ = nullptr; +} +inline const ::flyteidl::core::PluginMetadata& RuntimeMetadata::plugin_metadata() const { + const ::flyteidl::core::PluginMetadata* p = plugin_metadata_; + // @@protoc_insertion_point(field_get:flyteidl.core.RuntimeMetadata.plugin_metadata) + return p != nullptr ? *p : *reinterpret_cast( + &::flyteidl::core::_PluginMetadata_default_instance_); +} +inline ::flyteidl::core::PluginMetadata* RuntimeMetadata::release_plugin_metadata() { + // @@protoc_insertion_point(field_release:flyteidl.core.RuntimeMetadata.plugin_metadata) + + ::flyteidl::core::PluginMetadata* temp = plugin_metadata_; + plugin_metadata_ = nullptr; + return temp; +} +inline ::flyteidl::core::PluginMetadata* RuntimeMetadata::mutable_plugin_metadata() { + + if (plugin_metadata_ == nullptr) { + auto* p = CreateMaybeMessage<::flyteidl::core::PluginMetadata>(GetArenaNoVirtual()); + plugin_metadata_ = p; + } + // @@protoc_insertion_point(field_mutable:flyteidl.core.RuntimeMetadata.plugin_metadata) + return plugin_metadata_; +} +inline void RuntimeMetadata::set_allocated_plugin_metadata(::flyteidl::core::PluginMetadata* plugin_metadata) { + ::google::protobuf::Arena* message_arena = GetArenaNoVirtual(); + if (message_arena == nullptr) { + delete plugin_metadata_; + } + if (plugin_metadata) { + ::google::protobuf::Arena* submessage_arena = nullptr; + if (message_arena != submessage_arena) { + plugin_metadata = ::google::protobuf::internal::GetOwnedMessage( + message_arena, plugin_metadata, submessage_arena); + } + + } else { + + } + plugin_metadata_ = plugin_metadata; + // @@protoc_insertion_point(field_set_allocated:flyteidl.core.RuntimeMetadata.plugin_metadata) +} + +// ------------------------------------------------------------------- + +// PluginMetadata + +// bool is_sync_plugin = 1; +inline void PluginMetadata::clear_is_sync_plugin() { is_sync_plugin_ = false; } -inline bool RuntimeMetadata::is_sync_plugin() const { - // @@protoc_insertion_point(field_get:flyteidl.core.RuntimeMetadata.is_sync_plugin) +inline bool PluginMetadata::is_sync_plugin() const { + // @@protoc_insertion_point(field_get:flyteidl.core.PluginMetadata.is_sync_plugin) return is_sync_plugin_; } -inline void RuntimeMetadata::set_is_sync_plugin(bool value) { +inline void PluginMetadata::set_is_sync_plugin(bool value) { is_sync_plugin_ = value; - // @@protoc_insertion_point(field_set:flyteidl.core.RuntimeMetadata.is_sync_plugin) + // @@protoc_insertion_point(field_set:flyteidl.core.PluginMetadata.is_sync_plugin) } // ------------------------------------------------------------------- @@ -5179,6 +5353,8 @@ inline void Sql::set_dialect(::flyteidl::core::Sql_Dialect value) { // ------------------------------------------------------------------- +// ------------------------------------------------------------------- + // @@protoc_insertion_point(namespace_scope) diff --git a/flyteidl/gen/pb-go/flyteidl/core/tasks.pb.go b/flyteidl/gen/pb-go/flyteidl/core/tasks.pb.go index 94616cce90..221830f34f 100644 --- a/flyteidl/gen/pb-go/flyteidl/core/tasks.pb.go +++ b/flyteidl/gen/pb-go/flyteidl/core/tasks.pb.go @@ -118,7 +118,7 @@ func (x Container_Architecture) String() string { } func (Container_Architecture) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_bd8423ba58d6ed80, []int{7, 0} + return fileDescriptor_bd8423ba58d6ed80, []int{8, 0} } // Mode to use for downloading @@ -150,7 +150,7 @@ func (x IOStrategy_DownloadMode) String() string { } func (IOStrategy_DownloadMode) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_bd8423ba58d6ed80, []int{8, 0} + return fileDescriptor_bd8423ba58d6ed80, []int{9, 0} } // Mode to use for uploading @@ -182,7 +182,7 @@ func (x IOStrategy_UploadMode) String() string { } func (IOStrategy_UploadMode) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_bd8423ba58d6ed80, []int{8, 1} + return fileDescriptor_bd8423ba58d6ed80, []int{9, 1} } // LiteralMapFormat decides the encoding format in which the input metadata should be made available to the containers. @@ -216,7 +216,7 @@ func (x DataLoadingConfig_LiteralMapFormat) String() string { } func (DataLoadingConfig_LiteralMapFormat) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_bd8423ba58d6ed80, []int{9, 0} + return fileDescriptor_bd8423ba58d6ed80, []int{10, 0} } // The dialect of the SQL statement. This is used to validate and parse SQL statements at compilation time to avoid @@ -250,7 +250,7 @@ func (x Sql_Dialect) String() string { } func (Sql_Dialect) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_bd8423ba58d6ed80, []int{12, 0} + return fileDescriptor_bd8423ba58d6ed80, []int{13, 0} } // A customizable interface to convey resources requested for a container. This can be interpreted differently for different @@ -502,11 +502,11 @@ type RuntimeMetadata struct { Version string `protobuf:"bytes,2,opt,name=version,proto3" json:"version,omitempty"` //+optional It can be used to provide extra information about the runtime (e.g. python, golang... etc.). Flavor string `protobuf:"bytes,3,opt,name=flavor,proto3" json:"flavor,omitempty"` - //+optional It can be used to decide use sync plugin or async plugin during runtime. - IsSyncPlugin bool `protobuf:"varint,4,opt,name=is_sync_plugin,json=isSyncPlugin,proto3" json:"is_sync_plugin,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + //+optional It can be used to provide extra information for the plugin. + PluginMetadata *PluginMetadata `protobuf:"bytes,4,opt,name=plugin_metadata,json=pluginMetadata,proto3" json:"plugin_metadata,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *RuntimeMetadata) Reset() { *m = RuntimeMetadata{} } @@ -555,7 +555,47 @@ func (m *RuntimeMetadata) GetFlavor() string { return "" } -func (m *RuntimeMetadata) GetIsSyncPlugin() bool { +func (m *RuntimeMetadata) GetPluginMetadata() *PluginMetadata { + if m != nil { + return m.PluginMetadata + } + return nil +} + +type PluginMetadata struct { + //+optional It can be used to decide use sync plugin or async plugin during runtime. + IsSyncPlugin bool `protobuf:"varint,1,opt,name=is_sync_plugin,json=isSyncPlugin,proto3" json:"is_sync_plugin,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *PluginMetadata) Reset() { *m = PluginMetadata{} } +func (m *PluginMetadata) String() string { return proto.CompactTextString(m) } +func (*PluginMetadata) ProtoMessage() {} +func (*PluginMetadata) Descriptor() ([]byte, []int) { + return fileDescriptor_bd8423ba58d6ed80, []int{4} +} + +func (m *PluginMetadata) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_PluginMetadata.Unmarshal(m, b) +} +func (m *PluginMetadata) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_PluginMetadata.Marshal(b, m, deterministic) +} +func (m *PluginMetadata) XXX_Merge(src proto.Message) { + xxx_messageInfo_PluginMetadata.Merge(m, src) +} +func (m *PluginMetadata) XXX_Size() int { + return xxx_messageInfo_PluginMetadata.Size(m) +} +func (m *PluginMetadata) XXX_DiscardUnknown() { + xxx_messageInfo_PluginMetadata.DiscardUnknown(m) +} + +var xxx_messageInfo_PluginMetadata proto.InternalMessageInfo + +func (m *PluginMetadata) GetIsSyncPlugin() bool { if m != nil { return m.IsSyncPlugin } @@ -601,7 +641,7 @@ func (m *TaskMetadata) Reset() { *m = TaskMetadata{} } func (m *TaskMetadata) String() string { return proto.CompactTextString(m) } func (*TaskMetadata) ProtoMessage() {} func (*TaskMetadata) Descriptor() ([]byte, []int) { - return fileDescriptor_bd8423ba58d6ed80, []int{4} + return fileDescriptor_bd8423ba58d6ed80, []int{5} } func (m *TaskMetadata) XXX_Unmarshal(b []byte) error { @@ -768,7 +808,7 @@ func (m *TaskTemplate) Reset() { *m = TaskTemplate{} } func (m *TaskTemplate) String() string { return proto.CompactTextString(m) } func (*TaskTemplate) ProtoMessage() {} func (*TaskTemplate) Descriptor() ([]byte, []int) { - return fileDescriptor_bd8423ba58d6ed80, []int{5} + return fileDescriptor_bd8423ba58d6ed80, []int{6} } func (m *TaskTemplate) XXX_Unmarshal(b []byte) error { @@ -925,7 +965,7 @@ func (m *ContainerPort) Reset() { *m = ContainerPort{} } func (m *ContainerPort) String() string { return proto.CompactTextString(m) } func (*ContainerPort) ProtoMessage() {} func (*ContainerPort) Descriptor() ([]byte, []int) { - return fileDescriptor_bd8423ba58d6ed80, []int{6} + return fileDescriptor_bd8423ba58d6ed80, []int{7} } func (m *ContainerPort) XXX_Unmarshal(b []byte) error { @@ -992,7 +1032,7 @@ func (m *Container) Reset() { *m = Container{} } func (m *Container) String() string { return proto.CompactTextString(m) } func (*Container) ProtoMessage() {} func (*Container) Descriptor() ([]byte, []int) { - return fileDescriptor_bd8423ba58d6ed80, []int{7} + return fileDescriptor_bd8423ba58d6ed80, []int{8} } func (m *Container) XXX_Unmarshal(b []byte) error { @@ -1092,7 +1132,7 @@ func (m *IOStrategy) Reset() { *m = IOStrategy{} } func (m *IOStrategy) String() string { return proto.CompactTextString(m) } func (*IOStrategy) ProtoMessage() {} func (*IOStrategy) Descriptor() ([]byte, []int) { - return fileDescriptor_bd8423ba58d6ed80, []int{8} + return fileDescriptor_bd8423ba58d6ed80, []int{9} } func (m *IOStrategy) XXX_Unmarshal(b []byte) error { @@ -1156,7 +1196,7 @@ func (m *DataLoadingConfig) Reset() { *m = DataLoadingConfig{} } func (m *DataLoadingConfig) String() string { return proto.CompactTextString(m) } func (*DataLoadingConfig) ProtoMessage() {} func (*DataLoadingConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_bd8423ba58d6ed80, []int{9} + return fileDescriptor_bd8423ba58d6ed80, []int{10} } func (m *DataLoadingConfig) XXX_Unmarshal(b []byte) error { @@ -1238,7 +1278,7 @@ func (m *K8SPod) Reset() { *m = K8SPod{} } func (m *K8SPod) String() string { return proto.CompactTextString(m) } func (*K8SPod) ProtoMessage() {} func (*K8SPod) Descriptor() ([]byte, []int) { - return fileDescriptor_bd8423ba58d6ed80, []int{10} + return fileDescriptor_bd8423ba58d6ed80, []int{11} } func (m *K8SPod) XXX_Unmarshal(b []byte) error { @@ -1295,7 +1335,7 @@ func (m *K8SObjectMetadata) Reset() { *m = K8SObjectMetadata{} } func (m *K8SObjectMetadata) String() string { return proto.CompactTextString(m) } func (*K8SObjectMetadata) ProtoMessage() {} func (*K8SObjectMetadata) Descriptor() ([]byte, []int) { - return fileDescriptor_bd8423ba58d6ed80, []int{11} + return fileDescriptor_bd8423ba58d6ed80, []int{12} } func (m *K8SObjectMetadata) XXX_Unmarshal(b []byte) error { @@ -1352,7 +1392,7 @@ func (m *Sql) Reset() { *m = Sql{} } func (m *Sql) String() string { return proto.CompactTextString(m) } func (*Sql) ProtoMessage() {} func (*Sql) Descriptor() ([]byte, []int) { - return fileDescriptor_bd8423ba58d6ed80, []int{12} + return fileDescriptor_bd8423ba58d6ed80, []int{13} } func (m *Sql) XXX_Unmarshal(b []byte) error { @@ -1400,6 +1440,7 @@ func init() { proto.RegisterType((*GPUAccelerator)(nil), "flyteidl.core.GPUAccelerator") proto.RegisterType((*ExtendedResources)(nil), "flyteidl.core.ExtendedResources") proto.RegisterType((*RuntimeMetadata)(nil), "flyteidl.core.RuntimeMetadata") + proto.RegisterType((*PluginMetadata)(nil), "flyteidl.core.PluginMetadata") proto.RegisterType((*TaskMetadata)(nil), "flyteidl.core.TaskMetadata") proto.RegisterMapType((map[string]string)(nil), "flyteidl.core.TaskMetadata.TagsEntry") proto.RegisterType((*TaskTemplate)(nil), "flyteidl.core.TaskTemplate") @@ -1418,119 +1459,120 @@ func init() { func init() { proto.RegisterFile("flyteidl/core/tasks.proto", fileDescriptor_bd8423ba58d6ed80) } var fileDescriptor_bd8423ba58d6ed80 = []byte{ - // 1814 bytes of a gzipped FileDescriptorProto + // 1831 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x58, 0xdd, 0x72, 0xdb, 0xb8, - 0x15, 0xb6, 0x24, 0x5b, 0xb2, 0x8e, 0x24, 0x9b, 0xc2, 0x6e, 0x52, 0xc6, 0x4d, 0xd2, 0x0c, 0x67, - 0x37, 0x49, 0xb7, 0x8d, 0xdc, 0x68, 0x33, 0xb6, 0x37, 0xdd, 0x49, 0x47, 0x8e, 0x94, 0x58, 0xb5, - 0xf5, 0x33, 0x90, 0x9c, 0x6d, 0xda, 0xe9, 0xb0, 0x30, 0x09, 0xd3, 0xac, 0x29, 0x82, 0x01, 0x41, - 0x77, 0x95, 0xb7, 0x68, 0x5f, 0xa2, 0xd3, 0x07, 0xe8, 0x65, 0xdf, 0xa1, 0xd3, 0x8b, 0xbe, 0x49, - 0xef, 0x7a, 0xb1, 0x03, 0xf0, 0x47, 0x7f, 0xce, 0x7a, 0x7c, 0x25, 0xe0, 0x9c, 0xef, 0x1c, 0xe0, - 0x1c, 0x9c, 0x3f, 0x0a, 0xee, 0x9d, 0x7b, 0x53, 0x41, 0x5d, 0xdb, 0xdb, 0xb5, 0x18, 0xa7, 0xbb, - 0x82, 0x84, 0x97, 0x61, 0x23, 0xe0, 0x4c, 0x30, 0x54, 0x4b, 0x59, 0x0d, 0xc9, 0xda, 0x79, 0xb8, - 0x88, 0x74, 0x6d, 0xea, 0x0b, 0xf7, 0xdc, 0xa5, 0x3c, 0x86, 0xef, 0x3c, 0x58, 0xe2, 0xfb, 0x82, - 0xf2, 0x73, 0x62, 0xd1, 0x84, 0x7d, 0x7f, 0x91, 0xed, 0xb9, 0x82, 0x72, 0xe2, 0x85, 0xd7, 0x73, - 0x43, 0x6a, 0x45, 0xdc, 0x15, 0xd3, 0x84, 0xfb, 0xd0, 0x61, 0xcc, 0xf1, 0xe8, 0xae, 0xda, 0x9d, - 0x45, 0xe7, 0xbb, 0x76, 0xc4, 0x89, 0x70, 0x99, 0x9f, 0x4a, 0x2f, 0xf3, 0x43, 0xc1, 0x23, 0x4b, - 0xc4, 0x5c, 0xe3, 0xdf, 0x79, 0x28, 0x63, 0x1a, 0xb2, 0x88, 0x5b, 0x34, 0x44, 0x87, 0xb0, 0xc9, - 0xe9, 0x87, 0x88, 0x86, 0x22, 0xd4, 0x73, 0x8f, 0x0a, 0x4f, 0x2b, 0xcd, 0xc7, 0x8d, 0x05, 0x43, - 0x1b, 0x19, 0x36, 0x5b, 0x75, 0x7c, 0xc1, 0xa7, 0x38, 0x93, 0x43, 0xaf, 0xa0, 0xe8, 0xb9, 0x13, - 0x57, 0x84, 0x7a, 0xfe, 0x56, 0x1a, 0x12, 0xa9, 0x9d, 0x3f, 0x41, 0x6d, 0x81, 0x81, 0xbe, 0x81, - 0x75, 0x9f, 0x4c, 0xa8, 0x9e, 0x7b, 0x94, 0x7b, 0xba, 0xd5, 0xfc, 0xf2, 0x46, 0x75, 0x7d, 0x32, - 0xa1, 0x58, 0x89, 0xa0, 0xcf, 0x61, 0xe3, 0x8a, 0x78, 0x11, 0xd5, 0xf3, 0x8f, 0x72, 0x4f, 0xcb, - 0x38, 0xde, 0x18, 0x7f, 0x84, 0xea, 0x3c, 0x16, 0x55, 0xa0, 0x74, 0xda, 0x3f, 0xee, 0x0f, 0xbe, - 0xeb, 0x6b, 0x6b, 0xa8, 0x04, 0x85, 0xd7, 0xc3, 0x53, 0x2d, 0x27, 0x17, 0x6f, 0x87, 0xa7, 0x5a, - 0x1e, 0x01, 0x14, 0x7b, 0x9d, 0xde, 0x00, 0xbf, 0xd7, 0x0a, 0x12, 0x3a, 0x1a, 0x0f, 0x70, 0xeb, - 0x6d, 0x47, 0x5b, 0x47, 0x77, 0xa0, 0xde, 0x19, 0x1e, 0x75, 0x7a, 0x1d, 0xdc, 0x3a, 0x31, 0x53, - 0xf2, 0x86, 0xf1, 0xd7, 0x1c, 0x6c, 0xbd, 0x1d, 0x9e, 0xb6, 0x2c, 0x8b, 0x7a, 0x94, 0x13, 0xc1, - 0x38, 0xba, 0x0b, 0x45, 0x9b, 0x5e, 0xb9, 0x56, 0x6c, 0x44, 0x19, 0x27, 0x3b, 0xf4, 0x18, 0x6a, - 0x91, 0x1f, 0x10, 0x2e, 0x5c, 0xf9, 0x60, 0xd4, 0x56, 0xf7, 0xdc, 0x3c, 0x5a, 0xc3, 0x8b, 0x64, - 0xf4, 0x04, 0xb6, 0xb2, 0xad, 0x19, 0xba, 0x1f, 0xa9, 0x5e, 0x90, 0x7a, 0x24, 0x30, 0xa3, 0x8f, - 0xdc, 0x8f, 0xf4, 0xf0, 0x2e, 0x7c, 0xbe, 0x08, 0x34, 0x63, 0x93, 0xff, 0x00, 0xf5, 0xce, 0xf7, - 0x82, 0xfa, 0x36, 0xb5, 0x67, 0xaf, 0xfd, 0x06, 0xb6, 0x9d, 0x20, 0x32, 0xc9, 0xec, 0xa2, 0xea, - 0x7a, 0x95, 0xe6, 0x83, 0x25, 0x1f, 0x2f, 0x5a, 0x83, 0xb7, 0x9c, 0x20, 0x9a, 0xdb, 0x1b, 0xff, - 0xc9, 0xc1, 0x36, 0x8e, 0x7c, 0xe1, 0x4e, 0x68, 0x8f, 0x0a, 0x62, 0x13, 0x41, 0xd0, 0x2b, 0x58, - 0x17, 0xd3, 0x20, 0x7d, 0xb4, 0xaf, 0x96, 0x1f, 0x6d, 0x11, 0x9d, 0xee, 0xc7, 0xd3, 0x80, 0x62, - 0x25, 0x87, 0x74, 0x28, 0x5d, 0x51, 0x1e, 0xba, 0xcc, 0x4f, 0xde, 0x2e, 0xdd, 0x4a, 0x5f, 0x9e, - 0x7b, 0xe4, 0x8a, 0xf1, 0xd8, 0x07, 0x38, 0xd9, 0xa1, 0x2f, 0x60, 0xcb, 0x0d, 0xcd, 0x70, 0xea, - 0x5b, 0x66, 0xe0, 0x45, 0x8e, 0xeb, 0xeb, 0xeb, 0xd2, 0x99, 0xb8, 0xea, 0x86, 0xa3, 0xa9, 0x6f, - 0x0d, 0x15, 0xcd, 0x78, 0x02, 0x95, 0xb9, 0xc3, 0x50, 0x19, 0x36, 0x06, 0xe3, 0xa3, 0x0e, 0xd6, - 0xd6, 0x50, 0x0d, 0xca, 0x6f, 0x4e, 0xde, 0x8f, 0x3b, 0xe6, 0xa8, 0x7d, 0xac, 0xe5, 0x8c, 0xff, - 0xad, 0x43, 0x75, 0x4c, 0xc2, 0xcb, 0xcc, 0x22, 0x03, 0xaa, 0xb6, 0x1b, 0x5a, 0xec, 0x8a, 0x72, - 0x72, 0xe6, 0xc5, 0x96, 0x6d, 0xe2, 0x05, 0x1a, 0x3a, 0x80, 0x12, 0x8f, 0xb5, 0xab, 0x5b, 0x57, - 0x9a, 0x0f, 0x7f, 0xdc, 0x70, 0x9c, 0xc2, 0xd1, 0xd7, 0x50, 0x92, 0xbf, 0x2c, 0x12, 0xea, 0xda, - 0x95, 0xe6, 0xbd, 0x46, 0x9c, 0xb7, 0x8d, 0x34, 0x6f, 0x1b, 0xed, 0x24, 0xaf, 0x71, 0x8a, 0x44, - 0x7b, 0x50, 0xe2, 0x54, 0x70, 0x97, 0x86, 0xfa, 0x86, 0x12, 0xba, 0xbf, 0x92, 0x1c, 0x82, 0x4f, - 0x47, 0x82, 0x13, 0x41, 0x9d, 0x29, 0x4e, 0xc1, 0xe8, 0x17, 0x50, 0x4f, 0xaf, 0x3d, 0x35, 0x53, - 0x37, 0x17, 0x95, 0x37, 0xb5, 0x8c, 0xf1, 0x2e, 0xf1, 0xf7, 0x01, 0xe8, 0x36, 0x0d, 0x38, 0xb5, - 0x88, 0xa0, 0xb6, 0x49, 0x39, 0x67, 0xdc, 0x9c, 0xd0, 0x30, 0x24, 0x0e, 0xd5, 0x4b, 0x4a, 0xe6, - 0xee, 0x8c, 0xdf, 0x91, 0xec, 0x5e, 0xcc, 0x95, 0xd1, 0xad, 0x0a, 0x1d, 0x8f, 0x02, 0xe1, 0x4a, - 0x97, 0x6d, 0xa6, 0xd1, 0xbd, 0x40, 0x46, 0xcf, 0x00, 0x59, 0xc4, 0xba, 0xa0, 0x66, 0x48, 0xb9, - 0x4b, 0x3c, 0xf7, 0xa3, 0xf2, 0x6f, 0x59, 0xf9, 0xb7, 0xae, 0x38, 0xa3, 0x39, 0x06, 0xfa, 0x12, - 0xb6, 0x1c, 0xea, 0xcb, 0xd8, 0xa3, 0xa1, 0x69, 0x53, 0xeb, 0x52, 0x07, 0x05, 0xad, 0x65, 0xd4, - 0x36, 0xb5, 0x2e, 0x65, 0xd9, 0x10, 0xc4, 0x09, 0xf5, 0x8a, 0xaa, 0x42, 0xcb, 0x65, 0x63, 0xfe, - 0x69, 0x1b, 0x63, 0xe2, 0x84, 0x71, 0x11, 0x52, 0x22, 0xe8, 0x2b, 0xa8, 0x07, 0xcc, 0x36, 0x05, - 0x9d, 0x04, 0x1e, 0x11, 0xd4, 0x54, 0xe5, 0xa7, 0xaa, 0x6c, 0xdd, 0x0e, 0x98, 0x3d, 0x4e, 0xe8, - 0xb2, 0x78, 0xec, 0xec, 0x43, 0x39, 0x13, 0x47, 0x1a, 0x14, 0x2e, 0xe9, 0x34, 0x49, 0x72, 0xb9, - 0xbc, 0xbe, 0x02, 0xbd, 0xcc, 0x1f, 0xe4, 0x0e, 0xef, 0xc0, 0x67, 0x0b, 0x6e, 0x48, 0x32, 0xf5, - 0xbf, 0x1b, 0x71, 0xdc, 0xa5, 0x87, 0xa0, 0x9f, 0x43, 0xde, 0xb5, 0x93, 0xc4, 0xbc, 0xb7, 0x64, - 0x45, 0x37, 0xeb, 0x33, 0x38, 0xef, 0xda, 0x08, 0x25, 0x49, 0x17, 0x9f, 0x15, 0x27, 0xd2, 0x3e, - 0x6c, 0x4e, 0x12, 0x3b, 0x55, 0xc2, 0x54, 0x9a, 0x3f, 0xfd, 0x11, 0x57, 0xe0, 0x0c, 0x8c, 0x7e, - 0x0d, 0xe5, 0xac, 0x4d, 0x25, 0x31, 0xb9, 0x5c, 0x17, 0x64, 0x0a, 0xd9, 0xdd, 0x14, 0x84, 0x67, - 0x78, 0xb4, 0x0b, 0x45, 0x2b, 0x0a, 0x05, 0x9b, 0x24, 0x81, 0xf9, 0x93, 0x95, 0x68, 0x1e, 0xa9, - 0x2e, 0x84, 0x13, 0x18, 0x3a, 0x80, 0xb2, 0xc5, 0x7c, 0x41, 0x5c, 0x9f, 0x72, 0x15, 0x8a, 0x95, - 0xa6, 0xbe, 0x74, 0xda, 0xeb, 0x94, 0x7f, 0xb4, 0x86, 0x67, 0x60, 0xf4, 0x2b, 0x28, 0x5d, 0x1e, - 0x84, 0x66, 0xc0, 0x6c, 0xbd, 0xae, 0xe4, 0xee, 0x2c, 0xc9, 0x1d, 0x1f, 0x84, 0x43, 0x66, 0x1f, - 0xad, 0xe1, 0xe2, 0xa5, 0x5a, 0xa1, 0xc7, 0x50, 0x08, 0x3f, 0x78, 0x3a, 0x52, 0x68, 0xb4, 0x84, - 0x1e, 0x7d, 0xf0, 0x8e, 0xd6, 0xb0, 0x04, 0xc8, 0x30, 0x90, 0x2d, 0xdf, 0x94, 0x7e, 0xcc, 0xd2, - 0x44, 0x86, 0xfc, 0x06, 0xde, 0x96, 0x0c, 0x69, 0x7e, 0x9a, 0x25, 0x5d, 0xd0, 0xd2, 0xbe, 0x6c, - 0xca, 0xbb, 0xd1, 0xef, 0x85, 0x0a, 0xf7, 0xd5, 0x12, 0x30, 0x4a, 0x60, 0xaf, 0x63, 0x14, 0xde, - 0x0e, 0x17, 0x09, 0x68, 0x00, 0x88, 0x26, 0xb5, 0xda, 0xe4, 0x69, 0xb1, 0x56, 0xe9, 0x50, 0x69, - 0x3e, 0x5a, 0x52, 0xb6, 0x52, 0xd4, 0x71, 0x9d, 0xae, 0xd4, 0xf9, 0xdf, 0x40, 0xd1, 0x62, 0xfe, - 0xb9, 0xeb, 0xe8, 0x9a, 0xca, 0x85, 0x27, 0xd7, 0x04, 0x40, 0x1a, 0x6e, 0xd2, 0xcb, 0xe7, 0xae, - 0x93, 0xb4, 0xe4, 0x58, 0x6c, 0xe7, 0x1b, 0xa8, 0xcc, 0x91, 0x6f, 0x15, 0xe5, 0x9b, 0x50, 0x14, - 0x84, 0x3b, 0x54, 0x18, 0x7b, 0x50, 0xcb, 0x5e, 0x70, 0xc8, 0xb8, 0x90, 0x79, 0x9c, 0xbd, 0xa2, - 0x19, 0x30, 0x2e, 0x94, 0xc6, 0x1a, 0xae, 0x59, 0xf3, 0x30, 0xe3, 0xff, 0x05, 0x28, 0x67, 0x82, - 0xf2, 0x24, 0x77, 0x22, 0x4b, 0x4f, 0x7c, 0x7a, 0xbc, 0x91, 0xdd, 0xc2, 0x62, 0x93, 0x09, 0xf1, - 0x6d, 0x35, 0x74, 0x94, 0x71, 0xba, 0x95, 0x29, 0x41, 0xb8, 0x13, 0xea, 0x05, 0x45, 0x56, 0x6b, - 0xb4, 0x07, 0xe5, 0x99, 0x5f, 0xd7, 0xaf, 0x8d, 0xb5, 0x99, 0x3f, 0x67, 0x50, 0xf4, 0x0c, 0x0a, - 0xd4, 0xbf, 0xd2, 0x37, 0x94, 0x13, 0x97, 0xb3, 0xe8, 0x98, 0x4e, 0xdf, 0x49, 0xab, 0x87, 0xc4, - 0xe5, 0x58, 0xe2, 0xd0, 0x7e, 0xe6, 0xf6, 0xe2, 0x8d, 0x12, 0x87, 0x79, 0x3d, 0x97, 0xba, 0x1b, - 0x35, 0x61, 0x43, 0xba, 0x23, 0xd4, 0x4b, 0x4a, 0xee, 0xfe, 0xa7, 0xf2, 0x40, 0xba, 0x07, 0xc7, - 0x50, 0xd4, 0x82, 0x8a, 0xcc, 0x5a, 0x33, 0x39, 0xf1, 0xfa, 0x68, 0x69, 0x13, 0x41, 0x4e, 0x18, - 0xb1, 0x5d, 0xdf, 0x89, 0xdf, 0x13, 0x83, 0x14, 0x8a, 0xd7, 0xa8, 0x0b, 0x55, 0xc2, 0xad, 0x0b, - 0x57, 0x50, 0x4b, 0x44, 0x9c, 0xaa, 0xaa, 0xba, 0x3a, 0x6f, 0x65, 0xa7, 0x37, 0x5a, 0x73, 0x60, - 0xbc, 0x20, 0x6a, 0x74, 0xa1, 0x3a, 0xcf, 0x5d, 0x9c, 0xb0, 0xca, 0xb0, 0xd1, 0xea, 0xb5, 0xf7, - 0x5e, 0x68, 0x39, 0xb5, 0xc4, 0xbd, 0xbd, 0x17, 0xf1, 0x94, 0xd5, 0xc2, 0x3d, 0xf3, 0xdd, 0x9e, - 0x56, 0xc8, 0xd6, 0xfb, 0xda, 0xba, 0xf1, 0xcf, 0x3c, 0x40, 0x77, 0x90, 0xf6, 0x30, 0x74, 0x0c, - 0x35, 0x9b, 0xfd, 0xc5, 0xf7, 0x18, 0xb1, 0xcd, 0x09, 0xb3, 0xd3, 0x01, 0x63, 0x79, 0xc8, 0x9c, - 0x49, 0x34, 0xda, 0x09, 0xbc, 0xc7, 0x6c, 0x8a, 0xab, 0xf6, 0xdc, 0x0e, 0x75, 0xa0, 0x12, 0x05, - 0x33, 0x55, 0x79, 0xa5, 0xea, 0x8b, 0x4f, 0xab, 0x3a, 0x0d, 0x32, 0x45, 0x10, 0x65, 0x6b, 0xe3, - 0x04, 0xaa, 0xf3, 0x87, 0x20, 0x04, 0x5b, 0xed, 0xc1, 0x77, 0xfd, 0x93, 0x41, 0xab, 0x6d, 0x76, - 0x5a, 0x6f, 0xd5, 0x74, 0xf1, 0x19, 0x6c, 0x67, 0xb4, 0xd1, 0x18, 0x77, 0x5a, 0x3d, 0x2d, 0x17, - 0x13, 0xcd, 0xfe, 0x60, 0x6c, 0xa6, 0x3c, 0x2d, 0x6f, 0x74, 0x00, 0x66, 0xe7, 0x48, 0x5d, 0xa7, - 0x43, 0x25, 0x35, 0xe8, 0x9b, 0x9d, 0xdf, 0x75, 0xc7, 0xda, 0x1a, 0xd2, 0xa0, 0x9a, 0xd0, 0x62, - 0xed, 0x39, 0x54, 0x87, 0x5a, 0xa2, 0x28, 0x66, 0x68, 0x79, 0xe3, 0xef, 0x79, 0xa8, 0xaf, 0xbc, - 0xb7, 0x4c, 0x14, 0xea, 0xcb, 0x2e, 0x6a, 0x27, 0xf3, 0x4b, 0xba, 0x45, 0x0f, 0x00, 0x5c, 0x3f, - 0x88, 0x84, 0x19, 0x10, 0x71, 0x91, 0xe4, 0x71, 0x59, 0x51, 0x86, 0x44, 0x5c, 0xa0, 0x9f, 0x41, - 0x85, 0x45, 0x22, 0xe3, 0xc7, 0xa3, 0x17, 0xc4, 0x24, 0x05, 0xe8, 0x42, 0xf1, 0x9c, 0xf1, 0x09, - 0x89, 0xe7, 0x97, 0xad, 0xe6, 0xf3, 0x9b, 0x62, 0xaf, 0x71, 0x12, 0x7f, 0xe5, 0xf4, 0x48, 0xf0, - 0x46, 0x09, 0xe2, 0x44, 0x01, 0x7a, 0x09, 0x15, 0x97, 0x99, 0x61, 0xe2, 0xf5, 0xa4, 0x83, 0xdc, - 0xfb, 0xe4, 0xb3, 0x60, 0x70, 0x59, 0xba, 0x36, 0x9e, 0x83, 0xb6, 0xac, 0x17, 0x6d, 0xc2, 0xfa, - 0x6f, 0x47, 0x03, 0x19, 0x7a, 0x9b, 0xb0, 0xfe, 0xbe, 0xd5, 0x3b, 0x89, 0x23, 0x6f, 0x88, 0x07, + 0x15, 0xb6, 0x24, 0x5b, 0xb2, 0x8e, 0x7e, 0x4c, 0x61, 0x37, 0x29, 0xe3, 0x26, 0x69, 0x86, 0xb3, + 0x9b, 0xa4, 0xdb, 0x46, 0x6e, 0xbc, 0x19, 0xc7, 0x9b, 0xee, 0xa4, 0x23, 0x47, 0x4a, 0xac, 0xda, + 0xfa, 0x19, 0x48, 0xce, 0x36, 0xed, 0x74, 0x58, 0x98, 0x84, 0x69, 0xd6, 0x14, 0xc1, 0x80, 0xa0, + 0xbb, 0xca, 0x5b, 0xb4, 0x2f, 0xd1, 0xe9, 0x03, 0xf4, 0xb2, 0xef, 0xd0, 0xab, 0x3e, 0x49, 0x7b, + 0xd7, 0x8b, 0x1d, 0x80, 0x3f, 0xfa, 0xb3, 0xd7, 0xe3, 0x2b, 0x01, 0xe7, 0x7c, 0xe7, 0x00, 0x38, + 0xff, 0x14, 0xdc, 0x3b, 0xf3, 0xa6, 0x82, 0xba, 0xb6, 0xb7, 0x63, 0x31, 0x4e, 0x77, 0x04, 0x09, + 0x2f, 0xc2, 0x66, 0xc0, 0x99, 0x60, 0xa8, 0x96, 0xb2, 0x9a, 0x92, 0xb5, 0xfd, 0x70, 0x11, 0xe9, + 0xda, 0xd4, 0x17, 0xee, 0x99, 0x4b, 0x79, 0x0c, 0xdf, 0x7e, 0xb0, 0xc4, 0xf7, 0x05, 0xe5, 0x67, + 0xc4, 0xa2, 0x09, 0xfb, 0xfe, 0x22, 0xdb, 0x73, 0x05, 0xe5, 0xc4, 0x0b, 0xaf, 0xe6, 0x86, 0xd4, + 0x8a, 0xb8, 0x2b, 0xa6, 0x09, 0xf7, 0xa1, 0xc3, 0x98, 0xe3, 0xd1, 0x1d, 0xb5, 0x3b, 0x8d, 0xce, + 0x76, 0xec, 0x88, 0x13, 0xe1, 0x32, 0x3f, 0x95, 0x5e, 0xe6, 0x87, 0x82, 0x47, 0x96, 0x88, 0xb9, + 0xc6, 0xbf, 0xf3, 0x50, 0xc6, 0x34, 0x64, 0x11, 0xb7, 0x68, 0x88, 0x0e, 0x60, 0x93, 0xd3, 0x8f, + 0x11, 0x0d, 0x45, 0xa8, 0xe7, 0x1e, 0x15, 0x9e, 0x56, 0x76, 0x1f, 0x37, 0x17, 0x1e, 0xda, 0xcc, + 0xb0, 0xd9, 0xaa, 0xe3, 0x0b, 0x3e, 0xc5, 0x99, 0x1c, 0x7a, 0x0d, 0x45, 0xcf, 0x9d, 0xb8, 0x22, + 0xd4, 0xf3, 0xb7, 0xd2, 0x90, 0x48, 0x6d, 0xff, 0x09, 0x6a, 0x0b, 0x0c, 0xf4, 0x0d, 0xac, 0xfb, + 0x64, 0x42, 0xf5, 0xdc, 0xa3, 0xdc, 0xd3, 0xfa, 0xee, 0x97, 0x37, 0xaa, 0xeb, 0x93, 0x09, 0xc5, + 0x4a, 0x04, 0x7d, 0x0e, 0x1b, 0x97, 0xc4, 0x8b, 0xa8, 0x9e, 0x7f, 0x94, 0x7b, 0x5a, 0xc6, 0xf1, + 0xc6, 0xf8, 0x23, 0x54, 0xe7, 0xb1, 0xa8, 0x02, 0xa5, 0x93, 0xfe, 0x51, 0x7f, 0xf0, 0x5d, 0x5f, + 0x5b, 0x43, 0x25, 0x28, 0xbc, 0x19, 0x9e, 0x68, 0x39, 0xb9, 0x78, 0x37, 0x3c, 0xd1, 0xf2, 0x08, + 0xa0, 0xd8, 0xeb, 0xf4, 0x06, 0xf8, 0x83, 0x56, 0x90, 0xd0, 0xd1, 0x78, 0x80, 0x5b, 0xef, 0x3a, + 0xda, 0x3a, 0xba, 0x03, 0x8d, 0xce, 0xf0, 0xb0, 0xd3, 0xeb, 0xe0, 0xd6, 0xb1, 0x99, 0x92, 0x37, + 0x8c, 0xbf, 0xe6, 0xa0, 0xfe, 0x6e, 0x78, 0xd2, 0xb2, 0x2c, 0xea, 0x51, 0x4e, 0x04, 0xe3, 0xe8, + 0x2e, 0x14, 0x6d, 0x7a, 0xe9, 0x5a, 0xf1, 0x23, 0xca, 0x38, 0xd9, 0xa1, 0xc7, 0x50, 0x8b, 0xfc, + 0x80, 0x70, 0xe1, 0x4a, 0x87, 0x51, 0x5b, 0xdd, 0x73, 0xf3, 0x70, 0x0d, 0x2f, 0x92, 0xd1, 0x13, + 0xa8, 0x67, 0x5b, 0x33, 0x74, 0x3f, 0x51, 0xbd, 0x20, 0xf5, 0x48, 0x60, 0x46, 0x1f, 0xb9, 0x9f, + 0xe8, 0xc1, 0x5d, 0xf8, 0x7c, 0x11, 0x68, 0xc6, 0x4f, 0xfe, 0x03, 0x34, 0x3a, 0xdf, 0x0b, 0xea, + 0xdb, 0xd4, 0x9e, 0x79, 0xfb, 0x2d, 0x6c, 0x39, 0x41, 0x64, 0x92, 0xd9, 0x45, 0xd5, 0xf5, 0x2a, + 0xbb, 0x0f, 0x96, 0x6c, 0xbc, 0xf8, 0x1a, 0x5c, 0x77, 0x82, 0x68, 0x6e, 0x6f, 0xfc, 0x37, 0x07, + 0x5b, 0x38, 0xf2, 0x85, 0x3b, 0xa1, 0x3d, 0x2a, 0x88, 0x4d, 0x04, 0x41, 0xaf, 0x61, 0x5d, 0x4c, + 0x83, 0xd4, 0x69, 0x5f, 0x2d, 0x3b, 0x6d, 0x11, 0x9d, 0xee, 0xc7, 0xd3, 0x80, 0x62, 0x25, 0x87, + 0x74, 0x28, 0x5d, 0x52, 0x1e, 0xba, 0xcc, 0x4f, 0x7c, 0x97, 0x6e, 0xa5, 0x2d, 0xcf, 0x3c, 0x72, + 0xc9, 0x78, 0x6c, 0x03, 0x9c, 0xec, 0xe4, 0x6b, 0x02, 0x2f, 0x72, 0x5c, 0xdf, 0x9c, 0x24, 0x6a, + 0xf5, 0xf5, 0x2b, 0x5f, 0x33, 0x54, 0xa8, 0xf4, 0x6c, 0x5c, 0x0f, 0x16, 0xf6, 0xc6, 0x13, 0xa8, + 0xcc, 0x5d, 0x07, 0x95, 0x61, 0x63, 0x30, 0x3e, 0xec, 0x60, 0x6d, 0x0d, 0xd5, 0xa0, 0xfc, 0xf6, + 0xf8, 0xc3, 0xb8, 0x63, 0x8e, 0xda, 0x47, 0x5a, 0xce, 0xd8, 0x83, 0xfa, 0xa2, 0x2a, 0xf4, 0x05, + 0xd4, 0xdd, 0xd0, 0x0c, 0xa7, 0xbe, 0x65, 0xc6, 0x4a, 0xd5, 0xf3, 0x37, 0x71, 0xd5, 0x0d, 0x47, + 0x53, 0xdf, 0x8a, 0xd1, 0xc6, 0xff, 0xd6, 0xa1, 0x3a, 0x26, 0xe1, 0x45, 0x26, 0x66, 0x40, 0xd5, + 0x76, 0x43, 0x8b, 0x5d, 0x52, 0x4e, 0x4e, 0x3d, 0x9a, 0x0a, 0xcd, 0xd3, 0xd0, 0x3e, 0x94, 0x78, + 0x7c, 0x2b, 0x65, 0x8f, 0xca, 0xee, 0xc3, 0x1f, 0x37, 0x29, 0x4e, 0xe1, 0xe8, 0x6b, 0x28, 0xc9, + 0x5f, 0x16, 0x89, 0xc4, 0x1e, 0xf7, 0x9a, 0x71, 0x45, 0x68, 0xa6, 0x15, 0xa1, 0xd9, 0x4e, 0x2a, + 0x06, 0x4e, 0x91, 0x68, 0x0f, 0x4a, 0x9c, 0x0a, 0xee, 0xd2, 0x50, 0xdf, 0x50, 0x42, 0xf7, 0x57, + 0xd2, 0x4e, 0xf0, 0xe9, 0x48, 0x70, 0x22, 0xa8, 0x33, 0xc5, 0x29, 0x18, 0xfd, 0x02, 0x1a, 0xe9, + 0xb5, 0xa7, 0x66, 0xea, 0xc0, 0xa2, 0xf2, 0x93, 0x96, 0x31, 0xde, 0x27, 0x9e, 0xdc, 0x07, 0xdd, + 0xa6, 0x01, 0xa7, 0x16, 0x11, 0xd4, 0x36, 0x29, 0xe7, 0x8c, 0x9b, 0x13, 0x1a, 0x86, 0xc4, 0xa1, + 0x7a, 0x49, 0xc9, 0xdc, 0x9d, 0xf1, 0x3b, 0x92, 0xdd, 0x8b, 0xb9, 0x32, 0x6f, 0x54, 0x09, 0xe5, + 0x51, 0x20, 0x5c, 0x69, 0xb2, 0xcd, 0x34, 0x6f, 0x16, 0xc8, 0xe8, 0x19, 0x20, 0x8b, 0x58, 0xe7, + 0xd4, 0x0c, 0x29, 0x77, 0x89, 0xe7, 0x7e, 0x52, 0xf6, 0x2d, 0x2b, 0xfb, 0x36, 0x14, 0x67, 0x34, + 0xc7, 0x40, 0x5f, 0x42, 0xdd, 0xa1, 0xbe, 0x8c, 0x6a, 0x1a, 0x9a, 0x36, 0xb5, 0x2e, 0x74, 0x50, + 0xd0, 0x5a, 0x46, 0x6d, 0x53, 0xeb, 0x42, 0x16, 0x24, 0x41, 0x9c, 0x50, 0xaf, 0xa8, 0xfa, 0xb6, + 0x5c, 0x90, 0xe6, 0x5d, 0xdb, 0x1c, 0x13, 0x27, 0x8c, 0xcb, 0x9b, 0x12, 0x41, 0x5f, 0x41, 0x23, + 0x60, 0xb6, 0x29, 0xe8, 0x24, 0xf0, 0x88, 0xa0, 0xa6, 0x2a, 0x6c, 0x55, 0xf5, 0xd6, 0xad, 0x80, + 0xd9, 0xe3, 0x84, 0x2e, 0xcb, 0xd2, 0xf6, 0x4b, 0x28, 0x67, 0xe2, 0x48, 0x83, 0xc2, 0x05, 0x9d, + 0x26, 0xe5, 0x43, 0x2e, 0xaf, 0xae, 0x6d, 0xaf, 0xf2, 0xfb, 0xb9, 0x83, 0x3b, 0xf0, 0xd9, 0x82, + 0x19, 0x92, 0x1a, 0xf0, 0x9f, 0x8d, 0x38, 0xee, 0xd2, 0x43, 0xd0, 0xcf, 0x21, 0xef, 0xda, 0x49, + 0xca, 0xdf, 0x5b, 0x7a, 0x45, 0x37, 0xeb, 0x60, 0x38, 0xef, 0xda, 0x08, 0x25, 0xe9, 0x1c, 0x9f, + 0x15, 0xa7, 0xe8, 0x4b, 0xd8, 0xcc, 0x32, 0xad, 0xa0, 0x94, 0xfc, 0xf4, 0x47, 0x4c, 0x81, 0x33, + 0x30, 0xfa, 0x35, 0x94, 0xb3, 0x06, 0x78, 0x4d, 0x8e, 0xca, 0xd4, 0xb3, 0xbb, 0x29, 0x08, 0xcf, + 0xf0, 0x68, 0x07, 0x8a, 0x56, 0x14, 0x0a, 0x36, 0x49, 0x02, 0xf3, 0x27, 0x2b, 0xd1, 0x3c, 0x52, + 0xfd, 0x0d, 0x27, 0x30, 0xb4, 0x0f, 0x65, 0x8b, 0xf9, 0x82, 0xb8, 0x3e, 0xe5, 0x2a, 0x14, 0x2b, + 0xbb, 0xfa, 0xd2, 0x69, 0x6f, 0x52, 0xfe, 0xe1, 0x1a, 0x9e, 0x81, 0xd1, 0xaf, 0xa0, 0x74, 0xb1, + 0x1f, 0x9a, 0x01, 0xb3, 0xf5, 0x86, 0x92, 0xbb, 0xb3, 0x24, 0x77, 0xb4, 0x1f, 0x0e, 0x99, 0x7d, + 0xb8, 0x86, 0x8b, 0x17, 0x6a, 0x85, 0x1e, 0x43, 0x21, 0xfc, 0xe8, 0xe9, 0x48, 0xa1, 0xd1, 0x12, + 0x7a, 0xf4, 0xd1, 0x3b, 0x5c, 0xc3, 0x12, 0x20, 0xc3, 0x40, 0x0e, 0x13, 0xa6, 0xb4, 0x63, 0x96, + 0x26, 0x32, 0xe4, 0x37, 0xf0, 0x96, 0x64, 0xc8, 0xe7, 0xa7, 0x59, 0xd2, 0x05, 0x2d, 0xed, 0xf8, + 0xa6, 0xbc, 0x1b, 0xfd, 0x5e, 0xa8, 0x70, 0x5f, 0x2d, 0x01, 0xa3, 0x04, 0xf6, 0x26, 0x46, 0xe1, + 0xad, 0x70, 0x91, 0x80, 0x06, 0x80, 0x68, 0xd2, 0x05, 0x4c, 0x9e, 0xb6, 0x01, 0x95, 0x0e, 0x95, + 0xdd, 0x47, 0x4b, 0xca, 0x56, 0xda, 0x05, 0x6e, 0xd0, 0x95, 0x0e, 0xf2, 0x1b, 0x28, 0x5a, 0xcc, + 0x3f, 0x73, 0x1d, 0x5d, 0x53, 0xb9, 0xf0, 0xe4, 0x8a, 0x00, 0x48, 0xc3, 0x4d, 0x5a, 0xf9, 0xcc, + 0x75, 0x92, 0x66, 0x1f, 0x8b, 0x6d, 0x7f, 0x03, 0x95, 0x39, 0xf2, 0xad, 0xa2, 0x7c, 0x13, 0x8a, + 0x82, 0x70, 0x87, 0x0a, 0x63, 0x0f, 0x6a, 0x99, 0x07, 0x87, 0x8c, 0x0b, 0x99, 0xc7, 0x99, 0x17, + 0xcd, 0x80, 0x71, 0xa1, 0x34, 0xd6, 0x70, 0xcd, 0x9a, 0x87, 0x19, 0xff, 0x2f, 0x40, 0x39, 0x13, + 0x94, 0x27, 0xb9, 0x13, 0x59, 0x7a, 0xe2, 0xd3, 0xe3, 0x8d, 0xec, 0x43, 0x16, 0x9b, 0x4c, 0x88, + 0x6f, 0xab, 0x71, 0xa6, 0x8c, 0xd3, 0xad, 0x4c, 0x09, 0xc2, 0x9d, 0x50, 0x2f, 0x28, 0xb2, 0x5a, + 0xa3, 0x3d, 0x28, 0xcf, 0xec, 0xba, 0x7e, 0x65, 0xac, 0xcd, 0xec, 0x39, 0x83, 0xa2, 0x67, 0x50, + 0xa0, 0xfe, 0xa5, 0xbe, 0xa1, 0x8c, 0xb8, 0x9c, 0x45, 0x47, 0x74, 0xfa, 0x5e, 0xbe, 0x7a, 0x48, + 0x5c, 0x8e, 0x25, 0x0e, 0xbd, 0xcc, 0xcc, 0x5e, 0xbc, 0x51, 0xe2, 0x20, 0xaf, 0xe7, 0x52, 0x73, + 0xa3, 0x5d, 0xd8, 0x90, 0xe6, 0x08, 0xf5, 0x92, 0x92, 0xbb, 0x7f, 0x5d, 0x1e, 0x48, 0xf3, 0xe0, + 0x18, 0x8a, 0x5a, 0x50, 0x91, 0x59, 0x6b, 0x26, 0x27, 0x5e, 0x1d, 0x2d, 0x6d, 0x22, 0xc8, 0x31, + 0x23, 0xb6, 0xeb, 0x3b, 0xb1, 0x3f, 0x31, 0x48, 0xa1, 0x78, 0x8d, 0xba, 0x50, 0x25, 0xdc, 0x3a, + 0x77, 0x05, 0xb5, 0x44, 0xc4, 0xa9, 0xaa, 0xaa, 0xab, 0x93, 0x5c, 0x76, 0x7a, 0xb3, 0x35, 0x07, + 0xc6, 0x0b, 0xa2, 0x46, 0x17, 0xaa, 0xf3, 0xdc, 0xc5, 0xd9, 0xad, 0x0c, 0x1b, 0xad, 0x5e, 0x7b, + 0xef, 0x85, 0x96, 0x53, 0x4b, 0xdc, 0xdb, 0x7b, 0x11, 0xcf, 0x6f, 0x2d, 0xdc, 0x33, 0xdf, 0xef, + 0x69, 0x85, 0x6c, 0xfd, 0x52, 0x5b, 0x37, 0xfe, 0x99, 0x07, 0xe8, 0x0e, 0xd2, 0x1e, 0x86, 0x8e, + 0xa0, 0x66, 0xb3, 0xbf, 0xf8, 0x1e, 0x23, 0xb6, 0x39, 0x61, 0x76, 0x3a, 0xba, 0x2c, 0x8f, 0xaf, + 0x33, 0x89, 0x66, 0x3b, 0x81, 0xf7, 0x98, 0x4d, 0x71, 0xd5, 0x9e, 0xdb, 0xa1, 0x0e, 0x54, 0xa2, + 0x60, 0xa6, 0x2a, 0xaf, 0x54, 0x7d, 0x71, 0xbd, 0xaa, 0x93, 0x20, 0x53, 0x04, 0x51, 0xb6, 0x36, + 0x8e, 0xa1, 0x3a, 0x7f, 0x08, 0x42, 0x50, 0x6f, 0x0f, 0xbe, 0xeb, 0x1f, 0x0f, 0x5a, 0x6d, 0xb3, + 0xd3, 0x7a, 0xa7, 0xa6, 0x92, 0xcf, 0x60, 0x2b, 0xa3, 0x8d, 0xc6, 0xb8, 0xd3, 0xea, 0x69, 0xb9, + 0x98, 0x68, 0xf6, 0x07, 0x63, 0x33, 0xe5, 0x69, 0x79, 0xa3, 0x03, 0x30, 0x3b, 0x47, 0xea, 0x3a, + 0x19, 0x2a, 0xa9, 0x41, 0xdf, 0xec, 0xfc, 0xae, 0x3b, 0xd6, 0xd6, 0x90, 0x06, 0xd5, 0x84, 0x16, + 0x6b, 0xcf, 0xa1, 0x06, 0xd4, 0x12, 0x45, 0x31, 0x43, 0xcb, 0x1b, 0x7f, 0xcf, 0x43, 0x63, 0xc5, + 0xdf, 0x32, 0x51, 0xa8, 0x2f, 0xbb, 0xa8, 0x9d, 0xcc, 0x2f, 0xe9, 0x16, 0x3d, 0x00, 0x70, 0xfd, + 0x20, 0x12, 0x66, 0x40, 0xc4, 0x79, 0x92, 0xc7, 0x65, 0x45, 0x19, 0x12, 0x71, 0x8e, 0x7e, 0x06, + 0x15, 0x16, 0x89, 0x8c, 0x1f, 0x0f, 0x75, 0x10, 0x93, 0x14, 0xa0, 0x0b, 0xc5, 0x33, 0xc6, 0x27, + 0x24, 0x9e, 0x5f, 0xea, 0xbb, 0xcf, 0x6f, 0x8a, 0xbd, 0xe6, 0x71, 0xfc, 0xfd, 0xd4, 0x23, 0xc1, + 0x5b, 0x25, 0x88, 0x13, 0x05, 0xe8, 0x15, 0x54, 0x5c, 0x66, 0x86, 0x89, 0xd5, 0x93, 0x0e, 0x72, + 0xef, 0x5a, 0xb7, 0x60, 0x70, 0x59, 0xba, 0x36, 0x9e, 0x83, 0xb6, 0xac, 0x17, 0x6d, 0xc2, 0xfa, + 0x6f, 0x47, 0x03, 0x19, 0x7a, 0x9b, 0xb0, 0xfe, 0xa1, 0xd5, 0x3b, 0x8e, 0x23, 0x6f, 0x88, 0x07, 0xe3, 0x81, 0x96, 0x37, 0xfe, 0x95, 0x83, 0x62, 0xdc, 0x23, 0xd0, 0xb7, 0x73, 0xcd, 0x32, 0x77, - 0x6d, 0x0a, 0x1d, 0x1f, 0x84, 0x83, 0xb3, 0x3f, 0x53, 0x4b, 0x5c, 0xd3, 0x31, 0x9b, 0xb0, 0x29, - 0xc7, 0x86, 0x30, 0xa0, 0x56, 0x32, 0xfe, 0x7d, 0xb2, 0xed, 0x95, 0x02, 0x66, 0x8f, 0x02, 0x6a, - 0x2d, 0xe7, 0x6d, 0xe1, 0xf6, 0x79, 0x6b, 0xfc, 0x23, 0x0f, 0xf5, 0x95, 0x6b, 0xa1, 0x36, 0x14, - 0x3d, 0x72, 0x46, 0xbd, 0xf4, 0x43, 0xee, 0x97, 0x37, 0x19, 0xd2, 0x38, 0x51, 0xf0, 0xf4, 0x63, - 0x4c, 0x6d, 0xd0, 0x08, 0x2a, 0xc4, 0xf7, 0x99, 0x50, 0x83, 0x67, 0xfa, 0x45, 0xf7, 0xfc, 0x46, - 0x55, 0xad, 0x99, 0x4c, 0xac, 0x6f, 0x5e, 0x8b, 0x6c, 0x27, 0x73, 0x67, 0xdd, 0xa6, 0x9d, 0xec, - 0xbc, 0x02, 0x6d, 0x59, 0xf7, 0x6d, 0xe4, 0x8d, 0xbf, 0xe5, 0xa0, 0x30, 0xfa, 0xe0, 0xa1, 0xfb, - 0x50, 0x0e, 0x05, 0x11, 0x74, 0x42, 0x7d, 0x91, 0x48, 0xce, 0x08, 0xe8, 0x05, 0x94, 0x6c, 0x97, - 0x78, 0xd4, 0x12, 0x49, 0x4d, 0xd8, 0x59, 0x1d, 0x12, 0x1a, 0xed, 0x18, 0x81, 0x53, 0xa8, 0xb1, - 0x0f, 0xa5, 0x84, 0x26, 0xbf, 0x25, 0x4e, 0xfb, 0xed, 0xce, 0x9b, 0x6e, 0xbf, 0xd3, 0x8e, 0xc3, - 0xae, 0xd5, 0x1f, 0x75, 0xb5, 0x9c, 0x5c, 0x1d, 0x75, 0xdf, 0x75, 0xb4, 0xfc, 0xec, 0xcb, 0xa3, - 0x70, 0xf8, 0xed, 0xef, 0x5f, 0x3a, 0xae, 0xb8, 0x88, 0xce, 0x1a, 0x16, 0x9b, 0xec, 0xaa, 0x93, - 0x18, 0x77, 0xe2, 0xc5, 0x6e, 0xf6, 0xed, 0xef, 0x50, 0x7f, 0x37, 0x38, 0x7b, 0xe6, 0xb0, 0xdd, - 0x85, 0xbf, 0x03, 0xce, 0x8a, 0x2a, 0xb6, 0xbe, 0xfe, 0x21, 0x00, 0x00, 0xff, 0xff, 0x49, 0xe9, - 0x46, 0x7b, 0xad, 0x10, 0x00, 0x00, + 0x65, 0x0a, 0x1d, 0xed, 0x87, 0x83, 0xd3, 0x3f, 0x53, 0x4b, 0x5c, 0xd1, 0x31, 0x77, 0x61, 0x53, + 0x8e, 0x0d, 0x61, 0x40, 0xad, 0x64, 0xfc, 0xbb, 0xb6, 0xed, 0x95, 0x02, 0x66, 0x8f, 0x02, 0x6a, + 0x2d, 0xe7, 0x6d, 0xe1, 0xf6, 0x79, 0x6b, 0xfc, 0x23, 0x0f, 0x8d, 0x95, 0x6b, 0xa1, 0x36, 0x14, + 0x3d, 0x72, 0x4a, 0xbd, 0xf4, 0x13, 0xf1, 0x97, 0x37, 0x3d, 0xa4, 0x79, 0xac, 0xe0, 0xe9, 0x67, + 0x9e, 0xda, 0xa0, 0x11, 0x54, 0x88, 0xef, 0x33, 0xa1, 0x06, 0xcf, 0xf4, 0x5b, 0xf1, 0xf9, 0x8d, + 0xaa, 0x5a, 0x33, 0x99, 0x58, 0xdf, 0xbc, 0x16, 0xd9, 0x4e, 0xe6, 0xce, 0xba, 0x4d, 0x3b, 0xd9, + 0x7e, 0x0d, 0xda, 0xb2, 0xee, 0xdb, 0xc8, 0x1b, 0x7f, 0xcb, 0x41, 0x61, 0xf4, 0xd1, 0x43, 0xf7, + 0xa1, 0x1c, 0x0a, 0x22, 0xe8, 0x84, 0xfa, 0x22, 0x91, 0x9c, 0x11, 0xd0, 0x0b, 0x28, 0xd9, 0x2e, + 0xf1, 0xa8, 0x25, 0x92, 0x9a, 0xb0, 0xbd, 0x3a, 0x24, 0x34, 0xdb, 0x31, 0x02, 0xa7, 0x50, 0xe3, + 0x25, 0x94, 0x12, 0x9a, 0xfc, 0x06, 0x39, 0xe9, 0xb7, 0x3b, 0x6f, 0xbb, 0xfd, 0x4e, 0x3b, 0x0e, + 0xbb, 0x56, 0x7f, 0xd4, 0xd5, 0x72, 0x72, 0x75, 0xd8, 0x7d, 0xdf, 0xd1, 0xf2, 0xb3, 0x2f, 0x96, + 0xc2, 0xc1, 0xb7, 0xbf, 0x7f, 0xe5, 0xb8, 0xe2, 0x3c, 0x3a, 0x6d, 0x5a, 0x6c, 0xb2, 0xa3, 0x4e, + 0x62, 0xdc, 0x89, 0x17, 0x3b, 0xd9, 0xbf, 0x0a, 0x0e, 0xf5, 0x77, 0x82, 0xd3, 0x67, 0x0e, 0xdb, + 0x59, 0xf8, 0xa3, 0xe1, 0xb4, 0xa8, 0x62, 0xeb, 0xeb, 0x1f, 0x02, 0x00, 0x00, 0xff, 0xff, 0x33, + 0xce, 0x13, 0xac, 0x07, 0x11, 0x00, 0x00, } diff --git a/flyteidl/gen/pb-go/flyteidl/core/tasks.pb.validate.go b/flyteidl/gen/pb-go/flyteidl/core/tasks.pb.validate.go index 4f87d15b24..d48e63197e 100644 --- a/flyteidl/gen/pb-go/flyteidl/core/tasks.pb.validate.go +++ b/flyteidl/gen/pb-go/flyteidl/core/tasks.pb.validate.go @@ -298,7 +298,15 @@ func (m *RuntimeMetadata) Validate() error { // no validation rules for Flavor - // no validation rules for IsSyncPlugin + if v, ok := interface{}(m.GetPluginMetadata()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return RuntimeMetadataValidationError{ + field: "PluginMetadata", + reason: "embedded message failed validation", + cause: err, + } + } + } return nil } @@ -357,6 +365,73 @@ var _ interface { ErrorName() string } = RuntimeMetadataValidationError{} +// Validate checks the field values on PluginMetadata with the rules defined in +// the proto definition for this message. If any rules are violated, an error +// is returned. +func (m *PluginMetadata) Validate() error { + if m == nil { + return nil + } + + // no validation rules for IsSyncPlugin + + return nil +} + +// PluginMetadataValidationError is the validation error returned by +// PluginMetadata.Validate if the designated constraints aren't met. +type PluginMetadataValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e PluginMetadataValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e PluginMetadataValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e PluginMetadataValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e PluginMetadataValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e PluginMetadataValidationError) ErrorName() string { return "PluginMetadataValidationError" } + +// Error satisfies the builtin error interface +func (e PluginMetadataValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sPluginMetadata.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = PluginMetadataValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = PluginMetadataValidationError{} + // Validate checks the field values on TaskMetadata with the rules defined in // the proto definition for this message. If any rules are violated, an error // is returned. diff --git a/flyteidl/gen/pb-go/flyteidl/service/admin.swagger.json b/flyteidl/gen/pb-go/flyteidl/service/admin.swagger.json index d549d000c0..ffef099025 100644 --- a/flyteidl/gen/pb-go/flyteidl/service/admin.swagger.json +++ b/flyteidl/gen/pb-go/flyteidl/service/admin.swagger.json @@ -6548,6 +6548,16 @@ }, "description": "A map of Parameters." }, + "corePluginMetadata": { + "type": "object", + "properties": { + "is_sync_plugin": { + "type": "boolean", + "format": "boolean", + "description": "+optional It can be used to decide use sync plugin or async plugin during runtime." + } + } + }, "corePrimitive": { "type": "object", "properties": { @@ -6668,10 +6678,9 @@ "type": "string", "description": "+optional It can be used to provide extra information about the runtime (e.g. python, golang... etc.)." }, - "is_sync_plugin": { - "type": "boolean", - "format": "boolean", - "description": "+optional It can be used to decide use sync plugin or async plugin during runtime." + "plugin_metadata": { + "$ref": "#/definitions/corePluginMetadata", + "description": "+optional It can be used to provide extra information for the plugin." } }, "description": "Runtime information. This is loosely defined to allow for extensibility." diff --git a/flyteidl/gen/pb-go/flyteidl/service/agent.swagger.json b/flyteidl/gen/pb-go/flyteidl/service/agent.swagger.json index 926d18fef2..deb02b72bb 100644 --- a/flyteidl/gen/pb-go/flyteidl/service/agent.swagger.json +++ b/flyteidl/gen/pb-go/flyteidl/service/agent.swagger.json @@ -675,6 +675,16 @@ "default": "CLIENT_CREDENTIALS", "description": "Type of the token requested.\n\n - CLIENT_CREDENTIALS: CLIENT_CREDENTIALS indicates a 2-legged OAuth token requested using client credentials." }, + "corePluginMetadata": { + "type": "object", + "properties": { + "is_sync_plugin": { + "type": "boolean", + "format": "boolean", + "description": "+optional It can be used to decide use sync plugin or async plugin during runtime." + } + } + }, "corePrimitive": { "type": "object", "properties": { @@ -761,10 +771,9 @@ "type": "string", "description": "+optional It can be used to provide extra information about the runtime (e.g. python, golang... etc.)." }, - "is_sync_plugin": { - "type": "boolean", - "format": "boolean", - "description": "+optional It can be used to decide use sync plugin or async plugin during runtime." + "plugin_metadata": { + "$ref": "#/definitions/corePluginMetadata", + "description": "+optional It can be used to provide extra information for the plugin." } }, "description": "Runtime information. This is loosely defined to allow for extensibility." diff --git a/flyteidl/gen/pb-go/flyteidl/service/external_plugin_service.swagger.json b/flyteidl/gen/pb-go/flyteidl/service/external_plugin_service.swagger.json index ddbe2f1f66..750b4d795d 100644 --- a/flyteidl/gen/pb-go/flyteidl/service/external_plugin_service.swagger.json +++ b/flyteidl/gen/pb-go/flyteidl/service/external_plugin_service.swagger.json @@ -614,6 +614,16 @@ "default": "CLIENT_CREDENTIALS", "description": "Type of the token requested.\n\n - CLIENT_CREDENTIALS: CLIENT_CREDENTIALS indicates a 2-legged OAuth token requested using client credentials." }, + "corePluginMetadata": { + "type": "object", + "properties": { + "is_sync_plugin": { + "type": "boolean", + "format": "boolean", + "description": "+optional It can be used to decide use sync plugin or async plugin during runtime." + } + } + }, "corePrimitive": { "type": "object", "properties": { @@ -700,10 +710,9 @@ "type": "string", "description": "+optional It can be used to provide extra information about the runtime (e.g. python, golang... etc.)." }, - "is_sync_plugin": { - "type": "boolean", - "format": "boolean", - "description": "+optional It can be used to decide use sync plugin or async plugin during runtime." + "plugin_metadata": { + "$ref": "#/definitions/corePluginMetadata", + "description": "+optional It can be used to provide extra information for the plugin." } }, "description": "Runtime information. This is loosely defined to allow for extensibility." diff --git a/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/README.md b/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/README.md index 863164c8d5..e072239ba1 100644 --- a/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/README.md +++ b/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/README.md @@ -266,6 +266,7 @@ Class | Method | HTTP request | Description - [CoreOutputReference](docs/CoreOutputReference.md) - [CoreParameter](docs/CoreParameter.md) - [CoreParameterMap](docs/CoreParameterMap.md) + - [CorePluginMetadata](docs/CorePluginMetadata.md) - [CorePrimitive](docs/CorePrimitive.md) - [CorePromiseAttribute](docs/CorePromiseAttribute.md) - [CoreQualityOfService](docs/CoreQualityOfService.md) diff --git a/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/api/swagger.yaml b/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/api/swagger.yaml index 28bee081ed..5bcaa69fbf 100644 --- a/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/api/swagger.yaml +++ b/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/api/swagger.yaml @@ -15752,7 +15752,8 @@ definitions: discoverable: true runtime: flavor: "flavor" - is_sync_plugin: true + plugin_metadata: + is_sync_plugin: true type: {} version: "version" cache_serializable: true @@ -16023,7 +16024,8 @@ definitions: discoverable: true runtime: flavor: "flavor" - is_sync_plugin: true + plugin_metadata: + is_sync_plugin: true type: {} version: "version" cache_serializable: true @@ -21301,7 +21303,8 @@ definitions: discoverable: true runtime: flavor: "flavor" - is_sync_plugin: true + plugin_metadata: + is_sync_plugin: true type: {} version: "version" cache_serializable: true @@ -21588,7 +21591,8 @@ definitions: discoverable: true runtime: flavor: "flavor" - is_sync_plugin: true + plugin_metadata: + is_sync_plugin: true type: {} version: "version" cache_serializable: true @@ -22288,7 +22292,8 @@ definitions: discoverable: true runtime: flavor: "flavor" - is_sync_plugin: true + plugin_metadata: + is_sync_plugin: true type: {} version: "version" cache_serializable: true @@ -22569,7 +22574,8 @@ definitions: discoverable: true runtime: flavor: "flavor" - is_sync_plugin: true + plugin_metadata: + is_sync_plugin: true type: {} version: "version" cache_serializable: true @@ -30862,7 +30868,8 @@ definitions: discoverable: true runtime: flavor: "flavor" - is_sync_plugin: true + plugin_metadata: + is_sync_plugin: true type: {} version: "version" cache_serializable: true @@ -31133,7 +31140,8 @@ definitions: discoverable: true runtime: flavor: "flavor" - is_sync_plugin: true + plugin_metadata: + is_sync_plugin: true type: {} version: "version" cache_serializable: true @@ -43550,7 +43558,8 @@ definitions: discoverable: true runtime: flavor: "flavor" - is_sync_plugin: true + plugin_metadata: + is_sync_plugin: true type: {} version: "version" cache_serializable: true @@ -43821,7 +43830,8 @@ definitions: discoverable: true runtime: flavor: "flavor" - is_sync_plugin: true + plugin_metadata: + is_sync_plugin: true type: {} version: "version" cache_serializable: true @@ -56185,7 +56195,8 @@ definitions: discoverable: true runtime: flavor: "flavor" - is_sync_plugin: true + plugin_metadata: + is_sync_plugin: true type: {} version: "version" cache_serializable: true @@ -56456,7 +56467,8 @@ definitions: discoverable: true runtime: flavor: "flavor" - is_sync_plugin: true + plugin_metadata: + is_sync_plugin: true type: {} version: "version" cache_serializable: true @@ -68599,7 +68611,8 @@ definitions: discoverable: true runtime: flavor: "flavor" - is_sync_plugin: true + plugin_metadata: + is_sync_plugin: true type: {} version: "version" cache_serializable: true @@ -68870,7 +68883,8 @@ definitions: discoverable: true runtime: flavor: "flavor" - is_sync_plugin: true + plugin_metadata: + is_sync_plugin: true type: {} version: "version" cache_serializable: true @@ -74891,7 +74905,8 @@ definitions: discoverable: true runtime: flavor: "flavor" - is_sync_plugin: true + plugin_metadata: + is_sync_plugin: true type: {} version: "version" cache_serializable: true @@ -87062,7 +87077,8 @@ definitions: discoverable: true runtime: flavor: "flavor" - is_sync_plugin: true + plugin_metadata: + is_sync_plugin: true type: {} version: "version" cache_serializable: true @@ -87333,7 +87349,8 @@ definitions: discoverable: true runtime: flavor: "flavor" - is_sync_plugin: true + plugin_metadata: + is_sync_plugin: true type: {} version: "version" cache_serializable: true @@ -95059,6 +95076,16 @@ definitions: dataclass_type: {} tag: "tag" required: true + corePluginMetadata: + type: "object" + properties: + is_sync_plugin: + type: "boolean" + format: "boolean" + description: "+optional It can be used to decide use sync plugin or async\ + \ plugin during runtime." + example: + is_sync_plugin: true corePrimitive: type: "object" properties: @@ -95188,15 +95215,15 @@ definitions: type: "string" description: "+optional It can be used to provide extra information about\ \ the runtime (e.g. python, golang... etc.)." - is_sync_plugin: - type: "boolean" - format: "boolean" - description: "+optional It can be used to decide use sync plugin or async\ - \ plugin during runtime." + plugin_metadata: + description: "+optional It can be used to provide extra information for the\ + \ plugin." + $ref: "#/definitions/corePluginMetadata" description: "Runtime information. This is loosely defined to allow for extensibility." example: flavor: "flavor" - is_sync_plugin: true + plugin_metadata: + is_sync_plugin: true type: {} version: "version" coreScalar: @@ -95830,7 +95857,8 @@ definitions: discoverable: true runtime: flavor: "flavor" - is_sync_plugin: true + plugin_metadata: + is_sync_plugin: true type: {} version: "version" cache_serializable: true @@ -96007,7 +96035,8 @@ definitions: discoverable: true runtime: flavor: "flavor" - is_sync_plugin: true + plugin_metadata: + is_sync_plugin: true type: {} version: "version" cache_serializable: true @@ -109018,7 +109047,8 @@ definitions: discoverable: true runtime: flavor: "flavor" - is_sync_plugin: true + plugin_metadata: + is_sync_plugin: true type: {} version: "version" cache_serializable: true @@ -109289,7 +109319,8 @@ definitions: discoverable: true runtime: flavor: "flavor" - is_sync_plugin: true + plugin_metadata: + is_sync_plugin: true type: {} version: "version" cache_serializable: true diff --git a/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/model_core_plugin_metadata.go b/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/model_core_plugin_metadata.go new file mode 100644 index 0000000000..650b85d54e --- /dev/null +++ b/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/model_core_plugin_metadata.go @@ -0,0 +1,15 @@ +/* + * flyteidl/service/admin.proto + * + * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) + * + * API version: version not set + * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) + */ + +package flyteadmin + +type CorePluginMetadata struct { + // +optional It can be used to decide use sync plugin or async plugin during runtime. + IsSyncPlugin bool `json:"is_sync_plugin,omitempty"` +} diff --git a/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/model_core_runtime_metadata.go b/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/model_core_runtime_metadata.go index 88d8551e9d..0a6fa263fc 100644 --- a/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/model_core_runtime_metadata.go +++ b/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/model_core_runtime_metadata.go @@ -17,6 +17,6 @@ type CoreRuntimeMetadata struct { Version string `json:"version,omitempty"` // +optional It can be used to provide extra information about the runtime (e.g. python, golang... etc.). Flavor string `json:"flavor,omitempty"` - // +optional It can be used to decide use sync plugin or async plugin during runtime. - IsSyncPlugin bool `json:"is_sync_plugin,omitempty"` + // +optional It can be used to provide extra information for the plugin. + PluginMetadata *CorePluginMetadata `json:"plugin_metadata,omitempty"` } diff --git a/flyteidl/gen/pb-go/flyteidl/service/openapi.go b/flyteidl/gen/pb-go/flyteidl/service/openapi.go index 79ad385bd4..95a399839e 100644 --- a/flyteidl/gen/pb-go/flyteidl/service/openapi.go +++ b/flyteidl/gen/pb-go/flyteidl/service/openapi.go @@ -78,7 +78,7 @@ func (fi bindataFileInfo) Sys() interface{} { return nil } -var _adminSwaggerJson = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\xfd\x7b\x73\xeb\xb8\x95\x2f\x0c\xff\x3f\x9f\x02\x67\xcf\xa9\xea\xee\x44\xb6\x3b\xc9\x4c\xde\x94\xa7\x4e\xbd\x8f\xda\xd6\xde\xad\xd3\xbe\xc5\x97\xee\xe9\x67\x94\x52\x43\x24\x24\x21\x26\x01\x06\x00\xed\xad\x4e\xe5\xbb\x3f\x85\x85\x0b\x41\x8a\x94\xa8\x8b\x6d\x79\x37\x67\xaa\xd2\xde\x22\x89\xeb\xc2\xc2\xba\xfe\xd6\x3f\xff\x0d\xa1\x0f\xf2\x19\xcf\x66\x44\x7c\x38\x45\x1f\xfe\x78\xfc\xed\x87\x9e\xfe\x8d\xb2\x29\xff\x70\x8a\xf4\x73\x84\x3e\x28\xaa\x12\xa2\x9f\x4f\x93\x85\x22\x34\x4e\x4e\x24\x11\x4f\x34\x22\x27\x38\x4e\x29\x3b\xce\x04\x57\x1c\x3e\x44\xe8\xc3\x13\x11\x92\x72\xa6\x5f\xb7\x7f\x22\xc6\x15\x92\x44\x7d\xf8\x37\x84\xfe\x05\xcd\xcb\x68\x4e\x52\x22\x3f\x9c\xa2\xff\x31\x1f\xcd\x95\xca\x5c\x03\xfa\x6f\xa9\xdf\xfd\x1b\xbc\x1b\x71\x26\xf3\xd2\xcb\x38\xcb\x12\x1a\x61\x45\x39\x3b\xf9\xbb\xe4\xac\x78\x37\x13\x3c\xce\xa3\x96\xef\x62\x35\x97\xc5\x1c\x4f\x70\x46\x4f\x9e\xfe\x70\x82\x23\x45\x9f\xc8\x38\xc1\x39\x8b\xe6\xe3\x2c\xc1\x4c\x9e\xfc\x93\xc6\x7a\x8e\x7f\x27\x91\xfa\x17\xfc\x23\xe6\x29\xa6\xcc\xfc\xcd\x70\x4a\xfe\xe5\xdb\x41\xe8\xc3\x8c\xa8\xe0\x9f\x7a\xb6\x79\x9a\x62\xb1\xd0\x2b\xf2\x91\xa8\x68\x8e\xd4\x9c\x20\xd3\x0f\x72\x4b\xc4\xa7\x08\xa3\x53\x41\xa6\xa7\xbf\x08\x32\x1d\xbb\x85\x3e\x36\x0b\x7c\x01\xa3\xb9\x49\x30\xfb\xe5\xd8\x2e\x13\xb4\xcc\x33\x22\x60\x6e\xc3\x58\xb7\xfe\x89\xa8\x3e\x34\x5b\xbc\x1f\xbe\x2d\x88\xcc\x38\x93\x44\x96\x86\x87\xd0\x87\x3f\x7e\xfb\x6d\xe5\x27\x84\x3e\xc4\x44\x46\x82\x66\xca\xee\x65\x1f\xc9\x3c\x8a\x88\x94\xd3\x3c\x41\xae\xa5\x70\x30\x66\xaa\x7a\x63\xf1\x52\x63\x08\x7d\xf8\xdf\x82\x4c\x75\x3b\xff\x7e\x12\x93\x29\x65\x54\xb7\x2b\x0d\xfd\x04\xa3\x2d\x7d\xf5\xaf\x7f\xab\xfb\xfb\x5f\xc1\x8c\x32\x2c\x70\x4a\x14\x11\xc5\x8e\x9b\xff\xab\xcc\x45\xef\x91\xee\xbc\xd8\xc7\xea\xc0\x2b\xb3\xbd\xc2\x29\xd1\x7b\xa2\x77\xca\x7e\x01\x7f\x0b\x22\x79\x2e\x22\x82\x26\x24\xe1\x6c\x26\x91\xe2\x4b\x6b\x40\xa1\x05\x4d\x5e\xd5\x27\x82\xfc\x23\xa7\x82\xe8\xbd\x52\x22\x27\x95\xa7\x6a\x91\xc1\x20\xa5\x12\x94\xcd\xc2\xa5\xf8\x57\xaf\xd5\xd4\x0c\x55\x6e\x30\x33\xf3\x41\xe3\xc4\x46\xac\xef\x5e\x89\x30\x43\x13\x82\xf4\x59\xa4\x31\x11\x24\x46\x58\x22\x8c\x64\x3e\x91\x44\xa1\x67\xaa\xe6\x94\xe9\x7f\x67\x24\xa2\x53\x1a\xb9\x35\x3b\x9c\xb5\x81\x3f\x57\xaf\xcc\x83\x24\x42\x0f\xfc\x89\xc6\x24\x46\x4f\x38\xc9\x09\x9a\x72\x51\x5a\x9e\xe3\x11\xbb\x9f\xeb\x75\x48\x27\x94\xc1\xc9\xd3\x6b\xe9\x28\xe4\xf7\x6e\xb9\x7e\x8f\x74\x7f\x28\x67\xf4\x1f\x39\x49\x16\x88\xc6\x84\x29\x3a\xa5\x44\x56\x5b\xfb\x3d\x87\xfe\x71\x82\x8e\x90\x5e\x67\x22\x14\xac\x37\x67\x8a\x7c\x56\x12\x1d\xa1\x84\x3e\x12\xf4\xd5\x05\x95\x0a\xf5\x6f\x86\x5f\xf5\xd0\x57\xe6\xbc\x20\xe0\x4d\x5f\xbd\xc2\x0a\xfb\xbf\xff\x16\x1c\x3d\x85\x67\xd5\x43\xf7\xa1\xaf\x4f\xf3\x9d\xb9\x1a\x8a\x16\xfe\xf6\x6f\x61\x3b\x76\xbf\x56\xf3\xdb\x82\xd9\x5a\x4e\xdb\x96\xbf\xc2\x32\x95\x59\xab\xd4\x3b\xb4\x2b\x67\xd5\xed\x56\x59\xab\x7c\x5f\xbc\x55\x4f\xe1\xa5\xf9\xeb\x2e\xcc\x15\x2b\xa0\x7a\x4c\x99\x39\x24\xfe\xcc\x08\xa9\xcf\x89\xa3\xde\x03\x61\x29\xbb\xf0\xda\x60\x66\x01\xbb\x75\x5c\x34\x58\x95\x03\x9c\x77\x42\x53\xba\x6e\x7f\x87\x2c\xd6\x22\x97\x65\x76\x2c\x4f\x27\x44\xe8\x65\x70\x6c\x0f\x66\x3b\xd1\x6c\x50\xe5\x82\x91\xb8\xc5\x34\xff\x91\x13\xb1\x58\x31\xcf\x29\x4e\x64\xd3\x44\x29\x53\x44\xcb\xb7\x95\xc7\x53\x2e\x52\xac\xec\x0b\x7f\xfe\x8f\x4d\x17\x42\xf1\x47\xb2\x6e\xff\x87\x66\x37\x23\x2c\x81\x0c\xd2\x3c\x51\x34\x4b\x08\xca\xf0\x8c\x48\xbb\x22\x79\xa2\x64\x0f\x5e\xd3\x32\x35\x11\x47\xfe\x06\x82\x1e\xdc\xcd\x9b\x4b\xf8\x05\x4d\xbd\x00\xc9\xc8\x67\x05\x2d\x8d\x18\xdc\xbd\xb0\x44\xe1\x8d\xf2\x02\x4b\xb9\x1d\xcd\x48\x2e\xd4\x78\xb2\x38\x7e\x24\x4b\xfd\x36\x52\x0e\x66\x08\x2b\x25\xe8\x24\x57\x44\xcf\x5b\xb7\xe1\xee\x4e\x60\x8f\xe6\x82\x6e\xc3\x1a\xde\x6e\xc2\x31\x15\x24\x82\xb9\x6d\x72\x60\xfc\x57\x7a\xde\x5a\x7f\x59\x98\xd9\x3f\x92\x05\xc8\x23\x35\x2b\xe0\xb7\x7c\xc4\x46\x0c\x1d\xa1\xf3\xc1\xdd\xd9\xe0\xea\x7c\x78\xf5\xe9\x14\x7d\xb7\x40\x31\x99\xe2\x3c\x51\x3d\x34\xa5\x24\x89\x25\xc2\x82\x40\x93\x24\xd6\x32\x87\x1e\x0c\x61\x31\x65\x33\xc4\x45\x4c\xc4\xcb\x2d\x63\xe5\x29\x61\x79\x5a\xb9\x57\xe0\xf7\x62\xf4\x95\x2f\xb4\x88\xe1\x1f\x95\x9e\xfc\x6d\x69\x81\x61\xc6\xba\xef\xa0\xb5\x57\x13\x6a\xa2\x39\x4d\x62\x41\xd8\x89\xc2\xf2\x71\x4c\x3e\x93\x28\x37\x77\xf2\x3f\xcb\x3f\x8c\xb5\x64\xca\x63\x52\xfe\xa5\xf4\x8f\x42\x14\xda\xf8\x53\xaf\xa5\x6e\xfc\x25\xe8\xb4\xed\xbe\x83\x5f\x68\x5c\xfb\x36\xfc\xb2\x66\x0e\xee\x9d\x15\x83\x75\xaf\x34\x8e\xca\xbd\x60\x25\xbe\xda\x77\x04\x51\x62\x31\xc6\x4a\x91\x34\x53\x1b\xea\xeb\x18\x25\x5a\xae\x5c\x25\x47\x5e\xf1\x98\x0c\x5c\x7f\xbf\x20\x23\xce\x92\x18\x4d\x16\x96\x6b\x4d\x89\x20\x2c\x22\xcd\x2d\xdc\x63\xf9\x58\xb4\xb0\x4e\x18\x2d\xf5\x27\x3f\x72\xa1\x3f\x7f\x0f\x02\x69\x69\xe0\xaf\x21\x93\x6e\x7b\xe2\xbe\x38\x0b\xc1\x96\xfc\xa3\xb3\x27\xec\xbe\x92\x6d\xad\x0f\x5c\x20\xb9\x90\x8a\xa4\x6b\xed\x10\xef\x67\x21\xec\x05\x71\xa8\x03\xae\xdc\x51\xbf\x81\x53\x5f\xbe\x71\xbb\xe3\xbd\xc1\x92\xed\xcb\x8a\x78\xe8\xf3\x74\x3e\x9c\xd5\x53\xbd\x73\xdb\x17\x38\x31\xde\xc5\x34\x4b\xb2\xe0\xbe\x07\xf9\x42\xe6\x86\xc6\xbd\x72\xab\x3d\x86\x01\xac\x51\x34\xcb\x76\x68\x7f\xfe\xf4\xa7\xa1\x85\xc6\x98\xe3\xd4\x9c\xca\xc0\x58\x85\x22\x2e\x8c\x2c\x18\xdb\xf3\x6e\x74\xcd\xfe\x7d\xff\x6e\x70\x7f\x8a\xfa\x28\xc6\x0a\xeb\x03\x2e\x48\x26\x88\x24\x4c\x81\x1e\xaf\xbf\x57\x0b\x94\xf2\x98\x24\x46\xe3\xfc\xa8\x25\x5f\x74\x8e\x15\x3e\xc3\x0a\x27\x7c\x76\x8c\xfa\xf0\x4f\xfd\x31\x95\x08\x27\x92\x23\xec\xc8\x8a\xc4\xae\x09\xcc\x62\xc7\x5a\x30\x8a\x78\x9a\xd1\xc4\xdb\xe0\xbd\x71\x85\xb2\x98\x3e\xd1\x38\xc7\x09\xe2\x13\xcd\x55\xb4\x86\x3c\x78\x22\x4c\xe5\x38\x49\x16\x08\x27\x09\xb2\xdd\xba\x17\x90\x9c\xf3\x3c\x89\x75\xbb\x6e\x94\x92\xa6\x34\xc1\x42\xab\xe0\x66\xb4\xd7\xb6\x2d\x74\x3f\x27\x7e\xac\x30\x2e\xbd\x9a\x29\x7e\x24\x12\x51\x85\x32\x2e\x25\x9d\x24\xc5\x99\x7f\x18\x22\x18\xf7\xd9\xc5\x10\xf4\xf9\x48\x21\x6e\x78\xa8\xeb\xdc\xda\x6f\x5c\x8f\x29\x66\x8c\x40\xc7\x5c\xcd\x89\xb0\xdd\xdb\x97\xdf\x5a\x35\x7f\xb8\xba\xbb\x19\x9c\x0d\x3f\x0e\x07\xe7\xcb\xba\xf9\x7d\xff\xee\x87\xe5\x5f\x7f\xba\xbe\xfd\xe1\xe3\xc5\xf5\x4f\xcb\x4f\x2e\xfa\x0f\x57\x67\xdf\x8f\x6f\x2e\xfa\x57\xcb\x0f\x2d\x59\xb5\x56\xf3\xc3\x91\x6d\x78\xb6\x3a\x9b\xe6\x4b\xd9\x34\x7b\x5f\xae\x51\x73\x4a\x13\xd0\x41\x5b\x1b\x34\xbd\x0d\xc1\x7e\x89\x32\x2c\xa5\x91\x8c\xcc\x08\x8e\x47\xec\x92\x0b\xcd\xc0\xa6\x5c\xf3\x08\x2d\x3d\x29\x91\x47\x8a\xb2\x99\xff\xe8\x14\x8d\xf2\x6f\xbf\xfd\x53\x74\x41\xd9\x23\xfc\x45\x0e\x71\x71\x3a\x8b\x6f\x67\xf1\xfd\x6d\x59\x7c\xb5\xe8\x73\x12\x1a\x7a\xf7\x1b\x32\xa4\x85\x0b\x96\xe5\x0a\x44\x09\x9e\x2b\xfd\xa7\xee\x12\xc8\x63\x45\xe0\x50\x3b\x83\xe2\x27\xa2\xfc\x8b\x5a\xb4\x79\x0f\x76\xc4\x9f\xb8\x78\x9c\x26\xfc\xd9\x0f\xfc\x13\x51\x7a\xec\xb7\xb6\x97\x2e\x94\xa8\x0b\x25\x7a\xdb\x50\xa2\x83\x32\xe6\xbd\x3c\xf3\x2b\x5b\xfe\x0c\x07\x6c\xf0\x64\x35\x3a\xaa\x1a\xfc\x50\x81\x9b\xe9\x55\xb8\x66\xd9\x99\xb3\x86\x73\x96\x5e\x7e\x2f\xdc\xb3\x34\xe8\xd7\xe7\x9c\xbf\x09\x7f\x4b\xe7\x4e\xd9\x72\xa1\xde\x25\x83\x6d\x79\x77\xbc\x9a\x33\xe4\xe5\x19\xfe\x52\x6c\xc3\x26\xc1\x0c\x1b\x44\x2f\xb4\x0e\x57\x58\x13\x9f\x50\x1b\x90\x50\x17\x81\xb0\x1c\x72\x50\x1b\x63\xb0\x5b\x50\xc1\xb6\x77\x53\xfb\x30\x81\x4f\x44\x95\x5e\x7e\x2f\x77\x53\x69\xd0\xaf\x7f\x37\xfd\x46\xa3\x03\xba\x70\x80\x17\x5c\xba\x2f\xfd\x46\x3b\x5c\x87\xff\x6f\xc0\xc3\xdf\xb9\xf4\x37\x5a\xa3\x2f\xcb\x87\xff\xa5\x3a\xed\xdf\xa7\x97\xbe\x73\xcb\x77\x6e\xf9\xb7\xf0\x9f\xbc\x3f\xb7\xfc\xcb\xaa\xa7\xc5\xf1\x1a\x3b\x5a\xb0\xfa\x5a\x70\x28\xff\xd5\xc2\x49\x03\x7f\x39\x95\x6f\xd3\xa0\xf1\x46\x1d\xee\xbc\x18\xdf\x00\x8e\xd0\x2f\x96\x90\xd6\xa8\x73\x4b\xdf\xbd\x07\x75\x6e\x79\xd0\x2f\xaf\xc3\xbd\x19\xf3\x7d\xa1\xcb\xf3\x9d\xb0\x81\xcd\x6f\xcb\x2f\x58\x26\xef\x64\xf1\x97\xcf\xc6\x3f\x98\x09\xbd\x1f\xd9\xfb\x0d\x2e\xde\x96\xb7\xee\xde\x73\xb2\x6a\xae\xd9\xe0\x76\x5a\x97\x61\x55\xfd\x9a\x12\xf9\xc7\x77\x79\xdf\xbe\x46\x92\x55\x77\xe1\x76\x17\xae\x6d\xaa\xbb\x70\xbf\xe0\x0b\xf7\xe0\xe0\x6f\x0e\x26\x02\xb4\x0b\x22\xef\x80\x31\xba\x18\xf2\x3d\x2e\x4e\x17\x43\xde\xc5\x90\xff\xc6\x62\xc8\x77\xd1\x9e\xb6\xc5\xa2\x7c\x0b\x3d\xaa\x53\xa3\x3a\x35\x2a\xfc\xbd\x53\xa3\x3a\x35\xaa\x53\xa3\xbe\x70\x14\xd1\x4e\x87\x6a\xbf\x10\x9d\x0e\xd5\x7a\xa9\x3a\x1d\x6a\xc5\xe2\x74\x3a\x54\xa7\x43\xfd\xb6\x74\x28\xf2\x44\x98\x92\x90\x8c\x16\x6a\x14\x1f\x32\x2e\x9b\x35\xa1\x90\x3b\xd4\x68\x41\xd0\x66\x39\x29\x0c\x02\x97\x7e\x41\x73\x2c\x11\x8f\xa2\x5c\x54\xce\x40\x55\x0f\x3a\x13\x04\x2b\x02\x2d\xe8\x0f\xdf\x83\xfe\xb3\x3c\xdd\xd7\x8a\xc1\x9f\xf0\x78\x89\xda\xcd\x41\xa8\x7b\xb2\x5a\x1e\xd9\xdb\xd4\xff\x91\x93\x76\xea\xdf\x0b\x12\xb5\xc2\xf2\x71\xcf\x44\x5d\xca\xb5\xd8\x8a\xa8\xa1\x85\xf7\x42\xd4\xcb\xd3\xfd\xcd\x10\x75\xdd\xd4\x0f\x81\xa8\x9f\x6d\x1e\xff\x9e\x09\x7b\x09\x1e\x60\x2b\xe2\xf6\xad\xbc\x17\x02\xaf\x9f\xf6\x6f\x86\xc8\x9b\xa6\xff\xb6\x84\xee\x53\x24\x5b\x93\xf8\xbd\xa0\xb3\x99\x56\x33\x40\xc3\xd3\xa4\xb8\xbe\x46\x50\x91\x14\xb8\x96\xac\xfd\xab\xef\x81\xa4\xfd\x60\xcd\xd8\x7f\x33\xb4\xbc\x34\xef\x03\x21\xe2\x13\x41\x22\xfe\x04\xf5\xc2\xda\x11\xf3\x2d\x01\x0a\x06\x7e\x9d\x09\xf2\x44\x79\x2e\x93\xc5\x91\xc8\x19\x72\xcc\x1f\xf9\xe6\x8d\xb5\xfa\x99\x26\x09\xe2\x4c\xeb\x5f\x0a\x0b\xe5\x1e\x6b\xfd\x5b\xf0\x14\x4e\x45\x82\xa5\x42\x8f\x8c\x3f\x33\x34\xc5\x34\xc9\x05\x41\x19\xa7\x4c\x1d\x8f\xd8\x90\xa1\x5b\x33\x46\xc8\x1b\xe8\xa1\x5c\xea\xb3\x14\x61\xc6\xb8\x42\xd1\x1c\xb3\x19\x41\x98\x2d\x6c\x02\x6e\x41\x19\x88\x0b\x94\x67\x31\xd6\x8a\xef\x9c\x54\xa3\xf4\xfc\x18\xc1\x7c\x47\x25\xa2\x12\x91\xcf\x4a\x90\x94\x24\x0b\xdd\x87\xa6\x7d\xc5\x91\x5d\x1f\x33\x54\x9b\xce\x47\x84\xe0\x42\x42\xc6\xc1\x64\xf1\x2b\x66\x8a\x32\x82\x40\x51\x92\xc6\x34\x77\x84\x2e\xb8\x04\xb3\xcd\x0f\x7f\x91\x28\x4a\x72\xa9\x88\xe8\xa1\x49\x3e\x93\x5a\x53\xcc\x12\xac\xa6\x5c\xa4\x7a\x84\x94\x49\x85\x27\x34\xa1\x6a\xd1\x43\x29\x8e\xe6\xa6\x2d\x58\x03\xd9\x1b\xb1\x98\x3f\x33\xa9\x04\xc1\xbe\x77\xf7\x10\x7d\x1d\x3e\x33\x04\x20\xbf\xe9\x41\xda\x21\x4d\xb5\xba\x1b\x0c\xbf\xd8\x71\xb3\x27\xba\x11\x12\xa3\x09\x89\x70\x2e\xad\x87\x41\x89\x05\x22\x9f\xe7\x38\x97\xb0\x77\x7a\x7a\x36\x67\x23\xe2\x69\x96\x10\x45\x10\x9d\x22\x25\x28\x89\x11\x9e\x61\xaa\x97\xee\x8e\xac\x00\x41\xf7\x44\x6f\x37\xd0\x52\xfd\x2f\xa0\x7e\xa7\x5c\x10\x14\x13\x85\x69\xb2\xd2\xeb\x64\xbf\xed\xb8\xdc\x7b\xe2\x72\xe5\x0d\x3f\x08\x36\x67\x40\xfc\xf7\x70\x69\x33\x6b\xba\x8f\x70\xb2\xe3\xfd\x7d\x6b\x07\xd5\xd1\xf6\xfb\xa2\x6d\xb3\x6b\x87\x43\xdc\xaf\x16\x83\xdd\xbe\xa2\x45\x51\xcd\xe2\x5d\xd1\xf4\x6b\x84\x05\x74\x0e\xe7\xce\xe1\xdc\xb8\x32\xef\xd3\xe1\x7c\x30\x1e\xa3\xce\xe7\xfc\x42\x3e\x67\x2a\x3b\xa7\x73\xe7\x74\x6e\xbb\x40\x9d\xd3\xb9\x73\x3a\xbf\x5f\xa7\xf3\x4b\xe2\x3e\xef\x15\xdd\xf9\x5d\x89\xd6\x9d\x58\xdd\x89\xd5\x1d\x84\xb3\x9f\xda\xbe\x58\x98\xfb\xfa\x43\x4c\x12\xa2\x48\xb3\x3d\x8b\x88\x54\x6b\x0b\xe6\x7a\xa6\x4c\xcb\x71\x33\x41\xa4\xdc\x95\x21\xf9\x86\xdf\x27\x5b\xf2\xc3\xef\xa0\xe6\x3b\x3e\xd5\xf1\xa9\x6d\xa6\x76\x38\xa6\xd9\xe0\x30\xbf\x96\x6d\xd6\xf3\xdf\x2c\x6f\x96\xfe\x1e\x8c\x1b\xb2\xf0\x8b\x1a\x0a\xd7\x52\xbb\xe2\xfe\x70\x5b\x3a\xdf\x91\x1f\x9b\xbe\xde\x27\x33\x36\x63\xef\x38\x71\xc7\x89\x3b\x4e\xfc\xbe\x39\xb1\x3b\xc9\x6f\xea\x22\x33\x7e\xba\x71\x96\x60\x36\xa6\xb1\x3c\xf9\x67\xa1\xcb\xbf\x94\x87\x4c\x1f\xa8\xd8\xa4\x98\xfa\x94\x4e\xf1\x8b\xfe\x24\x29\x0c\xe6\x1e\x33\x73\x8d\x13\xcd\xd8\xd8\x6f\x12\xcc\x86\xf1\xbb\xf0\xa3\xd5\xce\xfe\x35\x7c\x6a\xbb\xf0\x71\xac\xc0\xd3\x81\x29\x33\x26\xbc\x22\xaf\xb6\x64\xa0\x3c\x8c\x13\xbe\x0b\x57\x0f\x26\x16\x30\x76\xc7\xaf\x83\x45\x39\xbc\x69\x77\x7e\x9d\x2e\x97\xb0\xf3\x5c\xb4\x9c\x70\xe7\xb9\x38\x5c\xcf\xc5\x5b\xb9\x23\x5f\xf9\x78\xbe\x96\x58\xd7\x3e\x08\xdf\x44\xab\x41\x50\x6b\x9e\x25\x1c\xc7\xab\x5c\x31\x85\xe0\x15\x82\xa3\xac\x8d\xc4\x2f\x3e\x7b\x0f\xc2\x5a\x31\xda\xdf\x58\x24\xdf\xf2\xc4\x0f\x45\x4b\x79\xc5\x50\xbe\x7a\x12\xdf\x40\x25\x79\x1f\xf8\xa9\xc5\x78\xbb\xd0\xbe\xce\xa2\xf4\xf6\x16\xa5\x2e\xb4\xaf\x53\x01\x0f\x4c\x05\xec\x42\xfb\xba\xd0\xbe\x4e\x41\x5e\x3d\xed\x4e\x41\xfe\x22\x42\xfb\x5a\x89\xda\x2f\x88\xbd\xb9\xbb\xd0\xdd\xc9\xdc\xee\xbd\x4e\xe6\xee\x64\xee\x2f\x54\xe6\x3e\x8c\x15\xee\x04\xee\x4e\xe0\xee\x04\xee\x4e\xe0\xee\x04\xee\xbd\x2f\x63\x27\x70\xbf\x66\x81\xce\x7a\xa9\x7b\x4d\x92\xcd\x7b\xf5\xe5\x74\xe2\x76\x27\x6e\x1f\xb6\xb8\x7d\x30\x13\x7a\x3f\x65\x1e\xdb\xcd\xa7\x2b\x52\xde\x15\x29\xef\x8a\x94\xbf\x78\x91\x72\xf7\x75\x8b\x8c\x0f\x7b\xb8\x14\x56\xb9\x34\x80\x8f\x82\xcc\xa8\x54\xc0\xfe\xdb\xc8\x2b\xeb\x13\x3d\xde\xab\x9c\xd2\xa5\x7a\xf8\xa7\x9d\xd4\xd2\x49\x2d\xbf\x51\xa9\xe5\x80\x62\xc1\x0e\x22\x63\x25\xc5\x2a\x9a\xe3\x49\x42\xc6\xde\xe8\x23\xdb\xea\xc1\x17\x54\x2a\x89\xa2\x5c\x2a\x9e\x36\x5f\x2e\x97\xae\x87\xbe\xef\xe0\x8c\xb3\x29\x9d\xe5\xe6\x6e\x31\xe0\x9c\xc1\x89\x2e\x24\xc1\x45\x46\xd6\x79\xaa\x6a\x5a\x7f\x17\xd7\x52\xfd\xd0\x5f\xeb\x76\xda\x44\x70\x2f\x8c\x7c\x56\xea\xd6\xb2\xd6\xf8\x76\x70\x77\xfd\x70\x7b\x36\x38\x45\xfd\x2c\x4b\xa8\xb1\xbb\x1b\x52\xa0\xbf\xea\x49\x21\x85\xe5\x63\xb1\x97\xc2\x90\xb9\xc1\xb0\x05\x43\xbf\x96\x8d\xd1\x11\x3a\xbb\x78\xb8\xbb\x1f\xdc\x36\x34\x68\x09\x05\xf2\x56\x49\x9a\x25\x58\x91\x18\x3d\xe6\x13\x22\x18\xd1\xd2\x8e\x45\xba\x2d\xcc\xff\xa6\xd1\xc1\x7f\x0f\xce\x1e\xee\x87\xd7\x57\xe3\xbf\x3e\x0c\x1e\x06\xa7\xc8\x51\x9c\x6e\x56\x8f\x4b\x8f\x22\x5e\x30\x9c\x6a\x0d\x44\xff\x50\x64\xca\xfe\x23\x27\x39\x41\x58\x4a\x3a\x63\x29\x01\x44\xe0\x52\x8b\x6e\xc0\x17\xfd\xef\x06\x17\xe5\x96\xe7\x24\x84\xdf\x45\x09\x9e\x90\xc4\xfa\x23\xc0\xc4\xae\x09\x3d\x80\x2a\x36\x8e\x8a\xdc\xac\xea\x5f\x1f\xfa\x17\xc3\xfb\x9f\xc7\xd7\x1f\xc7\x77\x83\xdb\x1f\x87\x67\x83\xb1\x95\x2a\xcf\xfa\xba\xdf\x52\x4f\x56\xf8\x44\xff\xc8\x71\xa2\xb5\x13\x3e\x75\x78\xbc\xe8\x79\x4e\x18\xca\x19\x50\x9c\x51\x79\xb4\x1e\xe4\x3b\xd5\xa7\xcc\xcc\xe8\xe6\xe2\xe1\xd3\xf0\x6a\x7c\xfd\xe3\xe0\xf6\x76\x78\x3e\x38\x45\x77\x24\x01\xa5\xc0\x2d\x3a\xec\x62\x96\xe4\x33\xca\x10\x4d\xb3\x84\xe8\xd5\xc0\x36\x9b\x78\x8e\x9f\x28\x17\xf6\xe8\xce\xe8\x13\x61\x66\x1d\xe1\xcc\x42\xfb\x4e\xf8\x1e\x07\x4b\x77\x7d\xf5\x71\xf8\xe9\x14\xf5\xe3\xd8\xcf\x41\x42\x1b\x25\xca\x71\xb0\xce\x47\xe5\x61\x6b\xe6\x00\xdd\x1b\x22\xe2\x4f\x44\x08\x1a\x93\x0a\x1d\xf5\xef\xee\x86\x9f\xae\x2e\x07\x57\xf7\xb0\x62\x4a\xf0\x44\xa2\x39\x7f\x06\x53\x36\xcc\x10\x2c\xdc\x4f\x98\x26\xd0\x99\xdb\x2c\xce\xd0\xf3\x9c\x82\xfb\x03\x80\x99\x7d\xcf\x46\x3f\x13\x39\x7b\x73\xeb\x6c\xe9\xe0\x2d\xab\x2d\xd5\x93\xb4\xfc\x46\xe5\x58\xac\x7a\xa1\x44\xe5\xcb\x2f\xae\xa3\xd6\xe5\x2f\x2a\xe4\xd6\xac\xac\x2d\xd1\x4b\xf3\x4c\x8b\xbd\x6e\xad\xab\x95\xd7\xf0\xf5\xae\x59\xa2\x04\x8d\xe4\xcb\x42\x3d\x89\x9c\x29\x9a\x12\x64\x3b\xb3\x87\x73\x8f\xf0\x4f\x97\xa6\xe1\xf7\x70\xc1\x2e\x95\x72\xf8\x44\x94\x1d\x7e\xa7\x02\x76\x2a\xe0\x61\xa8\x80\xef\x2d\xdb\x3f\x26\xd9\x72\x87\x95\x89\xc1\x3b\xc6\xeb\xb5\x14\xa4\x61\xec\x89\xd6\xa2\x9a\x90\x27\x92\x80\x94\xa7\x04\xd6\x4a\xa3\x95\x5d\x26\x82\xe0\x47\x2d\xf0\xc5\xfc\x39\x94\x5c\x6a\x90\xfb\xd1\x7e\x6e\xe1\x36\x41\x1c\x7f\xfa\xe3\xeb\x5d\x16\x7a\xb9\xe3\xd7\x28\xe1\x7d\x0b\x41\x32\x2b\x31\x02\x83\x04\xfb\x5f\xac\x25\x78\xcd\x6d\x11\x7c\xf1\x1e\x2e\x8a\x70\xb8\x07\xa4\x75\xdd\x86\x4a\xb0\x63\xa1\x29\x51\x38\xc6\x0a\xeb\x43\x33\x23\xea\x18\x5d\x33\x78\x76\x8f\xe5\x63\x0f\xb9\x2b\x4f\xb3\x95\xc2\xca\xf0\x0a\xa9\xf5\xef\xc4\x80\xbf\x39\x1f\xef\xae\xef\xee\xfa\xae\x5f\x99\x2e\xcc\xb3\x61\x85\xf7\x75\x31\x6e\xe4\xf3\xda\xdf\xfd\x65\x5a\x7c\xbf\x57\xd8\xeb\x3a\xb9\xf6\x7a\xa1\x99\xca\x59\xdd\x6d\x65\xfe\xaf\xbb\xad\xba\xdb\xaa\xbb\xad\x0e\x60\x85\xdf\xdc\x61\x58\xc3\xdd\xdf\xd4\x63\xb8\x4e\x3b\xdd\x1a\xf2\xae\xd0\x46\x37\x01\xbd\xfb\xa5\x2d\xb6\x5d\xf1\x0d\x7d\x1f\x3e\xc2\x60\x92\xaf\x91\xd6\xb6\xd7\xcb\xdc\xe4\x8b\x74\xfa\xe9\x0b\xde\xf8\x1d\x02\xe1\x5e\x11\x08\x0f\x63\xae\x2f\x92\x02\xf7\x36\x16\xd3\xb7\x4f\x7b\xeb\xa0\x06\xbb\xc4\xae\x2e\xb1\x0b\x7e\xef\xa0\x06\xf7\x47\xad\x2f\x2b\x5d\xf3\x98\x8c\x2b\x51\x02\xfe\x9f\xe3\xaa\xe7\xa7\xf4\x24\x74\x03\x95\x1e\x14\x99\x6e\xd0\x3a\x8d\xf7\x59\x44\xea\x8a\xc7\xa4\x75\x24\x41\xe9\xe5\x03\x97\xc1\xdd\x3c\x8d\x2c\x5e\x1a\xf8\x0b\x4b\xe2\x0d\x5b\xfe\x25\x1a\x76\x6a\x08\xb8\xb3\xf2\xac\x5d\xa8\x2f\x35\xbe\xa0\xe0\x50\xef\xc8\x53\xd1\x8e\x8d\xbb\x98\xc6\x71\x03\x33\xaf\x7f\xee\x59\x7a\xfd\xe3\x97\xc1\x0c\x6a\xcf\xd1\xc1\xac\x12\xbe\xfd\x3e\xec\x2a\xe1\x88\x5f\xc3\xb2\xb2\x72\xef\xbf\x38\xae\xbe\x8a\x92\x3b\xde\xde\x72\xb9\xbe\x54\x0e\xdf\x41\xfc\xac\xb2\x75\x74\x18\x3a\x9d\xa9\xe5\x70\x26\xdc\x99\x5a\xde\xb5\xa9\xc5\xb8\x68\xc7\x19\x16\x84\xa9\x1a\x91\xba\x7a\x9d\xc0\xeb\x21\xe6\x82\x93\x3a\xa0\x01\xa4\x25\x5a\x64\x2f\x64\x7f\x55\x7d\x59\xb6\x17\x2b\x18\x04\x99\x90\x27\xff\x2c\xfe\xf6\xc2\x7a\xa9\x02\xc4\x8a\xe8\x24\x83\xf5\x2f\xf5\x1d\x9d\xdb\x40\xa5\xdd\x73\x25\xb1\x2a\x89\x82\x10\x44\xbd\x36\x9e\xe9\xc6\xbc\xfd\xbe\x52\x24\x97\x06\xfd\xba\xb1\x4d\xcb\x1b\xdf\xee\x00\xb9\x9d\xa1\x26\xdd\x2f\xc8\x29\xd3\xd2\x28\x9f\x16\x17\x83\x44\xcf\x34\x49\x00\x51\x04\x32\x1e\x9b\x6e\x80\xdf\x5c\xc4\x43\xe3\xce\xbf\x69\xdc\x43\x1d\x77\xa8\x63\x09\x6d\xec\xa9\xfb\xca\x99\x76\xc4\x06\xe9\xac\xa0\x0d\xad\x31\xc0\x7e\x19\x9c\xe0\x13\x51\xaf\xc5\x06\xb6\x3d\xfb\x2b\xcf\xbd\x20\x53\x22\x08\x8b\xc8\x01\x7a\xdb\x37\x09\x03\xf9\xc9\x4c\xd2\xc6\x80\x78\x28\x81\x70\xaa\x8a\x5b\x3d\xad\x24\xea\x76\x99\xe4\x5d\x26\x79\x97\x49\x5e\x3d\xea\x5d\x26\x79\x97\x49\x5e\x9b\x03\x11\x93\x84\x28\xd2\x28\x55\x9c\xc3\xe3\xb7\x92\x2a\x4c\xef\x5f\x86\x60\x61\xe6\xd2\xc9\x16\xbf\x19\xcd\xc2\x6d\xf8\x41\x68\x16\xe6\xac\xad\x33\x3f\x94\x7e\xac\x09\xb1\x7e\x75\x93\xc4\x36\x4c\xa3\x64\x97\x38\x87\xd7\xdf\x25\xeb\xa8\x0e\xbd\xb3\x51\xa0\x60\xeb\x5e\x8e\x93\x2c\x1d\x81\x76\x13\xb7\x1e\xc3\xf7\x3b\xef\x43\xe1\xa0\x4d\x74\x7f\xa8\x7c\x74\xeb\xa4\x94\x43\xb1\xd8\x7c\x41\x3c\xb2\xb3\xde\xbc\x71\xae\xc4\x12\x33\x7c\xb7\xd3\xed\x8c\x55\x9d\xb1\xaa\x33\x56\x75\xc6\xaa\xce\x58\x85\x3a\x63\xd5\xc6\xc6\xaa\x2f\x48\xa6\xea\x0c\x57\x9d\x58\xb5\xbf\xe9\x1e\xaa\x96\x79\x48\xd6\xba\xd6\x28\xe9\x45\x0e\xd5\xda\xc8\x7b\x3b\xed\x5f\xd6\x84\xdc\xdf\xb8\x11\xbc\x1f\x7e\x25\x5f\x9a\x25\xed\x12\x58\xec\x76\xf4\x8b\x8d\x2b\xee\x4a\x87\xd6\xae\x55\x17\xf6\xbc\x62\x71\xba\xb0\xe7\x2e\xec\xf9\xe0\xc2\x9e\xf7\xae\xac\x64\x5c\xae\x02\x24\x32\xa5\xb3\x56\xe6\x3f\xbb\x3b\x1b\x12\x8d\x80\x14\x0c\xca\x71\x4c\xb2\x84\x2f\xc0\x92\xb2\xe2\x3a\x77\x5d\xdc\x2c\x49\xd4\x87\x7e\xa3\xbb\x91\xbf\x96\xce\x71\x28\x32\x69\x31\xef\x83\x90\x42\x4f\xfe\x59\x49\xe7\x6f\x85\x97\xc9\x10\xf9\x4c\x25\xdc\x4a\xeb\x09\x7b\xc4\xea\x9f\x04\xa5\x0b\xed\x3d\x38\xc9\x55\x90\xbb\x27\xb5\x60\x95\x11\xa1\x16\xc1\x9b\x24\xcd\xd4\xe2\xbf\x46\x8c\x2a\xef\x61\xa3\x33\xc6\x85\xe1\x6a\xfa\xe3\x39\x66\x71\x42\x84\xbe\x54\x5d\x3b\x11\x66\x8c\x2b\x10\x37\x60\x06\x31\x7a\xa2\xd8\x08\x27\xfd\x9b\x61\x6b\x3f\xf3\x3b\x3a\x5d\xaf\x5d\xac\x6e\xcd\x5d\xf7\x29\xe1\x13\xa8\x60\x99\x97\x75\x7a\xdd\x40\xe7\x19\x2d\xed\xdc\x5b\x31\x04\x85\xe5\x63\x15\x38\xa4\x9c\x85\x3e\x5e\x09\x25\xb2\xe6\xdd\x12\xc6\xfc\xea\x57\x2b\x70\x23\xe5\x67\x16\x80\x04\x1e\xc3\x90\xab\xe3\x70\x3f\x86\x1d\xba\xdf\x8a\x96\xdd\x2f\xae\x74\x37\xfc\x28\x88\x12\x8b\x31\x56\x4a\x33\x99\x7d\x62\x9c\xdc\x63\xf9\xd8\x1a\xe3\xa4\xf4\xf2\x81\xb3\x9c\x12\xc6\x49\x79\xe0\x2f\xce\x72\x5a\x52\xe7\x1a\xce\xf4\xfe\xf2\xe3\xdb\x9e\xb5\x0d\x26\xfe\x5b\xc9\x95\x6f\xc7\x7b\xd6\x99\x69\xdf\x63\xde\xfc\x2a\x66\x7a\x30\x23\xac\xf0\xf3\x2f\xf1\xe4\x96\x6f\xa7\xee\x88\xae\x5a\xa3\x2f\xae\x10\x6e\x45\xe8\x58\x33\xb7\x77\x52\x10\xb7\x2a\x37\xed\x7b\x54\x2f\x63\xe6\x0e\x76\x63\x93\x18\xa0\x61\x19\xad\xdc\x9f\x21\x17\x15\x54\x94\x9e\x9d\x43\xa2\x35\x95\x61\x42\x7c\xc4\x85\x91\xbc\x62\x7b\x66\x8d\xd9\xce\x80\xf9\x9e\xa2\x3e\x8a\x6d\x6d\x7e\x41\x32\x41\x24\x61\xca\xa8\xda\xa6\xde\x95\x2b\xef\x4f\x99\xb5\x10\x9d\x63\x85\xcf\xb0\xc2\x09\x9f\x1d\xa3\xbe\x2f\xec\x4f\x25\xc2\x89\xe4\x08\x3b\xc2\x21\xb1\x6b\x02\xb3\xd8\xb1\x07\x8c\x22\x9e\x66\x34\xf1\x48\xed\xde\x8a\x4f\x59\x4c\x9f\x68\x9c\xe3\xc4\x23\x63\x8f\xd8\xe0\x89\x30\x95\x83\x0a\x87\x93\x04\xd9\x6e\xdd\x0b\x81\x7e\xee\x46\x29\x69\x4a\x13\x2c\x90\xe2\x76\xb4\xd7\xb6\x2d\x74\x3f\x27\x7e\xac\x0e\x05\x1c\xa5\xf8\x91\x48\x44\x15\xca\xb8\x94\x74\x92\x14\xc7\xf8\x61\x88\x60\xdc\x67\x17\x43\x30\x8d\x46\x0a\x71\xc3\x07\x5d\xe7\xd6\x4f\xe0\x7a\x4c\x31\x63\x04\x3a\xe6\x6a\x4e\x84\xed\xde\xbe\xfc\xd6\x56\xce\xb7\xc6\x88\x6e\xb6\x98\x86\x23\x7b\x3b\xa5\xb3\xb5\xc6\xd9\x56\xdd\x6c\xa7\x6b\x36\x2b\x9a\x2f\xe0\xa5\x6d\xaf\x0d\x5e\x50\x59\x56\x07\xdf\x85\xcb\xb6\x34\xe2\xd7\xc0\x47\xfb\x8d\x2a\x82\x9d\x16\xf8\x22\xeb\xf6\xa5\xaa\x80\x07\xae\xff\x75\xc8\x6e\x1d\x8a\x7d\x17\x80\xb1\xc7\xc5\xe9\x02\x30\xba\x00\x8c\x2f\x36\x00\xa3\x59\x9b\xa0\xf1\xce\xe9\x7a\x1b\x56\x90\xf2\x46\x01\xf1\x0b\x88\x52\x58\x3e\xb6\xad\x29\xa5\x45\xe5\x61\xfc\x2e\xa4\xfa\xda\x09\xbf\x86\x74\xdf\xd5\x29\xda\x6b\x9d\xa2\x83\x9b\x76\x27\xf8\x75\x82\x5f\x27\xdb\xb4\x9c\x70\x27\xdb\x1c\xae\x6c\xf3\x56\x0a\xcb\x97\x04\xa1\xab\x85\xa7\x52\x66\xcc\xca\x00\x5b\x03\x47\x03\xee\x81\x3c\x4b\x38\x8e\xd7\x05\xe1\xfc\x82\x0a\xb9\x66\x85\x68\x66\xda\xd5\x1f\x1c\xb8\x64\xb6\x14\x7f\x63\x46\xfe\x5b\x88\xa9\x6d\x9c\xfa\x9b\x86\xd5\x02\xfd\x42\x30\x59\x29\x28\xed\xa5\xb4\x90\x2a\x4d\xb7\x52\x38\xe4\x1f\x0f\x9c\xaa\xfd\x96\xbe\x86\x7a\xf1\x05\x3b\x08\x3a\x27\xc0\x6f\xb3\xf0\xf9\xc1\x48\xad\x9d\x6a\xd7\x65\x55\x76\x46\xfd\x4e\xf1\xed\x14\xdf\xbd\x2f\xe3\x21\x29\xbe\x6f\x28\x51\x9b\x34\x91\x17\x29\x63\xb8\x9d\x6c\xdd\x89\xd6\x9d\x68\xdd\x89\xd6\x5f\xac\x68\x7d\x18\x2b\xdc\xc9\xd5\x9d\x5c\xdd\xc9\xd5\x9d\x5c\xdd\xc9\xd5\x7b\x5f\xc6\x4e\xae\xae\xc8\xd5\xf0\x97\x4b\x93\xde\x54\xc8\x6e\x2d\x5c\xb7\xc8\x89\x7e\x2f\x92\x75\x27\x55\x77\x52\xf5\x61\x4b\xd5\x07\x33\xa1\x2f\x2f\x11\xb2\x4b\x25\xec\x52\x09\xbb\x54\xc2\xb7\x48\x25\x74\xbc\x64\x95\x84\xb2\x2c\x58\xfc\xb8\xc4\x81\x0e\x56\xb6\x28\x46\xbb\x6d\x78\xc7\xbe\x96\xda\x01\xcd\x6f\x53\x69\xaa\xf4\x9b\x6b\xe8\x80\xea\x4f\xf5\x9c\xb4\xa0\x19\x85\x1b\xdf\x7a\x84\xb0\x9f\xec\x9b\xef\x0b\x0c\x7c\x79\xd4\x5d\xfd\x29\x14\xec\x5a\x57\x7f\xea\x05\xe7\xed\x0e\xd7\x9a\x99\x3b\x1a\x35\x36\xde\x77\x3a\xed\x37\x07\x97\x6b\x3e\xe9\x6f\x1a\x2e\x57\x7b\x93\x2c\x25\xef\x9c\xfc\xb3\xf6\xa2\x78\x83\xb2\x5b\x1b\xdf\x0e\x9f\x88\xfa\x52\xae\x86\xae\xec\x56\x57\x1f\x62\x4f\xd3\xdd\x8a\xf5\xbf\xdb\xd9\x76\x45\xc6\xba\x22\x63\x5d\x91\xb1\xae\xc8\x58\x57\x64\x0c\xfd\xc6\x8b\x8c\x6d\x2c\x3e\x9a\x71\x7c\x29\x12\x64\x57\x64\xac\x13\x22\xf7\x37\xdd\xdf\x96\x10\x79\x80\x16\x84\x83\xa8\xa6\xe6\x2d\x08\x6f\x8e\xfb\xe1\x46\xd2\x16\xfb\xc3\x2d\x68\x87\xff\x61\xff\xaf\xc3\xff\xe8\xf0\x3f\x1a\x66\xdd\x05\xb3\x76\xf8\x1f\xa8\x0b\xd7\xec\xc2\x35\x0f\x39\x5c\xb3\xc5\x36\x76\xf8\x1f\x2d\xc5\xb9\x17\xc2\x00\x71\x32\xd7\x46\x38\x20\x3f\x2d\x2b\x1a\x07\x2b\xa5\xb9\xb1\xfe\x76\x70\x40\x6a\xa7\x7d\x10\x2a\xc9\x2b\xe2\x80\xd4\xd1\x75\x6b\x05\xe4\x7d\xe0\x81\xb8\xd1\x76\x89\x8b\x5d\x88\xf5\xe1\x87\x58\x1f\x5c\xe2\xe2\xc1\x48\xb2\x9d\xba\xd7\xe5\x2e\x76\xb9\x8b\x9d\x32\xdc\x29\xc3\x7b\x5f\xc6\x43\x52\x86\xdf\x58\xc2\x7e\x41\x5c\x90\xdd\x64\xed\x4e\xd4\x36\xef\x75\xa2\x76\x27\x6a\x7f\xa1\xa2\xf6\x61\xac\x70\x27\x67\x77\x72\x76\x27\x67\x77\x72\x76\x27\x67\xef\x7d\x19\x3b\x39\xfb\xd5\x70\x42\xea\x84\xed\x96\xf9\x36\xef\x49\xd2\xee\xa4\xec\x4e\xca\x3e\x6c\x29\xfb\x60\x26\xd4\x61\x86\x74\x98\x21\x1d\x66\x48\x87\x19\xb2\x95\x7c\xf3\x6f\xf6\x58\x7e\x08\x6e\x62\x7f\x65\x7f\xf8\x2e\xe1\x93\xfb\x45\x46\xf4\x7f\xcf\x69\x4a\x98\x04\x69\x94\xaa\x45\x28\xcf\x34\xac\xfc\xf2\x9a\x7f\xb8\x1b\x5e\x7d\xba\x08\xb3\x69\x3e\x5c\x3e\x5c\xdc\x0f\x6f\xfa\xb7\x7e\x5d\xfc\xac\xc2\xb5\xb0\xdf\x95\x44\x32\x4b\xf2\xb7\x44\xeb\x9e\x70\x6a\xee\x14\x56\xb9\xdc\x6e\x64\xb7\x83\xbb\xc1\xed\x8f\x90\x0d\x34\x3e\x1f\xde\xf5\xbf\xbb\x28\x11\x44\xe9\x79\xff\xec\xaf\x0f\xc3\xdb\xe6\xe7\x83\xff\x1e\xde\xdd\xdf\x35\x3d\xbd\x1d\x5c\x0c\xfa\x77\xcd\x5f\x7f\xec\x0f\x2f\x1e\x6e\x07\x2b\xd7\x63\xe5\x68\x57\x2b\x21\x12\x16\x09\xe2\xfc\x51\x64\xb9\x86\x28\xd6\x10\x79\xf1\xd1\xb1\xc3\xba\xbe\x4e\xd1\x83\xd5\xe9\xa9\x6d\xdc\x30\xd8\xa0\x21\xa3\x8c\xc4\x54\xe2\x49\x42\xe2\xa5\x96\xdc\x1a\x36\xb5\x84\x4b\x83\x7a\xd6\xda\xb3\x17\x39\x35\xcf\x8b\x0c\x2f\x40\x90\xa3\xa8\x08\x8b\x6b\xfa\x30\xfb\xd0\xd8\x03\xd3\xbc\x8b\x3e\x91\x52\x4f\x51\x2e\x04\x61\x2a\x59\x20\xf2\x99\x4a\x25\x97\x1a\x75\xdb\xd7\xd4\xac\xbd\x53\x7d\x83\x73\x2c\xd1\x84\x10\x56\x1e\xbf\x20\x09\xc1\xb2\x66\xcc\x76\xf7\xdb\x2d\x8b\xdf\x2b\x6b\x8d\x31\x97\xd1\x14\xd3\x24\x17\xa4\x72\x5a\x78\x9a\x61\x41\x25\x67\x83\xcf\xfa\x2e\xd3\x07\xf9\x1a\x3e\xe7\x62\xbb\x13\x33\xf8\x6b\x48\xc1\x57\xe5\x7f\x7e\xba\x2f\xff\xab\x74\xe6\x2f\xee\xcb\xff\x5a\x4d\xeb\x41\xc3\x55\xca\x3e\x42\x9f\xee\x4f\xd1\x27\x08\x71\x12\xe8\x7e\x8e\x0d\xc5\x5e\xdc\x9f\xa2\x0b\x22\x25\xfc\x52\x7c\xac\xa8\x4a\x60\x6e\xdf\x51\x86\xc5\x02\xb9\xe9\x9b\x44\x57\x1c\xcd\x11\xf1\x4b\x53\x5d\x3c\xf6\xf7\x9c\x81\xea\x5e\xac\xde\x05\x9f\xd1\x08\x27\xbb\x2d\x62\xff\xaa\xc4\x07\xae\x6f\x57\x2e\x45\xf8\xf6\xf2\x5a\xf4\xaf\xce\x21\x89\xd4\x0d\xb5\x66\xe6\x57\x44\x6a\x22\x89\x38\x8b\xad\x97\x46\xdf\xfe\x8b\x40\xa8\xff\x3b\x87\x44\xdc\x5c\x52\x36\xd3\x2d\xa2\x13\x74\x7d\x3b\x62\xd7\x22\x36\x86\x50\xa2\xa5\x61\x43\x73\x54\x22\xc6\x15\xa2\x69\xc6\x85\xc2\x4c\x69\x45\x00\xc4\x00\xbb\x22\x86\x03\x9c\xf1\x34\xcd\x15\xd6\x07\x6d\x69\x51\x99\x31\x87\xdc\x11\x35\x8c\xc1\xb5\x52\xb3\x86\x46\x4e\x28\xe6\x92\x09\xdd\xbe\x96\x51\xca\x3a\x34\x8d\x97\x54\x59\xd7\x04\x16\x02\x97\xa5\x89\x0f\x54\x91\xb4\xfa\x7e\xcb\x20\xcf\x7f\xd5\x1a\x08\xce\x4c\x52\x05\x11\x7d\x11\xcd\xa9\x22\x91\xd2\x47\x70\x2b\x9a\x78\xb8\xfa\xe1\xea\xfa\xa7\x50\x82\xf8\xd0\xbf\x3c\xff\xf3\x7f\x94\x7e\xb8\xbd\x5c\xfa\x61\xfc\xe3\x9f\x97\x7e\xf9\xff\xad\xa4\xa7\x6a\x4f\x4b\x7a\x7e\x30\x97\x23\x10\xa9\xc1\x26\xec\xa6\x8a\x68\x8a\x67\x04\xc9\x3c\xd3\x14\x20\x8f\xcb\xfb\xab\x45\xca\x0b\x8e\x63\xca\x66\x26\x03\xf4\x82\x2a\x22\x70\x72\x89\xb3\x8f\xce\x7e\xbd\xc5\xea\xfc\xdf\xbb\x52\xbe\xee\x87\x9f\xfb\x97\x61\xc6\xef\x87\x9b\xdb\xeb\xfb\xeb\x95\xb3\x2e\xb5\xb0\x7c\x8c\xf4\xe3\x53\xf8\x5f\x74\x82\x74\xeb\x5e\xf2\x4d\x89\xc2\x5a\x23\x40\x5f\x9b\xa4\x39\x9f\x48\x43\x59\x02\xa7\x26\x13\x34\xa5\x70\xa5\x18\x0b\xde\x37\x46\xb8\xf6\xda\x83\x3f\x37\xe6\x03\xd0\x96\xdd\xa5\xcc\x62\x2c\x62\xf4\x77\x59\x4d\x1f\x07\xc3\xb1\xf9\x81\xc4\xe8\x08\xcd\x95\xca\xe4\xe9\xc9\xc9\xf3\xf3\xf3\xb1\x7e\xfb\x98\x8b\xd9\x89\xfe\xe3\x88\xb0\xe3\xb9\x4a\x13\x93\x2e\xaf\x57\xe1\x14\xdd\x08\xae\xaf\x10\x50\xd0\x89\xa0\x38\xa1\xbf\x92\x18\x4d\x0c\xff\xe3\x53\xf4\x4b\xc4\x05\x39\x2e\x36\xc6\x1a\x95\xec\x3d\x62\x0d\x4f\x27\xfa\xa5\x1a\x66\x52\xdd\x4f\x14\x93\x88\xc6\x56\xcc\x20\x2c\xe2\x60\x79\x34\xbe\x0a\xdd\x9e\xcb\x34\xd4\x1a\x4d\x96\xab\x62\x39\x03\x65\x05\xc7\x24\xc8\x76\x57\xbc\x4c\x70\x5a\xf1\x19\x1a\xb5\x35\xd7\x2a\xba\xbe\x5b\x31\xdc\xaa\xee\xd5\x4c\x4f\x38\xe2\x09\x9a\xe4\xd3\x29\x11\xa1\x43\xba\xa7\xb5\x19\x2a\x91\x20\x11\x4f\x53\x90\x18\xf4\x57\xb9\x34\x54\x0d\x2b\x66\x47\x7b\x3c\x62\xb0\xff\x5a\xcd\x01\x0a\x88\x39\xb0\x3a\x46\x48\x8c\x30\x5b\x98\x6e\x26\xf9\x34\x6c\xdf\xc0\x50\xe0\x18\x51\x35\x62\xfd\x24\x41\x82\xa4\x5c\x91\x20\x87\x12\x9c\x67\xe5\x05\x07\x16\x29\x48\x96\xe0\x88\xc4\x86\x1e\x12\x1e\xe1\x04\x4d\x69\x42\xe4\x42\x2a\x92\x86\x0d\x7c\x0d\xb6\x1a\xbd\x66\x54\xa2\x98\x3f\xb3\x84\x63\x3b\x8f\xea\x67\xdf\x94\x4f\xe3\xc0\x41\x04\x0c\x84\xe0\x02\xfe\xe7\x07\xca\xe2\xbd\x71\xa8\x87\xbb\xc1\x6d\xf8\xef\xbb\x9f\xef\xee\x07\x97\x9b\x71\x1f\x4f\x59\x30\x3c\xd0\xe1\x4f\xd1\x9d\x59\x04\x2e\xb4\x44\x24\x1a\x26\x75\x69\x49\xa9\xf8\x81\xc7\x5b\x72\xdf\xcb\xfe\xd5\x43\xbf\xc4\x51\xee\xce\xbe\x1f\x9c\x3f\x54\xf4\x01\x3b\xbf\x92\x0c\x6f\xd4\xbf\xf0\xb7\xb3\xef\x87\x17\xe7\xe3\x1a\x85\xf1\xc3\xed\xe0\xec\xfa\xc7\xc1\x6d\xa1\xdb\xd5\x2e\x51\x65\x30\x55\x66\x75\x6f\x98\xd2\x9c\xc7\x68\xb2\xa8\x07\x84\xd0\x92\x73\x02\xbe\xd8\x02\x12\xc5\xb4\x7a\x0a\xbc\xc9\x61\x73\x14\x5f\xa4\x3c\x26\x3d\xfb\x0e\x20\x69\x18\xe3\x8a\x91\x98\xeb\x1b\xd6\xbd\x63\x16\x18\x2a\x0c\xc8\x85\x5f\xb8\x53\xd4\x47\x52\xbf\x98\xeb\x43\x2d\xe8\x6c\x06\x86\xc3\xca\x50\x4d\x6b\xf6\x53\x58\x5e\xf8\xce\xec\x7f\x26\x38\x9c\x73\xdd\xad\xb5\x38\x7b\xab\x84\xf9\x10\x50\x57\xca\x2d\x0a\x0c\x06\x87\x9a\xa1\xb9\xcd\xd2\x8b\xd0\xb8\x5e\xe6\x3c\x1a\x7b\x91\x3e\x5c\xc0\xb6\xa4\xb1\x77\x66\x82\x3c\x51\x9e\x07\x9f\x5a\x60\x8f\xd2\x8e\xd7\x36\x5f\x2c\x00\x2c\x9b\x31\x8a\x54\x9a\xf1\xe4\x51\xdb\x82\x66\x61\x4f\xd0\xc2\x54\xf0\xb4\xa6\x8d\xf2\x31\x19\x5e\xdf\x29\x81\x15\x99\x2d\xce\x2d\xcb\xd8\xfe\x78\x9c\x5f\xff\x74\x75\x71\xdd\x3f\x1f\x0f\xfa\x9f\xca\x27\xde\x3f\xb9\xbb\xbf\x1d\xf4\x2f\xcb\x8f\xc6\x57\xd7\xf7\x63\xf7\xc6\x4a\x92\x6f\xe8\x60\xf9\x9e\x2e\xbf\x78\x8a\x34\xcb\x05\xd6\xe8\x00\xef\x02\xfe\x38\x21\x53\x2e\x0c\x9f\x4f\x5d\xe8\x82\x15\x61\xdc\xda\x5a\x5d\xac\x32\x8b\x53\xb0\x8c\xd5\x35\x69\xac\xde\x4a\x10\x9c\xc2\x3d\x81\x19\x1a\xb0\xf8\xe8\x7a\x7a\x74\x67\x7e\x4c\xb1\x78\x24\xc2\x7f\xfa\x2c\xa8\x52\x84\x95\x54\x3a\xec\x86\xec\x95\xc4\xa2\x83\x63\x74\xab\xf9\xbe\x7e\xdf\x5f\x6a\x9a\xd8\x63\xa2\x30\x4d\xa4\x1d\x6c\x69\x5d\x4f\xd1\x05\x16\xb3\xc2\x0e\xf7\x35\x9f\x4e\x4d\x63\xdf\x98\x61\xe8\x3b\xac\x34\x8b\x1a\xde\xab\x49\xc3\xdd\x8b\xd0\x9f\x7d\xd9\xcb\xc3\xcb\x54\xf5\x90\xed\x46\x53\x0f\x37\xb0\xe2\x46\x63\x2f\xe9\x86\xf6\x49\x0d\xad\xc1\xc4\xcd\xe3\xd5\x97\x4c\x7d\xdb\xcb\xe4\x54\x7e\xb1\x86\x9c\x4c\x2e\x95\xde\xf9\xa9\xd6\x36\x6b\x68\x89\x7c\xa6\xd6\x60\x10\x8e\xbb\x42\x42\x45\x33\x60\x5e\xc5\x59\x46\xb0\x90\x75\xbb\x5d\x16\x03\x1b\xf6\xde\xf4\x14\xf6\x61\x37\xd9\xf5\xd3\x43\x9c\x81\xc1\xc1\x0b\x11\x15\x8a\x6c\x41\x03\xa6\xad\x25\x0a\xb8\x01\xb4\xa5\x6b\x8b\x6c\x74\x49\xa5\x56\x1a\xcd\x8f\xdf\x59\xc8\xa5\xed\x08\xe2\x63\x7f\x78\x51\x11\x2e\xc6\xe7\x83\x8f\xfd\x87\x8b\xd5\x66\xc2\xd2\x77\xd5\x2d\x46\x47\x48\x3f\x2f\xfb\xcd\xe9\xd4\xdc\x19\x0e\x38\xca\xa8\xb4\x84\x81\xd1\xca\x42\xd5\x18\x7b\x75\x4c\xb2\x84\x2f\x52\xc2\xc0\xc4\x53\xba\x09\xf5\x7a\x4e\x31\xb5\x57\x4b\x30\x58\xb0\xe2\x58\xb3\x1b\x5c\x63\x47\x0e\xad\x8a\xc4\xfe\xe6\x2d\x83\x55\x55\x58\xf7\x8d\xf1\x9e\xd9\xff\xdc\x29\xac\xb6\x3c\x63\xfd\xb3\xfb\xe1\x8f\x83\xb2\x7e\x78\xf6\xfd\xf0\xc7\x3a\xa9\x66\xfc\x69\x70\x35\xb8\xed\xdf\xaf\x11\x4e\x2a\x4d\xd6\x09\x27\x52\x0f\xb8\xea\x3d\xa5\xd2\x47\x04\x45\x06\xf2\x0a\x51\x25\xd1\x13\x95\x74\x42\x01\x20\xcc\x7a\x22\x1f\x86\xc0\x59\x9f\x70\x42\x63\xaa\x16\x4e\x7c\x31\xfd\x96\xf7\x51\x73\x52\xdb\xbe\x31\x3b\x84\xfe\x49\xb0\xf2\x99\xcd\x71\x93\x3e\x45\xa0\xdb\x3e\x81\xd2\x16\x7c\xc6\xb4\x20\xcd\x66\x44\x98\xe1\x80\xf7\x25\x1c\x4b\xf0\x5c\x8f\x2a\x14\x56\x8a\x55\xf3\x42\xeb\x8c\x30\x22\x00\x04\xce\x77\x62\x04\x29\x41\xd8\x57\x5a\xe6\xca\x12\x1a\x51\x95\x2c\x50\x04\x36\x2c\x30\x67\xa6\x98\xe1\x99\x15\x0e\x40\xcd\xa9\x90\xc4\x5f\x0d\x8a\xda\xf5\xd4\x9a\xf6\xef\x29\xd9\xf2\x98\x3d\x5c\x9d\x0f\x3e\x0e\xaf\xca\x24\xf0\xfd\xf0\x53\x49\x84\xbd\x1c\x9c\x0f\x1f\x4a\xb7\xb9\x96\x64\x57\xcb\xf5\xd5\x66\x6b\x8e\xa2\x7f\xe9\x14\x9d\x9b\x4f\x4f\xf5\xe2\xd6\x40\xc4\x79\xe5\xb7\xb2\x0e\xb7\x2e\x24\xcf\xfd\x31\x60\x4a\xd4\xfa\x25\xda\x9a\x90\xac\x0f\xb2\x64\x43\xaa\x0f\x55\x58\xea\xfb\xaa\xea\x54\xae\x4e\xd9\xbd\x08\x41\x97\xc7\x85\x65\x29\x8c\x61\x00\xa3\x41\x93\x11\xab\xc6\xad\x55\x30\xec\x1f\xc1\x45\x9d\xe6\x52\x19\x57\x22\x10\x27\x7a\xfc\x8b\xd4\x0b\x0a\xae\xc6\x63\x74\x47\xc8\x88\x39\xeb\xc1\x8c\xaa\x79\x3e\x39\x8e\x78\x7a\x52\xe0\x13\x9e\xe0\x8c\xa6\x58\x4b\xd2\x44\x2c\x4e\x26\x09\x9f\x9c\xa4\x58\x2a\x22\x4e\xb2\xc7\x19\x44\xc0\x38\x77\xea\x89\x6f\x76\xc6\xff\xfd\xe2\x4f\xdf\x1e\x5d\xfc\xe5\xdb\x0f\xcb\x16\xb2\xa6\xfd\x1f\xb0\x08\x67\x32\x4f\x6c\xc4\x9c\x08\xd7\xc6\x1d\xf9\x9c\xac\xdb\xef\xab\xf2\x76\xed\xa6\xbf\x9e\xdd\x3c\x94\x2c\xd6\xe5\x7f\x5e\x0e\x2e\xaf\x6f\x7f\x2e\x71\xca\xfb\xeb\xdb\xfe\xa7\x12\x43\x1d\xdc\x7c\x3f\xb8\x1c\xdc\xf6\x2f\xc6\xee\xe1\x2e\xb6\xb7\x1f\x18\x7f\x66\xe5\xa5\x91\x8e\x03\x2e\xf5\x74\x8a\x3e\x72\x81\x7e\xf0\x3b\x79\x34\xc1\x12\xae\x18\x77\x67\xc9\x1e\xca\x78\x0c\x8c\x17\x91\x6c\x4e\x52\x22\x70\x62\x6d\x06\x52\x71\x81\x67\xe6\xa6\x97\x91\xc0\x2a\x9a\x23\x99\xe1\x88\xf4\x50\x04\xd4\x30\xeb\xc1\xa6\x80\xaa\xc5\x67\x55\x3b\xdf\x6d\xce\x14\x4d\x89\x53\xc1\xed\x3f\xef\xcd\x66\x6c\xb1\x39\xd7\xf7\xdf\x97\x85\xbd\x8f\x17\x3f\xdf\x0f\xc6\x77\xe7\x3f\xac\x5c\x4f\xf3\x59\x69\x64\x77\x10\x80\x74\xc6\x93\x3c\x65\xe1\xdf\xdb\x8f\x6d\x78\x75\x3f\xf8\x54\x1d\xdd\x75\xff\xbe\x4c\x19\xb7\xe5\x00\xb7\x0f\xdf\x5d\x5f\x5f\x0c\x4a\x2e\xe1\x0f\xe7\xfd\xfb\xc1\xfd\xf0\xb2\x44\x3f\xe7\x0f\xb7\x06\x8d\x70\xd5\x34\xdd\x08\x6a\x26\xaa\xa7\x15\x4e\x73\xdf\xac\xb0\x15\x27\xea\xdb\x80\x72\x73\x96\x8f\x02\xb8\x1d\x13\x0e\x06\x56\x9d\x23\x6f\x52\x8d\xcc\x48\x6b\xd9\xa1\x2a\x6f\x13\x6a\x66\xc7\x2b\x37\x7a\x15\x57\xbe\xf7\x43\x30\x50\xa0\x46\xd9\xc6\x49\xc2\x9f\x4d\x28\x6f\x4a\xf5\xad\x6c\x81\xd1\xf4\x2b\xb2\xf0\x10\x1e\xd7\x70\xbc\xf2\xb6\x90\x48\x10\x75\xc9\x73\xa6\xb6\x27\xb9\xfe\x55\x89\xef\x0c\xae\x7e\x1c\xff\xd8\x2f\x53\xe0\xf0\x62\x35\xab\x09\x9b\xa8\xb9\x8a\xfb\x57\x3f\xfb\x4b\x18\x02\xbe\x7b\x5e\x43\x35\xb2\x6b\x94\x50\x2d\xf6\x46\x58\x6b\xaf\x09\x48\x34\x88\x50\x30\x39\xa4\x7a\x72\x10\x60\x9a\x19\x7f\x92\xe1\x4f\x66\x90\xa7\xee\x8f\x4a\x7b\x12\xd6\x05\xac\xa9\x2e\x9e\x1e\xda\xb1\x5a\x35\x43\x84\x3d\x51\xc1\x01\xcf\x16\x3d\x61\x41\xb5\x34\x6e\x5a\xd6\x73\x3d\x85\xff\xdd\xac\x4d\x30\x8c\x56\x18\xd7\x1d\x17\xea\xdc\x07\xf2\x6e\x67\x0d\xa9\x0b\x68\x5d\x0e\x65\xad\x37\x74\x2c\x7f\x5b\xb3\x39\x3b\x06\xfc\x96\x27\xfc\x8f\xe4\x9c\xe2\x44\x33\x80\xfd\xc9\x8b\xfd\xab\xbb\x61\x59\x7e\x2c\xab\x19\x01\x5f\xde\x5a\x5e\x04\x43\xa5\x19\xb9\x53\x26\xee\xfe\x7a\x61\xb4\x0b\x00\x3d\x36\xe7\x36\x50\x2c\x40\x00\x72\x28\x28\x19\x16\xb2\xf2\x85\x44\x00\x84\x56\x04\x5c\xe9\x3b\x0b\xc2\x99\x9e\x38\x8d\x47\x8c\x7c\xce\x08\x93\x10\x1c\x60\xee\xb3\xc2\xd7\x2e\x8f\xd1\x70\x0a\x2c\x41\xbf\xce\x50\xce\xac\x03\x4c\x5f\xb8\x66\x90\x3d\x2d\xca\xda\x21\x78\x0d\x11\x0c\x2f\x8c\xb8\x60\xa9\x62\xf0\x23\xf6\x93\x77\xa2\xc1\xa3\x29\xd7\x0c\x48\xef\xa2\x6d\xef\x14\x61\x26\x69\x0f\x69\x85\xa5\xba\xa7\x90\x3a\xa0\x15\x4a\x1b\xc2\xa5\x39\x8d\xfd\xf3\xf5\xaf\x81\xa5\x38\xe1\xf0\x32\xa8\xbf\x0b\x2a\x57\x41\x83\x68\x9c\x18\x8f\xc9\xb8\xfd\x9d\x10\x71\x41\xac\x9f\x65\xe3\x6b\x60\x1d\x63\xbf\xc7\xf2\x71\xc9\xf7\x30\x64\x52\x61\x16\x91\xb3\x04\xcb\x2d\x83\x90\x9c\x8d\xa3\x57\x96\x38\x6e\x6f\x1f\x6e\xee\x87\xdf\xad\xe1\xf2\xd5\x8f\x97\xc3\x80\xa2\x24\x77\xee\xb9\x89\xe0\x38\x46\x9a\x7d\xce\xb8\x71\x05\x5a\xc1\xbf\x80\xfe\x36\x79\x3d\x3e\xa0\xb2\x04\x3b\x5e\xa4\x23\x58\x3b\x47\xe8\x4a\xa0\x76\x21\x50\xa4\x57\x02\x05\x26\x0f\xb7\xd5\xe0\x59\x34\x05\x49\xac\x75\x2b\x4b\xb0\x9a\x72\x91\x1a\x2e\x5f\x9a\xb4\x69\x7c\x75\xa3\x94\x29\x22\x44\x9e\x29\xea\xb0\xdc\xab\x52\x2a\x54\x78\xe7\xb3\x4b\x22\x25\x9e\x91\x5d\x1c\xd0\x75\xca\xc3\xdd\x8f\xe1\x3f\xc1\xc1\xdc\x46\xf6\x2f\x8d\xd0\x45\xbe\x3b\x7a\xba\x66\x1f\x4d\x20\xcf\x0d\x4f\x68\xb4\x65\xc0\xdd\xc7\xfe\xf0\x62\x3c\xbc\xd4\x4a\x7c\xff\x7e\x70\x51\x12\x25\xe0\x59\xff\xe3\xfd\xe0\xd6\x82\x58\xf7\xbf\xbb\x18\x8c\xaf\xae\xcf\x07\x77\xe3\xb3\xeb\xcb\x9b\x8b\xc1\x9a\xc8\x9c\xc6\xc6\x97\xad\xab\xd5\x57\x4f\x97\x7e\x81\x1d\xd6\xbc\x2c\xb4\x97\x41\xd6\x18\xa6\x09\x38\xc1\xb9\x71\x86\x63\xc4\x78\x4c\xe0\x67\xe9\xac\x33\x1e\x39\x1a\x0d\xd5\x57\x49\x82\x70\xae\x78\x8a\xc1\x6b\x93\x2c\x46\x0c\x4f\x34\x6b\xc5\x49\x12\x84\x77\x89\x9c\x31\xcd\x62\x75\x63\x06\xa2\x3d\x4a\x88\x66\xe7\x59\x90\xec\x67\xfd\x06\x53\xca\x20\xd2\x36\xc5\xe2\xd1\xb8\x99\x8a\x2e\x8b\x43\x21\x11\x96\x23\xa6\xc7\x45\xac\x61\xa8\xcd\x0a\x9f\xb6\x7a\xab\x71\x75\x52\xfc\x48\xf4\xaa\xa4\x79\x34\x47\x99\xe0\x33\x41\xa4\xb4\xb6\xe5\x08\x33\x13\x80\x60\x5f\xd7\xd7\xd0\x88\x31\xae\x97\xc2\x99\xb0\x63\x92\x11\x16\x13\x16\x51\x93\xd6\x07\xbe\x7b\x6f\xda\x9c\x09\x9c\xcd\x91\xe4\xe0\xf4\x86\x65\x07\xfb\x95\xf9\xc8\xdd\x64\x66\xc6\xe6\x71\x68\x81\x16\xb9\xe6\x13\xd7\x20\x27\x9a\x55\x86\x8f\xdd\x65\xe8\xdc\x2e\xc6\x0e\x98\x66\x09\x51\x06\xac\x1f\x96\x1c\x36\x43\xaf\x75\x69\x3f\xf4\x36\xd5\x6d\x82\xbe\xb0\xdd\x98\xb1\xb4\x23\x3a\xae\xb1\x6c\xdb\x23\x85\xbe\xc7\x2c\x4e\x74\x2b\xce\x87\x51\x3e\x8b\x90\x8a\xd2\xd7\x54\xe3\x4e\xe3\x2e\xb7\x68\x84\x73\xb9\xcb\x35\x5a\xc9\xc5\x34\x56\xc1\xa3\x22\x28\x04\xc8\xdb\x26\x62\xc2\xea\x66\x9a\x45\xe2\x84\xdb\x55\x32\xaf\xe7\xa6\xfe\x13\x82\xd1\x34\x5c\xb3\x99\xa0\x2c\xa2\x19\x4e\xb6\xd2\xfd\x2a\xc1\xf8\x36\xc6\xfd\x6b\x3a\xd5\xe4\xf3\xcd\x92\xdb\x56\x11\x91\x42\x82\xb2\x1d\xa6\xdf\xc2\x0d\x2c\x49\x36\xab\x81\xc8\x22\x9a\x04\x0b\x9e\x1b\x7f\x1c\xac\x0b\x89\x6b\x8e\xea\x71\xdd\x76\xeb\x93\x81\xcb\x01\xd0\x5b\x6c\xb6\x89\xfc\x69\x5a\xbf\x4a\x2b\xb6\x77\x13\x8c\x87\x93\x9b\xfa\x36\xeb\x76\x20\x78\xf8\xaf\x55\xb4\x73\x89\x33\x4d\x33\x16\xb6\x1f\x17\x73\xb4\x4a\x92\xad\x0a\xe6\xe2\x67\x02\xdf\xb9\xcf\x0b\x69\xbf\x1b\xc5\x12\xda\x00\xa8\xe5\x4e\x4a\x31\x04\x41\x8e\xb9\xa5\xf1\x69\xae\x65\x59\x84\x21\x0a\x01\x7d\x4d\x8e\x67\xc7\xc8\x15\x61\xe8\xa1\xfe\xcd\xcd\xe0\xea\xbc\x87\x88\x8a\xbe\x71\x31\x8b\x36\x60\x69\xc4\x14\xb7\xd2\xca\xc2\x15\xd0\x48\x89\x98\x91\xd2\x9c\x5d\x74\x13\x84\x2a\xcf\xa8\x54\x36\x7c\x56\xf3\x95\xa0\xd4\x09\x4d\xab\x62\xb6\xa1\x90\x5c\xcd\x77\x21\x0d\x2c\x65\x9e\x6a\x5d\x76\x4c\x71\x3a\x16\x3c\xd9\x85\x29\x9c\xc3\x54\x40\x5d\xf6\xe9\xf9\x14\xa7\x48\x37\x6b\x43\x41\xbc\xcb\xd1\x8b\x74\x5a\x30\xd2\x7c\x59\xdf\x9b\xc1\xbd\xe5\xbc\x0f\x36\x1e\x8d\xba\x10\x08\x48\xdf\x6f\x60\x15\x85\xd9\x78\x6c\x2d\xf5\x63\x1c\x45\x5a\xe5\xde\xf3\xa4\x82\xfa\x39\xce\x25\x60\x3b\x7a\xb1\x69\xae\xa3\x73\x37\xcc\x4c\x73\x30\x08\x06\xd6\x57\xae\xe4\x11\x2d\xda\xaf\xe9\x77\xb2\x58\xea\xd5\x55\xb8\x79\x90\xde\xa4\x62\x2e\x61\x49\x60\x27\xa5\xa9\x90\xa3\xe6\x64\x81\xe6\xf8\x89\x94\xba\x74\x09\x31\xba\xe1\x05\xcf\x45\x1d\xa3\x1b\xb1\x73\x92\x09\xa2\x25\xfd\xaa\x03\xc5\xd3\xf4\x6d\x99\x12\x3b\xba\xee\xe8\xfa\xdd\xd3\xf5\x99\x29\x94\xd4\xf7\x85\xb1\x76\x12\xe0\x4c\x63\xe3\x8c\xf3\x64\xdc\xc2\x26\xd2\x7e\xc5\x4b\x9e\xb0\x4a\xd9\x28\x80\x04\xe0\x39\xc8\x47\xa5\x6b\x93\xeb\xbb\x2e\x48\xb1\xb5\xc3\x5b\xb1\x0c\xce\x65\x16\xd4\xcb\xd9\xe5\xbc\xd7\xb5\xb2\xaa\x25\xf4\xe2\x62\xce\x99\x91\x6f\xbc\xbb\x2c\xac\x7f\x5a\x3a\x4c\x4e\x14\xa1\x6c\xa9\x1a\x9b\xa1\x67\xbd\xc0\x46\xee\xf8\x47\xce\x15\x96\xdf\x1c\x8f\x98\x16\xa2\x1e\xc9\xc2\x98\x5b\xb5\x98\xf2\x3b\x2d\x8b\x1f\x49\xc2\x24\x84\x7b\xff\xce\xb8\xe7\x34\x89\x3b\x73\xb5\x51\x4d\x4d\x11\x38\x08\xba\xf6\xbd\x40\x88\xae\x6d\xd4\x4a\x49\x45\x00\x34\xc8\xf9\x66\x2e\xf6\x99\x19\xfe\x8c\x28\x48\xb1\x56\x54\x81\xce\x14\x9b\x2a\x73\x4b\x43\x5f\x6b\xba\x32\x54\x21\x38\xf8\x49\xe2\x7c\x37\xc6\x2f\x97\xdb\x58\xcb\x19\xbd\xb6\x70\x67\x63\xde\x4f\x9c\xdd\x28\x12\x7c\xa9\x74\x1b\x96\xc8\xec\xf4\xc4\xb0\x03\xe7\xbf\x26\xec\xf8\x99\x3e\xd2\x8c\xc4\x14\x43\x04\xbc\xfe\xd7\x89\x9e\xd7\xbf\x9f\xdd\x5e\x5f\x8d\x8b\x4c\x9e\xff\x1a\xb1\x7e\x22\xb9\xcf\x52\x40\x8c\x33\x1f\x6e\x9f\x09\xe2\x44\x42\x3b\x17\xb0\xba\x16\x66\xc4\x11\x6b\x1a\x41\xcc\x23\x79\x8c\x9f\xe5\x31\x4e\xf1\xaf\x9c\x81\x2b\xbd\x0f\x7f\x9e\x25\x3c\x8f\x7f\xc2\x2a\x9a\x9f\xc0\xb9\x56\x27\xe4\x89\x30\x65\xdc\x54\x7a\xb9\x62\x48\xde\x95\x10\xad\xff\xef\x7a\xcc\x45\x52\x91\xd4\x9a\x6c\x44\x32\x85\xfe\x1f\x41\x26\x9c\xab\xfa\x4b\x8a\x4f\xa7\x92\x6c\x74\x21\x15\x4a\xda\xdd\x35\xfa\xcb\x9f\xbf\xfd\x83\x26\xa1\x6d\xd6\x78\x78\x77\x3d\xd6\xdf\xff\xfb\xb9\xfd\x5e\x6e\xc0\xee\xae\xb3\x82\xb5\x39\xe2\x31\x81\xf3\x39\x83\xdb\x4f\x80\xf3\x02\xd8\x1b\x90\x43\xb1\x8f\x75\xdc\xed\xbc\xd4\xfa\x6e\x2a\xdb\x56\x8b\x09\x2a\x76\x30\x47\x74\x84\x18\x47\xa9\x89\x35\xc5\x0c\xfd\xc7\x0f\xdf\xd5\x6f\x60\x2e\xe8\x56\x1d\x52\x0b\xd7\x10\x74\x29\xe9\xaf\x44\x22\x4d\x35\x9a\x8a\x79\xaa\xbb\x16\x44\xce\x79\x12\xa3\x67\x02\x6a\x92\x8d\x03\xf5\x5a\xb9\x20\x23\x16\x36\x01\x21\x87\x08\x27\x8a\xcf\x08\xdc\xd5\x4e\x51\x53\x44\x68\x51\xc5\x64\x69\x28\x2e\x48\xcf\x40\x7d\xdd\xfd\xc9\xc5\x56\xc3\x34\xe1\x91\x4b\x6a\xb1\x26\xb9\x78\x52\x3f\xf3\x69\xd5\xf4\x8a\x9a\x6d\xf8\xd5\x4d\xb6\x66\xdb\xfa\xa5\xb1\x49\x28\xd6\x86\x55\xdd\x99\xfa\xc1\xd0\x88\xb3\x71\x42\xd9\xe3\x56\x9b\x71\xed\x44\x39\xdd\x82\x5d\x33\xdd\xa2\xb7\x73\x1b\x0b\xc8\x06\xe7\xe3\x63\x9e\x24\x26\xb5\x25\xdc\x1e\x90\xbb\xcc\xba\x81\x30\x90\x99\x1c\x50\x12\x5b\xbf\x97\xd5\x84\x05\x61\x10\xf0\x36\x62\x93\x85\xf5\xd9\xca\x1e\x92\x79\x34\x77\x99\x79\x11\x67\x52\x8b\xd1\x5c\xa0\x88\xa7\xa9\x29\x6e\xca\x08\x52\x9c\x27\xd2\x46\xbb\xb3\x23\x85\x23\x35\x62\x45\x7f\x6b\x4e\x9e\xa9\x80\xb4\x5b\xea\x5e\x7b\x97\x4e\x51\x69\x69\xa5\xc0\x4d\xe3\x10\xb3\x01\x8c\x60\xc6\x13\x15\xa0\x3f\xf0\xe5\xb3\x64\x36\xac\x41\x33\x90\x73\x2e\xd4\x38\xae\xe5\x39\x6b\x89\xa6\xca\x08\x19\x39\x4a\x20\x68\x98\x3f\x69\xe1\x9f\x3c\x7b\xe3\xeb\xaa\x21\x68\xaa\x5e\x35\x82\x76\xc7\x68\xe5\xc8\x36\x25\xc1\x86\xb5\x32\x08\x1e\x51\x39\x26\x7c\xdd\x18\xef\xe0\xab\x33\xfd\xd1\xca\xc5\xab\x9e\x3b\x27\x04\xf1\xb8\x00\x9b\x33\xf7\xba\xcd\x08\x59\xb5\xa6\x16\x3a\xe1\xe5\x32\x47\x57\x4d\xe5\xa1\x6c\xc9\xd5\x63\x01\x93\xbd\x24\x20\x6b\x62\x31\xa1\x4a\x60\x51\x42\x0a\xf1\xfa\xa0\x24\x58\x40\x7c\xd6\x88\x19\xdc\x38\xa3\x29\xc4\x28\xa6\x12\x12\x44\xe0\x2e\x0d\x9c\x61\xa8\x9d\x12\x58\x39\xda\x45\x9e\xa3\x89\x3f\x87\xc0\xb2\x82\x34\x1c\xb3\xd3\x1d\x79\x7c\x2c\xad\x9f\xf1\x28\x2f\x04\xb9\x08\x24\x5c\x8b\xa9\x83\x28\x93\x74\x36\x57\x88\x32\x6b\x77\xc4\xc9\x8c\x0b\xaa\xe6\xa9\xec\xa1\x49\x2e\xb5\x16\x6a\x82\xd5\x4c\x3c\x0a\x51\x51\x2b\x2e\xb4\x6b\x12\x71\x5c\x69\x70\x59\x45\xd9\x82\x34\xda\x1d\xca\x41\xe5\xae\x58\x43\x38\x7d\x8f\x33\x58\x6d\x83\x42\xdd\x46\x03\x4f\x89\x4c\x1c\x20\x77\xc8\x4e\x50\x05\xa4\xe9\x1c\x00\x2a\xe4\xde\xbc\x14\xaf\x51\x88\x0b\x99\x64\x50\x41\x5c\xec\x36\x48\x5e\x65\x64\x4a\x83\xde\xe4\x9d\x4e\x69\xa6\x6a\x03\xb7\x96\x5d\x45\xb7\x01\xe6\x4f\xbb\xc5\x86\x64\x2c\xa0\x66\x40\x6a\x1b\xb1\x3b\x42\x9a\x81\xdc\x96\xf6\xde\x94\xc6\x85\x29\xd8\x44\x8f\xd5\x24\xbf\x8b\x13\xfb\x7c\x70\x77\x76\x3b\xbc\x31\x90\x13\xd7\xb7\x97\xfd\xfb\x71\x8d\x5f\xbb\xe6\xad\xcb\xfe\xed\x0f\xe7\xeb\x5f\xfb\xfe\xbe\x9c\x95\x5d\xf3\xca\xed\xdd\xea\x64\x8e\x16\x43\xac\x49\x0a\xab\xed\xe7\x14\x65\x0b\x35\xe7\xcc\x87\x28\xc4\x25\xde\x74\x84\x4c\x46\xb0\x82\x10\x22\x21\x55\x8d\xe3\xf0\x1e\xe2\x72\xd6\x4b\x98\xe5\xcd\x32\x30\x6c\x7b\x15\x8d\x36\x38\x91\x9f\x12\x3e\x01\xbf\x75\x5e\x2a\x71\xbb\x22\x02\x7d\xc7\x78\x9f\x73\x2a\xb3\x04\x2f\x96\x7a\x58\x77\xe5\x5c\xe1\x94\x40\xc4\x71\x81\x1f\xe7\x92\x45\xf4\xce\x40\x02\x93\xbf\xd7\xe9\x14\x32\x99\x14\xc5\x8a\xa0\x09\x51\xcf\x90\x37\xe7\x7e\xf5\xb6\x54\x17\x30\x22\x8f\x47\x0c\xcc\x39\x23\xbd\xc8\x71\x0e\xd1\x7e\xa3\x0f\x3d\x34\xfa\x10\x93\x27\x92\xf0\x4c\xef\xbc\xfe\xa1\xe1\x92\x19\xa4\x98\x26\x57\x5c\x79\xcb\xdc\x2e\xfb\x29\x48\x44\x33\x90\xcc\xc7\x44\xb7\xfb\x7a\x82\x47\x89\x92\x1d\x3b\x83\x31\x20\x1c\xc7\x5a\xc9\x06\x56\xe6\x86\x57\x84\x00\xb1\x60\xea\xa5\x5a\x99\x9b\x88\x14\xde\xfc\x6d\x7a\x0c\xdb\x2c\x9b\x3d\x6b\x77\x80\x3d\xbd\xa0\x4b\x76\xd7\x8b\x5c\x6b\x25\x3f\x90\x05\xa4\x60\xdc\x60\x2a\xb6\x74\xcd\xd6\xc5\xbc\xbe\x88\x93\x76\x50\xd3\xd1\x01\xb9\x6b\xeb\xd7\x61\x37\xc7\xad\x8f\xd5\x7b\x2d\x2d\xd5\xc5\x72\xf9\x8e\x5b\xaa\xad\x0f\x4d\x4a\x6a\x63\x08\x03\xaa\x2a\x5e\x19\x89\x36\xd0\xb8\xfc\x00\xef\xf4\x77\x6b\x35\x15\x2f\xae\x45\x61\x4d\x7f\xd8\x05\x9b\x1c\x5f\xcd\xc7\x27\x6b\x47\x1c\x25\x5c\x96\xb1\x72\x5a\x0f\xfa\xcc\x7e\xba\x6a\xdc\x83\x90\x7c\xb5\x5c\xb8\x51\x40\x43\xcd\xc2\x57\xc0\x20\xcd\x3d\xa3\xac\x87\xcc\xbe\xdd\x43\x14\xa2\x2d\x41\x21\x4b\x0a\xe4\x00\x16\xa3\xc2\x0d\x32\x62\x45\xcc\x8a\x44\xcf\x24\x81\x30\xb7\x88\xa7\x19\x98\xf8\xed\x70\x6d\x4b\x24\x36\x11\xc3\x3d\xc4\x73\xa5\x1b\x33\x39\x39\xce\x88\x6b\x13\x7e\x0a\xb7\x87\xf1\xbd\xd9\xe0\x77\x0f\x2c\x6d\x68\xdd\xdc\xa5\x94\xa1\x4f\x44\x41\x2b\x00\xdc\x1f\x4e\x10\xf4\x84\x6a\x08\x65\xfd\xda\xef\x70\xa2\xec\x4c\x36\xd8\xf9\x02\x38\xe5\xbb\x84\x4f\x56\x1b\x09\xa0\x71\xf4\x70\x3b\x74\x16\xc9\x22\x7e\x2a\x40\x2f\x2e\x79\x14\x07\x37\xb7\x83\xb3\xfe\xfd\xe0\xfc\x18\x3d\x48\xa2\x97\xc7\x4f\x17\xf2\xab\xbd\x4a\x62\x46\x6e\x91\x58\x98\x54\x04\x37\x19\x42\x88\x10\xa5\x2c\xe8\x35\x8c\xa3\x0c\xd3\xb2\x9a\xb0\x01\x24\x85\x5a\x43\x1d\x00\x0b\x55\xe7\x69\x23\xf3\xd6\x9d\x40\x88\x93\x1a\xbf\x9f\x28\x35\x33\xde\x74\x39\x32\x6f\x1d\xf9\x94\x23\xfa\x5e\x7a\x32\x70\xb4\xd4\x9c\x50\x81\x5a\x4d\xcb\x10\xd5\xb8\xfd\x9c\x82\x10\xf7\x4b\x9c\xad\x4e\x3f\xc5\xcf\x25\xa2\x35\xa2\x70\xe0\xbb\x7f\xe9\x73\xe0\xd8\xda\xd8\xb0\xc2\xdd\x27\x58\x38\xb4\x0c\x6f\xf5\x7c\xd3\x64\x7c\x48\x67\x24\x0b\x27\x56\x19\x84\x8d\x63\x95\x08\xce\x0e\xfc\x42\x19\x2a\x5d\x89\x3d\x34\xa5\x9f\x6d\xa3\x45\x7c\xbb\x7b\x35\x08\x78\x68\x88\xa7\x9c\xe3\xe5\x33\xb5\x81\xd8\x70\x03\xdf\xaf\x14\x22\xb9\xd4\x22\x51\xa4\xc5\x25\x41\x22\x2e\xf4\x4d\x01\xdd\x16\x5e\x88\x75\x22\x83\xc2\x42\x2f\xca\xb2\x57\x66\xd5\xe9\x2f\x6a\x90\xc4\x58\x91\x23\x2d\x7a\xad\x49\x80\xb6\x39\x32\x90\x4d\x83\x55\x00\x07\x56\xdc\x3c\x13\x32\xc3\xcc\x85\x66\x37\x0c\xd7\x5d\x79\x3b\xb0\x2a\xad\x02\x61\x48\x0f\x03\xf9\x0a\x52\x7f\x4a\xe3\x90\x19\xac\xe7\xca\x71\xd8\xe8\x97\x43\x58\xb6\x67\xec\x83\x71\x1a\x06\x9b\x67\xf1\x21\x0d\x36\xc1\x52\x21\x3b\xa6\x26\x53\x44\xa0\x22\xbe\xac\x11\xb6\xa4\xdb\xb7\x55\xde\x34\x09\x95\xb5\x58\x02\x9e\x11\xe9\x70\x53\x0c\x4a\x8c\xd6\x69\x9c\x20\x6c\x4a\x31\xfb\xb3\x6d\x6b\x32\xbb\x5b\x22\x64\x26\x10\xa4\xbf\xdc\xf4\x31\xea\xb3\x25\xbc\x2c\x17\x97\x55\x5a\x2f\x73\x27\xe1\xe4\x19\x2f\x24\xca\x84\x81\x96\x31\x91\xfb\x6e\xf2\xa0\x81\x95\x3f\xf2\xa1\x10\xca\xa5\x4e\x20\xb0\xc5\xac\x0f\x9a\x73\x72\xef\xf8\x05\x5c\x79\x95\xa8\x72\x2f\x90\x17\xcd\x15\xb6\x8a\x16\xac\x4e\x91\x71\x34\xc7\x6c\x46\xc6\xce\xc8\xba\x8d\xb6\xa4\xdb\x39\x83\x66\xce\x6d\x2b\xf5\x97\xd3\x8d\x51\x98\x6c\xfd\x17\xf3\xaa\x37\x20\xea\x43\x20\x15\x9e\x11\x64\x46\xd4\xca\x2c\x5d\x8a\x18\xb3\x60\xc3\xa0\x27\xd8\x56\x07\xe5\x28\xfa\x26\xe1\x1d\x42\x9f\x2e\xf0\x84\x24\x6f\x13\x39\x01\x5d\x5b\xe3\x3c\x78\xeb\x4c\x36\x00\x41\xcf\x60\xcf\xaf\xb0\x0c\x6b\xbd\x17\x79\x5d\x6e\xc0\xaa\x79\x96\xaa\x9f\xef\x30\x51\x57\x2b\x64\x9b\xa9\x36\x55\x10\x09\xaf\xbd\xa0\xd2\x46\x9d\x81\x2d\xbc\xfe\xaa\x36\xe5\xed\x06\x12\x14\xfc\x68\x18\xc7\xce\x15\x3f\xd6\x4e\x65\x6b\x90\x81\x96\x55\xf0\x86\x53\xc4\x38\x23\x88\xca\xe2\x65\x55\x4e\x87\xf2\x10\x3d\x5a\xc4\x37\xc6\x17\x5f\xa5\xcb\x17\x5f\x7a\x69\x4b\x4b\x01\x9e\xe0\x6d\x03\x2e\xbf\x9b\x11\xad\xa8\x62\xb1\x00\x88\x4f\xc3\x87\xcb\x32\xdd\xda\x71\xee\x5d\xe0\xbe\x77\x08\xae\x41\xa4\xae\xe2\x08\xc4\xc8\xca\xe0\x90\xc1\x41\xb5\x2f\xd9\x8f\x2c\x4c\xcd\x88\x79\xcb\x06\x10\x22\x95\x28\xc5\x19\xf8\xf4\x18\x57\xc5\x57\x06\x76\x49\xf9\x2d\xec\x39\x41\x5c\x9a\x1a\x5a\x0d\x2b\xb0\xce\xb4\xe3\xae\xdf\x62\x5d\xcb\xf0\x96\x0e\x9a\x77\x46\x9f\x08\x73\x34\xdd\x73\x67\x42\x0f\xca\x75\x9a\x2c\x8e\x30\x84\x19\x93\x38\xf4\x7c\xac\xe6\x48\xc6\x20\x73\x08\xf6\xc8\xf6\x4b\x76\x5f\x1b\x46\x63\x40\xd2\x4a\xe8\xf6\x2e\x30\x3c\xa4\x52\x8b\xdb\x6b\x32\xc1\xb1\x44\xbf\x63\x5c\xfd\x2e\x40\x36\x76\xc6\x0b\xf8\xd4\x99\xa0\x7a\x4b\x25\x5b\xe0\xd0\x5a\xc2\x41\x38\x40\xd8\x5a\xbb\xf2\xbb\xc6\x06\x14\x81\xef\x2f\x2a\x8d\x0e\x96\xb3\xe0\x9a\x6a\x5e\x75\x1e\x7b\x54\xbd\x16\xaa\x06\x4f\x53\x56\xaf\x38\xe9\x25\x43\xa7\x5c\xe7\xa2\xf7\x7b\xd1\xca\x35\xbf\x84\x08\xb0\x0b\xb5\xa5\xad\x23\xa7\xd6\x80\x20\xd7\xdb\x25\xb6\xc9\xf3\x6c\x92\xcb\x45\x39\x74\xcd\x96\xc1\x68\x40\xf9\x3d\x1e\xb1\x8f\x5c\xd8\x2b\x58\xda\x3a\x03\x13\x1c\x3d\x1e\x11\x16\x23\x9c\xab\xb9\x41\xdb\xb5\x7e\x85\x85\xa5\x06\x2d\x69\x00\xd9\x78\x28\x0d\x2a\x23\x2c\x62\x57\xf1\xe2\x89\xbb\x51\x8c\x58\xd0\x08\x54\x32\x80\x42\x4f\x50\xaa\xb6\x49\xd5\x24\x52\xeb\x57\x4d\x6b\x51\x57\x84\x75\xa9\x04\xeb\xea\x73\x56\x2a\x2a\x0b\x35\x18\x20\xc0\x89\x4f\x97\x57\x67\xe8\xac\x8d\x4e\xbf\xd3\xf4\xbc\xec\x85\xe8\x59\x8d\xc2\x98\xa4\xec\x0c\xb4\xa4\xf3\xad\xe3\xb5\x25\xd4\xe0\x69\x2e\x20\x5c\xb7\xae\xcd\xaf\xa3\x39\x4d\x0a\xdf\xc5\x37\x3d\x3f\x4c\xdd\x64\x42\x9e\x48\x62\x30\xeb\x23\x01\x91\xf9\xc6\x6a\xf8\x2d\xfa\x3f\xa6\x30\x29\xfa\xc3\x88\x7d\x02\x36\x9c\x24\x0b\x40\xd4\xf4\x2d\x63\x55\x69\xe6\xb1\x76\x00\xca\xa6\x02\xa1\xf2\x40\xcc\x5e\xcf\xf1\x13\x19\x31\xd7\xcc\xff\x41\x8f\xe8\xf7\xe8\x0f\x4d\xea\x9d\x0b\xb0\x7f\x61\x3b\xc7\xc7\x20\x7c\x3d\xb8\xe5\x2c\xa3\xb4\xfc\xc6\x99\x41\x4a\x46\xc8\x1a\x64\x0d\x0f\x8c\x4d\xd9\x13\x8f\x96\xb2\x38\xc2\x53\x8b\x05\x61\x6a\xcc\x78\x4c\xc6\xa4\xc6\xa5\xb9\x82\x49\x68\x21\xe0\x8a\xc7\x64\xad\x43\xd2\x33\xd3\x9f\xc0\x74\x23\xf3\x89\xdf\x0e\x48\xf0\xf7\xd9\xdc\xde\xfa\x50\xa6\xb4\xfa\x91\x7b\xf4\xd9\x6d\xc6\xbd\xad\x33\xd5\x85\x89\xf6\xe0\x42\xb0\x03\xa8\x77\xe8\x25\x58\x39\xf7\x7a\xf5\x38\x56\x1d\x01\xfa\x65\x3d\x73\x7b\x59\x05\xb8\xba\x50\xfb\x44\xd0\x19\xd5\xf2\x7b\x7b\x87\x2d\x70\xc2\x6d\xbc\x19\x06\x64\xb4\x95\x3b\xa3\x58\x0a\x07\xb4\x72\xe4\xe9\xaf\x70\x42\x4e\x78\x5e\x15\xe0\xed\x02\x50\x19\xba\xfb\xad\xac\xbe\xd0\x7c\x78\x66\x32\x00\xc9\x9c\x9a\x9c\xfb\xfe\xd9\x05\xd2\xa7\x83\xa7\x06\x98\x0a\x16\x2d\x57\x73\x2e\xe8\xaf\x8d\x19\x4a\xcd\x32\x7a\xe1\x69\x2d\x12\xba\xcc\x38\xcb\xd2\x3a\x10\xab\x11\x29\x54\x49\x2b\xa9\xd3\x99\xd0\x24\x07\x0c\x56\xcd\x66\xa7\x79\x62\x0a\x37\x44\x5c\xc4\xa6\x72\xba\x2c\xa5\x8f\x41\x18\xae\x13\xef\xb1\xf2\x0d\x52\x0b\x55\x69\x4b\x43\x18\x0b\xce\x4a\x01\xf4\xaf\x39\xc9\xf7\x94\x81\xf7\xa6\x31\xcb\xf7\x78\x26\x8b\x20\x64\xb3\x36\x9a\x37\x17\xeb\xfb\x0f\x3d\x53\x19\xe4\xac\x3a\xcb\xa2\x87\x80\x32\x2a\xb9\x29\x0c\xba\x91\x45\xe7\xd6\x40\xdf\xef\xc1\xa4\xf3\x1a\xf1\x1c\xcb\x32\x52\x0d\xfb\xb1\xe4\xf7\xe4\x33\x38\xab\x2c\xe2\x85\xec\x24\xae\x86\x40\x45\xfa\x78\x41\x93\xc9\x16\x4c\x6e\x59\xa8\x5e\x19\x15\x5d\x18\x50\x3c\x5b\xab\x49\xa6\x56\x1c\xd2\x2e\x9e\x05\x05\x84\xb8\x45\xf1\xb2\xaf\x81\xeb\xae\x8b\x90\xc7\x68\x29\xc5\x88\xb5\x10\xd7\xe1\x96\x70\x51\xcf\xe3\x37\x30\x40\xd8\x86\xca\x5d\x2f\xfb\xed\x9b\x4e\x84\x61\x49\x87\x7a\x24\x96\xe1\x61\xd6\x1e\x06\x5f\x09\xe4\x6d\x0c\x88\x5e\xb4\x79\xbd\x93\xe1\xc9\x71\x1c\xe1\x68\xde\x38\xa9\x09\xe7\x09\xc1\xac\x49\x7a\xad\x7d\x5c\x3d\x22\x06\xdc\x14\x58\x77\x92\x00\xc2\xaf\x5b\x02\x5b\x15\xb2\x10\xdf\x59\x0c\xc8\xec\x86\x87\x9b\xd8\x40\x37\x50\x45\x98\xb3\xfc\x50\x36\x4b\x48\x75\xad\x2c\x84\x7e\xcf\x76\x92\x44\x79\x12\x94\x85\xcc\x88\xd0\xa3\xd6\x4b\xfc\x44\x98\xd6\x19\xec\x38\x9c\x33\xe3\xd9\x25\x44\xfb\x62\x50\x3d\xdf\xb5\xf3\xa7\x41\xd6\x61\x3c\x62\x70\x70\x79\xf9\xb0\x6a\x5a\x95\x5a\xcd\x08\xed\x52\x5b\x9f\xce\x40\x88\xd8\xf8\x78\xde\x95\xcd\xc4\x1b\x9f\x49\xd3\xf7\x18\x62\x0c\x76\x76\xad\x05\xee\x97\x02\xaa\xc1\x6c\xac\x83\xe3\x7a\x25\x23\x32\x44\x6d\x94\xc3\x4e\x83\xa0\x8d\x26\x38\xa8\x17\xbd\x4b\x8a\xf2\x17\xee\x36\x68\x39\x94\x95\xae\xea\x96\x8e\x67\xb0\x4e\xae\x3a\xb7\x17\x36\x64\xbb\xec\xb2\xf5\xf9\x3d\x45\x98\xa3\x2d\xf0\xaa\x04\x06\x74\x02\xc8\x29\xff\xc9\x68\xd8\x54\x1a\x0b\x98\x2b\x73\x91\x66\x6a\x61\xab\xa2\xc1\xbd\x18\xe6\xf4\x1a\xc4\xb7\x3a\xf7\x70\xf5\x8e\x8c\x4b\x0e\xe2\xba\xce\xa0\x23\x6b\x56\xa8\x6d\xd2\x2d\x74\x88\x20\x52\x41\x6c\x68\x8a\x06\x31\x05\x66\xc7\x38\x69\xb4\x65\xed\x81\x69\x42\x9a\x6d\x81\xd2\x60\xc1\x5f\x95\xc8\x89\xe6\x5d\x38\x49\x2a\xf3\xc2\x90\x0e\xad\x7c\x91\xb9\x49\x51\x09\xb7\xbd\xb3\x3a\xc1\x13\xb2\x91\x7b\xfa\xc2\x7c\xb0\x92\x8a\xe0\x15\x88\xec\xce\xb2\x64\xd1\x2e\xa2\x3c\x0c\xbd\xab\x05\x49\x5b\x37\xb0\x10\x5a\x6d\xe5\xdd\x54\x86\x27\xdb\x6e\x88\x92\x44\xb9\xa0\x6a\x31\xb6\x46\xbf\xf6\x4c\xeb\xce\x7e\x79\x66\x3f\x6c\xa3\x51\x9f\x22\xd7\x9f\x33\x32\xc2\x3d\x25\xa8\xa9\xa0\x63\xa7\xd0\x66\xbb\xb5\x96\x5c\x0b\x9e\xb4\x6a\x61\x1d\x7a\x53\xbb\xa1\xea\x2e\xb6\x1d\x9e\xad\xcc\x31\xe6\x53\x87\x8b\xd4\x7e\x61\xab\x25\x4b\x36\xb0\x96\x3a\xf8\xe5\x4c\x50\x2e\x6c\x65\x90\x36\x41\x6d\x29\xfe\x3c\xce\xb0\xc0\x49\x42\x12\x2a\xd3\xed\x6d\xbb\x7f\xfa\xe3\xca\xd1\x9e\x99\x0a\x36\xd2\xd6\x83\xfa\x4c\xd3\x3c\x45\x2c\x4f\x27\x56\xca\xc5\xf2\x31\x04\xbf\x74\xa9\xfa\x06\xc3\xc9\x0d\xb0\x04\x18\x20\x02\x38\xd3\x11\x0b\x80\xad\xad\xa9\x02\x47\x73\x4a\x9e\x00\x76\x53\x30\x22\xe5\x31\xba\xe2\x8a\x9c\xa2\x4b\x9c\xdd\x83\xa0\x66\x4a\x4a\xce\x8c\x75\x1c\x4b\xa4\xa5\xd6\x9c\x51\xd5\x1b\x31\x8b\x86\xed\x56\xe5\x24\xe2\xcc\x20\xa2\x46\xb0\xb0\xbe\x09\x30\xf7\x3a\x68\x50\xe5\x12\x1b\xa9\x6c\x58\x6c\x81\x9f\xc7\x41\xf4\xea\xd8\x64\x07\x6c\x40\xc7\xb7\xf8\xd9\xc4\x6b\x9f\x63\x85\x4d\xb5\xd8\x55\x92\xbb\x0d\x88\xb2\x15\x84\x0c\x10\xb0\x0b\x1c\xe1\x16\x8d\xc2\xd7\x3e\x33\xd1\xa9\x5f\xd3\x63\x72\x8c\xbe\x4b\xf8\x44\xf6\x90\xf4\xa0\xd9\xf0\x50\x12\x25\x7b\xc6\x41\x05\xff\x36\xa9\x60\xdf\xb8\xd5\x2f\xf8\x3e\x94\xfd\x9b\xd2\xcf\x06\x04\x43\xfe\xe9\xf4\xe4\x24\x5d\x1c\x4d\xf2\xe8\x91\x28\xfd\x17\xc8\x14\xb5\x2b\xe4\x10\xa4\x70\x1d\x1e\xd5\xba\xd5\x59\xc6\xb2\x6a\x45\x91\x36\xad\x46\x12\xc0\x4d\xd7\x57\xba\x2f\xac\xea\xa0\x8f\x38\xab\xaf\x1a\x69\xa7\x2c\xf2\xa6\xe3\x55\x02\x5c\x7e\x1d\x6d\xc5\x14\x8e\x0d\x71\x9e\xa7\x09\x9e\x55\x54\x96\x0d\x94\x94\xeb\x94\x5a\x2a\xd2\x73\x87\x78\x0b\x7d\xca\xca\x51\x66\x5f\x39\x77\x24\xb8\x15\xad\xbb\xe5\x78\xc4\xfa\x12\x3d\x13\x53\x0f\x16\x72\x12\xc1\x3b\x91\x53\x39\xf7\x19\x89\x60\x2f\x85\x46\x0d\x1c\xae\x41\x4d\xb0\x8a\xa3\xd3\xac\x9c\xff\xc6\x6a\xa0\x38\x91\xa4\xa7\x1b\x06\x48\x34\x17\x48\x88\x9e\x05\xce\x32\x22\x46\xcc\x42\x9b\x02\x80\x37\xe7\x36\x48\xa4\x29\x9a\xbc\xd3\x28\x5f\x57\xa3\x0c\x93\x3e\xca\x09\x8b\xeb\xce\x37\xe4\x37\xae\x4c\xf5\x58\x91\x1b\xa8\x65\xd1\xb6\x91\xde\x6f\x6f\x36\x6e\x39\xe6\x75\xda\x79\xbf\x12\xa6\x0f\xe5\xa6\x53\x50\x20\x65\x51\x55\xd3\xd9\xfa\xbc\xfa\x5e\x12\x73\x00\x19\x1b\x3e\x8e\x39\x91\x81\x11\x1f\x79\x5b\x5c\x42\xa7\x44\x4b\x1f\x23\xa6\xc9\x38\x74\x38\x18\x80\x6d\x87\xb7\xad\x3b\x8d\x04\x97\xd2\x46\xde\x9b\x76\x56\xe7\x4f\xed\x50\xcb\xcf\xa0\x84\x0f\xaf\xaf\xc6\xcb\x55\xfd\x82\x67\xae\xbe\x9f\x7d\x58\x9b\x64\xdf\xd8\xd4\xda\x6a\x7e\xc5\x5a\x6c\x50\xcf\xef\xe4\xec\x62\xe8\x8b\x58\x55\xba\x5e\x2e\xe8\x17\x22\xab\x37\x97\xf4\x5b\x9e\x71\x50\xdc\xaf\xd2\xc4\x8a\xf2\x7e\xeb\x37\xab\x1c\xef\xbb\x0b\x6c\x5e\x65\xeb\xd7\xf2\x87\x32\xcd\xac\x0b\x4b\xdf\xd3\x36\x35\x5c\x2b\x11\x08\x8c\x2f\xed\x61\x07\xc1\x4b\xbf\x25\x15\x4e\xb3\x30\xe5\xd2\xe1\x86\xda\x69\x9a\xa3\xd6\x74\x09\xbe\x2a\x9e\x79\x84\x4d\x34\x4b\x75\x70\x4b\x5b\xb1\x99\xc7\xeb\xde\xc2\xa4\xef\x23\x8c\xf9\xf5\x72\x98\x93\x45\x11\xb5\x27\xad\xec\xe6\x4a\x70\x37\xd8\xfd\x27\xc4\x43\xc2\x37\x6e\xe8\xae\x49\x8a\x1e\x3a\x4a\x10\x2c\x6d\x38\x06\xe4\xf2\x55\xf2\x7c\x36\x30\x0f\xfb\x31\x9b\x6c\xe0\x23\x5f\x84\x21\xb8\x6a\x6c\x5d\xb1\xc8\x1d\x44\x2a\x04\x79\x22\x02\x68\xc7\xc6\xfc\xb0\xf2\x51\xc5\x89\x20\x38\x5e\x04\x2b\xe2\x03\x0e\x4c\xcf\x60\x1e\x93\x34\xd5\x0a\x3c\xa8\x26\x8c\x1f\xf1\xcc\xe9\x2c\xa5\xb7\xa0\x82\x06\x9d\xea\x1b\x2b\x08\x57\xd0\x5f\xb0\x23\xf2\x99\x4a\xa5\xe5\x8a\x9a\x58\x4d\xd7\x08\x48\x3c\x50\x57\x6b\x4e\xec\x0d\x37\xfa\xd0\xff\xee\xfa\xf6\x7e\x70\x3e\xfa\x50\x44\xe7\xbb\xf4\x33\x8f\x08\xe5\x00\xfe\x39\x1b\x31\x1f\x50\xeb\x01\x90\x61\x2f\x11\x8e\xe3\x02\xd9\xc0\x2a\x91\x46\x66\x5b\xc9\x91\x83\x53\xb1\x36\x94\x76\x45\x33\x0f\x90\x83\x74\xa8\x27\x6b\x85\xeb\xac\x74\x72\x4c\x26\xd5\x8a\x94\x97\x3d\x5d\x36\x21\x76\xab\x32\xba\x36\x51\x0e\x5c\x90\x91\x67\xa7\x2b\xc1\xed\x7c\x82\xcd\x25\xbc\x19\xb7\x73\x1b\xb2\xc5\xa6\x7e\xa4\x9f\x49\x7c\xdb\x20\x55\xed\x25\xa3\xa5\x55\x24\x60\xed\x2e\xe4\x8c\x6e\xa2\xf1\xfb\xa9\x3c\xe8\xef\xda\xb3\xa5\xeb\x02\x92\xad\x80\x57\x05\x6c\x55\x85\x30\x8a\x88\x50\x98\x32\x34\x85\x83\xcd\xa2\x05\x02\xc0\x0e\x02\x3e\xec\x3f\xa2\x94\x32\x40\x0e\x58\xb5\xb4\x0f\xe5\x79\x6c\x20\xb4\x5e\x0e\xaf\x1e\xee\x4b\xa2\xea\xf7\xd7\x0f\xe5\xa2\xee\xfd\x9f\x57\xca\xaa\x95\x16\x56\x05\x0b\x05\x53\x2c\xb2\x10\x2d\xca\xac\x5f\x99\xda\x89\x26\x0b\x45\x1e\x6e\x2f\x76\x92\xef\xea\x9d\x65\x8d\x18\xe1\xa1\x74\x55\x8f\x88\xd0\xe6\xd3\x98\x44\xeb\x50\x4c\xdb\xd3\x91\x89\x82\xd2\xeb\x60\xad\x89\x16\xe1\x0c\x4b\x94\x61\x61\xfd\x50\xb1\x09\x80\x2a\x57\x06\x33\x9a\xd7\x2a\x04\x89\x4f\x44\xfd\xa8\xaf\x3e\xce\xf6\x91\x05\x61\x45\x59\xf0\x8f\x92\xf1\x93\x69\x78\x83\x93\x66\x87\xb2\x22\xd5\xc5\x09\xcb\xd0\x03\xb2\x3d\x84\xb8\x0b\xc7\xa6\x42\x7c\x5f\x37\x07\x2b\xe2\xe2\x09\xb5\x4a\xca\x99\xa6\x48\x03\xa7\xea\x30\x58\x83\xe6\xf8\xd4\x7c\xdc\x12\x91\x2e\x88\x6a\xd7\x6d\x15\x4b\x89\xfa\x37\xc3\x9a\xb5\xbe\xa8\xba\x90\xbe\xac\x72\x36\x89\xf7\x66\xed\x1b\x24\x29\x48\x4f\x3c\x08\x54\x24\x3b\xd3\xdd\x60\x90\x8c\xd3\xff\xa6\x1c\x49\x70\x08\x68\xbd\x75\x2a\x43\x29\xed\x78\x0d\x30\xef\x66\x99\x78\xc5\x32\x6c\x08\x7a\x14\x0e\xc8\xa6\x81\x84\x40\x3f\xcb\x31\xc6\xbd\x10\xf8\x87\x9b\x82\xb9\x36\xb6\x60\x6f\x60\x48\xc5\x6c\xda\xa0\x21\xfd\x68\x28\xda\x83\x65\x00\xfc\x87\x2b\xc8\xe8\x62\x83\x6d\xee\x7a\x38\xdd\x90\xda\x36\x03\x50\x2a\xc6\xe7\xcc\xdf\x16\x8b\x1a\x67\xd8\xda\x1d\x40\x89\x72\x95\x12\xea\x0a\xeb\x1d\x8f\x58\x10\xb0\x22\x8d\xda\xa3\xcf\x88\x2b\x4e\x02\x15\x6f\x19\x00\x5b\x43\x92\x8e\x17\x7e\x4a\x3b\x50\x4d\x91\x57\xf3\x72\x79\x91\xa5\x7e\xec\xe9\x94\x73\xec\x12\x11\x9d\x05\xc5\xc6\x01\x86\xf6\x25\x68\x2f\x28\x28\x60\x3b\x06\x73\x34\x18\x2d\x70\x50\xae\x2e\x48\x5e\x8f\x39\x91\xec\x2b\xe5\x53\x3d\x69\x62\x4b\xa2\xe0\xaa\x7b\x40\x4b\x75\x98\xda\x96\x57\x1f\xf0\x3d\xa0\x33\x6d\xaa\x38\x04\xc7\x6a\xad\x99\xca\xf9\x78\x81\x12\xc2\x58\x24\xe8\xb4\xc9\xaa\xfe\x39\x23\xd1\x36\x10\x32\x37\x58\xe0\x94\x28\x22\x56\x85\x23\x95\x8b\x49\x83\x88\xe3\x76\xd0\xf6\x6b\x76\xd1\x54\xda\xa8\x96\x64\xf1\xda\xed\xc5\x3a\x48\x18\x3f\x8b\x8d\xd0\xaf\xf4\x34\x7e\xb4\x96\xff\x0d\x67\x61\xfb\x29\xa6\x61\xa3\xad\x02\x04\xa0\x5d\xe7\xf4\x3a\x50\x28\xf7\x4b\xa0\x22\xa5\x70\xa1\x03\xc1\x40\x59\x3f\xca\x26\xf0\x93\x75\xbc\x74\x2f\xbc\xdb\x65\x38\xb8\x14\xda\xca\xa1\x2a\xe5\x4e\x00\x95\x80\x4a\x65\x70\x40\xea\x01\x4c\x40\x68\xa9\x8b\x90\x0c\xdc\x7e\x16\xde\xae\x30\xe8\x5a\xc9\xaa\x5a\x5c\xaa\xb2\x5c\x6b\x78\xdc\xbe\xc0\x1d\x3a\x89\x66\xdf\x12\xcd\x3a\x52\x2e\x45\xd7\x6a\xea\x24\xa2\x82\x33\x63\x8b\x3e\x5b\x80\x80\xf2\x04\x21\xf7\xc8\x5e\x91\xb6\x72\x2c\x5c\xfd\x94\xf9\x7f\x95\x39\xb8\x23\xea\x90\x54\xeb\x92\x2a\x8f\x03\x17\x14\x78\xa0\x92\x50\x1a\xb0\x71\x35\x30\x5a\x13\x06\x69\xac\xfc\xc3\x2b\xe3\xc0\x82\xe4\xe6\x05\xcf\xd1\x33\x95\x73\xa4\xf8\x88\x41\x9c\xa0\xf7\x06\x28\x8e\xcc\x8b\x3d\x78\x0b\x60\x10\x64\x3e\x49\xa9\x42\x38\x98\x61\xc9\x24\xd9\xb3\xe7\x59\x7f\x00\x33\xae\xcd\xb3\xaf\x83\xe8\x59\x73\x68\xb6\xb0\xaf\x15\x8d\xec\x9a\x4a\x1f\xc4\x34\xbf\x6c\x32\x7d\xa0\xf1\x84\x1a\x66\xed\x99\xeb\xb2\xe9\x51\xbd\xb5\xc1\x82\x86\x02\xb2\x2b\x95\xaa\x72\xb7\x58\x43\xcf\x9a\x4c\xfa\x62\x23\x5a\xa5\xd2\x17\xaf\xef\x23\x97\xbe\xa9\x4c\xd9\xaa\xdc\x4a\xf7\x49\x83\xfd\xdb\xe5\xec\x2a\xee\x02\xe7\x43\x49\xe9\xa6\x51\x52\x3a\x34\x54\xb3\x22\x21\x60\xfb\xf0\xf2\x4d\xd4\xc1\x22\x3f\x2b\xa4\xa2\x20\xdd\xb2\x8c\x09\x43\xaa\x9c\x9f\x71\x05\x39\x35\x11\x94\x70\x5f\xca\xf3\x1c\xb1\x7a\x09\x64\x35\x4f\xdc\x35\x45\x63\xaf\xe8\x67\xc1\xf9\x73\xb3\xb0\x16\xad\x9f\x7c\x90\x9b\x51\x96\x6d\x31\xf6\xaa\x88\x59\xb8\xf8\x9a\x82\x93\xb4\xe0\xb1\x4d\xc2\x71\xcd\xa9\xac\x1f\xfa\x52\x02\xc5\xda\x73\x61\x2f\xdd\x3d\xaa\x76\x4b\xdc\xb9\x75\xbe\x89\x97\x91\x2d\x37\xb6\x01\xd3\xb1\xd7\xe3\x2b\xae\xda\x6d\xaa\xcc\x02\xaa\xe8\xde\xb0\x50\xab\xf0\x04\xba\xf1\x1e\xb8\x77\xed\xd8\xb1\x09\x75\xf1\x08\xdd\x95\x3d\x29\xcd\xd8\x56\xef\x7f\x89\x59\x6f\x5a\x1a\x38\xf0\x37\x0a\x1b\xef\x4b\x43\xcb\x01\xd4\x04\xb6\x61\x92\x15\x4e\xec\x85\xbb\x9c\xc5\x44\x30\x82\xd5\xfc\xf5\xb2\x2c\xce\x76\x35\x4f\x07\xe3\x7b\xd9\x8c\x8b\xb3\xbd\xd4\x85\x0f\x87\x5b\xae\x91\xbe\x76\x9c\xfa\xf5\x36\x96\x22\x1b\x7c\xe0\xab\x04\x2f\xa9\x8e\x35\x66\xc3\x00\x84\x66\x13\x2a\xdd\x29\x11\xa3\x5e\x9d\x7b\x99\x94\x94\x1a\xbb\xcf\x52\x32\x8a\x3e\xed\x61\x6d\xe5\x35\x4b\xf2\x45\xe4\x7e\xbc\x7c\x3a\xc2\xaa\x2a\xce\x79\x90\xa1\x00\xa5\xb4\x15\xa6\xcc\x72\xaf\x55\x49\x09\x5a\xa6\x4c\x71\x5d\x1e\xc2\xc1\x67\xb8\x7c\xf1\x09\x2e\x5d\xba\x43\x97\xee\x50\xb3\x47\x5d\xba\x03\x42\x87\x96\xee\xb0\x4e\x05\x5d\x65\x00\xf5\x3e\x39\xa8\xb6\x59\x2a\x71\x63\xf6\x77\x8d\x1e\xb9\x7d\x48\xbf\xb3\x21\x86\xf1\x50\xf6\x17\xfb\x43\x6d\x48\xd4\xd2\x67\xd5\xd9\x86\xf6\x4c\xb6\xa8\xba\x05\xb0\x88\x13\x8b\x43\x67\x03\x96\xcb\xf6\xa7\x55\xa6\xd2\x11\xfb\x9e\x3f\x93\x27\x22\x7a\x08\x2b\x94\x72\xa9\x80\x0f\xbb\xf8\x18\x38\x08\x25\x48\x73\x13\x07\x81\xd1\x15\x4e\x49\x6c\x2a\x1e\x06\x61\x8d\xd6\x60\x6b\x5d\xad\x75\x70\xab\x80\x1c\x6a\xb6\xc1\xc5\x4d\x8c\x98\x09\x35\x34\xe1\x6d\x20\x2b\x50\x37\x31\x20\x98\xdf\x79\x47\xf0\xef\x8e\xd1\xbd\xbe\x9f\xa8\x2c\x8f\x37\x40\x5f\x6b\x1a\xdb\x88\xcd\x04\xcf\x33\x6f\x43\xe3\x13\x53\xfa\xd6\x44\x3f\x2d\x3b\x82\x61\x30\xce\x0b\x1c\xe1\x58\xeb\xe2\xab\x09\xe7\x4d\xa2\x50\xb7\x82\x30\x0a\x09\x48\x1f\x43\x1f\x5a\x67\x43\xdd\x8d\xff\x36\x00\x6e\x59\x05\xc4\xfe\x42\xce\xe5\x73\x22\xc1\x2a\xe4\xad\xee\xa5\x3c\xf2\x32\x56\x41\xed\x38\x57\xd9\x44\xbd\xdf\xc2\xd9\xf6\xeb\x61\x10\x8a\xce\x6d\xcc\x97\x49\x52\xb5\xf7\xc4\x8b\x59\x4b\x5b\x47\xcf\x36\xf1\x8b\x9b\x5c\x64\x1c\x24\xb1\x64\xe1\x60\x1b\x2c\xd2\x5b\xc6\xb3\xdc\xc4\xb5\xd1\x30\xcc\xa9\x96\xb2\xa9\x54\x97\x58\x45\x73\xcd\xb9\x0b\xc4\xb3\x3d\xc5\xfb\x15\x5c\xf9\x65\x2d\xa8\x35\x33\x38\x0b\x7b\x6f\x70\x29\xb4\xb0\xa8\x9b\x7b\xdf\x85\xd7\x3b\x49\x22\xd5\xfd\x19\xb7\x9b\x2d\x68\x1d\xd8\x45\xdd\x27\xf6\x89\x9e\xe8\x3a\x2a\x5a\x37\xfe\x76\xb4\x55\xae\xb8\xb5\xf7\x48\xc2\x1d\x20\x64\xce\x2d\x60\x57\xf1\xa2\xad\xd0\xda\xe0\xfe\x17\x74\xbb\x2c\x20\x8b\x92\xff\xa4\xc5\x11\x6f\x71\x4d\x71\xa6\x95\x08\xc5\xf5\x2d\x29\x66\x46\x8e\x35\x71\xb2\x08\xa3\x5c\x50\x77\xf6\x2b\x39\xe1\xcd\xd4\x01\x16\xca\x93\xb0\xa2\x52\x84\x83\x62\x73\xc6\xe1\x8f\x23\x95\x63\x1f\x98\x08\x34\xe1\x8a\xa0\x9b\xfc\x77\xe7\x58\x17\x4e\xbc\xab\xd9\xd3\xb5\x84\xbd\xc3\x2e\xe3\x3a\x7c\xc3\x56\x27\x8d\xb2\x59\x00\x8e\x58\x6f\x25\x6e\x53\xfb\xa0\xf6\xcb\x76\xf5\x1b\x6a\x3f\x75\xb2\xcf\x36\xdf\xae\x00\x6f\xda\x3a\x36\xbb\x14\xe7\x6e\x03\x61\xad\xf4\x14\xc2\x56\x5a\xfb\x1d\xa0\xcf\x52\x70\xd4\x63\x2b\x4d\xfd\x97\xff\xcb\xd4\xca\x32\x4b\xf3\x5f\x88\x8b\x11\x33\xbf\xf7\x7c\x9d\x0a\xfd\x42\x01\x00\x8b\x53\x52\x40\x64\x8a\x32\x98\x1e\x40\x8a\x58\x30\x34\x03\xf6\xeb\x61\xfa\xf5\x18\x1e\xf3\x09\x11\x8c\xe8\xa1\x39\xf0\x01\xcf\xcc\x52\xcc\xf0\x0c\xa0\x85\x7b\x10\x19\x07\xe2\x6a\xa1\x8a\x18\x92\x36\xf5\x0e\x81\x5b\x69\x66\x69\xf3\x6d\x8b\xba\xbf\xd0\xa7\x11\x65\x2d\xb2\x69\x11\x5e\x51\x4f\xfd\xb7\xb6\xff\xed\x24\xf6\xfb\xfe\xdd\x0f\xe3\xdb\xc1\xdd\xf5\xc3\xed\x59\x49\x6c\x3f\xbb\x78\xb8\xbb\x1f\xdc\xd6\x3e\x2b\x72\x55\xff\xfa\x30\x78\x68\x78\xe4\x1a\xb8\xe8\x7f\x37\x28\x15\xd1\xfe\xeb\x43\xff\x62\x78\xff\xf3\xf8\xfa\xe3\xf8\x6e\x70\xfb\xe3\xf0\x6c\x30\xbe\xbb\x19\x9c\x0d\x3f\x0e\xcf\xfa\xfa\xcb\xf0\xdd\x9b\x8b\x87\x4f\xc3\xab\xb1\x0b\x3b\x0e\x1f\xfd\x74\x7d\xfb\xc3\xc7\x8b\xeb\x9f\xc6\x41\x97\xd7\x57\x1f\x87\x9f\xea\x66\xd1\xbf\xbb\x1b\x7e\xba\xba\x1c\x5c\xad\x2e\xd6\x5d\xbf\x1a\x8d\x75\x80\x83\x8b\x2c\x30\x1a\x05\x62\xd2\x64\x61\x49\x9b\xfe\x0a\xbe\x8b\x1b\x43\x8f\x47\x3d\xf7\x97\x29\xad\x7d\xa4\x59\xa0\xf3\x8b\x15\xdc\x63\xc4\xbc\xe3\xd2\x5f\xaa\x0a\xcf\xa4\x4b\x3d\x2e\x8d\xf6\x14\xf5\xe1\xac\x80\xc2\x50\xea\x14\x32\x1b\xfc\x48\x9d\xab\x1b\xe8\x30\xa1\x29\x05\xaf\x37\x3a\x42\xd5\x0d\x2f\x37\x68\xe7\x04\x43\xb0\x7e\xbb\x78\xd5\x69\x90\xd5\xac\x66\xa0\x94\x53\xe4\x38\x34\x31\xe6\x04\x83\x3d\xbb\x60\x38\xa5\x51\x35\x05\x03\xe0\x57\x51\x01\x35\x52\x6d\xb1\x44\x60\xe5\x96\xe7\x04\xfd\xf0\x97\x62\x50\xe0\xc1\xb0\x9a\x77\xbe\x54\x51\xcf\x3e\x10\xb9\x59\xd5\x75\xe4\x59\xea\xc9\x1d\x73\x6b\x5a\x86\x73\x6b\x2b\x77\x83\xbb\x29\x67\x01\xdc\x58\xc9\xf7\xa4\x8f\xb7\x99\x51\x85\xc6\x4f\xd1\x1d\x40\x9d\xc8\x42\x75\xd7\xbb\x98\x25\xf9\x8c\x32\x44\xd3\x2c\x21\x45\xcd\xf7\x09\x99\xe3\x27\xca\x5d\xf9\x0a\x53\xe5\x03\xd6\xd1\x8a\x56\xe8\x08\x35\x1e\x94\x53\xd4\x8f\x63\x59\x66\x70\x25\xca\x71\x2c\xf3\xa8\x3c\xec\x10\x21\x8c\xc5\x9e\x6d\x56\xe8\xa8\x38\x72\xb0\x62\xfb\x07\x73\x59\x66\x87\xe5\xbb\x77\x87\xeb\x5f\xaf\xe0\xd8\x91\xf2\x78\x2b\x61\xe0\x1e\xcb\x47\xc7\x9a\xd7\x09\x04\x0e\x56\x67\xb7\x1e\x2d\xbe\x4e\xdb\x4e\xfd\xca\x8e\xe1\xa0\x6d\xd7\x67\x23\x2a\xf4\x9a\x2e\xdd\x8c\x93\x4a\xe9\xae\xd6\xfd\x95\x4a\x7f\xd5\x76\xb6\x57\x6f\x4f\xbd\x34\x06\x47\x72\xec\xe9\x7f\x83\x79\xdc\xc0\xa7\xd7\xfe\xcb\x95\x22\xdb\x38\x58\xb7\x4d\x7d\x40\x4b\x49\xba\xd6\x0f\xb4\x92\x0e\xf7\x04\xef\xd4\x5e\x18\x84\xc2\x0b\x34\x02\x77\x1f\xa6\xcc\x96\xe3\x21\xde\x1f\xe5\x0a\x50\xeb\x73\xec\x4b\xc4\xe1\x09\x7f\x2a\x29\x97\x29\x91\x12\x37\x00\x96\x04\x26\xb1\x5d\x18\x83\x3f\xa1\xf6\xc3\x96\xf4\xe4\xce\xe4\xbd\xfe\x6a\x95\xd1\xe7\x36\xd4\x8c\xdd\x44\xb5\xc0\x1a\xbb\x48\x5b\x74\x6d\xf2\xed\x34\x7f\xe9\x15\xc1\x34\x5c\x04\x31\x46\x4d\xee\x9f\x96\x66\xb5\xea\x82\xd5\x56\x59\x0a\x5d\x78\x9b\xc7\xe0\x04\xad\x6f\x8d\x88\x6d\xfd\x2a\xb8\xbc\x3e\x1b\x50\x5d\xc9\xdf\x19\x56\xa0\x8e\x78\x9a\x1a\xb9\xa0\x64\x4b\xed\x21\x6c\xd2\x1c\x0b\x69\x4a\xe6\xd1\xdc\x78\x99\xf4\x95\xd1\x1b\xb1\xe7\x60\x43\x4a\x81\xc0\xfd\xb0\x25\x40\x13\xfd\xac\x8f\x1b\x7d\x2a\x85\x57\x83\xc8\x48\x21\xd6\x37\x20\x04\xe3\x10\x2c\xca\x47\xad\x21\xf0\x60\xbf\x76\x20\xf5\x2d\x6a\x05\x56\xd6\xb7\xa9\x62\xa0\x9f\x5b\x50\xa8\x6f\x07\x4d\xb9\xed\x10\x82\x5a\x81\x75\x23\xd8\x43\xa9\xc0\x57\x85\xf7\xf6\xe9\x9a\x26\xbb\x37\x9d\x58\x8c\x0a\x3d\x5d\xb7\xda\xbf\x77\x33\xfa\xbd\xf1\x3b\xe4\x0d\xa0\x26\x41\x6b\x1e\xe1\x1b\x1d\x69\x99\xd5\x25\xdb\xdb\x40\x0c\x89\x8e\x0c\x6a\xe0\x57\x10\x69\xd9\xbf\x19\x7e\xd5\x43\x5f\x85\xd9\x66\x5f\x6d\x75\x00\xed\xb8\x6d\xb9\x40\xd0\xa6\x4a\x29\x07\xe5\x63\x07\x7b\x55\x39\x89\x76\xcf\xec\x41\x44\x4d\xe7\x50\x7f\x59\xfa\x06\x9c\xd3\x50\xfe\xce\xf8\x6f\x7d\xc0\xb3\x75\x01\x19\x19\x97\xca\x9a\xb5\x8b\x47\x6c\xb2\xa8\x3a\x79\x7a\xde\xcb\xd3\xfa\x94\xee\x5c\xd2\x4d\xb7\xb7\x9c\x9e\xbc\xe7\x40\xdc\xd5\xf7\xc1\x9a\x84\xe7\xbe\x89\xb9\xe6\xd3\x80\x8b\x35\x45\x29\x74\x11\xec\x75\xb3\x2a\xd9\xcb\xdc\x62\xd6\x6e\xca\x3a\xf9\xe7\xbd\x91\x5b\x8b\xb0\xef\x7e\xdd\x8a\xd8\x88\xff\x06\xe1\xba\xa3\xb2\x97\xa5\xb2\x7d\x64\x3c\x94\x07\xb7\xf9\x05\x7a\x66\xe4\xb8\xa0\x19\x67\x70\xd5\xca\x84\x67\xf0\xa5\xba\x7f\xeb\x0b\xe6\x6e\xe8\xf3\x0d\xd6\x64\xbd\xd3\xf7\xce\x04\x0e\x18\xb7\xeb\xf2\x58\xab\x43\xed\x2b\x5b\x84\x88\x53\x93\xdd\xa8\x68\x4a\x7a\x88\xb3\x64\x11\x04\x3b\xd8\xf3\x0a\xe4\x66\x62\x94\xe6\x84\x0a\xd7\x89\xc5\x18\xdc\x28\x1d\x7e\x43\x69\xbc\x89\x46\x76\x88\x34\xb9\xea\x5f\x0e\xce\xc7\x83\xab\xfb\xe1\xfd\xcf\x35\xf8\x91\xe5\xc7\x0e\x42\x32\x78\xe1\xee\xe7\xbb\xfb\xc1\xe5\xf8\xd3\xe0\x6a\x70\xdb\xbf\x5f\x03\x2f\xb9\xaa\xb3\x26\xe8\xc2\x5c\xd6\xa9\x6f\x9b\xc0\x17\x3a\x33\x6f\x4d\xef\xcb\x20\x93\x41\x27\x94\x34\x00\x4d\x9a\xd4\x7f\x16\x13\x81\x62\xf2\x44\x12\x9e\x15\x66\xd5\xda\x05\x0b\x10\x28\x6b\xda\x5f\x85\x42\x09\x6d\x56\xd7\xf8\x14\x99\x5a\x6f\x41\xb9\x5b\xdf\x20\x88\x7c\x58\x10\xf6\x95\x42\xe4\x73\x96\xd0\x88\xaa\x20\x35\x90\x0b\xeb\x5e\x31\xee\x43\x88\x4e\x5d\x43\x5c\x7b\x8b\x46\xd9\xbb\xce\x1f\x7a\xd2\x97\xb5\x7d\x7f\xa2\x3c\x22\xda\xda\x02\x42\x7b\x50\xec\x1b\x9c\xc6\x4b\x80\x6d\x5b\x8c\xee\x25\xcc\x03\xcb\x39\x3a\x36\xbd\xaf\x01\xcc\xad\x7e\x90\xeb\x6f\xc3\x55\x71\x32\xa5\x73\xbd\x3a\x50\xa6\x1d\xa5\xbe\x71\xb8\x4b\xa9\xb0\xe6\x1e\x90\x37\x6c\xec\xfa\x86\x01\x0b\x4b\xf5\x62\x98\x89\x39\xc5\x48\x90\x94\x2b\xad\x80\x99\x88\x80\x9e\x16\xaa\x28\x4e\xe8\xaf\x80\x51\x25\xc8\x71\x10\x41\xe1\x90\xbd\x0a\xf7\x81\xc5\x8f\x38\x1e\xb1\xf3\xc1\xcd\xed\xe0\x4c\x33\xa4\x63\xf4\x20\x01\x7e\xaa\x34\xf5\x73\x4b\xde\x46\x1c\x0b\x23\x19\x28\x93\x8a\xe0\xa6\x60\x30\x22\x04\x17\xed\xf9\x83\xef\x6f\x00\xdf\xd5\x93\x37\x3c\x2b\xd9\xa6\x9c\x01\xe0\xaa\xb1\x2a\x72\x90\x33\xb0\xf7\x9c\xac\x5b\xfc\x5c\x5a\x91\x10\x7e\x03\x24\x91\xf2\xaa\xbf\xe0\x6a\x03\x80\x67\xfb\xf9\x95\xfa\xbc\x81\x6f\x57\xcd\xf3\x1e\x42\xec\xa4\x2a\xd0\x40\x0d\x60\xa8\xaf\x7a\x53\x99\x67\xa3\xa8\x28\xde\x02\xaa\xa3\x42\xfa\x13\x32\xc3\x0c\x89\x9c\xb1\x0a\x3c\x6c\x68\x69\x5b\x0e\x9a\xd9\xf4\xa8\xea\x35\xc3\x29\xcf\x19\x28\x0d\x10\xc6\x5a\x33\x18\x99\x11\xa6\xd6\x0c\xe6\xad\x80\x58\x2a\x43\x3d\x5c\x2c\x96\x9a\x81\x36\xc1\xb1\xd4\xf9\x93\xa0\xf4\xf2\x66\xd7\xb2\x0b\xca\x2b\x39\x95\xf4\xa1\xf2\xf7\x73\xbd\x96\x8d\xe5\xe3\xce\xdd\xdd\x63\xf9\xb8\xbe\xab\x98\x44\x8f\x9b\x5e\x36\xd5\xcc\xcc\xc4\x56\xae\x5e\x32\xf6\x2d\xf4\x53\x5b\x9a\x05\x0a\x96\x47\x8f\xe8\xfb\xfb\xcb\x0b\x34\xa5\x5a\xee\xd5\xd7\xca\x15\xd6\x32\xf6\x83\x48\x9c\x5d\xd8\xda\x56\x73\x91\xf8\xbb\x17\x36\xde\x89\x52\x81\x94\xa0\x6f\x34\x3c\x23\xce\xd8\x2b\x2c\xda\x5e\xa5\x34\x8b\xc0\x2c\xe6\xa9\x99\xc7\x89\xcc\xa7\x53\xfa\xf9\x58\x61\xf1\x4d\xc3\x7a\x98\xa8\x8a\xf1\xdf\xf9\x64\xac\x47\xb4\xe3\x45\x5c\xd7\x1c\xb2\x05\x95\xfd\xb2\xd9\x99\x9d\x9b\x77\xff\x2f\x9f\x40\xb6\x7b\x26\x38\x20\x00\x82\x77\xce\x46\x2a\xd8\x57\x1c\x25\x1d\x23\x97\x40\x55\x02\x39\x89\xb8\x10\xc4\x26\xc9\x9b\xda\xa2\x19\x16\x8a\x82\xb5\xd6\x81\xa4\x94\xd0\xf1\x8b\x2d\x0a\x4b\x7e\xcf\x71\x81\x44\x3d\x21\x04\x1c\x3c\x19\x4d\x36\x53\x7a\xcf\x4a\xbe\xc9\xca\x09\xb4\x91\xa7\x16\x37\x13\x0c\x32\x6b\x45\xac\xc1\x13\x61\x6a\x2f\xfa\x09\x34\x51\x93\xb6\xdf\xce\xcb\x60\x4a\x7c\x0e\xcf\x8b\xcb\xcd\x85\xf4\x86\x51\x4d\x4a\x60\xb8\xe7\x6d\xa2\x94\x75\xa9\x37\x39\xfa\x9f\x5a\xfb\x8e\xe1\xd5\xe5\x75\x59\x13\x1a\x6f\x57\xbb\x28\xf5\x5d\x84\xb5\x3a\x68\xff\x2d\x81\x7c\x24\x31\x56\x8c\x00\x40\xc2\x2a\xa7\xd5\x3d\x37\x7d\x6a\xda\xaa\x74\xb9\x76\xcb\xb7\x40\xad\x29\x35\xf3\x89\x40\x4a\xe7\x3e\x02\xd1\x37\xc9\xdd\x87\x81\x3c\x88\x04\x42\xa8\x57\x5a\xb1\x4c\x99\x71\xcd\xf9\xbc\x64\x87\x5b\xc8\xe8\x66\x30\x5a\x68\x24\x99\x20\x91\xbe\xca\x4e\xd1\x4d\x42\xb4\xe4\x95\x6b\xe9\x2b\x4f\x12\x87\xf0\xb5\x5a\x3a\xdc\x08\x95\xee\xc5\xe7\x15\xe8\x1e\x2b\x26\xe6\x10\xee\x56\xcf\x2c\x58\x83\xfd\x23\x2e\x04\xeb\x0b\x26\x64\x30\x24\x96\xb5\x48\xe0\xf0\x0b\x13\x37\x0b\xa6\x24\x5c\xba\xc8\xe8\xaf\x9a\xfd\x0a\x22\xe7\xbc\x31\xc9\x31\x9c\xed\xcb\xcc\xc1\x2d\xe5\x0b\x4e\xc2\xdd\x87\x4d\x71\xd5\x2d\xe4\x9a\xca\x1d\x58\x12\x71\x56\x4d\xd1\x57\x7f\xf0\xd1\x1f\x16\x6f\xd5\xde\xad\x76\x68\x70\x4b\x16\xa6\xb6\x10\xfb\xac\x70\x5d\x14\xca\xcc\xc2\xf8\x5e\xfd\xe7\x85\x01\xb9\x48\x09\xa0\x4a\x16\x55\xe7\x90\xbe\x6b\x9b\xb6\x58\xcf\x73\x9c\x8b\x8d\x20\x29\x0a\xd4\xf2\x4d\x38\xb7\x4d\x46\x29\x86\xa5\x17\xa1\x9e\x5d\xda\x62\x12\x20\x46\xdb\x50\x23\x59\x42\x82\xb3\x64\x63\x96\xb1\x56\xc5\x6b\x66\xca\xbb\xba\xd5\x40\x4a\x2e\x44\x99\x97\xf2\xae\x95\x28\xb0\x34\x81\x0e\x5b\x6c\x73\x6c\x31\x5b\x59\xc4\xd3\x1e\x20\x01\x2a\x01\x89\xff\x85\x03\xad\x2a\x38\x58\xa3\xf7\xba\xcc\xa7\xd2\xee\xb4\x4a\x73\x2a\x7d\xa1\x79\xc9\xf9\x8e\x1e\x38\x3d\x99\xc5\x18\x12\x47\x77\x89\xc2\x29\xcd\xdf\x78\x0f\xa0\x4d\x12\x23\x83\x5e\x60\x90\x8f\xed\xda\x79\xcf\x49\x86\x05\x61\x6a\xc4\x6e\xf5\x28\xcc\x17\x45\x24\x86\x8b\xc3\x71\x68\xf4\x50\xb3\x76\x8a\xb0\xfd\x0a\x16\xbd\x29\x10\x4e\x8e\xcd\x4b\xa0\x9a\xbe\x60\x92\xfd\x77\xe6\x1d\x83\x79\x60\x31\x7f\xf4\x54\xe9\xb4\x50\xe3\xb5\x00\x19\xcd\x29\x40\x0e\xc4\x44\xda\x0b\x89\x2a\x8b\x29\xe1\xc5\xef\x9c\x38\xfc\x65\xf8\xcc\xf3\xaf\x3a\x86\xed\x0c\x05\xcc\x19\xe8\xe4\x88\x05\x7d\xac\x80\xeb\x34\xca\xfa\x96\xaa\x04\xec\x33\x8d\xbd\xe3\x0b\xfe\x69\x76\x88\x0b\x3a\xa3\x2c\x28\x9a\x64\xa7\x97\xe2\x0c\xcc\xbb\xe6\x0c\xf2\xa9\xbf\xd3\xee\x6d\x96\xc1\x31\x8c\xf8\x7f\xfe\xfb\x6f\xc7\xb4\xc9\xfb\x21\xc7\x76\x05\x0e\x61\x27\x37\xdb\x96\x70\xe7\x03\x14\x91\x06\x74\x8a\x40\xa7\x95\xa5\xcc\x89\xe2\x57\x7b\xb9\x69\xa2\xe1\x6a\x6e\xdc\xbd\x65\x72\x07\xdf\x88\xc8\x57\x9c\x0d\x73\xc5\xbc\xed\x5a\x52\x09\xd9\x01\x7a\x24\xe6\x24\x7b\x03\x41\x58\x90\x7c\xc9\x4c\x33\x62\xc5\x27\xd2\xe0\xa1\x18\x78\x57\xf3\x43\xb1\x3a\x2d\x17\x66\x15\xef\x2f\x22\x25\x0a\x77\x78\x10\x8d\xec\xca\x67\x98\x28\x52\xdd\x7e\xe5\xa6\xad\x70\xee\x00\xe7\x70\x97\xa8\xcd\x39\x96\x2f\x17\x9a\x53\x5b\xf6\xc9\x58\xd3\x43\xe1\x61\x5d\x90\x8e\x19\xa4\xc9\xf6\xd4\x1b\x92\x4b\x22\x0c\xa7\xf3\x70\x58\x96\x12\x42\x14\x47\x88\xd1\x5c\xe3\x6b\x24\x29\xa6\x1b\xe5\x13\xe8\xf7\xeb\x31\x26\x4b\xce\x06\x3c\x23\x62\x1c\xe7\x6a\xe9\x58\xac\x8a\xf1\xd7\x1f\x9d\xe7\x6a\xb1\xbe\x7d\x99\xe0\xe5\xb2\x37\xab\x70\x3d\xf5\xfb\x0d\xcd\xae\x97\x98\x83\x10\x9f\xb2\xd4\xdc\x80\x9a\x49\x2a\xa8\x99\x36\xe6\xb4\x64\x22\x81\x1b\x98\x29\x80\xd4\x2b\x34\x29\x7b\x45\x1b\x6c\x6f\x18\x39\x9a\xe4\x85\x49\xc9\x57\x4b\x88\x8f\x47\xec\xa3\x29\x37\x02\x5a\x9e\x19\x40\x04\x09\x3f\xe4\x73\xc6\x25\x29\x65\xa0\xd5\x54\x40\xb0\x19\xa4\x76\x18\xf5\xc2\x7a\xf1\xd1\xee\xb2\xfa\x9b\xe3\x9f\x2e\x6f\xf8\xf2\x94\xeb\x29\x70\x27\x71\x30\xa2\x19\xd5\xb4\x33\xae\x3d\x69\x2f\x57\x85\xb7\x88\xe9\x02\x1c\x2c\x95\x2c\x7a\xc8\x4f\xaf\x42\x10\x09\x79\x22\x60\x4e\x87\x31\x86\x75\x2e\xca\x76\xbd\x06\x76\xb2\xee\x00\x15\xe9\x9f\xc0\x16\x50\x5c\x1d\x41\x39\x49\xae\x8e\x16\xcb\xe9\x3f\x3b\x67\xaa\xd5\x05\xa6\x6c\x20\x9e\xf7\xc3\x7a\x1f\x0b\xa2\x10\xf9\xac\x88\xad\x08\x7a\xef\x72\x09\x97\xd3\x0f\x50\x7d\x3a\x54\xb3\xec\xf8\xe2\xb5\x99\xfb\x2e\x83\xdc\x25\x4b\xc6\xee\xca\xb7\xc9\x83\x73\xcc\x62\x9b\x11\x6b\x95\x0c\x2d\x6c\xc1\xec\x8c\xd1\xcd\xe7\x0a\xd8\xbc\xce\x00\x28\xdd\xb4\x69\x10\xdd\xe1\x22\x73\x0a\xa3\x56\x59\x20\xbc\x82\x0b\x2d\xb9\xe7\x4c\xd1\x44\x13\x87\x1d\x83\x44\x53\x88\x8c\xb3\x40\x85\x10\xd9\xde\x84\x85\x47\xa5\xa4\x6c\x36\xb6\x2b\xe9\x92\x3b\xdb\x5d\x0c\x65\x9a\xba\x34\x4d\x99\x1f\xbf\x73\x0d\xad\x36\xaa\x1b\xb2\x06\x9c\x32\x97\x56\x0a\x1a\x07\xe3\x6e\x32\x16\x60\xce\x65\xa3\x8e\x69\x6c\x96\x82\x9a\xc2\xd3\x30\xd1\x4d\xec\xee\x20\xd3\x2d\xe3\x38\x14\x57\x88\xb4\xa9\xa2\x26\x01\x0c\x22\xf5\x55\x43\x2e\xac\x6c\xcc\x81\x1d\x32\x2f\xa2\xd9\xb2\x57\x3e\xd3\xbf\x92\x4e\x8b\x5d\x77\x36\x1d\x01\x27\xc9\x04\x47\x8f\x5e\x0b\xf3\xb6\x08\x2e\x5c\xd9\x00\x2d\x57\x42\x5d\x34\x43\x5c\x7a\xa0\x11\x48\x37\xa1\xb7\xd0\x20\xf9\xd8\x61\x17\x9d\x9b\x55\xb3\x10\x69\x06\xba\xc9\x8c\xde\xe4\x36\xc4\x24\x4b\xf8\x22\x6d\xb8\xcf\xaa\x29\x84\xbb\x44\xea\x34\x65\x30\xee\xf5\x2a\xab\x30\xbd\x8d\x2f\xb3\xa5\x7c\xa4\x3d\xe0\x4a\x6d\xc0\x25\x3f\x25\x7c\x02\x26\x55\x6b\x7e\x70\x39\x36\x41\xaa\x47\xf5\x3c\x6f\x9a\xf9\x53\x3d\x91\x54\x66\x89\x56\x66\x9a\x7b\x30\x39\x27\x2f\xbb\x6f\x06\xa3\x60\xbd\x75\xb0\x7d\xb4\x76\xed\xe7\x2f\x81\x60\x7c\xe1\x24\x01\xf3\xae\xe1\x5f\x15\x2b\x9b\x49\xf6\x3b\x36\x4e\x6a\xc5\x47\x4c\xe1\x99\xdb\x5c\x2b\x5c\xf2\x67\x46\x84\x9c\xd3\xac\x54\x2f\x71\xe7\xf0\x70\x4b\xd1\xf6\x3f\x26\x18\x7a\x03\xde\xc9\xb3\x23\x83\x50\xa2\xe9\x43\x66\x38\x2a\xac\xa2\x51\x82\xa5\xa4\xd3\x45\x00\x2c\xe2\x23\x6d\x21\x7d\xab\x6c\x46\x08\x4a\x94\xd5\x31\x1a\x33\xbe\xfd\x64\xd6\xef\x9e\x55\xf8\x50\x3e\x7e\x34\x0e\x11\xdc\xf4\x7d\xb2\x8c\x22\xe3\x6e\x6a\x8b\x26\xd3\x88\x44\x6b\x20\x04\xb6\xcb\x84\x5f\x09\xfe\xd3\x6c\x46\x28\x84\x49\x3b\x6c\xab\xc8\x78\xc0\x8f\x10\x0c\x47\x95\x52\x29\x61\xf3\xb5\xe2\xe4\xec\xc2\x9a\x38\x3d\x58\x08\x60\x2a\x14\x1f\xf7\x90\xdc\x09\x64\xab\x0d\x5d\x9c\x93\x84\xec\x25\xe2\x7a\x0b\x22\xa9\x86\x33\x04\xe4\xb1\x92\x34\x8a\x32\x03\xeb\x8d\x0b\x5b\x04\x82\x37\x40\xf5\xd4\x0f\xfd\x27\x33\x50\x1b\x0b\x5e\xb7\x8b\x60\x18\x84\x55\x6e\xab\xbb\xd4\x61\xfe\x99\x16\x2c\xc9\x15\xdd\x94\xe8\xaa\xe8\xd4\xcb\x2b\x87\x48\x6a\x6f\x1c\x32\xbd\x34\xae\x4f\xa4\x4d\x78\xc7\xda\x03\xb0\x15\x07\x5a\xe6\xd3\xed\xe8\xc2\x3a\x50\x15\x47\x33\xa2\x4c\xf5\xff\x98\x3e\xd1\x38\xc7\xc9\xbb\xa2\x89\xbd\x25\x7c\xec\x69\xf5\xeb\x0f\xf9\x66\xa7\xf6\x8e\x28\xe9\xae\x84\x25\x18\x45\xbb\x39\x07\xb8\x05\x87\x71\x2c\x8d\xe0\xfa\xc5\xcb\x2d\x3b\x83\x24\xd8\x91\x59\xa8\x80\xdf\x90\x40\x65\xe6\x18\xdb\x2f\x3c\x2c\x40\x09\x10\x0b\x97\x40\x04\xcd\x1a\xbd\x3d\xd7\xab\x92\xf6\x97\x2e\x7a\x6d\x4e\xe3\xd5\x51\x15\xd4\xdd\xc9\x83\x9b\xc9\x83\x0e\x64\xf3\x00\x2f\xff\xa6\x63\x70\x98\xf7\xcf\x01\x08\x87\x4b\x57\xe2\xfe\x44\xc4\x77\x44\x26\x07\x21\x29\x2e\x6d\xc5\x6b\xc9\x8b\x47\x0e\xe5\xa8\xc0\x0c\x3a\xdc\x2d\x3a\x8c\x93\x7c\x6b\xdd\x40\x2f\x77\xc1\xae\xa7\x97\xbd\xd0\x07\x00\x7e\x62\xc8\x8b\xce\x6d\x05\x11\x38\xbc\x41\x2c\xdd\x92\xef\x61\x4d\x94\xa2\x1d\x5e\xab\xf8\xc4\xa5\xe5\x7c\x89\xed\xb5\x49\x70\xad\x37\xf7\x25\x49\x6d\xd3\xb1\xec\x43\x47\x79\x61\x2f\x8e\xa5\xc6\xe0\x83\x2e\x58\xb8\xdd\x2d\x5a\x03\xad\xe3\xb6\x6c\x9f\x87\xac\xae\xec\xdb\xee\x69\xfc\x2e\xc7\x6f\x9c\x09\x32\xa5\x9f\xb7\x12\xc5\x6f\xe0\x53\xab\x5e\xea\x65\xae\x14\x92\x03\xf7\x0c\x14\x9e\x0b\x02\x1a\xed\x4a\xdb\x62\x53\x23\x56\x64\x46\xda\xb4\xc8\x47\xb2\x40\x5c\x94\x7e\xda\x16\x04\x72\xff\x45\xef\xcc\xbe\xce\x95\xca\xe4\xe9\xc9\xc9\x8c\xaa\x79\x3e\x39\x8e\x78\x6a\xe2\xf0\xb9\x98\x99\x3f\x4e\xa8\x94\x39\x91\x27\x7f\xfc\xc3\x1f\x8a\x2d\x9e\xe0\xe8\x71\x66\x60\x75\x96\xfd\x4e\xe5\x2d\x27\x58\xee\x16\xd9\xe3\x52\xd8\x5e\x38\x95\x39\xe8\xc6\x25\x8f\xea\x6f\xa4\xc2\x69\x16\x86\x82\x9a\xb2\x71\x52\xe1\xa2\x58\x05\xe4\x25\xea\x69\xa2\x39\xce\x32\xc2\x9a\xcd\x0e\x26\xd1\x74\x07\xd6\xe3\x52\x55\xed\x08\xc9\xe7\x2c\xc1\xac\x0c\xbf\x00\x95\x97\x04\x89\x08\x53\x16\x1a\xa0\x28\x25\x0d\xd4\x68\x20\x80\x0c\xff\xdf\x2c\x15\x11\xe6\x48\x65\x51\x52\xcd\x0d\xc7\x96\x37\x75\x45\x2f\x71\xb0\x74\xd5\x92\xb2\xc5\xda\x11\xb7\x6a\xab\x92\x14\xef\x96\x4b\x8b\x6f\x5e\xd2\x46\x70\x36\x26\x9f\x35\x93\x93\xdb\x02\x76\x3d\x48\x22\x51\xff\xa7\x3b\x24\x17\x4c\xe1\xcf\xa7\xe8\x92\x32\x10\x60\xbf\xe7\xb9\x90\xe8\x1c\x2f\x8e\xf8\xf4\x28\xe5\x4c\xcd\xd1\x25\xfc\xaf\xfd\xe9\x99\x90\x47\xf4\x33\xc1\xc2\xf2\x07\x5b\x92\xce\xd7\x37\xd7\x24\x24\x72\x26\x11\x79\xd2\x27\xf4\x0f\xff\x89\x52\xd3\xf2\x29\xfa\xf6\xe4\x0f\xff\x89\x7e\x07\xff\xff\xff\x47\xbf\x6b\xd0\xf4\x37\x83\xfc\x82\xca\xc5\xb7\x65\x77\x6e\xaf\xb2\x52\x5b\x54\x73\x3f\x13\xbc\xd8\xa9\xda\x96\x1f\x69\xf4\xc8\xa7\xd3\xb1\x26\x0c\x93\xc8\x37\xc6\x62\x09\x2e\x7a\x4b\xfc\x54\x6a\x6b\x4f\x9b\x4a\x76\x45\x0d\x19\xdb\xa9\x41\x7c\x70\xec\x5a\xe6\x45\xe5\x5d\x08\x22\x2a\x55\x33\xa6\x12\xbe\x22\xb1\xe6\xaa\x9b\x9c\x0e\x67\xdd\x73\xc9\xdf\xce\x82\x13\x22\xa4\x84\xf5\xd4\x7d\xe0\x5f\x18\xc5\x6a\x02\x7d\xec\x42\xd6\x1e\x87\xa5\xf0\xda\x2f\x26\x66\x12\xa6\xf6\x56\xf1\x92\x72\xa9\xf3\xf5\xa1\x92\x77\x5c\xec\xa4\x6f\x3d\x92\xc6\x54\x86\x35\xf5\x92\x5c\x0d\xdf\xb0\xb2\x3f\x64\x88\x73\xe1\x71\x8c\x8d\x5d\xc4\x56\x55\x5c\x6f\xc5\xa4\xc2\x04\x97\xb5\x3b\xf4\x7a\xea\xe7\xfe\x93\x75\xc3\x84\x48\x33\xf7\x76\x51\x2f\x0e\x46\xab\x45\x24\xcd\x12\x6b\x46\x5c\x03\x76\xb8\x6e\x43\xef\x3c\xbe\x05\x34\x0e\x61\x8f\x90\xbf\xc1\x9c\x64\x6b\x01\x04\xea\xf7\x33\x17\x11\x39\xe3\xbb\x85\xbd\x26\x94\x2d\xc5\xcb\xb7\x2f\x45\xe4\x57\xef\xc2\x16\x9d\x72\x78\xc0\x3c\x2e\x94\x05\xe3\x16\xb0\x55\x28\x02\x20\xd2\xf2\x6c\x00\xd0\x6e\x1f\x58\x97\x4b\xb5\x11\x76\xe0\xda\xc6\x70\x5c\x30\x3c\x57\x5a\xa3\x52\x51\x43\x60\xcd\x0b\x57\xc4\xae\x41\x50\xd1\xce\xe3\x08\xaa\xc4\x14\x91\x4a\x95\x6a\xec\xd8\x94\x4a\x11\x5b\x62\x95\x9a\x82\x4d\x3d\x24\x30\x04\x65\xaa\xb9\x6e\x4f\x12\x71\x34\xc5\x11\x65\xb3\x5e\x00\x53\x09\x90\x11\xe1\x75\x50\x47\xa4\xf7\x58\x3e\xee\x37\xd0\x70\xe7\x02\x96\x34\x2e\x8a\xa8\x59\x60\x19\xe3\xd8\xa0\x4b\x18\x7d\x0a\xcb\xc7\x26\x64\xa5\x25\x58\xb7\x15\xa3\xf3\x4b\xe1\xc0\xe0\x56\x8d\xcf\xa5\xa0\x93\x50\x9f\x82\x9a\x0d\xae\xa4\xb2\x05\x79\x74\x19\x7f\xd8\xa3\xb0\x54\xd1\x4d\x57\x8c\x5f\xce\xb9\x50\xe3\x2d\x71\x61\xab\x69\xf4\x8c\x1c\x25\x00\xe8\xc2\x9f\x88\x78\xa2\xe4\xb9\x0c\xaf\xba\x09\x2d\x1a\xa3\x59\x10\x55\x07\xf8\x9b\x69\xc6\x21\x85\x66\x8a\x52\xcc\x16\x86\x51\x6a\xe6\x82\xe5\xa3\xf4\x85\x5c\x91\x4c\x71\x92\xf4\x90\x20\xb9\x34\x05\x8e\x25\x49\xa6\x47\xae\x14\x46\x8c\x12\x3e\xa3\x11\x4e\xd0\x24\xe1\xd1\xa3\x34\x19\x6e\x6c\x66\x98\x54\x26\x78\x44\xa4\x0c\x24\xab\x22\x9b\xdd\xe6\x18\x42\x15\x57\x45\x44\x4a\x19\x95\x8a\x46\x4e\x64\x2a\x40\x29\x4c\x2d\xf1\x08\x83\x49\x18\x32\x36\x61\xb8\x5a\xd2\x23\x06\x9c\x33\x67\xb6\x68\x12\x5c\xd7\x16\x73\xcf\x05\x89\x37\x1d\xa0\x3d\x40\x08\x3a\x0a\x19\xab\xf2\x81\x5c\x73\xa4\xce\xec\x67\x70\x8c\x57\x91\xc0\x6d\xf9\x44\x79\x82\xf4\x27\xad\x04\x6b\x04\x31\xe5\x3e\x04\xbe\x24\xb9\xf8\xc8\xf0\x03\x43\x34\x83\x21\x37\xe0\x98\xad\xa3\x69\xbd\x8a\x20\xf2\x40\x9d\xae\xaa\xd7\x9c\xb2\x28\xc9\x63\x5f\xa9\x51\x8b\x00\x4f\x9a\x48\xdc\xf2\xe8\xb5\xd7\x82\x42\x0f\x61\x89\x9e\x49\x92\xe8\xff\x9a\x08\xf8\x23\x5f\x38\x41\xb3\x64\x53\xdc\x02\x3a\x71\x5c\xba\x89\xa2\x0e\x0e\x9d\xf2\x06\xab\xb9\xc9\xf9\x4f\xb9\x32\x45\x32\x0d\x3a\xa5\xb3\x6f\x19\x38\xc3\x49\xc2\x27\x70\xd2\x01\xb8\xd2\xe5\xb9\x06\x69\x75\x79\x14\x11\x12\x93\x18\x7d\x1d\x1c\x5c\x8f\x47\xf1\x4d\x3d\x8c\x62\x69\x45\x0e\x00\xb4\xb2\x6a\x58\x6b\x84\xae\x2c\xd7\x79\x3b\x46\x37\x15\x60\x96\xb0\x7e\x3b\xae\xc2\x74\xf5\x96\xb6\xf0\x6d\x80\x2e\x2b\x93\x78\xb9\x1d\xda\x10\xe8\xb2\xd4\xe7\x1e\x80\x2e\x2b\xf3\x6c\x88\xdd\xe7\xb3\x17\xcd\x39\xd6\x93\xba\xe0\xed\x13\xc1\x0c\x40\x98\xb9\x3b\x4b\x24\xe8\x0e\xe4\xa2\x8e\x10\x0f\x0b\xc4\xb3\x52\x0d\xf1\x6d\x41\x3c\x2b\x83\x39\x64\x10\xcf\xca\x50\x0f\x17\xc4\xb3\x66\xa0\x2d\x40\x3c\x8d\x73\x7f\xac\x89\xba\x1d\x53\x80\xc4\x96\x49\x3e\xbd\x83\x54\xef\x95\x63\x3c\x33\x81\x03\xe6\x1a\x73\x77\xb4\xc5\xb4\x86\xd1\xda\x1c\xc8\xa6\x70\xa8\x8a\x13\x62\x53\xda\xf3\xde\x37\x03\xfe\xb0\xa9\xd9\xbd\x17\x5a\xbb\xc1\x0e\x19\xe1\xcc\xe6\x94\x37\x95\x9a\x39\x9c\xec\xd9\xed\xf0\x51\x01\x83\xb0\xc4\xf2\x5b\x21\x88\x5d\x56\xaa\x36\xcc\xf9\xb3\xad\x9c\x04\x64\x68\x88\xb2\x91\x04\xa1\xd3\xb1\x55\xda\x9a\x56\x8e\x32\x45\x66\x55\x9d\xb6\x38\x34\x94\xa9\x3f\xfd\x71\x2d\x27\x32\x10\x8b\x4e\x3d\x0c\x6a\x27\x78\x67\x87\x7d\x46\x62\x14\xcd\xb5\x56\x24\xb5\xfa\xa2\xa7\x63\x6e\x56\x89\x52\x4c\x9d\x22\x95\x4b\xe3\x5a\xa2\x72\xc4\x4a\x98\xa4\xc7\xe8\x23\x14\x84\xc5\x69\xa6\xf5\x2f\x3f\x3f\xaa\x29\x69\x94\x7f\xfb\xed\x9f\x08\xfa\x16\xa5\x04\xb3\x92\x0e\x0b\x6a\x93\xbe\xfa\x00\xc3\x4f\xcd\xc9\x88\xd5\x6e\x05\x1a\x7c\x36\x35\xa6\x5c\xbc\xdf\x90\x4d\xb9\xd3\x89\xa1\xd0\x21\x8e\xe6\x48\xe6\x13\x53\xa9\x37\xb0\x61\x38\x41\xfa\x82\xcf\xc0\x51\x0d\x37\xb2\x1b\xf4\xaa\x53\xf8\xb2\x31\x00\xd6\xdd\xd8\xf6\x36\xee\xc3\x3d\x72\x24\x49\x09\xdb\xa9\xc6\x69\x66\x38\x5f\x78\xf0\xa5\xc1\x7d\xe9\x19\x1f\x82\xd6\xcf\xb0\xb5\xec\x6b\x59\x1a\xc2\x79\xc1\x4b\x96\x27\x58\xd8\xa3\x3f\x62\x5a\xd1\x10\xe4\x89\xf2\x5c\x26\x0b\x14\x73\x46\x7a\x40\x09\x79\x34\x37\x8e\x55\xad\xb3\x60\x5b\xb0\xe2\x89\xca\x5c\x2b\xb4\xd0\x96\xab\x8f\x21\x15\x36\x98\x54\x73\x0a\xfd\x68\xf5\x9b\xc0\x57\x61\x96\x1c\x6a\xa7\x45\x85\xb0\xb1\x15\x9e\xdf\x12\x36\xb6\x44\x55\x1d\x6c\xac\x87\x8d\x5d\x5e\x97\x43\x84\x8d\xad\xec\x79\x3b\xd8\xd8\xba\x2d\xdf\x02\x36\xb6\xd4\xcc\x17\x03\x1b\x5b\x59\xd1\x2f\x06\x36\xb6\x32\xaf\x0e\x36\xf6\xcb\x83\x8d\xdd\x11\x18\xb5\x9e\x17\x1b\x7c\x25\x45\xd9\x62\x63\x22\xfb\x4a\xa2\xe1\xb5\x26\xb0\xe8\xb1\x1c\xd4\xe6\xaf\xab\xdd\xc1\x58\xeb\x99\xd0\x66\x60\xac\xb5\xaa\x7a\x33\xab\xdb\x15\xe0\x09\x14\x83\x57\x06\x63\x2d\x4d\xa0\x8b\xaf\xdc\x3c\xbe\xb2\x96\xf8\x6c\xdf\x7a\x78\x2e\xe8\xb2\x7a\x21\xb7\x84\x63\x2d\xed\x4f\xab\x48\x4c\x10\xdd\xf7\x40\x89\x2f\x2b\xcd\xdf\x97\x0e\xf9\x5a\x59\x3e\x5c\x45\x69\x81\xa1\xb5\x84\xe7\xd0\xe2\x8c\x12\x1e\xfa\xff\x3b\xca\xdd\x22\x32\xb8\xb2\xbc\xde\xaf\x62\x68\xb1\x05\xa9\xb6\xa6\x50\xa7\x95\xee\x27\x51\xd6\x25\x4f\x6e\xe8\x62\x76\x83\xb8\xcb\x48\xd4\x60\x63\xa6\x29\xdd\x57\xb3\xeb\x2e\x32\x8f\x85\x05\x0a\xf9\x52\x5e\xa8\xbe\x9e\xcc\x70\x8c\x8c\x5f\x49\x87\x05\xa0\x0e\xf3\xe5\x8c\x4a\x25\x1a\x63\x9b\x96\x46\xb8\x8b\xab\x34\xcb\x5b\x07\xc4\x04\xab\x3a\xdb\xee\xb3\x94\xa4\x5c\xac\x0b\xac\xaa\xfd\xd2\x96\xba\xd9\xe6\x53\x92\xcd\x49\xaa\x25\x99\xf1\xa6\x8d\xb4\xdd\x6f\x9f\x34\x6c\x73\xd7\x4c\xa0\x63\x89\x08\x02\x47\xa8\x7e\x37\x36\x88\x94\xad\xb7\x7b\xd7\x6d\xb6\x98\x99\x1b\x3a\x84\x1c\x98\xf2\x6a\x83\x9b\x7d\xa9\xe4\xee\x06\xfa\xae\x8d\xe9\xf0\x21\x35\xeb\xa3\x36\x56\xc4\x6b\xac\xc2\x9d\x2a\xbe\xb2\x85\xa0\x37\x70\xe5\x97\xbd\xf3\x9a\x13\x86\x55\x80\x37\x0f\xf0\x68\x40\x4d\x5d\x5e\x1e\x88\xcc\x91\x44\x1c\x85\x9a\x41\x69\x30\xcb\xeb\x55\xa2\x12\xa7\x51\xee\x40\x24\xb9\x68\x8c\x32\x6d\x63\xd0\x8e\x54\x8e\x13\xd0\x24\xc2\xea\x95\xd5\x4d\x9d\x2c\x6a\xd2\x1e\xdb\x79\x4c\x28\x53\x7f\xfe\x8f\x8d\x76\x53\xab\x56\x76\xdd\xa0\xe2\x16\x8e\x22\x22\x8d\x8d\xdd\x46\x21\xe3\x09\x7f\x82\x62\x5b\xbb\xec\xaa\x3e\xca\x7a\xde\x9a\xc1\x7b\x28\xe2\xb8\x20\x75\x23\x2e\xcc\x05\xcf\x67\x73\x67\x43\xd2\x67\x46\x4f\xad\x6e\x2f\x7f\x5c\xb2\x91\x6f\xbc\x97\xdf\xe5\x34\xd9\xce\x42\x77\x57\x2a\x43\xf6\x69\x78\x8f\xe4\xdc\x9f\xd6\x09\x34\x5b\xbb\xb1\xcb\x83\x6e\xdf\xa7\xfd\xd6\xfb\x6b\xa0\x9b\x9e\x83\xdf\x9c\xf2\x24\x01\x4f\x83\x24\xe9\x13\x11\xf5\xdd\xc3\x84\xef\xe9\x66\xc8\x79\x7e\x00\xf0\x75\x91\x18\xd1\x4a\xfe\xba\x31\xa2\xa1\x44\x6e\xf4\xd5\xa0\x05\x13\xaa\xc6\x19\x61\x75\x36\xb6\x9f\x96\x2b\xc0\xbc\xb3\x80\x41\x17\x3d\xb6\xb7\xa0\x41\xb7\x24\xaf\x1c\x38\xb8\x66\x1e\x87\x1a\x3c\x58\x61\x76\x3e\x96\xaf\xb8\x66\x5c\xe0\x90\x51\x7c\xfa\x7a\x89\x47\xac\x5f\xca\xa7\x70\x95\xb2\x27\x8b\x22\x20\xdb\xe8\x10\x21\x33\x83\x3a\x1b\xd6\xb0\x02\x6e\x34\xfd\x17\x68\x3a\x06\xbc\xd6\x84\x14\xba\xb0\x41\x88\x26\x27\xf1\x11\x8e\x16\x51\x42\xa3\x40\x67\x9e\x09\x9c\xcd\xeb\x38\x9e\xdb\xf9\x0e\x75\xe7\xad\x50\x77\x9a\x0a\x52\x6d\x12\xb7\xed\xe8\x8a\xe1\x94\x74\x68\x40\x75\x68\x40\x3d\x8f\x77\xc1\x8a\xd2\x5a\x6f\x08\xa3\xb0\x7c\xee\x3a\x48\xa0\x37\x80\x04\xda\xe6\xf0\x15\x78\x3f\xa5\x63\xd7\xc1\x14\x7d\x68\x05\x53\xe4\x2f\xc1\x83\x42\x9e\x69\x3e\x8f\x6f\x8c\x68\xb2\x3c\xb0\xb7\x84\x25\xaa\x11\x17\x36\x91\x9b\x56\xe1\x12\xad\xa2\x8b\x56\xeb\xf2\xb6\x28\x41\x9b\xad\xcc\x46\x00\x40\xb5\x77\xd7\x81\xc0\x01\x35\x6f\xc3\x81\x9c\x9b\x7d\x66\xb5\x6c\x56\x3b\x34\xcc\x6c\xd9\x44\xc1\xda\x2c\xc9\xc5\xd3\xc3\xfb\x4a\x74\x29\x8a\xac\x6d\x97\xec\xd2\x77\x3e\x68\x22\xd0\x9c\x27\xb1\x03\xa1\xf0\xab\xe5\x3b\xf0\x99\x00\x7e\x81\xdc\x66\x40\xb1\x73\xd0\xb6\x8a\x82\x60\xab\x52\x5a\xfc\x26\xc2\x70\xf7\xc0\x68\xf6\x61\x45\xf0\x9c\x64\x1b\xfb\xc1\x5a\x59\x44\x96\xcd\xdf\x2b\xc6\x58\x5a\x21\xb0\x9a\xd7\x0f\x73\xad\xdd\x77\xcd\xe0\x56\x89\x1e\x81\x71\x50\xd4\x95\xfa\x34\x74\x06\x4f\x9f\xa8\x33\x44\xe0\xb0\xc7\x95\x5e\x3a\x37\xbb\x56\x9e\xba\x2a\xb1\x6c\x11\x0c\xb6\x54\xb9\x6d\x77\x70\xa0\x14\x7f\x1e\x67\x58\xe0\x24\x21\x09\x95\xe9\x8b\x05\x03\x9f\x95\xdd\xb5\xfa\xac\x0a\x6e\x4c\x44\x2c\x4f\x27\x86\x14\xdd\x40\x6c\xb1\x3f\xc5\x91\xc8\x59\x08\x6d\xe6\x37\xc6\x17\x13\xcc\xe1\x5e\x00\xab\x52\x34\x87\xaa\xad\x53\x4c\x05\x23\xb2\xb1\x46\x26\x89\x72\x41\xd5\x62\x6c\x4b\x8e\xb6\x3f\x70\x77\xf6\xcb\x33\xfb\xe1\x6a\x0f\xb7\xcb\xea\x77\xfd\xf9\x12\xa7\x19\x11\x50\x26\xc8\x15\xbc\x09\xca\xaa\x5a\xd4\x06\xe2\x6b\x0d\x41\xf8\xf3\xd2\xb5\xdd\x14\x38\x8c\x9f\xc7\x41\x46\xd5\x38\xaa\x12\xc7\xba\xc3\x5a\x87\x3b\xb5\x6a\x92\x2f\x8c\xbc\xd4\xe0\x45\x7e\x81\x2a\x23\x36\x6d\xc2\x34\xad\x07\x1c\xb8\x82\xc1\x5e\x59\x6c\x4c\x90\xf2\x6e\x95\xaa\x86\x71\x5a\xac\x9f\xba\xe0\xa3\x15\x83\xed\x07\x5f\xb5\x18\x71\xd0\xc9\x9e\x86\xad\x0f\xba\x10\x79\xa6\xe8\x64\x19\xda\x46\xed\xaf\x84\x68\x3f\x81\x34\x6b\xe7\x66\x28\x75\x6b\xea\x8a\x96\x38\xb1\x9d\x9d\x96\xff\x2d\x8e\x98\x43\x08\x32\x08\x4b\x61\x1e\xdf\x75\x4a\x95\x72\x89\x02\xc6\x00\xad\xa9\xb3\x6c\x9b\xfd\xca\x85\x7b\x60\xa8\xf4\x6a\x4c\x44\xc7\x23\xd6\x97\xe8\x99\x20\x46\x2c\x84\x44\x4d\x0d\x57\x6f\xd5\x86\xda\x4f\x13\xa2\x7b\xf2\xb1\x29\x5a\x78\xa0\x4a\xfa\xf2\x63\xa6\x8f\x29\x4e\x24\xe9\xe9\x86\xa1\x6a\xa9\xe2\x10\xfc\x89\xd1\xb3\xc0\x59\x46\xc4\x88\xd9\x2c\x0e\x70\xb8\x70\x9e\x98\xf6\x9b\x42\x5c\xed\x1a\x90\x71\x84\xa3\xf9\x2b\xed\x11\x86\x64\x9c\x68\x4e\x62\x97\x2f\x5c\xde\x1e\x37\x6f\x63\xb0\xde\x60\xb3\x86\x53\x57\x3e\xab\x67\x3b\x49\x22\xcd\x51\x7c\x99\xe9\x8c\x08\x3d\x6a\x4d\xc3\x4f\x84\x21\x3a\x75\xe3\xb0\xb1\x3b\xe8\x19\x3c\x53\x9a\xf4\x9f\x30\x4d\x4c\x02\xbe\xeb\xda\x09\x81\xc6\xfc\x3e\x62\xc6\xdd\xcd\xa2\x52\x86\x2a\x65\x54\xce\x35\xa7\xce\xc1\x27\x09\x6a\x46\x53\xe2\x0c\x7b\xda\xe4\x34\x0f\xf4\xeb\xab\x39\xe8\x13\x15\x9c\xa5\x90\x24\x63\x71\x99\xdc\xf2\x49\xa2\xfc\xf1\xa8\x4d\x71\x5c\x2b\x11\xc7\xb1\x2c\x1b\x3f\x8d\x5a\x49\x7f\x2d\x99\x5d\x8e\x4a\x59\x81\x51\x00\x2b\x04\x41\x9c\xae\xb2\xd8\x2a\xf9\xb7\x4b\x6d\x58\x4e\x6d\xa8\x5f\x9b\x43\x4c\x6f\xf0\x87\x78\xd3\x14\x87\xa6\xed\xdf\x87\x64\xbb\xc7\x54\x87\x37\xce\x09\x78\x99\x74\x80\xb7\xcd\xdf\x78\x89\xd4\x8d\x2e\xc1\xe1\x0d\x13\x1c\x5a\x5b\x6a\xcb\xb1\xd9\xcd\xc7\x76\xa3\xe4\x80\x35\x60\x4e\x75\xbd\x5c\x12\x25\x68\x24\xf7\xc1\x1f\x64\x86\x5b\x46\xb5\x81\x16\x98\xad\x91\x9a\xf4\x0b\xde\x09\x09\x71\x62\xbe\xce\xdf\x44\x10\xfc\x18\xf3\xe7\x25\x5b\x9d\x0c\xd1\x34\x2e\xb9\x16\x7b\x04\x89\xa8\x24\xa5\x48\x16\x2a\x11\x23\xd2\x1a\x3b\xf1\x88\xcd\x29\x11\x58\x44\x73\xc8\x6e\x2c\x36\xc6\x64\xc9\x1a\x40\x23\x13\xcb\x10\x7a\x9b\x36\xd8\xf4\x16\xeb\x5e\xb5\x30\x79\x7c\x3a\xbb\xe7\x7a\x24\xa9\xf9\xc4\x0b\x33\x56\xca\x08\x4d\x72\xad\xb6\x7f\xd7\x40\x7c\xbf\xd8\x2f\x1a\x8c\xef\x83\x89\x82\x2f\x5a\x06\xe4\x17\xd4\xd0\x05\xe5\xbf\x50\x50\x7e\xcd\x12\x6f\x16\x98\xbf\x95\xc9\xef\xf5\x63\x86\x5d\xcf\xaf\x11\x37\xbc\x2e\x68\x2b\x9f\x8c\x5f\xfc\xe8\xd5\xce\xb9\xed\x09\xfc\xc9\x13\x85\x91\x88\x85\xa6\xb3\x09\x89\x63\xe0\xb4\x8a\xdb\x4a\xd1\x05\xed\x38\xf3\x80\xbe\x7b\xb1\xd4\xc4\x8e\x13\xce\x66\x92\xc6\x06\x6c\x25\xc3\x50\xb1\x35\x34\x5e\x00\xb8\x00\xec\x6f\x92\x10\xe1\xbc\x12\x02\x7d\x2d\x29\xb3\x68\x8a\xfe\xb7\x98\x13\xc9\xbe\x52\xc6\x58\x80\xd9\x02\x3d\x32\xfe\x9c\x90\x78\x06\x3b\x54\x1d\xcc\x11\xa2\xa4\x87\xa8\xf2\x9f\x09\x40\x23\xe0\xb9\x1a\xe9\xb1\x43\xac\x99\xd1\x00\x88\xfd\x36\xa8\x89\xee\x9b\xf9\xe6\x18\xa1\x21\x43\x53\x1c\xa9\x1e\x92\xf9\xa4\x68\x3f\xe6\xa6\xc8\xb5\xd6\xbe\x83\x89\x17\x8d\x74\x31\xe3\x35\x9d\xd7\x9f\x0d\xc7\x1d\x34\xb9\xf6\x13\x8a\x77\x8a\xad\x7b\xc2\xbb\x40\x8c\x5e\xe6\xd2\x06\x61\x20\xce\xfc\xd1\xb7\xf0\x4a\x1e\x23\x1a\xf0\x3e\x0d\xde\x32\xe3\x71\xa3\xad\xb3\x32\x95\x4d\xc7\x52\x04\x42\x5a\x41\xc9\x3a\xaa\xa0\x5d\xb3\xdc\x5a\x6a\x92\x4a\x10\x9c\x5a\xe7\x80\xbe\x6a\x40\xac\x31\x61\x90\x7a\xf4\x54\x18\x09\x73\x93\x2d\xbe\xa0\xec\x51\xef\x6e\x81\x8a\x0d\xf5\xe5\xa1\xe7\xba\x4d\xcb\xf4\x8d\x47\xce\x38\x33\x0e\xc2\x9d\xe4\x4e\x3a\x63\x38\xd9\xd0\xc6\xb1\xb4\x72\xcb\x3e\x3d\x27\x67\x59\x71\x41\x4b\x11\xc6\xd8\x87\x4c\x8f\x1b\xd9\x90\x2a\xf3\x0d\xe5\x3d\x8c\x62\x92\x11\x16\x13\x16\x2d\x80\x44\x18\x20\xe7\x08\x86\x13\x84\xe1\x3b\x9c\x1c\xa3\x73\x93\x5f\xe3\x25\x3c\x7b\xad\xc3\x85\x9e\x62\x46\xa7\x5a\x4f\x00\x23\xac\x1d\xe5\x88\x99\x61\x3a\x1f\x48\x50\xb4\xdf\xaf\x58\xdd\xce\xe8\x1b\xe4\x6a\x47\x54\x62\x56\xfe\x1e\xad\xbe\x70\xa0\xb7\x55\xbb\xa3\x9b\x73\x35\x08\x64\x3e\x39\x82\x7f\x97\x12\xce\x1c\x50\x4f\x81\x22\x43\x12\x02\xe6\x40\xeb\xf1\x82\x8b\xb1\x09\x58\x6e\x1f\x7e\xbb\x35\x79\x1c\x41\x1f\x25\xa5\x26\xa5\x8c\xa6\x79\x1a\x38\xef\x4c\xc5\x82\xc8\xda\x2f\x4d\x26\x46\xa6\xf5\x80\xc8\x81\x97\x23\x7d\xb9\xb2\x05\x9a\xd1\x27\xc2\x46\x2c\xe3\x94\xa9\x63\x74\xc5\x15\x09\x4a\x44\x18\xe8\x28\x9e\x29\x9a\x1a\xb4\x53\x41\xf4\x39\x30\xa0\xd8\x00\x34\x39\xc7\xaa\x87\xe2\x1c\x8e\x2a\x23\x4a\xb3\x0e\x7d\xe3\x2a\xd8\x19\x88\x8f\x16\x23\x66\x6e\xba\x29\xa6\x49\x2e\x88\x95\x59\xb1\xc9\x8b\x29\x86\x5c\x8c\xcc\x22\xa1\x05\x93\x48\xe9\x6c\xae\xf4\x16\x69\x19\xcf\xfa\x1b\xe7\x9a\x1b\xf1\x11\x9b\x10\x84\x51\xc6\x25\x55\xf4\xc9\xfb\x2f\xe9\x14\x61\x29\xc1\x82\x72\x8c\xce\x4b\xf6\x7f\x2a\x41\xf5\x6e\x8a\xab\xa5\x6c\x6c\x6d\xcf\xcd\xf9\x38\x3b\x6f\x64\xa9\x17\xbb\xca\x78\x22\x79\x92\xab\xd0\x05\x5b\xbf\xb7\x85\x69\xdc\x01\xf7\x83\x81\x98\x4f\x47\xcc\xd1\xb5\x3c\x46\x7d\x89\x24\xd7\xbb\x24\xcd\x56\x46\x82\x2a\x22\xa8\x41\x71\x22\xca\x6c\x82\x3f\xa7\xfe\x0c\xa4\x58\x3c\x6a\x11\x2a\xb4\xc0\x1b\x4c\xd1\x92\xb5\x63\x62\x24\x24\x80\xb5\x0a\xb7\x03\x4c\xff\x88\x71\x76\xc4\xc8\x0c\xaf\xdb\x91\x11\x2b\x6d\x09\xfa\x9a\x4e\x0b\x85\xb4\xc9\xe7\x18\xac\xdd\x18\x22\x9f\x9a\x76\xc9\x74\xdc\xb4\x49\xd3\x84\xe3\x35\x6e\xe3\x69\x71\xe8\xd1\xdf\xf9\xc4\x8c\x51\xeb\xfd\x5c\x81\x14\xa8\xd5\xab\x29\x17\x64\x8e\x59\xdc\x73\x9b\x55\x1e\x1b\xdc\x8c\xd6\xd4\xe6\x94\x31\x90\x04\x1d\x88\x30\x31\x58\x4c\x98\x05\x7b\x61\x15\x37\xbb\x15\xc5\x3e\x6c\x74\x57\xf8\xd6\xa0\xf6\x89\x31\x40\x18\x96\xb7\xc8\xec\x11\x97\x34\xcd\x92\x22\xa7\x29\xb0\x8d\x4e\xb5\x88\xe5\x78\x24\x7f\x02\xd3\x95\xd3\xda\xe0\x56\xb7\x3b\xa7\xe9\xac\x66\xe4\x9e\x91\xc2\xad\xe1\x6c\x5e\xa6\x0c\x66\xc0\xc2\xbe\x96\x44\xff\x53\x91\x42\xed\x33\xc2\xfa\x88\x39\x11\xe4\x1b\xe0\x32\xb6\xd9\xc0\x78\xa6\x45\x68\x03\xf3\x6a\xd7\x0f\x45\xc6\xc9\x5d\x3a\x27\xf6\x30\xb8\x57\x6b\x2e\xaa\xef\x28\xc3\xa5\xcc\xdb\x2d\x04\xbf\x24\xdf\x28\xb9\x2a\x70\xfb\x2d\x9a\x6a\x9a\x28\xbc\xae\xcc\xc8\x06\x94\x60\xf6\x99\x20\xdd\x9d\xa5\x66\x57\xf1\x06\x43\x44\xc0\x9c\x24\x19\x8a\xe9\x14\xcc\x52\x0a\xd8\xb7\x07\x16\x33\x58\xf0\xfa\xb0\xa7\x39\x33\x20\x71\xc6\x23\xf2\x6c\xf1\xb6\xed\xd5\x58\x34\x7e\x3c\x62\x43\xf5\x95\xd4\x22\x3a\x67\x33\x7d\xd1\xc4\x4f\x54\x16\x45\x4e\x22\xce\x64\x9e\x12\x61\xbb\xd0\x37\xb2\xa6\x48\x5b\x20\x00\x3b\x19\x4a\x8f\x4d\xef\xfd\x13\x4e\x68\xec\x0a\xf1\xe8\x1f\xcd\x99\xd3\xa3\x94\xce\xa3\x58\x13\x12\x66\x37\x37\xd6\x6b\xf5\x66\x62\xfd\x8f\xa1\xe4\x8e\xd2\x42\xc8\xc7\xd6\x56\x7f\x52\x15\xf1\xed\xaa\xaf\x10\xef\x27\x4b\x93\x42\xab\x05\x23\xbb\x0a\xe7\xeb\x50\x0c\x1d\xa2\x6e\x6e\x42\x80\x75\x3f\xce\xe8\x63\x06\xb7\x11\xfb\xa9\x4c\xd0\x8e\xda\x70\x96\x50\xbc\x27\x14\x64\x03\xa9\xb0\x16\x2f\xcc\x75\xc0\x85\xd5\x70\xec\x9d\xd3\xbc\xb5\xe7\x3b\x96\x89\x90\x11\x4e\x96\x77\x78\x85\xbd\xd9\xbc\xbf\x5a\x09\xb0\xc7\xcd\xb4\xbd\x32\xe9\x37\xe2\x49\xb2\x49\x09\x93\xca\xcc\xcf\x8a\xcf\x57\x8f\xa8\xe8\x47\x6f\x80\xdb\x0b\x38\x35\xe6\xf2\xc6\x89\x35\xa5\x48\x65\x77\x29\x7c\xc9\xa8\x61\x0b\xcb\x5a\x47\x8c\x4f\xa1\xc8\x4d\xd2\x14\xd5\x95\x09\x9e\xd2\x4d\x50\x96\x4d\xa0\xd3\xad\xb3\x8b\xaf\xb1\x32\x38\xeb\x39\x88\xa6\x86\xbc\x6c\x8f\x90\xaf\x87\xad\xb8\xb9\xe2\x0c\xa5\x38\xdb\x6a\xc1\xd7\x79\x85\xfa\x28\x35\x2e\x39\xbb\x7a\x80\xb7\x48\xa0\x5e\x0c\x2c\xf2\x33\x5e\x14\xa9\xd1\x4d\xf8\xb9\x6c\x23\x72\x78\xd0\xaf\x0f\xd9\x94\x6f\x70\x38\x8b\x54\x66\x7b\xfa\xb0\xa3\xd9\xe0\xfc\x79\x2f\x85\xd9\x7d\xb3\xa6\x6d\xce\xe3\x59\x1d\x51\x6f\x7c\x32\xdd\x0a\xbe\xa4\x8d\x32\x64\x22\xa1\x79\x72\x93\xbb\xb5\x7c\xb4\x82\x16\x11\x0c\x67\xf5\x52\x5d\x96\xe8\x70\xef\x6b\x54\x69\x07\x19\x53\xb8\x0b\xa6\xbe\xa9\x6f\xf5\x15\xd6\xcc\x1e\x92\x56\x8b\xb5\x23\x76\xc3\x66\x38\xc0\xae\x47\x8f\xfa\x5b\x7f\x42\xd7\x16\x39\x68\xbf\x18\xc0\xcd\xa4\xb5\x73\x15\x91\x99\x36\x45\x6d\x4a\x13\x2d\x62\x0f\x6b\x0c\x9c\x2e\x41\xcc\x07\x54\x99\x50\x79\x27\x3d\xe5\x82\x06\x85\x41\x9d\x8c\x84\x28\x14\x28\x09\x9d\x3c\x81\x42\x0f\xa6\xc5\x39\x7f\x36\xd1\xe9\x82\x6a\x9e\x65\x84\x55\x05\xe6\x1e\xcd\x0b\xa8\xb5\x96\x18\x63\x93\xff\x80\x9b\x98\x41\x6c\x6b\x1f\x17\xa3\x6a\xd8\xd2\x7d\x94\x78\x6a\x9f\x7f\xe7\x7a\xbd\xd7\x5f\x2c\xef\x4d\xed\x08\xef\xcb\xad\x6f\x3c\x3a\x2f\xe5\x6f\x1e\x30\xf5\x11\x3e\x75\x4a\x0f\x46\x53\x41\xc0\xc1\x9f\x7a\x4c\x0d\x03\xaa\xcb\x39\xdc\x77\x77\xe7\x3f\x9c\x3c\x0c\x11\x51\x11\x4a\xe8\x23\x19\xb1\x48\x3e\xf5\xb4\x78\xfc\x8f\x9c\x28\xfd\x73\x83\x47\x80\xa6\x84\x49\xe0\x04\x54\x2d\x61\x0f\xd5\x2f\xa4\x5b\x18\xfd\xdf\xf3\xf2\xf7\x2b\x48\x7e\x29\x7d\x18\x68\xd7\xd5\xbb\x01\x32\x85\x92\x1e\x66\x69\x65\x0d\xc5\x18\x5b\xe4\xa0\xae\x1a\xe6\x16\xe9\x42\xec\xef\x39\xdb\x50\xe8\x3a\x2b\x3e\x0a\x46\xd1\x20\xd3\xa5\x19\x06\xac\xeb\xcd\xf2\x90\xcc\x37\xb5\xad\xaf\x63\x22\x45\x5a\xb6\xb3\x2d\x17\x85\x43\x91\x12\x84\x00\x0b\xf1\xf4\x64\xef\x7a\x8b\xc4\xe1\x27\x16\x7c\x74\x3c\x62\x97\xce\xe3\x5c\xfc\x2a\x0b\x3d\x3c\x9d\x04\x10\xe0\xe5\x56\xa0\xd9\x98\x4a\xff\x03\x14\x74\x91\x79\xa2\x4c\x45\xbb\x29\x65\x38\xf1\x03\x35\x4f\xea\xb8\x84\xc0\x2c\x9a\xef\x6a\x42\xa6\xd3\x31\x49\x36\x91\x44\x87\xd3\x41\x22\x35\x7d\x47\x8f\x0d\xa7\x73\x9b\x9a\x8d\xc5\x64\x6c\x25\x5a\x53\xf7\x09\x15\x26\x68\x9c\x98\x8a\x72\x04\x81\x8f\xb2\x9a\x3d\x66\x00\x22\xf4\x2e\x5a\x49\xdd\xb8\x28\x4d\xda\x86\x0f\xc9\x86\x5e\x10\x56\x23\x26\x72\x06\xc5\x26\x7c\xc4\x02\x46\x05\x5e\x78\xe4\xfc\x07\xd6\x9b\x33\xd3\x6c\xc2\xc0\x71\x9b\x97\xb5\x7e\xc6\x73\x09\xb6\x9a\x94\x28\x7d\x41\x7d\x0d\x75\x60\x4d\xc8\x50\x0f\x65\x82\xa6\x60\x6e\x95\xdf\xd4\x6c\xdd\x19\x56\x38\xe1\xb3\xbe\x50\x74\x8a\x23\x75\x8f\x77\xd2\xc0\xb1\x6d\x66\xdb\xf0\x53\x37\x0c\x34\x3c\xd7\x8b\x3f\x23\x8c\x08\x98\xa8\xd6\xc9\xeb\x8f\x30\x3c\xd9\x8a\x73\x83\x95\xcd\x1a\x46\xa5\xb7\x58\xe0\x5c\xf1\x54\xeb\xb7\x38\x49\x16\x3d\x63\x91\x25\x68\x8e\xe5\xdc\x6d\xb4\x31\xa6\xb5\xb9\x9b\xec\xe2\x9e\xe1\x68\x4e\xee\xa0\x2a\x72\xdd\xe2\x56\x46\xf9\x81\xb0\x3c\xfd\x70\x8a\xfe\xa7\x98\xe3\x59\xff\xec\xfb\xc1\xf8\x7c\x78\xd7\xff\xee\x62\x70\x1e\xcc\xc7\x3e\xb9\x1c\xde\xdd\x2d\xff\xfa\xfd\xf0\x7e\xf9\xc7\x9b\xeb\x9b\x87\x8b\xfe\x7d\x5d\x2b\x17\xd7\xd7\x3f\x3c\xdc\x8c\x3f\xf6\x87\x17\x0f\xb7\x83\x9a\x4f\x1f\xee\x9b\x1f\xde\xfd\x30\xbc\xb9\x19\x9c\xbb\x55\xf9\x5b\x70\xba\xc0\x7a\x0c\xa9\x17\xf5\xd3\xa8\x1e\xc0\x23\x54\x7e\xf1\x14\x3d\x54\x4b\x1f\xd8\x58\x64\x83\x63\xf1\x8c\xa5\xe6\x61\x10\x0a\x3f\x62\xc8\x7d\xae\x17\xa5\xe9\x53\x13\xae\x13\xcd\x09\x4a\x38\x7f\xcc\x33\xcb\xda\x4c\x7c\x18\xe3\xc6\xf0\x43\x64\xd0\xda\xf7\xc3\xfb\xd3\xe5\x12\x0c\xbe\xb1\x00\x31\xcb\x9d\x01\x18\x17\x76\xec\x14\x6c\x29\x0e\x9a\xbf\xb0\xde\x06\x3d\xf8\x9d\x59\xd5\x8f\x69\x0d\x33\x55\xe9\x26\x8e\x6d\xd1\x5f\x37\xb1\xa0\xe1\xf2\xbe\xae\x5a\x4d\xbf\x1c\xa6\xf6\x14\x9a\x90\x08\xe7\x26\xa8\x49\xdf\x53\x42\x70\x11\x0e\xb8\xa0\x87\xfd\x35\x6a\xe9\xa8\xb6\xc1\xca\x9e\xe9\x89\xcb\x47\x9a\x65\x24\xfe\xb0\x2c\xbf\x94\xab\xc3\xda\x9a\xe4\x7c\x8a\x82\x33\xa9\xf5\x7a\xd0\xf9\x5d\xe1\x94\xf9\xc2\x7b\xd2\x20\x70\xa3\x08\x65\x01\x20\x67\x7d\x27\xf8\xc2\x16\x14\x5c\x63\x58\xa1\x67\x02\x29\xd5\xb9\xad\x1c\x65\x74\x6f\x7d\xb6\xa1\x3b\x63\xd3\x76\x75\xe0\x4a\xa9\xd6\x8d\xcc\x78\x1f\x02\xb7\xfe\x5e\x92\x3a\x46\xbc\x43\x5e\xec\xb9\x69\x14\xb8\xb3\x8b\x79\x83\x11\x37\x04\x37\xb8\xdb\xa0\xc6\x42\xbe\x42\xbe\x5a\xbe\x91\xd6\x5c\x16\x9a\x6d\xb7\x19\x8f\xc3\x02\x29\x01\x5c\xb7\x1f\x58\x09\x04\x79\xed\x5a\xdd\xf3\x18\x2f\x34\x71\x40\xac\xb1\xcc\xb3\x8c\x0b\x85\x1a\xda\x30\x6e\x7c\x33\x3e\xb8\x73\xec\x3c\x3c\x8f\x83\x46\xb4\x84\x21\x6b\x6a\x69\xb4\x83\x47\xb0\xeb\x5a\x30\x8e\x30\x40\x16\x14\x41\x5f\xf7\x28\x2d\xa9\xd4\x25\x0a\xad\x13\x7e\x77\xc9\x30\xc8\xf4\x05\xdf\xb6\x0c\x5f\x5d\xef\xd7\xae\x85\xda\x2d\x4f\xc8\x54\x8d\x6b\xbd\x3e\x2b\x0c\x9c\xba\x45\xd6\x84\x28\x43\x67\xf3\x3d\xb4\xd8\x5e\x4b\xf8\xa3\x0d\xec\xd1\xaa\x41\x60\x21\x10\x9c\x2b\x23\x9f\x16\x3a\x0c\x72\xab\x09\xe6\x05\xdb\xa9\xcd\x05\xf3\x42\xa0\x96\xf9\x8d\x3f\xd4\xa7\x4d\x1d\x8f\xd8\x00\x02\x28\x0a\x45\xc4\xa5\x88\x81\x16\xb0\x56\xfe\x2f\x15\x1d\x7d\xd5\x68\xcd\x66\x84\xd7\x82\xee\x6d\xbd\xfc\x64\x81\x8a\xc2\xb2\xa5\xef\xda\x9c\x1e\x63\xf5\x76\x22\xa0\x99\xb0\x2d\xe3\xae\x48\x66\x2d\xf3\x66\x9e\x45\xa4\x0f\xc4\x87\xe9\xae\x8e\xd1\x4f\xce\xf2\x03\x81\xaf\x45\x4d\x66\x1b\xbb\x91\xe0\x85\x03\x85\xac\x5b\xd8\x7d\xe0\x2c\xee\x3b\x14\x76\xf5\x02\x7b\x40\xa7\x9a\x55\x2e\x29\xe0\x8c\x19\x8b\xec\x06\x69\x1f\x67\xfe\xa3\x3b\xb2\x3a\x2a\xe0\x23\x94\xe1\xb4\x91\x55\x20\x74\xb0\x64\xf1\xbf\xcc\x66\x99\x4c\x54\x57\x58\xcb\x96\x45\xb4\x1e\x54\x7d\x7e\xc0\x03\x68\x12\x55\xd1\x94\x26\x09\xc8\x01\xc7\xa8\x0f\xe5\x81\x21\x91\x53\x5f\x85\x2e\xc0\x82\xce\x18\x5f\x97\x63\xd6\x40\x4c\x51\x40\x4c\x77\xcd\xc4\x24\x81\x9a\x8a\x3c\xfe\xfd\x50\xd4\x1e\x30\x5d\x34\x6f\xc1\xcb\x88\xd8\xed\x91\x5c\x36\x50\xde\xdf\x22\x3a\x7a\x69\xb8\xc1\x87\xff\xaa\x1f\xfa\xa7\x1c\x0b\xcc\x14\xc4\xfc\x5a\xd1\x5d\x90\x20\xf5\x88\x7c\x86\xf8\x0c\x66\x0c\xc1\xf0\x53\xb8\xb9\xce\xe5\x0f\xe1\x5e\x88\xc6\x3d\x44\x8f\xc9\x31\x54\x67\x13\x5a\x96\x98\x14\x6f\xce\xb5\xe4\x30\x62\x4b\xb1\x8c\xc7\xa8\x9f\x48\x6e\xbf\x20\x2c\x4a\xa0\x1c\x77\x10\x9e\xec\x29\xdf\xba\x95\x26\x0b\x50\x50\x60\x2b\x8b\xe6\xb9\x7d\x10\x7c\x08\x45\xc6\xc0\x27\x9e\xc0\x49\x2f\x7e\xff\x3d\xcf\x8c\xb7\xa2\x29\x4e\xe2\x05\xcb\x39\x2c\x5d\x43\x2f\xb6\x49\xa6\x54\xe0\xaa\x0d\x82\x37\x60\x63\x8a\x18\xd3\x00\x81\x05\x7d\x8d\x15\x4a\x08\x96\x0a\xfd\xe1\x9b\x8d\x62\x43\xdc\x04\x0b\xee\x6a\x8f\x6f\x91\x28\xe6\x52\x0d\x42\xe1\xce\x77\x0c\xb5\xe3\xb0\x50\x08\x23\x46\x9e\xc3\xc8\x52\x0e\xc1\xc0\xae\x20\x1c\x09\x72\x5b\x4d\x3c\x99\xc9\xcc\x87\x6c\x0d\xa3\x32\x35\xf0\x11\x07\x77\x6c\xdd\xa7\x76\x58\x35\x94\x65\x95\x27\x1b\xe2\x09\x90\x5c\x45\xd0\xff\x1c\xab\x11\xb3\x9c\xd5\x85\x8d\x04\x69\x5e\xfd\x24\x29\x07\xda\x63\xc8\x25\x61\x7a\xc2\x50\x9f\xfd\xd8\x2f\xd0\x15\xa8\x5f\x3e\xda\xb9\x64\xa7\x2b\x0e\x8b\x89\xc7\xf3\x78\x47\x61\xdb\xb5\xd2\x4e\x9d\x7d\xf9\x15\x85\xe0\x9a\xee\x2f\x4c\xa1\xfc\x16\xc2\x30\xa9\x1b\xf2\x9a\x83\xb5\x6c\xd3\x5f\x21\x1b\xef\xbb\x83\xf6\xa2\x72\xbd\x7d\x1c\xae\xd9\x67\x5e\x63\x6e\x6f\xd8\xdc\x40\xb6\xd8\x45\x01\xf7\x61\xf7\xaf\xe5\xf1\x2d\x0d\x7d\x18\x43\xd2\xdf\x7a\x2e\x58\x24\xd1\x39\xd6\x61\x62\xaf\xe3\x20\xa7\x27\x48\x21\x80\xe0\x3f\xc7\xf8\xec\x9b\x0d\x9e\xd7\xec\x7d\x4f\xbf\x57\xcc\xdf\x4d\xc5\x07\xc1\x2d\x4f\xbc\x59\xd8\xeb\xc7\x7f\xc7\x11\x44\xfa\x43\x4f\x2e\xc7\x60\x19\x90\xc9\xc1\x58\x63\x30\xe6\xd7\x8a\x87\x99\xe0\x11\x91\xf2\x18\x0d\xe0\xa2\xb1\xff\x44\x78\xea\x1c\x12\xc1\xcb\x23\xa6\x35\x13\x87\xdf\x12\xb4\x5f\x26\xf1\xba\x13\x60\xc0\xe0\x76\xf2\xe5\xa4\xeb\x6b\x94\x34\x69\x13\x0e\x8b\x0e\xda\x80\xb2\x06\x68\x30\x3b\x45\x31\x8f\x1e\x89\x38\x11\x24\xa6\xf2\x14\x7c\xeb\xaa\xd1\xa9\x97\x6a\x6d\x7b\x67\x49\xa3\x29\x50\x60\x4d\x52\xdc\x99\xe9\xdf\x06\x58\xbb\xf0\xda\x1e\xa2\x53\x50\x27\x5c\x4e\x86\x09\x42\x76\x70\x37\x84\x29\xb1\x80\xb8\x7e\x6f\xca\xaa\x2c\x84\xd3\x34\xb4\xd0\xd6\x94\x4d\x24\xf6\x11\x83\xb3\xe5\xb4\xef\xe7\x44\x12\x17\x70\x60\x26\xa5\xb8\x8d\x65\x36\xec\x22\xc3\x6a\x2e\x21\x75\xb5\xbc\x06\x56\xe9\x82\x4f\xf5\x0a\xe1\x0c\xe2\x15\x8c\x95\xa2\xf8\xc8\x27\x58\x4a\x45\x93\x64\xc4\x18\x21\xb1\x44\x90\x65\xfa\x55\x6d\x86\xbc\xfe\xb4\x87\x70\x1c\xa3\xff\xfd\xf5\xc7\x8b\x9f\xef\x07\xe3\xe1\x15\x18\xad\x87\x17\x83\x6f\x7a\xfe\xc7\xeb\x87\x7b\xff\xab\xb1\xb0\x3c\x11\x81\x52\xfc\x08\x2a\x1e\x93\xc4\x26\x4f\x90\x11\x0b\x47\xea\xb0\x03\xf4\x13\x49\x5c\xa4\xab\x15\x53\x3c\x84\xa2\xdd\xc3\xc6\x8a\xc5\xc6\xe6\xb7\x81\xf2\x7b\xeb\x3f\x59\x4d\x83\x8e\x78\x7c\x17\x4e\x0c\x84\x1c\x19\x2c\x83\x64\x72\xab\xfb\x16\x04\x47\xd8\x8c\xb2\xa6\x78\x3c\xc2\x9e\x5e\x52\x88\xff\x81\x2c\x7e\xd4\xea\xf5\x0d\xa6\xa2\x35\xed\xd5\xa3\x01\xb9\x13\xa3\xf5\x74\x2c\xab\x87\x4a\x1a\x59\xd8\x64\xdb\x34\xc6\x7c\xd6\x01\xc1\xbd\xf9\x74\x2d\xbc\x14\xf9\xac\x84\x43\xa9\xf0\xf9\x1c\x0e\xca\xc9\x5f\x34\x05\x0d\x8e\xd8\xfd\xf5\xf9\xf5\x29\x22\x09\x9e\x70\x08\xe5\xb7\x21\x41\xae\x09\xbb\x60\x11\x4f\x83\x86\x4a\x08\x25\x3d\x94\x15\x08\x25\xa1\x11\xed\xd8\xb4\xb1\x06\xa9\x24\xe3\x62\x19\xdf\x63\xbf\x2a\xa0\x9d\xec\x0d\x17\x6d\xae\x7f\xfd\x1a\x2c\x1d\xcf\xb4\x22\x57\xe1\xbc\xf6\x6e\x9e\x12\x6c\x6a\xe9\x1b\xb7\x90\xb5\xe5\xdb\x00\xd6\x24\x29\xd5\x53\xd4\x07\x47\x1e\x5b\x17\x7c\xf1\x26\x67\xe8\x87\xbf\x48\x34\xc9\xd5\x88\x95\xdb\xe0\x0c\xf5\x7f\xba\x43\xdf\x61\x15\xcd\xbf\x19\xb1\x6b\xad\x66\xfe\xf0\x97\x06\x28\xa5\x8d\xd1\x09\xf5\x9a\x9c\x63\x85\x2f\x38\x8e\x29\x9b\xd5\x41\x13\x16\xf5\x63\x06\xf7\xfd\x53\x74\x6d\x75\xf8\x22\x13\xc4\xa7\x04\x07\x0d\x01\x43\x86\x89\x38\x2e\x02\xac\x9c\x95\xe1\xdb\x8c\x66\x06\x17\xd6\x88\xdd\x1b\x4c\x46\xcd\x55\xa9\x42\x19\xb7\x35\x8c\xb4\x56\x66\xd0\x2a\xb1\xcb\x90\x22\xc9\x02\xe9\xd5\x01\x32\xf6\x9b\x61\xe5\x31\x90\x67\x96\x99\xfd\x88\x81\x82\xee\x73\x53\x12\x1e\xe1\x04\x62\xf2\x8e\x02\x9b\x9e\x56\xdb\x79\x0e\xf9\xe1\xa6\xe8\xf9\xa2\x1c\x3a\xeb\x21\x0b\xbc\x50\x16\x6e\x14\x18\x00\x60\x1f\xad\x37\x36\xe5\x9a\xe3\x18\x2c\x36\x30\xbe\x25\x66\x75\xf4\x87\x1e\x9b\xcd\x2c\x8b\x7e\xea\xd3\xb6\x78\xce\x1c\x16\x49\x04\xe6\x7b\xb6\x80\xf0\x6d\x28\x3a\xc2\x21\xf4\xa3\xe0\xce\x96\x28\x97\x76\xd1\xdf\x89\xc1\x67\x23\x66\x22\x05\x4b\xfb\x12\xa2\xf7\x04\xbd\x73\x06\x81\x8c\xcb\xb9\x62\x79\x66\x03\x1b\xad\xac\x9f\x09\x72\xe4\x33\xa0\xe2\xd2\x9a\xea\x1b\xf6\x18\xdd\x86\xea\x75\xcc\xa3\x3c\x75\xc8\xca\x90\x3d\x55\x94\x95\x2f\x49\x3c\xe6\x62\x5f\x47\xf1\x80\xd2\xa2\x08\xa4\x8f\xb7\xd6\x8f\x0d\xc1\xf4\xc3\x4f\x97\x25\xf5\x66\xc1\x17\x78\xc7\x6e\x51\x6b\xa6\xa1\x71\x56\x6e\xa9\xd4\xda\xce\x79\x89\x57\x05\xfa\x2b\x17\x20\x6c\x91\xcf\x19\x07\x23\xb7\x49\xcf\xe2\xf1\x57\x12\x0d\x6f\xb4\x04\xa4\x35\x5e\x7f\x06\x73\xa9\x4c\x70\x19\xa4\xeb\x98\xaf\x4d\xba\x40\x0f\x7d\x8b\x46\xf9\xb7\xdf\xfe\x29\x42\x9f\xdd\x1f\x7f\xfe\xcf\xff\xfc\xd3\x9f\x37\x49\x27\x71\x0a\x39\xb4\x5b\xac\x91\x2f\x27\x55\x16\x89\xc2\x1d\x58\xe6\x54\x3b\xec\x82\x3d\x80\x4d\xcb\xbf\x0d\xca\x63\x10\x3b\x84\x67\xf6\x84\xcb\xf0\x64\xa2\xd2\xd1\x2c\x22\x09\x24\x51\xbd\x32\x87\xf0\xc2\xae\x95\xe8\xff\xd7\x0a\xb0\xb2\xb1\x3e\x2a\xdb\xc5\x38\xd1\xc4\x8b\xd7\xba\x11\xf4\xb5\xb5\xff\x29\x70\x20\x7e\xe3\x2e\x38\x9e\xc4\x44\x98\x31\x79\x93\x9d\x37\x24\x02\x73\x20\x9f\xb3\x84\xc7\x0e\x1e\xb5\xc8\x05\xa4\x20\x20\x0c\x3e\x63\xcd\xb9\x7b\x16\x46\xcb\x7c\x64\x3c\x2f\x53\x1c\x19\x54\x50\x89\xbe\xfe\x7c\xaa\x7f\xeb\xa1\xc5\x29\x04\x91\xf6\xd0\xaf\xa7\x16\x2d\x07\x0b\x35\xd6\x3f\x7d\xe3\x64\x6d\xdb\x04\x0c\x9a\x4a\xf4\xd5\xc9\x13\x16\xa6\x66\xf4\x89\x19\xd1\x57\x96\xb3\xfa\xba\x78\xa1\x6c\x9e\x70\xfe\x68\x03\x6c\x97\x3e\x3c\x71\xc0\x6b\x40\xde\xde\x6f\x62\xb6\xde\x27\xe6\x2b\x74\x04\x2f\x10\x74\x9c\x4d\xd0\xf1\xdf\x25\x67\xe8\x78\x81\xd3\xc4\xfe\xea\x9e\xda\xf8\x5f\x2c\x6d\x4e\x5c\xec\x83\x7c\x92\x85\xb1\x94\x7e\x97\xf0\x09\xcc\xea\xd2\xcd\xd4\x44\xd0\xc2\x40\x8b\xdb\xa7\xb8\xb0\xec\x44\x5c\x22\x2a\xe0\x07\xa5\x5c\x99\x57\x80\xc7\xd5\xcd\xea\xb3\x1f\xd2\x7f\x1b\xbf\x30\x2c\x8a\x4b\xe2\x33\xc6\x61\x1f\xbd\xa6\x1b\xfd\x8c\xbe\xb6\x2c\xe8\x1b\x7d\xc7\xd8\x70\x65\xb3\x0c\x75\x1d\x2c\x7c\x07\x3f\x07\x1d\x50\x86\x4c\x5a\xe6\x8a\x2f\x7f\x3d\x39\x3e\x3e\xf6\x5f\x43\xd6\xfa\xff\x8b\xa8\x92\x24\x99\x9a\x96\xdc\x0d\xb6\x18\xb1\x4b\x57\x78\xc1\x19\xaf\x0b\x48\xc7\x4c\x70\xc5\x23\x9e\xa0\xa3\xc2\xa0\x1b\xf3\x48\xa2\x7f\xd7\x62\x6d\xb0\x94\xf0\xa3\xd6\xe3\x1a\x60\x60\x0d\xd2\xf3\x2b\x1d\x2a\x6b\x10\xaf\x1e\xab\x10\xc5\xcd\x2b\xb6\x58\x86\x55\x3c\x80\x16\x34\xe5\x9c\x58\xa4\x37\x21\xf4\xcb\xe4\xb3\x82\x47\x0d\x40\x7a\xb5\xa1\xec\xf5\x37\xe5\x12\xbb\x2d\xf0\xf4\x0c\x59\x37\x2c\x80\xc5\xbb\xb2\x9c\xc1\xcc\xb3\x17\xba\x4f\xf4\xe5\xc2\xc2\x52\x00\x32\x4f\x53\x2c\x16\x27\xc5\x69\x5b\x26\xce\x02\x69\x0d\x78\x4c\xe2\x16\x00\x5c\xb8\x89\x3d\x5a\x36\x8a\xc1\x8a\x97\xee\x46\xf3\x67\x37\x82\x5a\x86\x01\x62\x01\x61\x11\x8f\x2d\x5d\x17\xd9\xa7\x65\x89\xc5\xbf\xb3\x2c\xab\xb8\x88\x18\x59\x18\xe3\x98\x32\x10\x1e\xf6\x0d\xf7\x71\x03\xfb\xe6\x63\xa8\x8a\x4b\x66\x1b\xb8\x47\x87\xd7\x77\xee\x9b\xf6\x97\x2e\xac\x43\x59\x64\xc7\x49\x88\x8f\xc7\x66\x48\xe0\xe7\xe2\xfa\x85\xd8\x0e\x63\x9d\xc9\x7d\x6e\xae\xf9\xf7\x19\xbf\xa1\x89\xbe\xb5\x80\xc6\x8f\x47\xac\xf4\x73\x0f\x91\x84\xa6\x94\xf9\xd8\x3a\xc3\xdc\xf9\xd4\x48\xcf\x8f\x54\xe9\x2d\x93\xf1\xa3\xe6\x60\x0e\xd7\x29\x50\xa9\xfa\x6c\xe1\x48\xc7\x3b\xa6\xac\x05\x22\x97\x7a\x5c\x85\x8e\xae\x85\x59\xdd\xc4\x91\x15\x48\x69\x40\x78\x70\x7e\x47\x4c\xb7\xe6\xce\x52\x11\x2e\x1c\xb4\x17\x34\x77\xe4\x00\xf1\x03\x0e\x00\x7d\x94\x62\x7e\xbd\xfc\x5b\x23\xa0\x0c\x58\x9e\xee\x9a\x6c\x62\xc3\x87\xdf\xca\x4c\x77\x23\x88\xbb\xa9\x6c\xe2\x12\x61\x79\xea\x0e\xd4\x06\x14\x37\xb0\xe2\x4f\x4c\xa2\x04\x1b\xa4\x1a\xdd\x10\x44\x3e\xf6\x8c\x83\x34\x0b\xfa\x32\xd7\x8b\xe9\xc6\xd4\xd8\x49\x08\xfb\xda\xfc\xfb\x1b\x64\xef\x86\x6f\x7b\xf6\x3e\x17\xd2\x23\x80\x98\x3d\x87\x1a\x8d\x24\x36\x36\x74\x40\x25\x9e\x61\x11\x1b\x6b\x79\xa8\x55\x98\x0c\x5e\x2d\x7f\x2d\x78\x8e\x9e\xa9\x9c\x8f\xd8\x3d\x77\x06\x47\xc4\xb8\xc7\x75\xee\x81\x32\xba\xd4\x1f\x96\xc0\x04\x60\xd4\x75\x14\xa0\x99\xf0\x4e\xb9\x46\x10\x05\x3b\x66\x3c\x26\xbb\x01\x18\xdd\x17\xbe\x0a\xe7\xbf\x16\xc4\xe4\x83\xc1\x4d\xd1\x94\x4e\x4b\xa4\xdc\xd0\x36\x5f\xdd\x78\xb8\x87\x6c\x3b\x50\x12\xf8\x79\x23\x74\xed\x10\x1b\xcc\xdf\x6a\xd0\x8a\xd3\x38\x83\x6c\xe0\xd2\xda\x7b\xb4\xe4\x5d\x37\x21\xaa\x41\x2b\x6a\x75\xf7\x9b\xb9\x47\xb0\xec\x3e\xc0\x18\xa3\x99\xe0\x79\xe6\x53\xe6\x5d\xba\x9f\xd9\x06\x2b\xd3\x0c\xd9\x94\x9f\x5a\x9d\xea\x82\xb2\x47\x43\xf1\x2f\xb5\x47\x06\x10\x9b\xc4\x25\x18\x37\x57\xa5\x15\xe6\x70\x84\x28\x8b\x92\x1c\x2e\x3e\xa9\x70\xf4\x68\x40\xbd\x9b\x8c\xbe\xfa\x9b\xf1\xfa\x64\xca\x06\x89\x29\x4f\x12\xdb\x6d\x71\x81\x16\x65\xac\x9f\x28\x46\x18\x3d\xdc\x0e\xeb\xfb\x7e\xa4\xcb\xce\x9c\xfa\xdb\xb3\x4c\x20\xf0\x3f\x3f\xd0\x8d\xe2\x2e\x2b\xb0\x78\xa4\x44\xea\xde\xb8\xd4\x04\xba\x6a\x88\x54\x69\x05\x22\xbe\xad\x31\xed\x6f\x4c\xa7\xb3\x2c\x1f\xeb\x85\x4a\x36\x09\x10\xd0\xa3\xf8\x74\xf3\xd0\x0f\xbe\x5b\x45\x2a\x9f\x6e\x1e\x50\xd0\x87\x01\x3c\x4c\x48\xa4\x7c\xa4\xf1\x31\x3a\x2b\x70\x88\xab\x92\x79\x4c\x9e\x68\x64\x52\x5c\x7b\x5a\x2a\x1a\x31\x80\xf7\xd4\xba\xce\x91\xc3\x84\x42\x9f\x6e\x1e\x2c\x92\x94\x87\x9b\xb2\x90\xca\x00\x61\xb1\xd9\xb5\x53\x01\xd6\x64\x9c\x1d\x81\xc4\x86\x45\x5c\x78\x3b\x7a\xa0\x5c\xff\x7f\xec\xbd\x5b\x77\xdb\x48\x76\x36\x7c\x3f\xbf\xa2\xd6\xca\x85\xdb\xdf\x47\x51\xed\x9e\x37\x59\x1d\xaf\x95\x0b\x5a\x96\xa7\x35\x6d\x4b\x1e\x1d\xba\x27\x6f\x98\x45\x17\x81\x22\x89\x08\xac\x82\x51\x80\xd4\x4c\x26\xff\xfd\x5d\xb5\xf7\xae\x03\x8e\x04\x48\xc9\x76\x26\x7d\x91\x4c\x5b\x04\x0a\x75\xae\x5d\x7b\x3f\xfb\x79\x22\x9e\x15\x25\x19\x18\x0f\xaf\xa6\x76\x4c\xae\x7d\x24\xc4\x54\x4b\xcd\xa5\xb1\x95\x30\xcb\x00\xd4\x3f\x9a\xfa\xf4\x2d\x9d\x7a\x0c\x38\x00\x3a\xed\xa8\xcd\x3f\x71\x19\x7e\x5c\xee\x18\xcf\x97\x49\x91\x9b\x6b\x18\xbe\x0c\x43\x61\xef\x1e\x4b\x7b\xa3\xf2\x96\x11\x09\xb6\xc0\x00\x27\xb2\xd0\x73\x19\x64\xb0\xb8\xac\x60\x4c\x5e\x48\x24\x03\x3a\x3c\xc0\xde\x58\x7a\xae\x28\x55\x65\x6c\x8f\xd5\xdc\x09\xc0\xec\x32\x34\xa2\xe6\x12\x98\x49\xcc\xd9\x0a\xc2\xe7\xfe\xec\x7f\xcd\x3e\xc9\x87\x24\x4e\xf8\x49\x21\x74\xca\x4f\x8a\xff\xf3\x69\x52\xfb\x13\x7f\xf5\xfd\xf7\x9f\x50\xcb\xa6\x8b\x76\xc1\x4d\xa3\xa3\x1d\x3c\xed\x71\x0a\x5b\xfc\xc2\xcc\xd2\x23\xc6\xe9\x7d\x72\x2f\xd8\x27\x1c\xee\x4f\x44\xe0\x77\xd8\xb0\xcd\x65\xdb\xb8\xb1\x43\x86\x0d\xe8\x54\xdb\xc7\x8d\xf5\x0c\xdb\xab\xf5\xf4\x1f\xd7\x4b\x33\x5a\x3f\xac\xa7\xaf\xbe\x87\xff\xac\x8d\xd1\xbe\xc5\xeb\xb2\x67\xda\xaa\xdd\xb2\x11\xb5\x2c\x4b\xb7\x17\xcd\xe5\xfe\xcd\x88\x8d\xdb\x8b\x60\xd6\xb6\x2d\x7c\x5e\x88\x63\xb3\x5b\x91\xd7\x71\x04\xfa\xba\x41\x98\xd9\x1b\x11\x3c\x92\x6d\xd2\x33\x45\x02\xdc\xb3\x9b\xf6\x32\x04\xe0\xc2\x8f\x23\xf8\x78\xe0\xf9\x61\xed\xa9\x3d\xbb\xa7\x39\xfd\xd5\x4c\x85\x18\xc1\x20\x73\x63\x1e\x1f\x58\xc9\xca\xa3\x7d\x75\x7c\xe4\xa8\xa8\xd3\x24\x72\x8f\xe9\xb6\x3e\x66\x15\xd9\xe9\x88\x2e\x13\xed\xf2\xfe\x5c\x4d\x2c\xb4\xd2\xdd\xaf\xed\x77\xd7\xb4\x96\x42\xc1\x1e\x17\x75\x6b\x99\xf8\x81\x2b\xe2\x48\x28\x9c\xb9\x52\x2f\xb6\x83\x49\x42\xfd\x87\xdf\xd2\xcb\x1f\x1a\x94\xa1\xce\xbc\xfc\x00\x99\xd9\x8e\x0c\x6b\xcb\xa5\xb1\xd6\xec\x57\x3b\x02\x4b\x78\xcb\x3f\xa8\x4a\x77\xd9\x41\x15\xc2\x2f\x0e\xd4\xb2\xa5\x4f\xd9\x52\x1e\x31\xb6\xca\x53\x8c\x1d\x14\x1b\x70\x2b\x7b\x0d\x38\xbb\xcd\x79\xf7\x32\xea\xc5\xa5\x3c\x5f\xa3\xd3\x4b\x8b\x42\xbf\x6c\x19\x61\x9f\xc7\x76\xc4\x08\x1f\xa0\xb3\x1d\x62\x59\xc0\xa5\xd2\xb7\xd2\x5c\x2d\xab\x84\xd1\xee\xa6\xe5\x14\xeb\x03\x36\x54\x9f\x5c\x17\xa9\x1c\xd5\x15\x62\xb3\x56\xba\x79\xb0\xc6\x4a\xbd\xd7\xe3\x71\x7c\xeb\x58\x5e\xac\xea\x3b\xe5\xec\x62\xe5\x96\x02\xb8\xce\xbb\xeb\x30\x5e\xd7\xbd\xa7\x0a\x24\x74\xdc\x55\x83\xb9\x9c\xd9\x47\x3c\x63\xa3\x4e\xd0\xcb\x82\xe9\x88\xe5\x12\x33\x5c\xc0\x67\xc6\x7d\xaf\x53\xe3\x3a\x1a\x31\x36\x21\xbf\xd6\x84\x3b\x2d\x72\x7f\x1a\x91\x0a\x9c\xe3\x65\xee\x55\xe0\x7b\x10\x79\x1b\xec\x78\xc4\xc7\x6f\x6c\x13\xa9\x28\xdb\x97\x6d\x1f\x1e\x7e\x51\xa1\x82\x20\xe1\x88\x50\xb5\x98\x17\x90\xee\xfc\x34\xf5\xc4\x9f\xb5\x8f\x35\x57\x6b\x71\xd4\x6e\x9c\xf0\xed\x22\x57\xdd\x12\x85\x03\xba\xc9\x16\x51\xf1\xd9\x6f\x50\xb2\x68\xc7\x3e\x97\x3c\xc5\xc3\x4d\xd2\x74\xb4\xd5\x06\xf7\xc7\x0f\xff\xc4\x66\x70\xfa\xb0\x0f\xb0\x2f\x02\x68\x0b\x4a\x2b\x14\x4b\xb6\x99\xc8\xb5\x92\xbc\x53\xab\xf3\xfe\x47\xbd\x20\xbd\x31\x73\x35\x56\x65\x53\x5b\x6c\x44\x4b\x5a\x4a\x0b\x1b\xc5\xd9\x7d\xb9\x14\xb9\x14\xa8\x47\x0a\xcf\x31\xfb\xdc\xa0\xea\x2a\x5e\x16\x9b\x1f\x16\x51\x9a\x0c\x16\x41\x83\x8c\xd1\x99\x79\xed\x0c\xdf\xea\x6b\x40\xa5\xfc\x4a\xd5\x25\xc3\xdf\x18\xfe\x36\x65\x6f\x78\x74\x2f\x64\xcc\xb2\xb4\x5c\x27\x44\x10\x83\xe6\x7e\x52\xbd\xd8\x57\x1b\x86\xb6\x05\x96\x6f\x8e\xa1\xb9\xdc\xf2\x7b\x24\x26\x27\x23\xd2\xdc\x1c\xba\xe8\x05\x9d\xab\x64\x91\x34\xe7\xee\xde\xd1\x72\xe7\x61\xb3\x98\xfa\xdc\xd3\x25\xe6\xcb\x3d\x6e\x14\xa1\x8c\x2a\x9e\x9a\x11\x0b\xd7\xcd\xd6\x06\x8f\x97\xe5\x5a\x71\xca\xb4\x54\x19\x5c\xbd\x10\xc2\x03\x72\xfd\x52\x32\x0e\x54\x60\x2f\x34\x2b\x33\x6b\x9f\x41\x6c\x29\x05\xa4\x0f\x0e\x81\xf9\x21\x4b\xa2\x7b\xc4\x96\x42\xf6\x04\x73\xcd\x6b\x08\x18\x32\xe1\x41\x8e\x6d\x5b\xc3\x0a\x89\x70\x8e\xc3\xad\x34\xb8\xf9\xf7\xcc\xd3\x81\x99\x21\xc5\x46\xc8\xc5\x01\x14\xf1\xc3\x07\xad\x92\x05\x42\x66\xb0\x8b\xd1\xb9\x2e\x2c\x65\x42\xa2\x80\xfe\x8e\xed\xf8\x8f\x93\x55\xcd\x8c\x4e\x34\xd3\xbc\x48\xb4\xd9\xcb\x5a\x7b\xdc\xd3\x0f\x1d\xd3\xeb\x7c\x1c\xe7\x51\x0b\xdf\x51\xad\x2f\x5c\xa6\xd9\x94\xbd\x83\xc8\x46\x70\x33\x50\x8e\x3d\xa8\x6b\xc3\x2a\x36\xa2\x93\x46\xf7\x29\x20\x9a\xb6\x05\xc1\xf3\xbd\x01\x2b\x97\x55\x38\x65\x33\x1f\x51\x46\xfe\x24\x8c\x15\xef\x69\x91\x48\xb5\x38\x64\xf2\x0d\x0a\xbe\x00\xea\x0a\x26\x10\x03\x4b\x4a\x9b\xbf\x7b\x55\x10\x57\xcd\x47\x48\xdc\xe7\xf7\x42\xf6\x79\xd8\x87\xd7\x10\x43\x20\xbd\x2e\x01\x17\x5b\x51\x18\x5e\x39\xa4\x82\xc3\x97\x9d\xa7\xac\x4a\x56\xa7\xa6\xcb\xcd\x35\x24\xba\xa7\x74\x41\x8c\xb0\x11\xe9\xd5\xe3\x46\xe9\x70\x9d\xd9\xf1\xc3\x9b\x6c\x5e\x3a\xe5\x07\x48\xb7\x74\x1d\x8c\x38\x4b\xa9\x42\x4e\x2c\xa8\xb5\x5b\xa4\xe8\xd6\x71\xe3\xcd\xec\x16\x0a\xdd\x00\xc8\x04\x5b\x54\x73\x35\xff\xfc\xa3\xbe\x82\x15\xfb\x14\xec\x2b\xed\x52\xdb\xc7\x67\x3e\x1d\x18\xf3\x75\x98\x5e\xaf\xd3\xcd\x63\xc7\x17\x94\xa9\x98\xf9\xe9\x35\x5e\x94\xfb\xeb\x37\xab\x26\xe6\x3d\xa8\x6d\xfb\x66\xf6\x87\x00\x18\xc6\x96\x65\x92\xc6\x48\x9f\x17\x18\x84\xca\x5a\x1c\xc0\x69\x0f\xc7\x7f\xa2\xdd\x79\xd2\x3e\xc7\x3e\xaa\xf8\x98\x89\x35\x9e\x22\xb5\x39\xaf\x07\xe4\x8d\xe8\x10\xbc\xb3\xdd\xdf\x13\x99\xea\x46\xfc\xc7\x0b\x5d\x15\x71\xeb\xa9\x30\x40\xbc\x96\xe5\xea\x06\x14\xa3\xba\x58\x88\x02\x31\x15\x9b\x56\x6c\xc6\xd9\x7c\xc6\x25\xb9\x75\x0d\x0a\x21\x86\xfc\xf1\xcf\xd9\x9f\x6f\xae\x2e\x4f\xb6\x3c\xd7\x1b\x0e\x2c\x0f\xb6\xac\x89\x15\xe1\xc4\xeb\xb1\x45\x32\x24\x72\x2e\x4f\xd8\x5a\x4d\x10\x37\xf3\x9a\x6d\x8a\x22\xd3\xaf\x4f\x4f\xd7\x49\xb1\x29\x97\xd3\x48\x6d\x4f\x7d\xd7\x9c\xf2\x2c\x39\x5d\xa6\x6a\x79\x9a\x0b\xc8\x9c\x38\x79\x35\xfd\xe1\x15\x8c\xcc\xe9\xc3\xab\x53\x40\x4b\x4c\xd7\xea\x1f\xde\xff\xf0\xcf\x7f\xfc\x27\x53\x70\xb6\x2b\x36\x4a\xbe\x26\x50\x4e\x6f\xd9\x27\x68\x95\x9f\xe2\x2b\xb5\xaf\xfc\xf3\xf4\xfb\xb0\x1a\xf4\xe8\x56\xc5\x22\xd5\xa7\x0f\xaf\x16\x76\x60\xa6\xd9\xee\xf7\x5c\x83\xaf\x96\x6b\x70\x9f\x14\xbf\xe7\x1a\x7c\xd5\x5c\x83\xe1\x16\x8e\xdb\x63\x80\xbc\xd9\xef\x8f\xe6\xef\x6e\x8f\xb4\xae\xf7\x7d\xfb\x50\xcb\xe1\x10\x66\x82\x1d\x71\x44\xdc\x8b\x51\x57\xec\x5a\x73\xdd\xd5\xa1\xc3\xc5\x36\x56\x40\xa5\xd3\x98\x1f\x45\x7c\x01\xc8\xbe\x24\x02\x72\x7e\x74\x09\x66\x3c\x69\xcb\x20\x20\x04\xeb\x31\xfd\xf7\x9c\x32\x13\x4f\xad\x2f\x41\xcd\x3d\x50\x5b\x22\xc5\xb7\x2d\xde\x56\x3d\x5a\x4d\x89\xa7\x50\x62\x18\xa8\xcd\xed\x08\xe6\x71\xf2\x40\x5d\x6c\xbd\x3a\xaa\xb1\xe1\xfa\x30\xe0\xf6\x0c\x69\x5c\x5d\x9c\x0e\x51\xaf\x89\xb6\x1f\xb4\x07\x87\x65\xc6\x31\xe7\x90\x25\xe0\xcb\xca\x3c\x53\x5a\xe8\x29\x7b\x57\x53\xaf\xf5\x60\xf4\xeb\x77\x67\xec\xd5\x8f\xff\xfc\xc7\xb9\xfc\xae\xe5\xdc\x86\xfd\x5e\xe5\x6b\xc2\xc6\xc3\x69\xbd\xe5\xba\x10\xf9\x69\xbe\x8a\x4e\x71\x97\x3b\x35\xef\x9f\xd0\x47\x4f\xd4\xea\xc4\xd1\xcc\x9f\x10\xe3\xf6\x74\x1b\x8f\x23\x8d\xa9\x4c\x3d\x3c\x6b\xe8\xa0\xd1\x70\x28\x21\xbd\x9c\x5a\x39\x41\x11\xcc\x5d\x44\xed\x21\xb5\x6a\xf9\x8f\x37\xa9\x5a\xea\x97\x8e\xd4\x92\x6b\xfb\x0d\xcf\x32\xd7\xbd\x34\x9f\x46\x71\xc2\x4e\x91\xe7\x74\x54\xd8\xbd\x24\xbc\x8e\x8c\xe9\xf8\xf6\xc5\xe6\x8f\x7b\xe4\xd8\xe1\xb9\x2a\xa5\x65\xec\x57\x52\xa8\x15\x40\x37\xc0\x12\xb6\xc8\x33\xf0\xd5\x02\x9e\xc9\xf1\xe9\xe4\x22\xc3\x03\x06\xa2\x0a\xdd\xdd\x7d\xa4\x6a\xc5\xbe\x7e\x7e\x0e\xd5\x8a\x63\xfb\x9d\x36\x94\xaf\xd4\xe1\xc7\xc2\xc3\x71\x29\x8d\x41\x55\x98\xe7\xf7\x46\x50\xdd\x3e\xe0\x15\xe5\x3c\x41\x7c\xc6\x73\x30\xd2\xc4\x49\xa1\x4e\x80\x88\x0c\xe8\xad\x50\x47\xa6\x0b\x56\x01\x91\xe7\x31\xc7\xa4\x79\x7e\x40\x3d\xd1\x30\xff\x2d\xa8\x28\xd9\x24\x1a\x69\x99\x09\x66\x9b\x48\x29\x72\x8a\xa9\xed\x3d\x51\x47\xc6\xa5\xc3\xa1\xec\x47\xd9\xfa\x9b\x68\xa8\xf1\xe1\x72\xac\x78\xb0\x09\x4c\x19\x58\x9f\x1b\xb5\x55\xc6\x9c\x51\xa5\x0e\x7e\xc4\xdb\x0b\x1c\xc2\x9d\xb6\xd7\x96\x67\x48\x3c\xfa\xf5\x5a\x63\x96\x96\xf9\x09\x9d\x7a\xe1\x43\xa3\x64\x93\x96\x55\xa1\x98\x3d\xf5\x77\x0a\x1f\xfd\xf3\x06\x50\x0f\xa8\x3d\x0a\xf2\xdf\xc4\xdb\x9f\xfc\xa7\xb9\xd7\x98\x29\xe5\x6e\x0a\xee\xe4\x46\x90\x0e\xf2\xeb\x86\x90\x34\x6b\xcd\x77\x32\x60\x94\xdb\x91\x63\xe0\x12\x47\x86\x0c\x00\x97\x98\x4a\x61\x73\x28\x4e\x5a\x93\x28\xba\xd6\xa5\x15\xdb\x8e\x17\x96\x03\x7a\x5c\x55\x6f\x5c\x01\x44\xf7\xdc\xac\xb7\xa7\xd0\x83\x8c\x1b\xec\x63\xdc\x10\xac\x6d\xd1\x05\xdc\x1c\xbf\x18\x41\x34\x6b\x4c\xdf\xc1\x47\x70\x72\x36\x7a\x30\x58\x0b\x5d\x1d\x38\xce\xc5\xd6\xe7\xb1\x6a\xc3\xec\x22\xeb\xa8\xcf\xc8\x34\xb5\x6c\x5c\x1e\xdd\x8b\x0f\x6e\x7d\x21\xa4\x71\x59\xc2\xef\x97\x57\xb7\x21\x5a\x23\xc1\xd6\x9e\x44\x1b\x11\xdd\x83\xc3\x04\x8f\x3c\x27\xc4\x4b\x0c\xa7\x73\xe9\xe5\x1c\x0b\x65\xa1\x07\x3b\xa7\x70\xe1\x54\x5e\x54\xce\xe2\x44\x67\x29\xdf\x41\x90\x57\x62\xee\x95\x0f\x10\xbb\xa4\x45\xb3\x15\xec\xf3\x17\x0f\x1f\x69\x33\x2a\x33\xff\xde\xd8\xbe\xf4\x60\x5a\xdf\x99\xcd\xfd\x80\x69\xb1\xe5\xb2\x48\xa2\xb9\xdc\x0a\x2e\x43\x54\x1e\x05\xb9\x4d\x27\xc7\x4a\x10\x07\xfc\x6a\x25\xa2\xc2\x93\xc8\x82\xf1\xee\x7a\x6a\xdf\x1a\x1c\xd7\x76\xb7\xf2\x7a\x9b\xfe\x13\xe0\x7e\x31\x46\x9f\xab\x07\xda\x86\xed\xd1\x78\x60\xf0\x06\xe4\x3f\xe9\xc8\xb5\x97\x41\xf8\x97\x9d\x53\x6c\x29\x8a\x47\x01\x1c\x29\x94\xd4\xdd\x66\xe3\x1f\x2d\x01\x73\x9c\xa2\x7b\xbb\x16\x7e\x80\x04\xc3\x05\x16\x82\xc9\x1c\x99\x9b\xac\xb1\xb2\xbd\xa0\x34\x73\xf0\xf6\xbc\x20\xbf\xd5\x0b\x38\xa6\xcd\xed\x31\x7f\x10\xf1\x5c\x56\xa9\xf2\xc8\x66\xf4\x0b\x8e\x79\x71\xc3\xa7\xd9\x6d\x6c\x1f\x0f\xf2\xe5\x9f\x03\x3d\x90\x27\x06\x76\x89\xd4\x3d\x62\x8b\xd8\xe8\xe7\xbc\x55\x59\x9d\xd7\xd0\xba\x1f\x00\xc9\x12\xda\x8a\x97\x91\xd6\x69\x05\x4f\xe1\x26\xa5\x23\x02\x43\x96\x50\x07\x80\x25\xbf\x64\xc3\xd3\xd9\x56\xc6\x5c\x5a\x86\x8c\x55\x99\x22\xf3\x73\x57\x1e\x02\xf1\x02\xda\x6c\xbe\xaf\x97\xd5\xe9\xfc\x6a\x2c\xd0\x8b\x74\xb0\x87\x00\x8c\x8c\x7b\x9d\x9d\xf5\x42\xea\x12\x4c\x0a\x2b\x15\x07\x8e\xe7\xb5\x28\xe0\x34\x8f\xcb\x14\x09\x1f\xc0\x63\x0e\x1c\x83\x3c\x4d\x59\x52\xe8\xb9\x74\x94\x88\x98\x6c\x00\x3b\xac\x75\xa9\x5b\x95\x71\xe9\xb4\xca\xe1\x67\x2e\xc1\x0e\x4b\xa2\xa4\x68\x40\xb8\x77\xa1\xbc\x52\x96\x09\x8e\xf9\xc9\x38\x6c\x73\x19\xde\xb9\xea\x83\x40\xc9\xbc\x3c\x4d\x78\x8f\x0a\xfc\x53\x4c\xdd\x99\xf9\xc4\x41\xb8\x05\x6c\x9d\xb9\x70\x59\xe5\x64\xac\x2d\x71\xa2\x10\xd2\xd2\xdc\x6a\x0a\x6d\x7d\xe4\xfe\xde\x0a\x79\x0a\x51\x99\xf2\x1c\x13\x34\x56\x65\xca\x92\x55\x20\x02\x0d\x63\x80\x84\x78\x66\xb8\x22\x05\x67\xb5\xf5\x92\x6b\xbe\x15\x01\x17\x07\xb9\x77\xd2\x00\x43\x81\x2c\xff\x18\x9c\x37\x65\xbd\x9c\xb2\xb7\x9e\xf2\x13\x47\x18\xd6\x44\x40\xa4\x9b\x68\xdc\xfe\x5c\x7d\x83\x34\x72\x68\x9d\xa9\xa2\x92\x66\x45\xba\x55\xd7\x31\x82\x20\xc8\x31\x0e\xa0\x61\xe5\x58\xfa\x51\xc3\xad\x34\x12\xe6\xd5\x1a\x6c\xc3\x2d\x88\x8e\x0a\xda\x53\x61\x64\x25\x43\x12\xe2\x03\x2a\xea\x48\x9e\x5b\x2a\xbb\xed\xd1\x9c\x86\x71\x1c\x59\xd5\x40\xc1\x6d\x7c\x45\x83\x99\x13\xc2\x71\x86\xf4\xec\x9a\x17\x63\xb1\x39\x2e\x19\x67\x7c\x45\x5b\x71\x50\x43\xaa\x09\xbb\xc7\xc8\x7a\x3a\xa1\xfd\x03\x2a\xea\xe4\xfc\xbd\xc6\x0b\x6c\x15\x82\x47\x9b\x6a\x5e\xbc\x65\xaf\x75\x2d\x80\xbc\x28\x58\x8f\xe3\x53\xfa\x67\x7e\xce\x81\x88\x1d\x33\xd5\x9f\xb2\x2b\x29\x10\x39\xa7\x56\xc1\xa1\x42\x15\x20\xb5\x3b\x10\x10\x71\xbb\xdc\xd2\x54\x4c\xde\x5b\xba\x20\xb3\xe4\x26\x8c\xfb\xd2\x61\xd7\xc3\x69\x83\xbb\x48\x87\x2d\xd9\x26\xb7\x73\x84\x79\x39\x2c\xe9\xbe\xfd\xce\x1f\x00\x50\xc7\xef\x00\x6d\xed\x18\x3e\x2c\xbd\x48\x72\x77\x8b\xb3\xf0\xf1\xea\xbc\x61\x08\x27\xdd\xd7\xbf\x1f\x37\x55\x14\xe2\x08\x71\xba\xbb\xcb\xb7\xe7\xef\x2e\x2e\xab\x8a\x72\x7f\xb9\x3b\xbf\xab\xfe\xe5\xfa\xee\xf2\xf2\xe2\xf2\x4f\xe1\x9f\x6e\xee\xce\xce\xce\xcf\xdf\x56\x9f\x7b\x37\xbb\x78\x5f\x7b\xce\xfc\xa9\xfa\xd0\xec\xcd\xd5\x75\x4d\xc3\xce\x0a\xd0\x05\x7f\xba\xbd\xf8\x70\xfe\x76\x71\x75\x57\x91\xc1\x7b\xfb\xaf\x97\xb3\x0f\x17\x67\x8b\x96\xfa\x5c\x9f\x9f\x5d\xfd\x72\x7e\xbd\x47\xc5\xce\xb7\xb7\xb5\x4b\x9f\x02\x3e\x76\xb0\xa6\xe1\x8c\xad\xf2\x44\xc8\x38\xdd\x21\xf6\xde\xde\x6c\x6b\x60\xda\xf0\xec\x4d\xb6\x42\x95\xc7\x40\xe8\x6f\x37\x82\xa9\x07\x91\x03\xb3\x11\x96\x46\x34\x08\x3e\x8b\xba\xfe\xd5\x5c\x14\x79\x33\x2a\xd0\x9b\x29\x54\xe4\x3b\x97\x8b\xd6\x57\x1d\xcf\x8a\x47\x1f\x61\x99\xc8\xfb\xea\x02\x96\x51\x5e\x66\x45\xb2\xec\x4e\x8a\x18\x9d\x4c\x3c\xf4\xee\x8d\x1c\xae\xed\x84\x57\x97\xed\x1b\x63\x25\x37\xe0\x18\xe0\x31\x94\x70\xa8\x54\xa7\x7b\xdb\x82\x35\xb3\x72\x99\x26\x11\x4b\xe2\xba\x3f\x85\x72\xfc\xc1\x65\x5c\xa7\x7a\xce\x44\x0e\xa6\xaa\xb9\x01\x64\xb9\x38\xe1\x65\xb1\x41\x5a\x42\x4a\x45\x20\x61\x8e\xb9\xd4\x22\xca\x05\xc6\x02\x84\x06\x27\x2d\x6a\x34\x06\x5f\x82\xca\x10\x2b\x47\x0c\x04\x60\xd3\x40\x76\xa3\x23\x46\x80\x6f\x62\xe9\x23\x9c\xa4\xf8\x7c\x6f\xd7\x50\x8d\x13\x5d\x17\xe8\x87\x13\x1e\x7f\xb4\x4a\x8f\xa6\xdd\x66\xa7\x76\x4a\x87\x38\xc8\x36\x77\xa3\xbd\x19\xfb\xe6\x58\x38\x51\xaa\xc9\x0c\x54\x3a\xfd\x74\x96\x0b\x38\x44\x08\x0a\x60\xfd\x17\x00\x5d\xa1\x5c\x0f\x48\xf1\x30\x57\xb5\xa5\xd8\xf0\x74\x85\x16\x87\x19\x9a\x76\xa6\x04\x2c\xff\x56\xdd\x0b\x79\x8d\x03\xf6\x55\xb6\x43\x89\x37\x1f\xcf\xd3\xe2\x3c\x42\xde\x85\x69\xea\x68\x67\x95\xcd\x75\x03\x63\xaa\xc0\x7b\x42\xf0\x33\xa6\x74\x78\x16\x76\x9b\x26\xb7\x5a\x25\xbf\x99\x02\xe7\x52\xb4\xf2\x50\x03\x5e\xc8\x32\xe6\xb9\x7d\x19\xb0\x51\x48\x3b\x76\x2f\x24\x68\x44\xa2\x84\xfc\xde\x39\x3b\xce\x7f\xde\x1c\x8b\x1e\x87\x3e\xf8\xfc\x92\x8a\x74\x66\x18\xe5\xb1\xfd\x54\x60\x8e\x8d\xe3\x15\x80\x79\x73\xf6\xfe\xe2\xfc\xf2\x76\x71\x76\x7d\xfe\xf6\xfc\xf2\xf6\x62\xf6\xfe\x66\xe8\xf2\x7b\x8a\xbc\xa8\xda\xea\xab\xa7\x07\xb9\x1d\xe2\x94\x56\x9e\x4f\xcf\x75\x8d\xf2\xcb\x0e\x86\x64\x7f\xed\x93\x38\x5b\xc4\x89\x8e\xcc\xf1\xb7\x5b\x08\x19\x03\x81\xff\x41\x53\xb5\xbd\xa8\x7a\x2b\xdc\x13\xcc\x3d\x61\x77\x10\x3c\xed\x1e\xec\x8c\x76\xbf\x03\xea\x0e\xdc\x90\xb9\x30\x8b\x3f\xae\xf0\x26\x4c\xf7\xab\x36\x99\xe2\x8e\x6b\x5b\xb5\x88\x7a\x9b\xb0\xbe\x89\xd6\x25\xd0\x33\xd8\xc7\x00\x72\xd8\xd1\x2b\xc4\xaa\x1a\xaa\x08\x24\x81\x02\x36\x4b\xf4\x5c\x6e\xb9\x8c\x79\xa1\xf2\x5d\x47\x13\x87\x6d\x9e\xe1\xb2\xa9\x6e\xa1\xe1\x91\x2d\x85\x88\xed\x28\xe0\xa3\x5c\xd6\xa7\x12\x6a\x0d\xdc\x5e\xfd\x7c\x7e\x79\xb3\x38\xbf\xfc\x65\xf1\xf1\xfa\xfc\xdd\xc5\x5f\x1d\x12\x32\xe3\xba\x4d\xf1\x36\xcb\x85\xd9\x5d\x2c\x75\x53\xeb\xfe\x82\x32\xb4\xb6\x1c\x92\x1e\x4c\x56\x73\x69\x77\x96\xdc\x17\xbf\xc9\x55\xb9\xde\xb4\x17\x54\xaf\xe5\xc7\xd9\xed\x4f\x07\x55\x13\x88\xf5\x50\xab\x12\x57\x5b\x13\x11\x9a\xac\x68\xdf\x43\x18\x69\xad\x7a\x40\x0f\x09\x8f\xb6\x45\x19\x3a\x76\xb4\x83\x6e\x2f\xcd\x4d\xab\xd7\xf8\x6f\x79\xbc\x6b\x02\xdd\x06\xfb\x66\xe5\x18\x01\x84\x32\x4a\x1e\x37\x4a\x7b\xdd\xf2\xb7\xca\x09\xf6\xc3\x49\x2a\xd6\x6b\x11\xe3\xf4\xaa\x17\x4c\x3e\x38\xda\x02\x23\x7f\xae\xb7\xf5\x22\x89\x92\x1e\x71\x30\x3b\xbc\xd7\xf0\x0d\xfc\xa3\x7b\xa5\x7d\xaf\x38\x23\x72\x1c\x88\x6f\x16\x5c\x76\x04\x92\x1f\x9a\x08\xcd\x41\x5b\xd1\x55\xce\x5c\xf2\x13\x39\x4c\x6c\xc8\xc0\xaf\x83\x2e\xc0\xcb\xf1\xb8\x50\x57\x8f\x6b\x91\xa5\x3c\x12\x2e\x87\x01\x59\x4d\xe1\x5e\x7f\x48\x00\x8f\xa4\x5f\x25\xf9\x5b\x02\x49\x58\xaf\x76\xd5\x36\x05\xc0\x73\x7b\x6d\xf7\xe3\xe7\x77\xad\xf4\x5e\xdc\x88\xcb\x10\x1c\xcd\xa8\xbd\x47\xd0\x77\xf4\x45\x81\xa0\x65\x27\x2c\x79\xd4\x74\xa8\x7d\xf9\x17\x1a\x78\xbc\x33\x57\x1d\xdd\xdc\xb2\x85\xba\xe9\xe1\x4c\xc7\x3e\x7f\x61\x51\xe4\xbd\x04\xc3\x4f\x11\x8e\xf8\x98\xab\x6d\xa2\xc5\xac\x28\xf2\x64\x59\x86\x0a\xab\x23\x01\x73\x95\xcb\x89\x6f\x70\x96\xab\xb8\x8c\x2c\x25\x10\xb4\xd6\xc3\x7e\xc8\xcb\x67\xad\x8e\x98\x9d\x98\xd9\x47\x37\x37\x11\x9f\x00\xa0\x1f\x39\xab\xda\x62\x6c\x76\x63\xec\xf0\xfd\x7d\xb4\x47\xf9\x31\x53\xb2\x65\x52\x74\x77\xa6\x9d\x03\xc3\x12\x6b\x99\x7d\x1c\x2c\xe0\x0e\xd4\x14\x4d\x97\x25\xc7\x00\x7a\xd5\x46\xe9\x62\x00\x71\x47\xcd\x38\x70\xd7\x30\x6c\x4c\x35\x63\x06\xed\x86\x0d\xd7\x68\xce\x17\xd1\xa6\x5a\x71\x68\x4d\x95\x09\xb5\x5e\x5d\x67\x1e\x1f\xe7\x36\x19\x14\x46\x9b\xa0\xa3\x21\x21\xc7\x76\x45\xd5\xd2\x49\xf4\x8e\xf3\x76\x87\x16\xa3\xbb\xd1\xe1\x61\x00\xfb\x68\xca\x4b\x19\x6d\x58\x96\x72\x4c\x26\xdf\x70\x8d\x53\xda\x62\x49\xf8\x32\x49\x93\x02\x58\x7a\x30\xc4\x59\xeb\x61\x73\xcd\xe3\xf9\xbd\x25\x3b\xe7\x9e\x92\xa9\x6f\xd2\x1f\x89\xd9\x75\xad\xfa\xa2\xa8\x5d\xbf\x64\xc3\x6d\x68\xd8\xb4\x24\xc4\xae\x1f\x0e\xb3\x11\xc3\xb4\xf4\x6d\x19\x37\xb2\x54\xe2\xc7\xfa\xeb\x95\xfe\x6e\xb1\x5e\xc6\x23\x56\x48\xc5\x63\xc4\xe9\x53\xd7\xf8\x68\x5d\x59\xab\x54\xf1\x0e\x9d\x79\x5b\x36\x4a\x76\x74\x95\x1d\xab\x72\xd9\x45\x12\x8f\xb5\xea\x2f\xbd\x2f\x18\x62\xd7\xed\x53\x39\x4b\xc3\x0d\x90\x17\xa2\x48\xc6\xf9\x7b\x82\x46\xf3\x42\x9c\xc0\xeb\xed\x85\x53\x86\xe1\xe0\x36\x37\x26\x9a\x17\x8e\x72\x46\x1b\x60\x09\xdb\x66\x57\xed\x74\x3e\x06\x13\x7e\xe4\x78\x25\x72\xcf\x54\xda\xaf\x45\xf3\xc7\x1f\x5a\xba\xa5\xd1\xe8\xbf\x94\xdc\xec\x87\x57\xab\x1b\xe4\xca\x39\xa6\xd1\x45\xd2\x5c\x56\xed\xdb\x4f\xfd\xab\xb7\xd5\xf0\x5a\x38\xf1\x07\x67\x22\xb7\xb5\xe6\xc6\xbc\x3d\x7c\x17\xba\xa8\xb8\xd1\xb2\x3c\x51\xc0\x19\xa3\x56\xc8\xc0\xd8\x4d\x21\xdc\xfa\xdd\x23\x7a\xf2\x73\x29\x4a\x61\x26\xd0\xb2\x8c\xd7\x4d\x2f\xf7\x08\x4b\xd9\x37\x69\xa3\x1e\xd9\xb6\x8c\x36\xcc\x16\xce\x62\x91\xf2\x5d\xa5\x69\x60\x24\x16\x0a\xf8\x3c\x47\x51\x67\x05\x2c\xcc\x51\xa9\x0b\xb5\x05\x80\xb1\x2f\x37\x2f\x25\xac\x72\xc6\xed\xea\x6a\xdb\xdf\x2b\xec\x72\x07\x86\x36\x6f\x3e\x9e\x9f\x5d\xbc\xbb\xa8\xc5\x15\x67\x37\x3f\x87\xff\xfe\xf5\xea\xfa\xe7\x77\xef\xaf\x7e\x0d\xff\xf6\x7e\x76\x77\x79\xf6\xd3\xe2\xe3\xfb\xd9\x65\x25\xfa\x38\xbb\x9d\xdd\x9c\xdf\xee\x09\x30\x36\xbf\xda\x3d\x10\x3c\x20\xbf\xb3\x90\x67\xab\xec\x60\xfd\x0c\xf4\xd5\xd7\x6c\x66\xa9\x00\x2b\x64\x95\x36\x48\x0c\xa8\x92\x14\xc1\x71\x18\x4b\x7e\xcb\x0b\x7e\xc6\x0b\x9e\xaa\xf5\x94\xcd\x18\x01\xc2\x11\xe8\xaf\x8d\x85\x44\x3c\x69\x66\x74\xb0\x08\x63\x26\x45\xfe\x0e\xef\xa5\x6b\xd5\x8a\x18\x0a\x53\x11\x8a\x9c\xd8\xac\xb6\xb9\x3c\x7f\x10\xb2\x28\x81\x84\x96\xa7\x29\xa3\xcf\xda\x07\x82\x8c\x7d\x5b\x4b\x9d\x6c\x93\x94\xe7\x5e\x65\xf4\x8a\xca\x82\x5b\x8a\xad\xab\x23\x68\x6a\xa6\x83\xdb\x8b\xdc\xdd\x05\x83\x7a\x9f\xbd\xbf\x00\xbb\x2f\x2a\xac\x84\x96\xfd\xf8\x5c\x22\x03\x1e\x7d\x71\xcb\x21\xf9\xa4\x50\xe4\x59\xc5\xcf\xd3\xc3\xdd\x13\xf1\x28\x2a\x70\x1b\x83\x78\xae\x1b\xa5\xab\xa4\xfd\x8f\x73\x59\xe4\xbb\xc1\xc6\xdc\x2d\x64\x5b\x6b\x30\xc8\x09\xcb\x56\x55\x1e\x45\xc7\x17\xb3\xa5\x5f\x82\x85\x67\x81\x96\x14\x97\x71\xe1\x17\xc4\xb5\x74\x5c\x3a\x52\x73\xf2\x7e\xab\xfd\x10\x12\xe2\x40\x2f\x2c\x55\x29\x63\x4d\xa8\xbb\x6d\x22\x4f\xb7\xfc\xb7\x97\xb6\xa5\x48\x30\xe1\xf4\x7f\x80\x3c\x4c\xa4\xe6\xfa\xb5\x33\x9b\x5c\x7f\x77\xcd\x65\x4f\x7f\xed\x37\x91\xed\xce\x0a\x77\x3d\x7f\x31\x47\xfc\xe0\x83\xd8\xb5\x8d\x5f\x43\xc3\x8d\x85\x44\xe4\x50\x48\x96\x0b\xf3\xa0\x03\x27\xa6\x88\x39\x75\xff\x86\x24\x84\x8a\xce\x6c\xfb\xde\x1d\xc6\xfb\x8f\x5a\x36\xad\x48\x83\xe1\x86\xcf\x60\x11\x3e\xfa\x92\x19\x33\xc4\x1d\x58\x97\x37\x25\x5d\x50\x40\xd5\x0c\xd6\x7f\xa8\x25\x5b\x41\x06\x12\x26\xda\xb1\x5c\x40\x88\x03\x86\xc2\xaa\x46\x00\xc5\x54\x03\xcc\x60\xa7\x40\x2a\x34\x38\xfe\xa5\xb9\x63\x8a\xcf\x25\xc5\x6e\x5f\x7d\x3f\xee\x9c\x2d\x90\x7a\x1c\xb9\x66\xeb\xa4\xdc\xee\x2c\x87\x7a\x95\x32\x69\xe3\x9d\xbb\x2e\xa5\x39\x8a\x9f\x02\xf6\x32\x3c\xae\x59\xfb\x28\xfd\x73\x6f\x92\x90\x75\xc9\xe7\xf8\xfc\xb3\xd1\x88\xfe\x52\x63\x0f\xa5\xcf\x01\x24\x9d\x4a\x0f\x0f\xb4\x25\x8f\xee\x1f\x79\x1e\xa3\xdf\x16\x70\x28\x53\xf6\x93\x7a\x14\x0f\x22\x9f\xb0\x48\xe4\x05\x27\xea\x2e\x0d\x81\x78\x58\x50\x54\xce\x5c\x42\x86\x06\xf2\xa0\x49\x5d\xe6\x82\x15\xc9\x7a\x63\x2e\xd1\x01\x8c\x42\xe5\x66\x3b\x2a\x90\xb5\x31\x13\x11\x91\x25\x75\x74\xc0\x2a\xe5\x0f\x4d\x2e\xb2\x43\x58\x1e\xd8\x85\x4b\x33\xb5\x71\x4a\xab\xc4\xd3\x07\x7c\xa1\x0e\xa3\x4d\x13\xe9\x6d\x26\x6c\xad\x52\x2e\xd7\xd3\xe9\x14\x58\xe7\x5f\x76\xc1\x79\xf4\x42\xef\x64\xb4\x40\x8a\xc5\x2f\xe1\x98\x6a\x69\x24\x2a\x91\x41\x80\xd9\x54\xc6\xf2\x3d\x9a\xcd\x33\xfc\x77\x8c\xe0\xfb\x96\xe9\xb8\x77\xe5\x52\x0f\x85\xa1\x5c\x87\x17\x4f\x95\xd2\x22\xdd\x39\xc6\x22\x97\xd1\x03\x10\xd2\xdf\x0a\x21\x75\x82\x8e\xab\x96\xf5\x7c\x53\x0f\x73\x7c\xd9\xa8\x50\xbb\xbf\x61\x74\xbe\x68\x47\x39\xa0\x54\x38\xa2\x24\x7c\xbe\xfd\x2a\x79\x50\xfe\x73\x7b\x59\x52\xc9\xb1\x49\xbd\xbf\xa8\xa4\x03\x94\x70\x10\x91\x60\x6b\x49\xc4\xba\x72\x50\x22\x64\x7b\x9f\x35\x72\x53\x8f\x48\x4b\xed\xc9\x30\x1d\x99\x5c\x3a\xc4\xb3\x71\x53\x1f\xee\xd1\xcb\x62\xbf\x78\x52\x6b\x83\x46\x26\xef\xfa\x2c\xfb\x31\xb6\x20\xe6\xff\xa5\x3b\xb8\x42\xba\x54\x5e\x88\x0f\xc4\x41\x7c\xa3\x12\xbe\x81\xa4\x32\x1f\xff\x71\x6c\x58\x41\xb8\x47\x17\x2a\xe7\x6b\xc1\xb6\x22\x4e\xca\x6d\xeb\x66\xe3\xaa\x7b\x0c\x90\x51\xa5\xe5\xb6\x9b\x97\xf0\xd8\x1b\x81\xaf\x24\xfe\xd7\x19\x7c\x6e\xf0\x8d\x60\xe6\x30\xfa\x56\xc3\x8e\xea\x8b\xc1\x0c\xea\x6b\x73\xf4\xe7\x89\x06\x06\xcd\x43\x72\x38\x5d\x31\x58\x34\x84\x82\x77\x19\x3a\xd1\x2b\xa3\x7b\x62\x63\x74\xf4\x8a\xc6\x51\x85\xf8\x71\xf7\xa1\x50\x87\x47\x8e\x57\xb2\xca\x55\xd9\x60\x0f\x1a\x14\xb2\x07\x3b\x38\xe0\xb5\x27\xfc\x16\x14\x48\x20\x93\x42\xb1\x95\xcd\x0a\xbc\x17\x01\xcf\x5a\x0c\x8c\xf7\x8f\x48\xda\xf3\xf3\x8f\xda\xc2\x51\x08\x31\xe4\x4d\xb0\xc2\x7f\x04\x23\x3c\x0f\xaf\x2c\x50\x0c\x5b\x88\x45\x00\x1b\x5a\xcc\x65\xd1\x5a\x80\xc7\x51\x42\x59\xf8\xca\x2f\xbc\x4c\xdb\x1f\xa7\xf2\xe1\x51\x54\x44\x9c\xfd\x7a\xc3\xb0\xab\x89\x1b\x3d\xef\xab\x68\x50\xc8\x7e\xa8\x1a\x74\xd7\xe2\x00\xd3\xb6\x32\x0e\xd8\xe9\x96\x1c\xdf\x74\xbb\x28\xa2\x8d\xb7\x3c\x80\x0d\xce\xb1\xd8\x91\xdc\x2d\xb5\x73\xeb\xd9\xde\x11\x05\x1c\xc2\x29\x93\xb5\x54\xa1\x50\x89\x92\x02\x42\x6d\x66\x03\x52\x61\xb1\x2c\x29\xf6\x63\xd6\x46\x52\xa0\xed\x9b\x6a\x85\x42\x2c\x12\xb5\xb3\x12\x31\x85\x3b\x52\x82\xc4\x49\x16\xf0\x8b\x97\x3c\x52\x4f\xad\xb3\x80\x57\xa9\x28\xe6\xb2\xfa\xa9\x46\x27\x59\x50\x59\x92\x0b\x24\xef\xd5\xc6\x7a\x2b\x92\x07\xb3\x50\x9b\xd3\xda\x4d\x50\xd8\x01\x9a\x73\x6f\x2e\xb1\xda\x01\x03\xf0\xbd\xd8\xe9\x50\xaa\x95\x66\x14\xeb\x9a\x90\x89\x69\x0f\x8d\xd7\xfe\xa1\x80\x8e\x5b\xe4\x5e\x70\x6d\xd8\x59\x86\x1f\xfd\x60\x5e\xee\x41\xab\x36\x0a\x37\x73\xd0\xa7\x5d\x7a\x27\x29\x6d\x13\xbe\x9f\x69\x0c\x3d\x20\x0d\xe0\x86\x21\xa0\x30\xcc\xa1\x81\x9b\xbc\xb9\xb0\xcf\x25\x91\x84\x07\x87\x9c\xd9\x70\x9a\xc3\x46\xb9\xe0\x48\x4d\xbc\xab\xf0\xd8\x00\x8f\xa3\xe5\xb4\xac\x7e\xd2\x46\x8f\xad\xd2\xf7\x5c\xc2\xa7\x31\x5b\xd6\x3a\x25\x5b\x3f\x78\x20\xca\x91\x06\xb7\x13\xd9\x18\xa4\xa4\xe1\x93\x44\x65\x88\x9a\xbf\x78\x9d\x8b\x84\xe9\xbe\x99\x6c\x05\x15\x5a\x48\xe1\xcd\xf9\xd9\xf5\xf9\xed\x17\x43\x3e\x5a\xd8\xe1\x68\xe8\xa3\xad\xe7\xdb\xf3\x77\xb3\xbb\xf7\xb7\x8b\xb7\x17\xd7\xcf\x81\x7d\xa4\x9f\x0e\x00\x3f\xde\x90\xf6\xc0\x99\x92\x85\xf8\xed\xa8\x33\x39\x2f\xe5\x82\x8f\x48\xc2\x71\xea\x23\x7d\xe6\x0e\x16\xda\xd4\x4e\x70\xc2\x06\x44\xa4\x89\x27\x9a\x93\x4a\x58\x79\x2f\xe8\x2a\x49\x53\xc8\x49\x76\xf1\x02\xca\x77\x33\x9d\x0a\xfb\x8f\xe5\x0e\xa5\x3d\x75\x2e\x97\x15\x69\x0b\xf0\x61\x6e\xcc\x25\x18\xb3\x91\x33\xd3\x01\x79\x02\xb9\x9e\x7d\xf2\x0a\xeb\x44\x0a\x5f\x0d\xd4\xe7\x2f\x25\xeb\xe4\xc4\xa6\x41\x7c\x4e\x8c\x17\x19\x5e\x43\x6d\x4d\x3b\xe3\x2a\xf3\xd3\x9a\x9f\xf6\x47\xd7\x42\x5c\xc4\xe0\x97\x88\x31\x9c\xe1\x56\xf3\x4d\xfb\xd4\x3d\xf5\x4b\x00\xfa\xdd\x8c\x24\x87\xa0\x0a\x48\xe0\xfb\x81\xa4\x81\x40\xd9\x25\x1f\x6d\xb9\x4f\x10\x0b\xa5\x56\xb5\x7e\x36\x5b\xa1\xe9\xeb\x04\x42\x2f\x9c\x68\x56\xa2\xb4\xd4\x85\xc8\xc9\x0f\x34\xfb\xf5\x66\x2e\xdf\x98\xe3\xeb\x25\x9d\x42\x24\xcd\x83\x9f\x40\x24\x8e\xaa\x7c\xdf\x5a\x28\xe1\x0e\xf6\x1d\x3a\xdd\xb7\x82\x4b\xcd\x60\x69\xa4\xa9\xc8\xfd\xcc\xc0\xfa\x08\x11\x93\x44\x2d\xf0\xca\xfa\xf7\x5f\x32\x82\x59\x9a\xae\x30\xf5\xa5\x5f\x73\xb1\x55\x45\x73\x3e\x75\xa5\xbc\x03\xf6\xf9\x39\x67\x4e\x4b\x0a\xce\xd0\x59\x44\xb0\xf1\xd6\x49\x54\x4d\x88\x19\x34\x97\x6e\xb1\xb8\xdf\xa7\xd2\x13\x4e\xa5\x01\xe7\x7a\x78\x4a\xb0\x8d\x32\x1b\xa8\xd3\xad\xf1\x71\x73\x47\xb9\x91\x02\x8a\xcd\x74\x63\xeb\xa9\x53\xd3\x6e\x3c\x06\xcc\x02\x45\x1d\x87\x15\x9e\xb5\x70\xfb\x78\x91\x30\x1b\xac\xea\x95\x85\x7c\x1e\x0e\xbd\x99\x45\x4d\x4a\x55\x58\x36\x0c\x07\x54\x24\xd4\xa5\x79\xc0\xd1\xb0\xf4\xd6\x91\xa8\x4d\xac\x95\xb2\x38\x52\x5a\xed\x36\x44\x77\x56\xf2\x83\xb1\x16\x21\xb3\x80\x65\x13\x70\x6c\x24\x63\x26\xdf\xe1\xe2\x9d\xd5\x39\xe7\x98\x2d\x0f\x42\x6f\x5c\x5e\x5d\x9e\x87\xd8\x8b\x8b\xcb\xdb\xf3\x3f\x9d\x5f\x57\x32\xcb\xdf\x5f\xcd\x2a\xd9\xe1\x37\xb7\xd7\xb5\xa4\xf0\x37\x57\x57\xef\xcf\x1b\x20\x8e\xf3\xdb\x8b\x0f\x95\xc2\xdf\xde\x5d\xcf\x6e\x2f\xae\x2a\xcf\xbd\xb9\xb8\x9c\x5d\xff\x6b\xf8\x97\xf3\xeb\xeb\xab\xeb\xda\xf7\xee\xce\xfa\xe1\x20\x95\x66\xb4\xbb\x7f\x7c\xb4\x39\x20\xf9\x6c\x5d\xc6\x55\x71\xd3\x23\x56\xf1\x40\x28\xdd\xbe\xe9\x68\x13\xc7\xe3\x90\xfb\x1f\x17\x86\xa9\xea\xa8\x59\xf7\xf4\x6a\xac\x95\xae\xcb\xf8\x71\xdb\x9e\x39\xd5\x16\x4f\x01\x6d\xec\x35\x00\xdd\x57\x6a\x8e\x5b\x12\x3f\xc6\xae\xcd\x20\x5a\xb5\xe6\x9d\x5a\x44\x32\x7e\xf6\x9a\xda\x6f\xec\xab\xa7\x27\x95\xda\xc3\xcd\xf3\x54\xbc\x1c\x7d\x95\x0e\x3e\x66\xd3\xde\x93\xd8\x1a\x0a\xf6\xc7\xe0\xe0\x86\x66\x98\x99\x13\x4c\xc7\x2e\xd9\xcc\xf6\x04\x9a\x7e\x1e\xb8\xb1\xf5\xa7\x8f\x34\xeb\x5e\x23\x0d\x19\x51\x6f\x20\x6f\x1a\x53\xef\x5b\xae\xef\xc7\xd6\x9b\x3e\xd2\xac\x37\x98\x7d\x07\xd5\x1b\x1c\xde\x45\x3b\xa1\xcb\x88\x4d\x2c\x2c\xa6\x5a\x3d\x97\x6d\xee\x1e\x09\xd4\x69\x87\xd5\xd1\x2c\x80\xe7\xbd\x5e\x66\x7c\x78\x20\x03\x6a\xe3\x96\x2b\xaf\xf1\x9b\xdf\xc0\xaf\xd0\xc2\x65\x2e\xf8\x7d\xac\x1e\x69\x3c\xea\x50\x57\x36\x68\x37\xaf\x76\x90\xd9\xc3\xed\x11\x51\xe4\x14\x81\x42\xd8\x9d\x2f\x1e\x70\x7f\x09\x31\x74\xa3\x0d\x16\xc8\xaa\xd6\x29\x71\x20\x1a\x2f\xfd\xe8\xcc\x25\x5a\xf3\x6d\xd2\xac\x66\x54\x4d\x8d\x88\xc4\x02\x9a\xea\x6c\x68\x0c\xae\xeb\x60\x60\x29\x23\xa5\xcc\x01\x1d\xb8\xcc\xe1\xce\x04\x1d\x92\x48\x70\x26\xe7\xe6\xc2\x93\x8b\x28\xd1\x22\x90\xa7\x6a\x3d\xb1\x3f\x1f\x27\x66\x51\xf0\xa2\xd5\xed\x3a\xd8\x1f\xce\xa3\xa2\xe4\x29\xfb\x5c\x8a\x7c\x47\x5c\x80\xe8\xab\xc4\xbf\x44\x5c\x62\xea\x4b\x21\xb6\x19\xe4\x97\x87\x39\x1b\x73\xf9\x2b\xa2\x20\x60\x08\x5e\x68\xf6\x27\xc0\x70\xd8\x87\xe9\x10\xde\xf2\x02\xce\xe2\xbf\xe0\x37\xdc\x6f\xd3\xb9\xac\xc8\xbd\x04\x6f\x55\x94\x5f\xa6\x73\x69\xf5\x16\x62\x15\xe9\x29\xdc\xf8\xa6\x2a\x5f\x9f\x92\x52\xb1\x99\xec\xea\x7e\xa9\xd4\xfd\xa9\x90\xa7\xe0\x93\x2a\x4e\x79\x59\xa8\x53\xc0\x7f\xe1\xf8\xeb\x53\x2b\x68\x6a\x15\x61\xf5\xe9\x26\x79\x10\xf0\xff\xa6\x9b\x62\x9b\xfe\x83\xce\x36\xbf\x9d\xac\xd3\xfc\xc4\xbc\x7b\x12\xbe\x7b\x62\xdf\x3d\xb1\xef\x9e\x98\xd7\xf0\xff\x65\x3b\x0c\xef\x88\xdf\xb8\x39\xcb\x26\x73\x99\x48\x2d\xf2\x02\xac\x9f\xc7\x3c\x29\xbc\xae\xce\x8e\xbd\xf8\xaf\xff\x62\xd3\x9c\x3f\x62\x6e\xe6\x5b\x5e\xf0\x8f\xe8\x5f\xfc\xef\xff\x7e\x01\x01\x55\xcc\x52\xca\x78\xfe\xb9\x14\xc5\x5c\x6a\x61\x16\x21\xfb\xff\xe6\x12\x22\xb0\xdb\xdd\xa2\x40\xbf\x2b\xfa\x20\x63\xcd\xfe\x05\xcb\xbc\x40\x5e\xcc\x58\x9b\x92\x3a\xf2\x23\x12\x9e\xb6\x68\x60\x77\xb8\xe8\x3f\xa7\x6f\xe9\xf9\x11\xcb\xfa\x73\x5a\x5d\xd5\x56\xd9\x45\x7f\x4e\xe1\x00\x4d\x15\xb7\xe8\x33\xe6\x26\x2f\xdc\x93\xa9\x72\x6d\x6b\xa4\x01\x0d\x78\xd6\x30\x7d\xfb\x5a\xb9\x41\x6e\x6e\xeb\xb9\x6f\x6c\x23\x10\x2b\xf0\x71\x08\x88\x9e\x27\x66\x85\xdc\xa0\x27\x14\x2c\x37\x6c\x39\xd8\xa4\x14\x3a\x77\xe5\xa1\xe3\x42\xff\xf1\xf5\xe9\xe9\x84\xad\x35\xfc\xcf\xf2\x33\xfc\x0f\xc0\xa1\x9e\x8a\x5e\xb6\xd1\x99\x0e\xd9\xd7\x1c\xe5\xfd\x23\xf1\x14\xb0\xc0\x2f\xc1\x68\x5e\x9b\xa6\x6f\x4a\x19\xa7\xc2\xe7\x74\x56\x42\x22\xa9\xb2\x1a\xfc\xe8\x18\xab\x6b\xc7\xc0\x18\x2f\x45\xc4\xcd\xc6\xd7\xf8\x36\xa2\x65\xd5\xaa\x10\x12\xbd\x61\xb9\x97\x96\xe3\xe8\xb9\x02\xb3\x18\xb0\x9d\xbc\x20\x0c\xbd\x80\x3f\xc2\x47\x80\x22\x7c\x52\xff\x89\xed\x54\x49\x6c\xd7\xc0\xe1\x1a\x8b\x28\x05\x49\x01\xcb\x63\xc3\x72\x51\x94\xb9\x64\x9c\x65\x5c\xc6\x5c\xc3\x0c\x5c\xe5\x10\xed\xcc\x19\x6f\x56\x74\x82\xf8\x62\x55\x16\xc0\xce\x84\xc8\x82\xb0\x27\x90\x8e\x3c\xa8\xf3\x24\xa8\x04\x9e\x09\xc0\x8a\xdc\x78\x71\x3a\x97\x56\xfc\x8c\xc0\x7d\xe8\x29\x8b\x54\xb6\x23\xee\x9d\x7a\xa7\x27\xd6\x73\x46\xdd\x3d\xf1\x78\x93\xfa\xb3\x13\x96\x54\x43\x6b\xc0\x7c\x5e\x04\xf2\xcd\x56\x00\xfb\x3b\x21\x23\x15\x8b\x5c\xbf\x34\xcb\x30\x71\xf7\x0e\xb4\x1f\x12\xed\x07\x03\x76\x29\x73\xb8\x91\xb7\xd0\x14\xef\x24\x82\x4c\xef\x54\xb8\xb2\xdb\xec\x9c\xfd\x4b\xe5\x5b\x47\xc1\xb4\xd5\x97\xfe\xf3\x8b\x22\x62\x42\xa0\xaa\xbd\x73\x1e\xee\x82\xc0\x25\x1b\xee\xb8\x58\x28\xda\x38\x64\x9c\x58\xad\xdc\xa4\x00\x39\xbe\x5c\xe8\x62\x2e\xe9\x04\x9e\xb0\x95\xe0\xc6\xce\x9b\xb0\x48\x3f\xe0\x66\x8c\xc7\x7d\xf1\xa8\x3c\x06\xc7\x0a\xad\x00\xba\xb7\x52\xb8\x77\x12\xe3\x63\x80\x28\xe0\x51\x81\x00\x83\x4e\x59\x75\x6b\xaa\x40\x67\xb5\x6e\x88\x07\xf4\x83\xd5\xed\xa8\x6b\x64\x85\xb2\x31\xd0\x13\x3b\x0c\x14\xb3\x7a\x3d\xf0\x07\xb3\xf1\x60\xeb\x10\x06\x12\x6c\x8e\x60\x71\x13\x6e\x16\xd7\x99\x8f\xe1\x86\xe4\xe9\xe0\x9b\xe9\x5a\x54\x3d\x1d\x01\x15\x38\xcc\x6f\x61\x5e\xdd\xeb\xb0\xd2\x22\xb7\xa2\x22\xd8\x56\xa4\x3a\xdc\x24\x79\x7c\x92\xf1\xbc\xd8\xd9\xe9\x9b\x26\x4b\xd0\x22\x48\x93\x7b\xc1\x66\x79\xae\x1e\x9f\xba\x17\x3a\xb7\x96\xae\x1b\xf6\x31\xd0\xfc\xb1\xb7\xfc\x56\xa2\xd3\xba\xbb\xe3\x30\x52\xd5\x2e\xc7\x47\xeb\x77\x72\x51\xe4\xbb\x85\x99\x88\xdb\xac\x73\xa7\x18\x94\x05\x32\xdc\xc8\x1d\xc7\xd7\x5a\x73\x61\x74\xf2\xb5\x56\x46\xf5\xdb\xe1\x6b\x6d\xa1\x62\x6d\xf2\xb5\x5e\x5c\x5e\xdc\x5e\xcc\xde\x5f\xfc\xdf\x5a\x89\xbf\xce\x2e\x6e\x2f\x2e\xff\xb4\x78\x77\x75\xbd\xb8\x3e\xbf\xb9\xba\xbb\x3e\x3b\xef\x27\x60\x6a\xd6\xde\x9b\xe0\x27\x2c\xfc\xce\x6b\x76\x1b\x00\x35\x30\x7b\x82\xec\x6f\x12\xe3\x84\x59\x65\x16\x73\x22\xd7\x13\x58\xa8\xaf\xd9\x79\x9e\x5f\x6c\xf9\x5a\x7c\x2c\xd3\x14\xe0\x54\x98\xaa\x74\x96\x0b\xb8\x78\x4e\xd8\x47\x15\x5f\x04\xef\x41\x7e\x65\x6b\x33\xe0\xfb\x3c\x8e\x73\xa1\x35\x7e\x7e\x42\xdf\x0f\xc0\x43\x2e\x77\x93\xc0\x73\xfc\x81\x27\xa9\xb9\xbf\xbd\x66\x6f\x78\x74\xaf\x56\x2b\xcc\x07\x9a\xb8\x4c\x30\xf6\xb9\x54\x05\x67\xe2\xb7\x08\x48\xc7\xda\xe7\xc9\x7b\xb5\xfe\x0a\x50\xe5\x01\xe1\xa9\x8e\x4b\x0a\x88\xae\x2d\xda\x8f\xf3\xf6\x8d\x80\x5a\xf9\x01\x5f\x7d\x87\x6f\xb6\x3b\x28\x8b\xf4\x09\xf2\xfd\xdf\xab\x75\xbb\x04\x0e\x58\xd7\xa4\xdb\x43\x81\x84\x88\xd8\x43\xd4\x9a\xe9\x44\xde\xcf\xe5\xaf\x1b\x21\x99\x2a\x73\xfc\x13\x5c\xf3\x8d\x99\x99\x96\x7a\x23\x40\x13\x77\xc2\x1e\x05\xdb\xf2\x1d\x9a\xcd\x70\x27\x70\xba\x1d\x30\x65\xe0\x14\x31\x6f\xa7\x89\x34\xbb\x45\x96\xd8\xbc\x84\xfa\xd0\x3f\xc5\x8d\xcb\x52\xee\xf1\xe3\x19\x71\xfb\xce\xd3\x0a\x3e\x0f\x5c\x65\x1e\x37\x69\x01\x42\xb4\x73\x83\x2c\xa8\x52\xf7\x65\xe6\xc9\x39\x5f\xd8\xe0\x24\x74\xf7\x83\x4a\x62\x16\x97\x59\x9a\x44\x6e\xdf\x7d\x54\x79\x27\x03\x31\x26\xd0\x0c\x3f\x75\xea\x79\x6e\x7d\x0d\x6b\xc9\xce\x09\x90\x74\x3d\x5c\xc4\xcf\xcc\xc6\xcc\x12\x19\xa5\x25\x08\x9e\x95\x5a\xe4\x27\x45\x9e\xac\xd7\x60\x80\xdb\xe4\xc5\x6f\x9f\xae\xd9\xd3\x41\x1e\x9f\xa7\x17\x66\xd1\xa7\x6a\x9d\x44\x3c\x0d\xc1\xcd\x1e\x15\xe1\xf8\x60\xed\xb2\x27\x39\x58\xc8\x83\xb0\x15\xea\xa4\x74\xca\x72\x01\x94\xc4\x0b\xd8\xca\x17\xb4\xdd\x1d\x53\xef\x15\x33\x17\x74\xac\x57\xc8\xd6\x6a\xc3\x0b\xf6\x84\xf3\xdf\xb6\x9a\x60\x60\x62\xa2\x5e\x38\x53\x8f\x52\xe4\x60\xc1\x02\xec\xc3\xb4\x54\x2a\xb0\x4d\x9c\x4e\x98\xc3\x27\x5b\x9d\xbc\x95\x03\x62\x63\x2a\xf0\x3a\x79\x10\xf2\xcb\xd3\x6b\x07\x1f\x88\x78\xb4\x11\x0b\x6b\x97\x3f\xf5\x96\xe5\x0e\x80\x91\x9b\x95\x15\xec\x08\xb7\x52\x17\xde\x84\xab\x13\xd6\xb8\xb9\x77\x61\x20\xb1\x27\x23\xcb\x54\x62\x11\x8b\xe8\xfe\x8b\x6f\xcd\x1e\x64\x65\x2b\xc2\x38\x7b\x2b\xa2\x7b\x76\x77\x7d\x81\xe9\xcd\x49\xc1\xcc\x56\xa0\x37\x5e\x80\xa8\xf3\xee\x56\xf0\xf5\x33\x50\x54\x0d\x55\x50\xf2\xa4\xf9\x4e\x37\xce\x54\x88\x00\x51\x90\x2f\x69\x36\x49\xca\xa5\x01\x20\x18\x2f\xac\xae\x0e\x38\xe2\x99\xde\x82\x8c\x4e\x59\x04\xda\x73\x29\x5f\x8a\xb4\x83\x42\x32\x53\xf1\xc2\xc6\x49\x8e\x05\xf3\x34\xca\xb2\x7e\x0c\x8a\x3a\xda\x3c\x06\x6e\x2c\xd6\x5b\x7a\x90\xdd\xff\xa8\x03\xbe\x10\x15\x32\x59\xc3\xbd\x9e\x6b\xc8\x57\x5f\x25\x6b\x1b\x6d\x4b\x56\x24\xf6\x83\x0c\x05\x20\x6b\x6f\xf6\x4b\x53\xd2\x47\x15\x13\x4c\xcf\xb1\xb2\x19\x2b\x48\x90\xf7\xc4\xe3\x2a\xc2\x2a\x38\xe9\x7f\x0d\xbe\x01\x5d\x08\x1e\x33\xb5\x22\x6f\x62\x96\xa5\x09\x70\x14\xc7\x48\x87\x0e\x74\x20\xba\x8a\x8e\x0f\x4b\xb3\x95\x0d\x58\x4b\x3e\x5a\x20\x5e\x6f\xbc\xd1\x07\xb9\x4c\xbb\xaa\x4e\xee\xba\x4d\x75\xac\xac\x9d\xcb\x47\x3a\xf4\x0a\xdd\xef\x4d\x5b\xa7\x6a\x09\x1d\xd5\x0d\x8a\xeb\xd9\xa0\xcd\xee\x94\x27\xf1\x98\xe3\xdd\xf6\xc9\x95\x7b\xb5\xaf\x82\x57\xd6\xd3\xe1\xbe\x64\x87\x99\x11\x83\x7c\x18\xc1\x1f\x9b\x08\x6d\xba\x56\xbb\x08\xa1\xb3\xc6\x0b\xd2\x4f\x80\x55\xe1\xb6\xe3\x8e\x6b\x75\xb5\x2d\x47\x0d\x74\x93\xe9\x65\x4f\x5f\x7a\x72\x98\xfe\x41\x3e\x82\xae\x03\x57\xae\xe3\xec\xe8\x76\xa4\xc9\x58\xc4\x8b\x03\xda\x70\x4e\xef\x0e\x6b\x8b\xeb\x69\xac\x1e\xb8\xbc\xe4\x89\x39\x19\x63\x9e\xc7\xbe\x1d\x13\xb8\x11\x47\x3c\x03\xaf\x33\x78\xf1\x1f\x5e\x4d\xed\x37\xae\x7d\x32\x8d\xd9\x1e\x30\xc5\x1d\xe1\xca\xaa\x45\x7c\x64\xdf\x3c\x72\x93\x14\xd1\xcc\x66\xe6\xf8\xe9\x5a\x49\x33\x19\x34\x77\xeb\x33\xcc\xee\x57\xc7\x4c\xae\xe7\xd8\x3b\xca\x42\xf9\xe0\x06\xb4\xe7\x02\xf8\x5e\xc3\x04\x36\xd8\x20\x2f\xe2\x0e\x60\x84\xb5\x36\xed\x26\x34\x02\x6e\x3b\x0a\xf0\x9b\xe5\xc2\x86\xc9\x76\xa2\x70\x34\x06\xa9\x15\x74\x83\x28\x90\x6b\x75\x95\x98\xc6\xd2\x32\x38\x32\x31\x88\xd9\x90\x65\x1b\xa9\x6d\xa6\x24\xa0\x70\x30\x29\x6b\x2e\xa9\x70\x2b\xcb\xed\x02\x49\x95\xcc\xbe\x09\xf9\xef\x30\x4f\x44\x68\x95\x3e\x50\xc4\x30\x50\x8f\x00\x41\x3f\x53\xc1\x33\x73\x15\x32\x17\x7f\x08\x65\xd3\x41\x06\xc0\xf7\x9a\x36\x75\x2e\xd6\x89\x2e\x44\x98\x0c\x19\xbe\xff\x64\x32\xa2\x15\x5f\x41\x5f\xd7\x77\xca\x88\xee\x33\xfa\xcd\xfe\x34\xa2\x3e\xbb\x4c\xc4\x17\xee\xbd\xfe\xc9\x50\xcb\x57\xf7\xdb\x61\xe5\xbc\xc3\x39\x80\x97\x1d\x8d\x54\x5d\xda\xe9\x3e\xb8\x41\x22\x12\x25\xee\xf1\x7b\x66\x88\xd6\x25\xcf\xb9\x2c\x84\xd0\x73\x49\x71\x56\xa4\x9c\x0b\x59\x55\x6a\xb8\x3f\x67\xca\x47\x4a\x17\xc8\xe0\x04\xaf\xac\x78\x92\x96\x79\xe7\xed\x1a\x67\xe5\x41\x2c\x0b\x7d\xbd\x74\x06\xc5\xb2\xb6\x41\x73\xf9\xba\xc1\x2a\x72\x24\x21\xf5\x28\x69\x35\x9d\xb5\xa3\x09\xf6\x70\x19\x3e\xde\xce\xb5\xda\x91\xc2\xfb\xa3\x5e\x64\x6a\xc4\x8e\xf7\xf3\x8f\xfa\xa3\xea\x48\x7e\xd6\x9f\x1b\x2e\xc0\x1e\xb4\xc0\xe7\x2e\x25\x0c\xae\xef\x21\xd0\xb6\xcf\xf3\x30\x88\x4d\x73\x6f\x38\xae\x73\xef\x82\x59\xbb\xe1\x32\x4e\xcd\x8d\x9c\x17\xb5\x13\xc8\xc3\x9a\xcd\x0d\xa0\xb0\x9b\x63\x77\x0e\x1b\xa4\x84\x2c\xa2\x46\x3e\xe1\xbe\x7e\xaa\x25\x22\xf6\x42\x07\x6b\x5f\xa9\xa6\x07\xb6\xa5\xa5\x78\x1b\x86\xf4\x67\xdd\x82\xfd\xea\xf6\xcb\x79\x58\xf7\x2f\x64\xbe\x54\xd7\xda\x2a\x59\x7f\x03\xf7\xe6\x0f\xcd\x23\x21\xa2\x3d\x87\x0e\x6a\x07\xe6\x3f\x72\xd7\x81\xbc\x29\xb3\x6b\x87\x04\xda\x73\x49\x3a\xdc\x18\x4c\x87\x28\x2a\xf2\xa5\x69\xf6\xca\x25\xd3\xbe\xfa\x47\xcb\x96\xb5\x63\x2b\x98\x54\x40\x49\xa7\xa2\xa8\xcc\x21\xd2\x4d\xde\x38\x26\xf0\x10\xd6\xa3\x78\x53\xc0\xf4\x70\xf8\x24\xb4\x13\xdb\xcc\x24\xe7\x7e\xad\x34\xea\x16\xbc\x6e\xa8\x28\xee\x0e\x7d\x12\x8a\xca\x75\xc1\x74\x21\xb2\xd6\xed\xb7\x62\x5d\x56\x45\xf3\x8f\xb0\x2f\xbd\x64\xff\xc0\xa5\x33\xe2\x30\x9a\x05\x1e\x92\x3f\xdf\x5c\x5d\xb2\x8c\xef\x00\xea\x07\x64\x59\xe6\x51\x20\x0c\xad\x6f\x54\xfb\x46\xa0\xda\xf8\xea\xae\x82\x7d\x6a\x31\xc3\xed\xee\x78\xfa\x62\xd3\x58\x84\x39\x43\x53\xd2\xec\x59\xb9\x4a\x4f\xb2\x94\xcb\x00\xcd\xad\xa7\xac\xf6\xf9\x30\x7c\xef\x02\x79\x04\x90\x82\x0a\x80\x87\x8c\xe6\x42\x5e\xb6\xe2\x7d\x81\x66\xc6\x4e\xa8\xe3\x22\xf6\x9d\x7b\x44\x2f\x8e\xf1\x03\xca\x6f\xf0\xc8\x2c\x13\x24\x8b\xb0\x28\x04\x07\x64\xe1\x1a\x30\xa6\x9d\x0c\xde\x3c\x4a\xb9\xd6\xbd\xa0\x94\xe7\xa0\xa0\x0f\x93\xf4\xf6\x6f\x5f\xd5\x7a\x22\x6a\x0e\xa8\x3c\xf0\x5e\xea\x7e\x06\x72\x00\xbb\x75\x79\xb5\xad\xc0\xde\x0f\x54\x1f\x28\xd2\x4f\xf4\x48\xf0\x3e\x32\x39\xde\x8b\x9d\x75\xd0\xd1\x56\xc5\xb7\x62\xe2\x7c\x8b\xce\x79\x16\x60\xdc\x9a\x05\xcf\x25\x80\x40\xdf\x85\xd5\x63\xef\x94\x9a\x20\x1c\x91\x3e\xce\xb1\x58\x1e\x02\x7a\xe6\xf2\x9d\x52\x53\xee\x2e\xb1\x54\x7f\xda\x6e\xea\x1f\x24\x10\x10\x40\xec\x6a\xc3\x39\x7c\x6d\xfe\x94\x48\xd4\x85\x4b\xb6\xe6\x02\x45\xfd\x04\x33\x0a\x2a\x64\x65\xc8\xd5\xa3\x66\x31\x32\xa8\x94\x89\xde\x40\x94\x01\xc3\x7a\xf0\x7d\x3a\x52\x10\x7f\x94\x73\xa9\xcd\x1a\x86\xc8\x84\x78\x10\xe4\x9e\xac\x84\xd4\x2f\xde\xbe\x77\x28\x1d\x5c\x97\xa4\x14\xd9\xb1\xda\x82\x4b\xc7\x31\x97\x73\x40\x57\x8f\xe0\x6f\xa3\x3c\xcc\x0f\x3c\xeb\xcb\xfd\x3c\xba\xc4\x7d\xa3\xe4\xf8\xa3\xea\x37\x2a\x90\x90\x06\xf1\xb8\x4a\x02\x68\xd8\x7b\x77\xf2\xc8\x13\xa7\x95\x93\x7e\xbf\xd6\xc9\x60\x07\xc3\xc8\xad\x62\xff\x71\x13\x70\x53\x3a\x84\x9c\xbb\x0b\x9a\x8d\x1d\xa4\xb9\x80\x83\x0e\x97\xf4\x94\xdd\x08\xc1\x3e\x41\x4f\x99\x8f\x7d\x22\xe9\x47\x00\xfd\x16\x3c\x69\x55\xe6\x82\xa7\x2f\xe4\x4a\x1d\xb7\xff\xe7\xeb\x06\xa8\xf4\xa8\x5e\x69\xaf\xe7\xb1\xb0\x55\x48\x48\x96\xcf\xcb\xa2\x31\xe8\x60\xa8\x8d\xf5\x47\xef\x6f\xa2\xdc\x5a\x5b\x53\x63\x92\xc1\x10\x1f\xc2\xd3\x56\x9b\x24\xa6\x95\x13\x24\x53\xbf\x97\xea\x51\xe2\x7e\x4c\x5f\x62\xdf\x99\xf5\x07\x36\x0b\x86\x41\xd0\x12\x2c\x71\x37\x7c\x09\xec\xee\x33\xf7\x6f\x76\x83\x11\x5f\xac\x33\x68\x36\x69\xb0\x77\x49\x6d\x09\x0e\xf0\xef\x66\x13\xf6\x66\xc2\xce\x26\x6c\x3a\x9d\xbe\x9c\xa0\xa0\x3c\xd5\x08\x5f\xc1\xad\xbf\xe0\x6b\x53\x36\xa9\xd8\xac\x82\x0f\x80\x2e\x9b\xb1\x4f\x2c\xe7\x1f\xf7\x4f\x05\x5e\x35\xdb\x04\xcc\x44\xa6\xb4\x29\x42\xc7\x44\x1b\x95\xf8\x4a\x01\xd0\x5a\x44\x2a\xb7\x50\x6d\x5d\xa8\xdc\xc2\x4e\x1f\x78\xce\x13\x09\x04\x0d\xbc\x09\xba\xa7\x2f\x07\x9c\xf3\xe2\x37\xbe\x85\xf6\x27\xd2\xd1\xaa\x9a\x6e\xba\x75\xf5\x2f\x76\x19\x85\x95\x1e\xf3\xa4\x28\x8c\x41\xa6\xe7\xf2\x86\xbd\xfe\x17\x36\xcb\xb2\x54\xb0\x19\xfb\x1b\x7b\xc3\x25\x97\x9c\xbd\x61\x7f\x63\x67\x5c\x16\x3c\x55\x65\x26\xd8\x19\xfb\x9b\xe9\x36\x53\xde\xa5\x32\x16\xd0\x6e\xc2\x38\x93\x65\x8a\x86\xde\x77\x16\xd2\xf9\xd2\xb5\x8b\xfb\xd1\x59\x8a\xe2\x51\x08\xc9\xb4\xda\xd2\x51\xf8\x57\x77\xfa\xeb\x44\xae\x53\x51\xd0\x7c\xa8\x82\x6f\xf1\x03\x27\xd0\xd2\xd7\x73\xe9\xfc\xd4\x7f\x35\x35\xfe\x2b\xfb\x1b\xbb\x2c\xd3\xd4\x54\xc9\x6c\x34\x66\x22\xbd\x66\x36\x19\x4a\xc8\xe9\x63\x72\x9f\x64\x22\x4e\x38\xa4\x43\x99\x7f\x9d\xde\xc2\x68\x2f\x4a\xcf\x7c\x19\xae\x69\xa7\x83\x75\xcc\xd6\xf3\x2c\xd4\x0a\x4e\xa5\x2d\xb4\x56\x3a\x31\x17\xe1\xab\xe3\x8d\x60\xcf\xed\x4b\xeb\x81\xee\x28\xa8\x61\x16\xaa\xc1\x1d\xb4\x05\xd4\x0e\x5b\x5b\x56\xcb\x51\x10\x1e\xea\xc7\x6e\xb2\x20\x6d\xf8\x05\xcd\xf1\x5f\x1a\x5d\x34\x98\x3b\x9f\xe4\x9b\x2a\x64\x15\x60\x4b\x7a\xc2\xae\x41\xb1\x5d\x27\x04\xf5\x4b\x55\xdb\xb1\xd2\xc5\x2a\x19\x24\x82\x59\xab\xec\x9d\xa3\x7a\x96\x0a\x70\x10\x32\x49\x4f\xcd\x52\x3d\xbd\x54\x52\x30\xae\x75\xb2\x46\x92\x31\x70\xe8\xa0\x7a\xa4\x35\x0a\x6e\xab\x26\x6b\xb0\x04\xc0\x3e\x30\x55\x42\x80\x6a\x61\x76\x01\x33\x04\xe9\x6e\x2e\xcd\x1b\x74\x22\x41\xb2\x4a\xe2\x78\xa7\xf1\x6b\x44\xf5\x6c\xbf\x45\x1b\x72\x50\x78\xcb\x04\xeb\xcb\x84\x3f\x62\xc2\x51\xe2\xe5\x11\x11\x9f\xcb\x80\x87\x91\x4a\xb3\x24\x3d\x88\x5e\x58\x8a\x54\xc9\xb5\x99\x15\x5d\x9b\x80\xda\xf2\x6e\x06\xf0\x91\x55\xc0\xc2\x3a\x6b\x60\x0e\x4b\x7a\x84\x86\xc4\x9c\x93\x49\xec\x5d\x3a\xba\x5c\x1a\x3b\xc2\x45\x1b\xdc\x69\x48\x8d\xeb\xa2\x05\x38\x0e\x25\x72\xa7\x45\x0e\xec\xef\x88\x53\x72\x91\x2c\x3c\x38\x3d\x65\x0e\xb6\x68\xd8\xa2\xea\x85\xb7\xb7\x7b\xbf\x28\x52\xd6\x20\x48\x18\x30\x1f\xbf\x26\xd2\x7d\x08\xfe\xfd\xdd\xec\xe2\x7d\xed\xb9\x26\xfe\xbd\x05\x24\x7f\x7b\xf1\xe1\xfc\xed\xe2\xea\xee\xb6\xf1\x9c\x29\x8d\xfe\xb4\x07\x02\xdf\xd9\x7b\x4f\x01\x02\xfe\x8c\x2a\x54\x0b\xb5\xb2\xf9\xd0\xc3\xcf\xf4\x86\x0e\xd8\x30\xac\x59\xc8\xfd\x1f\xea\x65\x35\x27\x4e\x27\xab\x83\x5c\x50\xb4\x6d\x58\x65\xeb\x1d\x76\x25\xdf\xe1\xeb\x1f\x55\x9a\x44\xfd\xd0\x55\x7b\x5c\x6d\xd4\x63\x0b\x16\x70\x29\x00\xcb\x4d\x2e\x3f\xaa\x14\x5a\xe8\x85\x88\x0a\x1f\x4d\x6e\x36\xee\x7f\x35\x5c\x6e\xff\x1d\x1c\x3d\x71\xae\xdb\x40\x17\xd8\xc5\xa7\xe1\x6c\x05\x9a\x5c\x90\xbb\x40\xf7\x3a\xf8\xf6\x00\xb7\x11\x71\x8a\x3a\x54\x7a\x1e\x36\xe8\xc7\x8d\x4a\xc9\x23\x87\x94\xc3\x73\x99\x89\x3c\x52\x00\x33\x43\x36\x0b\xc5\xa2\x4d\x92\xc6\x5e\x53\xea\x3b\xc0\xe5\x03\x7a\xf6\x25\xa9\x85\x0a\x87\x9f\xb0\xc5\xf7\x9c\xba\x76\xda\xbd\xc5\xd5\x7d\x14\xf6\xe8\x29\x81\xb6\x7d\xd3\xfe\x57\x02\x84\x62\x57\x10\x49\x58\x2d\x12\x6e\x3a\xbd\x52\x9f\x51\x4e\x7d\x73\xdc\x92\x5c\x50\xe4\x2f\x4e\x45\x6d\x5c\x69\x9a\xd5\xbb\x12\xa8\xa3\xd1\x93\x8a\x30\x30\x2d\xa0\x3a\x5b\xc1\xd1\x16\xf3\x44\xae\x34\xa8\x73\xe9\x63\xff\x2f\x74\x68\x97\xb5\x8e\x33\xfa\x5f\x2d\x94\x77\xc2\x5e\x54\x1a\xfa\x02\xa8\x85\xa5\x82\xef\x51\x7c\xb6\xd2\x35\x30\x5d\x27\x2c\x29\xe6\x32\xd1\x38\x33\x73\x91\x8a\x07\x53\xbb\x30\x3e\x40\x88\x35\x7b\x77\xb6\xcd\x86\x6c\x10\x6e\x49\x04\x68\xda\xd0\x22\xcc\x43\x8a\x5a\x0c\x4c\xc6\x42\x1b\xbb\x11\xd4\x82\xc4\x6f\x66\x01\x24\x10\xfe\x42\x68\x53\x2c\xa4\xad\x1f\x20\x9e\x50\x62\x7b\x2e\x2f\x56\x90\xc9\x0d\xf9\xe3\x71\x8c\xb7\x50\xab\x1f\xe3\xf8\x02\x13\x8a\x07\x28\xba\x93\xdb\x81\x20\xb1\x5b\x5c\x49\xe2\x41\xe4\xbb\x02\x9c\xba\xd0\xaf\x52\xf0\x62\xc3\x92\x62\x02\x44\x8f\x76\xa7\x9c\x4b\x1e\xc7\x94\x00\x8b\xc5\x99\xae\x81\x79\xdf\x33\xce\xf4\xfb\x52\x3d\xf4\x19\xb6\xc7\x62\x37\x71\x55\x67\x29\x97\x0b\x3c\x41\xbe\x02\x7a\x33\xd0\x21\xee\x0a\xe3\x97\xcb\x85\x23\xa7\x7a\x92\x7a\x06\x52\xf5\xa1\x3a\xb8\xb1\x63\xed\x87\x26\x38\x19\x3c\x39\xbd\xbd\x9e\x38\x3f\x0d\x21\x67\x72\x66\xd1\x05\xc3\x77\x01\x0f\xec\xe4\x35\x94\x8d\x9d\xad\xfb\x90\x9d\x76\x06\x7c\xab\xd8\xbb\x21\x23\x5f\x3b\x43\xea\xc3\x3e\x1e\xf6\xd5\xb0\x10\x0f\x82\x7e\xed\xa9\xd6\xf3\xc2\xbf\x3a\xfd\x28\x4d\x18\x98\x6d\x6d\x10\xe1\xc5\x14\x28\x81\x7e\x38\xe7\xe6\x69\xd7\x99\x0e\xef\x61\xaa\x05\x21\xfd\x94\x3e\x6a\xd8\xa7\x86\x7a\x4a\x3c\x83\x02\xd4\x6b\xca\x2e\x24\xb3\xe6\xde\x84\xbd\xc0\x89\xa5\x5f\x90\x0b\x92\xc4\xca\x09\x2e\x11\xd3\xea\xa1\x9c\xf3\x3a\xcc\x08\x33\x7f\xfc\x72\xc3\x48\x50\x2f\x41\xe9\xb3\xf6\xcb\x9b\x04\x32\x8f\x0e\x21\x97\xc0\x28\xe2\x12\x0b\xa0\x43\x12\xaf\xdd\x3b\x34\xda\x95\xf7\x66\xfb\x06\xdb\x78\x17\x7b\x63\x5f\x34\x5d\x94\x95\x74\x9e\xda\xdf\x99\xca\xe7\xd2\x96\x46\x2e\x49\x8d\x12\x6f\xf5\xa2\x82\x44\x08\xb2\xf9\x83\x99\x0a\xc1\x60\xab\xea\x07\x62\x91\x9e\x45\xb9\xbe\x0b\x00\x0e\x66\xe9\x30\x88\x40\xbb\xef\xbf\x66\x0c\x0f\x33\xc1\xb7\x78\xcc\xd7\x99\x56\xd3\xd4\x74\x4a\x52\x58\x62\xd7\x20\x49\x49\x97\x40\x4f\xbc\x2a\xcd\x66\x14\x70\x38\xcf\xa5\xe9\x3c\xb6\x4a\x00\xbd\x4f\xfd\x32\x97\x1f\x94\xb6\x9c\x18\xda\xf7\x87\x0d\x2d\x53\xb7\xbd\x70\xe2\x86\xf4\x87\xb7\x70\x68\x93\xcf\x1f\xd9\xad\xdc\xd1\x02\xd9\x69\x44\x6c\xb3\x53\x65\xee\x1b\x15\x71\x39\x97\xff\x61\xba\x07\x05\xf6\xa5\x1d\x56\xb5\xc2\x25\x0c\x23\x08\xc1\x92\x4f\x58\xe8\x77\xff\xf8\xf2\xd3\x4b\xcc\x26\x29\x35\xe8\xc9\x4e\xaa\x07\x88\xa3\xf3\x2f\xd3\x14\x22\xd1\xb6\x05\x8e\x52\xc6\x7f\xa2\x17\x89\x45\x97\xba\x85\xac\x9a\x18\x43\x16\x7a\xdf\x0c\xf6\xce\xe7\x19\x8b\x78\x11\x6d\x4e\xac\x2d\x47\xdb\x98\x3d\xfd\x68\xf8\x50\x58\xd2\x58\x5a\xed\x8c\xf6\xe6\xc2\x99\x6f\x1d\xc7\x66\x65\xbe\x98\x26\x00\x96\xea\xb6\x2e\xef\xe4\x28\x80\x71\x72\x22\x12\xa4\x6a\xe7\xb9\xc7\xad\x5a\xa4\xbf\x71\x92\x97\x5c\xf2\xad\x88\xd9\x0b\xc8\x7b\x7c\x61\x07\x7f\x2e\xb3\xe5\x34\xdd\xad\x0a\x22\x6a\x33\x9d\x32\x05\x19\xb2\x3d\xa7\xdc\x22\x6e\x5e\x93\xf6\x74\x76\xe7\x45\xab\xdd\xd6\x71\x7d\xe3\xbe\x34\xdc\x60\x41\x1f\x97\xeb\x9d\x9b\x2a\x2a\xac\xaa\x87\xc0\xf5\xfd\x84\x2d\x73\x2e\x41\x41\x26\x0e\x8d\x2a\xbf\x3a\xe1\xf2\x8c\x2c\x68\x36\x11\x4a\xf2\x74\x07\x19\x20\x93\xb9\x44\xca\x38\xe0\x16\xdf\x45\x69\x12\xb1\x75\xce\xb3\x4d\xcd\x0e\x12\x0f\x42\x16\xa0\xac\x7c\x2d\xb8\x3e\x2e\x5a\x9f\xd7\x4b\x60\x83\xe3\x29\x33\x09\xb7\x0f\x2e\x6b\x24\xbf\x50\xbd\x8e\xa3\x05\x10\x7a\x22\x5e\x8c\x23\xf8\xd9\x4b\x43\x5b\x21\x37\x24\xa6\x2d\x88\x40\x9a\xc6\x31\xfb\xd5\x7d\xe1\x6f\xec\x57\xe2\x9e\xb1\x98\xce\x63\x43\xf6\x8e\xcb\xe6\x28\x46\xd2\x8b\xaa\x15\xc9\x3d\x49\x8f\xf7\x5c\x63\x1a\x1f\x79\x2a\x2c\x10\xde\x6d\x1c\x13\x12\x8a\x04\xb6\x42\xf6\x97\x72\xa9\x52\x4b\xf7\x78\xf1\x96\xa9\x1c\x94\x56\x0a\x45\x7f\x4a\xe2\x2e\xeb\x20\x91\xb1\xf8\xed\x28\xce\x95\xfe\x83\xde\x9a\xcd\xe6\x33\x81\xa0\x47\xbd\xb1\xb0\x3b\xe5\xc2\x1c\xc2\x85\xbd\x19\x37\x9e\xd2\x75\xb0\xea\x2c\x2d\x36\x80\x20\xc5\x24\x0d\xdf\xa9\x5b\xbe\x63\xd1\x86\xcb\x75\xe0\x9a\x00\x40\x9f\xc8\x54\x8e\x12\xab\x0f\x40\x6e\xa8\x72\x9b\xd3\x4e\x99\xda\x94\x29\xe2\x02\x09\x08\xd0\x56\x36\x1d\x9b\xaf\xd7\xb9\x58\x03\xcd\xc8\x5c\x56\xb8\x26\x80\xd8\xd1\x8a\xa1\xe0\x77\xfa\x52\xf5\x9f\x86\xef\xa6\xeb\x36\x58\xe4\x3b\x97\xe8\x4c\xfa\xc4\x7e\x3d\xd7\xbb\x75\xc2\x12\x31\x9d\xb0\x1f\x3c\x28\x5d\x44\x4a\xba\x4c\xe9\x8e\x34\xd9\x9a\xcb\x9f\xed\xb9\x3a\x34\x89\x71\xda\xeb\x0e\xbf\x35\x54\x8e\x5b\x27\x4d\x6f\xaa\x79\xc1\x8b\x72\xc4\x19\x44\x4a\xf6\x67\xe6\xe5\x1b\x7c\xb7\x6f\x5e\x9f\x21\x62\xdc\x92\x92\x99\xe7\xcd\xc9\x69\xbe\xed\x49\xcb\xdb\xfa\x7a\xaf\x03\x39\x55\xdd\x0e\xe4\xa7\x30\xd5\x2d\xf3\xcc\x7e\x1f\x72\xda\xc1\xa6\xd2\xd3\xa6\xb1\x2e\x62\x8b\xeb\xa6\xd4\x14\x5d\xbf\xc6\xb6\xec\x00\x59\xae\xe2\x32\x12\xb1\x59\xb9\x70\x1f\x42\x44\x8c\x23\x75\xa9\x6c\x92\x6d\x07\x6d\x85\x99\x0a\x4e\xdd\x2f\xe5\x73\x18\x44\x06\xee\xba\xff\xae\xc3\xdf\x60\x2d\xbe\xb6\x4e\x0f\xd7\x27\xf6\x53\x3e\xf2\x9c\x72\x9f\xaf\x52\x78\xab\x3c\x59\x27\x92\x17\x2a\x67\xdf\xb9\xd4\xed\x97\x4e\xf7\xab\xdb\x42\x18\xb9\x4d\x54\xba\x08\xb7\x89\x2f\x6a\x78\xb4\x4d\x52\xf3\x94\x2e\xf8\x36\x0b\x49\x71\x9d\x4c\x3c\xf5\x4c\x8a\x9d\xe0\x6c\x13\xf0\x9d\x26\xda\xe7\x6d\xce\x25\x45\x1c\x70\xdc\x54\x1e\xb2\xba\x77\x9e\xcd\x59\x59\x2c\x0e\x24\x7a\xc2\x97\xc7\x39\x9e\x08\x86\xf0\x81\x67\xfd\xd4\x39\x9c\x5c\x0e\x98\xb8\xe6\xb4\xf3\xad\xa5\x52\x9d\x9f\xfd\xba\x29\x23\xa9\x7c\xeb\xa1\xf3\xeb\xf7\x36\x50\xe4\xef\x83\x95\x0b\x16\x0c\x04\x72\x88\x62\x22\x10\x5e\xed\xdd\xb6\x66\x4e\x71\xcb\xb7\x73\x96\xaa\x32\x66\xb4\xa9\x51\x18\x3e\x9f\xe2\xe9\x08\xa4\xbe\xd3\x69\x57\x62\xd3\x48\x3d\x67\xb7\xff\xc0\x7b\xed\x2b\x10\x7e\xeb\xd8\x81\x7b\x97\x3e\xf5\xec\xb3\x0d\x3d\xf5\x34\x8c\xbd\xdb\x8e\x47\x8d\xbd\xf3\x82\x03\xc3\xe0\x38\x07\x29\xdc\x47\x93\x38\x85\xf5\x16\x06\x10\x5a\x38\x90\x2b\x81\x59\x7d\x7f\xf4\xe7\x2c\x0f\x41\xff\xa7\x32\x9e\x0b\x59\x2c\xe0\x8b\xe3\x3e\x06\x1f\xf9\x08\xaf\x57\x0c\xa6\x41\x8e\xe0\x7f\xbb\x55\xe8\xdf\xb7\x74\x42\xff\xce\x6e\xc8\xa7\x65\xf6\xab\x04\x40\xa4\xfa\x9e\x7d\x97\x00\xe6\x28\x88\x85\xba\x81\xeb\x18\x2e\x6a\xd0\x01\xbd\x17\x34\xa8\xb2\xb5\x0f\x6a\x90\xaf\x3d\x84\xaa\xa1\x14\x72\xef\x51\x56\xb8\xd9\x6a\xed\xdf\x02\x89\x81\xcb\xca\xbf\x81\x0e\xd6\x8c\x5f\xca\xfe\x53\xe4\xca\x67\x00\xa1\xb3\x2a\x2c\xb8\xd7\x5e\x3f\x5c\x1d\x19\xed\x71\xd4\xe5\x0d\x85\x29\xe1\x2f\xc4\xd8\x84\x1e\x85\xe5\xce\x5e\x47\x3a\x42\x48\x99\x88\x16\x1d\x2a\x24\x83\xaa\x12\x5c\x3c\x43\x55\x91\xa4\x76\x98\xd9\x05\x7a\x0a\xfe\x0a\x4a\xad\xd9\xf2\x8c\xf0\x7d\x04\x25\xae\x07\x6f\xa6\xd0\x88\x7f\xfb\xeb\xbf\x4f\xbb\x74\xef\xa1\xea\x63\xe1\x52\xae\xf2\xef\xf2\x44\xc8\x18\x82\xb1\x3c\x6e\x0a\x64\xc9\x8a\x77\xbe\xb2\x3d\x9b\x69\xf8\x24\x19\xc1\xed\x47\xad\x5e\xe0\x24\xfa\x02\x11\x7d\xbf\xc9\xba\xe5\x5b\x89\xf7\x75\x99\x12\x7a\x11\xef\x24\xdf\x26\xd1\x17\xad\xe3\x2e\x11\x69\x0c\x55\xa4\xaf\xef\x8b\x4a\xc5\x22\xba\x1f\x6b\x13\x1c\x4c\xef\x2f\xa2\x7b\xf6\xd3\xed\x87\xf7\xa8\xe6\x9a\xe8\xb9\xbc\xe4\x45\xf2\x20\xee\xf2\xd4\x85\x03\x88\xaf\x29\x4f\xed\x1a\xa9\xd2\x4d\x07\xd4\x46\x96\x9b\xda\x1a\x0e\xa1\x1a\xc0\x76\x77\xb2\x2c\xa3\x7b\x51\x9c\xe6\x5c\xc6\x6a\x8b\xcd\x38\xd5\xe5\x6a\x95\xfc\x36\x2d\x78\xde\x21\x0d\x80\x7e\x84\xaf\x68\xe7\x7a\xc1\xa7\xc2\xdb\xbc\x68\xea\x3e\x42\xa2\x2f\xc9\x88\x57\x8c\x5b\xcc\x4b\xe3\x5b\x01\xdc\x8e\xac\x2a\xab\x01\xa5\x60\xee\x2c\xa8\x4f\x6a\x4d\x08\x7a\x45\xda\xd6\x9f\x02\xe3\xfe\x53\x50\xab\xaa\xbe\xba\xad\x94\x57\x74\xdc\xf2\x7b\xbc\x1f\xae\x73\xa1\xf5\x84\x69\x05\x35\x9e\x4b\x8b\x45\xb7\xf9\x52\x80\x7b\x01\x76\xd8\x74\xc7\x22\x95\x25\x20\x80\xe9\xda\xb5\x51\x8f\xe0\xa7\x0f\x33\x45\x41\xb3\xb8\x94\x45\x92\x32\xbe\x2a\xc8\x89\x0f\x54\xf8\x56\xfa\x4a\x4f\xe7\x12\x42\xb1\x11\x34\x1f\x20\x12\x2e\xfc\xe2\x1a\xa1\xd9\x8a\x47\x49\x9a\x14\x44\xd0\x05\x49\x46\xdc\xb4\xd7\x9c\x07\xa6\x2f\x73\xbe\xe3\xa9\xbf\x58\xf1\xb4\xf4\xc9\xb1\x27\x5a\xf4\x10\x40\x26\x7a\x81\x0e\x82\x2f\xc1\x38\x97\x84\xc1\x07\x24\xcb\x9e\x99\x8f\x5f\xd6\x4e\xd1\x3f\x84\xff\x5b\xb9\x87\xf7\x59\x05\x47\x5c\xc8\x8f\x39\x1c\x9b\x57\x6e\xa7\x17\xed\xed\x8c\x24\xb6\xf8\xe0\x8a\x29\xee\xd3\x4f\xdd\xf1\x08\x31\x93\x8e\x4b\xff\xd4\xaa\x7c\x35\xbf\x30\xa2\xf7\xda\x8d\xc4\x2f\xe4\xce\xe8\x62\x30\x1f\x52\x7d\xeb\x8d\xff\xa8\x54\x7a\xac\x47\x9e\x48\x19\x12\x25\x17\x20\x7c\x7b\xcc\x75\x12\x27\x80\x73\x6c\x5d\xbc\x75\x31\x77\x47\x09\x5e\x95\xcb\x22\x38\x18\x55\x01\x36\x32\xa8\x44\x0f\x52\x5c\x67\x2d\xa0\x8b\x91\x88\x77\x28\x03\xd1\x5a\xd6\xb4\x6f\x86\x08\x02\x7e\x0e\xee\xeb\x08\xb4\xa9\xb5\x1a\x8e\x72\xd6\xa1\x4c\x6d\xed\x53\xce\x71\x17\xd2\x2b\xbb\x7e\x0c\xbe\x6d\xfb\x13\xc5\xf1\xcd\xf9\x49\x56\xfc\x5c\x06\x16\x3b\x72\xa2\xd9\x94\x02\xd7\x6b\x6d\xfe\xbc\xca\x34\x3c\xda\x9f\x77\x0c\x87\x7e\xef\xce\xf9\x36\x54\xc3\x03\x2c\x48\xa4\xb6\xcb\x44\x5a\x56\x02\x72\x72\xc3\x55\x63\x66\x29\x4a\x5d\x40\xc2\x5e\x19\x50\x23\xa5\xd6\xf7\xce\xcc\x09\xd9\x5e\xc3\x2d\x6b\xdf\x75\x3c\xbc\xdf\x3d\x2d\xdd\x7f\x47\xa4\xb1\xde\x02\x73\x80\xa4\x8f\x7c\xa7\x41\x31\x5a\x98\x5d\x71\x85\x8e\xdd\x6a\xfd\x27\x81\xf9\x61\xe9\x6f\xe7\x12\x7a\xa8\x24\x21\x79\x6a\x4b\x42\x0c\x00\xa9\xd5\xc6\xf6\x5c\x5f\x2f\x74\x7b\xe7\x7c\x9d\x58\x4d\xde\x1b\xab\xc1\x20\xf4\xff\x8c\xf0\x4c\x8f\x13\xf8\x48\x5f\x74\x70\x4c\xa2\xc5\x48\x30\x21\x48\xdc\x72\x21\xea\x09\xdb\xf2\x44\xd2\x32\x40\xfd\xc1\x58\x2c\xcb\xf5\xba\xd3\x45\xfa\xed\xc7\x5a\xaa\xeb\xe4\xef\xde\x17\xde\xcb\x56\xf7\x14\xde\xe2\x0b\xfb\x25\x74\x5f\x9b\x7b\xdf\x97\x71\x10\x7f\x45\x6f\x7c\x6b\x48\xac\x31\x89\x9e\xc6\x1b\x7f\x31\xc4\x1b\x6f\xb1\x5d\x90\x62\x47\xd7\x69\x8b\xbf\xf9\xdd\x4d\xff\x65\xdc\xf4\x83\x26\x05\xd2\xba\x2c\x92\xaa\x81\xde\x53\xc3\x03\x99\x0f\x1d\x19\x30\xd4\x0a\xd9\xc5\xcc\xee\x1e\x6b\xb6\xe4\xd1\x33\x50\x21\xc2\xe9\x78\xbc\x3f\x70\x0f\xf8\xe5\x46\x6d\x05\x83\x4f\x69\x54\xae\x61\x94\xc5\x38\x01\xb4\xaa\x69\xa0\x47\x8c\x10\x1e\x05\x8e\x53\x44\xae\xc4\xde\xa8\xfe\x4e\x8a\x47\x66\x4e\xab\x49\x08\xdf\x0b\x86\x07\x24\xcd\x5e\x1a\xeb\xb0\x82\xf5\x77\x94\x0d\xb9\x58\xf3\x3c\x86\x0c\x13\x5a\x92\x29\x8f\xee\xcd\x7f\x43\xfd\xe8\x8b\x04\x31\xb4\xea\x0a\x08\x7b\xf5\xa5\x25\x32\x42\x32\x3c\x42\x33\xfa\xfa\xe1\xeb\x9a\xf1\x28\x57\x1a\x9d\x46\x4e\x09\x18\x32\x9c\xc1\x80\x7d\x48\xe2\x92\xa7\xf8\xc5\x4e\x4f\xfb\x58\xf8\x5a\x1d\x70\x14\x88\x76\x35\xd1\x6c\x34\x1c\xc8\x51\x04\xdd\x38\x9d\xcb\xb7\x2e\x60\xf2\x9a\xdd\x69\x41\x28\x33\x6d\x69\xcf\x7b\x6b\xfa\x6c\xe6\x43\x03\x13\xd8\x69\x43\xf4\x74\x80\x05\x59\x07\x1d\xa1\xbb\x7b\x62\x0f\xa1\xe6\x31\x83\x32\x9a\x18\xf8\x22\x50\x0e\xf7\xdd\x82\xf7\x84\x5c\xf0\x78\x17\xb2\xf1\x25\x92\x41\x94\x8e\xf1\x78\x9b\x48\xb3\x08\xac\x3a\xa5\x3b\x69\x2c\x51\x3d\x42\x8e\x41\xc4\x29\x4d\x6b\x9b\xa0\x66\x52\x18\xe3\x92\xe7\x49\xba\x83\xfb\x44\x96\x8b\x93\xe0\x3b\xc1\xf8\x50\xc6\x13\x50\xee\x13\x8d\x48\xa9\xc5\xaa\x4c\xf1\xd6\x01\xf7\x72\xd7\x00\xda\x91\xee\x2e\x26\xc6\xe0\x28\x48\x3a\x25\xf8\x30\x0a\x12\x3e\x45\xf6\x48\x23\x5a\x39\x2e\xe2\xe6\xd9\x22\x73\x00\xb9\x6f\xd4\xa3\x4d\x75\x7b\xe4\x1e\xcb\xdc\x75\xba\x3e\x59\x94\xa5\xdf\x0e\xb5\x37\x40\xbb\x4f\x05\x94\x6f\x2e\xb4\x46\xbf\x89\xd8\xed\x4d\x89\x84\xe6\x90\xa6\xaf\xf7\x5c\x97\x1a\x33\xe6\xcc\x58\xc2\xf9\x65\x1d\x1d\x55\xc7\x35\x73\xad\x4b\xb4\x92\x6c\x5e\x7e\xff\xfd\x1f\x05\xfb\x1e\x52\x08\xe9\x3e\x82\xf1\x31\xe0\x8b\xc4\xd2\x61\xcb\x76\x1f\x10\x48\x26\xd9\x18\x11\xd6\x06\x51\xb5\xf9\xfa\x00\xf2\xe4\xd1\x86\xe9\x72\x89\x08\x46\x4e\x21\x16\x2e\x1d\xef\xf4\x7b\x05\x60\x44\x3c\xd9\x6d\xed\xff\x97\x04\x14\x50\xe5\x62\x2e\x33\x85\xd4\xe8\x00\xfd\x5c\x0a\xb6\xe5\xf9\x3d\x88\x96\xa2\x7b\x1e\xa8\xe0\xbf\x4b\xc4\xb4\x1a\x5e\x78\x59\xa9\x0f\x05\x74\x90\xf2\x98\xe5\xa5\x94\x56\x85\x89\x19\xc3\xd4\xfb\xfa\x27\x73\xb9\x2c\xc3\xbb\x67\x25\x58\xe0\xa7\x16\x04\x0c\x60\xb3\x55\xc0\x15\x42\x95\xe2\xda\xd7\x6b\xca\x06\x44\x0d\xe6\xf2\x89\xc3\x06\xfb\x1c\x7e\x1f\xc9\x06\xb3\xce\xbc\x20\x5f\x01\x9a\x1b\x0a\x05\xc3\x70\xe0\xb4\x07\x23\xe7\x23\xa8\x05\x4f\xd8\x4f\xc9\x83\x98\xb0\x9b\x8c\xe7\xf7\x13\xf6\x16\xc3\x7f\x7f\x56\xcb\x36\x1f\x5e\x83\x50\xe2\x68\x3f\xde\x61\x6e\xac\x3e\xa2\x95\x76\xeb\xff\xd7\x06\x31\x00\xeb\x8a\x7d\xff\xcf\x44\xe4\x75\x70\x7d\xfc\xbd\x7b\x22\xf6\x84\xa9\x7f\x07\xaf\xfd\x5d\xde\x8a\xfb\x69\x3e\xfe\x10\xfe\xaf\xdd\xbf\xac\xc5\x05\xb6\x27\xed\x72\xad\xa8\xb4\x6f\x2b\xb1\x39\x89\xeb\x87\x72\x33\xbf\x79\xd8\x52\xa0\xf4\xf1\xd8\xa5\xb6\x8f\x00\xdd\xd3\xab\xb6\xbf\xce\x52\xa5\xcb\xbc\x7f\xf1\x5f\x57\x6b\x6d\xbf\xde\x42\xf5\x09\x93\x6d\xbb\x14\xc0\x5a\x30\x14\x7e\x82\x8f\x2d\xfe\x43\x2d\x17\x80\xb5\x3a\x6e\x85\xb7\x15\xe7\x08\x84\x55\x54\xa9\xaa\x3f\x21\x6f\x32\x01\x8c\x53\xde\x14\xf5\x01\x81\xda\x0c\x73\xae\x91\xb9\xb4\x9c\xeb\x98\x31\x9b\xe7\x02\xc8\xa1\x73\x01\xca\x76\x2c\xe3\xb9\x03\x3c\x58\x8b\x28\xb8\xf9\x78\x50\x4c\x98\xe5\x06\xc9\xaa\x74\xdf\x5a\x0a\x21\x5d\x6f\x8f\x31\x25\x80\x08\xb9\xd6\xfb\x84\x76\x7b\x14\x96\x7a\xbf\x43\x85\xb3\xf1\x5e\x70\x17\x04\x93\x7b\x2d\x8a\x60\x37\xaf\x99\x16\x95\xa5\x59\x89\x50\x7d\x53\x88\xff\xd6\x18\x74\x8d\x9c\xab\xe2\x40\x19\x14\xd3\x7b\x0a\x7f\xf9\x47\x5e\x6c\xf0\x42\xbb\x55\x85\xc0\x3d\x13\x59\x82\x70\xbe\xa0\xd7\x79\x99\xaa\x25\x48\xca\x99\x5f\xba\xee\x86\x11\x2d\xed\x41\x5d\xd7\x1c\xb0\x21\x3b\x83\xd9\x4d\x20\xd3\x36\x17\x1a\x08\x57\x9a\x51\xaa\xa1\xf8\xe4\x71\x97\xee\x66\x75\xcd\xa6\xff\xb6\x71\xd9\x6e\x8a\x32\x98\x65\x0d\x60\xd5\xf3\x03\x32\x68\x1a\x12\x17\x44\x56\x4c\x61\x60\xe4\x2b\xad\xb5\xd7\x2a\x97\xcf\xe5\x0c\x7f\x09\x0e\x01\xee\x55\x96\x1c\x1e\x94\x44\x6a\xdd\xfa\xc3\xf4\x55\x36\x0b\x11\x88\xe4\x21\x98\x78\x5f\x26\x5c\x06\x26\x90\xd5\x28\x8b\x24\x17\x4c\x02\x0a\x61\x2e\x75\xb9\x3c\xf1\xc4\x24\xe6\x16\xf7\x00\x64\x3a\x5a\x64\x1c\xae\x32\xc0\x57\x74\xd2\x72\x0c\xa3\x67\xd2\xab\xa5\x58\x02\x3f\x9e\xd2\xe6\x0f\xb9\x92\x98\x19\xef\xda\xee\xca\x31\x97\x35\xb8\x45\x5b\xb8\x12\x1e\x76\x7d\xfb\x05\xe8\x39\x41\x06\xe6\x35\xa2\x28\xbe\xf6\x01\x1e\x46\x43\x87\x1e\xdd\x10\x4f\x9b\xcb\xff\xdf\x9e\x0d\xdd\xa0\xe2\x11\x33\xdd\xf4\x8c\x39\xa2\x3a\xc1\xce\x95\xba\xd9\x2b\x64\x60\x04\x76\x57\xaa\x31\xe5\xdb\x4a\xe5\x16\xd7\x12\x8a\x7a\x28\x4a\x97\x85\x5f\x1f\x12\x1d\xd0\x7d\xc3\xd7\x6e\x84\x60\xaf\x73\xb1\x7a\xfd\x29\x17\xab\x85\x1d\xe9\x29\x34\x68\x6a\x5a\xd4\x24\xfd\x1e\x38\x39\x74\xa6\x64\x3b\xf9\xe1\x1e\x72\xd2\x5a\x93\xb0\x9c\xa0\x4d\xc9\x8a\x79\x39\x4f\xd3\x1e\x60\x80\x10\x71\x9d\x8d\xbc\x51\xb3\x2f\x7e\xcc\x75\x21\xc1\x06\x40\xad\x3a\x64\x30\xff\xfe\x8f\xb7\x4a\x9f\x0d\x39\xde\x6e\xab\x90\x19\xbb\xd9\x73\xe9\x0e\xbc\x6e\x5c\xe8\x97\x45\xa7\xc3\x00\xea\x8c\x3f\x4a\xe2\xb1\x19\xe5\x7a\x1a\x76\xac\xd5\x00\x44\xc1\xb1\xd6\xc0\xc0\xf9\x55\x26\xad\xa7\x2f\x71\x4a\x8a\x93\x40\x6e\x9d\xa7\x69\xa8\xa9\xe0\x23\x6d\x73\xe9\xf3\x52\x8d\xd5\x9a\xa6\xd6\x85\x57\xb1\x37\x88\xb5\x28\x86\x84\x60\x31\xb1\xa4\x2b\x44\x57\x48\xf1\xb0\x93\x25\x07\x2d\x5f\xa7\xa2\xb5\x6f\x35\x3f\xd5\x25\xf2\x1b\xcb\x8b\xde\x13\x79\xc6\xcf\x2e\xee\x45\x03\xce\xbc\xb7\xae\xed\x91\x8e\x80\x52\x02\x16\xb3\xdd\x65\x23\x9e\xe7\x16\xe5\x4f\x5f\x65\xe6\xae\xb4\xe2\x51\xc5\xcd\xd9\x51\xcf\x8d\x88\xee\x33\x95\xc8\xd1\x7b\x51\x85\xe2\x02\x26\x7b\xc1\x7c\x69\xee\x76\x38\xe8\x70\xac\xd8\x93\xd8\x10\x0d\xf0\x0a\x0b\x0d\xf5\x64\x6c\x9c\x39\xad\xe4\xee\x69\xf7\xd4\xfe\x0b\xe1\xcf\x86\x67\xf0\xc5\xb6\xc4\x87\x6a\xa7\x0a\x6f\x71\xec\x54\x98\x40\x79\x23\xfb\x6b\x60\x67\x73\x56\xa1\x30\x6c\xed\x52\x70\x41\xfe\xee\x19\xfa\xdd\x33\xf4\x3f\xdc\x33\xf4\x25\xdd\x42\x80\x8d\x79\x4e\x9f\x50\x4f\x80\xfc\x88\xe5\xe8\xbe\x3a\x3a\xc7\xb1\xd5\x3a\x9e\x04\xb2\xcf\x41\xa6\x63\x13\xe8\x6f\x89\x30\x4c\xff\x2c\x79\x74\x2f\x64\x67\x8c\xde\xd2\x17\x75\x2a\x70\x3e\x2d\x82\xa5\x8d\x7d\x29\x78\xbb\x1f\xca\xe2\xa1\x4e\x44\x1a\xdc\x46\x08\x62\xd6\x09\xd8\x9e\xa6\xe1\x27\x00\x1a\x53\xb9\x23\xb6\xd6\x94\x85\x87\xc1\x48\xa4\x49\x42\xb0\x54\x8d\x0a\x7a\x28\x26\xce\x7e\x78\x91\x29\x95\xb6\x42\xe3\x9e\xb4\x03\x1b\x89\x32\x43\x3b\xef\x02\x8d\x51\x1d\x02\xc6\x6c\x2f\xfa\xa4\x0b\x9f\xa2\x81\xf9\x18\xa0\x85\x01\xb3\x29\x2e\x21\x97\xd2\x77\x47\x20\xb0\xc7\x9d\xc3\x85\x30\x62\x4b\x11\x71\x90\xfe\xb4\xe0\xbd\x88\xbb\xec\x93\x90\x14\xa9\x91\x0e\xa2\x9b\xdf\xe9\x88\x5a\x42\xb9\x8b\xa4\x4d\xf8\x62\xec\xe2\xaa\x59\x08\x16\x5a\x8e\x35\xb7\x48\x12\x4b\xbb\xb8\x4f\xd2\xd6\x72\x4c\x2f\x40\x7f\x6f\xd8\x09\xd7\xba\xef\x5c\x50\x41\x67\x50\xce\xf0\x8d\xf4\x27\x48\xc7\xd9\x0e\x44\xee\xcc\xe5\xcc\x29\x9d\x7a\xec\x97\x43\xee\x61\xb8\x14\x31\x8b\x8d\xa1\x41\x2e\x47\x7f\x73\x99\x30\x5d\x46\x1b\x60\xab\xac\xee\x53\xe1\xbe\xd5\x5c\xb1\x93\xb9\x34\x17\x22\x70\xb5\x6c\x39\xe4\xc5\x3f\x1a\x63\x55\x27\xff\x29\x1c\x3c\x8b\xc8\xbb\x42\x44\x16\x5e\x9c\x94\x6c\x45\xaf\x59\xe2\x50\x04\x58\x78\x4c\x49\x99\xc5\xbc\x10\xd3\xb9\x47\xdb\x24\xe8\xe9\xb4\x28\x0f\x32\x99\x75\xd8\xb0\x10\xc7\x58\xdb\x69\xd3\x64\x25\xa2\x5d\xd4\xd0\x01\xea\xa7\x89\xf8\xfd\xda\xf6\x6d\x5d\xdb\x90\x65\x17\x73\x06\xc7\x74\x2d\x55\xf5\xda\xbf\x7e\x5c\xe7\x0a\x16\xd4\x44\x8f\xe8\xe7\x2f\x78\xed\x6c\xb1\x81\xc7\xd9\xf3\x83\xef\x41\xfd\xc7\x99\xbf\xd8\xfa\xc3\x3a\xa0\x40\x68\x98\x85\x61\x70\xb1\x08\xa7\x8e\x31\x68\x07\x87\xf5\xbb\x59\x66\xbe\x29\x70\xd2\x90\x8b\xab\xb1\xb8\x1d\x5c\xe9\xd2\x5a\xda\x52\xe0\x79\xd7\x63\x71\x07\xac\xee\xbc\x78\xa1\x5d\xaf\x57\x77\x40\x8b\xfd\x7f\x9f\xe8\xe2\x97\x9a\x66\xe8\x61\xa2\xa3\xcf\x66\x9a\xda\xaa\x62\x35\x87\x5a\x54\xd7\x55\x9b\x47\xad\xec\x9c\x83\xcb\x93\x55\x89\x33\xf5\x1e\x73\x0f\xfa\xe4\xfa\xeb\x13\x1e\x4d\x8f\x39\xcf\x32\x91\xdb\x83\xbc\x61\x6b\x81\xe4\x1a\x7c\x05\x34\x13\x37\x02\xb5\xba\x6b\xb7\x5c\xb3\x95\xd4\x8a\x86\xc7\xa0\xeb\xa6\xed\x23\x77\x59\xa6\x69\xe7\xc8\xed\x57\x72\xba\xbc\x7b\xff\x7e\xf1\xcb\xec\xfd\xdd\xb9\x6d\x7e\xab\x32\x52\xf0\x58\x67\x9f\xb8\x9a\x50\x9f\x78\xed\x45\xf3\x59\x61\xf5\xc2\x95\x6f\x35\x3a\xb9\xca\x34\xad\xaa\x66\xcd\xe5\x27\x2a\x07\x60\xda\xa8\x08\x6a\xfa\x8d\xf5\x76\x5c\xf5\xfb\xf0\xd8\x27\x53\xf8\x27\x7c\xf7\x84\xf9\x46\xbc\x06\x6d\x47\xd2\x8c\x6b\xef\x57\xca\x86\x39\x62\x39\x20\x18\xb8\x6b\x39\x3c\xb5\x2e\xe0\x61\xcb\xe3\x4e\x02\x23\xb9\x88\xad\x9c\xdf\x93\xac\x0e\xec\xbb\x4f\xd5\x38\xb5\xdb\xcb\x63\xbc\xd2\x40\xb9\x13\x54\x73\x03\x8d\x6a\x2f\x78\x36\x97\xe8\x03\x35\x75\x2a\x54\x77\x9d\xd8\x05\x99\xb7\x29\x97\xeb\x92\xaf\x8d\x75\x6b\x3f\x3e\x97\xdb\x64\xbd\x41\x1e\x90\x32\xf3\xf8\x64\xce\x24\xd0\xc5\xd4\xa6\x50\x0d\x9f\x9c\xc8\xb9\xa4\x36\xc9\xb5\x2f\x1e\xb1\xb2\x7f\xbe\x71\xcd\x21\x50\x3a\x16\x44\x82\x74\x72\x2e\x71\x70\x91\x9f\xc4\x46\x42\xe0\xc6\xc2\x8b\xfa\xd4\xe5\x10\xbb\x44\x9d\x7e\xb3\xa7\xaf\x21\x26\x33\x97\x2e\x45\x17\x3d\x47\xd4\x86\x40\xb8\x04\xab\xb4\x7f\x3f\xb1\x83\x61\xd7\x04\xd5\xad\x7d\xd6\x1f\x7d\x06\x98\x05\xb7\x18\xa1\x3e\xdd\xdc\xc6\x06\x7a\x0b\x79\xb0\x71\x74\xf1\x36\x40\x5e\x76\x7b\x6d\x6c\xbb\xf0\x99\x4e\x68\xab\x2a\x97\xe9\x88\x2a\xe1\xf3\xbd\x95\xc2\x2d\xb9\xbf\x52\x03\xae\xc3\xd7\xb5\xa5\x65\xa6\x69\xdf\x67\x97\x4a\x75\x8c\xcb\x13\x06\x14\x2b\x95\xa2\x17\xf6\x75\x46\x19\x15\x87\xcc\x97\x01\xc9\x8a\xf5\x2e\xb2\xbb\x4f\x5f\x85\xd2\x44\x1f\x54\x1d\x6f\x3f\x0d\xae\x91\xb3\x10\xe8\xb0\x1b\xb5\xc3\xd2\x39\x57\xd9\x60\x3b\xb6\x49\x8a\x27\x59\x19\xe7\x04\xb7\x17\xb3\x78\x50\x63\xd9\xcc\xff\x89\x9b\x44\x13\x3f\x72\x13\xa8\x64\x54\xe6\xda\x6c\x97\xb4\xdf\xd1\xae\xad\x72\xc6\xe7\xd2\xa6\xaa\xd9\xed\x78\x66\xc1\xb9\xb9\xfb\x2b\x26\x80\x66\xc8\xa7\x0f\x16\x6b\xc1\x94\x14\x76\x37\x9c\x4b\xab\xfd\x3d\x61\x7c\xa9\xad\xa4\x36\x97\x3b\xa7\x73\x9d\x38\xfa\x22\x2e\x19\xa0\x9e\xf7\xef\x79\x35\x33\xa0\x72\xce\xff\xc1\xfc\xdf\x7f\xff\xe1\xff\x05\x00\x00\xff\xff\x49\x47\xa1\x59\x4e\xb8\x04\x00") +var _adminSwaggerJson = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\xfd\x7b\x73\xeb\xb8\x95\x2f\x0c\xff\x3f\x9f\x02\x67\xcf\xa9\xea\xee\x44\xb6\x3b\xc9\x4c\xde\x94\xa7\x4e\xbd\x8f\xda\xd6\xde\xad\xd3\xbe\xc5\x97\xee\xe9\x67\x94\x52\x43\x24\x24\x21\x26\x01\x06\x00\xed\xad\x4e\xe5\xbb\x3f\x85\x85\x0b\x41\x8a\x94\xa8\x8b\x6d\x79\x37\x67\xaa\xd2\xde\x22\x89\xeb\xc2\xc2\xba\xfe\xd6\x3f\xff\x0d\xa1\x0f\xf2\x19\xcf\x66\x44\x7c\x38\x45\x1f\xfe\x78\xfc\xed\x87\x9e\xfe\x8d\xb2\x29\xff\x70\x8a\xf4\x73\x84\x3e\x28\xaa\x12\xa2\x9f\x4f\x93\x85\x22\x34\x4e\x4e\x24\x11\x4f\x34\x22\x27\x38\x4e\x29\x3b\xce\x04\x57\x1c\x3e\x44\xe8\xc3\x13\x11\x92\x72\xa6\x5f\xb7\x7f\x22\xc6\x15\x92\x44\x7d\xf8\x37\x84\xfe\x05\xcd\xcb\x68\x4e\x52\x22\x3f\x9c\xa2\xff\x31\x1f\xcd\x95\xca\x5c\x03\xfa\x6f\xa9\xdf\xfd\x1b\xbc\x1b\x71\x26\xf3\xd2\xcb\x38\xcb\x12\x1a\x61\x45\x39\x3b\xf9\xbb\xe4\xac\x78\x37\x13\x3c\xce\xa3\x96\xef\x62\x35\x97\xc5\x1c\x4f\x70\x46\x4f\x9e\xfe\x70\x82\x23\x45\x9f\xc8\x38\xc1\x39\x8b\xe6\xe3\x2c\xc1\x4c\x9e\xfc\x93\xc6\x7a\x8e\x7f\x27\x91\xfa\x17\xfc\x23\xe6\x29\xa6\xcc\xfc\xcd\x70\x4a\xfe\xe5\xdb\x41\xe8\xc3\x8c\xa8\xe0\x9f\x7a\xb6\x79\x9a\x62\xb1\xd0\x2b\xf2\x91\xa8\x68\x8e\xd4\x9c\x20\xd3\x0f\x72\x4b\xc4\xa7\x08\xa3\x53\x41\xa6\xa7\xbf\x08\x32\x1d\xbb\x85\x3e\x36\x0b\x7c\x01\xa3\xb9\x49\x30\xfb\xe5\xd8\x2e\x13\xb4\xcc\x33\x22\x60\x6e\xc3\x58\xb7\xfe\x89\xa8\x3e\x34\x5b\xbc\x1f\xbe\x2d\x88\xcc\x38\x93\x44\x96\x86\x87\xd0\x87\x3f\x7e\xfb\x6d\xe5\x27\x84\x3e\xc4\x44\x46\x82\x66\xca\xee\x65\x1f\xc9\x3c\x8a\x88\x94\xd3\x3c\x41\xae\xa5\x70\x30\x66\xaa\x7a\x63\xf1\x52\x63\x08\x7d\xf8\xdf\x82\x4c\x75\x3b\xff\x7e\x12\x93\x29\x65\x54\xb7\x2b\x0d\xfd\x04\xa3\x2d\x7d\xf5\xaf\x7f\xab\xfb\xfb\x5f\xc1\x8c\x32\x2c\x70\x4a\x14\x11\xc5\x8e\x9b\xff\xab\xcc\x45\xef\x91\xee\xbc\xd8\xc7\xea\xc0\x2b\xb3\xbd\xc2\x29\xd1\x7b\xa2\x77\xca\x7e\x01\x7f\x0b\x22\x79\x2e\x22\x82\x26\x24\xe1\x6c\x26\x91\xe2\x4b\x6b\x40\xa1\x05\x4d\x5e\xd5\x27\x82\xfc\x23\xa7\x82\xe8\xbd\x52\x22\x27\x95\xa7\x6a\x91\xc1\x20\xa5\x12\x94\xcd\xc2\xa5\xf8\x57\xaf\xd5\xd4\x0c\x55\x6e\x30\x33\xf3\x41\xe3\xc4\x46\xac\xef\x5e\x89\x30\x43\x13\x82\xf4\x59\xa4\x31\x11\x24\x46\x58\x22\x8c\x64\x3e\x91\x44\xa1\x67\xaa\xe6\x94\xe9\x7f\x67\x24\xa2\x53\x1a\xb9\x35\x3b\x9c\xb5\x81\x3f\x57\xaf\xcc\x83\x24\x42\x0f\xfc\x89\xc6\x24\x46\x4f\x38\xc9\x09\x9a\x72\x51\x5a\x9e\xe3\x11\xbb\x9f\xeb\x75\x48\x27\x94\xc1\xc9\xd3\x6b\xe9\x28\xe4\xf7\x6e\xb9\x7e\x8f\x74\x7f\x28\x67\xf4\x1f\x39\x49\x16\x88\xc6\x84\x29\x3a\xa5\x44\x56\x5b\xfb\x3d\x87\xfe\x71\x82\x8e\x90\x5e\x67\x22\x14\xac\x37\x67\x8a\x7c\x56\x12\x1d\xa1\x84\x3e\x12\xf4\xd5\x05\x95\x0a\xf5\x6f\x86\x5f\xf5\xd0\x57\xe6\xbc\x20\xe0\x4d\x5f\xbd\xc2\x0a\xfb\xbf\xff\x16\x1c\x3d\x85\x67\xd5\x43\xf7\xa1\xaf\x4f\xf3\x9d\xb9\x1a\x8a\x16\xfe\xf6\x6f\x61\x3b\x76\xbf\x56\xf3\xdb\x82\xd9\x5a\x4e\xdb\x96\xbf\xc2\x32\x95\x59\xab\xd4\x3b\xb4\x2b\x67\xd5\xed\x56\x59\xab\x7c\x5f\xbc\x55\x4f\xe1\xa5\xf9\xeb\x2e\xcc\x15\x2b\xa0\x7a\x4c\x99\x39\x24\xfe\xcc\x08\xa9\xcf\x89\xa3\xde\x03\x61\x29\xbb\xf0\xda\x60\x66\x01\xbb\x75\x5c\x34\x58\x95\x03\x9c\x77\x42\x53\xba\x6e\x7f\x87\x2c\xd6\x22\x97\x65\x76\x2c\x4f\x27\x44\xe8\x65\x70\x6c\x0f\x66\x3b\xd1\x6c\x50\xe5\x82\x91\xb8\xc5\x34\xff\x91\x13\xb1\x58\x31\xcf\x29\x4e\x64\xd3\x44\x29\x53\x44\xcb\xb7\x95\xc7\x53\x2e\x52\xac\xec\x0b\x7f\xfe\x8f\x4d\x17\x42\xf1\x47\xb2\x6e\xff\x87\x66\x37\x23\x2c\x81\x0c\xd2\x3c\x51\x34\x4b\x08\xca\xf0\x8c\x48\xbb\x22\x79\xa2\x64\x0f\x5e\xd3\x32\x35\x11\x47\xfe\x06\x82\x1e\xdc\xcd\x9b\x4b\xf8\x05\x4d\xbd\x00\xc9\xc8\x67\x05\x2d\x8d\x18\xdc\xbd\xb0\x44\xe1\x8d\xf2\x02\x4b\xb9\x1d\xcd\x48\x2e\xd4\x78\xb2\x38\x7e\x24\x4b\xfd\x36\x52\x0e\x66\x08\x2b\x25\xe8\x24\x57\x44\xcf\x5b\xb7\xe1\xee\x4e\x60\x8f\xe6\x82\x6e\xc3\x1a\xde\x6e\xc2\x31\x15\x24\x82\xb9\x6d\x72\x60\xfc\x57\x7a\xde\x5a\x7f\x59\x98\xd9\x3f\x92\x05\xc8\x23\x35\x2b\xe0\xb7\x7c\xc4\x46\x0c\x1d\xa1\xf3\xc1\xdd\xd9\xe0\xea\x7c\x78\xf5\xe9\x14\x7d\xb7\x40\x31\x99\xe2\x3c\x51\x3d\x34\xa5\x24\x89\x25\xc2\x82\x40\x93\x24\xd6\x32\x87\x1e\x0c\x61\x31\x65\x33\xc4\x45\x4c\xc4\xcb\x2d\x63\xe5\x29\x61\x79\x5a\xb9\x57\xe0\xf7\x62\xf4\x95\x2f\xb4\x88\xe1\x1f\x95\x9e\xfc\x6d\x69\x81\x61\xc6\xba\xef\xa0\xb5\x57\x13\x6a\xa2\x39\x4d\x62\x41\xd8\x89\xc2\xf2\x71\x4c\x3e\x93\x28\x37\x77\xf2\x3f\xcb\x3f\x8c\xb5\x64\xca\x63\x52\xfe\xa5\xf4\x8f\x42\x14\xda\xf8\x53\xaf\xa5\x6e\xfc\x25\xe8\xb4\xed\xbe\x83\x5f\x68\x5c\xfb\x36\xfc\xb2\x66\x0e\xee\x9d\x15\x83\x75\xaf\x34\x8e\xca\xbd\x60\x25\xbe\xda\x77\x04\x51\x62\x31\xc6\x4a\x91\x34\x53\x1b\xea\xeb\x18\x25\x5a\xae\x5c\x25\x47\x5e\xf1\x98\x0c\x5c\x7f\xbf\x20\x23\xce\x92\x18\x4d\x16\x96\x6b\x4d\x89\x20\x2c\x22\xcd\x2d\xdc\x63\xf9\x58\xb4\xb0\x4e\x18\x2d\xf5\x27\x3f\x72\xa1\x3f\x7f\x0f\x02\x69\x69\xe0\xaf\x21\x93\x6e\x7b\xe2\xbe\x38\x0b\xc1\x96\xfc\xa3\xb3\x27\xec\xbe\x92\x6d\xad\x0f\x5c\x20\xb9\x90\x8a\xa4\x6b\xed\x10\xef\x67\x21\xec\x05\x71\xa8\x03\xae\xdc\x51\xbf\x81\x53\x5f\xbe\x71\xbb\xe3\xbd\xc1\x92\xed\xcb\x8a\x78\xe8\xf3\x74\x3e\x9c\xd5\x53\xbd\x73\xdb\x17\x38\x31\xde\xc5\x34\x4b\xb2\xe0\xbe\x07\xf9\x42\xe6\x86\xc6\xbd\x72\xab\x3d\x86\x01\xac\x51\x34\xcb\x76\x68\x7f\xfe\xf4\xa7\xa1\x85\xc6\x98\xe3\xd4\x9c\xca\xc0\x58\x85\x22\x2e\x8c\x2c\x18\xdb\xf3\x6e\x74\xcd\xfe\x7d\xff\x6e\x70\x7f\x8a\xfa\x28\xc6\x0a\xeb\x03\x2e\x48\x26\x88\x24\x4c\x81\x1e\xaf\xbf\x57\x0b\x94\xf2\x98\x24\x46\xe3\xfc\xa8\x25\x5f\x74\x8e\x15\x3e\xc3\x0a\x27\x7c\x76\x8c\xfa\xf0\x4f\xfd\x31\x95\x08\x27\x92\x23\xec\xc8\x8a\xc4\xae\x09\xcc\x62\xc7\x5a\x30\x8a\x78\x9a\xd1\xc4\xdb\xe0\xbd\x71\x85\xb2\x98\x3e\xd1\x38\xc7\x09\xe2\x13\xcd\x55\xb4\x86\x3c\x78\x22\x4c\xe5\x38\x49\x16\x08\x27\x09\xb2\xdd\xba\x17\x90\x9c\xf3\x3c\x89\x75\xbb\x6e\x94\x92\xa6\x34\xc1\x42\xab\xe0\x66\xb4\xd7\xb6\x2d\x74\x3f\x27\x7e\xac\x30\x2e\xbd\x9a\x29\x7e\x24\x12\x51\x85\x32\x2e\x25\x9d\x24\xc5\x99\x7f\x18\x22\x18\xf7\xd9\xc5\x10\xf4\xf9\x48\x21\x6e\x78\xa8\xeb\xdc\xda\x6f\x5c\x8f\x29\x66\x8c\x40\xc7\x5c\xcd\x89\xb0\xdd\xdb\x97\xdf\x5a\x35\x7f\xb8\xba\xbb\x19\x9c\x0d\x3f\x0e\x07\xe7\xcb\xba\xf9\x7d\xff\xee\x87\xe5\x5f\x7f\xba\xbe\xfd\xe1\xe3\xc5\xf5\x4f\xcb\x4f\x2e\xfa\x0f\x57\x67\xdf\x8f\x6f\x2e\xfa\x57\xcb\x0f\x2d\x59\xb5\x56\xf3\xc3\x91\x6d\x78\xb6\x3a\x9b\xe6\x4b\xd9\x34\x7b\x5f\xae\x51\x73\x4a\x13\xd0\x41\x5b\x1b\x34\xbd\x0d\xc1\x7e\x89\x32\x2c\xa5\x91\x8c\xcc\x08\x8e\x47\xec\x92\x0b\xcd\xc0\xa6\x5c\xf3\x08\x2d\x3d\x29\x91\x47\x8a\xb2\x99\xff\xe8\x14\x8d\xf2\x6f\xbf\xfd\x53\x74\x41\xd9\x23\xfc\x45\x0e\x71\x71\x3a\x8b\x6f\x67\xf1\xfd\x6d\x59\x7c\xb5\xe8\x73\x12\x1a\x7a\xf7\x1b\x32\xa4\x85\x0b\x96\xe5\x0a\x44\x09\x9e\x2b\xfd\xa7\xee\x12\xc8\x63\x45\xe0\x50\x3b\x83\xe2\x27\xa2\xfc\x8b\x5a\xb4\x79\x0f\x76\xc4\x9f\xb8\x78\x9c\x26\xfc\xd9\x0f\xfc\x13\x51\x7a\xec\xb7\xb6\x97\x2e\x94\xa8\x0b\x25\x7a\xdb\x50\xa2\x83\x32\xe6\xbd\x3c\xf3\x2b\x5b\xfe\x0c\x07\x6c\xf0\x64\x35\x3a\xaa\x1a\xfc\x50\x81\x9b\xe9\x55\xb8\x66\xd9\x99\xb3\x86\x73\x96\x5e\x7e\x2f\xdc\xb3\x34\xe8\xd7\xe7\x9c\xbf\x09\x7f\x4b\xe7\x4e\xd9\x72\xa1\xde\x25\x83\x6d\x79\x77\xbc\x9a\x33\xe4\xe5\x19\xfe\x52\x6c\xc3\x26\xc1\x0c\x1b\x44\x2f\xb4\x0e\x57\x58\x13\x9f\x50\x1b\x90\x50\x17\x81\xb0\x1c\x72\x50\x1b\x63\xb0\x5b\x50\xc1\xb6\x77\x53\xfb\x30\x81\x4f\x44\x95\x5e\x7e\x2f\x77\x53\x69\xd0\xaf\x7f\x37\xfd\x46\xa3\x03\xba\x70\x80\x17\x5c\xba\x2f\xfd\x46\x3b\x5c\x87\xff\x6f\xc0\xc3\xdf\xb9\xf4\x37\x5a\xa3\x2f\xcb\x87\xff\xa5\x3a\xed\xdf\xa7\x97\xbe\x73\xcb\x77\x6e\xf9\xb7\xf0\x9f\xbc\x3f\xb7\xfc\xcb\xaa\xa7\xc5\xf1\x1a\x3b\x5a\xb0\xfa\x5a\x70\x28\xff\xd5\xc2\x49\x03\x7f\x39\x95\x6f\xd3\xa0\xf1\x46\x1d\xee\xbc\x18\xdf\x00\x8e\xd0\x2f\x96\x90\xd6\xa8\x73\x4b\xdf\xbd\x07\x75\x6e\x79\xd0\x2f\xaf\xc3\xbd\x19\xf3\x7d\xa1\xcb\xf3\x9d\xb0\x81\xcd\x6f\xcb\x2f\x58\x26\xef\x64\xf1\x97\xcf\xc6\x3f\x98\x09\xbd\x1f\xd9\xfb\x0d\x2e\xde\x96\xb7\xee\xde\x73\xb2\x6a\xae\xd9\xe0\x76\x5a\x97\x61\x55\xfd\x9a\x12\xf9\xc7\x77\x79\xdf\xbe\x46\x92\x55\x77\xe1\x76\x17\xae\x6d\xaa\xbb\x70\xbf\xe0\x0b\xf7\xe0\xe0\x6f\x0e\x26\x02\xb4\x0b\x22\xef\x80\x31\xba\x18\xf2\x3d\x2e\x4e\x17\x43\xde\xc5\x90\xff\xc6\x62\xc8\x77\xd1\x9e\xb6\xc5\xa2\x7c\x0b\x3d\xaa\x53\xa3\x3a\x35\x2a\xfc\xbd\x53\xa3\x3a\x35\xaa\x53\xa3\xbe\x70\x14\xd1\x4e\x87\x6a\xbf\x10\x9d\x0e\xd5\x7a\xa9\x3a\x1d\x6a\xc5\xe2\x74\x3a\x54\xa7\x43\xfd\xb6\x74\x28\xf2\x44\x98\x92\x90\x8c\x16\x6a\x14\x1f\x32\x2e\x9b\x35\xa1\x90\x3b\xd4\x68\x41\xd0\x66\x39\x29\x0c\x02\x97\x7e\x41\x73\x2c\x11\x8f\xa2\x5c\x54\xce\x40\x55\x0f\x3a\x13\x04\x2b\x02\x2d\xe8\x0f\xdf\x83\xfe\xb3\x3c\xdd\xd7\x8a\xc1\x9f\xf0\x78\x89\xda\xcd\x41\xa8\x7b\xb2\x5a\x1e\xd9\xdb\xd4\xff\x91\x93\x76\xea\xdf\x0b\x12\xb5\xc2\xf2\x71\xcf\x44\x5d\xca\xb5\xd8\x8a\xa8\xa1\x85\xf7\x42\xd4\xcb\xd3\xfd\xcd\x10\x75\xdd\xd4\x0f\x81\xa8\x9f\x6d\x1e\xff\x9e\x09\x7b\x09\x1e\x60\x2b\xe2\xf6\xad\xbc\x17\x02\xaf\x9f\xf6\x6f\x86\xc8\x9b\xa6\xff\xb6\x84\xee\x53\x24\x5b\x93\xf8\xbd\xa0\xb3\x99\x56\x33\x40\xc3\xd3\xa4\xb8\xbe\x46\x50\x91\x14\xb8\x96\xac\xfd\xab\xef\x81\xa4\xfd\x60\xcd\xd8\x7f\x33\xb4\xbc\x34\xef\x03\x21\xe2\x13\x41\x22\xfe\x04\xf5\xc2\xda\x11\xf3\x2d\x01\x0a\x06\x7e\x9d\x09\xf2\x44\x79\x2e\x93\xc5\x91\xc8\x19\x72\xcc\x1f\xf9\xe6\x8d\xb5\xfa\x99\x26\x09\xe2\x4c\xeb\x5f\x0a\x0b\xe5\x1e\x6b\xfd\x5b\xf0\x14\x4e\x45\x82\xa5\x42\x8f\x8c\x3f\x33\x34\xc5\x34\xc9\x05\x41\x19\xa7\x4c\x1d\x8f\xd8\x90\xa1\x5b\x33\x46\xc8\x1b\xe8\xa1\x5c\xea\xb3\x14\x61\xc6\xb8\x42\xd1\x1c\xb3\x19\x41\x98\x2d\x6c\x02\x6e\x41\x19\x88\x0b\x94\x67\x31\xd6\x8a\xef\x9c\x54\xa3\xf4\xfc\x18\xc1\x7c\x47\x25\xa2\x12\x91\xcf\x4a\x90\x94\x24\x0b\xdd\x87\xa6\x7d\xc5\x91\x5d\x1f\x33\x54\x9b\xce\x47\x84\xe0\x42\x42\xc6\xc1\x64\xf1\x2b\x66\x8a\x32\x82\x40\x51\x92\xc6\x34\x77\x84\x2e\xb8\x04\xb3\xcd\x0f\x7f\x91\x28\x4a\x72\xa9\x88\xe8\xa1\x49\x3e\x93\x5a\x53\xcc\x12\xac\xa6\x5c\xa4\x7a\x84\x94\x49\x85\x27\x34\xa1\x6a\xd1\x43\x29\x8e\xe6\xa6\x2d\x58\x03\xd9\x1b\xb1\x98\x3f\x33\xa9\x04\xc1\xbe\x77\xf7\x10\x7d\x1d\x3e\x33\x04\x20\xbf\xe9\x41\xda\x21\x4d\xb5\xba\x1b\x0c\xbf\xd8\x71\xb3\x27\xba\x11\x12\xa3\x09\x89\x70\x2e\xad\x87\x41\x89\x05\x22\x9f\xe7\x38\x97\xb0\x77\x7a\x7a\x36\x67\x23\xe2\x69\x96\x10\x45\x10\x9d\x22\x25\x28\x89\x11\x9e\x61\xaa\x97\xee\x8e\xac\x00\x41\xf7\x44\x6f\x37\xd0\x52\xfd\x2f\xa0\x7e\xa7\x5c\x10\x14\x13\x85\x69\xb2\xd2\xeb\x64\xbf\xed\xb8\xdc\x7b\xe2\x72\xe5\x0d\x3f\x08\x36\x67\x40\xfc\xf7\x70\x69\x33\x6b\xba\x8f\x70\xb2\xe3\xfd\x7d\x6b\x07\xd5\xd1\xf6\xfb\xa2\x6d\xb3\x6b\x87\x43\xdc\xaf\x16\x83\xdd\xbe\xa2\x45\x51\xcd\xe2\x5d\xd1\xf4\x6b\x84\x05\x74\x0e\xe7\xce\xe1\xdc\xb8\x32\xef\xd3\xe1\x7c\x30\x1e\xa3\xce\xe7\xfc\x42\x3e\x67\x2a\x3b\xa7\x73\xe7\x74\x6e\xbb\x40\x9d\xd3\xb9\x73\x3a\xbf\x5f\xa7\xf3\x4b\xe2\x3e\xef\x15\xdd\xf9\x5d\x89\xd6\x9d\x58\xdd\x89\xd5\x1d\x84\xb3\x9f\xda\xbe\x58\x98\xfb\xfa\x43\x4c\x12\xa2\x48\xb3\x3d\x8b\x88\x54\x6b\x0b\xe6\x7a\xa6\x4c\xcb\x71\x33\x41\xa4\xdc\x95\x21\xf9\x86\xdf\x27\x5b\xf2\xc3\xef\xa0\xe6\x3b\x3e\xd5\xf1\xa9\x6d\xa6\x76\x38\xa6\xd9\xe0\x30\xbf\x96\x6d\xd6\xf3\xdf\x2c\x6f\x96\xfe\x1e\x8c\x1b\xb2\xf0\x8b\x1a\x0a\xd7\x52\xbb\xe2\xfe\x70\x5b\x3a\xdf\x91\x1f\x9b\xbe\xde\x27\x33\x36\x63\xef\x38\x71\xc7\x89\x3b\x4e\xfc\xbe\x39\xb1\x3b\xc9\x6f\xea\x22\x33\x7e\xba\x71\x96\x60\x36\xa6\xb1\x3c\xf9\x67\xa1\xcb\xbf\x94\x87\x4c\x1f\xa8\xd8\xa4\x98\xfa\x94\x4e\xf1\x8b\xfe\x24\x29\x0c\xe6\x1e\x33\x73\x8d\x13\xcd\xd8\xd8\x6f\x12\xcc\x86\xf1\xbb\xf0\xa3\xd5\xce\xfe\x35\x7c\x6a\xbb\xf0\x71\xac\xc0\xd3\x81\x29\x33\x26\xbc\x22\xaf\xb6\x64\xa0\x3c\x8c\x13\xbe\x0b\x57\x0f\x26\x16\x30\x76\xc7\xaf\x83\x45\x39\xbc\x69\x77\x7e\x9d\x2e\x97\xb0\xf3\x5c\xb4\x9c\x70\xe7\xb9\x38\x5c\xcf\xc5\x5b\xb9\x23\x5f\xf9\x78\xbe\x96\x58\xd7\x3e\x08\xdf\x44\xab\x41\x50\x6b\x9e\x25\x1c\xc7\xab\x5c\x31\x85\xe0\x15\x82\xa3\xac\x8d\xc4\x2f\x3e\x7b\x0f\xc2\x5a\x31\xda\xdf\x58\x24\xdf\xf2\xc4\x0f\x45\x4b\x79\xc5\x50\xbe\x7a\x12\xdf\x40\x25\x79\x1f\xf8\xa9\xc5\x78\xbb\xd0\xbe\xce\xa2\xf4\xf6\x16\xa5\x2e\xb4\xaf\x53\x01\x0f\x4c\x05\xec\x42\xfb\xba\xd0\xbe\x4e\x41\x5e\x3d\xed\x4e\x41\xfe\x22\x42\xfb\x5a\x89\xda\x2f\x88\xbd\xb9\xbb\xd0\xdd\xc9\xdc\xee\xbd\x4e\xe6\xee\x64\xee\x2f\x54\xe6\x3e\x8c\x15\xee\x04\xee\x4e\xe0\xee\x04\xee\x4e\xe0\xee\x04\xee\xbd\x2f\x63\x27\x70\xbf\x66\x81\xce\x7a\xa9\x7b\x4d\x92\xcd\x7b\xf5\xe5\x74\xe2\x76\x27\x6e\x1f\xb6\xb8\x7d\x30\x13\x7a\x3f\x65\x1e\xdb\xcd\xa7\x2b\x52\xde\x15\x29\xef\x8a\x94\xbf\x78\x91\x72\xf7\x75\x8b\x8c\x0f\x7b\xb8\x14\x56\xb9\x34\x80\x8f\x82\xcc\xa8\x54\xc0\xfe\xdb\xc8\x2b\xeb\x13\x3d\xde\xab\x9c\xd2\xa5\x7a\xf8\xa7\x9d\xd4\xd2\x49\x2d\xbf\x51\xa9\xe5\x80\x62\xc1\x0e\x22\x63\x25\xc5\x2a\x9a\xe3\x49\x42\xc6\xde\xe8\x23\xdb\xea\xc1\x17\x54\x2a\x89\xa2\x5c\x2a\x9e\x36\x5f\x2e\x97\xae\x87\xbe\xef\xe0\x8c\xb3\x29\x9d\xe5\xe6\x6e\x31\xe0\x9c\xc1\x89\x2e\x24\xc1\x45\x46\xd6\x79\xaa\x6a\x5a\x7f\x17\xd7\x52\xfd\xd0\x5f\xeb\x76\xda\x44\x70\x2f\x8c\x7c\x56\xea\xd6\xb2\xd6\xf8\x76\x70\x77\xfd\x70\x7b\x36\x38\x45\xfd\x2c\x4b\xa8\xb1\xbb\x1b\x52\xa0\xbf\xea\x49\x21\x85\xe5\x63\xb1\x97\xc2\x90\xb9\xc1\xb0\x05\x43\xbf\x96\x8d\xd1\x11\x3a\xbb\x78\xb8\xbb\x1f\xdc\x36\x34\x68\x09\x05\xf2\x56\x49\x9a\x25\x58\x91\x18\x3d\xe6\x13\x22\x18\xd1\xd2\x8e\x45\xba\x2d\xcc\xff\xa6\xd1\xc1\x7f\x0f\xce\x1e\xee\x87\xd7\x57\xe3\xbf\x3e\x0c\x1e\x06\xa7\xc8\x51\x9c\x6e\x56\x8f\x4b\x8f\x22\x5e\x30\x9c\x6a\x0d\x44\xff\x50\x64\xca\xfe\x23\x27\x39\x41\x58\x4a\x3a\x63\x29\x01\x44\xe0\x52\x8b\x6e\xc0\x17\xfd\xef\x06\x17\xe5\x96\xe7\x24\x84\xdf\x45\x09\x9e\x90\xc4\xfa\x23\xc0\xc4\xae\x09\x3d\x80\x2a\x36\x8e\x8a\xdc\xac\xea\x5f\x1f\xfa\x17\xc3\xfb\x9f\xc7\xd7\x1f\xc7\x77\x83\xdb\x1f\x87\x67\x83\xb1\x95\x2a\xcf\xfa\xba\xdf\x52\x4f\x56\xf8\x44\xff\xc8\x71\xa2\xb5\x13\x3e\x75\x78\xbc\xe8\x79\x4e\x18\xca\x19\x50\x9c\x51\x79\xb4\x1e\xe4\x3b\xd5\xa7\xcc\xcc\xe8\xe6\xe2\xe1\xd3\xf0\x6a\x7c\xfd\xe3\xe0\xf6\x76\x78\x3e\x38\x45\x77\x24\x01\xa5\xc0\x2d\x3a\xec\x62\x96\xe4\x33\xca\x10\x4d\xb3\x84\xe8\xd5\xc0\x36\x9b\x78\x8e\x9f\x28\x17\xf6\xe8\xce\xe8\x13\x61\x66\x1d\xe1\xcc\x42\xfb\x4e\xf8\x1e\x07\x4b\x77\x7d\xf5\x71\xf8\xe9\x14\xf5\xe3\xd8\xcf\x41\x42\x1b\x25\xca\x71\xb0\xce\x47\xe5\x61\x6b\xe6\x00\xdd\x1b\x22\xe2\x4f\x44\x08\x1a\x93\x0a\x1d\xf5\xef\xee\x86\x9f\xae\x2e\x07\x57\xf7\xb0\x62\x4a\xf0\x44\xa2\x39\x7f\x06\x53\x36\xcc\x10\x2c\xdc\x4f\x98\x26\xd0\x99\xdb\x2c\xce\xd0\xf3\x9c\x82\xfb\x03\x80\x99\x7d\xcf\x46\x3f\x13\x39\x7b\x73\xeb\x6c\xe9\xe0\x2d\xab\x2d\xd5\x93\xb4\xfc\x46\xe5\x58\xac\x7a\xa1\x44\xe5\xcb\x2f\xae\xa3\xd6\xe5\x2f\x2a\xe4\xd6\xac\xac\x2d\xd1\x4b\xf3\x4c\x8b\xbd\x6e\xad\xab\x95\xd7\xf0\xf5\xae\x59\xa2\x04\x8d\xe4\xcb\x42\x3d\x89\x9c\x29\x9a\x12\x64\x3b\xb3\x87\x73\x8f\xf0\x4f\x97\xa6\xe1\xf7\x70\xc1\x2e\x95\x72\xf8\x44\x94\x1d\x7e\xa7\x02\x76\x2a\xe0\x61\xa8\x80\xef\x2d\xdb\x3f\x26\xd9\x72\x87\x95\x89\xc1\x3b\xc6\xeb\xb5\x14\xa4\x61\xec\x89\xd6\xa2\x9a\x90\x27\x92\x80\x94\xa7\x04\xd6\x4a\xa3\x95\x5d\x26\x82\xe0\x47\x2d\xf0\xc5\xfc\x39\x94\x5c\x6a\x90\xfb\xd1\x7e\x6e\xe1\x36\x41\x1c\x7f\xfa\xe3\xeb\x5d\x16\x7a\xb9\xe3\xd7\x28\xe1\x7d\x0b\x41\x32\x2b\x31\x02\x83\x04\xfb\x5f\xac\x25\x78\xcd\x6d\x11\x7c\xf1\x1e\x2e\x8a\x70\xb8\x07\xa4\x75\xdd\x86\x4a\xb0\x63\xa1\x29\x51\x38\xc6\x0a\xeb\x43\x33\x23\xea\x18\x5d\x33\x78\x76\x8f\xe5\x63\x0f\xb9\x2b\x4f\xb3\x95\xc2\xca\xf0\x0a\xa9\xf5\xef\xc4\x80\xbf\x39\x1f\xef\xae\xef\xee\xfa\xae\x5f\x99\x2e\xcc\xb3\x61\x85\xf7\x75\x31\x6e\xe4\xf3\xda\xdf\xfd\x65\x5a\x7c\xbf\x57\xd8\xeb\x3a\xb9\xf6\x7a\xa1\x99\xca\x59\xdd\x6d\x65\xfe\xaf\xbb\xad\xba\xdb\xaa\xbb\xad\x0e\x60\x85\xdf\xdc\x61\x58\xc3\xdd\xdf\xd4\x63\xb8\x4e\x3b\xdd\x1a\xf2\xae\xd0\x46\x37\x01\xbd\xfb\xa5\x2d\xb6\x5d\xf1\x0d\x7d\x1f\x3e\xc2\x60\x92\xaf\x91\xd6\xb6\xd7\xcb\xdc\xe4\x8b\x74\xfa\xe9\x0b\xde\xf8\x1d\x02\xe1\x5e\x11\x08\x0f\x63\xae\x2f\x92\x02\xf7\x36\x16\xd3\xb7\x4f\x7b\xeb\xa0\x06\xbb\xc4\xae\x2e\xb1\x0b\x7e\xef\xa0\x06\xf7\x47\xad\x2f\x2b\x5d\xf3\x98\x8c\x2b\x51\x02\xfe\x9f\xe3\xaa\xe7\xa7\xf4\x24\x74\x03\x95\x1e\x14\x99\x6e\xd0\x3a\x8d\xf7\x59\x44\xea\x8a\xc7\xa4\x75\x24\x41\xe9\xe5\x03\x97\xc1\xdd\x3c\x8d\x2c\x5e\x1a\xf8\x0b\x4b\xe2\x0d\x5b\xfe\x25\x1a\x76\x6a\x08\xb8\xb3\xf2\xac\x5d\xa8\x2f\x35\xbe\xa0\xe0\x50\xef\xc8\x53\xd1\x8e\x8d\xbb\x98\xc6\x71\x03\x33\xaf\x7f\xee\x59\x7a\xfd\xe3\x97\xc1\x0c\x6a\xcf\xd1\xc1\xac\x12\xbe\xfd\x3e\xec\x2a\xe1\x88\x5f\xc3\xb2\xb2\x72\xef\xbf\x38\xae\xbe\x8a\x92\x3b\xde\xde\x72\xb9\xbe\x54\x0e\xdf\x41\xfc\xac\xb2\x75\x74\x18\x3a\x9d\xa9\xe5\x70\x26\xdc\x99\x5a\xde\xb5\xa9\xc5\xb8\x68\xc7\x19\x16\x84\xa9\x1a\x91\xba\x7a\x9d\xc0\xeb\x21\xe6\x82\x93\x3a\xa0\x01\xa4\x25\x5a\x64\x2f\x64\x7f\x55\x7d\x59\xb6\x17\x2b\x18\x04\x99\x90\x27\xff\x2c\xfe\xf6\xc2\x7a\xa9\x02\xc4\x8a\xe8\x24\x83\xf5\x2f\xf5\x1d\x9d\xdb\x40\xa5\xdd\x73\x25\xb1\x2a\x89\x82\x10\x44\xbd\x36\x9e\xe9\xc6\xbc\xfd\xbe\x52\x24\x97\x06\xfd\xba\xb1\x4d\xcb\x1b\xdf\xee\x00\xb9\x9d\xa1\x26\xdd\x2f\xc8\x29\xd3\xd2\x28\x9f\x16\x17\x83\x44\xcf\x34\x49\x00\x51\x04\x32\x1e\x9b\x6e\x80\xdf\x5c\xc4\x43\xe3\xce\xbf\x69\xdc\x43\x1d\x77\xa8\x63\x09\x6d\xec\xa9\xfb\xca\x99\x76\xc4\x06\xe9\xac\xa0\x0d\xad\x31\xc0\x7e\x19\x9c\xe0\x13\x51\xaf\xc5\x06\xb6\x3d\xfb\x2b\xcf\xbd\x20\x53\x22\x08\x8b\xc8\x01\x7a\xdb\x37\x09\x03\xf9\xc9\x4c\xd2\xc6\x80\x78\x28\x81\x70\xaa\x8a\x5b\x3d\xad\x24\xea\x76\x99\xe4\x5d\x26\x79\x97\x49\x5e\x3d\xea\x5d\x26\x79\x97\x49\x5e\x9b\x03\x11\x93\x84\x28\xd2\x28\x55\x9c\xc3\xe3\xb7\x92\x2a\x4c\xef\x5f\x86\x60\x61\xe6\xd2\xc9\x16\xbf\x19\xcd\xc2\x6d\xf8\x41\x68\x16\xe6\xac\xad\x33\x3f\x94\x7e\xac\x09\xb1\x7e\x75\x93\xc4\x36\x4c\xa3\x64\x97\x38\x87\xd7\xdf\x25\xeb\xa8\x0e\xbd\xb3\x51\xa0\x60\xeb\x5e\x8e\x93\x2c\x1d\x81\x76\x13\xb7\x1e\xc3\xf7\x3b\xef\x43\xe1\xa0\x4d\x74\x7f\xa8\x7c\x74\xeb\xa4\x94\x43\xb1\xd8\x7c\x41\x3c\xb2\xb3\xde\xbc\x71\xae\xc4\x12\x33\x7c\xb7\xd3\xed\x8c\x55\x9d\xb1\xaa\x33\x56\x75\xc6\xaa\xce\x58\x85\x3a\x63\xd5\xc6\xc6\xaa\x2f\x48\xa6\xea\x0c\x57\x9d\x58\xb5\xbf\xe9\x1e\xaa\x96\x79\x48\xd6\xba\xd6\x28\xe9\x45\x0e\xd5\xda\xc8\x7b\x3b\xed\x5f\xd6\x84\xdc\xdf\xb8\x11\xbc\x1f\x7e\x25\x5f\x9a\x25\xed\x12\x58\xec\x76\xf4\x8b\x8d\x2b\xee\x4a\x87\xd6\xae\x55\x17\xf6\xbc\x62\x71\xba\xb0\xe7\x2e\xec\xf9\xe0\xc2\x9e\xf7\xae\xac\x64\x5c\xae\x02\x24\x32\xa5\xb3\x56\xe6\x3f\xbb\x3b\x1b\x12\x8d\x80\x14\x0c\xca\x71\x4c\xb2\x84\x2f\xc0\x92\xb2\xe2\x3a\x77\x5d\xdc\x2c\x49\xd4\x87\x7e\xa3\xbb\x91\xbf\x96\xce\x71\x28\x32\x69\x31\xef\x83\x90\x42\x4f\xfe\x59\x49\xe7\x6f\x85\x97\xc9\x10\xf9\x4c\x25\xdc\x4a\xeb\x09\x7b\xc4\xea\x9f\x04\xa5\x0b\xed\x3d\x38\xc9\x55\x90\xbb\x27\xb5\x60\x95\x11\xa1\x16\xc1\x9b\x24\xcd\xd4\xe2\xbf\x46\x8c\x2a\xef\x61\xa3\x33\xc6\x85\xe1\x6a\xfa\xe3\x39\x66\x71\x42\x84\xbe\x54\x5d\x3b\x11\x66\x8c\x2b\x10\x37\x60\x06\x31\x7a\xa2\xd8\x08\x27\xfd\x9b\x61\x6b\x3f\xf3\x3b\x3a\x5d\xaf\x5d\xac\x6e\xcd\x5d\xf7\x29\xe1\x13\xa8\x60\x99\x97\x75\x7a\xdd\x40\xe7\x19\x2d\xed\xdc\x5b\x31\x04\x85\xe5\x63\x15\x38\xa4\x9c\x85\x3e\x5e\x09\x25\xb2\xe6\xdd\x12\xc6\xfc\xea\x57\x2b\x70\x23\xe5\x67\x16\x80\x04\x1e\xc3\x90\xab\xe3\x70\x3f\x86\x1d\xba\xdf\x8a\x96\xdd\x2f\xae\x74\x37\xfc\x28\x88\x12\x8b\x31\x56\x4a\x33\x99\x7d\x62\x9c\xdc\x63\xf9\xd8\x1a\xe3\xa4\xf4\xf2\x81\xb3\x9c\x12\xc6\x49\x79\xe0\x2f\xce\x72\x5a\x52\xe7\x1a\xce\xf4\xfe\xf2\xe3\xdb\x9e\xb5\x0d\x26\xfe\x5b\xc9\x95\x6f\xc7\x7b\xd6\x99\x69\xdf\x63\xde\xfc\x2a\x66\x7a\x30\x23\xac\xf0\xf3\x2f\xf1\xe4\x96\x6f\xa7\xee\x88\xae\x5a\xa3\x2f\xae\x10\x6e\x45\xe8\x58\x33\xb7\x77\x52\x10\xb7\x2a\x37\xed\x7b\x54\x2f\x63\xe6\x0e\x76\x63\x93\x18\xa0\x61\x19\xad\xdc\x9f\x21\x17\x15\x54\x94\x9e\x9d\x43\xa2\x35\x95\x61\x42\x7c\xc4\x85\x91\xbc\x62\x7b\x66\x8d\xd9\xce\x80\xf9\x9e\xa2\x3e\x8a\x6d\x6d\x7e\x41\x32\x41\x24\x61\xca\xa8\xda\xa6\xde\x95\x2b\xef\x4f\x99\xb5\x10\x9d\x63\x85\xcf\xb0\xc2\x09\x9f\x1d\xa3\xbe\x2f\xec\x4f\x25\xc2\x89\xe4\x08\x3b\xc2\x21\xb1\x6b\x02\xb3\xd8\xb1\x07\x8c\x22\x9e\x66\x34\xf1\x48\xed\xde\x8a\x4f\x59\x4c\x9f\x68\x9c\xe3\xc4\x23\x63\x8f\xd8\xe0\x89\x30\x95\x83\x0a\x87\x93\x04\xd9\x6e\xdd\x0b\x81\x7e\xee\x46\x29\x69\x4a\x13\x2c\x90\xe2\x76\xb4\xd7\xb6\x2d\x74\x3f\x27\x7e\xac\x0e\x05\x1c\xa5\xf8\x91\x48\x44\x15\xca\xb8\x94\x74\x92\x14\xc7\xf8\x61\x88\x60\xdc\x67\x17\x43\x30\x8d\x46\x0a\x71\xc3\x07\x5d\xe7\xd6\x4f\xe0\x7a\x4c\x31\x63\x04\x3a\xe6\x6a\x4e\x84\xed\xde\xbe\xfc\xd6\x56\xce\xb7\xc6\x88\x6e\xb6\x98\x86\x23\x7b\x3b\xa5\xb3\xb5\xc6\xd9\x56\xdd\x6c\xa7\x6b\x36\x2b\x9a\x2f\xe0\xa5\x6d\xaf\x0d\x5e\x50\x59\x56\x07\xdf\x85\xcb\xb6\x34\xe2\xd7\xc0\x47\xfb\x8d\x2a\x82\x9d\x16\xf8\x22\xeb\xf6\xa5\xaa\x80\x07\xae\xff\x75\xc8\x6e\x1d\x8a\x7d\x17\x80\xb1\xc7\xc5\xe9\x02\x30\xba\x00\x8c\x2f\x36\x00\xa3\x59\x9b\xa0\xf1\xce\xe9\x7a\x1b\x56\x90\xf2\x46\x01\xf1\x0b\x88\x52\x58\x3e\xb6\xad\x29\xa5\x45\xe5\x61\xfc\x2e\xa4\xfa\xda\x09\xbf\x86\x74\xdf\xd5\x29\xda\x6b\x9d\xa2\x83\x9b\x76\x27\xf8\x75\x82\x5f\x27\xdb\xb4\x9c\x70\x27\xdb\x1c\xae\x6c\xf3\x56\x0a\xcb\x97\x04\xa1\xab\x85\xa7\x52\x66\xcc\xca\x00\x5b\x03\x47\x03\xee\x81\x3c\x4b\x38\x8e\xd7\x05\xe1\xfc\x82\x0a\xb9\x66\x85\x68\x66\xda\xd5\x1f\x1c\xb8\x64\xb6\x14\x7f\x63\x46\xfe\x5b\x88\xa9\x6d\x9c\xfa\x9b\x86\xd5\x02\xfd\x42\x30\x59\x29\x28\xed\xa5\xb4\x90\x2a\x4d\xb7\x52\x38\xe4\x1f\x0f\x9c\xaa\xfd\x96\xbe\x86\x7a\xf1\x05\x3b\x08\x3a\x27\xc0\x6f\xb3\xf0\xf9\xc1\x48\xad\x9d\x6a\xd7\x65\x55\x76\x46\xfd\x4e\xf1\xed\x14\xdf\xbd\x2f\xe3\x21\x29\xbe\x6f\x28\x51\x9b\x34\x91\x17\x29\x63\xb8\x9d\x6c\xdd\x89\xd6\x9d\x68\xdd\x89\xd6\x5f\xac\x68\x7d\x18\x2b\xdc\xc9\xd5\x9d\x5c\xdd\xc9\xd5\x9d\x5c\xdd\xc9\xd5\x7b\x5f\xc6\x4e\xae\xae\xc8\xd5\xf0\x97\x4b\x93\xde\x54\xc8\x6e\x2d\x5c\xb7\xc8\x89\x7e\x2f\x92\x75\x27\x55\x77\x52\xf5\x61\x4b\xd5\x07\x33\xa1\x2f\x2f\x11\xb2\x4b\x25\xec\x52\x09\xbb\x54\xc2\xb7\x48\x25\x74\xbc\x64\x95\x84\xb2\x2c\x58\xfc\xb8\xc4\x81\x0e\x56\xb6\x28\x46\xbb\x6d\x78\xc7\xbe\x96\xda\x01\xcd\x6f\x53\x69\xaa\xf4\x9b\x6b\xe8\x80\xea\x4f\xf5\x9c\xb4\xa0\x19\x85\x1b\xdf\x7a\x84\xb0\x9f\xec\x9b\xef\x0b\x0c\x7c\x79\xd4\x5d\xfd\x29\x14\xec\x5a\x57\x7f\xea\x05\xe7\xed\x0e\xd7\x9a\x99\x3b\x1a\x35\x36\xde\x77\x3a\xed\x37\x07\x97\x6b\x3e\xe9\x6f\x1a\x2e\x57\x7b\x93\x2c\x25\xef\x9c\xfc\xb3\xf6\xa2\x78\x83\xb2\x5b\x1b\xdf\x0e\x9f\x88\xfa\x52\xae\x86\xae\xec\x56\x57\x1f\x62\x4f\xd3\xdd\x8a\xf5\xbf\xdb\xd9\x76\x45\xc6\xba\x22\x63\x5d\x91\xb1\xae\xc8\x58\x57\x64\x0c\xfd\xc6\x8b\x8c\x6d\x2c\x3e\x9a\x71\x7c\x29\x12\x64\x57\x64\xac\x13\x22\xf7\x37\xdd\xdf\x96\x10\x79\x80\x16\x84\x83\xa8\xa6\xe6\x2d\x08\x6f\x8e\xfb\xe1\x46\xd2\x16\xfb\xc3\x2d\x68\x87\xff\x61\xff\xaf\xc3\xff\xe8\xf0\x3f\x1a\x66\xdd\x05\xb3\x76\xf8\x1f\xa8\x0b\xd7\xec\xc2\x35\x0f\x39\x5c\xb3\xc5\x36\x76\xf8\x1f\x2d\xc5\xb9\x17\xc2\x00\x71\x32\xd7\x46\x38\x20\x3f\x2d\x2b\x1a\x07\x2b\xa5\xb9\xb1\xfe\x76\x70\x40\x6a\xa7\x7d\x10\x2a\xc9\x2b\xe2\x80\xd4\xd1\x75\x6b\x05\xe4\x7d\xe0\x81\xb8\xd1\x76\x89\x8b\x5d\x88\xf5\xe1\x87\x58\x1f\x5c\xe2\xe2\xc1\x48\xb2\x9d\xba\xd7\xe5\x2e\x76\xb9\x8b\x9d\x32\xdc\x29\xc3\x7b\x5f\xc6\x43\x52\x86\xdf\x58\xc2\x7e\x41\x5c\x90\xdd\x64\xed\x4e\xd4\x36\xef\x75\xa2\x76\x27\x6a\x7f\xa1\xa2\xf6\x61\xac\x70\x27\x67\x77\x72\x76\x27\x67\x77\x72\x76\x27\x67\xef\x7d\x19\x3b\x39\xfb\xd5\x70\x42\xea\x84\xed\x96\xf9\x36\xef\x49\xd2\xee\xa4\xec\x4e\xca\x3e\x6c\x29\xfb\x60\x26\xd4\x61\x86\x74\x98\x21\x1d\x66\x48\x87\x19\xb2\x95\x7c\xf3\x6f\xf6\x58\x7e\x08\x6e\x62\x7f\x65\x7f\xf8\x2e\xe1\x93\xfb\x45\x46\xf4\x7f\xcf\x69\x4a\x98\x04\x69\x94\xaa\x45\x28\xcf\x34\xac\xfc\xf2\x9a\x7f\xb8\x1b\x5e\x7d\xba\x08\xb3\x69\x3e\x5c\x3e\x5c\xdc\x0f\x6f\xfa\xb7\x7e\x5d\xfc\xac\xc2\xb5\xb0\xdf\x95\x44\x32\x4b\xf2\xb7\x44\xeb\x9e\x70\x6a\xee\x14\x56\xb9\xdc\x6e\x64\xb7\x83\xbb\xc1\xed\x8f\x90\x0d\x34\x3e\x1f\xde\xf5\xbf\xbb\x28\x11\x44\xe9\x79\xff\xec\xaf\x0f\xc3\xdb\xe6\xe7\x83\xff\x1e\xde\xdd\xdf\x35\x3d\xbd\x1d\x5c\x0c\xfa\x77\xcd\x5f\x7f\xec\x0f\x2f\x1e\x6e\x07\x2b\xd7\x63\xe5\x68\x57\x2b\x21\x12\x16\x09\xe2\xfc\x51\x64\xb9\x86\x28\xd6\x10\x79\xf1\xd1\xb1\xc3\xba\xbe\x4e\xd1\x83\xd5\xe9\xa9\x6d\xdc\x30\xd8\xa0\x21\xa3\x8c\xc4\x54\xe2\x49\x42\xe2\xa5\x96\xdc\x1a\x36\xb5\x84\x4b\x83\x7a\xd6\xda\xb3\x17\x39\x35\xcf\x8b\x0c\x2f\x40\x90\xa3\xa8\x08\x8b\x6b\xfa\x30\xfb\xd0\xd8\x03\xd3\xbc\x8b\x3e\x91\x52\x4f\x51\x2e\x04\x61\x2a\x59\x20\xf2\x99\x4a\x25\x97\x1a\x75\xdb\xd7\xd4\xac\xbd\x53\x7d\x83\x73\x2c\xd1\x84\x10\x56\x1e\xbf\x20\x09\xc1\xb2\x66\xcc\x76\xf7\xdb\x2d\x8b\xdf\x2b\x6b\x8d\x31\x97\xd1\x14\xd3\x24\x17\xa4\x72\x5a\x78\x9a\x61\x41\x25\x67\x83\xcf\xfa\x2e\xd3\x07\xf9\x1a\x3e\xe7\x62\xbb\x13\x33\xf8\x6b\x48\xc1\x57\xe5\x7f\x7e\xba\x2f\xff\xab\x74\xe6\x2f\xee\xcb\xff\x5a\x4d\xeb\x41\xc3\x55\xca\x3e\x42\x9f\xee\x4f\xd1\x27\x08\x71\x12\xe8\x7e\x8e\x0d\xc5\x5e\xdc\x9f\xa2\x0b\x22\x25\xfc\x52\x7c\xac\xa8\x4a\x60\x6e\xdf\x51\x86\xc5\x02\xb9\xe9\x9b\x44\x57\x1c\xcd\x11\xf1\x4b\x53\x5d\x3c\xf6\xf7\x9c\x81\xea\x5e\xac\xde\x05\x9f\xd1\x08\x27\xbb\x2d\x62\xff\xaa\xc4\x07\xae\x6f\x57\x2e\x45\xf8\xf6\xf2\x5a\xf4\xaf\xce\x21\x89\xd4\x0d\xb5\x66\xe6\x57\x44\x6a\x22\x89\x38\x8b\xad\x97\x46\xdf\xfe\x8b\x40\xa8\xff\x3b\x87\x44\xdc\x5c\x52\x36\xd3\x2d\xa2\x13\x74\x7d\x3b\x62\xd7\x22\x36\x86\x50\xa2\xa5\x61\x43\x73\x54\x22\xc6\x15\xa2\x69\xc6\x85\xc2\x4c\x69\x45\x00\xc4\x00\xbb\x22\x86\x03\x9c\xf1\x34\xcd\x15\xd6\x07\x6d\x69\x51\x99\x31\x87\xdc\x11\x35\x8c\xc1\xb5\x52\xb3\x86\x46\x4e\x28\xe6\x92\x09\xdd\xbe\x96\x51\xca\x3a\x34\x8d\x97\x54\x59\xd7\x04\x16\x02\x97\xa5\x89\x0f\x54\x91\xb4\xfa\x7e\xcb\x20\xcf\x7f\xd5\x1a\x08\xce\x4c\x52\x05\x11\x7d\x11\xcd\xa9\x22\x91\xd2\x47\x70\x2b\x9a\x78\xb8\xfa\xe1\xea\xfa\xa7\x50\x82\xf8\xd0\xbf\x3c\xff\xf3\x7f\x94\x7e\xb8\xbd\x5c\xfa\x61\xfc\xe3\x9f\x97\x7e\xf9\xff\xad\xa4\xa7\x6a\x4f\x4b\x7a\x7e\x30\x97\x23\x10\xa9\xc1\x26\xec\xa6\x8a\x68\x8a\x67\x04\xc9\x3c\xd3\x14\x20\x8f\xcb\xfb\xab\x45\xca\x0b\x8e\x63\xca\x66\x26\x03\xf4\x82\x2a\x22\x70\x72\x89\xb3\x8f\xce\x7e\xbd\xc5\xea\xfc\xdf\xbb\x52\xbe\xee\x87\x9f\xfb\x97\x61\xc6\xef\x87\x9b\xdb\xeb\xfb\xeb\x95\xb3\x2e\xb5\xb0\x7c\x8c\xf4\xe3\x53\xf8\x5f\x74\x82\x74\xeb\x5e\xf2\x4d\x89\xc2\x5a\x23\x40\x5f\x9b\xa4\x39\x9f\x48\x43\x59\x02\xa7\x26\x13\x34\xa5\x70\xa5\x18\x0b\xde\x37\x46\xb8\xf6\xda\x83\x3f\x37\xe6\x03\xd0\x96\xdd\xa5\xcc\x62\x2c\x62\xf4\x77\x59\x4d\x1f\x07\xc3\xb1\xf9\x81\xc4\xe8\x08\xcd\x95\xca\xe4\xe9\xc9\xc9\xf3\xf3\xf3\xb1\x7e\xfb\x98\x8b\xd9\x89\xfe\xe3\x88\xb0\xe3\xb9\x4a\x13\x93\x2e\xaf\x57\xe1\x14\xdd\x08\xae\xaf\x10\x50\xd0\x89\xa0\x38\xa1\xbf\x92\x18\x4d\x0c\xff\xe3\x53\xf4\x4b\xc4\x05\x39\x2e\x36\xc6\x1a\x95\xec\x3d\x62\x0d\x4f\x27\xfa\xa5\x1a\x66\x52\xdd\x4f\x14\x93\x88\xc6\x56\xcc\x20\x2c\xe2\x60\x79\x34\xbe\x0a\xdd\x9e\xcb\x34\xd4\x1a\x4d\x96\xab\x62\x39\x03\x65\x05\xc7\x24\xc8\x76\x57\xbc\x4c\x70\x5a\xf1\x19\x1a\xb5\x35\xd7\x2a\xba\xbe\x5b\x31\xdc\xaa\xee\xd5\x4c\x4f\x38\xe2\x09\x9a\xe4\xd3\x29\x11\xa1\x43\xba\xa7\xb5\x19\x2a\x91\x20\x11\x4f\x53\x90\x18\xf4\x57\xb9\x34\x54\x0d\x2b\x66\x47\x7b\x3c\x62\xb0\xff\x5a\xcd\x01\x0a\x88\x39\xb0\x3a\x46\x48\x8c\x30\x5b\x98\x6e\x26\xf9\x34\x6c\xdf\xc0\x50\xe0\x18\x51\x35\x62\xfd\x24\x41\x82\xa4\x5c\x91\x20\x87\x12\x9c\x67\xe5\x05\x07\x16\x29\x48\x96\xe0\x88\xc4\x86\x1e\x12\x1e\xe1\x04\x4d\x69\x42\xe4\x42\x2a\x92\x86\x0d\x7c\x0d\xb6\x1a\xbd\x66\x54\xa2\x98\x3f\xb3\x84\x63\x3b\x8f\xea\x67\xdf\x94\x4f\xe3\xc0\x41\x04\x0c\x84\xe0\x02\xfe\xe7\x07\xca\xe2\xbd\x71\xa8\x87\xbb\xc1\x6d\xf8\xef\xbb\x9f\xef\xee\x07\x97\x9b\x71\x1f\x4f\x59\x30\x3c\xd0\xe1\x4f\xd1\x9d\x59\x04\x2e\xb4\x44\x24\x1a\x26\x75\x69\x49\xa9\xf8\x81\xc7\x5b\x72\xdf\xcb\xfe\xd5\x43\xbf\xc4\x51\xee\xce\xbe\x1f\x9c\x3f\x54\xf4\x01\x3b\xbf\x92\x0c\x6f\xd4\xbf\xf0\xb7\xb3\xef\x87\x17\xe7\xe3\x1a\x85\xf1\xc3\xed\xe0\xec\xfa\xc7\xc1\x6d\xa1\xdb\xd5\x2e\x51\x65\x30\x55\x66\x75\x6f\x98\xd2\x9c\xc7\x68\xb2\xa8\x07\x84\xd0\x92\x73\x02\xbe\xd8\x02\x12\xc5\xb4\x7a\x0a\xbc\xc9\x61\x73\x14\x5f\xa4\x3c\x26\x3d\xfb\x0e\x20\x69\x18\xe3\x8a\x91\x98\xeb\x1b\xd6\xbd\x63\x16\x18\x2a\x0c\xc8\x85\x5f\xb8\x53\xd4\x47\x52\xbf\x98\xeb\x43\x2d\xe8\x6c\x06\x86\xc3\xca\x50\x4d\x6b\xf6\x53\x58\x5e\xf8\xce\xec\x7f\x26\x38\x9c\x73\xdd\xad\xb5\x38\x7b\xab\x84\xf9\x10\x50\x57\xca\x2d\x0a\x0c\x06\x87\x9a\xa1\xb9\xcd\xd2\x8b\xd0\xb8\x5e\xe6\x3c\x1a\x7b\x91\x3e\x5c\xc0\xb6\xa4\xb1\x77\x66\x82\x3c\x51\x9e\x07\x9f\x5a\x60\x8f\xd2\x8e\xd7\x36\x5f\x2c\x00\x2c\x9b\x31\x8a\x54\x9a\xf1\xe4\x51\xdb\x82\x66\x61\x4f\xd0\xc2\x54\xf0\xb4\xa6\x8d\xf2\x31\x19\x5e\xdf\x29\x81\x15\x99\x2d\xce\x2d\xcb\xd8\xfe\x78\x9c\x5f\xff\x74\x75\x71\xdd\x3f\x1f\x0f\xfa\x9f\xca\x27\xde\x3f\xb9\xbb\xbf\x1d\xf4\x2f\xcb\x8f\xc6\x57\xd7\xf7\x63\xf7\xc6\x4a\x92\x6f\xe8\x60\xf9\x9e\x2e\xbf\x78\x8a\x34\xcb\x05\xd6\xe8\x00\xef\x02\xfe\x38\x21\x53\x2e\x0c\x9f\x4f\x5d\xe8\x82\x15\x61\xdc\xda\x5a\x5d\xac\x32\x8b\x53\xb0\x8c\xd5\x35\x69\xac\xde\x4a\x10\x9c\xc2\x3d\x81\x19\x1a\xb0\xf8\xe8\x7a\x7a\x74\x67\x7e\x4c\xb1\x78\x24\xc2\x7f\xfa\x2c\xa8\x52\x84\x95\x54\x3a\xec\x86\xec\x95\xc4\xa2\x83\x63\x74\xab\xf9\xbe\x7e\xdf\x5f\x6a\x9a\xd8\x63\xa2\x30\x4d\xa4\x1d\x6c\x69\x5d\x4f\xd1\x05\x16\xb3\xc2\x0e\xf7\x35\x9f\x4e\x4d\x63\xdf\x98\x61\xe8\x3b\xac\x34\x8b\x1a\xde\xab\x49\xc3\xdd\x8b\xd0\x9f\x7d\xd9\xcb\xc3\xcb\x54\xf5\x90\xed\x46\x53\x0f\x37\xb0\xe2\x46\x63\x2f\xe9\x86\xf6\x49\x0d\xad\xc1\xc4\xcd\xe3\xd5\x97\x4c\x7d\xdb\xcb\xe4\x54\x7e\xb1\x86\x9c\x4c\x2e\x95\xde\xf9\xa9\xd6\x36\x6b\x68\x89\x7c\xa6\xd6\x60\x10\x8e\xbb\x42\x42\x45\x33\x60\x5e\xc5\x59\x46\xb0\x90\x75\xbb\x5d\x16\x03\x1b\xf6\xde\xf4\x14\xf6\x61\x37\xd9\xf5\xd3\x43\x9c\x81\xc1\xc1\x0b\x11\x15\x8a\x6c\x41\x03\xa6\xad\x25\x0a\xb8\x01\xb4\xa5\x6b\x8b\x6c\x74\x49\xa5\x56\x1a\xcd\x8f\xdf\x59\xc8\xa5\xed\x08\xe2\x63\x7f\x78\x51\x11\x2e\xc6\xe7\x83\x8f\xfd\x87\x8b\xd5\x66\xc2\xd2\x77\xd5\x2d\x46\x47\x48\x3f\x2f\xfb\xcd\xe9\xd4\xdc\x19\x0e\x38\xca\xa8\xb4\x84\x81\xd1\xca\x42\xd5\x18\x7b\x75\x4c\xb2\x84\x2f\x52\xc2\xc0\xc4\x53\xba\x09\xf5\x7a\x4e\x31\xb5\x57\x4b\x30\x58\xb0\xe2\x58\xb3\x1b\x5c\x63\x47\x0e\xad\x8a\xc4\xfe\xe6\x2d\x83\x55\x55\x58\xf7\x8d\xf1\x9e\xd9\xff\xdc\x29\xac\xb6\x3c\x63\xfd\xb3\xfb\xe1\x8f\x83\xb2\x7e\x78\xf6\xfd\xf0\xc7\x3a\xa9\x66\xfc\x69\x70\x35\xb8\xed\xdf\xaf\x11\x4e\x2a\x4d\xd6\x09\x27\x52\x0f\xb8\xea\x3d\xa5\xd2\x47\x04\x45\x06\xf2\x0a\x51\x25\xd1\x13\x95\x74\x42\x01\x20\xcc\x7a\x22\x1f\x86\xc0\x59\x9f\x70\x42\x63\xaa\x16\x4e\x7c\x31\xfd\x96\xf7\x51\x73\x52\xdb\xbe\x31\x3b\x84\xfe\x49\xb0\xf2\x99\xcd\x71\x93\x3e\x45\xa0\xdb\x3e\x81\xd2\x16\x7c\xc6\xb4\x20\xcd\x66\x44\x98\xe1\x80\xf7\x25\x1c\x4b\xf0\x5c\x8f\x2a\x14\x56\x8a\x55\xf3\x42\xeb\x8c\x30\x22\x00\x04\xce\x77\x62\x04\x29\x41\xd8\x57\x5a\xe6\xca\x12\x1a\x51\x95\x2c\x50\x04\x36\x2c\x30\x67\xa6\x98\xe1\x99\x15\x0e\x40\xcd\xa9\x90\xc4\x5f\x0d\x8a\xda\xf5\xd4\x9a\xf6\xef\x29\xd9\xf2\x98\x3d\x5c\x9d\x0f\x3e\x0e\xaf\xca\x24\xf0\xfd\xf0\x53\x49\x84\xbd\x1c\x9c\x0f\x1f\x4a\xb7\xb9\x96\x64\x57\xcb\xf5\xd5\x66\x6b\x8e\xa2\x7f\xe9\x14\x9d\x9b\x4f\x4f\xf5\xe2\xd6\x40\xc4\x79\xe5\xb7\xb2\x0e\xb7\x2e\x24\xcf\xfd\x31\x60\x4a\xd4\xfa\x25\xda\x9a\x90\xac\x0f\xb2\x64\x43\xaa\x0f\x55\x58\xea\xfb\xaa\xea\x54\xae\x4e\xd9\xbd\x08\x41\x97\xc7\x85\x65\x29\x8c\x61\x00\xa3\x41\x93\x11\xab\xc6\xad\x55\x30\xec\x1f\xc1\x45\x9d\xe6\x52\x19\x57\x22\x10\x27\x7a\xfc\x8b\xd4\x0b\x0a\xae\xc6\x63\x74\x47\xc8\x88\x39\xeb\xc1\x8c\xaa\x79\x3e\x39\x8e\x78\x7a\x52\xe0\x13\x9e\xe0\x8c\xa6\x58\x4b\xd2\x44\x2c\x4e\x26\x09\x9f\x9c\xa4\x58\x2a\x22\x4e\xb2\xc7\x19\x44\xc0\x38\x77\xea\x89\x6f\x76\xc6\xff\xfd\xe2\x4f\xdf\x1e\x5d\xfc\xe5\xdb\x0f\xcb\x16\xb2\xa6\xfd\x1f\xb0\x08\x67\x32\x4f\x6c\xc4\x9c\x08\xd7\xc6\x1d\xf9\x9c\xac\xdb\xef\xab\xf2\x76\xed\xa6\xbf\x9e\xdd\x3c\x94\x2c\xd6\xe5\x7f\x5e\x0e\x2e\xaf\x6f\x7f\x2e\x71\xca\xfb\xeb\xdb\xfe\xa7\x12\x43\x1d\xdc\x7c\x3f\xb8\x1c\xdc\xf6\x2f\xc6\xee\xe1\x2e\xb6\xb7\x1f\x18\x7f\x66\xe5\xa5\x91\x8e\x03\x2e\xf5\x74\x8a\x3e\x72\x81\x7e\xf0\x3b\x79\x34\xc1\x12\xae\x18\x77\x67\xc9\x1e\xca\x78\x0c\x8c\x17\x91\x6c\x4e\x52\x22\x70\x62\x6d\x06\x52\x71\x81\x67\xe6\xa6\x97\x91\xc0\x2a\x9a\x23\x99\xe1\x88\xf4\x50\x04\xd4\x30\xeb\xc1\xa6\x80\xaa\xc5\x67\x55\x3b\xdf\x6d\xce\x14\x4d\x89\x53\xc1\xed\x3f\xef\xcd\x66\x6c\xb1\x39\xd7\xf7\xdf\x97\x85\xbd\x8f\x17\x3f\xdf\x0f\xc6\x77\xe7\x3f\xac\x5c\x4f\xf3\x59\x69\x64\x77\x10\x80\x74\xc6\x93\x3c\x65\xe1\xdf\xdb\x8f\x6d\x78\x75\x3f\xf8\x54\x1d\xdd\x75\xff\xbe\x4c\x19\xb7\xe5\x00\xb7\x0f\xdf\x5d\x5f\x5f\x0c\x4a\x2e\xe1\x0f\xe7\xfd\xfb\xc1\xfd\xf0\xb2\x44\x3f\xe7\x0f\xb7\x06\x8d\x70\xd5\x34\xdd\x08\x6a\x26\xaa\xa7\x15\x4e\x73\xdf\xac\xb0\x15\x27\xea\xdb\x80\x72\x73\x96\x8f\x02\xb8\x1d\x13\x0e\x06\x56\x9d\x23\x6f\x52\x8d\xcc\x48\x6b\xd9\xa1\x2a\x6f\x13\x6a\x66\xc7\x2b\x37\x7a\x15\x57\xbe\xf7\x43\x30\x50\xa0\x46\xd9\xc6\x49\xc2\x9f\x4d\x28\x6f\x4a\xf5\xad\x6c\x81\xd1\xf4\x2b\xb2\xf0\x10\x1e\xd7\x70\xbc\xf2\xb6\x90\x48\x10\x75\xc9\x73\xa6\xb6\x27\xb9\xfe\x55\x89\xef\x0c\xae\x7e\x1c\xff\xd8\x2f\x53\xe0\xf0\x62\x35\xab\x09\x9b\xa8\xb9\x8a\xfb\x57\x3f\xfb\x4b\x18\x02\xbe\x7b\x5e\x43\x35\xb2\x6b\x94\x50\x2d\xf6\x46\x58\x6b\xaf\x09\x48\x34\x88\x50\x30\x39\xa4\x7a\x72\x10\x60\x9a\x19\x7f\x92\xe1\x4f\x66\x90\xa7\xee\x8f\x4a\x7b\x12\xd6\x05\xac\xa9\x2e\x9e\x1e\xda\xb1\x5a\x35\x43\x84\x3d\x51\xc1\x01\xcf\x16\x3d\x61\x41\xb5\x34\x6e\x5a\xd6\x73\x3d\x85\xff\xdd\xac\x4d\x30\x8c\x56\x18\xd7\x1d\x17\xea\xdc\x07\xf2\x6e\x67\x0d\xa9\x0b\x68\x5d\x0e\x65\xad\x37\x74\x2c\x7f\x5b\xb3\x39\x3b\x06\xfc\x96\x27\xfc\x8f\xe4\x9c\xe2\x44\x33\x80\xfd\xc9\x8b\xfd\xab\xbb\x61\x59\x7e\x2c\xab\x19\x01\x5f\xde\x5a\x5e\x04\x43\xa5\x19\xb9\x53\x26\xee\xfe\x7a\x61\xb4\x0b\x00\x3d\x36\xe7\x36\x50\x2c\x40\x00\x72\x28\x28\x19\x16\xb2\xf2\x85\x44\x00\x84\x56\x04\x5c\xe9\x3b\x0b\xc2\x99\x9e\x38\x8d\x47\x8c\x7c\xce\x08\x93\x10\x1c\x60\xee\xb3\xc2\xd7\x2e\x8f\xd1\x70\x0a\x2c\x41\xbf\xce\x50\xce\xac\x03\x4c\x5f\xb8\x66\x90\x3d\x2d\xca\xda\x21\x78\x0d\x11\x0c\x2f\x8c\xb8\x60\xa9\x62\xf0\x23\xf6\x93\x77\xa2\xc1\xa3\x29\xd7\x0c\x48\xef\xa2\x6d\xef\x14\x61\x26\x69\x0f\x69\x85\xa5\xba\xa7\x90\x3a\xa0\x15\x4a\x1b\xc2\xa5\x39\x8d\xfd\xf3\xf5\xaf\x81\xa5\x38\xe1\xf0\x32\xa8\xbf\x0b\x2a\x57\x41\x83\x68\x9c\x18\x8f\xc9\xb8\xfd\x9d\x10\x71\x41\xac\x9f\x65\xe3\x6b\x60\x1d\x63\xbf\xc7\xf2\x71\xc9\xf7\x30\x64\x52\x61\x16\x91\xb3\x04\xcb\x2d\x83\x90\x9c\x8d\xa3\x57\x96\x38\x6e\x6f\x1f\x6e\xee\x87\xdf\xad\xe1\xf2\xd5\x8f\x97\xc3\x80\xa2\x24\x77\xee\xb9\x89\xe0\x38\x46\x9a\x7d\xce\xb8\x71\x05\x5a\xc1\xbf\x80\xfe\x36\x79\x3d\x3e\xa0\xb2\x04\x3b\x5e\xa4\x23\x58\x3b\x47\xe8\x4a\xa0\x76\x21\x50\xa4\x57\x02\x05\x26\x0f\xb7\xd5\xe0\x59\x34\x05\x49\xac\x75\x2b\x4b\xb0\x9a\x72\x91\x1a\x2e\x5f\x9a\xb4\x69\x7c\x75\xa3\x94\x29\x22\x44\x9e\x29\xea\xb0\xdc\xab\x52\x2a\x54\x78\xe7\xb3\x4b\x22\x25\x9e\x91\x5d\x1c\xd0\x75\xca\xc3\xdd\x8f\xe1\x3f\xc1\xc1\xdc\x46\xf6\x2f\x8d\xd0\x45\xbe\x3b\x7a\xba\x66\x1f\x4d\x20\xcf\x0d\x4f\x68\xb4\x65\xc0\xdd\xc7\xfe\xf0\x62\x3c\xbc\xd4\x4a\x7c\xff\x7e\x70\x51\x12\x25\xe0\x59\xff\xe3\xfd\xe0\xd6\x82\x58\xf7\xbf\xbb\x18\x8c\xaf\xae\xcf\x07\x77\xe3\xb3\xeb\xcb\x9b\x8b\xc1\x9a\xc8\x9c\xc6\xc6\x97\xad\xab\xd5\x57\x4f\x97\x7e\x81\x1d\xd6\xbc\x2c\xb4\x97\x41\xd6\x18\xa6\x09\x38\xc1\xb9\x71\x86\x63\xc4\x78\x4c\xe0\x67\xe9\xac\x33\x1e\x39\x1a\x0d\xd5\x57\x49\x82\x70\xae\x78\x8a\xc1\x6b\x93\x2c\x46\x0c\x4f\x34\x6b\xc5\x49\x12\x84\x77\x89\x9c\x31\xcd\x62\x75\x63\x06\xa2\x3d\x4a\x88\x66\xe7\x59\x90\xec\x67\xfd\x06\x53\xca\x20\xd2\x36\xc5\xe2\xd1\xb8\x99\x8a\x2e\x8b\x43\x21\x11\x96\x23\xa6\xc7\x45\xac\x61\xa8\xcd\x0a\x9f\xb6\x7a\xab\x71\x75\x52\xfc\x48\xf4\xaa\xa4\x79\x34\x47\x99\xe0\x33\x41\xa4\xb4\xb6\xe5\x08\x33\x13\x80\x60\x5f\xd7\xd7\xd0\x88\x31\xae\x97\xc2\x99\xb0\x63\x92\x11\x16\x13\x16\x51\x93\xd6\x07\xbe\x7b\x6f\xda\x9c\x09\x9c\xcd\x91\xe4\xe0\xf4\x86\x65\x07\xfb\x95\xf9\xc8\xdd\x64\x66\xc6\xe6\x71\x68\x81\x16\xb9\xe6\x13\xd7\x20\x27\x9a\x55\x86\x8f\xdd\x65\xe8\xdc\x2e\xc6\x0e\x98\x66\x09\x51\x06\xac\x1f\x96\x1c\x36\x43\xaf\x75\x69\x3f\xf4\x36\xd5\x6d\x82\xbe\xb0\xdd\x98\xb1\xb4\x23\x3a\xae\xb1\x6c\xdb\x23\x85\xbe\xc7\x2c\x4e\x74\x2b\xce\x87\x51\x3e\x8b\x90\x8a\xd2\xd7\x54\xe3\x4e\xe3\x2e\xb7\x68\x84\x73\xb9\xcb\x35\x5a\xc9\xc5\x34\x56\xc1\xa3\x22\x28\x04\xc8\xdb\x26\x62\xc2\xea\x66\x9a\x45\xe2\x84\xdb\x55\x32\xaf\xe7\xa6\xfe\x13\x82\xd1\x34\x5c\xb3\x99\xa0\x2c\xa2\x19\x4e\xb6\xd2\xfd\x2a\xc1\xf8\x36\xc6\xfd\x6b\x3a\xd5\xe4\xf3\xcd\x92\xdb\x56\x11\x91\x42\x82\xb2\x1d\xa6\xdf\xc2\x0d\x2c\x49\x36\xab\x81\xc8\x22\x9a\x04\x0b\x9e\x1b\x7f\x1c\xac\x0b\x89\x6b\x8e\xea\x71\xdd\x76\xeb\x93\x81\xcb\x01\xd0\x5b\x6c\xb6\x89\xfc\x69\x5a\xbf\x4a\x2b\xb6\x77\x13\x8c\x87\x93\x9b\xfa\x36\xeb\x76\x20\x78\xf8\xaf\x55\xb4\x73\x89\x33\x4d\x33\x16\xb6\x1f\x17\x73\xb4\x4a\x92\xad\x0a\xe6\xe2\x67\x02\xdf\xb9\xcf\x0b\x69\xbf\x1b\xc5\x12\xda\x00\xa8\xe5\x4e\x4a\x31\x04\x41\x8e\xb9\xa5\xf1\x69\xae\x65\x59\x84\x21\x0a\x01\x7d\x4d\x8e\x67\xc7\xc8\x15\x61\xe8\xa1\xfe\xcd\xcd\xe0\xea\xbc\x87\x88\x8a\xbe\x71\x31\x8b\x36\x60\x69\xc4\x14\xb7\xd2\xca\xc2\x15\xd0\x48\x89\x98\x91\xd2\x9c\x5d\x74\x13\x84\x2a\xcf\xa8\x54\x36\x7c\x56\xf3\x95\xa0\xd4\x09\x4d\xab\x62\xb6\xa1\x90\x5c\xcd\x77\x21\x0d\x2c\x65\x9e\x6a\x5d\x76\x4c\x71\x3a\x16\x3c\xd9\x85\x29\x9c\xc3\x54\x40\x5d\xf6\xe9\xf9\x14\xa7\x48\x37\x6b\x43\x41\xbc\xcb\xd1\x8b\x74\x5a\x30\xd2\x7c\x59\xdf\x9b\xc1\xbd\xe5\xbc\x0f\x36\x1e\x8d\xba\x10\x08\x48\xdf\x6f\x60\x15\x85\xd9\x78\x6c\x2d\xf5\x63\x1c\x45\x5a\xe5\xde\xf3\xa4\x82\xfa\x39\xce\x25\x60\x3b\x7a\xb1\x69\xae\xa3\x73\x37\xcc\x4c\x73\x30\x08\x06\xd6\x57\xae\xe4\x11\x2d\xda\xaf\xe9\x77\xb2\x58\xea\xd5\x55\xb8\x79\x90\xde\xa4\x62\x2e\x61\x49\x60\x27\xa5\xa9\x90\xa3\xe6\x64\x81\xe6\xf8\x89\x94\xba\x74\x09\x31\xba\xe1\x05\xcf\x45\x1d\xa3\x1b\xb1\x73\x92\x09\xa2\x25\xfd\xaa\x03\xc5\xd3\xf4\x6d\x99\x12\x3b\xba\xee\xe8\xfa\xdd\xd3\xf5\x99\x29\x94\xd4\xf7\x85\xb1\x76\x12\xe0\x4c\x63\xe3\x8c\xf3\x64\xdc\xc2\x26\xd2\x7e\xc5\x4b\x9e\xb0\x4a\xd9\x28\x80\x04\xe0\x39\xc8\x47\xa5\x6b\x93\xeb\xbb\x2e\x48\xb1\xb5\xc3\x5b\xb1\x0c\xce\x65\x16\xd4\xcb\xd9\xe5\xbc\xd7\xb5\xb2\xaa\x25\xf4\xe2\x62\xce\x99\x91\x6f\xbc\xbb\x2c\xac\x7f\x5a\x3a\x4c\x4e\x14\xa1\x6c\xa9\x1a\x9b\xa1\x67\xbd\xc0\x46\xee\xf8\x47\xce\x15\x96\xdf\x1c\x8f\x98\x16\xa2\x1e\xc9\xc2\x98\x5b\xb5\x98\xf2\x3b\x2d\x8b\x1f\x49\xc2\x24\x84\x7b\xff\xce\xb8\xe7\x34\x89\x3b\x73\xb5\x51\x4d\x4d\x11\x38\x08\xba\xf6\xbd\x40\x88\xae\x6d\xd4\x4a\x49\x45\x00\x34\xc8\xf9\x66\x2e\xf6\x99\x19\xfe\x8c\x28\x48\xb1\x56\x54\x81\xce\x14\x9b\x2a\x73\x4b\x43\x5f\x6b\xba\x32\x54\x21\x38\xf8\x49\xe2\x7c\x37\xc6\x2f\x97\xdb\x58\xcb\x19\xbd\xb6\x70\x67\x63\xde\x4f\x9c\xdd\x28\x12\x7c\xa9\x74\x1b\x96\xc8\xec\xf4\xc4\xb0\x03\xe7\xbf\x26\xec\xf8\x99\x3e\xd2\x8c\xc4\x14\x43\x04\xbc\xfe\xd7\x89\x9e\xd7\xbf\x9f\xdd\x5e\x5f\x8d\x8b\x4c\x9e\xff\x1a\xb1\x7e\x22\xb9\xcf\x52\x40\x8c\x33\x1f\x6e\x9f\x09\xe2\x44\x42\x3b\x17\xb0\xba\x16\x66\xc4\x11\x6b\x1a\x41\xcc\x23\x79\x8c\x9f\xe5\x31\x4e\xf1\xaf\x9c\x81\x2b\xbd\x0f\x7f\x9e\x25\x3c\x8f\x7f\xc2\x2a\x9a\x9f\xc0\xb9\x56\x27\xe4\x89\x30\x65\xdc\x54\x7a\xb9\x62\x48\xde\x95\x10\xad\xff\xef\x7a\xcc\x45\x52\x91\xd4\x9a\x6c\x44\x32\x85\xfe\x1f\x41\x26\x9c\xab\xfa\x4b\x8a\x4f\xa7\x92\x6c\x74\x21\x15\x4a\xda\xdd\x35\xfa\xcb\x9f\xbf\xfd\x83\x26\xa1\x6d\xd6\x78\x78\x77\x3d\xd6\xdf\xff\xfb\xb9\xfd\x5e\x6e\xc0\xee\xae\xb3\x82\xb5\x39\xe2\x31\x81\xf3\x39\x83\xdb\x4f\x80\xf3\x02\xd8\x1b\x90\x43\xb1\x8f\x75\xdc\xed\xbc\xd4\xfa\x6e\x2a\xdb\x56\x8b\x09\x2a\x76\x30\x47\x74\x84\x18\x47\xa9\x89\x35\xc5\x0c\xfd\xc7\x0f\xdf\xd5\x6f\x60\x2e\xe8\x56\x1d\x52\x0b\xd7\x10\x74\x29\xe9\xaf\x44\x22\x4d\x35\x9a\x8a\x79\xaa\xbb\x16\x44\xce\x79\x12\xa3\x67\x02\x6a\x92\x8d\x03\xf5\x5a\xb9\x20\x23\x16\x36\x01\x21\x87\x08\x27\x8a\xcf\x08\xdc\xd5\x4e\x51\x53\x44\x68\x51\xc5\x64\x69\x28\x2e\x48\xcf\x40\x7d\xdd\xfd\xc9\xc5\x56\xc3\x34\xe1\x91\x4b\x6a\xb1\x26\xb9\x78\x52\x3f\xf3\x69\xd5\xf4\x8a\x9a\x6d\xf8\xd5\x4d\xb6\x66\xdb\xfa\xa5\xb1\x49\x28\xd6\x86\x55\xdd\x99\xfa\xc1\xd0\x88\xb3\x71\x42\xd9\xe3\x56\x9b\x71\xed\x44\x39\xdd\x82\x5d\x33\xdd\xa2\xb7\x73\x1b\x0b\xc8\x06\xe7\xe3\x63\x9e\x24\x26\xb5\x25\xdc\x1e\x90\xbb\xcc\xba\x81\x30\x90\x99\x1c\x50\x12\x5b\xbf\x97\xd5\x84\x05\x61\x10\xf0\x36\x62\x93\x85\xf5\xd9\xca\x1e\x92\x79\x34\x77\x99\x79\x11\x67\x52\x8b\xd1\x5c\xa0\x88\xa7\xa9\x29\x6e\xca\x08\x52\x9c\x27\xd2\x46\xbb\xb3\x23\x85\x23\x35\x62\x45\x7f\x6b\x4e\x9e\xa9\x80\xb4\x5b\xea\x5e\x7b\x97\x4e\x51\x69\x69\xa5\xc0\x4d\xe3\x10\xb3\x01\x8c\x60\xc6\x13\x15\xa0\x3f\xf0\xe5\xb3\x64\x36\xac\x41\x33\x90\x73\x2e\xd4\x38\xae\xe5\x39\x6b\x89\xa6\xca\x08\x19\x39\x4a\x20\x68\x98\x3f\x69\xe1\x9f\x3c\x7b\xe3\xeb\xaa\x21\x68\xaa\x5e\x35\x82\x76\xc7\x68\xe5\xc8\x36\x25\xc1\x86\xb5\x32\x08\x1e\x51\x39\x26\x7c\xdd\x18\xef\xe0\xab\x33\xfd\xd1\xca\xc5\xab\x9e\x3b\x27\x04\xf1\xb8\x00\x9b\x33\xf7\xba\xcd\x08\x59\xb5\xa6\x16\x3a\xe1\xe5\x32\x47\x57\x4d\xe5\xa1\x6c\xc9\xd5\x63\x01\x93\xbd\x24\x20\x6b\x62\x31\xa1\x4a\x60\x51\x42\x0a\xf1\xfa\xa0\x24\x58\x40\x7c\xd6\x88\x19\xdc\x38\xa3\x29\xc4\x28\xa6\x12\x12\x44\xe0\x2e\x0d\x9c\x61\xa8\x9d\x12\x58\x39\xda\x45\x9e\xa3\x89\x3f\x87\xc0\xb2\x82\x34\x1c\xb3\xd3\x1d\x79\x7c\x2c\xad\x9f\xf1\x28\x2f\x04\xb9\x08\x24\x5c\x8b\xa9\x83\x28\x93\x74\x36\x57\x88\x32\x6b\x77\xc4\xc9\x8c\x0b\xaa\xe6\xa9\xec\xa1\x49\x2e\xb5\x16\x6a\x82\xd5\x4c\x3c\x0a\x51\x51\x2b\x2e\xb4\x6b\x12\x71\x5c\x69\x70\x59\x45\xd9\x82\x34\xda\x1d\xca\x41\xe5\xae\x58\x43\x38\x7d\x8f\x33\x58\x6d\x83\x42\xdd\x46\x03\x4f\x89\x4c\x1c\x20\x77\xc8\x4e\x50\x05\xa4\xe9\x1c\x00\x2a\xe4\xde\xbc\x14\xaf\x51\x88\x0b\x99\x64\x50\x41\x5c\xec\x36\x48\x5e\x65\x64\x4a\x83\xde\xe4\x9d\x4e\x69\xa6\x6a\x03\xb7\x96\x5d\x45\xb7\x01\xe6\x4f\xbb\xc5\x86\x64\x2c\xa0\x66\x40\x6a\x1b\xb1\x3b\x42\x9a\x81\xdc\x96\xf6\xde\x94\xc6\x85\x29\xd8\x44\x8f\xd5\x24\xbf\x8b\x13\xfb\x7c\x70\x77\x76\x3b\xbc\x31\x90\x13\xd7\xb7\x97\xfd\xfb\x71\x8d\x5f\xbb\xe6\xad\xcb\xfe\xed\x0f\xe7\xeb\x5f\xfb\xfe\xbe\x9c\x95\x5d\xf3\xca\xed\xdd\xea\x64\x8e\x16\x43\xac\x49\x0a\xab\xed\xe7\x14\x65\x0b\x35\xe7\xcc\x87\x28\xc4\x25\xde\x74\x84\x4c\x46\xb0\x82\x10\x22\x21\x55\x8d\xe3\xf0\x1e\xe2\x72\xd6\x4b\x98\xe5\xcd\x32\x30\x6c\x7b\x15\x8d\x36\x38\x91\x9f\x12\x3e\x01\xbf\x75\x5e\x2a\x71\xbb\x22\x02\x7d\xc7\x78\x9f\x73\x2a\xb3\x04\x2f\x96\x7a\x58\x77\xe5\x5c\xe1\x94\x40\xc4\x71\x81\x1f\xe7\x92\x45\xf4\xce\x40\x02\x93\xbf\xd7\xe9\x14\x32\x99\x14\xc5\x8a\xa0\x09\x51\xcf\x90\x37\xe7\x7e\xf5\xb6\x54\x17\x30\x22\x8f\x47\x0c\xcc\x39\x23\xbd\xc8\x71\x0e\xd1\x7e\xa3\x0f\x3d\x34\xfa\x10\x93\x27\x92\xf0\x4c\xef\xbc\xfe\xa1\xe1\x92\x19\xa4\x98\x26\x57\x5c\x79\xcb\xdc\x2e\xfb\x29\x48\x44\x33\x90\xcc\xc7\x44\xb7\xfb\x7a\x82\x47\x89\x92\x1d\x3b\x83\x31\x20\x1c\xc7\x5a\xc9\x06\x56\xe6\x86\x57\x84\x00\xb1\x60\xea\xa5\x5a\x99\x9b\x88\x14\xde\xfc\x6d\x7a\x0c\xdb\x2c\x9b\x3d\x6b\x77\x80\x3d\xbd\xa0\x4b\x76\xd7\x8b\x5c\x6b\x25\x3f\x90\x05\xa4\x60\xdc\x60\x2a\xb6\x74\xcd\xd6\xc5\xbc\xbe\x88\x93\x76\x50\xd3\xd1\x01\xb9\x6b\xeb\xd7\x61\x37\xc7\xad\x8f\xd5\x7b\x2d\x2d\xd5\xc5\x72\xf9\x8e\x5b\xaa\xad\x0f\x4d\x4a\x6a\x63\x08\x03\xaa\x2a\x5e\x19\x89\x36\xd0\xb8\xfc\x00\xef\xf4\x77\x6b\x35\x15\x2f\xae\x45\x61\x4d\x7f\xd8\x05\x9b\x1c\x5f\xcd\xc7\x27\x6b\x47\x1c\x25\x5c\x96\xb1\x72\x5a\x0f\xfa\xcc\x7e\xba\x6a\xdc\x83\x90\x7c\xb5\x5c\xb8\x51\x40\x43\xcd\xc2\x57\xc0\x20\xcd\x3d\xa3\xac\x87\xcc\xbe\xdd\x43\x14\xa2\x2d\x41\x21\x4b\x0a\xe4\x00\x16\xa3\xc2\x0d\x32\x62\x45\xcc\x8a\x44\xcf\x24\x81\x30\xb7\x88\xa7\x19\x98\xf8\xed\x70\x6d\x4b\x24\x36\x11\xc3\x3d\xc4\x73\xa5\x1b\x33\x39\x39\xce\x88\x6b\x13\x7e\x0a\xb7\x87\xf1\xbd\xd9\xe0\x77\x0f\x2c\x6d\x68\xdd\xdc\xa5\x94\xa1\x4f\x44\x41\x2b\x00\xdc\x1f\x4e\x10\xf4\x84\x6a\x08\x65\xfd\xda\xef\x70\xa2\xec\x4c\x36\xd8\xf9\x02\x38\xe5\xbb\x84\x4f\x56\x1b\x09\xa0\x71\xf4\x70\x3b\x74\x16\xc9\x22\x7e\x2a\x40\x2f\x2e\x79\x14\x07\x37\xb7\x83\xb3\xfe\xfd\xe0\xfc\x18\x3d\x48\xa2\x97\xc7\x4f\x17\xf2\xab\xbd\x4a\x62\x46\x6e\x91\x58\x98\x54\x04\x37\x19\x42\x88\x10\xa5\x2c\xe8\x35\x8c\xa3\x0c\xd3\xb2\x9a\xb0\x01\x24\x85\x5a\x43\x1d\x00\x0b\x55\xe7\x69\x23\xf3\xd6\x9d\x40\x88\x93\x1a\xbf\x9f\x28\x35\x33\xde\x74\x39\x32\x6f\x1d\xf9\x94\x23\xfa\x5e\x7a\x32\x70\xb4\xd4\x9c\x50\x81\x5a\x4d\xcb\x10\xd5\xb8\xfd\x9c\x82\x10\xf7\x4b\x9c\xad\x4e\x3f\xc5\xcf\x25\xa2\x35\xa2\x70\xe0\xbb\x7f\xe9\x73\xe0\xd8\xda\xd8\xb0\xc2\xdd\x27\x58\x38\xb4\x0c\x6f\xf5\x7c\xd3\x64\x7c\x48\x67\x24\x0b\x27\x56\x19\x84\x8d\x63\x95\x08\xce\x0e\xfc\x42\x19\x2a\x5d\x89\x3d\x34\xa5\x9f\x6d\xa3\x45\x7c\xbb\x7b\x35\x08\x78\x68\x88\xa7\x9c\xe3\xe5\x33\xb5\x81\xd8\x70\x03\xdf\xaf\x14\x22\xb9\xd4\x22\x51\xa4\xc5\x25\x41\x22\x2e\xf4\x4d\x01\xdd\x16\x5e\x88\x75\x22\x83\xc2\x42\x2f\xca\xb2\x57\x66\xd5\xe9\x2f\x6a\x90\xc4\x58\x91\x23\x2d\x7a\xad\x49\x80\xb6\x39\x32\x90\x4d\x83\x55\x00\x07\x56\xdc\x3c\x13\x32\xc3\xcc\x85\x66\x37\x0c\xd7\x5d\x79\x3b\xb0\x2a\xad\x02\x61\x48\x0f\x03\xf9\x0a\x52\x7f\x4a\xe3\x90\x19\xac\xe7\xca\x71\xd8\xe8\x97\x43\x58\xb6\x67\xec\x83\x71\x1a\x06\x9b\x67\xf1\x21\x0d\x36\xc1\x52\x21\x3b\xa6\x26\x53\x44\xa0\x22\xbe\xac\x11\xb6\xa4\xdb\xb7\x55\xde\x34\x09\x95\xb5\x58\x02\x9e\x11\xe9\x70\x53\x0c\x4a\x8c\xd6\x69\x9c\x20\x6c\x4a\x31\xfb\xb3\x6d\x6b\x32\xbb\x5b\x22\x64\x26\x10\xa4\xbf\xdc\xf4\x31\xea\xb3\x25\xbc\x2c\x17\x97\x55\x5a\x2f\x73\x27\xe1\xe4\x19\x2f\x24\xca\x84\x81\x96\x31\x91\xfb\x6e\xf2\xa0\x81\x95\x3f\xf2\xa1\x10\xca\xa5\x4e\x20\xb0\xc5\xac\x0f\x9a\x73\x72\xef\xf8\x05\x5c\x79\x95\xa8\x72\x2f\x90\x17\xcd\x15\xb6\x8a\x16\xac\x4e\x91\x71\x34\xc7\x6c\x46\xc6\xce\xc8\xba\x8d\xb6\xa4\xdb\x39\x83\x66\xce\x6d\x2b\xf5\x97\xd3\x8d\x51\x98\x6c\xfd\x17\xf3\xaa\x37\x20\xea\x43\x20\x15\x9e\x11\x64\x46\xd4\xca\x2c\x5d\x8a\x18\xb3\x60\xc3\xa0\x27\xd8\x56\x07\xe5\x28\xfa\x26\xe1\x1d\x42\x9f\x2e\xf0\x84\x24\x6f\x13\x39\x01\x5d\x5b\xe3\x3c\x78\xeb\x4c\x36\x00\x41\xcf\x60\xcf\xaf\xb0\x0c\x6b\xbd\x17\x79\x5d\x6e\xc0\xaa\x79\x96\xaa\x9f\xef\x30\x51\x57\x2b\x64\x9b\xa9\x36\x55\x10\x09\xaf\xbd\xa0\xd2\x46\x9d\x81\x2d\xbc\xfe\xaa\x36\xe5\xed\x06\x12\x14\xfc\x68\x18\xc7\xce\x15\x3f\xd6\x4e\x65\x6b\x90\x81\x96\x55\xf0\x86\x53\xc4\x38\x23\x88\xca\xe2\x65\x55\x4e\x87\xf2\x10\x3d\x5a\xc4\x37\xc6\x17\x5f\xa5\xcb\x17\x5f\x7a\x69\x4b\x4b\x01\x9e\xe0\x6d\x03\x2e\xbf\x9b\x11\xad\xa8\x62\xb1\x00\x88\x4f\xc3\x87\xcb\x32\xdd\xda\x71\xee\x5d\xe0\xbe\x77\x08\xae\x41\xa4\xae\xe2\x08\xc4\xc8\xca\xe0\x90\xc1\x41\xb5\x2f\xd9\x8f\x2c\x4c\xcd\x88\x79\xcb\x06\x10\x22\x95\x28\xc5\x19\xf8\xf4\x18\x57\xc5\x57\x06\x76\x49\xf9\x2d\xec\x39\x41\x5c\x9a\x1a\x5a\x0d\x2b\xb0\xce\xb4\xe3\xae\xdf\x62\x5d\xcb\xf0\x96\x0e\x9a\x77\x46\x9f\x08\x73\x34\xdd\x73\x67\x42\x0f\xca\x75\x9a\x2c\x8e\x30\x84\x19\x93\x38\xf4\x7c\xac\xe6\x48\xc6\x20\x73\x08\xf6\xc8\xf6\x4b\x76\x5f\x1b\x46\x63\x40\xd2\x4a\xe8\xf6\x2e\x30\x3c\xa4\x52\x8b\xdb\x6b\x32\xc1\xb1\x44\xbf\x63\x5c\xfd\x2e\x40\x36\x76\xc6\x0b\xf8\xd4\x99\xa0\x7a\x4b\x25\x5b\xe0\xd0\x5a\xc2\x41\x38\x40\xd8\x5a\xbb\xf2\xbb\xc6\x06\x14\x81\xef\x2f\x2a\x8d\x0e\x96\xb3\xe0\x9a\x6a\x5e\x75\x1e\x7b\x54\xbd\x16\xaa\x06\x4f\x53\x56\xaf\x38\xe9\x25\x43\xa7\x5c\xe7\xa2\xf7\x7b\xd1\xca\x35\xbf\x84\x08\xb0\x0b\xb5\xa5\xad\x23\xa7\xd6\x80\x20\xd7\xdb\x25\xb6\xc9\xf3\x6c\x92\xcb\x45\x39\x74\xcd\x96\xc1\x68\x40\xf9\x3d\x1e\xb1\x8f\x5c\xd8\x2b\x58\xda\x3a\x03\x13\x1c\x3d\x1e\x11\x16\x23\x9c\xab\xb9\x41\xdb\xb5\x7e\x85\x85\xa5\x06\x2d\x69\x00\xd9\x78\x28\x0d\x2a\x23\x2c\x62\x57\xf1\xe2\x89\xbb\x51\x8c\x58\xd0\x08\x54\x32\x80\x42\x4f\x50\xaa\xb6\x49\xd5\x24\x52\xeb\x57\x4d\x6b\x51\x57\x84\x75\xa9\x04\xeb\xea\x73\x56\x2a\x2a\x0b\x35\x18\x20\xc0\x89\x4f\x97\x57\x67\xe8\xac\x8d\x4e\xbf\xd3\xf4\xbc\xec\x85\xe8\x59\x8d\xc2\x98\xa4\xec\x0c\xb4\xa4\xf3\xad\xe3\xb5\x25\xd4\xe0\x69\x2e\x20\x5c\xb7\xae\xcd\xaf\xa3\x39\x4d\x0a\xdf\xc5\x37\x3d\x3f\x4c\xdd\x64\x42\x9e\x48\x62\x30\xeb\x23\x01\x91\xf9\xc6\x6a\xf8\x2d\xfa\x3f\xa6\x30\x29\xfa\xc3\x88\x7d\x02\x36\x9c\x24\x0b\x40\xd4\xf4\x2d\x63\x55\x69\xe6\xb1\x76\x00\xca\xa6\x02\xa1\xf2\x40\xcc\x5e\xcf\xf1\x13\x19\x31\xd7\xcc\xff\x41\x8f\xe8\xf7\xe8\x0f\x4d\xea\x9d\x0b\xb0\x7f\x61\x3b\xc7\xc7\x20\x7c\x3d\xb8\xe5\x2c\xa3\xb4\xfc\xc6\x99\x41\x4a\x46\xc8\x1a\x64\x0d\x0f\x8c\x4d\xd9\x13\x8f\x96\xb2\x38\xc2\x53\x8b\x05\x61\x6a\xcc\x78\x4c\xc6\xa4\xc6\xa5\xb9\x82\x49\x68\x21\xe0\x8a\xc7\x64\xad\x43\xd2\x33\xd3\x9f\xc0\x74\x23\xf3\x89\xdf\x0e\x48\xf0\xf7\xd9\xdc\xde\xfa\x50\xa6\xb4\xfa\x91\x7b\xf4\xd9\x6d\xc6\xbd\xad\x33\xd5\x85\x89\xf6\xe0\x42\xb0\x03\xa8\x77\xe8\x25\x58\x39\xf7\x7a\xf5\x38\x56\x1d\x01\xfa\x65\x3d\x73\x7b\x59\x05\xb8\xba\x50\xfb\x44\xd0\x19\xd5\xf2\x7b\x7b\x87\x2d\x70\xc2\x6d\xbc\x19\x06\x64\xb4\x95\x3b\xa3\x58\x0a\x07\xb4\x72\xe4\xe9\xaf\x70\x42\x4e\x78\x5e\x15\xe0\xed\x02\x50\x19\xba\xfb\xad\xac\xbe\xd0\x7c\x78\x66\x32\x00\xc9\x9c\x9a\x9c\xfb\xfe\xd9\x05\xd2\xa7\x83\xa7\x06\x98\x0a\x16\x2d\x57\x73\x2e\xe8\xaf\x8d\x19\x4a\xcd\x32\x7a\xe1\x69\x2d\x12\xba\xcc\x38\xcb\xd2\x3a\x10\xab\x11\x29\x54\x49\x2b\xa9\xd3\x99\xd0\x24\x07\x0c\x56\xcd\x66\xa7\x79\x62\x0a\x37\x44\x5c\xc4\xa6\x72\xba\x2c\xa5\x8f\x41\x18\xae\x13\xef\xb1\xf2\x0d\x52\x0b\x55\x69\x4b\x43\x18\x0b\xce\x4a\x01\xf4\xaf\x39\xc9\xf7\x94\x81\xf7\xa6\x31\xcb\xf7\x78\x26\x8b\x20\x64\xb3\x36\x9a\x37\x17\xeb\xfb\x0f\x3d\x53\x19\xe4\xac\x3a\xcb\xa2\x87\x80\x32\x2a\xb9\x29\x0c\xba\x91\x45\xe7\xd6\x40\xdf\xef\xc1\xa4\xf3\x1a\xf1\x1c\xcb\x32\x52\x0d\xfb\xb1\xe4\xf7\xe4\x33\x38\xab\x2c\xe2\x85\xec\x24\xae\x86\x40\x45\xfa\x78\x41\x93\xc9\x16\x4c\x6e\x59\xa8\x5e\x19\x15\x5d\x18\x50\x3c\x5b\xab\x49\xa6\x56\x1c\xd2\x2e\x9e\x05\x05\x84\xb8\x45\xf1\xb2\xaf\x81\xeb\xae\x8b\x90\xc7\x68\x29\xc5\x88\xb5\x10\xd7\xe1\x96\x70\x51\xcf\xe3\x37\x30\x40\xd8\x86\xca\x5d\x2f\xfb\xed\x9b\x4e\x84\x61\x49\x87\x7a\x24\x96\xe1\x61\xd6\x1e\x06\x5f\x09\xe4\x6d\x0c\x88\x5e\xb4\x79\xbd\x93\xe1\xc9\x71\x1c\xe1\x68\xde\x38\xa9\x09\xe7\x09\xc1\xac\x49\x7a\xad\x7d\x5c\x3d\x22\x06\xdc\x14\x58\x77\x92\x00\xc2\xaf\x5b\x02\x5b\x15\xb2\x10\xdf\x59\x0c\xc8\xec\x86\x87\x9b\xd8\x40\x37\x50\x45\x98\xb3\xfc\x50\x36\x4b\x48\x75\xad\x2c\x84\x7e\xcf\x76\x92\x44\x79\x12\x94\x85\xcc\x88\xd0\xa3\xd6\x4b\xfc\x44\x98\xd6\x19\xec\x38\x9c\x33\xe3\xd9\x25\x44\xfb\x62\x50\x3d\xdf\xb5\xf3\xa7\x41\xd6\x61\x3c\x62\x70\x70\x79\xf9\xb0\x6a\x5a\x95\x5a\xcd\x08\xed\x52\x5b\x9f\xce\x40\x88\xd8\xf8\x78\xde\x95\xcd\xc4\x1b\x9f\x49\xd3\xf7\x18\x62\x0c\x76\x76\xad\x05\xee\x97\x02\xaa\xc1\x6c\xac\x83\xe3\x7a\x25\x23\x32\x44\x6d\x94\xc3\x4e\x83\xa0\x8d\x26\x38\xa8\x17\xbd\x4b\x8a\xf2\x17\xee\x36\x68\x39\x94\x95\xae\xea\x96\x8e\x67\xb0\x4e\xae\x3a\xb7\x17\x36\x64\xbb\xec\xb2\xf5\xf9\x3d\x45\x98\xa3\x2d\xf0\xaa\x04\x06\x74\x02\xc8\x29\xff\xc9\x68\xd8\x54\x1a\x0b\x98\x2b\x73\x91\x66\x6a\x61\xab\xa2\xc1\xbd\x18\xe6\xf4\x1a\xc4\xb7\x3a\xf7\x70\xf5\x8e\x8c\x4b\x0e\xe2\xba\xce\xa0\x23\x6b\x56\xa8\x6d\xd2\x2d\x74\x88\x20\x52\x41\x6c\x68\x8a\x06\x31\x05\x66\xc7\x38\x69\xb4\x65\xed\x81\x69\x42\x9a\x6d\x81\xd2\x60\xc1\x5f\x95\xc8\x89\xe6\x5d\x38\x49\x2a\xf3\xc2\x90\x0e\xad\x7c\x91\xb9\x49\x51\x09\xb7\xbd\xb3\x3a\xc1\x13\xb2\x91\x7b\xfa\xc2\x7c\xb0\x92\x8a\xe0\x15\x88\xec\xce\xb2\x64\xd1\x2e\xa2\x3c\x0c\xbd\xab\x05\x49\x5b\x37\xb0\x10\x5a\x6d\xe5\xdd\x54\x86\x27\xdb\x6e\x88\x92\x44\xb9\xa0\x6a\x31\xb6\x46\xbf\xf6\x4c\xeb\xce\x7e\x79\x66\x3f\x6c\xa3\x51\x9f\x22\xd7\x9f\x33\x32\xc2\x3d\x25\xa8\xa9\xa0\x63\xa7\xd0\x66\xbb\xb5\x96\x5c\x0b\x9e\xb4\x6a\x61\x1d\x7a\x53\xbb\xa1\xea\x2e\xb6\x1d\x9e\xad\xcc\x31\xe6\x53\x87\x8b\xd4\x7e\x61\xab\x25\x4b\x36\xb0\x96\x3a\xf8\xe5\x4c\x50\x2e\x6c\x65\x90\x36\x41\x6d\x29\xfe\x3c\xce\xb0\xc0\x49\x42\x12\x2a\xd3\xed\x6d\xbb\x7f\xfa\xe3\xca\xd1\x9e\x99\x0a\x36\xd2\xd6\x83\xfa\x4c\xd3\x3c\x45\x2c\x4f\x27\x56\xca\xc5\xf2\x31\x04\xbf\x74\xa9\xfa\x06\xc3\xc9\x0d\xb0\x04\x18\x20\x02\x38\xd3\x11\x0b\x80\xad\xad\xa9\x02\x47\x73\x4a\x9e\x00\x76\x53\x30\x22\xe5\x31\xba\xe2\x8a\x9c\xa2\x4b\x9c\xdd\x83\xa0\x66\x4a\x4a\xce\x8c\x75\x1c\x4b\xa4\xa5\xd6\x9c\x51\xd5\x1b\x31\x8b\x86\xed\x56\xe5\x24\xe2\xcc\x20\xa2\x46\xb0\xb0\xbe\x09\x30\xf7\x3a\x68\x50\xe5\x12\x1b\xa9\x6c\x58\x6c\x81\x9f\xc7\x41\xf4\xea\xd8\x64\x07\x6c\x40\xc7\xb7\xf8\xd9\xc4\x6b\x9f\x63\x85\x4d\xb5\xd8\x55\x92\xbb\x0d\x88\xb2\x15\x84\x0c\x10\xb0\x0b\x1c\xe1\x16\x8d\xc2\xd7\x3e\x33\xd1\xa9\x5f\xd3\x63\x72\x8c\xbe\x4b\xf8\x44\xf6\x90\xf4\xa0\xd9\xf0\x50\x12\x25\x7b\xc6\x41\x05\xff\x36\xa9\x60\xdf\xb8\xd5\x2f\xf8\x3e\x94\xfd\x9b\xd2\xcf\x06\x04\x43\xfe\xe9\xf4\xe4\x24\x5d\x1c\x4d\xf2\xe8\x91\x28\xfd\x17\xc8\x14\xb5\x2b\xe4\x10\xa4\x70\x1d\x1e\xd5\xba\xd5\x59\xc6\xb2\x6a\x45\x91\x36\xad\x46\x12\xc0\x4d\xd7\x57\xba\x2f\xac\xea\xa0\x8f\x38\xab\xaf\x1a\x69\xa7\x2c\xf2\xa6\xe3\x55\x02\x5c\x7e\x1d\x6d\xc5\x14\x8e\x0d\x71\x9e\xa7\x09\x9e\x55\x54\x96\x0d\x94\x94\xeb\x94\x5a\x2a\xd2\x73\x87\x78\x0b\x7d\xca\xca\x51\x66\x5f\x39\x77\x24\xb8\x15\xad\xbb\xe5\x78\xc4\xfa\x12\x3d\x13\x53\x0f\x16\x72\x12\xc1\x3b\x91\x53\x39\xf7\x19\x89\x60\x2f\x85\x46\x0d\x1c\xae\x41\x4d\xb0\x8a\xa3\xd3\xac\x9c\xff\xc6\x6a\xa0\x38\x91\xa4\xa7\x1b\x06\x48\x34\x17\x48\x88\x9e\x05\xce\x32\x22\x46\xcc\x42\x9b\x02\x80\x37\xe7\x36\x48\xa4\x29\x9a\xbc\xd3\x28\x5f\x57\xa3\x0c\x93\x3e\xca\x09\x8b\xeb\xce\x37\xe4\x37\xae\x4c\xf5\x58\x91\x1b\xa8\x65\xd1\xb6\x91\xde\x6f\x6f\x36\x6e\x39\xe6\x75\xda\x79\xbf\x12\xa6\x0f\xe5\xa6\x53\x50\x20\x65\x51\x55\xd3\xd9\xfa\xbc\xfa\x5e\x12\x73\x00\x19\x1b\x3e\x8e\x39\x91\x81\x11\x1f\x79\x5b\x5c\x42\xa7\x44\x4b\x1f\x23\xa6\xc9\x38\x74\x38\x18\x80\x6d\x87\xb7\xad\x3b\x8d\x04\x97\xd2\x46\xde\x9b\x76\x56\xe7\x4f\xed\x50\xcb\xcf\xa0\x84\x0f\xaf\xaf\xc6\xcb\x55\xfd\x82\x67\xae\xbe\x9f\x7d\x58\x9b\x64\xdf\xd8\xd4\xda\x6a\x7e\xc5\x5a\x6c\x50\xcf\xef\xe4\xec\x62\xe8\x8b\x58\x55\xba\x5e\x2e\xe8\x17\x22\xab\x37\x97\xf4\x5b\x9e\x71\x50\xdc\xaf\xd2\xc4\x8a\xf2\x7e\xeb\x37\xab\x1c\xef\xbb\x0b\x6c\x5e\x65\xeb\xd7\xf2\x87\x32\xcd\xac\x0b\x4b\xdf\xd3\x36\x35\x5c\x2b\x11\x08\x8c\x2f\xed\x61\x07\xc1\x4b\xbf\x25\x15\x4e\xb3\x30\xe5\xd2\xe1\x86\xda\x69\x9a\xa3\xd6\x74\x09\xbe\x2a\x9e\x79\x84\x4d\x34\x4b\x75\x70\x4b\x5b\xb1\x99\xc7\xeb\xde\xc2\xa4\xef\x23\x8c\xf9\xf5\x72\x98\x93\x45\x11\xb5\x27\xad\xec\xe6\x4a\x70\x37\xd8\xfd\x27\xc4\x43\xc2\x37\x6e\xe8\xae\x49\x8a\x1e\x3a\x4a\x10\x2c\x6d\x38\x06\xe4\xf2\x55\xf2\x7c\x36\x30\x0f\xfb\x31\x9b\x6c\xe0\x23\x5f\x84\x21\xb8\x6a\x6c\x5d\xb1\xc8\x1d\x44\x2a\x04\x79\x22\x02\x68\xc7\xc6\xfc\xb0\xf2\x51\xc5\x89\x20\x38\x5e\x04\x2b\xe2\x03\x0e\x4c\xcf\x60\x1e\x93\x34\xd5\x0a\x3c\xa8\x26\x8c\x1f\xf1\xcc\xe9\x2c\xa5\xb7\xa0\x82\x06\x9d\xea\x1b\x2b\x08\x57\xd0\x5f\xb0\x23\xf2\x99\x4a\xa5\xe5\x8a\x9a\x58\x4d\xd7\x08\x48\x3c\x50\x57\x6b\x4e\xec\x0d\x37\xfa\xd0\xff\xee\xfa\xf6\x7e\x70\x3e\xfa\x50\x44\xe7\xbb\xf4\x33\x8f\x08\xe5\x00\xfe\x39\x1b\x31\x1f\x50\xeb\x01\x90\x61\x2f\x11\x8e\xe3\x02\xd9\xc0\x2a\x91\x46\x66\x5b\xc9\x91\x83\x53\xb1\x36\x94\x76\x45\x33\x0f\x90\x83\x74\xa8\x27\x6b\x85\xeb\xac\x74\x72\x4c\x26\xd5\x8a\x94\x97\x3d\x5d\x36\x21\x76\xab\x32\xba\x36\x51\x0e\x5c\x90\x91\x67\xa7\x2b\xc1\xed\x7c\x82\xcd\x25\xbc\x19\xb7\x73\x1b\xb2\xc5\xa6\x7e\xa4\x9f\x49\x7c\xdb\x20\x55\xed\x25\xa3\xa5\x55\x24\x60\xed\x2e\xe4\x8c\x6e\xa2\xf1\xfb\xa9\x3c\xe8\xef\xda\xb3\xa5\xeb\x02\x92\xad\x80\x57\x05\x6c\x55\x85\x30\x8a\x88\x50\x98\x32\x34\x85\x83\xcd\xa2\x05\x02\xc0\x0e\x02\x3e\xec\x3f\xa2\x94\x32\x40\x0e\x58\xb5\xb4\x0f\xe5\x79\x6c\x20\xb4\x5e\x0e\xaf\x1e\xee\x4b\xa2\xea\xf7\xd7\x0f\xe5\xa2\xee\xfd\x9f\x57\xca\xaa\x95\x16\x56\x05\x0b\x05\x53\x2c\xb2\x10\x2d\xca\xac\x5f\x99\xda\x89\x26\x0b\x45\x1e\x6e\x2f\x76\x92\xef\xea\x9d\x65\x8d\x18\xe1\xa1\x74\x55\x8f\x88\xd0\xe6\xd3\x98\x44\xeb\x50\x4c\xdb\xd3\x91\x89\x82\xd2\xeb\x60\xad\x89\x16\xe1\x0c\x4b\x94\x61\x61\xfd\x50\xb1\x09\x80\x2a\x57\x06\x33\x9a\xd7\x2a\x04\x89\x4f\x44\xfd\xa8\xaf\x3e\xce\xf6\x91\x05\x61\x45\x59\xf0\x8f\x92\xf1\x93\x69\x78\x83\x93\x66\x87\xb2\x22\xd5\xc5\x09\xcb\xd0\x03\xb2\x3d\x84\xb8\x0b\xc7\xa6\x42\x7c\x5f\x37\x07\x2b\xe2\xe2\x09\xb5\x4a\xca\x99\xa6\x48\x03\xa7\xea\x30\x58\x83\xe6\xf8\xd4\x7c\xdc\x12\x91\x2e\x88\x6a\xd7\x6d\x15\x4b\x89\xfa\x37\xc3\x9a\xb5\xbe\xa8\xba\x90\xbe\xac\x72\x36\x89\xf7\x66\xed\x1b\x24\x29\x48\x4f\x3c\x08\x54\x24\x3b\xd3\xdd\x60\x90\x8c\xd3\xff\xa6\x1c\x49\x70\x08\x68\xbd\x75\x2a\x43\x29\xed\x78\x0d\x30\xef\x66\x99\x78\xc5\x32\x6c\x08\x7a\x14\x0e\xc8\xa6\x81\x84\x40\x3f\xcb\x31\xc6\xbd\x10\xf8\x87\x9b\x82\xb9\x36\xb6\x60\x6f\x60\x48\xc5\x6c\xda\xa0\x21\xfd\x68\x28\xda\x83\x65\x00\xfc\x87\x2b\xc8\xe8\x62\x83\x6d\xee\x7a\x38\xdd\x90\xda\x36\x03\x50\x2a\xc6\xe7\xcc\xdf\x16\x8b\x1a\x67\xd8\xda\x1d\x40\x89\x72\x95\x12\xea\x0a\xeb\x1d\x8f\x58\x10\xb0\x22\x8d\xda\xa3\xcf\x88\x2b\x4e\x02\x15\x6f\x19\x00\x5b\x43\x92\x8e\x17\x7e\x4a\x3b\x50\x4d\x91\x57\xf3\x72\x79\x91\xa5\x7e\xec\xe9\x94\x73\xec\x12\x11\x9d\x05\xc5\xc6\x01\x86\xf6\x25\x68\x2f\x28\x28\x60\x3b\x06\x73\x34\x18\x2d\x70\x50\xae\x2e\x48\x5e\x8f\x39\x91\xec\x2b\xe5\x53\x3d\x69\x62\x4b\xa2\xe0\xaa\x7b\x40\x4b\x75\x98\xda\x96\x57\x1f\xf0\x3d\xa0\x33\x6d\xaa\x38\x04\xc7\x6a\xad\x99\xca\xf9\x78\x81\x12\xc2\x58\x24\xe8\xb4\xc9\xaa\xfe\x39\x23\xd1\x36\x10\x32\x37\x58\xe0\x94\x28\x22\x56\x85\x23\x95\x8b\x49\x83\x88\xe3\x76\xd0\xf6\x6b\x76\xd1\x54\xda\xa8\x96\x64\xf1\xda\xed\xc5\x3a\x48\x18\x3f\x8b\x8d\xd0\xaf\xf4\x34\x7e\xb4\x96\xff\x0d\x67\x61\xfb\x29\xa6\x61\xa3\xad\x02\x04\xa0\x5d\xe7\xf4\x3a\x50\x28\xf7\x4b\xa0\x22\xa5\x70\xa1\x03\xc1\x40\x59\x3f\xca\x26\xf0\x93\x75\xbc\x74\x2f\xbc\xdb\x65\x38\xb8\x14\xda\xca\xa1\x2a\xe5\x4e\x00\x95\x80\x4a\x65\x70\x40\xea\x01\x4c\x40\x68\xa9\x8b\x90\x0c\xdc\x7e\x16\xde\xae\x30\xe8\x5a\xc9\xaa\x5a\x5c\xaa\xb2\x5c\x6b\x78\xdc\xbe\xc0\x1d\x3a\x89\x66\xdf\x12\xcd\x3a\x52\x2e\x45\xd7\x6a\xea\x24\xa2\x82\x33\x63\x8b\x3e\x5b\x80\x80\xf2\x04\x21\xf7\xc8\x5e\x91\xb6\x72\x2c\x5c\xfd\x94\xf9\x7f\x95\x39\xb8\x23\xea\x90\x54\xeb\x92\x2a\x8f\x03\x17\x14\x78\xa0\x92\x50\x1a\xb0\x71\x35\x30\x5a\x13\x06\x69\xac\xfc\xc3\x2b\xe3\xc0\x82\xe4\xe6\x05\xcf\xd1\x33\x95\x73\xa4\xf8\x88\x41\x9c\xa0\xf7\x06\x28\x8e\xcc\x8b\x3d\x78\x0b\x60\x10\x64\x3e\x49\xa9\x42\x38\x98\x61\xc9\x24\xd9\xb3\xe7\x59\x7f\x00\x33\xae\xcd\xb3\xaf\x83\xe8\x59\x73\x68\xb6\xb0\xaf\x15\x8d\xec\x9a\x4a\x1f\xc4\x34\xbf\x6c\x32\x7d\xa0\xf1\x84\x1a\x66\xed\x99\xeb\xb2\xe9\x51\xbd\xb5\xc1\x82\x86\x02\xb2\x2b\x95\xaa\x72\xb7\x58\x43\xcf\x9a\x4c\xfa\x62\x23\x5a\xa5\xd2\x17\xaf\xef\x23\x97\xbe\xa9\x4c\xd9\xaa\xdc\x4a\xf7\x49\x83\xfd\xdb\xe5\xec\x2a\xee\x02\xe7\x43\x49\xe9\xa6\x51\x52\x3a\x34\x54\xb3\x22\x21\x60\xfb\xf0\xf2\x4d\xd4\xc1\x22\x3f\x2b\xa4\xa2\x20\xdd\xb2\x8c\x09\x43\xaa\x9c\x9f\x71\x05\x39\x35\x11\x94\x70\x5f\xca\xf3\x1c\xb1\x7a\x09\x64\x35\x4f\xdc\x35\x45\x63\xaf\xe8\x67\xc1\xf9\x73\xb3\xb0\x16\xad\x9f\x7c\x90\x9b\x51\x96\x6d\x31\xf6\xaa\x88\x59\xb8\xf8\x9a\x82\x93\xb4\xe0\xb1\x4d\xc2\x71\xcd\xa9\xac\x1f\xfa\x52\x02\xc5\xda\x73\x61\x2f\xdd\x3d\xaa\x76\x4b\xdc\xb9\x75\xbe\x89\x97\x91\x2d\x37\xb6\x01\xd3\xb1\xd7\xe3\x2b\xae\xda\x6d\xaa\xcc\x02\xaa\xe8\xde\xb0\x50\xab\xf0\x04\xba\xf1\x1e\xb8\x77\xed\xd8\xb1\x09\x75\xf1\x08\xdd\x95\x3d\x29\xcd\xd8\x56\xef\x7f\x89\x59\x6f\x5a\x1a\x38\xf0\x37\x0a\x1b\xef\x4b\x43\xcb\x01\xd4\x04\xb6\x61\x92\x15\x4e\xec\x85\xbb\x9c\xc5\x44\x30\x82\xd5\xfc\xf5\xb2\x2c\xce\x76\x35\x4f\x07\xe3\x7b\xd9\x8c\x8b\xb3\xbd\xd4\x85\x0f\x87\x5b\xae\x91\xbe\x76\x9c\xfa\xf5\x36\x96\x22\x1b\x7c\xe0\xab\x04\x2f\xa9\x8e\x35\x66\xc3\x00\x84\x66\x13\x2a\xdd\x29\x11\xa3\x5e\x9d\x7b\x99\x94\x94\x1a\xbb\xcf\x52\x32\x8a\x3e\xed\x61\x6d\xe5\x35\x4b\xf2\x45\xe4\x7e\xbc\x7c\x3a\xc2\xaa\x2a\xce\x79\x90\xa1\x00\xa5\xb4\x15\xa6\xcc\x72\xaf\x55\x49\x09\x5a\xa6\x4c\x71\x5d\x1e\xc2\xc1\x67\xb8\x7c\xf1\x09\x2e\x5d\xba\x43\x97\xee\x50\xb3\x47\x5d\xba\x03\x42\x87\x96\xee\xb0\x4e\x05\x5d\x65\x00\xf5\x3e\x39\xa8\xb6\x59\x2a\x71\x63\xf6\x77\x8d\x1e\xb9\x7d\x48\xbf\xb3\x21\x86\xf1\x50\xf6\x17\xfb\x43\x6d\x48\xd4\xd2\x67\xd5\xd9\x86\xf6\x4c\xb6\xa8\xba\x05\xb0\x88\x13\x8b\x43\x67\x03\x96\xcb\xf6\xa7\x55\xa6\xd2\x11\xfb\x9e\x3f\x93\x27\x22\x7a\x08\x2b\x94\x72\xa9\x80\x0f\xbb\xf8\x18\x38\x08\x25\x48\x73\x13\x07\x81\xd1\x15\x4e\x49\x6c\x2a\x1e\x06\x61\x8d\xd6\x60\x6b\x5d\xad\x75\x70\xab\x80\x1c\x6a\xb6\xc1\xc5\x4d\x8c\x98\x09\x35\x34\xe1\x6d\x20\x2b\x50\x37\x31\x20\x98\xdf\x79\x47\xf0\xef\x8e\xd1\xbd\xbe\x9f\xa8\x2c\x8f\x37\x40\x5f\x6b\x1a\xdb\x88\xcd\x04\xcf\x33\x6f\x43\xe3\x13\x53\xfa\xd6\x44\x3f\x2d\x3b\x82\x61\x30\xce\x0b\x1c\xe1\x58\xeb\xe2\xab\x09\xe7\x4d\xa2\x50\xb7\x82\x30\x0a\x09\x48\x1f\x43\x1f\x5a\x67\x43\xdd\x8d\xff\x36\x00\x6e\x59\x05\xc4\xfe\x42\xce\xe5\x73\x22\xc1\x2a\xe4\xad\xee\xa5\x3c\xf2\x32\x56\x41\xed\x38\x57\xd9\x44\xbd\xdf\xc2\xd9\xf6\xeb\x61\x10\x8a\xce\x6d\xcc\x97\x49\x52\xb5\xf7\xc4\x8b\x59\x4b\x5b\x47\xcf\x36\xf1\x8b\x9b\x5c\x64\x1c\x24\xb1\x64\xe1\x60\x1b\x2c\xd2\x5b\xc6\xb3\xdc\xc4\xb5\xd1\x30\xcc\xa9\x96\xb2\xa9\x54\x97\x58\x45\x73\xcd\xb9\x0b\xc4\xb3\x3d\xc5\xfb\x15\x5c\xf9\x65\x2d\xa8\x35\x33\x38\x0b\x7b\x6f\x70\x29\xb4\xb0\xa8\x9b\x7b\xdf\x85\xd7\x3b\x49\x22\xd5\xfd\x19\xb7\x9b\x2d\x68\x1d\xd8\x45\xdd\x27\xf6\x89\x9e\xe8\x3a\x2a\x5a\x37\xfe\x76\xb4\x55\xae\xb8\xb5\xf7\x48\xc2\x1d\x20\x64\xce\x2d\x60\x57\xf1\xa2\xad\xd0\xda\xe0\xfe\x17\x74\xbb\x2c\x20\x8b\x92\xff\xa4\xc5\x11\x6f\x71\x4d\x71\xa6\x95\x08\xc5\xf5\x2d\x29\x66\x46\x8e\x35\x71\xb2\x08\xa3\x5c\x50\x77\xf6\x2b\x39\xe1\xcd\xd4\x01\x16\xca\x93\xb0\xa2\x52\x84\x83\x62\x73\xc6\xe1\x8f\x23\x95\x63\x1f\x98\x08\x34\xe1\x8a\xa0\x9b\xfc\x77\xe7\x58\x17\x4e\xbc\xab\xd9\xd3\xb5\x84\xbd\xc3\x2e\xe3\x3a\x7c\xc3\x56\x27\x8d\xb2\x59\x00\x8e\x58\x6f\x25\x6e\x53\xfb\xa0\xf6\xcb\x76\xf5\x1b\x6a\x3f\x75\xb2\xcf\x36\xdf\xae\x00\x6f\xda\x3a\x36\xbb\x14\xe7\x6e\x03\x61\xad\xf4\x14\xc2\x56\x5a\xfb\x1d\xa0\xcf\x52\x70\xd4\x63\x2b\x4d\xfd\x97\xff\xcb\xd4\xca\x32\x4b\xf3\x5f\x88\x8b\x11\x33\xbf\xf7\x7c\x9d\x0a\xfd\x42\x01\x00\x8b\x53\x52\x40\x64\x8a\x32\x98\x1e\x40\x8a\x58\x30\x34\x03\xf6\xeb\x61\xfa\xf5\x18\x1e\xf3\x09\x11\x8c\xe8\xa1\x39\xf0\x01\xcf\xcc\x52\xcc\xf0\x0c\xa0\x85\x7b\x10\x19\x07\xe2\x6a\xa1\x8a\x18\x92\x36\xf5\x0e\x81\x5b\x69\x66\x69\xf3\x6d\x8b\xba\xbf\xd0\xa7\x11\x65\x2d\xb2\x69\x11\x5e\x51\x4f\xfd\xb7\xb6\xff\xed\x24\xf6\xfb\xfe\xdd\x0f\xe3\xdb\xc1\xdd\xf5\xc3\xed\x59\x49\x6c\x3f\xbb\x78\xb8\xbb\x1f\xdc\xd6\x3e\x2b\x72\x55\xff\xfa\x30\x78\x68\x78\xe4\x1a\xb8\xe8\x7f\x37\x28\x15\xd1\xfe\xeb\x43\xff\x62\x78\xff\xf3\xf8\xfa\xe3\xf8\x6e\x70\xfb\xe3\xf0\x6c\x30\xbe\xbb\x19\x9c\x0d\x3f\x0e\xcf\xfa\xfa\xcb\xf0\xdd\x9b\x8b\x87\x4f\xc3\xab\xb1\x0b\x3b\x0e\x1f\xfd\x74\x7d\xfb\xc3\xc7\x8b\xeb\x9f\xc6\x41\x97\xd7\x57\x1f\x87\x9f\xea\x66\xd1\xbf\xbb\x1b\x7e\xba\xba\x1c\x5c\xad\x2e\xd6\x5d\xbf\x1a\x8d\x75\x80\x83\x8b\x2c\x30\x1a\x05\x62\xd2\x64\x61\x49\x9b\xfe\x0a\xbe\x8b\x1b\x43\x8f\x47\x3d\xf7\x97\x29\xad\x7d\xa4\x59\xa0\xf3\x8b\x15\xdc\x63\xc4\xbc\xe3\xd2\x5f\xaa\x0a\xcf\xa4\x4b\x3d\x2e\x8d\xf6\x14\xf5\xe1\xac\x80\xc2\x50\xea\x14\x32\x1b\xfc\x48\x9d\xab\x1b\xe8\x30\xa1\x29\x05\xaf\x37\x3a\x42\xd5\x0d\x2f\x37\x68\xe7\x04\x43\xb0\x7e\xbb\x78\xd5\x69\x90\xd5\xac\x66\xa0\x94\x53\xe4\x38\x34\x31\xe6\x04\x83\x3d\xbb\x60\x38\xa5\x51\x35\x05\x03\xe0\x57\x51\x01\x35\x52\x6d\xb1\x44\x60\xe5\x96\xe7\x04\xfd\xf0\x97\x62\x50\xe0\xc1\xb0\x9a\x77\xbe\x54\x51\xcf\x3e\x10\xb9\x59\xd5\x75\xe4\x59\xea\xc9\x1d\x73\x6b\x5a\x86\x73\x6b\x2b\x77\x83\xbb\x29\x67\x01\xdc\x58\xc9\xf7\xa4\x8f\xb7\x99\x51\x85\xc6\x4f\xd1\x1d\x40\x9d\xc8\x42\x75\xd7\xbb\x98\x25\xf9\x8c\x32\x44\xd3\x2c\x21\x45\xcd\xf7\x09\x99\xe3\x27\xca\x5d\xf9\x0a\x53\xe5\x03\xd6\xd1\x8a\x56\xe8\x08\x35\x1e\x94\x53\xd4\x8f\x63\x59\x66\x70\x25\xca\x71\x2c\xf3\xa8\x3c\xec\x10\x21\x8c\xc5\x9e\x6d\x56\xe8\xa8\x38\x72\xb0\x62\xfb\x07\x73\x59\x66\x87\xe5\xbb\x77\x87\xeb\x5f\xaf\xe0\xd8\x91\xf2\x78\x2b\x61\xe0\x1e\xcb\x47\xc7\x9a\xd7\x09\x04\x0e\x56\x67\xb7\x1e\x2d\xbe\x4e\xdb\x4e\xfd\xca\x8e\xe1\xa0\x6d\xd7\x67\x23\x2a\xf4\x9a\x2e\xdd\x8c\x93\x4a\xe9\xae\xd6\xfd\x95\x4a\x7f\xd5\x76\xb6\x57\x6f\x4f\xbd\x34\x06\x47\x72\xec\xe9\x7f\x83\x79\xdc\xc0\xa7\xd7\xfe\xcb\x95\x22\xdb\x38\x58\xb7\x4d\x7d\x40\x4b\x49\xba\xd6\x0f\xb4\x92\x0e\xf7\x04\xef\xd4\x5e\x18\x84\xc2\x0b\x34\x02\x77\x1f\xa6\xcc\x96\xe3\x21\xde\x1f\xe5\x0a\x50\xeb\x73\xec\x4b\xc4\xe1\x09\x7f\x2a\x29\x97\x29\x91\x12\x37\x00\x96\x04\x26\xb1\x5d\x18\x83\x3f\xa1\xf6\xc3\x96\xf4\xe4\xce\xe4\xbd\xfe\x6a\x95\xd1\xe7\x36\xd4\x8c\xdd\x44\xb5\xc0\x1a\xbb\x48\x5b\x74\x6d\xf2\xed\x34\x7f\xe9\x15\xc1\x34\x5c\x04\x31\x46\x4d\xee\x9f\x96\x66\xb5\xea\x82\xd5\x56\x59\x0a\x5d\x78\x9b\xc7\xe0\x04\xad\x6f\x8d\x88\x6d\xfd\x2a\xb8\xbc\x3e\x1b\x50\x5d\xc9\xdf\x19\x56\xa0\x8e\x78\x9a\x1a\xb9\xa0\x64\x4b\xed\x21\x6c\xd2\x1c\x0b\x69\x4a\xe6\xd1\xdc\x78\x99\xf4\x95\xd1\x1b\xb1\xe7\x60\x43\x4a\x81\xc0\xfd\xb0\x25\x40\x13\xfd\xac\x8f\x1b\x7d\x2a\x85\x57\x83\xc8\x48\x21\xd6\x37\x20\x04\xe3\x10\x2c\xca\x47\xad\x21\xf0\x60\xbf\x76\x20\xf5\x2d\x6a\x05\x56\xd6\xb7\xa9\x62\xa0\x9f\x5b\x50\xa8\x6f\x07\x4d\xb9\xed\x10\x82\x5a\x81\x75\x23\xd8\x43\xa9\xc0\x57\x85\xf7\xf6\xe9\x9a\x26\xbb\x37\x9d\x58\x8c\x0a\x3d\x5d\xb7\xda\xbf\x77\x33\xfa\xbd\xf1\x3b\xe4\x0d\xa0\x26\x41\x6b\x1e\xe1\x1b\x1d\x69\x99\xd5\x25\xdb\xdb\x40\x0c\x89\x8e\x0c\x6a\xe0\x57\x10\x69\xd9\xbf\x19\x7e\xd5\x43\x5f\x85\xd9\x66\x5f\x6d\x75\x00\xed\xb8\x6d\xb9\x40\xd0\xa6\x4a\x29\x07\xe5\x63\x07\x7b\x55\x39\x89\x76\xcf\xec\x41\x44\x4d\xe7\x50\x7f\x59\xfa\x06\x9c\xd3\x50\xfe\xce\xf8\x6f\x7d\xc0\xb3\x75\x01\x19\x19\x97\xca\x9a\xb5\x8b\x47\x6c\xb2\xa8\x3a\x79\x7a\xde\xcb\xd3\xfa\x94\xee\x5c\xd2\x4d\xb7\xb7\x9c\x9e\xbc\xe7\x40\xdc\xd5\xf7\xc1\x9a\x84\xe7\xbe\x89\xb9\xe6\xd3\x80\x8b\x35\x45\x29\x74\x11\xec\x75\xb3\x2a\xd9\xcb\xdc\x62\xd6\x6e\xca\x3a\xf9\xe7\xbd\x91\x5b\x8b\xb0\xef\x7e\xdd\x8a\xd8\x88\xff\x06\xe1\xba\xa3\xb2\x97\xa5\xb2\x7d\x64\x3c\x94\x07\xb7\xf9\x05\x7a\x66\xe4\xb8\xa0\x19\x67\x70\xd5\xca\x84\x67\xf0\xa5\xba\x7f\xeb\x0b\xe6\x6e\xe8\xf3\x0d\xd6\x64\xbd\xd3\xf7\xce\x04\x0e\x18\xb7\xeb\xf2\x58\xab\x43\xed\x2b\x5b\x84\x88\x53\x93\xdd\xa8\x68\x4a\x7a\x88\xb3\x64\x11\x04\x3b\xd8\xf3\x0a\xe4\x66\x62\x94\xe6\x84\x0a\xd7\x89\xc5\x18\xdc\x28\x1d\x7e\x43\x69\xbc\x89\x46\x76\x88\x34\xb9\xea\x5f\x0e\xce\xc7\x83\xab\xfb\xe1\xfd\xcf\x35\xf8\x91\xe5\xc7\x0e\x42\x32\x78\xe1\xee\xe7\xbb\xfb\xc1\xe5\xf8\xd3\xe0\x6a\x70\xdb\xbf\x5f\x03\x2f\xb9\xaa\xb3\x26\xe8\xc2\x5c\xd6\xa9\x6f\x9b\xc0\x17\x3a\x33\x6f\x4d\xef\xcb\x20\x93\x41\x27\x94\x34\x00\x4d\x9a\xd4\x7f\x16\x13\x81\x62\xf2\x44\x12\x9e\x15\x66\xd5\xda\x05\x0b\x10\x28\x6b\xda\x5f\x85\x42\x09\x6d\x56\xd7\xf8\x14\x99\x5a\x6f\x41\xb9\x5b\xdf\x20\x88\x7c\x58\x10\xf6\x95\x42\xe4\x73\x96\xd0\x88\xaa\x20\x35\x90\x0b\xeb\x5e\x31\xee\x43\x88\x4e\x5d\x43\x5c\x7b\x8b\x46\xd9\xbb\xce\x1f\x7a\xd2\x97\xb5\x7d\x7f\xa2\x3c\x22\xda\xda\x02\x42\x7b\x50\xec\x1b\x9c\xc6\x4b\x80\x6d\x5b\x8c\xee\x25\xcc\x03\xcb\x39\x3a\x36\xbd\xaf\x01\xcc\xad\x7e\x90\xeb\x6f\xc3\x55\x71\x32\xa5\x73\xbd\x3a\x50\xa6\x1d\xa5\xbe\x71\xb8\x4b\xa9\xb0\xe6\x1e\x90\x37\x6c\xec\xfa\x86\x01\x0b\x4b\xf5\x62\x98\x89\x39\xc5\x48\x90\x94\x2b\xad\x80\x99\x88\x80\x9e\x16\xaa\x28\x4e\xe8\xaf\x80\x51\x25\xc8\x71\x10\x41\xe1\x90\xbd\x0a\xf7\x81\xc5\x8f\x38\x1e\xb1\xf3\xc1\xcd\xed\xe0\x4c\x33\xa4\x63\xf4\x20\x01\x7e\xaa\x34\xf5\x73\x4b\xde\x46\x1c\x0b\x23\x19\x28\x93\x8a\xe0\xa6\x60\x30\x22\x04\x17\xed\xf9\x83\xef\x6f\x00\xdf\xd5\x93\x37\x3c\x2b\xd9\xa6\x9c\x01\xe0\xaa\xb1\x2a\x72\x90\x33\xb0\xf7\x9c\xac\x5b\xfc\x5c\x5a\x91\x10\x7e\x03\x24\x91\xf2\xaa\xbf\xe0\x6a\x03\x80\x67\xfb\xf9\x95\xfa\xbc\x81\x6f\x57\xcd\xf3\x1e\x42\xec\xa4\x2a\xd0\x40\x0d\x60\xa8\xaf\x7a\x53\x99\x67\xa3\xa8\x28\xde\x02\xaa\xa3\x42\xfa\x13\x32\xc3\x0c\x89\x9c\xb1\x0a\x3c\x6c\x68\x69\x5b\x0e\x9a\xd9\xf4\xa8\xea\x35\xc3\x29\xcf\x19\x28\x0d\x10\xc6\x5a\x33\x18\x99\x11\xa6\xd6\x0c\xe6\xad\x80\x58\x2a\x43\x3d\x5c\x2c\x96\x9a\x81\x36\xc1\xb1\xd4\xf9\x93\xa0\xf4\xf2\x66\xd7\xb2\x0b\xca\x2b\x39\x95\xf4\xa1\xf2\xf7\x73\xbd\x96\x8d\xe5\xe3\xce\xdd\xdd\x63\xf9\xb8\xbe\xab\x98\x44\x8f\x9b\x5e\x36\xd5\xcc\xcc\xc4\x56\xae\x5e\x32\xf6\x2d\xf4\x53\x5b\x9a\x05\x0a\x96\x47\x8f\xe8\xfb\xfb\xcb\x0b\x34\xa5\x5a\xee\xd5\xd7\xca\x15\xd6\x32\xf6\x83\x48\x9c\x5d\xd8\xda\x56\x73\x91\xf8\xbb\x17\x36\xde\x89\x52\x81\x94\xa0\x6f\x34\x3c\x23\xce\xd8\x2b\x2c\xda\x5e\xa5\x34\x8b\xc0\x2c\xe6\xa9\x99\xc7\x89\xcc\xa7\x53\xfa\xf9\x58\x61\xf1\x4d\xc3\x7a\x98\xa8\x8a\xf1\xdf\xf9\x64\xac\x47\xb4\xe3\x45\x5c\xd7\x1c\xb2\x05\x95\xfd\xb2\xd9\x99\x9d\x9b\x77\xff\x2f\x9f\x40\xb6\x7b\x26\x38\x20\x00\x82\x77\xce\x46\x2a\xd8\x57\x1c\x25\x1d\x23\x97\x40\x55\x02\x39\x89\xb8\x10\xc4\x26\xc9\x9b\xda\xa2\x19\x16\x8a\x82\xb5\xd6\x81\xa4\x94\xd0\xf1\x8b\x2d\x0a\x4b\x7e\xcf\x71\x81\x44\x3d\x21\x04\x1c\x3c\x19\x4d\x36\x53\x7a\xcf\x4a\xbe\xc9\xca\x09\xb4\x91\xa7\x16\x37\x13\x0c\x32\x6b\x45\xac\xc1\x13\x61\x6a\x2f\xfa\x09\x34\x51\x93\xb6\xdf\xce\xcb\x60\x4a\x7c\x0e\xcf\x8b\xcb\xcd\x85\xf4\x86\x51\x4d\x4a\x60\xb8\xe7\x6d\xa2\x94\x75\xa9\x37\x39\xfa\x9f\x5a\xfb\x8e\xe1\xd5\xe5\x75\x59\x13\x1a\x6f\x57\xbb\x28\xf5\x5d\x84\xb5\x3a\x68\xff\x2d\x81\x7c\x24\x31\x56\x8c\x00\x40\xc2\x2a\xa7\xd5\x3d\x37\x7d\x6a\xda\xaa\x74\xb9\x76\xcb\xb7\x40\xad\x29\x35\xf3\x89\x40\x4a\xe7\x3e\x02\xd1\x37\xc9\xdd\x87\x81\x3c\x88\x04\x42\xa8\x57\x5a\xb1\x4c\x99\x71\xcd\xf9\xbc\x64\x87\x5b\xc8\xe8\x66\x30\x5a\x68\x24\x99\x20\x91\xbe\xca\x4e\xd1\x4d\x42\xb4\xe4\x95\x6b\xe9\x2b\x4f\x12\x87\xf0\xb5\x5a\x3a\xdc\x08\x95\xee\xc5\xe7\x15\xe8\x1e\x2b\x26\xe6\x10\xee\x56\xcf\x2c\x58\x83\xfd\x23\x2e\x04\xeb\x0b\x26\x64\x30\x24\x96\xb5\x48\xe0\xf0\x0b\x13\x37\x0b\xa6\x24\x5c\xba\xc8\xe8\xaf\x9a\xfd\x0a\x22\xe7\xbc\x31\xc9\x31\x9c\xed\xcb\xcc\xc1\x2d\xe5\x0b\x4e\xc2\xdd\x87\x4d\x71\xd5\x2d\xe4\x9a\xca\x1d\x58\x12\x71\x56\x4d\xd1\x57\x7f\xf0\xd1\x1f\x16\x6f\xd5\xde\xad\x76\x68\x70\x4b\x16\xa6\xb6\x10\xfb\xac\x70\x5d\x14\xca\xcc\xc2\xf8\x5e\xfd\xe7\x85\x01\xb9\x48\x09\xa0\x4a\x16\x55\xe7\x90\xbe\x6b\x9b\xb6\x58\xcf\x73\x9c\x8b\x8d\x20\x29\x0a\xd4\xf2\x4d\x38\xb7\x4d\x46\x29\x86\xa5\x17\xa1\x9e\x5d\xda\x62\x12\x20\x46\xdb\x50\x23\x59\x42\x82\xb3\x64\x63\x96\xb1\x56\xc5\x6b\x66\xca\xbb\xba\xd5\x40\x4a\x2e\x44\x99\x97\xf2\xae\x95\x28\xb0\x34\x81\x0e\x5b\x6c\x73\x6c\x31\x5b\x59\xc4\xd3\x1e\x20\x01\x2a\x01\x89\xff\x85\x03\xad\x2a\x38\x58\xa3\xf7\xba\xcc\xa7\xd2\xee\xb4\x4a\x73\x2a\x7d\xa1\x79\xc9\xf9\x8e\x1e\x38\x3d\x99\xc5\x18\x12\x47\x77\x89\xc2\x29\xcd\xdf\x78\x0f\xa0\x4d\x12\x23\x83\x5e\x60\x90\x8f\xed\xda\x79\xcf\x49\x86\x05\x61\x6a\xc4\x6e\xf5\x28\xcc\x17\x45\x24\x86\x8b\xc3\x71\x68\xf4\x50\xb3\x76\x8a\xb0\xfd\x0a\x16\xbd\x29\x10\x4e\x8e\xcd\x4b\xa0\x9a\xbe\x60\x92\xfd\x77\xe6\x1d\x83\x79\x60\x31\x7f\xf4\x54\xe9\xb4\x50\xe3\xb5\x00\x19\xcd\x29\x40\x0e\xc4\x44\xda\x0b\x89\x2a\x8b\x29\xe1\xc5\xef\x9c\x38\xfc\x65\xf8\xcc\xf3\xaf\x3a\x86\xed\x0c\x05\xcc\x19\xe8\xe4\x88\x05\x7d\xac\x80\xeb\x34\xca\xfa\x96\xaa\x04\xec\x33\x8d\xbd\xe3\x0b\xfe\x69\x76\x88\x0b\x3a\xa3\x2c\x28\x9a\x64\xa7\x97\xe2\x0c\xcc\xbb\xe6\x0c\xf2\xa9\xbf\xd3\xee\x6d\x96\xc1\x31\x8c\xf8\x7f\xfe\xfb\x6f\xc7\xb4\xc9\xfb\x21\xc7\x76\x05\x0e\x61\x27\x37\xdb\x96\x70\xe7\x03\x14\x91\x06\x74\x8a\x40\xa7\x95\xa5\xcc\x89\xe2\x57\x7b\xb9\x69\xa2\xe1\x6a\x6e\xdc\xbd\x65\x72\x07\xdf\x88\xc8\x57\x9c\x0d\x73\xc5\xbc\xed\x5a\x52\x09\xd9\x01\x7a\x24\xe6\x24\x7b\x03\x41\x58\x90\x7c\xc9\x4c\x33\x62\xc5\x27\xd2\xe0\xa1\x18\x78\x57\xf3\x43\xb1\x3a\x2d\x17\x66\x15\xef\x2f\x22\x25\x0a\x77\x78\x10\x8d\xec\xca\x67\x98\x28\x52\xdd\x7e\xe5\xa6\xad\x70\xee\x00\xe7\x70\x97\xa8\xcd\x39\x96\x2f\x17\x9a\x53\x5b\xf6\xc9\x58\xd3\x43\xe1\x61\x5d\x90\x8e\x19\xa4\xc9\xf6\xd4\x1b\x92\x4b\x22\x0c\xa7\xf3\x70\x58\x96\x12\x42\x14\x47\x88\xd1\x5c\xe3\x6b\x24\x29\xa6\x1b\xe5\x13\xe8\xf7\xeb\x31\x26\x4b\xce\x06\x3c\x23\x62\x1c\xe7\x6a\xe9\x58\xac\x8a\xf1\xd7\x1f\x9d\xe7\x6a\xb1\xbe\x7d\x99\xe0\xe5\xb2\x37\xab\x70\x3d\xf5\xfb\x0d\xcd\xae\x97\x98\x83\x10\x9f\xb2\xd4\xdc\x80\x9a\x49\x2a\xa8\x99\x36\xe6\xb4\x64\x22\x81\x1b\x98\x29\x80\xd4\x2b\x34\x29\x7b\x45\x1b\x6c\x6f\x18\x39\x9a\xe4\x85\x49\xc9\x57\x4b\x88\x8f\x47\xec\xa3\x29\x37\x02\x5a\x9e\x19\x40\x04\x09\x3f\xe4\x73\xc6\x25\x29\x65\xa0\xd5\x54\x40\xb0\x19\xa4\x76\x18\xf5\xc2\x7a\xf1\xd1\xee\xb2\xfa\x9b\xe3\x9f\x2e\x6f\xf8\xf2\x94\xeb\x29\x70\x27\x71\x30\xa2\x19\xd5\xb4\x33\xae\x3d\x69\x2f\x57\x85\xb7\x88\xe9\x02\x1c\x2c\x95\x2c\x7a\xc8\x4f\xaf\x42\x10\x09\x79\x22\x60\x4e\x87\x31\x86\x75\x2e\xca\x76\xbd\x06\x76\xb2\xee\x00\x15\xe9\x9f\xc0\x16\x50\x5c\x1d\x41\x39\x49\xae\x8e\x16\xcb\xe9\x3f\x3b\x67\xaa\xd5\x05\xa6\x6c\x20\x9e\xf7\xc3\x7a\x1f\x0b\xa2\x10\xf9\xac\x88\xad\x08\x7a\xef\x72\x09\x97\xd3\x0f\x50\x7d\x3a\x54\xb3\xec\xf8\xe2\xb5\x99\xfb\x2e\x83\xdc\x25\x4b\xc6\xee\xca\xb7\xc9\x83\x73\xcc\x62\x9b\x11\x6b\x95\x0c\x2d\x6c\xc1\xec\x8c\xd1\xcd\xe7\x0a\xd8\xbc\xce\x00\x28\xdd\xb4\x69\x10\xdd\xe1\x22\x73\x0a\xa3\x56\x59\x20\xbc\x82\x0b\x2d\xb9\xe7\x4c\xd1\x44\x13\x87\x1d\x83\x44\x53\x88\x8c\xb3\x40\x85\x10\xd9\xde\x84\x85\x47\xa5\xa4\x6c\x36\xb6\x2b\xe9\x92\x3b\xdb\x5d\x0c\x65\x9a\xba\x34\x4d\x99\x1f\xbf\x73\x0d\xad\x36\xaa\x1b\xb2\x06\x9c\x32\x97\x56\x0a\x1a\x07\xe3\x6e\x32\x16\x60\xce\x65\xa3\x8e\x69\x6c\x96\x82\x9a\xc2\xd3\x30\xd1\x4d\xec\xee\x20\xd3\x2d\xe3\x38\x14\x57\x88\xb4\xa9\xa2\x26\x01\x0c\x22\xf5\x55\x43\x2e\xac\x6c\xcc\x81\x1d\x32\x2f\xa2\xd9\xb2\x57\x3e\xd3\xbf\x92\x4e\x8b\x5d\x77\x36\x1d\x01\x27\xc9\x04\x47\x8f\x5e\x0b\xf3\xb6\x08\x2e\x5c\xd9\x00\x2d\x57\x42\x5d\x34\x43\x5c\x7a\xa0\x11\x48\x37\xa1\xb7\xd0\x20\xf9\xd8\x61\x17\x9d\x9b\x55\xb3\x10\x69\x06\xba\xc9\x8c\xde\xe4\x36\xc4\x24\x4b\xf8\x22\x6d\xb8\xcf\xaa\x29\x84\xbb\x44\xea\x34\x65\x30\xee\xf5\x2a\xab\x30\xbd\x8d\x2f\xb3\xa5\x7c\xa4\x3d\xe0\x4a\x6d\xc0\x25\x3f\x25\x7c\x02\x26\x55\x6b\x7e\x70\x39\x36\x41\xaa\x47\xf5\x3c\x6f\x9a\xf9\x53\x3d\x91\x54\x66\x89\x56\x66\x9a\x7b\x30\x39\x27\x2f\xbb\x6f\x06\xa3\x60\xbd\x75\xb0\x7d\xb4\x76\xed\xe7\x2f\x81\x60\x7c\xe1\x24\x01\xf3\xae\xe1\x5f\x15\x2b\x9b\x49\xf6\x3b\x36\x4e\x6a\xc5\x47\x4c\xe1\x99\xdb\x5c\x2b\x5c\xf2\x67\x46\x84\x9c\xd3\xac\x54\x2f\x71\xe7\xf0\x70\x4b\xd1\xf6\x3f\x26\x18\x7a\x03\xde\xc9\xb3\x23\x83\x50\xa2\xe9\x43\x66\x38\x2a\xac\xa2\x51\x82\xa5\xa4\xd3\x45\x00\x2c\xe2\x23\x6d\x21\x7d\xab\x6c\x46\x08\x4a\x94\xd5\x31\x1a\x33\xbe\xfd\x64\xd6\xef\x9e\x55\xf8\x50\x3e\x7e\x34\x0e\x11\xdc\xf4\x7d\xb2\x8c\x22\xe3\x6e\x6a\x8b\x26\xd3\x88\x44\x6b\x20\x04\xb6\xcb\x84\x5f\x09\xfe\xd3\x6c\x46\x28\x84\x49\x3b\x6c\xab\xc8\x78\xc0\x8f\x10\x0c\x47\x95\x52\x29\x61\xf3\xb5\xe2\xe4\xec\xc2\x9a\x38\x3d\x58\x08\x60\x2a\x14\x1f\xf7\x90\xdc\x09\x64\xab\x0d\x5d\x9c\x93\x84\xec\x25\xe2\x7a\x0b\x22\xa9\x86\x33\x04\xe4\xb1\x92\x34\x8a\x32\x03\xeb\x8d\x0b\x5b\x04\x82\x37\x40\xf5\xd4\x0f\xfd\x27\x33\x50\x1b\x0b\x5e\xb7\x8b\x60\x18\x84\x55\x6e\xab\xbb\xd4\x61\xfe\x99\x16\x2c\xc9\x15\xdd\x94\xe8\xaa\xe8\xd4\xcb\x2b\x87\x48\x6a\x6f\x1c\x32\xbd\x34\xae\x4f\xa4\x4d\x78\xc7\xda\x03\xb0\x15\x07\x5a\xe6\xd3\xed\xe8\xc2\x3a\x50\x15\x47\x33\xa2\x4c\xf5\xff\x98\x3e\xd1\x38\xc7\xc9\xbb\xa2\x89\xbd\x25\x7c\xec\x69\xf5\xeb\x0f\xf9\x66\xa7\xf6\x8e\x28\xe9\xae\x84\x25\x18\x45\xbb\x39\x07\xb8\x05\x87\x71\x2c\x8d\xe0\xfa\xc5\xcb\x2d\x3b\x83\x24\xd8\x91\x59\xa8\x80\xdf\x90\x40\x65\xe6\x18\xdb\x2f\x3c\x2c\x40\x09\x10\x0b\x97\x40\x04\xcd\x1a\xbd\x3d\xd7\xab\x92\xf6\x97\x2e\x7a\x6d\x4e\xe3\xd5\x51\x15\xd4\xdd\xc9\x83\x9b\xc9\x83\x0e\x64\xf3\x00\x2f\xff\xa6\x63\x70\x98\xf7\xcf\x01\x08\x87\x4b\x57\xe2\xfe\x44\xc4\x77\x44\x26\x07\x21\x29\x2e\x6d\xc5\x6b\xc9\x8b\x47\x0e\xe5\xa8\xc0\x0c\x3a\xdc\x2d\x3a\x8c\x93\x7c\x6b\xdd\x40\x2f\x77\xc1\xae\xa7\x97\xbd\xd0\x07\x00\x7e\x62\xc8\x8b\xce\x6d\x05\x11\x38\xbc\x41\x2c\xdd\x92\xef\x61\x4d\x94\xa2\x1d\x5e\xab\xf8\xc4\xa5\xe5\x7c\x89\xed\xb5\x49\x70\xad\x37\xf7\x25\x49\x6d\xd3\xb1\xec\x43\x47\x79\x61\x2f\x8e\xa5\xc6\xe0\x83\x2e\x58\xb8\xdd\x2d\x5a\x03\xad\xe3\xb6\x6c\x9f\x87\xac\xae\xec\xdb\xee\x69\xfc\x2e\xc7\x6f\x9c\x09\x32\xa5\x9f\xb7\x12\xc5\x6f\xe0\x53\xab\x5e\xea\x65\xae\x14\x92\x03\xf7\x0c\x14\x9e\x0b\x02\x1a\xed\x4a\xdb\x62\x53\x23\x56\x64\x46\xda\xb4\xc8\x47\xb2\x40\x5c\x94\x7e\xda\x16\x04\x72\xff\x45\xef\xcc\xbe\xce\x95\xca\xe4\xe9\xc9\xc9\x8c\xaa\x79\x3e\x39\x8e\x78\x6a\xe2\xf0\xb9\x98\x99\x3f\x4e\xa8\x94\x39\x91\x27\x7f\xfc\xc3\x1f\x8a\x2d\x9e\xe0\xe8\x71\x66\x60\x75\x96\xfd\x4e\xe5\x2d\x27\x58\xee\x16\xd9\xe3\x52\xd8\x5e\x38\x95\x39\xe8\xc6\x25\x8f\xea\x6f\xa4\xc2\x69\x16\x86\x82\x9a\xb2\x71\x52\xe1\xa2\x58\x05\xe4\x25\xea\x69\xa2\x39\xce\x32\xc2\x9a\xcd\x0e\x26\xd1\x74\x07\xd6\xe3\x52\x55\xed\x08\xc9\xe7\x2c\xc1\xac\x0c\xbf\x00\x95\x97\x04\x89\x08\x53\x16\x1a\xa0\x28\x25\x0d\xd4\x68\x20\x80\x0c\xff\xdf\x2c\x15\x11\xe6\x48\x65\x51\x52\xcd\x0d\xc7\x96\x37\x75\x45\x2f\x71\xb0\x74\xd5\x92\xb2\xc5\xda\x11\xb7\x6a\xab\x92\x14\xef\x96\x4b\x8b\x6f\x5e\xd2\x46\x70\x36\x26\x9f\x35\x93\x93\xdb\x02\x76\x3d\x48\x22\x51\xff\xa7\x3b\x24\x17\x4c\xe1\xcf\xa7\xe8\x92\x32\x10\x60\xbf\xe7\xb9\x90\xe8\x1c\x2f\x8e\xf8\xf4\x28\xe5\x4c\xcd\xd1\x25\xfc\xaf\xfd\xe9\x99\x90\x47\xf4\x33\xc1\xc2\xf2\x07\x5b\x92\xce\xd7\x37\xd7\x24\x24\x72\x26\x11\x79\xd2\x27\xf4\x0f\xff\x89\x52\xd3\xf2\x29\xfa\xf6\xe4\x0f\xff\x89\x7e\x07\xff\xff\xff\x47\xbf\x6b\xd0\xf4\x37\x83\xfc\x82\xca\xc5\xb7\x65\x77\x6e\xaf\xb2\x52\x5b\x54\x73\x3f\x13\xbc\xd8\xa9\xda\x96\x1f\x69\xf4\xc8\xa7\xd3\xb1\x26\x0c\x93\xc8\x37\xc6\x62\x09\x2e\x7a\x4b\xfc\x54\x6a\x6b\x4f\x9b\x4a\x76\x45\x0d\x19\xdb\xa9\x41\x7c\x70\xec\x5a\xe6\x45\xe5\x5d\x08\x22\x2a\x55\x33\xa6\x12\xbe\x22\xb1\xe6\xaa\x9b\x9c\x0e\x67\xdd\x73\xc9\xdf\xce\x82\x13\x22\xa4\x84\xf5\xd4\x7d\xe0\x5f\x18\xc5\x6a\x02\x7d\xec\x42\xd6\x1e\x87\xa5\xf0\xda\x2f\x26\x66\x12\xa6\xf6\x56\xf1\x92\x72\xa9\xf3\xf5\xa1\x92\x77\x5c\xec\xa4\x6f\x3d\x92\xc6\x54\x86\x35\xf5\x92\x5c\x0d\xdf\xb0\xb2\x3f\x64\x88\x73\xe1\x71\x8c\x8d\x5d\xc4\x56\x55\x5c\x6f\xc5\xa4\xc2\x04\x97\xb5\x3b\xf4\x7a\xea\xe7\xfe\x93\x75\xc3\x84\x48\x33\xf7\x76\x51\x2f\x0e\x46\xab\x45\x24\xcd\x12\x6b\x46\x5c\x03\x76\xb8\x6e\x43\xef\x3c\xbe\x05\x34\x0e\x61\x8f\x90\xbf\xc1\x9c\x64\x6b\x01\x04\xea\xf7\x33\x17\x11\x39\xe3\xbb\x85\xbd\x26\x94\x2d\xc5\xcb\xb7\x2f\x45\xe4\x57\xef\xc2\x16\x9d\x72\x78\xc0\x3c\x2e\x94\x05\xe3\x16\xb0\x55\x28\x02\x20\xd2\xf2\x6c\x00\xd0\x6e\x1f\x58\x97\x4b\xb5\x11\x76\xe0\xda\xc6\x70\x5c\x30\x3c\x57\x5a\xa3\x52\x51\x43\x60\xcd\x0b\x57\xc4\xae\x41\x50\xd1\xce\xe3\x08\xaa\xc4\x14\x91\x4a\x95\x6a\xec\xd8\x94\x4a\x11\x5b\x62\x95\x9a\x82\x4d\x3d\x24\x30\x04\x65\xaa\xb9\x6e\x4f\x12\x71\x34\xc5\x11\x65\xb3\x5e\x00\x53\x09\x90\x11\xe1\x75\x50\x47\xa4\xf7\x58\x3e\xee\x37\xd0\x70\xe7\x02\x96\x34\x2e\x8a\xa8\x59\x60\x19\xe3\xd8\xa0\x4b\x18\x7d\x0a\xcb\xc7\x26\x64\xa5\x25\x58\xb7\x15\xa3\xf3\x4b\xe1\xc0\xe0\x56\x8d\xcf\xa5\xa0\x93\x50\x9f\x82\x9a\x0d\xae\xa4\xb2\x05\x79\x74\x19\x7f\xd8\xa3\xb0\x54\xd1\x4d\x57\x8c\x5f\xce\xb9\x50\xe3\x2d\x71\x61\xab\x69\xf4\x8c\x1c\x25\x00\xe8\xc2\x9f\x88\x78\xa2\xe4\xb9\x0c\xaf\xba\x09\x2d\x1a\xa3\x59\x10\x55\x07\xf8\x9b\x69\xc6\x21\x85\x66\x8a\x52\xcc\x16\x86\x51\x6a\xe6\x82\xe5\xa3\xf4\x85\x5c\x91\x4c\x71\x92\xf4\x90\x20\xb9\x34\x05\x8e\x25\x49\xa6\x47\xae\x14\x46\x8c\x12\x3e\xa3\x11\x4e\xd0\x24\xe1\xd1\xa3\x34\x19\x6e\x6c\x66\x98\x54\x26\x78\x44\xa4\x0c\x24\xab\x22\x9b\xdd\xe6\x18\x42\x15\x57\x45\x44\x4a\x19\x95\x8a\x46\x4e\x64\x2a\x40\x29\x4c\x2d\xf1\x08\x83\x49\x18\x32\x36\x61\xb8\x5a\xd2\x23\x06\x9c\x33\x67\xb6\x68\x12\x5c\xd7\x16\x73\xcf\x05\x89\x37\x1d\xa0\x3d\x40\x08\x3a\x0a\x19\xab\xf2\x81\x5c\x73\xa4\xce\xec\x67\x70\x8c\x57\x91\xc0\x6d\xf9\x44\x79\x82\xf4\x27\xad\x04\x6b\x04\x31\xe5\x3e\x04\xbe\x24\xb9\xf8\xc8\xf0\x03\x43\x34\x83\x21\x37\xe0\x98\xad\xa3\x69\xbd\x8a\x20\xf2\x40\x9d\xae\xaa\xd7\x9c\xb2\x28\xc9\x63\x5f\xa9\x51\x8b\x00\x4f\x9a\x48\xdc\xf2\xe8\xb5\xd7\x82\x42\x0f\x61\x89\x9e\x49\x92\xe8\xff\x9a\x08\xf8\x23\x5f\x38\x41\xb3\x64\x53\xdc\x02\x3a\x71\x5c\xba\x89\xa2\x0e\x0e\x9d\xf2\x06\xab\xb9\xc9\xf9\x4f\xb9\x32\x45\x32\x0d\x3a\xa5\xb3\x6f\x19\x38\xc3\x49\xc2\x27\x70\xd2\x01\xb8\xd2\xe5\xb9\x06\x69\x75\x79\x14\x11\x12\x93\x18\x7d\x1d\x1c\x5c\x8f\x47\xf1\x4d\x3d\x8c\x62\x69\x45\x0e\x00\xb4\xb2\x6a\x58\x6b\x84\xae\x2c\xd7\x79\x3b\x46\x37\x15\x60\x96\xb0\x7e\x3b\xae\xc2\x74\xf5\x96\xb6\xf0\x6d\x80\x2e\x2b\x93\x78\xb9\x1d\xda\x10\xe8\xb2\xd4\xe7\x1e\x80\x2e\x2b\xf3\x6c\x88\xdd\xe7\xb3\x17\xcd\x39\xd6\x93\xba\xe0\xed\x13\xc1\x0c\x40\x98\xb9\x3b\x4b\x24\xe8\x0e\xe4\xa2\x8e\x10\x0f\x0b\xc4\xb3\x52\x0d\xf1\x6d\x41\x3c\x2b\x83\x39\x64\x10\xcf\xca\x50\x0f\x17\xc4\xb3\x66\xa0\x2d\x40\x3c\x8d\x73\x7f\xac\x89\xba\x1d\x53\x80\xc4\x96\x49\x3e\xbd\x83\x54\xef\x95\x63\x3c\x33\x81\x03\xe6\x1a\x73\x77\xb4\xc5\xb4\x86\xd1\xda\x1c\xc8\xa6\x70\xa8\x8a\x13\x62\x53\xda\xf3\xde\x37\x03\xfe\xb0\xa9\xd9\xbd\x17\x5a\xbb\xc1\x0e\x19\xe1\xcc\xe6\x94\x37\x95\x9a\x39\x9c\xec\xd9\xed\xf0\x51\x01\x83\xb0\xc4\xf2\x5b\x21\x88\x5d\x56\xaa\x36\xcc\xf9\xb3\xad\x9c\x04\x64\x68\x88\xb2\x91\x04\xa1\xd3\xb1\x55\xda\x9a\x56\x8e\x32\x45\x66\x55\x9d\xb6\x38\x34\x94\xa9\x3f\xfd\x71\x2d\x27\x32\x10\x8b\x4e\x3d\x0c\x6a\x27\x78\x67\x87\x7d\x46\x62\x14\xcd\xb5\x56\x24\xb5\xfa\xa2\xa7\x63\x6e\x56\x89\x52\x4c\x9d\x22\x95\x4b\xe3\x5a\xa2\x72\xc4\x4a\x98\xa4\xc7\xe8\x23\x14\x84\xc5\x69\xa6\xf5\x2f\x3f\x3f\xaa\x29\x69\x94\x7f\xfb\xed\x9f\x08\xfa\x16\xa5\x04\xb3\x92\x0e\x0b\x6a\x93\xbe\xfa\x00\xc3\x4f\xcd\xc9\x88\xd5\x6e\x05\x1a\x7c\x36\x35\xa6\x5c\xbc\xdf\x90\x4d\xb9\xd3\x89\xa1\xd0\x21\x8e\xe6\x48\xe6\x13\x53\xa9\x37\xb0\x61\x38\x41\xfa\x82\xcf\xc0\x51\x0d\x37\xb2\x1b\xf4\xaa\x53\xf8\xb2\x31\x00\xd6\xdd\xd8\xf6\x36\xee\xc3\x3d\x72\x24\x49\x09\xdb\xa9\xc6\x69\x66\x38\x5f\x78\xf0\xa5\xc1\x7d\xe9\x19\x1f\x82\xd6\xcf\xb0\xb5\xec\x6b\x59\x1a\xc2\x79\xc1\x4b\x96\x27\x58\xd8\xa3\x3f\x62\x5a\xd1\x10\xe4\x89\xf2\x5c\x26\x0b\x14\x73\x46\x7a\x40\x09\x79\x34\x37\x8e\x55\xad\xb3\x60\x5b\xb0\xe2\x89\xca\x5c\x2b\xb4\xd0\x96\xab\x8f\x21\x15\x36\x98\x54\x73\x0a\xfd\x68\xf5\x9b\xc0\x57\x61\x96\x1c\x6a\xa7\x45\x85\xb0\xb1\x15\x9e\xdf\x12\x36\xb6\x44\x55\x1d\x6c\xac\x87\x8d\x5d\x5e\x97\x43\x84\x8d\xad\xec\x79\x3b\xd8\xd8\xba\x2d\xdf\x02\x36\xb6\xd4\xcc\x17\x03\x1b\x5b\x59\xd1\x2f\x06\x36\xb6\x32\xaf\x0e\x36\xf6\xcb\x83\x8d\xdd\x11\x18\xb5\x9e\x17\x1b\x7c\x25\x45\xd9\x62\x63\x22\xfb\x4a\xa2\xe1\xb5\x26\xb0\xe8\xb1\x1c\xd4\xe6\xaf\xab\xdd\xc1\x58\xeb\x99\xd0\x66\x60\xac\xb5\xaa\x7a\x33\xab\xdb\x15\xe0\x09\x14\x83\x57\x06\x63\x2d\x4d\xa0\x8b\xaf\xdc\x3c\xbe\xb2\x96\xf8\x6c\xdf\x7a\x78\x2e\xe8\xb2\x7a\x21\xb7\x84\x63\x2d\xed\x4f\xab\x48\x4c\x10\xdd\xf7\x40\x89\x2f\x2b\xcd\xdf\x97\x0e\xf9\x5a\x59\x3e\x5c\x45\x69\x81\xa1\xb5\x84\xe7\xd0\xe2\x8c\x12\x1e\xfa\xff\x3b\xca\xdd\x22\x32\xb8\xb2\xbc\xde\xaf\x62\x68\xb1\x05\xa9\xb6\xa6\x50\xa7\x95\xee\x27\x51\xd6\x25\x4f\x6e\xe8\x62\x76\x83\xb8\xcb\x48\xd4\x60\x63\xa6\x29\xdd\x57\xb3\xeb\x2e\x32\x8f\x85\x05\x0a\xf9\x52\x5e\xa8\xbe\x9e\xcc\x70\x8c\x8c\x5f\x49\x87\x05\xa0\x0e\xf3\xe5\x8c\x4a\x25\x1a\x63\x9b\x96\x46\xb8\x8b\xab\x34\xcb\x5b\x07\xc4\x04\xab\x3a\xdb\xee\xb3\x94\xa4\x5c\xac\x0b\xac\xaa\xfd\xd2\x96\xba\xd9\xe6\x53\x92\xcd\x49\xaa\x25\x99\xf1\xa6\x8d\xb4\xdd\x6f\x9f\x34\x6c\x73\xd7\x4c\xa0\x63\x89\x08\x02\x47\xa8\x7e\x37\x36\x88\x94\xad\xb7\x7b\xd7\x6d\xb6\x98\x99\x1b\x3a\x84\x1c\x98\xf2\x6a\x83\x9b\x7d\xa9\xe4\xee\x06\xfa\xae\x8d\xe9\xf0\x21\x35\xeb\xa3\x36\x56\xc4\x6b\xac\xc2\x9d\x2a\xbe\xb2\x85\xa0\x37\x70\xe5\x97\xbd\xf3\x9a\x13\x86\x55\x80\x37\x0f\xf0\x68\x40\x4d\x5d\x5e\x1e\x88\xcc\x91\x44\x1c\x85\x9a\x41\x69\x30\xcb\xeb\x55\xa2\x12\xa7\x51\xee\x40\x24\xb9\x68\x8c\x32\x6d\x63\xd0\x8e\x54\x8e\x13\xd0\x24\xc2\xea\x95\xd5\x4d\x9d\x2c\x6a\xd2\x1e\xdb\x79\x4c\x28\x53\x7f\xfe\x8f\x8d\x76\x53\xab\x56\x76\xdd\xa0\xe2\x16\x8e\x22\x22\x8d\x8d\xdd\x46\x21\xe3\x09\x7f\x82\x62\x5b\xbb\xec\xaa\x3e\xca\x7a\xde\x9a\xc1\x7b\x28\xe2\xb8\x20\x75\x23\x2e\xcc\x05\xcf\x67\x73\x67\x43\xd2\x67\x46\x4f\xad\x6e\x2f\x7f\x5c\xb2\x91\x6f\xbc\x97\xdf\xe5\x34\xd9\xce\x42\x77\x57\x2a\x43\xf6\x69\x78\x8f\xe4\xdc\x9f\xd6\x09\x34\x5b\xbb\xb1\xcb\x83\x6e\xdf\xa7\xfd\xd6\xfb\x6b\xa0\x9b\x9e\x83\xdf\x9c\xf2\x24\x01\x4f\x83\x24\xe9\x13\x11\xf5\xdd\xc3\x84\xef\xe9\x66\xc8\x79\x7e\x00\xf0\x75\x91\x18\xd1\x4a\xfe\xba\x31\xa2\xa1\x44\x6e\xf4\xd5\xa0\x05\x13\xaa\xc6\x19\x61\x75\x36\xb6\x9f\x96\x2b\xc0\xbc\xb3\x80\x41\x17\x3d\xb6\xb7\xa0\x41\xb7\x24\xaf\x1c\x38\xb8\x66\x1e\x87\x1a\x3c\x58\x61\x76\x3e\x96\xaf\xb8\x66\x5c\xe0\x90\x51\x7c\xfa\x7a\x89\x47\xac\x5f\xca\xa7\x70\x95\xb2\x27\x8b\x22\x20\xdb\xe8\x10\x21\x33\x83\x3a\x1b\xd6\xb0\x02\x6e\x34\xfd\x17\x68\x3a\x06\xbc\xd6\x84\x14\xba\xb0\x41\x88\x26\x27\xf1\x11\x8e\x16\x51\x42\xa3\x40\x67\x9e\x09\x9c\xcd\xeb\x38\x9e\xdb\xf9\x0e\x75\xe7\xad\x50\x77\x9a\x0a\x52\x6d\x12\xb7\xed\xe8\x8a\xe1\x94\x74\x68\x40\x75\x68\x40\x3d\x8f\x77\xc1\x8a\xd2\x5a\x6f\x08\xa3\xb0\x7c\xee\x3a\x48\xa0\x37\x80\x04\xda\xe6\xf0\x15\x78\x3f\xa5\x63\xd7\xc1\x14\x7d\x68\x05\x53\xe4\x2f\xc1\x83\x42\x9e\x69\x3e\x8f\x6f\x8c\x68\xb2\x3c\xb0\xb7\x84\x25\xaa\x11\x17\x36\x91\x9b\x56\xe1\x12\xad\xa2\x8b\x56\xeb\xf2\xb6\x28\x41\x9b\xad\xcc\x46\x00\x40\xb5\x77\xd7\x81\xc0\x01\x35\x6f\xc3\x81\x9c\x9b\x7d\x66\xb5\x6c\x56\x3b\x34\xcc\x6c\xd9\x44\xc1\xda\x2c\xc9\xc5\xd3\xc3\xfb\x4a\x74\x29\x8a\xac\x6d\x97\xec\xd2\x77\x3e\x68\x22\xd0\x9c\x27\xb1\x03\xa1\xf0\xab\xe5\x3b\xf0\x99\x00\x7e\x81\xdc\x66\x40\xb1\x73\xd0\xb6\x8a\x82\x60\xab\x52\x5a\xfc\x26\xc2\x70\xf7\xc0\x68\xf6\x61\x45\xf0\x9c\x64\x1b\xfb\xc1\x5a\x59\x44\x96\xcd\xdf\x2b\xc6\x58\x5a\x21\xb0\x9a\xd7\x0f\x73\xad\xdd\x77\xcd\xe0\x56\x89\x1e\x81\x71\x50\xd4\x95\xfa\x34\x74\x06\x4f\x9f\xa8\x33\x44\xe0\xb0\xc7\x95\x5e\x3a\x37\xbb\x56\x9e\xba\x2a\xb1\x6c\x11\x0c\xb6\x54\xb9\x6d\x77\x70\xa0\x14\x7f\x1e\x67\x58\xe0\x24\x21\x09\x95\xe9\x8b\x05\x03\x9f\x95\xdd\xb5\xfa\xac\x0a\x6e\x4c\x44\x2c\x4f\x27\x86\x14\xdd\x40\x6c\xb1\x3f\xc5\x91\xc8\x59\x08\x6d\xe6\x37\xc6\x17\x13\xcc\xe1\x5e\x00\xab\x52\x34\x87\xaa\xad\x53\x4c\x05\x23\xb2\xb1\x46\x26\x89\x72\x41\xd5\x62\x6c\x4b\x8e\xb6\x3f\x70\x77\xf6\xcb\x33\xfb\xe1\x6a\x0f\xb7\xcb\xea\x77\xfd\xf9\x12\xa7\x19\x11\x50\x26\xc8\x15\xbc\x09\xca\xaa\x5a\xd4\x06\xe2\x6b\x0d\x41\xf8\xf3\xd2\xb5\xdd\x14\x38\x8c\x9f\xc7\x41\x46\xd5\x38\xaa\x12\xc7\xba\xc3\x5a\x87\x3b\xb5\x6a\x92\x2f\x8c\xbc\xd4\xe0\x45\x7e\x81\x2a\x23\x36\x6d\xc2\x34\xad\x07\x1c\xb8\x82\xc1\x5e\x59\x6c\x4c\x90\xf2\x6e\x95\xaa\x86\x71\x5a\xac\x9f\xba\xe0\xa3\x15\x83\xed\x07\x5f\xb5\x18\x71\xd0\xc9\x9e\x86\xad\x0f\xba\x10\x79\xa6\xe8\x64\x19\xda\x46\xed\xaf\x84\x68\x3f\x81\x34\x6b\xe7\x66\x28\x75\x6b\xea\x8a\x96\x38\xb1\x9d\x9d\x96\xff\x2d\x8e\x98\x43\x08\x32\x08\x4b\x61\x1e\xdf\x75\x4a\x95\x72\x89\x02\xc6\x00\xad\xa9\xb3\x6c\x9b\xfd\xca\x85\x7b\x60\xa8\xf4\x6a\x4c\x44\xc7\x23\xd6\x97\xe8\x99\x20\x46\x2c\x84\x44\x4d\x0d\x57\x6f\xd5\x86\xda\x4f\x13\xa2\x7b\xf2\xb1\x29\x5a\x78\xa0\x4a\xfa\xf2\x63\xa6\x8f\x29\x4e\x24\xe9\xe9\x86\xa1\x6a\xa9\xe2\x10\xfc\x89\xd1\xb3\xc0\x59\x46\xc4\x88\xd9\x2c\x0e\x70\xb8\x70\x9e\x98\xf6\x9b\x42\x5c\xed\x1a\x90\x71\x84\xa3\xf9\x2b\xed\x11\x86\x64\x9c\x68\x4e\x62\x97\x2f\x5c\xde\x1e\x37\x6f\x63\xb0\xde\x60\xb3\x86\x53\x57\x3e\xab\x67\x3b\x49\x22\xcd\x51\x7c\x99\xe9\x8c\x08\x3d\x6a\x4d\xc3\x4f\x84\x21\x3a\x75\xe3\xb0\xb1\x3b\xe8\x19\x3c\x53\x9a\xf4\x9f\x30\x4d\x4c\x02\xbe\xeb\xda\x09\x81\xc6\xfc\x3e\x62\xc6\xdd\xcd\xa2\x52\x86\x2a\x65\x54\xce\x35\xa7\xce\xc1\x27\x09\x6a\x46\x53\xe2\x0c\x7b\xda\xe4\x34\x0f\xf4\xeb\xab\x39\xe8\x13\x15\x9c\xa5\x90\x24\x63\x71\x99\xdc\xf2\x49\xa2\xfc\xf1\xa8\x4d\x71\x5c\x2b\x11\xc7\xb1\x2c\x1b\x3f\x8d\x5a\x49\x7f\x2d\x99\x5d\x8e\x4a\x59\x81\x51\x00\x2b\x04\x41\x9c\xae\xb2\xd8\x2a\xf9\xb7\x4b\x6d\x58\x4e\x6d\xa8\x5f\x9b\x43\x4c\x6f\xf0\x87\x78\xd3\x14\x87\xa6\xed\xdf\x87\x64\xbb\xc7\x54\x87\x37\xce\x09\x78\x99\x74\x80\xb7\xcd\xdf\x78\x89\xd4\x8d\x2e\xc1\xe1\x0d\x13\x1c\x5a\x5b\x6a\xcb\xb1\xd9\xcd\xc7\x76\xa3\xe4\x80\x35\x60\x4e\x75\xbd\x5c\x12\x25\x68\x24\xf7\xc1\x1f\x64\x86\x5b\x46\xb5\x81\x16\x98\xad\x91\x9a\xf4\x0b\xde\x09\x09\x71\x62\xbe\xce\xdf\x44\x10\xfc\x18\xf3\xe7\x25\x5b\x9d\x0c\xd1\x34\x2e\xb9\x16\x7b\x04\x89\xa8\x24\xa5\x48\x16\x2a\x11\x23\xd2\x1a\x3b\xf1\x88\xcd\x29\x11\x58\x44\x73\xc8\x6e\x2c\x36\xc6\x64\xc9\x1a\x40\x23\x13\xcb\x10\x7a\x9b\x36\xd8\xf4\x16\xeb\x5e\xb5\x30\x79\x7c\x3a\xbb\xe7\x7a\x24\xa9\xf9\xc4\x0b\x33\x56\xca\x08\x4d\x72\xad\xb6\x7f\xd7\x40\x7c\xbf\xd8\x2f\x1a\x8c\xef\x83\x89\x82\x2f\x5a\x06\xe4\x17\xd4\xd0\x05\xe5\xbf\x50\x50\x7e\xcd\x12\x6f\x16\x98\xbf\x95\xc9\xef\xf5\x63\x86\x5d\xcf\xaf\x11\x37\xbc\x2e\x68\x2b\x9f\x8c\x5f\xfc\xe8\xd5\xce\xb9\xed\x09\xfc\xc9\x13\x85\x91\x88\x85\xa6\xb3\x09\x89\x63\xe0\xb4\x8a\xdb\x4a\xd1\x05\xed\x38\xf3\x80\xbe\x7b\xb1\xd4\xc4\x8e\x13\xce\x66\x92\xc6\x06\x6c\x25\xc3\x50\xb1\x35\x34\x5e\x00\xb8\x00\xec\x6f\x92\x10\xe1\xbc\x12\x02\x7d\x2d\x29\xb3\x68\x8a\xfe\xb7\x98\x13\xc9\xbe\x52\xc6\x58\x80\xd9\x02\x3d\x32\xfe\x9c\x90\x78\x06\x3b\x54\x1d\xcc\x11\xa2\xa4\x87\xa8\xf2\x9f\x09\x40\x23\xe0\xb9\x1a\xe9\xb1\x43\xac\x99\xd1\x00\x88\xfd\x36\xa8\x89\xee\x9b\xf9\xe6\x18\xa1\x21\x43\x53\x1c\xa9\x1e\x92\xf9\xa4\x68\x3f\xe6\xa6\xc8\xb5\xd6\xbe\x83\x89\x17\x8d\x74\x31\xe3\x35\x9d\xd7\x9f\x0d\xc7\x1d\x34\xb9\xf6\x13\x8a\x77\x8a\xad\x7b\xc2\xbb\x40\x8c\x5e\xe6\xd2\x06\x61\x20\xce\xfc\xd1\xb7\xf0\x4a\x1e\x23\x1a\xf0\x3e\x0d\xde\x32\xe3\x71\xa3\xad\xb3\x32\x95\x4d\xc7\x52\x04\x42\x5a\x41\xc9\x3a\xaa\xa0\x5d\xb3\xdc\x5a\x6a\x92\x4a\x10\x9c\x5a\xe7\x80\xbe\x6a\x40\xac\x31\x61\x90\x7a\xf4\x54\x18\x09\x73\x93\x2d\xbe\xa0\xec\x51\xef\x6e\x81\x8a\x0d\xf5\xe5\xa1\xe7\xba\x4d\xcb\xf4\x8d\x47\xce\x38\x33\x0e\xc2\x9d\xe4\x4e\x3a\x63\x38\xd9\xd0\xc6\xb1\xb4\x72\xcb\x3e\x3d\x27\x67\x59\x71\x41\x4b\x11\xc6\xd8\x87\x4c\x8f\x1b\xd9\x90\x2a\xf3\x0d\xe5\x3d\x8c\x62\x92\x11\x16\x13\x16\x2d\x80\x44\x18\x20\xe7\x08\x86\x13\x84\xe1\x3b\x9c\x1c\xa3\x73\x93\x5f\xe3\x25\x3c\x7b\xad\xc3\x85\x9e\x62\x46\xa7\x5a\x4f\x00\x23\xac\x1d\xe5\x88\x99\x61\x3a\x1f\x48\x50\xb4\xdf\xaf\x58\xdd\xce\xe8\x1b\xe4\x6a\x47\x54\x62\x56\xfe\x1e\xad\xbe\x70\xa0\xb7\x55\xbb\xa3\x9b\x73\x35\x08\x64\x3e\x39\x82\x7f\x97\x12\xce\x1c\x50\x4f\x81\x22\x43\x12\x02\xe6\x40\xeb\xf1\x82\x8b\xb1\x09\x58\x6e\x1f\x7e\xbb\x35\x79\x1c\x41\x1f\x25\xa5\x26\xa5\x8c\xa6\x79\x1a\x38\xef\x4c\xc5\x82\xc8\xda\x2f\x4d\x26\x46\xa6\xf5\x80\xc8\x81\x97\x23\x7d\xb9\xb2\x05\x9a\xd1\x27\xc2\x46\x2c\xe3\x94\xa9\x63\x74\xc5\x15\x09\x4a\x44\x18\xe8\x28\x9e\x29\x9a\x1a\xb4\x53\x41\xf4\x39\x30\xa0\xd8\x00\x34\x39\xc7\xaa\x87\xe2\x1c\x8e\x2a\x23\x4a\xb3\x0e\x7d\xe3\x2a\xd8\x19\x88\x8f\x16\x23\x66\x6e\xba\x29\xa6\x49\x2e\x88\x95\x59\xb1\xc9\x8b\x29\x86\x5c\x8c\xcc\x22\xa1\x05\x93\x48\xe9\x6c\xae\xf4\x16\x69\x19\xcf\xfa\x1b\xe7\x9a\x1b\xf1\x11\x9b\x10\x84\x51\xc6\x25\x55\xf4\xc9\xfb\x2f\xe9\x14\x61\x29\xc1\x82\x72\x8c\xce\x4b\xf6\x7f\x2a\x41\xf5\x6e\x8a\xab\xa5\x6c\x6c\x6d\xcf\xcd\xf9\x38\x3b\x6f\x64\xa9\x17\xbb\xca\x78\x22\x79\x92\xab\xd0\x05\x5b\xbf\xb7\x85\x69\xdc\x01\xf7\x83\x81\x98\x4f\x47\xcc\xd1\xb5\x3c\x46\x7d\x89\x24\xd7\xbb\x24\xcd\x56\x46\x82\x2a\x22\xa8\x41\x71\x22\xca\x6c\x82\x3f\xa7\xfe\x0c\xa4\x58\x3c\x6a\x11\x2a\xb4\xc0\x1b\x4c\xd1\x92\xb5\x63\x62\x24\x24\x80\xb5\x0a\xb7\x03\x4c\xff\x88\x71\x76\xc4\xc8\x0c\xaf\xdb\x91\x11\x2b\x6d\x09\xfa\x9a\x4e\x0b\x85\xb4\xc9\xe7\x18\xac\xdd\x18\x22\x9f\x9a\x76\xc9\x74\xdc\xb4\x49\xd3\x84\xe3\x35\x6e\xe3\x69\x71\xe8\xd1\xdf\xf9\xc4\x8c\x51\xeb\xfd\x5c\x81\x14\xa8\xd5\xab\x29\x17\x64\x8e\x59\xdc\x73\x9b\x55\x1e\x1b\xdc\x8c\xd6\xd4\xe6\x94\x31\x90\x04\x1d\x88\x30\x31\x58\x4c\x98\x05\x7b\x61\x15\x37\xbb\x15\xc5\x3e\x6c\x74\x57\xf8\xd6\xa0\xf6\x89\x31\x40\x18\x96\xb7\xc8\xec\x11\x97\x34\xcd\x92\x22\xa7\x29\xb0\x8d\x4e\xb5\x88\xe5\x78\x24\x7f\x02\xd3\x95\xd3\xda\xe0\x56\xb7\x3b\xa7\xe9\xac\x66\xe4\x9e\x91\xc2\xad\xe1\x6c\x5e\xa6\x0c\x66\xc0\xc2\xbe\x96\x44\xff\x53\x91\x42\xed\x33\xc2\xfa\x88\x39\x11\xe4\x1b\xe0\x32\xb6\xd9\xc0\x78\xa6\x45\x68\x03\xf3\x6a\xd7\x0f\x45\xc6\xc9\x5d\x3a\x27\xf6\x30\xb8\x57\x6b\x2e\xaa\xef\x28\xc3\xa5\xcc\xdb\x2d\x04\xbf\x24\xdf\x28\xb9\x2a\x70\xfb\x2d\x9a\x6a\x9a\x28\xbc\xae\xcc\xc8\x06\x94\x60\xf6\x99\x20\xdd\x9d\xa5\x66\x57\xf1\x06\x43\x44\xc0\x9c\x24\x19\x8a\xe9\x14\xcc\x52\x0a\xd8\xb7\x07\x16\x33\x58\xf0\xfa\xb0\xa7\x39\x33\x20\x71\xc6\x23\xf2\x6c\xf1\xb6\xed\xd5\x58\x34\x7e\x3c\x62\x43\xf5\x95\xd4\x22\x3a\x67\x33\x7d\xd1\xc4\x4f\x54\x16\x45\x4e\x22\xce\x64\x9e\x12\x61\xbb\xd0\x37\xb2\xa6\x48\x5b\x20\x00\x3b\x19\x4a\x8f\x4d\xef\xfd\x13\x4e\x68\xec\x0a\xf1\xe8\x1f\xcd\x99\xd3\xa3\x94\xce\xa3\x58\x13\x12\x66\x37\x37\xd6\x6b\xf5\x66\x62\xfd\x8f\xa1\xe4\x8e\xd2\x42\xc8\xc7\xd6\x56\x7f\x52\x15\xf1\xed\xaa\xaf\x10\xef\x27\x4b\x93\x42\xab\x05\x23\xbb\x0a\xe7\xeb\x50\x0c\x1d\xa2\x6e\x6e\x42\x80\x75\x3f\xce\xe8\x63\x06\xb7\x11\xfb\xa9\x4c\xd0\x8e\xda\x70\x96\x50\xbc\x27\x14\x64\x03\xa9\xb0\x16\x2f\xcc\x75\xc0\x85\xd5\x70\xec\x9d\xd3\xbc\xb5\xe7\x3b\x96\x89\x90\x11\x4e\x96\x77\x78\x85\xbd\xd9\xbc\xbf\x5a\x09\xb0\xc7\xcd\xb4\xbd\x32\xe9\x37\xe2\x49\xb2\x49\x09\x93\xca\xcc\xcf\x8a\xcf\x57\x8f\xa8\xe8\x47\x6f\x80\xdb\x0b\x38\x35\xe6\xf2\xc6\x89\x35\xa5\x48\x65\x77\x29\x7c\xc9\xa8\x61\x0b\xcb\x5a\x47\x8c\x4f\xa1\xc8\x4d\xd2\x14\xd5\x95\x09\x9e\xd2\x4d\x50\x96\x4d\xa0\xd3\xad\xb3\x8b\xaf\xb1\x32\x38\xeb\x39\x88\xa6\x86\xbc\x6c\x8f\x90\xaf\x87\xad\xb8\xb9\xe2\x0c\xa5\x38\xdb\x6a\xc1\xd7\x79\x85\xfa\x28\x35\x2e\x39\xbb\x7a\x80\xb7\x48\xa0\x5e\x0c\x2c\xf2\x33\x5e\x14\xa9\xd1\x4d\xf8\xb9\x6c\x23\x72\x78\xd0\xaf\x0f\xd9\x94\x6f\x70\x38\x8b\x54\x66\x7b\xfa\xb0\xa3\xd9\xe0\xfc\x79\x2f\x85\xd9\x7d\xb3\xa6\x6d\xce\xe3\x59\x1d\x51\x6f\x7c\x32\xdd\x0a\xbe\xa4\x8d\x32\x64\x22\xa1\x79\x72\x93\xbb\xb5\x7c\xb4\x82\x16\x11\x0c\x67\xf5\x52\x5d\x96\xe8\x70\xef\x6b\x54\x69\x07\x19\x53\xb8\x0b\xa6\xbe\xa9\x6f\xf5\x15\xd6\xcc\x1e\x92\x56\x8b\xb5\x23\x76\xc3\x66\x38\xc0\xae\x47\x8f\xfa\x5b\x7f\x42\xd7\x16\x39\x68\xbf\x18\xc0\xcd\xa4\xb5\x73\x15\x91\x99\x36\x45\x6d\x4a\x13\x2d\x62\x0f\x6b\x0c\x9c\x2e\x41\xcc\x07\x54\x99\x50\x79\x27\x3d\xe5\x82\x06\x85\x41\x9d\x8c\x84\x28\x14\x28\x09\x9d\x3c\x81\x42\x0f\xa6\xc5\x39\x7f\x36\xd1\xe9\x82\x6a\x9e\x65\x84\x55\x05\xe6\x1e\xcd\x0b\xa8\xb5\x96\x18\x63\x93\xff\x80\x9b\x98\x41\x6c\x6b\x1f\x17\xa3\x6a\xd8\xd2\x7d\x94\x78\x6a\x9f\x7f\xe7\x7a\xbd\xd7\x5f\x2c\xef\x4d\xed\x08\xef\xcb\xad\x6f\x3c\x3a\x2f\xe5\x6f\x1e\x30\xf5\x11\x3e\x75\x4a\x0f\x46\x53\x41\xc0\xc1\x9f\x7a\x4c\x0d\x03\xaa\xcb\x39\xdc\x77\x77\xe7\x3f\x9c\x3c\x0c\x11\x51\x11\x4a\xe8\x23\x19\xb1\x48\x3e\xf5\xb4\x78\xfc\x8f\x9c\x28\xfd\x73\x83\x47\x80\xa6\x84\x49\xe0\x04\x54\x2d\x61\x0f\xd5\x2f\xa4\x5b\x18\xfd\xdf\xf3\xf2\xf7\x2b\x48\x7e\x29\x7d\x18\x68\xd7\xd5\xbb\x01\x32\x85\x92\x1e\x66\x69\x65\x0d\xc5\x18\x5b\xe4\xa0\xae\x1a\xe6\x16\xe9\x42\xec\xef\x39\xdb\x50\xe8\x3a\x2b\x3e\x0a\x46\xd1\x20\xd3\xa5\x19\x06\xac\xeb\xcd\xf2\x90\xcc\x37\xb5\xad\xaf\x63\x22\x45\x5a\xb6\xb3\x2d\x17\x85\x43\x91\x12\x84\x00\x0b\xf1\xf4\x64\xef\x7a\x8b\xc4\xe1\x27\x16\x7c\x74\x3c\x62\x97\xce\xe3\x5c\xfc\x2a\x0b\x3d\x3c\x9d\x04\x10\xe0\xe5\x56\xa0\xd9\x98\x4a\xff\x03\x14\x74\x91\x79\xa2\x4c\x45\xbb\x29\x65\x38\xf1\x03\x35\x4f\xea\xb8\x84\xc0\x2c\x9a\xef\x6a\x42\xa6\xd3\x31\x49\x36\x91\x44\x87\xd3\x41\x22\x35\x7d\x47\x8f\x0d\xa7\x73\x9b\x9a\x8d\xc5\x64\x6c\x25\x5a\x53\xf7\x09\x15\x26\x68\x9c\x98\x8a\x72\x04\x81\x8f\xb2\x9a\x3d\x66\x00\x22\xf4\x2e\x5a\x49\xdd\xb8\x28\x4d\xda\x86\x0f\xc9\x86\x5e\x10\x56\x23\x26\x72\x06\xc5\x26\x7c\xc4\x02\x46\x05\x5e\x78\xe4\xfc\x07\xd6\x9b\x33\xd3\x6c\xc2\xc0\x71\x9b\x97\xb5\x7e\xc6\x73\x09\xb6\x9a\x94\x28\x7d\x41\x7d\x0d\x75\x60\x4d\xc8\x50\x0f\x65\x82\xa6\x60\x6e\x95\xdf\xd4\x6c\xdd\x19\x56\x38\xe1\xb3\xbe\x50\x74\x8a\x23\x75\x8f\x77\xd2\xc0\xb1\x6d\x66\xdb\xf0\x53\x37\x0c\x34\x3c\xd7\x8b\x3f\x23\x8c\x08\x98\xa8\xd6\xc9\xeb\x8f\x30\x3c\xd9\x8a\x73\x83\x95\xcd\x1a\x46\xa5\xb7\x58\xe0\x5c\xf1\x54\xeb\xb7\x38\x49\x16\x3d\x63\x91\x25\x68\x8e\xe5\xdc\x6d\xb4\x31\xa6\xb5\xb9\x9b\xec\xe2\x9e\xe1\x68\x4e\xee\xa0\x2a\x72\xdd\xe2\x56\x46\xf9\x81\xb0\x3c\xfd\x70\x8a\xfe\xa7\x98\xe3\x59\xff\xec\xfb\xc1\xf8\x7c\x78\xd7\xff\xee\x62\x70\x1e\xcc\xc7\x3e\xb9\x1c\xde\xdd\x2d\xff\xfa\xfd\xf0\x7e\xf9\xc7\x9b\xeb\x9b\x87\x8b\xfe\x7d\x5d\x2b\x17\xd7\xd7\x3f\x3c\xdc\x8c\x3f\xf6\x87\x17\x0f\xb7\x83\x9a\x4f\x1f\xee\x9b\x1f\xde\xfd\x30\xbc\xb9\x19\x9c\xbb\x55\xf9\x5b\x70\xba\xc0\x7a\x0c\xa9\x17\xf5\xd3\xa8\x1e\xc0\x23\x54\x7e\xf1\x14\x3d\x54\x4b\x1f\xd8\x58\x64\x83\x63\xf1\x8c\xa5\xe6\x61\x10\x0a\x3f\x62\xc8\x7d\xae\x17\xa5\xe9\x53\x13\xae\x13\xcd\x09\x4a\x38\x7f\xcc\x33\xcb\xda\x4c\x7c\x18\xe3\xc6\xf0\x43\x64\xd0\xda\xf7\xc3\xfb\xd3\xe5\x12\x0c\xbe\xb1\x00\x31\xcb\x9d\x01\x18\x17\x76\xec\x14\x6c\x29\x0e\x9a\xbf\xb0\xde\x06\x3d\xf8\x9d\x59\xd5\x8f\x69\x0d\x33\x55\xe9\x26\x8e\x6d\xd1\x5f\x37\xb1\xa0\xe1\xf2\xbe\xae\x5a\x4d\xbf\x1c\xa6\xf6\x14\x9a\x90\x08\xe7\x26\xa8\x49\xdf\x53\x42\x70\x11\x0e\xb8\xa0\x87\xfd\x35\x6a\xe9\xa8\xb6\xc1\xca\x9e\xe9\x89\xcb\x47\x9a\x65\x24\xfe\xb0\x2c\xbf\x94\xab\xc3\xda\x9a\xe4\x7c\x8a\x82\x33\xa9\xf5\x7a\xd0\xf9\x5d\xe1\x94\xf9\xc2\x7b\xd2\x20\x70\xa3\x08\x65\x01\x20\x67\x7d\x27\xf8\xc2\x16\x14\x5c\x63\x58\xa1\x67\x02\x29\xd5\xb9\xad\x1c\x65\x74\x6f\x7d\xb6\xa1\x3b\x63\xd3\x76\x75\xe0\x4a\xa9\xd6\x8d\xcc\x78\x1f\x02\xb7\xfe\x5e\x92\x3a\x46\xbc\x43\x5e\xec\xb9\x69\x14\xb8\xb3\x8b\x79\x83\x11\x37\x04\x37\xb8\xdb\xa0\xc6\x42\xbe\x42\xbe\x5a\xbe\x91\xd6\x5c\x16\x9a\x6d\xb7\x19\x8f\xc3\x02\x29\x01\x5c\xb7\x1f\x58\x09\x04\x79\xed\x5a\xdd\xf3\x18\x2f\x34\x71\x40\xac\xb1\xcc\xb3\x8c\x0b\x85\x1a\xda\x30\x6e\x7c\x33\x3e\xb8\x73\xec\x3c\x3c\x8f\x83\x46\xb4\x84\x21\x6b\x6a\x69\xb4\x83\x47\xb0\xeb\x5a\x30\x8e\x30\x40\x16\x14\x41\x5f\xf7\x28\x2d\xa9\xd4\x25\x0a\xad\x13\x7e\x77\xc9\x30\xc8\xf4\x05\xdf\xb6\x0c\x5f\x5d\xef\xd7\xae\x85\xda\x2d\x4f\xc8\x54\x8d\x6b\xbd\x3e\x2b\x0c\x9c\xba\x45\xd6\x84\x28\x43\x67\xf3\x3d\xb4\xd8\x5e\x4b\xf8\xa3\x0d\xec\xd1\xaa\x41\x60\x21\x10\x9c\x2b\x23\x9f\x16\x3a\x0c\x72\xab\x09\xe6\x05\xdb\xa9\xcd\x05\xf3\x42\xa0\x96\xf9\x8d\x3f\xd4\xa7\x4d\x1d\x8f\xd8\x00\x02\x28\x0a\x45\xc4\xa5\x88\x81\x16\xb0\x56\xfe\x2f\x15\x1d\x7d\xd5\x68\xcd\x66\x84\xd7\x82\xee\x6d\xbd\xfc\x64\x81\x8a\xc2\xb2\xa5\xef\xda\x9c\x1e\x63\xf5\x76\x22\xa0\x99\xb0\x2d\xe3\xae\x48\x66\x2d\xf3\x66\x9e\x45\xa4\x0f\xc4\x87\xe9\xae\x8e\xd1\x4f\xce\xf2\x03\x81\xaf\x45\x4d\x66\x1b\xbb\x91\xe0\x85\x03\x85\xac\x5b\xd8\x7d\xe0\x2c\xee\x3b\x14\x76\xf5\x02\x7b\x40\xa7\x9a\x55\x2e\x29\xe0\x8c\x19\x8b\xec\x06\x69\x1f\x67\xfe\xa3\x3b\xb2\x3a\x2a\xe0\x23\x94\xe1\xb4\x91\x55\x20\x74\xb0\x64\xf1\xbf\xcc\x66\x99\x4c\x54\x57\x58\xcb\x96\x45\xb4\x1e\x54\x7d\x7e\xc0\x03\x68\x12\x55\xd1\x94\x26\x09\xc8\x01\xc7\xa8\x0f\xe5\x81\x21\x91\x53\x5f\x85\x2e\xc0\x82\xce\x18\x5f\x97\x63\xd6\x40\x4c\x51\x40\x4c\x77\xcd\xc4\x24\x81\x9a\x8a\x3c\xfe\xfd\x50\xd4\x1e\x30\x5d\x34\x6f\xc1\xcb\x88\xd8\xed\x91\x5c\x36\x50\xde\xdf\x22\x3a\x7a\x69\xb8\xc1\x87\xff\xaa\x1f\xfa\xa7\x1c\x0b\xcc\x14\xc4\xfc\x5a\xd1\x5d\x90\x20\xf5\x88\x7c\x86\xf8\x0c\x66\x0c\xc1\xf0\x53\xb8\xb9\xce\xe5\x0f\xe1\x5e\x88\xc6\x3d\x44\x8f\xc9\x31\x54\x67\x13\x5a\x96\x98\x14\x6f\xce\xb5\xe4\x30\x62\x4b\xb1\x8c\xc7\xa8\x9f\x48\x6e\xbf\x20\x2c\x4a\xa0\x1c\x77\x10\x9e\xec\x29\xdf\xba\x95\x26\x0b\x50\x50\x60\x2b\x8b\xe6\xb9\x7d\x10\x7c\x08\x45\xc6\xc0\x27\x9e\xc0\x49\x2f\x7e\xff\x3d\xcf\x8c\xb7\xa2\x29\x4e\xe2\x05\xcb\x39\x2c\x5d\x43\x2f\xb6\x49\xa6\x54\xe0\xaa\x0d\x82\x37\x60\x63\x8a\x18\xd3\x00\x81\x05\x7d\x8d\x15\x4a\x08\x96\x0a\xfd\xe1\x9b\x8d\x62\x43\xdc\x04\x0b\xee\x6a\x8f\x6f\x91\x28\xe6\x52\x0d\x42\xe1\xce\x77\x0c\xb5\xe3\xb0\x50\x08\x23\x46\x9e\xc3\xc8\x52\x0e\xc1\xc0\xae\x20\x1c\x09\x72\x5b\x4d\x3c\x99\xc9\xcc\x87\x6c\x0d\xa3\x32\x35\xf0\x11\x07\x77\x6c\xdd\xa7\x76\x58\x35\x94\x65\x95\x27\x1b\xe2\x09\x90\x5c\x45\xd0\xff\x1c\xab\x11\xb3\x9c\xd5\x85\x8d\x04\x69\x5e\xfd\x24\x29\x07\xda\x63\xc8\x25\x61\x7a\xc2\x50\x9f\xfd\xd8\x2f\xd0\x15\xa8\x5f\x3e\xda\xb9\x64\xa7\x2b\x0e\x8b\x89\xc7\xf3\x78\x47\x61\xdb\xb5\xd2\x4e\x9d\x7d\xf9\x15\x85\xe0\x9a\xee\x2f\x4c\xa1\xfc\x16\xc2\x30\xa9\x1b\xf2\x9a\x83\xb5\x6c\xd3\x5f\x21\x1b\xef\xbb\x83\xf6\xa2\x72\xbd\x7d\x1c\xae\xd9\x67\x5e\x63\x6e\x6f\xd8\xdc\x40\xb6\xd8\x45\x01\xf7\x61\xf7\xaf\xe5\xf1\x2d\x0d\x7d\x18\x43\xd2\xdf\x7a\x2e\x58\x24\xd1\x39\xd6\x61\x62\xaf\xe3\x20\xa7\x27\x48\x21\x80\xe0\x3f\xc7\xf8\xec\x9b\x0d\x9e\xd7\xec\x7d\x4f\xbf\x57\xcc\xdf\x4d\xc5\x07\xc1\x2d\x4f\xbc\x59\xd8\xeb\xc7\x7f\xc7\x11\x44\xfa\x43\x4f\x2e\xc7\x60\x19\x90\xc9\xc1\x58\x63\x30\xe6\xd7\x8a\x87\x99\xe0\x11\x91\xf2\x18\x0d\xe0\xa2\xb1\xff\x44\x78\xea\x1c\x12\xc1\xcb\x23\xa6\x35\x13\x87\xdf\x12\xb4\x5f\x26\xf1\xba\x13\x60\xc0\xe0\x76\xf2\xe5\xa4\xeb\x6b\x94\x34\x69\x13\x0e\x8b\x0e\xda\x80\xb2\x06\x68\x30\x3b\x45\x31\x8f\x1e\x89\x38\x11\x24\xa6\xf2\x14\x7c\xeb\xaa\xd1\xa9\x97\x6a\x6d\x7b\x67\x49\xa3\x29\x50\x60\x4d\x52\xdc\x99\xe9\xdf\x06\x58\xbb\xf0\xda\x1e\xa2\x53\x50\x27\x5c\x4e\x86\x09\x42\x76\x70\x37\x84\x29\xb1\x80\xb8\x7e\x6f\xca\xaa\x2c\x84\xd3\x34\xb4\xd0\xd6\x94\x4d\x24\xf6\x11\x83\xb3\xe5\xb4\xef\xe7\x44\x12\x17\x70\x60\x26\xa5\xb8\x8d\x65\x36\xec\x22\xc3\x6a\x2e\x21\x75\xb5\xbc\x06\x56\xe9\x82\x4f\xf5\x0a\xe1\x0c\xe2\x15\x8c\x95\xa2\xf8\xc8\x27\x58\x4a\x45\x93\x64\xc4\x18\x21\xb1\x44\x90\x65\xfa\x55\x6d\x86\xbc\xfe\xb4\x87\x70\x1c\xa3\xff\xfd\xf5\xc7\x8b\x9f\xef\x07\xe3\xe1\x15\x18\xad\x87\x17\x83\x6f\x7a\xfe\xc7\xeb\x87\x7b\xff\xab\xb1\xb0\x3c\x11\x81\x52\xfc\x08\x2a\x1e\x93\xc4\x26\x4f\x90\x11\x0b\x47\xea\xb0\x03\xf4\x13\x49\x5c\xa4\xab\x15\x53\x3c\x84\xa2\xdd\xc3\xc6\x8a\xc5\xc6\xe6\xb7\x81\xf2\x7b\xeb\x3f\x59\x4d\x83\x8e\x78\x7c\x17\x4e\x0c\x84\x1c\x19\x2c\x83\x64\x72\xab\xfb\x16\x04\x47\xd8\x8c\xb2\xa6\x78\x3c\xc2\x9e\x5e\x52\x88\xff\x81\x2c\x7e\xd4\xea\xf5\x0d\xa6\xa2\x35\xed\xd5\xa3\x01\xb9\x13\xa3\xf5\x74\x2c\xab\x87\x4a\x1a\x59\xd8\x64\xdb\x34\xc6\x7c\xd6\x01\xc1\xbd\xf9\x74\x2d\xbc\x14\xf9\xac\x84\x43\xa9\xf0\xf9\x1c\x0e\xca\xc9\x5f\x34\x05\x0d\x8e\xd8\xfd\xf5\xf9\xf5\x29\x22\x09\x9e\x70\x08\xe5\xb7\x21\x41\xae\x09\xbb\x60\x11\x4f\x83\x86\x4a\x08\x25\x3d\x94\x15\x08\x25\xa1\x11\xed\xd8\xb4\xb1\x06\xa9\x24\xe3\x62\x19\xdf\x63\xbf\x2a\xa0\x9d\xec\x0d\x17\x6d\xae\x7f\xfd\x1a\x2c\x1d\xcf\xb4\x22\x57\xe1\xbc\xf6\x6e\x9e\x12\x6c\x6a\xe9\x1b\xb7\x90\xb5\xe5\xdb\x00\xd6\x24\x29\xd5\x53\xd4\x07\x47\x1e\x5b\x17\x7c\xf1\x26\x67\xe8\x87\xbf\x48\x34\xc9\xd5\x88\x95\xdb\xe0\x0c\xf5\x7f\xba\x43\xdf\x61\x15\xcd\xbf\x19\xb1\x6b\xad\x66\xfe\xf0\x97\x06\x28\xa5\x8d\xd1\x09\xf5\x9a\x9c\x63\x85\x2f\x38\x8e\x29\x9b\xd5\x41\x13\x16\xf5\x63\x06\xf7\xfd\x53\x74\x6d\x75\xf8\x22\x13\xc4\xa7\x04\x07\x0d\x01\x43\x86\x89\x38\x2e\x02\xac\x9c\x95\xe1\xdb\x8c\x66\x06\x17\xd6\x88\xdd\x1b\x4c\x46\xcd\x55\xa9\x42\x19\xb7\x35\x8c\xb4\x56\x66\xd0\x2a\xb1\xcb\x90\x22\xc9\x02\xe9\xd5\x01\x32\xf6\x9b\x61\xe5\x31\x90\x67\x96\x99\xfd\x88\x81\x82\xee\x73\x53\x12\x1e\xe1\x04\x62\xf2\x8e\x02\x9b\x9e\x56\xdb\x79\x0e\xf9\xe1\xa6\xe8\xf9\xa2\x1c\x3a\xeb\x21\x0b\xbc\x50\x16\x6e\x14\x18\x00\x60\x1f\xad\x37\x36\xe5\x9a\xe3\x18\x2c\x36\x30\xbe\x25\x66\x75\xf4\x87\x1e\x9b\xcd\x2c\x8b\x7e\xea\xd3\xb6\x78\xce\x1c\x16\x49\x04\xe6\x7b\xb6\x80\xf0\x6d\x28\x3a\xc2\x21\xf4\xa3\xe0\xce\x96\x28\x97\x76\xd1\xdf\x89\xc1\x67\x23\x66\x22\x05\x4b\xfb\x12\xa2\xf7\x04\xbd\x73\x06\x81\x8c\xcb\xb9\x62\x79\x66\x03\x1b\xad\xac\x9f\x09\x72\xe4\x33\xa0\xe2\xd2\x9a\xea\x1b\xf6\x18\xdd\x86\xea\x75\xcc\xa3\x3c\x75\xc8\xca\x90\x3d\x55\x94\x95\x2f\x49\x3c\xe6\x62\x5f\x47\xf1\x80\xd2\xa2\x08\xa4\x8f\xb7\xd6\x8f\x0d\xc1\xf4\xc3\x4f\x97\x25\xf5\x66\xc1\x17\x78\xc7\x6e\x51\x6b\xa6\xa1\x71\x56\x6e\xa9\xd4\xda\xce\x79\x89\x57\x05\xfa\x2b\x17\x20\x6c\x91\xcf\x19\x07\x23\xb7\x49\xcf\xe2\xf1\x57\x12\x0d\x6f\xb4\x04\xa4\x35\x5e\x7f\x06\x73\xa9\x4c\x70\x19\xa4\xeb\x98\xaf\x4d\xba\x40\x0f\x7d\x8b\x46\xf9\xb7\xdf\xfe\x29\x42\x9f\xdd\x1f\x7f\xfe\xcf\xff\xfc\xd3\x9f\x37\x49\x27\x71\x0a\x39\xb4\x5b\xac\x91\x2f\x27\x55\x16\x89\xc2\x1d\x58\xe6\x54\x3b\xec\x82\x3d\x80\x4d\xcb\xbf\x0d\xca\x63\x10\x3b\x84\x67\xf6\x84\xcb\xf0\x64\xa2\xd2\xd1\x2c\x22\x09\x24\x51\xbd\x32\x87\xf0\xc2\xae\x95\xe8\xff\xd7\x0a\xb0\xb2\xb1\x3e\x2a\xdb\xc5\x38\xd1\xc4\x8b\xd7\xba\x11\xf4\xb5\xb5\xff\x29\x70\x20\x7e\xe3\x2e\x38\x9e\xc4\x44\x98\x31\x79\x93\x9d\x37\x24\x02\x73\x20\x9f\xb3\x84\xc7\x0e\x1e\xb5\xc8\x05\xa4\x20\x20\x0c\x3e\x63\xcd\xb9\x7b\x16\x46\xcb\x7c\x64\x3c\x2f\x53\x1c\x19\x54\x50\x89\xbe\xfe\x7c\xaa\x7f\xeb\xa1\xc5\x29\x04\x91\xf6\xd0\xaf\xa7\x16\x2d\x07\x0b\x35\xd6\x3f\x7d\xe3\x64\x6d\xdb\x04\x0c\x9a\x4a\xf4\xd5\xc9\x13\x16\xa6\x66\xf4\x89\x19\xd1\x57\x96\xb3\xfa\xba\x78\xa1\x6c\x9e\x70\xfe\x68\x03\x6c\x97\x3e\x3c\x71\xc0\x6b\x40\xde\xde\x6f\x62\xb6\xde\x27\xe6\x2b\x74\x04\x2f\x10\x74\x9c\x4d\xd0\xf1\xdf\x25\x67\xe8\x78\x81\xd3\xc4\xfe\xea\x9e\xda\xf8\x5f\x2c\x6d\x4e\x5c\xec\x83\x7c\x92\x85\xb1\x94\x7e\x97\xf0\x09\xcc\xea\xd2\xcd\xd4\x44\xd0\xc2\x40\x8b\xdb\xa7\xb8\xb0\xec\x44\x5c\x22\x2a\xe0\x07\xa5\x5c\x99\x57\x80\xc7\xd5\xcd\xea\xb3\x1f\xd2\x7f\x1b\xbf\x30\x2c\x8a\x4b\xe2\x33\xc6\x61\x1f\xbd\xa6\x1b\xfd\x8c\xbe\xb6\x2c\xe8\x1b\x7d\xc7\xd8\x70\x65\xb3\x0c\x75\x1d\x2c\x7c\x07\x3f\x07\x1d\x50\x86\x4c\x5a\xe6\x8a\x2f\x7f\x3d\x39\x3e\x3e\xf6\x5f\x43\xd6\xfa\xff\x8b\xa8\x92\x24\x99\x9a\x96\xdc\x0d\xb6\x18\xb1\x4b\x57\x78\xc1\x19\xaf\x0b\x48\xc7\x4c\x70\xc5\x23\x9e\xa0\xa3\xc2\xa0\x1b\xf3\x48\xa2\x7f\xd7\x62\x6d\xb0\x94\xf0\xa3\xd6\xe3\x1a\x60\x60\x0d\xd2\xf3\x2b\x1d\x2a\x6b\x10\xaf\x1e\xab\x10\xc5\xcd\x2b\xb6\x58\x86\x55\x3c\x80\x16\x34\xe5\x9c\x58\xa4\x37\x21\xf4\xcb\xe4\xb3\x82\x47\x0d\x40\x7a\xb5\xa1\xec\xf5\x37\xe5\x12\xbb\x2d\xf0\xf4\x0c\x59\x37\x2c\x80\xc5\xbb\xb2\x9c\xc1\xcc\xb3\x17\xba\x4f\xf4\xe5\xc2\xc2\x52\x00\x32\x4f\x53\x2c\x16\x27\xc5\x69\x5b\x26\xce\x02\x69\x0d\x78\x4c\xe2\x16\x00\x5c\xb8\x89\x3d\x5a\x36\x8a\xc1\x8a\x97\xee\x46\xf3\x67\x37\x82\x5a\x86\x01\x62\x01\x61\x11\x8f\x2d\x5d\x17\xd9\xa7\x65\x89\xc5\xbf\xb3\x2c\xab\xb8\x88\x18\x59\x18\xe3\x98\x32\x10\x1e\xf6\x0d\xf7\x71\x03\xfb\xe6\x63\xa8\x8a\x4b\x66\x1b\xb8\x47\x87\xd7\x77\xee\x9b\xf6\x97\x2e\xac\x43\x59\x64\xc7\x49\x88\x8f\xc7\x66\x48\xe0\xe7\xe2\xfa\x85\xd8\x0e\x63\x9d\xc9\x7d\x6e\xae\xf9\xf7\x19\xbf\xa1\x89\xbe\xb5\x80\xc6\x8f\x47\xac\xf4\x73\x0f\x91\x84\xa6\x94\xf9\xd8\x3a\xc3\xdc\xf9\xd4\x48\xcf\x8f\x54\xe9\x2d\x93\xf1\xa3\xe6\x60\x0e\xd7\x29\x50\xa9\xfa\x6c\xe1\x48\xc7\x3b\xa6\xac\x05\x22\x97\x7a\x5c\x85\x8e\xae\x85\x59\xdd\xc4\x91\x15\x48\x69\x40\x78\x70\x7e\x47\x4c\xb7\xe6\xce\x52\x11\x2e\x1c\xb4\x17\x34\x77\xe4\x00\xf1\x03\x0e\x00\x7d\x94\x62\x7e\xbd\xfc\x5b\x23\xa0\x0c\x58\x9e\xee\x9a\x6c\x62\xc3\x87\xdf\xca\x4c\x77\x23\x88\xbb\xa9\x6c\xe2\x12\x61\x79\xea\x0e\xd4\x06\x14\x37\xb0\xe2\x4f\x4c\xa2\x04\x1b\xa4\x1a\xdd\x10\x44\x3e\xf6\x8c\x83\x34\x0b\xfa\x32\xd7\x8b\xe9\xc6\xd4\xd8\x49\x08\xfb\xda\xfc\xfb\x1b\x64\xef\x86\x6f\x7b\xf6\x3e\x17\xd2\x23\x80\x98\x3d\x87\x1a\x8d\x24\x36\x36\x74\x40\x25\x9e\x61\x11\x1b\x6b\x79\xa8\x55\x98\x0c\x5e\x2d\x7f\x2d\x78\x8e\x9e\xa9\x9c\x8f\xd8\x3d\x77\x06\x47\xc4\xb8\xc7\x75\xee\x81\x32\xba\xd4\x1f\x96\xc0\x04\x60\xd4\x75\x14\xa0\x99\xf0\x4e\xb9\x46\x10\x05\x3b\x66\x3c\x26\xbb\x01\x18\xdd\x17\xbe\x0a\xe7\xbf\x16\xc4\xe4\x83\xc1\x4d\xd1\x94\x4e\x4b\xa4\xdc\xd0\x36\x5f\xdd\x78\xb8\x87\x6c\x3b\x50\x12\xf8\x79\x23\x74\xed\x10\x1b\xcc\xdf\x6a\xd0\x8a\xd3\x38\x83\x6c\xe0\xd2\xda\x7b\xb4\xe4\x5d\x37\x21\xaa\x41\x2b\x6a\x75\xf7\x9b\xb9\x47\xb0\xec\x3e\xc0\x18\xa3\x99\xe0\x79\xe6\x53\xe6\x5d\xba\x9f\xd9\x06\x2b\xd3\x0c\xd9\x94\x9f\x5a\x9d\xea\x82\xb2\x47\x43\xf1\x2f\xb5\x47\x06\x10\x9b\xc4\x25\x18\x37\x57\xa5\x15\xe6\x70\x84\x28\x8b\x92\x1c\x2e\x3e\xa9\x70\xf4\x68\x40\xbd\x9b\x8c\xbe\xfa\x9b\xf1\xfa\x64\xca\x06\x89\x29\x4f\x12\xdb\x6d\x71\x81\x16\x65\xac\x9f\x28\x46\x18\x3d\xdc\x0e\xeb\xfb\x7e\xa4\xcb\xce\x9c\xfa\xdb\xb3\x4c\x20\xf0\x3f\x3f\xd0\x8d\xe2\x2e\x2b\xb0\x78\xa4\x44\xea\xde\xb8\xd4\x04\xba\x6a\x88\x54\x69\x05\x22\xbe\xad\x31\xed\x6f\x4c\xa7\xb3\x2c\x1f\xeb\x85\x4a\x36\x09\x10\xd0\xa3\xf8\x74\xf3\xd0\x0f\xbe\x5b\x45\x2a\x9f\x6e\x1e\x50\xd0\x87\x01\x3c\x4c\x48\xa4\x7c\xa4\xf1\x31\x3a\x2b\x70\x88\xab\x92\x79\x4c\x9e\x68\x64\x52\x5c\x7b\x5a\x2a\x1a\x31\x80\xf7\xd4\xba\xce\x91\xc3\x84\x42\x9f\x6e\x1e\x2c\x92\x94\x87\x9b\xb2\x90\xca\x00\x61\xb1\xd9\xb5\x53\x01\xd6\x64\x9c\x1d\x81\xc4\x86\x45\x5c\x78\x3b\x7a\xa0\x5c\xff\x7f\xec\xbd\x5b\x73\x1b\x49\x72\x36\x7c\xbf\xbf\xa2\x22\x7c\xa1\xd1\xf7\x81\xe0\x68\xf6\xb5\x63\xac\x08\x5f\x40\x14\xb5\xc3\x1d\x89\xd4\xf2\x30\xb3\x7e\x0d\x07\x54\xe8\x2e\x00\x6d\x36\xaa\x5a\x5d\xdd\xe4\xc0\x5e\xff\xf7\x37\x2a\x33\xeb\xd0\x47\x74\x03\xa4\x24\xaf\xe7\xc2\xde\x11\x01\xd4\xf9\x90\x95\xf9\xe4\xf3\x44\x3c\x2b\x4a\x32\x30\x1e\x5e\x4d\xed\x9c\x5c\xfb\x48\x88\x69\x96\x9a\x4b\x63\x2b\x61\x96\x01\xa8\x7f\x34\xf5\xe9\x5b\x06\xf5\x18\x70\x00\x0c\xda\x51\x87\x7f\xe2\x32\xfc\xb8\xdc\x31\x9e\x2f\x93\x22\x37\xcf\x30\xfc\x31\x4c\x85\x7d\x7b\x2c\xed\x8b\xca\x5b\x46\x24\xd8\x02\x13\x9c\xc8\x42\xcf\x65\x90\xc1\xe2\xb2\x82\x31\x79\x21\x91\x0c\xe8\xf0\x00\x7b\x63\xe9\xb9\xa2\x54\x95\xb1\xbd\x56\x73\x27\x00\xb3\xcb\xd0\x88\x9a\x4b\x60\x26\x31\x77\x2b\x08\x9f\xfb\xbb\xff\x35\xfb\x24\x1f\x92\x38\xe1\x27\x85\xd0\x29\x3f\x29\xfe\xcf\xa7\x49\xed\x4f\xfc\xd5\xf7\xdf\x7f\x42\x2d\x9b\x2e\xda\x05\xb7\x8c\x8e\x76\xf0\xb4\xc7\x29\x6c\xf1\x0b\xb3\x4a\x8f\x98\xa7\xf7\xc9\xbd\x60\x9f\x70\xba\x3f\x11\x81\xdf\x61\xd3\x36\x97\x6d\xf3\xc6\x0e\x99\x36\xa0\x53\x6d\x9f\x37\xd6\x33\x6d\xaf\xd6\xd3\x7f\x5c\x2f\xcd\x6c\xfd\xb0\x9e\xbe\xfa\x1e\xfe\xb3\x36\x47\xfb\x36\xaf\xcb\x9e\x69\x6b\x76\xcb\x41\xd4\xb2\x2d\xdd\x59\x34\x97\xfb\x0f\x23\x36\xee\x2c\x82\x55\xdb\xb6\xf1\x79\x21\x8e\xcd\x6e\x45\x5e\xc7\x11\xe8\xeb\x06\x61\x66\x6f\x44\xf0\x48\xb6\x49\xcf\x14\x09\x70\xcf\x6e\xda\xcb\x10\x80\x0b\x1f\x8e\xe0\xe3\x81\xef\x0f\xeb\x4f\xed\xbb\x7b\xba\xd3\xdf\xcc\x54\x88\x11\x0c\x32\x37\xe6\xeb\x03\x1b\x59\xf9\x6a\x5f\x1b\x1f\x39\x2a\xea\x34\x89\xdc\x63\x7a\xad\x8f\xd9\x45\x76\x39\xa2\xcb\x44\xbb\xbc\x3f\xd7\x12\x0b\xad\x74\xef\x6b\x5b\xef\x9a\xf6\x52\x28\xd8\xe3\xa2\x6e\x2d\x0b\x3f\x70\x45\x1c\x09\x85\x33\x4f\xea\xc5\x76\x30\x49\xa8\xaf\xf8\x2d\xfd\xf8\x43\x83\x32\xd4\x99\x97\x1f\x20\x33\xdb\x91\x61\x6d\xb9\x34\xd6\x9a\xad\xb5\x23\xb0\x84\xaf\xfc\x83\x9a\x74\x97\x1d\xd4\x20\xac\x71\xa0\x96\x2d\x55\x65\x4b\x79\xc4\xd8\x2a\x4f\x31\x76\x50\x6c\xc0\xad\xec\x35\xe0\xec\x31\xe7\xdd\xcb\xa8\x17\x97\xf2\x7c\x8d\x4e\x2f\x2d\x0a\xfd\xb2\x65\x86\x7d\x1e\xdb\x11\x33\x7c\x80\xce\x76\x88\x65\x01\x97\x4a\xdf\x4e\x73\xad\xac\x12\x46\xbb\x97\x96\x53\xac\x0f\xd8\x50\x7d\x72\x5d\xa4\x72\x54\x57\x88\xcd\x5e\xe9\xe6\xc1\x1a\x2b\xf5\x5e\x8f\xc7\xf1\xad\x63\x79\xb1\xaa\xef\x94\xb3\x8b\x8d\x5b\x0a\xe0\x3a\xef\x6e\xc3\x78\x5d\xf7\x9e\x26\x90\xd0\x71\x57\x0b\xe6\x72\x66\xbf\xe2\x19\x1b\x75\x82\x5e\x16\x4c\x47\x2c\x97\x98\xe1\x02\x3e\x33\xee\x47\x9d\x3a\xd7\xd1\x89\xb1\x09\xf9\xb5\x2e\xdc\x69\x91\xfb\xdb\x88\x54\xe0\x1c\x2f\x73\xaf\x02\xdf\x83\xc8\xdb\x60\xc7\x23\x2a\xbf\xb1\x5d\xa4\xa2\xec\x58\xb6\x55\x3c\xfc\xa1\x42\x05\x41\xc2\x11\xa1\x6a\x31\x2f\x20\xdd\xf9\x65\xea\x89\x3f\x6b\x95\x35\x77\x6b\x71\xd4\x69\x9c\xf0\xed\x22\x57\xdd\x12\x85\x03\x86\xc9\x16\x51\xf1\xd9\x6f\x50\xb2\x68\xc7\x3e\x97\x3c\xc5\xcb\x4d\xd2\x72\xb4\xcd\x06\xf7\xc7\x0f\xff\xc4\x66\x70\xfb\xb0\x0f\x70\x2e\x02\x68\x0b\x4a\x2b\x14\x4b\xb6\x99\xc8\xb5\x92\xbc\x53\xab\xf3\xfe\x47\xbd\x20\xbd\x31\xf3\x34\x56\x65\x53\x5b\x6c\x44\x4f\x5a\x4a\x0b\x3b\xc5\xd9\x7d\xb9\x14\xb9\x14\xa8\x47\x0a\xdf\x63\xf6\x7b\x83\x9a\xab\x78\x59\x6c\x7e\x58\x44\x69\x32\x58\x04\x0d\x32\x46\x67\xe6\x67\x67\xf8\xab\xbe\x0e\x54\xca\xaf\x34\x5d\x32\xfc\x8c\xe1\x67\x53\xf6\x86\x47\xf7\x42\xc6\x2c\x4b\xcb\x75\x42\x04\x31\x68\xee\x27\xd5\x87\x7d\xb5\x63\x68\x5b\x60\xf9\xe6\x1a\x9a\xcb\x2d\xbf\x47\x62\x72\x32\x22\xcd\xcb\xa1\x8b\x5e\xd0\xb9\x4a\x16\x49\x73\xed\xee\x9d\x2d\x77\x1f\x36\x8b\xa9\xaf\x3d\x5d\x62\xbe\xdc\xe3\x46\x11\xca\xa8\xe2\xa9\x19\xb1\x71\xdd\x6a\x6d\xf0\x78\x59\xae\x15\xa7\x4c\x4b\x8d\xc1\xdd\x0b\x21\x3c\x20\xd7\x2f\x25\xe3\x40\x05\xf6\x42\xb3\x32\xb3\xf6\x19\xc4\x96\x52\x40\xfa\xe0\x14\x98\x0f\xb2\x24\xba\x47\x6c\x29\x64\x4f\x30\xd7\xbd\x86\x80\x21\x13\x1e\xe4\xd8\x76\x34\xac\x90\x08\xe7\x38\xdc\x4a\x83\x9b\x7f\xcf\x3a\x1d\x98\x19\x52\x6c\x84\x5c\x1c\x40\x11\x3f\x7c\xd2\x2a\x59\x20\x64\x06\xbb\x18\x9d\x1b\xc2\x52\x26\x24\x0a\xe8\xdf\xd8\x8e\xff\x38\x59\xd5\xcc\xe8\x44\x33\xcd\x8b\x44\x9b\xb3\xac\x75\xc4\x3d\xfd\xd0\x31\xa3\xce\xc7\x71\x1e\xb5\xf0\x1d\xd5\xc6\xc2\x65\x9a\x4d\xd9\x3b\x88\x6c\x04\x2f\x03\xe5\xd8\x83\xba\x0e\xac\x62\x23\x3a\x69\x74\x9f\x02\xa2\x69\x7b\x10\x7c\xbf\x37\x60\xe5\xb2\x0a\xa7\x6c\xe6\x23\xca\xc8\x9f\x84\xb1\xe2\x3d\x3d\x12\xa9\x16\x87\x2c\xbe\x41\xc1\x17\x40\x5d\xc1\x02\x62\x60\x49\x69\xf3\x77\xaf\x0a\xe2\x9a\xf9\x08\x89\xfb\xfc\x5e\xc8\x3e\x0f\xfb\xf0\x16\x62\x08\xa4\xd7\x25\xe0\x62\x2b\x0a\xc3\x2b\x87\x34\x70\xf8\xb6\xf3\x94\x55\xc9\xea\xd4\x0c\xb9\x79\x86\x44\xf7\x94\x2e\x88\x11\x36\x22\xbd\x7a\xdc\x28\x1d\xee\x33\x3b\x7f\xf8\x92\xcd\x4b\xa7\xfc\x00\xe9\x96\x6e\x80\x11\x67\x29\x55\xc8\x89\x05\xad\x76\x9b\x14\xdd\x3a\x6e\xbe\x99\x3d\x42\x61\x18\x00\x99\x60\x8b\x6a\xee\xe6\x9f\x7f\xd4\x57\xb0\x63\x9f\x82\x7d\xa5\x5d\x6a\xfb\xf8\xcc\xa7\x03\x63\xbe\x0e\xd3\xeb\x75\xba\x79\xec\xf8\x82\x32\x15\x33\xbf\xbc\xc6\x8b\x72\x7f\xfd\x6e\xd5\xc4\xbc\x07\xf5\x6d\xdf\xca\xfe\x10\x00\xc3\xd8\xb2\x4c\xd2\x18\xe9\xf3\x02\x83\x50\x59\x8b\x03\x38\xed\xe1\xfa\x4f\xb4\xbb\x4f\xda\xd7\xd8\x47\x15\x1f\xb3\xb0\xc6\x53\xa4\x36\xd7\xf5\x80\xbc\x11\x1d\x82\x77\xb6\xfb\x47\x22\x53\xdd\x88\xff\x78\xa1\xab\x22\x6e\x3d\x0d\x06\x88\xd7\xb2\x5c\xdd\x80\x62\x54\x17\x0b\x51\x20\xa6\x62\xd3\x8a\xcd\x3c\x9b\x6a\x5c\x92\x5b\xd7\xa4\x10\x62\xc8\x5f\xff\x9c\xfd\xf9\xe6\xea\xf2\x64\xcb\x73\xbd\xe1\xc0\xf2\x60\xcb\x9a\x58\x11\x4e\x7c\x1e\x5b\x24\x43\x22\xe7\xf2\x84\xad\xd5\x04\x71\x33\xaf\xd9\xa6\x28\x32\xfd\xfa\xf4\x74\x9d\x14\x9b\x72\x39\x8d\xd4\xf6\xd4\x0f\xcd\x29\xcf\x92\xd3\x65\xaa\x96\xa7\xb9\x80\xcc\x89\x93\x57\xd3\x1f\x5e\xc1\xcc\x9c\x3e\xbc\x3a\x05\xb4\xc4\x74\xad\xfe\xe1\xfd\x0f\xff\xfc\xc7\x7f\x32\x05\x67\xbb\x62\xa3\xe4\x6b\x02\xe5\xf4\x96\x7d\x82\x56\xf9\x29\xfe\xa4\x56\xcb\x3f\x4f\xbf\x0f\x9b\x41\x5f\xdd\xaa\x58\xa4\xfa\xf4\xe1\xd5\xc2\x4e\xcc\x34\xdb\xfd\x9e\x6b\xf0\xd5\x72\x0d\xee\x93\xe2\xf7\x5c\x83\xaf\x9a\x6b\x30\xdc\xc2\x71\x67\x0c\x90\x37\xfb\xf3\xd1\xfc\xdd\x9d\x91\xd6\xf5\xbe\xef\x1c\x6a\xb9\x1c\xc2\x4c\xb0\x23\xae\x88\x7b\x31\xea\x89\x5d\xeb\xae\x7b\x3a\x74\xb8\xd8\xc6\x0a\xa8\x74\x1a\xf3\xa3\x88\x2f\x00\xd9\x97\x44\x40\xce\x8f\x2e\xc1\x8c\x27\x6d\x19\x04\x84\x60\x3d\x66\xfc\x9e\x53\x66\xe2\xa9\xf5\x25\xa8\xbb\x07\x6a\x4b\xa4\xf8\x6b\x8b\xb7\x55\x8f\x56\x53\xe2\x29\x94\x18\x06\x6a\x73\x3b\x82\x79\x5c\x3c\xd0\x16\xdb\xae\x8e\x66\x6c\xb8\x3e\x0c\xb8\x3d\x43\x1a\x57\x17\xa7\x43\xd4\x6b\xa2\x6d\x85\xf6\xe2\xb0\xcc\x38\xe6\x1e\xb2\x04\x7c\x59\x99\x67\x4a\x0b\x3d\x65\xef\x6a\xea\xb5\x1e\x8c\x7e\xfd\xee\x8c\xbd\xfa\xf1\x9f\xff\x38\x97\xdf\xb5\xdc\xdb\x70\xde\xab\x7c\x4d\xd8\x78\xb8\xad\xb7\x5c\x17\x22\x3f\xcd\x57\xd1\x29\x9e\x72\xa7\xe6\xf7\x27\x54\xe9\x89\x5a\x9d\x38\x9a\xf9\x13\x62\xdc\x9e\x6e\xe3\x71\xa4\x31\x95\xa5\x87\x77\x0d\x5d\x34\x1a\x2e\x25\xa4\x97\x53\x2b\x27\x28\x82\xb9\x8b\xa8\x3d\xa4\x56\x2d\xff\xf1\x26\x55\x4b\xfd\xd2\x91\x5a\x72\x6d\xeb\xf0\x2c\x73\xdd\x5b\xf3\x69\x14\x27\xec\x12\x79\x4e\x47\x85\x3d\x4b\xc2\xe7\xc8\x98\x81\x6f\xdf\x6c\xfe\xba\x47\x8e\x1d\x9e\xab\x52\x5a\xc6\x7e\x25\x85\x5a\x01\x74\x03\x2c\x61\x8b\x3c\x03\x5f\x2d\xe0\x99\x1c\x9f\x4e\x2e\x32\xbc\x60\x20\xaa\xd0\x3d\xdc\x47\xaa\x56\xec\x1b\xe7\xe7\x50\xad\x38\x76\xdc\xe9\x40\xf9\x4a\x03\x7e\x2c\x3c\x1c\xb7\xd2\x18\x54\x85\xf9\xfe\xde\x08\xaa\x3b\x07\xbc\xa2\x9c\x27\x88\xcf\x78\x0e\x46\x9a\x38\x29\xd4\x09\x10\x91\x01\xbd\x15\xea\xc8\x74\xc1\x2a\x20\xf2\x3c\xe6\x9a\x34\xdf\x1f\xd0\x4e\x34\xcc\x7f\x0b\x1a\x4a\x36\x89\x46\x5a\x66\x82\xd9\x26\x52\x8a\x9c\x62\x6a\x7b\x6f\xd4\x91\x71\xe9\x70\x2a\xfb\x51\xb6\xfe\x25\x1a\x6a\x7c\xb8\x1c\x2b\x1e\x1c\x02\x53\x06\xd6\xe7\x46\x6d\x95\x31\x67\x54\xa9\x83\x0f\xf1\xf5\x02\x97\x70\xa7\xed\xb5\xe5\x19\x12\x8f\x7e\xbd\xde\x98\xad\x65\x3e\x42\xa7\x5e\xf8\xa5\x51\xb2\x49\xcb\xaa\x50\xcc\x9e\xf6\x3b\x85\x8f\xfe\x75\x03\xa8\x07\xd4\x1e\x05\xf9\x6f\xe2\xed\x4f\xfe\xd3\xbc\x6b\xcc\x92\x72\x2f\x05\x77\x73\x23\x48\x07\xf9\x75\x43\x48\x9a\xb5\xe6\x3b\x19\x30\xca\xed\xc8\x39\x70\x89\x23\x43\x26\x80\x4b\x4c\xa5\xb0\x39\x14\x27\xad\x49\x14\x5d\xfb\xd2\x8a\x6d\xc7\x0b\xcb\x01\x3d\xae\xa9\x37\xae\x00\xa2\x7b\x6e\xb6\xdb\x53\xe8\x41\xc6\x0d\x8e\x31\x1e\x08\xd6\xb6\xe8\x02\x6e\x8e\xdf\x8c\x20\x9a\x35\x66\xec\xa0\x12\x5c\x9c\x8d\x11\x0c\xf6\x42\xd7\x00\x8e\x73\xb1\xf5\x79\xac\xda\x30\xbb\xc8\x3a\xea\x33\x32\x4d\x2b\x1b\x8f\x47\xf7\xc3\x07\xb7\xbf\x10\xd2\xb8\x2c\xe1\xf3\xcb\xab\xdb\x10\xad\x91\x60\x6f\x4f\xa2\x8d\x88\xee\xc1\x61\x82\x57\x9e\x13\xe2\x25\x86\xd3\xb9\xf4\x72\x8e\x85\xb2\xd0\x83\x9d\x53\xb8\x70\x2a\x2f\x2a\x67\x71\xa2\xb3\x94\xef\x20\xc8\x2b\x31\xf7\xca\x07\x88\x5d\xd2\xa2\x39\x0a\xf6\xf9\x8b\x87\xcf\xb4\x99\x95\x99\xff\xdd\xd8\xb1\xf4\x60\x5a\x3f\x98\xcd\xf3\x80\x69\xb1\xe5\xb2\x48\xa2\xb9\xdc\x0a\x2e\x43\x54\x1e\x05\xb9\xcd\x20\xc7\x4a\x10\x07\xfc\x6a\x25\xa2\xc2\x93\xc8\x82\xf1\xee\x46\x6a\xdf\x1e\x1c\xd7\x77\xb7\xf3\x7a\xbb\xfe\x13\xe0\x7e\x31\x46\x9f\xab\x07\x3a\x86\xed\xd5\x78\x60\xf0\x06\xe4\x3f\xe9\xca\xb5\x8f\x41\xf8\x97\x5d\x53\x6c\x29\x8a\x47\x01\x1c\x29\x94\xd4\xdd\x66\xe3\x1f\x2d\x01\x73\x9c\xa2\x7b\xbb\x16\x7e\x80\x04\xc3\x0d\x16\x82\xc9\x1c\x99\x9b\xac\xb1\xb2\xbd\xa0\x34\x73\xf0\xf6\xbc\x20\xbf\xd5\x0b\xb8\xa6\xcd\xeb\x31\x7f\x10\xf1\x5c\x56\xa9\xf2\xc8\x66\xf4\x1b\x8e\x79\x71\xc3\xa7\x39\x6d\xec\x18\x0f\xf2\xe5\x9f\x03\x3d\x90\x27\x06\x76\x89\xd4\x3d\x62\x8b\xd8\xe9\xe7\x7c\x55\x59\x9d\xd7\xd0\xba\x1f\x00\xc9\x12\xda\x8a\x97\x91\xd6\x69\x05\x4f\xe1\x16\xa5\x23\x02\x43\x96\x50\x07\x80\x25\xbf\x64\xc3\xd3\xd9\x56\xc6\x5c\x5a\x86\x8c\x55\x99\x22\xf3\x73\x57\x1e\x02\xf1\x02\xda\x6c\xbe\xaf\x97\xd5\xe9\xfc\x6a\x2c\xd0\x8b\x74\xb0\x87\x00\x8c\x8c\x67\x9d\x5d\xf5\x42\xea\x12\x4c\x0a\x2b\x15\x07\x8e\xe7\xb5\x28\xe0\x36\x8f\xcb\x14\x09\x1f\xc0\x63\x0e\x1c\x83\x3c\x4d\x59\x52\xe8\xb9\x74\x94\x88\x98\x6c\x00\x27\xac\x75\xa9\x5b\x95\x71\xe9\xb4\xca\xe1\x63\x2e\xc1\x0e\x4b\xa2\xa4\x68\x40\xb8\x77\xa1\xbc\x52\x96\x09\x8e\xf9\xc9\x38\x6d\x73\x19\xbe\xb9\xea\x93\x40\xc9\xbc\x3c\x4d\x78\x8f\x0a\xfc\x53\x2c\xdd\x99\xa9\xe2\x20\xdc\x02\xf6\xce\x3c\xb8\xac\x72\x32\xb6\x96\x38\x51\x08\x69\x69\x5e\x35\x85\xb6\x3e\x72\xff\x6e\x85\x3c\x85\xa8\x4c\x79\x8e\x09\x1a\xab\x32\x65\xc9\x2a\x10\x81\x86\x39\x40\x42\x3c\x33\x5d\x91\x82\xbb\xda\x7a\xc9\x35\xdf\x8a\x80\x8b\x83\xdc\x3b\x69\x80\xa1\x40\x96\x7f\x0c\xce\x9b\xb2\x5e\x4e\xd9\x5b\x4f\xf9\x89\x33\x0c\x7b\x22\x20\xd2\x4d\x34\x1e\x7f\xae\xbd\x41\x1a\x39\xf4\xce\x34\x51\x49\xb3\x23\xdd\xae\xeb\x98\x41\x10\xe4\x18\x07\xd0\xb0\x72\x2c\xfd\xa8\xe1\x56\x1a\x09\xf3\xd3\x1a\x6c\xc3\x6d\x88\x8e\x06\xda\x5b\x61\x64\x23\x43\x12\xe2\x03\x1a\xea\x48\x9e\x5b\x1a\xbb\xed\xd1\x9c\x86\x79\x1c\xd9\xd4\x40\xc1\x6d\x7c\x43\x83\x95\x13\xc2\x71\x86\x8c\xec\x9a\x17\x63\xb1\x39\x2e\x19\x67\x7c\x43\x5b\x71\x50\x43\x9a\x09\xa7\xc7\xc8\x76\x3a\xa1\xfd\x03\x1a\xea\xe4\xfc\xbd\xc6\x0b\x1c\x15\x82\x47\x9b\x6a\x5e\xbc\x65\xaf\x75\x3d\x80\xbc\x28\xd8\x8f\xe3\x53\xfa\x67\x7e\xcd\x81\x88\x1d\x33\xcd\x9f\xb2\x2b\x29\x10\x39\xa7\x56\xc1\xa5\x42\x0d\x20\xb5\x3b\x10\x10\x71\xa7\xdc\xd2\x34\x4c\xde\x5b\xba\x20\xb3\xe5\x26\x8c\xfb\xd2\xe1\xd4\xc3\x65\x83\xa7\x48\x87\x2d\xd9\x26\xb7\x73\x84\x79\x39\x2c\xe9\xbe\xfd\xcd\x1f\x00\x50\xc7\x9f\x00\x6d\xfd\x18\x3e\x2d\xbd\x48\x72\xf7\x8a\xb3\xf0\xf1\xea\xba\x61\x08\x27\xdd\x37\xbe\x1f\x37\x55\x14\xe2\x08\x71\xba\xbb\xcb\xb7\xe7\xef\x2e\x2e\xab\x8a\x72\x7f\xb9\x3b\xbf\xab\xfe\xe5\xfa\xee\xf2\xf2\xe2\xf2\x4f\xe1\x9f\x6e\xee\xce\xce\xce\xcf\xdf\x56\xbf\xf7\x6e\x76\xf1\xbe\xf6\x3d\xf3\xa7\xea\x97\x66\x6f\xae\xae\x6b\x1a\x76\x56\x80\x2e\xf8\xd3\xed\xc5\x87\xf3\xb7\x8b\xab\xbb\x8a\x0c\xde\xdb\x7f\xbd\x9c\x7d\xb8\x38\x5b\xb4\xb4\xe7\xfa\xfc\xec\xea\x97\xf3\xeb\x3d\x2a\x76\xbe\xbf\xad\x43\xfa\x14\xf0\xb1\x83\x35\x0d\x67\x6c\x95\x27\x42\xc6\xe9\x0e\xb1\xf7\xf6\x65\x5b\x03\xd3\x86\x77\x6f\xb2\x15\xaa\x3c\x06\x42\x7f\xbb\x11\x4c\x3d\x88\x1c\x98\x8d\xb0\x34\xa2\x41\xf0\x59\xd4\xf5\x5a\x73\x51\xe4\xcd\xa8\x40\x6f\xa6\x50\x91\xef\x5c\x2e\x5a\x5f\x73\x3c\x2b\x1e\x55\xc2\x32\x91\xf7\xb5\x05\x2c\xa3\xbc\xcc\x8a\x64\xd9\x9d\x14\x31\x3a\x99\x78\xe8\xdb\x1b\x39\x5c\xdb\x09\xaf\x2e\xdb\x0f\xc6\x4a\x6e\xc0\x31\xc0\x63\x28\xe1\x50\xa9\x4e\xf7\x6b\x0b\xd6\xcc\xca\x65\x9a\x44\x2c\x89\xeb\xfe\x14\xca\xf1\x07\x97\x71\x9d\xea\x39\x13\x39\x98\xaa\xe6\x05\x90\xe5\xe2\x84\x97\xc5\x06\x69\x09\x29\x15\x81\x84\x39\xe6\x52\x8b\x28\x17\x18\x0b\x10\x1a\x9c\xb4\xa8\xd1\x18\xd4\x04\x8d\x21\x56\x8e\x18\x08\xc0\xa6\x81\xec\x46\x47\x8c\x00\x7f\x89\xa5\x8f\x70\x92\xe2\xf7\x7b\x87\x86\x5a\x9c\xe8\xba\x40\x3f\xdc\xf0\xf8\xa1\x55\x7a\x34\xfd\x36\x27\xb5\x53\x3a\xc4\x49\xb6\xb9\x1b\xed\xdd\xd8\xb7\xc6\xc2\x85\x52\x4d\x66\xa0\xd2\xe9\xa3\xb3\x5c\xc0\x25\x42\x50\x00\xeb\xbf\x00\xe8\x0a\xe5\x7a\x40\x8a\x87\x79\xaa\x2d\xc5\x86\xa7\x2b\xb4\x38\xcc\xd4\xb4\x33\x25\x60\xf9\xb7\xea\x5e\xc8\x6b\x9c\xb0\xaf\x72\x1c\x4a\x7c\xf9\x78\x9e\x16\xe7\x11\xf2\x2e\x4c\xd3\x46\xbb\xaa\x6c\xae\x1b\x18\x53\x05\xbe\x13\x82\x8f\x31\xa5\xc3\xb3\xb0\xdb\x34\xb9\xd5\x2a\xf9\xcd\x14\x38\x97\xa2\x95\x87\x1a\xf0\x42\x96\x31\xcf\x9d\xcb\x80\x8d\x42\xda\xb1\x7b\x21\x41\x23\x12\x25\xe4\xf7\xae\xd9\x71\xfe\xf3\xe6\x5c\xf4\x38\xf4\xc1\xe7\x97\x54\xa4\x33\xc3\x28\x8f\x1d\xa7\x02\x73\x6c\x1c\xaf\x00\xac\x9b\xb3\xf7\x17\xe7\x97\xb7\x8b\xb3\xeb\xf3\xb7\xe7\x97\xb7\x17\xb3\xf7\x37\x43\xb7\xdf\x53\xe4\x45\xd5\x76\x5f\x3d\x3d\xc8\x9d\x10\xa7\xb4\xf3\x7c\x7a\xae\xeb\x94\xdf\x76\x30\x25\xfb\x5b\x9f\xc4\xd9\x22\x4e\x74\x64\xae\xbf\xdd\x42\xc8\x18\x08\xfc\x0f\x5a\xaa\xed\x45\xd5\x7b\xe1\xbe\xc1\xdc\x37\xec\x09\x82\xb7\xdd\x83\x5d\xd1\xee\x73\x40\xdd\x81\x1b\x32\x17\x66\xf3\xc7\x15\xde\x84\xe9\x7e\xd5\x26\x53\xdc\x71\x7d\xab\x16\x51\xef\x13\xb6\x37\xd1\xba\x04\x7a\x06\xfb\x35\x80\x1c\x76\x8c\x0a\xb1\xaa\x86\x2a\x02\x49\xa0\x80\xcd\x12\x3d\x97\x5b\x2e\x63\x5e\xa8\x7c\xd7\xd1\xc5\x61\x87\x67\xb8\x6d\xaa\x47\x68\x78\x65\x4b\x21\x62\x3b\x0b\xf8\x55\x2e\xeb\x4b\x09\xb5\x06\x6e\xaf\x7e\x3e\xbf\xbc\x59\x9c\x5f\xfe\xb2\xf8\x78\x7d\xfe\xee\xe2\xaf\x0e\x09\x99\x71\xdd\xa6\x78\x9b\xe5\xc2\x9c\x2e\x96\xba\xa9\xf5\x7c\x41\x19\x5a\x5b\x0e\x49\x0f\x26\xab\xb9\xb4\x27\x4b\xee\x8b\xdf\xe4\xaa\x5c\x6f\xda\x0b\xaa\xb7\xf2\xe3\xec\xf6\xa7\x83\x9a\x09\xc4\x7a\xa8\x55\x89\xbb\xad\x89\x08\x4d\x56\x74\xee\x21\x8c\xb4\xd6\x3c\xa0\x87\x84\xaf\xb6\x45\x19\x3a\x4e\xb4\x83\x5e\x2f\xcd\x43\xab\xd7\xf8\x6f\xf9\x7a\xd7\x02\xba\x0d\xce\xcd\xca\x35\x02\x08\x65\x94\x3c\x6e\x94\xf6\xba\xe5\x6f\x95\x1b\xec\x87\x93\x54\xac\xd7\x22\xc6\xe5\x55\x2f\x98\x7c\x70\x74\x04\x46\xfe\x5e\x6f\x1b\x45\x12\x25\x3d\xe2\x62\x76\x78\xaf\xe1\x07\xf8\x47\xf7\x93\xf6\xb3\xe2\x8c\xc8\x71\x20\xbe\x59\x70\xd9\x11\x48\x7e\x68\x22\x34\x07\x1d\x45\x57\x39\x73\xc9\x4f\xe4\x30\xb1\x21\x03\xbf\x0f\xba\x00\x2f\xc7\xe3\x42\x5d\x3b\xae\x45\x96\xf2\x48\xb8\x1c\x06\x64\x35\x85\x77\xfd\x21\x01\x3c\x92\x7e\x95\xe4\x6f\x09\x24\x61\xbd\xda\x55\xdb\x12\x00\xcf\xed\xb5\x3d\x8f\x9f\xdf\xb5\xd2\xfb\x70\x23\x2e\x43\x70\x34\xa3\xf6\x1e\x41\xdf\xd1\x17\x05\x82\x96\x9d\xb0\xe4\x51\xcb\xa1\x56\xf3\x2f\x34\xf1\xf8\x66\xae\x3a\xba\xb9\x65\x0b\x75\xcb\xc3\x99\x8e\x7d\xfe\xc2\xa2\xc8\x7b\x09\x86\x9f\x22\x1c\xf1\x31\x57\xdb\x44\x8b\x59\x51\xe4\xc9\xb2\x0c\x15\x56\x47\x02\xe6\x2a\x8f\x13\xdf\xe1\x2c\x57\x71\x19\x59\x4a\x20\xe8\xad\x87\xfd\x90\x97\xcf\x5a\x1d\x31\x3b\x31\xab\x8f\x5e\x6e\x22\x3e\x01\x40\x3f\x72\x56\xb5\xc5\xd8\xec\xc1\xd8\xe1\xfb\xfb\x68\xaf\xf2\x63\x96\x64\xcb\xa2\xe8\x1e\x4c\xbb\x06\x86\x25\xd6\x32\xfb\x75\xb0\x80\x3b\x50\x53\xb4\x5c\x96\x1c\x03\xe8\x55\x1b\xa5\x8b\x01\xc4\x5d\x35\xe3\xc0\x5d\xc3\xb0\x31\xd5\x8c\x19\xb4\x1b\x36\x5c\xa3\x39\x5f\x44\x9b\x6a\xc3\xa1\x37\x55\x26\xd4\x7a\x73\x9d\x79\x7c\x9c\xdb\x64\x50\x18\x6d\x82\x8e\x86\x84\x1c\xdb\x15\x55\x4b\x27\xd1\x3b\xce\xdb\x1d\x5a\x8c\xee\x45\x87\x97\x01\x9c\xa3\x29\x2f\x65\xb4\x61\x59\xca\x31\x99\x7c\xc3\x35\x2e\x69\x8b\x25\xe1\xcb\x24\x4d\x0a\x60\xe9\xc1\x10\x67\x6d\x84\xcd\x33\x8f\xe7\xf7\x96\xec\x9c\x7b\x4a\xa6\xbe\x45\x7f\x24\x66\xd7\xf5\xea\x8b\xa2\x76\xfd\x96\x0d\x8f\xa1\x61\xcb\x92\x10\xbb\x7e\x3a\xcc\x41\x0c\xcb\xd2\xf7\x65\xdc\xcc\x52\x89\x1f\xeb\x3f\xaf\x8c\x37\x90\x30\x3c\x85\xbf\x36\xd1\x0b\xbd\x93\xd1\x02\x69\x1d\xbe\xc4\x66\x60\x17\x0e\xbf\x6b\x1f\x80\xc8\x7e\x0e\x8f\x5a\xd3\x18\xcb\x31\xa1\x72\xc6\xc3\x7f\xc7\x18\xf0\xcf\x4b\x59\x24\xdb\x56\x42\x9b\xe6\x40\xb5\x98\x79\xe3\xc7\x88\xe4\x4e\x46\x5c\xd3\x75\x31\x94\xd6\x23\x68\x95\x2a\xde\x21\xc8\x6f\xcb\x46\x6d\x93\xae\xb2\x63\x55\x2e\xbb\xd8\xf4\xb1\x55\xfd\xa5\xf7\x45\x8d\xec\x9c\x3e\x95\x57\x39\xbc\x29\x78\x21\xcc\x0c\x1e\x36\xa0\xe6\xd7\x27\xf0\xf3\xf6\xc2\x29\x15\x73\x70\x9f\x1b\x3b\xd2\x2b\x6c\x39\xeb\x16\x40\x97\x2d\xdb\xb0\x6e\xc6\x1c\x03\x9e\x3f\x72\xbe\x12\xb9\x67\x29\xed\x17\xed\xf9\xe3\x0f\x43\xb6\xd4\x5f\x4a\x6e\x2e\x8e\xab\xd5\x0d\x92\x0a\x1d\xd3\xe9\x22\x69\x6e\xab\xf6\x73\xba\x5e\xeb\x6d\x35\x0e\x19\x2e\xfc\xc1\x29\xdb\x6d\xbd\xb9\x31\xbf\x1e\x7e\x5c\x5f\x54\xfc\x8d\x59\x9e\x28\x20\xd7\x51\x2b\xa4\xaa\xec\xe6\x5a\x6e\xad\xf7\x88\x91\xfc\x5c\x8a\x52\x98\x05\xb4\x2c\xe3\x75\x33\x1c\x30\xe2\x49\xe1\xbb\xb4\x51\x8f\x6c\x5b\x46\x1b\x66\x0b\x67\xb1\x48\xf9\xae\xd2\x35\x38\xca\x0b\x05\xc4\xa7\xa3\x38\xc6\x02\xba\xea\xa8\xd4\x85\xda\x02\x12\xdb\x97\x9b\x97\x12\x76\x39\xe3\x76\x77\xb5\x5d\x84\x15\x1a\xbe\x03\x63\xc0\x37\x1f\xcf\xcf\x2e\xde\x5d\xd4\x02\xb0\xb3\x9b\x9f\xc3\x7f\xff\x7a\x75\xfd\xf3\xbb\xf7\x57\xbf\x86\x7f\x7b\x3f\xbb\xbb\x3c\xfb\x69\xf1\xf1\xfd\xec\xb2\x12\xa6\x9d\xdd\xce\x6e\xce\x6f\xf7\x44\x62\x9b\xb5\x76\x4f\x04\x0f\x58\x02\x2d\x36\xdc\x4a\x60\x58\x87\x0c\xd5\xfa\x9a\xcd\x2c\x67\x62\x85\xd5\xd3\x46\xd3\x01\x7e\x93\x22\x8a\x10\x83\xee\x6f\x79\xc1\xcf\x78\xc1\x53\xb5\x9e\xb2\x19\x23\xe4\x3c\x66\x44\x68\x63\x4a\x12\xa1\x9c\x99\x1d\x2c\xc2\xd8\x93\x91\x77\x76\x78\x8d\x5f\xb5\x22\x2a\xc7\x54\x84\x6a\x30\x36\xfd\x6f\x2e\xcf\x1f\x84\x2c\x4a\x60\xeb\xe5\x69\xca\xa8\x5a\xfb\x85\x80\xda\xc0\xb6\x52\x27\xdb\x24\xe5\xb9\x97\x63\xbd\xa2\xb2\xe0\x39\x67\xdb\xea\x98\xac\x9a\x79\xf3\xf6\xc5\x7b\x77\xc1\xa0\xdd\x67\xef\x2f\xc0\x40\x8e\x0a\xab\x35\x66\x2b\x9f\x4b\xa4\x0a\xa4\x1a\xb7\x1c\xb2\x74\x0a\x45\x2e\x68\xac\x9e\xbe\xdc\xbd\x10\x8f\xe2\x4c\xb7\xc1\x9a\xe7\x7a\x7a\xbb\x46\xda\xff\x38\x97\x45\xbe\x1b\x6c\xf5\xde\x42\x5a\xba\x86\x97\x0b\x81\xfe\xaa\x12\xad\xe8\x21\x64\xb6\xf4\x4b\x30\x85\x2d\x22\x95\x02\x58\x2e\x4e\x85\x00\xa0\x8e\xd7\x59\x6a\x6e\xde\x6f\x75\x1c\x42\xe6\x20\x18\x85\xa5\x2a\x65\xac\x09\x9e\xb8\x4d\xe4\xe9\x96\xff\xf6\xd2\xf6\x14\x99\x38\x9c\x50\x12\xb0\xac\x89\xd4\xbc\x53\x77\xe6\x90\xeb\x1f\xae\xb9\xec\x19\xaf\xfd\x6f\x09\x7b\xb2\xc2\xa3\xd8\x7b\x30\x10\x68\xf9\x20\x76\x6d\xf3\xd7\x10\xbb\x63\x21\x63\x3b\x14\x92\xe5\xc2\x7c\xd1\xa1\x38\x53\x04\xe7\xba\x7f\x43\xb6\x46\x45\x90\xb7\xfd\xec\x0e\x81\x11\x47\x6d\x9b\x56\x48\xc6\x70\xc3\x67\xb0\x5a\x21\xd5\x64\xe6\x0c\x01\x1a\x36\x36\x40\xd9\x29\x14\x79\x36\x93\xf5\x1f\x6a\xc9\x56\x90\xaa\x85\x19\x89\x2c\x17\x10\x0b\x82\xa9\xb0\xf2\x1a\xc0\xc5\xd5\x40\x7d\xd8\x25\x90\x0a\x0d\x11\x12\x78\x09\x89\xcf\x25\x05\xb9\x5f\x7d\x3f\xee\x9e\x2d\x90\xa3\x1d\x49\x79\xeb\xec\xe5\xee\x2e\x87\x76\x95\x32\x69\x23\xe8\xbb\xc6\x17\xd7\x53\xbc\x37\x87\x07\x80\x6b\x95\xd2\x3f\xf7\x66\x53\xd9\xd8\x45\xcb\x2b\x31\xf4\xba\x1e\xcd\xb7\xfa\x4b\x8d\x66\x95\xaa\x03\xec\x3e\x95\x1e\x5e\x68\x4b\x1e\xdd\x3f\xf2\x3c\x46\x07\x37\x00\x76\xa6\xec\x27\xf5\x28\x1e\x44\x3e\x61\x91\xc8\x0b\x4e\x1c\x67\x1a\x10\x0b\xb0\xa1\xa8\x9c\xb9\x84\x54\x16\x24\x8c\x93\xba\xcc\x05\x2b\x92\xf5\xa6\x10\x79\x88\x37\x51\xb9\x39\x8e\x0a\xa4\xb7\xcc\x44\x44\xac\x52\x1d\x03\xb0\x4a\xf9\x43\x93\xb4\xed\x10\x3a\x8c\x96\xf7\xbc\x95\x2c\xea\x43\x08\xd1\x80\xd1\xa1\x89\x3c\x40\x13\xb6\x56\x29\x97\xeb\xe9\x74\x0a\xf4\xfc\x2f\xbb\x98\x99\xc0\x1f\xb0\x18\x9f\x80\x52\xf3\x9b\x3c\x7d\xff\xac\xb9\x81\x2d\x1c\xb5\x4f\x69\x3c\xc2\x08\xb7\x83\xd1\xa7\x4a\x69\x91\xee\x1c\x91\x93\x4b\x74\x02\x64\xed\x6f\x85\x90\x3a\x41\x7f\x5e\xcb\xee\xbd\xa9\x47\x7f\xbe\x6c\xb0\xac\xdd\xbb\x30\x3a\x8d\xb6\xa3\x1c\x10\x70\x1c\x51\x12\x7e\xbf\xfd\xe1\x78\x50\x5a\x78\x7b\x59\x52\xc9\xb1\xb9\xce\xbf\xa8\xa4\x03\xab\x71\x10\xbf\x62\x6b\x49\x44\x46\x73\x50\x7e\x68\xfb\x98\x35\x52\x76\x8f\xc8\xd6\xed\x49\xbc\x1d\x99\x73\x3b\xc4\x8f\x71\x53\x9f\xee\xd1\xdb\x62\xbf\xa6\x54\x6b\x87\x46\xe6\x34\x7b\xf2\x81\x31\x96\x1f\xa6\x45\xa6\x3b\x78\x30\xba\x0c\x67\x08\x9b\xc4\x41\xd8\xa7\x12\xd5\x82\x5c\x3b\x1f\x16\x73\x24\x61\x41\x14\x4c\x17\x2a\xe7\x6b\xc1\xb6\x22\x4e\xca\x6d\xeb\x61\xe3\x9a\x7b\x0c\xbe\x53\xa5\xe5\xb6\x9b\xae\xf1\x58\xfb\xdf\x37\x12\xff\xeb\x0c\xaa\x1b\x6c\xff\xcf\x5c\xea\x82\x95\xf6\xa3\xf6\x62\x8c\x87\xc6\xda\x5c\xf4\x79\xa2\x81\x58\xf4\x90\xd4\x56\x57\x0c\x16\x0d\x11\xf2\x5d\x86\xb1\x85\xca\xec\x9e\xd8\xd0\x25\xfd\x44\xe3\xac\x42\x58\xbd\xfb\x52\xa8\xa3\x46\xc7\x0b\x7c\xe5\xaa\x6c\x90\x2a\x0d\x42\x32\x80\xd5\x1b\xd0\xfd\x13\xac\x0d\x0a\x24\xec\x4d\xa1\xd8\xca\x26\x4b\xde\x8b\x80\x7e\x2e\x06\x21\x80\x47\xe4\x32\xfa\xf9\x47\x6d\x51\x3a\x04\xa4\xf2\x06\x57\xe1\x2b\xc1\xc0\xd7\xc3\x2b\x8b\x9f\xc3\x1e\x62\x11\x40\x12\x17\x73\x59\xb4\x16\xe0\xe1\xa5\x50\x16\xfe\xe4\x17\x5e\xa6\xed\x5f\xa7\xf2\xe1\xab\x28\x14\x39\xfb\xf5\x86\xe1\x50\x13\x65\x7c\xde\xd7\xd0\xa0\x90\xfd\x08\x3e\x18\xae\xc5\x01\x86\x6c\x65\x1e\x70\xd0\xad\x66\x80\x19\x76\x51\x44\x1b\x6f\x79\x00\x49\x9e\x23\xf7\x23\x15\x60\xea\xe7\xd6\x93\xe0\x23\x38\x3a\x44\x99\x26\x6b\xa9\x42\xfd\x16\x25\x05\x44\x20\xcd\x01\xa4\xc2\x62\x59\x52\xec\x87\xf2\x8d\x64\x86\xdb\xb7\xd4\x0a\x85\x10\x2d\xea\x67\x25\x90\x0c\x2f\xa2\x04\xf9\xa4\x2c\x0e\x1a\x9f\x74\x24\x2a\x5b\x27\x47\xaf\x32\x74\xcc\x65\xb5\xaa\xc6\x20\x59\xac\x5d\x92\x0b\xe4\x34\xd6\xc6\x7a\x2b\x92\x07\xb3\x51\x9b\xcb\xda\x2d\x50\x38\x01\x9a\x6b\x6f\x2e\xb1\xd9\x01\x31\xf2\xbd\xd8\xe9\x50\xc1\x96\x56\x14\xeb\x5a\x90\x89\xe9\x0f\xcd\xd7\xfe\xa9\x80\x81\x5b\xe4\x5e\x87\x6e\xd8\x5d\x86\x95\x7e\x30\x3f\xee\x01\xf1\x36\x0a\x37\x6b\xd0\x67\xa3\x7a\x97\x28\x1d\x13\x7e\x9c\x69\x0e\x3d\x4e\x0f\x50\x98\x21\xce\x32\x4c\x2d\x82\x77\xbb\x79\x9e\xcf\x25\x71\xa7\x07\x97\x9c\x39\x70\x9a\xd3\x46\x29\xf2\xc8\xd8\xbc\xab\xd0\xfb\x00\xbd\xa5\xa5\xfa\xac\x56\x69\x83\xea\x56\x00\x7d\x2e\xa1\x6a\x4c\x22\xb6\x2e\xc8\xd6\x0a\x0f\x04\x7f\xd2\xe4\x76\x02\x3e\x83\x4c\x3d\xfc\x26\x31\x3c\xa2\x14\x32\x3e\x6e\x22\x61\x86\x6f\x26\x5b\xb1\x96\x16\x69\x79\x73\x7e\x76\x7d\x7e\xfb\xc5\x00\xa1\x16\x8d\x39\x1a\x11\x6a\xdb\xf9\xf6\xfc\xdd\xec\xee\xfd\xed\xe2\xed\xc5\xf5\x73\x40\x42\xe9\xa3\x03\x30\xa1\x37\x24\xc9\x70\xa6\x64\x21\x7e\x3b\xea\x4e\xce\x4b\xb9\xe0\x23\x72\x93\x9c\x28\x4b\x9f\xb9\x83\x85\x36\x25\x25\x9c\xde\x03\xf1\x8b\xe2\x8d\xe6\x14\x24\x56\xde\xe7\xb9\x4a\xd2\x14\x52\xb5\x5d\x74\x80\xd2\x00\xcd\xa0\xc2\xf9\x63\x29\x55\xe9\x4c\x9d\xcb\x65\x45\xf1\x03\x3c\x96\x1b\xf3\x08\xc6\x24\xed\xcc\x0c\x40\x9e\x40\x0a\x6c\x9f\xea\xc4\x3a\x91\xc2\x37\x03\x66\xcd\xb4\xaf\x93\x2a\x9c\x26\xf1\x39\xa1\x6f\x64\x78\x0d\xb5\x35\xed\x8a\xab\xac\x4f\x6b\x7e\xda\x0f\x5d\x0f\x71\x13\x03\x74\x22\xc6\xe0\x85\xdb\xcd\x37\xed\x4b\xf7\xd4\x6f\x01\x18\x77\x33\x93\x1c\x42\x28\xba\xe0\x79\xe1\x27\x92\x26\x02\xd5\xa8\x7c\x6c\xe5\x3e\x41\x88\x98\x5a\xd5\xc6\xd9\x1c\x85\x66\xac\x13\x08\xb4\x70\x62\x9f\x89\xd2\x52\x17\x22\x27\xaf\xcf\xec\xd7\x9b\xb9\x7c\x63\xae\xaf\x97\x74\x0b\x91\x62\x11\x56\x81\x00\x25\x55\xa9\xdf\x5a\x28\xe1\x09\xf6\x1d\xba\xd8\xb7\x82\x4b\xcd\x60\x6b\xa4\xa9\xc8\xfd\xca\xc0\xf6\x08\x11\x93\x72\x2f\xd0\xed\xfa\xdf\xbf\x64\x84\x3e\x35\x43\x61\xda\x4b\x9f\xe6\x62\xab\x8a\xe6\x7a\xea\x62\x02\x00\x48\xf8\x73\xae\x9c\x96\xcc\xa4\xa1\xab\x88\xd0\xf4\xad\x8b\xa8\x9a\x27\x34\x68\x2d\xdd\x62\x71\xbf\x2f\xa5\x27\x5c\x4a\x03\xee\xf5\xf0\x96\x60\x1b\x65\x0e\x50\x27\xe7\xe3\xa3\xe4\x8e\x89\x24\x05\x70\x9f\x19\xc6\xd6\x5b\xa7\x26\x69\x79\x0c\x74\x05\x8a\x3a\x0e\x42\x3d\x6b\xa1\x3c\xf2\xda\x69\x36\x34\xd5\xab\x96\xf9\x3c\xd4\x82\x33\x0b\x26\x95\xaa\xb0\x24\x21\x0e\xbf\x49\x60\x54\xf3\x05\xc7\x4e\xd3\xdb\x46\x62\x7c\xb1\x56\xca\xe2\x48\xc5\xb9\xdb\x10\xf4\x5a\x49\x9b\xc6\x56\x84\x84\x0b\x96\x64\xc1\x91\xb4\x8c\x59\x7c\x87\x6b\x9a\x56\xd7\x9c\x23\xfc\x3c\x08\xab\x71\x79\x75\x79\x1e\x22\x2d\x2e\x2e\x6f\xcf\xff\x74\x7e\x5d\x49\xb8\x7f\x7f\x35\xab\x24\xcd\xdf\xdc\x5e\xd7\x72\xe5\xdf\x5c\x5d\xbd\x3f\x6f\x40\x36\xce\x6f\x2f\x3e\x54\x0a\x7f\x7b\x77\x3d\xbb\xbd\xb8\xaa\x7c\xef\xcd\xc5\xe5\xec\xfa\x5f\xc3\xbf\x9c\x5f\x5f\x5f\x5d\xd7\xea\xbb\x3b\xeb\x07\x7f\x54\xba\xd1\xee\xfe\xf1\xb1\xe5\x80\xfb\xb4\x75\x1b\x57\x35\x5f\x8f\xd8\xc5\x03\x81\x73\xfb\x96\xa3\xcd\xa7\x8f\x43\x49\x04\xdc\x18\xa6\xa9\xa3\x56\xdd\xd3\x8b\xd4\x56\x86\x2e\xe3\xc7\x1d\x7b\xe6\x56\x5b\x3c\x05\x90\xb1\xd7\x00\x74\xb5\xd4\x1c\xb7\xa4\x09\x8d\x43\x9b\x41\x80\x6a\xcd\x3b\x25\x9a\x64\xfc\xec\x2d\xb5\x75\xec\x6b\xa7\xe7\xda\xda\x43\x59\xf4\x54\x74\x25\x7d\x8d\x0e\x2a\xb3\x6c\x00\x49\x6c\x0d\x05\xfb\x61\x70\x71\x43\x37\xcc\xca\x09\x96\x63\x97\x9a\x68\x7b\x5e\x51\x3f\x3d\xde\xd8\xf6\x53\x25\xcd\xb6\xd7\xb8\x54\x46\xb4\x1b\x38\xad\xc6\xb4\xfb\x96\xeb\xfb\xb1\xed\xa6\x4a\x9a\xed\x06\xb3\xef\xa0\x76\x83\xc3\xbb\x68\xe7\xb9\x19\x71\x88\x85\xc5\x54\x9b\xe7\x92\xf0\xdd\x57\x02\xd1\xde\x61\x6d\x34\x1b\xe0\x79\x9f\x97\x19\x1f\x1e\xc8\x80\xd6\xb8\xed\xca\x6b\xb4\xef\x37\xf0\x29\xf4\x70\x99\x0b\x7e\x1f\xab\x47\x9a\x8f\x3a\xb0\x95\x0d\x3a\xcd\xab\x03\x64\xce\x70\x7b\x45\x14\x39\x45\xa0\x10\x64\xe7\x8b\x07\x94\x5f\x42\xc4\xe5\x68\x83\x05\x6a\xb3\x75\xa6\x20\x48\x18\x90\x7e\x76\xe6\x12\xad\xf9\x36\xc5\x5a\x33\xab\xa6\x45\xc4\xed\x01\x5d\x75\x36\x34\x06\xd7\x75\x30\xb1\x94\xa8\x53\xe6\x80\x05\x5c\xe6\xf0\x66\x82\x01\x49\x24\x38\x93\x73\xf3\xe0\xc9\x45\x94\x68\x11\xa8\x76\xb5\xde\xd8\x9f\x8f\xd3\xf8\x28\x78\xd1\xea\x76\x1d\xec\x0f\xe7\x51\x51\xf2\x94\x7d\x2e\x45\xbe\x23\x8a\x44\xf4\x55\xe2\x5f\x22\x2e\x31\x23\xa8\x10\xdb\x0c\xd2\xee\xc3\x54\x96\xb9\xfc\x15\x13\x35\x60\x0a\x5e\x68\xf6\x27\x40\x6c\xd8\x2f\xd3\x25\xbc\xe5\x05\xdc\xc5\x7f\xc1\x3a\xdc\x67\xd3\xb9\xac\xa8\xe0\x04\xbf\xaa\x08\xe2\x4c\xe7\xd2\xca\x50\xc4\x2a\xd2\x53\x78\xf1\x4d\x55\xbe\x3e\x25\x01\x67\xb3\xd8\xd5\xfd\x52\xa9\xfb\x53\x21\x4f\xc1\x27\x55\x9c\xf2\xb2\x50\xa7\x80\xf6\xc2\xf9\xd7\xa7\x56\xe7\xd5\x0a\xe5\xea\xd3\x4d\xf2\x20\xe0\xff\x4d\x37\xc5\x36\xfd\x07\x9d\x6d\x7e\x3b\x59\xa7\xf9\x89\xf9\xed\x49\xf8\xdb\x13\xfb\xdb\x13\xfb\xdb\x13\xf3\x33\xfc\x7f\xd9\x0e\xc3\x3b\xe2\x37\x6e\xee\xb2\xc9\x5c\x26\x52\x8b\xbc\x00\xeb\xe7\x31\x4f\x0a\x2f\x37\xb4\x63\x2f\xfe\xeb\xbf\xd8\x34\xe7\x8f\x98\xb2\xfa\x96\x17\xfc\x23\xfa\x17\xff\xfb\xbf\x5f\x40\x40\x15\x93\xb7\x32\x9e\x7f\x2e\x45\x31\x97\x5a\x98\x4d\xc8\xfe\xbf\xb9\x84\x08\xec\x76\xb7\x28\xd0\xef\x8a\x3e\xc8\x58\xb3\x7f\xc1\x32\x2f\x90\x2e\x34\xd6\xa6\xa4\x8e\x6c\x88\x84\xa7\x2d\xd2\xe0\x1d\x2e\xfa\xcf\xe9\x5b\xfa\xfe\x88\x6d\xfd\x39\xad\xee\x6a\x2b\x78\xa3\x3f\xa7\x70\x81\xa6\x8a\x5b\xac\x19\x73\x8b\x17\xde\xc9\xd4\xb8\xb6\x3d\xd2\x80\x06\x3c\x6b\x98\xbe\x7d\xaf\xdc\x20\x65\xb9\xf5\xdc\x37\x8e\x11\x88\x15\xf8\x38\x04\x44\xcf\x13\xb3\x43\x6e\xd0\x13\x0a\x96\x1b\xf6\x1c\x6c\x52\x0a\x9d\xbb\xf2\xd0\x71\xa1\xff\xf8\xfa\xf4\x74\xc2\xd6\x1a\xfe\x67\xf9\x19\xfe\x07\xc0\x4f\x4f\xc5\xba\xdb\x18\x4c\x87\x7f\x6a\xce\xf2\xfe\x99\x78\x0a\x10\xe0\x97\x20\x7a\xaf\x2d\xd3\x37\xa5\x8c\x53\xe1\x53\x5d\x2b\x21\x91\x54\x99\x99\xb4\x13\xd5\x94\xd4\x81\x39\x5e\x8a\x88\x9b\x83\xaf\x51\x37\x62\x63\xd5\xaa\x10\x12\xbd\x61\xb9\x57\xdc\xe3\xe8\xb9\x02\xb3\x18\x90\x9c\xbc\x20\xc4\xbc\x80\x3f\x42\x25\xc0\x9c\x3e\xa9\x7f\xc4\x76\xaa\x24\x12\x70\xa0\xb6\x8d\x45\x94\x82\xd2\x82\xa5\xf7\x61\xb9\x28\xca\x5c\x32\xce\x32\x2e\x63\xae\x61\x05\xae\x72\x88\x76\xe6\x8c\x37\x1b\x3a\x41\x34\xb1\x2a\x0b\x20\xad\x42\x64\x41\x38\x12\xc8\xd2\x1e\xb4\x79\x12\x34\x02\xef\x04\x20\x8b\x6e\xfc\x70\x3a\x97\x56\x13\x8e\xa0\x7c\xe8\x29\x8b\x54\xb6\x23\x4a\xa2\xfa\xa0\x27\xd6\x73\x46\xc3\x3d\xf1\x78\x93\xfa\x77\x27\x2c\xa9\x86\xd6\x80\x10\xbe\x08\x54\xad\xad\x2e\xf8\x77\x42\x46\x2a\x16\xb9\x7e\x69\xb6\x61\xe2\xde\x1d\x68\x3f\x24\xda\x4f\x06\x9c\x52\xe6\x72\x23\x6f\xa1\x29\xde\x29\x27\x99\xd1\xa9\x50\x88\x0f\xca\x35\x6c\x5f\x94\xdf\x30\x0a\xa6\xad\xbd\xf4\x9f\x5f\x14\x11\x13\xc2\x52\xed\x9b\xf3\x70\x17\x04\x6e\xd9\xf0\xc4\xc5\x42\xd1\xc6\x21\xe3\xc4\x4a\x08\x27\x05\xa8\x14\xe6\x42\x17\x73\x49\x37\xf0\x84\xad\x04\x37\x76\xde\x84\x45\xfa\x01\x0f\x63\xbc\xee\x8b\x47\xe5\x31\x38\x56\x7f\x06\xb0\xbc\x95\xc2\xbd\x93\x18\xbf\x06\x88\x02\x1e\x15\x08\x30\xe8\x54\x9b\xb7\xa6\x0a\x0c\x56\xeb\x81\x78\xc0\x38\x58\x39\x93\xba\x74\x58\xa8\xa6\x03\x23\xb1\xc3\x40\x31\xab\xb7\x03\x3f\x30\x07\x0f\xf6\x0e\x61\x20\xc1\xe1\x08\x16\x37\x41\x65\x71\x9f\xf9\x18\x6e\xc8\x29\x0f\xbe\x99\xae\x4d\xd5\x33\x10\xd0\x80\xc3\xfc\x16\xe6\xa7\x7b\x1d\x56\x5a\xe4\x56\x6b\x05\xfb\x8a\x0c\x90\x9b\x24\x8f\x4f\x32\x9e\x17\x3b\xbb\x7c\xd3\x64\x09\x12\x0d\x69\x72\x2f\xd8\x2c\xcf\xd5\xe3\x53\x8f\x42\xe7\xd1\xd2\xf5\xc2\x3e\x06\x88\x3f\xf6\x95\xdf\xca\xff\x5a\x77\x77\x1c\xc6\x35\xdb\xe5\xf8\x68\xad\x27\x17\x45\xbe\x5b\x98\x85\xb8\xcd\x3a\x4f\x8a\x41\x39\x1f\xc3\x8d\xdc\x71\x34\xb6\x35\x17\x46\x27\x8d\x6d\x65\x56\xbf\x1d\x1a\xdb\x16\x86\xda\x26\x8d\xed\xc5\xe5\xc5\xed\xc5\xec\xfd\xc5\xff\xad\x95\xf8\xeb\xec\xe2\xf6\xe2\xf2\x4f\x8b\x77\x57\xd7\x8b\xeb\xf3\x9b\xab\xbb\xeb\xb3\xf3\x7e\x5e\xaa\x66\xeb\xbd\x09\x7e\xc2\xc2\x7a\x5e\xb3\xdb\x00\xa8\x81\xb9\x12\x64\x7f\x93\x46\x29\xac\x2a\xb3\x99\x13\xb9\x9e\xc0\x46\x7d\xcd\xce\xf3\xfc\x62\xcb\xd7\xe2\x63\x99\xa6\x00\xa7\xc2\xc4\xa4\xb3\x5c\xc0\xc3\x73\xc2\x3e\xaa\xf8\x22\xf8\x1d\x64\x53\xb6\x76\x03\xea\xe7\x71\x9c\x0b\xad\xb1\xfa\x09\xd5\x1f\x80\x87\x5c\xa6\x26\x81\xe7\xf8\x03\x4f\x52\xf3\x7e\x7b\xcd\xde\xf0\xe8\x5e\xad\x56\x98\xfd\x33\x71\x79\x5f\xec\x73\xa9\x0a\xce\xc4\x6f\x11\x70\xb1\xb5\xaf\x93\xf7\x6a\xfd\x15\xa0\xca\x03\xc2\x53\x1d\x8f\x14\xd0\xa2\x5b\xb4\x5f\xe7\xed\x07\x01\xf5\xf2\x03\xfe\xf4\x1d\xfe\xb2\xdd\x41\x59\xa4\x4f\x90\xdd\xff\x5e\xad\xdb\x95\x81\xc0\xba\x26\x39\x23\x0a\x24\x44\x44\xaa\xa2\xd6\x4c\x27\xf2\x7e\x2e\x7f\xdd\x08\xc9\x54\x99\xe3\x9f\xe0\x99\x6f\xcc\xcc\xb4\xd4\x1b\x01\x52\xc1\x13\xf6\x28\xd8\x96\xef\xd0\x6c\x86\x37\x81\x93\x33\x81\x25\x03\xb7\x88\xf9\x75\x9a\x48\x73\x5a\x64\x89\xcd\x4b\xa8\x4f\xfd\x53\xbc\xb8\x2c\x13\x21\x3f\x9e\x28\xb8\xef\x3e\xad\xe0\xf3\xc0\x55\xe6\x71\x93\x16\x20\x44\x27\x37\xa8\xa5\x2a\x75\x5f\x66\x9e\xb3\xf4\x85\x0d\x4e\xc2\x70\x3f\xa8\x24\x66\x71\x99\xa5\x49\xe4\xce\xdd\x47\x95\x77\x12\x33\x63\x02\xcd\xf0\x5b\xa7\x9e\xd5\xd6\xd7\xb1\x96\xec\x9c\x00\x49\xd7\x43\xd1\xfc\xcc\x24\xd5\x2c\x91\x51\x5a\x82\x0e\x5c\xa9\x45\x7e\x52\xe4\xc9\x7a\x0d\x06\xb8\x4d\x55\xfc\xf6\x59\xac\x3d\x4b\xe6\xf1\x59\x79\x61\xce\x7c\xaa\xd6\x49\xc4\xd3\x10\xdc\xec\x51\x11\x8e\x26\xd7\x65\x6c\xa1\x4a\x2e\xe4\x41\xd8\x06\x75\x32\x5d\x65\xb9\x00\xa6\xe6\x05\x1c\xe5\x0b\x3a\xee\x8e\x69\xf7\x8a\x99\x07\x3a\xb6\x2b\x24\xb1\xb5\xe1\x05\x7b\xc3\xf9\xba\xad\x54\x1a\x98\x98\x28\xa3\xce\xd4\xa3\x14\x39\x58\xb0\x00\xfb\x30\x3d\x95\x0a\x6c\x13\x27\x9f\xe6\xf0\xc9\x56\x3e\x70\xe5\x80\xd8\x98\xf8\xbb\x4e\x1e\x84\xfc\xf2\xac\xe3\x41\x05\x11\x8f\x36\x62\x61\xed\xf2\xa7\x3e\xb2\xdc\x05\x30\xf2\xb0\xb2\x3a\x26\xe1\x51\xea\xc2\x9b\xf0\x74\xc2\x16\x37\xcf\x2e\x0c\x24\xf6\x64\x64\x99\x46\x2c\x62\x11\xdd\x7f\xf1\xa3\xd9\x83\xac\x6c\x43\x18\x67\x6f\x45\x74\xcf\xee\xae\x2f\x30\x99\x39\x29\x98\x39\x0a\xf4\xc6\xeb\x32\x75\xbe\xdd\x0a\xbe\x7e\x06\xe6\xae\xa1\xc2\x52\x5e\x4b\xc0\xc9\xe9\x99\x06\x11\x20\x0a\xf2\x25\xcd\x21\x49\xb9\x34\x00\x04\xe3\x85\x95\x1b\x02\x47\x3c\xd3\x5b\x50\x17\x2a\x8b\x40\x92\x2f\xe5\x4b\x91\x76\x30\x6b\x66\x2a\x5e\xd8\x38\xc9\xb1\x60\x9e\x46\x59\xd6\x8f\x41\x51\x47\x9b\xc7\xc0\x8d\xc5\x7a\x4b\x5f\x64\xf7\x3f\xea\x80\x1d\x44\x85\x04\xdf\xf0\xae\xe7\x1a\xb2\xd3\x57\xc9\xda\x46\xdb\x92\x15\x69\x20\x21\x1f\x01\xa8\xfd\x9b\xf3\xd2\x94\xf4\x51\xc5\x04\xd3\x73\x64\x75\xc6\x0a\x12\xe4\x3d\xf1\xb8\x8a\xb0\x09\x16\x07\x08\xf5\x9a\x1d\x21\x78\xcc\xd4\x8a\xbc\x89\x59\x96\x26\x40\xdd\x1c\x23\x4b\x3c\x90\x7f\xe8\x2a\x3a\x3e\x2c\xcd\x36\x36\xe0\x28\xf9\x68\x81\x78\xbd\xf1\x46\x1f\xe4\x32\xfd\xaa\x3a\xb9\xeb\x36\xd5\xb1\x6a\x7f\x2e\x1f\xe9\xd0\x27\x74\xbf\x37\x6d\x9d\xaa\x25\x0c\x54\x37\x28\xae\xe7\x80\x36\xa7\x53\x9e\xc4\x63\xae\x77\x3b\x26\x57\xee\xa7\x7d\x0d\xbc\xb2\x9e\x0e\x57\x93\x9d\x66\x46\xc4\xfa\x61\x04\xbf\x83\xab\xad\xeb\xad\x0d\x01\x42\xed\x22\x84\xce\x1a\x2f\x48\x56\x02\x76\x85\x3b\x8e\x3b\x9e\xd5\xd5\xbe\x1c\x35\xd1\x4d\x5e\x97\x3d\x63\xe9\xa9\x60\xfa\x27\xf9\x08\x72\x0e\xdc\xb9\x8e\xa1\xa3\xdb\x91\x26\x63\x11\x2f\x0e\xe8\xc3\x39\xfd\x76\x58\x5f\xdc\x48\x63\xf3\xc0\xe5\x25\x4f\xcc\xcd\x18\xf3\x3c\xf6\xfd\x98\xc0\x8b\x38\xe2\x19\x78\x9d\xc1\x8b\xff\xf0\x6a\x6a\xeb\xb8\xf6\xc9\x34\xe6\x78\xc0\x14\x77\x84\x2b\xab\x16\x4d\x96\x7d\xeb\xc8\x2d\x52\x44\x33\x9b\x95\xe3\x97\x6b\x25\xcd\x64\xd0\xda\xad\xaf\x30\x7b\x5e\x1d\xb3\xb8\x9e\xe3\xec\x28\x0b\xe5\x83\x1b\xd0\x9f\x0b\xa0\xc1\x0d\x13\xd8\xe0\x80\xbc\x88\x3b\x80\x11\xd6\xda\xb4\x87\xd0\x08\xb8\xed\x28\xc0\x6f\x96\x0b\x1b\x26\xdb\x89\xc2\xd1\x18\xa4\x56\xe7\x0e\xa2\x40\xae\xd7\x55\x1a\x1a\xcb\xc4\xe0\xa8\xc3\x20\x66\x43\x96\x6d\xa4\xb6\x99\x92\x80\xc2\xc1\xa4\xac\xb9\xa4\xc2\xad\x5a\xb9\x0b\x24\x55\x32\xfb\x26\xe4\xbf\xc3\x3c\x11\xa1\x55\xfa\x40\x11\xc3\x40\x54\x03\x74\x0e\x4d\x03\xcf\xcc\x53\xc8\x3c\xfc\x21\x94\x4d\x17\x19\x00\xdf\x6b\x92\xdd\xb9\x58\x27\xba\x10\x61\x32\x64\xf8\xfb\x27\x53\x57\xad\xf8\x0a\xfa\x86\xbe\x53\x5d\x75\x9f\xd1\x6f\xce\xa7\x11\xed\xd9\x65\x22\xbe\x70\xbf\xeb\x5f\x0c\xb5\x7c\x75\x7f\x1c\x56\xee\x3b\x5c\x03\xf8\xd8\xd1\x48\xcc\xa5\x9d\x1c\x86\x9b\x24\xa2\x4c\xe2\x1e\xbf\x67\xa6\x68\x5d\xf2\x9c\xcb\x42\x08\x3d\x97\x14\x67\x45\x82\xb9\x90\x43\xa5\x86\xfb\x73\xa6\x7c\xa4\x74\x81\x7c\x4d\xf0\x93\x15\x4f\xd2\x32\xef\x7c\x5d\xe3\xaa\x3c\x88\x65\xa1\x6f\x94\xce\xa0\x58\xd6\x36\x69\x2e\x5f\x37\xd8\x45\x8e\x24\xa4\x1e\x25\xad\xa6\xb3\x76\x74\xc1\x5e\x2e\xc3\xe7\xdb\xb9\x56\x3b\x52\x78\x7f\xd4\x8b\x4c\x8d\x38\xf1\x7e\xfe\x51\x7f\x54\x1d\xc9\xcf\xfa\x73\xc3\x05\xd8\x83\x16\xf8\xdc\x25\x10\xc2\xf5\x3d\x04\xda\xf6\x79\x1e\x06\x71\x67\xee\x0d\xc7\x75\x9e\x5d\xb0\x6a\x37\x5c\xc6\xa9\x79\x91\xf3\xa2\x76\x03\x79\x58\xb3\x79\x01\x14\xf6\x70\xec\xce\x61\x83\x94\x90\x45\xd4\xc8\x27\xdc\x37\x4e\xb5\x44\xc4\x5e\xe8\x60\xad\x96\x6a\x7a\x60\x5b\x5a\x8a\xb7\x61\x48\x96\xd7\x6d\xd8\xaf\x6e\xbf\x9c\x87\x6d\xff\x42\xe6\x4b\x75\xaf\xad\x92\xf5\x37\xf0\x6e\xfe\xd0\xbc\x12\x22\x3a\x73\xe8\xa2\x76\x60\xfe\x23\x4f\x1d\xc8\x9b\x32\xa7\x76\xc8\x2b\x3e\x97\x24\x4f\x8e\xc1\x74\x88\xa2\x22\x3b\x9a\x66\xaf\x5c\x32\xed\xab\x7f\xb4\xdc\x58\x3b\xb6\x82\x45\x05\x04\x74\x2a\x8a\xca\x1c\x22\xdd\xe4\x8d\x63\x02\x2f\x61\x3d\x8a\x37\x05\x4c\x0f\x87\x4f\x42\x3b\xb1\xcd\x4c\x72\xee\xd7\x4a\xa7\x6e\xc1\xeb\x86\x42\xeb\xee\xd2\x27\xfd\xac\x5c\x17\x4c\x17\x22\x6b\x3d\x7e\x2b\xd6\xe5\x2e\x13\x33\x29\x55\x51\x4f\xc7\x18\x6d\x5f\x72\x57\xca\xc0\xad\x33\xe2\x32\x9a\x05\x1e\x92\x3f\xdf\x5c\x5d\xb2\x8c\xef\x00\xea\x07\x7c\xde\xe6\xab\x40\x0f\x5a\x3f\xa8\xf6\xcd\x40\xb5\xf3\xd5\x53\x05\xc7\xd4\x62\x86\xdb\xdd\xf1\x54\x63\xd3\x58\x84\x35\x43\x4b\xd2\x9c\x59\xb9\x4a\x4f\xb2\x94\xcb\x00\xcd\xad\xa7\xac\x56\x7d\x18\xbe\x77\x81\x3c\x02\x48\x41\x03\xc0\x43\x46\x6b\x21\x2f\x5b\xf1\xbe\x40\x33\x63\x17\xd4\x71\x11\xfb\xce\x33\xa2\x17\xc7\xf8\x01\x55\x49\x78\x64\xb6\x09\x92\x45\x58\x14\x82\x03\xb2\x70\x0d\x18\xd3\x4e\xbe\x6e\x1e\xa5\x5c\xeb\x5e\x50\xca\x73\x30\xf3\x87\x49\x7a\xfb\x8f\xaf\x6a\x3b\x11\x35\x07\x54\x1e\xf8\x2e\x75\x1f\x03\x39\x80\x3d\xba\xbc\x08\x59\x60\xef\x07\x62\x18\x14\xe9\x27\x7a\x24\xf8\x3d\xf2\x36\xde\x8b\x9d\x75\xd0\xd1\x51\xc5\xb7\x62\xe2\x7c\x8b\xce\x79\x16\x60\xdc\x9a\x05\xcf\x25\x80\x40\xdf\x85\xcd\x63\xef\x94\x9a\x20\x1c\x91\x2a\xe7\x58\x2c\x0f\x01\x3d\x73\xf9\x4e\xa9\x29\x77\x8f\x58\x6a\x3f\x1d\x37\xf5\x0a\x09\x04\x04\x10\xbb\xda\x74\x0e\xdf\x9b\x3f\x25\x12\xe5\xf2\x92\xad\x79\x40\xd1\x38\xc1\x8a\x82\x06\x59\x75\x76\xf5\xa8\x59\x8c\x0c\x2a\x65\xa2\x37\x10\x65\xc0\xb0\x1e\xd4\x4f\x57\x0a\xe2\x8f\x72\x2e\xb5\xd9\xc3\x10\x99\x10\x0f\x82\xdc\x93\x95\x90\xfa\xc5\xdb\xf7\x0e\xa5\x83\xfb\x92\x04\x34\x3b\x76\x5b\xf0\xe8\x38\xe6\x71\x0e\xe8\xea\x11\xfc\x6d\x94\x87\xf9\x81\x67\x7d\xb9\x9f\x47\x97\xb8\x6f\x96\x1c\x7f\x54\xfd\x45\x05\xca\xda\xa0\xa9\x57\x49\x00\x0d\x47\xef\x4e\x1e\x79\xe3\xb4\x32\xd0\xef\x97\x80\x19\xec\x60\x18\x79\x54\xec\xbf\x6e\x02\x26\x4a\x87\x90\x73\x6f\x41\x73\xb0\x83\x62\x19\x70\xd0\xe1\x96\x9e\xb2\x1b\x21\xd8\x27\x18\x29\x53\xd9\x27\x52\xc4\x04\xd0\x6f\xc1\x93\x56\xc1\x32\xf8\xf6\x85\x5c\xa9\xe3\xce\xff\x7c\xdd\x00\x95\x1e\x35\x2a\xed\xed\x3c\x16\xb6\x0a\x09\xc9\xf2\x79\x59\x34\x06\x5d\x0c\xb5\xb9\xfe\xe8\xfd\x4d\x94\x5b\x6b\x5b\x6a\x4c\x32\x98\xe2\x43\x78\xda\x6a\x8b\xc4\xf4\x72\x82\xd4\xe9\xf7\x52\x3d\x4a\x3c\x8f\xa9\x26\xf6\x9d\xd9\x7f\x60\xb3\x60\x18\x04\x2d\xc1\x12\x4f\xc3\x97\xc0\xe5\x3e\x73\xff\x66\x37\x18\xf1\xc5\x36\x83\x94\x95\x06\x7b\x97\x44\xa8\xe0\x02\xff\x6e\x36\x61\x6f\x26\xec\x6c\xc2\xa6\xd3\xe9\xcb\x09\xea\xec\x53\x8b\xf0\x27\x78\xf4\x17\x7c\x6d\xca\x26\x71\x9f\x55\x50\x01\xc8\xd5\x19\xfb\xc4\x72\xfe\x71\xff\xad\xc0\xab\x66\xbb\x80\x99\xc8\x94\x36\x45\xe8\x98\x68\xa3\x12\xdf\x28\x00\x5a\x8b\x48\xe5\x16\xaa\xad\x0b\x95\x5b\xd8\xe9\x03\xcf\x79\x22\x81\xa0\x81\x37\x41\xf7\x54\x73\xc0\x30\x2f\x7e\xe3\x5b\xe8\x7f\x22\x1d\xc9\xae\x19\xa6\x5b\xd7\xfe\x62\x97\x51\x58\xe9\x31\x4f\x8a\xc2\x18\x64\x7a\x2e\x6f\xd8\xeb\x7f\x61\xb3\x2c\x4b\x05\x9b\xb1\xbf\xb1\x37\x5c\x72\xc9\xd9\x1b\xf6\x37\x76\xc6\x65\xc1\x53\x55\x66\x82\x9d\xb1\xbf\x99\x61\x33\xe5\x5d\x2a\x63\x01\xed\x26\x8c\x33\x59\xa6\x68\xe8\x7d\x67\x21\x9d\x2f\x5d\xbf\xb8\x9f\x9d\xa5\x28\x1e\x85\x90\x4c\xab\x2d\x5d\x85\x7f\x75\xb7\xbf\x4e\xe4\x3a\x15\x05\xad\x87\x2a\xf8\x16\x2b\x38\x81\x9e\xbe\x9e\x4b\xe7\xa7\xfe\xab\x69\xf1\x5f\xd9\xdf\xd8\x65\x99\xa6\xa6\x49\xe6\xa0\x31\x0b\xe9\x35\xb3\xc9\x50\x42\x4e\x1f\x93\xfb\x24\x13\x71\xc2\x21\x1d\xca\xfc\xeb\xf4\x16\x66\x7b\x51\x7a\xe6\xcb\x70\x4f\x3b\x79\xb0\x63\x8e\x9e\x67\xa1\x56\x70\xe2\x75\xa1\xb5\xd2\x89\xb9\x08\x7f\x3a\xde\x08\xf6\x74\xbe\xb4\x1f\xe8\x8d\x82\xd2\x6e\xa1\x48\xde\x41\x47\x40\xed\xb2\xb5\x65\xb5\x5c\x05\xe1\xa5\x7e\xec\x21\x0b\x8a\x8f\x5f\xd0\x1c\xff\xa5\x31\x44\x83\x99\xf2\x49\xd5\xaa\x42\x56\x01\xb6\xa4\x27\xec\x1a\x14\xdb\x75\xfa\x58\xbf\x54\x25\x2f\x2b\x43\xac\x92\x41\xda\xa0\xb5\xc6\xde\x39\x35\x2a\xa9\x00\x07\x21\x93\xf4\xd4\x6c\xd5\xd3\x4b\x25\x05\xe3\x5a\x27\x6b\x24\x19\x03\x87\x0e\x8a\x6a\x5a\xa3\xe0\xb6\x6a\xb2\x06\x5b\x00\xec\x03\xd3\x24\x04\xa8\x16\xe6\x14\x30\x53\x90\xee\xe6\xd2\xfc\x82\x6e\x24\x48\x56\x49\x1c\xd5\x34\xd6\x46\x54\xcf\xb6\x2e\x3a\x90\x83\xc2\x5b\x16\x58\x5f\x26\xfc\x11\x0b\x8e\x12\x2f\x8f\x88\xf8\x5c\x06\x3c\x8c\x54\x9a\x25\xe9\x41\xf4\xc2\x52\xa4\x4a\xae\xcd\xaa\xe8\x3a\x04\xd4\x96\x77\x8b\x94\x8d\x6c\x02\x16\xd6\xd9\x02\x73\x59\xd2\x57\x68\x4a\xcc\x3d\x99\xc4\xde\xa5\xa3\xcb\xa5\xb1\x23\x5c\xb4\xc1\xdd\x86\xd4\xb9\x2e\x5a\x80\xe3\x50\x22\x77\x5a\xe4\xc0\xf5\x8e\x38\x25\x17\xc9\xc2\x8b\xd3\x53\xe6\x60\x8f\x86\x6d\xaa\x5e\x78\x7b\xbb\xf7\x8b\x22\x65\x0d\x82\x84\x01\xeb\xf1\x6b\x22\xdd\x87\xe0\xdf\xdf\xcd\x2e\xde\xd7\xbe\xd7\xc4\xbf\xb7\x80\xe4\x6f\x2f\x3e\x9c\xbf\x5d\x5c\xdd\xdd\x36\xbe\x67\x4a\xa3\x3f\xed\x81\xc0\x77\x8e\xde\x53\x80\x80\x3f\xa3\xe6\xd4\x42\xad\x6c\x3e\xf4\xf0\x3b\xbd\xa1\xfa\x35\x0c\x6b\x56\x04\xef\xab\x50\x1d\xab\xb9\x70\x3a\x59\x1d\xe4\x82\xa2\x6d\xc3\x1a\x5b\x1f\xb0\x2b\xf9\x0e\x7f\xfe\x51\xa5\x49\xd4\x0f\x5d\xb5\xd7\xd5\x46\x3d\xb6\x60\x01\x97\x02\xb0\xdc\xe4\xf2\xa3\x46\xa1\x85\x5e\x88\xa8\xf0\xd1\xe4\x66\xe7\xfe\x57\xc3\xe5\xf6\xbf\xc1\xd1\x13\xe7\x86\x0d\xe4\x92\x5d\x7c\x1a\xee\x56\xa0\xc9\x05\x71\x0b\x74\xaf\x83\x6f\x0f\x70\x1b\x11\xa7\xa8\x43\x65\xe4\xe1\x80\x7e\xdc\xa8\x94\x3c\x72\x48\x39\x3c\x97\x99\xc8\x23\x05\x30\x33\x64\xb3\x50\x2c\xda\x24\x69\xec\x15\xa4\xbe\x03\x5c\x3e\xa0\x67\x5f\x92\x88\xaa\x70\xf8\x09\x5b\x7c\xcf\xad\x6b\x97\xdd\x5b\xdc\xdd\x47\x61\x8f\x9e\x12\x68\xdb\xb7\xec\x7f\x25\x40\x28\x0e\x05\x91\x84\xd5\x22\xe1\x66\xd0\x2b\xed\x19\xe5\xd4\x37\xd7\x2d\x89\x03\x45\xfe\xe1\x54\xd4\xe6\x95\x96\x59\x7d\x28\x81\x3a\x1a\x3d\xa9\x08\x03\xd3\x02\x9a\xb3\x15\x1c\x6d\x31\x4f\xe4\x4a\x93\x3a\x97\x3e\xf6\xff\x42\x87\x76\x59\xeb\x3c\xa3\xff\xd5\x42\x79\x27\xec\x45\xa5\xa3\x2f\x80\x5a\x58\x2a\xa8\x8f\xe2\xb3\x95\xa1\x81\xe5\x3a\x61\x49\x31\x97\x89\xc6\x95\x99\x8b\x54\x3c\x98\xd6\x85\xf1\x01\x42\xac\xd9\xb7\xb3\xed\x36\x64\x83\x70\x4b\x22\x40\xcb\x86\x36\x61\x1e\x52\xd4\x62\x60\x32\x16\xda\xd8\x8d\xa0\x0d\x24\x7e\x33\x1b\x20\x81\xf0\x17\x42\x9b\x62\x21\x6d\xfb\x00\xf1\x84\xca\xe3\x73\x79\xb1\x82\x4c\x6e\xc8\x1f\x8f\x63\x7c\x85\x5a\xb5\x18\xc7\x17\x98\x50\x3c\x40\xd1\x9b\xdc\x4e\x04\x69\x00\xe3\x4e\x12\x0f\x22\xdf\x15\xe0\xd4\x85\x71\x95\x82\x17\x1b\x96\x14\x13\x20\x7a\xb4\x27\xe5\x5c\xf2\x38\xa6\x04\x58\x2c\xce\x0c\x0d\xac\xfb\x9e\x79\xa6\xcf\x97\xea\xa1\xcf\xb0\x3d\x16\xbb\x89\xbb\x3a\x4b\xb9\x5c\xe0\x0d\xf2\x15\xd0\x9b\x81\x3c\x73\x57\x18\xbf\x5c\x2e\x1c\x39\xd5\x93\xb4\x33\x50\xf0\x0f\x45\xd3\x8d\x1d\x6b\x2b\x9a\xe0\x62\xf0\xe4\xf4\xf6\x79\xe2\xfc\x34\x84\x9c\xc9\x99\x45\x17\x0c\x3f\x05\x3c\xb0\x93\xd7\x50\x36\x76\xb5\xee\x43\x76\xda\x15\xf0\xad\x62\xef\x86\xcc\x7c\xed\x0e\xa9\x4f\xfb\x78\xd8\x57\xc3\x42\x3c\x08\xfa\xb5\xa7\x59\xcf\x0b\xff\xea\xf4\xa3\x34\x61\x60\xb6\xb7\x41\x84\x17\x53\xa0\x04\xfa\xe1\x9c\x9b\xa7\x5d\x7e\x3b\x7c\x87\xa9\x16\x84\xf4\x53\xfa\xa8\xe1\x9c\x1a\xea\x29\xf1\x0c\x0a\xd0\xae\x29\xbb\x90\xcc\x9a\x7b\x13\xf6\x02\x17\x96\x7e\x41\x2e\x48\xd2\x70\x27\xb8\x44\x4c\xbb\x87\x72\xce\xeb\x30\x23\xcc\xfc\xf1\xdb\x0d\x23\x41\xbd\x04\xa5\xcf\x3a\x2e\x6f\x12\xc8\x3c\x3a\x84\x5c\x02\xa3\x88\x4b\x2c\x80\x2e\x49\x7c\x76\xef\xd0\x68\x57\xde\x9b\xed\x3b\x6c\xe3\x5d\xec\x8d\xfd\xa1\x19\xa2\xac\xa4\xfb\xd4\x7e\xce\x54\x3e\x97\xb6\x34\x72\x49\x6a\x14\x74\xab\x17\x15\x24\x42\x90\xcd\x1f\xac\x54\x08\x06\x5b\x0d\x3f\x90\x86\xf4\x2c\xca\xf5\x53\x00\x70\x30\x4b\x87\x41\x04\xda\x7d\x5f\x9b\x31\x3c\xcc\x02\xdf\xe2\x35\x5f\x67\x5a\x4d\x53\x33\x28\x49\x61\x89\x5d\x83\x24\x25\x5d\x02\x3d\xf1\xaa\x34\x87\x51\xc0\xe1\x3c\x97\x66\xf0\xd8\x2a\x01\xf4\x3e\x8d\xcb\x5c\x7e\x50\xda\x72\x62\x68\x3f\x1e\x36\xb4\x4c\xc3\xf6\xc2\x49\x19\xd2\x1f\xde\xc2\xa5\x4d\x3e\x7f\x64\xb7\x72\x57\x0b\x64\xa7\x11\xb1\xcd\x4e\x95\xb9\xef\x54\xc4\xe5\x5c\xfe\x87\x19\x1e\x78\x4e\x71\x69\xa7\x55\xad\x70\x0b\xc3\x0c\x42\xb0\xe4\x13\x16\xfa\xdd\x3f\xbe\xfc\xf4\x12\xb3\x49\x4a\x0d\xea\xb1\x93\xea\x05\xe2\xe8\xfc\xcb\x34\x85\x48\xb4\xed\x81\xa3\x94\xf1\x55\xf4\x22\xb1\xe8\x51\xb7\x90\x55\x13\x63\xc8\x46\xef\x5b\xc1\xde\xf9\x3c\x63\x11\x2f\xa2\xcd\x89\xb5\xe5\xe8\x18\xb3\xb7\x1f\x4d\x1f\xca\x48\x1a\x4b\xab\x9d\xd1\xde\x3c\x38\xf3\xad\xe3\xd8\xac\xac\x17\xd3\x05\xc0\x52\xdd\xd6\xe5\x9d\x1c\x05\x30\x2e\x4e\x44\x82\x54\xed\x3c\xf7\x75\xab\x0d\xe9\x5f\x9c\xe4\x25\x97\x7c\x2b\x62\xf6\x02\xf2\x1e\x5f\xd8\xc9\x9f\xcb\x6c\x39\x4d\x77\xab\x82\x88\xda\xcc\xa0\x4c\x41\x86\x6c\xcf\x2d\xb7\x88\x9b\xcf\xa4\x3d\x83\xdd\xf9\xd0\x6a\xb7\x75\xdc\xd8\xb8\x9a\x86\x1b\x2c\xe8\xe3\x72\xa3\x73\x53\x45\x85\x55\xf5\x10\xb8\xbe\x9f\xb0\x65\xce\x25\x28\xc8\xc4\xa1\x51\xe5\x77\x27\x3c\x9e\x91\x05\xcd\x26\x42\x49\x9e\xee\x20\x03\x64\x32\x97\x48\x19\x07\xdc\xe2\xbb\x28\x4d\x22\xb6\xce\x79\xb6\xa9\xd9\x41\xe2\x41\xc8\x02\x74\x94\xaf\x05\xd7\xc7\x45\xeb\xf3\x7a\x09\x6c\x70\x3c\x65\x26\xe1\xf5\xc1\x65\x8d\xe4\x17\x9a\xd7\x71\xb5\x00\x42\x4f\xc4\x8b\x71\x04\x3f\x7b\x69\x68\x2b\xe4\x86\xc4\xb4\x05\x11\x48\xd3\x39\x66\x6b\xdd\x17\xfe\xc6\x71\x25\xee\x19\x8b\xe9\x3c\x36\x64\xef\xb8\x6c\x8e\x62\x24\xbd\xa8\x5a\x91\xdc\x93\xf4\x78\xcf\x35\xa6\xf1\x91\xa7\xc2\x02\xe1\xdd\xc1\x31\x21\xa1\x48\x60\x2b\x64\x7f\x29\x97\x2a\xb5\x74\x8f\x17\x6f\x99\xca\x41\x69\xa5\x50\xf4\xa7\x24\xee\xb2\x0e\x12\x19\x8b\xdf\x8e\xe2\x5c\xe9\xbf\xe8\xad\xd9\x6c\xaa\x09\x04\x3d\xea\x9d\x85\xd3\x29\x17\xe6\x12\x2e\xec\xcb\xb8\xf1\x2d\x5d\x07\xab\xce\xd2\x62\x03\x08\x52\x4c\xd2\xf0\x83\xba\xe5\x3b\x16\x6d\xb8\x5c\x07\xae\x09\x00\xf4\x89\x4c\xe5\x28\xa8\xfa\x00\xe4\x86\x2a\xb7\x39\xed\x94\xa9\x4d\x99\x22\x2e\x90\x80\x00\x6d\x65\xd3\xb1\xf9\x7a\x9d\x8b\x35\xd0\x8c\xcc\x65\x85\x6b\x02\x88\x1d\xad\x18\x0a\xd6\xd3\x97\xaa\xff\x34\x7c\x37\x5d\xaf\xc1\x22\xdf\xb9\x44\x67\x52\x23\xf6\xfb\xb9\x3e\xac\x13\x96\x88\xe9\x84\xfd\xe0\x41\xe9\x22\x52\xd2\x65\x4a\x77\xa4\xc9\xd6\x5c\xfe\x6c\xcf\xd3\xa1\x49\x8c\xd3\xde\x76\xf8\xac\xa1\x69\xdc\xba\x68\x7a\x53\xcd\x0b\x5e\x94\x23\xee\x20\xd2\xad\x3f\x33\x3f\xbe\xc1\xdf\xf6\xad\xeb\x33\x44\x8c\x5b\x52\x32\xf3\x7d\x73\x73\x9a\xba\x3d\x69\x79\xdb\x58\xef\x75\x20\xa7\xaa\xdb\x81\xfc\x14\xa6\xba\x65\x9e\xd9\xef\x43\x4e\x3b\xd8\x54\x7a\xfa\x34\xd6\x45\x6c\x71\xdd\x94\x9a\xa2\xeb\xcf\xd8\x96\x13\x20\xcb\x55\x5c\x46\x22\x36\x3b\x17\xde\x43\x88\x88\x71\xa4\x2e\x95\x43\xb2\xed\xa2\xad\x30\x53\xc1\xad\xfb\xa5\x7c\x0e\x83\xc8\xc0\xdd\xf0\xdf\x75\xf8\x1b\xac\xc5\xd7\x36\xe8\xe1\xfe\xc4\x71\xca\x47\xde\x53\xae\xfa\x2a\x85\xb7\xca\x93\x75\x22\x79\xa1\x72\xf6\x9d\x4b\xdd\x7e\xe9\x74\xbf\xba\x2d\x84\x91\xc7\x44\x65\x88\xf0\x98\xf8\xa2\x86\x47\xdb\x22\x35\xdf\xd2\x05\xdf\x66\x21\x29\xae\x13\x85\xa7\x91\x49\x71\x10\x9c\x6d\x02\xbe\xd3\x44\xfb\xbc\xcd\xb9\xa4\x88\x03\xce\x9b\xca\x43\x56\xf7\xce\xbb\x39\x2b\x8b\xc5\x81\x44\x4f\xf8\xe3\x71\x8e\x27\x82\x21\x7c\xe0\x59\x3f\x75\x0e\x27\x97\x03\x26\xae\x39\xa5\x7c\x6b\xa9\x54\xd7\x67\xbf\x6e\xca\x48\x2a\xdf\x7a\xe8\xfc\xfa\xbd\x0d\x14\xf9\xf7\x60\xe5\x81\x05\x13\x81\x1c\xa2\x98\x08\x84\x4f\x7b\x77\xac\x99\x5b\xdc\xf2\xed\x9c\xa5\xaa\x8c\x19\x1d\x6a\x14\x86\xcf\xa7\x78\x3b\x02\xa9\xef\x74\xda\x95\xd8\x34\x52\xcf\xd9\x9d\x3f\xf0\xbb\xf6\x1d\x08\x9f\x75\x9c\xc0\xbd\x5b\x9f\x46\xf6\xd9\xa6\x9e\x46\x1a\xe6\xde\x1d\xc7\xa3\xe6\xde\x79\xc1\x81\x61\x70\x9c\x83\x14\xde\xa3\x49\x9c\xc2\x7e\x0b\x03\x08\x2d\x1c\xc8\x95\xc0\xac\xbe\x3f\xba\x3a\xcb\x43\xd0\x5f\x55\xc6\x73\x21\x8b\x05\xd4\x38\xae\x32\xa8\xe4\x23\xfc\xbc\x62\x30\x0d\x72\x04\xff\xdb\xad\x42\xff\xbe\xa5\x13\xfa\x77\x76\x43\x3e\x2d\x73\x5e\x25\x00\x22\xd5\xf7\xec\xbb\x04\x30\x47\x41\x2c\xd4\x4d\x5c\x97\x38\x3f\x76\xe8\x80\xd1\x0b\x3a\x54\x39\xda\x07\x75\xc8\xb7\x1e\x42\xd5\x50\x0a\xb9\xf7\x28\x2b\xdc\x1c\xb5\xf6\x6f\x81\xc4\xc0\x65\xe5\xdf\x40\x07\x6b\xe6\x2f\x65\xff\x29\x72\xe5\x33\x80\xd0\x59\x15\x16\xdc\x6b\xaf\x1f\xae\x8e\x8c\xf6\x38\xea\xf2\x86\xc2\x94\xf0\x17\x62\x6c\x42\x8f\xc2\x72\x67\x9f\x23\x1d\x21\xa4\x4c\x44\x8b\x0e\x15\x92\x41\x4d\x09\x1e\x9e\xa1\xaa\x48\x52\xbb\xcc\xec\x06\x3d\x05\x7f\x05\xa5\xd6\x6c\x79\x46\xf8\x3e\x82\x12\xd7\x83\x37\x53\xe8\xc4\xbf\xfd\xf5\xdf\xa7\x5d\xba\xf7\xd0\xf4\xb1\x70\x29\xd7\xf8\x77\x79\x22\x64\x0c\xc1\x58\x1e\x37\x05\xb2\x64\xc5\x3b\x5f\x39\x9e\xcd\x32\x7c\x92\x8c\xe0\xf6\xab\x56\x2f\x70\x11\x7d\x81\x88\xbe\x3f\x64\xdd\xf6\xad\xc4\xfb\xba\x4c\x09\xbd\x88\x77\x92\x6f\x93\xe8\x8b\xb6\x71\x97\x88\x34\x86\x26\x52\xed\xfb\xa2\x52\xb1\x88\xee\xc7\xda\x04\x07\xd3\xfb\x8b\xe8\x9e\xfd\x74\xfb\xe1\x3d\xaa\xb9\x26\x7a\x2e\x2f\x79\x91\x3c\x88\xbb\x3c\x75\xe1\x00\xe2\x6b\xca\x53\xbb\x47\xaa\x74\xd3\x01\xb5\x91\xe5\xa6\xb6\x86\x43\xa8\x06\xb0\xdd\x9d\x2c\xcb\xe8\x5e\x14\xa7\x39\x97\xb1\xda\x62\x37\x4e\x75\xb9\x5a\x25\xbf\x4d\x0b\x9e\x77\x48\x03\xa0\x1f\xe1\x2b\xda\xb9\x5e\xf0\xa9\xf0\x36\x2f\x9a\xba\x8f\x90\xe8\x4b\x32\xe2\x15\xe3\x16\xf3\xd2\xf8\x56\x00\xb7\x23\xab\xca\x6a\x40\x29\x98\x3b\x0b\xea\x93\x5a\x13\x82\x5e\x91\xb6\xf5\xa7\xc0\xb8\xff\x14\xb4\xaa\xaa\xaf\x6e\x1b\xe5\x15\x1d\xb7\xfc\x1e\xdf\x87\xeb\x5c\x68\x3d\x61\x5a\x41\x8b\xe7\xd2\x62\xd1\x6d\xbe\x14\xe0\x5e\x80\x1d\x36\xdd\xb1\x48\x65\x09\x08\x60\xba\x7e\x6d\xd4\x23\xf8\xe9\xc3\x4c\x51\xd0\x2c\x2e\x65\x91\xa4\x8c\xaf\x0a\x72\xe2\x03\x15\xbe\x95\xbe\xd2\xd3\xb9\x84\x50\x6c\x04\xdd\x07\x88\x84\x0b\xbf\xb8\x4e\x68\xb6\xe2\x51\x92\x26\x05\x11\x74\x41\x92\x11\x37\xfd\x35\xf7\x81\x19\xcb\x9c\xef\x78\xea\x1f\x56\x3c\x2d\x7d\x72\xec\x89\x16\x3d\x04\x90\x89\x5e\xa0\x83\xe0\x4b\x30\xce\x25\x61\xf0\x01\xc9\xb2\x67\xa6\xf2\xcb\xda\x2d\xfa\x87\xf0\x7f\x2b\xef\xf0\x3e\xab\xe0\x88\x07\xf9\x31\x97\x63\xf3\xc9\xed\xf4\xa2\xbd\x9d\x91\xc4\x16\x1f\x5c\x31\xc5\x7d\xfa\xa9\xbb\x1e\x21\x66\xd2\xf1\xe8\x9f\x5a\x95\xaf\x66\x0d\x23\x46\xaf\xdd\x48\xfc\x42\xee\x8c\x2e\x06\xf3\x21\xcd\xb7\xde\xf8\x8f\x4a\xa5\xc7\x7a\xe4\x89\x94\x21\x51\x72\x01\xc2\xb7\xc7\x3c\x27\x71\x01\x38\xc7\xd6\xc5\x5b\x17\x73\x77\x94\xe0\x55\xb9\x2c\x82\x83\x51\x13\xe0\x20\x83\x46\xf4\x20\xc5\x75\xd6\x02\xba\x18\x89\x78\x87\x32\x10\xad\x65\x4d\xfb\x66\x88\x20\xe0\xe7\xe0\xbe\x8d\x40\x9b\x5a\x6b\xe1\x28\x67\x1d\xca\xd4\xd6\xaa\x72\x8e\xbb\x90\x5e\xd9\x8d\x63\x50\xb7\x1d\x4f\x14\xc7\x37\xf7\x27\x59\xf1\x73\x19\x58\xec\xc8\x89\x66\x53\x0a\xdc\xa8\xb5\xf9\xf3\x2a\xcb\xf0\x68\x7f\xde\x31\x1c\xfa\xbd\x27\xe7\xdb\x50\x0d\x0f\xb0\x20\x91\xda\x2e\x13\x69\x59\x09\xc8\xc9\x0d\x4f\x8d\x99\xa5\x28\x75\x01\x09\xfb\x64\x40\x8d\x94\xda\xd8\x3b\x33\x27\x64\x7b\x0d\x8f\xac\x7d\xcf\xf1\xf0\x7d\xf7\xb4\x74\xff\x1d\x91\xc6\x7a\x0f\xcc\x05\x92\x3e\xf2\x9d\x06\xc5\x68\x61\x4e\xc5\x15\x3a\x76\xab\xed\x9f\x04\xe6\x87\xa5\xbf\x9d\x4b\x18\xa1\x92\x84\xe4\xa9\x2f\x09\x31\x00\xa4\x56\x1b\xdb\x73\x7d\xbd\xd0\xed\x83\xf3\x75\x62\x35\x79\x6f\xac\x06\x83\xd0\xff\x33\xc2\x33\x3d\x4e\xe0\x23\x7d\xd1\xc1\x35\x89\x16\x23\xc1\x84\x20\x71\xcb\x85\xa8\x27\x6c\xcb\x13\x49\xdb\x00\xf5\x07\x63\xb1\x2c\xd7\xeb\x4e\x17\xe9\xb7\x1f\x6b\xa9\xee\x93\xbf\x7b\x5f\x78\x2f\x5b\xdd\x53\x78\x8b\x2f\x6c\x4d\xe8\xbe\x36\xef\xbe\x2f\xe3\x20\xfe\x8a\xde\xf8\xd6\x90\x58\x63\x11\x3d\x8d\x37\xfe\x62\x88\x37\xde\x62\xbb\x20\xc5\x8e\x9e\xd3\x16\x7f\xf3\xbb\x9b\xfe\xcb\xb8\xe9\x07\x2d\x0a\xa4\x75\x59\x24\x55\x03\xbd\xa7\x85\x07\x32\x1f\x3a\x32\x60\x68\x15\xb2\x8b\x99\xd3\x3d\xd6\x6c\xc9\xa3\x67\xa0\x42\x84\xdb\xf1\x78\x7f\xe0\x1e\xf0\xcb\x8d\xda\x0a\x06\x55\x69\x54\xae\x61\x94\xc5\x38\x01\xb4\xaa\xe9\xa0\x47\x8c\x10\x1e\x05\xae\x53\x44\xae\xc4\xde\xa8\xfe\x4e\x8a\x47\x66\x6e\xab\x49\x08\xdf\x0b\xa6\x07\x24\xcd\x5e\x1a\xeb\xb0\x82\xf5\x77\x94\x0d\xb9\x58\xf3\x3c\x86\x0c\x13\xda\x92\x29\x8f\xee\xcd\x7f\x43\xfb\xa8\x46\x82\x18\x5a\x75\x05\x84\xbd\xfa\xd2\x12\x19\x21\x19\x1e\xa1\x19\x7d\xfb\xf0\xe7\x9a\xf1\x28\x57\x1a\x9d\x46\x4e\x09\x18\x32\x9c\xc1\x80\x7d\x48\xe2\x92\xa7\x58\x63\xa7\xa7\x7d\x2c\x7c\xad\x0e\x38\x0a\x44\xbb\x9a\x68\x36\x9a\x0e\xe4\x28\x82\x61\x9c\xce\xe5\x5b\x17\x30\x79\xcd\xee\xb4\x20\x94\x99\xb6\xb4\xe7\xbd\x2d\x7d\x36\xf3\xa1\x81\x09\xec\xb4\x21\x7a\x06\xc0\x82\xac\x83\x81\xd0\xdd\x23\xb1\x87\x50\xf3\x98\x49\x19\x4d\x0c\x7c\x11\x28\x87\xfb\x61\xc1\x77\x42\x2e\x78\xbc\x0b\xd9\xf8\x12\xc9\x20\x4a\xc7\x78\xbc\x4d\xa4\xd9\x04\x56\x9d\xd2\xdd\x34\x96\xa8\x1e\x21\xc7\x20\xe2\x94\xa6\xb5\x43\x50\x33\x29\x8c\x71\xc9\xf3\x24\xdd\xc1\x7b\x22\xcb\xc5\x49\x50\x4f\x30\x3f\x94\xf1\x04\x94\xfb\x44\x23\x52\x6a\xb1\x2a\x53\x7c\x75\xc0\xbb\xdc\x75\x80\x4e\xa4\xbb\x8b\x89\x31\x38\x0a\x92\x4e\x09\x2a\x46\x41\xc2\xa7\xc8\x1e\x69\x44\x2b\xc7\x45\xdc\x3c\x5b\x64\x0e\x20\xf7\x8d\x7a\xb4\xa9\x6e\x8f\xdc\x63\x99\xbb\x6e\xd7\x27\x8b\xb2\xf4\xdb\xa1\xf6\x05\x68\xcf\xa9\x80\xf2\xcd\x85\xd6\xe8\x33\x11\xbb\xb3\x29\x91\xd0\x1d\xd2\xf4\xf5\x9e\xeb\x52\x63\xc6\x9c\x99\x4b\xb8\xbf\xac\xa3\xa3\xea\xb8\x66\xae\x77\x89\x56\x92\xcd\xcb\xef\xbf\xff\xa3\x60\xdf\x43\x0a\x21\xbd\x47\x30\x3e\x06\x7c\x91\x58\x3a\x1c\xd9\xae\x02\x81\x64\x92\x8d\x19\x61\x6d\x10\x55\x9b\xaf\x0f\x20\x4f\x1e\x6d\x98\x2e\x97\x88\x60\xe4\x14\x62\xe1\xd2\xf1\x4e\xbf\x57\x00\x46\xc4\x9b\xdd\xb6\xfe\x7f\x49\x40\x01\x55\x2e\xe6\x32\x53\x48\x8d\x0e\xd0\xcf\xa5\x60\x5b\x9e\xdf\x83\x68\x29\xba\xe7\x81\x0a\xfe\xbb\x44\x4c\xab\xe1\x85\x97\x95\xf6\x50\x40\x07\x29\x8f\x59\x5e\x4a\x69\x55\x98\x98\x31\x4c\xbd\xaf\x7f\x32\x97\xcb\x32\x7c\x7b\x56\x82\x05\x7e\x69\x41\xc0\x00\x0e\x5b\x05\x5c\x21\xd4\x28\xae\x7d\xbb\xa6\x6c\x40\xd4\x60\x2e\x9f\x38\x6c\xb0\xcf\xe1\xf7\x91\x6c\x30\xeb\xcc\x0b\xf2\x15\xa0\xbb\xa1\x50\x30\x4c\x07\x2e\x7b\x30\x72\x3e\x82\x5a\xf0\x84\xfd\x94\x3c\x88\x09\xbb\xc9\x78\x7e\x3f\x61\x6f\x31\xfc\xf7\x67\xb5\x6c\xf3\xe1\x35\x08\x25\x8e\xf6\xe3\x1d\xe6\xc6\xea\x23\x5a\x69\xb7\xfe\x7f\x6d\x10\x03\xb0\xae\xd8\xf7\xff\x4c\x44\x5e\x07\xd7\xc7\xdf\xbb\x27\x62\x4f\x98\xfa\x77\xf0\xda\xdf\xe5\xab\xb8\x9f\xe6\xe3\x0f\xe1\xff\xda\xf3\xcb\x5a\x5c\x60\x7b\xd2\x29\xd7\x8a\x4a\xfb\xb6\x12\x9b\x93\xb8\x7e\x29\x37\xf3\x9b\x87\x6d\x05\x4a\x1f\x8f\x5d\x6a\xfb\x08\xd0\x3d\xfd\xd4\x8e\xd7\x59\xaa\x74\x99\xf7\x6f\xfe\xeb\x6a\xab\x6d\xed\x2d\x54\x9f\xb0\xd8\xb6\x4b\x01\xac\x05\x43\xe1\x27\xf8\xb5\xc5\x7f\xa8\xe5\x02\xb0\x56\xc7\xed\xf0\xb6\xe2\x1c\x81\xb0\x8a\x2a\x4d\xf5\x37\xe4\x4d\x26\x80\x71\xca\x9b\xa2\x3e\x20\x50\x5b\x61\xce\x35\x32\x97\x96\x73\x1d\x33\x66\xf3\x5c\x00\x39\x74\x2e\x40\xd9\x8e\x65\x3c\x77\x80\x07\x6b\x11\x05\x2f\x1f\x0f\x8a\x09\xb3\xdc\x20\x59\x95\xde\x5b\x4b\x21\xa4\x1b\xed\x31\xa6\x04\x10\x21\xd7\x46\x9f\xd0\x6e\x8f\xc2\x52\xef\x77\xa8\x70\x36\x7e\x17\xbc\x05\xc1\xe4\x5e\x8b\x22\x38\xcd\x6b\xa6\x45\x65\x6b\x56\x22\x54\xdf\x14\xe2\xbf\x35\x06\x5d\x23\xe7\xaa\x38\x50\x06\xc5\xf4\x9e\xc2\x5f\xfe\x91\x17\x1b\x7c\xd0\x6e\x55\x21\xf0\xcc\x44\x96\x20\x5c\x2f\xe8\x75\x5e\xa6\x6a\x09\x92\x72\xe6\x93\xae\xb7\x61\x44\x5b\x7b\xd0\xd0\x35\x27\x6c\xc8\xc9\x60\x4e\x13\xc8\xb4\xcd\x85\x06\xc2\x95\x66\x94\x6a\x28\x3e\x79\xdc\xa3\xbb\xd9\x5c\x73\xe8\xbf\x6d\x3c\xb6\x9b\xa2\x0c\x66\x5b\x03\x58\xf5\xfc\x80\x0c\x9a\x86\xc4\x05\x91\x15\x53\x18\x18\xf9\x4a\x6b\xfd\xb5\xca\xe5\x73\x39\xc3\x4f\x82\x4b\x80\x7b\x95\x25\x87\x07\x25\x91\x5a\xb7\xff\x30\x7d\x95\xcd\x42\x04\x22\x79\x08\x26\xde\x97\x09\x8f\x81\x09\x64\x35\xca\x22\xc9\x05\x93\x80\x42\x98\x4b\x5d\x2e\x4f\x3c\x31\x89\x79\xc5\x3d\x00\x99\x8e\x16\x19\x87\xa7\x0c\xf0\x15\x9d\xb4\x5c\xc3\xe8\x99\xf4\x6a\x29\x96\xc0\x8f\xa7\x74\xf8\x43\xae\x24\x66\xc6\xbb\xbe\xbb\x72\xcc\x63\x0d\x5e\xd1\x16\xae\x84\x97\x5d\xdf\x79\x01\x7a\x4e\x90\x81\x79\x8d\x28\x8a\xaf\x7d\x81\x87\xd1\xd0\xa1\x57\x37\xc4\xd3\xe6\xf2\xff\xb7\x77\x43\x37\xa8\x78\xc4\x4a\x37\x23\x63\xae\xa8\x4e\xb0\x73\xa5\x6d\xf6\x09\x19\x18\x81\xdd\x8d\x6a\x2c\xf9\xb6\x52\xb9\xc5\xb5\x84\xa2\x1e\x8a\xd2\x65\xe1\xd3\x87\x44\x07\x74\xdf\x50\xdb\x8d\x10\xec\x75\x2e\x56\xaf\x3f\xe5\x62\xb5\xb0\x33\x3d\x85\x0e\x4d\x4d\x8f\x9a\xa4\xdf\x03\x17\x87\xce\x94\x6c\x27\x3f\xdc\x43\x4e\x5a\xeb\x12\x96\x13\xf4\x29\x59\x31\x2f\xe7\x69\xfa\x03\x0c\x10\x22\xae\xb3\x91\x37\x5a\xf6\xc5\xaf\xb9\x2e\x24\xd8\x00\xa8\x55\x87\x0c\xe6\xdf\xff\xf5\x56\x19\xb3\x21\xd7\xdb\x6d\x15\x32\x63\x0f\x7b\x2e\xdd\x85\xd7\x8d\x0b\xfd\xb2\xe8\x74\x98\x40\x9d\xf1\x47\x49\x3c\x36\xa3\x5c\x4f\xc3\xae\xb5\x1a\x80\x28\xb8\xd6\x1a\x18\x38\xbf\xcb\xa4\xf5\xf4\x25\x4e\x49\x71\x12\xc8\xad\xf3\x34\x0d\x35\x15\x7c\xa4\x6d\x2e\x7d\x5e\xaa\xb1\x5a\xd3\xd4\xba\xf0\x2a\xf6\x06\xb1\x16\xc5\x90\x10\x2c\x26\x96\x74\x85\xe8\x0a\x29\x1e\x76\xb2\xe4\xa0\xe5\xeb\x54\xb4\xf6\xed\xe6\xa7\x7a\x44\x7e\x63\x79\xd1\x7b\x22\xcf\x58\xed\xe2\x5e\x34\xe0\xcc\x7b\xdb\xda\x1e\xe9\x08\x28\x25\x60\x33\xdb\x53\x36\xe2\x79\x6e\x51\xfe\x54\x2b\x33\x6f\xa5\x15\x8f\x2a\x6e\xce\x8e\x76\x6e\x44\x74\x9f\xa9\x44\x8e\x3e\x8b\x2a\x14\x17\xb0\xd8\x0b\xe6\x4b\x73\xaf\xc3\x41\x97\x63\xc5\x9e\xc4\x8e\x68\x80\x57\x58\x68\xa8\x27\x63\xe3\xcc\x69\x25\x77\x2f\xbb\xa7\xf6\x5f\x08\x7f\x37\x3c\x83\x2f\xb6\x25\x3e\x54\xbb\x55\x78\x8b\x63\xa7\xc2\x04\xca\x1b\xd9\x5f\x03\x07\x9b\xb3\x0a\x85\x61\xeb\x90\x82\x0b\xf2\x77\xcf\xd0\xef\x9e\xa1\xff\xe1\x9e\xa1\x2f\xe9\x16\x02\x6c\xcc\x73\xfa\x84\x7a\x02\xe4\x47\x6c\x47\x57\xeb\xe8\x1c\xc7\x56\xeb\x78\x12\xc8\x3e\x07\x99\x8e\x4d\xa0\xbf\x25\xc2\x30\xe3\xb3\xe4\xd1\xbd\x90\x9d\x31\x7a\x4b\x5f\xd4\xa9\xc0\xf9\xb4\x08\x96\x36\xf6\xa5\xe0\xd7\xfd\x50\x16\x0f\x75\x22\xd2\xe0\x36\x42\x10\xb3\x4f\xc0\xf6\x34\x1d\x3f\x01\xd0\x98\xca\x1d\xb1\xb5\xa6\x2c\x3c\x0c\x46\x22\x4d\x12\x82\xa5\x6a\x54\xd0\x43\x31\x71\xb6\xe2\x45\xa6\x54\xda\x0a\x8d\x7b\xd2\x01\x6c\x24\xca\x0c\x1d\xbc\x0b\x34\x46\x75\x08\x18\xb3\xa3\xe8\x93\x2e\x7c\x8a\x06\xe6\x63\x80\x16\x06\xac\xa6\xb8\x84\x5c\x4a\x3f\x1c\x81\xc0\x1e\x77\x0e\x17\xc2\x88\x2d\x45\xc4\x41\xfa\xd3\x82\xf7\x22\xee\xb2\x4f\x42\x52\xa4\x46\x3a\x88\x6e\xd6\xd3\x11\xb5\x84\x72\x17\x49\x9b\xf0\xc5\xd8\xcd\x55\xb3\x10\x2c\xb4\x1c\x5b\x6e\x91\x24\x96\x76\x71\x9f\xa4\xad\xe5\x98\x5e\x80\xfe\xde\xb0\x1b\xae\xf5\xdc\xb9\xa0\x82\xce\xa0\x9c\xe1\x07\xe9\x4f\x90\x8e\xb3\x1d\x88\xdc\x99\xcb\x99\x53\x3a\xf5\xd8\x2f\x87\xdc\xc3\x70\x29\x62\x16\x1b\x53\x83\x5c\x8e\xfe\xe5\x32\x61\xba\x8c\x36\xc0\x56\x59\x3d\xa7\xc2\x73\xab\xb9\x63\x27\x73\x69\x1e\x44\xe0\x6a\xd9\x72\xc8\x8b\x7f\x34\xc6\xaa\x4e\xfe\x53\x38\x78\x16\x91\x77\x85\x88\x2c\x7c\x38\x29\xd9\x8a\x5e\xb3\xc4\xa1\x08\xb0\xf0\x98\x92\x32\x8b\x79\x21\xa6\x73\x8f\xb6\x49\xd0\xd3\x69\x51\x1e\x64\x32\xeb\xb0\x63\x21\x8e\xb1\x76\xd2\xa6\xc9\x4a\x44\xbb\xa8\xa1\x03\xd4\x4f\x13\xf1\xfb\xb3\xed\xdb\x7a\xb6\x21\xcb\x2e\xe6\x0c\x8e\x19\x5a\x6a\xea\xb5\xff\xf9\x71\x83\x2b\x58\xd0\x12\x3d\x62\x9c\xbf\xe0\xb3\xb3\xc5\x06\x1e\x67\xcf\x0f\x7e\x07\xf5\x5f\x67\xfe\x61\xeb\x2f\xeb\x80\x02\xa1\x61\x16\x86\xc1\xc5\x22\x5c\x3a\xc6\xa0\x1d\x1c\xd6\xef\x66\x99\xf9\xa6\xc0\x49\x43\x1e\xae\xc6\xe2\x76\x70\xa5\x4b\x6b\x69\x4b\x81\xf7\x5d\x8f\xc5\x1d\xb0\xba\xf3\xe2\x85\x76\xa3\x5e\x3d\x01\x2d\xf6\xff\x7d\xa2\x8b\x5f\x6a\x9a\xa1\x87\x89\x8e\x3e\x9b\x69\x6a\x9b\x8a\xcd\x1c\x6a\x51\x5d\x57\x6d\x1e\xb5\xb2\x6b\x0e\x1e\x4f\x56\x25\xce\xb4\x7b\xcc\x3b\xe8\x93\x1b\xaf\x4f\x78\x35\x3d\xe6\x3c\xcb\x44\x6e\x2f\xf2\x86\xad\x05\x92\x6b\x50\x0b\x68\x26\x6e\x04\x6a\x75\xd7\x5e\xb9\xe6\x28\xa9\x15\x0d\x5f\x83\xa1\x9b\xb6\xcf\xdc\x65\x99\xa6\x9d\x33\xb7\x5f\xc9\xe9\xf2\xee\xfd\xfb\xc5\x2f\xb3\xf7\x77\xe7\xb6\xfb\xad\xca\x48\xc1\xd7\x3a\xc7\xc4\xb5\x84\xc6\xc4\x6b\x2f\x9a\x6a\x85\xd5\x0b\x57\xbe\xd7\xe8\xe4\x2a\xd3\xb4\xaa\x9a\x35\x97\x9f\xa8\x1c\x80\x69\xa3\x22\xa8\x19\x37\xd6\x3b\x70\xd5\xfa\xe1\x6b\x9f\x4c\xe1\x9f\xf0\xb7\x27\xcc\x77\xe2\x35\x68\x3b\x92\x66\x5c\xfb\xb8\x52\x36\xcc\x11\xdb\x01\xc1\xc0\x5d\xdb\xe1\xa9\x75\x01\x0f\xdb\x1e\x77\x12\x18\xc9\x45\x6c\xe5\xfc\x9e\x64\x77\xe0\xd8\x7d\xaa\xc6\xa9\xdd\x59\x1e\xe3\x93\x06\xca\x9d\xa0\x9a\x1b\x68\x54\x7b\xc1\xb3\xb9\x44\x1f\xa8\x69\x53\xa1\xba\xdb\xc4\x2e\xc8\xbc\x4d\xb9\x5c\x97\x7c\x6d\xac\x5b\x5b\xf9\x5c\x6e\x93\xf5\x06\x79\x40\xca\xcc\xe3\x93\x39\x93\x40\x17\x53\x5b\x42\x35\x7c\x72\x22\xe7\x92\xfa\x24\xd7\xbe\x78\xc4\xca\xfe\xf9\xc6\x75\x87\x40\xe9\x58\x10\x09\xd2\xc9\xb9\xc4\xc9\x45\x7e\x12\x1b\x09\x81\x17\x0b\x2f\xea\x4b\x97\x43\xec\x12\x75\xfa\xcd\x99\xbe\x86\x98\xcc\x5c\xba\x14\x5d\xf4\x1c\x51\x1f\x02\xe1\x12\x6c\xd2\xfe\xf3\xc4\x4e\x86\xdd\x13\xd4\xb6\xf6\x55\x7f\xf4\x1d\x60\x36\xdc\x62\x84\xfa\x74\xf3\x18\x1b\xe8\x2d\xe4\xc1\xc1\xd1\xc5\xdb\x00\x79\xd9\xed\xad\xb1\xfd\xc2\xef\x74\x42\x5b\x55\xb9\x4c\x47\x34\x09\xbf\xdf\xdb\x28\x3c\x92\xfb\x1b\x35\xe0\x39\x7c\x5d\xdb\x5a\x66\x99\xf6\x55\xbb\x54\xaa\x63\x5e\x9e\x30\xa0\x58\x69\x14\xfd\x60\xdf\x60\x94\x51\x71\xc8\x7a\x19\x90\xac\x58\x1f\x22\x7b\xfa\xf4\x35\x28\x4d\xf4\x41\xcd\xf1\xf6\xd3\xe0\x16\x39\x0b\x81\x2e\xbb\x51\x27\x2c\xdd\x73\x95\x03\xb6\xe3\x98\xa4\x78\x92\x95\x71\x4e\xf0\x78\x31\x9b\x07\x35\x96\xcd\xfa\x9f\xb8\x45\x34\xf1\x33\x37\x81\x46\x46\x65\xae\xcd\x71\x49\xe7\x1d\x9d\xda\x2a\x67\x7c\x2e\x6d\xaa\x9a\x3d\x8e\x67\x16\x9c\x9b\xbb\xbf\x62\x02\x68\x86\x7c\xfa\x60\xb1\x16\x4c\x49\x61\x4f\xc3\xb9\xb4\xda\xdf\x13\xc6\x97\xda\x4a\x6a\x73\xb9\x73\x3a\xd7\x89\xa3\x2f\xe2\x92\x01\xea\x79\xff\x99\x57\x33\x03\x2a\xf7\xfc\x1f\xcc\xff\xfd\xf7\x1f\xfe\x5f\x00\x00\x00\xff\xff\x98\xc4\xeb\x66\x65\xb9\x04\x00") func adminSwaggerJsonBytes() ([]byte, error) { return bindataRead( @@ -93,7 +93,7 @@ func adminSwaggerJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "admin.swagger.json", size: 309326, mode: os.FileMode(420), modTime: time.Unix(1562572800, 0)} + info := bindataFileInfo{name: "admin.swagger.json", size: 309605, mode: os.FileMode(420), modTime: time.Unix(1562572800, 0)} a := &asset{bytes: bytes, info: info} return a, nil } diff --git a/flyteidl/gen/pb-java/flyteidl/core/Tasks.java b/flyteidl/gen/pb-java/flyteidl/core/Tasks.java index a9cc5a9c0b..6e152f5b1a 100644 --- a/flyteidl/gen/pb-java/flyteidl/core/Tasks.java +++ b/flyteidl/gen/pb-java/flyteidl/core/Tasks.java @@ -4033,12 +4033,28 @@ public interface RuntimeMetadataOrBuilder extends /** *
-     *+optional It can be used to decide use sync plugin or async plugin during runtime.
+     *+optional It can be used to provide extra information for the plugin.
      * 
* - * bool is_sync_plugin = 4; + * .flyteidl.core.PluginMetadata plugin_metadata = 4; */ - boolean getIsSyncPlugin(); + boolean hasPluginMetadata(); + /** + *
+     *+optional It can be used to provide extra information for the plugin.
+     * 
+ * + * .flyteidl.core.PluginMetadata plugin_metadata = 4; + */ + flyteidl.core.Tasks.PluginMetadata getPluginMetadata(); + /** + *
+     *+optional It can be used to provide extra information for the plugin.
+     * 
+ * + * .flyteidl.core.PluginMetadata plugin_metadata = 4; + */ + flyteidl.core.Tasks.PluginMetadataOrBuilder getPluginMetadataOrBuilder(); } /** *
@@ -4104,9 +4120,17 @@ private RuntimeMetadata(
               flavor_ = s;
               break;
             }
-            case 32: {
+            case 34: {
+              flyteidl.core.Tasks.PluginMetadata.Builder subBuilder = null;
+              if (pluginMetadata_ != null) {
+                subBuilder = pluginMetadata_.toBuilder();
+              }
+              pluginMetadata_ = input.readMessage(flyteidl.core.Tasks.PluginMetadata.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(pluginMetadata_);
+                pluginMetadata_ = subBuilder.buildPartial();
+              }
 
-              isSyncPlugin_ = input.readBool();
               break;
             }
             default: {
@@ -4350,17 +4374,37 @@ public java.lang.String getFlavor() {
       }
     }
 
-    public static final int IS_SYNC_PLUGIN_FIELD_NUMBER = 4;
-    private boolean isSyncPlugin_;
+    public static final int PLUGIN_METADATA_FIELD_NUMBER = 4;
+    private flyteidl.core.Tasks.PluginMetadata pluginMetadata_;
     /**
      * 
-     *+optional It can be used to decide use sync plugin or async plugin during runtime.
+     *+optional It can be used to provide extra information for the plugin.
      * 
* - * bool is_sync_plugin = 4; + * .flyteidl.core.PluginMetadata plugin_metadata = 4; */ - public boolean getIsSyncPlugin() { - return isSyncPlugin_; + public boolean hasPluginMetadata() { + return pluginMetadata_ != null; + } + /** + *
+     *+optional It can be used to provide extra information for the plugin.
+     * 
+ * + * .flyteidl.core.PluginMetadata plugin_metadata = 4; + */ + public flyteidl.core.Tasks.PluginMetadata getPluginMetadata() { + return pluginMetadata_ == null ? flyteidl.core.Tasks.PluginMetadata.getDefaultInstance() : pluginMetadata_; + } + /** + *
+     *+optional It can be used to provide extra information for the plugin.
+     * 
+ * + * .flyteidl.core.PluginMetadata plugin_metadata = 4; + */ + public flyteidl.core.Tasks.PluginMetadataOrBuilder getPluginMetadataOrBuilder() { + return getPluginMetadata(); } private byte memoizedIsInitialized = -1; @@ -4386,8 +4430,8 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) if (!getFlavorBytes().isEmpty()) { com.google.protobuf.GeneratedMessageV3.writeString(output, 3, flavor_); } - if (isSyncPlugin_ != false) { - output.writeBool(4, isSyncPlugin_); + if (pluginMetadata_ != null) { + output.writeMessage(4, getPluginMetadata()); } unknownFields.writeTo(output); } @@ -4408,9 +4452,9 @@ public int getSerializedSize() { if (!getFlavorBytes().isEmpty()) { size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, flavor_); } - if (isSyncPlugin_ != false) { + if (pluginMetadata_ != null) { size += com.google.protobuf.CodedOutputStream - .computeBoolSize(4, isSyncPlugin_); + .computeMessageSize(4, getPluginMetadata()); } size += unknownFields.getSerializedSize(); memoizedSize = size; @@ -4432,8 +4476,11 @@ public boolean equals(final java.lang.Object obj) { .equals(other.getVersion())) return false; if (!getFlavor() .equals(other.getFlavor())) return false; - if (getIsSyncPlugin() - != other.getIsSyncPlugin()) return false; + if (hasPluginMetadata() != other.hasPluginMetadata()) return false; + if (hasPluginMetadata()) { + if (!getPluginMetadata() + .equals(other.getPluginMetadata())) return false; + } if (!unknownFields.equals(other.unknownFields)) return false; return true; } @@ -4451,9 +4498,10 @@ public int hashCode() { hash = (53 * hash) + getVersion().hashCode(); hash = (37 * hash) + FLAVOR_FIELD_NUMBER; hash = (53 * hash) + getFlavor().hashCode(); - hash = (37 * hash) + IS_SYNC_PLUGIN_FIELD_NUMBER; - hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean( - getIsSyncPlugin()); + if (hasPluginMetadata()) { + hash = (37 * hash) + PLUGIN_METADATA_FIELD_NUMBER; + hash = (53 * hash) + getPluginMetadata().hashCode(); + } hash = (29 * hash) + unknownFields.hashCode(); memoizedHashCode = hash; return hash; @@ -4597,8 +4645,12 @@ public Builder clear() { flavor_ = ""; - isSyncPlugin_ = false; - + if (pluginMetadataBuilder_ == null) { + pluginMetadata_ = null; + } else { + pluginMetadata_ = null; + pluginMetadataBuilder_ = null; + } return this; } @@ -4628,7 +4680,11 @@ public flyteidl.core.Tasks.RuntimeMetadata buildPartial() { result.type_ = type_; result.version_ = version_; result.flavor_ = flavor_; - result.isSyncPlugin_ = isSyncPlugin_; + if (pluginMetadataBuilder_ == null) { + result.pluginMetadata_ = pluginMetadata_; + } else { + result.pluginMetadata_ = pluginMetadataBuilder_.build(); + } onBuilt(); return result; } @@ -4688,8 +4744,8 @@ public Builder mergeFrom(flyteidl.core.Tasks.RuntimeMetadata other) { flavor_ = other.flavor_; onChanged(); } - if (other.getIsSyncPlugin() != false) { - setIsSyncPlugin(other.getIsSyncPlugin()); + if (other.hasPluginMetadata()) { + mergePluginMetadata(other.getPluginMetadata()); } this.mergeUnknownFields(other.unknownFields); onChanged(); @@ -4827,144 +4883,754 @@ public java.lang.String getVersion() { return (com.google.protobuf.ByteString) ref; } } - /** - *
-       * Version of the runtime. All versions should be backward compatible. However, certain cases call for version
-       * checks to ensure tighter validation or setting expectations.
-       * 
- * - * string version = 2; - */ - public Builder setVersion( - java.lang.String value) { - if (value == null) { - throw new NullPointerException(); - } - - version_ = value; - onChanged(); + /** + *
+       * Version of the runtime. All versions should be backward compatible. However, certain cases call for version
+       * checks to ensure tighter validation or setting expectations.
+       * 
+ * + * string version = 2; + */ + public Builder setVersion( + java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + + version_ = value; + onChanged(); + return this; + } + /** + *
+       * Version of the runtime. All versions should be backward compatible. However, certain cases call for version
+       * checks to ensure tighter validation or setting expectations.
+       * 
+ * + * string version = 2; + */ + public Builder clearVersion() { + + version_ = getDefaultInstance().getVersion(); + onChanged(); + return this; + } + /** + *
+       * Version of the runtime. All versions should be backward compatible. However, certain cases call for version
+       * checks to ensure tighter validation or setting expectations.
+       * 
+ * + * string version = 2; + */ + public Builder setVersionBytes( + com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + + version_ = value; + onChanged(); + return this; + } + + private java.lang.Object flavor_ = ""; + /** + *
+       *+optional It can be used to provide extra information about the runtime (e.g. python, golang... etc.).
+       * 
+ * + * string flavor = 3; + */ + public java.lang.String getFlavor() { + java.lang.Object ref = flavor_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + flavor_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + *
+       *+optional It can be used to provide extra information about the runtime (e.g. python, golang... etc.).
+       * 
+ * + * string flavor = 3; + */ + public com.google.protobuf.ByteString + getFlavorBytes() { + java.lang.Object ref = flavor_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + flavor_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + *
+       *+optional It can be used to provide extra information about the runtime (e.g. python, golang... etc.).
+       * 
+ * + * string flavor = 3; + */ + public Builder setFlavor( + java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + + flavor_ = value; + onChanged(); + return this; + } + /** + *
+       *+optional It can be used to provide extra information about the runtime (e.g. python, golang... etc.).
+       * 
+ * + * string flavor = 3; + */ + public Builder clearFlavor() { + + flavor_ = getDefaultInstance().getFlavor(); + onChanged(); + return this; + } + /** + *
+       *+optional It can be used to provide extra information about the runtime (e.g. python, golang... etc.).
+       * 
+ * + * string flavor = 3; + */ + public Builder setFlavorBytes( + com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + + flavor_ = value; + onChanged(); + return this; + } + + private flyteidl.core.Tasks.PluginMetadata pluginMetadata_; + private com.google.protobuf.SingleFieldBuilderV3< + flyteidl.core.Tasks.PluginMetadata, flyteidl.core.Tasks.PluginMetadata.Builder, flyteidl.core.Tasks.PluginMetadataOrBuilder> pluginMetadataBuilder_; + /** + *
+       *+optional It can be used to provide extra information for the plugin.
+       * 
+ * + * .flyteidl.core.PluginMetadata plugin_metadata = 4; + */ + public boolean hasPluginMetadata() { + return pluginMetadataBuilder_ != null || pluginMetadata_ != null; + } + /** + *
+       *+optional It can be used to provide extra information for the plugin.
+       * 
+ * + * .flyteidl.core.PluginMetadata plugin_metadata = 4; + */ + public flyteidl.core.Tasks.PluginMetadata getPluginMetadata() { + if (pluginMetadataBuilder_ == null) { + return pluginMetadata_ == null ? flyteidl.core.Tasks.PluginMetadata.getDefaultInstance() : pluginMetadata_; + } else { + return pluginMetadataBuilder_.getMessage(); + } + } + /** + *
+       *+optional It can be used to provide extra information for the plugin.
+       * 
+ * + * .flyteidl.core.PluginMetadata plugin_metadata = 4; + */ + public Builder setPluginMetadata(flyteidl.core.Tasks.PluginMetadata value) { + if (pluginMetadataBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + pluginMetadata_ = value; + onChanged(); + } else { + pluginMetadataBuilder_.setMessage(value); + } + + return this; + } + /** + *
+       *+optional It can be used to provide extra information for the plugin.
+       * 
+ * + * .flyteidl.core.PluginMetadata plugin_metadata = 4; + */ + public Builder setPluginMetadata( + flyteidl.core.Tasks.PluginMetadata.Builder builderForValue) { + if (pluginMetadataBuilder_ == null) { + pluginMetadata_ = builderForValue.build(); + onChanged(); + } else { + pluginMetadataBuilder_.setMessage(builderForValue.build()); + } + + return this; + } + /** + *
+       *+optional It can be used to provide extra information for the plugin.
+       * 
+ * + * .flyteidl.core.PluginMetadata plugin_metadata = 4; + */ + public Builder mergePluginMetadata(flyteidl.core.Tasks.PluginMetadata value) { + if (pluginMetadataBuilder_ == null) { + if (pluginMetadata_ != null) { + pluginMetadata_ = + flyteidl.core.Tasks.PluginMetadata.newBuilder(pluginMetadata_).mergeFrom(value).buildPartial(); + } else { + pluginMetadata_ = value; + } + onChanged(); + } else { + pluginMetadataBuilder_.mergeFrom(value); + } + + return this; + } + /** + *
+       *+optional It can be used to provide extra information for the plugin.
+       * 
+ * + * .flyteidl.core.PluginMetadata plugin_metadata = 4; + */ + public Builder clearPluginMetadata() { + if (pluginMetadataBuilder_ == null) { + pluginMetadata_ = null; + onChanged(); + } else { + pluginMetadata_ = null; + pluginMetadataBuilder_ = null; + } + + return this; + } + /** + *
+       *+optional It can be used to provide extra information for the plugin.
+       * 
+ * + * .flyteidl.core.PluginMetadata plugin_metadata = 4; + */ + public flyteidl.core.Tasks.PluginMetadata.Builder getPluginMetadataBuilder() { + + onChanged(); + return getPluginMetadataFieldBuilder().getBuilder(); + } + /** + *
+       *+optional It can be used to provide extra information for the plugin.
+       * 
+ * + * .flyteidl.core.PluginMetadata plugin_metadata = 4; + */ + public flyteidl.core.Tasks.PluginMetadataOrBuilder getPluginMetadataOrBuilder() { + if (pluginMetadataBuilder_ != null) { + return pluginMetadataBuilder_.getMessageOrBuilder(); + } else { + return pluginMetadata_ == null ? + flyteidl.core.Tasks.PluginMetadata.getDefaultInstance() : pluginMetadata_; + } + } + /** + *
+       *+optional It can be used to provide extra information for the plugin.
+       * 
+ * + * .flyteidl.core.PluginMetadata plugin_metadata = 4; + */ + private com.google.protobuf.SingleFieldBuilderV3< + flyteidl.core.Tasks.PluginMetadata, flyteidl.core.Tasks.PluginMetadata.Builder, flyteidl.core.Tasks.PluginMetadataOrBuilder> + getPluginMetadataFieldBuilder() { + if (pluginMetadataBuilder_ == null) { + pluginMetadataBuilder_ = new com.google.protobuf.SingleFieldBuilderV3< + flyteidl.core.Tasks.PluginMetadata, flyteidl.core.Tasks.PluginMetadata.Builder, flyteidl.core.Tasks.PluginMetadataOrBuilder>( + getPluginMetadata(), + getParentForChildren(), + isClean()); + pluginMetadata_ = null; + } + return pluginMetadataBuilder_; + } + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + + // @@protoc_insertion_point(builder_scope:flyteidl.core.RuntimeMetadata) + } + + // @@protoc_insertion_point(class_scope:flyteidl.core.RuntimeMetadata) + private static final flyteidl.core.Tasks.RuntimeMetadata DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new flyteidl.core.Tasks.RuntimeMetadata(); + } + + public static flyteidl.core.Tasks.RuntimeMetadata getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public RuntimeMetadata parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return new RuntimeMetadata(input, extensionRegistry); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public flyteidl.core.Tasks.RuntimeMetadata getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + + public interface PluginMetadataOrBuilder extends + // @@protoc_insertion_point(interface_extends:flyteidl.core.PluginMetadata) + com.google.protobuf.MessageOrBuilder { + + /** + *
+     *+optional It can be used to decide use sync plugin or async plugin during runtime.
+     * 
+ * + * bool is_sync_plugin = 1; + */ + boolean getIsSyncPlugin(); + } + /** + * Protobuf type {@code flyteidl.core.PluginMetadata} + */ + public static final class PluginMetadata extends + com.google.protobuf.GeneratedMessageV3 implements + // @@protoc_insertion_point(message_implements:flyteidl.core.PluginMetadata) + PluginMetadataOrBuilder { + private static final long serialVersionUID = 0L; + // Use PluginMetadata.newBuilder() to construct. + private PluginMetadata(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + private PluginMetadata() { + } + + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet + getUnknownFields() { + return this.unknownFields; + } + private PluginMetadata( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + this(); + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + int mutable_bitField0_ = 0; + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder(); + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 8: { + + isSyncPlugin_ = input.readBool(); + break; + } + default: { + if (!parseUnknownField( + input, unknownFields, extensionRegistry, tag)) { + done = true; + } + break; + } + } + } + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(this); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException( + e).setUnfinishedMessage(this); + } finally { + this.unknownFields = unknownFields.build(); + makeExtensionsImmutable(); + } + } + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return flyteidl.core.Tasks.internal_static_flyteidl_core_PluginMetadata_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return flyteidl.core.Tasks.internal_static_flyteidl_core_PluginMetadata_fieldAccessorTable + .ensureFieldAccessorsInitialized( + flyteidl.core.Tasks.PluginMetadata.class, flyteidl.core.Tasks.PluginMetadata.Builder.class); + } + + public static final int IS_SYNC_PLUGIN_FIELD_NUMBER = 1; + private boolean isSyncPlugin_; + /** + *
+     *+optional It can be used to decide use sync plugin or async plugin during runtime.
+     * 
+ * + * bool is_sync_plugin = 1; + */ + public boolean getIsSyncPlugin() { + return isSyncPlugin_; + } + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + if (isSyncPlugin_ != false) { + output.writeBool(1, isSyncPlugin_); + } + unknownFields.writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (isSyncPlugin_ != false) { + size += com.google.protobuf.CodedOutputStream + .computeBoolSize(1, isSyncPlugin_); + } + size += unknownFields.getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof flyteidl.core.Tasks.PluginMetadata)) { + return super.equals(obj); + } + flyteidl.core.Tasks.PluginMetadata other = (flyteidl.core.Tasks.PluginMetadata) obj; + + if (getIsSyncPlugin() + != other.getIsSyncPlugin()) return false; + if (!unknownFields.equals(other.unknownFields)) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + IS_SYNC_PLUGIN_FIELD_NUMBER; + hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean( + getIsSyncPlugin()); + hash = (29 * hash) + unknownFields.hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static flyteidl.core.Tasks.PluginMetadata parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static flyteidl.core.Tasks.PluginMetadata parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static flyteidl.core.Tasks.PluginMetadata parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static flyteidl.core.Tasks.PluginMetadata parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static flyteidl.core.Tasks.PluginMetadata parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static flyteidl.core.Tasks.PluginMetadata parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static flyteidl.core.Tasks.PluginMetadata parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static flyteidl.core.Tasks.PluginMetadata parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + public static flyteidl.core.Tasks.PluginMetadata parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input); + } + public static flyteidl.core.Tasks.PluginMetadata parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static flyteidl.core.Tasks.PluginMetadata parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static flyteidl.core.Tasks.PluginMetadata parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(flyteidl.core.Tasks.PluginMetadata prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + * Protobuf type {@code flyteidl.core.PluginMetadata} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageV3.Builder implements + // @@protoc_insertion_point(builder_implements:flyteidl.core.PluginMetadata) + flyteidl.core.Tasks.PluginMetadataOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return flyteidl.core.Tasks.internal_static_flyteidl_core_PluginMetadata_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return flyteidl.core.Tasks.internal_static_flyteidl_core_PluginMetadata_fieldAccessorTable + .ensureFieldAccessorsInitialized( + flyteidl.core.Tasks.PluginMetadata.class, flyteidl.core.Tasks.PluginMetadata.Builder.class); + } + + // Construct using flyteidl.core.Tasks.PluginMetadata.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessageV3 + .alwaysUseFieldBuilders) { + } + } + @java.lang.Override + public Builder clear() { + super.clear(); + isSyncPlugin_ = false; + return this; } - /** - *
-       * Version of the runtime. All versions should be backward compatible. However, certain cases call for version
-       * checks to ensure tighter validation or setting expectations.
-       * 
- * - * string version = 2; - */ - public Builder clearVersion() { - - version_ = getDefaultInstance().getVersion(); - onChanged(); - return this; + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return flyteidl.core.Tasks.internal_static_flyteidl_core_PluginMetadata_descriptor; } - /** - *
-       * Version of the runtime. All versions should be backward compatible. However, certain cases call for version
-       * checks to ensure tighter validation or setting expectations.
-       * 
- * - * string version = 2; - */ - public Builder setVersionBytes( - com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - checkByteStringIsUtf8(value); - - version_ = value; - onChanged(); - return this; + + @java.lang.Override + public flyteidl.core.Tasks.PluginMetadata getDefaultInstanceForType() { + return flyteidl.core.Tasks.PluginMetadata.getDefaultInstance(); } - private java.lang.Object flavor_ = ""; - /** - *
-       *+optional It can be used to provide extra information about the runtime (e.g. python, golang... etc.).
-       * 
- * - * string flavor = 3; - */ - public java.lang.String getFlavor() { - java.lang.Object ref = flavor_; - if (!(ref instanceof java.lang.String)) { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - flavor_ = s; - return s; - } else { - return (java.lang.String) ref; + @java.lang.Override + public flyteidl.core.Tasks.PluginMetadata build() { + flyteidl.core.Tasks.PluginMetadata result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); } + return result; } - /** - *
-       *+optional It can be used to provide extra information about the runtime (e.g. python, golang... etc.).
-       * 
- * - * string flavor = 3; - */ - public com.google.protobuf.ByteString - getFlavorBytes() { - java.lang.Object ref = flavor_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - flavor_ = b; - return b; + + @java.lang.Override + public flyteidl.core.Tasks.PluginMetadata buildPartial() { + flyteidl.core.Tasks.PluginMetadata result = new flyteidl.core.Tasks.PluginMetadata(this); + result.isSyncPlugin_ = isSyncPlugin_; + onBuilt(); + return result; + } + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.setField(field, value); + } + @java.lang.Override + public Builder clearField( + com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + @java.lang.Override + public Builder clearOneof( + com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + int index, java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.addRepeatedField(field, value); + } + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof flyteidl.core.Tasks.PluginMetadata) { + return mergeFrom((flyteidl.core.Tasks.PluginMetadata)other); } else { - return (com.google.protobuf.ByteString) ref; + super.mergeFrom(other); + return this; } } - /** - *
-       *+optional It can be used to provide extra information about the runtime (e.g. python, golang... etc.).
-       * 
- * - * string flavor = 3; - */ - public Builder setFlavor( - java.lang.String value) { - if (value == null) { - throw new NullPointerException(); - } - - flavor_ = value; + + public Builder mergeFrom(flyteidl.core.Tasks.PluginMetadata other) { + if (other == flyteidl.core.Tasks.PluginMetadata.getDefaultInstance()) return this; + if (other.getIsSyncPlugin() != false) { + setIsSyncPlugin(other.getIsSyncPlugin()); + } + this.mergeUnknownFields(other.unknownFields); onChanged(); return this; } - /** - *
-       *+optional It can be used to provide extra information about the runtime (e.g. python, golang... etc.).
-       * 
- * - * string flavor = 3; - */ - public Builder clearFlavor() { - - flavor_ = getDefaultInstance().getFlavor(); - onChanged(); - return this; + + @java.lang.Override + public final boolean isInitialized() { + return true; } - /** - *
-       *+optional It can be used to provide extra information about the runtime (e.g. python, golang... etc.).
-       * 
- * - * string flavor = 3; - */ - public Builder setFlavorBytes( - com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - checkByteStringIsUtf8(value); - - flavor_ = value; - onChanged(); + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + flyteidl.core.Tasks.PluginMetadata parsedMessage = null; + try { + parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + parsedMessage = (flyteidl.core.Tasks.PluginMetadata) e.getUnfinishedMessage(); + throw e.unwrapIOException(); + } finally { + if (parsedMessage != null) { + mergeFrom(parsedMessage); + } + } return this; } @@ -4974,7 +5640,7 @@ public Builder setFlavorBytes( *+optional It can be used to decide use sync plugin or async plugin during runtime. *
* - * bool is_sync_plugin = 4; + * bool is_sync_plugin = 1; */ public boolean getIsSyncPlugin() { return isSyncPlugin_; @@ -4984,7 +5650,7 @@ public boolean getIsSyncPlugin() { *+optional It can be used to decide use sync plugin or async plugin during runtime. *
* - * bool is_sync_plugin = 4; + * bool is_sync_plugin = 1; */ public Builder setIsSyncPlugin(boolean value) { @@ -4997,7 +5663,7 @@ public Builder setIsSyncPlugin(boolean value) { *+optional It can be used to decide use sync plugin or async plugin during runtime. *
* - * bool is_sync_plugin = 4; + * bool is_sync_plugin = 1; */ public Builder clearIsSyncPlugin() { @@ -5018,41 +5684,41 @@ public final Builder mergeUnknownFields( } - // @@protoc_insertion_point(builder_scope:flyteidl.core.RuntimeMetadata) + // @@protoc_insertion_point(builder_scope:flyteidl.core.PluginMetadata) } - // @@protoc_insertion_point(class_scope:flyteidl.core.RuntimeMetadata) - private static final flyteidl.core.Tasks.RuntimeMetadata DEFAULT_INSTANCE; + // @@protoc_insertion_point(class_scope:flyteidl.core.PluginMetadata) + private static final flyteidl.core.Tasks.PluginMetadata DEFAULT_INSTANCE; static { - DEFAULT_INSTANCE = new flyteidl.core.Tasks.RuntimeMetadata(); + DEFAULT_INSTANCE = new flyteidl.core.Tasks.PluginMetadata(); } - public static flyteidl.core.Tasks.RuntimeMetadata getDefaultInstance() { + public static flyteidl.core.Tasks.PluginMetadata getDefaultInstance() { return DEFAULT_INSTANCE; } - private static final com.google.protobuf.Parser - PARSER = new com.google.protobuf.AbstractParser() { + private static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { @java.lang.Override - public RuntimeMetadata parsePartialFrom( + public PluginMetadata parsePartialFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { - return new RuntimeMetadata(input, extensionRegistry); + return new PluginMetadata(input, extensionRegistry); } }; - public static com.google.protobuf.Parser parser() { + public static com.google.protobuf.Parser parser() { return PARSER; } @java.lang.Override - public com.google.protobuf.Parser getParserForType() { + public com.google.protobuf.Parser getParserForType() { return PARSER; } @java.lang.Override - public flyteidl.core.Tasks.RuntimeMetadata getDefaultInstanceForType() { + public flyteidl.core.Tasks.PluginMetadata getDefaultInstanceForType() { return DEFAULT_INSTANCE; } @@ -20627,6 +21293,11 @@ public flyteidl.core.Tasks.Sql getDefaultInstanceForType() { private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_flyteidl_core_RuntimeMetadata_fieldAccessorTable; + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_flyteidl_core_PluginMetadata_descriptor; + private static final + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_flyteidl_core_PluginMetadata_fieldAccessorTable; private static final com.google.protobuf.Descriptors.Descriptor internal_static_flyteidl_core_TaskMetadata_descriptor; private static final @@ -20719,78 +21390,80 @@ public flyteidl.core.Tasks.Sql getDefaultInstanceForType() { "rtition_size\030\003 \001(\tH\000B\026\n\024partition_size_v" + "alue\"K\n\021ExtendedResources\0226\n\017gpu_acceler" + "ator\030\001 \001(\0132\035.flyteidl.core.GPUAccelerato" + - "r\"\255\001\n\017RuntimeMetadata\0228\n\004type\030\001 \001(\0162*.fl" + + "r\"\315\001\n\017RuntimeMetadata\0228\n\004type\030\001 \001(\0162*.fl" + "yteidl.core.RuntimeMetadata.RuntimeType\022" + - "\017\n\007version\030\002 \001(\t\022\016\n\006flavor\030\003 \001(\t\022\026\n\016is_s" + - "ync_plugin\030\004 \001(\010\"\'\n\013RuntimeType\022\t\n\005OTHER" + - "\020\000\022\r\n\tFLYTE_SDK\020\001\"\316\003\n\014TaskMetadata\022\024\n\014di" + - "scoverable\030\001 \001(\010\022/\n\007runtime\030\002 \001(\0132\036.flyt" + - "eidl.core.RuntimeMetadata\022*\n\007timeout\030\004 \001" + - "(\0132\031.google.protobuf.Duration\022-\n\007retries" + - "\030\005 \001(\0132\034.flyteidl.core.RetryStrategy\022\031\n\021" + - "discovery_version\030\006 \001(\t\022 \n\030deprecated_er" + - "ror_message\030\007 \001(\t\022\027\n\rinterruptible\030\010 \001(\010" + - "H\000\022\032\n\022cache_serializable\030\t \001(\010\022\026\n\016genera" + - "tes_deck\030\n \001(\010\0223\n\004tags\030\013 \003(\0132%.flyteidl." + - "core.TaskMetadata.TagsEntry\022\031\n\021pod_templ" + - "ate_name\030\014 \001(\t\032+\n\tTagsEntry\022\013\n\003key\030\001 \001(\t" + - "\022\r\n\005value\030\002 \001(\t:\0028\001B\025\n\023interruptible_val" + - "ue\"\316\004\n\014TaskTemplate\022%\n\002id\030\001 \001(\0132\031.flytei" + - "dl.core.Identifier\022\014\n\004type\030\002 \001(\t\022-\n\010meta" + - "data\030\003 \001(\0132\033.flyteidl.core.TaskMetadata\022" + - "0\n\tinterface\030\004 \001(\0132\035.flyteidl.core.Typed" + - "Interface\022\'\n\006custom\030\005 \001(\0132\027.google.proto" + - "buf.Struct\022-\n\tcontainer\030\006 \001(\0132\030.flyteidl" + - ".core.ContainerH\000\022(\n\007k8s_pod\030\021 \001(\0132\025.fly" + - "teidl.core.K8sPodH\000\022!\n\003sql\030\022 \001(\0132\022.flyte" + - "idl.core.SqlH\000\022\031\n\021task_type_version\030\007 \001(" + - "\005\0228\n\020security_context\030\010 \001(\0132\036.flyteidl.c" + - "ore.SecurityContext\022<\n\022extended_resource" + - "s\030\t \001(\0132 .flyteidl.core.ExtendedResource" + - "s\0227\n\006config\030\020 \003(\0132\'.flyteidl.core.TaskTe" + - "mplate.ConfigEntry\032-\n\013ConfigEntry\022\013\n\003key" + - "\030\001 \001(\t\022\r\n\005value\030\002 \001(\t:\0028\001B\010\n\006target\"\'\n\rC" + - "ontainerPort\022\026\n\016container_port\030\001 \001(\r\"\255\003\n" + - "\tContainer\022\r\n\005image\030\001 \001(\t\022\017\n\007command\030\002 \003" + - "(\t\022\014\n\004args\030\003 \003(\t\022+\n\tresources\030\004 \001(\0132\030.fl" + - "yteidl.core.Resources\022(\n\003env\030\005 \003(\0132\033.fly" + - "teidl.core.KeyValuePair\022/\n\006config\030\006 \003(\0132" + - "\033.flyteidl.core.KeyValuePairB\002\030\001\022+\n\005port" + - "s\030\007 \003(\0132\034.flyteidl.core.ContainerPort\0225\n" + - "\013data_config\030\t \001(\0132 .flyteidl.core.DataL" + - "oadingConfig\022;\n\014architecture\030\n \001(\0162%.fly" + - "teidl.core.Container.Architecture\"I\n\014Arc" + - "hitecture\022\013\n\007UNKNOWN\020\000\022\t\n\005AMD64\020\001\022\t\n\005ARM" + - "64\020\002\022\n\n\006ARM_V6\020\003\022\n\n\006ARM_V7\020\004\"\233\002\n\nIOStrat" + - "egy\022=\n\rdownload_mode\030\001 \001(\0162&.flyteidl.co" + - "re.IOStrategy.DownloadMode\0229\n\013upload_mod" + - "e\030\002 \001(\0162$.flyteidl.core.IOStrategy.Uploa" + - "dMode\"L\n\014DownloadMode\022\022\n\016DOWNLOAD_EAGER\020" + - "\000\022\023\n\017DOWNLOAD_STREAM\020\001\022\023\n\017DO_NOT_DOWNLOA" + - "D\020\002\"E\n\nUploadMode\022\022\n\016UPLOAD_ON_EXIT\020\000\022\020\n" + - "\014UPLOAD_EAGER\020\001\022\021\n\rDO_NOT_UPLOAD\020\002\"\363\001\n\021D" + - "ataLoadingConfig\022\017\n\007enabled\030\001 \001(\010\022\022\n\ninp" + - "ut_path\030\002 \001(\t\022\023\n\013output_path\030\003 \001(\t\022A\n\006fo" + - "rmat\030\004 \001(\01621.flyteidl.core.DataLoadingCo" + - "nfig.LiteralMapFormat\022.\n\013io_strategy\030\005 \001" + - "(\0132\031.flyteidl.core.IOStrategy\"1\n\020Literal" + - "MapFormat\022\010\n\004JSON\020\000\022\010\n\004YAML\020\001\022\t\n\005PROTO\020\002" + - "\"\236\001\n\006K8sPod\0222\n\010metadata\030\001 \001(\0132 .flyteidl" + - ".core.K8sObjectMetadata\022)\n\010pod_spec\030\002 \001(" + - "\0132\027.google.protobuf.Struct\0225\n\013data_confi" + - "g\030\003 \001(\0132 .flyteidl.core.DataLoadingConfi" + - "g\"\374\001\n\021K8sObjectMetadata\022<\n\006labels\030\001 \003(\0132" + - ",.flyteidl.core.K8sObjectMetadata.Labels" + - "Entry\022F\n\013annotations\030\002 \003(\01321.flyteidl.co" + - "re.K8sObjectMetadata.AnnotationsEntry\032-\n" + - "\013LabelsEntry\022\013\n\003key\030\001 \001(\t\022\r\n\005value\030\002 \001(\t" + - ":\0028\001\0322\n\020AnnotationsEntry\022\013\n\003key\030\001 \001(\t\022\r\n" + - "\005value\030\002 \001(\t:\0028\001\"~\n\003Sql\022\021\n\tstatement\030\001 \001" + - "(\t\022+\n\007dialect\030\002 \001(\0162\032.flyteidl.core.Sql." + - "Dialect\"7\n\007Dialect\022\r\n\tUNDEFINED\020\000\022\010\n\004ANS" + - "I\020\001\022\010\n\004HIVE\020\002\022\t\n\005OTHER\020\003B>> 3) { + case 1: + message.isSyncPlugin = reader.bool(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Verifies a PluginMetadata message. + * @function verify + * @memberof flyteidl.core.PluginMetadata + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + PluginMetadata.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.isSyncPlugin != null && message.hasOwnProperty("isSyncPlugin")) + if (typeof message.isSyncPlugin !== "boolean") + return "isSyncPlugin: boolean expected"; + return null; + }; + + return PluginMetadata; + })(); + core.TaskMetadata = (function() { /** diff --git a/flyteidl/gen/pb_python/flyteidl/core/tasks_pb2.py b/flyteidl/gen/pb_python/flyteidl/core/tasks_pb2.py index a7d03bccb2..11cb049849 100644 --- a/flyteidl/gen/pb_python/flyteidl/core/tasks_pb2.py +++ b/flyteidl/gen/pb_python/flyteidl/core/tasks_pb2.py @@ -19,7 +19,7 @@ from google.protobuf import struct_pb2 as google_dot_protobuf_dot_struct__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x19\x66lyteidl/core/tasks.proto\x12\rflyteidl.core\x1a\x1e\x66lyteidl/core/identifier.proto\x1a\x1d\x66lyteidl/core/interface.proto\x1a\x1c\x66lyteidl/core/literals.proto\x1a\x1c\x66lyteidl/core/security.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x1cgoogle/protobuf/struct.proto\"\xd0\x02\n\tResources\x12\x42\n\x08requests\x18\x01 \x03(\x0b\x32&.flyteidl.core.Resources.ResourceEntryR\x08requests\x12>\n\x06limits\x18\x02 \x03(\x0b\x32&.flyteidl.core.Resources.ResourceEntryR\x06limits\x1a`\n\rResourceEntry\x12\x39\n\x04name\x18\x01 \x01(\x0e\x32%.flyteidl.core.Resources.ResourceNameR\x04name\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value\"]\n\x0cResourceName\x12\x0b\n\x07UNKNOWN\x10\x00\x12\x07\n\x03\x43PU\x10\x01\x12\x07\n\x03GPU\x10\x02\x12\n\n\x06MEMORY\x10\x03\x12\x0b\n\x07STORAGE\x10\x04\x12\x15\n\x11\x45PHEMERAL_STORAGE\x10\x05\"\x91\x01\n\x0eGPUAccelerator\x12\x16\n\x06\x64\x65vice\x18\x01 \x01(\tR\x06\x64\x65vice\x12&\n\runpartitioned\x18\x02 \x01(\x08H\x00R\runpartitioned\x12\'\n\x0epartition_size\x18\x03 \x01(\tH\x00R\rpartitionSizeB\x16\n\x14partition_size_value\"[\n\x11\x45xtendedResources\x12\x46\n\x0fgpu_accelerator\x18\x01 \x01(\x0b\x32\x1d.flyteidl.core.GPUAcceleratorR\x0egpuAccelerator\"\xd2\x01\n\x0fRuntimeMetadata\x12>\n\x04type\x18\x01 \x01(\x0e\x32*.flyteidl.core.RuntimeMetadata.RuntimeTypeR\x04type\x12\x18\n\x07version\x18\x02 \x01(\tR\x07version\x12\x16\n\x06\x66lavor\x18\x03 \x01(\tR\x06\x66lavor\x12$\n\x0eis_sync_plugin\x18\x04 \x01(\x08R\x0cisSyncPlugin\"\'\n\x0bRuntimeType\x12\t\n\x05OTHER\x10\x00\x12\r\n\tFLYTE_SDK\x10\x01\"\xf5\x04\n\x0cTaskMetadata\x12\"\n\x0c\x64iscoverable\x18\x01 \x01(\x08R\x0c\x64iscoverable\x12\x38\n\x07runtime\x18\x02 \x01(\x0b\x32\x1e.flyteidl.core.RuntimeMetadataR\x07runtime\x12\x33\n\x07timeout\x18\x04 \x01(\x0b\x32\x19.google.protobuf.DurationR\x07timeout\x12\x36\n\x07retries\x18\x05 \x01(\x0b\x32\x1c.flyteidl.core.RetryStrategyR\x07retries\x12+\n\x11\x64iscovery_version\x18\x06 \x01(\tR\x10\x64iscoveryVersion\x12\x38\n\x18\x64\x65precated_error_message\x18\x07 \x01(\tR\x16\x64\x65precatedErrorMessage\x12&\n\rinterruptible\x18\x08 \x01(\x08H\x00R\rinterruptible\x12-\n\x12\x63\x61\x63he_serializable\x18\t \x01(\x08R\x11\x63\x61\x63heSerializable\x12%\n\x0egenerates_deck\x18\n \x01(\x08R\rgeneratesDeck\x12\x39\n\x04tags\x18\x0b \x03(\x0b\x32%.flyteidl.core.TaskMetadata.TagsEntryR\x04tags\x12*\n\x11pod_template_name\x18\x0c \x01(\tR\x0fpodTemplateName\x1a\x37\n\tTagsEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x42\x15\n\x13interruptible_value\"\xd6\x05\n\x0cTaskTemplate\x12)\n\x02id\x18\x01 \x01(\x0b\x32\x19.flyteidl.core.IdentifierR\x02id\x12\x12\n\x04type\x18\x02 \x01(\tR\x04type\x12\x37\n\x08metadata\x18\x03 \x01(\x0b\x32\x1b.flyteidl.core.TaskMetadataR\x08metadata\x12;\n\tinterface\x18\x04 \x01(\x0b\x32\x1d.flyteidl.core.TypedInterfaceR\tinterface\x12/\n\x06\x63ustom\x18\x05 \x01(\x0b\x32\x17.google.protobuf.StructR\x06\x63ustom\x12\x38\n\tcontainer\x18\x06 \x01(\x0b\x32\x18.flyteidl.core.ContainerH\x00R\tcontainer\x12\x30\n\x07k8s_pod\x18\x11 \x01(\x0b\x32\x15.flyteidl.core.K8sPodH\x00R\x06k8sPod\x12&\n\x03sql\x18\x12 \x01(\x0b\x32\x12.flyteidl.core.SqlH\x00R\x03sql\x12*\n\x11task_type_version\x18\x07 \x01(\x05R\x0ftaskTypeVersion\x12I\n\x10security_context\x18\x08 \x01(\x0b\x32\x1e.flyteidl.core.SecurityContextR\x0fsecurityContext\x12O\n\x12\x65xtended_resources\x18\t \x01(\x0b\x32 .flyteidl.core.ExtendedResourcesR\x11\x65xtendedResources\x12?\n\x06\x63onfig\x18\x10 \x03(\x0b\x32\'.flyteidl.core.TaskTemplate.ConfigEntryR\x06\x63onfig\x1a\x39\n\x0b\x43onfigEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x42\x08\n\x06target\"6\n\rContainerPort\x12%\n\x0e\x63ontainer_port\x18\x01 \x01(\rR\rcontainerPort\"\xfc\x03\n\tContainer\x12\x14\n\x05image\x18\x01 \x01(\tR\x05image\x12\x18\n\x07\x63ommand\x18\x02 \x03(\tR\x07\x63ommand\x12\x12\n\x04\x61rgs\x18\x03 \x03(\tR\x04\x61rgs\x12\x36\n\tresources\x18\x04 \x01(\x0b\x32\x18.flyteidl.core.ResourcesR\tresources\x12-\n\x03\x65nv\x18\x05 \x03(\x0b\x32\x1b.flyteidl.core.KeyValuePairR\x03\x65nv\x12\x37\n\x06\x63onfig\x18\x06 \x03(\x0b\x32\x1b.flyteidl.core.KeyValuePairB\x02\x18\x01R\x06\x63onfig\x12\x32\n\x05ports\x18\x07 \x03(\x0b\x32\x1c.flyteidl.core.ContainerPortR\x05ports\x12\x41\n\x0b\x64\x61ta_config\x18\t \x01(\x0b\x32 .flyteidl.core.DataLoadingConfigR\ndataConfig\x12I\n\x0c\x61rchitecture\x18\n \x01(\x0e\x32%.flyteidl.core.Container.ArchitectureR\x0c\x61rchitecture\"I\n\x0c\x41rchitecture\x12\x0b\n\x07UNKNOWN\x10\x00\x12\t\n\x05\x41MD64\x10\x01\x12\t\n\x05\x41RM64\x10\x02\x12\n\n\x06\x41RM_V6\x10\x03\x12\n\n\x06\x41RM_V7\x10\x04\"\xb5\x02\n\nIOStrategy\x12K\n\rdownload_mode\x18\x01 \x01(\x0e\x32&.flyteidl.core.IOStrategy.DownloadModeR\x0c\x64ownloadMode\x12\x45\n\x0bupload_mode\x18\x02 \x01(\x0e\x32$.flyteidl.core.IOStrategy.UploadModeR\nuploadMode\"L\n\x0c\x44ownloadMode\x12\x12\n\x0e\x44OWNLOAD_EAGER\x10\x00\x12\x13\n\x0f\x44OWNLOAD_STREAM\x10\x01\x12\x13\n\x0f\x44O_NOT_DOWNLOAD\x10\x02\"E\n\nUploadMode\x12\x12\n\x0eUPLOAD_ON_EXIT\x10\x00\x12\x10\n\x0cUPLOAD_EAGER\x10\x01\x12\x11\n\rDO_NOT_UPLOAD\x10\x02\"\xa7\x02\n\x11\x44\x61taLoadingConfig\x12\x18\n\x07\x65nabled\x18\x01 \x01(\x08R\x07\x65nabled\x12\x1d\n\ninput_path\x18\x02 \x01(\tR\tinputPath\x12\x1f\n\x0boutput_path\x18\x03 \x01(\tR\noutputPath\x12I\n\x06\x66ormat\x18\x04 \x01(\x0e\x32\x31.flyteidl.core.DataLoadingConfig.LiteralMapFormatR\x06\x66ormat\x12:\n\x0bio_strategy\x18\x05 \x01(\x0b\x32\x19.flyteidl.core.IOStrategyR\nioStrategy\"1\n\x10LiteralMapFormat\x12\x08\n\x04JSON\x10\x00\x12\x08\n\x04YAML\x10\x01\x12\t\n\x05PROTO\x10\x02\"\xbd\x01\n\x06K8sPod\x12<\n\x08metadata\x18\x01 \x01(\x0b\x32 .flyteidl.core.K8sObjectMetadataR\x08metadata\x12\x32\n\x08pod_spec\x18\x02 \x01(\x0b\x32\x17.google.protobuf.StructR\x07podSpec\x12\x41\n\x0b\x64\x61ta_config\x18\x03 \x01(\x0b\x32 .flyteidl.core.DataLoadingConfigR\ndataConfig\"\xa9\x02\n\x11K8sObjectMetadata\x12\x44\n\x06labels\x18\x01 \x03(\x0b\x32,.flyteidl.core.K8sObjectMetadata.LabelsEntryR\x06labels\x12S\n\x0b\x61nnotations\x18\x02 \x03(\x0b\x32\x31.flyteidl.core.K8sObjectMetadata.AnnotationsEntryR\x0b\x61nnotations\x1a\x39\n\x0bLabelsEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x1a>\n\x10\x41nnotationsEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\"\x92\x01\n\x03Sql\x12\x1c\n\tstatement\x18\x01 \x01(\tR\tstatement\x12\x34\n\x07\x64ialect\x18\x02 \x01(\x0e\x32\x1a.flyteidl.core.Sql.DialectR\x07\x64ialect\"7\n\x07\x44ialect\x12\r\n\tUNDEFINED\x10\x00\x12\x08\n\x04\x41NSI\x10\x01\x12\x08\n\x04HIVE\x10\x02\x12\t\n\x05OTHER\x10\x03\x42\xb0\x01\n\x11\x63om.flyteidl.coreB\nTasksProtoP\x01Z:github.com/flyteorg/flyte/flyteidl/gen/pb-go/flyteidl/core\xa2\x02\x03\x46\x43X\xaa\x02\rFlyteidl.Core\xca\x02\rFlyteidl\\Core\xe2\x02\x19\x46lyteidl\\Core\\GPBMetadata\xea\x02\x0e\x46lyteidl::Coreb\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x19\x66lyteidl/core/tasks.proto\x12\rflyteidl.core\x1a\x1e\x66lyteidl/core/identifier.proto\x1a\x1d\x66lyteidl/core/interface.proto\x1a\x1c\x66lyteidl/core/literals.proto\x1a\x1c\x66lyteidl/core/security.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x1cgoogle/protobuf/struct.proto\"\xd0\x02\n\tResources\x12\x42\n\x08requests\x18\x01 \x03(\x0b\x32&.flyteidl.core.Resources.ResourceEntryR\x08requests\x12>\n\x06limits\x18\x02 \x03(\x0b\x32&.flyteidl.core.Resources.ResourceEntryR\x06limits\x1a`\n\rResourceEntry\x12\x39\n\x04name\x18\x01 \x01(\x0e\x32%.flyteidl.core.Resources.ResourceNameR\x04name\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value\"]\n\x0cResourceName\x12\x0b\n\x07UNKNOWN\x10\x00\x12\x07\n\x03\x43PU\x10\x01\x12\x07\n\x03GPU\x10\x02\x12\n\n\x06MEMORY\x10\x03\x12\x0b\n\x07STORAGE\x10\x04\x12\x15\n\x11\x45PHEMERAL_STORAGE\x10\x05\"\x91\x01\n\x0eGPUAccelerator\x12\x16\n\x06\x64\x65vice\x18\x01 \x01(\tR\x06\x64\x65vice\x12&\n\runpartitioned\x18\x02 \x01(\x08H\x00R\runpartitioned\x12\'\n\x0epartition_size\x18\x03 \x01(\tH\x00R\rpartitionSizeB\x16\n\x14partition_size_value\"[\n\x11\x45xtendedResources\x12\x46\n\x0fgpu_accelerator\x18\x01 \x01(\x0b\x32\x1d.flyteidl.core.GPUAcceleratorR\x0egpuAccelerator\"\xf4\x01\n\x0fRuntimeMetadata\x12>\n\x04type\x18\x01 \x01(\x0e\x32*.flyteidl.core.RuntimeMetadata.RuntimeTypeR\x04type\x12\x18\n\x07version\x18\x02 \x01(\tR\x07version\x12\x16\n\x06\x66lavor\x18\x03 \x01(\tR\x06\x66lavor\x12\x46\n\x0fplugin_metadata\x18\x04 \x01(\x0b\x32\x1d.flyteidl.core.PluginMetadataR\x0epluginMetadata\"\'\n\x0bRuntimeType\x12\t\n\x05OTHER\x10\x00\x12\r\n\tFLYTE_SDK\x10\x01\"6\n\x0ePluginMetadata\x12$\n\x0eis_sync_plugin\x18\x01 \x01(\x08R\x0cisSyncPlugin\"\xf5\x04\n\x0cTaskMetadata\x12\"\n\x0c\x64iscoverable\x18\x01 \x01(\x08R\x0c\x64iscoverable\x12\x38\n\x07runtime\x18\x02 \x01(\x0b\x32\x1e.flyteidl.core.RuntimeMetadataR\x07runtime\x12\x33\n\x07timeout\x18\x04 \x01(\x0b\x32\x19.google.protobuf.DurationR\x07timeout\x12\x36\n\x07retries\x18\x05 \x01(\x0b\x32\x1c.flyteidl.core.RetryStrategyR\x07retries\x12+\n\x11\x64iscovery_version\x18\x06 \x01(\tR\x10\x64iscoveryVersion\x12\x38\n\x18\x64\x65precated_error_message\x18\x07 \x01(\tR\x16\x64\x65precatedErrorMessage\x12&\n\rinterruptible\x18\x08 \x01(\x08H\x00R\rinterruptible\x12-\n\x12\x63\x61\x63he_serializable\x18\t \x01(\x08R\x11\x63\x61\x63heSerializable\x12%\n\x0egenerates_deck\x18\n \x01(\x08R\rgeneratesDeck\x12\x39\n\x04tags\x18\x0b \x03(\x0b\x32%.flyteidl.core.TaskMetadata.TagsEntryR\x04tags\x12*\n\x11pod_template_name\x18\x0c \x01(\tR\x0fpodTemplateName\x1a\x37\n\tTagsEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x42\x15\n\x13interruptible_value\"\xd6\x05\n\x0cTaskTemplate\x12)\n\x02id\x18\x01 \x01(\x0b\x32\x19.flyteidl.core.IdentifierR\x02id\x12\x12\n\x04type\x18\x02 \x01(\tR\x04type\x12\x37\n\x08metadata\x18\x03 \x01(\x0b\x32\x1b.flyteidl.core.TaskMetadataR\x08metadata\x12;\n\tinterface\x18\x04 \x01(\x0b\x32\x1d.flyteidl.core.TypedInterfaceR\tinterface\x12/\n\x06\x63ustom\x18\x05 \x01(\x0b\x32\x17.google.protobuf.StructR\x06\x63ustom\x12\x38\n\tcontainer\x18\x06 \x01(\x0b\x32\x18.flyteidl.core.ContainerH\x00R\tcontainer\x12\x30\n\x07k8s_pod\x18\x11 \x01(\x0b\x32\x15.flyteidl.core.K8sPodH\x00R\x06k8sPod\x12&\n\x03sql\x18\x12 \x01(\x0b\x32\x12.flyteidl.core.SqlH\x00R\x03sql\x12*\n\x11task_type_version\x18\x07 \x01(\x05R\x0ftaskTypeVersion\x12I\n\x10security_context\x18\x08 \x01(\x0b\x32\x1e.flyteidl.core.SecurityContextR\x0fsecurityContext\x12O\n\x12\x65xtended_resources\x18\t \x01(\x0b\x32 .flyteidl.core.ExtendedResourcesR\x11\x65xtendedResources\x12?\n\x06\x63onfig\x18\x10 \x03(\x0b\x32\'.flyteidl.core.TaskTemplate.ConfigEntryR\x06\x63onfig\x1a\x39\n\x0b\x43onfigEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x42\x08\n\x06target\"6\n\rContainerPort\x12%\n\x0e\x63ontainer_port\x18\x01 \x01(\rR\rcontainerPort\"\xfc\x03\n\tContainer\x12\x14\n\x05image\x18\x01 \x01(\tR\x05image\x12\x18\n\x07\x63ommand\x18\x02 \x03(\tR\x07\x63ommand\x12\x12\n\x04\x61rgs\x18\x03 \x03(\tR\x04\x61rgs\x12\x36\n\tresources\x18\x04 \x01(\x0b\x32\x18.flyteidl.core.ResourcesR\tresources\x12-\n\x03\x65nv\x18\x05 \x03(\x0b\x32\x1b.flyteidl.core.KeyValuePairR\x03\x65nv\x12\x37\n\x06\x63onfig\x18\x06 \x03(\x0b\x32\x1b.flyteidl.core.KeyValuePairB\x02\x18\x01R\x06\x63onfig\x12\x32\n\x05ports\x18\x07 \x03(\x0b\x32\x1c.flyteidl.core.ContainerPortR\x05ports\x12\x41\n\x0b\x64\x61ta_config\x18\t \x01(\x0b\x32 .flyteidl.core.DataLoadingConfigR\ndataConfig\x12I\n\x0c\x61rchitecture\x18\n \x01(\x0e\x32%.flyteidl.core.Container.ArchitectureR\x0c\x61rchitecture\"I\n\x0c\x41rchitecture\x12\x0b\n\x07UNKNOWN\x10\x00\x12\t\n\x05\x41MD64\x10\x01\x12\t\n\x05\x41RM64\x10\x02\x12\n\n\x06\x41RM_V6\x10\x03\x12\n\n\x06\x41RM_V7\x10\x04\"\xb5\x02\n\nIOStrategy\x12K\n\rdownload_mode\x18\x01 \x01(\x0e\x32&.flyteidl.core.IOStrategy.DownloadModeR\x0c\x64ownloadMode\x12\x45\n\x0bupload_mode\x18\x02 \x01(\x0e\x32$.flyteidl.core.IOStrategy.UploadModeR\nuploadMode\"L\n\x0c\x44ownloadMode\x12\x12\n\x0e\x44OWNLOAD_EAGER\x10\x00\x12\x13\n\x0f\x44OWNLOAD_STREAM\x10\x01\x12\x13\n\x0f\x44O_NOT_DOWNLOAD\x10\x02\"E\n\nUploadMode\x12\x12\n\x0eUPLOAD_ON_EXIT\x10\x00\x12\x10\n\x0cUPLOAD_EAGER\x10\x01\x12\x11\n\rDO_NOT_UPLOAD\x10\x02\"\xa7\x02\n\x11\x44\x61taLoadingConfig\x12\x18\n\x07\x65nabled\x18\x01 \x01(\x08R\x07\x65nabled\x12\x1d\n\ninput_path\x18\x02 \x01(\tR\tinputPath\x12\x1f\n\x0boutput_path\x18\x03 \x01(\tR\noutputPath\x12I\n\x06\x66ormat\x18\x04 \x01(\x0e\x32\x31.flyteidl.core.DataLoadingConfig.LiteralMapFormatR\x06\x66ormat\x12:\n\x0bio_strategy\x18\x05 \x01(\x0b\x32\x19.flyteidl.core.IOStrategyR\nioStrategy\"1\n\x10LiteralMapFormat\x12\x08\n\x04JSON\x10\x00\x12\x08\n\x04YAML\x10\x01\x12\t\n\x05PROTO\x10\x02\"\xbd\x01\n\x06K8sPod\x12<\n\x08metadata\x18\x01 \x01(\x0b\x32 .flyteidl.core.K8sObjectMetadataR\x08metadata\x12\x32\n\x08pod_spec\x18\x02 \x01(\x0b\x32\x17.google.protobuf.StructR\x07podSpec\x12\x41\n\x0b\x64\x61ta_config\x18\x03 \x01(\x0b\x32 .flyteidl.core.DataLoadingConfigR\ndataConfig\"\xa9\x02\n\x11K8sObjectMetadata\x12\x44\n\x06labels\x18\x01 \x03(\x0b\x32,.flyteidl.core.K8sObjectMetadata.LabelsEntryR\x06labels\x12S\n\x0b\x61nnotations\x18\x02 \x03(\x0b\x32\x31.flyteidl.core.K8sObjectMetadata.AnnotationsEntryR\x0b\x61nnotations\x1a\x39\n\x0bLabelsEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x1a>\n\x10\x41nnotationsEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\"\x92\x01\n\x03Sql\x12\x1c\n\tstatement\x18\x01 \x01(\tR\tstatement\x12\x34\n\x07\x64ialect\x18\x02 \x01(\x0e\x32\x1a.flyteidl.core.Sql.DialectR\x07\x64ialect\"7\n\x07\x44ialect\x12\r\n\tUNDEFINED\x10\x00\x12\x08\n\x04\x41NSI\x10\x01\x12\x08\n\x04HIVE\x10\x02\x12\t\n\x05OTHER\x10\x03\x42\xb0\x01\n\x11\x63om.flyteidl.coreB\nTasksProtoP\x01Z:github.com/flyteorg/flyte/flyteidl/gen/pb-go/flyteidl/core\xa2\x02\x03\x46\x43X\xaa\x02\rFlyteidl.Core\xca\x02\rFlyteidl\\Core\xe2\x02\x19\x46lyteidl\\Core\\GPBMetadata\xea\x02\x0e\x46lyteidl::Coreb\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -49,43 +49,45 @@ _globals['_EXTENDEDRESOURCES']._serialized_start=716 _globals['_EXTENDEDRESOURCES']._serialized_end=807 _globals['_RUNTIMEMETADATA']._serialized_start=810 - _globals['_RUNTIMEMETADATA']._serialized_end=1020 - _globals['_RUNTIMEMETADATA_RUNTIMETYPE']._serialized_start=981 - _globals['_RUNTIMEMETADATA_RUNTIMETYPE']._serialized_end=1020 - _globals['_TASKMETADATA']._serialized_start=1023 - _globals['_TASKMETADATA']._serialized_end=1652 - _globals['_TASKMETADATA_TAGSENTRY']._serialized_start=1574 - _globals['_TASKMETADATA_TAGSENTRY']._serialized_end=1629 - _globals['_TASKTEMPLATE']._serialized_start=1655 - _globals['_TASKTEMPLATE']._serialized_end=2381 - _globals['_TASKTEMPLATE_CONFIGENTRY']._serialized_start=2314 - _globals['_TASKTEMPLATE_CONFIGENTRY']._serialized_end=2371 - _globals['_CONTAINERPORT']._serialized_start=2383 - _globals['_CONTAINERPORT']._serialized_end=2437 - _globals['_CONTAINER']._serialized_start=2440 - _globals['_CONTAINER']._serialized_end=2948 - _globals['_CONTAINER_ARCHITECTURE']._serialized_start=2875 - _globals['_CONTAINER_ARCHITECTURE']._serialized_end=2948 - _globals['_IOSTRATEGY']._serialized_start=2951 - _globals['_IOSTRATEGY']._serialized_end=3260 - _globals['_IOSTRATEGY_DOWNLOADMODE']._serialized_start=3113 - _globals['_IOSTRATEGY_DOWNLOADMODE']._serialized_end=3189 - _globals['_IOSTRATEGY_UPLOADMODE']._serialized_start=3191 - _globals['_IOSTRATEGY_UPLOADMODE']._serialized_end=3260 - _globals['_DATALOADINGCONFIG']._serialized_start=3263 - _globals['_DATALOADINGCONFIG']._serialized_end=3558 - _globals['_DATALOADINGCONFIG_LITERALMAPFORMAT']._serialized_start=3509 - _globals['_DATALOADINGCONFIG_LITERALMAPFORMAT']._serialized_end=3558 - _globals['_K8SPOD']._serialized_start=3561 - _globals['_K8SPOD']._serialized_end=3750 - _globals['_K8SOBJECTMETADATA']._serialized_start=3753 - _globals['_K8SOBJECTMETADATA']._serialized_end=4050 - _globals['_K8SOBJECTMETADATA_LABELSENTRY']._serialized_start=3929 - _globals['_K8SOBJECTMETADATA_LABELSENTRY']._serialized_end=3986 - _globals['_K8SOBJECTMETADATA_ANNOTATIONSENTRY']._serialized_start=3988 - _globals['_K8SOBJECTMETADATA_ANNOTATIONSENTRY']._serialized_end=4050 - _globals['_SQL']._serialized_start=4053 - _globals['_SQL']._serialized_end=4199 - _globals['_SQL_DIALECT']._serialized_start=4144 - _globals['_SQL_DIALECT']._serialized_end=4199 + _globals['_RUNTIMEMETADATA']._serialized_end=1054 + _globals['_RUNTIMEMETADATA_RUNTIMETYPE']._serialized_start=1015 + _globals['_RUNTIMEMETADATA_RUNTIMETYPE']._serialized_end=1054 + _globals['_PLUGINMETADATA']._serialized_start=1056 + _globals['_PLUGINMETADATA']._serialized_end=1110 + _globals['_TASKMETADATA']._serialized_start=1113 + _globals['_TASKMETADATA']._serialized_end=1742 + _globals['_TASKMETADATA_TAGSENTRY']._serialized_start=1664 + _globals['_TASKMETADATA_TAGSENTRY']._serialized_end=1719 + _globals['_TASKTEMPLATE']._serialized_start=1745 + _globals['_TASKTEMPLATE']._serialized_end=2471 + _globals['_TASKTEMPLATE_CONFIGENTRY']._serialized_start=2404 + _globals['_TASKTEMPLATE_CONFIGENTRY']._serialized_end=2461 + _globals['_CONTAINERPORT']._serialized_start=2473 + _globals['_CONTAINERPORT']._serialized_end=2527 + _globals['_CONTAINER']._serialized_start=2530 + _globals['_CONTAINER']._serialized_end=3038 + _globals['_CONTAINER_ARCHITECTURE']._serialized_start=2965 + _globals['_CONTAINER_ARCHITECTURE']._serialized_end=3038 + _globals['_IOSTRATEGY']._serialized_start=3041 + _globals['_IOSTRATEGY']._serialized_end=3350 + _globals['_IOSTRATEGY_DOWNLOADMODE']._serialized_start=3203 + _globals['_IOSTRATEGY_DOWNLOADMODE']._serialized_end=3279 + _globals['_IOSTRATEGY_UPLOADMODE']._serialized_start=3281 + _globals['_IOSTRATEGY_UPLOADMODE']._serialized_end=3350 + _globals['_DATALOADINGCONFIG']._serialized_start=3353 + _globals['_DATALOADINGCONFIG']._serialized_end=3648 + _globals['_DATALOADINGCONFIG_LITERALMAPFORMAT']._serialized_start=3599 + _globals['_DATALOADINGCONFIG_LITERALMAPFORMAT']._serialized_end=3648 + _globals['_K8SPOD']._serialized_start=3651 + _globals['_K8SPOD']._serialized_end=3840 + _globals['_K8SOBJECTMETADATA']._serialized_start=3843 + _globals['_K8SOBJECTMETADATA']._serialized_end=4140 + _globals['_K8SOBJECTMETADATA_LABELSENTRY']._serialized_start=4019 + _globals['_K8SOBJECTMETADATA_LABELSENTRY']._serialized_end=4076 + _globals['_K8SOBJECTMETADATA_ANNOTATIONSENTRY']._serialized_start=4078 + _globals['_K8SOBJECTMETADATA_ANNOTATIONSENTRY']._serialized_end=4140 + _globals['_SQL']._serialized_start=4143 + _globals['_SQL']._serialized_end=4289 + _globals['_SQL_DIALECT']._serialized_start=4234 + _globals['_SQL_DIALECT']._serialized_end=4289 # @@protoc_insertion_point(module_scope) diff --git a/flyteidl/gen/pb_python/flyteidl/core/tasks_pb2.pyi b/flyteidl/gen/pb_python/flyteidl/core/tasks_pb2.pyi index 05983b257f..30fa5134da 100644 --- a/flyteidl/gen/pb_python/flyteidl/core/tasks_pb2.pyi +++ b/flyteidl/gen/pb_python/flyteidl/core/tasks_pb2.pyi @@ -58,7 +58,7 @@ class ExtendedResources(_message.Message): def __init__(self, gpu_accelerator: _Optional[_Union[GPUAccelerator, _Mapping]] = ...) -> None: ... class RuntimeMetadata(_message.Message): - __slots__ = ["type", "version", "flavor", "is_sync_plugin"] + __slots__ = ["type", "version", "flavor", "plugin_metadata"] class RuntimeType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): __slots__ = [] OTHER: _ClassVar[RuntimeMetadata.RuntimeType] @@ -68,12 +68,18 @@ class RuntimeMetadata(_message.Message): TYPE_FIELD_NUMBER: _ClassVar[int] VERSION_FIELD_NUMBER: _ClassVar[int] FLAVOR_FIELD_NUMBER: _ClassVar[int] - IS_SYNC_PLUGIN_FIELD_NUMBER: _ClassVar[int] + PLUGIN_METADATA_FIELD_NUMBER: _ClassVar[int] type: RuntimeMetadata.RuntimeType version: str flavor: str + plugin_metadata: PluginMetadata + def __init__(self, type: _Optional[_Union[RuntimeMetadata.RuntimeType, str]] = ..., version: _Optional[str] = ..., flavor: _Optional[str] = ..., plugin_metadata: _Optional[_Union[PluginMetadata, _Mapping]] = ...) -> None: ... + +class PluginMetadata(_message.Message): + __slots__ = ["is_sync_plugin"] + IS_SYNC_PLUGIN_FIELD_NUMBER: _ClassVar[int] is_sync_plugin: bool - def __init__(self, type: _Optional[_Union[RuntimeMetadata.RuntimeType, str]] = ..., version: _Optional[str] = ..., flavor: _Optional[str] = ..., is_sync_plugin: bool = ...) -> None: ... + def __init__(self, is_sync_plugin: bool = ...) -> None: ... class TaskMetadata(_message.Message): __slots__ = ["discoverable", "runtime", "timeout", "retries", "discovery_version", "deprecated_error_message", "interruptible", "cache_serializable", "generates_deck", "tags", "pod_template_name"] diff --git a/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/README.md b/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/README.md index e255b6e308..6efb0c01c2 100644 --- a/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/README.md +++ b/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/README.md @@ -315,6 +315,7 @@ Class | Method | HTTP request | Description - [CoreOutputReference](docs/CoreOutputReference.md) - [CoreParameter](docs/CoreParameter.md) - [CoreParameterMap](docs/CoreParameterMap.md) + - [CorePluginMetadata](docs/CorePluginMetadata.md) - [CorePrimitive](docs/CorePrimitive.md) - [CorePromiseAttribute](docs/CorePromiseAttribute.md) - [CoreQualityOfService](docs/CoreQualityOfService.md) diff --git a/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/__init__.py b/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/__init__.py index 18f679a7f0..f939a511bb 100644 --- a/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/__init__.py +++ b/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/__init__.py @@ -206,6 +206,7 @@ from flyteadmin.models.core_output_reference import CoreOutputReference from flyteadmin.models.core_parameter import CoreParameter from flyteadmin.models.core_parameter_map import CoreParameterMap +from flyteadmin.models.core_plugin_metadata import CorePluginMetadata from flyteadmin.models.core_primitive import CorePrimitive from flyteadmin.models.core_promise_attribute import CorePromiseAttribute from flyteadmin.models.core_quality_of_service import CoreQualityOfService diff --git a/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/__init__.py b/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/__init__.py index 457a507c4f..0385a9da43 100644 --- a/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/__init__.py +++ b/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/__init__.py @@ -199,6 +199,7 @@ from flyteadmin.models.core_output_reference import CoreOutputReference from flyteadmin.models.core_parameter import CoreParameter from flyteadmin.models.core_parameter_map import CoreParameterMap +from flyteadmin.models.core_plugin_metadata import CorePluginMetadata from flyteadmin.models.core_primitive import CorePrimitive from flyteadmin.models.core_promise_attribute import CorePromiseAttribute from flyteadmin.models.core_quality_of_service import CoreQualityOfService diff --git a/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/core_plugin_metadata.py b/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/core_plugin_metadata.py new file mode 100644 index 0000000000..e829e7d098 --- /dev/null +++ b/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/core_plugin_metadata.py @@ -0,0 +1,117 @@ +# coding: utf-8 + +""" + flyteidl/service/admin.proto + + No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) # noqa: E501 + + OpenAPI spec version: version not set + + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + + +import pprint +import re # noqa: F401 + +import six + + +class CorePluginMetadata(object): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + + """ + Attributes: + swagger_types (dict): The key is attribute name + and the value is attribute type. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + """ + swagger_types = { + 'is_sync_plugin': 'bool' + } + + attribute_map = { + 'is_sync_plugin': 'is_sync_plugin' + } + + def __init__(self, is_sync_plugin=None): # noqa: E501 + """CorePluginMetadata - a model defined in Swagger""" # noqa: E501 + + self._is_sync_plugin = None + self.discriminator = None + + if is_sync_plugin is not None: + self.is_sync_plugin = is_sync_plugin + + @property + def is_sync_plugin(self): + """Gets the is_sync_plugin of this CorePluginMetadata. # noqa: E501 + + +optional It can be used to decide use sync plugin or async plugin during runtime. # noqa: E501 + + :return: The is_sync_plugin of this CorePluginMetadata. # noqa: E501 + :rtype: bool + """ + return self._is_sync_plugin + + @is_sync_plugin.setter + def is_sync_plugin(self, is_sync_plugin): + """Sets the is_sync_plugin of this CorePluginMetadata. + + +optional It can be used to decide use sync plugin or async plugin during runtime. # noqa: E501 + + :param is_sync_plugin: The is_sync_plugin of this CorePluginMetadata. # noqa: E501 + :type: bool + """ + + self._is_sync_plugin = is_sync_plugin + + def to_dict(self): + """Returns the model properties as a dict""" + result = {} + + for attr, _ in six.iteritems(self.swagger_types): + value = getattr(self, attr) + if isinstance(value, list): + result[attr] = list(map( + lambda x: x.to_dict() if hasattr(x, "to_dict") else x, + value + )) + elif hasattr(value, "to_dict"): + result[attr] = value.to_dict() + elif isinstance(value, dict): + result[attr] = dict(map( + lambda item: (item[0], item[1].to_dict()) + if hasattr(item[1], "to_dict") else item, + value.items() + )) + else: + result[attr] = value + if issubclass(CorePluginMetadata, dict): + for key, value in self.items(): + result[key] = value + + return result + + def to_str(self): + """Returns the string representation of the model""" + return pprint.pformat(self.to_dict()) + + def __repr__(self): + """For `print` and `pprint`""" + return self.to_str() + + def __eq__(self, other): + """Returns true if both objects are equal""" + if not isinstance(other, CorePluginMetadata): + return False + + return self.__dict__ == other.__dict__ + + def __ne__(self, other): + """Returns true if both objects are not equal""" + return not self == other diff --git a/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/core_runtime_metadata.py b/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/core_runtime_metadata.py index 601d4b358e..26f97e81ea 100644 --- a/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/core_runtime_metadata.py +++ b/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/core_runtime_metadata.py @@ -16,6 +16,7 @@ import six +from flyteadmin.models.core_plugin_metadata import CorePluginMetadata # noqa: F401,E501 from flyteadmin.models.runtime_metadata_runtime_type import RuntimeMetadataRuntimeType # noqa: F401,E501 @@ -36,23 +37,23 @@ class CoreRuntimeMetadata(object): 'type': 'RuntimeMetadataRuntimeType', 'version': 'str', 'flavor': 'str', - 'is_sync_plugin': 'bool' + 'plugin_metadata': 'CorePluginMetadata' } attribute_map = { 'type': 'type', 'version': 'version', 'flavor': 'flavor', - 'is_sync_plugin': 'is_sync_plugin' + 'plugin_metadata': 'plugin_metadata' } - def __init__(self, type=None, version=None, flavor=None, is_sync_plugin=None): # noqa: E501 + def __init__(self, type=None, version=None, flavor=None, plugin_metadata=None): # noqa: E501 """CoreRuntimeMetadata - a model defined in Swagger""" # noqa: E501 self._type = None self._version = None self._flavor = None - self._is_sync_plugin = None + self._plugin_metadata = None self.discriminator = None if type is not None: @@ -61,8 +62,8 @@ def __init__(self, type=None, version=None, flavor=None, is_sync_plugin=None): self.version = version if flavor is not None: self.flavor = flavor - if is_sync_plugin is not None: - self.is_sync_plugin = is_sync_plugin + if plugin_metadata is not None: + self.plugin_metadata = plugin_metadata @property def type(self): @@ -134,27 +135,27 @@ def flavor(self, flavor): self._flavor = flavor @property - def is_sync_plugin(self): - """Gets the is_sync_plugin of this CoreRuntimeMetadata. # noqa: E501 + def plugin_metadata(self): + """Gets the plugin_metadata of this CoreRuntimeMetadata. # noqa: E501 - +optional It can be used to decide use sync plugin or async plugin during runtime. # noqa: E501 + +optional It can be used to provide extra information for the plugin. # noqa: E501 - :return: The is_sync_plugin of this CoreRuntimeMetadata. # noqa: E501 - :rtype: bool + :return: The plugin_metadata of this CoreRuntimeMetadata. # noqa: E501 + :rtype: CorePluginMetadata """ - return self._is_sync_plugin + return self._plugin_metadata - @is_sync_plugin.setter - def is_sync_plugin(self, is_sync_plugin): - """Sets the is_sync_plugin of this CoreRuntimeMetadata. + @plugin_metadata.setter + def plugin_metadata(self, plugin_metadata): + """Sets the plugin_metadata of this CoreRuntimeMetadata. - +optional It can be used to decide use sync plugin or async plugin during runtime. # noqa: E501 + +optional It can be used to provide extra information for the plugin. # noqa: E501 - :param is_sync_plugin: The is_sync_plugin of this CoreRuntimeMetadata. # noqa: E501 - :type: bool + :param plugin_metadata: The plugin_metadata of this CoreRuntimeMetadata. # noqa: E501 + :type: CorePluginMetadata """ - self._is_sync_plugin = is_sync_plugin + self._plugin_metadata = plugin_metadata def to_dict(self): """Returns the model properties as a dict""" diff --git a/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/test/test_core_plugin_metadata.py b/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/test/test_core_plugin_metadata.py new file mode 100644 index 0000000000..11d641cbad --- /dev/null +++ b/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/test/test_core_plugin_metadata.py @@ -0,0 +1,40 @@ +# coding: utf-8 + +""" + flyteidl/service/admin.proto + + No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) # noqa: E501 + + OpenAPI spec version: version not set + + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + + +from __future__ import absolute_import + +import unittest + +import flyteadmin +from flyteadmin.models.core_plugin_metadata import CorePluginMetadata # noqa: E501 +from flyteadmin.rest import ApiException + + +class TestCorePluginMetadata(unittest.TestCase): + """CorePluginMetadata unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testCorePluginMetadata(self): + """Test CorePluginMetadata""" + # FIXME: construct object with mandatory attributes with example values + # model = flyteadmin.models.core_plugin_metadata.CorePluginMetadata() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/flyteidl/gen/pb_rust/flyteidl.core.rs b/flyteidl/gen/pb_rust/flyteidl.core.rs index 51f28d6ee6..b3aab26ac5 100644 --- a/flyteidl/gen/pb_rust/flyteidl.core.rs +++ b/flyteidl/gen/pb_rust/flyteidl.core.rs @@ -1067,9 +1067,9 @@ pub struct RuntimeMetadata { /// +optional It can be used to provide extra information about the runtime (e.g. python, golang... etc.). #[prost(string, tag="3")] pub flavor: ::prost::alloc::string::String, - /// +optional It can be used to decide use sync plugin or async plugin during runtime. - #[prost(bool, tag="4")] - pub is_sync_plugin: bool, + /// +optional It can be used to provide extra information for the plugin. + #[prost(message, optional, tag="4")] + pub plugin_metadata: ::core::option::Option, } /// Nested message and enum types in `RuntimeMetadata`. pub mod runtime_metadata { @@ -1100,6 +1100,13 @@ pub mod runtime_metadata { } } } +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct PluginMetadata { + /// +optional It can be used to decide use sync plugin or async plugin during runtime. + #[prost(bool, tag="1")] + pub is_sync_plugin: bool, +} /// Task Metadata #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] diff --git a/flyteidl/protos/flyteidl/core/tasks.proto b/flyteidl/protos/flyteidl/core/tasks.proto index f3f72243be..2311a403a6 100644 --- a/flyteidl/protos/flyteidl/core/tasks.proto +++ b/flyteidl/protos/flyteidl/core/tasks.proto @@ -85,8 +85,13 @@ message RuntimeMetadata { //+optional It can be used to provide extra information about the runtime (e.g. python, golang... etc.). string flavor = 3; + //+optional It can be used to provide extra information for the plugin. + PluginMetadata plugin_metadata = 4; +} + +message PluginMetadata { //+optional It can be used to decide use sync plugin or async plugin during runtime. - bool is_sync_plugin = 4; + bool is_sync_plugin = 1; } // Task Metadata diff --git a/flyteplugins/go/tasks/pluginmachinery/internal/webapi/core.go b/flyteplugins/go/tasks/pluginmachinery/internal/webapi/core.go index 659f794b3f..793b700196 100644 --- a/flyteplugins/go/tasks/pluginmachinery/internal/webapi/core.go +++ b/flyteplugins/go/tasks/pluginmachinery/internal/webapi/core.go @@ -143,7 +143,10 @@ func (c CorePlugin) useSyncPlugin(taskTemplate *flyteIdlCore.TaskTemplate) bool if metadata != nil { runtime := metadata.GetRuntime() if runtime != nil { - return runtime.GetIsSyncPlugin() + pluginMetadata := runtime.GetPluginMetadata() + if pluginMetadata != nil { + return pluginMetadata.GetIsSyncPlugin() + } } } diff --git a/flyteplugins/go/tasks/pluginmachinery/internal/webapi/core_test.go b/flyteplugins/go/tasks/pluginmachinery/internal/webapi/core_test.go index f384f410b2..1bd2eacbe6 100644 --- a/flyteplugins/go/tasks/pluginmachinery/internal/webapi/core_test.go +++ b/flyteplugins/go/tasks/pluginmachinery/internal/webapi/core_test.go @@ -31,7 +31,9 @@ func TestHandle(t *testing.T) { Type: "api_task", Metadata: &flyteIdlCore.TaskMetadata{ Runtime: &flyteIdlCore.RuntimeMetadata{ - IsSyncPlugin: true, + PluginMetadata: &flyteIdlCore.PluginMetadata{ + IsSyncPlugin: true, + }, }, }, } diff --git a/flyteplugins/go/tasks/plugins/webapi/agent/plugin_test.go b/flyteplugins/go/tasks/plugins/webapi/agent/plugin_test.go index ece757055f..a80b3faf93 100644 --- a/flyteplugins/go/tasks/plugins/webapi/agent/plugin_test.go +++ b/flyteplugins/go/tasks/plugins/webapi/agent/plugin_test.go @@ -30,7 +30,9 @@ func TestDo(t *testing.T) { Type: "api_task", Metadata: &flyteIdlCore.TaskMetadata{ Runtime: &flyteIdlCore.RuntimeMetadata{ - IsSyncPlugin: true, + PluginMetadata: &flyteIdlCore.PluginMetadata{ + IsSyncPlugin: true, + }, }, }, } From f0b32c52a94410bf6441e3173114cdcb1e188733 Mon Sep 17 00:00:00 2001 From: Future Outlier Date: Wed, 13 Dec 2023 22:58:22 +0800 Subject: [PATCH 35/48] update proto Signed-off-by: Future Outlier --- .../gen/pb-cpp/flyteidl/admin/agent.pb.cc | 1199 +--- flyteidl/gen/pb-cpp/flyteidl/admin/agent.pb.h | 734 +- .../pb-cpp/flyteidl/service/agent.grpc.pb.cc | 151 +- .../pb-cpp/flyteidl/service/agent.grpc.pb.h | 218 +- .../gen/pb-cpp/flyteidl/service/agent.pb.cc | 24 +- flyteidl/gen/pb-go/flyteidl/admin/agent.pb.go | 276 +- .../pb-go/flyteidl/admin/agent.pb.validate.go | 206 +- .../gen/pb-go/flyteidl/service/agent.pb.go | 175 +- .../pb-go/flyteidl/service/agent.swagger.json | 21 +- .../gen/pb-go/flyteidl/service/openapi.go | 2 +- .../gen/pb-java/flyteidl/admin/Agent.java | 6192 +++++++---------- .../gen/pb-java/flyteidl/service/Agent.java | 22 +- flyteidl/gen/pb-js/flyteidl.d.ts | 206 +- flyteidl/gen/pb-js/flyteidl.js | 473 +- .../gen/pb_python/flyteidl/admin/agent_pb2.py | 34 +- .../pb_python/flyteidl/admin/agent_pb2.pyi | 26 +- .../pb_python/flyteidl/service/agent_pb2.py | 8 +- .../flyteidl/service/agent_pb2_grpc.py | 93 +- flyteidl/gen/pb_rust/flyteidl.admin.rs | 46 +- flyteidl/protos/flyteidl/admin/agent.proto | 29 +- flyteidl/protos/flyteidl/service/agent.proto | 10 +- .../tasks/plugins/webapi/agent/config_test.go | 3 - .../plugins/webapi/agent/integration_test.go | 86 +- .../go/tasks/plugins/webapi/agent/plugin.go | 50 +- .../tasks/plugins/webapi/agent/plugin_test.go | 31 +- 25 files changed, 3474 insertions(+), 6841 deletions(-) diff --git a/flyteidl/gen/pb-cpp/flyteidl/admin/agent.pb.cc b/flyteidl/gen/pb-cpp/flyteidl/admin/agent.pb.cc index 572950698c..a8f65335cf 100644 --- a/flyteidl/gen/pb-cpp/flyteidl/admin/agent.pb.cc +++ b/flyteidl/gen/pb-cpp/flyteidl/admin/agent.pb.cc @@ -50,6 +50,8 @@ class CreateTaskRequestDefaultTypeInternal { class CreateTaskResponseDefaultTypeInternal { public: ::google::protobuf::internal::ExplicitlyConstructed _instance; + ::google::protobuf::internal::ArenaStringPtr resource_meta_; + const ::flyteidl::admin::Resource* resource_; } _CreateTaskResponse_default_instance_; class GetTaskRequestDefaultTypeInternal { public: @@ -71,14 +73,6 @@ class DeleteTaskResponseDefaultTypeInternal { public: ::google::protobuf::internal::ExplicitlyConstructed _instance; } _DeleteTaskResponse_default_instance_; -class DoTaskRequestDefaultTypeInternal { - public: - ::google::protobuf::internal::ExplicitlyConstructed _instance; -} _DoTaskRequest_default_instance_; -class DoTaskResponseDefaultTypeInternal { - public: - ::google::protobuf::internal::ExplicitlyConstructed _instance; -} _DoTaskResponse_default_instance_; } // namespace admin } // namespace flyteidl static void InitDefaultsTaskExecutionMetadata_LabelsEntry_DoNotUse_flyteidl_2fadmin_2fagent_2eproto() { @@ -166,8 +160,10 @@ static void InitDefaultsCreateTaskResponse_flyteidl_2fadmin_2fagent_2eproto() { ::flyteidl::admin::CreateTaskResponse::InitAsDefaultInstance(); } -::google::protobuf::internal::SCCInfo<0> scc_info_CreateTaskResponse_flyteidl_2fadmin_2fagent_2eproto = - {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 0, InitDefaultsCreateTaskResponse_flyteidl_2fadmin_2fagent_2eproto}, {}}; +::google::protobuf::internal::SCCInfo<2> scc_info_CreateTaskResponse_flyteidl_2fadmin_2fagent_2eproto = + {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 2, InitDefaultsCreateTaskResponse_flyteidl_2fadmin_2fagent_2eproto}, { + &scc_info_Resource_flyteidl_2fadmin_2fagent_2eproto.base, + &scc_info_TaskLog_flyteidl_2fcore_2fexecution_2eproto.base,}}; static void InitDefaultsGetTaskRequest_flyteidl_2fadmin_2fagent_2eproto() { GOOGLE_PROTOBUF_VERIFY_VERSION; @@ -242,38 +238,6 @@ static void InitDefaultsDeleteTaskResponse_flyteidl_2fadmin_2fagent_2eproto() { ::google::protobuf::internal::SCCInfo<0> scc_info_DeleteTaskResponse_flyteidl_2fadmin_2fagent_2eproto = {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 0, InitDefaultsDeleteTaskResponse_flyteidl_2fadmin_2fagent_2eproto}, {}}; -static void InitDefaultsDoTaskRequest_flyteidl_2fadmin_2fagent_2eproto() { - GOOGLE_PROTOBUF_VERIFY_VERSION; - - { - void* ptr = &::flyteidl::admin::_DoTaskRequest_default_instance_; - new (ptr) ::flyteidl::admin::DoTaskRequest(); - ::google::protobuf::internal::OnShutdownDestroyMessage(ptr); - } - ::flyteidl::admin::DoTaskRequest::InitAsDefaultInstance(); -} - -::google::protobuf::internal::SCCInfo<3> scc_info_DoTaskRequest_flyteidl_2fadmin_2fagent_2eproto = - {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 3, InitDefaultsDoTaskRequest_flyteidl_2fadmin_2fagent_2eproto}, { - &scc_info_Literal_flyteidl_2fcore_2fliterals_2eproto.base, - &scc_info_TaskTemplate_flyteidl_2fcore_2ftasks_2eproto.base, - &scc_info_TaskExecutionMetadata_flyteidl_2fadmin_2fagent_2eproto.base,}}; - -static void InitDefaultsDoTaskResponse_flyteidl_2fadmin_2fagent_2eproto() { - GOOGLE_PROTOBUF_VERIFY_VERSION; - - { - void* ptr = &::flyteidl::admin::_DoTaskResponse_default_instance_; - new (ptr) ::flyteidl::admin::DoTaskResponse(); - ::google::protobuf::internal::OnShutdownDestroyMessage(ptr); - } - ::flyteidl::admin::DoTaskResponse::InitAsDefaultInstance(); -} - -::google::protobuf::internal::SCCInfo<1> scc_info_DoTaskResponse_flyteidl_2fadmin_2fagent_2eproto = - {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 1, InitDefaultsDoTaskResponse_flyteidl_2fadmin_2fagent_2eproto}, { - &scc_info_Resource_flyteidl_2fadmin_2fagent_2eproto.base,}}; - void InitDefaults_flyteidl_2fadmin_2fagent_2eproto() { ::google::protobuf::internal::InitSCC(&scc_info_TaskExecutionMetadata_LabelsEntry_DoNotUse_flyteidl_2fadmin_2fagent_2eproto.base); ::google::protobuf::internal::InitSCC(&scc_info_TaskExecutionMetadata_AnnotationsEntry_DoNotUse_flyteidl_2fadmin_2fagent_2eproto.base); @@ -286,11 +250,9 @@ void InitDefaults_flyteidl_2fadmin_2fagent_2eproto() { ::google::protobuf::internal::InitSCC(&scc_info_Resource_flyteidl_2fadmin_2fagent_2eproto.base); ::google::protobuf::internal::InitSCC(&scc_info_DeleteTaskRequest_flyteidl_2fadmin_2fagent_2eproto.base); ::google::protobuf::internal::InitSCC(&scc_info_DeleteTaskResponse_flyteidl_2fadmin_2fagent_2eproto.base); - ::google::protobuf::internal::InitSCC(&scc_info_DoTaskRequest_flyteidl_2fadmin_2fagent_2eproto.base); - ::google::protobuf::internal::InitSCC(&scc_info_DoTaskResponse_flyteidl_2fadmin_2fagent_2eproto.base); } -::google::protobuf::Metadata file_level_metadata_flyteidl_2fadmin_2fagent_2eproto[13]; +::google::protobuf::Metadata file_level_metadata_flyteidl_2fadmin_2fagent_2eproto[11]; const ::google::protobuf::EnumDescriptor* file_level_enum_descriptors_flyteidl_2fadmin_2fagent_2eproto[1]; constexpr ::google::protobuf::ServiceDescriptor const** file_level_service_descriptors_flyteidl_2fadmin_2fagent_2eproto = nullptr; @@ -345,9 +307,12 @@ const ::google::protobuf::uint32 TableStruct_flyteidl_2fadmin_2fagent_2eproto::o ~0u, // no _has_bits_ PROTOBUF_FIELD_OFFSET(::flyteidl::admin::CreateTaskResponse, _internal_metadata_), ~0u, // no _extensions_ - ~0u, // no _oneof_case_ + PROTOBUF_FIELD_OFFSET(::flyteidl::admin::CreateTaskResponse, _oneof_case_[0]), ~0u, // no _weak_field_map_ - PROTOBUF_FIELD_OFFSET(::flyteidl::admin::CreateTaskResponse, resource_meta_), + offsetof(::flyteidl::admin::CreateTaskResponseDefaultTypeInternal, resource_meta_), + offsetof(::flyteidl::admin::CreateTaskResponseDefaultTypeInternal, resource_), + PROTOBUF_FIELD_OFFSET(::flyteidl::admin::CreateTaskResponse, log_links_), + PROTOBUF_FIELD_OFFSET(::flyteidl::admin::CreateTaskResponse, res_), ~0u, // no _has_bits_ PROTOBUF_FIELD_OFFSET(::flyteidl::admin::GetTaskRequest, _internal_metadata_), ~0u, // no _extensions_ @@ -382,21 +347,6 @@ const ::google::protobuf::uint32 TableStruct_flyteidl_2fadmin_2fagent_2eproto::o ~0u, // no _extensions_ ~0u, // no _oneof_case_ ~0u, // no _weak_field_map_ - ~0u, // no _has_bits_ - PROTOBUF_FIELD_OFFSET(::flyteidl::admin::DoTaskRequest, _internal_metadata_), - ~0u, // no _extensions_ - ~0u, // no _oneof_case_ - ~0u, // no _weak_field_map_ - PROTOBUF_FIELD_OFFSET(::flyteidl::admin::DoTaskRequest, inputs_), - PROTOBUF_FIELD_OFFSET(::flyteidl::admin::DoTaskRequest, template__), - PROTOBUF_FIELD_OFFSET(::flyteidl::admin::DoTaskRequest, output_prefix_), - PROTOBUF_FIELD_OFFSET(::flyteidl::admin::DoTaskRequest, task_execution_metadata_), - ~0u, // no _has_bits_ - PROTOBUF_FIELD_OFFSET(::flyteidl::admin::DoTaskResponse, _internal_metadata_), - ~0u, // no _extensions_ - ~0u, // no _oneof_case_ - ~0u, // no _weak_field_map_ - PROTOBUF_FIELD_OFFSET(::flyteidl::admin::DoTaskResponse, resource_), }; static const ::google::protobuf::internal::MigrationSchema schemas[] PROTOBUF_SECTION_VARIABLE(protodesc_cold) = { { 0, 7, sizeof(::flyteidl::admin::TaskExecutionMetadata_LabelsEntry_DoNotUse)}, @@ -405,13 +355,11 @@ static const ::google::protobuf::internal::MigrationSchema schemas[] PROTOBUF_SE { 27, -1, sizeof(::flyteidl::admin::TaskExecutionMetadata)}, { 38, -1, sizeof(::flyteidl::admin::CreateTaskRequest)}, { 47, -1, sizeof(::flyteidl::admin::CreateTaskResponse)}, - { 53, -1, sizeof(::flyteidl::admin::GetTaskRequest)}, - { 60, -1, sizeof(::flyteidl::admin::GetTaskResponse)}, - { 67, -1, sizeof(::flyteidl::admin::Resource)}, - { 75, -1, sizeof(::flyteidl::admin::DeleteTaskRequest)}, - { 82, -1, sizeof(::flyteidl::admin::DeleteTaskResponse)}, - { 87, -1, sizeof(::flyteidl::admin::DoTaskRequest)}, - { 96, -1, sizeof(::flyteidl::admin::DoTaskResponse)}, + { 56, -1, sizeof(::flyteidl::admin::GetTaskRequest)}, + { 63, -1, sizeof(::flyteidl::admin::GetTaskResponse)}, + { 70, -1, sizeof(::flyteidl::admin::Resource)}, + { 78, -1, sizeof(::flyteidl::admin::DeleteTaskRequest)}, + { 85, -1, sizeof(::flyteidl::admin::DeleteTaskResponse)}, }; static ::google::protobuf::Message const * const file_default_instances[] = { @@ -426,14 +374,12 @@ static ::google::protobuf::Message const * const file_default_instances[] = { reinterpret_cast(&::flyteidl::admin::_Resource_default_instance_), reinterpret_cast(&::flyteidl::admin::_DeleteTaskRequest_default_instance_), reinterpret_cast(&::flyteidl::admin::_DeleteTaskResponse_default_instance_), - reinterpret_cast(&::flyteidl::admin::_DoTaskRequest_default_instance_), - reinterpret_cast(&::flyteidl::admin::_DoTaskResponse_default_instance_), }; ::google::protobuf::internal::AssignDescriptorsTable assign_descriptors_table_flyteidl_2fadmin_2fagent_2eproto = { {}, AddDescriptors_flyteidl_2fadmin_2fagent_2eproto, "flyteidl/admin/agent.proto", schemas, file_default_instances, TableStruct_flyteidl_2fadmin_2fagent_2eproto::offsets, - file_level_metadata_flyteidl_2fadmin_2fagent_2eproto, 13, file_level_enum_descriptors_flyteidl_2fadmin_2fagent_2eproto, file_level_service_descriptors_flyteidl_2fadmin_2fagent_2eproto, + file_level_metadata_flyteidl_2fadmin_2fagent_2eproto, 11, file_level_enum_descriptors_flyteidl_2fadmin_2fagent_2eproto, file_level_service_descriptors_flyteidl_2fadmin_2fagent_2eproto, }; const char descriptor_table_protodef_flyteidl_2fadmin_2fagent_2eproto[] = @@ -460,33 +406,29 @@ const char descriptor_table_protodef_flyteidl_2fadmin_2fagent_2eproto[] = "p\022-\n\010template\030\002 \001(\0132\033.flyteidl.core.Task" "Template\022\025\n\routput_prefix\030\003 \001(\t\022F\n\027task_" "execution_metadata\030\004 \001(\0132%.flyteidl.admi" - "n.TaskExecutionMetadata\"+\n\022CreateTaskRes" - "ponse\022\025\n\rresource_meta\030\001 \001(\014\":\n\016GetTaskR" - "equest\022\021\n\ttask_type\030\001 \001(\t\022\025\n\rresource_me" - "ta\030\002 \001(\014\"h\n\017GetTaskResponse\022*\n\010resource\030" - "\001 \001(\0132\030.flyteidl.admin.Resource\022)\n\tlog_l" - "inks\030\002 \003(\0132\026.flyteidl.core.TaskLog\"m\n\010Re" - "source\022$\n\005state\030\001 \001(\0162\025.flyteidl.admin.S" - "tate\022*\n\007outputs\030\002 \001(\0132\031.flyteidl.core.Li" - "teralMap\022\017\n\007message\030\003 \001(\t\"=\n\021DeleteTaskR" - "equest\022\021\n\ttask_type\030\001 \001(\t\022\025\n\rresource_me" - "ta\030\002 \001(\014\"\024\n\022DeleteTaskResponse\"\310\001\n\rDoTas" - "kRequest\022)\n\006inputs\030\001 \001(\0132\031.flyteidl.core" - ".LiteralMap\022-\n\010template\030\002 \001(\0132\033.flyteidl" - ".core.TaskTemplate\022\025\n\routput_prefix\030\003 \001(" - "\t\022F\n\027task_execution_metadata\030\004 \001(\0132%.fly" - "teidl.admin.TaskExecutionMetadata\"<\n\016DoT" - "askResponse\022*\n\010resource\030\001 \001(\0132\030.flyteidl" - ".admin.Resource*^\n\005State\022\025\n\021RETRYABLE_FA" - "ILURE\020\000\022\025\n\021PERMANENT_FAILURE\020\001\022\013\n\007PENDIN" - "G\020\002\022\013\n\007RUNNING\020\003\022\r\n\tSUCCEEDED\020\004B=Z;githu" - "b.com/flyteorg/flyte/flyteidl/gen/pb-go/" - "flyteidl/adminb\006proto3" + "n.TaskExecutionMetadata\"\215\001\n\022CreateTaskRe" + "sponse\022\027\n\rresource_meta\030\001 \001(\014H\000\022,\n\010resou" + "rce\030\002 \001(\0132\030.flyteidl.admin.ResourceH\000\022)\n" + "\tlog_links\030\003 \003(\0132\026.flyteidl.core.TaskLog" + "B\005\n\003res\":\n\016GetTaskRequest\022\021\n\ttask_type\030\001" + " \001(\t\022\025\n\rresource_meta\030\002 \001(\014\"h\n\017GetTaskRe" + "sponse\022*\n\010resource\030\001 \001(\0132\030.flyteidl.admi" + "n.Resource\022)\n\tlog_links\030\002 \003(\0132\026.flyteidl" + ".core.TaskLog\"m\n\010Resource\022$\n\005state\030\001 \001(\016" + "2\025.flyteidl.admin.State\022*\n\007outputs\030\002 \001(\013" + "2\031.flyteidl.core.LiteralMap\022\017\n\007message\030\003" + " \001(\t\"=\n\021DeleteTaskRequest\022\021\n\ttask_type\030\001" + " \001(\t\022\025\n\rresource_meta\030\002 \001(\014\"\024\n\022DeleteTas" + "kResponse*^\n\005State\022\025\n\021RETRYABLE_FAILURE\020" + "\000\022\025\n\021PERMANENT_FAILURE\020\001\022\013\n\007PENDING\020\002\022\013\n" + "\007RUNNING\020\003\022\r\n\tSUCCEEDED\020\004B=Z;github.com/" + "flyteorg/flyte/flyteidl/gen/pb-go/flytei" + "dl/adminb\006proto3" ; ::google::protobuf::internal::DescriptorTable descriptor_table_flyteidl_2fadmin_2fagent_2eproto = { false, InitDefaults_flyteidl_2fadmin_2fagent_2eproto, descriptor_table_protodef_flyteidl_2fadmin_2fagent_2eproto, - "flyteidl/admin/agent.proto", &assign_descriptors_table_flyteidl_2fadmin_2fagent_2eproto, 1782, + "flyteidl/admin/agent.proto", &assign_descriptors_table_flyteidl_2fadmin_2fagent_2eproto, 1616, }; void AddDescriptors_flyteidl_2fadmin_2fagent_2eproto() { @@ -2088,13 +2030,41 @@ ::google::protobuf::Metadata CreateTaskRequest::GetMetadata() const { // =================================================================== void CreateTaskResponse::InitAsDefaultInstance() { + ::flyteidl::admin::_CreateTaskResponse_default_instance_.resource_meta_.UnsafeSetDefault( + &::google::protobuf::internal::GetEmptyStringAlreadyInited()); + ::flyteidl::admin::_CreateTaskResponse_default_instance_.resource_ = const_cast< ::flyteidl::admin::Resource*>( + ::flyteidl::admin::Resource::internal_default_instance()); } class CreateTaskResponse::HasBitSetters { public: + static const ::flyteidl::admin::Resource& resource(const CreateTaskResponse* msg); }; +const ::flyteidl::admin::Resource& +CreateTaskResponse::HasBitSetters::resource(const CreateTaskResponse* msg) { + return *msg->res_.resource_; +} +void CreateTaskResponse::set_allocated_resource(::flyteidl::admin::Resource* resource) { + ::google::protobuf::Arena* message_arena = GetArenaNoVirtual(); + clear_res(); + if (resource) { + ::google::protobuf::Arena* submessage_arena = nullptr; + if (message_arena != submessage_arena) { + resource = ::google::protobuf::internal::GetOwnedMessage( + message_arena, resource, submessage_arena); + } + set_has_resource(); + res_.resource_ = resource; + } + // @@protoc_insertion_point(field_set_allocated:flyteidl.admin.CreateTaskResponse.resource) +} +void CreateTaskResponse::clear_log_links() { + log_links_.Clear(); +} #if !defined(_MSC_VER) || _MSC_VER >= 1900 const int CreateTaskResponse::kResourceMetaFieldNumber; +const int CreateTaskResponse::kResourceFieldNumber; +const int CreateTaskResponse::kLogLinksFieldNumber; #endif // !defined(_MSC_VER) || _MSC_VER >= 1900 CreateTaskResponse::CreateTaskResponse() @@ -2104,11 +2074,22 @@ CreateTaskResponse::CreateTaskResponse() } CreateTaskResponse::CreateTaskResponse(const CreateTaskResponse& from) : ::google::protobuf::Message(), - _internal_metadata_(nullptr) { + _internal_metadata_(nullptr), + log_links_(from.log_links_) { _internal_metadata_.MergeFrom(from._internal_metadata_); - resource_meta_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - if (from.resource_meta().size() > 0) { - resource_meta_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.resource_meta_); + clear_has_res(); + switch (from.res_case()) { + case kResourceMeta: { + set_resource_meta(from.resource_meta()); + break; + } + case kResource: { + mutable_resource()->::flyteidl::admin::Resource::MergeFrom(from.resource()); + break; + } + case RES_NOT_SET: { + break; + } } // @@protoc_insertion_point(copy_constructor:flyteidl.admin.CreateTaskResponse) } @@ -2116,7 +2097,7 @@ CreateTaskResponse::CreateTaskResponse(const CreateTaskResponse& from) void CreateTaskResponse::SharedCtor() { ::google::protobuf::internal::InitSCC( &scc_info_CreateTaskResponse_flyteidl_2fadmin_2fagent_2eproto.base); - resource_meta_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + clear_has_res(); } CreateTaskResponse::~CreateTaskResponse() { @@ -2125,7 +2106,9 @@ CreateTaskResponse::~CreateTaskResponse() { } void CreateTaskResponse::SharedDtor() { - resource_meta_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + if (has_res()) { + clear_res(); + } } void CreateTaskResponse::SetCachedSize(int size) const { @@ -2137,13 +2120,33 @@ const CreateTaskResponse& CreateTaskResponse::default_instance() { } +void CreateTaskResponse::clear_res() { +// @@protoc_insertion_point(one_of_clear_start:flyteidl.admin.CreateTaskResponse) + switch (res_case()) { + case kResourceMeta: { + res_.resource_meta_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + break; + } + case kResource: { + delete res_.resource_; + break; + } + case RES_NOT_SET: { + break; + } + } + _oneof_case_[0] = RES_NOT_SET; +} + + void CreateTaskResponse::Clear() { // @@protoc_insertion_point(message_clear_start:flyteidl.admin.CreateTaskResponse) ::google::protobuf::uint32 cached_has_bits = 0; // Prevent compiler warnings about cached_has_bits being unused (void) cached_has_bits; - resource_meta_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + log_links_.Clear(); + clear_res(); _internal_metadata_.Clear(); } @@ -2175,6 +2178,35 @@ const char* CreateTaskResponse::_InternalParse(const char* begin, const char* en ptr += size; break; } + // .flyteidl.admin.Resource resource = 2; + case 2: { + if (static_cast<::google::protobuf::uint8>(tag) != 18) goto handle_unusual; + ptr = ::google::protobuf::io::ReadSize(ptr, &size); + GOOGLE_PROTOBUF_PARSER_ASSERT(ptr); + parser_till_end = ::flyteidl::admin::Resource::_InternalParse; + object = msg->mutable_resource(); + if (size > end - ptr) goto len_delim_till_end; + ptr += size; + GOOGLE_PROTOBUF_PARSER_ASSERT(ctx->ParseExactRange( + {parser_till_end, object}, ptr - size, ptr)); + break; + } + // repeated .flyteidl.core.TaskLog log_links = 3; + case 3: { + if (static_cast<::google::protobuf::uint8>(tag) != 26) goto handle_unusual; + do { + ptr = ::google::protobuf::io::ReadSize(ptr, &size); + GOOGLE_PROTOBUF_PARSER_ASSERT(ptr); + parser_till_end = ::flyteidl::core::TaskLog::_InternalParse; + object = msg->add_log_links(); + if (size > end - ptr) goto len_delim_till_end; + ptr += size; + GOOGLE_PROTOBUF_PARSER_ASSERT(ctx->ParseExactRange( + {parser_till_end, object}, ptr - size, ptr)); + if (ptr >= end) break; + } while ((::google::protobuf::io::UnalignedLoad<::google::protobuf::uint64>(ptr) & 255) == 26 && (ptr += 1)); + break; + } default: { handle_unusual: if ((tag & 7) == 4 || tag == 0) { @@ -2220,6 +2252,28 @@ bool CreateTaskResponse::MergePartialFromCodedStream( break; } + // .flyteidl.admin.Resource resource = 2; + case 2: { + if (static_cast< ::google::protobuf::uint8>(tag) == (18 & 0xFF)) { + DO_(::google::protobuf::internal::WireFormatLite::ReadMessage( + input, mutable_resource())); + } else { + goto handle_unusual; + } + break; + } + + // repeated .flyteidl.core.TaskLog log_links = 3; + case 3: { + if (static_cast< ::google::protobuf::uint8>(tag) == (26 & 0xFF)) { + DO_(::google::protobuf::internal::WireFormatLite::ReadMessage( + input, add_log_links())); + } else { + goto handle_unusual; + } + break; + } + default: { handle_unusual: if (tag == 0) { @@ -2248,11 +2302,26 @@ void CreateTaskResponse::SerializeWithCachedSizes( (void) cached_has_bits; // bytes resource_meta = 1; - if (this->resource_meta().size() > 0) { + if (has_resource_meta()) { ::google::protobuf::internal::WireFormatLite::WriteBytesMaybeAliased( 1, this->resource_meta(), output); } + // .flyteidl.admin.Resource resource = 2; + if (has_resource()) { + ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray( + 2, HasBitSetters::resource(this), output); + } + + // repeated .flyteidl.core.TaskLog log_links = 3; + for (unsigned int i = 0, + n = static_cast(this->log_links_size()); i < n; i++) { + ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray( + 3, + this->log_links(static_cast(i)), + output); + } + if (_internal_metadata_.have_unknown_fields()) { ::google::protobuf::internal::WireFormat::SerializeUnknownFields( _internal_metadata_.unknown_fields(), output); @@ -2267,12 +2336,27 @@ ::google::protobuf::uint8* CreateTaskResponse::InternalSerializeWithCachedSizesT (void) cached_has_bits; // bytes resource_meta = 1; - if (this->resource_meta().size() > 0) { + if (has_resource_meta()) { target = ::google::protobuf::internal::WireFormatLite::WriteBytesToArray( 1, this->resource_meta(), target); } + // .flyteidl.admin.Resource resource = 2; + if (has_resource()) { + target = ::google::protobuf::internal::WireFormatLite:: + InternalWriteMessageToArray( + 2, HasBitSetters::resource(this), target); + } + + // repeated .flyteidl.core.TaskLog log_links = 3; + for (unsigned int i = 0, + n = static_cast(this->log_links_size()); i < n; i++) { + target = ::google::protobuf::internal::WireFormatLite:: + InternalWriteMessageToArray( + 3, this->log_links(static_cast(i)), target); + } + if (_internal_metadata_.have_unknown_fields()) { target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray( _internal_metadata_.unknown_fields(), target); @@ -2294,13 +2378,36 @@ size_t CreateTaskResponse::ByteSizeLong() const { // Prevent compiler warnings about cached_has_bits being unused (void) cached_has_bits; - // bytes resource_meta = 1; - if (this->resource_meta().size() > 0) { - total_size += 1 + - ::google::protobuf::internal::WireFormatLite::BytesSize( - this->resource_meta()); + // repeated .flyteidl.core.TaskLog log_links = 3; + { + unsigned int count = static_cast(this->log_links_size()); + total_size += 1UL * count; + for (unsigned int i = 0; i < count; i++) { + total_size += + ::google::protobuf::internal::WireFormatLite::MessageSize( + this->log_links(static_cast(i))); + } } + switch (res_case()) { + // bytes resource_meta = 1; + case kResourceMeta: { + total_size += 1 + + ::google::protobuf::internal::WireFormatLite::BytesSize( + this->resource_meta()); + break; + } + // .flyteidl.admin.Resource resource = 2; + case kResource: { + total_size += 1 + + ::google::protobuf::internal::WireFormatLite::MessageSize( + *res_.resource_); + break; + } + case RES_NOT_SET: { + break; + } + } int cached_size = ::google::protobuf::internal::ToCachedSize(total_size); SetCachedSize(cached_size); return total_size; @@ -2328,9 +2435,19 @@ void CreateTaskResponse::MergeFrom(const CreateTaskResponse& from) { ::google::protobuf::uint32 cached_has_bits = 0; (void) cached_has_bits; - if (from.resource_meta().size() > 0) { - - resource_meta_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.resource_meta_); + log_links_.MergeFrom(from.log_links_); + switch (from.res_case()) { + case kResourceMeta: { + set_resource_meta(from.resource_meta()); + break; + } + case kResource: { + mutable_resource()->::flyteidl::admin::Resource::MergeFrom(from.resource()); + break; + } + case RES_NOT_SET: { + break; + } } } @@ -2359,8 +2476,9 @@ void CreateTaskResponse::Swap(CreateTaskResponse* other) { void CreateTaskResponse::InternalSwap(CreateTaskResponse* other) { using std::swap; _internal_metadata_.Swap(&other->_internal_metadata_); - resource_meta_.Swap(&other->resource_meta_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(), - GetArenaNoVirtual()); + CastToBase(&log_links_)->InternalSwap(CastToBase(&other->log_links_)); + swap(res_, other->res_); + swap(_oneof_case_[0], other->_oneof_case_[0]); } ::google::protobuf::Metadata CreateTaskResponse::GetMetadata() const { @@ -4061,847 +4179,44 @@ ::google::protobuf::Metadata DeleteTaskResponse::GetMetadata() const { } -// =================================================================== - -void DoTaskRequest::InitAsDefaultInstance() { - ::flyteidl::admin::_DoTaskRequest_default_instance_._instance.get_mutable()->inputs_ = const_cast< ::flyteidl::core::LiteralMap*>( - ::flyteidl::core::LiteralMap::internal_default_instance()); - ::flyteidl::admin::_DoTaskRequest_default_instance_._instance.get_mutable()->template__ = const_cast< ::flyteidl::core::TaskTemplate*>( - ::flyteidl::core::TaskTemplate::internal_default_instance()); - ::flyteidl::admin::_DoTaskRequest_default_instance_._instance.get_mutable()->task_execution_metadata_ = const_cast< ::flyteidl::admin::TaskExecutionMetadata*>( - ::flyteidl::admin::TaskExecutionMetadata::internal_default_instance()); -} -class DoTaskRequest::HasBitSetters { - public: - static const ::flyteidl::core::LiteralMap& inputs(const DoTaskRequest* msg); - static const ::flyteidl::core::TaskTemplate& template_(const DoTaskRequest* msg); - static const ::flyteidl::admin::TaskExecutionMetadata& task_execution_metadata(const DoTaskRequest* msg); -}; - -const ::flyteidl::core::LiteralMap& -DoTaskRequest::HasBitSetters::inputs(const DoTaskRequest* msg) { - return *msg->inputs_; -} -const ::flyteidl::core::TaskTemplate& -DoTaskRequest::HasBitSetters::template_(const DoTaskRequest* msg) { - return *msg->template__; -} -const ::flyteidl::admin::TaskExecutionMetadata& -DoTaskRequest::HasBitSetters::task_execution_metadata(const DoTaskRequest* msg) { - return *msg->task_execution_metadata_; +// @@protoc_insertion_point(namespace_scope) +} // namespace admin +} // namespace flyteidl +namespace google { +namespace protobuf { +template<> PROTOBUF_NOINLINE ::flyteidl::admin::TaskExecutionMetadata_LabelsEntry_DoNotUse* Arena::CreateMaybeMessage< ::flyteidl::admin::TaskExecutionMetadata_LabelsEntry_DoNotUse >(Arena* arena) { + return Arena::CreateInternal< ::flyteidl::admin::TaskExecutionMetadata_LabelsEntry_DoNotUse >(arena); } -void DoTaskRequest::clear_inputs() { - if (GetArenaNoVirtual() == nullptr && inputs_ != nullptr) { - delete inputs_; - } - inputs_ = nullptr; +template<> PROTOBUF_NOINLINE ::flyteidl::admin::TaskExecutionMetadata_AnnotationsEntry_DoNotUse* Arena::CreateMaybeMessage< ::flyteidl::admin::TaskExecutionMetadata_AnnotationsEntry_DoNotUse >(Arena* arena) { + return Arena::CreateInternal< ::flyteidl::admin::TaskExecutionMetadata_AnnotationsEntry_DoNotUse >(arena); } -void DoTaskRequest::clear_template_() { - if (GetArenaNoVirtual() == nullptr && template__ != nullptr) { - delete template__; - } - template__ = nullptr; +template<> PROTOBUF_NOINLINE ::flyteidl::admin::TaskExecutionMetadata_EnvironmentVariablesEntry_DoNotUse* Arena::CreateMaybeMessage< ::flyteidl::admin::TaskExecutionMetadata_EnvironmentVariablesEntry_DoNotUse >(Arena* arena) { + return Arena::CreateInternal< ::flyteidl::admin::TaskExecutionMetadata_EnvironmentVariablesEntry_DoNotUse >(arena); } -#if !defined(_MSC_VER) || _MSC_VER >= 1900 -const int DoTaskRequest::kInputsFieldNumber; -const int DoTaskRequest::kTemplateFieldNumber; -const int DoTaskRequest::kOutputPrefixFieldNumber; -const int DoTaskRequest::kTaskExecutionMetadataFieldNumber; -#endif // !defined(_MSC_VER) || _MSC_VER >= 1900 - -DoTaskRequest::DoTaskRequest() - : ::google::protobuf::Message(), _internal_metadata_(nullptr) { - SharedCtor(); - // @@protoc_insertion_point(constructor:flyteidl.admin.DoTaskRequest) +template<> PROTOBUF_NOINLINE ::flyteidl::admin::TaskExecutionMetadata* Arena::CreateMaybeMessage< ::flyteidl::admin::TaskExecutionMetadata >(Arena* arena) { + return Arena::CreateInternal< ::flyteidl::admin::TaskExecutionMetadata >(arena); } -DoTaskRequest::DoTaskRequest(const DoTaskRequest& from) - : ::google::protobuf::Message(), - _internal_metadata_(nullptr) { - _internal_metadata_.MergeFrom(from._internal_metadata_); - output_prefix_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - if (from.output_prefix().size() > 0) { - output_prefix_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.output_prefix_); - } - if (from.has_inputs()) { - inputs_ = new ::flyteidl::core::LiteralMap(*from.inputs_); - } else { - inputs_ = nullptr; - } - if (from.has_template_()) { - template__ = new ::flyteidl::core::TaskTemplate(*from.template__); - } else { - template__ = nullptr; - } - if (from.has_task_execution_metadata()) { - task_execution_metadata_ = new ::flyteidl::admin::TaskExecutionMetadata(*from.task_execution_metadata_); - } else { - task_execution_metadata_ = nullptr; - } - // @@protoc_insertion_point(copy_constructor:flyteidl.admin.DoTaskRequest) +template<> PROTOBUF_NOINLINE ::flyteidl::admin::CreateTaskRequest* Arena::CreateMaybeMessage< ::flyteidl::admin::CreateTaskRequest >(Arena* arena) { + return Arena::CreateInternal< ::flyteidl::admin::CreateTaskRequest >(arena); } - -void DoTaskRequest::SharedCtor() { - ::google::protobuf::internal::InitSCC( - &scc_info_DoTaskRequest_flyteidl_2fadmin_2fagent_2eproto.base); - output_prefix_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - ::memset(&inputs_, 0, static_cast( - reinterpret_cast(&task_execution_metadata_) - - reinterpret_cast(&inputs_)) + sizeof(task_execution_metadata_)); +template<> PROTOBUF_NOINLINE ::flyteidl::admin::CreateTaskResponse* Arena::CreateMaybeMessage< ::flyteidl::admin::CreateTaskResponse >(Arena* arena) { + return Arena::CreateInternal< ::flyteidl::admin::CreateTaskResponse >(arena); } - -DoTaskRequest::~DoTaskRequest() { - // @@protoc_insertion_point(destructor:flyteidl.admin.DoTaskRequest) - SharedDtor(); +template<> PROTOBUF_NOINLINE ::flyteidl::admin::GetTaskRequest* Arena::CreateMaybeMessage< ::flyteidl::admin::GetTaskRequest >(Arena* arena) { + return Arena::CreateInternal< ::flyteidl::admin::GetTaskRequest >(arena); } - -void DoTaskRequest::SharedDtor() { - output_prefix_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - if (this != internal_default_instance()) delete inputs_; - if (this != internal_default_instance()) delete template__; - if (this != internal_default_instance()) delete task_execution_metadata_; +template<> PROTOBUF_NOINLINE ::flyteidl::admin::GetTaskResponse* Arena::CreateMaybeMessage< ::flyteidl::admin::GetTaskResponse >(Arena* arena) { + return Arena::CreateInternal< ::flyteidl::admin::GetTaskResponse >(arena); } - -void DoTaskRequest::SetCachedSize(int size) const { - _cached_size_.Set(size); +template<> PROTOBUF_NOINLINE ::flyteidl::admin::Resource* Arena::CreateMaybeMessage< ::flyteidl::admin::Resource >(Arena* arena) { + return Arena::CreateInternal< ::flyteidl::admin::Resource >(arena); } -const DoTaskRequest& DoTaskRequest::default_instance() { - ::google::protobuf::internal::InitSCC(&::scc_info_DoTaskRequest_flyteidl_2fadmin_2fagent_2eproto.base); - return *internal_default_instance(); -} - - -void DoTaskRequest::Clear() { -// @@protoc_insertion_point(message_clear_start:flyteidl.admin.DoTaskRequest) - ::google::protobuf::uint32 cached_has_bits = 0; - // Prevent compiler warnings about cached_has_bits being unused - (void) cached_has_bits; - - output_prefix_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - if (GetArenaNoVirtual() == nullptr && inputs_ != nullptr) { - delete inputs_; - } - inputs_ = nullptr; - if (GetArenaNoVirtual() == nullptr && template__ != nullptr) { - delete template__; - } - template__ = nullptr; - if (GetArenaNoVirtual() == nullptr && task_execution_metadata_ != nullptr) { - delete task_execution_metadata_; - } - task_execution_metadata_ = nullptr; - _internal_metadata_.Clear(); -} - -#if GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER -const char* DoTaskRequest::_InternalParse(const char* begin, const char* end, void* object, - ::google::protobuf::internal::ParseContext* ctx) { - auto msg = static_cast(object); - ::google::protobuf::int32 size; (void)size; - int depth; (void)depth; - ::google::protobuf::uint32 tag; - ::google::protobuf::internal::ParseFunc parser_till_end; (void)parser_till_end; - auto ptr = begin; - while (ptr < end) { - ptr = ::google::protobuf::io::Parse32(ptr, &tag); - GOOGLE_PROTOBUF_PARSER_ASSERT(ptr); - switch (tag >> 3) { - // .flyteidl.core.LiteralMap inputs = 1; - case 1: { - if (static_cast<::google::protobuf::uint8>(tag) != 10) goto handle_unusual; - ptr = ::google::protobuf::io::ReadSize(ptr, &size); - GOOGLE_PROTOBUF_PARSER_ASSERT(ptr); - parser_till_end = ::flyteidl::core::LiteralMap::_InternalParse; - object = msg->mutable_inputs(); - if (size > end - ptr) goto len_delim_till_end; - ptr += size; - GOOGLE_PROTOBUF_PARSER_ASSERT(ctx->ParseExactRange( - {parser_till_end, object}, ptr - size, ptr)); - break; - } - // .flyteidl.core.TaskTemplate template = 2; - case 2: { - if (static_cast<::google::protobuf::uint8>(tag) != 18) goto handle_unusual; - ptr = ::google::protobuf::io::ReadSize(ptr, &size); - GOOGLE_PROTOBUF_PARSER_ASSERT(ptr); - parser_till_end = ::flyteidl::core::TaskTemplate::_InternalParse; - object = msg->mutable_template_(); - if (size > end - ptr) goto len_delim_till_end; - ptr += size; - GOOGLE_PROTOBUF_PARSER_ASSERT(ctx->ParseExactRange( - {parser_till_end, object}, ptr - size, ptr)); - break; - } - // string output_prefix = 3; - case 3: { - if (static_cast<::google::protobuf::uint8>(tag) != 26) goto handle_unusual; - ptr = ::google::protobuf::io::ReadSize(ptr, &size); - GOOGLE_PROTOBUF_PARSER_ASSERT(ptr); - ctx->extra_parse_data().SetFieldName("flyteidl.admin.DoTaskRequest.output_prefix"); - object = msg->mutable_output_prefix(); - if (size > end - ptr + ::google::protobuf::internal::ParseContext::kSlopBytes) { - parser_till_end = ::google::protobuf::internal::GreedyStringParserUTF8; - goto string_till_end; - } - GOOGLE_PROTOBUF_PARSER_ASSERT(::google::protobuf::internal::StringCheckUTF8(ptr, size, ctx)); - ::google::protobuf::internal::InlineGreedyStringParser(object, ptr, size, ctx); - ptr += size; - break; - } - // .flyteidl.admin.TaskExecutionMetadata task_execution_metadata = 4; - case 4: { - if (static_cast<::google::protobuf::uint8>(tag) != 34) goto handle_unusual; - ptr = ::google::protobuf::io::ReadSize(ptr, &size); - GOOGLE_PROTOBUF_PARSER_ASSERT(ptr); - parser_till_end = ::flyteidl::admin::TaskExecutionMetadata::_InternalParse; - object = msg->mutable_task_execution_metadata(); - if (size > end - ptr) goto len_delim_till_end; - ptr += size; - GOOGLE_PROTOBUF_PARSER_ASSERT(ctx->ParseExactRange( - {parser_till_end, object}, ptr - size, ptr)); - break; - } - default: { - handle_unusual: - if ((tag & 7) == 4 || tag == 0) { - ctx->EndGroup(tag); - return ptr; - } - auto res = UnknownFieldParse(tag, {_InternalParse, msg}, - ptr, end, msg->_internal_metadata_.mutable_unknown_fields(), ctx); - ptr = res.first; - GOOGLE_PROTOBUF_PARSER_ASSERT(ptr != nullptr); - if (res.second) return ptr; - } - } // switch - } // while - return ptr; -string_till_end: - static_cast<::std::string*>(object)->clear(); - static_cast<::std::string*>(object)->reserve(size); - goto len_delim_till_end; -len_delim_till_end: - return ctx->StoreAndTailCall(ptr, end, {_InternalParse, msg}, - {parser_till_end, object}, size); -} -#else // GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER -bool DoTaskRequest::MergePartialFromCodedStream( - ::google::protobuf::io::CodedInputStream* input) { -#define DO_(EXPRESSION) if (!PROTOBUF_PREDICT_TRUE(EXPRESSION)) goto failure - ::google::protobuf::uint32 tag; - // @@protoc_insertion_point(parse_start:flyteidl.admin.DoTaskRequest) - for (;;) { - ::std::pair<::google::protobuf::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u); - tag = p.first; - if (!p.second) goto handle_unusual; - switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) { - // .flyteidl.core.LiteralMap inputs = 1; - case 1: { - if (static_cast< ::google::protobuf::uint8>(tag) == (10 & 0xFF)) { - DO_(::google::protobuf::internal::WireFormatLite::ReadMessage( - input, mutable_inputs())); - } else { - goto handle_unusual; - } - break; - } - - // .flyteidl.core.TaskTemplate template = 2; - case 2: { - if (static_cast< ::google::protobuf::uint8>(tag) == (18 & 0xFF)) { - DO_(::google::protobuf::internal::WireFormatLite::ReadMessage( - input, mutable_template_())); - } else { - goto handle_unusual; - } - break; - } - - // string output_prefix = 3; - case 3: { - if (static_cast< ::google::protobuf::uint8>(tag) == (26 & 0xFF)) { - DO_(::google::protobuf::internal::WireFormatLite::ReadString( - input, this->mutable_output_prefix())); - DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String( - this->output_prefix().data(), static_cast(this->output_prefix().length()), - ::google::protobuf::internal::WireFormatLite::PARSE, - "flyteidl.admin.DoTaskRequest.output_prefix")); - } else { - goto handle_unusual; - } - break; - } - - // .flyteidl.admin.TaskExecutionMetadata task_execution_metadata = 4; - case 4: { - if (static_cast< ::google::protobuf::uint8>(tag) == (34 & 0xFF)) { - DO_(::google::protobuf::internal::WireFormatLite::ReadMessage( - input, mutable_task_execution_metadata())); - } else { - goto handle_unusual; - } - break; - } - - default: { - handle_unusual: - if (tag == 0) { - goto success; - } - DO_(::google::protobuf::internal::WireFormat::SkipField( - input, tag, _internal_metadata_.mutable_unknown_fields())); - break; - } - } - } -success: - // @@protoc_insertion_point(parse_success:flyteidl.admin.DoTaskRequest) - return true; -failure: - // @@protoc_insertion_point(parse_failure:flyteidl.admin.DoTaskRequest) - return false; -#undef DO_ -} -#endif // GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER - -void DoTaskRequest::SerializeWithCachedSizes( - ::google::protobuf::io::CodedOutputStream* output) const { - // @@protoc_insertion_point(serialize_start:flyteidl.admin.DoTaskRequest) - ::google::protobuf::uint32 cached_has_bits = 0; - (void) cached_has_bits; - - // .flyteidl.core.LiteralMap inputs = 1; - if (this->has_inputs()) { - ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray( - 1, HasBitSetters::inputs(this), output); - } - - // .flyteidl.core.TaskTemplate template = 2; - if (this->has_template_()) { - ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray( - 2, HasBitSetters::template_(this), output); - } - - // string output_prefix = 3; - if (this->output_prefix().size() > 0) { - ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( - this->output_prefix().data(), static_cast(this->output_prefix().length()), - ::google::protobuf::internal::WireFormatLite::SERIALIZE, - "flyteidl.admin.DoTaskRequest.output_prefix"); - ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased( - 3, this->output_prefix(), output); - } - - // .flyteidl.admin.TaskExecutionMetadata task_execution_metadata = 4; - if (this->has_task_execution_metadata()) { - ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray( - 4, HasBitSetters::task_execution_metadata(this), output); - } - - if (_internal_metadata_.have_unknown_fields()) { - ::google::protobuf::internal::WireFormat::SerializeUnknownFields( - _internal_metadata_.unknown_fields(), output); - } - // @@protoc_insertion_point(serialize_end:flyteidl.admin.DoTaskRequest) -} - -::google::protobuf::uint8* DoTaskRequest::InternalSerializeWithCachedSizesToArray( - ::google::protobuf::uint8* target) const { - // @@protoc_insertion_point(serialize_to_array_start:flyteidl.admin.DoTaskRequest) - ::google::protobuf::uint32 cached_has_bits = 0; - (void) cached_has_bits; - - // .flyteidl.core.LiteralMap inputs = 1; - if (this->has_inputs()) { - target = ::google::protobuf::internal::WireFormatLite:: - InternalWriteMessageToArray( - 1, HasBitSetters::inputs(this), target); - } - - // .flyteidl.core.TaskTemplate template = 2; - if (this->has_template_()) { - target = ::google::protobuf::internal::WireFormatLite:: - InternalWriteMessageToArray( - 2, HasBitSetters::template_(this), target); - } - - // string output_prefix = 3; - if (this->output_prefix().size() > 0) { - ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( - this->output_prefix().data(), static_cast(this->output_prefix().length()), - ::google::protobuf::internal::WireFormatLite::SERIALIZE, - "flyteidl.admin.DoTaskRequest.output_prefix"); - target = - ::google::protobuf::internal::WireFormatLite::WriteStringToArray( - 3, this->output_prefix(), target); - } - - // .flyteidl.admin.TaskExecutionMetadata task_execution_metadata = 4; - if (this->has_task_execution_metadata()) { - target = ::google::protobuf::internal::WireFormatLite:: - InternalWriteMessageToArray( - 4, HasBitSetters::task_execution_metadata(this), target); - } - - if (_internal_metadata_.have_unknown_fields()) { - target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray( - _internal_metadata_.unknown_fields(), target); - } - // @@protoc_insertion_point(serialize_to_array_end:flyteidl.admin.DoTaskRequest) - return target; -} - -size_t DoTaskRequest::ByteSizeLong() const { -// @@protoc_insertion_point(message_byte_size_start:flyteidl.admin.DoTaskRequest) - size_t total_size = 0; - - if (_internal_metadata_.have_unknown_fields()) { - total_size += - ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize( - _internal_metadata_.unknown_fields()); - } - ::google::protobuf::uint32 cached_has_bits = 0; - // Prevent compiler warnings about cached_has_bits being unused - (void) cached_has_bits; - - // string output_prefix = 3; - if (this->output_prefix().size() > 0) { - total_size += 1 + - ::google::protobuf::internal::WireFormatLite::StringSize( - this->output_prefix()); - } - - // .flyteidl.core.LiteralMap inputs = 1; - if (this->has_inputs()) { - total_size += 1 + - ::google::protobuf::internal::WireFormatLite::MessageSize( - *inputs_); - } - - // .flyteidl.core.TaskTemplate template = 2; - if (this->has_template_()) { - total_size += 1 + - ::google::protobuf::internal::WireFormatLite::MessageSize( - *template__); - } - - // .flyteidl.admin.TaskExecutionMetadata task_execution_metadata = 4; - if (this->has_task_execution_metadata()) { - total_size += 1 + - ::google::protobuf::internal::WireFormatLite::MessageSize( - *task_execution_metadata_); - } - - int cached_size = ::google::protobuf::internal::ToCachedSize(total_size); - SetCachedSize(cached_size); - return total_size; -} - -void DoTaskRequest::MergeFrom(const ::google::protobuf::Message& from) { -// @@protoc_insertion_point(generalized_merge_from_start:flyteidl.admin.DoTaskRequest) - GOOGLE_DCHECK_NE(&from, this); - const DoTaskRequest* source = - ::google::protobuf::DynamicCastToGenerated( - &from); - if (source == nullptr) { - // @@protoc_insertion_point(generalized_merge_from_cast_fail:flyteidl.admin.DoTaskRequest) - ::google::protobuf::internal::ReflectionOps::Merge(from, this); - } else { - // @@protoc_insertion_point(generalized_merge_from_cast_success:flyteidl.admin.DoTaskRequest) - MergeFrom(*source); - } -} - -void DoTaskRequest::MergeFrom(const DoTaskRequest& from) { -// @@protoc_insertion_point(class_specific_merge_from_start:flyteidl.admin.DoTaskRequest) - GOOGLE_DCHECK_NE(&from, this); - _internal_metadata_.MergeFrom(from._internal_metadata_); - ::google::protobuf::uint32 cached_has_bits = 0; - (void) cached_has_bits; - - if (from.output_prefix().size() > 0) { - - output_prefix_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.output_prefix_); - } - if (from.has_inputs()) { - mutable_inputs()->::flyteidl::core::LiteralMap::MergeFrom(from.inputs()); - } - if (from.has_template_()) { - mutable_template_()->::flyteidl::core::TaskTemplate::MergeFrom(from.template_()); - } - if (from.has_task_execution_metadata()) { - mutable_task_execution_metadata()->::flyteidl::admin::TaskExecutionMetadata::MergeFrom(from.task_execution_metadata()); - } -} - -void DoTaskRequest::CopyFrom(const ::google::protobuf::Message& from) { -// @@protoc_insertion_point(generalized_copy_from_start:flyteidl.admin.DoTaskRequest) - if (&from == this) return; - Clear(); - MergeFrom(from); -} - -void DoTaskRequest::CopyFrom(const DoTaskRequest& from) { -// @@protoc_insertion_point(class_specific_copy_from_start:flyteidl.admin.DoTaskRequest) - if (&from == this) return; - Clear(); - MergeFrom(from); -} - -bool DoTaskRequest::IsInitialized() const { - return true; -} - -void DoTaskRequest::Swap(DoTaskRequest* other) { - if (other == this) return; - InternalSwap(other); -} -void DoTaskRequest::InternalSwap(DoTaskRequest* other) { - using std::swap; - _internal_metadata_.Swap(&other->_internal_metadata_); - output_prefix_.Swap(&other->output_prefix_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(), - GetArenaNoVirtual()); - swap(inputs_, other->inputs_); - swap(template__, other->template__); - swap(task_execution_metadata_, other->task_execution_metadata_); -} - -::google::protobuf::Metadata DoTaskRequest::GetMetadata() const { - ::google::protobuf::internal::AssignDescriptors(&::assign_descriptors_table_flyteidl_2fadmin_2fagent_2eproto); - return ::file_level_metadata_flyteidl_2fadmin_2fagent_2eproto[kIndexInFileMessages]; -} - - -// =================================================================== - -void DoTaskResponse::InitAsDefaultInstance() { - ::flyteidl::admin::_DoTaskResponse_default_instance_._instance.get_mutable()->resource_ = const_cast< ::flyteidl::admin::Resource*>( - ::flyteidl::admin::Resource::internal_default_instance()); -} -class DoTaskResponse::HasBitSetters { - public: - static const ::flyteidl::admin::Resource& resource(const DoTaskResponse* msg); -}; - -const ::flyteidl::admin::Resource& -DoTaskResponse::HasBitSetters::resource(const DoTaskResponse* msg) { - return *msg->resource_; -} -#if !defined(_MSC_VER) || _MSC_VER >= 1900 -const int DoTaskResponse::kResourceFieldNumber; -#endif // !defined(_MSC_VER) || _MSC_VER >= 1900 - -DoTaskResponse::DoTaskResponse() - : ::google::protobuf::Message(), _internal_metadata_(nullptr) { - SharedCtor(); - // @@protoc_insertion_point(constructor:flyteidl.admin.DoTaskResponse) -} -DoTaskResponse::DoTaskResponse(const DoTaskResponse& from) - : ::google::protobuf::Message(), - _internal_metadata_(nullptr) { - _internal_metadata_.MergeFrom(from._internal_metadata_); - if (from.has_resource()) { - resource_ = new ::flyteidl::admin::Resource(*from.resource_); - } else { - resource_ = nullptr; - } - // @@protoc_insertion_point(copy_constructor:flyteidl.admin.DoTaskResponse) -} - -void DoTaskResponse::SharedCtor() { - ::google::protobuf::internal::InitSCC( - &scc_info_DoTaskResponse_flyteidl_2fadmin_2fagent_2eproto.base); - resource_ = nullptr; -} - -DoTaskResponse::~DoTaskResponse() { - // @@protoc_insertion_point(destructor:flyteidl.admin.DoTaskResponse) - SharedDtor(); -} - -void DoTaskResponse::SharedDtor() { - if (this != internal_default_instance()) delete resource_; -} - -void DoTaskResponse::SetCachedSize(int size) const { - _cached_size_.Set(size); -} -const DoTaskResponse& DoTaskResponse::default_instance() { - ::google::protobuf::internal::InitSCC(&::scc_info_DoTaskResponse_flyteidl_2fadmin_2fagent_2eproto.base); - return *internal_default_instance(); -} - - -void DoTaskResponse::Clear() { -// @@protoc_insertion_point(message_clear_start:flyteidl.admin.DoTaskResponse) - ::google::protobuf::uint32 cached_has_bits = 0; - // Prevent compiler warnings about cached_has_bits being unused - (void) cached_has_bits; - - if (GetArenaNoVirtual() == nullptr && resource_ != nullptr) { - delete resource_; - } - resource_ = nullptr; - _internal_metadata_.Clear(); -} - -#if GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER -const char* DoTaskResponse::_InternalParse(const char* begin, const char* end, void* object, - ::google::protobuf::internal::ParseContext* ctx) { - auto msg = static_cast(object); - ::google::protobuf::int32 size; (void)size; - int depth; (void)depth; - ::google::protobuf::uint32 tag; - ::google::protobuf::internal::ParseFunc parser_till_end; (void)parser_till_end; - auto ptr = begin; - while (ptr < end) { - ptr = ::google::protobuf::io::Parse32(ptr, &tag); - GOOGLE_PROTOBUF_PARSER_ASSERT(ptr); - switch (tag >> 3) { - // .flyteidl.admin.Resource resource = 1; - case 1: { - if (static_cast<::google::protobuf::uint8>(tag) != 10) goto handle_unusual; - ptr = ::google::protobuf::io::ReadSize(ptr, &size); - GOOGLE_PROTOBUF_PARSER_ASSERT(ptr); - parser_till_end = ::flyteidl::admin::Resource::_InternalParse; - object = msg->mutable_resource(); - if (size > end - ptr) goto len_delim_till_end; - ptr += size; - GOOGLE_PROTOBUF_PARSER_ASSERT(ctx->ParseExactRange( - {parser_till_end, object}, ptr - size, ptr)); - break; - } - default: { - handle_unusual: - if ((tag & 7) == 4 || tag == 0) { - ctx->EndGroup(tag); - return ptr; - } - auto res = UnknownFieldParse(tag, {_InternalParse, msg}, - ptr, end, msg->_internal_metadata_.mutable_unknown_fields(), ctx); - ptr = res.first; - GOOGLE_PROTOBUF_PARSER_ASSERT(ptr != nullptr); - if (res.second) return ptr; - } - } // switch - } // while - return ptr; -len_delim_till_end: - return ctx->StoreAndTailCall(ptr, end, {_InternalParse, msg}, - {parser_till_end, object}, size); -} -#else // GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER -bool DoTaskResponse::MergePartialFromCodedStream( - ::google::protobuf::io::CodedInputStream* input) { -#define DO_(EXPRESSION) if (!PROTOBUF_PREDICT_TRUE(EXPRESSION)) goto failure - ::google::protobuf::uint32 tag; - // @@protoc_insertion_point(parse_start:flyteidl.admin.DoTaskResponse) - for (;;) { - ::std::pair<::google::protobuf::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u); - tag = p.first; - if (!p.second) goto handle_unusual; - switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) { - // .flyteidl.admin.Resource resource = 1; - case 1: { - if (static_cast< ::google::protobuf::uint8>(tag) == (10 & 0xFF)) { - DO_(::google::protobuf::internal::WireFormatLite::ReadMessage( - input, mutable_resource())); - } else { - goto handle_unusual; - } - break; - } - - default: { - handle_unusual: - if (tag == 0) { - goto success; - } - DO_(::google::protobuf::internal::WireFormat::SkipField( - input, tag, _internal_metadata_.mutable_unknown_fields())); - break; - } - } - } -success: - // @@protoc_insertion_point(parse_success:flyteidl.admin.DoTaskResponse) - return true; -failure: - // @@protoc_insertion_point(parse_failure:flyteidl.admin.DoTaskResponse) - return false; -#undef DO_ -} -#endif // GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER - -void DoTaskResponse::SerializeWithCachedSizes( - ::google::protobuf::io::CodedOutputStream* output) const { - // @@protoc_insertion_point(serialize_start:flyteidl.admin.DoTaskResponse) - ::google::protobuf::uint32 cached_has_bits = 0; - (void) cached_has_bits; - - // .flyteidl.admin.Resource resource = 1; - if (this->has_resource()) { - ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray( - 1, HasBitSetters::resource(this), output); - } - - if (_internal_metadata_.have_unknown_fields()) { - ::google::protobuf::internal::WireFormat::SerializeUnknownFields( - _internal_metadata_.unknown_fields(), output); - } - // @@protoc_insertion_point(serialize_end:flyteidl.admin.DoTaskResponse) -} - -::google::protobuf::uint8* DoTaskResponse::InternalSerializeWithCachedSizesToArray( - ::google::protobuf::uint8* target) const { - // @@protoc_insertion_point(serialize_to_array_start:flyteidl.admin.DoTaskResponse) - ::google::protobuf::uint32 cached_has_bits = 0; - (void) cached_has_bits; - - // .flyteidl.admin.Resource resource = 1; - if (this->has_resource()) { - target = ::google::protobuf::internal::WireFormatLite:: - InternalWriteMessageToArray( - 1, HasBitSetters::resource(this), target); - } - - if (_internal_metadata_.have_unknown_fields()) { - target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray( - _internal_metadata_.unknown_fields(), target); - } - // @@protoc_insertion_point(serialize_to_array_end:flyteidl.admin.DoTaskResponse) - return target; -} - -size_t DoTaskResponse::ByteSizeLong() const { -// @@protoc_insertion_point(message_byte_size_start:flyteidl.admin.DoTaskResponse) - size_t total_size = 0; - - if (_internal_metadata_.have_unknown_fields()) { - total_size += - ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize( - _internal_metadata_.unknown_fields()); - } - ::google::protobuf::uint32 cached_has_bits = 0; - // Prevent compiler warnings about cached_has_bits being unused - (void) cached_has_bits; - - // .flyteidl.admin.Resource resource = 1; - if (this->has_resource()) { - total_size += 1 + - ::google::protobuf::internal::WireFormatLite::MessageSize( - *resource_); - } - - int cached_size = ::google::protobuf::internal::ToCachedSize(total_size); - SetCachedSize(cached_size); - return total_size; -} - -void DoTaskResponse::MergeFrom(const ::google::protobuf::Message& from) { -// @@protoc_insertion_point(generalized_merge_from_start:flyteidl.admin.DoTaskResponse) - GOOGLE_DCHECK_NE(&from, this); - const DoTaskResponse* source = - ::google::protobuf::DynamicCastToGenerated( - &from); - if (source == nullptr) { - // @@protoc_insertion_point(generalized_merge_from_cast_fail:flyteidl.admin.DoTaskResponse) - ::google::protobuf::internal::ReflectionOps::Merge(from, this); - } else { - // @@protoc_insertion_point(generalized_merge_from_cast_success:flyteidl.admin.DoTaskResponse) - MergeFrom(*source); - } -} - -void DoTaskResponse::MergeFrom(const DoTaskResponse& from) { -// @@protoc_insertion_point(class_specific_merge_from_start:flyteidl.admin.DoTaskResponse) - GOOGLE_DCHECK_NE(&from, this); - _internal_metadata_.MergeFrom(from._internal_metadata_); - ::google::protobuf::uint32 cached_has_bits = 0; - (void) cached_has_bits; - - if (from.has_resource()) { - mutable_resource()->::flyteidl::admin::Resource::MergeFrom(from.resource()); - } -} - -void DoTaskResponse::CopyFrom(const ::google::protobuf::Message& from) { -// @@protoc_insertion_point(generalized_copy_from_start:flyteidl.admin.DoTaskResponse) - if (&from == this) return; - Clear(); - MergeFrom(from); -} - -void DoTaskResponse::CopyFrom(const DoTaskResponse& from) { -// @@protoc_insertion_point(class_specific_copy_from_start:flyteidl.admin.DoTaskResponse) - if (&from == this) return; - Clear(); - MergeFrom(from); -} - -bool DoTaskResponse::IsInitialized() const { - return true; -} - -void DoTaskResponse::Swap(DoTaskResponse* other) { - if (other == this) return; - InternalSwap(other); -} -void DoTaskResponse::InternalSwap(DoTaskResponse* other) { - using std::swap; - _internal_metadata_.Swap(&other->_internal_metadata_); - swap(resource_, other->resource_); -} - -::google::protobuf::Metadata DoTaskResponse::GetMetadata() const { - ::google::protobuf::internal::AssignDescriptors(&::assign_descriptors_table_flyteidl_2fadmin_2fagent_2eproto); - return ::file_level_metadata_flyteidl_2fadmin_2fagent_2eproto[kIndexInFileMessages]; -} - - -// @@protoc_insertion_point(namespace_scope) -} // namespace admin -} // namespace flyteidl -namespace google { -namespace protobuf { -template<> PROTOBUF_NOINLINE ::flyteidl::admin::TaskExecutionMetadata_LabelsEntry_DoNotUse* Arena::CreateMaybeMessage< ::flyteidl::admin::TaskExecutionMetadata_LabelsEntry_DoNotUse >(Arena* arena) { - return Arena::CreateInternal< ::flyteidl::admin::TaskExecutionMetadata_LabelsEntry_DoNotUse >(arena); -} -template<> PROTOBUF_NOINLINE ::flyteidl::admin::TaskExecutionMetadata_AnnotationsEntry_DoNotUse* Arena::CreateMaybeMessage< ::flyteidl::admin::TaskExecutionMetadata_AnnotationsEntry_DoNotUse >(Arena* arena) { - return Arena::CreateInternal< ::flyteidl::admin::TaskExecutionMetadata_AnnotationsEntry_DoNotUse >(arena); -} -template<> PROTOBUF_NOINLINE ::flyteidl::admin::TaskExecutionMetadata_EnvironmentVariablesEntry_DoNotUse* Arena::CreateMaybeMessage< ::flyteidl::admin::TaskExecutionMetadata_EnvironmentVariablesEntry_DoNotUse >(Arena* arena) { - return Arena::CreateInternal< ::flyteidl::admin::TaskExecutionMetadata_EnvironmentVariablesEntry_DoNotUse >(arena); -} -template<> PROTOBUF_NOINLINE ::flyteidl::admin::TaskExecutionMetadata* Arena::CreateMaybeMessage< ::flyteidl::admin::TaskExecutionMetadata >(Arena* arena) { - return Arena::CreateInternal< ::flyteidl::admin::TaskExecutionMetadata >(arena); -} -template<> PROTOBUF_NOINLINE ::flyteidl::admin::CreateTaskRequest* Arena::CreateMaybeMessage< ::flyteidl::admin::CreateTaskRequest >(Arena* arena) { - return Arena::CreateInternal< ::flyteidl::admin::CreateTaskRequest >(arena); -} -template<> PROTOBUF_NOINLINE ::flyteidl::admin::CreateTaskResponse* Arena::CreateMaybeMessage< ::flyteidl::admin::CreateTaskResponse >(Arena* arena) { - return Arena::CreateInternal< ::flyteidl::admin::CreateTaskResponse >(arena); -} -template<> PROTOBUF_NOINLINE ::flyteidl::admin::GetTaskRequest* Arena::CreateMaybeMessage< ::flyteidl::admin::GetTaskRequest >(Arena* arena) { - return Arena::CreateInternal< ::flyteidl::admin::GetTaskRequest >(arena); -} -template<> PROTOBUF_NOINLINE ::flyteidl::admin::GetTaskResponse* Arena::CreateMaybeMessage< ::flyteidl::admin::GetTaskResponse >(Arena* arena) { - return Arena::CreateInternal< ::flyteidl::admin::GetTaskResponse >(arena); -} -template<> PROTOBUF_NOINLINE ::flyteidl::admin::Resource* Arena::CreateMaybeMessage< ::flyteidl::admin::Resource >(Arena* arena) { - return Arena::CreateInternal< ::flyteidl::admin::Resource >(arena); -} -template<> PROTOBUF_NOINLINE ::flyteidl::admin::DeleteTaskRequest* Arena::CreateMaybeMessage< ::flyteidl::admin::DeleteTaskRequest >(Arena* arena) { - return Arena::CreateInternal< ::flyteidl::admin::DeleteTaskRequest >(arena); +template<> PROTOBUF_NOINLINE ::flyteidl::admin::DeleteTaskRequest* Arena::CreateMaybeMessage< ::flyteidl::admin::DeleteTaskRequest >(Arena* arena) { + return Arena::CreateInternal< ::flyteidl::admin::DeleteTaskRequest >(arena); } template<> PROTOBUF_NOINLINE ::flyteidl::admin::DeleteTaskResponse* Arena::CreateMaybeMessage< ::flyteidl::admin::DeleteTaskResponse >(Arena* arena) { return Arena::CreateInternal< ::flyteidl::admin::DeleteTaskResponse >(arena); } -template<> PROTOBUF_NOINLINE ::flyteidl::admin::DoTaskRequest* Arena::CreateMaybeMessage< ::flyteidl::admin::DoTaskRequest >(Arena* arena) { - return Arena::CreateInternal< ::flyteidl::admin::DoTaskRequest >(arena); -} -template<> PROTOBUF_NOINLINE ::flyteidl::admin::DoTaskResponse* Arena::CreateMaybeMessage< ::flyteidl::admin::DoTaskResponse >(Arena* arena) { - return Arena::CreateInternal< ::flyteidl::admin::DoTaskResponse >(arena); -} } // namespace protobuf } // namespace google diff --git a/flyteidl/gen/pb-cpp/flyteidl/admin/agent.pb.h b/flyteidl/gen/pb-cpp/flyteidl/admin/agent.pb.h index a35fb8e94f..bcc400c834 100644 --- a/flyteidl/gen/pb-cpp/flyteidl/admin/agent.pb.h +++ b/flyteidl/gen/pb-cpp/flyteidl/admin/agent.pb.h @@ -50,7 +50,7 @@ struct TableStruct_flyteidl_2fadmin_2fagent_2eproto { PROTOBUF_SECTION_VARIABLE(protodesc_cold); static const ::google::protobuf::internal::AuxillaryParseTableField aux[] PROTOBUF_SECTION_VARIABLE(protodesc_cold); - static const ::google::protobuf::internal::ParseTable schema[13] + static const ::google::protobuf::internal::ParseTable schema[11] PROTOBUF_SECTION_VARIABLE(protodesc_cold); static const ::google::protobuf::internal::FieldMetadata field_metadata[]; static const ::google::protobuf::internal::SerializationTable serialization_table[]; @@ -71,12 +71,6 @@ extern DeleteTaskRequestDefaultTypeInternal _DeleteTaskRequest_default_instance_ class DeleteTaskResponse; class DeleteTaskResponseDefaultTypeInternal; extern DeleteTaskResponseDefaultTypeInternal _DeleteTaskResponse_default_instance_; -class DoTaskRequest; -class DoTaskRequestDefaultTypeInternal; -extern DoTaskRequestDefaultTypeInternal _DoTaskRequest_default_instance_; -class DoTaskResponse; -class DoTaskResponseDefaultTypeInternal; -extern DoTaskResponseDefaultTypeInternal _DoTaskResponse_default_instance_; class GetTaskRequest; class GetTaskRequestDefaultTypeInternal; extern GetTaskRequestDefaultTypeInternal _GetTaskRequest_default_instance_; @@ -106,8 +100,6 @@ template<> ::flyteidl::admin::CreateTaskRequest* Arena::CreateMaybeMessage<::fly template<> ::flyteidl::admin::CreateTaskResponse* Arena::CreateMaybeMessage<::flyteidl::admin::CreateTaskResponse>(Arena*); template<> ::flyteidl::admin::DeleteTaskRequest* Arena::CreateMaybeMessage<::flyteidl::admin::DeleteTaskRequest>(Arena*); template<> ::flyteidl::admin::DeleteTaskResponse* Arena::CreateMaybeMessage<::flyteidl::admin::DeleteTaskResponse>(Arena*); -template<> ::flyteidl::admin::DoTaskRequest* Arena::CreateMaybeMessage<::flyteidl::admin::DoTaskRequest>(Arena*); -template<> ::flyteidl::admin::DoTaskResponse* Arena::CreateMaybeMessage<::flyteidl::admin::DoTaskResponse>(Arena*); template<> ::flyteidl::admin::GetTaskRequest* Arena::CreateMaybeMessage<::flyteidl::admin::GetTaskRequest>(Arena*); template<> ::flyteidl::admin::GetTaskResponse* Arena::CreateMaybeMessage<::flyteidl::admin::GetTaskResponse>(Arena*); template<> ::flyteidl::admin::Resource* Arena::CreateMaybeMessage<::flyteidl::admin::Resource>(Arena*); @@ -591,6 +583,12 @@ class CreateTaskResponse final : } static const CreateTaskResponse& default_instance(); + enum ResCase { + kResourceMeta = 1, + kResource = 2, + RES_NOT_SET = 0, + }; + static void InitAsDefaultInstance(); // FOR INTERNAL USE ONLY static inline const CreateTaskResponse* internal_default_instance() { return reinterpret_cast( @@ -654,7 +652,22 @@ class CreateTaskResponse final : // accessors ------------------------------------------------------- + // repeated .flyteidl.core.TaskLog log_links = 3; + int log_links_size() const; + void clear_log_links(); + static const int kLogLinksFieldNumber = 3; + ::flyteidl::core::TaskLog* mutable_log_links(int index); + ::google::protobuf::RepeatedPtrField< ::flyteidl::core::TaskLog >* + mutable_log_links(); + const ::flyteidl::core::TaskLog& log_links(int index) const; + ::flyteidl::core::TaskLog* add_log_links(); + const ::google::protobuf::RepeatedPtrField< ::flyteidl::core::TaskLog >& + log_links() const; + // bytes resource_meta = 1; + private: + bool has_resource_meta() const; + public: void clear_resource_meta(); static const int kResourceMetaFieldNumber = 1; const ::std::string& resource_meta() const; @@ -668,13 +681,36 @@ class CreateTaskResponse final : ::std::string* release_resource_meta(); void set_allocated_resource_meta(::std::string* resource_meta); + // .flyteidl.admin.Resource resource = 2; + bool has_resource() const; + void clear_resource(); + static const int kResourceFieldNumber = 2; + const ::flyteidl::admin::Resource& resource() const; + ::flyteidl::admin::Resource* release_resource(); + ::flyteidl::admin::Resource* mutable_resource(); + void set_allocated_resource(::flyteidl::admin::Resource* resource); + + void clear_res(); + ResCase res_case() const; // @@protoc_insertion_point(class_scope:flyteidl.admin.CreateTaskResponse) private: class HasBitSetters; + void set_has_resource_meta(); + void set_has_resource(); + + inline bool has_res() const; + inline void clear_has_res(); ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_; - ::google::protobuf::internal::ArenaStringPtr resource_meta_; + ::google::protobuf::RepeatedPtrField< ::flyteidl::core::TaskLog > log_links_; + union ResUnion { + ResUnion() {} + ::google::protobuf::internal::ArenaStringPtr resource_meta_; + ::flyteidl::admin::Resource* resource_; + } res_; mutable ::google::protobuf::internal::CachedSize _cached_size_; + ::google::protobuf::uint32 _oneof_case_[1]; + friend struct ::TableStruct_flyteidl_2fadmin_2fagent_2eproto; }; // ------------------------------------------------------------------- @@ -1317,271 +1353,6 @@ class DeleteTaskResponse final : mutable ::google::protobuf::internal::CachedSize _cached_size_; friend struct ::TableStruct_flyteidl_2fadmin_2fagent_2eproto; }; -// ------------------------------------------------------------------- - -class DoTaskRequest final : - public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:flyteidl.admin.DoTaskRequest) */ { - public: - DoTaskRequest(); - virtual ~DoTaskRequest(); - - DoTaskRequest(const DoTaskRequest& from); - - inline DoTaskRequest& operator=(const DoTaskRequest& from) { - CopyFrom(from); - return *this; - } - #if LANG_CXX11 - DoTaskRequest(DoTaskRequest&& from) noexcept - : DoTaskRequest() { - *this = ::std::move(from); - } - - inline DoTaskRequest& operator=(DoTaskRequest&& from) noexcept { - if (GetArenaNoVirtual() == from.GetArenaNoVirtual()) { - if (this != &from) InternalSwap(&from); - } else { - CopyFrom(from); - } - return *this; - } - #endif - static const ::google::protobuf::Descriptor* descriptor() { - return default_instance().GetDescriptor(); - } - static const DoTaskRequest& default_instance(); - - static void InitAsDefaultInstance(); // FOR INTERNAL USE ONLY - static inline const DoTaskRequest* internal_default_instance() { - return reinterpret_cast( - &_DoTaskRequest_default_instance_); - } - static constexpr int kIndexInFileMessages = - 11; - - void Swap(DoTaskRequest* other); - friend void swap(DoTaskRequest& a, DoTaskRequest& b) { - a.Swap(&b); - } - - // implements Message ---------------------------------------------- - - inline DoTaskRequest* New() const final { - return CreateMaybeMessage(nullptr); - } - - DoTaskRequest* New(::google::protobuf::Arena* arena) const final { - return CreateMaybeMessage(arena); - } - void CopyFrom(const ::google::protobuf::Message& from) final; - void MergeFrom(const ::google::protobuf::Message& from) final; - void CopyFrom(const DoTaskRequest& from); - void MergeFrom(const DoTaskRequest& from); - PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final; - bool IsInitialized() const final; - - size_t ByteSizeLong() const final; - #if GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER - static const char* _InternalParse(const char* begin, const char* end, void* object, ::google::protobuf::internal::ParseContext* ctx); - ::google::protobuf::internal::ParseFunc _ParseFunc() const final { return _InternalParse; } - #else - bool MergePartialFromCodedStream( - ::google::protobuf::io::CodedInputStream* input) final; - #endif // GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER - void SerializeWithCachedSizes( - ::google::protobuf::io::CodedOutputStream* output) const final; - ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray( - ::google::protobuf::uint8* target) const final; - int GetCachedSize() const final { return _cached_size_.Get(); } - - private: - void SharedCtor(); - void SharedDtor(); - void SetCachedSize(int size) const final; - void InternalSwap(DoTaskRequest* other); - private: - inline ::google::protobuf::Arena* GetArenaNoVirtual() const { - return nullptr; - } - inline void* MaybeArenaPtr() const { - return nullptr; - } - public: - - ::google::protobuf::Metadata GetMetadata() const final; - - // nested types ---------------------------------------------------- - - // accessors ------------------------------------------------------- - - // string output_prefix = 3; - void clear_output_prefix(); - static const int kOutputPrefixFieldNumber = 3; - const ::std::string& output_prefix() const; - void set_output_prefix(const ::std::string& value); - #if LANG_CXX11 - void set_output_prefix(::std::string&& value); - #endif - void set_output_prefix(const char* value); - void set_output_prefix(const char* value, size_t size); - ::std::string* mutable_output_prefix(); - ::std::string* release_output_prefix(); - void set_allocated_output_prefix(::std::string* output_prefix); - - // .flyteidl.core.LiteralMap inputs = 1; - bool has_inputs() const; - void clear_inputs(); - static const int kInputsFieldNumber = 1; - const ::flyteidl::core::LiteralMap& inputs() const; - ::flyteidl::core::LiteralMap* release_inputs(); - ::flyteidl::core::LiteralMap* mutable_inputs(); - void set_allocated_inputs(::flyteidl::core::LiteralMap* inputs); - - // .flyteidl.core.TaskTemplate template = 2; - bool has_template_() const; - void clear_template_(); - static const int kTemplateFieldNumber = 2; - const ::flyteidl::core::TaskTemplate& template_() const; - ::flyteidl::core::TaskTemplate* release_template_(); - ::flyteidl::core::TaskTemplate* mutable_template_(); - void set_allocated_template_(::flyteidl::core::TaskTemplate* template_); - - // .flyteidl.admin.TaskExecutionMetadata task_execution_metadata = 4; - bool has_task_execution_metadata() const; - void clear_task_execution_metadata(); - static const int kTaskExecutionMetadataFieldNumber = 4; - const ::flyteidl::admin::TaskExecutionMetadata& task_execution_metadata() const; - ::flyteidl::admin::TaskExecutionMetadata* release_task_execution_metadata(); - ::flyteidl::admin::TaskExecutionMetadata* mutable_task_execution_metadata(); - void set_allocated_task_execution_metadata(::flyteidl::admin::TaskExecutionMetadata* task_execution_metadata); - - // @@protoc_insertion_point(class_scope:flyteidl.admin.DoTaskRequest) - private: - class HasBitSetters; - - ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_; - ::google::protobuf::internal::ArenaStringPtr output_prefix_; - ::flyteidl::core::LiteralMap* inputs_; - ::flyteidl::core::TaskTemplate* template__; - ::flyteidl::admin::TaskExecutionMetadata* task_execution_metadata_; - mutable ::google::protobuf::internal::CachedSize _cached_size_; - friend struct ::TableStruct_flyteidl_2fadmin_2fagent_2eproto; -}; -// ------------------------------------------------------------------- - -class DoTaskResponse final : - public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:flyteidl.admin.DoTaskResponse) */ { - public: - DoTaskResponse(); - virtual ~DoTaskResponse(); - - DoTaskResponse(const DoTaskResponse& from); - - inline DoTaskResponse& operator=(const DoTaskResponse& from) { - CopyFrom(from); - return *this; - } - #if LANG_CXX11 - DoTaskResponse(DoTaskResponse&& from) noexcept - : DoTaskResponse() { - *this = ::std::move(from); - } - - inline DoTaskResponse& operator=(DoTaskResponse&& from) noexcept { - if (GetArenaNoVirtual() == from.GetArenaNoVirtual()) { - if (this != &from) InternalSwap(&from); - } else { - CopyFrom(from); - } - return *this; - } - #endif - static const ::google::protobuf::Descriptor* descriptor() { - return default_instance().GetDescriptor(); - } - static const DoTaskResponse& default_instance(); - - static void InitAsDefaultInstance(); // FOR INTERNAL USE ONLY - static inline const DoTaskResponse* internal_default_instance() { - return reinterpret_cast( - &_DoTaskResponse_default_instance_); - } - static constexpr int kIndexInFileMessages = - 12; - - void Swap(DoTaskResponse* other); - friend void swap(DoTaskResponse& a, DoTaskResponse& b) { - a.Swap(&b); - } - - // implements Message ---------------------------------------------- - - inline DoTaskResponse* New() const final { - return CreateMaybeMessage(nullptr); - } - - DoTaskResponse* New(::google::protobuf::Arena* arena) const final { - return CreateMaybeMessage(arena); - } - void CopyFrom(const ::google::protobuf::Message& from) final; - void MergeFrom(const ::google::protobuf::Message& from) final; - void CopyFrom(const DoTaskResponse& from); - void MergeFrom(const DoTaskResponse& from); - PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final; - bool IsInitialized() const final; - - size_t ByteSizeLong() const final; - #if GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER - static const char* _InternalParse(const char* begin, const char* end, void* object, ::google::protobuf::internal::ParseContext* ctx); - ::google::protobuf::internal::ParseFunc _ParseFunc() const final { return _InternalParse; } - #else - bool MergePartialFromCodedStream( - ::google::protobuf::io::CodedInputStream* input) final; - #endif // GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER - void SerializeWithCachedSizes( - ::google::protobuf::io::CodedOutputStream* output) const final; - ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray( - ::google::protobuf::uint8* target) const final; - int GetCachedSize() const final { return _cached_size_.Get(); } - - private: - void SharedCtor(); - void SharedDtor(); - void SetCachedSize(int size) const final; - void InternalSwap(DoTaskResponse* other); - private: - inline ::google::protobuf::Arena* GetArenaNoVirtual() const { - return nullptr; - } - inline void* MaybeArenaPtr() const { - return nullptr; - } - public: - - ::google::protobuf::Metadata GetMetadata() const final; - - // nested types ---------------------------------------------------- - - // accessors ------------------------------------------------------- - - // .flyteidl.admin.Resource resource = 1; - bool has_resource() const; - void clear_resource(); - static const int kResourceFieldNumber = 1; - const ::flyteidl::admin::Resource& resource() const; - ::flyteidl::admin::Resource* release_resource(); - ::flyteidl::admin::Resource* mutable_resource(); - void set_allocated_resource(::flyteidl::admin::Resource* resource); - - // @@protoc_insertion_point(class_scope:flyteidl.admin.DoTaskResponse) - private: - class HasBitSetters; - - ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_; - ::flyteidl::admin::Resource* resource_; - mutable ::google::protobuf::internal::CachedSize _cached_size_; - friend struct ::TableStruct_flyteidl_2fadmin_2fagent_2eproto; -}; // =================================================================== @@ -2007,58 +1778,174 @@ inline void CreateTaskRequest::set_allocated_task_execution_metadata(::flyteidl: // CreateTaskResponse // bytes resource_meta = 1; +inline bool CreateTaskResponse::has_resource_meta() const { + return res_case() == kResourceMeta; +} +inline void CreateTaskResponse::set_has_resource_meta() { + _oneof_case_[0] = kResourceMeta; +} inline void CreateTaskResponse::clear_resource_meta() { - resource_meta_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + if (has_resource_meta()) { + res_.resource_meta_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + clear_has_res(); + } } inline const ::std::string& CreateTaskResponse::resource_meta() const { // @@protoc_insertion_point(field_get:flyteidl.admin.CreateTaskResponse.resource_meta) - return resource_meta_.GetNoArena(); + if (has_resource_meta()) { + return res_.resource_meta_.GetNoArena(); + } + return *&::google::protobuf::internal::GetEmptyStringAlreadyInited(); } inline void CreateTaskResponse::set_resource_meta(const ::std::string& value) { - - resource_meta_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value); + // @@protoc_insertion_point(field_set:flyteidl.admin.CreateTaskResponse.resource_meta) + if (!has_resource_meta()) { + clear_res(); + set_has_resource_meta(); + res_.resource_meta_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + } + res_.resource_meta_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value); // @@protoc_insertion_point(field_set:flyteidl.admin.CreateTaskResponse.resource_meta) } #if LANG_CXX11 inline void CreateTaskResponse::set_resource_meta(::std::string&& value) { - - resource_meta_.SetNoArena( - &::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::move(value)); + // @@protoc_insertion_point(field_set:flyteidl.admin.CreateTaskResponse.resource_meta) + if (!has_resource_meta()) { + clear_res(); + set_has_resource_meta(); + res_.resource_meta_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + } + res_.resource_meta_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::move(value)); // @@protoc_insertion_point(field_set_rvalue:flyteidl.admin.CreateTaskResponse.resource_meta) } #endif inline void CreateTaskResponse::set_resource_meta(const char* value) { GOOGLE_DCHECK(value != nullptr); - - resource_meta_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); + if (!has_resource_meta()) { + clear_res(); + set_has_resource_meta(); + res_.resource_meta_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + } + res_.resource_meta_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), + ::std::string(value)); // @@protoc_insertion_point(field_set_char:flyteidl.admin.CreateTaskResponse.resource_meta) } inline void CreateTaskResponse::set_resource_meta(const void* value, size_t size) { - - resource_meta_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), - ::std::string(reinterpret_cast(value), size)); + if (!has_resource_meta()) { + clear_res(); + set_has_resource_meta(); + res_.resource_meta_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + } + res_.resource_meta_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string( + reinterpret_cast(value), size)); // @@protoc_insertion_point(field_set_pointer:flyteidl.admin.CreateTaskResponse.resource_meta) } inline ::std::string* CreateTaskResponse::mutable_resource_meta() { - + if (!has_resource_meta()) { + clear_res(); + set_has_resource_meta(); + res_.resource_meta_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + } // @@protoc_insertion_point(field_mutable:flyteidl.admin.CreateTaskResponse.resource_meta) - return resource_meta_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + return res_.resource_meta_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); } inline ::std::string* CreateTaskResponse::release_resource_meta() { // @@protoc_insertion_point(field_release:flyteidl.admin.CreateTaskResponse.resource_meta) - - return resource_meta_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + if (has_resource_meta()) { + clear_has_res(); + return res_.resource_meta_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + } else { + return nullptr; + } } inline void CreateTaskResponse::set_allocated_resource_meta(::std::string* resource_meta) { + if (has_res()) { + clear_res(); + } if (resource_meta != nullptr) { - - } else { - + set_has_resource_meta(); + res_.resource_meta_.UnsafeSetDefault(resource_meta); } - resource_meta_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), resource_meta); // @@protoc_insertion_point(field_set_allocated:flyteidl.admin.CreateTaskResponse.resource_meta) } +// .flyteidl.admin.Resource resource = 2; +inline bool CreateTaskResponse::has_resource() const { + return res_case() == kResource; +} +inline void CreateTaskResponse::set_has_resource() { + _oneof_case_[0] = kResource; +} +inline void CreateTaskResponse::clear_resource() { + if (has_resource()) { + delete res_.resource_; + clear_has_res(); + } +} +inline ::flyteidl::admin::Resource* CreateTaskResponse::release_resource() { + // @@protoc_insertion_point(field_release:flyteidl.admin.CreateTaskResponse.resource) + if (has_resource()) { + clear_has_res(); + ::flyteidl::admin::Resource* temp = res_.resource_; + res_.resource_ = nullptr; + return temp; + } else { + return nullptr; + } +} +inline const ::flyteidl::admin::Resource& CreateTaskResponse::resource() const { + // @@protoc_insertion_point(field_get:flyteidl.admin.CreateTaskResponse.resource) + return has_resource() + ? *res_.resource_ + : *reinterpret_cast< ::flyteidl::admin::Resource*>(&::flyteidl::admin::_Resource_default_instance_); +} +inline ::flyteidl::admin::Resource* CreateTaskResponse::mutable_resource() { + if (!has_resource()) { + clear_res(); + set_has_resource(); + res_.resource_ = CreateMaybeMessage< ::flyteidl::admin::Resource >( + GetArenaNoVirtual()); + } + // @@protoc_insertion_point(field_mutable:flyteidl.admin.CreateTaskResponse.resource) + return res_.resource_; +} + +// repeated .flyteidl.core.TaskLog log_links = 3; +inline int CreateTaskResponse::log_links_size() const { + return log_links_.size(); +} +inline ::flyteidl::core::TaskLog* CreateTaskResponse::mutable_log_links(int index) { + // @@protoc_insertion_point(field_mutable:flyteidl.admin.CreateTaskResponse.log_links) + return log_links_.Mutable(index); +} +inline ::google::protobuf::RepeatedPtrField< ::flyteidl::core::TaskLog >* +CreateTaskResponse::mutable_log_links() { + // @@protoc_insertion_point(field_mutable_list:flyteidl.admin.CreateTaskResponse.log_links) + return &log_links_; +} +inline const ::flyteidl::core::TaskLog& CreateTaskResponse::log_links(int index) const { + // @@protoc_insertion_point(field_get:flyteidl.admin.CreateTaskResponse.log_links) + return log_links_.Get(index); +} +inline ::flyteidl::core::TaskLog* CreateTaskResponse::add_log_links() { + // @@protoc_insertion_point(field_add:flyteidl.admin.CreateTaskResponse.log_links) + return log_links_.Add(); +} +inline const ::google::protobuf::RepeatedPtrField< ::flyteidl::core::TaskLog >& +CreateTaskResponse::log_links() const { + // @@protoc_insertion_point(field_list:flyteidl.admin.CreateTaskResponse.log_links) + return log_links_; +} + +inline bool CreateTaskResponse::has_res() const { + return res_case() != RES_NOT_SET; +} +inline void CreateTaskResponse::clear_has_res() { + _oneof_case_[0] = RES_NOT_SET; +} +inline CreateTaskResponse::ResCase CreateTaskResponse::res_case() const { + return CreateTaskResponse::ResCase(_oneof_case_[0]); +} // ------------------------------------------------------------------- // GetTaskRequest @@ -2481,259 +2368,6 @@ inline void DeleteTaskRequest::set_allocated_resource_meta(::std::string* resour // DeleteTaskResponse -// ------------------------------------------------------------------- - -// DoTaskRequest - -// .flyteidl.core.LiteralMap inputs = 1; -inline bool DoTaskRequest::has_inputs() const { - return this != internal_default_instance() && inputs_ != nullptr; -} -inline const ::flyteidl::core::LiteralMap& DoTaskRequest::inputs() const { - const ::flyteidl::core::LiteralMap* p = inputs_; - // @@protoc_insertion_point(field_get:flyteidl.admin.DoTaskRequest.inputs) - return p != nullptr ? *p : *reinterpret_cast( - &::flyteidl::core::_LiteralMap_default_instance_); -} -inline ::flyteidl::core::LiteralMap* DoTaskRequest::release_inputs() { - // @@protoc_insertion_point(field_release:flyteidl.admin.DoTaskRequest.inputs) - - ::flyteidl::core::LiteralMap* temp = inputs_; - inputs_ = nullptr; - return temp; -} -inline ::flyteidl::core::LiteralMap* DoTaskRequest::mutable_inputs() { - - if (inputs_ == nullptr) { - auto* p = CreateMaybeMessage<::flyteidl::core::LiteralMap>(GetArenaNoVirtual()); - inputs_ = p; - } - // @@protoc_insertion_point(field_mutable:flyteidl.admin.DoTaskRequest.inputs) - return inputs_; -} -inline void DoTaskRequest::set_allocated_inputs(::flyteidl::core::LiteralMap* inputs) { - ::google::protobuf::Arena* message_arena = GetArenaNoVirtual(); - if (message_arena == nullptr) { - delete reinterpret_cast< ::google::protobuf::MessageLite*>(inputs_); - } - if (inputs) { - ::google::protobuf::Arena* submessage_arena = nullptr; - if (message_arena != submessage_arena) { - inputs = ::google::protobuf::internal::GetOwnedMessage( - message_arena, inputs, submessage_arena); - } - - } else { - - } - inputs_ = inputs; - // @@protoc_insertion_point(field_set_allocated:flyteidl.admin.DoTaskRequest.inputs) -} - -// .flyteidl.core.TaskTemplate template = 2; -inline bool DoTaskRequest::has_template_() const { - return this != internal_default_instance() && template__ != nullptr; -} -inline const ::flyteidl::core::TaskTemplate& DoTaskRequest::template_() const { - const ::flyteidl::core::TaskTemplate* p = template__; - // @@protoc_insertion_point(field_get:flyteidl.admin.DoTaskRequest.template) - return p != nullptr ? *p : *reinterpret_cast( - &::flyteidl::core::_TaskTemplate_default_instance_); -} -inline ::flyteidl::core::TaskTemplate* DoTaskRequest::release_template_() { - // @@protoc_insertion_point(field_release:flyteidl.admin.DoTaskRequest.template) - - ::flyteidl::core::TaskTemplate* temp = template__; - template__ = nullptr; - return temp; -} -inline ::flyteidl::core::TaskTemplate* DoTaskRequest::mutable_template_() { - - if (template__ == nullptr) { - auto* p = CreateMaybeMessage<::flyteidl::core::TaskTemplate>(GetArenaNoVirtual()); - template__ = p; - } - // @@protoc_insertion_point(field_mutable:flyteidl.admin.DoTaskRequest.template) - return template__; -} -inline void DoTaskRequest::set_allocated_template_(::flyteidl::core::TaskTemplate* template_) { - ::google::protobuf::Arena* message_arena = GetArenaNoVirtual(); - if (message_arena == nullptr) { - delete reinterpret_cast< ::google::protobuf::MessageLite*>(template__); - } - if (template_) { - ::google::protobuf::Arena* submessage_arena = nullptr; - if (message_arena != submessage_arena) { - template_ = ::google::protobuf::internal::GetOwnedMessage( - message_arena, template_, submessage_arena); - } - - } else { - - } - template__ = template_; - // @@protoc_insertion_point(field_set_allocated:flyteidl.admin.DoTaskRequest.template) -} - -// string output_prefix = 3; -inline void DoTaskRequest::clear_output_prefix() { - output_prefix_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); -} -inline const ::std::string& DoTaskRequest::output_prefix() const { - // @@protoc_insertion_point(field_get:flyteidl.admin.DoTaskRequest.output_prefix) - return output_prefix_.GetNoArena(); -} -inline void DoTaskRequest::set_output_prefix(const ::std::string& value) { - - output_prefix_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value); - // @@protoc_insertion_point(field_set:flyteidl.admin.DoTaskRequest.output_prefix) -} -#if LANG_CXX11 -inline void DoTaskRequest::set_output_prefix(::std::string&& value) { - - output_prefix_.SetNoArena( - &::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::move(value)); - // @@protoc_insertion_point(field_set_rvalue:flyteidl.admin.DoTaskRequest.output_prefix) -} -#endif -inline void DoTaskRequest::set_output_prefix(const char* value) { - GOOGLE_DCHECK(value != nullptr); - - output_prefix_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); - // @@protoc_insertion_point(field_set_char:flyteidl.admin.DoTaskRequest.output_prefix) -} -inline void DoTaskRequest::set_output_prefix(const char* value, size_t size) { - - output_prefix_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), - ::std::string(reinterpret_cast(value), size)); - // @@protoc_insertion_point(field_set_pointer:flyteidl.admin.DoTaskRequest.output_prefix) -} -inline ::std::string* DoTaskRequest::mutable_output_prefix() { - - // @@protoc_insertion_point(field_mutable:flyteidl.admin.DoTaskRequest.output_prefix) - return output_prefix_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); -} -inline ::std::string* DoTaskRequest::release_output_prefix() { - // @@protoc_insertion_point(field_release:flyteidl.admin.DoTaskRequest.output_prefix) - - return output_prefix_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); -} -inline void DoTaskRequest::set_allocated_output_prefix(::std::string* output_prefix) { - if (output_prefix != nullptr) { - - } else { - - } - output_prefix_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), output_prefix); - // @@protoc_insertion_point(field_set_allocated:flyteidl.admin.DoTaskRequest.output_prefix) -} - -// .flyteidl.admin.TaskExecutionMetadata task_execution_metadata = 4; -inline bool DoTaskRequest::has_task_execution_metadata() const { - return this != internal_default_instance() && task_execution_metadata_ != nullptr; -} -inline void DoTaskRequest::clear_task_execution_metadata() { - if (GetArenaNoVirtual() == nullptr && task_execution_metadata_ != nullptr) { - delete task_execution_metadata_; - } - task_execution_metadata_ = nullptr; -} -inline const ::flyteidl::admin::TaskExecutionMetadata& DoTaskRequest::task_execution_metadata() const { - const ::flyteidl::admin::TaskExecutionMetadata* p = task_execution_metadata_; - // @@protoc_insertion_point(field_get:flyteidl.admin.DoTaskRequest.task_execution_metadata) - return p != nullptr ? *p : *reinterpret_cast( - &::flyteidl::admin::_TaskExecutionMetadata_default_instance_); -} -inline ::flyteidl::admin::TaskExecutionMetadata* DoTaskRequest::release_task_execution_metadata() { - // @@protoc_insertion_point(field_release:flyteidl.admin.DoTaskRequest.task_execution_metadata) - - ::flyteidl::admin::TaskExecutionMetadata* temp = task_execution_metadata_; - task_execution_metadata_ = nullptr; - return temp; -} -inline ::flyteidl::admin::TaskExecutionMetadata* DoTaskRequest::mutable_task_execution_metadata() { - - if (task_execution_metadata_ == nullptr) { - auto* p = CreateMaybeMessage<::flyteidl::admin::TaskExecutionMetadata>(GetArenaNoVirtual()); - task_execution_metadata_ = p; - } - // @@protoc_insertion_point(field_mutable:flyteidl.admin.DoTaskRequest.task_execution_metadata) - return task_execution_metadata_; -} -inline void DoTaskRequest::set_allocated_task_execution_metadata(::flyteidl::admin::TaskExecutionMetadata* task_execution_metadata) { - ::google::protobuf::Arena* message_arena = GetArenaNoVirtual(); - if (message_arena == nullptr) { - delete task_execution_metadata_; - } - if (task_execution_metadata) { - ::google::protobuf::Arena* submessage_arena = nullptr; - if (message_arena != submessage_arena) { - task_execution_metadata = ::google::protobuf::internal::GetOwnedMessage( - message_arena, task_execution_metadata, submessage_arena); - } - - } else { - - } - task_execution_metadata_ = task_execution_metadata; - // @@protoc_insertion_point(field_set_allocated:flyteidl.admin.DoTaskRequest.task_execution_metadata) -} - -// ------------------------------------------------------------------- - -// DoTaskResponse - -// .flyteidl.admin.Resource resource = 1; -inline bool DoTaskResponse::has_resource() const { - return this != internal_default_instance() && resource_ != nullptr; -} -inline void DoTaskResponse::clear_resource() { - if (GetArenaNoVirtual() == nullptr && resource_ != nullptr) { - delete resource_; - } - resource_ = nullptr; -} -inline const ::flyteidl::admin::Resource& DoTaskResponse::resource() const { - const ::flyteidl::admin::Resource* p = resource_; - // @@protoc_insertion_point(field_get:flyteidl.admin.DoTaskResponse.resource) - return p != nullptr ? *p : *reinterpret_cast( - &::flyteidl::admin::_Resource_default_instance_); -} -inline ::flyteidl::admin::Resource* DoTaskResponse::release_resource() { - // @@protoc_insertion_point(field_release:flyteidl.admin.DoTaskResponse.resource) - - ::flyteidl::admin::Resource* temp = resource_; - resource_ = nullptr; - return temp; -} -inline ::flyteidl::admin::Resource* DoTaskResponse::mutable_resource() { - - if (resource_ == nullptr) { - auto* p = CreateMaybeMessage<::flyteidl::admin::Resource>(GetArenaNoVirtual()); - resource_ = p; - } - // @@protoc_insertion_point(field_mutable:flyteidl.admin.DoTaskResponse.resource) - return resource_; -} -inline void DoTaskResponse::set_allocated_resource(::flyteidl::admin::Resource* resource) { - ::google::protobuf::Arena* message_arena = GetArenaNoVirtual(); - if (message_arena == nullptr) { - delete resource_; - } - if (resource) { - ::google::protobuf::Arena* submessage_arena = nullptr; - if (message_arena != submessage_arena) { - resource = ::google::protobuf::internal::GetOwnedMessage( - message_arena, resource, submessage_arena); - } - - } else { - - } - resource_ = resource; - // @@protoc_insertion_point(field_set_allocated:flyteidl.admin.DoTaskResponse.resource) -} - #ifdef __GNUC__ #pragma GCC diagnostic pop #endif // __GNUC__ @@ -2757,10 +2391,6 @@ inline void DoTaskResponse::set_allocated_resource(::flyteidl::admin::Resource* // ------------------------------------------------------------------- -// ------------------------------------------------------------------- - -// ------------------------------------------------------------------- - // @@protoc_insertion_point(namespace_scope) diff --git a/flyteidl/gen/pb-cpp/flyteidl/service/agent.grpc.pb.cc b/flyteidl/gen/pb-cpp/flyteidl/service/agent.grpc.pb.cc index c8d6d1b2e1..b0552a3645 100644 --- a/flyteidl/gen/pb-cpp/flyteidl/service/agent.grpc.pb.cc +++ b/flyteidl/gen/pb-cpp/flyteidl/service/agent.grpc.pb.cc @@ -19,205 +19,144 @@ namespace flyteidl { namespace service { -static const char* AsyncAgentService_method_names[] = { - "/flyteidl.service.AsyncAgentService/CreateTask", - "/flyteidl.service.AsyncAgentService/GetTask", - "/flyteidl.service.AsyncAgentService/DeleteTask", +static const char* AgentService_method_names[] = { + "/flyteidl.service.AgentService/CreateTask", + "/flyteidl.service.AgentService/GetTask", + "/flyteidl.service.AgentService/DeleteTask", }; -std::unique_ptr< AsyncAgentService::Stub> AsyncAgentService::NewStub(const std::shared_ptr< ::grpc::ChannelInterface>& channel, const ::grpc::StubOptions& options) { +std::unique_ptr< AgentService::Stub> AgentService::NewStub(const std::shared_ptr< ::grpc::ChannelInterface>& channel, const ::grpc::StubOptions& options) { (void)options; - std::unique_ptr< AsyncAgentService::Stub> stub(new AsyncAgentService::Stub(channel)); + std::unique_ptr< AgentService::Stub> stub(new AgentService::Stub(channel)); return stub; } -AsyncAgentService::Stub::Stub(const std::shared_ptr< ::grpc::ChannelInterface>& channel) - : channel_(channel), rpcmethod_CreateTask_(AsyncAgentService_method_names[0], ::grpc::internal::RpcMethod::NORMAL_RPC, channel) - , rpcmethod_GetTask_(AsyncAgentService_method_names[1], ::grpc::internal::RpcMethod::NORMAL_RPC, channel) - , rpcmethod_DeleteTask_(AsyncAgentService_method_names[2], ::grpc::internal::RpcMethod::NORMAL_RPC, channel) +AgentService::Stub::Stub(const std::shared_ptr< ::grpc::ChannelInterface>& channel) + : channel_(channel), rpcmethod_CreateTask_(AgentService_method_names[0], ::grpc::internal::RpcMethod::NORMAL_RPC, channel) + , rpcmethod_GetTask_(AgentService_method_names[1], ::grpc::internal::RpcMethod::NORMAL_RPC, channel) + , rpcmethod_DeleteTask_(AgentService_method_names[2], ::grpc::internal::RpcMethod::NORMAL_RPC, channel) {} -::grpc::Status AsyncAgentService::Stub::CreateTask(::grpc::ClientContext* context, const ::flyteidl::admin::CreateTaskRequest& request, ::flyteidl::admin::CreateTaskResponse* response) { +::grpc::Status AgentService::Stub::CreateTask(::grpc::ClientContext* context, const ::flyteidl::admin::CreateTaskRequest& request, ::flyteidl::admin::CreateTaskResponse* response) { return ::grpc::internal::BlockingUnaryCall(channel_.get(), rpcmethod_CreateTask_, context, request, response); } -void AsyncAgentService::Stub::experimental_async::CreateTask(::grpc::ClientContext* context, const ::flyteidl::admin::CreateTaskRequest* request, ::flyteidl::admin::CreateTaskResponse* response, std::function f) { +void AgentService::Stub::experimental_async::CreateTask(::grpc::ClientContext* context, const ::flyteidl::admin::CreateTaskRequest* request, ::flyteidl::admin::CreateTaskResponse* response, std::function f) { ::grpc::internal::CallbackUnaryCall(stub_->channel_.get(), stub_->rpcmethod_CreateTask_, context, request, response, std::move(f)); } -void AsyncAgentService::Stub::experimental_async::CreateTask(::grpc::ClientContext* context, const ::grpc::ByteBuffer* request, ::flyteidl::admin::CreateTaskResponse* response, std::function f) { +void AgentService::Stub::experimental_async::CreateTask(::grpc::ClientContext* context, const ::grpc::ByteBuffer* request, ::flyteidl::admin::CreateTaskResponse* response, std::function f) { ::grpc::internal::CallbackUnaryCall(stub_->channel_.get(), stub_->rpcmethod_CreateTask_, context, request, response, std::move(f)); } -void AsyncAgentService::Stub::experimental_async::CreateTask(::grpc::ClientContext* context, const ::flyteidl::admin::CreateTaskRequest* request, ::flyteidl::admin::CreateTaskResponse* response, ::grpc::experimental::ClientUnaryReactor* reactor) { +void AgentService::Stub::experimental_async::CreateTask(::grpc::ClientContext* context, const ::flyteidl::admin::CreateTaskRequest* request, ::flyteidl::admin::CreateTaskResponse* response, ::grpc::experimental::ClientUnaryReactor* reactor) { ::grpc::internal::ClientCallbackUnaryFactory::Create(stub_->channel_.get(), stub_->rpcmethod_CreateTask_, context, request, response, reactor); } -void AsyncAgentService::Stub::experimental_async::CreateTask(::grpc::ClientContext* context, const ::grpc::ByteBuffer* request, ::flyteidl::admin::CreateTaskResponse* response, ::grpc::experimental::ClientUnaryReactor* reactor) { +void AgentService::Stub::experimental_async::CreateTask(::grpc::ClientContext* context, const ::grpc::ByteBuffer* request, ::flyteidl::admin::CreateTaskResponse* response, ::grpc::experimental::ClientUnaryReactor* reactor) { ::grpc::internal::ClientCallbackUnaryFactory::Create(stub_->channel_.get(), stub_->rpcmethod_CreateTask_, context, request, response, reactor); } -::grpc::ClientAsyncResponseReader< ::flyteidl::admin::CreateTaskResponse>* AsyncAgentService::Stub::AsyncCreateTaskRaw(::grpc::ClientContext* context, const ::flyteidl::admin::CreateTaskRequest& request, ::grpc::CompletionQueue* cq) { +::grpc::ClientAsyncResponseReader< ::flyteidl::admin::CreateTaskResponse>* AgentService::Stub::AsyncCreateTaskRaw(::grpc::ClientContext* context, const ::flyteidl::admin::CreateTaskRequest& request, ::grpc::CompletionQueue* cq) { return ::grpc::internal::ClientAsyncResponseReaderFactory< ::flyteidl::admin::CreateTaskResponse>::Create(channel_.get(), cq, rpcmethod_CreateTask_, context, request, true); } -::grpc::ClientAsyncResponseReader< ::flyteidl::admin::CreateTaskResponse>* AsyncAgentService::Stub::PrepareAsyncCreateTaskRaw(::grpc::ClientContext* context, const ::flyteidl::admin::CreateTaskRequest& request, ::grpc::CompletionQueue* cq) { +::grpc::ClientAsyncResponseReader< ::flyteidl::admin::CreateTaskResponse>* AgentService::Stub::PrepareAsyncCreateTaskRaw(::grpc::ClientContext* context, const ::flyteidl::admin::CreateTaskRequest& request, ::grpc::CompletionQueue* cq) { return ::grpc::internal::ClientAsyncResponseReaderFactory< ::flyteidl::admin::CreateTaskResponse>::Create(channel_.get(), cq, rpcmethod_CreateTask_, context, request, false); } -::grpc::Status AsyncAgentService::Stub::GetTask(::grpc::ClientContext* context, const ::flyteidl::admin::GetTaskRequest& request, ::flyteidl::admin::GetTaskResponse* response) { +::grpc::Status AgentService::Stub::GetTask(::grpc::ClientContext* context, const ::flyteidl::admin::GetTaskRequest& request, ::flyteidl::admin::GetTaskResponse* response) { return ::grpc::internal::BlockingUnaryCall(channel_.get(), rpcmethod_GetTask_, context, request, response); } -void AsyncAgentService::Stub::experimental_async::GetTask(::grpc::ClientContext* context, const ::flyteidl::admin::GetTaskRequest* request, ::flyteidl::admin::GetTaskResponse* response, std::function f) { +void AgentService::Stub::experimental_async::GetTask(::grpc::ClientContext* context, const ::flyteidl::admin::GetTaskRequest* request, ::flyteidl::admin::GetTaskResponse* response, std::function f) { ::grpc::internal::CallbackUnaryCall(stub_->channel_.get(), stub_->rpcmethod_GetTask_, context, request, response, std::move(f)); } -void AsyncAgentService::Stub::experimental_async::GetTask(::grpc::ClientContext* context, const ::grpc::ByteBuffer* request, ::flyteidl::admin::GetTaskResponse* response, std::function f) { +void AgentService::Stub::experimental_async::GetTask(::grpc::ClientContext* context, const ::grpc::ByteBuffer* request, ::flyteidl::admin::GetTaskResponse* response, std::function f) { ::grpc::internal::CallbackUnaryCall(stub_->channel_.get(), stub_->rpcmethod_GetTask_, context, request, response, std::move(f)); } -void AsyncAgentService::Stub::experimental_async::GetTask(::grpc::ClientContext* context, const ::flyteidl::admin::GetTaskRequest* request, ::flyteidl::admin::GetTaskResponse* response, ::grpc::experimental::ClientUnaryReactor* reactor) { +void AgentService::Stub::experimental_async::GetTask(::grpc::ClientContext* context, const ::flyteidl::admin::GetTaskRequest* request, ::flyteidl::admin::GetTaskResponse* response, ::grpc::experimental::ClientUnaryReactor* reactor) { ::grpc::internal::ClientCallbackUnaryFactory::Create(stub_->channel_.get(), stub_->rpcmethod_GetTask_, context, request, response, reactor); } -void AsyncAgentService::Stub::experimental_async::GetTask(::grpc::ClientContext* context, const ::grpc::ByteBuffer* request, ::flyteidl::admin::GetTaskResponse* response, ::grpc::experimental::ClientUnaryReactor* reactor) { +void AgentService::Stub::experimental_async::GetTask(::grpc::ClientContext* context, const ::grpc::ByteBuffer* request, ::flyteidl::admin::GetTaskResponse* response, ::grpc::experimental::ClientUnaryReactor* reactor) { ::grpc::internal::ClientCallbackUnaryFactory::Create(stub_->channel_.get(), stub_->rpcmethod_GetTask_, context, request, response, reactor); } -::grpc::ClientAsyncResponseReader< ::flyteidl::admin::GetTaskResponse>* AsyncAgentService::Stub::AsyncGetTaskRaw(::grpc::ClientContext* context, const ::flyteidl::admin::GetTaskRequest& request, ::grpc::CompletionQueue* cq) { +::grpc::ClientAsyncResponseReader< ::flyteidl::admin::GetTaskResponse>* AgentService::Stub::AsyncGetTaskRaw(::grpc::ClientContext* context, const ::flyteidl::admin::GetTaskRequest& request, ::grpc::CompletionQueue* cq) { return ::grpc::internal::ClientAsyncResponseReaderFactory< ::flyteidl::admin::GetTaskResponse>::Create(channel_.get(), cq, rpcmethod_GetTask_, context, request, true); } -::grpc::ClientAsyncResponseReader< ::flyteidl::admin::GetTaskResponse>* AsyncAgentService::Stub::PrepareAsyncGetTaskRaw(::grpc::ClientContext* context, const ::flyteidl::admin::GetTaskRequest& request, ::grpc::CompletionQueue* cq) { +::grpc::ClientAsyncResponseReader< ::flyteidl::admin::GetTaskResponse>* AgentService::Stub::PrepareAsyncGetTaskRaw(::grpc::ClientContext* context, const ::flyteidl::admin::GetTaskRequest& request, ::grpc::CompletionQueue* cq) { return ::grpc::internal::ClientAsyncResponseReaderFactory< ::flyteidl::admin::GetTaskResponse>::Create(channel_.get(), cq, rpcmethod_GetTask_, context, request, false); } -::grpc::Status AsyncAgentService::Stub::DeleteTask(::grpc::ClientContext* context, const ::flyteidl::admin::DeleteTaskRequest& request, ::flyteidl::admin::DeleteTaskResponse* response) { +::grpc::Status AgentService::Stub::DeleteTask(::grpc::ClientContext* context, const ::flyteidl::admin::DeleteTaskRequest& request, ::flyteidl::admin::DeleteTaskResponse* response) { return ::grpc::internal::BlockingUnaryCall(channel_.get(), rpcmethod_DeleteTask_, context, request, response); } -void AsyncAgentService::Stub::experimental_async::DeleteTask(::grpc::ClientContext* context, const ::flyteidl::admin::DeleteTaskRequest* request, ::flyteidl::admin::DeleteTaskResponse* response, std::function f) { +void AgentService::Stub::experimental_async::DeleteTask(::grpc::ClientContext* context, const ::flyteidl::admin::DeleteTaskRequest* request, ::flyteidl::admin::DeleteTaskResponse* response, std::function f) { ::grpc::internal::CallbackUnaryCall(stub_->channel_.get(), stub_->rpcmethod_DeleteTask_, context, request, response, std::move(f)); } -void AsyncAgentService::Stub::experimental_async::DeleteTask(::grpc::ClientContext* context, const ::grpc::ByteBuffer* request, ::flyteidl::admin::DeleteTaskResponse* response, std::function f) { +void AgentService::Stub::experimental_async::DeleteTask(::grpc::ClientContext* context, const ::grpc::ByteBuffer* request, ::flyteidl::admin::DeleteTaskResponse* response, std::function f) { ::grpc::internal::CallbackUnaryCall(stub_->channel_.get(), stub_->rpcmethod_DeleteTask_, context, request, response, std::move(f)); } -void AsyncAgentService::Stub::experimental_async::DeleteTask(::grpc::ClientContext* context, const ::flyteidl::admin::DeleteTaskRequest* request, ::flyteidl::admin::DeleteTaskResponse* response, ::grpc::experimental::ClientUnaryReactor* reactor) { +void AgentService::Stub::experimental_async::DeleteTask(::grpc::ClientContext* context, const ::flyteidl::admin::DeleteTaskRequest* request, ::flyteidl::admin::DeleteTaskResponse* response, ::grpc::experimental::ClientUnaryReactor* reactor) { ::grpc::internal::ClientCallbackUnaryFactory::Create(stub_->channel_.get(), stub_->rpcmethod_DeleteTask_, context, request, response, reactor); } -void AsyncAgentService::Stub::experimental_async::DeleteTask(::grpc::ClientContext* context, const ::grpc::ByteBuffer* request, ::flyteidl::admin::DeleteTaskResponse* response, ::grpc::experimental::ClientUnaryReactor* reactor) { +void AgentService::Stub::experimental_async::DeleteTask(::grpc::ClientContext* context, const ::grpc::ByteBuffer* request, ::flyteidl::admin::DeleteTaskResponse* response, ::grpc::experimental::ClientUnaryReactor* reactor) { ::grpc::internal::ClientCallbackUnaryFactory::Create(stub_->channel_.get(), stub_->rpcmethod_DeleteTask_, context, request, response, reactor); } -::grpc::ClientAsyncResponseReader< ::flyteidl::admin::DeleteTaskResponse>* AsyncAgentService::Stub::AsyncDeleteTaskRaw(::grpc::ClientContext* context, const ::flyteidl::admin::DeleteTaskRequest& request, ::grpc::CompletionQueue* cq) { +::grpc::ClientAsyncResponseReader< ::flyteidl::admin::DeleteTaskResponse>* AgentService::Stub::AsyncDeleteTaskRaw(::grpc::ClientContext* context, const ::flyteidl::admin::DeleteTaskRequest& request, ::grpc::CompletionQueue* cq) { return ::grpc::internal::ClientAsyncResponseReaderFactory< ::flyteidl::admin::DeleteTaskResponse>::Create(channel_.get(), cq, rpcmethod_DeleteTask_, context, request, true); } -::grpc::ClientAsyncResponseReader< ::flyteidl::admin::DeleteTaskResponse>* AsyncAgentService::Stub::PrepareAsyncDeleteTaskRaw(::grpc::ClientContext* context, const ::flyteidl::admin::DeleteTaskRequest& request, ::grpc::CompletionQueue* cq) { +::grpc::ClientAsyncResponseReader< ::flyteidl::admin::DeleteTaskResponse>* AgentService::Stub::PrepareAsyncDeleteTaskRaw(::grpc::ClientContext* context, const ::flyteidl::admin::DeleteTaskRequest& request, ::grpc::CompletionQueue* cq) { return ::grpc::internal::ClientAsyncResponseReaderFactory< ::flyteidl::admin::DeleteTaskResponse>::Create(channel_.get(), cq, rpcmethod_DeleteTask_, context, request, false); } -AsyncAgentService::Service::Service() { +AgentService::Service::Service() { AddMethod(new ::grpc::internal::RpcServiceMethod( - AsyncAgentService_method_names[0], + AgentService_method_names[0], ::grpc::internal::RpcMethod::NORMAL_RPC, - new ::grpc::internal::RpcMethodHandler< AsyncAgentService::Service, ::flyteidl::admin::CreateTaskRequest, ::flyteidl::admin::CreateTaskResponse>( - std::mem_fn(&AsyncAgentService::Service::CreateTask), this))); + new ::grpc::internal::RpcMethodHandler< AgentService::Service, ::flyteidl::admin::CreateTaskRequest, ::flyteidl::admin::CreateTaskResponse>( + std::mem_fn(&AgentService::Service::CreateTask), this))); AddMethod(new ::grpc::internal::RpcServiceMethod( - AsyncAgentService_method_names[1], + AgentService_method_names[1], ::grpc::internal::RpcMethod::NORMAL_RPC, - new ::grpc::internal::RpcMethodHandler< AsyncAgentService::Service, ::flyteidl::admin::GetTaskRequest, ::flyteidl::admin::GetTaskResponse>( - std::mem_fn(&AsyncAgentService::Service::GetTask), this))); + new ::grpc::internal::RpcMethodHandler< AgentService::Service, ::flyteidl::admin::GetTaskRequest, ::flyteidl::admin::GetTaskResponse>( + std::mem_fn(&AgentService::Service::GetTask), this))); AddMethod(new ::grpc::internal::RpcServiceMethod( - AsyncAgentService_method_names[2], + AgentService_method_names[2], ::grpc::internal::RpcMethod::NORMAL_RPC, - new ::grpc::internal::RpcMethodHandler< AsyncAgentService::Service, ::flyteidl::admin::DeleteTaskRequest, ::flyteidl::admin::DeleteTaskResponse>( - std::mem_fn(&AsyncAgentService::Service::DeleteTask), this))); + new ::grpc::internal::RpcMethodHandler< AgentService::Service, ::flyteidl::admin::DeleteTaskRequest, ::flyteidl::admin::DeleteTaskResponse>( + std::mem_fn(&AgentService::Service::DeleteTask), this))); } -AsyncAgentService::Service::~Service() { +AgentService::Service::~Service() { } -::grpc::Status AsyncAgentService::Service::CreateTask(::grpc::ServerContext* context, const ::flyteidl::admin::CreateTaskRequest* request, ::flyteidl::admin::CreateTaskResponse* response) { +::grpc::Status AgentService::Service::CreateTask(::grpc::ServerContext* context, const ::flyteidl::admin::CreateTaskRequest* request, ::flyteidl::admin::CreateTaskResponse* response) { (void) context; (void) request; (void) response; return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, ""); } -::grpc::Status AsyncAgentService::Service::GetTask(::grpc::ServerContext* context, const ::flyteidl::admin::GetTaskRequest* request, ::flyteidl::admin::GetTaskResponse* response) { +::grpc::Status AgentService::Service::GetTask(::grpc::ServerContext* context, const ::flyteidl::admin::GetTaskRequest* request, ::flyteidl::admin::GetTaskResponse* response) { (void) context; (void) request; (void) response; return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, ""); } -::grpc::Status AsyncAgentService::Service::DeleteTask(::grpc::ServerContext* context, const ::flyteidl::admin::DeleteTaskRequest* request, ::flyteidl::admin::DeleteTaskResponse* response) { - (void) context; - (void) request; - (void) response; - return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, ""); -} - - -static const char* SyncAgentService_method_names[] = { - "/flyteidl.service.SyncAgentService/DoTask", -}; - -std::unique_ptr< SyncAgentService::Stub> SyncAgentService::NewStub(const std::shared_ptr< ::grpc::ChannelInterface>& channel, const ::grpc::StubOptions& options) { - (void)options; - std::unique_ptr< SyncAgentService::Stub> stub(new SyncAgentService::Stub(channel)); - return stub; -} - -SyncAgentService::Stub::Stub(const std::shared_ptr< ::grpc::ChannelInterface>& channel) - : channel_(channel), rpcmethod_DoTask_(SyncAgentService_method_names[0], ::grpc::internal::RpcMethod::NORMAL_RPC, channel) - {} - -::grpc::Status SyncAgentService::Stub::DoTask(::grpc::ClientContext* context, const ::flyteidl::admin::DoTaskRequest& request, ::flyteidl::admin::DoTaskResponse* response) { - return ::grpc::internal::BlockingUnaryCall(channel_.get(), rpcmethod_DoTask_, context, request, response); -} - -void SyncAgentService::Stub::experimental_async::DoTask(::grpc::ClientContext* context, const ::flyteidl::admin::DoTaskRequest* request, ::flyteidl::admin::DoTaskResponse* response, std::function f) { - ::grpc::internal::CallbackUnaryCall(stub_->channel_.get(), stub_->rpcmethod_DoTask_, context, request, response, std::move(f)); -} - -void SyncAgentService::Stub::experimental_async::DoTask(::grpc::ClientContext* context, const ::grpc::ByteBuffer* request, ::flyteidl::admin::DoTaskResponse* response, std::function f) { - ::grpc::internal::CallbackUnaryCall(stub_->channel_.get(), stub_->rpcmethod_DoTask_, context, request, response, std::move(f)); -} - -void SyncAgentService::Stub::experimental_async::DoTask(::grpc::ClientContext* context, const ::flyteidl::admin::DoTaskRequest* request, ::flyteidl::admin::DoTaskResponse* response, ::grpc::experimental::ClientUnaryReactor* reactor) { - ::grpc::internal::ClientCallbackUnaryFactory::Create(stub_->channel_.get(), stub_->rpcmethod_DoTask_, context, request, response, reactor); -} - -void SyncAgentService::Stub::experimental_async::DoTask(::grpc::ClientContext* context, const ::grpc::ByteBuffer* request, ::flyteidl::admin::DoTaskResponse* response, ::grpc::experimental::ClientUnaryReactor* reactor) { - ::grpc::internal::ClientCallbackUnaryFactory::Create(stub_->channel_.get(), stub_->rpcmethod_DoTask_, context, request, response, reactor); -} - -::grpc::ClientAsyncResponseReader< ::flyteidl::admin::DoTaskResponse>* SyncAgentService::Stub::AsyncDoTaskRaw(::grpc::ClientContext* context, const ::flyteidl::admin::DoTaskRequest& request, ::grpc::CompletionQueue* cq) { - return ::grpc::internal::ClientAsyncResponseReaderFactory< ::flyteidl::admin::DoTaskResponse>::Create(channel_.get(), cq, rpcmethod_DoTask_, context, request, true); -} - -::grpc::ClientAsyncResponseReader< ::flyteidl::admin::DoTaskResponse>* SyncAgentService::Stub::PrepareAsyncDoTaskRaw(::grpc::ClientContext* context, const ::flyteidl::admin::DoTaskRequest& request, ::grpc::CompletionQueue* cq) { - return ::grpc::internal::ClientAsyncResponseReaderFactory< ::flyteidl::admin::DoTaskResponse>::Create(channel_.get(), cq, rpcmethod_DoTask_, context, request, false); -} - -SyncAgentService::Service::Service() { - AddMethod(new ::grpc::internal::RpcServiceMethod( - SyncAgentService_method_names[0], - ::grpc::internal::RpcMethod::NORMAL_RPC, - new ::grpc::internal::RpcMethodHandler< SyncAgentService::Service, ::flyteidl::admin::DoTaskRequest, ::flyteidl::admin::DoTaskResponse>( - std::mem_fn(&SyncAgentService::Service::DoTask), this))); -} - -SyncAgentService::Service::~Service() { -} - -::grpc::Status SyncAgentService::Service::DoTask(::grpc::ServerContext* context, const ::flyteidl::admin::DoTaskRequest* request, ::flyteidl::admin::DoTaskResponse* response) { +::grpc::Status AgentService::Service::DeleteTask(::grpc::ServerContext* context, const ::flyteidl::admin::DeleteTaskRequest* request, ::flyteidl::admin::DeleteTaskResponse* response) { (void) context; (void) request; (void) response; diff --git a/flyteidl/gen/pb-cpp/flyteidl/service/agent.grpc.pb.h b/flyteidl/gen/pb-cpp/flyteidl/service/agent.grpc.pb.h index b918fa5893..412a8bfd75 100644 --- a/flyteidl/gen/pb-cpp/flyteidl/service/agent.grpc.pb.h +++ b/flyteidl/gen/pb-cpp/flyteidl/service/agent.grpc.pb.h @@ -41,10 +41,13 @@ namespace flyteidl { namespace service { // AgentService defines an RPC Service that allows propeller to send the request to the agent server. -class AsyncAgentService final { +// It can handle asynchronous tasks and synchronous tasks. +// Asynchronous tasks are for tasks running long, for example running query job. +// Synchronous tasks are for tasks running quick, for example, you want to execute something really fast, or even retrieving some metadata from a backend service. +class AgentService final { public: static constexpr char const* service_full_name() { - return "flyteidl.service.AsyncAgentService"; + return "flyteidl.service.AgentService"; } class StubInterface { public: @@ -580,217 +583,6 @@ class AsyncAgentService final { typedef WithStreamedUnaryMethod_CreateTask > > StreamedService; }; -class SyncAgentService final { - public: - static constexpr char const* service_full_name() { - return "flyteidl.service.SyncAgentService"; - } - class StubInterface { - public: - virtual ~StubInterface() {} - // Do a job and get response from the agent server. - virtual ::grpc::Status DoTask(::grpc::ClientContext* context, const ::flyteidl::admin::DoTaskRequest& request, ::flyteidl::admin::DoTaskResponse* response) = 0; - std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flyteidl::admin::DoTaskResponse>> AsyncDoTask(::grpc::ClientContext* context, const ::flyteidl::admin::DoTaskRequest& request, ::grpc::CompletionQueue* cq) { - return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flyteidl::admin::DoTaskResponse>>(AsyncDoTaskRaw(context, request, cq)); - } - std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flyteidl::admin::DoTaskResponse>> PrepareAsyncDoTask(::grpc::ClientContext* context, const ::flyteidl::admin::DoTaskRequest& request, ::grpc::CompletionQueue* cq) { - return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flyteidl::admin::DoTaskResponse>>(PrepareAsyncDoTaskRaw(context, request, cq)); - } - class experimental_async_interface { - public: - virtual ~experimental_async_interface() {} - // Do a job and get response from the agent server. - virtual void DoTask(::grpc::ClientContext* context, const ::flyteidl::admin::DoTaskRequest* request, ::flyteidl::admin::DoTaskResponse* response, std::function) = 0; - virtual void DoTask(::grpc::ClientContext* context, const ::grpc::ByteBuffer* request, ::flyteidl::admin::DoTaskResponse* response, std::function) = 0; - virtual void DoTask(::grpc::ClientContext* context, const ::flyteidl::admin::DoTaskRequest* request, ::flyteidl::admin::DoTaskResponse* response, ::grpc::experimental::ClientUnaryReactor* reactor) = 0; - virtual void DoTask(::grpc::ClientContext* context, const ::grpc::ByteBuffer* request, ::flyteidl::admin::DoTaskResponse* response, ::grpc::experimental::ClientUnaryReactor* reactor) = 0; - }; - virtual class experimental_async_interface* experimental_async() { return nullptr; } - private: - virtual ::grpc::ClientAsyncResponseReaderInterface< ::flyteidl::admin::DoTaskResponse>* AsyncDoTaskRaw(::grpc::ClientContext* context, const ::flyteidl::admin::DoTaskRequest& request, ::grpc::CompletionQueue* cq) = 0; - virtual ::grpc::ClientAsyncResponseReaderInterface< ::flyteidl::admin::DoTaskResponse>* PrepareAsyncDoTaskRaw(::grpc::ClientContext* context, const ::flyteidl::admin::DoTaskRequest& request, ::grpc::CompletionQueue* cq) = 0; - }; - class Stub final : public StubInterface { - public: - Stub(const std::shared_ptr< ::grpc::ChannelInterface>& channel); - ::grpc::Status DoTask(::grpc::ClientContext* context, const ::flyteidl::admin::DoTaskRequest& request, ::flyteidl::admin::DoTaskResponse* response) override; - std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::flyteidl::admin::DoTaskResponse>> AsyncDoTask(::grpc::ClientContext* context, const ::flyteidl::admin::DoTaskRequest& request, ::grpc::CompletionQueue* cq) { - return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::flyteidl::admin::DoTaskResponse>>(AsyncDoTaskRaw(context, request, cq)); - } - std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::flyteidl::admin::DoTaskResponse>> PrepareAsyncDoTask(::grpc::ClientContext* context, const ::flyteidl::admin::DoTaskRequest& request, ::grpc::CompletionQueue* cq) { - return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::flyteidl::admin::DoTaskResponse>>(PrepareAsyncDoTaskRaw(context, request, cq)); - } - class experimental_async final : - public StubInterface::experimental_async_interface { - public: - void DoTask(::grpc::ClientContext* context, const ::flyteidl::admin::DoTaskRequest* request, ::flyteidl::admin::DoTaskResponse* response, std::function) override; - void DoTask(::grpc::ClientContext* context, const ::grpc::ByteBuffer* request, ::flyteidl::admin::DoTaskResponse* response, std::function) override; - void DoTask(::grpc::ClientContext* context, const ::flyteidl::admin::DoTaskRequest* request, ::flyteidl::admin::DoTaskResponse* response, ::grpc::experimental::ClientUnaryReactor* reactor) override; - void DoTask(::grpc::ClientContext* context, const ::grpc::ByteBuffer* request, ::flyteidl::admin::DoTaskResponse* response, ::grpc::experimental::ClientUnaryReactor* reactor) override; - private: - friend class Stub; - explicit experimental_async(Stub* stub): stub_(stub) { } - Stub* stub() { return stub_; } - Stub* stub_; - }; - class experimental_async_interface* experimental_async() override { return &async_stub_; } - - private: - std::shared_ptr< ::grpc::ChannelInterface> channel_; - class experimental_async async_stub_{this}; - ::grpc::ClientAsyncResponseReader< ::flyteidl::admin::DoTaskResponse>* AsyncDoTaskRaw(::grpc::ClientContext* context, const ::flyteidl::admin::DoTaskRequest& request, ::grpc::CompletionQueue* cq) override; - ::grpc::ClientAsyncResponseReader< ::flyteidl::admin::DoTaskResponse>* PrepareAsyncDoTaskRaw(::grpc::ClientContext* context, const ::flyteidl::admin::DoTaskRequest& request, ::grpc::CompletionQueue* cq) override; - const ::grpc::internal::RpcMethod rpcmethod_DoTask_; - }; - static std::unique_ptr NewStub(const std::shared_ptr< ::grpc::ChannelInterface>& channel, const ::grpc::StubOptions& options = ::grpc::StubOptions()); - - class Service : public ::grpc::Service { - public: - Service(); - virtual ~Service(); - // Do a job and get response from the agent server. - virtual ::grpc::Status DoTask(::grpc::ServerContext* context, const ::flyteidl::admin::DoTaskRequest* request, ::flyteidl::admin::DoTaskResponse* response); - }; - template - class WithAsyncMethod_DoTask : public BaseClass { - private: - void BaseClassMustBeDerivedFromService(const Service *service) {} - public: - WithAsyncMethod_DoTask() { - ::grpc::Service::MarkMethodAsync(0); - } - ~WithAsyncMethod_DoTask() override { - BaseClassMustBeDerivedFromService(this); - } - // disable synchronous version of this method - ::grpc::Status DoTask(::grpc::ServerContext* context, const ::flyteidl::admin::DoTaskRequest* request, ::flyteidl::admin::DoTaskResponse* response) override { - abort(); - return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, ""); - } - void RequestDoTask(::grpc::ServerContext* context, ::flyteidl::admin::DoTaskRequest* request, ::grpc::ServerAsyncResponseWriter< ::flyteidl::admin::DoTaskResponse>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) { - ::grpc::Service::RequestAsyncUnary(0, context, request, response, new_call_cq, notification_cq, tag); - } - }; - typedef WithAsyncMethod_DoTask AsyncService; - template - class ExperimentalWithCallbackMethod_DoTask : public BaseClass { - private: - void BaseClassMustBeDerivedFromService(const Service *service) {} - public: - ExperimentalWithCallbackMethod_DoTask() { - ::grpc::Service::experimental().MarkMethodCallback(0, - new ::grpc::internal::CallbackUnaryHandler< ::flyteidl::admin::DoTaskRequest, ::flyteidl::admin::DoTaskResponse>( - [this](::grpc::ServerContext* context, - const ::flyteidl::admin::DoTaskRequest* request, - ::flyteidl::admin::DoTaskResponse* response, - ::grpc::experimental::ServerCallbackRpcController* controller) { - return this->DoTask(context, request, response, controller); - })); - } - void SetMessageAllocatorFor_DoTask( - ::grpc::experimental::MessageAllocator< ::flyteidl::admin::DoTaskRequest, ::flyteidl::admin::DoTaskResponse>* allocator) { - static_cast<::grpc::internal::CallbackUnaryHandler< ::flyteidl::admin::DoTaskRequest, ::flyteidl::admin::DoTaskResponse>*>( - ::grpc::Service::experimental().GetHandler(0)) - ->SetMessageAllocator(allocator); - } - ~ExperimentalWithCallbackMethod_DoTask() override { - BaseClassMustBeDerivedFromService(this); - } - // disable synchronous version of this method - ::grpc::Status DoTask(::grpc::ServerContext* context, const ::flyteidl::admin::DoTaskRequest* request, ::flyteidl::admin::DoTaskResponse* response) override { - abort(); - return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, ""); - } - virtual void DoTask(::grpc::ServerContext* context, const ::flyteidl::admin::DoTaskRequest* request, ::flyteidl::admin::DoTaskResponse* response, ::grpc::experimental::ServerCallbackRpcController* controller) { controller->Finish(::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "")); } - }; - typedef ExperimentalWithCallbackMethod_DoTask ExperimentalCallbackService; - template - class WithGenericMethod_DoTask : public BaseClass { - private: - void BaseClassMustBeDerivedFromService(const Service *service) {} - public: - WithGenericMethod_DoTask() { - ::grpc::Service::MarkMethodGeneric(0); - } - ~WithGenericMethod_DoTask() override { - BaseClassMustBeDerivedFromService(this); - } - // disable synchronous version of this method - ::grpc::Status DoTask(::grpc::ServerContext* context, const ::flyteidl::admin::DoTaskRequest* request, ::flyteidl::admin::DoTaskResponse* response) override { - abort(); - return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, ""); - } - }; - template - class WithRawMethod_DoTask : public BaseClass { - private: - void BaseClassMustBeDerivedFromService(const Service *service) {} - public: - WithRawMethod_DoTask() { - ::grpc::Service::MarkMethodRaw(0); - } - ~WithRawMethod_DoTask() override { - BaseClassMustBeDerivedFromService(this); - } - // disable synchronous version of this method - ::grpc::Status DoTask(::grpc::ServerContext* context, const ::flyteidl::admin::DoTaskRequest* request, ::flyteidl::admin::DoTaskResponse* response) override { - abort(); - return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, ""); - } - void RequestDoTask(::grpc::ServerContext* context, ::grpc::ByteBuffer* request, ::grpc::ServerAsyncResponseWriter< ::grpc::ByteBuffer>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) { - ::grpc::Service::RequestAsyncUnary(0, context, request, response, new_call_cq, notification_cq, tag); - } - }; - template - class ExperimentalWithRawCallbackMethod_DoTask : public BaseClass { - private: - void BaseClassMustBeDerivedFromService(const Service *service) {} - public: - ExperimentalWithRawCallbackMethod_DoTask() { - ::grpc::Service::experimental().MarkMethodRawCallback(0, - new ::grpc::internal::CallbackUnaryHandler< ::grpc::ByteBuffer, ::grpc::ByteBuffer>( - [this](::grpc::ServerContext* context, - const ::grpc::ByteBuffer* request, - ::grpc::ByteBuffer* response, - ::grpc::experimental::ServerCallbackRpcController* controller) { - this->DoTask(context, request, response, controller); - })); - } - ~ExperimentalWithRawCallbackMethod_DoTask() override { - BaseClassMustBeDerivedFromService(this); - } - // disable synchronous version of this method - ::grpc::Status DoTask(::grpc::ServerContext* context, const ::flyteidl::admin::DoTaskRequest* request, ::flyteidl::admin::DoTaskResponse* response) override { - abort(); - return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, ""); - } - virtual void DoTask(::grpc::ServerContext* context, const ::grpc::ByteBuffer* request, ::grpc::ByteBuffer* response, ::grpc::experimental::ServerCallbackRpcController* controller) { controller->Finish(::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "")); } - }; - template - class WithStreamedUnaryMethod_DoTask : public BaseClass { - private: - void BaseClassMustBeDerivedFromService(const Service *service) {} - public: - WithStreamedUnaryMethod_DoTask() { - ::grpc::Service::MarkMethodStreamed(0, - new ::grpc::internal::StreamedUnaryHandler< ::flyteidl::admin::DoTaskRequest, ::flyteidl::admin::DoTaskResponse>(std::bind(&WithStreamedUnaryMethod_DoTask::StreamedDoTask, this, std::placeholders::_1, std::placeholders::_2))); - } - ~WithStreamedUnaryMethod_DoTask() override { - BaseClassMustBeDerivedFromService(this); - } - // disable regular version of this method - ::grpc::Status DoTask(::grpc::ServerContext* context, const ::flyteidl::admin::DoTaskRequest* request, ::flyteidl::admin::DoTaskResponse* response) override { - abort(); - return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, ""); - } - // replace default version of method with streamed unary - virtual ::grpc::Status StreamedDoTask(::grpc::ServerContext* context, ::grpc::ServerUnaryStreamer< ::flyteidl::admin::DoTaskRequest,::flyteidl::admin::DoTaskResponse>* server_unary_streamer) = 0; - }; - typedef WithStreamedUnaryMethod_DoTask StreamedUnaryService; - typedef Service SplitStreamedService; - typedef WithStreamedUnaryMethod_DoTask StreamedService; -}; - } // namespace service } // namespace flyteidl diff --git a/flyteidl/gen/pb-cpp/flyteidl/service/agent.pb.cc b/flyteidl/gen/pb-cpp/flyteidl/service/agent.pb.cc index c9055eb0f5..98958cbcd9 100644 --- a/flyteidl/gen/pb-cpp/flyteidl/service/agent.pb.cc +++ b/flyteidl/gen/pb-cpp/flyteidl/service/agent.pb.cc @@ -38,23 +38,21 @@ ::google::protobuf::internal::AssignDescriptorsTable assign_descriptors_table_fl const char descriptor_table_protodef_flyteidl_2fservice_2fagent_2eproto[] = "\n\034flyteidl/service/agent.proto\022\020flyteidl" - ".service\032\032flyteidl/admin/agent.proto2\217\002\n" - "\021AsyncAgentService\022U\n\nCreateTask\022!.flyte" - "idl.admin.CreateTaskRequest\032\".flyteidl.a" - "dmin.CreateTaskResponse\"\000\022L\n\007GetTask\022\036.f" - "lyteidl.admin.GetTaskRequest\032\037.flyteidl." - "admin.GetTaskResponse\"\000\022U\n\nDeleteTask\022!." - "flyteidl.admin.DeleteTaskRequest\032\".flyte" - "idl.admin.DeleteTaskResponse\"\0002]\n\020SyncAg" - "entService\022I\n\006DoTask\022\035.flyteidl.admin.Do" - "TaskRequest\032\036.flyteidl.admin.DoTaskRespo" - "nse\"\000B\?Z=github.com/flyteorg/flyte/flyte" - "idl/gen/pb-go/flyteidl/serviceb\006proto3" + ".service\032\032flyteidl/admin/agent.proto2\212\002\n" + "\014AgentService\022U\n\nCreateTask\022!.flyteidl.a" + "dmin.CreateTaskRequest\032\".flyteidl.admin." + "CreateTaskResponse\"\000\022L\n\007GetTask\022\036.flytei" + "dl.admin.GetTaskRequest\032\037.flyteidl.admin" + ".GetTaskResponse\"\000\022U\n\nDeleteTask\022!.flyte" + "idl.admin.DeleteTaskRequest\032\".flyteidl.a" + "dmin.DeleteTaskResponse\"\000B\?Z=github.com/" + "flyteorg/flyte/flyteidl/gen/pb-go/flytei" + "dl/serviceb\006proto3" ; ::google::protobuf::internal::DescriptorTable descriptor_table_flyteidl_2fservice_2fagent_2eproto = { false, InitDefaults_flyteidl_2fservice_2fagent_2eproto, descriptor_table_protodef_flyteidl_2fservice_2fagent_2eproto, - "flyteidl/service/agent.proto", &assign_descriptors_table_flyteidl_2fservice_2fagent_2eproto, 518, + "flyteidl/service/agent.proto", &assign_descriptors_table_flyteidl_2fservice_2fagent_2eproto, 418, }; void AddDescriptors_flyteidl_2fservice_2fagent_2eproto() { diff --git a/flyteidl/gen/pb-go/flyteidl/admin/agent.pb.go b/flyteidl/gen/pb-go/flyteidl/admin/agent.pb.go index bb4b330c52..b5933b4f30 100644 --- a/flyteidl/gen/pb-go/flyteidl/admin/agent.pb.go +++ b/flyteidl/gen/pb-go/flyteidl/admin/agent.pb.go @@ -215,10 +215,17 @@ func (m *CreateTaskRequest) GetTaskExecutionMetadata() *TaskExecutionMetadata { // Represents a create response structure. type CreateTaskResponse struct { // Metadata is created by the agent. It could be a string (jobId) or a dict (more complex metadata). - ResourceMeta []byte `protobuf:"bytes,1,opt,name=resource_meta,json=resourceMeta,proto3" json:"resource_meta,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + // Resouce is for synchronous task execution. + // + // Types that are valid to be assigned to Res: + // *CreateTaskResponse_ResourceMeta + // *CreateTaskResponse_Resource + Res isCreateTaskResponse_Res `protobuf_oneof:"res"` + // log information for the task execution. + LogLinks []*core.TaskLog `protobuf:"bytes,3,rep,name=log_links,json=logLinks,proto3" json:"log_links,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *CreateTaskResponse) Reset() { *m = CreateTaskResponse{} } @@ -246,13 +253,58 @@ func (m *CreateTaskResponse) XXX_DiscardUnknown() { var xxx_messageInfo_CreateTaskResponse proto.InternalMessageInfo +type isCreateTaskResponse_Res interface { + isCreateTaskResponse_Res() +} + +type CreateTaskResponse_ResourceMeta struct { + ResourceMeta []byte `protobuf:"bytes,1,opt,name=resource_meta,json=resourceMeta,proto3,oneof"` +} + +type CreateTaskResponse_Resource struct { + Resource *Resource `protobuf:"bytes,2,opt,name=resource,proto3,oneof"` +} + +func (*CreateTaskResponse_ResourceMeta) isCreateTaskResponse_Res() {} + +func (*CreateTaskResponse_Resource) isCreateTaskResponse_Res() {} + +func (m *CreateTaskResponse) GetRes() isCreateTaskResponse_Res { + if m != nil { + return m.Res + } + return nil +} + func (m *CreateTaskResponse) GetResourceMeta() []byte { + if x, ok := m.GetRes().(*CreateTaskResponse_ResourceMeta); ok { + return x.ResourceMeta + } + return nil +} + +func (m *CreateTaskResponse) GetResource() *Resource { + if x, ok := m.GetRes().(*CreateTaskResponse_Resource); ok { + return x.Resource + } + return nil +} + +func (m *CreateTaskResponse) GetLogLinks() []*core.TaskLog { if m != nil { - return m.ResourceMeta + return m.LogLinks } return nil } +// XXX_OneofWrappers is for the internal use of the proto package. +func (*CreateTaskResponse) XXX_OneofWrappers() []interface{} { + return []interface{}{ + (*CreateTaskResponse_ResourceMeta)(nil), + (*CreateTaskResponse_Resource)(nil), + } +} + // A message used to fetch a job resource from flyte agent server. type GetTaskRequest struct { // A predefined yet extensible Task type identifier. @@ -494,115 +546,6 @@ func (m *DeleteTaskResponse) XXX_DiscardUnknown() { var xxx_messageInfo_DeleteTaskResponse proto.InternalMessageInfo -// A message used to do a task -type DoTaskRequest struct { - // The inputs required to start the execution. All required inputs must be - // included in this map. If not required and not provided, defaults apply. - // +optional - Inputs *core.LiteralMap `protobuf:"bytes,1,opt,name=inputs,proto3" json:"inputs,omitempty"` - // Template of the task that encapsulates all the metadata of the task. - Template *core.TaskTemplate `protobuf:"bytes,2,opt,name=template,proto3" json:"template,omitempty"` - // Prefix for where task output data will be written. (e.g. s3://my-bucket/randomstring) - OutputPrefix string `protobuf:"bytes,3,opt,name=output_prefix,json=outputPrefix,proto3" json:"output_prefix,omitempty"` - // subset of runtime task execution metadata. - TaskExecutionMetadata *TaskExecutionMetadata `protobuf:"bytes,4,opt,name=task_execution_metadata,json=taskExecutionMetadata,proto3" json:"task_execution_metadata,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *DoTaskRequest) Reset() { *m = DoTaskRequest{} } -func (m *DoTaskRequest) String() string { return proto.CompactTextString(m) } -func (*DoTaskRequest) ProtoMessage() {} -func (*DoTaskRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_c434e52bb0028071, []int{8} -} - -func (m *DoTaskRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_DoTaskRequest.Unmarshal(m, b) -} -func (m *DoTaskRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_DoTaskRequest.Marshal(b, m, deterministic) -} -func (m *DoTaskRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_DoTaskRequest.Merge(m, src) -} -func (m *DoTaskRequest) XXX_Size() int { - return xxx_messageInfo_DoTaskRequest.Size(m) -} -func (m *DoTaskRequest) XXX_DiscardUnknown() { - xxx_messageInfo_DoTaskRequest.DiscardUnknown(m) -} - -var xxx_messageInfo_DoTaskRequest proto.InternalMessageInfo - -func (m *DoTaskRequest) GetInputs() *core.LiteralMap { - if m != nil { - return m.Inputs - } - return nil -} - -func (m *DoTaskRequest) GetTemplate() *core.TaskTemplate { - if m != nil { - return m.Template - } - return nil -} - -func (m *DoTaskRequest) GetOutputPrefix() string { - if m != nil { - return m.OutputPrefix - } - return "" -} - -func (m *DoTaskRequest) GetTaskExecutionMetadata() *TaskExecutionMetadata { - if m != nil { - return m.TaskExecutionMetadata - } - return nil -} - -type DoTaskResponse struct { - Resource *Resource `protobuf:"bytes,1,opt,name=resource,proto3" json:"resource,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *DoTaskResponse) Reset() { *m = DoTaskResponse{} } -func (m *DoTaskResponse) String() string { return proto.CompactTextString(m) } -func (*DoTaskResponse) ProtoMessage() {} -func (*DoTaskResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_c434e52bb0028071, []int{9} -} - -func (m *DoTaskResponse) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_DoTaskResponse.Unmarshal(m, b) -} -func (m *DoTaskResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_DoTaskResponse.Marshal(b, m, deterministic) -} -func (m *DoTaskResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_DoTaskResponse.Merge(m, src) -} -func (m *DoTaskResponse) XXX_Size() int { - return xxx_messageInfo_DoTaskResponse.Size(m) -} -func (m *DoTaskResponse) XXX_DiscardUnknown() { - xxx_messageInfo_DoTaskResponse.DiscardUnknown(m) -} - -var xxx_messageInfo_DoTaskResponse proto.InternalMessageInfo - -func (m *DoTaskResponse) GetResource() *Resource { - if m != nil { - return m.Resource - } - return nil -} - func init() { proto.RegisterEnum("flyteidl.admin.State", State_name, State_value) proto.RegisterType((*TaskExecutionMetadata)(nil), "flyteidl.admin.TaskExecutionMetadata") @@ -616,62 +559,61 @@ func init() { proto.RegisterType((*Resource)(nil), "flyteidl.admin.Resource") proto.RegisterType((*DeleteTaskRequest)(nil), "flyteidl.admin.DeleteTaskRequest") proto.RegisterType((*DeleteTaskResponse)(nil), "flyteidl.admin.DeleteTaskResponse") - proto.RegisterType((*DoTaskRequest)(nil), "flyteidl.admin.DoTaskRequest") - proto.RegisterType((*DoTaskResponse)(nil), "flyteidl.admin.DoTaskResponse") } func init() { proto.RegisterFile("flyteidl/admin/agent.proto", fileDescriptor_c434e52bb0028071) } var fileDescriptor_c434e52bb0028071 = []byte{ - // 793 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x56, 0xef, 0x6f, 0xe3, 0x44, - 0x10, 0x25, 0x49, 0xd3, 0x26, 0x93, 0xb6, 0x97, 0x2c, 0x0d, 0xb8, 0xb9, 0x03, 0x55, 0x41, 0xa0, - 0x0a, 0x84, 0xa3, 0x6b, 0x11, 0xf4, 0x40, 0x80, 0x72, 0x8d, 0xaf, 0xaa, 0x94, 0x46, 0xd5, 0x36, - 0x45, 0x80, 0x04, 0xd6, 0xc6, 0x99, 0x1a, 0x2b, 0xce, 0xae, 0xf1, 0xae, 0xa3, 0x8b, 0xc4, 0x37, - 0x24, 0xfe, 0x06, 0xfe, 0x5b, 0x90, 0xd7, 0x3f, 0x9a, 0x44, 0x06, 0xf5, 0xd4, 0x8f, 0xf7, 0x2d, - 0x3b, 0xef, 0xcd, 0x9b, 0xb7, 0x33, 0xb3, 0x72, 0xa0, 0x73, 0xe7, 0x2f, 0x15, 0x7a, 0x53, 0xbf, - 0xc7, 0xa6, 0x73, 0x8f, 0xf7, 0x98, 0x8b, 0x5c, 0x99, 0x41, 0x28, 0x94, 0x20, 0xfb, 0x19, 0x66, - 0x6a, 0xac, 0xf3, 0x2c, 0xe7, 0x3a, 0x22, 0xc4, 0x9e, 0xef, 0x29, 0x0c, 0x99, 0x2f, 0x13, 0x76, - 0xe7, 0x70, 0x1d, 0x55, 0x4c, 0xce, 0x32, 0xe8, 0x83, 0x75, 0xc8, 0xe3, 0x0a, 0xc3, 0x3b, 0xe6, - 0x60, 0x0a, 0x7f, 0xb8, 0x01, 0x4f, 0x91, 0x2b, 0xef, 0xce, 0xc3, 0xb0, 0x38, 0x1d, 0x5f, 0xa3, - 0x13, 0x29, 0x4f, 0xf0, 0x04, 0xee, 0xfe, 0x5d, 0x85, 0xf6, 0x98, 0xc9, 0x99, 0x95, 0xc5, 0xaf, - 0x50, 0xb1, 0x29, 0x53, 0x8c, 0x50, 0x68, 0xc5, 0x36, 0xec, 0x3c, 0xc3, 0xf6, 0xa6, 0x46, 0xe9, - 0xa8, 0x74, 0xdc, 0x38, 0xf9, 0xc4, 0xcc, 0x2f, 0x17, 0x8b, 0x9a, 0x6b, 0x02, 0x97, 0xb9, 0x03, - 0xfa, 0x44, 0xad, 0x03, 0xe4, 0x19, 0xd4, 0x39, 0x9b, 0xa3, 0x0c, 0x98, 0x83, 0x46, 0xf9, 0xa8, - 0x74, 0x5c, 0xa7, 0xf7, 0x01, 0x72, 0x09, 0xdb, 0x3e, 0x9b, 0xa0, 0x2f, 0x8d, 0xca, 0x51, 0xe5, - 0xb8, 0x71, 0xf2, 0xdc, 0x5c, 0xef, 0xa1, 0x59, 0x68, 0xd4, 0x1c, 0xea, 0x1c, 0x8b, 0xab, 0x70, - 0x49, 0x53, 0x01, 0xf2, 0x23, 0x34, 0x18, 0xe7, 0x42, 0xb1, 0x98, 0x29, 0x8d, 0x2d, 0xad, 0xf7, - 0xe5, 0xc3, 0xf4, 0xfa, 0xf7, 0x89, 0x89, 0xe8, 0xaa, 0x14, 0x31, 0xe1, 0xdd, 0xd9, 0x99, 0xb4, - 0x25, 0x86, 0x0b, 0xcf, 0x41, 0x9b, 0x39, 0x8e, 0x88, 0xb8, 0x32, 0xaa, 0xfa, 0x32, 0xad, 0xd9, - 0x99, 0xbc, 0x49, 0x90, 0x7e, 0x02, 0x10, 0x05, 0x6d, 0xe4, 0x0b, 0x2f, 0x14, 0x7c, 0x8e, 0x5c, - 0xd9, 0x0b, 0x16, 0x7a, 0x6c, 0xe2, 0xa3, 0x34, 0xb6, 0xb5, 0xa7, 0xef, 0x1f, 0xe6, 0xc9, 0xba, - 0x97, 0xf8, 0x21, 0x53, 0x48, 0xcc, 0x1d, 0x60, 0x01, 0xd4, 0x79, 0x01, 0x8d, 0x95, 0xb6, 0x90, - 0x26, 0x54, 0x66, 0xb8, 0xd4, 0xd3, 0xab, 0xd3, 0xf8, 0x27, 0x39, 0x80, 0xea, 0x82, 0xf9, 0x51, - 0x36, 0x85, 0xe4, 0xf0, 0x75, 0xf9, 0xac, 0xd4, 0xf9, 0x0e, 0x9a, 0x9b, 0x1d, 0x78, 0xa3, 0xfc, - 0x0b, 0x38, 0xfc, 0x4f, 0xb7, 0x6f, 0x22, 0xd4, 0xfd, 0xb3, 0x0c, 0xad, 0xf3, 0x10, 0x99, 0xc2, - 0xb8, 0x27, 0x14, 0x7f, 0x8f, 0x50, 0x2a, 0xf2, 0x1c, 0xb6, 0x3d, 0x1e, 0x44, 0x4a, 0xa6, 0xbb, - 0x78, 0xb8, 0xb1, 0x8b, 0xc3, 0xe4, 0x61, 0x5d, 0xb1, 0x80, 0xa6, 0x44, 0xf2, 0x15, 0xd4, 0x14, - 0xce, 0x03, 0x9f, 0xa9, 0xa4, 0x4a, 0xe3, 0xe4, 0x69, 0xc1, 0x02, 0x8f, 0x53, 0x0a, 0xcd, 0xc9, - 0xe4, 0x23, 0xd8, 0x13, 0x91, 0x0a, 0x22, 0x65, 0x07, 0x21, 0xde, 0x79, 0xaf, 0x8d, 0x8a, 0xf6, - 0xb8, 0x9b, 0x04, 0xaf, 0x75, 0x8c, 0xfc, 0x02, 0xef, 0x6f, 0xbc, 0x93, 0x79, 0x3a, 0x35, 0x63, - 0x4b, 0x17, 0xfb, 0xf8, 0x41, 0x23, 0xa6, 0x6d, 0x55, 0x14, 0xee, 0xbe, 0x00, 0xb2, 0xda, 0x04, - 0x19, 0x08, 0x2e, 0xb5, 0xb3, 0x10, 0xa5, 0x88, 0x42, 0x07, 0x75, 0x39, 0xdd, 0x8c, 0x5d, 0xba, - 0x9b, 0x05, 0xe3, 0xf4, 0x2e, 0x85, 0xfd, 0x0b, 0x54, 0xab, 0xcd, 0x7b, 0x0a, 0x75, 0xed, 0x55, - 0x2d, 0x03, 0x4c, 0x87, 0x50, 0x8b, 0x03, 0xe3, 0x65, 0x50, 0xa0, 0x59, 0x2e, 0xd0, 0xfc, 0x03, - 0x9e, 0xe4, 0x9a, 0xa9, 0x97, 0x2f, 0xa0, 0x96, 0x51, 0xd2, 0x99, 0x18, 0x9b, 0x37, 0xa6, 0x29, - 0x4e, 0x73, 0x26, 0x39, 0x85, 0xba, 0x2f, 0x5c, 0xdb, 0xf7, 0xf8, 0x4c, 0x1a, 0x65, 0xfd, 0x16, - 0xde, 0x2b, 0x98, 0xca, 0x50, 0xb8, 0xb4, 0xe6, 0x0b, 0x77, 0x18, 0xf3, 0xba, 0x7f, 0x95, 0xa0, - 0x96, 0x69, 0x91, 0xcf, 0xa0, 0x2a, 0x55, 0x3c, 0xd3, 0xb8, 0xe8, 0xfe, 0x49, 0x7b, 0xb3, 0xe8, - 0x4d, 0x0c, 0xd2, 0x84, 0x43, 0x4e, 0x61, 0x27, 0x99, 0x9a, 0x4c, 0x57, 0xe0, 0x7f, 0xf6, 0x26, - 0x63, 0x12, 0x03, 0x76, 0xe6, 0x28, 0x25, 0x73, 0x31, 0x9d, 0x7c, 0x76, 0xec, 0xde, 0x42, 0x6b, - 0x80, 0x3e, 0xae, 0xaf, 0xe6, 0xe3, 0xbb, 0x7b, 0x00, 0x64, 0x55, 0x36, 0x69, 0x70, 0xf7, 0x9f, - 0x12, 0xec, 0x0d, 0xc4, 0xdb, 0xfc, 0x08, 0x5e, 0xc1, 0x7e, 0xd6, 0x80, 0xc7, 0x2c, 0xdd, 0xa7, - 0xbf, 0x42, 0x55, 0x6f, 0x05, 0x69, 0x43, 0x8b, 0x5a, 0x63, 0xfa, 0x53, 0xff, 0xe5, 0xd0, 0xb2, - 0x5f, 0xf5, 0x2f, 0x87, 0xb7, 0xd4, 0x6a, 0xbe, 0x13, 0x87, 0xaf, 0x2d, 0x7a, 0xd5, 0x1f, 0x59, - 0xa3, 0x71, 0x1e, 0x2e, 0x91, 0x06, 0xec, 0x5c, 0x5b, 0xa3, 0xc1, 0xe5, 0xe8, 0xa2, 0x59, 0x8e, - 0x0f, 0xf4, 0x76, 0x34, 0x8a, 0x0f, 0x15, 0xb2, 0x07, 0xf5, 0x9b, 0xdb, 0xf3, 0x73, 0xcb, 0x1a, - 0x58, 0x83, 0xe6, 0xd6, 0xcb, 0x6f, 0x7f, 0xfe, 0xc6, 0xf5, 0xd4, 0x6f, 0xd1, 0xc4, 0x74, 0xc4, - 0xbc, 0xa7, 0xfd, 0x88, 0xd0, 0x4d, 0x7e, 0xf4, 0xf2, 0x0f, 0xb1, 0x8b, 0xbc, 0x17, 0x4c, 0x3e, - 0x77, 0x45, 0x6f, 0xfd, 0xff, 0xc3, 0x64, 0x5b, 0x7f, 0x93, 0x4f, 0xff, 0x0d, 0x00, 0x00, 0xff, - 0xff, 0xd8, 0x3b, 0xed, 0x8e, 0x58, 0x08, 0x00, 0x00, + // 805 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x55, 0x7f, 0x6f, 0xe3, 0x44, + 0x10, 0x6d, 0x92, 0xa6, 0x4d, 0x26, 0x6d, 0x2f, 0x59, 0x1a, 0x70, 0x73, 0x07, 0xaa, 0x82, 0x0e, + 0x55, 0x20, 0x1c, 0x5d, 0x8b, 0x8e, 0x02, 0x02, 0x94, 0xb6, 0xa6, 0x57, 0x29, 0x8d, 0xaa, 0x6d, + 0x8a, 0x00, 0x09, 0xac, 0x8d, 0x33, 0x35, 0x56, 0x9c, 0x5d, 0xe3, 0x5d, 0x57, 0x17, 0x89, 0xff, + 0x90, 0xf8, 0x0c, 0x7c, 0x0b, 0xbe, 0x22, 0xf2, 0xfa, 0x47, 0xe3, 0x28, 0x77, 0xca, 0x89, 0xff, + 0xbc, 0xf3, 0x66, 0xdf, 0xcc, 0x7b, 0x33, 0x2b, 0x43, 0xe7, 0xde, 0x9f, 0x2b, 0xf4, 0x26, 0x7e, + 0x8f, 0x4d, 0x66, 0x1e, 0xef, 0x31, 0x17, 0xb9, 0x32, 0x83, 0x50, 0x28, 0x41, 0xf6, 0x32, 0xcc, + 0xd4, 0x58, 0xe7, 0x59, 0x9e, 0xeb, 0x88, 0x10, 0x7b, 0xbe, 0xa7, 0x30, 0x64, 0xbe, 0x4c, 0xb2, + 0x3b, 0x07, 0x45, 0x54, 0x31, 0x39, 0xcd, 0xa0, 0x0f, 0x8b, 0x90, 0xc7, 0x15, 0x86, 0xf7, 0xcc, + 0xc1, 0x14, 0xfe, 0x68, 0x09, 0x9e, 0x20, 0x57, 0xde, 0xbd, 0x87, 0xe1, 0xea, 0xeb, 0xf8, 0x1a, + 0x9d, 0x48, 0x79, 0x82, 0x27, 0x70, 0xf7, 0x9f, 0x2a, 0xb4, 0x47, 0x4c, 0x4e, 0xad, 0x2c, 0x7e, + 0x8d, 0x8a, 0x4d, 0x98, 0x62, 0x84, 0x42, 0x2b, 0x6e, 0xc3, 0xce, 0x6f, 0xd8, 0xde, 0xc4, 0x28, + 0x1d, 0x96, 0x8e, 0x1a, 0xc7, 0x9f, 0x98, 0xb9, 0xb8, 0x98, 0xd4, 0x2c, 0x10, 0x5c, 0xe5, 0x1d, + 0xd0, 0x27, 0xaa, 0x08, 0x90, 0x67, 0x50, 0xe7, 0x6c, 0x86, 0x32, 0x60, 0x0e, 0x1a, 0xe5, 0xc3, + 0xd2, 0x51, 0x9d, 0x3e, 0x06, 0xc8, 0x15, 0x6c, 0xf9, 0x6c, 0x8c, 0xbe, 0x34, 0x2a, 0x87, 0x95, + 0xa3, 0xc6, 0xf1, 0x0b, 0xb3, 0xe8, 0xa1, 0xb9, 0xb2, 0x51, 0x73, 0xa0, 0xef, 0x58, 0x5c, 0x85, + 0x73, 0x9a, 0x12, 0x90, 0x9f, 0xa0, 0xc1, 0x38, 0x17, 0x8a, 0xc5, 0x99, 0xd2, 0xd8, 0xd4, 0x7c, + 0x2f, 0xd7, 0xe3, 0xeb, 0x3f, 0x5e, 0x4c, 0x48, 0x17, 0xa9, 0x88, 0x09, 0xef, 0x4d, 0x4f, 0xa5, + 0x2d, 0x31, 0x7c, 0xf0, 0x1c, 0xb4, 0x99, 0xe3, 0x88, 0x88, 0x2b, 0xa3, 0xaa, 0xc5, 0xb4, 0xa6, + 0xa7, 0xf2, 0x36, 0x41, 0xfa, 0x09, 0x40, 0x14, 0xb4, 0x91, 0x3f, 0x78, 0xa1, 0xe0, 0x33, 0xe4, + 0xca, 0x7e, 0x60, 0xa1, 0xc7, 0xc6, 0x3e, 0x4a, 0x63, 0x4b, 0xf7, 0xf4, 0xfd, 0x7a, 0x3d, 0x59, + 0x8f, 0x14, 0x3f, 0x66, 0x0c, 0x49, 0x73, 0xfb, 0xb8, 0x02, 0xea, 0x7c, 0x05, 0x8d, 0x05, 0x5b, + 0x48, 0x13, 0x2a, 0x53, 0x9c, 0xeb, 0xe9, 0xd5, 0x69, 0xfc, 0x49, 0xf6, 0xa1, 0xfa, 0xc0, 0xfc, + 0x28, 0x9b, 0x42, 0x72, 0xf8, 0xba, 0x7c, 0x5a, 0xea, 0x7c, 0x07, 0xcd, 0x65, 0x07, 0xde, 0xe9, + 0xfe, 0x25, 0x1c, 0xbc, 0xb1, 0xdb, 0x77, 0x21, 0xea, 0xfe, 0x55, 0x86, 0xd6, 0x79, 0x88, 0x4c, + 0x61, 0xec, 0x09, 0xc5, 0x3f, 0x22, 0x94, 0x8a, 0xbc, 0x80, 0x2d, 0x8f, 0x07, 0x91, 0x92, 0xe9, + 0x2e, 0x1e, 0x2c, 0xed, 0xe2, 0x20, 0x79, 0x58, 0xd7, 0x2c, 0xa0, 0x69, 0x22, 0xf9, 0x12, 0x6a, + 0x0a, 0x67, 0x81, 0xcf, 0x54, 0x52, 0xa5, 0x71, 0xfc, 0x74, 0xc5, 0x02, 0x8f, 0xd2, 0x14, 0x9a, + 0x27, 0x93, 0x8f, 0x61, 0x57, 0x44, 0x2a, 0x88, 0x94, 0x1d, 0x84, 0x78, 0xef, 0xbd, 0x36, 0x2a, + 0xba, 0xc7, 0x9d, 0x24, 0x78, 0xa3, 0x63, 0xe4, 0x57, 0xf8, 0x60, 0xe9, 0x9d, 0xcc, 0xd2, 0xa9, + 0x19, 0x9b, 0xba, 0xd8, 0xf3, 0xb5, 0x46, 0x4c, 0xdb, 0x6a, 0x55, 0xb8, 0xfb, 0x6f, 0x09, 0xc8, + 0xa2, 0x0b, 0x32, 0x10, 0x5c, 0x22, 0x79, 0x0e, 0xbb, 0x21, 0x4a, 0x11, 0x85, 0x0e, 0xea, 0x7a, + 0xda, 0x8d, 0x9d, 0x57, 0x1b, 0x74, 0x27, 0x0b, 0xc7, 0x0c, 0xe4, 0x25, 0xd4, 0xb2, 0x73, 0x2a, + 0xdd, 0x58, 0xee, 0x86, 0xa6, 0xf8, 0xab, 0x0d, 0x9a, 0xe7, 0x92, 0x13, 0xa8, 0xfb, 0xc2, 0xb5, + 0x7d, 0x8f, 0x4f, 0xb3, 0xd7, 0xf8, 0xfe, 0x0a, 0xcf, 0x06, 0xc2, 0xa5, 0x35, 0x5f, 0xb8, 0x83, + 0x38, 0xef, 0xac, 0x0a, 0x95, 0x10, 0x65, 0x97, 0xc2, 0xde, 0x25, 0xaa, 0xc5, 0x99, 0x3d, 0x85, + 0xba, 0xb6, 0x48, 0xcd, 0x03, 0x4c, 0x67, 0x5f, 0x8b, 0x03, 0xa3, 0x79, 0xa0, 0x4d, 0x2e, 0x2a, + 0x89, 0xfb, 0xdc, 0x29, 0xea, 0xe8, 0xfe, 0x09, 0x4f, 0x72, 0xce, 0xd4, 0x81, 0x2f, 0x16, 0xa4, + 0x95, 0xde, 0x2e, 0xed, 0x4d, 0xc2, 0xca, 0xeb, 0x09, 0xeb, 0xfe, 0x5d, 0x82, 0x5a, 0xc6, 0x45, + 0x3e, 0x83, 0xaa, 0x54, 0xf1, 0x2a, 0xc5, 0x45, 0xf7, 0x8e, 0xdb, 0xcb, 0x45, 0x6f, 0x63, 0x90, + 0x26, 0x39, 0xe4, 0x04, 0xb6, 0x93, 0x65, 0x91, 0xa9, 0xfd, 0x6f, 0x59, 0xd7, 0x2c, 0x93, 0x18, + 0xb0, 0x3d, 0x43, 0x29, 0x99, 0x8b, 0xe9, 0xc2, 0x65, 0xc7, 0xee, 0x1d, 0xb4, 0x2e, 0xd0, 0xc7, + 0xe2, 0x8b, 0xf8, 0xff, 0xee, 0xee, 0x03, 0x59, 0xa4, 0x4d, 0x0c, 0xfe, 0xf4, 0x37, 0xa8, 0x6a, + 0x2d, 0xa4, 0x0d, 0x2d, 0x6a, 0x8d, 0xe8, 0xcf, 0xfd, 0xb3, 0x81, 0x65, 0xff, 0xd0, 0xbf, 0x1a, + 0xdc, 0x51, 0xab, 0xb9, 0x11, 0x87, 0x6f, 0x2c, 0x7a, 0xdd, 0x1f, 0x5a, 0xc3, 0x51, 0x1e, 0x2e, + 0x91, 0x06, 0x6c, 0xdf, 0x58, 0xc3, 0x8b, 0xab, 0xe1, 0x65, 0xb3, 0x1c, 0x1f, 0xe8, 0xdd, 0x70, + 0x18, 0x1f, 0x2a, 0x64, 0x17, 0xea, 0xb7, 0x77, 0xe7, 0xe7, 0x96, 0x75, 0x61, 0x5d, 0x34, 0x37, + 0xcf, 0xbe, 0xfd, 0xe5, 0x1b, 0xd7, 0x53, 0xbf, 0x47, 0x63, 0xd3, 0x11, 0xb3, 0x9e, 0xb6, 0x45, + 0x84, 0x6e, 0xf2, 0xd1, 0xcb, 0xff, 0x5a, 0x2e, 0xf2, 0x5e, 0x30, 0xfe, 0xdc, 0x15, 0xbd, 0xe2, + 0xcf, 0x76, 0xbc, 0xa5, 0x7f, 0x60, 0x27, 0xff, 0x05, 0x00, 0x00, 0xff, 0xff, 0x2a, 0x68, 0x01, + 0x24, 0x85, 0x07, 0x00, 0x00, } diff --git a/flyteidl/gen/pb-go/flyteidl/admin/agent.pb.validate.go b/flyteidl/gen/pb-go/flyteidl/admin/agent.pb.validate.go index 32ca295ca7..66c039b650 100644 --- a/flyteidl/gen/pb-go/flyteidl/admin/agent.pb.validate.go +++ b/flyteidl/gen/pb-go/flyteidl/admin/agent.pb.validate.go @@ -230,7 +230,39 @@ func (m *CreateTaskResponse) Validate() error { return nil } - // no validation rules for ResourceMeta + for idx, item := range m.GetLogLinks() { + _, _ = idx, item + + if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return CreateTaskResponseValidationError{ + field: fmt.Sprintf("LogLinks[%v]", idx), + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + switch m.Res.(type) { + + case *CreateTaskResponse_ResourceMeta: + // no validation rules for ResourceMeta + + case *CreateTaskResponse_Resource: + + if v, ok := interface{}(m.GetResource()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return CreateTaskResponseValidationError{ + field: "Resource", + reason: "embedded message failed validation", + cause: err, + } + } + } + + } return nil } @@ -665,175 +697,3 @@ var _ interface { Cause() error ErrorName() string } = DeleteTaskResponseValidationError{} - -// Validate checks the field values on DoTaskRequest with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. -func (m *DoTaskRequest) Validate() error { - if m == nil { - return nil - } - - if v, ok := interface{}(m.GetInputs()).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return DoTaskRequestValidationError{ - field: "Inputs", - reason: "embedded message failed validation", - cause: err, - } - } - } - - if v, ok := interface{}(m.GetTemplate()).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return DoTaskRequestValidationError{ - field: "Template", - reason: "embedded message failed validation", - cause: err, - } - } - } - - // no validation rules for OutputPrefix - - if v, ok := interface{}(m.GetTaskExecutionMetadata()).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return DoTaskRequestValidationError{ - field: "TaskExecutionMetadata", - reason: "embedded message failed validation", - cause: err, - } - } - } - - return nil -} - -// DoTaskRequestValidationError is the validation error returned by -// DoTaskRequest.Validate if the designated constraints aren't met. -type DoTaskRequestValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e DoTaskRequestValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e DoTaskRequestValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e DoTaskRequestValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e DoTaskRequestValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e DoTaskRequestValidationError) ErrorName() string { return "DoTaskRequestValidationError" } - -// Error satisfies the builtin error interface -func (e DoTaskRequestValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sDoTaskRequest.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = DoTaskRequestValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = DoTaskRequestValidationError{} - -// Validate checks the field values on DoTaskResponse with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. -func (m *DoTaskResponse) Validate() error { - if m == nil { - return nil - } - - if v, ok := interface{}(m.GetResource()).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return DoTaskResponseValidationError{ - field: "Resource", - reason: "embedded message failed validation", - cause: err, - } - } - } - - return nil -} - -// DoTaskResponseValidationError is the validation error returned by -// DoTaskResponse.Validate if the designated constraints aren't met. -type DoTaskResponseValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e DoTaskResponseValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e DoTaskResponseValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e DoTaskResponseValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e DoTaskResponseValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e DoTaskResponseValidationError) ErrorName() string { return "DoTaskResponseValidationError" } - -// Error satisfies the builtin error interface -func (e DoTaskResponseValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sDoTaskResponse.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = DoTaskResponseValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = DoTaskResponseValidationError{} diff --git a/flyteidl/gen/pb-go/flyteidl/service/agent.pb.go b/flyteidl/gen/pb-go/flyteidl/service/agent.pb.go index a46971dd2d..f2376ee8f6 100644 --- a/flyteidl/gen/pb-go/flyteidl/service/agent.pb.go +++ b/flyteidl/gen/pb-go/flyteidl/service/agent.pb.go @@ -28,22 +28,21 @@ const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package func init() { proto.RegisterFile("flyteidl/service/agent.proto", fileDescriptor_f7d1dfd1fb77d2ef) } var fileDescriptor_f7d1dfd1fb77d2ef = []byte{ - // 240 bytes of a gzipped FileDescriptorProto + // 209 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0x49, 0xcb, 0xa9, 0x2c, 0x49, 0xcd, 0x4c, 0xc9, 0xd1, 0x2f, 0x4e, 0x2d, 0x2a, 0xcb, 0x4c, 0x4e, 0xd5, 0x4f, 0x4c, 0x4f, 0xcd, 0x2b, 0xd1, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x12, 0x80, 0xc9, 0xea, 0x41, 0x65, 0xa5, - 0xa4, 0xe0, 0xea, 0x13, 0x53, 0x72, 0x33, 0xf3, 0x90, 0x55, 0x1b, 0xf5, 0x33, 0x71, 0x09, 0x3a, - 0x16, 0x57, 0xe6, 0x25, 0x3b, 0x82, 0x04, 0x83, 0x21, 0x3a, 0x84, 0x42, 0xb9, 0xb8, 0x9c, 0x8b, - 0x52, 0x13, 0x4b, 0x52, 0x43, 0x12, 0x8b, 0xb3, 0x85, 0x14, 0xf5, 0xe0, 0x46, 0x82, 0x0d, 0xd0, - 0x43, 0xc8, 0x05, 0xa5, 0x16, 0x96, 0xa6, 0x16, 0x97, 0x48, 0x29, 0xe1, 0x53, 0x52, 0x5c, 0x90, - 0x9f, 0x57, 0x9c, 0xaa, 0xc4, 0x20, 0xe4, 0xc3, 0xc5, 0xee, 0x9e, 0x5a, 0x02, 0x36, 0x53, 0x0e, - 0x5d, 0x03, 0x54, 0x02, 0x66, 0xa0, 0x3c, 0x4e, 0x79, 0xb8, 0x69, 0xa1, 0x5c, 0x5c, 0x2e, 0xa9, - 0x39, 0xa9, 0xb8, 0x1c, 0x89, 0x90, 0xc3, 0xe9, 0x48, 0x64, 0x25, 0x30, 0x63, 0x8d, 0x62, 0xb9, - 0x04, 0x82, 0xd1, 0xc3, 0xc3, 0x93, 0x8b, 0xcd, 0x25, 0x1f, 0x6c, 0x8d, 0x2c, 0x86, 0x19, 0xf9, - 0xc8, 0x56, 0xc8, 0xe1, 0x92, 0x86, 0x19, 0xef, 0x64, 0x1f, 0x65, 0x9b, 0x9e, 0x59, 0x92, 0x51, - 0x9a, 0xa4, 0x97, 0x9c, 0x9f, 0xab, 0x0f, 0x56, 0x9d, 0x5f, 0x94, 0x0e, 0x61, 0xe8, 0xc3, 0x23, - 0x2a, 0x3d, 0x35, 0x4f, 0xbf, 0x20, 0x49, 0x37, 0x3d, 0x5f, 0x1f, 0x3d, 0xae, 0x93, 0xd8, 0xc0, - 0x11, 0x67, 0x0c, 0x08, 0x00, 0x00, 0xff, 0xff, 0xc7, 0x0e, 0x26, 0x76, 0x06, 0x02, 0x00, 0x00, + 0xa4, 0xe0, 0xea, 0x13, 0x53, 0x72, 0x33, 0xf3, 0x90, 0x55, 0x1b, 0x75, 0x31, 0x71, 0xf1, 0x38, + 0x82, 0xf8, 0xc1, 0x10, 0xc5, 0x42, 0xa1, 0x5c, 0x5c, 0xce, 0x45, 0xa9, 0x89, 0x25, 0xa9, 0x21, + 0x89, 0xc5, 0xd9, 0x42, 0x8a, 0x7a, 0x70, 0xd3, 0xc0, 0x7a, 0xf5, 0x10, 0x72, 0x41, 0xa9, 0x85, + 0xa5, 0xa9, 0xc5, 0x25, 0x52, 0x4a, 0xf8, 0x94, 0x14, 0x17, 0xe4, 0xe7, 0x15, 0xa7, 0x2a, 0x31, + 0x08, 0xf9, 0x70, 0xb1, 0xbb, 0xa7, 0x96, 0x80, 0xcd, 0x94, 0x43, 0xd7, 0x00, 0x95, 0x80, 0x19, + 0x28, 0x8f, 0x53, 0x1e, 0x6e, 0x5a, 0x28, 0x17, 0x97, 0x4b, 0x6a, 0x4e, 0x2a, 0x2e, 0x47, 0x22, + 0xe4, 0x70, 0x3a, 0x12, 0x59, 0x09, 0xcc, 0x58, 0x27, 0xfb, 0x28, 0xdb, 0xf4, 0xcc, 0x92, 0x8c, + 0xd2, 0x24, 0xbd, 0xe4, 0xfc, 0x5c, 0x7d, 0xb0, 0x8e, 0xfc, 0xa2, 0x74, 0x08, 0x43, 0x1f, 0x1e, + 0x88, 0xe9, 0xa9, 0x79, 0xfa, 0x05, 0x49, 0xba, 0xe9, 0xf9, 0xfa, 0xe8, 0xf1, 0x90, 0xc4, 0x06, + 0x0e, 0x54, 0x63, 0x40, 0x00, 0x00, 0x00, 0xff, 0xff, 0x9a, 0xb8, 0x57, 0xf9, 0xa2, 0x01, 0x00, + 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -54,10 +53,10 @@ var _ grpc.ClientConn // is compatible with the grpc package it is being compiled against. const _ = grpc.SupportPackageIsVersion4 -// AsyncAgentServiceClient is the client API for AsyncAgentService service. +// AgentServiceClient is the client API for AgentService service. // // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. -type AsyncAgentServiceClient interface { +type AgentServiceClient interface { // Send a task create request to the agent server. CreateTask(ctx context.Context, in *admin.CreateTaskRequest, opts ...grpc.CallOption) (*admin.CreateTaskResponse, error) // Get job status. @@ -66,43 +65,43 @@ type AsyncAgentServiceClient interface { DeleteTask(ctx context.Context, in *admin.DeleteTaskRequest, opts ...grpc.CallOption) (*admin.DeleteTaskResponse, error) } -type asyncAgentServiceClient struct { +type agentServiceClient struct { cc *grpc.ClientConn } -func NewAsyncAgentServiceClient(cc *grpc.ClientConn) AsyncAgentServiceClient { - return &asyncAgentServiceClient{cc} +func NewAgentServiceClient(cc *grpc.ClientConn) AgentServiceClient { + return &agentServiceClient{cc} } -func (c *asyncAgentServiceClient) CreateTask(ctx context.Context, in *admin.CreateTaskRequest, opts ...grpc.CallOption) (*admin.CreateTaskResponse, error) { +func (c *agentServiceClient) CreateTask(ctx context.Context, in *admin.CreateTaskRequest, opts ...grpc.CallOption) (*admin.CreateTaskResponse, error) { out := new(admin.CreateTaskResponse) - err := c.cc.Invoke(ctx, "/flyteidl.service.AsyncAgentService/CreateTask", in, out, opts...) + err := c.cc.Invoke(ctx, "/flyteidl.service.AgentService/CreateTask", in, out, opts...) if err != nil { return nil, err } return out, nil } -func (c *asyncAgentServiceClient) GetTask(ctx context.Context, in *admin.GetTaskRequest, opts ...grpc.CallOption) (*admin.GetTaskResponse, error) { +func (c *agentServiceClient) GetTask(ctx context.Context, in *admin.GetTaskRequest, opts ...grpc.CallOption) (*admin.GetTaskResponse, error) { out := new(admin.GetTaskResponse) - err := c.cc.Invoke(ctx, "/flyteidl.service.AsyncAgentService/GetTask", in, out, opts...) + err := c.cc.Invoke(ctx, "/flyteidl.service.AgentService/GetTask", in, out, opts...) if err != nil { return nil, err } return out, nil } -func (c *asyncAgentServiceClient) DeleteTask(ctx context.Context, in *admin.DeleteTaskRequest, opts ...grpc.CallOption) (*admin.DeleteTaskResponse, error) { +func (c *agentServiceClient) DeleteTask(ctx context.Context, in *admin.DeleteTaskRequest, opts ...grpc.CallOption) (*admin.DeleteTaskResponse, error) { out := new(admin.DeleteTaskResponse) - err := c.cc.Invoke(ctx, "/flyteidl.service.AsyncAgentService/DeleteTask", in, out, opts...) + err := c.cc.Invoke(ctx, "/flyteidl.service.AgentService/DeleteTask", in, out, opts...) if err != nil { return nil, err } return out, nil } -// AsyncAgentServiceServer is the server API for AsyncAgentService service. -type AsyncAgentServiceServer interface { +// AgentServiceServer is the server API for AgentService service. +type AgentServiceServer interface { // Send a task create request to the agent server. CreateTask(context.Context, *admin.CreateTaskRequest) (*admin.CreateTaskResponse, error) // Get job status. @@ -111,167 +110,93 @@ type AsyncAgentServiceServer interface { DeleteTask(context.Context, *admin.DeleteTaskRequest) (*admin.DeleteTaskResponse, error) } -// UnimplementedAsyncAgentServiceServer can be embedded to have forward compatible implementations. -type UnimplementedAsyncAgentServiceServer struct { +// UnimplementedAgentServiceServer can be embedded to have forward compatible implementations. +type UnimplementedAgentServiceServer struct { } -func (*UnimplementedAsyncAgentServiceServer) CreateTask(ctx context.Context, req *admin.CreateTaskRequest) (*admin.CreateTaskResponse, error) { +func (*UnimplementedAgentServiceServer) CreateTask(ctx context.Context, req *admin.CreateTaskRequest) (*admin.CreateTaskResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method CreateTask not implemented") } -func (*UnimplementedAsyncAgentServiceServer) GetTask(ctx context.Context, req *admin.GetTaskRequest) (*admin.GetTaskResponse, error) { +func (*UnimplementedAgentServiceServer) GetTask(ctx context.Context, req *admin.GetTaskRequest) (*admin.GetTaskResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method GetTask not implemented") } -func (*UnimplementedAsyncAgentServiceServer) DeleteTask(ctx context.Context, req *admin.DeleteTaskRequest) (*admin.DeleteTaskResponse, error) { +func (*UnimplementedAgentServiceServer) DeleteTask(ctx context.Context, req *admin.DeleteTaskRequest) (*admin.DeleteTaskResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method DeleteTask not implemented") } -func RegisterAsyncAgentServiceServer(s *grpc.Server, srv AsyncAgentServiceServer) { - s.RegisterService(&_AsyncAgentService_serviceDesc, srv) +func RegisterAgentServiceServer(s *grpc.Server, srv AgentServiceServer) { + s.RegisterService(&_AgentService_serviceDesc, srv) } -func _AsyncAgentService_CreateTask_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { +func _AgentService_CreateTask_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(admin.CreateTaskRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(AsyncAgentServiceServer).CreateTask(ctx, in) + return srv.(AgentServiceServer).CreateTask(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/flyteidl.service.AsyncAgentService/CreateTask", + FullMethod: "/flyteidl.service.AgentService/CreateTask", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(AsyncAgentServiceServer).CreateTask(ctx, req.(*admin.CreateTaskRequest)) + return srv.(AgentServiceServer).CreateTask(ctx, req.(*admin.CreateTaskRequest)) } return interceptor(ctx, in, info, handler) } -func _AsyncAgentService_GetTask_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { +func _AgentService_GetTask_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(admin.GetTaskRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(AsyncAgentServiceServer).GetTask(ctx, in) + return srv.(AgentServiceServer).GetTask(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/flyteidl.service.AsyncAgentService/GetTask", + FullMethod: "/flyteidl.service.AgentService/GetTask", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(AsyncAgentServiceServer).GetTask(ctx, req.(*admin.GetTaskRequest)) + return srv.(AgentServiceServer).GetTask(ctx, req.(*admin.GetTaskRequest)) } return interceptor(ctx, in, info, handler) } -func _AsyncAgentService_DeleteTask_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { +func _AgentService_DeleteTask_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(admin.DeleteTaskRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(AsyncAgentServiceServer).DeleteTask(ctx, in) + return srv.(AgentServiceServer).DeleteTask(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/flyteidl.service.AsyncAgentService/DeleteTask", + FullMethod: "/flyteidl.service.AgentService/DeleteTask", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(AsyncAgentServiceServer).DeleteTask(ctx, req.(*admin.DeleteTaskRequest)) + return srv.(AgentServiceServer).DeleteTask(ctx, req.(*admin.DeleteTaskRequest)) } return interceptor(ctx, in, info, handler) } -var _AsyncAgentService_serviceDesc = grpc.ServiceDesc{ - ServiceName: "flyteidl.service.AsyncAgentService", - HandlerType: (*AsyncAgentServiceServer)(nil), +var _AgentService_serviceDesc = grpc.ServiceDesc{ + ServiceName: "flyteidl.service.AgentService", + HandlerType: (*AgentServiceServer)(nil), Methods: []grpc.MethodDesc{ { MethodName: "CreateTask", - Handler: _AsyncAgentService_CreateTask_Handler, + Handler: _AgentService_CreateTask_Handler, }, { MethodName: "GetTask", - Handler: _AsyncAgentService_GetTask_Handler, + Handler: _AgentService_GetTask_Handler, }, { MethodName: "DeleteTask", - Handler: _AsyncAgentService_DeleteTask_Handler, - }, - }, - Streams: []grpc.StreamDesc{}, - Metadata: "flyteidl/service/agent.proto", -} - -// SyncAgentServiceClient is the client API for SyncAgentService service. -// -// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. -type SyncAgentServiceClient interface { - // Do a job and get response from the agent server. - DoTask(ctx context.Context, in *admin.DoTaskRequest, opts ...grpc.CallOption) (*admin.DoTaskResponse, error) -} - -type syncAgentServiceClient struct { - cc *grpc.ClientConn -} - -func NewSyncAgentServiceClient(cc *grpc.ClientConn) SyncAgentServiceClient { - return &syncAgentServiceClient{cc} -} - -func (c *syncAgentServiceClient) DoTask(ctx context.Context, in *admin.DoTaskRequest, opts ...grpc.CallOption) (*admin.DoTaskResponse, error) { - out := new(admin.DoTaskResponse) - err := c.cc.Invoke(ctx, "/flyteidl.service.SyncAgentService/DoTask", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -// SyncAgentServiceServer is the server API for SyncAgentService service. -type SyncAgentServiceServer interface { - // Do a job and get response from the agent server. - DoTask(context.Context, *admin.DoTaskRequest) (*admin.DoTaskResponse, error) -} - -// UnimplementedSyncAgentServiceServer can be embedded to have forward compatible implementations. -type UnimplementedSyncAgentServiceServer struct { -} - -func (*UnimplementedSyncAgentServiceServer) DoTask(ctx context.Context, req *admin.DoTaskRequest) (*admin.DoTaskResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method DoTask not implemented") -} - -func RegisterSyncAgentServiceServer(s *grpc.Server, srv SyncAgentServiceServer) { - s.RegisterService(&_SyncAgentService_serviceDesc, srv) -} - -func _SyncAgentService_DoTask_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(admin.DoTaskRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(SyncAgentServiceServer).DoTask(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/flyteidl.service.SyncAgentService/DoTask", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(SyncAgentServiceServer).DoTask(ctx, req.(*admin.DoTaskRequest)) - } - return interceptor(ctx, in, info, handler) -} - -var _SyncAgentService_serviceDesc = grpc.ServiceDesc{ - ServiceName: "flyteidl.service.SyncAgentService", - HandlerType: (*SyncAgentServiceServer)(nil), - Methods: []grpc.MethodDesc{ - { - MethodName: "DoTask", - Handler: _SyncAgentService_DoTask_Handler, + Handler: _AgentService_DeleteTask_Handler, }, }, Streams: []grpc.StreamDesc{}, diff --git a/flyteidl/gen/pb-go/flyteidl/service/agent.swagger.json b/flyteidl/gen/pb-go/flyteidl/service/agent.swagger.json index 5b84079ea2..502b341ea3 100644 --- a/flyteidl/gen/pb-go/flyteidl/service/agent.swagger.json +++ b/flyteidl/gen/pb-go/flyteidl/service/agent.swagger.json @@ -177,8 +177,17 @@ "properties": { "resource_meta": { "type": "string", - "format": "byte", - "description": "Metadata is created by the agent. It could be a string (jobId) or a dict (more complex metadata)." + "format": "byte" + }, + "resource": { + "$ref": "#/definitions/adminResource" + }, + "log_links": { + "type": "array", + "items": { + "$ref": "#/definitions/coreTaskLog" + }, + "description": "log information for the task execution." } }, "description": "Represents a create response structure." @@ -187,14 +196,6 @@ "type": "object", "description": "Response to delete a task." }, - "adminDoTaskResponse": { - "type": "object", - "properties": { - "resource": { - "$ref": "#/definitions/adminResource" - } - } - }, "adminGetTaskResponse": { "type": "object", "properties": { diff --git a/flyteidl/gen/pb-go/flyteidl/service/openapi.go b/flyteidl/gen/pb-go/flyteidl/service/openapi.go index 8d7bf872f7..95a399839e 100644 --- a/flyteidl/gen/pb-go/flyteidl/service/openapi.go +++ b/flyteidl/gen/pb-go/flyteidl/service/openapi.go @@ -93,7 +93,7 @@ func adminSwaggerJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "admin.swagger.json", size: 309605, mode: os.FileMode(511), modTime: time.Unix(1562572800, 0)} + info := bindataFileInfo{name: "admin.swagger.json", size: 309605, mode: os.FileMode(420), modTime: time.Unix(1562572800, 0)} a := &asset{bytes: bytes, info: info} return a, nil } diff --git a/flyteidl/gen/pb-java/flyteidl/admin/Agent.java b/flyteidl/gen/pb-java/flyteidl/admin/Agent.java index 9bfa1c66e4..9e15ee6197 100644 --- a/flyteidl/gen/pb-java/flyteidl/admin/Agent.java +++ b/flyteidl/gen/pb-java/flyteidl/admin/Agent.java @@ -3614,14 +3614,69 @@ public interface CreateTaskResponseOrBuilder extends // @@protoc_insertion_point(interface_extends:flyteidl.admin.CreateTaskResponse) com.google.protobuf.MessageOrBuilder { + /** + * bytes resource_meta = 1; + */ + com.google.protobuf.ByteString getResourceMeta(); + + /** + * .flyteidl.admin.Resource resource = 2; + */ + boolean hasResource(); + /** + * .flyteidl.admin.Resource resource = 2; + */ + flyteidl.admin.Agent.Resource getResource(); + /** + * .flyteidl.admin.Resource resource = 2; + */ + flyteidl.admin.Agent.ResourceOrBuilder getResourceOrBuilder(); + + /** + *
+     * log information for the task execution.
+     * 
+ * + * repeated .flyteidl.core.TaskLog log_links = 3; + */ + java.util.List + getLogLinksList(); /** *
-     * Metadata is created by the agent. It could be a string (jobId) or a dict (more complex metadata).
+     * log information for the task execution.
      * 
* - * bytes resource_meta = 1; + * repeated .flyteidl.core.TaskLog log_links = 3; */ - com.google.protobuf.ByteString getResourceMeta(); + flyteidl.core.Execution.TaskLog getLogLinks(int index); + /** + *
+     * log information for the task execution.
+     * 
+ * + * repeated .flyteidl.core.TaskLog log_links = 3; + */ + int getLogLinksCount(); + /** + *
+     * log information for the task execution.
+     * 
+ * + * repeated .flyteidl.core.TaskLog log_links = 3; + */ + java.util.List + getLogLinksOrBuilderList(); + /** + *
+     * log information for the task execution.
+     * 
+ * + * repeated .flyteidl.core.TaskLog log_links = 3; + */ + flyteidl.core.Execution.TaskLogOrBuilder getLogLinksOrBuilder( + int index); + + public flyteidl.admin.Agent.CreateTaskResponse.ResCase getResCase(); } /** *
@@ -3640,7 +3695,7 @@ private CreateTaskResponse(com.google.protobuf.GeneratedMessageV3.Builder bui
       super(builder);
     }
     private CreateTaskResponse() {
-      resourceMeta_ = com.google.protobuf.ByteString.EMPTY;
+      logLinks_ = java.util.Collections.emptyList();
     }
 
     @java.lang.Override
@@ -3668,8 +3723,31 @@ private CreateTaskResponse(
               done = true;
               break;
             case 10: {
-
-              resourceMeta_ = input.readBytes();
+              resCase_ = 1;
+              res_ = input.readBytes();
+              break;
+            }
+            case 18: {
+              flyteidl.admin.Agent.Resource.Builder subBuilder = null;
+              if (resCase_ == 2) {
+                subBuilder = ((flyteidl.admin.Agent.Resource) res_).toBuilder();
+              }
+              res_ =
+                  input.readMessage(flyteidl.admin.Agent.Resource.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom((flyteidl.admin.Agent.Resource) res_);
+                res_ = subBuilder.buildPartial();
+              }
+              resCase_ = 2;
+              break;
+            }
+            case 26: {
+              if (!((mutable_bitField0_ & 0x00000004) != 0)) {
+                logLinks_ = new java.util.ArrayList();
+                mutable_bitField0_ |= 0x00000004;
+              }
+              logLinks_.add(
+                  input.readMessage(flyteidl.core.Execution.TaskLog.parser(), extensionRegistry));
               break;
             }
             default: {
@@ -3687,6 +3765,9 @@ private CreateTaskResponse(
         throw new com.google.protobuf.InvalidProtocolBufferException(
             e).setUnfinishedMessage(this);
       } finally {
+        if (((mutable_bitField0_ & 0x00000004) != 0)) {
+          logLinks_ = java.util.Collections.unmodifiableList(logLinks_);
+        }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
       }
@@ -3704,17 +3785,135 @@ private CreateTaskResponse(
               flyteidl.admin.Agent.CreateTaskResponse.class, flyteidl.admin.Agent.CreateTaskResponse.Builder.class);
     }
 
+    private int bitField0_;
+    private int resCase_ = 0;
+    private java.lang.Object res_;
+    public enum ResCase
+        implements com.google.protobuf.Internal.EnumLite {
+      RESOURCE_META(1),
+      RESOURCE(2),
+      RES_NOT_SET(0);
+      private final int value;
+      private ResCase(int value) {
+        this.value = value;
+      }
+      /**
+       * @deprecated Use {@link #forNumber(int)} instead.
+       */
+      @java.lang.Deprecated
+      public static ResCase valueOf(int value) {
+        return forNumber(value);
+      }
+
+      public static ResCase forNumber(int value) {
+        switch (value) {
+          case 1: return RESOURCE_META;
+          case 2: return RESOURCE;
+          case 0: return RES_NOT_SET;
+          default: return null;
+        }
+      }
+      public int getNumber() {
+        return this.value;
+      }
+    };
+
+    public ResCase
+    getResCase() {
+      return ResCase.forNumber(
+          resCase_);
+    }
+
     public static final int RESOURCE_META_FIELD_NUMBER = 1;
-    private com.google.protobuf.ByteString resourceMeta_;
+    /**
+     * bytes resource_meta = 1;
+     */
+    public com.google.protobuf.ByteString getResourceMeta() {
+      if (resCase_ == 1) {
+        return (com.google.protobuf.ByteString) res_;
+      }
+      return com.google.protobuf.ByteString.EMPTY;
+    }
+
+    public static final int RESOURCE_FIELD_NUMBER = 2;
+    /**
+     * .flyteidl.admin.Resource resource = 2;
+     */
+    public boolean hasResource() {
+      return resCase_ == 2;
+    }
+    /**
+     * .flyteidl.admin.Resource resource = 2;
+     */
+    public flyteidl.admin.Agent.Resource getResource() {
+      if (resCase_ == 2) {
+         return (flyteidl.admin.Agent.Resource) res_;
+      }
+      return flyteidl.admin.Agent.Resource.getDefaultInstance();
+    }
+    /**
+     * .flyteidl.admin.Resource resource = 2;
+     */
+    public flyteidl.admin.Agent.ResourceOrBuilder getResourceOrBuilder() {
+      if (resCase_ == 2) {
+         return (flyteidl.admin.Agent.Resource) res_;
+      }
+      return flyteidl.admin.Agent.Resource.getDefaultInstance();
+    }
+
+    public static final int LOG_LINKS_FIELD_NUMBER = 3;
+    private java.util.List logLinks_;
+    /**
+     * 
+     * log information for the task execution.
+     * 
+ * + * repeated .flyteidl.core.TaskLog log_links = 3; + */ + public java.util.List getLogLinksList() { + return logLinks_; + } /** *
-     * Metadata is created by the agent. It could be a string (jobId) or a dict (more complex metadata).
+     * log information for the task execution.
      * 
* - * bytes resource_meta = 1; + * repeated .flyteidl.core.TaskLog log_links = 3; */ - public com.google.protobuf.ByteString getResourceMeta() { - return resourceMeta_; + public java.util.List + getLogLinksOrBuilderList() { + return logLinks_; + } + /** + *
+     * log information for the task execution.
+     * 
+ * + * repeated .flyteidl.core.TaskLog log_links = 3; + */ + public int getLogLinksCount() { + return logLinks_.size(); + } + /** + *
+     * log information for the task execution.
+     * 
+ * + * repeated .flyteidl.core.TaskLog log_links = 3; + */ + public flyteidl.core.Execution.TaskLog getLogLinks(int index) { + return logLinks_.get(index); + } + /** + *
+     * log information for the task execution.
+     * 
+ * + * repeated .flyteidl.core.TaskLog log_links = 3; + */ + public flyteidl.core.Execution.TaskLogOrBuilder getLogLinksOrBuilder( + int index) { + return logLinks_.get(index); } private byte memoizedIsInitialized = -1; @@ -3731,8 +3930,15 @@ public final boolean isInitialized() { @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (!resourceMeta_.isEmpty()) { - output.writeBytes(1, resourceMeta_); + if (resCase_ == 1) { + output.writeBytes( + 1, (com.google.protobuf.ByteString) res_); + } + if (resCase_ == 2) { + output.writeMessage(2, (flyteidl.admin.Agent.Resource) res_); + } + for (int i = 0; i < logLinks_.size(); i++) { + output.writeMessage(3, logLinks_.get(i)); } unknownFields.writeTo(output); } @@ -3743,9 +3949,18 @@ public int getSerializedSize() { if (size != -1) return size; size = 0; - if (!resourceMeta_.isEmpty()) { + if (resCase_ == 1) { size += com.google.protobuf.CodedOutputStream - .computeBytesSize(1, resourceMeta_); + .computeBytesSize( + 1, (com.google.protobuf.ByteString) res_); + } + if (resCase_ == 2) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(2, (flyteidl.admin.Agent.Resource) res_); + } + for (int i = 0; i < logLinks_.size(); i++) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(3, logLinks_.get(i)); } size += unknownFields.getSerializedSize(); memoizedSize = size; @@ -3762,8 +3977,21 @@ public boolean equals(final java.lang.Object obj) { } flyteidl.admin.Agent.CreateTaskResponse other = (flyteidl.admin.Agent.CreateTaskResponse) obj; - if (!getResourceMeta() - .equals(other.getResourceMeta())) return false; + if (!getLogLinksList() + .equals(other.getLogLinksList())) return false; + if (!getResCase().equals(other.getResCase())) return false; + switch (resCase_) { + case 1: + if (!getResourceMeta() + .equals(other.getResourceMeta())) return false; + break; + case 2: + if (!getResource() + .equals(other.getResource())) return false; + break; + case 0: + default: + } if (!unknownFields.equals(other.unknownFields)) return false; return true; } @@ -3775,8 +4003,22 @@ public int hashCode() { } int hash = 41; hash = (19 * hash) + getDescriptor().hashCode(); - hash = (37 * hash) + RESOURCE_META_FIELD_NUMBER; - hash = (53 * hash) + getResourceMeta().hashCode(); + if (getLogLinksCount() > 0) { + hash = (37 * hash) + LOG_LINKS_FIELD_NUMBER; + hash = (53 * hash) + getLogLinksList().hashCode(); + } + switch (resCase_) { + case 1: + hash = (37 * hash) + RESOURCE_META_FIELD_NUMBER; + hash = (53 * hash) + getResourceMeta().hashCode(); + break; + case 2: + hash = (37 * hash) + RESOURCE_FIELD_NUMBER; + hash = (53 * hash) + getResource().hashCode(); + break; + case 0: + default: + } hash = (29 * hash) + unknownFields.hashCode(); memoizedHashCode = hash; return hash; @@ -3909,13 +4151,20 @@ private Builder( private void maybeForceBuilderInitialization() { if (com.google.protobuf.GeneratedMessageV3 .alwaysUseFieldBuilders) { + getLogLinksFieldBuilder(); } } @java.lang.Override public Builder clear() { super.clear(); - resourceMeta_ = com.google.protobuf.ByteString.EMPTY; - + if (logLinksBuilder_ == null) { + logLinks_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000004); + } else { + logLinksBuilder_.clear(); + } + resCase_ = 0; + res_ = null; return this; } @@ -3942,7 +4191,29 @@ public flyteidl.admin.Agent.CreateTaskResponse build() { @java.lang.Override public flyteidl.admin.Agent.CreateTaskResponse buildPartial() { flyteidl.admin.Agent.CreateTaskResponse result = new flyteidl.admin.Agent.CreateTaskResponse(this); - result.resourceMeta_ = resourceMeta_; + int from_bitField0_ = bitField0_; + int to_bitField0_ = 0; + if (resCase_ == 1) { + result.res_ = res_; + } + if (resCase_ == 2) { + if (resourceBuilder_ == null) { + result.res_ = res_; + } else { + result.res_ = resourceBuilder_.build(); + } + } + if (logLinksBuilder_ == null) { + if (((bitField0_ & 0x00000004) != 0)) { + logLinks_ = java.util.Collections.unmodifiableList(logLinks_); + bitField0_ = (bitField0_ & ~0x00000004); + } + result.logLinks_ = logLinks_; + } else { + result.logLinks_ = logLinksBuilder_.build(); + } + result.bitField0_ = to_bitField0_; + result.resCase_ = resCase_; onBuilt(); return result; } @@ -3991,8 +4262,44 @@ public Builder mergeFrom(com.google.protobuf.Message other) { public Builder mergeFrom(flyteidl.admin.Agent.CreateTaskResponse other) { if (other == flyteidl.admin.Agent.CreateTaskResponse.getDefaultInstance()) return this; - if (other.getResourceMeta() != com.google.protobuf.ByteString.EMPTY) { - setResourceMeta(other.getResourceMeta()); + if (logLinksBuilder_ == null) { + if (!other.logLinks_.isEmpty()) { + if (logLinks_.isEmpty()) { + logLinks_ = other.logLinks_; + bitField0_ = (bitField0_ & ~0x00000004); + } else { + ensureLogLinksIsMutable(); + logLinks_.addAll(other.logLinks_); + } + onChanged(); + } + } else { + if (!other.logLinks_.isEmpty()) { + if (logLinksBuilder_.isEmpty()) { + logLinksBuilder_.dispose(); + logLinksBuilder_ = null; + logLinks_ = other.logLinks_; + bitField0_ = (bitField0_ & ~0x00000004); + logLinksBuilder_ = + com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ? + getLogLinksFieldBuilder() : null; + } else { + logLinksBuilder_.addAllMessages(other.logLinks_); + } + } + } + switch (other.getResCase()) { + case RESOURCE_META: { + setResourceMeta(other.getResourceMeta()); + break; + } + case RESOURCE: { + mergeResource(other.getResource()); + break; + } + case RES_NOT_SET: { + break; + } } this.mergeUnknownFields(other.unknownFields); onChanged(); @@ -4022,726 +4329,503 @@ public Builder mergeFrom( } return this; } + private int resCase_ = 0; + private java.lang.Object res_; + public ResCase + getResCase() { + return ResCase.forNumber( + resCase_); + } + + public Builder clearRes() { + resCase_ = 0; + res_ = null; + onChanged(); + return this; + } + + private int bitField0_; - private com.google.protobuf.ByteString resourceMeta_ = com.google.protobuf.ByteString.EMPTY; /** - *
-       * Metadata is created by the agent. It could be a string (jobId) or a dict (more complex metadata).
-       * 
- * * bytes resource_meta = 1; */ public com.google.protobuf.ByteString getResourceMeta() { - return resourceMeta_; + if (resCase_ == 1) { + return (com.google.protobuf.ByteString) res_; + } + return com.google.protobuf.ByteString.EMPTY; } /** - *
-       * Metadata is created by the agent. It could be a string (jobId) or a dict (more complex metadata).
-       * 
- * * bytes resource_meta = 1; */ public Builder setResourceMeta(com.google.protobuf.ByteString value) { if (value == null) { throw new NullPointerException(); } - - resourceMeta_ = value; + resCase_ = 1; + res_ = value; onChanged(); return this; } /** - *
-       * Metadata is created by the agent. It could be a string (jobId) or a dict (more complex metadata).
-       * 
- * * bytes resource_meta = 1; */ public Builder clearResourceMeta() { - - resourceMeta_ = getDefaultInstance().getResourceMeta(); - onChanged(); - return this; - } - @java.lang.Override - public final Builder setUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); + if (resCase_ == 1) { + resCase_ = 0; + res_ = null; + onChanged(); + } + return this; } - - // @@protoc_insertion_point(builder_scope:flyteidl.admin.CreateTaskResponse) - } - - // @@protoc_insertion_point(class_scope:flyteidl.admin.CreateTaskResponse) - private static final flyteidl.admin.Agent.CreateTaskResponse DEFAULT_INSTANCE; - static { - DEFAULT_INSTANCE = new flyteidl.admin.Agent.CreateTaskResponse(); - } - - public static flyteidl.admin.Agent.CreateTaskResponse getDefaultInstance() { - return DEFAULT_INSTANCE; - } - - private static final com.google.protobuf.Parser - PARSER = new com.google.protobuf.AbstractParser() { - @java.lang.Override - public CreateTaskResponse parsePartialFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return new CreateTaskResponse(input, extensionRegistry); + private com.google.protobuf.SingleFieldBuilderV3< + flyteidl.admin.Agent.Resource, flyteidl.admin.Agent.Resource.Builder, flyteidl.admin.Agent.ResourceOrBuilder> resourceBuilder_; + /** + * .flyteidl.admin.Resource resource = 2; + */ + public boolean hasResource() { + return resCase_ == 2; } - }; - - public static com.google.protobuf.Parser parser() { - return PARSER; - } - - @java.lang.Override - public com.google.protobuf.Parser getParserForType() { - return PARSER; - } - - @java.lang.Override - public flyteidl.admin.Agent.CreateTaskResponse getDefaultInstanceForType() { - return DEFAULT_INSTANCE; - } - - } - - public interface GetTaskRequestOrBuilder extends - // @@protoc_insertion_point(interface_extends:flyteidl.admin.GetTaskRequest) - com.google.protobuf.MessageOrBuilder { - - /** - *
-     * A predefined yet extensible Task type identifier.
-     * 
- * - * string task_type = 1; - */ - java.lang.String getTaskType(); - /** - *
-     * A predefined yet extensible Task type identifier.
-     * 
- * - * string task_type = 1; - */ - com.google.protobuf.ByteString - getTaskTypeBytes(); - - /** - *
-     * Metadata about the resource to be pass to the agent.
-     * 
- * - * bytes resource_meta = 2; - */ - com.google.protobuf.ByteString getResourceMeta(); - } - /** - *
-   * A message used to fetch a job resource from flyte agent server.
-   * 
- * - * Protobuf type {@code flyteidl.admin.GetTaskRequest} - */ - public static final class GetTaskRequest extends - com.google.protobuf.GeneratedMessageV3 implements - // @@protoc_insertion_point(message_implements:flyteidl.admin.GetTaskRequest) - GetTaskRequestOrBuilder { - private static final long serialVersionUID = 0L; - // Use GetTaskRequest.newBuilder() to construct. - private GetTaskRequest(com.google.protobuf.GeneratedMessageV3.Builder builder) { - super(builder); - } - private GetTaskRequest() { - taskType_ = ""; - resourceMeta_ = com.google.protobuf.ByteString.EMPTY; - } - - @java.lang.Override - public final com.google.protobuf.UnknownFieldSet - getUnknownFields() { - return this.unknownFields; - } - private GetTaskRequest( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - this(); - if (extensionRegistry == null) { - throw new java.lang.NullPointerException(); + /** + * .flyteidl.admin.Resource resource = 2; + */ + public flyteidl.admin.Agent.Resource getResource() { + if (resourceBuilder_ == null) { + if (resCase_ == 2) { + return (flyteidl.admin.Agent.Resource) res_; + } + return flyteidl.admin.Agent.Resource.getDefaultInstance(); + } else { + if (resCase_ == 2) { + return resourceBuilder_.getMessage(); + } + return flyteidl.admin.Agent.Resource.getDefaultInstance(); + } } - int mutable_bitField0_ = 0; - com.google.protobuf.UnknownFieldSet.Builder unknownFields = - com.google.protobuf.UnknownFieldSet.newBuilder(); - try { - boolean done = false; - while (!done) { - int tag = input.readTag(); - switch (tag) { - case 0: - done = true; - break; - case 10: { - java.lang.String s = input.readStringRequireUtf8(); - - taskType_ = s; - break; - } - case 18: { - - resourceMeta_ = input.readBytes(); - break; - } - default: { - if (!parseUnknownField( - input, unknownFields, extensionRegistry, tag)) { - done = true; - } - break; - } + /** + * .flyteidl.admin.Resource resource = 2; + */ + public Builder setResource(flyteidl.admin.Agent.Resource value) { + if (resourceBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); } + res_ = value; + onChanged(); + } else { + resourceBuilder_.setMessage(value); } - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.setUnfinishedMessage(this); - } catch (java.io.IOException e) { - throw new com.google.protobuf.InvalidProtocolBufferException( - e).setUnfinishedMessage(this); - } finally { - this.unknownFields = unknownFields.build(); - makeExtensionsImmutable(); + resCase_ = 2; + return this; } - } - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return flyteidl.admin.Agent.internal_static_flyteidl_admin_GetTaskRequest_descriptor; - } - - @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return flyteidl.admin.Agent.internal_static_flyteidl_admin_GetTaskRequest_fieldAccessorTable - .ensureFieldAccessorsInitialized( - flyteidl.admin.Agent.GetTaskRequest.class, flyteidl.admin.Agent.GetTaskRequest.Builder.class); - } - - public static final int TASK_TYPE_FIELD_NUMBER = 1; - private volatile java.lang.Object taskType_; - /** - *
-     * A predefined yet extensible Task type identifier.
-     * 
- * - * string task_type = 1; - */ - public java.lang.String getTaskType() { - java.lang.Object ref = taskType_; - if (ref instanceof java.lang.String) { - return (java.lang.String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - taskType_ = s; - return s; + /** + * .flyteidl.admin.Resource resource = 2; + */ + public Builder setResource( + flyteidl.admin.Agent.Resource.Builder builderForValue) { + if (resourceBuilder_ == null) { + res_ = builderForValue.build(); + onChanged(); + } else { + resourceBuilder_.setMessage(builderForValue.build()); + } + resCase_ = 2; + return this; } - } - /** - *
-     * A predefined yet extensible Task type identifier.
-     * 
- * - * string task_type = 1; - */ - public com.google.protobuf.ByteString - getTaskTypeBytes() { - java.lang.Object ref = taskType_; - if (ref instanceof java.lang.String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - taskType_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; + /** + * .flyteidl.admin.Resource resource = 2; + */ + public Builder mergeResource(flyteidl.admin.Agent.Resource value) { + if (resourceBuilder_ == null) { + if (resCase_ == 2 && + res_ != flyteidl.admin.Agent.Resource.getDefaultInstance()) { + res_ = flyteidl.admin.Agent.Resource.newBuilder((flyteidl.admin.Agent.Resource) res_) + .mergeFrom(value).buildPartial(); + } else { + res_ = value; + } + onChanged(); + } else { + if (resCase_ == 2) { + resourceBuilder_.mergeFrom(value); + } + resourceBuilder_.setMessage(value); + } + resCase_ = 2; + return this; } - } - - public static final int RESOURCE_META_FIELD_NUMBER = 2; - private com.google.protobuf.ByteString resourceMeta_; - /** - *
-     * Metadata about the resource to be pass to the agent.
-     * 
- * - * bytes resource_meta = 2; - */ - public com.google.protobuf.ByteString getResourceMeta() { - return resourceMeta_; - } - - private byte memoizedIsInitialized = -1; - @java.lang.Override - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized == 1) return true; - if (isInitialized == 0) return false; - - memoizedIsInitialized = 1; - return true; - } - - @java.lang.Override - public void writeTo(com.google.protobuf.CodedOutputStream output) - throws java.io.IOException { - if (!getTaskTypeBytes().isEmpty()) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, taskType_); - } - if (!resourceMeta_.isEmpty()) { - output.writeBytes(2, resourceMeta_); - } - unknownFields.writeTo(output); - } - - @java.lang.Override - public int getSerializedSize() { - int size = memoizedSize; - if (size != -1) return size; - - size = 0; - if (!getTaskTypeBytes().isEmpty()) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, taskType_); + /** + * .flyteidl.admin.Resource resource = 2; + */ + public Builder clearResource() { + if (resourceBuilder_ == null) { + if (resCase_ == 2) { + resCase_ = 0; + res_ = null; + onChanged(); + } + } else { + if (resCase_ == 2) { + resCase_ = 0; + res_ = null; + } + resourceBuilder_.clear(); + } + return this; } - if (!resourceMeta_.isEmpty()) { - size += com.google.protobuf.CodedOutputStream - .computeBytesSize(2, resourceMeta_); + /** + * .flyteidl.admin.Resource resource = 2; + */ + public flyteidl.admin.Agent.Resource.Builder getResourceBuilder() { + return getResourceFieldBuilder().getBuilder(); } - size += unknownFields.getSerializedSize(); - memoizedSize = size; - return size; - } - - @java.lang.Override - public boolean equals(final java.lang.Object obj) { - if (obj == this) { - return true; + /** + * .flyteidl.admin.Resource resource = 2; + */ + public flyteidl.admin.Agent.ResourceOrBuilder getResourceOrBuilder() { + if ((resCase_ == 2) && (resourceBuilder_ != null)) { + return resourceBuilder_.getMessageOrBuilder(); + } else { + if (resCase_ == 2) { + return (flyteidl.admin.Agent.Resource) res_; + } + return flyteidl.admin.Agent.Resource.getDefaultInstance(); + } } - if (!(obj instanceof flyteidl.admin.Agent.GetTaskRequest)) { - return super.equals(obj); + /** + * .flyteidl.admin.Resource resource = 2; + */ + private com.google.protobuf.SingleFieldBuilderV3< + flyteidl.admin.Agent.Resource, flyteidl.admin.Agent.Resource.Builder, flyteidl.admin.Agent.ResourceOrBuilder> + getResourceFieldBuilder() { + if (resourceBuilder_ == null) { + if (!(resCase_ == 2)) { + res_ = flyteidl.admin.Agent.Resource.getDefaultInstance(); + } + resourceBuilder_ = new com.google.protobuf.SingleFieldBuilderV3< + flyteidl.admin.Agent.Resource, flyteidl.admin.Agent.Resource.Builder, flyteidl.admin.Agent.ResourceOrBuilder>( + (flyteidl.admin.Agent.Resource) res_, + getParentForChildren(), + isClean()); + res_ = null; + } + resCase_ = 2; + onChanged();; + return resourceBuilder_; } - flyteidl.admin.Agent.GetTaskRequest other = (flyteidl.admin.Agent.GetTaskRequest) obj; - - if (!getTaskType() - .equals(other.getTaskType())) return false; - if (!getResourceMeta() - .equals(other.getResourceMeta())) return false; - if (!unknownFields.equals(other.unknownFields)) return false; - return true; - } - @java.lang.Override - public int hashCode() { - if (memoizedHashCode != 0) { - return memoizedHashCode; + private java.util.List logLinks_ = + java.util.Collections.emptyList(); + private void ensureLogLinksIsMutable() { + if (!((bitField0_ & 0x00000004) != 0)) { + logLinks_ = new java.util.ArrayList(logLinks_); + bitField0_ |= 0x00000004; + } } - int hash = 41; - hash = (19 * hash) + getDescriptor().hashCode(); - hash = (37 * hash) + TASK_TYPE_FIELD_NUMBER; - hash = (53 * hash) + getTaskType().hashCode(); - hash = (37 * hash) + RESOURCE_META_FIELD_NUMBER; - hash = (53 * hash) + getResourceMeta().hashCode(); - hash = (29 * hash) + unknownFields.hashCode(); - memoizedHashCode = hash; - return hash; - } - - public static flyteidl.admin.Agent.GetTaskRequest parseFrom( - java.nio.ByteBuffer data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static flyteidl.admin.Agent.GetTaskRequest parseFrom( - java.nio.ByteBuffer data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static flyteidl.admin.Agent.GetTaskRequest parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static flyteidl.admin.Agent.GetTaskRequest parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static flyteidl.admin.Agent.GetTaskRequest parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static flyteidl.admin.Agent.GetTaskRequest parseFrom( - byte[] data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static flyteidl.admin.Agent.GetTaskRequest parseFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static flyteidl.admin.Agent.GetTaskRequest parseFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - public static flyteidl.admin.Agent.GetTaskRequest parseDelimitedFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input); - } - public static flyteidl.admin.Agent.GetTaskRequest parseDelimitedFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input, extensionRegistry); - } - public static flyteidl.admin.Agent.GetTaskRequest parseFrom( - com.google.protobuf.CodedInputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static flyteidl.admin.Agent.GetTaskRequest parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - @java.lang.Override - public Builder newBuilderForType() { return newBuilder(); } - public static Builder newBuilder() { - return DEFAULT_INSTANCE.toBuilder(); - } - public static Builder newBuilder(flyteidl.admin.Agent.GetTaskRequest prototype) { - return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); - } - @java.lang.Override - public Builder toBuilder() { - return this == DEFAULT_INSTANCE - ? new Builder() : new Builder().mergeFrom(this); - } + private com.google.protobuf.RepeatedFieldBuilderV3< + flyteidl.core.Execution.TaskLog, flyteidl.core.Execution.TaskLog.Builder, flyteidl.core.Execution.TaskLogOrBuilder> logLinksBuilder_; - @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } - /** - *
-     * A message used to fetch a job resource from flyte agent server.
-     * 
- * - * Protobuf type {@code flyteidl.admin.GetTaskRequest} - */ - public static final class Builder extends - com.google.protobuf.GeneratedMessageV3.Builder implements - // @@protoc_insertion_point(builder_implements:flyteidl.admin.GetTaskRequest) - flyteidl.admin.Agent.GetTaskRequestOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return flyteidl.admin.Agent.internal_static_flyteidl_admin_GetTaskRequest_descriptor; + /** + *
+       * log information for the task execution.
+       * 
+ * + * repeated .flyteidl.core.TaskLog log_links = 3; + */ + public java.util.List getLogLinksList() { + if (logLinksBuilder_ == null) { + return java.util.Collections.unmodifiableList(logLinks_); + } else { + return logLinksBuilder_.getMessageList(); + } } - - @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return flyteidl.admin.Agent.internal_static_flyteidl_admin_GetTaskRequest_fieldAccessorTable - .ensureFieldAccessorsInitialized( - flyteidl.admin.Agent.GetTaskRequest.class, flyteidl.admin.Agent.GetTaskRequest.Builder.class); + /** + *
+       * log information for the task execution.
+       * 
+ * + * repeated .flyteidl.core.TaskLog log_links = 3; + */ + public int getLogLinksCount() { + if (logLinksBuilder_ == null) { + return logLinks_.size(); + } else { + return logLinksBuilder_.getCount(); + } } - - // Construct using flyteidl.admin.Agent.GetTaskRequest.newBuilder() - private Builder() { - maybeForceBuilderInitialization(); - } - - private Builder( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - super(parent); - maybeForceBuilderInitialization(); - } - private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3 - .alwaysUseFieldBuilders) { - } - } - @java.lang.Override - public Builder clear() { - super.clear(); - taskType_ = ""; - - resourceMeta_ = com.google.protobuf.ByteString.EMPTY; - - return this; - } - - @java.lang.Override - public com.google.protobuf.Descriptors.Descriptor - getDescriptorForType() { - return flyteidl.admin.Agent.internal_static_flyteidl_admin_GetTaskRequest_descriptor; - } - - @java.lang.Override - public flyteidl.admin.Agent.GetTaskRequest getDefaultInstanceForType() { - return flyteidl.admin.Agent.GetTaskRequest.getDefaultInstance(); - } - - @java.lang.Override - public flyteidl.admin.Agent.GetTaskRequest build() { - flyteidl.admin.Agent.GetTaskRequest result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - @java.lang.Override - public flyteidl.admin.Agent.GetTaskRequest buildPartial() { - flyteidl.admin.Agent.GetTaskRequest result = new flyteidl.admin.Agent.GetTaskRequest(this); - result.taskType_ = taskType_; - result.resourceMeta_ = resourceMeta_; - onBuilt(); - return result; - } - - @java.lang.Override - public Builder clone() { - return super.clone(); - } - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, - java.lang.Object value) { - return super.setField(field, value); - } - @java.lang.Override - public Builder clearField( - com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - @java.lang.Override - public Builder clearOneof( - com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof flyteidl.admin.Agent.GetTaskRequest) { - return mergeFrom((flyteidl.admin.Agent.GetTaskRequest)other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(flyteidl.admin.Agent.GetTaskRequest other) { - if (other == flyteidl.admin.Agent.GetTaskRequest.getDefaultInstance()) return this; - if (!other.getTaskType().isEmpty()) { - taskType_ = other.taskType_; - onChanged(); - } - if (other.getResourceMeta() != com.google.protobuf.ByteString.EMPTY) { - setResourceMeta(other.getResourceMeta()); - } - this.mergeUnknownFields(other.unknownFields); - onChanged(); - return this; - } - - @java.lang.Override - public final boolean isInitialized() { - return true; - } - - @java.lang.Override - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - flyteidl.admin.Agent.GetTaskRequest parsedMessage = null; - try { - parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - parsedMessage = (flyteidl.admin.Agent.GetTaskRequest) e.getUnfinishedMessage(); - throw e.unwrapIOException(); - } finally { - if (parsedMessage != null) { - mergeFrom(parsedMessage); - } - } - return this; - } - - private java.lang.Object taskType_ = ""; /** *
-       * A predefined yet extensible Task type identifier.
+       * log information for the task execution.
        * 
* - * string task_type = 1; + * repeated .flyteidl.core.TaskLog log_links = 3; */ - public java.lang.String getTaskType() { - java.lang.Object ref = taskType_; - if (!(ref instanceof java.lang.String)) { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - taskType_ = s; - return s; + public flyteidl.core.Execution.TaskLog getLogLinks(int index) { + if (logLinksBuilder_ == null) { + return logLinks_.get(index); } else { - return (java.lang.String) ref; + return logLinksBuilder_.getMessage(index); } } /** *
-       * A predefined yet extensible Task type identifier.
+       * log information for the task execution.
        * 
* - * string task_type = 1; + * repeated .flyteidl.core.TaskLog log_links = 3; */ - public com.google.protobuf.ByteString - getTaskTypeBytes() { - java.lang.Object ref = taskType_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - taskType_ = b; - return b; + public Builder setLogLinks( + int index, flyteidl.core.Execution.TaskLog value) { + if (logLinksBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureLogLinksIsMutable(); + logLinks_.set(index, value); + onChanged(); } else { - return (com.google.protobuf.ByteString) ref; + logLinksBuilder_.setMessage(index, value); } + return this; } /** *
-       * A predefined yet extensible Task type identifier.
+       * log information for the task execution.
        * 
* - * string task_type = 1; + * repeated .flyteidl.core.TaskLog log_links = 3; */ - public Builder setTaskType( - java.lang.String value) { - if (value == null) { - throw new NullPointerException(); - } - - taskType_ = value; - onChanged(); + public Builder setLogLinks( + int index, flyteidl.core.Execution.TaskLog.Builder builderForValue) { + if (logLinksBuilder_ == null) { + ensureLogLinksIsMutable(); + logLinks_.set(index, builderForValue.build()); + onChanged(); + } else { + logLinksBuilder_.setMessage(index, builderForValue.build()); + } return this; } /** *
-       * A predefined yet extensible Task type identifier.
+       * log information for the task execution.
        * 
* - * string task_type = 1; + * repeated .flyteidl.core.TaskLog log_links = 3; */ - public Builder clearTaskType() { - - taskType_ = getDefaultInstance().getTaskType(); - onChanged(); + public Builder addLogLinks(flyteidl.core.Execution.TaskLog value) { + if (logLinksBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureLogLinksIsMutable(); + logLinks_.add(value); + onChanged(); + } else { + logLinksBuilder_.addMessage(value); + } return this; } /** *
-       * A predefined yet extensible Task type identifier.
+       * log information for the task execution.
        * 
* - * string task_type = 1; + * repeated .flyteidl.core.TaskLog log_links = 3; */ - public Builder setTaskTypeBytes( - com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - checkByteStringIsUtf8(value); - - taskType_ = value; - onChanged(); + public Builder addLogLinks( + int index, flyteidl.core.Execution.TaskLog value) { + if (logLinksBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureLogLinksIsMutable(); + logLinks_.add(index, value); + onChanged(); + } else { + logLinksBuilder_.addMessage(index, value); + } return this; } - - private com.google.protobuf.ByteString resourceMeta_ = com.google.protobuf.ByteString.EMPTY; /** *
-       * Metadata about the resource to be pass to the agent.
+       * log information for the task execution.
        * 
* - * bytes resource_meta = 2; + * repeated .flyteidl.core.TaskLog log_links = 3; */ - public com.google.protobuf.ByteString getResourceMeta() { - return resourceMeta_; + public Builder addLogLinks( + flyteidl.core.Execution.TaskLog.Builder builderForValue) { + if (logLinksBuilder_ == null) { + ensureLogLinksIsMutable(); + logLinks_.add(builderForValue.build()); + onChanged(); + } else { + logLinksBuilder_.addMessage(builderForValue.build()); + } + return this; } /** *
-       * Metadata about the resource to be pass to the agent.
+       * log information for the task execution.
        * 
* - * bytes resource_meta = 2; + * repeated .flyteidl.core.TaskLog log_links = 3; */ - public Builder setResourceMeta(com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - - resourceMeta_ = value; - onChanged(); + public Builder addLogLinks( + int index, flyteidl.core.Execution.TaskLog.Builder builderForValue) { + if (logLinksBuilder_ == null) { + ensureLogLinksIsMutable(); + logLinks_.add(index, builderForValue.build()); + onChanged(); + } else { + logLinksBuilder_.addMessage(index, builderForValue.build()); + } return this; } /** *
-       * Metadata about the resource to be pass to the agent.
+       * log information for the task execution.
        * 
* - * bytes resource_meta = 2; + * repeated .flyteidl.core.TaskLog log_links = 3; */ - public Builder clearResourceMeta() { - - resourceMeta_ = getDefaultInstance().getResourceMeta(); - onChanged(); + public Builder addAllLogLinks( + java.lang.Iterable values) { + if (logLinksBuilder_ == null) { + ensureLogLinksIsMutable(); + com.google.protobuf.AbstractMessageLite.Builder.addAll( + values, logLinks_); + onChanged(); + } else { + logLinksBuilder_.addAllMessages(values); + } + return this; + } + /** + *
+       * log information for the task execution.
+       * 
+ * + * repeated .flyteidl.core.TaskLog log_links = 3; + */ + public Builder clearLogLinks() { + if (logLinksBuilder_ == null) { + logLinks_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000004); + onChanged(); + } else { + logLinksBuilder_.clear(); + } + return this; + } + /** + *
+       * log information for the task execution.
+       * 
+ * + * repeated .flyteidl.core.TaskLog log_links = 3; + */ + public Builder removeLogLinks(int index) { + if (logLinksBuilder_ == null) { + ensureLogLinksIsMutable(); + logLinks_.remove(index); + onChanged(); + } else { + logLinksBuilder_.remove(index); + } return this; } + /** + *
+       * log information for the task execution.
+       * 
+ * + * repeated .flyteidl.core.TaskLog log_links = 3; + */ + public flyteidl.core.Execution.TaskLog.Builder getLogLinksBuilder( + int index) { + return getLogLinksFieldBuilder().getBuilder(index); + } + /** + *
+       * log information for the task execution.
+       * 
+ * + * repeated .flyteidl.core.TaskLog log_links = 3; + */ + public flyteidl.core.Execution.TaskLogOrBuilder getLogLinksOrBuilder( + int index) { + if (logLinksBuilder_ == null) { + return logLinks_.get(index); } else { + return logLinksBuilder_.getMessageOrBuilder(index); + } + } + /** + *
+       * log information for the task execution.
+       * 
+ * + * repeated .flyteidl.core.TaskLog log_links = 3; + */ + public java.util.List + getLogLinksOrBuilderList() { + if (logLinksBuilder_ != null) { + return logLinksBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(logLinks_); + } + } + /** + *
+       * log information for the task execution.
+       * 
+ * + * repeated .flyteidl.core.TaskLog log_links = 3; + */ + public flyteidl.core.Execution.TaskLog.Builder addLogLinksBuilder() { + return getLogLinksFieldBuilder().addBuilder( + flyteidl.core.Execution.TaskLog.getDefaultInstance()); + } + /** + *
+       * log information for the task execution.
+       * 
+ * + * repeated .flyteidl.core.TaskLog log_links = 3; + */ + public flyteidl.core.Execution.TaskLog.Builder addLogLinksBuilder( + int index) { + return getLogLinksFieldBuilder().addBuilder( + index, flyteidl.core.Execution.TaskLog.getDefaultInstance()); + } + /** + *
+       * log information for the task execution.
+       * 
+ * + * repeated .flyteidl.core.TaskLog log_links = 3; + */ + public java.util.List + getLogLinksBuilderList() { + return getLogLinksFieldBuilder().getBuilderList(); + } + private com.google.protobuf.RepeatedFieldBuilderV3< + flyteidl.core.Execution.TaskLog, flyteidl.core.Execution.TaskLog.Builder, flyteidl.core.Execution.TaskLogOrBuilder> + getLogLinksFieldBuilder() { + if (logLinksBuilder_ == null) { + logLinksBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3< + flyteidl.core.Execution.TaskLog, flyteidl.core.Execution.TaskLog.Builder, flyteidl.core.Execution.TaskLogOrBuilder>( + logLinks_, + ((bitField0_ & 0x00000004) != 0), + getParentForChildren(), + isClean()); + logLinks_ = null; + } + return logLinksBuilder_; + } @java.lang.Override public final Builder setUnknownFields( final com.google.protobuf.UnknownFieldSet unknownFields) { @@ -4755,125 +4839,96 @@ public final Builder mergeUnknownFields( } - // @@protoc_insertion_point(builder_scope:flyteidl.admin.GetTaskRequest) + // @@protoc_insertion_point(builder_scope:flyteidl.admin.CreateTaskResponse) } - // @@protoc_insertion_point(class_scope:flyteidl.admin.GetTaskRequest) - private static final flyteidl.admin.Agent.GetTaskRequest DEFAULT_INSTANCE; + // @@protoc_insertion_point(class_scope:flyteidl.admin.CreateTaskResponse) + private static final flyteidl.admin.Agent.CreateTaskResponse DEFAULT_INSTANCE; static { - DEFAULT_INSTANCE = new flyteidl.admin.Agent.GetTaskRequest(); + DEFAULT_INSTANCE = new flyteidl.admin.Agent.CreateTaskResponse(); } - public static flyteidl.admin.Agent.GetTaskRequest getDefaultInstance() { + public static flyteidl.admin.Agent.CreateTaskResponse getDefaultInstance() { return DEFAULT_INSTANCE; } - private static final com.google.protobuf.Parser - PARSER = new com.google.protobuf.AbstractParser() { + private static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { @java.lang.Override - public GetTaskRequest parsePartialFrom( + public CreateTaskResponse parsePartialFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { - return new GetTaskRequest(input, extensionRegistry); + return new CreateTaskResponse(input, extensionRegistry); } }; - public static com.google.protobuf.Parser parser() { + public static com.google.protobuf.Parser parser() { return PARSER; } @java.lang.Override - public com.google.protobuf.Parser getParserForType() { + public com.google.protobuf.Parser getParserForType() { return PARSER; } @java.lang.Override - public flyteidl.admin.Agent.GetTaskRequest getDefaultInstanceForType() { + public flyteidl.admin.Agent.CreateTaskResponse getDefaultInstanceForType() { return DEFAULT_INSTANCE; } } - public interface GetTaskResponseOrBuilder extends - // @@protoc_insertion_point(interface_extends:flyteidl.admin.GetTaskResponse) + public interface GetTaskRequestOrBuilder extends + // @@protoc_insertion_point(interface_extends:flyteidl.admin.GetTaskRequest) com.google.protobuf.MessageOrBuilder { - /** - * .flyteidl.admin.Resource resource = 1; - */ - boolean hasResource(); - /** - * .flyteidl.admin.Resource resource = 1; - */ - flyteidl.admin.Agent.Resource getResource(); - /** - * .flyteidl.admin.Resource resource = 1; - */ - flyteidl.admin.Agent.ResourceOrBuilder getResourceOrBuilder(); - - /** - *
-     * log information for the task execution.
-     * 
- * - * repeated .flyteidl.core.TaskLog log_links = 2; - */ - java.util.List - getLogLinksList(); - /** - *
-     * log information for the task execution.
-     * 
- * - * repeated .flyteidl.core.TaskLog log_links = 2; - */ - flyteidl.core.Execution.TaskLog getLogLinks(int index); /** *
-     * log information for the task execution.
+     * A predefined yet extensible Task type identifier.
      * 
* - * repeated .flyteidl.core.TaskLog log_links = 2; + * string task_type = 1; */ - int getLogLinksCount(); + java.lang.String getTaskType(); /** *
-     * log information for the task execution.
+     * A predefined yet extensible Task type identifier.
      * 
* - * repeated .flyteidl.core.TaskLog log_links = 2; + * string task_type = 1; */ - java.util.List - getLogLinksOrBuilderList(); + com.google.protobuf.ByteString + getTaskTypeBytes(); + /** *
-     * log information for the task execution.
+     * Metadata about the resource to be pass to the agent.
      * 
* - * repeated .flyteidl.core.TaskLog log_links = 2; + * bytes resource_meta = 2; */ - flyteidl.core.Execution.TaskLogOrBuilder getLogLinksOrBuilder( - int index); + com.google.protobuf.ByteString getResourceMeta(); } /** *
-   * Response to get an individual task resource.
+   * A message used to fetch a job resource from flyte agent server.
    * 
* - * Protobuf type {@code flyteidl.admin.GetTaskResponse} + * Protobuf type {@code flyteidl.admin.GetTaskRequest} */ - public static final class GetTaskResponse extends + public static final class GetTaskRequest extends com.google.protobuf.GeneratedMessageV3 implements - // @@protoc_insertion_point(message_implements:flyteidl.admin.GetTaskResponse) - GetTaskResponseOrBuilder { + // @@protoc_insertion_point(message_implements:flyteidl.admin.GetTaskRequest) + GetTaskRequestOrBuilder { private static final long serialVersionUID = 0L; - // Use GetTaskResponse.newBuilder() to construct. - private GetTaskResponse(com.google.protobuf.GeneratedMessageV3.Builder builder) { + // Use GetTaskRequest.newBuilder() to construct. + private GetTaskRequest(com.google.protobuf.GeneratedMessageV3.Builder builder) { super(builder); } - private GetTaskResponse() { - logLinks_ = java.util.Collections.emptyList(); + private GetTaskRequest() { + taskType_ = ""; + resourceMeta_ = com.google.protobuf.ByteString.EMPTY; } @java.lang.Override @@ -4881,7 +4936,7 @@ private GetTaskResponse() { getUnknownFields() { return this.unknownFields; } - private GetTaskResponse( + private GetTaskRequest( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { @@ -4901,25 +4956,14 @@ private GetTaskResponse( done = true; break; case 10: { - flyteidl.admin.Agent.Resource.Builder subBuilder = null; - if (resource_ != null) { - subBuilder = resource_.toBuilder(); - } - resource_ = input.readMessage(flyteidl.admin.Agent.Resource.parser(), extensionRegistry); - if (subBuilder != null) { - subBuilder.mergeFrom(resource_); - resource_ = subBuilder.buildPartial(); - } + java.lang.String s = input.readStringRequireUtf8(); + taskType_ = s; break; } case 18: { - if (!((mutable_bitField0_ & 0x00000002) != 0)) { - logLinks_ = new java.util.ArrayList(); - mutable_bitField0_ |= 0x00000002; - } - logLinks_.add( - input.readMessage(flyteidl.core.Execution.TaskLog.parser(), extensionRegistry)); + + resourceMeta_ = input.readBytes(); break; } default: { @@ -4937,101 +4981,76 @@ private GetTaskResponse( throw new com.google.protobuf.InvalidProtocolBufferException( e).setUnfinishedMessage(this); } finally { - if (((mutable_bitField0_ & 0x00000002) != 0)) { - logLinks_ = java.util.Collections.unmodifiableList(logLinks_); - } this.unknownFields = unknownFields.build(); makeExtensionsImmutable(); } } public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { - return flyteidl.admin.Agent.internal_static_flyteidl_admin_GetTaskResponse_descriptor; + return flyteidl.admin.Agent.internal_static_flyteidl_admin_GetTaskRequest_descriptor; } @java.lang.Override protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internalGetFieldAccessorTable() { - return flyteidl.admin.Agent.internal_static_flyteidl_admin_GetTaskResponse_fieldAccessorTable + return flyteidl.admin.Agent.internal_static_flyteidl_admin_GetTaskRequest_fieldAccessorTable .ensureFieldAccessorsInitialized( - flyteidl.admin.Agent.GetTaskResponse.class, flyteidl.admin.Agent.GetTaskResponse.Builder.class); - } - - private int bitField0_; - public static final int RESOURCE_FIELD_NUMBER = 1; - private flyteidl.admin.Agent.Resource resource_; - /** - * .flyteidl.admin.Resource resource = 1; - */ - public boolean hasResource() { - return resource_ != null; - } - /** - * .flyteidl.admin.Resource resource = 1; - */ - public flyteidl.admin.Agent.Resource getResource() { - return resource_ == null ? flyteidl.admin.Agent.Resource.getDefaultInstance() : resource_; - } - /** - * .flyteidl.admin.Resource resource = 1; - */ - public flyteidl.admin.Agent.ResourceOrBuilder getResourceOrBuilder() { - return getResource(); + flyteidl.admin.Agent.GetTaskRequest.class, flyteidl.admin.Agent.GetTaskRequest.Builder.class); } - public static final int LOG_LINKS_FIELD_NUMBER = 2; - private java.util.List logLinks_; - /** - *
-     * log information for the task execution.
-     * 
- * - * repeated .flyteidl.core.TaskLog log_links = 2; - */ - public java.util.List getLogLinksList() { - return logLinks_; - } - /** - *
-     * log information for the task execution.
-     * 
- * - * repeated .flyteidl.core.TaskLog log_links = 2; - */ - public java.util.List - getLogLinksOrBuilderList() { - return logLinks_; - } + public static final int TASK_TYPE_FIELD_NUMBER = 1; + private volatile java.lang.Object taskType_; /** *
-     * log information for the task execution.
+     * A predefined yet extensible Task type identifier.
      * 
* - * repeated .flyteidl.core.TaskLog log_links = 2; + * string task_type = 1; */ - public int getLogLinksCount() { - return logLinks_.size(); + public java.lang.String getTaskType() { + java.lang.Object ref = taskType_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + taskType_ = s; + return s; + } } /** *
-     * log information for the task execution.
+     * A predefined yet extensible Task type identifier.
      * 
* - * repeated .flyteidl.core.TaskLog log_links = 2; + * string task_type = 1; */ - public flyteidl.core.Execution.TaskLog getLogLinks(int index) { - return logLinks_.get(index); + public com.google.protobuf.ByteString + getTaskTypeBytes() { + java.lang.Object ref = taskType_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + taskType_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } } + + public static final int RESOURCE_META_FIELD_NUMBER = 2; + private com.google.protobuf.ByteString resourceMeta_; /** *
-     * log information for the task execution.
+     * Metadata about the resource to be pass to the agent.
      * 
* - * repeated .flyteidl.core.TaskLog log_links = 2; + * bytes resource_meta = 2; */ - public flyteidl.core.Execution.TaskLogOrBuilder getLogLinksOrBuilder( - int index) { - return logLinks_.get(index); + public com.google.protobuf.ByteString getResourceMeta() { + return resourceMeta_; } private byte memoizedIsInitialized = -1; @@ -5048,11 +5067,11 @@ public final boolean isInitialized() { @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (resource_ != null) { - output.writeMessage(1, getResource()); + if (!getTaskTypeBytes().isEmpty()) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 1, taskType_); } - for (int i = 0; i < logLinks_.size(); i++) { - output.writeMessage(2, logLinks_.get(i)); + if (!resourceMeta_.isEmpty()) { + output.writeBytes(2, resourceMeta_); } unknownFields.writeTo(output); } @@ -5063,13 +5082,12 @@ public int getSerializedSize() { if (size != -1) return size; size = 0; - if (resource_ != null) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(1, getResource()); + if (!getTaskTypeBytes().isEmpty()) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, taskType_); } - for (int i = 0; i < logLinks_.size(); i++) { + if (!resourceMeta_.isEmpty()) { size += com.google.protobuf.CodedOutputStream - .computeMessageSize(2, logLinks_.get(i)); + .computeBytesSize(2, resourceMeta_); } size += unknownFields.getSerializedSize(); memoizedSize = size; @@ -5081,18 +5099,15 @@ public boolean equals(final java.lang.Object obj) { if (obj == this) { return true; } - if (!(obj instanceof flyteidl.admin.Agent.GetTaskResponse)) { + if (!(obj instanceof flyteidl.admin.Agent.GetTaskRequest)) { return super.equals(obj); } - flyteidl.admin.Agent.GetTaskResponse other = (flyteidl.admin.Agent.GetTaskResponse) obj; + flyteidl.admin.Agent.GetTaskRequest other = (flyteidl.admin.Agent.GetTaskRequest) obj; - if (hasResource() != other.hasResource()) return false; - if (hasResource()) { - if (!getResource() - .equals(other.getResource())) return false; - } - if (!getLogLinksList() - .equals(other.getLogLinksList())) return false; + if (!getTaskType() + .equals(other.getTaskType())) return false; + if (!getResourceMeta() + .equals(other.getResourceMeta())) return false; if (!unknownFields.equals(other.unknownFields)) return false; return true; } @@ -5104,82 +5119,78 @@ public int hashCode() { } int hash = 41; hash = (19 * hash) + getDescriptor().hashCode(); - if (hasResource()) { - hash = (37 * hash) + RESOURCE_FIELD_NUMBER; - hash = (53 * hash) + getResource().hashCode(); - } - if (getLogLinksCount() > 0) { - hash = (37 * hash) + LOG_LINKS_FIELD_NUMBER; - hash = (53 * hash) + getLogLinksList().hashCode(); - } + hash = (37 * hash) + TASK_TYPE_FIELD_NUMBER; + hash = (53 * hash) + getTaskType().hashCode(); + hash = (37 * hash) + RESOURCE_META_FIELD_NUMBER; + hash = (53 * hash) + getResourceMeta().hashCode(); hash = (29 * hash) + unknownFields.hashCode(); memoizedHashCode = hash; return hash; } - public static flyteidl.admin.Agent.GetTaskResponse parseFrom( + public static flyteidl.admin.Agent.GetTaskRequest parseFrom( java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static flyteidl.admin.Agent.GetTaskResponse parseFrom( + public static flyteidl.admin.Agent.GetTaskRequest parseFrom( java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data, extensionRegistry); } - public static flyteidl.admin.Agent.GetTaskResponse parseFrom( + public static flyteidl.admin.Agent.GetTaskRequest parseFrom( com.google.protobuf.ByteString data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static flyteidl.admin.Agent.GetTaskResponse parseFrom( + public static flyteidl.admin.Agent.GetTaskRequest parseFrom( com.google.protobuf.ByteString data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data, extensionRegistry); } - public static flyteidl.admin.Agent.GetTaskResponse parseFrom(byte[] data) + public static flyteidl.admin.Agent.GetTaskRequest parseFrom(byte[] data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static flyteidl.admin.Agent.GetTaskResponse parseFrom( + public static flyteidl.admin.Agent.GetTaskRequest parseFrom( byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data, extensionRegistry); } - public static flyteidl.admin.Agent.GetTaskResponse parseFrom(java.io.InputStream input) + public static flyteidl.admin.Agent.GetTaskRequest parseFrom(java.io.InputStream input) throws java.io.IOException { return com.google.protobuf.GeneratedMessageV3 .parseWithIOException(PARSER, input); } - public static flyteidl.admin.Agent.GetTaskResponse parseFrom( + public static flyteidl.admin.Agent.GetTaskRequest parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { return com.google.protobuf.GeneratedMessageV3 .parseWithIOException(PARSER, input, extensionRegistry); } - public static flyteidl.admin.Agent.GetTaskResponse parseDelimitedFrom(java.io.InputStream input) + public static flyteidl.admin.Agent.GetTaskRequest parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException { return com.google.protobuf.GeneratedMessageV3 .parseDelimitedWithIOException(PARSER, input); } - public static flyteidl.admin.Agent.GetTaskResponse parseDelimitedFrom( + public static flyteidl.admin.Agent.GetTaskRequest parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { return com.google.protobuf.GeneratedMessageV3 .parseDelimitedWithIOException(PARSER, input, extensionRegistry); } - public static flyteidl.admin.Agent.GetTaskResponse parseFrom( + public static flyteidl.admin.Agent.GetTaskRequest parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { return com.google.protobuf.GeneratedMessageV3 .parseWithIOException(PARSER, input); } - public static flyteidl.admin.Agent.GetTaskResponse parseFrom( + public static flyteidl.admin.Agent.GetTaskRequest parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { @@ -5192,7 +5203,7 @@ public static flyteidl.admin.Agent.GetTaskResponse parseFrom( public static Builder newBuilder() { return DEFAULT_INSTANCE.toBuilder(); } - public static Builder newBuilder(flyteidl.admin.Agent.GetTaskResponse prototype) { + public static Builder newBuilder(flyteidl.admin.Agent.GetTaskRequest prototype) { return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); } @java.lang.Override @@ -5209,29 +5220,29 @@ protected Builder newBuilderForType( } /** *
-     * Response to get an individual task resource.
+     * A message used to fetch a job resource from flyte agent server.
      * 
* - * Protobuf type {@code flyteidl.admin.GetTaskResponse} + * Protobuf type {@code flyteidl.admin.GetTaskRequest} */ public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder implements - // @@protoc_insertion_point(builder_implements:flyteidl.admin.GetTaskResponse) - flyteidl.admin.Agent.GetTaskResponseOrBuilder { + // @@protoc_insertion_point(builder_implements:flyteidl.admin.GetTaskRequest) + flyteidl.admin.Agent.GetTaskRequestOrBuilder { public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { - return flyteidl.admin.Agent.internal_static_flyteidl_admin_GetTaskResponse_descriptor; + return flyteidl.admin.Agent.internal_static_flyteidl_admin_GetTaskRequest_descriptor; } @java.lang.Override protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internalGetFieldAccessorTable() { - return flyteidl.admin.Agent.internal_static_flyteidl_admin_GetTaskResponse_fieldAccessorTable + return flyteidl.admin.Agent.internal_static_flyteidl_admin_GetTaskRequest_fieldAccessorTable .ensureFieldAccessorsInitialized( - flyteidl.admin.Agent.GetTaskResponse.class, flyteidl.admin.Agent.GetTaskResponse.Builder.class); + flyteidl.admin.Agent.GetTaskRequest.class, flyteidl.admin.Agent.GetTaskRequest.Builder.class); } - // Construct using flyteidl.admin.Agent.GetTaskResponse.newBuilder() + // Construct using flyteidl.admin.Agent.GetTaskRequest.newBuilder() private Builder() { maybeForceBuilderInitialization(); } @@ -5244,41 +5255,32 @@ private Builder( private void maybeForceBuilderInitialization() { if (com.google.protobuf.GeneratedMessageV3 .alwaysUseFieldBuilders) { - getLogLinksFieldBuilder(); } } @java.lang.Override public Builder clear() { super.clear(); - if (resourceBuilder_ == null) { - resource_ = null; - } else { - resource_ = null; - resourceBuilder_ = null; - } - if (logLinksBuilder_ == null) { - logLinks_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00000002); - } else { - logLinksBuilder_.clear(); - } + taskType_ = ""; + + resourceMeta_ = com.google.protobuf.ByteString.EMPTY; + return this; } @java.lang.Override public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { - return flyteidl.admin.Agent.internal_static_flyteidl_admin_GetTaskResponse_descriptor; + return flyteidl.admin.Agent.internal_static_flyteidl_admin_GetTaskRequest_descriptor; } @java.lang.Override - public flyteidl.admin.Agent.GetTaskResponse getDefaultInstanceForType() { - return flyteidl.admin.Agent.GetTaskResponse.getDefaultInstance(); + public flyteidl.admin.Agent.GetTaskRequest getDefaultInstanceForType() { + return flyteidl.admin.Agent.GetTaskRequest.getDefaultInstance(); } @java.lang.Override - public flyteidl.admin.Agent.GetTaskResponse build() { - flyteidl.admin.Agent.GetTaskResponse result = buildPartial(); + public flyteidl.admin.Agent.GetTaskRequest build() { + flyteidl.admin.Agent.GetTaskRequest result = buildPartial(); if (!result.isInitialized()) { throw newUninitializedMessageException(result); } @@ -5286,25 +5288,10 @@ public flyteidl.admin.Agent.GetTaskResponse build() { } @java.lang.Override - public flyteidl.admin.Agent.GetTaskResponse buildPartial() { - flyteidl.admin.Agent.GetTaskResponse result = new flyteidl.admin.Agent.GetTaskResponse(this); - int from_bitField0_ = bitField0_; - int to_bitField0_ = 0; - if (resourceBuilder_ == null) { - result.resource_ = resource_; - } else { - result.resource_ = resourceBuilder_.build(); - } - if (logLinksBuilder_ == null) { - if (((bitField0_ & 0x00000002) != 0)) { - logLinks_ = java.util.Collections.unmodifiableList(logLinks_); - bitField0_ = (bitField0_ & ~0x00000002); - } - result.logLinks_ = logLinks_; - } else { - result.logLinks_ = logLinksBuilder_.build(); - } - result.bitField0_ = to_bitField0_; + public flyteidl.admin.Agent.GetTaskRequest buildPartial() { + flyteidl.admin.Agent.GetTaskRequest result = new flyteidl.admin.Agent.GetTaskRequest(this); + result.taskType_ = taskType_; + result.resourceMeta_ = resourceMeta_; onBuilt(); return result; } @@ -5343,44 +5330,22 @@ public Builder addRepeatedField( } @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof flyteidl.admin.Agent.GetTaskResponse) { - return mergeFrom((flyteidl.admin.Agent.GetTaskResponse)other); + if (other instanceof flyteidl.admin.Agent.GetTaskRequest) { + return mergeFrom((flyteidl.admin.Agent.GetTaskRequest)other); } else { super.mergeFrom(other); return this; } } - public Builder mergeFrom(flyteidl.admin.Agent.GetTaskResponse other) { - if (other == flyteidl.admin.Agent.GetTaskResponse.getDefaultInstance()) return this; - if (other.hasResource()) { - mergeResource(other.getResource()); + public Builder mergeFrom(flyteidl.admin.Agent.GetTaskRequest other) { + if (other == flyteidl.admin.Agent.GetTaskRequest.getDefaultInstance()) return this; + if (!other.getTaskType().isEmpty()) { + taskType_ = other.taskType_; + onChanged(); } - if (logLinksBuilder_ == null) { - if (!other.logLinks_.isEmpty()) { - if (logLinks_.isEmpty()) { - logLinks_ = other.logLinks_; - bitField0_ = (bitField0_ & ~0x00000002); - } else { - ensureLogLinksIsMutable(); - logLinks_.addAll(other.logLinks_); - } - onChanged(); - } - } else { - if (!other.logLinks_.isEmpty()) { - if (logLinksBuilder_.isEmpty()) { - logLinksBuilder_.dispose(); - logLinksBuilder_ = null; - logLinks_ = other.logLinks_; - bitField0_ = (bitField0_ & ~0x00000002); - logLinksBuilder_ = - com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ? - getLogLinksFieldBuilder() : null; - } else { - logLinksBuilder_.addAllMessages(other.logLinks_); - } - } + if (other.getResourceMeta() != com.google.protobuf.ByteString.EMPTY) { + setResourceMeta(other.getResourceMeta()); } this.mergeUnknownFields(other.unknownFields); onChanged(); @@ -5397,11 +5362,11 @@ public Builder mergeFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - flyteidl.admin.Agent.GetTaskResponse parsedMessage = null; + flyteidl.admin.Agent.GetTaskRequest parsedMessage = null; try { parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); } catch (com.google.protobuf.InvalidProtocolBufferException e) { - parsedMessage = (flyteidl.admin.Agent.GetTaskResponse) e.getUnfinishedMessage(); + parsedMessage = (flyteidl.admin.Agent.GetTaskRequest) e.getUnfinishedMessage(); throw e.unwrapIOException(); } finally { if (parsedMessage != null) { @@ -5410,436 +5375,136 @@ public Builder mergeFrom( } return this; } - private int bitField0_; - - private flyteidl.admin.Agent.Resource resource_; - private com.google.protobuf.SingleFieldBuilderV3< - flyteidl.admin.Agent.Resource, flyteidl.admin.Agent.Resource.Builder, flyteidl.admin.Agent.ResourceOrBuilder> resourceBuilder_; - /** - * .flyteidl.admin.Resource resource = 1; - */ - public boolean hasResource() { - return resourceBuilder_ != null || resource_ != null; - } - /** - * .flyteidl.admin.Resource resource = 1; - */ - public flyteidl.admin.Agent.Resource getResource() { - if (resourceBuilder_ == null) { - return resource_ == null ? flyteidl.admin.Agent.Resource.getDefaultInstance() : resource_; - } else { - return resourceBuilder_.getMessage(); - } - } - /** - * .flyteidl.admin.Resource resource = 1; - */ - public Builder setResource(flyteidl.admin.Agent.Resource value) { - if (resourceBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - resource_ = value; - onChanged(); - } else { - resourceBuilder_.setMessage(value); - } - return this; - } + private java.lang.Object taskType_ = ""; /** - * .flyteidl.admin.Resource resource = 1; + *
+       * A predefined yet extensible Task type identifier.
+       * 
+ * + * string task_type = 1; */ - public Builder setResource( - flyteidl.admin.Agent.Resource.Builder builderForValue) { - if (resourceBuilder_ == null) { - resource_ = builderForValue.build(); - onChanged(); + public java.lang.String getTaskType() { + java.lang.Object ref = taskType_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + taskType_ = s; + return s; } else { - resourceBuilder_.setMessage(builderForValue.build()); + return (java.lang.String) ref; } - - return this; } /** - * .flyteidl.admin.Resource resource = 1; + *
+       * A predefined yet extensible Task type identifier.
+       * 
+ * + * string task_type = 1; */ - public Builder mergeResource(flyteidl.admin.Agent.Resource value) { - if (resourceBuilder_ == null) { - if (resource_ != null) { - resource_ = - flyteidl.admin.Agent.Resource.newBuilder(resource_).mergeFrom(value).buildPartial(); - } else { - resource_ = value; - } - onChanged(); + public com.google.protobuf.ByteString + getTaskTypeBytes() { + java.lang.Object ref = taskType_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + taskType_ = b; + return b; } else { - resourceBuilder_.mergeFrom(value); + return (com.google.protobuf.ByteString) ref; } - - return this; } /** - * .flyteidl.admin.Resource resource = 1; + *
+       * A predefined yet extensible Task type identifier.
+       * 
+ * + * string task_type = 1; */ - public Builder clearResource() { - if (resourceBuilder_ == null) { - resource_ = null; - onChanged(); - } else { - resource_ = null; - resourceBuilder_ = null; - } - + public Builder setTaskType( + java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + + taskType_ = value; + onChanged(); return this; } /** - * .flyteidl.admin.Resource resource = 1; + *
+       * A predefined yet extensible Task type identifier.
+       * 
+ * + * string task_type = 1; */ - public flyteidl.admin.Agent.Resource.Builder getResourceBuilder() { + public Builder clearTaskType() { + taskType_ = getDefaultInstance().getTaskType(); onChanged(); - return getResourceFieldBuilder().getBuilder(); - } - /** - * .flyteidl.admin.Resource resource = 1; - */ - public flyteidl.admin.Agent.ResourceOrBuilder getResourceOrBuilder() { - if (resourceBuilder_ != null) { - return resourceBuilder_.getMessageOrBuilder(); - } else { - return resource_ == null ? - flyteidl.admin.Agent.Resource.getDefaultInstance() : resource_; - } - } - /** - * .flyteidl.admin.Resource resource = 1; - */ - private com.google.protobuf.SingleFieldBuilderV3< - flyteidl.admin.Agent.Resource, flyteidl.admin.Agent.Resource.Builder, flyteidl.admin.Agent.ResourceOrBuilder> - getResourceFieldBuilder() { - if (resourceBuilder_ == null) { - resourceBuilder_ = new com.google.protobuf.SingleFieldBuilderV3< - flyteidl.admin.Agent.Resource, flyteidl.admin.Agent.Resource.Builder, flyteidl.admin.Agent.ResourceOrBuilder>( - getResource(), - getParentForChildren(), - isClean()); - resource_ = null; - } - return resourceBuilder_; - } - - private java.util.List logLinks_ = - java.util.Collections.emptyList(); - private void ensureLogLinksIsMutable() { - if (!((bitField0_ & 0x00000002) != 0)) { - logLinks_ = new java.util.ArrayList(logLinks_); - bitField0_ |= 0x00000002; - } + return this; } - - private com.google.protobuf.RepeatedFieldBuilderV3< - flyteidl.core.Execution.TaskLog, flyteidl.core.Execution.TaskLog.Builder, flyteidl.core.Execution.TaskLogOrBuilder> logLinksBuilder_; - /** *
-       * log information for the task execution.
+       * A predefined yet extensible Task type identifier.
        * 
* - * repeated .flyteidl.core.TaskLog log_links = 2; + * string task_type = 1; */ - public java.util.List getLogLinksList() { - if (logLinksBuilder_ == null) { - return java.util.Collections.unmodifiableList(logLinks_); - } else { - return logLinksBuilder_.getMessageList(); - } + public Builder setTaskTypeBytes( + com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + + taskType_ = value; + onChanged(); + return this; } + + private com.google.protobuf.ByteString resourceMeta_ = com.google.protobuf.ByteString.EMPTY; /** *
-       * log information for the task execution.
+       * Metadata about the resource to be pass to the agent.
        * 
* - * repeated .flyteidl.core.TaskLog log_links = 2; + * bytes resource_meta = 2; */ - public int getLogLinksCount() { - if (logLinksBuilder_ == null) { - return logLinks_.size(); - } else { - return logLinksBuilder_.getCount(); - } + public com.google.protobuf.ByteString getResourceMeta() { + return resourceMeta_; } /** *
-       * log information for the task execution.
+       * Metadata about the resource to be pass to the agent.
        * 
* - * repeated .flyteidl.core.TaskLog log_links = 2; + * bytes resource_meta = 2; */ - public flyteidl.core.Execution.TaskLog getLogLinks(int index) { - if (logLinksBuilder_ == null) { - return logLinks_.get(index); - } else { - return logLinksBuilder_.getMessage(index); - } + public Builder setResourceMeta(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + + resourceMeta_ = value; + onChanged(); + return this; } /** *
-       * log information for the task execution.
+       * Metadata about the resource to be pass to the agent.
        * 
* - * repeated .flyteidl.core.TaskLog log_links = 2; + * bytes resource_meta = 2; */ - public Builder setLogLinks( - int index, flyteidl.core.Execution.TaskLog value) { - if (logLinksBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureLogLinksIsMutable(); - logLinks_.set(index, value); - onChanged(); - } else { - logLinksBuilder_.setMessage(index, value); - } - return this; - } - /** - *
-       * log information for the task execution.
-       * 
- * - * repeated .flyteidl.core.TaskLog log_links = 2; - */ - public Builder setLogLinks( - int index, flyteidl.core.Execution.TaskLog.Builder builderForValue) { - if (logLinksBuilder_ == null) { - ensureLogLinksIsMutable(); - logLinks_.set(index, builderForValue.build()); - onChanged(); - } else { - logLinksBuilder_.setMessage(index, builderForValue.build()); - } - return this; - } - /** - *
-       * log information for the task execution.
-       * 
- * - * repeated .flyteidl.core.TaskLog log_links = 2; - */ - public Builder addLogLinks(flyteidl.core.Execution.TaskLog value) { - if (logLinksBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureLogLinksIsMutable(); - logLinks_.add(value); - onChanged(); - } else { - logLinksBuilder_.addMessage(value); - } - return this; - } - /** - *
-       * log information for the task execution.
-       * 
- * - * repeated .flyteidl.core.TaskLog log_links = 2; - */ - public Builder addLogLinks( - int index, flyteidl.core.Execution.TaskLog value) { - if (logLinksBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureLogLinksIsMutable(); - logLinks_.add(index, value); - onChanged(); - } else { - logLinksBuilder_.addMessage(index, value); - } - return this; - } - /** - *
-       * log information for the task execution.
-       * 
- * - * repeated .flyteidl.core.TaskLog log_links = 2; - */ - public Builder addLogLinks( - flyteidl.core.Execution.TaskLog.Builder builderForValue) { - if (logLinksBuilder_ == null) { - ensureLogLinksIsMutable(); - logLinks_.add(builderForValue.build()); - onChanged(); - } else { - logLinksBuilder_.addMessage(builderForValue.build()); - } - return this; - } - /** - *
-       * log information for the task execution.
-       * 
- * - * repeated .flyteidl.core.TaskLog log_links = 2; - */ - public Builder addLogLinks( - int index, flyteidl.core.Execution.TaskLog.Builder builderForValue) { - if (logLinksBuilder_ == null) { - ensureLogLinksIsMutable(); - logLinks_.add(index, builderForValue.build()); - onChanged(); - } else { - logLinksBuilder_.addMessage(index, builderForValue.build()); - } - return this; - } - /** - *
-       * log information for the task execution.
-       * 
- * - * repeated .flyteidl.core.TaskLog log_links = 2; - */ - public Builder addAllLogLinks( - java.lang.Iterable values) { - if (logLinksBuilder_ == null) { - ensureLogLinksIsMutable(); - com.google.protobuf.AbstractMessageLite.Builder.addAll( - values, logLinks_); - onChanged(); - } else { - logLinksBuilder_.addAllMessages(values); - } - return this; - } - /** - *
-       * log information for the task execution.
-       * 
- * - * repeated .flyteidl.core.TaskLog log_links = 2; - */ - public Builder clearLogLinks() { - if (logLinksBuilder_ == null) { - logLinks_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00000002); - onChanged(); - } else { - logLinksBuilder_.clear(); - } - return this; - } - /** - *
-       * log information for the task execution.
-       * 
- * - * repeated .flyteidl.core.TaskLog log_links = 2; - */ - public Builder removeLogLinks(int index) { - if (logLinksBuilder_ == null) { - ensureLogLinksIsMutable(); - logLinks_.remove(index); - onChanged(); - } else { - logLinksBuilder_.remove(index); - } + public Builder clearResourceMeta() { + + resourceMeta_ = getDefaultInstance().getResourceMeta(); + onChanged(); return this; } - /** - *
-       * log information for the task execution.
-       * 
- * - * repeated .flyteidl.core.TaskLog log_links = 2; - */ - public flyteidl.core.Execution.TaskLog.Builder getLogLinksBuilder( - int index) { - return getLogLinksFieldBuilder().getBuilder(index); - } - /** - *
-       * log information for the task execution.
-       * 
- * - * repeated .flyteidl.core.TaskLog log_links = 2; - */ - public flyteidl.core.Execution.TaskLogOrBuilder getLogLinksOrBuilder( - int index) { - if (logLinksBuilder_ == null) { - return logLinks_.get(index); } else { - return logLinksBuilder_.getMessageOrBuilder(index); - } - } - /** - *
-       * log information for the task execution.
-       * 
- * - * repeated .flyteidl.core.TaskLog log_links = 2; - */ - public java.util.List - getLogLinksOrBuilderList() { - if (logLinksBuilder_ != null) { - return logLinksBuilder_.getMessageOrBuilderList(); - } else { - return java.util.Collections.unmodifiableList(logLinks_); - } - } - /** - *
-       * log information for the task execution.
-       * 
- * - * repeated .flyteidl.core.TaskLog log_links = 2; - */ - public flyteidl.core.Execution.TaskLog.Builder addLogLinksBuilder() { - return getLogLinksFieldBuilder().addBuilder( - flyteidl.core.Execution.TaskLog.getDefaultInstance()); - } - /** - *
-       * log information for the task execution.
-       * 
- * - * repeated .flyteidl.core.TaskLog log_links = 2; - */ - public flyteidl.core.Execution.TaskLog.Builder addLogLinksBuilder( - int index) { - return getLogLinksFieldBuilder().addBuilder( - index, flyteidl.core.Execution.TaskLog.getDefaultInstance()); - } - /** - *
-       * log information for the task execution.
-       * 
- * - * repeated .flyteidl.core.TaskLog log_links = 2; - */ - public java.util.List - getLogLinksBuilderList() { - return getLogLinksFieldBuilder().getBuilderList(); - } - private com.google.protobuf.RepeatedFieldBuilderV3< - flyteidl.core.Execution.TaskLog, flyteidl.core.Execution.TaskLog.Builder, flyteidl.core.Execution.TaskLogOrBuilder> - getLogLinksFieldBuilder() { - if (logLinksBuilder_ == null) { - logLinksBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3< - flyteidl.core.Execution.TaskLog, flyteidl.core.Execution.TaskLog.Builder, flyteidl.core.Execution.TaskLogOrBuilder>( - logLinks_, - ((bitField0_ & 0x00000002) != 0), - getParentForChildren(), - isClean()); - logLinks_ = null; - } - return logLinksBuilder_; - } @java.lang.Override public final Builder setUnknownFields( final com.google.protobuf.UnknownFieldSet unknownFields) { @@ -5853,131 +5518,125 @@ public final Builder mergeUnknownFields( } - // @@protoc_insertion_point(builder_scope:flyteidl.admin.GetTaskResponse) + // @@protoc_insertion_point(builder_scope:flyteidl.admin.GetTaskRequest) } - // @@protoc_insertion_point(class_scope:flyteidl.admin.GetTaskResponse) - private static final flyteidl.admin.Agent.GetTaskResponse DEFAULT_INSTANCE; - static { - DEFAULT_INSTANCE = new flyteidl.admin.Agent.GetTaskResponse(); + // @@protoc_insertion_point(class_scope:flyteidl.admin.GetTaskRequest) + private static final flyteidl.admin.Agent.GetTaskRequest DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new flyteidl.admin.Agent.GetTaskRequest(); } - public static flyteidl.admin.Agent.GetTaskResponse getDefaultInstance() { + public static flyteidl.admin.Agent.GetTaskRequest getDefaultInstance() { return DEFAULT_INSTANCE; } - private static final com.google.protobuf.Parser - PARSER = new com.google.protobuf.AbstractParser() { + private static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { @java.lang.Override - public GetTaskResponse parsePartialFrom( + public GetTaskRequest parsePartialFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { - return new GetTaskResponse(input, extensionRegistry); + return new GetTaskRequest(input, extensionRegistry); } }; - public static com.google.protobuf.Parser parser() { + public static com.google.protobuf.Parser parser() { return PARSER; } @java.lang.Override - public com.google.protobuf.Parser getParserForType() { + public com.google.protobuf.Parser getParserForType() { return PARSER; } @java.lang.Override - public flyteidl.admin.Agent.GetTaskResponse getDefaultInstanceForType() { + public flyteidl.admin.Agent.GetTaskRequest getDefaultInstanceForType() { return DEFAULT_INSTANCE; } } - public interface ResourceOrBuilder extends - // @@protoc_insertion_point(interface_extends:flyteidl.admin.Resource) + public interface GetTaskResponseOrBuilder extends + // @@protoc_insertion_point(interface_extends:flyteidl.admin.GetTaskResponse) com.google.protobuf.MessageOrBuilder { /** - *
-     * The state of the execution is used to control its visibility in the UI/CLI.
-     * 
- * - * .flyteidl.admin.State state = 1; + * .flyteidl.admin.Resource resource = 1; */ - int getStateValue(); + boolean hasResource(); /** - *
-     * The state of the execution is used to control its visibility in the UI/CLI.
-     * 
- * - * .flyteidl.admin.State state = 1; + * .flyteidl.admin.Resource resource = 1; */ - flyteidl.admin.Agent.State getState(); + flyteidl.admin.Agent.Resource getResource(); + /** + * .flyteidl.admin.Resource resource = 1; + */ + flyteidl.admin.Agent.ResourceOrBuilder getResourceOrBuilder(); /** *
-     * The outputs of the execution. It's typically used by sql task. Agent service will create a
-     * Structured dataset pointing to the query result table.
-     * +optional
+     * log information for the task execution.
      * 
* - * .flyteidl.core.LiteralMap outputs = 2; + * repeated .flyteidl.core.TaskLog log_links = 2; */ - boolean hasOutputs(); + java.util.List + getLogLinksList(); /** *
-     * The outputs of the execution. It's typically used by sql task. Agent service will create a
-     * Structured dataset pointing to the query result table.
-     * +optional
+     * log information for the task execution.
      * 
* - * .flyteidl.core.LiteralMap outputs = 2; + * repeated .flyteidl.core.TaskLog log_links = 2; */ - flyteidl.core.Literals.LiteralMap getOutputs(); + flyteidl.core.Execution.TaskLog getLogLinks(int index); /** *
-     * The outputs of the execution. It's typically used by sql task. Agent service will create a
-     * Structured dataset pointing to the query result table.
-     * +optional
+     * log information for the task execution.
      * 
* - * .flyteidl.core.LiteralMap outputs = 2; + * repeated .flyteidl.core.TaskLog log_links = 2; */ - flyteidl.core.Literals.LiteralMapOrBuilder getOutputsOrBuilder(); - + int getLogLinksCount(); /** *
-     * A descriptive message for the current state. e.g. waiting for cluster.
+     * log information for the task execution.
      * 
* - * string message = 3; + * repeated .flyteidl.core.TaskLog log_links = 2; */ - java.lang.String getMessage(); + java.util.List + getLogLinksOrBuilderList(); /** *
-     * A descriptive message for the current state. e.g. waiting for cluster.
+     * log information for the task execution.
      * 
* - * string message = 3; + * repeated .flyteidl.core.TaskLog log_links = 2; */ - com.google.protobuf.ByteString - getMessageBytes(); + flyteidl.core.Execution.TaskLogOrBuilder getLogLinksOrBuilder( + int index); } /** - * Protobuf type {@code flyteidl.admin.Resource} + *
+   * Response to get an individual task resource.
+   * 
+ * + * Protobuf type {@code flyteidl.admin.GetTaskResponse} */ - public static final class Resource extends + public static final class GetTaskResponse extends com.google.protobuf.GeneratedMessageV3 implements - // @@protoc_insertion_point(message_implements:flyteidl.admin.Resource) - ResourceOrBuilder { + // @@protoc_insertion_point(message_implements:flyteidl.admin.GetTaskResponse) + GetTaskResponseOrBuilder { private static final long serialVersionUID = 0L; - // Use Resource.newBuilder() to construct. - private Resource(com.google.protobuf.GeneratedMessageV3.Builder builder) { + // Use GetTaskResponse.newBuilder() to construct. + private GetTaskResponse(com.google.protobuf.GeneratedMessageV3.Builder builder) { super(builder); } - private Resource() { - state_ = 0; - message_ = ""; + private GetTaskResponse() { + logLinks_ = java.util.Collections.emptyList(); } @java.lang.Override @@ -5985,7 +5644,7 @@ private Resource() { getUnknownFields() { return this.unknownFields; } - private Resource( + private GetTaskResponse( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { @@ -6004,29 +5663,26 @@ private Resource( case 0: done = true; break; - case 8: { - int rawValue = input.readEnum(); - - state_ = rawValue; - break; - } - case 18: { - flyteidl.core.Literals.LiteralMap.Builder subBuilder = null; - if (outputs_ != null) { - subBuilder = outputs_.toBuilder(); + case 10: { + flyteidl.admin.Agent.Resource.Builder subBuilder = null; + if (resource_ != null) { + subBuilder = resource_.toBuilder(); } - outputs_ = input.readMessage(flyteidl.core.Literals.LiteralMap.parser(), extensionRegistry); + resource_ = input.readMessage(flyteidl.admin.Agent.Resource.parser(), extensionRegistry); if (subBuilder != null) { - subBuilder.mergeFrom(outputs_); - outputs_ = subBuilder.buildPartial(); + subBuilder.mergeFrom(resource_); + resource_ = subBuilder.buildPartial(); } break; } - case 26: { - java.lang.String s = input.readStringRequireUtf8(); - - message_ = s; + case 18: { + if (!((mutable_bitField0_ & 0x00000002) != 0)) { + logLinks_ = new java.util.ArrayList(); + mutable_bitField0_ |= 0x00000002; + } + logLinks_.add( + input.readMessage(flyteidl.core.Execution.TaskLog.parser(), extensionRegistry)); break; } default: { @@ -6044,127 +5700,101 @@ private Resource( throw new com.google.protobuf.InvalidProtocolBufferException( e).setUnfinishedMessage(this); } finally { + if (((mutable_bitField0_ & 0x00000002) != 0)) { + logLinks_ = java.util.Collections.unmodifiableList(logLinks_); + } this.unknownFields = unknownFields.build(); makeExtensionsImmutable(); } } public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { - return flyteidl.admin.Agent.internal_static_flyteidl_admin_Resource_descriptor; + return flyteidl.admin.Agent.internal_static_flyteidl_admin_GetTaskResponse_descriptor; } @java.lang.Override protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internalGetFieldAccessorTable() { - return flyteidl.admin.Agent.internal_static_flyteidl_admin_Resource_fieldAccessorTable + return flyteidl.admin.Agent.internal_static_flyteidl_admin_GetTaskResponse_fieldAccessorTable .ensureFieldAccessorsInitialized( - flyteidl.admin.Agent.Resource.class, flyteidl.admin.Agent.Resource.Builder.class); + flyteidl.admin.Agent.GetTaskResponse.class, flyteidl.admin.Agent.GetTaskResponse.Builder.class); } - public static final int STATE_FIELD_NUMBER = 1; - private int state_; + private int bitField0_; + public static final int RESOURCE_FIELD_NUMBER = 1; + private flyteidl.admin.Agent.Resource resource_; /** - *
-     * The state of the execution is used to control its visibility in the UI/CLI.
-     * 
- * - * .flyteidl.admin.State state = 1; + * .flyteidl.admin.Resource resource = 1; */ - public int getStateValue() { - return state_; + public boolean hasResource() { + return resource_ != null; } /** - *
-     * The state of the execution is used to control its visibility in the UI/CLI.
-     * 
- * - * .flyteidl.admin.State state = 1; + * .flyteidl.admin.Resource resource = 1; */ - public flyteidl.admin.Agent.State getState() { - @SuppressWarnings("deprecation") - flyteidl.admin.Agent.State result = flyteidl.admin.Agent.State.valueOf(state_); - return result == null ? flyteidl.admin.Agent.State.UNRECOGNIZED : result; + public flyteidl.admin.Agent.Resource getResource() { + return resource_ == null ? flyteidl.admin.Agent.Resource.getDefaultInstance() : resource_; + } + /** + * .flyteidl.admin.Resource resource = 1; + */ + public flyteidl.admin.Agent.ResourceOrBuilder getResourceOrBuilder() { + return getResource(); } - public static final int OUTPUTS_FIELD_NUMBER = 2; - private flyteidl.core.Literals.LiteralMap outputs_; + public static final int LOG_LINKS_FIELD_NUMBER = 2; + private java.util.List logLinks_; /** *
-     * The outputs of the execution. It's typically used by sql task. Agent service will create a
-     * Structured dataset pointing to the query result table.
-     * +optional
+     * log information for the task execution.
      * 
* - * .flyteidl.core.LiteralMap outputs = 2; + * repeated .flyteidl.core.TaskLog log_links = 2; */ - public boolean hasOutputs() { - return outputs_ != null; + public java.util.List getLogLinksList() { + return logLinks_; } /** *
-     * The outputs of the execution. It's typically used by sql task. Agent service will create a
-     * Structured dataset pointing to the query result table.
-     * +optional
+     * log information for the task execution.
      * 
* - * .flyteidl.core.LiteralMap outputs = 2; + * repeated .flyteidl.core.TaskLog log_links = 2; */ - public flyteidl.core.Literals.LiteralMap getOutputs() { - return outputs_ == null ? flyteidl.core.Literals.LiteralMap.getDefaultInstance() : outputs_; + public java.util.List + getLogLinksOrBuilderList() { + return logLinks_; } /** *
-     * The outputs of the execution. It's typically used by sql task. Agent service will create a
-     * Structured dataset pointing to the query result table.
-     * +optional
+     * log information for the task execution.
      * 
* - * .flyteidl.core.LiteralMap outputs = 2; + * repeated .flyteidl.core.TaskLog log_links = 2; */ - public flyteidl.core.Literals.LiteralMapOrBuilder getOutputsOrBuilder() { - return getOutputs(); + public int getLogLinksCount() { + return logLinks_.size(); } - - public static final int MESSAGE_FIELD_NUMBER = 3; - private volatile java.lang.Object message_; /** *
-     * A descriptive message for the current state. e.g. waiting for cluster.
+     * log information for the task execution.
      * 
* - * string message = 3; + * repeated .flyteidl.core.TaskLog log_links = 2; */ - public java.lang.String getMessage() { - java.lang.Object ref = message_; - if (ref instanceof java.lang.String) { - return (java.lang.String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - message_ = s; - return s; - } + public flyteidl.core.Execution.TaskLog getLogLinks(int index) { + return logLinks_.get(index); } /** *
-     * A descriptive message for the current state. e.g. waiting for cluster.
+     * log information for the task execution.
      * 
* - * string message = 3; + * repeated .flyteidl.core.TaskLog log_links = 2; */ - public com.google.protobuf.ByteString - getMessageBytes() { - java.lang.Object ref = message_; - if (ref instanceof java.lang.String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - message_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } + public flyteidl.core.Execution.TaskLogOrBuilder getLogLinksOrBuilder( + int index) { + return logLinks_.get(index); } private byte memoizedIsInitialized = -1; @@ -6181,14 +5811,11 @@ public final boolean isInitialized() { @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (state_ != flyteidl.admin.Agent.State.RETRYABLE_FAILURE.getNumber()) { - output.writeEnum(1, state_); - } - if (outputs_ != null) { - output.writeMessage(2, getOutputs()); + if (resource_ != null) { + output.writeMessage(1, getResource()); } - if (!getMessageBytes().isEmpty()) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 3, message_); + for (int i = 0; i < logLinks_.size(); i++) { + output.writeMessage(2, logLinks_.get(i)); } unknownFields.writeTo(output); } @@ -6199,16 +5826,13 @@ public int getSerializedSize() { if (size != -1) return size; size = 0; - if (state_ != flyteidl.admin.Agent.State.RETRYABLE_FAILURE.getNumber()) { + if (resource_ != null) { size += com.google.protobuf.CodedOutputStream - .computeEnumSize(1, state_); + .computeMessageSize(1, getResource()); } - if (outputs_ != null) { + for (int i = 0; i < logLinks_.size(); i++) { size += com.google.protobuf.CodedOutputStream - .computeMessageSize(2, getOutputs()); - } - if (!getMessageBytes().isEmpty()) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, message_); + .computeMessageSize(2, logLinks_.get(i)); } size += unknownFields.getSerializedSize(); memoizedSize = size; @@ -6220,19 +5844,18 @@ public boolean equals(final java.lang.Object obj) { if (obj == this) { return true; } - if (!(obj instanceof flyteidl.admin.Agent.Resource)) { + if (!(obj instanceof flyteidl.admin.Agent.GetTaskResponse)) { return super.equals(obj); } - flyteidl.admin.Agent.Resource other = (flyteidl.admin.Agent.Resource) obj; + flyteidl.admin.Agent.GetTaskResponse other = (flyteidl.admin.Agent.GetTaskResponse) obj; - if (state_ != other.state_) return false; - if (hasOutputs() != other.hasOutputs()) return false; - if (hasOutputs()) { - if (!getOutputs() - .equals(other.getOutputs())) return false; + if (hasResource() != other.hasResource()) return false; + if (hasResource()) { + if (!getResource() + .equals(other.getResource())) return false; } - if (!getMessage() - .equals(other.getMessage())) return false; + if (!getLogLinksList() + .equals(other.getLogLinksList())) return false; if (!unknownFields.equals(other.unknownFields)) return false; return true; } @@ -6244,82 +5867,82 @@ public int hashCode() { } int hash = 41; hash = (19 * hash) + getDescriptor().hashCode(); - hash = (37 * hash) + STATE_FIELD_NUMBER; - hash = (53 * hash) + state_; - if (hasOutputs()) { - hash = (37 * hash) + OUTPUTS_FIELD_NUMBER; - hash = (53 * hash) + getOutputs().hashCode(); + if (hasResource()) { + hash = (37 * hash) + RESOURCE_FIELD_NUMBER; + hash = (53 * hash) + getResource().hashCode(); + } + if (getLogLinksCount() > 0) { + hash = (37 * hash) + LOG_LINKS_FIELD_NUMBER; + hash = (53 * hash) + getLogLinksList().hashCode(); } - hash = (37 * hash) + MESSAGE_FIELD_NUMBER; - hash = (53 * hash) + getMessage().hashCode(); hash = (29 * hash) + unknownFields.hashCode(); memoizedHashCode = hash; return hash; } - public static flyteidl.admin.Agent.Resource parseFrom( + public static flyteidl.admin.Agent.GetTaskResponse parseFrom( java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static flyteidl.admin.Agent.Resource parseFrom( + public static flyteidl.admin.Agent.GetTaskResponse parseFrom( java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data, extensionRegistry); } - public static flyteidl.admin.Agent.Resource parseFrom( + public static flyteidl.admin.Agent.GetTaskResponse parseFrom( com.google.protobuf.ByteString data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static flyteidl.admin.Agent.Resource parseFrom( + public static flyteidl.admin.Agent.GetTaskResponse parseFrom( com.google.protobuf.ByteString data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data, extensionRegistry); } - public static flyteidl.admin.Agent.Resource parseFrom(byte[] data) + public static flyteidl.admin.Agent.GetTaskResponse parseFrom(byte[] data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static flyteidl.admin.Agent.Resource parseFrom( + public static flyteidl.admin.Agent.GetTaskResponse parseFrom( byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data, extensionRegistry); } - public static flyteidl.admin.Agent.Resource parseFrom(java.io.InputStream input) + public static flyteidl.admin.Agent.GetTaskResponse parseFrom(java.io.InputStream input) throws java.io.IOException { return com.google.protobuf.GeneratedMessageV3 .parseWithIOException(PARSER, input); } - public static flyteidl.admin.Agent.Resource parseFrom( + public static flyteidl.admin.Agent.GetTaskResponse parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { return com.google.protobuf.GeneratedMessageV3 .parseWithIOException(PARSER, input, extensionRegistry); } - public static flyteidl.admin.Agent.Resource parseDelimitedFrom(java.io.InputStream input) + public static flyteidl.admin.Agent.GetTaskResponse parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException { return com.google.protobuf.GeneratedMessageV3 .parseDelimitedWithIOException(PARSER, input); } - public static flyteidl.admin.Agent.Resource parseDelimitedFrom( + public static flyteidl.admin.Agent.GetTaskResponse parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { return com.google.protobuf.GeneratedMessageV3 .parseDelimitedWithIOException(PARSER, input, extensionRegistry); } - public static flyteidl.admin.Agent.Resource parseFrom( + public static flyteidl.admin.Agent.GetTaskResponse parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { return com.google.protobuf.GeneratedMessageV3 .parseWithIOException(PARSER, input); } - public static flyteidl.admin.Agent.Resource parseFrom( + public static flyteidl.admin.Agent.GetTaskResponse parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { @@ -6332,7 +5955,7 @@ public static flyteidl.admin.Agent.Resource parseFrom( public static Builder newBuilder() { return DEFAULT_INSTANCE.toBuilder(); } - public static Builder newBuilder(flyteidl.admin.Agent.Resource prototype) { + public static Builder newBuilder(flyteidl.admin.Agent.GetTaskResponse prototype) { return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); } @java.lang.Override @@ -6348,26 +5971,30 @@ protected Builder newBuilderForType( return builder; } /** - * Protobuf type {@code flyteidl.admin.Resource} + *
+     * Response to get an individual task resource.
+     * 
+ * + * Protobuf type {@code flyteidl.admin.GetTaskResponse} */ public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder implements - // @@protoc_insertion_point(builder_implements:flyteidl.admin.Resource) - flyteidl.admin.Agent.ResourceOrBuilder { + // @@protoc_insertion_point(builder_implements:flyteidl.admin.GetTaskResponse) + flyteidl.admin.Agent.GetTaskResponseOrBuilder { public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { - return flyteidl.admin.Agent.internal_static_flyteidl_admin_Resource_descriptor; + return flyteidl.admin.Agent.internal_static_flyteidl_admin_GetTaskResponse_descriptor; } @java.lang.Override protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internalGetFieldAccessorTable() { - return flyteidl.admin.Agent.internal_static_flyteidl_admin_Resource_fieldAccessorTable + return flyteidl.admin.Agent.internal_static_flyteidl_admin_GetTaskResponse_fieldAccessorTable .ensureFieldAccessorsInitialized( - flyteidl.admin.Agent.Resource.class, flyteidl.admin.Agent.Resource.Builder.class); + flyteidl.admin.Agent.GetTaskResponse.class, flyteidl.admin.Agent.GetTaskResponse.Builder.class); } - // Construct using flyteidl.admin.Agent.Resource.newBuilder() + // Construct using flyteidl.admin.Agent.GetTaskResponse.newBuilder() private Builder() { maybeForceBuilderInitialization(); } @@ -6380,38 +6007,41 @@ private Builder( private void maybeForceBuilderInitialization() { if (com.google.protobuf.GeneratedMessageV3 .alwaysUseFieldBuilders) { + getLogLinksFieldBuilder(); } } @java.lang.Override public Builder clear() { super.clear(); - state_ = 0; - - if (outputsBuilder_ == null) { - outputs_ = null; + if (resourceBuilder_ == null) { + resource_ = null; } else { - outputs_ = null; - outputsBuilder_ = null; + resource_ = null; + resourceBuilder_ = null; + } + if (logLinksBuilder_ == null) { + logLinks_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000002); + } else { + logLinksBuilder_.clear(); } - message_ = ""; - return this; } @java.lang.Override public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { - return flyteidl.admin.Agent.internal_static_flyteidl_admin_Resource_descriptor; + return flyteidl.admin.Agent.internal_static_flyteidl_admin_GetTaskResponse_descriptor; } @java.lang.Override - public flyteidl.admin.Agent.Resource getDefaultInstanceForType() { - return flyteidl.admin.Agent.Resource.getDefaultInstance(); + public flyteidl.admin.Agent.GetTaskResponse getDefaultInstanceForType() { + return flyteidl.admin.Agent.GetTaskResponse.getDefaultInstance(); } @java.lang.Override - public flyteidl.admin.Agent.Resource build() { - flyteidl.admin.Agent.Resource result = buildPartial(); + public flyteidl.admin.Agent.GetTaskResponse build() { + flyteidl.admin.Agent.GetTaskResponse result = buildPartial(); if (!result.isInitialized()) { throw newUninitializedMessageException(result); } @@ -6419,15 +6049,25 @@ public flyteidl.admin.Agent.Resource build() { } @java.lang.Override - public flyteidl.admin.Agent.Resource buildPartial() { - flyteidl.admin.Agent.Resource result = new flyteidl.admin.Agent.Resource(this); - result.state_ = state_; - if (outputsBuilder_ == null) { - result.outputs_ = outputs_; + public flyteidl.admin.Agent.GetTaskResponse buildPartial() { + flyteidl.admin.Agent.GetTaskResponse result = new flyteidl.admin.Agent.GetTaskResponse(this); + int from_bitField0_ = bitField0_; + int to_bitField0_ = 0; + if (resourceBuilder_ == null) { + result.resource_ = resource_; } else { - result.outputs_ = outputsBuilder_.build(); + result.resource_ = resourceBuilder_.build(); } - result.message_ = message_; + if (logLinksBuilder_ == null) { + if (((bitField0_ & 0x00000002) != 0)) { + logLinks_ = java.util.Collections.unmodifiableList(logLinks_); + bitField0_ = (bitField0_ & ~0x00000002); + } + result.logLinks_ = logLinks_; + } else { + result.logLinks_ = logLinksBuilder_.build(); + } + result.bitField0_ = to_bitField0_; onBuilt(); return result; } @@ -6466,25 +6106,44 @@ public Builder addRepeatedField( } @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof flyteidl.admin.Agent.Resource) { - return mergeFrom((flyteidl.admin.Agent.Resource)other); + if (other instanceof flyteidl.admin.Agent.GetTaskResponse) { + return mergeFrom((flyteidl.admin.Agent.GetTaskResponse)other); } else { super.mergeFrom(other); return this; } } - public Builder mergeFrom(flyteidl.admin.Agent.Resource other) { - if (other == flyteidl.admin.Agent.Resource.getDefaultInstance()) return this; - if (other.state_ != 0) { - setStateValue(other.getStateValue()); - } - if (other.hasOutputs()) { - mergeOutputs(other.getOutputs()); + public Builder mergeFrom(flyteidl.admin.Agent.GetTaskResponse other) { + if (other == flyteidl.admin.Agent.GetTaskResponse.getDefaultInstance()) return this; + if (other.hasResource()) { + mergeResource(other.getResource()); } - if (!other.getMessage().isEmpty()) { - message_ = other.message_; - onChanged(); + if (logLinksBuilder_ == null) { + if (!other.logLinks_.isEmpty()) { + if (logLinks_.isEmpty()) { + logLinks_ = other.logLinks_; + bitField0_ = (bitField0_ & ~0x00000002); + } else { + ensureLogLinksIsMutable(); + logLinks_.addAll(other.logLinks_); + } + onChanged(); + } + } else { + if (!other.logLinks_.isEmpty()) { + if (logLinksBuilder_.isEmpty()) { + logLinksBuilder_.dispose(); + logLinksBuilder_ = null; + logLinks_ = other.logLinks_; + bitField0_ = (bitField0_ & ~0x00000002); + logLinksBuilder_ = + com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ? + getLogLinksFieldBuilder() : null; + } else { + logLinksBuilder_.addAllMessages(other.logLinks_); + } + } } this.mergeUnknownFields(other.unknownFields); onChanged(); @@ -6501,11 +6160,11 @@ public Builder mergeFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - flyteidl.admin.Agent.Resource parsedMessage = null; + flyteidl.admin.Agent.GetTaskResponse parsedMessage = null; try { parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); } catch (com.google.protobuf.InvalidProtocolBufferException e) { - parsedMessage = (flyteidl.admin.Agent.Resource) e.getUnfinishedMessage(); + parsedMessage = (flyteidl.admin.Agent.GetTaskResponse) e.getUnfinishedMessage(); throw e.unwrapIOException(); } finally { if (parsedMessage != null) { @@ -6514,330 +6173,435 @@ public Builder mergeFrom( } return this; } + private int bitField0_; - private int state_ = 0; + private flyteidl.admin.Agent.Resource resource_; + private com.google.protobuf.SingleFieldBuilderV3< + flyteidl.admin.Agent.Resource, flyteidl.admin.Agent.Resource.Builder, flyteidl.admin.Agent.ResourceOrBuilder> resourceBuilder_; /** - *
-       * The state of the execution is used to control its visibility in the UI/CLI.
-       * 
- * - * .flyteidl.admin.State state = 1; + * .flyteidl.admin.Resource resource = 1; */ - public int getStateValue() { - return state_; + public boolean hasResource() { + return resourceBuilder_ != null || resource_ != null; } /** - *
-       * The state of the execution is used to control its visibility in the UI/CLI.
-       * 
- * - * .flyteidl.admin.State state = 1; + * .flyteidl.admin.Resource resource = 1; */ - public Builder setStateValue(int value) { - state_ = value; - onChanged(); - return this; + public flyteidl.admin.Agent.Resource getResource() { + if (resourceBuilder_ == null) { + return resource_ == null ? flyteidl.admin.Agent.Resource.getDefaultInstance() : resource_; + } else { + return resourceBuilder_.getMessage(); + } } /** - *
-       * The state of the execution is used to control its visibility in the UI/CLI.
-       * 
- * - * .flyteidl.admin.State state = 1; + * .flyteidl.admin.Resource resource = 1; */ - public flyteidl.admin.Agent.State getState() { - @SuppressWarnings("deprecation") - flyteidl.admin.Agent.State result = flyteidl.admin.Agent.State.valueOf(state_); - return result == null ? flyteidl.admin.Agent.State.UNRECOGNIZED : result; + public Builder setResource(flyteidl.admin.Agent.Resource value) { + if (resourceBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + resource_ = value; + onChanged(); + } else { + resourceBuilder_.setMessage(value); + } + + return this; } /** - *
-       * The state of the execution is used to control its visibility in the UI/CLI.
-       * 
- * - * .flyteidl.admin.State state = 1; + * .flyteidl.admin.Resource resource = 1; */ - public Builder setState(flyteidl.admin.Agent.State value) { - if (value == null) { - throw new NullPointerException(); + public Builder setResource( + flyteidl.admin.Agent.Resource.Builder builderForValue) { + if (resourceBuilder_ == null) { + resource_ = builderForValue.build(); + onChanged(); + } else { + resourceBuilder_.setMessage(builderForValue.build()); + } + + return this; + } + /** + * .flyteidl.admin.Resource resource = 1; + */ + public Builder mergeResource(flyteidl.admin.Agent.Resource value) { + if (resourceBuilder_ == null) { + if (resource_ != null) { + resource_ = + flyteidl.admin.Agent.Resource.newBuilder(resource_).mergeFrom(value).buildPartial(); + } else { + resource_ = value; + } + onChanged(); + } else { + resourceBuilder_.mergeFrom(value); + } + + return this; + } + /** + * .flyteidl.admin.Resource resource = 1; + */ + public Builder clearResource() { + if (resourceBuilder_ == null) { + resource_ = null; + onChanged(); + } else { + resource_ = null; + resourceBuilder_ = null; } + + return this; + } + /** + * .flyteidl.admin.Resource resource = 1; + */ + public flyteidl.admin.Agent.Resource.Builder getResourceBuilder() { - state_ = value.getNumber(); onChanged(); - return this; + return getResourceFieldBuilder().getBuilder(); + } + /** + * .flyteidl.admin.Resource resource = 1; + */ + public flyteidl.admin.Agent.ResourceOrBuilder getResourceOrBuilder() { + if (resourceBuilder_ != null) { + return resourceBuilder_.getMessageOrBuilder(); + } else { + return resource_ == null ? + flyteidl.admin.Agent.Resource.getDefaultInstance() : resource_; + } + } + /** + * .flyteidl.admin.Resource resource = 1; + */ + private com.google.protobuf.SingleFieldBuilderV3< + flyteidl.admin.Agent.Resource, flyteidl.admin.Agent.Resource.Builder, flyteidl.admin.Agent.ResourceOrBuilder> + getResourceFieldBuilder() { + if (resourceBuilder_ == null) { + resourceBuilder_ = new com.google.protobuf.SingleFieldBuilderV3< + flyteidl.admin.Agent.Resource, flyteidl.admin.Agent.Resource.Builder, flyteidl.admin.Agent.ResourceOrBuilder>( + getResource(), + getParentForChildren(), + isClean()); + resource_ = null; + } + return resourceBuilder_; + } + + private java.util.List logLinks_ = + java.util.Collections.emptyList(); + private void ensureLogLinksIsMutable() { + if (!((bitField0_ & 0x00000002) != 0)) { + logLinks_ = new java.util.ArrayList(logLinks_); + bitField0_ |= 0x00000002; + } } + + private com.google.protobuf.RepeatedFieldBuilderV3< + flyteidl.core.Execution.TaskLog, flyteidl.core.Execution.TaskLog.Builder, flyteidl.core.Execution.TaskLogOrBuilder> logLinksBuilder_; + /** *
-       * The state of the execution is used to control its visibility in the UI/CLI.
+       * log information for the task execution.
        * 
* - * .flyteidl.admin.State state = 1; + * repeated .flyteidl.core.TaskLog log_links = 2; */ - public Builder clearState() { - - state_ = 0; - onChanged(); - return this; + public java.util.List getLogLinksList() { + if (logLinksBuilder_ == null) { + return java.util.Collections.unmodifiableList(logLinks_); + } else { + return logLinksBuilder_.getMessageList(); + } } - - private flyteidl.core.Literals.LiteralMap outputs_; - private com.google.protobuf.SingleFieldBuilderV3< - flyteidl.core.Literals.LiteralMap, flyteidl.core.Literals.LiteralMap.Builder, flyteidl.core.Literals.LiteralMapOrBuilder> outputsBuilder_; /** *
-       * The outputs of the execution. It's typically used by sql task. Agent service will create a
-       * Structured dataset pointing to the query result table.
-       * +optional
+       * log information for the task execution.
        * 
* - * .flyteidl.core.LiteralMap outputs = 2; + * repeated .flyteidl.core.TaskLog log_links = 2; */ - public boolean hasOutputs() { - return outputsBuilder_ != null || outputs_ != null; + public int getLogLinksCount() { + if (logLinksBuilder_ == null) { + return logLinks_.size(); + } else { + return logLinksBuilder_.getCount(); + } } /** *
-       * The outputs of the execution. It's typically used by sql task. Agent service will create a
-       * Structured dataset pointing to the query result table.
-       * +optional
+       * log information for the task execution.
        * 
* - * .flyteidl.core.LiteralMap outputs = 2; + * repeated .flyteidl.core.TaskLog log_links = 2; */ - public flyteidl.core.Literals.LiteralMap getOutputs() { - if (outputsBuilder_ == null) { - return outputs_ == null ? flyteidl.core.Literals.LiteralMap.getDefaultInstance() : outputs_; + public flyteidl.core.Execution.TaskLog getLogLinks(int index) { + if (logLinksBuilder_ == null) { + return logLinks_.get(index); } else { - return outputsBuilder_.getMessage(); + return logLinksBuilder_.getMessage(index); } } /** *
-       * The outputs of the execution. It's typically used by sql task. Agent service will create a
-       * Structured dataset pointing to the query result table.
-       * +optional
+       * log information for the task execution.
        * 
* - * .flyteidl.core.LiteralMap outputs = 2; + * repeated .flyteidl.core.TaskLog log_links = 2; */ - public Builder setOutputs(flyteidl.core.Literals.LiteralMap value) { - if (outputsBuilder_ == null) { + public Builder setLogLinks( + int index, flyteidl.core.Execution.TaskLog value) { + if (logLinksBuilder_ == null) { if (value == null) { throw new NullPointerException(); } - outputs_ = value; + ensureLogLinksIsMutable(); + logLinks_.set(index, value); onChanged(); } else { - outputsBuilder_.setMessage(value); + logLinksBuilder_.setMessage(index, value); } - return this; } /** *
-       * The outputs of the execution. It's typically used by sql task. Agent service will create a
-       * Structured dataset pointing to the query result table.
-       * +optional
+       * log information for the task execution.
        * 
* - * .flyteidl.core.LiteralMap outputs = 2; + * repeated .flyteidl.core.TaskLog log_links = 2; */ - public Builder setOutputs( - flyteidl.core.Literals.LiteralMap.Builder builderForValue) { - if (outputsBuilder_ == null) { - outputs_ = builderForValue.build(); + public Builder setLogLinks( + int index, flyteidl.core.Execution.TaskLog.Builder builderForValue) { + if (logLinksBuilder_ == null) { + ensureLogLinksIsMutable(); + logLinks_.set(index, builderForValue.build()); onChanged(); } else { - outputsBuilder_.setMessage(builderForValue.build()); + logLinksBuilder_.setMessage(index, builderForValue.build()); } - return this; } /** *
-       * The outputs of the execution. It's typically used by sql task. Agent service will create a
-       * Structured dataset pointing to the query result table.
-       * +optional
+       * log information for the task execution.
        * 
* - * .flyteidl.core.LiteralMap outputs = 2; + * repeated .flyteidl.core.TaskLog log_links = 2; */ - public Builder mergeOutputs(flyteidl.core.Literals.LiteralMap value) { - if (outputsBuilder_ == null) { - if (outputs_ != null) { - outputs_ = - flyteidl.core.Literals.LiteralMap.newBuilder(outputs_).mergeFrom(value).buildPartial(); - } else { - outputs_ = value; + public Builder addLogLinks(flyteidl.core.Execution.TaskLog value) { + if (logLinksBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); } + ensureLogLinksIsMutable(); + logLinks_.add(value); onChanged(); } else { - outputsBuilder_.mergeFrom(value); + logLinksBuilder_.addMessage(value); } - return this; } /** *
-       * The outputs of the execution. It's typically used by sql task. Agent service will create a
-       * Structured dataset pointing to the query result table.
-       * +optional
+       * log information for the task execution.
        * 
* - * .flyteidl.core.LiteralMap outputs = 2; + * repeated .flyteidl.core.TaskLog log_links = 2; */ - public Builder clearOutputs() { - if (outputsBuilder_ == null) { - outputs_ = null; + public Builder addLogLinks( + int index, flyteidl.core.Execution.TaskLog value) { + if (logLinksBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureLogLinksIsMutable(); + logLinks_.add(index, value); onChanged(); } else { - outputs_ = null; - outputsBuilder_ = null; + logLinksBuilder_.addMessage(index, value); } - return this; } /** *
-       * The outputs of the execution. It's typically used by sql task. Agent service will create a
-       * Structured dataset pointing to the query result table.
-       * +optional
+       * log information for the task execution.
        * 
* - * .flyteidl.core.LiteralMap outputs = 2; + * repeated .flyteidl.core.TaskLog log_links = 2; */ - public flyteidl.core.Literals.LiteralMap.Builder getOutputsBuilder() { - - onChanged(); - return getOutputsFieldBuilder().getBuilder(); + public Builder addLogLinks( + flyteidl.core.Execution.TaskLog.Builder builderForValue) { + if (logLinksBuilder_ == null) { + ensureLogLinksIsMutable(); + logLinks_.add(builderForValue.build()); + onChanged(); + } else { + logLinksBuilder_.addMessage(builderForValue.build()); + } + return this; } /** *
-       * The outputs of the execution. It's typically used by sql task. Agent service will create a
-       * Structured dataset pointing to the query result table.
-       * +optional
+       * log information for the task execution.
        * 
* - * .flyteidl.core.LiteralMap outputs = 2; + * repeated .flyteidl.core.TaskLog log_links = 2; */ - public flyteidl.core.Literals.LiteralMapOrBuilder getOutputsOrBuilder() { - if (outputsBuilder_ != null) { - return outputsBuilder_.getMessageOrBuilder(); + public Builder addLogLinks( + int index, flyteidl.core.Execution.TaskLog.Builder builderForValue) { + if (logLinksBuilder_ == null) { + ensureLogLinksIsMutable(); + logLinks_.add(index, builderForValue.build()); + onChanged(); } else { - return outputs_ == null ? - flyteidl.core.Literals.LiteralMap.getDefaultInstance() : outputs_; + logLinksBuilder_.addMessage(index, builderForValue.build()); } + return this; } /** *
-       * The outputs of the execution. It's typically used by sql task. Agent service will create a
-       * Structured dataset pointing to the query result table.
-       * +optional
+       * log information for the task execution.
        * 
* - * .flyteidl.core.LiteralMap outputs = 2; + * repeated .flyteidl.core.TaskLog log_links = 2; */ - private com.google.protobuf.SingleFieldBuilderV3< - flyteidl.core.Literals.LiteralMap, flyteidl.core.Literals.LiteralMap.Builder, flyteidl.core.Literals.LiteralMapOrBuilder> - getOutputsFieldBuilder() { - if (outputsBuilder_ == null) { - outputsBuilder_ = new com.google.protobuf.SingleFieldBuilderV3< - flyteidl.core.Literals.LiteralMap, flyteidl.core.Literals.LiteralMap.Builder, flyteidl.core.Literals.LiteralMapOrBuilder>( - getOutputs(), - getParentForChildren(), - isClean()); - outputs_ = null; + public Builder addAllLogLinks( + java.lang.Iterable values) { + if (logLinksBuilder_ == null) { + ensureLogLinksIsMutable(); + com.google.protobuf.AbstractMessageLite.Builder.addAll( + values, logLinks_); + onChanged(); + } else { + logLinksBuilder_.addAllMessages(values); } - return outputsBuilder_; + return this; } - - private java.lang.Object message_ = ""; /** *
-       * A descriptive message for the current state. e.g. waiting for cluster.
+       * log information for the task execution.
        * 
* - * string message = 3; + * repeated .flyteidl.core.TaskLog log_links = 2; */ - public java.lang.String getMessage() { - java.lang.Object ref = message_; - if (!(ref instanceof java.lang.String)) { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - message_ = s; - return s; + public Builder clearLogLinks() { + if (logLinksBuilder_ == null) { + logLinks_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000002); + onChanged(); } else { - return (java.lang.String) ref; + logLinksBuilder_.clear(); } + return this; } /** *
-       * A descriptive message for the current state. e.g. waiting for cluster.
+       * log information for the task execution.
        * 
* - * string message = 3; + * repeated .flyteidl.core.TaskLog log_links = 2; */ - public com.google.protobuf.ByteString - getMessageBytes() { - java.lang.Object ref = message_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - message_ = b; - return b; + public Builder removeLogLinks(int index) { + if (logLinksBuilder_ == null) { + ensureLogLinksIsMutable(); + logLinks_.remove(index); + onChanged(); } else { - return (com.google.protobuf.ByteString) ref; + logLinksBuilder_.remove(index); } + return this; } /** *
-       * A descriptive message for the current state. e.g. waiting for cluster.
+       * log information for the task execution.
        * 
* - * string message = 3; + * repeated .flyteidl.core.TaskLog log_links = 2; */ - public Builder setMessage( - java.lang.String value) { - if (value == null) { - throw new NullPointerException(); - } - - message_ = value; - onChanged(); - return this; + public flyteidl.core.Execution.TaskLog.Builder getLogLinksBuilder( + int index) { + return getLogLinksFieldBuilder().getBuilder(index); } /** *
-       * A descriptive message for the current state. e.g. waiting for cluster.
+       * log information for the task execution.
        * 
* - * string message = 3; + * repeated .flyteidl.core.TaskLog log_links = 2; */ - public Builder clearMessage() { - - message_ = getDefaultInstance().getMessage(); - onChanged(); - return this; + public flyteidl.core.Execution.TaskLogOrBuilder getLogLinksOrBuilder( + int index) { + if (logLinksBuilder_ == null) { + return logLinks_.get(index); } else { + return logLinksBuilder_.getMessageOrBuilder(index); + } } /** *
-       * A descriptive message for the current state. e.g. waiting for cluster.
+       * log information for the task execution.
        * 
* - * string message = 3; + * repeated .flyteidl.core.TaskLog log_links = 2; */ - public Builder setMessageBytes( - com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - checkByteStringIsUtf8(value); - - message_ = value; - onChanged(); - return this; + public java.util.List + getLogLinksOrBuilderList() { + if (logLinksBuilder_ != null) { + return logLinksBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(logLinks_); + } + } + /** + *
+       * log information for the task execution.
+       * 
+ * + * repeated .flyteidl.core.TaskLog log_links = 2; + */ + public flyteidl.core.Execution.TaskLog.Builder addLogLinksBuilder() { + return getLogLinksFieldBuilder().addBuilder( + flyteidl.core.Execution.TaskLog.getDefaultInstance()); + } + /** + *
+       * log information for the task execution.
+       * 
+ * + * repeated .flyteidl.core.TaskLog log_links = 2; + */ + public flyteidl.core.Execution.TaskLog.Builder addLogLinksBuilder( + int index) { + return getLogLinksFieldBuilder().addBuilder( + index, flyteidl.core.Execution.TaskLog.getDefaultInstance()); + } + /** + *
+       * log information for the task execution.
+       * 
+ * + * repeated .flyteidl.core.TaskLog log_links = 2; + */ + public java.util.List + getLogLinksBuilderList() { + return getLogLinksFieldBuilder().getBuilderList(); + } + private com.google.protobuf.RepeatedFieldBuilderV3< + flyteidl.core.Execution.TaskLog, flyteidl.core.Execution.TaskLog.Builder, flyteidl.core.Execution.TaskLogOrBuilder> + getLogLinksFieldBuilder() { + if (logLinksBuilder_ == null) { + logLinksBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3< + flyteidl.core.Execution.TaskLog, flyteidl.core.Execution.TaskLog.Builder, flyteidl.core.Execution.TaskLogOrBuilder>( + logLinks_, + ((bitField0_ & 0x00000002) != 0), + getParentForChildren(), + isClean()); + logLinks_ = null; + } + return logLinksBuilder_; } @java.lang.Override public final Builder setUnknownFields( @@ -6852,114 +6616,149 @@ public final Builder mergeUnknownFields( } - // @@protoc_insertion_point(builder_scope:flyteidl.admin.Resource) + // @@protoc_insertion_point(builder_scope:flyteidl.admin.GetTaskResponse) } - // @@protoc_insertion_point(class_scope:flyteidl.admin.Resource) - private static final flyteidl.admin.Agent.Resource DEFAULT_INSTANCE; + // @@protoc_insertion_point(class_scope:flyteidl.admin.GetTaskResponse) + private static final flyteidl.admin.Agent.GetTaskResponse DEFAULT_INSTANCE; static { - DEFAULT_INSTANCE = new flyteidl.admin.Agent.Resource(); + DEFAULT_INSTANCE = new flyteidl.admin.Agent.GetTaskResponse(); } - public static flyteidl.admin.Agent.Resource getDefaultInstance() { + public static flyteidl.admin.Agent.GetTaskResponse getDefaultInstance() { return DEFAULT_INSTANCE; } - private static final com.google.protobuf.Parser - PARSER = new com.google.protobuf.AbstractParser() { + private static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { @java.lang.Override - public Resource parsePartialFrom( + public GetTaskResponse parsePartialFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { - return new Resource(input, extensionRegistry); + return new GetTaskResponse(input, extensionRegistry); } }; - public static com.google.protobuf.Parser parser() { + public static com.google.protobuf.Parser parser() { return PARSER; } @java.lang.Override - public com.google.protobuf.Parser getParserForType() { + public com.google.protobuf.Parser getParserForType() { return PARSER; } @java.lang.Override - public flyteidl.admin.Agent.Resource getDefaultInstanceForType() { + public flyteidl.admin.Agent.GetTaskResponse getDefaultInstanceForType() { return DEFAULT_INSTANCE; } } - public interface DeleteTaskRequestOrBuilder extends - // @@protoc_insertion_point(interface_extends:flyteidl.admin.DeleteTaskRequest) + public interface ResourceOrBuilder extends + // @@protoc_insertion_point(interface_extends:flyteidl.admin.Resource) com.google.protobuf.MessageOrBuilder { /** *
-     * A predefined yet extensible Task type identifier.
+     * The state of the execution is used to control its visibility in the UI/CLI.
      * 
* - * string task_type = 1; + * .flyteidl.admin.State state = 1; */ - java.lang.String getTaskType(); + int getStateValue(); /** *
-     * A predefined yet extensible Task type identifier.
+     * The state of the execution is used to control its visibility in the UI/CLI.
      * 
* - * string task_type = 1; + * .flyteidl.admin.State state = 1; */ - com.google.protobuf.ByteString - getTaskTypeBytes(); + flyteidl.admin.Agent.State getState(); /** *
-     * Metadata about the resource to be pass to the agent.
+     * The outputs of the execution. It's typically used by sql task. Agent service will create a
+     * Structured dataset pointing to the query result table.
+     * +optional
      * 
* - * bytes resource_meta = 2; + * .flyteidl.core.LiteralMap outputs = 2; */ - com.google.protobuf.ByteString getResourceMeta(); - } - /** - *
-   * A message used to delete a task.
-   * 
- * - * Protobuf type {@code flyteidl.admin.DeleteTaskRequest} - */ - public static final class DeleteTaskRequest extends - com.google.protobuf.GeneratedMessageV3 implements - // @@protoc_insertion_point(message_implements:flyteidl.admin.DeleteTaskRequest) - DeleteTaskRequestOrBuilder { - private static final long serialVersionUID = 0L; - // Use DeleteTaskRequest.newBuilder() to construct. - private DeleteTaskRequest(com.google.protobuf.GeneratedMessageV3.Builder builder) { - super(builder); - } - private DeleteTaskRequest() { - taskType_ = ""; - resourceMeta_ = com.google.protobuf.ByteString.EMPTY; - } - - @java.lang.Override - public final com.google.protobuf.UnknownFieldSet - getUnknownFields() { - return this.unknownFields; - } - private DeleteTaskRequest( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - this(); - if (extensionRegistry == null) { - throw new java.lang.NullPointerException(); - } - int mutable_bitField0_ = 0; - com.google.protobuf.UnknownFieldSet.Builder unknownFields = - com.google.protobuf.UnknownFieldSet.newBuilder(); + boolean hasOutputs(); + /** + *
+     * The outputs of the execution. It's typically used by sql task. Agent service will create a
+     * Structured dataset pointing to the query result table.
+     * +optional
+     * 
+ * + * .flyteidl.core.LiteralMap outputs = 2; + */ + flyteidl.core.Literals.LiteralMap getOutputs(); + /** + *
+     * The outputs of the execution. It's typically used by sql task. Agent service will create a
+     * Structured dataset pointing to the query result table.
+     * +optional
+     * 
+ * + * .flyteidl.core.LiteralMap outputs = 2; + */ + flyteidl.core.Literals.LiteralMapOrBuilder getOutputsOrBuilder(); + + /** + *
+     * A descriptive message for the current state. e.g. waiting for cluster.
+     * 
+ * + * string message = 3; + */ + java.lang.String getMessage(); + /** + *
+     * A descriptive message for the current state. e.g. waiting for cluster.
+     * 
+ * + * string message = 3; + */ + com.google.protobuf.ByteString + getMessageBytes(); + } + /** + * Protobuf type {@code flyteidl.admin.Resource} + */ + public static final class Resource extends + com.google.protobuf.GeneratedMessageV3 implements + // @@protoc_insertion_point(message_implements:flyteidl.admin.Resource) + ResourceOrBuilder { + private static final long serialVersionUID = 0L; + // Use Resource.newBuilder() to construct. + private Resource(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + private Resource() { + state_ = 0; + message_ = ""; + } + + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet + getUnknownFields() { + return this.unknownFields; + } + private Resource( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + this(); + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + int mutable_bitField0_ = 0; + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder(); try { boolean done = false; while (!done) { @@ -6968,15 +6767,29 @@ private DeleteTaskRequest( case 0: done = true; break; - case 10: { - java.lang.String s = input.readStringRequireUtf8(); + case 8: { + int rawValue = input.readEnum(); - taskType_ = s; + state_ = rawValue; break; } case 18: { + flyteidl.core.Literals.LiteralMap.Builder subBuilder = null; + if (outputs_ != null) { + subBuilder = outputs_.toBuilder(); + } + outputs_ = input.readMessage(flyteidl.core.Literals.LiteralMap.parser(), extensionRegistry); + if (subBuilder != null) { + subBuilder.mergeFrom(outputs_); + outputs_ = subBuilder.buildPartial(); + } - resourceMeta_ = input.readBytes(); + break; + } + case 26: { + java.lang.String s = input.readStringRequireUtf8(); + + message_ = s; break; } default: { @@ -7000,72 +6813,123 @@ private DeleteTaskRequest( } public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { - return flyteidl.admin.Agent.internal_static_flyteidl_admin_DeleteTaskRequest_descriptor; + return flyteidl.admin.Agent.internal_static_flyteidl_admin_Resource_descriptor; } @java.lang.Override protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internalGetFieldAccessorTable() { - return flyteidl.admin.Agent.internal_static_flyteidl_admin_DeleteTaskRequest_fieldAccessorTable + return flyteidl.admin.Agent.internal_static_flyteidl_admin_Resource_fieldAccessorTable .ensureFieldAccessorsInitialized( - flyteidl.admin.Agent.DeleteTaskRequest.class, flyteidl.admin.Agent.DeleteTaskRequest.Builder.class); + flyteidl.admin.Agent.Resource.class, flyteidl.admin.Agent.Resource.Builder.class); } - public static final int TASK_TYPE_FIELD_NUMBER = 1; - private volatile java.lang.Object taskType_; + public static final int STATE_FIELD_NUMBER = 1; + private int state_; /** *
-     * A predefined yet extensible Task type identifier.
+     * The state of the execution is used to control its visibility in the UI/CLI.
      * 
* - * string task_type = 1; + * .flyteidl.admin.State state = 1; */ - public java.lang.String getTaskType() { - java.lang.Object ref = taskType_; + public int getStateValue() { + return state_; + } + /** + *
+     * The state of the execution is used to control its visibility in the UI/CLI.
+     * 
+ * + * .flyteidl.admin.State state = 1; + */ + public flyteidl.admin.Agent.State getState() { + @SuppressWarnings("deprecation") + flyteidl.admin.Agent.State result = flyteidl.admin.Agent.State.valueOf(state_); + return result == null ? flyteidl.admin.Agent.State.UNRECOGNIZED : result; + } + + public static final int OUTPUTS_FIELD_NUMBER = 2; + private flyteidl.core.Literals.LiteralMap outputs_; + /** + *
+     * The outputs of the execution. It's typically used by sql task. Agent service will create a
+     * Structured dataset pointing to the query result table.
+     * +optional
+     * 
+ * + * .flyteidl.core.LiteralMap outputs = 2; + */ + public boolean hasOutputs() { + return outputs_ != null; + } + /** + *
+     * The outputs of the execution. It's typically used by sql task. Agent service will create a
+     * Structured dataset pointing to the query result table.
+     * +optional
+     * 
+ * + * .flyteidl.core.LiteralMap outputs = 2; + */ + public flyteidl.core.Literals.LiteralMap getOutputs() { + return outputs_ == null ? flyteidl.core.Literals.LiteralMap.getDefaultInstance() : outputs_; + } + /** + *
+     * The outputs of the execution. It's typically used by sql task. Agent service will create a
+     * Structured dataset pointing to the query result table.
+     * +optional
+     * 
+ * + * .flyteidl.core.LiteralMap outputs = 2; + */ + public flyteidl.core.Literals.LiteralMapOrBuilder getOutputsOrBuilder() { + return getOutputs(); + } + + public static final int MESSAGE_FIELD_NUMBER = 3; + private volatile java.lang.Object message_; + /** + *
+     * A descriptive message for the current state. e.g. waiting for cluster.
+     * 
+ * + * string message = 3; + */ + public java.lang.String getMessage() { + java.lang.Object ref = message_; if (ref instanceof java.lang.String) { return (java.lang.String) ref; } else { com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; java.lang.String s = bs.toStringUtf8(); - taskType_ = s; + message_ = s; return s; } } /** *
-     * A predefined yet extensible Task type identifier.
+     * A descriptive message for the current state. e.g. waiting for cluster.
      * 
* - * string task_type = 1; + * string message = 3; */ public com.google.protobuf.ByteString - getTaskTypeBytes() { - java.lang.Object ref = taskType_; + getMessageBytes() { + java.lang.Object ref = message_; if (ref instanceof java.lang.String) { com.google.protobuf.ByteString b = com.google.protobuf.ByteString.copyFromUtf8( (java.lang.String) ref); - taskType_ = b; + message_ = b; return b; } else { return (com.google.protobuf.ByteString) ref; } } - public static final int RESOURCE_META_FIELD_NUMBER = 2; - private com.google.protobuf.ByteString resourceMeta_; - /** - *
-     * Metadata about the resource to be pass to the agent.
-     * 
- * - * bytes resource_meta = 2; - */ - public com.google.protobuf.ByteString getResourceMeta() { - return resourceMeta_; - } - private byte memoizedIsInitialized = -1; @java.lang.Override public final boolean isInitialized() { @@ -7080,11 +6944,14 @@ public final boolean isInitialized() { @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (!getTaskTypeBytes().isEmpty()) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, taskType_); + if (state_ != flyteidl.admin.Agent.State.RETRYABLE_FAILURE.getNumber()) { + output.writeEnum(1, state_); } - if (!resourceMeta_.isEmpty()) { - output.writeBytes(2, resourceMeta_); + if (outputs_ != null) { + output.writeMessage(2, getOutputs()); + } + if (!getMessageBytes().isEmpty()) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 3, message_); } unknownFields.writeTo(output); } @@ -7095,12 +6962,16 @@ public int getSerializedSize() { if (size != -1) return size; size = 0; - if (!getTaskTypeBytes().isEmpty()) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, taskType_); + if (state_ != flyteidl.admin.Agent.State.RETRYABLE_FAILURE.getNumber()) { + size += com.google.protobuf.CodedOutputStream + .computeEnumSize(1, state_); } - if (!resourceMeta_.isEmpty()) { + if (outputs_ != null) { size += com.google.protobuf.CodedOutputStream - .computeBytesSize(2, resourceMeta_); + .computeMessageSize(2, getOutputs()); + } + if (!getMessageBytes().isEmpty()) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, message_); } size += unknownFields.getSerializedSize(); memoizedSize = size; @@ -7112,15 +6983,19 @@ public boolean equals(final java.lang.Object obj) { if (obj == this) { return true; } - if (!(obj instanceof flyteidl.admin.Agent.DeleteTaskRequest)) { + if (!(obj instanceof flyteidl.admin.Agent.Resource)) { return super.equals(obj); } - flyteidl.admin.Agent.DeleteTaskRequest other = (flyteidl.admin.Agent.DeleteTaskRequest) obj; + flyteidl.admin.Agent.Resource other = (flyteidl.admin.Agent.Resource) obj; - if (!getTaskType() - .equals(other.getTaskType())) return false; - if (!getResourceMeta() - .equals(other.getResourceMeta())) return false; + if (state_ != other.state_) return false; + if (hasOutputs() != other.hasOutputs()) return false; + if (hasOutputs()) { + if (!getOutputs() + .equals(other.getOutputs())) return false; + } + if (!getMessage() + .equals(other.getMessage())) return false; if (!unknownFields.equals(other.unknownFields)) return false; return true; } @@ -7132,78 +7007,82 @@ public int hashCode() { } int hash = 41; hash = (19 * hash) + getDescriptor().hashCode(); - hash = (37 * hash) + TASK_TYPE_FIELD_NUMBER; - hash = (53 * hash) + getTaskType().hashCode(); - hash = (37 * hash) + RESOURCE_META_FIELD_NUMBER; - hash = (53 * hash) + getResourceMeta().hashCode(); + hash = (37 * hash) + STATE_FIELD_NUMBER; + hash = (53 * hash) + state_; + if (hasOutputs()) { + hash = (37 * hash) + OUTPUTS_FIELD_NUMBER; + hash = (53 * hash) + getOutputs().hashCode(); + } + hash = (37 * hash) + MESSAGE_FIELD_NUMBER; + hash = (53 * hash) + getMessage().hashCode(); hash = (29 * hash) + unknownFields.hashCode(); memoizedHashCode = hash; return hash; } - public static flyteidl.admin.Agent.DeleteTaskRequest parseFrom( + public static flyteidl.admin.Agent.Resource parseFrom( java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static flyteidl.admin.Agent.DeleteTaskRequest parseFrom( + public static flyteidl.admin.Agent.Resource parseFrom( java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data, extensionRegistry); } - public static flyteidl.admin.Agent.DeleteTaskRequest parseFrom( + public static flyteidl.admin.Agent.Resource parseFrom( com.google.protobuf.ByteString data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static flyteidl.admin.Agent.DeleteTaskRequest parseFrom( + public static flyteidl.admin.Agent.Resource parseFrom( com.google.protobuf.ByteString data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data, extensionRegistry); } - public static flyteidl.admin.Agent.DeleteTaskRequest parseFrom(byte[] data) + public static flyteidl.admin.Agent.Resource parseFrom(byte[] data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static flyteidl.admin.Agent.DeleteTaskRequest parseFrom( + public static flyteidl.admin.Agent.Resource parseFrom( byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data, extensionRegistry); } - public static flyteidl.admin.Agent.DeleteTaskRequest parseFrom(java.io.InputStream input) + public static flyteidl.admin.Agent.Resource parseFrom(java.io.InputStream input) throws java.io.IOException { return com.google.protobuf.GeneratedMessageV3 .parseWithIOException(PARSER, input); } - public static flyteidl.admin.Agent.DeleteTaskRequest parseFrom( + public static flyteidl.admin.Agent.Resource parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { return com.google.protobuf.GeneratedMessageV3 .parseWithIOException(PARSER, input, extensionRegistry); } - public static flyteidl.admin.Agent.DeleteTaskRequest parseDelimitedFrom(java.io.InputStream input) + public static flyteidl.admin.Agent.Resource parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException { return com.google.protobuf.GeneratedMessageV3 .parseDelimitedWithIOException(PARSER, input); } - public static flyteidl.admin.Agent.DeleteTaskRequest parseDelimitedFrom( + public static flyteidl.admin.Agent.Resource parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { return com.google.protobuf.GeneratedMessageV3 .parseDelimitedWithIOException(PARSER, input, extensionRegistry); } - public static flyteidl.admin.Agent.DeleteTaskRequest parseFrom( + public static flyteidl.admin.Agent.Resource parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { return com.google.protobuf.GeneratedMessageV3 .parseWithIOException(PARSER, input); } - public static flyteidl.admin.Agent.DeleteTaskRequest parseFrom( + public static flyteidl.admin.Agent.Resource parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { @@ -7216,7 +7095,7 @@ public static flyteidl.admin.Agent.DeleteTaskRequest parseFrom( public static Builder newBuilder() { return DEFAULT_INSTANCE.toBuilder(); } - public static Builder newBuilder(flyteidl.admin.Agent.DeleteTaskRequest prototype) { + public static Builder newBuilder(flyteidl.admin.Agent.Resource prototype) { return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); } @java.lang.Override @@ -7232,30 +7111,26 @@ protected Builder newBuilderForType( return builder; } /** - *
-     * A message used to delete a task.
-     * 
- * - * Protobuf type {@code flyteidl.admin.DeleteTaskRequest} + * Protobuf type {@code flyteidl.admin.Resource} */ public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder implements - // @@protoc_insertion_point(builder_implements:flyteidl.admin.DeleteTaskRequest) - flyteidl.admin.Agent.DeleteTaskRequestOrBuilder { + // @@protoc_insertion_point(builder_implements:flyteidl.admin.Resource) + flyteidl.admin.Agent.ResourceOrBuilder { public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { - return flyteidl.admin.Agent.internal_static_flyteidl_admin_DeleteTaskRequest_descriptor; + return flyteidl.admin.Agent.internal_static_flyteidl_admin_Resource_descriptor; } @java.lang.Override protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internalGetFieldAccessorTable() { - return flyteidl.admin.Agent.internal_static_flyteidl_admin_DeleteTaskRequest_fieldAccessorTable + return flyteidl.admin.Agent.internal_static_flyteidl_admin_Resource_fieldAccessorTable .ensureFieldAccessorsInitialized( - flyteidl.admin.Agent.DeleteTaskRequest.class, flyteidl.admin.Agent.DeleteTaskRequest.Builder.class); + flyteidl.admin.Agent.Resource.class, flyteidl.admin.Agent.Resource.Builder.class); } - // Construct using flyteidl.admin.Agent.DeleteTaskRequest.newBuilder() + // Construct using flyteidl.admin.Agent.Resource.newBuilder() private Builder() { maybeForceBuilderInitialization(); } @@ -7273,9 +7148,15 @@ private void maybeForceBuilderInitialization() { @java.lang.Override public Builder clear() { super.clear(); - taskType_ = ""; + state_ = 0; - resourceMeta_ = com.google.protobuf.ByteString.EMPTY; + if (outputsBuilder_ == null) { + outputs_ = null; + } else { + outputs_ = null; + outputsBuilder_ = null; + } + message_ = ""; return this; } @@ -7283,17 +7164,17 @@ public Builder clear() { @java.lang.Override public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { - return flyteidl.admin.Agent.internal_static_flyteidl_admin_DeleteTaskRequest_descriptor; + return flyteidl.admin.Agent.internal_static_flyteidl_admin_Resource_descriptor; } @java.lang.Override - public flyteidl.admin.Agent.DeleteTaskRequest getDefaultInstanceForType() { - return flyteidl.admin.Agent.DeleteTaskRequest.getDefaultInstance(); + public flyteidl.admin.Agent.Resource getDefaultInstanceForType() { + return flyteidl.admin.Agent.Resource.getDefaultInstance(); } @java.lang.Override - public flyteidl.admin.Agent.DeleteTaskRequest build() { - flyteidl.admin.Agent.DeleteTaskRequest result = buildPartial(); + public flyteidl.admin.Agent.Resource build() { + flyteidl.admin.Agent.Resource result = buildPartial(); if (!result.isInitialized()) { throw newUninitializedMessageException(result); } @@ -7301,10 +7182,15 @@ public flyteidl.admin.Agent.DeleteTaskRequest build() { } @java.lang.Override - public flyteidl.admin.Agent.DeleteTaskRequest buildPartial() { - flyteidl.admin.Agent.DeleteTaskRequest result = new flyteidl.admin.Agent.DeleteTaskRequest(this); - result.taskType_ = taskType_; - result.resourceMeta_ = resourceMeta_; + public flyteidl.admin.Agent.Resource buildPartial() { + flyteidl.admin.Agent.Resource result = new flyteidl.admin.Agent.Resource(this); + result.state_ = state_; + if (outputsBuilder_ == null) { + result.outputs_ = outputs_; + } else { + result.outputs_ = outputsBuilder_.build(); + } + result.message_ = message_; onBuilt(); return result; } @@ -7343,22 +7229,25 @@ public Builder addRepeatedField( } @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof flyteidl.admin.Agent.DeleteTaskRequest) { - return mergeFrom((flyteidl.admin.Agent.DeleteTaskRequest)other); + if (other instanceof flyteidl.admin.Agent.Resource) { + return mergeFrom((flyteidl.admin.Agent.Resource)other); } else { super.mergeFrom(other); return this; } } - public Builder mergeFrom(flyteidl.admin.Agent.DeleteTaskRequest other) { - if (other == flyteidl.admin.Agent.DeleteTaskRequest.getDefaultInstance()) return this; - if (!other.getTaskType().isEmpty()) { - taskType_ = other.taskType_; - onChanged(); + public Builder mergeFrom(flyteidl.admin.Agent.Resource other) { + if (other == flyteidl.admin.Agent.Resource.getDefaultInstance()) return this; + if (other.state_ != 0) { + setStateValue(other.getStateValue()); } - if (other.getResourceMeta() != com.google.protobuf.ByteString.EMPTY) { - setResourceMeta(other.getResourceMeta()); + if (other.hasOutputs()) { + mergeOutputs(other.getOutputs()); + } + if (!other.getMessage().isEmpty()) { + message_ = other.message_; + onChanged(); } this.mergeUnknownFields(other.unknownFields); onChanged(); @@ -7375,11 +7264,11 @@ public Builder mergeFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - flyteidl.admin.Agent.DeleteTaskRequest parsedMessage = null; + flyteidl.admin.Agent.Resource parsedMessage = null; try { parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); } catch (com.google.protobuf.InvalidProtocolBufferException e) { - parsedMessage = (flyteidl.admin.Agent.DeleteTaskRequest) e.getUnfinishedMessage(); + parsedMessage = (flyteidl.admin.Agent.Resource) e.getUnfinishedMessage(); throw e.unwrapIOException(); } finally { if (parsedMessage != null) { @@ -7389,140 +7278,335 @@ public Builder mergeFrom( return this; } - private java.lang.Object taskType_ = ""; + private int state_ = 0; /** *
-       * A predefined yet extensible Task type identifier.
+       * The state of the execution is used to control its visibility in the UI/CLI.
        * 
* - * string task_type = 1; + * .flyteidl.admin.State state = 1; */ - public java.lang.String getTaskType() { - java.lang.Object ref = taskType_; - if (!(ref instanceof java.lang.String)) { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - taskType_ = s; - return s; - } else { - return (java.lang.String) ref; - } + public int getStateValue() { + return state_; } /** *
-       * A predefined yet extensible Task type identifier.
+       * The state of the execution is used to control its visibility in the UI/CLI.
        * 
* - * string task_type = 1; + * .flyteidl.admin.State state = 1; */ - public com.google.protobuf.ByteString - getTaskTypeBytes() { - java.lang.Object ref = taskType_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - taskType_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } + public Builder setStateValue(int value) { + state_ = value; + onChanged(); + return this; } /** *
-       * A predefined yet extensible Task type identifier.
+       * The state of the execution is used to control its visibility in the UI/CLI.
        * 
* - * string task_type = 1; + * .flyteidl.admin.State state = 1; */ - public Builder setTaskType( - java.lang.String value) { - if (value == null) { - throw new NullPointerException(); - } - - taskType_ = value; - onChanged(); - return this; + public flyteidl.admin.Agent.State getState() { + @SuppressWarnings("deprecation") + flyteidl.admin.Agent.State result = flyteidl.admin.Agent.State.valueOf(state_); + return result == null ? flyteidl.admin.Agent.State.UNRECOGNIZED : result; } /** *
-       * A predefined yet extensible Task type identifier.
+       * The state of the execution is used to control its visibility in the UI/CLI.
        * 
* - * string task_type = 1; + * .flyteidl.admin.State state = 1; */ - public Builder clearTaskType() { + public Builder setState(flyteidl.admin.Agent.State value) { + if (value == null) { + throw new NullPointerException(); + } - taskType_ = getDefaultInstance().getTaskType(); + state_ = value.getNumber(); onChanged(); return this; } /** *
-       * A predefined yet extensible Task type identifier.
+       * The state of the execution is used to control its visibility in the UI/CLI.
        * 
* - * string task_type = 1; + * .flyteidl.admin.State state = 1; */ - public Builder setTaskTypeBytes( - com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - checkByteStringIsUtf8(value); + public Builder clearState() { - taskType_ = value; + state_ = 0; onChanged(); return this; } - private com.google.protobuf.ByteString resourceMeta_ = com.google.protobuf.ByteString.EMPTY; + private flyteidl.core.Literals.LiteralMap outputs_; + private com.google.protobuf.SingleFieldBuilderV3< + flyteidl.core.Literals.LiteralMap, flyteidl.core.Literals.LiteralMap.Builder, flyteidl.core.Literals.LiteralMapOrBuilder> outputsBuilder_; /** *
-       * Metadata about the resource to be pass to the agent.
+       * The outputs of the execution. It's typically used by sql task. Agent service will create a
+       * Structured dataset pointing to the query result table.
+       * +optional
        * 
* - * bytes resource_meta = 2; + * .flyteidl.core.LiteralMap outputs = 2; */ - public com.google.protobuf.ByteString getResourceMeta() { - return resourceMeta_; + public boolean hasOutputs() { + return outputsBuilder_ != null || outputs_ != null; } /** *
-       * Metadata about the resource to be pass to the agent.
+       * The outputs of the execution. It's typically used by sql task. Agent service will create a
+       * Structured dataset pointing to the query result table.
+       * +optional
        * 
* - * bytes resource_meta = 2; + * .flyteidl.core.LiteralMap outputs = 2; */ - public Builder setResourceMeta(com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - - resourceMeta_ = value; - onChanged(); - return this; + public flyteidl.core.Literals.LiteralMap getOutputs() { + if (outputsBuilder_ == null) { + return outputs_ == null ? flyteidl.core.Literals.LiteralMap.getDefaultInstance() : outputs_; + } else { + return outputsBuilder_.getMessage(); + } } /** *
-       * Metadata about the resource to be pass to the agent.
+       * The outputs of the execution. It's typically used by sql task. Agent service will create a
+       * Structured dataset pointing to the query result table.
+       * +optional
        * 
* - * bytes resource_meta = 2; + * .flyteidl.core.LiteralMap outputs = 2; */ - public Builder clearResourceMeta() { - - resourceMeta_ = getDefaultInstance().getResourceMeta(); - onChanged(); + public Builder setOutputs(flyteidl.core.Literals.LiteralMap value) { + if (outputsBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + outputs_ = value; + onChanged(); + } else { + outputsBuilder_.setMessage(value); + } + return this; } - @java.lang.Override - public final Builder setUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } + /** + *
+       * The outputs of the execution. It's typically used by sql task. Agent service will create a
+       * Structured dataset pointing to the query result table.
+       * +optional
+       * 
+ * + * .flyteidl.core.LiteralMap outputs = 2; + */ + public Builder setOutputs( + flyteidl.core.Literals.LiteralMap.Builder builderForValue) { + if (outputsBuilder_ == null) { + outputs_ = builderForValue.build(); + onChanged(); + } else { + outputsBuilder_.setMessage(builderForValue.build()); + } + + return this; + } + /** + *
+       * The outputs of the execution. It's typically used by sql task. Agent service will create a
+       * Structured dataset pointing to the query result table.
+       * +optional
+       * 
+ * + * .flyteidl.core.LiteralMap outputs = 2; + */ + public Builder mergeOutputs(flyteidl.core.Literals.LiteralMap value) { + if (outputsBuilder_ == null) { + if (outputs_ != null) { + outputs_ = + flyteidl.core.Literals.LiteralMap.newBuilder(outputs_).mergeFrom(value).buildPartial(); + } else { + outputs_ = value; + } + onChanged(); + } else { + outputsBuilder_.mergeFrom(value); + } + + return this; + } + /** + *
+       * The outputs of the execution. It's typically used by sql task. Agent service will create a
+       * Structured dataset pointing to the query result table.
+       * +optional
+       * 
+ * + * .flyteidl.core.LiteralMap outputs = 2; + */ + public Builder clearOutputs() { + if (outputsBuilder_ == null) { + outputs_ = null; + onChanged(); + } else { + outputs_ = null; + outputsBuilder_ = null; + } + + return this; + } + /** + *
+       * The outputs of the execution. It's typically used by sql task. Agent service will create a
+       * Structured dataset pointing to the query result table.
+       * +optional
+       * 
+ * + * .flyteidl.core.LiteralMap outputs = 2; + */ + public flyteidl.core.Literals.LiteralMap.Builder getOutputsBuilder() { + + onChanged(); + return getOutputsFieldBuilder().getBuilder(); + } + /** + *
+       * The outputs of the execution. It's typically used by sql task. Agent service will create a
+       * Structured dataset pointing to the query result table.
+       * +optional
+       * 
+ * + * .flyteidl.core.LiteralMap outputs = 2; + */ + public flyteidl.core.Literals.LiteralMapOrBuilder getOutputsOrBuilder() { + if (outputsBuilder_ != null) { + return outputsBuilder_.getMessageOrBuilder(); + } else { + return outputs_ == null ? + flyteidl.core.Literals.LiteralMap.getDefaultInstance() : outputs_; + } + } + /** + *
+       * The outputs of the execution. It's typically used by sql task. Agent service will create a
+       * Structured dataset pointing to the query result table.
+       * +optional
+       * 
+ * + * .flyteidl.core.LiteralMap outputs = 2; + */ + private com.google.protobuf.SingleFieldBuilderV3< + flyteidl.core.Literals.LiteralMap, flyteidl.core.Literals.LiteralMap.Builder, flyteidl.core.Literals.LiteralMapOrBuilder> + getOutputsFieldBuilder() { + if (outputsBuilder_ == null) { + outputsBuilder_ = new com.google.protobuf.SingleFieldBuilderV3< + flyteidl.core.Literals.LiteralMap, flyteidl.core.Literals.LiteralMap.Builder, flyteidl.core.Literals.LiteralMapOrBuilder>( + getOutputs(), + getParentForChildren(), + isClean()); + outputs_ = null; + } + return outputsBuilder_; + } + + private java.lang.Object message_ = ""; + /** + *
+       * A descriptive message for the current state. e.g. waiting for cluster.
+       * 
+ * + * string message = 3; + */ + public java.lang.String getMessage() { + java.lang.Object ref = message_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + message_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + *
+       * A descriptive message for the current state. e.g. waiting for cluster.
+       * 
+ * + * string message = 3; + */ + public com.google.protobuf.ByteString + getMessageBytes() { + java.lang.Object ref = message_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + message_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + *
+       * A descriptive message for the current state. e.g. waiting for cluster.
+       * 
+ * + * string message = 3; + */ + public Builder setMessage( + java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + + message_ = value; + onChanged(); + return this; + } + /** + *
+       * A descriptive message for the current state. e.g. waiting for cluster.
+       * 
+ * + * string message = 3; + */ + public Builder clearMessage() { + + message_ = getDefaultInstance().getMessage(); + onChanged(); + return this; + } + /** + *
+       * A descriptive message for the current state. e.g. waiting for cluster.
+       * 
+ * + * string message = 3; + */ + public Builder setMessageBytes( + com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + + message_ = value; + onChanged(); + return this; + } + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } @java.lang.Override public final Builder mergeUnknownFields( @@ -7531,67 +7615,96 @@ public final Builder mergeUnknownFields( } - // @@protoc_insertion_point(builder_scope:flyteidl.admin.DeleteTaskRequest) + // @@protoc_insertion_point(builder_scope:flyteidl.admin.Resource) } - // @@protoc_insertion_point(class_scope:flyteidl.admin.DeleteTaskRequest) - private static final flyteidl.admin.Agent.DeleteTaskRequest DEFAULT_INSTANCE; + // @@protoc_insertion_point(class_scope:flyteidl.admin.Resource) + private static final flyteidl.admin.Agent.Resource DEFAULT_INSTANCE; static { - DEFAULT_INSTANCE = new flyteidl.admin.Agent.DeleteTaskRequest(); + DEFAULT_INSTANCE = new flyteidl.admin.Agent.Resource(); } - public static flyteidl.admin.Agent.DeleteTaskRequest getDefaultInstance() { + public static flyteidl.admin.Agent.Resource getDefaultInstance() { return DEFAULT_INSTANCE; } - private static final com.google.protobuf.Parser - PARSER = new com.google.protobuf.AbstractParser() { + private static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { @java.lang.Override - public DeleteTaskRequest parsePartialFrom( + public Resource parsePartialFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { - return new DeleteTaskRequest(input, extensionRegistry); + return new Resource(input, extensionRegistry); } }; - public static com.google.protobuf.Parser parser() { + public static com.google.protobuf.Parser parser() { return PARSER; } @java.lang.Override - public com.google.protobuf.Parser getParserForType() { + public com.google.protobuf.Parser getParserForType() { return PARSER; } @java.lang.Override - public flyteidl.admin.Agent.DeleteTaskRequest getDefaultInstanceForType() { + public flyteidl.admin.Agent.Resource getDefaultInstanceForType() { return DEFAULT_INSTANCE; } } - public interface DeleteTaskResponseOrBuilder extends - // @@protoc_insertion_point(interface_extends:flyteidl.admin.DeleteTaskResponse) + public interface DeleteTaskRequestOrBuilder extends + // @@protoc_insertion_point(interface_extends:flyteidl.admin.DeleteTaskRequest) com.google.protobuf.MessageOrBuilder { + + /** + *
+     * A predefined yet extensible Task type identifier.
+     * 
+ * + * string task_type = 1; + */ + java.lang.String getTaskType(); + /** + *
+     * A predefined yet extensible Task type identifier.
+     * 
+ * + * string task_type = 1; + */ + com.google.protobuf.ByteString + getTaskTypeBytes(); + + /** + *
+     * Metadata about the resource to be pass to the agent.
+     * 
+ * + * bytes resource_meta = 2; + */ + com.google.protobuf.ByteString getResourceMeta(); } /** *
-   * Response to delete a task.
+   * A message used to delete a task.
    * 
* - * Protobuf type {@code flyteidl.admin.DeleteTaskResponse} + * Protobuf type {@code flyteidl.admin.DeleteTaskRequest} */ - public static final class DeleteTaskResponse extends + public static final class DeleteTaskRequest extends com.google.protobuf.GeneratedMessageV3 implements - // @@protoc_insertion_point(message_implements:flyteidl.admin.DeleteTaskResponse) - DeleteTaskResponseOrBuilder { + // @@protoc_insertion_point(message_implements:flyteidl.admin.DeleteTaskRequest) + DeleteTaskRequestOrBuilder { private static final long serialVersionUID = 0L; - // Use DeleteTaskResponse.newBuilder() to construct. - private DeleteTaskResponse(com.google.protobuf.GeneratedMessageV3.Builder builder) { + // Use DeleteTaskRequest.newBuilder() to construct. + private DeleteTaskRequest(com.google.protobuf.GeneratedMessageV3.Builder builder) { super(builder); } - private DeleteTaskResponse() { + private DeleteTaskRequest() { + taskType_ = ""; + resourceMeta_ = com.google.protobuf.ByteString.EMPTY; } @java.lang.Override @@ -7599,7 +7712,7 @@ private DeleteTaskResponse() { getUnknownFields() { return this.unknownFields; } - private DeleteTaskResponse( + private DeleteTaskRequest( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { @@ -7607,6 +7720,7 @@ private DeleteTaskResponse( if (extensionRegistry == null) { throw new java.lang.NullPointerException(); } + int mutable_bitField0_ = 0; com.google.protobuf.UnknownFieldSet.Builder unknownFields = com.google.protobuf.UnknownFieldSet.newBuilder(); try { @@ -7617,6 +7731,17 @@ private DeleteTaskResponse( case 0: done = true; break; + case 10: { + java.lang.String s = input.readStringRequireUtf8(); + + taskType_ = s; + break; + } + case 18: { + + resourceMeta_ = input.readBytes(); + break; + } default: { if (!parseUnknownField( input, unknownFields, extensionRegistry, tag)) { @@ -7638,15 +7763,70 @@ private DeleteTaskResponse( } public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { - return flyteidl.admin.Agent.internal_static_flyteidl_admin_DeleteTaskResponse_descriptor; + return flyteidl.admin.Agent.internal_static_flyteidl_admin_DeleteTaskRequest_descriptor; } @java.lang.Override protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internalGetFieldAccessorTable() { - return flyteidl.admin.Agent.internal_static_flyteidl_admin_DeleteTaskResponse_fieldAccessorTable + return flyteidl.admin.Agent.internal_static_flyteidl_admin_DeleteTaskRequest_fieldAccessorTable .ensureFieldAccessorsInitialized( - flyteidl.admin.Agent.DeleteTaskResponse.class, flyteidl.admin.Agent.DeleteTaskResponse.Builder.class); + flyteidl.admin.Agent.DeleteTaskRequest.class, flyteidl.admin.Agent.DeleteTaskRequest.Builder.class); + } + + public static final int TASK_TYPE_FIELD_NUMBER = 1; + private volatile java.lang.Object taskType_; + /** + *
+     * A predefined yet extensible Task type identifier.
+     * 
+ * + * string task_type = 1; + */ + public java.lang.String getTaskType() { + java.lang.Object ref = taskType_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + taskType_ = s; + return s; + } + } + /** + *
+     * A predefined yet extensible Task type identifier.
+     * 
+ * + * string task_type = 1; + */ + public com.google.protobuf.ByteString + getTaskTypeBytes() { + java.lang.Object ref = taskType_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + taskType_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int RESOURCE_META_FIELD_NUMBER = 2; + private com.google.protobuf.ByteString resourceMeta_; + /** + *
+     * Metadata about the resource to be pass to the agent.
+     * 
+ * + * bytes resource_meta = 2; + */ + public com.google.protobuf.ByteString getResourceMeta() { + return resourceMeta_; } private byte memoizedIsInitialized = -1; @@ -7663,6 +7843,12 @@ public final boolean isInitialized() { @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + if (!getTaskTypeBytes().isEmpty()) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 1, taskType_); + } + if (!resourceMeta_.isEmpty()) { + output.writeBytes(2, resourceMeta_); + } unknownFields.writeTo(output); } @@ -7672,6 +7858,13 @@ public int getSerializedSize() { if (size != -1) return size; size = 0; + if (!getTaskTypeBytes().isEmpty()) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, taskType_); + } + if (!resourceMeta_.isEmpty()) { + size += com.google.protobuf.CodedOutputStream + .computeBytesSize(2, resourceMeta_); + } size += unknownFields.getSerializedSize(); memoizedSize = size; return size; @@ -7682,11 +7875,15 @@ public boolean equals(final java.lang.Object obj) { if (obj == this) { return true; } - if (!(obj instanceof flyteidl.admin.Agent.DeleteTaskResponse)) { + if (!(obj instanceof flyteidl.admin.Agent.DeleteTaskRequest)) { return super.equals(obj); } - flyteidl.admin.Agent.DeleteTaskResponse other = (flyteidl.admin.Agent.DeleteTaskResponse) obj; + flyteidl.admin.Agent.DeleteTaskRequest other = (flyteidl.admin.Agent.DeleteTaskRequest) obj; + if (!getTaskType() + .equals(other.getTaskType())) return false; + if (!getResourceMeta() + .equals(other.getResourceMeta())) return false; if (!unknownFields.equals(other.unknownFields)) return false; return true; } @@ -7698,74 +7895,78 @@ public int hashCode() { } int hash = 41; hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + TASK_TYPE_FIELD_NUMBER; + hash = (53 * hash) + getTaskType().hashCode(); + hash = (37 * hash) + RESOURCE_META_FIELD_NUMBER; + hash = (53 * hash) + getResourceMeta().hashCode(); hash = (29 * hash) + unknownFields.hashCode(); memoizedHashCode = hash; return hash; } - public static flyteidl.admin.Agent.DeleteTaskResponse parseFrom( + public static flyteidl.admin.Agent.DeleteTaskRequest parseFrom( java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static flyteidl.admin.Agent.DeleteTaskResponse parseFrom( + public static flyteidl.admin.Agent.DeleteTaskRequest parseFrom( java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data, extensionRegistry); } - public static flyteidl.admin.Agent.DeleteTaskResponse parseFrom( + public static flyteidl.admin.Agent.DeleteTaskRequest parseFrom( com.google.protobuf.ByteString data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static flyteidl.admin.Agent.DeleteTaskResponse parseFrom( + public static flyteidl.admin.Agent.DeleteTaskRequest parseFrom( com.google.protobuf.ByteString data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data, extensionRegistry); } - public static flyteidl.admin.Agent.DeleteTaskResponse parseFrom(byte[] data) + public static flyteidl.admin.Agent.DeleteTaskRequest parseFrom(byte[] data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static flyteidl.admin.Agent.DeleteTaskResponse parseFrom( + public static flyteidl.admin.Agent.DeleteTaskRequest parseFrom( byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data, extensionRegistry); } - public static flyteidl.admin.Agent.DeleteTaskResponse parseFrom(java.io.InputStream input) + public static flyteidl.admin.Agent.DeleteTaskRequest parseFrom(java.io.InputStream input) throws java.io.IOException { return com.google.protobuf.GeneratedMessageV3 .parseWithIOException(PARSER, input); } - public static flyteidl.admin.Agent.DeleteTaskResponse parseFrom( + public static flyteidl.admin.Agent.DeleteTaskRequest parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { return com.google.protobuf.GeneratedMessageV3 .parseWithIOException(PARSER, input, extensionRegistry); } - public static flyteidl.admin.Agent.DeleteTaskResponse parseDelimitedFrom(java.io.InputStream input) + public static flyteidl.admin.Agent.DeleteTaskRequest parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException { return com.google.protobuf.GeneratedMessageV3 .parseDelimitedWithIOException(PARSER, input); } - public static flyteidl.admin.Agent.DeleteTaskResponse parseDelimitedFrom( + public static flyteidl.admin.Agent.DeleteTaskRequest parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { return com.google.protobuf.GeneratedMessageV3 .parseDelimitedWithIOException(PARSER, input, extensionRegistry); } - public static flyteidl.admin.Agent.DeleteTaskResponse parseFrom( + public static flyteidl.admin.Agent.DeleteTaskRequest parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { return com.google.protobuf.GeneratedMessageV3 .parseWithIOException(PARSER, input); } - public static flyteidl.admin.Agent.DeleteTaskResponse parseFrom( + public static flyteidl.admin.Agent.DeleteTaskRequest parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { @@ -7778,7 +7979,7 @@ public static flyteidl.admin.Agent.DeleteTaskResponse parseFrom( public static Builder newBuilder() { return DEFAULT_INSTANCE.toBuilder(); } - public static Builder newBuilder(flyteidl.admin.Agent.DeleteTaskResponse prototype) { + public static Builder newBuilder(flyteidl.admin.Agent.DeleteTaskRequest prototype) { return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); } @java.lang.Override @@ -7794,1308 +7995,178 @@ protected Builder newBuilderForType( return builder; } /** - *
-     * Response to delete a task.
-     * 
- * - * Protobuf type {@code flyteidl.admin.DeleteTaskResponse} - */ - public static final class Builder extends - com.google.protobuf.GeneratedMessageV3.Builder implements - // @@protoc_insertion_point(builder_implements:flyteidl.admin.DeleteTaskResponse) - flyteidl.admin.Agent.DeleteTaskResponseOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return flyteidl.admin.Agent.internal_static_flyteidl_admin_DeleteTaskResponse_descriptor; - } - - @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return flyteidl.admin.Agent.internal_static_flyteidl_admin_DeleteTaskResponse_fieldAccessorTable - .ensureFieldAccessorsInitialized( - flyteidl.admin.Agent.DeleteTaskResponse.class, flyteidl.admin.Agent.DeleteTaskResponse.Builder.class); - } - - // Construct using flyteidl.admin.Agent.DeleteTaskResponse.newBuilder() - private Builder() { - maybeForceBuilderInitialization(); - } - - private Builder( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - super(parent); - maybeForceBuilderInitialization(); - } - private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3 - .alwaysUseFieldBuilders) { - } - } - @java.lang.Override - public Builder clear() { - super.clear(); - return this; - } - - @java.lang.Override - public com.google.protobuf.Descriptors.Descriptor - getDescriptorForType() { - return flyteidl.admin.Agent.internal_static_flyteidl_admin_DeleteTaskResponse_descriptor; - } - - @java.lang.Override - public flyteidl.admin.Agent.DeleteTaskResponse getDefaultInstanceForType() { - return flyteidl.admin.Agent.DeleteTaskResponse.getDefaultInstance(); - } - - @java.lang.Override - public flyteidl.admin.Agent.DeleteTaskResponse build() { - flyteidl.admin.Agent.DeleteTaskResponse result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - @java.lang.Override - public flyteidl.admin.Agent.DeleteTaskResponse buildPartial() { - flyteidl.admin.Agent.DeleteTaskResponse result = new flyteidl.admin.Agent.DeleteTaskResponse(this); - onBuilt(); - return result; - } - - @java.lang.Override - public Builder clone() { - return super.clone(); - } - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, - java.lang.Object value) { - return super.setField(field, value); - } - @java.lang.Override - public Builder clearField( - com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - @java.lang.Override - public Builder clearOneof( - com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof flyteidl.admin.Agent.DeleteTaskResponse) { - return mergeFrom((flyteidl.admin.Agent.DeleteTaskResponse)other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(flyteidl.admin.Agent.DeleteTaskResponse other) { - if (other == flyteidl.admin.Agent.DeleteTaskResponse.getDefaultInstance()) return this; - this.mergeUnknownFields(other.unknownFields); - onChanged(); - return this; - } - - @java.lang.Override - public final boolean isInitialized() { - return true; - } - - @java.lang.Override - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - flyteidl.admin.Agent.DeleteTaskResponse parsedMessage = null; - try { - parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - parsedMessage = (flyteidl.admin.Agent.DeleteTaskResponse) e.getUnfinishedMessage(); - throw e.unwrapIOException(); - } finally { - if (parsedMessage != null) { - mergeFrom(parsedMessage); - } - } - return this; - } - @java.lang.Override - public final Builder setUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - - - // @@protoc_insertion_point(builder_scope:flyteidl.admin.DeleteTaskResponse) - } - - // @@protoc_insertion_point(class_scope:flyteidl.admin.DeleteTaskResponse) - private static final flyteidl.admin.Agent.DeleteTaskResponse DEFAULT_INSTANCE; - static { - DEFAULT_INSTANCE = new flyteidl.admin.Agent.DeleteTaskResponse(); - } - - public static flyteidl.admin.Agent.DeleteTaskResponse getDefaultInstance() { - return DEFAULT_INSTANCE; - } - - private static final com.google.protobuf.Parser - PARSER = new com.google.protobuf.AbstractParser() { - @java.lang.Override - public DeleteTaskResponse parsePartialFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return new DeleteTaskResponse(input, extensionRegistry); - } - }; - - public static com.google.protobuf.Parser parser() { - return PARSER; - } - - @java.lang.Override - public com.google.protobuf.Parser getParserForType() { - return PARSER; - } - - @java.lang.Override - public flyteidl.admin.Agent.DeleteTaskResponse getDefaultInstanceForType() { - return DEFAULT_INSTANCE; - } - - } - - public interface DoTaskRequestOrBuilder extends - // @@protoc_insertion_point(interface_extends:flyteidl.admin.DoTaskRequest) - com.google.protobuf.MessageOrBuilder { - - /** - *
-     * The inputs required to start the execution. All required inputs must be
-     * included in this map. If not required and not provided, defaults apply.
-     * +optional
-     * 
- * - * .flyteidl.core.LiteralMap inputs = 1; - */ - boolean hasInputs(); - /** - *
-     * The inputs required to start the execution. All required inputs must be
-     * included in this map. If not required and not provided, defaults apply.
-     * +optional
-     * 
- * - * .flyteidl.core.LiteralMap inputs = 1; - */ - flyteidl.core.Literals.LiteralMap getInputs(); - /** - *
-     * The inputs required to start the execution. All required inputs must be
-     * included in this map. If not required and not provided, defaults apply.
-     * +optional
-     * 
- * - * .flyteidl.core.LiteralMap inputs = 1; - */ - flyteidl.core.Literals.LiteralMapOrBuilder getInputsOrBuilder(); - - /** - *
-     * Template of the task that encapsulates all the metadata of the task.
-     * 
- * - * .flyteidl.core.TaskTemplate template = 2; - */ - boolean hasTemplate(); - /** - *
-     * Template of the task that encapsulates all the metadata of the task.
-     * 
- * - * .flyteidl.core.TaskTemplate template = 2; - */ - flyteidl.core.Tasks.TaskTemplate getTemplate(); - /** - *
-     * Template of the task that encapsulates all the metadata of the task.
-     * 
- * - * .flyteidl.core.TaskTemplate template = 2; - */ - flyteidl.core.Tasks.TaskTemplateOrBuilder getTemplateOrBuilder(); - - /** - *
-     * Prefix for where task output data will be written. (e.g. s3://my-bucket/randomstring)
-     * 
- * - * string output_prefix = 3; - */ - java.lang.String getOutputPrefix(); - /** - *
-     * Prefix for where task output data will be written. (e.g. s3://my-bucket/randomstring)
-     * 
- * - * string output_prefix = 3; - */ - com.google.protobuf.ByteString - getOutputPrefixBytes(); - - /** - *
-     * subset of runtime task execution metadata.
-     * 
- * - * .flyteidl.admin.TaskExecutionMetadata task_execution_metadata = 4; - */ - boolean hasTaskExecutionMetadata(); - /** - *
-     * subset of runtime task execution metadata.
-     * 
- * - * .flyteidl.admin.TaskExecutionMetadata task_execution_metadata = 4; - */ - flyteidl.admin.Agent.TaskExecutionMetadata getTaskExecutionMetadata(); - /** - *
-     * subset of runtime task execution metadata.
-     * 
- * - * .flyteidl.admin.TaskExecutionMetadata task_execution_metadata = 4; - */ - flyteidl.admin.Agent.TaskExecutionMetadataOrBuilder getTaskExecutionMetadataOrBuilder(); - } - /** - *
-   * A message used to do a task
-   * 
- * - * Protobuf type {@code flyteidl.admin.DoTaskRequest} - */ - public static final class DoTaskRequest extends - com.google.protobuf.GeneratedMessageV3 implements - // @@protoc_insertion_point(message_implements:flyteidl.admin.DoTaskRequest) - DoTaskRequestOrBuilder { - private static final long serialVersionUID = 0L; - // Use DoTaskRequest.newBuilder() to construct. - private DoTaskRequest(com.google.protobuf.GeneratedMessageV3.Builder builder) { - super(builder); - } - private DoTaskRequest() { - outputPrefix_ = ""; - } - - @java.lang.Override - public final com.google.protobuf.UnknownFieldSet - getUnknownFields() { - return this.unknownFields; - } - private DoTaskRequest( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - this(); - if (extensionRegistry == null) { - throw new java.lang.NullPointerException(); - } - int mutable_bitField0_ = 0; - com.google.protobuf.UnknownFieldSet.Builder unknownFields = - com.google.protobuf.UnknownFieldSet.newBuilder(); - try { - boolean done = false; - while (!done) { - int tag = input.readTag(); - switch (tag) { - case 0: - done = true; - break; - case 10: { - flyteidl.core.Literals.LiteralMap.Builder subBuilder = null; - if (inputs_ != null) { - subBuilder = inputs_.toBuilder(); - } - inputs_ = input.readMessage(flyteidl.core.Literals.LiteralMap.parser(), extensionRegistry); - if (subBuilder != null) { - subBuilder.mergeFrom(inputs_); - inputs_ = subBuilder.buildPartial(); - } - - break; - } - case 18: { - flyteidl.core.Tasks.TaskTemplate.Builder subBuilder = null; - if (template_ != null) { - subBuilder = template_.toBuilder(); - } - template_ = input.readMessage(flyteidl.core.Tasks.TaskTemplate.parser(), extensionRegistry); - if (subBuilder != null) { - subBuilder.mergeFrom(template_); - template_ = subBuilder.buildPartial(); - } - - break; - } - case 26: { - java.lang.String s = input.readStringRequireUtf8(); - - outputPrefix_ = s; - break; - } - case 34: { - flyteidl.admin.Agent.TaskExecutionMetadata.Builder subBuilder = null; - if (taskExecutionMetadata_ != null) { - subBuilder = taskExecutionMetadata_.toBuilder(); - } - taskExecutionMetadata_ = input.readMessage(flyteidl.admin.Agent.TaskExecutionMetadata.parser(), extensionRegistry); - if (subBuilder != null) { - subBuilder.mergeFrom(taskExecutionMetadata_); - taskExecutionMetadata_ = subBuilder.buildPartial(); - } - - break; - } - default: { - if (!parseUnknownField( - input, unknownFields, extensionRegistry, tag)) { - done = true; - } - break; - } - } - } - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.setUnfinishedMessage(this); - } catch (java.io.IOException e) { - throw new com.google.protobuf.InvalidProtocolBufferException( - e).setUnfinishedMessage(this); - } finally { - this.unknownFields = unknownFields.build(); - makeExtensionsImmutable(); - } - } - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return flyteidl.admin.Agent.internal_static_flyteidl_admin_DoTaskRequest_descriptor; - } - - @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return flyteidl.admin.Agent.internal_static_flyteidl_admin_DoTaskRequest_fieldAccessorTable - .ensureFieldAccessorsInitialized( - flyteidl.admin.Agent.DoTaskRequest.class, flyteidl.admin.Agent.DoTaskRequest.Builder.class); - } - - public static final int INPUTS_FIELD_NUMBER = 1; - private flyteidl.core.Literals.LiteralMap inputs_; - /** - *
-     * The inputs required to start the execution. All required inputs must be
-     * included in this map. If not required and not provided, defaults apply.
-     * +optional
-     * 
- * - * .flyteidl.core.LiteralMap inputs = 1; - */ - public boolean hasInputs() { - return inputs_ != null; - } - /** - *
-     * The inputs required to start the execution. All required inputs must be
-     * included in this map. If not required and not provided, defaults apply.
-     * +optional
-     * 
- * - * .flyteidl.core.LiteralMap inputs = 1; - */ - public flyteidl.core.Literals.LiteralMap getInputs() { - return inputs_ == null ? flyteidl.core.Literals.LiteralMap.getDefaultInstance() : inputs_; - } - /** - *
-     * The inputs required to start the execution. All required inputs must be
-     * included in this map. If not required and not provided, defaults apply.
-     * +optional
-     * 
- * - * .flyteidl.core.LiteralMap inputs = 1; - */ - public flyteidl.core.Literals.LiteralMapOrBuilder getInputsOrBuilder() { - return getInputs(); - } - - public static final int TEMPLATE_FIELD_NUMBER = 2; - private flyteidl.core.Tasks.TaskTemplate template_; - /** - *
-     * Template of the task that encapsulates all the metadata of the task.
-     * 
- * - * .flyteidl.core.TaskTemplate template = 2; - */ - public boolean hasTemplate() { - return template_ != null; - } - /** - *
-     * Template of the task that encapsulates all the metadata of the task.
-     * 
- * - * .flyteidl.core.TaskTemplate template = 2; - */ - public flyteidl.core.Tasks.TaskTemplate getTemplate() { - return template_ == null ? flyteidl.core.Tasks.TaskTemplate.getDefaultInstance() : template_; - } - /** - *
-     * Template of the task that encapsulates all the metadata of the task.
-     * 
- * - * .flyteidl.core.TaskTemplate template = 2; - */ - public flyteidl.core.Tasks.TaskTemplateOrBuilder getTemplateOrBuilder() { - return getTemplate(); - } - - public static final int OUTPUT_PREFIX_FIELD_NUMBER = 3; - private volatile java.lang.Object outputPrefix_; - /** - *
-     * Prefix for where task output data will be written. (e.g. s3://my-bucket/randomstring)
-     * 
- * - * string output_prefix = 3; - */ - public java.lang.String getOutputPrefix() { - java.lang.Object ref = outputPrefix_; - if (ref instanceof java.lang.String) { - return (java.lang.String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - outputPrefix_ = s; - return s; - } - } - /** - *
-     * Prefix for where task output data will be written. (e.g. s3://my-bucket/randomstring)
-     * 
- * - * string output_prefix = 3; - */ - public com.google.protobuf.ByteString - getOutputPrefixBytes() { - java.lang.Object ref = outputPrefix_; - if (ref instanceof java.lang.String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - outputPrefix_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - public static final int TASK_EXECUTION_METADATA_FIELD_NUMBER = 4; - private flyteidl.admin.Agent.TaskExecutionMetadata taskExecutionMetadata_; - /** - *
-     * subset of runtime task execution metadata.
-     * 
- * - * .flyteidl.admin.TaskExecutionMetadata task_execution_metadata = 4; - */ - public boolean hasTaskExecutionMetadata() { - return taskExecutionMetadata_ != null; - } - /** - *
-     * subset of runtime task execution metadata.
-     * 
- * - * .flyteidl.admin.TaskExecutionMetadata task_execution_metadata = 4; - */ - public flyteidl.admin.Agent.TaskExecutionMetadata getTaskExecutionMetadata() { - return taskExecutionMetadata_ == null ? flyteidl.admin.Agent.TaskExecutionMetadata.getDefaultInstance() : taskExecutionMetadata_; - } - /** - *
-     * subset of runtime task execution metadata.
-     * 
- * - * .flyteidl.admin.TaskExecutionMetadata task_execution_metadata = 4; - */ - public flyteidl.admin.Agent.TaskExecutionMetadataOrBuilder getTaskExecutionMetadataOrBuilder() { - return getTaskExecutionMetadata(); - } - - private byte memoizedIsInitialized = -1; - @java.lang.Override - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized == 1) return true; - if (isInitialized == 0) return false; - - memoizedIsInitialized = 1; - return true; - } - - @java.lang.Override - public void writeTo(com.google.protobuf.CodedOutputStream output) - throws java.io.IOException { - if (inputs_ != null) { - output.writeMessage(1, getInputs()); - } - if (template_ != null) { - output.writeMessage(2, getTemplate()); - } - if (!getOutputPrefixBytes().isEmpty()) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 3, outputPrefix_); - } - if (taskExecutionMetadata_ != null) { - output.writeMessage(4, getTaskExecutionMetadata()); - } - unknownFields.writeTo(output); - } - - @java.lang.Override - public int getSerializedSize() { - int size = memoizedSize; - if (size != -1) return size; - - size = 0; - if (inputs_ != null) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(1, getInputs()); - } - if (template_ != null) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(2, getTemplate()); - } - if (!getOutputPrefixBytes().isEmpty()) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, outputPrefix_); - } - if (taskExecutionMetadata_ != null) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(4, getTaskExecutionMetadata()); - } - size += unknownFields.getSerializedSize(); - memoizedSize = size; - return size; - } - - @java.lang.Override - public boolean equals(final java.lang.Object obj) { - if (obj == this) { - return true; - } - if (!(obj instanceof flyteidl.admin.Agent.DoTaskRequest)) { - return super.equals(obj); - } - flyteidl.admin.Agent.DoTaskRequest other = (flyteidl.admin.Agent.DoTaskRequest) obj; - - if (hasInputs() != other.hasInputs()) return false; - if (hasInputs()) { - if (!getInputs() - .equals(other.getInputs())) return false; - } - if (hasTemplate() != other.hasTemplate()) return false; - if (hasTemplate()) { - if (!getTemplate() - .equals(other.getTemplate())) return false; - } - if (!getOutputPrefix() - .equals(other.getOutputPrefix())) return false; - if (hasTaskExecutionMetadata() != other.hasTaskExecutionMetadata()) return false; - if (hasTaskExecutionMetadata()) { - if (!getTaskExecutionMetadata() - .equals(other.getTaskExecutionMetadata())) return false; - } - if (!unknownFields.equals(other.unknownFields)) return false; - return true; - } - - @java.lang.Override - public int hashCode() { - if (memoizedHashCode != 0) { - return memoizedHashCode; - } - int hash = 41; - hash = (19 * hash) + getDescriptor().hashCode(); - if (hasInputs()) { - hash = (37 * hash) + INPUTS_FIELD_NUMBER; - hash = (53 * hash) + getInputs().hashCode(); - } - if (hasTemplate()) { - hash = (37 * hash) + TEMPLATE_FIELD_NUMBER; - hash = (53 * hash) + getTemplate().hashCode(); - } - hash = (37 * hash) + OUTPUT_PREFIX_FIELD_NUMBER; - hash = (53 * hash) + getOutputPrefix().hashCode(); - if (hasTaskExecutionMetadata()) { - hash = (37 * hash) + TASK_EXECUTION_METADATA_FIELD_NUMBER; - hash = (53 * hash) + getTaskExecutionMetadata().hashCode(); - } - hash = (29 * hash) + unknownFields.hashCode(); - memoizedHashCode = hash; - return hash; - } - - public static flyteidl.admin.Agent.DoTaskRequest parseFrom( - java.nio.ByteBuffer data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static flyteidl.admin.Agent.DoTaskRequest parseFrom( - java.nio.ByteBuffer data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static flyteidl.admin.Agent.DoTaskRequest parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static flyteidl.admin.Agent.DoTaskRequest parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static flyteidl.admin.Agent.DoTaskRequest parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static flyteidl.admin.Agent.DoTaskRequest parseFrom( - byte[] data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static flyteidl.admin.Agent.DoTaskRequest parseFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static flyteidl.admin.Agent.DoTaskRequest parseFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - public static flyteidl.admin.Agent.DoTaskRequest parseDelimitedFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input); - } - public static flyteidl.admin.Agent.DoTaskRequest parseDelimitedFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input, extensionRegistry); - } - public static flyteidl.admin.Agent.DoTaskRequest parseFrom( - com.google.protobuf.CodedInputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static flyteidl.admin.Agent.DoTaskRequest parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - - @java.lang.Override - public Builder newBuilderForType() { return newBuilder(); } - public static Builder newBuilder() { - return DEFAULT_INSTANCE.toBuilder(); - } - public static Builder newBuilder(flyteidl.admin.Agent.DoTaskRequest prototype) { - return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); - } - @java.lang.Override - public Builder toBuilder() { - return this == DEFAULT_INSTANCE - ? new Builder() : new Builder().mergeFrom(this); - } - - @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } - /** - *
-     * A message used to do a task
-     * 
- * - * Protobuf type {@code flyteidl.admin.DoTaskRequest} - */ - public static final class Builder extends - com.google.protobuf.GeneratedMessageV3.Builder implements - // @@protoc_insertion_point(builder_implements:flyteidl.admin.DoTaskRequest) - flyteidl.admin.Agent.DoTaskRequestOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return flyteidl.admin.Agent.internal_static_flyteidl_admin_DoTaskRequest_descriptor; - } - - @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return flyteidl.admin.Agent.internal_static_flyteidl_admin_DoTaskRequest_fieldAccessorTable - .ensureFieldAccessorsInitialized( - flyteidl.admin.Agent.DoTaskRequest.class, flyteidl.admin.Agent.DoTaskRequest.Builder.class); - } - - // Construct using flyteidl.admin.Agent.DoTaskRequest.newBuilder() - private Builder() { - maybeForceBuilderInitialization(); - } - - private Builder( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - super(parent); - maybeForceBuilderInitialization(); - } - private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3 - .alwaysUseFieldBuilders) { - } - } - @java.lang.Override - public Builder clear() { - super.clear(); - if (inputsBuilder_ == null) { - inputs_ = null; - } else { - inputs_ = null; - inputsBuilder_ = null; - } - if (templateBuilder_ == null) { - template_ = null; - } else { - template_ = null; - templateBuilder_ = null; - } - outputPrefix_ = ""; - - if (taskExecutionMetadataBuilder_ == null) { - taskExecutionMetadata_ = null; - } else { - taskExecutionMetadata_ = null; - taskExecutionMetadataBuilder_ = null; - } - return this; - } - - @java.lang.Override - public com.google.protobuf.Descriptors.Descriptor - getDescriptorForType() { - return flyteidl.admin.Agent.internal_static_flyteidl_admin_DoTaskRequest_descriptor; - } - - @java.lang.Override - public flyteidl.admin.Agent.DoTaskRequest getDefaultInstanceForType() { - return flyteidl.admin.Agent.DoTaskRequest.getDefaultInstance(); - } - - @java.lang.Override - public flyteidl.admin.Agent.DoTaskRequest build() { - flyteidl.admin.Agent.DoTaskRequest result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - @java.lang.Override - public flyteidl.admin.Agent.DoTaskRequest buildPartial() { - flyteidl.admin.Agent.DoTaskRequest result = new flyteidl.admin.Agent.DoTaskRequest(this); - if (inputsBuilder_ == null) { - result.inputs_ = inputs_; - } else { - result.inputs_ = inputsBuilder_.build(); - } - if (templateBuilder_ == null) { - result.template_ = template_; - } else { - result.template_ = templateBuilder_.build(); - } - result.outputPrefix_ = outputPrefix_; - if (taskExecutionMetadataBuilder_ == null) { - result.taskExecutionMetadata_ = taskExecutionMetadata_; - } else { - result.taskExecutionMetadata_ = taskExecutionMetadataBuilder_.build(); - } - onBuilt(); - return result; - } - - @java.lang.Override - public Builder clone() { - return super.clone(); - } - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, - java.lang.Object value) { - return super.setField(field, value); - } - @java.lang.Override - public Builder clearField( - com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - @java.lang.Override - public Builder clearOneof( - com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof flyteidl.admin.Agent.DoTaskRequest) { - return mergeFrom((flyteidl.admin.Agent.DoTaskRequest)other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(flyteidl.admin.Agent.DoTaskRequest other) { - if (other == flyteidl.admin.Agent.DoTaskRequest.getDefaultInstance()) return this; - if (other.hasInputs()) { - mergeInputs(other.getInputs()); - } - if (other.hasTemplate()) { - mergeTemplate(other.getTemplate()); - } - if (!other.getOutputPrefix().isEmpty()) { - outputPrefix_ = other.outputPrefix_; - onChanged(); - } - if (other.hasTaskExecutionMetadata()) { - mergeTaskExecutionMetadata(other.getTaskExecutionMetadata()); - } - this.mergeUnknownFields(other.unknownFields); - onChanged(); - return this; - } - - @java.lang.Override - public final boolean isInitialized() { - return true; - } - - @java.lang.Override - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - flyteidl.admin.Agent.DoTaskRequest parsedMessage = null; - try { - parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - parsedMessage = (flyteidl.admin.Agent.DoTaskRequest) e.getUnfinishedMessage(); - throw e.unwrapIOException(); - } finally { - if (parsedMessage != null) { - mergeFrom(parsedMessage); - } - } - return this; - } - - private flyteidl.core.Literals.LiteralMap inputs_; - private com.google.protobuf.SingleFieldBuilderV3< - flyteidl.core.Literals.LiteralMap, flyteidl.core.Literals.LiteralMap.Builder, flyteidl.core.Literals.LiteralMapOrBuilder> inputsBuilder_; - /** - *
-       * The inputs required to start the execution. All required inputs must be
-       * included in this map. If not required and not provided, defaults apply.
-       * +optional
-       * 
- * - * .flyteidl.core.LiteralMap inputs = 1; - */ - public boolean hasInputs() { - return inputsBuilder_ != null || inputs_ != null; - } - /** - *
-       * The inputs required to start the execution. All required inputs must be
-       * included in this map. If not required and not provided, defaults apply.
-       * +optional
-       * 
- * - * .flyteidl.core.LiteralMap inputs = 1; - */ - public flyteidl.core.Literals.LiteralMap getInputs() { - if (inputsBuilder_ == null) { - return inputs_ == null ? flyteidl.core.Literals.LiteralMap.getDefaultInstance() : inputs_; - } else { - return inputsBuilder_.getMessage(); - } - } - /** - *
-       * The inputs required to start the execution. All required inputs must be
-       * included in this map. If not required and not provided, defaults apply.
-       * +optional
-       * 
- * - * .flyteidl.core.LiteralMap inputs = 1; - */ - public Builder setInputs(flyteidl.core.Literals.LiteralMap value) { - if (inputsBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - inputs_ = value; - onChanged(); - } else { - inputsBuilder_.setMessage(value); - } - - return this; - } - /** - *
-       * The inputs required to start the execution. All required inputs must be
-       * included in this map. If not required and not provided, defaults apply.
-       * +optional
-       * 
- * - * .flyteidl.core.LiteralMap inputs = 1; - */ - public Builder setInputs( - flyteidl.core.Literals.LiteralMap.Builder builderForValue) { - if (inputsBuilder_ == null) { - inputs_ = builderForValue.build(); - onChanged(); - } else { - inputsBuilder_.setMessage(builderForValue.build()); - } - - return this; - } - /** - *
-       * The inputs required to start the execution. All required inputs must be
-       * included in this map. If not required and not provided, defaults apply.
-       * +optional
-       * 
- * - * .flyteidl.core.LiteralMap inputs = 1; - */ - public Builder mergeInputs(flyteidl.core.Literals.LiteralMap value) { - if (inputsBuilder_ == null) { - if (inputs_ != null) { - inputs_ = - flyteidl.core.Literals.LiteralMap.newBuilder(inputs_).mergeFrom(value).buildPartial(); - } else { - inputs_ = value; - } - onChanged(); - } else { - inputsBuilder_.mergeFrom(value); - } - - return this; - } - /** - *
-       * The inputs required to start the execution. All required inputs must be
-       * included in this map. If not required and not provided, defaults apply.
-       * +optional
-       * 
- * - * .flyteidl.core.LiteralMap inputs = 1; - */ - public Builder clearInputs() { - if (inputsBuilder_ == null) { - inputs_ = null; - onChanged(); - } else { - inputs_ = null; - inputsBuilder_ = null; - } - - return this; - } - /** - *
-       * The inputs required to start the execution. All required inputs must be
-       * included in this map. If not required and not provided, defaults apply.
-       * +optional
-       * 
- * - * .flyteidl.core.LiteralMap inputs = 1; - */ - public flyteidl.core.Literals.LiteralMap.Builder getInputsBuilder() { - - onChanged(); - return getInputsFieldBuilder().getBuilder(); - } - /** - *
-       * The inputs required to start the execution. All required inputs must be
-       * included in this map. If not required and not provided, defaults apply.
-       * +optional
-       * 
- * - * .flyteidl.core.LiteralMap inputs = 1; - */ - public flyteidl.core.Literals.LiteralMapOrBuilder getInputsOrBuilder() { - if (inputsBuilder_ != null) { - return inputsBuilder_.getMessageOrBuilder(); - } else { - return inputs_ == null ? - flyteidl.core.Literals.LiteralMap.getDefaultInstance() : inputs_; - } + *
+     * A message used to delete a task.
+     * 
+ * + * Protobuf type {@code flyteidl.admin.DeleteTaskRequest} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageV3.Builder implements + // @@protoc_insertion_point(builder_implements:flyteidl.admin.DeleteTaskRequest) + flyteidl.admin.Agent.DeleteTaskRequestOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return flyteidl.admin.Agent.internal_static_flyteidl_admin_DeleteTaskRequest_descriptor; } - /** - *
-       * The inputs required to start the execution. All required inputs must be
-       * included in this map. If not required and not provided, defaults apply.
-       * +optional
-       * 
- * - * .flyteidl.core.LiteralMap inputs = 1; - */ - private com.google.protobuf.SingleFieldBuilderV3< - flyteidl.core.Literals.LiteralMap, flyteidl.core.Literals.LiteralMap.Builder, flyteidl.core.Literals.LiteralMapOrBuilder> - getInputsFieldBuilder() { - if (inputsBuilder_ == null) { - inputsBuilder_ = new com.google.protobuf.SingleFieldBuilderV3< - flyteidl.core.Literals.LiteralMap, flyteidl.core.Literals.LiteralMap.Builder, flyteidl.core.Literals.LiteralMapOrBuilder>( - getInputs(), - getParentForChildren(), - isClean()); - inputs_ = null; - } - return inputsBuilder_; + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return flyteidl.admin.Agent.internal_static_flyteidl_admin_DeleteTaskRequest_fieldAccessorTable + .ensureFieldAccessorsInitialized( + flyteidl.admin.Agent.DeleteTaskRequest.class, flyteidl.admin.Agent.DeleteTaskRequest.Builder.class); } - private flyteidl.core.Tasks.TaskTemplate template_; - private com.google.protobuf.SingleFieldBuilderV3< - flyteidl.core.Tasks.TaskTemplate, flyteidl.core.Tasks.TaskTemplate.Builder, flyteidl.core.Tasks.TaskTemplateOrBuilder> templateBuilder_; - /** - *
-       * Template of the task that encapsulates all the metadata of the task.
-       * 
- * - * .flyteidl.core.TaskTemplate template = 2; - */ - public boolean hasTemplate() { - return templateBuilder_ != null || template_ != null; + // Construct using flyteidl.admin.Agent.DeleteTaskRequest.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); } - /** - *
-       * Template of the task that encapsulates all the metadata of the task.
-       * 
- * - * .flyteidl.core.TaskTemplate template = 2; - */ - public flyteidl.core.Tasks.TaskTemplate getTemplate() { - if (templateBuilder_ == null) { - return template_ == null ? flyteidl.core.Tasks.TaskTemplate.getDefaultInstance() : template_; - } else { - return templateBuilder_.getMessage(); - } + + private Builder( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); } - /** - *
-       * Template of the task that encapsulates all the metadata of the task.
-       * 
- * - * .flyteidl.core.TaskTemplate template = 2; - */ - public Builder setTemplate(flyteidl.core.Tasks.TaskTemplate value) { - if (templateBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - template_ = value; - onChanged(); - } else { - templateBuilder_.setMessage(value); + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessageV3 + .alwaysUseFieldBuilders) { } + } + @java.lang.Override + public Builder clear() { + super.clear(); + taskType_ = ""; + + resourceMeta_ = com.google.protobuf.ByteString.EMPTY; return this; } - /** - *
-       * Template of the task that encapsulates all the metadata of the task.
-       * 
- * - * .flyteidl.core.TaskTemplate template = 2; - */ - public Builder setTemplate( - flyteidl.core.Tasks.TaskTemplate.Builder builderForValue) { - if (templateBuilder_ == null) { - template_ = builderForValue.build(); - onChanged(); - } else { - templateBuilder_.setMessage(builderForValue.build()); - } - return this; + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return flyteidl.admin.Agent.internal_static_flyteidl_admin_DeleteTaskRequest_descriptor; } - /** - *
-       * Template of the task that encapsulates all the metadata of the task.
-       * 
- * - * .flyteidl.core.TaskTemplate template = 2; - */ - public Builder mergeTemplate(flyteidl.core.Tasks.TaskTemplate value) { - if (templateBuilder_ == null) { - if (template_ != null) { - template_ = - flyteidl.core.Tasks.TaskTemplate.newBuilder(template_).mergeFrom(value).buildPartial(); - } else { - template_ = value; - } - onChanged(); - } else { - templateBuilder_.mergeFrom(value); - } - return this; + @java.lang.Override + public flyteidl.admin.Agent.DeleteTaskRequest getDefaultInstanceForType() { + return flyteidl.admin.Agent.DeleteTaskRequest.getDefaultInstance(); } - /** - *
-       * Template of the task that encapsulates all the metadata of the task.
-       * 
- * - * .flyteidl.core.TaskTemplate template = 2; - */ - public Builder clearTemplate() { - if (templateBuilder_ == null) { - template_ = null; - onChanged(); - } else { - template_ = null; - templateBuilder_ = null; + + @java.lang.Override + public flyteidl.admin.Agent.DeleteTaskRequest build() { + flyteidl.admin.Agent.DeleteTaskRequest result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); } + return result; + } - return this; + @java.lang.Override + public flyteidl.admin.Agent.DeleteTaskRequest buildPartial() { + flyteidl.admin.Agent.DeleteTaskRequest result = new flyteidl.admin.Agent.DeleteTaskRequest(this); + result.taskType_ = taskType_; + result.resourceMeta_ = resourceMeta_; + onBuilt(); + return result; } - /** - *
-       * Template of the task that encapsulates all the metadata of the task.
-       * 
- * - * .flyteidl.core.TaskTemplate template = 2; - */ - public flyteidl.core.Tasks.TaskTemplate.Builder getTemplateBuilder() { - - onChanged(); - return getTemplateFieldBuilder().getBuilder(); + + @java.lang.Override + public Builder clone() { + return super.clone(); } - /** - *
-       * Template of the task that encapsulates all the metadata of the task.
-       * 
- * - * .flyteidl.core.TaskTemplate template = 2; - */ - public flyteidl.core.Tasks.TaskTemplateOrBuilder getTemplateOrBuilder() { - if (templateBuilder_ != null) { - return templateBuilder_.getMessageOrBuilder(); + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.setField(field, value); + } + @java.lang.Override + public Builder clearField( + com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + @java.lang.Override + public Builder clearOneof( + com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + int index, java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.addRepeatedField(field, value); + } + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof flyteidl.admin.Agent.DeleteTaskRequest) { + return mergeFrom((flyteidl.admin.Agent.DeleteTaskRequest)other); } else { - return template_ == null ? - flyteidl.core.Tasks.TaskTemplate.getDefaultInstance() : template_; + super.mergeFrom(other); + return this; } } - /** - *
-       * Template of the task that encapsulates all the metadata of the task.
-       * 
- * - * .flyteidl.core.TaskTemplate template = 2; - */ - private com.google.protobuf.SingleFieldBuilderV3< - flyteidl.core.Tasks.TaskTemplate, flyteidl.core.Tasks.TaskTemplate.Builder, flyteidl.core.Tasks.TaskTemplateOrBuilder> - getTemplateFieldBuilder() { - if (templateBuilder_ == null) { - templateBuilder_ = new com.google.protobuf.SingleFieldBuilderV3< - flyteidl.core.Tasks.TaskTemplate, flyteidl.core.Tasks.TaskTemplate.Builder, flyteidl.core.Tasks.TaskTemplateOrBuilder>( - getTemplate(), - getParentForChildren(), - isClean()); - template_ = null; + + public Builder mergeFrom(flyteidl.admin.Agent.DeleteTaskRequest other) { + if (other == flyteidl.admin.Agent.DeleteTaskRequest.getDefaultInstance()) return this; + if (!other.getTaskType().isEmpty()) { + taskType_ = other.taskType_; + onChanged(); } - return templateBuilder_; + if (other.getResourceMeta() != com.google.protobuf.ByteString.EMPTY) { + setResourceMeta(other.getResourceMeta()); + } + this.mergeUnknownFields(other.unknownFields); + onChanged(); + return this; } - private java.lang.Object outputPrefix_ = ""; + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + flyteidl.admin.Agent.DeleteTaskRequest parsedMessage = null; + try { + parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + parsedMessage = (flyteidl.admin.Agent.DeleteTaskRequest) e.getUnfinishedMessage(); + throw e.unwrapIOException(); + } finally { + if (parsedMessage != null) { + mergeFrom(parsedMessage); + } + } + return this; + } + + private java.lang.Object taskType_ = ""; /** *
-       * Prefix for where task output data will be written. (e.g. s3://my-bucket/randomstring)
+       * A predefined yet extensible Task type identifier.
        * 
* - * string output_prefix = 3; + * string task_type = 1; */ - public java.lang.String getOutputPrefix() { - java.lang.Object ref = outputPrefix_; + public java.lang.String getTaskType() { + java.lang.Object ref = taskType_; if (!(ref instanceof java.lang.String)) { com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; java.lang.String s = bs.toStringUtf8(); - outputPrefix_ = s; + taskType_ = s; return s; } else { return (java.lang.String) ref; @@ -9103,19 +8174,19 @@ public java.lang.String getOutputPrefix() { } /** *
-       * Prefix for where task output data will be written. (e.g. s3://my-bucket/randomstring)
+       * A predefined yet extensible Task type identifier.
        * 
* - * string output_prefix = 3; + * string task_type = 1; */ public com.google.protobuf.ByteString - getOutputPrefixBytes() { - java.lang.Object ref = outputPrefix_; + getTaskTypeBytes() { + java.lang.Object ref = taskType_; if (ref instanceof String) { com.google.protobuf.ByteString b = com.google.protobuf.ByteString.copyFromUtf8( (java.lang.String) ref); - outputPrefix_ = b; + taskType_ = b; return b; } else { return (com.google.protobuf.ByteString) ref; @@ -9123,204 +8194,92 @@ public java.lang.String getOutputPrefix() { } /** *
-       * Prefix for where task output data will be written. (e.g. s3://my-bucket/randomstring)
+       * A predefined yet extensible Task type identifier.
        * 
* - * string output_prefix = 3; + * string task_type = 1; */ - public Builder setOutputPrefix( + public Builder setTaskType( java.lang.String value) { if (value == null) { throw new NullPointerException(); } - outputPrefix_ = value; + taskType_ = value; onChanged(); return this; } /** *
-       * Prefix for where task output data will be written. (e.g. s3://my-bucket/randomstring)
+       * A predefined yet extensible Task type identifier.
        * 
* - * string output_prefix = 3; + * string task_type = 1; */ - public Builder clearOutputPrefix() { + public Builder clearTaskType() { - outputPrefix_ = getDefaultInstance().getOutputPrefix(); + taskType_ = getDefaultInstance().getTaskType(); onChanged(); return this; } /** *
-       * Prefix for where task output data will be written. (e.g. s3://my-bucket/randomstring)
+       * A predefined yet extensible Task type identifier.
        * 
* - * string output_prefix = 3; + * string task_type = 1; */ - public Builder setOutputPrefixBytes( + public Builder setTaskTypeBytes( com.google.protobuf.ByteString value) { if (value == null) { throw new NullPointerException(); } checkByteStringIsUtf8(value); - outputPrefix_ = value; + taskType_ = value; onChanged(); return this; } - private flyteidl.admin.Agent.TaskExecutionMetadata taskExecutionMetadata_; - private com.google.protobuf.SingleFieldBuilderV3< - flyteidl.admin.Agent.TaskExecutionMetadata, flyteidl.admin.Agent.TaskExecutionMetadata.Builder, flyteidl.admin.Agent.TaskExecutionMetadataOrBuilder> taskExecutionMetadataBuilder_; - /** - *
-       * subset of runtime task execution metadata.
-       * 
- * - * .flyteidl.admin.TaskExecutionMetadata task_execution_metadata = 4; - */ - public boolean hasTaskExecutionMetadata() { - return taskExecutionMetadataBuilder_ != null || taskExecutionMetadata_ != null; - } - /** - *
-       * subset of runtime task execution metadata.
-       * 
- * - * .flyteidl.admin.TaskExecutionMetadata task_execution_metadata = 4; - */ - public flyteidl.admin.Agent.TaskExecutionMetadata getTaskExecutionMetadata() { - if (taskExecutionMetadataBuilder_ == null) { - return taskExecutionMetadata_ == null ? flyteidl.admin.Agent.TaskExecutionMetadata.getDefaultInstance() : taskExecutionMetadata_; - } else { - return taskExecutionMetadataBuilder_.getMessage(); - } - } - /** - *
-       * subset of runtime task execution metadata.
-       * 
- * - * .flyteidl.admin.TaskExecutionMetadata task_execution_metadata = 4; - */ - public Builder setTaskExecutionMetadata(flyteidl.admin.Agent.TaskExecutionMetadata value) { - if (taskExecutionMetadataBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - taskExecutionMetadata_ = value; - onChanged(); - } else { - taskExecutionMetadataBuilder_.setMessage(value); - } - - return this; - } - /** - *
-       * subset of runtime task execution metadata.
-       * 
- * - * .flyteidl.admin.TaskExecutionMetadata task_execution_metadata = 4; - */ - public Builder setTaskExecutionMetadata( - flyteidl.admin.Agent.TaskExecutionMetadata.Builder builderForValue) { - if (taskExecutionMetadataBuilder_ == null) { - taskExecutionMetadata_ = builderForValue.build(); - onChanged(); - } else { - taskExecutionMetadataBuilder_.setMessage(builderForValue.build()); - } - - return this; - } + private com.google.protobuf.ByteString resourceMeta_ = com.google.protobuf.ByteString.EMPTY; /** *
-       * subset of runtime task execution metadata.
+       * Metadata about the resource to be pass to the agent.
        * 
* - * .flyteidl.admin.TaskExecutionMetadata task_execution_metadata = 4; + * bytes resource_meta = 2; */ - public Builder mergeTaskExecutionMetadata(flyteidl.admin.Agent.TaskExecutionMetadata value) { - if (taskExecutionMetadataBuilder_ == null) { - if (taskExecutionMetadata_ != null) { - taskExecutionMetadata_ = - flyteidl.admin.Agent.TaskExecutionMetadata.newBuilder(taskExecutionMetadata_).mergeFrom(value).buildPartial(); - } else { - taskExecutionMetadata_ = value; - } - onChanged(); - } else { - taskExecutionMetadataBuilder_.mergeFrom(value); - } - - return this; + public com.google.protobuf.ByteString getResourceMeta() { + return resourceMeta_; } /** *
-       * subset of runtime task execution metadata.
+       * Metadata about the resource to be pass to the agent.
        * 
* - * .flyteidl.admin.TaskExecutionMetadata task_execution_metadata = 4; + * bytes resource_meta = 2; */ - public Builder clearTaskExecutionMetadata() { - if (taskExecutionMetadataBuilder_ == null) { - taskExecutionMetadata_ = null; - onChanged(); - } else { - taskExecutionMetadata_ = null; - taskExecutionMetadataBuilder_ = null; - } - + public Builder setResourceMeta(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + + resourceMeta_ = value; + onChanged(); return this; } /** *
-       * subset of runtime task execution metadata.
+       * Metadata about the resource to be pass to the agent.
        * 
* - * .flyteidl.admin.TaskExecutionMetadata task_execution_metadata = 4; + * bytes resource_meta = 2; */ - public flyteidl.admin.Agent.TaskExecutionMetadata.Builder getTaskExecutionMetadataBuilder() { + public Builder clearResourceMeta() { + resourceMeta_ = getDefaultInstance().getResourceMeta(); onChanged(); - return getTaskExecutionMetadataFieldBuilder().getBuilder(); - } - /** - *
-       * subset of runtime task execution metadata.
-       * 
- * - * .flyteidl.admin.TaskExecutionMetadata task_execution_metadata = 4; - */ - public flyteidl.admin.Agent.TaskExecutionMetadataOrBuilder getTaskExecutionMetadataOrBuilder() { - if (taskExecutionMetadataBuilder_ != null) { - return taskExecutionMetadataBuilder_.getMessageOrBuilder(); - } else { - return taskExecutionMetadata_ == null ? - flyteidl.admin.Agent.TaskExecutionMetadata.getDefaultInstance() : taskExecutionMetadata_; - } - } - /** - *
-       * subset of runtime task execution metadata.
-       * 
- * - * .flyteidl.admin.TaskExecutionMetadata task_execution_metadata = 4; - */ - private com.google.protobuf.SingleFieldBuilderV3< - flyteidl.admin.Agent.TaskExecutionMetadata, flyteidl.admin.Agent.TaskExecutionMetadata.Builder, flyteidl.admin.Agent.TaskExecutionMetadataOrBuilder> - getTaskExecutionMetadataFieldBuilder() { - if (taskExecutionMetadataBuilder_ == null) { - taskExecutionMetadataBuilder_ = new com.google.protobuf.SingleFieldBuilderV3< - flyteidl.admin.Agent.TaskExecutionMetadata, flyteidl.admin.Agent.TaskExecutionMetadata.Builder, flyteidl.admin.Agent.TaskExecutionMetadataOrBuilder>( - getTaskExecutionMetadata(), - getParentForChildren(), - isClean()); - taskExecutionMetadata_ = null; - } - return taskExecutionMetadataBuilder_; + return this; } @java.lang.Override public final Builder setUnknownFields( @@ -9335,76 +8294,67 @@ public final Builder mergeUnknownFields( } - // @@protoc_insertion_point(builder_scope:flyteidl.admin.DoTaskRequest) + // @@protoc_insertion_point(builder_scope:flyteidl.admin.DeleteTaskRequest) } - // @@protoc_insertion_point(class_scope:flyteidl.admin.DoTaskRequest) - private static final flyteidl.admin.Agent.DoTaskRequest DEFAULT_INSTANCE; + // @@protoc_insertion_point(class_scope:flyteidl.admin.DeleteTaskRequest) + private static final flyteidl.admin.Agent.DeleteTaskRequest DEFAULT_INSTANCE; static { - DEFAULT_INSTANCE = new flyteidl.admin.Agent.DoTaskRequest(); + DEFAULT_INSTANCE = new flyteidl.admin.Agent.DeleteTaskRequest(); } - public static flyteidl.admin.Agent.DoTaskRequest getDefaultInstance() { + public static flyteidl.admin.Agent.DeleteTaskRequest getDefaultInstance() { return DEFAULT_INSTANCE; } - private static final com.google.protobuf.Parser - PARSER = new com.google.protobuf.AbstractParser() { + private static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { @java.lang.Override - public DoTaskRequest parsePartialFrom( + public DeleteTaskRequest parsePartialFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { - return new DoTaskRequest(input, extensionRegistry); + return new DeleteTaskRequest(input, extensionRegistry); } }; - public static com.google.protobuf.Parser parser() { + public static com.google.protobuf.Parser parser() { return PARSER; } @java.lang.Override - public com.google.protobuf.Parser getParserForType() { + public com.google.protobuf.Parser getParserForType() { return PARSER; } @java.lang.Override - public flyteidl.admin.Agent.DoTaskRequest getDefaultInstanceForType() { + public flyteidl.admin.Agent.DeleteTaskRequest getDefaultInstanceForType() { return DEFAULT_INSTANCE; } } - public interface DoTaskResponseOrBuilder extends - // @@protoc_insertion_point(interface_extends:flyteidl.admin.DoTaskResponse) + public interface DeleteTaskResponseOrBuilder extends + // @@protoc_insertion_point(interface_extends:flyteidl.admin.DeleteTaskResponse) com.google.protobuf.MessageOrBuilder { - - /** - * .flyteidl.admin.Resource resource = 1; - */ - boolean hasResource(); - /** - * .flyteidl.admin.Resource resource = 1; - */ - flyteidl.admin.Agent.Resource getResource(); - /** - * .flyteidl.admin.Resource resource = 1; - */ - flyteidl.admin.Agent.ResourceOrBuilder getResourceOrBuilder(); } /** - * Protobuf type {@code flyteidl.admin.DoTaskResponse} + *
+   * Response to delete a task.
+   * 
+ * + * Protobuf type {@code flyteidl.admin.DeleteTaskResponse} */ - public static final class DoTaskResponse extends + public static final class DeleteTaskResponse extends com.google.protobuf.GeneratedMessageV3 implements - // @@protoc_insertion_point(message_implements:flyteidl.admin.DoTaskResponse) - DoTaskResponseOrBuilder { + // @@protoc_insertion_point(message_implements:flyteidl.admin.DeleteTaskResponse) + DeleteTaskResponseOrBuilder { private static final long serialVersionUID = 0L; - // Use DoTaskResponse.newBuilder() to construct. - private DoTaskResponse(com.google.protobuf.GeneratedMessageV3.Builder builder) { + // Use DeleteTaskResponse.newBuilder() to construct. + private DeleteTaskResponse(com.google.protobuf.GeneratedMessageV3.Builder builder) { super(builder); } - private DoTaskResponse() { + private DeleteTaskResponse() { } @java.lang.Override @@ -9412,7 +8362,7 @@ private DoTaskResponse() { getUnknownFields() { return this.unknownFields; } - private DoTaskResponse( + private DeleteTaskResponse( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { @@ -9420,7 +8370,6 @@ private DoTaskResponse( if (extensionRegistry == null) { throw new java.lang.NullPointerException(); } - int mutable_bitField0_ = 0; com.google.protobuf.UnknownFieldSet.Builder unknownFields = com.google.protobuf.UnknownFieldSet.newBuilder(); try { @@ -9431,19 +8380,6 @@ private DoTaskResponse( case 0: done = true; break; - case 10: { - flyteidl.admin.Agent.Resource.Builder subBuilder = null; - if (resource_ != null) { - subBuilder = resource_.toBuilder(); - } - resource_ = input.readMessage(flyteidl.admin.Agent.Resource.parser(), extensionRegistry); - if (subBuilder != null) { - subBuilder.mergeFrom(resource_); - resource_ = subBuilder.buildPartial(); - } - - break; - } default: { if (!parseUnknownField( input, unknownFields, extensionRegistry, tag)) { @@ -9465,36 +8401,15 @@ private DoTaskResponse( } public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { - return flyteidl.admin.Agent.internal_static_flyteidl_admin_DoTaskResponse_descriptor; + return flyteidl.admin.Agent.internal_static_flyteidl_admin_DeleteTaskResponse_descriptor; } @java.lang.Override protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internalGetFieldAccessorTable() { - return flyteidl.admin.Agent.internal_static_flyteidl_admin_DoTaskResponse_fieldAccessorTable + return flyteidl.admin.Agent.internal_static_flyteidl_admin_DeleteTaskResponse_fieldAccessorTable .ensureFieldAccessorsInitialized( - flyteidl.admin.Agent.DoTaskResponse.class, flyteidl.admin.Agent.DoTaskResponse.Builder.class); - } - - public static final int RESOURCE_FIELD_NUMBER = 1; - private flyteidl.admin.Agent.Resource resource_; - /** - * .flyteidl.admin.Resource resource = 1; - */ - public boolean hasResource() { - return resource_ != null; - } - /** - * .flyteidl.admin.Resource resource = 1; - */ - public flyteidl.admin.Agent.Resource getResource() { - return resource_ == null ? flyteidl.admin.Agent.Resource.getDefaultInstance() : resource_; - } - /** - * .flyteidl.admin.Resource resource = 1; - */ - public flyteidl.admin.Agent.ResourceOrBuilder getResourceOrBuilder() { - return getResource(); + flyteidl.admin.Agent.DeleteTaskResponse.class, flyteidl.admin.Agent.DeleteTaskResponse.Builder.class); } private byte memoizedIsInitialized = -1; @@ -9511,9 +8426,6 @@ public final boolean isInitialized() { @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (resource_ != null) { - output.writeMessage(1, getResource()); - } unknownFields.writeTo(output); } @@ -9523,10 +8435,6 @@ public int getSerializedSize() { if (size != -1) return size; size = 0; - if (resource_ != null) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(1, getResource()); - } size += unknownFields.getSerializedSize(); memoizedSize = size; return size; @@ -9537,16 +8445,11 @@ public boolean equals(final java.lang.Object obj) { if (obj == this) { return true; } - if (!(obj instanceof flyteidl.admin.Agent.DoTaskResponse)) { + if (!(obj instanceof flyteidl.admin.Agent.DeleteTaskResponse)) { return super.equals(obj); } - flyteidl.admin.Agent.DoTaskResponse other = (flyteidl.admin.Agent.DoTaskResponse) obj; + flyteidl.admin.Agent.DeleteTaskResponse other = (flyteidl.admin.Agent.DeleteTaskResponse) obj; - if (hasResource() != other.hasResource()) return false; - if (hasResource()) { - if (!getResource() - .equals(other.getResource())) return false; - } if (!unknownFields.equals(other.unknownFields)) return false; return true; } @@ -9558,78 +8461,74 @@ public int hashCode() { } int hash = 41; hash = (19 * hash) + getDescriptor().hashCode(); - if (hasResource()) { - hash = (37 * hash) + RESOURCE_FIELD_NUMBER; - hash = (53 * hash) + getResource().hashCode(); - } hash = (29 * hash) + unknownFields.hashCode(); memoizedHashCode = hash; return hash; } - public static flyteidl.admin.Agent.DoTaskResponse parseFrom( + public static flyteidl.admin.Agent.DeleteTaskResponse parseFrom( java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static flyteidl.admin.Agent.DoTaskResponse parseFrom( + public static flyteidl.admin.Agent.DeleteTaskResponse parseFrom( java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data, extensionRegistry); } - public static flyteidl.admin.Agent.DoTaskResponse parseFrom( + public static flyteidl.admin.Agent.DeleteTaskResponse parseFrom( com.google.protobuf.ByteString data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static flyteidl.admin.Agent.DoTaskResponse parseFrom( + public static flyteidl.admin.Agent.DeleteTaskResponse parseFrom( com.google.protobuf.ByteString data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data, extensionRegistry); } - public static flyteidl.admin.Agent.DoTaskResponse parseFrom(byte[] data) + public static flyteidl.admin.Agent.DeleteTaskResponse parseFrom(byte[] data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static flyteidl.admin.Agent.DoTaskResponse parseFrom( + public static flyteidl.admin.Agent.DeleteTaskResponse parseFrom( byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data, extensionRegistry); } - public static flyteidl.admin.Agent.DoTaskResponse parseFrom(java.io.InputStream input) + public static flyteidl.admin.Agent.DeleteTaskResponse parseFrom(java.io.InputStream input) throws java.io.IOException { return com.google.protobuf.GeneratedMessageV3 .parseWithIOException(PARSER, input); } - public static flyteidl.admin.Agent.DoTaskResponse parseFrom( + public static flyteidl.admin.Agent.DeleteTaskResponse parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { return com.google.protobuf.GeneratedMessageV3 .parseWithIOException(PARSER, input, extensionRegistry); } - public static flyteidl.admin.Agent.DoTaskResponse parseDelimitedFrom(java.io.InputStream input) + public static flyteidl.admin.Agent.DeleteTaskResponse parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException { return com.google.protobuf.GeneratedMessageV3 .parseDelimitedWithIOException(PARSER, input); } - public static flyteidl.admin.Agent.DoTaskResponse parseDelimitedFrom( + public static flyteidl.admin.Agent.DeleteTaskResponse parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { return com.google.protobuf.GeneratedMessageV3 .parseDelimitedWithIOException(PARSER, input, extensionRegistry); } - public static flyteidl.admin.Agent.DoTaskResponse parseFrom( + public static flyteidl.admin.Agent.DeleteTaskResponse parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { return com.google.protobuf.GeneratedMessageV3 .parseWithIOException(PARSER, input); } - public static flyteidl.admin.Agent.DoTaskResponse parseFrom( + public static flyteidl.admin.Agent.DeleteTaskResponse parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { @@ -9642,7 +8541,7 @@ public static flyteidl.admin.Agent.DoTaskResponse parseFrom( public static Builder newBuilder() { return DEFAULT_INSTANCE.toBuilder(); } - public static Builder newBuilder(flyteidl.admin.Agent.DoTaskResponse prototype) { + public static Builder newBuilder(flyteidl.admin.Agent.DeleteTaskResponse prototype) { return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); } @java.lang.Override @@ -9658,26 +8557,30 @@ protected Builder newBuilderForType( return builder; } /** - * Protobuf type {@code flyteidl.admin.DoTaskResponse} + *
+     * Response to delete a task.
+     * 
+ * + * Protobuf type {@code flyteidl.admin.DeleteTaskResponse} */ public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder implements - // @@protoc_insertion_point(builder_implements:flyteidl.admin.DoTaskResponse) - flyteidl.admin.Agent.DoTaskResponseOrBuilder { + // @@protoc_insertion_point(builder_implements:flyteidl.admin.DeleteTaskResponse) + flyteidl.admin.Agent.DeleteTaskResponseOrBuilder { public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { - return flyteidl.admin.Agent.internal_static_flyteidl_admin_DoTaskResponse_descriptor; + return flyteidl.admin.Agent.internal_static_flyteidl_admin_DeleteTaskResponse_descriptor; } @java.lang.Override protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internalGetFieldAccessorTable() { - return flyteidl.admin.Agent.internal_static_flyteidl_admin_DoTaskResponse_fieldAccessorTable + return flyteidl.admin.Agent.internal_static_flyteidl_admin_DeleteTaskResponse_fieldAccessorTable .ensureFieldAccessorsInitialized( - flyteidl.admin.Agent.DoTaskResponse.class, flyteidl.admin.Agent.DoTaskResponse.Builder.class); + flyteidl.admin.Agent.DeleteTaskResponse.class, flyteidl.admin.Agent.DeleteTaskResponse.Builder.class); } - // Construct using flyteidl.admin.Agent.DoTaskResponse.newBuilder() + // Construct using flyteidl.admin.Agent.DeleteTaskResponse.newBuilder() private Builder() { maybeForceBuilderInitialization(); } @@ -9695,29 +8598,23 @@ private void maybeForceBuilderInitialization() { @java.lang.Override public Builder clear() { super.clear(); - if (resourceBuilder_ == null) { - resource_ = null; - } else { - resource_ = null; - resourceBuilder_ = null; - } return this; } @java.lang.Override public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { - return flyteidl.admin.Agent.internal_static_flyteidl_admin_DoTaskResponse_descriptor; + return flyteidl.admin.Agent.internal_static_flyteidl_admin_DeleteTaskResponse_descriptor; } @java.lang.Override - public flyteidl.admin.Agent.DoTaskResponse getDefaultInstanceForType() { - return flyteidl.admin.Agent.DoTaskResponse.getDefaultInstance(); + public flyteidl.admin.Agent.DeleteTaskResponse getDefaultInstanceForType() { + return flyteidl.admin.Agent.DeleteTaskResponse.getDefaultInstance(); } @java.lang.Override - public flyteidl.admin.Agent.DoTaskResponse build() { - flyteidl.admin.Agent.DoTaskResponse result = buildPartial(); + public flyteidl.admin.Agent.DeleteTaskResponse build() { + flyteidl.admin.Agent.DeleteTaskResponse result = buildPartial(); if (!result.isInitialized()) { throw newUninitializedMessageException(result); } @@ -9725,13 +8622,8 @@ public flyteidl.admin.Agent.DoTaskResponse build() { } @java.lang.Override - public flyteidl.admin.Agent.DoTaskResponse buildPartial() { - flyteidl.admin.Agent.DoTaskResponse result = new flyteidl.admin.Agent.DoTaskResponse(this); - if (resourceBuilder_ == null) { - result.resource_ = resource_; - } else { - result.resource_ = resourceBuilder_.build(); - } + public flyteidl.admin.Agent.DeleteTaskResponse buildPartial() { + flyteidl.admin.Agent.DeleteTaskResponse result = new flyteidl.admin.Agent.DeleteTaskResponse(this); onBuilt(); return result; } @@ -9770,19 +8662,16 @@ public Builder addRepeatedField( } @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof flyteidl.admin.Agent.DoTaskResponse) { - return mergeFrom((flyteidl.admin.Agent.DoTaskResponse)other); + if (other instanceof flyteidl.admin.Agent.DeleteTaskResponse) { + return mergeFrom((flyteidl.admin.Agent.DeleteTaskResponse)other); } else { super.mergeFrom(other); return this; } } - public Builder mergeFrom(flyteidl.admin.Agent.DoTaskResponse other) { - if (other == flyteidl.admin.Agent.DoTaskResponse.getDefaultInstance()) return this; - if (other.hasResource()) { - mergeResource(other.getResource()); - } + public Builder mergeFrom(flyteidl.admin.Agent.DeleteTaskResponse other) { + if (other == flyteidl.admin.Agent.DeleteTaskResponse.getDefaultInstance()) return this; this.mergeUnknownFields(other.unknownFields); onChanged(); return this; @@ -9798,11 +8687,11 @@ public Builder mergeFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - flyteidl.admin.Agent.DoTaskResponse parsedMessage = null; + flyteidl.admin.Agent.DeleteTaskResponse parsedMessage = null; try { parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); } catch (com.google.protobuf.InvalidProtocolBufferException e) { - parsedMessage = (flyteidl.admin.Agent.DoTaskResponse) e.getUnfinishedMessage(); + parsedMessage = (flyteidl.admin.Agent.DeleteTaskResponse) e.getUnfinishedMessage(); throw e.unwrapIOException(); } finally { if (parsedMessage != null) { @@ -9811,123 +8700,6 @@ public Builder mergeFrom( } return this; } - - private flyteidl.admin.Agent.Resource resource_; - private com.google.protobuf.SingleFieldBuilderV3< - flyteidl.admin.Agent.Resource, flyteidl.admin.Agent.Resource.Builder, flyteidl.admin.Agent.ResourceOrBuilder> resourceBuilder_; - /** - * .flyteidl.admin.Resource resource = 1; - */ - public boolean hasResource() { - return resourceBuilder_ != null || resource_ != null; - } - /** - * .flyteidl.admin.Resource resource = 1; - */ - public flyteidl.admin.Agent.Resource getResource() { - if (resourceBuilder_ == null) { - return resource_ == null ? flyteidl.admin.Agent.Resource.getDefaultInstance() : resource_; - } else { - return resourceBuilder_.getMessage(); - } - } - /** - * .flyteidl.admin.Resource resource = 1; - */ - public Builder setResource(flyteidl.admin.Agent.Resource value) { - if (resourceBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - resource_ = value; - onChanged(); - } else { - resourceBuilder_.setMessage(value); - } - - return this; - } - /** - * .flyteidl.admin.Resource resource = 1; - */ - public Builder setResource( - flyteidl.admin.Agent.Resource.Builder builderForValue) { - if (resourceBuilder_ == null) { - resource_ = builderForValue.build(); - onChanged(); - } else { - resourceBuilder_.setMessage(builderForValue.build()); - } - - return this; - } - /** - * .flyteidl.admin.Resource resource = 1; - */ - public Builder mergeResource(flyteidl.admin.Agent.Resource value) { - if (resourceBuilder_ == null) { - if (resource_ != null) { - resource_ = - flyteidl.admin.Agent.Resource.newBuilder(resource_).mergeFrom(value).buildPartial(); - } else { - resource_ = value; - } - onChanged(); - } else { - resourceBuilder_.mergeFrom(value); - } - - return this; - } - /** - * .flyteidl.admin.Resource resource = 1; - */ - public Builder clearResource() { - if (resourceBuilder_ == null) { - resource_ = null; - onChanged(); - } else { - resource_ = null; - resourceBuilder_ = null; - } - - return this; - } - /** - * .flyteidl.admin.Resource resource = 1; - */ - public flyteidl.admin.Agent.Resource.Builder getResourceBuilder() { - - onChanged(); - return getResourceFieldBuilder().getBuilder(); - } - /** - * .flyteidl.admin.Resource resource = 1; - */ - public flyteidl.admin.Agent.ResourceOrBuilder getResourceOrBuilder() { - if (resourceBuilder_ != null) { - return resourceBuilder_.getMessageOrBuilder(); - } else { - return resource_ == null ? - flyteidl.admin.Agent.Resource.getDefaultInstance() : resource_; - } - } - /** - * .flyteidl.admin.Resource resource = 1; - */ - private com.google.protobuf.SingleFieldBuilderV3< - flyteidl.admin.Agent.Resource, flyteidl.admin.Agent.Resource.Builder, flyteidl.admin.Agent.ResourceOrBuilder> - getResourceFieldBuilder() { - if (resourceBuilder_ == null) { - resourceBuilder_ = new com.google.protobuf.SingleFieldBuilderV3< - flyteidl.admin.Agent.Resource, flyteidl.admin.Agent.Resource.Builder, flyteidl.admin.Agent.ResourceOrBuilder>( - getResource(), - getParentForChildren(), - isClean()); - resource_ = null; - } - return resourceBuilder_; - } @java.lang.Override public final Builder setUnknownFields( final com.google.protobuf.UnknownFieldSet unknownFields) { @@ -9941,41 +8713,41 @@ public final Builder mergeUnknownFields( } - // @@protoc_insertion_point(builder_scope:flyteidl.admin.DoTaskResponse) + // @@protoc_insertion_point(builder_scope:flyteidl.admin.DeleteTaskResponse) } - // @@protoc_insertion_point(class_scope:flyteidl.admin.DoTaskResponse) - private static final flyteidl.admin.Agent.DoTaskResponse DEFAULT_INSTANCE; + // @@protoc_insertion_point(class_scope:flyteidl.admin.DeleteTaskResponse) + private static final flyteidl.admin.Agent.DeleteTaskResponse DEFAULT_INSTANCE; static { - DEFAULT_INSTANCE = new flyteidl.admin.Agent.DoTaskResponse(); + DEFAULT_INSTANCE = new flyteidl.admin.Agent.DeleteTaskResponse(); } - public static flyteidl.admin.Agent.DoTaskResponse getDefaultInstance() { + public static flyteidl.admin.Agent.DeleteTaskResponse getDefaultInstance() { return DEFAULT_INSTANCE; } - private static final com.google.protobuf.Parser - PARSER = new com.google.protobuf.AbstractParser() { + private static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { @java.lang.Override - public DoTaskResponse parsePartialFrom( + public DeleteTaskResponse parsePartialFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { - return new DoTaskResponse(input, extensionRegistry); + return new DeleteTaskResponse(input, extensionRegistry); } }; - public static com.google.protobuf.Parser parser() { + public static com.google.protobuf.Parser parser() { return PARSER; } @java.lang.Override - public com.google.protobuf.Parser getParserForType() { + public com.google.protobuf.Parser getParserForType() { return PARSER; } @java.lang.Override - public flyteidl.admin.Agent.DoTaskResponse getDefaultInstanceForType() { + public flyteidl.admin.Agent.DeleteTaskResponse getDefaultInstanceForType() { return DEFAULT_INSTANCE; } @@ -10036,16 +8808,6 @@ public flyteidl.admin.Agent.DoTaskResponse getDefaultInstanceForType() { private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_flyteidl_admin_DeleteTaskResponse_fieldAccessorTable; - private static final com.google.protobuf.Descriptors.Descriptor - internal_static_flyteidl_admin_DoTaskRequest_descriptor; - private static final - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internal_static_flyteidl_admin_DoTaskRequest_fieldAccessorTable; - private static final com.google.protobuf.Descriptors.Descriptor - internal_static_flyteidl_admin_DoTaskResponse_descriptor; - private static final - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internal_static_flyteidl_admin_DoTaskResponse_fieldAccessorTable; public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { @@ -10078,28 +8840,24 @@ public flyteidl.admin.Agent.DoTaskResponse getDefaultInstanceForType() { "p\022-\n\010template\030\002 \001(\0132\033.flyteidl.core.Task" + "Template\022\025\n\routput_prefix\030\003 \001(\t\022F\n\027task_" + "execution_metadata\030\004 \001(\0132%.flyteidl.admi" + - "n.TaskExecutionMetadata\"+\n\022CreateTaskRes" + - "ponse\022\025\n\rresource_meta\030\001 \001(\014\":\n\016GetTaskR" + - "equest\022\021\n\ttask_type\030\001 \001(\t\022\025\n\rresource_me" + - "ta\030\002 \001(\014\"h\n\017GetTaskResponse\022*\n\010resource\030" + - "\001 \001(\0132\030.flyteidl.admin.Resource\022)\n\tlog_l" + - "inks\030\002 \003(\0132\026.flyteidl.core.TaskLog\"m\n\010Re" + - "source\022$\n\005state\030\001 \001(\0162\025.flyteidl.admin.S" + - "tate\022*\n\007outputs\030\002 \001(\0132\031.flyteidl.core.Li" + - "teralMap\022\017\n\007message\030\003 \001(\t\"=\n\021DeleteTaskR" + - "equest\022\021\n\ttask_type\030\001 \001(\t\022\025\n\rresource_me" + - "ta\030\002 \001(\014\"\024\n\022DeleteTaskResponse\"\310\001\n\rDoTas" + - "kRequest\022)\n\006inputs\030\001 \001(\0132\031.flyteidl.core" + - ".LiteralMap\022-\n\010template\030\002 \001(\0132\033.flyteidl" + - ".core.TaskTemplate\022\025\n\routput_prefix\030\003 \001(" + - "\t\022F\n\027task_execution_metadata\030\004 \001(\0132%.fly" + - "teidl.admin.TaskExecutionMetadata\"<\n\016DoT" + - "askResponse\022*\n\010resource\030\001 \001(\0132\030.flyteidl" + - ".admin.Resource*^\n\005State\022\025\n\021RETRYABLE_FA" + - "ILURE\020\000\022\025\n\021PERMANENT_FAILURE\020\001\022\013\n\007PENDIN" + - "G\020\002\022\013\n\007RUNNING\020\003\022\r\n\tSUCCEEDED\020\004B=Z;githu" + - "b.com/flyteorg/flyte/flyteidl/gen/pb-go/" + - "flyteidl/adminb\006proto3" + "n.TaskExecutionMetadata\"\215\001\n\022CreateTaskRe" + + "sponse\022\027\n\rresource_meta\030\001 \001(\014H\000\022,\n\010resou" + + "rce\030\002 \001(\0132\030.flyteidl.admin.ResourceH\000\022)\n" + + "\tlog_links\030\003 \003(\0132\026.flyteidl.core.TaskLog" + + "B\005\n\003res\":\n\016GetTaskRequest\022\021\n\ttask_type\030\001" + + " \001(\t\022\025\n\rresource_meta\030\002 \001(\014\"h\n\017GetTaskRe" + + "sponse\022*\n\010resource\030\001 \001(\0132\030.flyteidl.admi" + + "n.Resource\022)\n\tlog_links\030\002 \003(\0132\026.flyteidl" + + ".core.TaskLog\"m\n\010Resource\022$\n\005state\030\001 \001(\016" + + "2\025.flyteidl.admin.State\022*\n\007outputs\030\002 \001(\013" + + "2\031.flyteidl.core.LiteralMap\022\017\n\007message\030\003" + + " \001(\t\"=\n\021DeleteTaskRequest\022\021\n\ttask_type\030\001" + + " \001(\t\022\025\n\rresource_meta\030\002 \001(\014\"\024\n\022DeleteTas" + + "kResponse*^\n\005State\022\025\n\021RETRYABLE_FAILURE\020" + + "\000\022\025\n\021PERMANENT_FAILURE\020\001\022\013\n\007PENDING\020\002\022\013\n" + + "\007RUNNING\020\003\022\r\n\tSUCCEEDED\020\004B=Z;github.com/" + + "flyteorg/flyte/flyteidl/gen/pb-go/flytei" + + "dl/adminb\006proto3" }; com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner = new com.google.protobuf.Descriptors.FileDescriptor. InternalDescriptorAssigner() { @@ -10153,7 +8911,7 @@ public com.google.protobuf.ExtensionRegistry assignDescriptors( internal_static_flyteidl_admin_CreateTaskResponse_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( internal_static_flyteidl_admin_CreateTaskResponse_descriptor, - new java.lang.String[] { "ResourceMeta", }); + new java.lang.String[] { "ResourceMeta", "Resource", "LogLinks", "Res", }); internal_static_flyteidl_admin_GetTaskRequest_descriptor = getDescriptor().getMessageTypes().get(3); internal_static_flyteidl_admin_GetTaskRequest_fieldAccessorTable = new @@ -10184,18 +8942,6 @@ public com.google.protobuf.ExtensionRegistry assignDescriptors( com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( internal_static_flyteidl_admin_DeleteTaskResponse_descriptor, new java.lang.String[] { }); - internal_static_flyteidl_admin_DoTaskRequest_descriptor = - getDescriptor().getMessageTypes().get(8); - internal_static_flyteidl_admin_DoTaskRequest_fieldAccessorTable = new - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( - internal_static_flyteidl_admin_DoTaskRequest_descriptor, - new java.lang.String[] { "Inputs", "Template", "OutputPrefix", "TaskExecutionMetadata", }); - internal_static_flyteidl_admin_DoTaskResponse_descriptor = - getDescriptor().getMessageTypes().get(9); - internal_static_flyteidl_admin_DoTaskResponse_fieldAccessorTable = new - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( - internal_static_flyteidl_admin_DoTaskResponse_descriptor, - new java.lang.String[] { "Resource", }); flyteidl.core.Literals.getDescriptor(); flyteidl.core.Tasks.getDescriptor(); flyteidl.core.Interface.getDescriptor(); diff --git a/flyteidl/gen/pb-java/flyteidl/service/Agent.java b/flyteidl/gen/pb-java/flyteidl/service/Agent.java index 1731ba435f..058dd75b44 100644 --- a/flyteidl/gen/pb-java/flyteidl/service/Agent.java +++ b/flyteidl/gen/pb-java/flyteidl/service/Agent.java @@ -24,18 +24,16 @@ public static void registerAllExtensions( static { java.lang.String[] descriptorData = { "\n\034flyteidl/service/agent.proto\022\020flyteidl" + - ".service\032\032flyteidl/admin/agent.proto2\217\002\n" + - "\021AsyncAgentService\022U\n\nCreateTask\022!.flyte" + - "idl.admin.CreateTaskRequest\032\".flyteidl.a" + - "dmin.CreateTaskResponse\"\000\022L\n\007GetTask\022\036.f" + - "lyteidl.admin.GetTaskRequest\032\037.flyteidl." + - "admin.GetTaskResponse\"\000\022U\n\nDeleteTask\022!." + - "flyteidl.admin.DeleteTaskRequest\032\".flyte" + - "idl.admin.DeleteTaskResponse\"\0002]\n\020SyncAg" + - "entService\022I\n\006DoTask\022\035.flyteidl.admin.Do" + - "TaskRequest\032\036.flyteidl.admin.DoTaskRespo" + - "nse\"\000B?Z=github.com/flyteorg/flyte/flyte" + - "idl/gen/pb-go/flyteidl/serviceb\006proto3" + ".service\032\032flyteidl/admin/agent.proto2\212\002\n" + + "\014AgentService\022U\n\nCreateTask\022!.flyteidl.a" + + "dmin.CreateTaskRequest\032\".flyteidl.admin." + + "CreateTaskResponse\"\000\022L\n\007GetTask\022\036.flytei" + + "dl.admin.GetTaskRequest\032\037.flyteidl.admin" + + ".GetTaskResponse\"\000\022U\n\nDeleteTask\022!.flyte" + + "idl.admin.DeleteTaskRequest\032\".flyteidl.a" + + "dmin.DeleteTaskResponse\"\000B?Z=github.com/" + + "flyteorg/flyte/flyteidl/gen/pb-go/flytei" + + "dl/serviceb\006proto3" }; com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner = new com.google.protobuf.Descriptors.FileDescriptor. InternalDescriptorAssigner() { diff --git a/flyteidl/gen/pb-js/flyteidl.d.ts b/flyteidl/gen/pb-js/flyteidl.d.ts index f214d863b0..1687c2746b 100644 --- a/flyteidl/gen/pb-js/flyteidl.d.ts +++ b/flyteidl/gen/pb-js/flyteidl.d.ts @@ -8080,6 +8080,12 @@ export namespace flyteidl { /** CreateTaskResponse resourceMeta */ resourceMeta?: (Uint8Array|null); + + /** CreateTaskResponse resource */ + resource?: (flyteidl.admin.IResource|null); + + /** CreateTaskResponse logLinks */ + logLinks?: (flyteidl.core.ITaskLog[]|null); } /** Represents a CreateTaskResponse. */ @@ -8094,6 +8100,15 @@ export namespace flyteidl { /** CreateTaskResponse resourceMeta. */ public resourceMeta: Uint8Array; + /** CreateTaskResponse resource. */ + public resource?: (flyteidl.admin.IResource|null); + + /** CreateTaskResponse logLinks. */ + public logLinks: flyteidl.core.ITaskLog[]; + + /** CreateTaskResponse res. */ + public res?: ("resourceMeta"|"resource"); + /** * Creates a new CreateTaskResponse instance using the specified properties. * @param [properties] Properties to set @@ -8411,128 +8426,6 @@ export namespace flyteidl { public static verify(message: { [k: string]: any }): (string|null); } - /** Properties of a DoTaskRequest. */ - interface IDoTaskRequest { - - /** DoTaskRequest inputs */ - inputs?: (flyteidl.core.ILiteralMap|null); - - /** DoTaskRequest template */ - template?: (flyteidl.core.ITaskTemplate|null); - - /** DoTaskRequest outputPrefix */ - outputPrefix?: (string|null); - - /** DoTaskRequest taskExecutionMetadata */ - taskExecutionMetadata?: (flyteidl.admin.ITaskExecutionMetadata|null); - } - - /** Represents a DoTaskRequest. */ - class DoTaskRequest implements IDoTaskRequest { - - /** - * Constructs a new DoTaskRequest. - * @param [properties] Properties to set - */ - constructor(properties?: flyteidl.admin.IDoTaskRequest); - - /** DoTaskRequest inputs. */ - public inputs?: (flyteidl.core.ILiteralMap|null); - - /** DoTaskRequest template. */ - public template?: (flyteidl.core.ITaskTemplate|null); - - /** DoTaskRequest outputPrefix. */ - public outputPrefix: string; - - /** DoTaskRequest taskExecutionMetadata. */ - public taskExecutionMetadata?: (flyteidl.admin.ITaskExecutionMetadata|null); - - /** - * Creates a new DoTaskRequest instance using the specified properties. - * @param [properties] Properties to set - * @returns DoTaskRequest instance - */ - public static create(properties?: flyteidl.admin.IDoTaskRequest): flyteidl.admin.DoTaskRequest; - - /** - * Encodes the specified DoTaskRequest message. Does not implicitly {@link flyteidl.admin.DoTaskRequest.verify|verify} messages. - * @param message DoTaskRequest message or plain object to encode - * @param [writer] Writer to encode to - * @returns Writer - */ - public static encode(message: flyteidl.admin.IDoTaskRequest, writer?: $protobuf.Writer): $protobuf.Writer; - - /** - * Decodes a DoTaskRequest message from the specified reader or buffer. - * @param reader Reader or buffer to decode from - * @param [length] Message length if known beforehand - * @returns DoTaskRequest - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): flyteidl.admin.DoTaskRequest; - - /** - * Verifies a DoTaskRequest message. - * @param message Plain object to verify - * @returns `null` if valid, otherwise the reason why it is not - */ - public static verify(message: { [k: string]: any }): (string|null); - } - - /** Properties of a DoTaskResponse. */ - interface IDoTaskResponse { - - /** DoTaskResponse resource */ - resource?: (flyteidl.admin.IResource|null); - } - - /** Represents a DoTaskResponse. */ - class DoTaskResponse implements IDoTaskResponse { - - /** - * Constructs a new DoTaskResponse. - * @param [properties] Properties to set - */ - constructor(properties?: flyteidl.admin.IDoTaskResponse); - - /** DoTaskResponse resource. */ - public resource?: (flyteidl.admin.IResource|null); - - /** - * Creates a new DoTaskResponse instance using the specified properties. - * @param [properties] Properties to set - * @returns DoTaskResponse instance - */ - public static create(properties?: flyteidl.admin.IDoTaskResponse): flyteidl.admin.DoTaskResponse; - - /** - * Encodes the specified DoTaskResponse message. Does not implicitly {@link flyteidl.admin.DoTaskResponse.verify|verify} messages. - * @param message DoTaskResponse message or plain object to encode - * @param [writer] Writer to encode to - * @returns Writer - */ - public static encode(message: flyteidl.admin.IDoTaskResponse, writer?: $protobuf.Writer): $protobuf.Writer; - - /** - * Decodes a DoTaskResponse message from the specified reader or buffer. - * @param reader Reader or buffer to decode from - * @param [length] Message length if known beforehand - * @returns DoTaskResponse - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): flyteidl.admin.DoTaskResponse; - - /** - * Verifies a DoTaskResponse message. - * @param message Plain object to verify - * @returns `null` if valid, otherwise the reason why it is not - */ - public static verify(message: { [k: string]: any }): (string|null); - } - /** Properties of a ClusterAssignment. */ interface IClusterAssignment { @@ -19823,11 +19716,11 @@ export namespace flyteidl { type GetExecutionMetricsCallback = (error: (Error|null), response?: flyteidl.admin.WorkflowExecutionGetMetricsResponse) => void; } - /** Represents an AsyncAgentService */ - class AsyncAgentService extends $protobuf.rpc.Service { + /** Represents an AgentService */ + class AgentService extends $protobuf.rpc.Service { /** - * Constructs a new AsyncAgentService service. + * Constructs a new AgentService service. * @param rpcImpl RPC implementation * @param [requestDelimited=false] Whether requests are length-delimited * @param [responseDelimited=false] Whether responses are length-delimited @@ -19835,20 +19728,20 @@ export namespace flyteidl { constructor(rpcImpl: $protobuf.RPCImpl, requestDelimited?: boolean, responseDelimited?: boolean); /** - * Creates new AsyncAgentService service using the specified rpc implementation. + * Creates new AgentService service using the specified rpc implementation. * @param rpcImpl RPC implementation * @param [requestDelimited=false] Whether requests are length-delimited * @param [responseDelimited=false] Whether responses are length-delimited * @returns RPC service. Useful where requests and/or responses are streamed. */ - public static create(rpcImpl: $protobuf.RPCImpl, requestDelimited?: boolean, responseDelimited?: boolean): AsyncAgentService; + public static create(rpcImpl: $protobuf.RPCImpl, requestDelimited?: boolean, responseDelimited?: boolean): AgentService; /** * Calls CreateTask. * @param request CreateTaskRequest message or plain object * @param callback Node-style callback called with the error, if any, and CreateTaskResponse */ - public createTask(request: flyteidl.admin.ICreateTaskRequest, callback: flyteidl.service.AsyncAgentService.CreateTaskCallback): void; + public createTask(request: flyteidl.admin.ICreateTaskRequest, callback: flyteidl.service.AgentService.CreateTaskCallback): void; /** * Calls CreateTask. @@ -19862,7 +19755,7 @@ export namespace flyteidl { * @param request GetTaskRequest message or plain object * @param callback Node-style callback called with the error, if any, and GetTaskResponse */ - public getTask(request: flyteidl.admin.IGetTaskRequest, callback: flyteidl.service.AsyncAgentService.GetTaskCallback): void; + public getTask(request: flyteidl.admin.IGetTaskRequest, callback: flyteidl.service.AgentService.GetTaskCallback): void; /** * Calls GetTask. @@ -19876,7 +19769,7 @@ export namespace flyteidl { * @param request DeleteTaskRequest message or plain object * @param callback Node-style callback called with the error, if any, and DeleteTaskResponse */ - public deleteTask(request: flyteidl.admin.IDeleteTaskRequest, callback: flyteidl.service.AsyncAgentService.DeleteTaskCallback): void; + public deleteTask(request: flyteidl.admin.IDeleteTaskRequest, callback: flyteidl.service.AgentService.DeleteTaskCallback): void; /** * Calls DeleteTask. @@ -19886,75 +19779,30 @@ export namespace flyteidl { public deleteTask(request: flyteidl.admin.IDeleteTaskRequest): Promise; } - namespace AsyncAgentService { + namespace AgentService { /** - * Callback as used by {@link flyteidl.service.AsyncAgentService#createTask}. + * Callback as used by {@link flyteidl.service.AgentService#createTask}. * @param error Error, if any * @param [response] CreateTaskResponse */ type CreateTaskCallback = (error: (Error|null), response?: flyteidl.admin.CreateTaskResponse) => void; /** - * Callback as used by {@link flyteidl.service.AsyncAgentService#getTask}. + * Callback as used by {@link flyteidl.service.AgentService#getTask}. * @param error Error, if any * @param [response] GetTaskResponse */ type GetTaskCallback = (error: (Error|null), response?: flyteidl.admin.GetTaskResponse) => void; /** - * Callback as used by {@link flyteidl.service.AsyncAgentService#deleteTask}. + * Callback as used by {@link flyteidl.service.AgentService#deleteTask}. * @param error Error, if any * @param [response] DeleteTaskResponse */ type DeleteTaskCallback = (error: (Error|null), response?: flyteidl.admin.DeleteTaskResponse) => void; } - /** Represents a SyncAgentService */ - class SyncAgentService extends $protobuf.rpc.Service { - - /** - * Constructs a new SyncAgentService service. - * @param rpcImpl RPC implementation - * @param [requestDelimited=false] Whether requests are length-delimited - * @param [responseDelimited=false] Whether responses are length-delimited - */ - constructor(rpcImpl: $protobuf.RPCImpl, requestDelimited?: boolean, responseDelimited?: boolean); - - /** - * Creates new SyncAgentService service using the specified rpc implementation. - * @param rpcImpl RPC implementation - * @param [requestDelimited=false] Whether requests are length-delimited - * @param [responseDelimited=false] Whether responses are length-delimited - * @returns RPC service. Useful where requests and/or responses are streamed. - */ - public static create(rpcImpl: $protobuf.RPCImpl, requestDelimited?: boolean, responseDelimited?: boolean): SyncAgentService; - - /** - * Calls DoTask. - * @param request DoTaskRequest message or plain object - * @param callback Node-style callback called with the error, if any, and DoTaskResponse - */ - public doTask(request: flyteidl.admin.IDoTaskRequest, callback: flyteidl.service.SyncAgentService.DoTaskCallback): void; - - /** - * Calls DoTask. - * @param request DoTaskRequest message or plain object - * @returns Promise - */ - public doTask(request: flyteidl.admin.IDoTaskRequest): Promise; - } - - namespace SyncAgentService { - - /** - * Callback as used by {@link flyteidl.service.SyncAgentService#doTask}. - * @param error Error, if any - * @param [response] DoTaskResponse - */ - type DoTaskCallback = (error: (Error|null), response?: flyteidl.admin.DoTaskResponse) => void; - } - /** Properties of a OAuth2MetadataRequest. */ interface IOAuth2MetadataRequest { } diff --git a/flyteidl/gen/pb-js/flyteidl.js b/flyteidl/gen/pb-js/flyteidl.js index eec33fd75c..1eacf652ec 100644 --- a/flyteidl/gen/pb-js/flyteidl.js +++ b/flyteidl/gen/pb-js/flyteidl.js @@ -19767,6 +19767,8 @@ * @memberof flyteidl.admin * @interface ICreateTaskResponse * @property {Uint8Array|null} [resourceMeta] CreateTaskResponse resourceMeta + * @property {flyteidl.admin.IResource|null} [resource] CreateTaskResponse resource + * @property {Array.|null} [logLinks] CreateTaskResponse logLinks */ /** @@ -19778,6 +19780,7 @@ * @param {flyteidl.admin.ICreateTaskResponse=} [properties] Properties to set */ function CreateTaskResponse(properties) { + this.logLinks = []; if (properties) for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) if (properties[keys[i]] != null) @@ -19792,6 +19795,36 @@ */ CreateTaskResponse.prototype.resourceMeta = $util.newBuffer([]); + /** + * CreateTaskResponse resource. + * @member {flyteidl.admin.IResource|null|undefined} resource + * @memberof flyteidl.admin.CreateTaskResponse + * @instance + */ + CreateTaskResponse.prototype.resource = null; + + /** + * CreateTaskResponse logLinks. + * @member {Array.} logLinks + * @memberof flyteidl.admin.CreateTaskResponse + * @instance + */ + CreateTaskResponse.prototype.logLinks = $util.emptyArray; + + // OneOf field names bound to virtual getters and setters + var $oneOfFields; + + /** + * CreateTaskResponse res. + * @member {"resourceMeta"|"resource"|undefined} res + * @memberof flyteidl.admin.CreateTaskResponse + * @instance + */ + Object.defineProperty(CreateTaskResponse.prototype, "res", { + get: $util.oneOfGetter($oneOfFields = ["resourceMeta", "resource"]), + set: $util.oneOfSetter($oneOfFields) + }); + /** * Creates a new CreateTaskResponse instance using the specified properties. * @function create @@ -19818,6 +19851,11 @@ writer = $Writer.create(); if (message.resourceMeta != null && message.hasOwnProperty("resourceMeta")) writer.uint32(/* id 1, wireType 2 =*/10).bytes(message.resourceMeta); + if (message.resource != null && message.hasOwnProperty("resource")) + $root.flyteidl.admin.Resource.encode(message.resource, writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim(); + if (message.logLinks != null && message.logLinks.length) + for (var i = 0; i < message.logLinks.length; ++i) + $root.flyteidl.core.TaskLog.encode(message.logLinks[i], writer.uint32(/* id 3, wireType 2 =*/26).fork()).ldelim(); return writer; }; @@ -19842,6 +19880,14 @@ case 1: message.resourceMeta = reader.bytes(); break; + case 2: + message.resource = $root.flyteidl.admin.Resource.decode(reader, reader.uint32()); + break; + case 3: + if (!(message.logLinks && message.logLinks.length)) + message.logLinks = []; + message.logLinks.push($root.flyteidl.core.TaskLog.decode(reader, reader.uint32())); + break; default: reader.skipType(tag & 7); break; @@ -19861,9 +19907,31 @@ CreateTaskResponse.verify = function verify(message) { if (typeof message !== "object" || message === null) return "object expected"; - if (message.resourceMeta != null && message.hasOwnProperty("resourceMeta")) + var properties = {}; + if (message.resourceMeta != null && message.hasOwnProperty("resourceMeta")) { + properties.res = 1; if (!(message.resourceMeta && typeof message.resourceMeta.length === "number" || $util.isString(message.resourceMeta))) return "resourceMeta: buffer expected"; + } + if (message.resource != null && message.hasOwnProperty("resource")) { + if (properties.res === 1) + return "res: multiple values"; + properties.res = 1; + { + var error = $root.flyteidl.admin.Resource.verify(message.resource); + if (error) + return "resource." + error; + } + } + if (message.logLinks != null && message.hasOwnProperty("logLinks")) { + if (!Array.isArray(message.logLinks)) + return "logLinks: array expected"; + for (var i = 0; i < message.logLinks.length; ++i) { + var error = $root.flyteidl.core.TaskLog.verify(message.logLinks[i]); + if (error) + return "logLinks." + error; + } + } return null; }; @@ -20510,285 +20578,6 @@ return DeleteTaskResponse; })(); - admin.DoTaskRequest = (function() { - - /** - * Properties of a DoTaskRequest. - * @memberof flyteidl.admin - * @interface IDoTaskRequest - * @property {flyteidl.core.ILiteralMap|null} [inputs] DoTaskRequest inputs - * @property {flyteidl.core.ITaskTemplate|null} [template] DoTaskRequest template - * @property {string|null} [outputPrefix] DoTaskRequest outputPrefix - * @property {flyteidl.admin.ITaskExecutionMetadata|null} [taskExecutionMetadata] DoTaskRequest taskExecutionMetadata - */ - - /** - * Constructs a new DoTaskRequest. - * @memberof flyteidl.admin - * @classdesc Represents a DoTaskRequest. - * @implements IDoTaskRequest - * @constructor - * @param {flyteidl.admin.IDoTaskRequest=} [properties] Properties to set - */ - function DoTaskRequest(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * DoTaskRequest inputs. - * @member {flyteidl.core.ILiteralMap|null|undefined} inputs - * @memberof flyteidl.admin.DoTaskRequest - * @instance - */ - DoTaskRequest.prototype.inputs = null; - - /** - * DoTaskRequest template. - * @member {flyteidl.core.ITaskTemplate|null|undefined} template - * @memberof flyteidl.admin.DoTaskRequest - * @instance - */ - DoTaskRequest.prototype.template = null; - - /** - * DoTaskRequest outputPrefix. - * @member {string} outputPrefix - * @memberof flyteidl.admin.DoTaskRequest - * @instance - */ - DoTaskRequest.prototype.outputPrefix = ""; - - /** - * DoTaskRequest taskExecutionMetadata. - * @member {flyteidl.admin.ITaskExecutionMetadata|null|undefined} taskExecutionMetadata - * @memberof flyteidl.admin.DoTaskRequest - * @instance - */ - DoTaskRequest.prototype.taskExecutionMetadata = null; - - /** - * Creates a new DoTaskRequest instance using the specified properties. - * @function create - * @memberof flyteidl.admin.DoTaskRequest - * @static - * @param {flyteidl.admin.IDoTaskRequest=} [properties] Properties to set - * @returns {flyteidl.admin.DoTaskRequest} DoTaskRequest instance - */ - DoTaskRequest.create = function create(properties) { - return new DoTaskRequest(properties); - }; - - /** - * Encodes the specified DoTaskRequest message. Does not implicitly {@link flyteidl.admin.DoTaskRequest.verify|verify} messages. - * @function encode - * @memberof flyteidl.admin.DoTaskRequest - * @static - * @param {flyteidl.admin.IDoTaskRequest} message DoTaskRequest message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - DoTaskRequest.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.inputs != null && message.hasOwnProperty("inputs")) - $root.flyteidl.core.LiteralMap.encode(message.inputs, writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim(); - if (message.template != null && message.hasOwnProperty("template")) - $root.flyteidl.core.TaskTemplate.encode(message.template, writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim(); - if (message.outputPrefix != null && message.hasOwnProperty("outputPrefix")) - writer.uint32(/* id 3, wireType 2 =*/26).string(message.outputPrefix); - if (message.taskExecutionMetadata != null && message.hasOwnProperty("taskExecutionMetadata")) - $root.flyteidl.admin.TaskExecutionMetadata.encode(message.taskExecutionMetadata, writer.uint32(/* id 4, wireType 2 =*/34).fork()).ldelim(); - return writer; - }; - - /** - * Decodes a DoTaskRequest message from the specified reader or buffer. - * @function decode - * @memberof flyteidl.admin.DoTaskRequest - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {flyteidl.admin.DoTaskRequest} DoTaskRequest - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - DoTaskRequest.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.flyteidl.admin.DoTaskRequest(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: - message.inputs = $root.flyteidl.core.LiteralMap.decode(reader, reader.uint32()); - break; - case 2: - message.template = $root.flyteidl.core.TaskTemplate.decode(reader, reader.uint32()); - break; - case 3: - message.outputPrefix = reader.string(); - break; - case 4: - message.taskExecutionMetadata = $root.flyteidl.admin.TaskExecutionMetadata.decode(reader, reader.uint32()); - break; - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Verifies a DoTaskRequest message. - * @function verify - * @memberof flyteidl.admin.DoTaskRequest - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - DoTaskRequest.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.inputs != null && message.hasOwnProperty("inputs")) { - var error = $root.flyteidl.core.LiteralMap.verify(message.inputs); - if (error) - return "inputs." + error; - } - if (message.template != null && message.hasOwnProperty("template")) { - var error = $root.flyteidl.core.TaskTemplate.verify(message.template); - if (error) - return "template." + error; - } - if (message.outputPrefix != null && message.hasOwnProperty("outputPrefix")) - if (!$util.isString(message.outputPrefix)) - return "outputPrefix: string expected"; - if (message.taskExecutionMetadata != null && message.hasOwnProperty("taskExecutionMetadata")) { - var error = $root.flyteidl.admin.TaskExecutionMetadata.verify(message.taskExecutionMetadata); - if (error) - return "taskExecutionMetadata." + error; - } - return null; - }; - - return DoTaskRequest; - })(); - - admin.DoTaskResponse = (function() { - - /** - * Properties of a DoTaskResponse. - * @memberof flyteidl.admin - * @interface IDoTaskResponse - * @property {flyteidl.admin.IResource|null} [resource] DoTaskResponse resource - */ - - /** - * Constructs a new DoTaskResponse. - * @memberof flyteidl.admin - * @classdesc Represents a DoTaskResponse. - * @implements IDoTaskResponse - * @constructor - * @param {flyteidl.admin.IDoTaskResponse=} [properties] Properties to set - */ - function DoTaskResponse(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * DoTaskResponse resource. - * @member {flyteidl.admin.IResource|null|undefined} resource - * @memberof flyteidl.admin.DoTaskResponse - * @instance - */ - DoTaskResponse.prototype.resource = null; - - /** - * Creates a new DoTaskResponse instance using the specified properties. - * @function create - * @memberof flyteidl.admin.DoTaskResponse - * @static - * @param {flyteidl.admin.IDoTaskResponse=} [properties] Properties to set - * @returns {flyteidl.admin.DoTaskResponse} DoTaskResponse instance - */ - DoTaskResponse.create = function create(properties) { - return new DoTaskResponse(properties); - }; - - /** - * Encodes the specified DoTaskResponse message. Does not implicitly {@link flyteidl.admin.DoTaskResponse.verify|verify} messages. - * @function encode - * @memberof flyteidl.admin.DoTaskResponse - * @static - * @param {flyteidl.admin.IDoTaskResponse} message DoTaskResponse message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - DoTaskResponse.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.resource != null && message.hasOwnProperty("resource")) - $root.flyteidl.admin.Resource.encode(message.resource, writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim(); - return writer; - }; - - /** - * Decodes a DoTaskResponse message from the specified reader or buffer. - * @function decode - * @memberof flyteidl.admin.DoTaskResponse - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {flyteidl.admin.DoTaskResponse} DoTaskResponse - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - DoTaskResponse.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.flyteidl.admin.DoTaskResponse(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: - message.resource = $root.flyteidl.admin.Resource.decode(reader, reader.uint32()); - break; - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Verifies a DoTaskResponse message. - * @function verify - * @memberof flyteidl.admin.DoTaskResponse - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - DoTaskResponse.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.resource != null && message.hasOwnProperty("resource")) { - var error = $root.flyteidl.admin.Resource.verify(message.resource); - if (error) - return "resource." + error; - } - return null; - }; - - return DoTaskResponse; - })(); - admin.ClusterAssignment = (function() { /** @@ -46423,41 +46212,41 @@ return AdminService; })(); - service.AsyncAgentService = (function() { + service.AgentService = (function() { /** - * Constructs a new AsyncAgentService service. + * Constructs a new AgentService service. * @memberof flyteidl.service - * @classdesc Represents an AsyncAgentService + * @classdesc Represents an AgentService * @extends $protobuf.rpc.Service * @constructor * @param {$protobuf.RPCImpl} rpcImpl RPC implementation * @param {boolean} [requestDelimited=false] Whether requests are length-delimited * @param {boolean} [responseDelimited=false] Whether responses are length-delimited */ - function AsyncAgentService(rpcImpl, requestDelimited, responseDelimited) { + function AgentService(rpcImpl, requestDelimited, responseDelimited) { $protobuf.rpc.Service.call(this, rpcImpl, requestDelimited, responseDelimited); } - (AsyncAgentService.prototype = Object.create($protobuf.rpc.Service.prototype)).constructor = AsyncAgentService; + (AgentService.prototype = Object.create($protobuf.rpc.Service.prototype)).constructor = AgentService; /** - * Creates new AsyncAgentService service using the specified rpc implementation. + * Creates new AgentService service using the specified rpc implementation. * @function create - * @memberof flyteidl.service.AsyncAgentService + * @memberof flyteidl.service.AgentService * @static * @param {$protobuf.RPCImpl} rpcImpl RPC implementation * @param {boolean} [requestDelimited=false] Whether requests are length-delimited * @param {boolean} [responseDelimited=false] Whether responses are length-delimited - * @returns {AsyncAgentService} RPC service. Useful where requests and/or responses are streamed. + * @returns {AgentService} RPC service. Useful where requests and/or responses are streamed. */ - AsyncAgentService.create = function create(rpcImpl, requestDelimited, responseDelimited) { + AgentService.create = function create(rpcImpl, requestDelimited, responseDelimited) { return new this(rpcImpl, requestDelimited, responseDelimited); }; /** - * Callback as used by {@link flyteidl.service.AsyncAgentService#createTask}. - * @memberof flyteidl.service.AsyncAgentService + * Callback as used by {@link flyteidl.service.AgentService#createTask}. + * @memberof flyteidl.service.AgentService * @typedef CreateTaskCallback * @type {function} * @param {Error|null} error Error, if any @@ -46467,21 +46256,21 @@ /** * Calls CreateTask. * @function createTask - * @memberof flyteidl.service.AsyncAgentService + * @memberof flyteidl.service.AgentService * @instance * @param {flyteidl.admin.ICreateTaskRequest} request CreateTaskRequest message or plain object - * @param {flyteidl.service.AsyncAgentService.CreateTaskCallback} callback Node-style callback called with the error, if any, and CreateTaskResponse + * @param {flyteidl.service.AgentService.CreateTaskCallback} callback Node-style callback called with the error, if any, and CreateTaskResponse * @returns {undefined} * @variation 1 */ - Object.defineProperty(AsyncAgentService.prototype.createTask = function createTask(request, callback) { + Object.defineProperty(AgentService.prototype.createTask = function createTask(request, callback) { return this.rpcCall(createTask, $root.flyteidl.admin.CreateTaskRequest, $root.flyteidl.admin.CreateTaskResponse, request, callback); }, "name", { value: "CreateTask" }); /** * Calls CreateTask. * @function createTask - * @memberof flyteidl.service.AsyncAgentService + * @memberof flyteidl.service.AgentService * @instance * @param {flyteidl.admin.ICreateTaskRequest} request CreateTaskRequest message or plain object * @returns {Promise} Promise @@ -46489,8 +46278,8 @@ */ /** - * Callback as used by {@link flyteidl.service.AsyncAgentService#getTask}. - * @memberof flyteidl.service.AsyncAgentService + * Callback as used by {@link flyteidl.service.AgentService#getTask}. + * @memberof flyteidl.service.AgentService * @typedef GetTaskCallback * @type {function} * @param {Error|null} error Error, if any @@ -46500,21 +46289,21 @@ /** * Calls GetTask. * @function getTask - * @memberof flyteidl.service.AsyncAgentService + * @memberof flyteidl.service.AgentService * @instance * @param {flyteidl.admin.IGetTaskRequest} request GetTaskRequest message or plain object - * @param {flyteidl.service.AsyncAgentService.GetTaskCallback} callback Node-style callback called with the error, if any, and GetTaskResponse + * @param {flyteidl.service.AgentService.GetTaskCallback} callback Node-style callback called with the error, if any, and GetTaskResponse * @returns {undefined} * @variation 1 */ - Object.defineProperty(AsyncAgentService.prototype.getTask = function getTask(request, callback) { + Object.defineProperty(AgentService.prototype.getTask = function getTask(request, callback) { return this.rpcCall(getTask, $root.flyteidl.admin.GetTaskRequest, $root.flyteidl.admin.GetTaskResponse, request, callback); }, "name", { value: "GetTask" }); /** * Calls GetTask. * @function getTask - * @memberof flyteidl.service.AsyncAgentService + * @memberof flyteidl.service.AgentService * @instance * @param {flyteidl.admin.IGetTaskRequest} request GetTaskRequest message or plain object * @returns {Promise} Promise @@ -46522,8 +46311,8 @@ */ /** - * Callback as used by {@link flyteidl.service.AsyncAgentService#deleteTask}. - * @memberof flyteidl.service.AsyncAgentService + * Callback as used by {@link flyteidl.service.AgentService#deleteTask}. + * @memberof flyteidl.service.AgentService * @typedef DeleteTaskCallback * @type {function} * @param {Error|null} error Error, if any @@ -46533,96 +46322,28 @@ /** * Calls DeleteTask. * @function deleteTask - * @memberof flyteidl.service.AsyncAgentService + * @memberof flyteidl.service.AgentService * @instance * @param {flyteidl.admin.IDeleteTaskRequest} request DeleteTaskRequest message or plain object - * @param {flyteidl.service.AsyncAgentService.DeleteTaskCallback} callback Node-style callback called with the error, if any, and DeleteTaskResponse + * @param {flyteidl.service.AgentService.DeleteTaskCallback} callback Node-style callback called with the error, if any, and DeleteTaskResponse * @returns {undefined} * @variation 1 */ - Object.defineProperty(AsyncAgentService.prototype.deleteTask = function deleteTask(request, callback) { + Object.defineProperty(AgentService.prototype.deleteTask = function deleteTask(request, callback) { return this.rpcCall(deleteTask, $root.flyteidl.admin.DeleteTaskRequest, $root.flyteidl.admin.DeleteTaskResponse, request, callback); }, "name", { value: "DeleteTask" }); /** * Calls DeleteTask. * @function deleteTask - * @memberof flyteidl.service.AsyncAgentService + * @memberof flyteidl.service.AgentService * @instance * @param {flyteidl.admin.IDeleteTaskRequest} request DeleteTaskRequest message or plain object * @returns {Promise} Promise * @variation 2 */ - return AsyncAgentService; - })(); - - service.SyncAgentService = (function() { - - /** - * Constructs a new SyncAgentService service. - * @memberof flyteidl.service - * @classdesc Represents a SyncAgentService - * @extends $protobuf.rpc.Service - * @constructor - * @param {$protobuf.RPCImpl} rpcImpl RPC implementation - * @param {boolean} [requestDelimited=false] Whether requests are length-delimited - * @param {boolean} [responseDelimited=false] Whether responses are length-delimited - */ - function SyncAgentService(rpcImpl, requestDelimited, responseDelimited) { - $protobuf.rpc.Service.call(this, rpcImpl, requestDelimited, responseDelimited); - } - - (SyncAgentService.prototype = Object.create($protobuf.rpc.Service.prototype)).constructor = SyncAgentService; - - /** - * Creates new SyncAgentService service using the specified rpc implementation. - * @function create - * @memberof flyteidl.service.SyncAgentService - * @static - * @param {$protobuf.RPCImpl} rpcImpl RPC implementation - * @param {boolean} [requestDelimited=false] Whether requests are length-delimited - * @param {boolean} [responseDelimited=false] Whether responses are length-delimited - * @returns {SyncAgentService} RPC service. Useful where requests and/or responses are streamed. - */ - SyncAgentService.create = function create(rpcImpl, requestDelimited, responseDelimited) { - return new this(rpcImpl, requestDelimited, responseDelimited); - }; - - /** - * Callback as used by {@link flyteidl.service.SyncAgentService#doTask}. - * @memberof flyteidl.service.SyncAgentService - * @typedef DoTaskCallback - * @type {function} - * @param {Error|null} error Error, if any - * @param {flyteidl.admin.DoTaskResponse} [response] DoTaskResponse - */ - - /** - * Calls DoTask. - * @function doTask - * @memberof flyteidl.service.SyncAgentService - * @instance - * @param {flyteidl.admin.IDoTaskRequest} request DoTaskRequest message or plain object - * @param {flyteidl.service.SyncAgentService.DoTaskCallback} callback Node-style callback called with the error, if any, and DoTaskResponse - * @returns {undefined} - * @variation 1 - */ - Object.defineProperty(SyncAgentService.prototype.doTask = function doTask(request, callback) { - return this.rpcCall(doTask, $root.flyteidl.admin.DoTaskRequest, $root.flyteidl.admin.DoTaskResponse, request, callback); - }, "name", { value: "DoTask" }); - - /** - * Calls DoTask. - * @function doTask - * @memberof flyteidl.service.SyncAgentService - * @instance - * @param {flyteidl.admin.IDoTaskRequest} request DoTaskRequest message or plain object - * @returns {Promise} Promise - * @variation 2 - */ - - return SyncAgentService; + return AgentService; })(); service.OAuth2MetadataRequest = (function() { diff --git a/flyteidl/gen/pb_python/flyteidl/admin/agent_pb2.py b/flyteidl/gen/pb_python/flyteidl/admin/agent_pb2.py index 644aa1ad09..80586a1b9a 100644 --- a/flyteidl/gen/pb_python/flyteidl/admin/agent_pb2.py +++ b/flyteidl/gen/pb_python/flyteidl/admin/agent_pb2.py @@ -18,7 +18,7 @@ from flyteidl.core import execution_pb2 as flyteidl_dot_core_dot_execution__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1a\x66lyteidl/admin/agent.proto\x12\x0e\x66lyteidl.admin\x1a\x1c\x66lyteidl/core/literals.proto\x1a\x19\x66lyteidl/core/tasks.proto\x1a\x1d\x66lyteidl/core/interface.proto\x1a\x1e\x66lyteidl/core/identifier.proto\x1a\x1d\x66lyteidl/core/execution.proto\"\x98\x05\n\x15TaskExecutionMetadata\x12R\n\x11task_execution_id\x18\x01 \x01(\x0b\x32&.flyteidl.core.TaskExecutionIdentifierR\x0ftaskExecutionId\x12\x1c\n\tnamespace\x18\x02 \x01(\tR\tnamespace\x12I\n\x06labels\x18\x03 \x03(\x0b\x32\x31.flyteidl.admin.TaskExecutionMetadata.LabelsEntryR\x06labels\x12X\n\x0b\x61nnotations\x18\x04 \x03(\x0b\x32\x36.flyteidl.admin.TaskExecutionMetadata.AnnotationsEntryR\x0b\x61nnotations\x12.\n\x13k8s_service_account\x18\x05 \x01(\tR\x11k8sServiceAccount\x12t\n\x15\x65nvironment_variables\x18\x06 \x03(\x0b\x32?.flyteidl.admin.TaskExecutionMetadata.EnvironmentVariablesEntryR\x14\x65nvironmentVariables\x1a\x39\n\x0bLabelsEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x1a>\n\x10\x41nnotationsEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x1aG\n\x19\x45nvironmentVariablesEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\"\x83\x02\n\x11\x43reateTaskRequest\x12\x31\n\x06inputs\x18\x01 \x01(\x0b\x32\x19.flyteidl.core.LiteralMapR\x06inputs\x12\x37\n\x08template\x18\x02 \x01(\x0b\x32\x1b.flyteidl.core.TaskTemplateR\x08template\x12#\n\routput_prefix\x18\x03 \x01(\tR\x0coutputPrefix\x12]\n\x17task_execution_metadata\x18\x04 \x01(\x0b\x32%.flyteidl.admin.TaskExecutionMetadataR\x15taskExecutionMetadata\"9\n\x12\x43reateTaskResponse\x12#\n\rresource_meta\x18\x01 \x01(\x0cR\x0cresourceMeta\"R\n\x0eGetTaskRequest\x12\x1b\n\ttask_type\x18\x01 \x01(\tR\x08taskType\x12#\n\rresource_meta\x18\x02 \x01(\x0cR\x0cresourceMeta\"|\n\x0fGetTaskResponse\x12\x34\n\x08resource\x18\x01 \x01(\x0b\x32\x18.flyteidl.admin.ResourceR\x08resource\x12\x33\n\tlog_links\x18\x02 \x03(\x0b\x32\x16.flyteidl.core.TaskLogR\x08logLinks\"\x86\x01\n\x08Resource\x12+\n\x05state\x18\x01 \x01(\x0e\x32\x15.flyteidl.admin.StateR\x05state\x12\x33\n\x07outputs\x18\x02 \x01(\x0b\x32\x19.flyteidl.core.LiteralMapR\x07outputs\x12\x18\n\x07message\x18\x03 \x01(\tR\x07message\"U\n\x11\x44\x65leteTaskRequest\x12\x1b\n\ttask_type\x18\x01 \x01(\tR\x08taskType\x12#\n\rresource_meta\x18\x02 \x01(\x0cR\x0cresourceMeta\"\x14\n\x12\x44\x65leteTaskResponse\"\xff\x01\n\rDoTaskRequest\x12\x31\n\x06inputs\x18\x01 \x01(\x0b\x32\x19.flyteidl.core.LiteralMapR\x06inputs\x12\x37\n\x08template\x18\x02 \x01(\x0b\x32\x1b.flyteidl.core.TaskTemplateR\x08template\x12#\n\routput_prefix\x18\x03 \x01(\tR\x0coutputPrefix\x12]\n\x17task_execution_metadata\x18\x04 \x01(\x0b\x32%.flyteidl.admin.TaskExecutionMetadataR\x15taskExecutionMetadata\"F\n\x0e\x44oTaskResponse\x12\x34\n\x08resource\x18\x01 \x01(\x0b\x32\x18.flyteidl.admin.ResourceR\x08resource*^\n\x05State\x12\x15\n\x11RETRYABLE_FAILURE\x10\x00\x12\x15\n\x11PERMANENT_FAILURE\x10\x01\x12\x0b\n\x07PENDING\x10\x02\x12\x0b\n\x07RUNNING\x10\x03\x12\r\n\tSUCCEEDED\x10\x04\x42\xb6\x01\n\x12\x63om.flyteidl.adminB\nAgentProtoP\x01Z;github.com/flyteorg/flyte/flyteidl/gen/pb-go/flyteidl/admin\xa2\x02\x03\x46\x41X\xaa\x02\x0e\x46lyteidl.Admin\xca\x02\x0e\x46lyteidl\\Admin\xe2\x02\x1a\x46lyteidl\\Admin\\GPBMetadata\xea\x02\x0f\x46lyteidl::Adminb\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1a\x66lyteidl/admin/agent.proto\x12\x0e\x66lyteidl.admin\x1a\x1c\x66lyteidl/core/literals.proto\x1a\x19\x66lyteidl/core/tasks.proto\x1a\x1d\x66lyteidl/core/interface.proto\x1a\x1e\x66lyteidl/core/identifier.proto\x1a\x1d\x66lyteidl/core/execution.proto\"\x98\x05\n\x15TaskExecutionMetadata\x12R\n\x11task_execution_id\x18\x01 \x01(\x0b\x32&.flyteidl.core.TaskExecutionIdentifierR\x0ftaskExecutionId\x12\x1c\n\tnamespace\x18\x02 \x01(\tR\tnamespace\x12I\n\x06labels\x18\x03 \x03(\x0b\x32\x31.flyteidl.admin.TaskExecutionMetadata.LabelsEntryR\x06labels\x12X\n\x0b\x61nnotations\x18\x04 \x03(\x0b\x32\x36.flyteidl.admin.TaskExecutionMetadata.AnnotationsEntryR\x0b\x61nnotations\x12.\n\x13k8s_service_account\x18\x05 \x01(\tR\x11k8sServiceAccount\x12t\n\x15\x65nvironment_variables\x18\x06 \x03(\x0b\x32?.flyteidl.admin.TaskExecutionMetadata.EnvironmentVariablesEntryR\x14\x65nvironmentVariables\x1a\x39\n\x0bLabelsEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x1a>\n\x10\x41nnotationsEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x1aG\n\x19\x45nvironmentVariablesEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\"\x83\x02\n\x11\x43reateTaskRequest\x12\x31\n\x06inputs\x18\x01 \x01(\x0b\x32\x19.flyteidl.core.LiteralMapR\x06inputs\x12\x37\n\x08template\x18\x02 \x01(\x0b\x32\x1b.flyteidl.core.TaskTemplateR\x08template\x12#\n\routput_prefix\x18\x03 \x01(\tR\x0coutputPrefix\x12]\n\x17task_execution_metadata\x18\x04 \x01(\x0b\x32%.flyteidl.admin.TaskExecutionMetadataR\x15taskExecutionMetadata\"\xaf\x01\n\x12\x43reateTaskResponse\x12%\n\rresource_meta\x18\x01 \x01(\x0cH\x00R\x0cresourceMeta\x12\x36\n\x08resource\x18\x02 \x01(\x0b\x32\x18.flyteidl.admin.ResourceH\x00R\x08resource\x12\x33\n\tlog_links\x18\x03 \x03(\x0b\x32\x16.flyteidl.core.TaskLogR\x08logLinksB\x05\n\x03res\"R\n\x0eGetTaskRequest\x12\x1b\n\ttask_type\x18\x01 \x01(\tR\x08taskType\x12#\n\rresource_meta\x18\x02 \x01(\x0cR\x0cresourceMeta\"|\n\x0fGetTaskResponse\x12\x34\n\x08resource\x18\x01 \x01(\x0b\x32\x18.flyteidl.admin.ResourceR\x08resource\x12\x33\n\tlog_links\x18\x02 \x03(\x0b\x32\x16.flyteidl.core.TaskLogR\x08logLinks\"\x86\x01\n\x08Resource\x12+\n\x05state\x18\x01 \x01(\x0e\x32\x15.flyteidl.admin.StateR\x05state\x12\x33\n\x07outputs\x18\x02 \x01(\x0b\x32\x19.flyteidl.core.LiteralMapR\x07outputs\x12\x18\n\x07message\x18\x03 \x01(\tR\x07message\"U\n\x11\x44\x65leteTaskRequest\x12\x1b\n\ttask_type\x18\x01 \x01(\tR\x08taskType\x12#\n\rresource_meta\x18\x02 \x01(\x0cR\x0cresourceMeta\"\x14\n\x12\x44\x65leteTaskResponse*^\n\x05State\x12\x15\n\x11RETRYABLE_FAILURE\x10\x00\x12\x15\n\x11PERMANENT_FAILURE\x10\x01\x12\x0b\n\x07PENDING\x10\x02\x12\x0b\n\x07RUNNING\x10\x03\x12\r\n\tSUCCEEDED\x10\x04\x42\xb6\x01\n\x12\x63om.flyteidl.adminB\nAgentProtoP\x01Z;github.com/flyteorg/flyte/flyteidl/gen/pb-go/flyteidl/admin\xa2\x02\x03\x46\x41X\xaa\x02\x0e\x46lyteidl.Admin\xca\x02\x0e\x46lyteidl\\Admin\xe2\x02\x1a\x46lyteidl\\Admin\\GPBMetadata\xea\x02\x0f\x46lyteidl::Adminb\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -33,8 +33,8 @@ _TASKEXECUTIONMETADATA_ANNOTATIONSENTRY._serialized_options = b'8\001' _TASKEXECUTIONMETADATA_ENVIRONMENTVARIABLESENTRY._options = None _TASKEXECUTIONMETADATA_ENVIRONMENTVARIABLESENTRY._serialized_options = b'8\001' - _globals['_STATE']._serialized_start=1971 - _globals['_STATE']._serialized_end=2065 + _globals['_STATE']._serialized_start=1760 + _globals['_STATE']._serialized_end=1854 _globals['_TASKEXECUTIONMETADATA']._serialized_start=198 _globals['_TASKEXECUTIONMETADATA']._serialized_end=862 _globals['_TASKEXECUTIONMETADATA_LABELSENTRY']._serialized_start=668 @@ -45,20 +45,16 @@ _globals['_TASKEXECUTIONMETADATA_ENVIRONMENTVARIABLESENTRY']._serialized_end=862 _globals['_CREATETASKREQUEST']._serialized_start=865 _globals['_CREATETASKREQUEST']._serialized_end=1124 - _globals['_CREATETASKRESPONSE']._serialized_start=1126 - _globals['_CREATETASKRESPONSE']._serialized_end=1183 - _globals['_GETTASKREQUEST']._serialized_start=1185 - _globals['_GETTASKREQUEST']._serialized_end=1267 - _globals['_GETTASKRESPONSE']._serialized_start=1269 - _globals['_GETTASKRESPONSE']._serialized_end=1393 - _globals['_RESOURCE']._serialized_start=1396 - _globals['_RESOURCE']._serialized_end=1530 - _globals['_DELETETASKREQUEST']._serialized_start=1532 - _globals['_DELETETASKREQUEST']._serialized_end=1617 - _globals['_DELETETASKRESPONSE']._serialized_start=1619 - _globals['_DELETETASKRESPONSE']._serialized_end=1639 - _globals['_DOTASKREQUEST']._serialized_start=1642 - _globals['_DOTASKREQUEST']._serialized_end=1897 - _globals['_DOTASKRESPONSE']._serialized_start=1899 - _globals['_DOTASKRESPONSE']._serialized_end=1969 + _globals['_CREATETASKRESPONSE']._serialized_start=1127 + _globals['_CREATETASKRESPONSE']._serialized_end=1302 + _globals['_GETTASKREQUEST']._serialized_start=1304 + _globals['_GETTASKREQUEST']._serialized_end=1386 + _globals['_GETTASKRESPONSE']._serialized_start=1388 + _globals['_GETTASKRESPONSE']._serialized_end=1512 + _globals['_RESOURCE']._serialized_start=1515 + _globals['_RESOURCE']._serialized_end=1649 + _globals['_DELETETASKREQUEST']._serialized_start=1651 + _globals['_DELETETASKREQUEST']._serialized_end=1736 + _globals['_DELETETASKRESPONSE']._serialized_start=1738 + _globals['_DELETETASKRESPONSE']._serialized_end=1758 # @@protoc_insertion_point(module_scope) diff --git a/flyteidl/gen/pb_python/flyteidl/admin/agent_pb2.pyi b/flyteidl/gen/pb_python/flyteidl/admin/agent_pb2.pyi index 81dde00d48..ee5625d62f 100644 --- a/flyteidl/gen/pb_python/flyteidl/admin/agent_pb2.pyi +++ b/flyteidl/gen/pb_python/flyteidl/admin/agent_pb2.pyi @@ -74,10 +74,14 @@ class CreateTaskRequest(_message.Message): def __init__(self, inputs: _Optional[_Union[_literals_pb2.LiteralMap, _Mapping]] = ..., template: _Optional[_Union[_tasks_pb2.TaskTemplate, _Mapping]] = ..., output_prefix: _Optional[str] = ..., task_execution_metadata: _Optional[_Union[TaskExecutionMetadata, _Mapping]] = ...) -> None: ... class CreateTaskResponse(_message.Message): - __slots__ = ["resource_meta"] + __slots__ = ["resource_meta", "resource", "log_links"] RESOURCE_META_FIELD_NUMBER: _ClassVar[int] + RESOURCE_FIELD_NUMBER: _ClassVar[int] + LOG_LINKS_FIELD_NUMBER: _ClassVar[int] resource_meta: bytes - def __init__(self, resource_meta: _Optional[bytes] = ...) -> None: ... + resource: Resource + log_links: _containers.RepeatedCompositeFieldContainer[_execution_pb2.TaskLog] + def __init__(self, resource_meta: _Optional[bytes] = ..., resource: _Optional[_Union[Resource, _Mapping]] = ..., log_links: _Optional[_Iterable[_Union[_execution_pb2.TaskLog, _Mapping]]] = ...) -> None: ... class GetTaskRequest(_message.Message): __slots__ = ["task_type", "resource_meta"] @@ -116,21 +120,3 @@ class DeleteTaskRequest(_message.Message): class DeleteTaskResponse(_message.Message): __slots__ = [] def __init__(self) -> None: ... - -class DoTaskRequest(_message.Message): - __slots__ = ["inputs", "template", "output_prefix", "task_execution_metadata"] - INPUTS_FIELD_NUMBER: _ClassVar[int] - TEMPLATE_FIELD_NUMBER: _ClassVar[int] - OUTPUT_PREFIX_FIELD_NUMBER: _ClassVar[int] - TASK_EXECUTION_METADATA_FIELD_NUMBER: _ClassVar[int] - inputs: _literals_pb2.LiteralMap - template: _tasks_pb2.TaskTemplate - output_prefix: str - task_execution_metadata: TaskExecutionMetadata - def __init__(self, inputs: _Optional[_Union[_literals_pb2.LiteralMap, _Mapping]] = ..., template: _Optional[_Union[_tasks_pb2.TaskTemplate, _Mapping]] = ..., output_prefix: _Optional[str] = ..., task_execution_metadata: _Optional[_Union[TaskExecutionMetadata, _Mapping]] = ...) -> None: ... - -class DoTaskResponse(_message.Message): - __slots__ = ["resource"] - RESOURCE_FIELD_NUMBER: _ClassVar[int] - resource: Resource - def __init__(self, resource: _Optional[_Union[Resource, _Mapping]] = ...) -> None: ... diff --git a/flyteidl/gen/pb_python/flyteidl/service/agent_pb2.py b/flyteidl/gen/pb_python/flyteidl/service/agent_pb2.py index 8bb637c039..e79a585b22 100644 --- a/flyteidl/gen/pb_python/flyteidl/service/agent_pb2.py +++ b/flyteidl/gen/pb_python/flyteidl/service/agent_pb2.py @@ -14,7 +14,7 @@ from flyteidl.admin import agent_pb2 as flyteidl_dot_admin_dot_agent__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1c\x66lyteidl/service/agent.proto\x12\x10\x66lyteidl.service\x1a\x1a\x66lyteidl/admin/agent.proto2\x8f\x02\n\x11\x41syncAgentService\x12U\n\nCreateTask\x12!.flyteidl.admin.CreateTaskRequest\x1a\".flyteidl.admin.CreateTaskResponse\"\x00\x12L\n\x07GetTask\x12\x1e.flyteidl.admin.GetTaskRequest\x1a\x1f.flyteidl.admin.GetTaskResponse\"\x00\x12U\n\nDeleteTask\x12!.flyteidl.admin.DeleteTaskRequest\x1a\".flyteidl.admin.DeleteTaskResponse\"\x00\x32]\n\x10SyncAgentService\x12I\n\x06\x44oTask\x12\x1d.flyteidl.admin.DoTaskRequest\x1a\x1e.flyteidl.admin.DoTaskResponse\"\x00\x42\xc2\x01\n\x14\x63om.flyteidl.serviceB\nAgentProtoP\x01Z=github.com/flyteorg/flyte/flyteidl/gen/pb-go/flyteidl/service\xa2\x02\x03\x46SX\xaa\x02\x10\x46lyteidl.Service\xca\x02\x10\x46lyteidl\\Service\xe2\x02\x1c\x46lyteidl\\Service\\GPBMetadata\xea\x02\x11\x46lyteidl::Serviceb\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1c\x66lyteidl/service/agent.proto\x12\x10\x66lyteidl.service\x1a\x1a\x66lyteidl/admin/agent.proto2\x8a\x02\n\x0c\x41gentService\x12U\n\nCreateTask\x12!.flyteidl.admin.CreateTaskRequest\x1a\".flyteidl.admin.CreateTaskResponse\"\x00\x12L\n\x07GetTask\x12\x1e.flyteidl.admin.GetTaskRequest\x1a\x1f.flyteidl.admin.GetTaskResponse\"\x00\x12U\n\nDeleteTask\x12!.flyteidl.admin.DeleteTaskRequest\x1a\".flyteidl.admin.DeleteTaskResponse\"\x00\x42\xc2\x01\n\x14\x63om.flyteidl.serviceB\nAgentProtoP\x01Z=github.com/flyteorg/flyte/flyteidl/gen/pb-go/flyteidl/service\xa2\x02\x03\x46SX\xaa\x02\x10\x46lyteidl.Service\xca\x02\x10\x46lyteidl\\Service\xe2\x02\x1c\x46lyteidl\\Service\\GPBMetadata\xea\x02\x11\x46lyteidl::Serviceb\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -23,8 +23,6 @@ DESCRIPTOR._options = None DESCRIPTOR._serialized_options = b'\n\024com.flyteidl.serviceB\nAgentProtoP\001Z=github.com/flyteorg/flyte/flyteidl/gen/pb-go/flyteidl/service\242\002\003FSX\252\002\020Flyteidl.Service\312\002\020Flyteidl\\Service\342\002\034Flyteidl\\Service\\GPBMetadata\352\002\021Flyteidl::Service' - _globals['_ASYNCAGENTSERVICE']._serialized_start=79 - _globals['_ASYNCAGENTSERVICE']._serialized_end=350 - _globals['_SYNCAGENTSERVICE']._serialized_start=352 - _globals['_SYNCAGENTSERVICE']._serialized_end=445 + _globals['_AGENTSERVICE']._serialized_start=79 + _globals['_AGENTSERVICE']._serialized_end=345 # @@protoc_insertion_point(module_scope) diff --git a/flyteidl/gen/pb_python/flyteidl/service/agent_pb2_grpc.py b/flyteidl/gen/pb_python/flyteidl/service/agent_pb2_grpc.py index 116a45a35e..c9e0d9d0a1 100644 --- a/flyteidl/gen/pb_python/flyteidl/service/agent_pb2_grpc.py +++ b/flyteidl/gen/pb_python/flyteidl/service/agent_pb2_grpc.py @@ -5,8 +5,11 @@ from flyteidl.admin import agent_pb2 as flyteidl_dot_admin_dot_agent__pb2 -class AsyncAgentServiceStub(object): +class AgentServiceStub(object): """AgentService defines an RPC Service that allows propeller to send the request to the agent server. + It can handle asynchronous tasks and synchronous tasks. + Asynchronous tasks are for tasks running long, for example running query job. + Synchronous tasks are for tasks running quick, for example, you want to execute something really fast, or even retrieving some metadata from a backend service. """ def __init__(self, channel): @@ -16,24 +19,27 @@ def __init__(self, channel): channel: A grpc.Channel. """ self.CreateTask = channel.unary_unary( - '/flyteidl.service.AsyncAgentService/CreateTask', + '/flyteidl.service.AgentService/CreateTask', request_serializer=flyteidl_dot_admin_dot_agent__pb2.CreateTaskRequest.SerializeToString, response_deserializer=flyteidl_dot_admin_dot_agent__pb2.CreateTaskResponse.FromString, ) self.GetTask = channel.unary_unary( - '/flyteidl.service.AsyncAgentService/GetTask', + '/flyteidl.service.AgentService/GetTask', request_serializer=flyteidl_dot_admin_dot_agent__pb2.GetTaskRequest.SerializeToString, response_deserializer=flyteidl_dot_admin_dot_agent__pb2.GetTaskResponse.FromString, ) self.DeleteTask = channel.unary_unary( - '/flyteidl.service.AsyncAgentService/DeleteTask', + '/flyteidl.service.AgentService/DeleteTask', request_serializer=flyteidl_dot_admin_dot_agent__pb2.DeleteTaskRequest.SerializeToString, response_deserializer=flyteidl_dot_admin_dot_agent__pb2.DeleteTaskResponse.FromString, ) -class AsyncAgentServiceServicer(object): +class AgentServiceServicer(object): """AgentService defines an RPC Service that allows propeller to send the request to the agent server. + It can handle asynchronous tasks and synchronous tasks. + Asynchronous tasks are for tasks running long, for example running query job. + Synchronous tasks are for tasks running quick, for example, you want to execute something really fast, or even retrieving some metadata from a backend service. """ def CreateTask(self, request, context): @@ -58,7 +64,7 @@ def DeleteTask(self, request, context): raise NotImplementedError('Method not implemented!') -def add_AsyncAgentServiceServicer_to_server(servicer, server): +def add_AgentServiceServicer_to_server(servicer, server): rpc_method_handlers = { 'CreateTask': grpc.unary_unary_rpc_method_handler( servicer.CreateTask, @@ -77,13 +83,16 @@ def add_AsyncAgentServiceServicer_to_server(servicer, server): ), } generic_handler = grpc.method_handlers_generic_handler( - 'flyteidl.service.AsyncAgentService', rpc_method_handlers) + 'flyteidl.service.AgentService', rpc_method_handlers) server.add_generic_rpc_handlers((generic_handler,)) # This class is part of an EXPERIMENTAL API. -class AsyncAgentService(object): +class AgentService(object): """AgentService defines an RPC Service that allows propeller to send the request to the agent server. + It can handle asynchronous tasks and synchronous tasks. + Asynchronous tasks are for tasks running long, for example running query job. + Synchronous tasks are for tasks running quick, for example, you want to execute something really fast, or even retrieving some metadata from a backend service. """ @staticmethod @@ -97,7 +106,7 @@ def CreateTask(request, wait_for_ready=None, timeout=None, metadata=None): - return grpc.experimental.unary_unary(request, target, '/flyteidl.service.AsyncAgentService/CreateTask', + return grpc.experimental.unary_unary(request, target, '/flyteidl.service.AgentService/CreateTask', flyteidl_dot_admin_dot_agent__pb2.CreateTaskRequest.SerializeToString, flyteidl_dot_admin_dot_agent__pb2.CreateTaskResponse.FromString, options, channel_credentials, @@ -114,7 +123,7 @@ def GetTask(request, wait_for_ready=None, timeout=None, metadata=None): - return grpc.experimental.unary_unary(request, target, '/flyteidl.service.AsyncAgentService/GetTask', + return grpc.experimental.unary_unary(request, target, '/flyteidl.service.AgentService/GetTask', flyteidl_dot_admin_dot_agent__pb2.GetTaskRequest.SerializeToString, flyteidl_dot_admin_dot_agent__pb2.GetTaskResponse.FromString, options, channel_credentials, @@ -131,70 +140,8 @@ def DeleteTask(request, wait_for_ready=None, timeout=None, metadata=None): - return grpc.experimental.unary_unary(request, target, '/flyteidl.service.AsyncAgentService/DeleteTask', + return grpc.experimental.unary_unary(request, target, '/flyteidl.service.AgentService/DeleteTask', flyteidl_dot_admin_dot_agent__pb2.DeleteTaskRequest.SerializeToString, flyteidl_dot_admin_dot_agent__pb2.DeleteTaskResponse.FromString, options, channel_credentials, insecure, call_credentials, compression, wait_for_ready, timeout, metadata) - - -class SyncAgentServiceStub(object): - """Missing associated documentation comment in .proto file.""" - - def __init__(self, channel): - """Constructor. - - Args: - channel: A grpc.Channel. - """ - self.DoTask = channel.unary_unary( - '/flyteidl.service.SyncAgentService/DoTask', - request_serializer=flyteidl_dot_admin_dot_agent__pb2.DoTaskRequest.SerializeToString, - response_deserializer=flyteidl_dot_admin_dot_agent__pb2.DoTaskResponse.FromString, - ) - - -class SyncAgentServiceServicer(object): - """Missing associated documentation comment in .proto file.""" - - def DoTask(self, request, context): - """Do a job and get response from the agent server. - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - -def add_SyncAgentServiceServicer_to_server(servicer, server): - rpc_method_handlers = { - 'DoTask': grpc.unary_unary_rpc_method_handler( - servicer.DoTask, - request_deserializer=flyteidl_dot_admin_dot_agent__pb2.DoTaskRequest.FromString, - response_serializer=flyteidl_dot_admin_dot_agent__pb2.DoTaskResponse.SerializeToString, - ), - } - generic_handler = grpc.method_handlers_generic_handler( - 'flyteidl.service.SyncAgentService', rpc_method_handlers) - server.add_generic_rpc_handlers((generic_handler,)) - - - # This class is part of an EXPERIMENTAL API. -class SyncAgentService(object): - """Missing associated documentation comment in .proto file.""" - - @staticmethod - def DoTask(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary(request, target, '/flyteidl.service.SyncAgentService/DoTask', - flyteidl_dot_admin_dot_agent__pb2.DoTaskRequest.SerializeToString, - flyteidl_dot_admin_dot_agent__pb2.DoTaskResponse.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) diff --git a/flyteidl/gen/pb_rust/flyteidl.admin.rs b/flyteidl/gen/pb_rust/flyteidl.admin.rs index 4f0a1f5380..6bebe0b95e 100644 --- a/flyteidl/gen/pb_rust/flyteidl.admin.rs +++ b/flyteidl/gen/pb_rust/flyteidl.admin.rs @@ -45,9 +45,26 @@ pub struct CreateTaskRequest { #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct CreateTaskResponse { + /// log information for the task execution. + #[prost(message, repeated, tag="3")] + pub log_links: ::prost::alloc::vec::Vec, /// Metadata is created by the agent. It could be a string (jobId) or a dict (more complex metadata). - #[prost(bytes="vec", tag="1")] - pub resource_meta: ::prost::alloc::vec::Vec, + /// Resouce is for synchronous task execution. + #[prost(oneof="create_task_response::Res", tags="1, 2")] + pub res: ::core::option::Option, +} +/// Nested message and enum types in `CreateTaskResponse`. +pub mod create_task_response { + /// Metadata is created by the agent. It could be a string (jobId) or a dict (more complex metadata). + /// Resouce is for synchronous task execution. + #[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Oneof)] + pub enum Res { + #[prost(bytes, tag="1")] + ResourceMeta(::prost::alloc::vec::Vec), + #[prost(message, tag="2")] + Resource(super::Resource), + } } /// A message used to fetch a job resource from flyte agent server. #[allow(clippy::derive_partial_eq_without_eq)] @@ -101,31 +118,6 @@ pub struct DeleteTaskRequest { #[derive(Clone, PartialEq, ::prost::Message)] pub struct DeleteTaskResponse { } -/// A message used to do a task -#[allow(clippy::derive_partial_eq_without_eq)] -#[derive(Clone, PartialEq, ::prost::Message)] -pub struct DoTaskRequest { - /// The inputs required to start the execution. All required inputs must be - /// included in this map. If not required and not provided, defaults apply. - /// +optional - #[prost(message, optional, tag="1")] - pub inputs: ::core::option::Option, - /// Template of the task that encapsulates all the metadata of the task. - #[prost(message, optional, tag="2")] - pub template: ::core::option::Option, - /// Prefix for where task output data will be written. (e.g. s3://my-bucket/randomstring) - #[prost(string, tag="3")] - pub output_prefix: ::prost::alloc::string::String, - /// subset of runtime task execution metadata. - #[prost(message, optional, tag="4")] - pub task_execution_metadata: ::core::option::Option, -} -#[allow(clippy::derive_partial_eq_without_eq)] -#[derive(Clone, PartialEq, ::prost::Message)] -pub struct DoTaskResponse { - #[prost(message, optional, tag="1")] - pub resource: ::core::option::Option, -} /// The state of the execution is used to control its visibility in the UI/CLI. #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)] #[repr(i32)] diff --git a/flyteidl/protos/flyteidl/admin/agent.proto b/flyteidl/protos/flyteidl/admin/agent.proto index 758dbf0a2e..93b2d4d39e 100644 --- a/flyteidl/protos/flyteidl/admin/agent.proto +++ b/flyteidl/protos/flyteidl/admin/agent.proto @@ -51,7 +51,13 @@ message CreateTaskRequest { // Represents a create response structure. message CreateTaskResponse { // Metadata is created by the agent. It could be a string (jobId) or a dict (more complex metadata). - bytes resource_meta = 1; + // Resouce is for synchronous task execution. + oneof res { + bytes resource_meta = 1; + Resource resource = 2; + } + // log information for the task execution. + repeated core.TaskLog log_links = 3; } // A message used to fetch a job resource from flyte agent server. @@ -89,23 +95,4 @@ message DeleteTaskRequest { } // Response to delete a task. -message DeleteTaskResponse { -} - -// A message used to do a task -message DoTaskRequest { - // The inputs required to start the execution. All required inputs must be - // included in this map. If not required and not provided, defaults apply. - // +optional - core.LiteralMap inputs = 1; - // Template of the task that encapsulates all the metadata of the task. - core.TaskTemplate template = 2; - // Prefix for where task output data will be written. (e.g. s3://my-bucket/randomstring) - string output_prefix = 3; - // subset of runtime task execution metadata. - TaskExecutionMetadata task_execution_metadata = 4; -} - -message DoTaskResponse { - Resource resource = 1; -} +message DeleteTaskResponse {} diff --git a/flyteidl/protos/flyteidl/service/agent.proto b/flyteidl/protos/flyteidl/service/agent.proto index a9b88b9291..ee99732705 100644 --- a/flyteidl/protos/flyteidl/service/agent.proto +++ b/flyteidl/protos/flyteidl/service/agent.proto @@ -5,7 +5,10 @@ option go_package = "github.com/flyteorg/flyte/flyteidl/gen/pb-go/flyteidl/servi import "flyteidl/admin/agent.proto"; // AgentService defines an RPC Service that allows propeller to send the request to the agent server. -service AsyncAgentService { +// It can handle asynchronous tasks and synchronous tasks. +// Asynchronous tasks are for tasks running long, for example running query job. +// Synchronous tasks are for tasks running quick, for example, you want to execute something really fast, or even retrieving some metadata from a backend service. +service AgentService { // Send a task create request to the agent server. rpc CreateTask (flyteidl.admin.CreateTaskRequest) returns (flyteidl.admin.CreateTaskResponse){}; // Get job status. @@ -13,8 +16,3 @@ service AsyncAgentService { // Delete the task resource. rpc DeleteTask (flyteidl.admin.DeleteTaskRequest) returns (flyteidl.admin.DeleteTaskResponse){}; } - -service SyncAgentService { - // Do a job and get response from the agent server. - rpc DoTask (flyteidl.admin.DoTaskRequest) returns (flyteidl.admin.DoTaskResponse){}; -} diff --git a/flyteplugins/go/tasks/plugins/webapi/agent/config_test.go b/flyteplugins/go/tasks/plugins/webapi/agent/config_test.go index f3ec40b656..a3e6d69d66 100644 --- a/flyteplugins/go/tasks/plugins/webapi/agent/config_test.go +++ b/flyteplugins/go/tasks/plugins/webapi/agent/config_test.go @@ -25,9 +25,6 @@ func TestGetAndSetConfig(t *testing.T) { "DeleteTask": { Duration: 3 * time.Millisecond, }, - "DoTask": { - Duration: 3 * time.Millisecond, - }, } cfg.DefaultAgent.DefaultTimeout = config.Duration{Duration: 10 * time.Second} cfg.Agents = map[string]*Agent{ diff --git a/flyteplugins/go/tasks/plugins/webapi/agent/integration_test.go b/flyteplugins/go/tasks/plugins/webapi/agent/integration_test.go index c20104cdbc..6b60f95b03 100644 --- a/flyteplugins/go/tasks/plugins/webapi/agent/integration_test.go +++ b/flyteplugins/go/tasks/plugins/webapi/agent/integration_test.go @@ -37,21 +37,24 @@ type MockPlugin struct { Plugin } -type MockAsyncClient struct { +type MockAsyncTask struct { } -type MockSyncClient struct { +type MockSyncTask struct { } -func (m *MockAsyncClient) CreateTask(_ context.Context, createTaskRequest *admin.CreateTaskRequest, _ ...grpc.CallOption) (*admin.CreateTaskResponse, error) { +func (m *MockAsyncTask) CreateTask(_ context.Context, createTaskRequest *admin.CreateTaskRequest, _ ...grpc.CallOption) (*admin.CreateTaskResponse, error) { expectedArgs := []string{"pyflyte-fast-execute", "--output-prefix", "fake://bucket/prefix/nhv"} if slices.Equal(createTaskRequest.Template.GetContainer().Args, expectedArgs) { return nil, fmt.Errorf("args not as expected") } - return &admin.CreateTaskResponse{ResourceMeta: []byte{1, 2, 3, 4}}, nil + return &admin.CreateTaskResponse{ + Res: &admin.CreateTaskResponse_ResourceMeta{ + ResourceMeta: []byte{1, 2, 3, 4}, + }}, nil } -func (m *MockAsyncClient) GetTask(_ context.Context, req *admin.GetTaskRequest, _ ...grpc.CallOption) (*admin.GetTaskResponse, error) { +func (m *MockAsyncTask) GetTask(_ context.Context, req *admin.GetTaskRequest, _ ...grpc.CallOption) (*admin.GetTaskResponse, error) { if req.GetTaskType() == "bigquery_query_job_task" { return &admin.GetTaskResponse{Resource: &admin.Resource{State: admin.State_SUCCEEDED, Outputs: &flyteIdlCore.LiteralMap{ Literals: map[string]*flyteIdlCore.Literal{ @@ -62,31 +65,48 @@ func (m *MockAsyncClient) GetTask(_ context.Context, req *admin.GetTaskRequest, return &admin.GetTaskResponse{Resource: &admin.Resource{State: admin.State_SUCCEEDED}}, nil } -func (m *MockAsyncClient) DeleteTask(_ context.Context, _ *admin.DeleteTaskRequest, _ ...grpc.CallOption) (*admin.DeleteTaskResponse, error) { +func (m *MockAsyncTask) DeleteTask(_ context.Context, _ *admin.DeleteTaskRequest, _ ...grpc.CallOption) (*admin.DeleteTaskResponse, error) { return &admin.DeleteTaskResponse{}, nil } -func (m *MockSyncClient) DoTask(_ context.Context, _ *admin.DoTaskRequest, _ ...grpc.CallOption) (*admin.DoTaskResponse, error) { - return &admin.DoTaskResponse{Resource: &admin.Resource{State: admin.State_SUCCEEDED, Outputs: &flyteIdlCore.LiteralMap{ - Literals: map[string]*flyteIdlCore.Literal{ - "arr": coreutils.MustMakeLiteral([]interface{}{[]interface{}{"a", "b"}, []interface{}{1, 2}}), +func (m *MockSyncTask) CreateTask(_ context.Context, createTaskRequest *admin.CreateTaskRequest, _ ...grpc.CallOption) (*admin.CreateTaskResponse, error) { + return &admin.CreateTaskResponse{ + Res: &admin.CreateTaskResponse_Resource{ + Resource: &admin.Resource{ + State: admin.State_SUCCEEDED, + Outputs: &flyteIdlCore.LiteralMap{ + Literals: map[string]*flyteIdlCore.Literal{}, + }, + }, }, - }}}, nil + }, nil + } -func mockGetAsyncClientFunc(_ context.Context, _ *Agent, _ map[*Agent]*grpc.ClientConn) (service.AsyncAgentServiceClient, error) { - return &MockAsyncClient{}, nil +func (m *MockSyncTask) GetTask(_ context.Context, req *admin.GetTaskRequest, _ ...grpc.CallOption) (*admin.GetTaskResponse, error) { + if req.GetTaskType() == "fake_task" { + return &admin.GetTaskResponse{Resource: &admin.Resource{State: admin.State_SUCCEEDED, Outputs: &flyteIdlCore.LiteralMap{ + Literals: map[string]*flyteIdlCore.Literal{ + "arr": coreutils.MustMakeLiteral([]interface{}{[]interface{}{"a", "b"}, []interface{}{1, 2}}), + }, + }}}, nil + } + return &admin.GetTaskResponse{Resource: &admin.Resource{State: admin.State_SUCCEEDED}}, nil } -func mockGetSyncClientFunc(_ context.Context, _ *Agent, _ map[*Agent]*grpc.ClientConn) (service.SyncAgentServiceClient, error) { - return &MockSyncClient{}, nil +func (m *MockSyncTask) DeleteTask(_ context.Context, _ *admin.DeleteTaskRequest, _ ...grpc.CallOption) (*admin.DeleteTaskResponse, error) { + return &admin.DeleteTaskResponse{}, nil } -func mockGetBadAsyncClientFunc(_ context.Context, _ *Agent, _ map[*Agent]*grpc.ClientConn) (service.AsyncAgentServiceClient, error) { - return nil, fmt.Errorf("error") +func mockAsyncTaskClientFunc(_ context.Context, _ *Agent, _ map[*Agent]*grpc.ClientConn) (service.AgentServiceClient, error) { + return &MockAsyncTask{}, nil +} + +func mockSyncTaskClientFunc(_ context.Context, _ *Agent, _ map[*Agent]*grpc.ClientConn) (service.AgentServiceClient, error) { + return &MockSyncTask{}, nil } -func mockGetBadSyncClientFunc(_ context.Context, _ *Agent, _ map[*Agent]*grpc.ClientConn) (service.SyncAgentServiceClient, error) { +func mockGetBadAsyncClientFunc(_ context.Context, _ *Agent, _ map[*Agent]*grpc.ClientConn) (service.AgentServiceClient, error) { return nil, fmt.Errorf("error") } @@ -147,10 +167,9 @@ func TestEndToEnd(t *testing.T) { agentPlugin.PluginLoader = func(ctx context.Context, iCtx webapi.PluginSetupContext) (webapi.AsyncPlugin, error) { return &MockPlugin{ Plugin{ - metricScope: iCtx.MetricsScope(), - cfg: GetConfig(), - getAsyncClient: mockGetBadAsyncClientFunc, - getSyncClient: mockGetBadSyncClientFunc, + metricScope: iCtx.MetricsScope(), + cfg: GetConfig(), + getClient: mockGetBadAsyncClientFunc, }, }, nil } @@ -288,10 +307,25 @@ func newMockAgentPlugin() webapi.PluginEntry { PluginLoader: func(ctx context.Context, iCtx webapi.PluginSetupContext) (webapi.AsyncPlugin, error) { return &MockPlugin{ Plugin{ - metricScope: iCtx.MetricsScope(), - cfg: GetConfig(), - getAsyncClient: mockGetAsyncClientFunc, - getSyncClient: mockGetSyncClientFunc, + metricScope: iCtx.MetricsScope(), + cfg: GetConfig(), + getClient: mockAsyncTaskClientFunc, + }, + }, nil + }, + } +} + +func newMockSyncAgentPlugin() webapi.PluginEntry { + return webapi.PluginEntry{ + ID: "agent-service", + SupportedTaskTypes: []core.TaskType{"bigquery_query_job_task", "spark_job", "api_task"}, + PluginLoader: func(ctx context.Context, iCtx webapi.PluginSetupContext) (webapi.AsyncPlugin, error) { + return &MockPlugin{ + Plugin{ + metricScope: iCtx.MetricsScope(), + cfg: GetConfig(), + getClient: mockSyncTaskClientFunc, }, }, nil }, diff --git a/flyteplugins/go/tasks/plugins/webapi/agent/plugin.go b/flyteplugins/go/tasks/plugins/webapi/agent/plugin.go index e9e0691a6e..2175449079 100644 --- a/flyteplugins/go/tasks/plugins/webapi/agent/plugin.go +++ b/flyteplugins/go/tasks/plugins/webapi/agent/plugin.go @@ -27,14 +27,12 @@ import ( "github.com/flyteorg/flyte/flytestdlib/promutils" ) -type GetAsyncClientFunc func(ctx context.Context, agent *Agent, connectionCache map[*Agent]*grpc.ClientConn) (service.AsyncAgentServiceClient, error) -type GetSyncClientFunc func(ctx context.Context, agent *Agent, connectionCache map[*Agent]*grpc.ClientConn) (service.SyncAgentServiceClient, error) +type GetClientFunc func(ctx context.Context, agent *Agent, connectionCache map[*Agent]*grpc.ClientConn) (service.AgentServiceClient, error) type Plugin struct { metricScope promutils.Scope cfg *Config - getAsyncClient GetAsyncClientFunc - getSyncClient GetSyncClientFunc + getClient GetClientFunc connectionCache map[*Agent]*grpc.ClientConn } @@ -94,27 +92,33 @@ func (p Plugin) Do(ctx context.Context, taskCtx webapi.TaskExecutionContext) (ph return core.PhaseInfoUndefined, fmt.Errorf("failed to find agent agent with error: %v", err) } - client, err := p.getSyncClient(ctx, agent, p.connectionCache) + client, err := p.getClient(ctx, agent, p.connectionCache) if err != nil { return core.PhaseInfoUndefined, fmt.Errorf("failed to connect to agent with error: %v", err) } - finalCtx, cancel := getFinalContext(ctx, "DoTask", agent) + finalCtx, cancel := getFinalContext(ctx, "CreateTask", agent) defer cancel() taskExecutionMetadata := buildTaskExecutionMetadata(taskCtx.TaskExecutionMetadata()) - res, err := client.DoTask(finalCtx, &admin.DoTaskRequest{Inputs: inputs, Template: taskTemplate, OutputPrefix: outputPrefix, TaskExecutionMetadata: &taskExecutionMetadata}) + res, err := client.CreateTask(finalCtx, &admin.CreateTaskRequest{Inputs: inputs, Template: taskTemplate, OutputPrefix: outputPrefix, TaskExecutionMetadata: &taskExecutionMetadata}) if err != nil { return core.PhaseInfoUndefined, err } - resource := ResourceWrapper{ - State: res.Resource.State, - Outputs: res.Resource.Outputs, - Message: res.Resource.Message, + resource := res.GetResource() + if resource == nil { + return core.PhaseInfoUndefined, fmt.Errorf("agent sync task returned nil resource, please check the agent implementation") + } + + resourceWrapper := ResourceWrapper{ + State: resource.State, + Outputs: resource.Outputs, + Message: resource.Message, + LogLinks: res.LogLinks, } - return p.Status(ctx, pluginContext{TaskExecutionContext: taskCtx, resource: resource}) + return p.Status(ctx, pluginContext{TaskExecutionContext: taskCtx, resource: resourceWrapper}) } func (p Plugin) Create(ctx context.Context, taskCtx webapi.TaskExecutionContextReader) (webapi.ResourceMeta, @@ -149,7 +153,7 @@ func (p Plugin) Create(ctx context.Context, taskCtx webapi.TaskExecutionContextR if err != nil { return nil, nil, fmt.Errorf("failed to find agent agent with error: %v", err) } - client, err := p.getAsyncClient(ctx, agent, p.connectionCache) + client, err := p.getClient(ctx, agent, p.connectionCache) if err != nil { return nil, nil, fmt.Errorf("failed to connect to agent with error: %v", err) } @@ -183,7 +187,7 @@ func (p Plugin) Get(ctx context.Context, taskCtx webapi.GetContext) (latest weba if err != nil { return nil, fmt.Errorf("failed to find agent with error: %v", err) } - client, err := p.getAsyncClient(ctx, agent, p.connectionCache) + client, err := p.getClient(ctx, agent, p.connectionCache) if err != nil { return nil, fmt.Errorf("failed to connect to agent with error: %v", err) } @@ -214,7 +218,7 @@ func (p Plugin) Delete(ctx context.Context, taskCtx webapi.DeleteContext) error if err != nil { return fmt.Errorf("failed to find agent agent with error: %v", err) } - client, err := p.getAsyncClient(ctx, agent, p.connectionCache) + client, err := p.getClient(ctx, agent, p.connectionCache) if err != nil { return fmt.Errorf("failed to connect to agent with error: %v", err) } @@ -330,22 +334,13 @@ func getGrpcConnection(ctx context.Context, agent *Agent, connectionCache map[*A return conn, nil } -func getAsyncClientFunc(ctx context.Context, agent *Agent, connectionCache map[*Agent]*grpc.ClientConn) (service.AsyncAgentServiceClient, error) { - conn, err := getGrpcConnection(ctx, agent, connectionCache) - if err != nil { - return nil, err - } - - return service.NewAsyncAgentServiceClient(conn), nil -} - -func getSyncClientFunc(ctx context.Context, agent *Agent, connectionCache map[*Agent]*grpc.ClientConn) (service.SyncAgentServiceClient, error) { +func getClientFunc(ctx context.Context, agent *Agent, connectionCache map[*Agent]*grpc.ClientConn) (service.AgentServiceClient, error) { conn, err := getGrpcConnection(ctx, agent, connectionCache) if err != nil { return nil, err } - return service.NewSyncAgentServiceClient(conn), nil + return service.NewAgentServiceClient(conn), nil } func buildTaskExecutionMetadata(taskExecutionMetadata core.TaskExecutionMetadata) admin.TaskExecutionMetadata { @@ -386,8 +381,7 @@ func newAgentPlugin() webapi.PluginEntry { return &Plugin{ metricScope: iCtx.MetricsScope(), cfg: GetConfig(), - getAsyncClient: getAsyncClientFunc, - getSyncClient: getSyncClientFunc, + getClient: getClientFunc, connectionCache: make(map[*Agent]*grpc.ClientConn), }, nil }, diff --git a/flyteplugins/go/tasks/plugins/webapi/agent/plugin_test.go b/flyteplugins/go/tasks/plugins/webapi/agent/plugin_test.go index 570cab4b57..c64193dac5 100644 --- a/flyteplugins/go/tasks/plugins/webapi/agent/plugin_test.go +++ b/flyteplugins/go/tasks/plugins/webapi/agent/plugin_test.go @@ -2,10 +2,11 @@ package agent import ( "context" - flyteidlcore "github.com/flyteorg/flyte/flyteidl/gen/pb-go/flyteidl/core" "testing" "time" + flyteidlcore "github.com/flyteorg/flyte/flyteidl/gen/pb-go/flyteidl/core" + "github.com/stretchr/testify/assert" "github.com/stretchr/testify/mock" "google.golang.org/grpc" @@ -42,9 +43,9 @@ func TestDo(t *testing.T) { tCtx.OnTaskReader().Return(taskReader) - agentPlugin := newMockAgentPlugin() + agentPlugin := newMockSyncAgentPlugin() pluginEntry := pluginmachinery.CreateRemotePlugin(agentPlugin) - plugin, err := pluginEntry.LoadPlugin(context.TODO(), newFakeSetupContext("do_test")) + plugin, err := pluginEntry.LoadPlugin(context.TODO(), newFakeSetupContext("create_task_sync_test")) assert.NoError(t, err) // Call the Do function by Flavor @@ -106,26 +107,14 @@ func TestPlugin(t *testing.T) { assert.NotNil(t, err) }) - t.Run("test getAsyncClientFunc", func(t *testing.T) { - client, err := getAsyncClientFunc(context.Background(), &Agent{Endpoint: "localhost:80"}, map[*Agent]*grpc.ClientConn{}) - assert.NoError(t, err) - assert.NotNil(t, client) - }) - - t.Run("test getSyncClientFunc", func(t *testing.T) { - client, err := getSyncClientFunc(context.Background(), &Agent{Endpoint: "localhost:80"}, map[*Agent]*grpc.ClientConn{}) - assert.NoError(t, err) - assert.NotNil(t, client) - }) - - t.Run("test getAsyncClientFunc more config", func(t *testing.T) { - client, err := getAsyncClientFunc(context.Background(), &Agent{Endpoint: "localhost:80", Insecure: true, DefaultServiceConfig: "{\"loadBalancingConfig\": [{\"round_robin\":{}}]}"}, map[*Agent]*grpc.ClientConn{}) + t.Run("test getClientFunc", func(t *testing.T) { + client, err := getClientFunc(context.Background(), &Agent{Endpoint: "localhost:80"}, map[*Agent]*grpc.ClientConn{}) assert.NoError(t, err) assert.NotNil(t, client) }) - t.Run("test getSyncClientFunc more config", func(t *testing.T) { - client, err := getSyncClientFunc(context.Background(), &Agent{Endpoint: "localhost:80", Insecure: true, DefaultServiceConfig: "{\"loadBalancingConfig\": [{\"round_robin\":{}}]}"}, map[*Agent]*grpc.ClientConn{}) + t.Run("test getClientFunc more config", func(t *testing.T) { + client, err := getClientFunc(context.Background(), &Agent{Endpoint: "localhost:80", Insecure: true, DefaultServiceConfig: "{\"loadBalancingConfig\": [{\"round_robin\":{}}]}"}, map[*Agent]*grpc.ClientConn{}) assert.NoError(t, err) assert.NotNil(t, client) }) @@ -134,12 +123,12 @@ func TestPlugin(t *testing.T) { connectionCache := make(map[*Agent]*grpc.ClientConn) agent := &Agent{Endpoint: "localhost:80", Insecure: true, DefaultServiceConfig: "{\"loadBalancingConfig\": [{\"round_robin\":{}}]}"} - client, err := getAsyncClientFunc(context.Background(), agent, connectionCache) + client, err := getClientFunc(context.Background(), agent, connectionCache) assert.NoError(t, err) assert.NotNil(t, client) assert.NotNil(t, client, connectionCache[agent]) - cachedClient, err := getAsyncClientFunc(context.Background(), agent, connectionCache) + cachedClient, err := getClientFunc(context.Background(), agent, connectionCache) assert.NoError(t, err) assert.NotNil(t, cachedClient) assert.Equal(t, client, cachedClient) From 867b5e54d79673f29db8cad8e155081aa4bf5aa3 Mon Sep 17 00:00:00 2001 From: Future Outlier Date: Wed, 13 Dec 2023 23:07:46 +0800 Subject: [PATCH 36/48] remove unused mock objects Signed-off-by: Future Outlier --- .../go/admin/mocks/AsyncAgentServiceClient.go | 162 ------------------ .../go/admin/mocks/AsyncAgentServiceServer.go | 139 --------------- .../go/admin/mocks/SyncAgentServiceClient.go | 66 ------- .../go/admin/mocks/SyncAgentServiceServer.go | 57 ------ 4 files changed, 424 deletions(-) delete mode 100644 flyteidl/clients/go/admin/mocks/AsyncAgentServiceClient.go delete mode 100644 flyteidl/clients/go/admin/mocks/AsyncAgentServiceServer.go delete mode 100644 flyteidl/clients/go/admin/mocks/SyncAgentServiceClient.go delete mode 100644 flyteidl/clients/go/admin/mocks/SyncAgentServiceServer.go diff --git a/flyteidl/clients/go/admin/mocks/AsyncAgentServiceClient.go b/flyteidl/clients/go/admin/mocks/AsyncAgentServiceClient.go deleted file mode 100644 index 4a2b2c25f3..0000000000 --- a/flyteidl/clients/go/admin/mocks/AsyncAgentServiceClient.go +++ /dev/null @@ -1,162 +0,0 @@ -// Code generated by mockery v1.0.1. DO NOT EDIT. - -package mocks - -import ( - context "context" - - admin "github.com/flyteorg/flyte/flyteidl/gen/pb-go/flyteidl/admin" - - grpc "google.golang.org/grpc" - - mock "github.com/stretchr/testify/mock" -) - -// AsyncAgentServiceClient is an autogenerated mock type for the AsyncAgentServiceClient type -type AsyncAgentServiceClient struct { - mock.Mock -} - -type AsyncAgentServiceClient_CreateTask struct { - *mock.Call -} - -func (_m AsyncAgentServiceClient_CreateTask) Return(_a0 *admin.CreateTaskResponse, _a1 error) *AsyncAgentServiceClient_CreateTask { - return &AsyncAgentServiceClient_CreateTask{Call: _m.Call.Return(_a0, _a1)} -} - -func (_m *AsyncAgentServiceClient) OnCreateTask(ctx context.Context, in *admin.CreateTaskRequest, opts ...grpc.CallOption) *AsyncAgentServiceClient_CreateTask { - c_call := _m.On("CreateTask", ctx, in, opts) - return &AsyncAgentServiceClient_CreateTask{Call: c_call} -} - -func (_m *AsyncAgentServiceClient) OnCreateTaskMatch(matchers ...interface{}) *AsyncAgentServiceClient_CreateTask { - c_call := _m.On("CreateTask", matchers...) - return &AsyncAgentServiceClient_CreateTask{Call: c_call} -} - -// CreateTask provides a mock function with given fields: ctx, in, opts -func (_m *AsyncAgentServiceClient) CreateTask(ctx context.Context, in *admin.CreateTaskRequest, opts ...grpc.CallOption) (*admin.CreateTaskResponse, 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 *admin.CreateTaskResponse - if rf, ok := ret.Get(0).(func(context.Context, *admin.CreateTaskRequest, ...grpc.CallOption) *admin.CreateTaskResponse); ok { - r0 = rf(ctx, in, opts...) - } else { - if ret.Get(0) != nil { - r0 = ret.Get(0).(*admin.CreateTaskResponse) - } - } - - var r1 error - if rf, ok := ret.Get(1).(func(context.Context, *admin.CreateTaskRequest, ...grpc.CallOption) error); ok { - r1 = rf(ctx, in, opts...) - } else { - r1 = ret.Error(1) - } - - return r0, r1 -} - -type AsyncAgentServiceClient_DeleteTask struct { - *mock.Call -} - -func (_m AsyncAgentServiceClient_DeleteTask) Return(_a0 *admin.DeleteTaskResponse, _a1 error) *AsyncAgentServiceClient_DeleteTask { - return &AsyncAgentServiceClient_DeleteTask{Call: _m.Call.Return(_a0, _a1)} -} - -func (_m *AsyncAgentServiceClient) OnDeleteTask(ctx context.Context, in *admin.DeleteTaskRequest, opts ...grpc.CallOption) *AsyncAgentServiceClient_DeleteTask { - c_call := _m.On("DeleteTask", ctx, in, opts) - return &AsyncAgentServiceClient_DeleteTask{Call: c_call} -} - -func (_m *AsyncAgentServiceClient) OnDeleteTaskMatch(matchers ...interface{}) *AsyncAgentServiceClient_DeleteTask { - c_call := _m.On("DeleteTask", matchers...) - return &AsyncAgentServiceClient_DeleteTask{Call: c_call} -} - -// DeleteTask provides a mock function with given fields: ctx, in, opts -func (_m *AsyncAgentServiceClient) DeleteTask(ctx context.Context, in *admin.DeleteTaskRequest, opts ...grpc.CallOption) (*admin.DeleteTaskResponse, 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 *admin.DeleteTaskResponse - if rf, ok := ret.Get(0).(func(context.Context, *admin.DeleteTaskRequest, ...grpc.CallOption) *admin.DeleteTaskResponse); ok { - r0 = rf(ctx, in, opts...) - } else { - if ret.Get(0) != nil { - r0 = ret.Get(0).(*admin.DeleteTaskResponse) - } - } - - var r1 error - if rf, ok := ret.Get(1).(func(context.Context, *admin.DeleteTaskRequest, ...grpc.CallOption) error); ok { - r1 = rf(ctx, in, opts...) - } else { - r1 = ret.Error(1) - } - - return r0, r1 -} - -type AsyncAgentServiceClient_GetTask struct { - *mock.Call -} - -func (_m AsyncAgentServiceClient_GetTask) Return(_a0 *admin.GetTaskResponse, _a1 error) *AsyncAgentServiceClient_GetTask { - return &AsyncAgentServiceClient_GetTask{Call: _m.Call.Return(_a0, _a1)} -} - -func (_m *AsyncAgentServiceClient) OnGetTask(ctx context.Context, in *admin.GetTaskRequest, opts ...grpc.CallOption) *AsyncAgentServiceClient_GetTask { - c_call := _m.On("GetTask", ctx, in, opts) - return &AsyncAgentServiceClient_GetTask{Call: c_call} -} - -func (_m *AsyncAgentServiceClient) OnGetTaskMatch(matchers ...interface{}) *AsyncAgentServiceClient_GetTask { - c_call := _m.On("GetTask", matchers...) - return &AsyncAgentServiceClient_GetTask{Call: c_call} -} - -// GetTask provides a mock function with given fields: ctx, in, opts -func (_m *AsyncAgentServiceClient) GetTask(ctx context.Context, in *admin.GetTaskRequest, opts ...grpc.CallOption) (*admin.GetTaskResponse, 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 *admin.GetTaskResponse - if rf, ok := ret.Get(0).(func(context.Context, *admin.GetTaskRequest, ...grpc.CallOption) *admin.GetTaskResponse); ok { - r0 = rf(ctx, in, opts...) - } else { - if ret.Get(0) != nil { - r0 = ret.Get(0).(*admin.GetTaskResponse) - } - } - - var r1 error - if rf, ok := ret.Get(1).(func(context.Context, *admin.GetTaskRequest, ...grpc.CallOption) error); ok { - r1 = rf(ctx, in, opts...) - } else { - r1 = ret.Error(1) - } - - return r0, r1 -} diff --git a/flyteidl/clients/go/admin/mocks/AsyncAgentServiceServer.go b/flyteidl/clients/go/admin/mocks/AsyncAgentServiceServer.go deleted file mode 100644 index 722d6731ff..0000000000 --- a/flyteidl/clients/go/admin/mocks/AsyncAgentServiceServer.go +++ /dev/null @@ -1,139 +0,0 @@ -// Code generated by mockery v1.0.1. DO NOT EDIT. - -package mocks - -import ( - context "context" - - admin "github.com/flyteorg/flyte/flyteidl/gen/pb-go/flyteidl/admin" - - mock "github.com/stretchr/testify/mock" -) - -// AsyncAgentServiceServer is an autogenerated mock type for the AsyncAgentServiceServer type -type AsyncAgentServiceServer struct { - mock.Mock -} - -type AsyncAgentServiceServer_CreateTask struct { - *mock.Call -} - -func (_m AsyncAgentServiceServer_CreateTask) Return(_a0 *admin.CreateTaskResponse, _a1 error) *AsyncAgentServiceServer_CreateTask { - return &AsyncAgentServiceServer_CreateTask{Call: _m.Call.Return(_a0, _a1)} -} - -func (_m *AsyncAgentServiceServer) OnCreateTask(_a0 context.Context, _a1 *admin.CreateTaskRequest) *AsyncAgentServiceServer_CreateTask { - c_call := _m.On("CreateTask", _a0, _a1) - return &AsyncAgentServiceServer_CreateTask{Call: c_call} -} - -func (_m *AsyncAgentServiceServer) OnCreateTaskMatch(matchers ...interface{}) *AsyncAgentServiceServer_CreateTask { - c_call := _m.On("CreateTask", matchers...) - return &AsyncAgentServiceServer_CreateTask{Call: c_call} -} - -// CreateTask provides a mock function with given fields: _a0, _a1 -func (_m *AsyncAgentServiceServer) CreateTask(_a0 context.Context, _a1 *admin.CreateTaskRequest) (*admin.CreateTaskResponse, error) { - ret := _m.Called(_a0, _a1) - - var r0 *admin.CreateTaskResponse - if rf, ok := ret.Get(0).(func(context.Context, *admin.CreateTaskRequest) *admin.CreateTaskResponse); ok { - r0 = rf(_a0, _a1) - } else { - if ret.Get(0) != nil { - r0 = ret.Get(0).(*admin.CreateTaskResponse) - } - } - - var r1 error - if rf, ok := ret.Get(1).(func(context.Context, *admin.CreateTaskRequest) error); ok { - r1 = rf(_a0, _a1) - } else { - r1 = ret.Error(1) - } - - return r0, r1 -} - -type AsyncAgentServiceServer_DeleteTask struct { - *mock.Call -} - -func (_m AsyncAgentServiceServer_DeleteTask) Return(_a0 *admin.DeleteTaskResponse, _a1 error) *AsyncAgentServiceServer_DeleteTask { - return &AsyncAgentServiceServer_DeleteTask{Call: _m.Call.Return(_a0, _a1)} -} - -func (_m *AsyncAgentServiceServer) OnDeleteTask(_a0 context.Context, _a1 *admin.DeleteTaskRequest) *AsyncAgentServiceServer_DeleteTask { - c_call := _m.On("DeleteTask", _a0, _a1) - return &AsyncAgentServiceServer_DeleteTask{Call: c_call} -} - -func (_m *AsyncAgentServiceServer) OnDeleteTaskMatch(matchers ...interface{}) *AsyncAgentServiceServer_DeleteTask { - c_call := _m.On("DeleteTask", matchers...) - return &AsyncAgentServiceServer_DeleteTask{Call: c_call} -} - -// DeleteTask provides a mock function with given fields: _a0, _a1 -func (_m *AsyncAgentServiceServer) DeleteTask(_a0 context.Context, _a1 *admin.DeleteTaskRequest) (*admin.DeleteTaskResponse, error) { - ret := _m.Called(_a0, _a1) - - var r0 *admin.DeleteTaskResponse - if rf, ok := ret.Get(0).(func(context.Context, *admin.DeleteTaskRequest) *admin.DeleteTaskResponse); ok { - r0 = rf(_a0, _a1) - } else { - if ret.Get(0) != nil { - r0 = ret.Get(0).(*admin.DeleteTaskResponse) - } - } - - var r1 error - if rf, ok := ret.Get(1).(func(context.Context, *admin.DeleteTaskRequest) error); ok { - r1 = rf(_a0, _a1) - } else { - r1 = ret.Error(1) - } - - return r0, r1 -} - -type AsyncAgentServiceServer_GetTask struct { - *mock.Call -} - -func (_m AsyncAgentServiceServer_GetTask) Return(_a0 *admin.GetTaskResponse, _a1 error) *AsyncAgentServiceServer_GetTask { - return &AsyncAgentServiceServer_GetTask{Call: _m.Call.Return(_a0, _a1)} -} - -func (_m *AsyncAgentServiceServer) OnGetTask(_a0 context.Context, _a1 *admin.GetTaskRequest) *AsyncAgentServiceServer_GetTask { - c_call := _m.On("GetTask", _a0, _a1) - return &AsyncAgentServiceServer_GetTask{Call: c_call} -} - -func (_m *AsyncAgentServiceServer) OnGetTaskMatch(matchers ...interface{}) *AsyncAgentServiceServer_GetTask { - c_call := _m.On("GetTask", matchers...) - return &AsyncAgentServiceServer_GetTask{Call: c_call} -} - -// GetTask provides a mock function with given fields: _a0, _a1 -func (_m *AsyncAgentServiceServer) GetTask(_a0 context.Context, _a1 *admin.GetTaskRequest) (*admin.GetTaskResponse, error) { - ret := _m.Called(_a0, _a1) - - var r0 *admin.GetTaskResponse - if rf, ok := ret.Get(0).(func(context.Context, *admin.GetTaskRequest) *admin.GetTaskResponse); ok { - r0 = rf(_a0, _a1) - } else { - if ret.Get(0) != nil { - r0 = ret.Get(0).(*admin.GetTaskResponse) - } - } - - var r1 error - if rf, ok := ret.Get(1).(func(context.Context, *admin.GetTaskRequest) error); ok { - r1 = rf(_a0, _a1) - } else { - r1 = ret.Error(1) - } - - return r0, r1 -} diff --git a/flyteidl/clients/go/admin/mocks/SyncAgentServiceClient.go b/flyteidl/clients/go/admin/mocks/SyncAgentServiceClient.go deleted file mode 100644 index c41be39d71..0000000000 --- a/flyteidl/clients/go/admin/mocks/SyncAgentServiceClient.go +++ /dev/null @@ -1,66 +0,0 @@ -// Code generated by mockery v1.0.1. DO NOT EDIT. - -package mocks - -import ( - context "context" - - admin "github.com/flyteorg/flyte/flyteidl/gen/pb-go/flyteidl/admin" - - grpc "google.golang.org/grpc" - - mock "github.com/stretchr/testify/mock" -) - -// SyncAgentServiceClient is an autogenerated mock type for the SyncAgentServiceClient type -type SyncAgentServiceClient struct { - mock.Mock -} - -type SyncAgentServiceClient_DoTask struct { - *mock.Call -} - -func (_m SyncAgentServiceClient_DoTask) Return(_a0 *admin.DoTaskResponse, _a1 error) *SyncAgentServiceClient_DoTask { - return &SyncAgentServiceClient_DoTask{Call: _m.Call.Return(_a0, _a1)} -} - -func (_m *SyncAgentServiceClient) OnDoTask(ctx context.Context, in *admin.DoTaskRequest, opts ...grpc.CallOption) *SyncAgentServiceClient_DoTask { - c_call := _m.On("DoTask", ctx, in, opts) - return &SyncAgentServiceClient_DoTask{Call: c_call} -} - -func (_m *SyncAgentServiceClient) OnDoTaskMatch(matchers ...interface{}) *SyncAgentServiceClient_DoTask { - c_call := _m.On("DoTask", matchers...) - return &SyncAgentServiceClient_DoTask{Call: c_call} -} - -// DoTask provides a mock function with given fields: ctx, in, opts -func (_m *SyncAgentServiceClient) DoTask(ctx context.Context, in *admin.DoTaskRequest, opts ...grpc.CallOption) (*admin.DoTaskResponse, 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 *admin.DoTaskResponse - if rf, ok := ret.Get(0).(func(context.Context, *admin.DoTaskRequest, ...grpc.CallOption) *admin.DoTaskResponse); ok { - r0 = rf(ctx, in, opts...) - } else { - if ret.Get(0) != nil { - r0 = ret.Get(0).(*admin.DoTaskResponse) - } - } - - var r1 error - if rf, ok := ret.Get(1).(func(context.Context, *admin.DoTaskRequest, ...grpc.CallOption) error); ok { - r1 = rf(ctx, in, opts...) - } else { - r1 = ret.Error(1) - } - - return r0, r1 -} diff --git a/flyteidl/clients/go/admin/mocks/SyncAgentServiceServer.go b/flyteidl/clients/go/admin/mocks/SyncAgentServiceServer.go deleted file mode 100644 index 169787a902..0000000000 --- a/flyteidl/clients/go/admin/mocks/SyncAgentServiceServer.go +++ /dev/null @@ -1,57 +0,0 @@ -// Code generated by mockery v1.0.1. DO NOT EDIT. - -package mocks - -import ( - context "context" - - admin "github.com/flyteorg/flyte/flyteidl/gen/pb-go/flyteidl/admin" - - mock "github.com/stretchr/testify/mock" -) - -// SyncAgentServiceServer is an autogenerated mock type for the SyncAgentServiceServer type -type SyncAgentServiceServer struct { - mock.Mock -} - -type SyncAgentServiceServer_DoTask struct { - *mock.Call -} - -func (_m SyncAgentServiceServer_DoTask) Return(_a0 *admin.DoTaskResponse, _a1 error) *SyncAgentServiceServer_DoTask { - return &SyncAgentServiceServer_DoTask{Call: _m.Call.Return(_a0, _a1)} -} - -func (_m *SyncAgentServiceServer) OnDoTask(_a0 context.Context, _a1 *admin.DoTaskRequest) *SyncAgentServiceServer_DoTask { - c_call := _m.On("DoTask", _a0, _a1) - return &SyncAgentServiceServer_DoTask{Call: c_call} -} - -func (_m *SyncAgentServiceServer) OnDoTaskMatch(matchers ...interface{}) *SyncAgentServiceServer_DoTask { - c_call := _m.On("DoTask", matchers...) - return &SyncAgentServiceServer_DoTask{Call: c_call} -} - -// DoTask provides a mock function with given fields: _a0, _a1 -func (_m *SyncAgentServiceServer) DoTask(_a0 context.Context, _a1 *admin.DoTaskRequest) (*admin.DoTaskResponse, error) { - ret := _m.Called(_a0, _a1) - - var r0 *admin.DoTaskResponse - if rf, ok := ret.Get(0).(func(context.Context, *admin.DoTaskRequest) *admin.DoTaskResponse); ok { - r0 = rf(_a0, _a1) - } else { - if ret.Get(0) != nil { - r0 = ret.Get(0).(*admin.DoTaskResponse) - } - } - - var r1 error - if rf, ok := ret.Get(1).(func(context.Context, *admin.DoTaskRequest) error); ok { - r1 = rf(_a0, _a1) - } else { - r1 = ret.Error(1) - } - - return r0, r1 -} From 7f8040203c7872d43ad5250d185bc4c54621c4a1 Mon Sep 17 00:00:00 2001 From: Future Outlier Date: Wed, 13 Dec 2023 23:28:16 +0800 Subject: [PATCH 37/48] fix spell check error Signed-off-by: Future Outlier --- flyteidl/gen/pb-go/flyteidl/admin/agent.pb.go | 2 +- flyteidl/gen/pb_rust/flyteidl.admin.rs | 4 ++-- flyteidl/protos/flyteidl/admin/agent.proto | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/flyteidl/gen/pb-go/flyteidl/admin/agent.pb.go b/flyteidl/gen/pb-go/flyteidl/admin/agent.pb.go index b5933b4f30..8a009493dd 100644 --- a/flyteidl/gen/pb-go/flyteidl/admin/agent.pb.go +++ b/flyteidl/gen/pb-go/flyteidl/admin/agent.pb.go @@ -215,7 +215,7 @@ func (m *CreateTaskRequest) GetTaskExecutionMetadata() *TaskExecutionMetadata { // Represents a create response structure. type CreateTaskResponse struct { // Metadata is created by the agent. It could be a string (jobId) or a dict (more complex metadata). - // Resouce is for synchronous task execution. + // Resource is for synchronous task execution. // // Types that are valid to be assigned to Res: // *CreateTaskResponse_ResourceMeta diff --git a/flyteidl/gen/pb_rust/flyteidl.admin.rs b/flyteidl/gen/pb_rust/flyteidl.admin.rs index 6bebe0b95e..26cadea990 100644 --- a/flyteidl/gen/pb_rust/flyteidl.admin.rs +++ b/flyteidl/gen/pb_rust/flyteidl.admin.rs @@ -49,14 +49,14 @@ pub struct CreateTaskResponse { #[prost(message, repeated, tag="3")] pub log_links: ::prost::alloc::vec::Vec, /// Metadata is created by the agent. It could be a string (jobId) or a dict (more complex metadata). - /// Resouce is for synchronous task execution. + /// Resource is for synchronous task execution. #[prost(oneof="create_task_response::Res", tags="1, 2")] pub res: ::core::option::Option, } /// Nested message and enum types in `CreateTaskResponse`. pub mod create_task_response { /// Metadata is created by the agent. It could be a string (jobId) or a dict (more complex metadata). - /// Resouce is for synchronous task execution. + /// Resource is for synchronous task execution. #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Oneof)] pub enum Res { diff --git a/flyteidl/protos/flyteidl/admin/agent.proto b/flyteidl/protos/flyteidl/admin/agent.proto index 93b2d4d39e..6e86a2db02 100644 --- a/flyteidl/protos/flyteidl/admin/agent.proto +++ b/flyteidl/protos/flyteidl/admin/agent.proto @@ -51,7 +51,7 @@ message CreateTaskRequest { // Represents a create response structure. message CreateTaskResponse { // Metadata is created by the agent. It could be a string (jobId) or a dict (more complex metadata). - // Resouce is for synchronous task execution. + // Resource is for synchronous task execution. oneof res { bytes resource_meta = 1; Resource resource = 2; From 1ac96b08ba57b591080d75dba50553f568159e10 Mon Sep 17 00:00:00 2001 From: Kevin Su Date: Mon, 18 Dec 2023 17:59:45 -0800 Subject: [PATCH 38/48] kevin update Signed-off-by: Kevin Su --- .../gen/pb-cpp/flyteidl/admin/agent.pb.cc | 102 +- flyteidl/gen/pb-cpp/flyteidl/admin/agent.pb.h | 40 + flyteidl/gen/pb-cpp/flyteidl/core/tasks.pb.cc | 550 ++------ flyteidl/gen/pb-cpp/flyteidl/core/tasks.pb.h | 217 +-- .../pb-cpp/flyteidl/service/agent.grpc.pb.cc | 90 +- .../pb-cpp/flyteidl/service/agent.grpc.pb.h | 4 +- .../gen/pb-cpp/flyteidl/service/agent.pb.cc | 22 +- flyteidl/gen/pb-go/flyteidl/admin/agent.pb.go | 117 +- .../pb-go/flyteidl/admin/agent.pb.validate.go | 15 + flyteidl/gen/pb-go/flyteidl/core/tasks.pb.go | 313 ++--- .../pb-go/flyteidl/core/tasks.pb.validate.go | 77 - .../pb-go/flyteidl/service/admin.swagger.json | 14 - .../gen/pb-go/flyteidl/service/agent.pb.go | 100 +- .../pb-go/flyteidl/service/agent.swagger.json | 21 +- .../external_plugin_service.swagger.json | 14 - .../flyteidl/service/flyteadmin/README.md | 1 - .../service/flyteadmin/api/swagger.yaml | 58 - .../flyteadmin/model_core_plugin_metadata.go | 15 - .../flyteadmin/model_core_runtime_metadata.go | 2 - .../gen/pb-go/flyteidl/service/openapi.go | 4 +- .../gen/pb-java/flyteidl/admin/Agent.java | 507 ++++++- flyteidl/gen/pb-java/flyteidl/core/Tasks.java | 1239 ++++------------- .../gen/pb-java/flyteidl/service/Agent.java | 20 +- flyteidl/gen/pb-js/flyteidl.d.ts | 88 +- flyteidl/gen/pb-js/flyteidl.js | 212 +-- .../gen/pb_python/flyteidl/admin/agent_pb2.py | 16 +- .../pb_python/flyteidl/admin/agent_pb2.pyi | 6 +- .../gen/pb_python/flyteidl/core/tasks_pb2.py | 82 +- .../gen/pb_python/flyteidl/core/tasks_pb2.pyi | 12 +- .../pb_python/flyteidl/service/agent_pb2.py | 6 +- .../flyteidl/service/agent_pb2_grpc.py | 22 +- .../flyteidl/service/flyteadmin/README.md | 1 - .../service/flyteadmin/flyteadmin/__init__.py | 1 - .../flyteadmin/flyteadmin/models/__init__.py | 1 - .../flyteadmin/models/core_plugin_metadata.py | 117 -- .../models/core_runtime_metadata.py | 35 +- .../test/test_core_plugin_metadata.py | 40 - flyteidl/gen/pb_rust/flyteidl.admin.rs | 3 + flyteidl/gen/pb_rust/flyteidl.core.rs | 10 - flyteidl/protos/flyteidl/admin/agent.proto | 2 + flyteidl/protos/flyteidl/core/tasks.proto | 8 - flyteidl/protos/flyteidl/service/agent.proto | 2 +- .../pluginmachinery/internal/webapi/core.go | 96 +- .../go/tasks/pluginmachinery/webapi/plugin.go | 5 - .../go/tasks/plugins/webapi/agent/plugin.go | 77 +- 45 files changed, 1468 insertions(+), 2916 deletions(-) delete mode 100644 flyteidl/gen/pb-go/flyteidl/service/flyteadmin/model_core_plugin_metadata.go delete mode 100644 flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/core_plugin_metadata.py delete mode 100644 flyteidl/gen/pb_python/flyteidl/service/flyteadmin/test/test_core_plugin_metadata.py diff --git a/flyteidl/gen/pb-cpp/flyteidl/admin/agent.pb.cc b/flyteidl/gen/pb-cpp/flyteidl/admin/agent.pb.cc index a8f65335cf..9b4b4a574a 100644 --- a/flyteidl/gen/pb-cpp/flyteidl/admin/agent.pb.cc +++ b/flyteidl/gen/pb-cpp/flyteidl/admin/agent.pb.cc @@ -19,7 +19,7 @@ extern PROTOBUF_INTERNAL_EXPORT_flyteidl_2fadmin_2fagent_2eproto ::google::protobuf::internal::SCCInfo<0> scc_info_TaskExecutionMetadata_AnnotationsEntry_DoNotUse_flyteidl_2fadmin_2fagent_2eproto; extern PROTOBUF_INTERNAL_EXPORT_flyteidl_2fadmin_2fagent_2eproto ::google::protobuf::internal::SCCInfo<0> scc_info_TaskExecutionMetadata_EnvironmentVariablesEntry_DoNotUse_flyteidl_2fadmin_2fagent_2eproto; extern PROTOBUF_INTERNAL_EXPORT_flyteidl_2fadmin_2fagent_2eproto ::google::protobuf::internal::SCCInfo<0> scc_info_TaskExecutionMetadata_LabelsEntry_DoNotUse_flyteidl_2fadmin_2fagent_2eproto; -extern PROTOBUF_INTERNAL_EXPORT_flyteidl_2fadmin_2fagent_2eproto ::google::protobuf::internal::SCCInfo<1> scc_info_Resource_flyteidl_2fadmin_2fagent_2eproto; +extern PROTOBUF_INTERNAL_EXPORT_flyteidl_2fadmin_2fagent_2eproto ::google::protobuf::internal::SCCInfo<2> scc_info_Resource_flyteidl_2fadmin_2fagent_2eproto; extern PROTOBUF_INTERNAL_EXPORT_flyteidl_2fadmin_2fagent_2eproto ::google::protobuf::internal::SCCInfo<4> scc_info_TaskExecutionMetadata_flyteidl_2fadmin_2fagent_2eproto; extern PROTOBUF_INTERNAL_EXPORT_flyteidl_2fcore_2fexecution_2eproto ::google::protobuf::internal::SCCInfo<1> scc_info_TaskLog_flyteidl_2fcore_2fexecution_2eproto; extern PROTOBUF_INTERNAL_EXPORT_flyteidl_2fcore_2fidentifier_2eproto ::google::protobuf::internal::SCCInfo<2> scc_info_TaskExecutionIdentifier_flyteidl_2fcore_2fidentifier_2eproto; @@ -206,9 +206,10 @@ static void InitDefaultsResource_flyteidl_2fadmin_2fagent_2eproto() { ::flyteidl::admin::Resource::InitAsDefaultInstance(); } -::google::protobuf::internal::SCCInfo<1> scc_info_Resource_flyteidl_2fadmin_2fagent_2eproto = - {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 1, InitDefaultsResource_flyteidl_2fadmin_2fagent_2eproto}, { - &scc_info_Literal_flyteidl_2fcore_2fliterals_2eproto.base,}}; +::google::protobuf::internal::SCCInfo<2> scc_info_Resource_flyteidl_2fadmin_2fagent_2eproto = + {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 2, InitDefaultsResource_flyteidl_2fadmin_2fagent_2eproto}, { + &scc_info_Literal_flyteidl_2fcore_2fliterals_2eproto.base, + &scc_info_TaskLog_flyteidl_2fcore_2fexecution_2eproto.base,}}; static void InitDefaultsDeleteTaskRequest_flyteidl_2fadmin_2fagent_2eproto() { GOOGLE_PROTOBUF_VERIFY_VERSION; @@ -335,6 +336,7 @@ const ::google::protobuf::uint32 TableStruct_flyteidl_2fadmin_2fagent_2eproto::o PROTOBUF_FIELD_OFFSET(::flyteidl::admin::Resource, state_), PROTOBUF_FIELD_OFFSET(::flyteidl::admin::Resource, outputs_), PROTOBUF_FIELD_OFFSET(::flyteidl::admin::Resource, message_), + PROTOBUF_FIELD_OFFSET(::flyteidl::admin::Resource, log_links_), ~0u, // no _has_bits_ PROTOBUF_FIELD_OFFSET(::flyteidl::admin::DeleteTaskRequest, _internal_metadata_), ~0u, // no _extensions_ @@ -358,8 +360,8 @@ static const ::google::protobuf::internal::MigrationSchema schemas[] PROTOBUF_SE { 56, -1, sizeof(::flyteidl::admin::GetTaskRequest)}, { 63, -1, sizeof(::flyteidl::admin::GetTaskResponse)}, { 70, -1, sizeof(::flyteidl::admin::Resource)}, - { 78, -1, sizeof(::flyteidl::admin::DeleteTaskRequest)}, - { 85, -1, sizeof(::flyteidl::admin::DeleteTaskResponse)}, + { 79, -1, sizeof(::flyteidl::admin::DeleteTaskRequest)}, + { 86, -1, sizeof(::flyteidl::admin::DeleteTaskResponse)}, }; static ::google::protobuf::Message const * const file_default_instances[] = { @@ -414,21 +416,22 @@ const char descriptor_table_protodef_flyteidl_2fadmin_2fagent_2eproto[] = " \001(\t\022\025\n\rresource_meta\030\002 \001(\014\"h\n\017GetTaskRe" "sponse\022*\n\010resource\030\001 \001(\0132\030.flyteidl.admi" "n.Resource\022)\n\tlog_links\030\002 \003(\0132\026.flyteidl" - ".core.TaskLog\"m\n\010Resource\022$\n\005state\030\001 \001(\016" - "2\025.flyteidl.admin.State\022*\n\007outputs\030\002 \001(\013" - "2\031.flyteidl.core.LiteralMap\022\017\n\007message\030\003" - " \001(\t\"=\n\021DeleteTaskRequest\022\021\n\ttask_type\030\001" - " \001(\t\022\025\n\rresource_meta\030\002 \001(\014\"\024\n\022DeleteTas" - "kResponse*^\n\005State\022\025\n\021RETRYABLE_FAILURE\020" - "\000\022\025\n\021PERMANENT_FAILURE\020\001\022\013\n\007PENDING\020\002\022\013\n" - "\007RUNNING\020\003\022\r\n\tSUCCEEDED\020\004B=Z;github.com/" - "flyteorg/flyte/flyteidl/gen/pb-go/flytei" - "dl/adminb\006proto3" + ".core.TaskLog\"\230\001\n\010Resource\022$\n\005state\030\001 \001(" + "\0162\025.flyteidl.admin.State\022*\n\007outputs\030\002 \001(" + "\0132\031.flyteidl.core.LiteralMap\022\017\n\007message\030" + "\003 \001(\t\022)\n\tlog_links\030\004 \003(\0132\026.flyteidl.core" + ".TaskLog\"=\n\021DeleteTaskRequest\022\021\n\ttask_ty" + "pe\030\001 \001(\t\022\025\n\rresource_meta\030\002 \001(\014\"\024\n\022Delet" + "eTaskResponse*^\n\005State\022\025\n\021RETRYABLE_FAIL" + "URE\020\000\022\025\n\021PERMANENT_FAILURE\020\001\022\013\n\007PENDING\020" + "\002\022\013\n\007RUNNING\020\003\022\r\n\tSUCCEEDED\020\004B=Z;github." + "com/flyteorg/flyte/flyteidl/gen/pb-go/fl" + "yteidl/adminb\006proto3" ; ::google::protobuf::internal::DescriptorTable descriptor_table_flyteidl_2fadmin_2fagent_2eproto = { false, InitDefaults_flyteidl_2fadmin_2fagent_2eproto, descriptor_table_protodef_flyteidl_2fadmin_2fagent_2eproto, - "flyteidl/admin/agent.proto", &assign_descriptors_table_flyteidl_2fadmin_2fagent_2eproto, 1616, + "flyteidl/admin/agent.proto", &assign_descriptors_table_flyteidl_2fadmin_2fagent_2eproto, 1660, }; void AddDescriptors_flyteidl_2fadmin_2fagent_2eproto() { @@ -3215,10 +3218,14 @@ void Resource::clear_outputs() { } outputs_ = nullptr; } +void Resource::clear_log_links() { + log_links_.Clear(); +} #if !defined(_MSC_VER) || _MSC_VER >= 1900 const int Resource::kStateFieldNumber; const int Resource::kOutputsFieldNumber; const int Resource::kMessageFieldNumber; +const int Resource::kLogLinksFieldNumber; #endif // !defined(_MSC_VER) || _MSC_VER >= 1900 Resource::Resource() @@ -3228,7 +3235,8 @@ Resource::Resource() } Resource::Resource(const Resource& from) : ::google::protobuf::Message(), - _internal_metadata_(nullptr) { + _internal_metadata_(nullptr), + log_links_(from.log_links_) { _internal_metadata_.MergeFrom(from._internal_metadata_); message_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); if (from.message().size() > 0) { @@ -3277,6 +3285,7 @@ void Resource::Clear() { // Prevent compiler warnings about cached_has_bits being unused (void) cached_has_bits; + log_links_.Clear(); message_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); if (GetArenaNoVirtual() == nullptr && outputs_ != nullptr) { delete outputs_; @@ -3336,6 +3345,22 @@ const char* Resource::_InternalParse(const char* begin, const char* end, void* o ptr += size; break; } + // repeated .flyteidl.core.TaskLog log_links = 4; + case 4: { + if (static_cast<::google::protobuf::uint8>(tag) != 34) goto handle_unusual; + do { + ptr = ::google::protobuf::io::ReadSize(ptr, &size); + GOOGLE_PROTOBUF_PARSER_ASSERT(ptr); + parser_till_end = ::flyteidl::core::TaskLog::_InternalParse; + object = msg->add_log_links(); + if (size > end - ptr) goto len_delim_till_end; + ptr += size; + GOOGLE_PROTOBUF_PARSER_ASSERT(ctx->ParseExactRange( + {parser_till_end, object}, ptr - size, ptr)); + if (ptr >= end) break; + } while ((::google::protobuf::io::UnalignedLoad<::google::protobuf::uint64>(ptr) & 255) == 34 && (ptr += 1)); + break; + } default: { handle_unusual: if ((tag & 7) == 4 || tag == 0) { @@ -3410,6 +3435,17 @@ bool Resource::MergePartialFromCodedStream( break; } + // repeated .flyteidl.core.TaskLog log_links = 4; + case 4: { + if (static_cast< ::google::protobuf::uint8>(tag) == (34 & 0xFF)) { + DO_(::google::protobuf::internal::WireFormatLite::ReadMessage( + input, add_log_links())); + } else { + goto handle_unusual; + } + break; + } + default: { handle_unusual: if (tag == 0) { @@ -3459,6 +3495,15 @@ void Resource::SerializeWithCachedSizes( 3, this->message(), output); } + // repeated .flyteidl.core.TaskLog log_links = 4; + for (unsigned int i = 0, + n = static_cast(this->log_links_size()); i < n; i++) { + ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray( + 4, + this->log_links(static_cast(i)), + output); + } + if (_internal_metadata_.have_unknown_fields()) { ::google::protobuf::internal::WireFormat::SerializeUnknownFields( _internal_metadata_.unknown_fields(), output); @@ -3496,6 +3541,14 @@ ::google::protobuf::uint8* Resource::InternalSerializeWithCachedSizesToArray( 3, this->message(), target); } + // repeated .flyteidl.core.TaskLog log_links = 4; + for (unsigned int i = 0, + n = static_cast(this->log_links_size()); i < n; i++) { + target = ::google::protobuf::internal::WireFormatLite:: + InternalWriteMessageToArray( + 4, this->log_links(static_cast(i)), target); + } + if (_internal_metadata_.have_unknown_fields()) { target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray( _internal_metadata_.unknown_fields(), target); @@ -3517,6 +3570,17 @@ size_t Resource::ByteSizeLong() const { // Prevent compiler warnings about cached_has_bits being unused (void) cached_has_bits; + // repeated .flyteidl.core.TaskLog log_links = 4; + { + unsigned int count = static_cast(this->log_links_size()); + total_size += 1UL * count; + for (unsigned int i = 0; i < count; i++) { + total_size += + ::google::protobuf::internal::WireFormatLite::MessageSize( + this->log_links(static_cast(i))); + } + } + // string message = 3; if (this->message().size() > 0) { total_size += 1 + @@ -3564,6 +3628,7 @@ void Resource::MergeFrom(const Resource& from) { ::google::protobuf::uint32 cached_has_bits = 0; (void) cached_has_bits; + log_links_.MergeFrom(from.log_links_); if (from.message().size() > 0) { message_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.message_); @@ -3601,6 +3666,7 @@ void Resource::Swap(Resource* other) { void Resource::InternalSwap(Resource* other) { using std::swap; _internal_metadata_.Swap(&other->_internal_metadata_); + CastToBase(&log_links_)->InternalSwap(CastToBase(&other->log_links_)); message_.Swap(&other->message_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(), GetArenaNoVirtual()); swap(outputs_, other->outputs_); diff --git a/flyteidl/gen/pb-cpp/flyteidl/admin/agent.pb.h b/flyteidl/gen/pb-cpp/flyteidl/admin/agent.pb.h index bcc400c834..86edcac5c9 100644 --- a/flyteidl/gen/pb-cpp/flyteidl/admin/agent.pb.h +++ b/flyteidl/gen/pb-cpp/flyteidl/admin/agent.pb.h @@ -1073,6 +1073,18 @@ class Resource final : // accessors ------------------------------------------------------- + // repeated .flyteidl.core.TaskLog log_links = 4; + int log_links_size() const; + void clear_log_links(); + static const int kLogLinksFieldNumber = 4; + ::flyteidl::core::TaskLog* mutable_log_links(int index); + ::google::protobuf::RepeatedPtrField< ::flyteidl::core::TaskLog >* + mutable_log_links(); + const ::flyteidl::core::TaskLog& log_links(int index) const; + ::flyteidl::core::TaskLog* add_log_links(); + const ::google::protobuf::RepeatedPtrField< ::flyteidl::core::TaskLog >& + log_links() const; + // string message = 3; void clear_message(); static const int kMessageFieldNumber = 3; @@ -1107,6 +1119,7 @@ class Resource final : class HasBitSetters; ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_; + ::google::protobuf::RepeatedPtrField< ::flyteidl::core::TaskLog > log_links_; ::google::protobuf::internal::ArenaStringPtr message_; ::flyteidl::core::LiteralMap* outputs_; int state_; @@ -2254,6 +2267,33 @@ inline void Resource::set_allocated_message(::std::string* message) { // @@protoc_insertion_point(field_set_allocated:flyteidl.admin.Resource.message) } +// repeated .flyteidl.core.TaskLog log_links = 4; +inline int Resource::log_links_size() const { + return log_links_.size(); +} +inline ::flyteidl::core::TaskLog* Resource::mutable_log_links(int index) { + // @@protoc_insertion_point(field_mutable:flyteidl.admin.Resource.log_links) + return log_links_.Mutable(index); +} +inline ::google::protobuf::RepeatedPtrField< ::flyteidl::core::TaskLog >* +Resource::mutable_log_links() { + // @@protoc_insertion_point(field_mutable_list:flyteidl.admin.Resource.log_links) + return &log_links_; +} +inline const ::flyteidl::core::TaskLog& Resource::log_links(int index) const { + // @@protoc_insertion_point(field_get:flyteidl.admin.Resource.log_links) + return log_links_.Get(index); +} +inline ::flyteidl::core::TaskLog* Resource::add_log_links() { + // @@protoc_insertion_point(field_add:flyteidl.admin.Resource.log_links) + return log_links_.Add(); +} +inline const ::google::protobuf::RepeatedPtrField< ::flyteidl::core::TaskLog >& +Resource::log_links() const { + // @@protoc_insertion_point(field_list:flyteidl.admin.Resource.log_links) + return log_links_; +} + // ------------------------------------------------------------------- // DeleteTaskRequest diff --git a/flyteidl/gen/pb-cpp/flyteidl/core/tasks.pb.cc b/flyteidl/gen/pb-cpp/flyteidl/core/tasks.pb.cc index e2a8bacc5e..7a06a09340 100644 --- a/flyteidl/gen/pb-cpp/flyteidl/core/tasks.pb.cc +++ b/flyteidl/gen/pb-cpp/flyteidl/core/tasks.pb.cc @@ -26,15 +26,14 @@ extern PROTOBUF_INTERNAL_EXPORT_flyteidl_2fcore_2ftasks_2eproto ::google::protob extern PROTOBUF_INTERNAL_EXPORT_flyteidl_2fcore_2ftasks_2eproto ::google::protobuf::internal::SCCInfo<0> scc_info_IOStrategy_flyteidl_2fcore_2ftasks_2eproto; extern PROTOBUF_INTERNAL_EXPORT_flyteidl_2fcore_2ftasks_2eproto ::google::protobuf::internal::SCCInfo<0> scc_info_K8sObjectMetadata_AnnotationsEntry_DoNotUse_flyteidl_2fcore_2ftasks_2eproto; extern PROTOBUF_INTERNAL_EXPORT_flyteidl_2fcore_2ftasks_2eproto ::google::protobuf::internal::SCCInfo<0> scc_info_K8sObjectMetadata_LabelsEntry_DoNotUse_flyteidl_2fcore_2ftasks_2eproto; -extern PROTOBUF_INTERNAL_EXPORT_flyteidl_2fcore_2ftasks_2eproto ::google::protobuf::internal::SCCInfo<0> scc_info_PluginMetadata_flyteidl_2fcore_2ftasks_2eproto; extern PROTOBUF_INTERNAL_EXPORT_flyteidl_2fcore_2ftasks_2eproto ::google::protobuf::internal::SCCInfo<0> scc_info_Resources_ResourceEntry_flyteidl_2fcore_2ftasks_2eproto; +extern PROTOBUF_INTERNAL_EXPORT_flyteidl_2fcore_2ftasks_2eproto ::google::protobuf::internal::SCCInfo<0> scc_info_RuntimeMetadata_flyteidl_2fcore_2ftasks_2eproto; extern PROTOBUF_INTERNAL_EXPORT_flyteidl_2fcore_2ftasks_2eproto ::google::protobuf::internal::SCCInfo<0> scc_info_Sql_flyteidl_2fcore_2ftasks_2eproto; extern PROTOBUF_INTERNAL_EXPORT_flyteidl_2fcore_2ftasks_2eproto ::google::protobuf::internal::SCCInfo<0> scc_info_TaskMetadata_TagsEntry_DoNotUse_flyteidl_2fcore_2ftasks_2eproto; extern PROTOBUF_INTERNAL_EXPORT_flyteidl_2fcore_2ftasks_2eproto ::google::protobuf::internal::SCCInfo<0> scc_info_TaskTemplate_ConfigEntry_DoNotUse_flyteidl_2fcore_2ftasks_2eproto; extern PROTOBUF_INTERNAL_EXPORT_flyteidl_2fcore_2ftasks_2eproto ::google::protobuf::internal::SCCInfo<1> scc_info_DataLoadingConfig_flyteidl_2fcore_2ftasks_2eproto; extern PROTOBUF_INTERNAL_EXPORT_flyteidl_2fcore_2ftasks_2eproto ::google::protobuf::internal::SCCInfo<1> scc_info_ExtendedResources_flyteidl_2fcore_2ftasks_2eproto; extern PROTOBUF_INTERNAL_EXPORT_flyteidl_2fcore_2ftasks_2eproto ::google::protobuf::internal::SCCInfo<1> scc_info_Resources_flyteidl_2fcore_2ftasks_2eproto; -extern PROTOBUF_INTERNAL_EXPORT_flyteidl_2fcore_2ftasks_2eproto ::google::protobuf::internal::SCCInfo<1> scc_info_RuntimeMetadata_flyteidl_2fcore_2ftasks_2eproto; extern PROTOBUF_INTERNAL_EXPORT_flyteidl_2fcore_2ftasks_2eproto ::google::protobuf::internal::SCCInfo<2> scc_info_K8sObjectMetadata_flyteidl_2fcore_2ftasks_2eproto; extern PROTOBUF_INTERNAL_EXPORT_flyteidl_2fcore_2ftasks_2eproto ::google::protobuf::internal::SCCInfo<3> scc_info_K8sPod_flyteidl_2fcore_2ftasks_2eproto; extern PROTOBUF_INTERNAL_EXPORT_flyteidl_2fcore_2ftasks_2eproto ::google::protobuf::internal::SCCInfo<4> scc_info_Container_flyteidl_2fcore_2ftasks_2eproto; @@ -65,10 +64,6 @@ class RuntimeMetadataDefaultTypeInternal { public: ::google::protobuf::internal::ExplicitlyConstructed _instance; } _RuntimeMetadata_default_instance_; -class PluginMetadataDefaultTypeInternal { - public: - ::google::protobuf::internal::ExplicitlyConstructed _instance; -} _PluginMetadata_default_instance_; class TaskMetadata_TagsEntry_DoNotUseDefaultTypeInternal { public: ::google::protobuf::internal::ExplicitlyConstructed _instance; @@ -196,23 +191,8 @@ static void InitDefaultsRuntimeMetadata_flyteidl_2fcore_2ftasks_2eproto() { ::flyteidl::core::RuntimeMetadata::InitAsDefaultInstance(); } -::google::protobuf::internal::SCCInfo<1> scc_info_RuntimeMetadata_flyteidl_2fcore_2ftasks_2eproto = - {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 1, InitDefaultsRuntimeMetadata_flyteidl_2fcore_2ftasks_2eproto}, { - &scc_info_PluginMetadata_flyteidl_2fcore_2ftasks_2eproto.base,}}; - -static void InitDefaultsPluginMetadata_flyteidl_2fcore_2ftasks_2eproto() { - GOOGLE_PROTOBUF_VERIFY_VERSION; - - { - void* ptr = &::flyteidl::core::_PluginMetadata_default_instance_; - new (ptr) ::flyteidl::core::PluginMetadata(); - ::google::protobuf::internal::OnShutdownDestroyMessage(ptr); - } - ::flyteidl::core::PluginMetadata::InitAsDefaultInstance(); -} - -::google::protobuf::internal::SCCInfo<0> scc_info_PluginMetadata_flyteidl_2fcore_2ftasks_2eproto = - {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 0, InitDefaultsPluginMetadata_flyteidl_2fcore_2ftasks_2eproto}, {}}; +::google::protobuf::internal::SCCInfo<0> scc_info_RuntimeMetadata_flyteidl_2fcore_2ftasks_2eproto = + {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 0, InitDefaultsRuntimeMetadata_flyteidl_2fcore_2ftasks_2eproto}, {}}; static void InitDefaultsTaskMetadata_TagsEntry_DoNotUse_flyteidl_2fcore_2ftasks_2eproto() { GOOGLE_PROTOBUF_VERIFY_VERSION; @@ -422,7 +402,6 @@ void InitDefaults_flyteidl_2fcore_2ftasks_2eproto() { ::google::protobuf::internal::InitSCC(&scc_info_GPUAccelerator_flyteidl_2fcore_2ftasks_2eproto.base); ::google::protobuf::internal::InitSCC(&scc_info_ExtendedResources_flyteidl_2fcore_2ftasks_2eproto.base); ::google::protobuf::internal::InitSCC(&scc_info_RuntimeMetadata_flyteidl_2fcore_2ftasks_2eproto.base); - ::google::protobuf::internal::InitSCC(&scc_info_PluginMetadata_flyteidl_2fcore_2ftasks_2eproto.base); ::google::protobuf::internal::InitSCC(&scc_info_TaskMetadata_TagsEntry_DoNotUse_flyteidl_2fcore_2ftasks_2eproto.base); ::google::protobuf::internal::InitSCC(&scc_info_TaskMetadata_flyteidl_2fcore_2ftasks_2eproto.base); ::google::protobuf::internal::InitSCC(&scc_info_TaskTemplate_ConfigEntry_DoNotUse_flyteidl_2fcore_2ftasks_2eproto.base); @@ -438,7 +417,7 @@ void InitDefaults_flyteidl_2fcore_2ftasks_2eproto() { ::google::protobuf::internal::InitSCC(&scc_info_Sql_flyteidl_2fcore_2ftasks_2eproto.base); } -::google::protobuf::Metadata file_level_metadata_flyteidl_2fcore_2ftasks_2eproto[19]; +::google::protobuf::Metadata file_level_metadata_flyteidl_2fcore_2ftasks_2eproto[18]; const ::google::protobuf::EnumDescriptor* file_level_enum_descriptors_flyteidl_2fcore_2ftasks_2eproto[7]; constexpr ::google::protobuf::ServiceDescriptor const** file_level_service_descriptors_flyteidl_2fcore_2ftasks_2eproto = nullptr; @@ -480,13 +459,6 @@ const ::google::protobuf::uint32 TableStruct_flyteidl_2fcore_2ftasks_2eproto::of PROTOBUF_FIELD_OFFSET(::flyteidl::core::RuntimeMetadata, type_), PROTOBUF_FIELD_OFFSET(::flyteidl::core::RuntimeMetadata, version_), PROTOBUF_FIELD_OFFSET(::flyteidl::core::RuntimeMetadata, flavor_), - PROTOBUF_FIELD_OFFSET(::flyteidl::core::RuntimeMetadata, plugin_metadata_), - ~0u, // no _has_bits_ - PROTOBUF_FIELD_OFFSET(::flyteidl::core::PluginMetadata, _internal_metadata_), - ~0u, // no _extensions_ - ~0u, // no _oneof_case_ - ~0u, // no _weak_field_map_ - PROTOBUF_FIELD_OFFSET(::flyteidl::core::PluginMetadata, is_sync_plugin_), PROTOBUF_FIELD_OFFSET(::flyteidl::core::TaskMetadata_TagsEntry_DoNotUse, _has_bits_), PROTOBUF_FIELD_OFFSET(::flyteidl::core::TaskMetadata_TagsEntry_DoNotUse, _internal_metadata_), ~0u, // no _extensions_ @@ -624,20 +596,19 @@ static const ::google::protobuf::internal::MigrationSchema schemas[] PROTOBUF_SE { 14, -1, sizeof(::flyteidl::core::GPUAccelerator)}, { 23, -1, sizeof(::flyteidl::core::ExtendedResources)}, { 29, -1, sizeof(::flyteidl::core::RuntimeMetadata)}, - { 38, -1, sizeof(::flyteidl::core::PluginMetadata)}, - { 44, 51, sizeof(::flyteidl::core::TaskMetadata_TagsEntry_DoNotUse)}, - { 53, -1, sizeof(::flyteidl::core::TaskMetadata)}, - { 70, 77, sizeof(::flyteidl::core::TaskTemplate_ConfigEntry_DoNotUse)}, - { 79, -1, sizeof(::flyteidl::core::TaskTemplate)}, - { 97, -1, sizeof(::flyteidl::core::ContainerPort)}, - { 103, -1, sizeof(::flyteidl::core::Container)}, - { 117, -1, sizeof(::flyteidl::core::IOStrategy)}, - { 124, -1, sizeof(::flyteidl::core::DataLoadingConfig)}, - { 134, -1, sizeof(::flyteidl::core::K8sPod)}, - { 142, 149, sizeof(::flyteidl::core::K8sObjectMetadata_LabelsEntry_DoNotUse)}, - { 151, 158, sizeof(::flyteidl::core::K8sObjectMetadata_AnnotationsEntry_DoNotUse)}, - { 160, -1, sizeof(::flyteidl::core::K8sObjectMetadata)}, - { 167, -1, sizeof(::flyteidl::core::Sql)}, + { 37, 44, sizeof(::flyteidl::core::TaskMetadata_TagsEntry_DoNotUse)}, + { 46, -1, sizeof(::flyteidl::core::TaskMetadata)}, + { 63, 70, sizeof(::flyteidl::core::TaskTemplate_ConfigEntry_DoNotUse)}, + { 72, -1, sizeof(::flyteidl::core::TaskTemplate)}, + { 90, -1, sizeof(::flyteidl::core::ContainerPort)}, + { 96, -1, sizeof(::flyteidl::core::Container)}, + { 110, -1, sizeof(::flyteidl::core::IOStrategy)}, + { 117, -1, sizeof(::flyteidl::core::DataLoadingConfig)}, + { 127, -1, sizeof(::flyteidl::core::K8sPod)}, + { 135, 142, sizeof(::flyteidl::core::K8sObjectMetadata_LabelsEntry_DoNotUse)}, + { 144, 151, sizeof(::flyteidl::core::K8sObjectMetadata_AnnotationsEntry_DoNotUse)}, + { 153, -1, sizeof(::flyteidl::core::K8sObjectMetadata)}, + { 160, -1, sizeof(::flyteidl::core::Sql)}, }; static ::google::protobuf::Message const * const file_default_instances[] = { @@ -646,7 +617,6 @@ static ::google::protobuf::Message const * const file_default_instances[] = { reinterpret_cast(&::flyteidl::core::_GPUAccelerator_default_instance_), reinterpret_cast(&::flyteidl::core::_ExtendedResources_default_instance_), reinterpret_cast(&::flyteidl::core::_RuntimeMetadata_default_instance_), - reinterpret_cast(&::flyteidl::core::_PluginMetadata_default_instance_), reinterpret_cast(&::flyteidl::core::_TaskMetadata_TagsEntry_DoNotUse_default_instance_), reinterpret_cast(&::flyteidl::core::_TaskMetadata_default_instance_), reinterpret_cast(&::flyteidl::core::_TaskTemplate_ConfigEntry_DoNotUse_default_instance_), @@ -665,7 +635,7 @@ static ::google::protobuf::Message const * const file_default_instances[] = { ::google::protobuf::internal::AssignDescriptorsTable assign_descriptors_table_flyteidl_2fcore_2ftasks_2eproto = { {}, AddDescriptors_flyteidl_2fcore_2ftasks_2eproto, "flyteidl/core/tasks.proto", schemas, file_default_instances, TableStruct_flyteidl_2fcore_2ftasks_2eproto::offsets, - file_level_metadata_flyteidl_2fcore_2ftasks_2eproto, 19, file_level_enum_descriptors_flyteidl_2fcore_2ftasks_2eproto, file_level_service_descriptors_flyteidl_2fcore_2ftasks_2eproto, + file_level_metadata_flyteidl_2fcore_2ftasks_2eproto, 18, file_level_enum_descriptors_flyteidl_2fcore_2ftasks_2eproto, file_level_service_descriptors_flyteidl_2fcore_2ftasks_2eproto, }; const char descriptor_table_protodef_flyteidl_2fcore_2ftasks_2eproto[] = @@ -687,85 +657,82 @@ const char descriptor_table_protodef_flyteidl_2fcore_2ftasks_2eproto[] = "rtition_size\030\003 \001(\tH\000B\026\n\024partition_size_v" "alue\"K\n\021ExtendedResources\0226\n\017gpu_acceler" "ator\030\001 \001(\0132\035.flyteidl.core.GPUAccelerato" - "r\"\315\001\n\017RuntimeMetadata\0228\n\004type\030\001 \001(\0162*.fl" + "r\"\225\001\n\017RuntimeMetadata\0228\n\004type\030\001 \001(\0162*.fl" "yteidl.core.RuntimeMetadata.RuntimeType\022" - "\017\n\007version\030\002 \001(\t\022\016\n\006flavor\030\003 \001(\t\0226\n\017plug" - "in_metadata\030\004 \001(\0132\035.flyteidl.core.Plugin" - "Metadata\"\'\n\013RuntimeType\022\t\n\005OTHER\020\000\022\r\n\tFL" - "YTE_SDK\020\001\"(\n\016PluginMetadata\022\026\n\016is_sync_p" - "lugin\030\001 \001(\010\"\316\003\n\014TaskMetadata\022\024\n\014discover" - "able\030\001 \001(\010\022/\n\007runtime\030\002 \001(\0132\036.flyteidl.c" - "ore.RuntimeMetadata\022*\n\007timeout\030\004 \001(\0132\031.g" - "oogle.protobuf.Duration\022-\n\007retries\030\005 \001(\013" - "2\034.flyteidl.core.RetryStrategy\022\031\n\021discov" - "ery_version\030\006 \001(\t\022 \n\030deprecated_error_me" - "ssage\030\007 \001(\t\022\027\n\rinterruptible\030\010 \001(\010H\000\022\032\n\022" - "cache_serializable\030\t \001(\010\022\026\n\016generates_de" - "ck\030\n \001(\010\0223\n\004tags\030\013 \003(\0132%.flyteidl.core.T" - "askMetadata.TagsEntry\022\031\n\021pod_template_na" - "me\030\014 \001(\t\032+\n\tTagsEntry\022\013\n\003key\030\001 \001(\t\022\r\n\005va" - "lue\030\002 \001(\t:\0028\001B\025\n\023interruptible_value\"\316\004\n" - "\014TaskTemplate\022%\n\002id\030\001 \001(\0132\031.flyteidl.cor" - "e.Identifier\022\014\n\004type\030\002 \001(\t\022-\n\010metadata\030\003" - " \001(\0132\033.flyteidl.core.TaskMetadata\0220\n\tint" - "erface\030\004 \001(\0132\035.flyteidl.core.TypedInterf" - "ace\022\'\n\006custom\030\005 \001(\0132\027.google.protobuf.St" - "ruct\022-\n\tcontainer\030\006 \001(\0132\030.flyteidl.core." - "ContainerH\000\022(\n\007k8s_pod\030\021 \001(\0132\025.flyteidl." - "core.K8sPodH\000\022!\n\003sql\030\022 \001(\0132\022.flyteidl.co" - "re.SqlH\000\022\031\n\021task_type_version\030\007 \001(\005\0228\n\020s" - "ecurity_context\030\010 \001(\0132\036.flyteidl.core.Se" - "curityContext\022<\n\022extended_resources\030\t \001(" - "\0132 .flyteidl.core.ExtendedResources\0227\n\006c" - "onfig\030\020 \003(\0132\'.flyteidl.core.TaskTemplate" - ".ConfigEntry\032-\n\013ConfigEntry\022\013\n\003key\030\001 \001(\t" - "\022\r\n\005value\030\002 \001(\t:\0028\001B\010\n\006target\"\'\n\rContain" - "erPort\022\026\n\016container_port\030\001 \001(\r\"\255\003\n\tConta" - "iner\022\r\n\005image\030\001 \001(\t\022\017\n\007command\030\002 \003(\t\022\014\n\004" - "args\030\003 \003(\t\022+\n\tresources\030\004 \001(\0132\030.flyteidl" - ".core.Resources\022(\n\003env\030\005 \003(\0132\033.flyteidl." - "core.KeyValuePair\022/\n\006config\030\006 \003(\0132\033.flyt" - "eidl.core.KeyValuePairB\002\030\001\022+\n\005ports\030\007 \003(" - "\0132\034.flyteidl.core.ContainerPort\0225\n\013data_" - "config\030\t \001(\0132 .flyteidl.core.DataLoading" - "Config\022;\n\014architecture\030\n \001(\0162%.flyteidl." - "core.Container.Architecture\"I\n\014Architect" - "ure\022\013\n\007UNKNOWN\020\000\022\t\n\005AMD64\020\001\022\t\n\005ARM64\020\002\022\n" - "\n\006ARM_V6\020\003\022\n\n\006ARM_V7\020\004\"\233\002\n\nIOStrategy\022=\n" - "\rdownload_mode\030\001 \001(\0162&.flyteidl.core.IOS" - "trategy.DownloadMode\0229\n\013upload_mode\030\002 \001(" - "\0162$.flyteidl.core.IOStrategy.UploadMode\"" - "L\n\014DownloadMode\022\022\n\016DOWNLOAD_EAGER\020\000\022\023\n\017D" - "OWNLOAD_STREAM\020\001\022\023\n\017DO_NOT_DOWNLOAD\020\002\"E\n" - "\nUploadMode\022\022\n\016UPLOAD_ON_EXIT\020\000\022\020\n\014UPLOA" - "D_EAGER\020\001\022\021\n\rDO_NOT_UPLOAD\020\002\"\363\001\n\021DataLoa" - "dingConfig\022\017\n\007enabled\030\001 \001(\010\022\022\n\ninput_pat" - "h\030\002 \001(\t\022\023\n\013output_path\030\003 \001(\t\022A\n\006format\030\004" - " \001(\01621.flyteidl.core.DataLoadingConfig.L" - "iteralMapFormat\022.\n\013io_strategy\030\005 \001(\0132\031.f" - "lyteidl.core.IOStrategy\"1\n\020LiteralMapFor" - "mat\022\010\n\004JSON\020\000\022\010\n\004YAML\020\001\022\t\n\005PROTO\020\002\"\236\001\n\006K" - "8sPod\0222\n\010metadata\030\001 \001(\0132 .flyteidl.core." - "K8sObjectMetadata\022)\n\010pod_spec\030\002 \001(\0132\027.go" - "ogle.protobuf.Struct\0225\n\013data_config\030\003 \001(" - "\0132 .flyteidl.core.DataLoadingConfig\"\374\001\n\021" - "K8sObjectMetadata\022<\n\006labels\030\001 \003(\0132,.flyt" - "eidl.core.K8sObjectMetadata.LabelsEntry\022" - "F\n\013annotations\030\002 \003(\01321.flyteidl.core.K8s" - "ObjectMetadata.AnnotationsEntry\032-\n\013Label" - "sEntry\022\013\n\003key\030\001 \001(\t\022\r\n\005value\030\002 \001(\t:\0028\001\0322" - "\n\020AnnotationsEntry\022\013\n\003key\030\001 \001(\t\022\r\n\005value" - "\030\002 \001(\t:\0028\001\"~\n\003Sql\022\021\n\tstatement\030\001 \001(\t\022+\n\007" - "dialect\030\002 \001(\0162\032.flyteidl.core.Sql.Dialec" - "t\"7\n\007Dialect\022\r\n\tUNDEFINED\020\000\022\010\n\004ANSI\020\001\022\010\n" - "\004HIVE\020\002\022\t\n\005OTHER\020\003Bplugin_metadata_ = const_cast< ::flyteidl::core::PluginMetadata*>( - ::flyteidl::core::PluginMetadata::internal_default_instance()); } class RuntimeMetadata::HasBitSetters { public: - static const ::flyteidl::core::PluginMetadata& plugin_metadata(const RuntimeMetadata* msg); }; -const ::flyteidl::core::PluginMetadata& -RuntimeMetadata::HasBitSetters::plugin_metadata(const RuntimeMetadata* msg) { - return *msg->plugin_metadata_; -} #if !defined(_MSC_VER) || _MSC_VER >= 1900 const int RuntimeMetadata::kTypeFieldNumber; const int RuntimeMetadata::kVersionFieldNumber; const int RuntimeMetadata::kFlavorFieldNumber; -const int RuntimeMetadata::kPluginMetadataFieldNumber; #endif // !defined(_MSC_VER) || _MSC_VER >= 1900 RuntimeMetadata::RuntimeMetadata() @@ -2423,11 +2382,6 @@ RuntimeMetadata::RuntimeMetadata(const RuntimeMetadata& from) if (from.flavor().size() > 0) { flavor_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.flavor_); } - if (from.has_plugin_metadata()) { - plugin_metadata_ = new ::flyteidl::core::PluginMetadata(*from.plugin_metadata_); - } else { - plugin_metadata_ = nullptr; - } type_ = from.type_; // @@protoc_insertion_point(copy_constructor:flyteidl.core.RuntimeMetadata) } @@ -2437,9 +2391,7 @@ void RuntimeMetadata::SharedCtor() { &scc_info_RuntimeMetadata_flyteidl_2fcore_2ftasks_2eproto.base); version_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); flavor_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - ::memset(&plugin_metadata_, 0, static_cast( - reinterpret_cast(&type_) - - reinterpret_cast(&plugin_metadata_)) + sizeof(type_)); + type_ = 0; } RuntimeMetadata::~RuntimeMetadata() { @@ -2450,7 +2402,6 @@ RuntimeMetadata::~RuntimeMetadata() { void RuntimeMetadata::SharedDtor() { version_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); flavor_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - if (this != internal_default_instance()) delete plugin_metadata_; } void RuntimeMetadata::SetCachedSize(int size) const { @@ -2470,10 +2421,6 @@ void RuntimeMetadata::Clear() { version_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); flavor_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - if (GetArenaNoVirtual() == nullptr && plugin_metadata_ != nullptr) { - delete plugin_metadata_; - } - plugin_metadata_ = nullptr; type_ = 0; _internal_metadata_.Clear(); } @@ -2531,19 +2478,6 @@ const char* RuntimeMetadata::_InternalParse(const char* begin, const char* end, ptr += size; break; } - // .flyteidl.core.PluginMetadata plugin_metadata = 4; - case 4: { - if (static_cast<::google::protobuf::uint8>(tag) != 34) goto handle_unusual; - ptr = ::google::protobuf::io::ReadSize(ptr, &size); - GOOGLE_PROTOBUF_PARSER_ASSERT(ptr); - parser_till_end = ::flyteidl::core::PluginMetadata::_InternalParse; - object = msg->mutable_plugin_metadata(); - if (size > end - ptr) goto len_delim_till_end; - ptr += size; - GOOGLE_PROTOBUF_PARSER_ASSERT(ctx->ParseExactRange( - {parser_till_end, object}, ptr - size, ptr)); - break; - } default: { handle_unusual: if ((tag & 7) == 4 || tag == 0) { @@ -2622,17 +2556,6 @@ bool RuntimeMetadata::MergePartialFromCodedStream( break; } - // .flyteidl.core.PluginMetadata plugin_metadata = 4; - case 4: { - if (static_cast< ::google::protobuf::uint8>(tag) == (34 & 0xFF)) { - DO_(::google::protobuf::internal::WireFormatLite::ReadMessage( - input, mutable_plugin_metadata())); - } else { - goto handle_unusual; - } - break; - } - default: { handle_unusual: if (tag == 0) { @@ -2686,12 +2609,6 @@ void RuntimeMetadata::SerializeWithCachedSizes( 3, this->flavor(), output); } - // .flyteidl.core.PluginMetadata plugin_metadata = 4; - if (this->has_plugin_metadata()) { - ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray( - 4, HasBitSetters::plugin_metadata(this), output); - } - if (_internal_metadata_.have_unknown_fields()) { ::google::protobuf::internal::WireFormat::SerializeUnknownFields( _internal_metadata_.unknown_fields(), output); @@ -2733,13 +2650,6 @@ ::google::protobuf::uint8* RuntimeMetadata::InternalSerializeWithCachedSizesToAr 3, this->flavor(), target); } - // .flyteidl.core.PluginMetadata plugin_metadata = 4; - if (this->has_plugin_metadata()) { - target = ::google::protobuf::internal::WireFormatLite:: - InternalWriteMessageToArray( - 4, HasBitSetters::plugin_metadata(this), target); - } - if (_internal_metadata_.have_unknown_fields()) { target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray( _internal_metadata_.unknown_fields(), target); @@ -2775,13 +2685,6 @@ size_t RuntimeMetadata::ByteSizeLong() const { this->flavor()); } - // .flyteidl.core.PluginMetadata plugin_metadata = 4; - if (this->has_plugin_metadata()) { - total_size += 1 + - ::google::protobuf::internal::WireFormatLite::MessageSize( - *plugin_metadata_); - } - // .flyteidl.core.RuntimeMetadata.RuntimeType type = 1; if (this->type() != 0) { total_size += 1 + @@ -2823,9 +2726,6 @@ void RuntimeMetadata::MergeFrom(const RuntimeMetadata& from) { flavor_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.flavor_); } - if (from.has_plugin_metadata()) { - mutable_plugin_metadata()->::flyteidl::core::PluginMetadata::MergeFrom(from.plugin_metadata()); - } if (from.type() != 0) { set_type(from.type()); } @@ -2860,7 +2760,6 @@ void RuntimeMetadata::InternalSwap(RuntimeMetadata* other) { GetArenaNoVirtual()); flavor_.Swap(&other->flavor_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(), GetArenaNoVirtual()); - swap(plugin_metadata_, other->plugin_metadata_); swap(type_, other->type_); } @@ -2870,264 +2769,6 @@ ::google::protobuf::Metadata RuntimeMetadata::GetMetadata() const { } -// =================================================================== - -void PluginMetadata::InitAsDefaultInstance() { -} -class PluginMetadata::HasBitSetters { - public: -}; - -#if !defined(_MSC_VER) || _MSC_VER >= 1900 -const int PluginMetadata::kIsSyncPluginFieldNumber; -#endif // !defined(_MSC_VER) || _MSC_VER >= 1900 - -PluginMetadata::PluginMetadata() - : ::google::protobuf::Message(), _internal_metadata_(nullptr) { - SharedCtor(); - // @@protoc_insertion_point(constructor:flyteidl.core.PluginMetadata) -} -PluginMetadata::PluginMetadata(const PluginMetadata& from) - : ::google::protobuf::Message(), - _internal_metadata_(nullptr) { - _internal_metadata_.MergeFrom(from._internal_metadata_); - is_sync_plugin_ = from.is_sync_plugin_; - // @@protoc_insertion_point(copy_constructor:flyteidl.core.PluginMetadata) -} - -void PluginMetadata::SharedCtor() { - is_sync_plugin_ = false; -} - -PluginMetadata::~PluginMetadata() { - // @@protoc_insertion_point(destructor:flyteidl.core.PluginMetadata) - SharedDtor(); -} - -void PluginMetadata::SharedDtor() { -} - -void PluginMetadata::SetCachedSize(int size) const { - _cached_size_.Set(size); -} -const PluginMetadata& PluginMetadata::default_instance() { - ::google::protobuf::internal::InitSCC(&::scc_info_PluginMetadata_flyteidl_2fcore_2ftasks_2eproto.base); - return *internal_default_instance(); -} - - -void PluginMetadata::Clear() { -// @@protoc_insertion_point(message_clear_start:flyteidl.core.PluginMetadata) - ::google::protobuf::uint32 cached_has_bits = 0; - // Prevent compiler warnings about cached_has_bits being unused - (void) cached_has_bits; - - is_sync_plugin_ = false; - _internal_metadata_.Clear(); -} - -#if GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER -const char* PluginMetadata::_InternalParse(const char* begin, const char* end, void* object, - ::google::protobuf::internal::ParseContext* ctx) { - auto msg = static_cast(object); - ::google::protobuf::int32 size; (void)size; - int depth; (void)depth; - ::google::protobuf::uint32 tag; - ::google::protobuf::internal::ParseFunc parser_till_end; (void)parser_till_end; - auto ptr = begin; - while (ptr < end) { - ptr = ::google::protobuf::io::Parse32(ptr, &tag); - GOOGLE_PROTOBUF_PARSER_ASSERT(ptr); - switch (tag >> 3) { - // bool is_sync_plugin = 1; - case 1: { - if (static_cast<::google::protobuf::uint8>(tag) != 8) goto handle_unusual; - msg->set_is_sync_plugin(::google::protobuf::internal::ReadVarint(&ptr)); - GOOGLE_PROTOBUF_PARSER_ASSERT(ptr); - break; - } - default: { - handle_unusual: - if ((tag & 7) == 4 || tag == 0) { - ctx->EndGroup(tag); - return ptr; - } - auto res = UnknownFieldParse(tag, {_InternalParse, msg}, - ptr, end, msg->_internal_metadata_.mutable_unknown_fields(), ctx); - ptr = res.first; - GOOGLE_PROTOBUF_PARSER_ASSERT(ptr != nullptr); - if (res.second) return ptr; - } - } // switch - } // while - return ptr; -} -#else // GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER -bool PluginMetadata::MergePartialFromCodedStream( - ::google::protobuf::io::CodedInputStream* input) { -#define DO_(EXPRESSION) if (!PROTOBUF_PREDICT_TRUE(EXPRESSION)) goto failure - ::google::protobuf::uint32 tag; - // @@protoc_insertion_point(parse_start:flyteidl.core.PluginMetadata) - for (;;) { - ::std::pair<::google::protobuf::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u); - tag = p.first; - if (!p.second) goto handle_unusual; - switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) { - // bool is_sync_plugin = 1; - case 1: { - if (static_cast< ::google::protobuf::uint8>(tag) == (8 & 0xFF)) { - - DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive< - bool, ::google::protobuf::internal::WireFormatLite::TYPE_BOOL>( - input, &is_sync_plugin_))); - } else { - goto handle_unusual; - } - break; - } - - default: { - handle_unusual: - if (tag == 0) { - goto success; - } - DO_(::google::protobuf::internal::WireFormat::SkipField( - input, tag, _internal_metadata_.mutable_unknown_fields())); - break; - } - } - } -success: - // @@protoc_insertion_point(parse_success:flyteidl.core.PluginMetadata) - return true; -failure: - // @@protoc_insertion_point(parse_failure:flyteidl.core.PluginMetadata) - return false; -#undef DO_ -} -#endif // GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER - -void PluginMetadata::SerializeWithCachedSizes( - ::google::protobuf::io::CodedOutputStream* output) const { - // @@protoc_insertion_point(serialize_start:flyteidl.core.PluginMetadata) - ::google::protobuf::uint32 cached_has_bits = 0; - (void) cached_has_bits; - - // bool is_sync_plugin = 1; - if (this->is_sync_plugin() != 0) { - ::google::protobuf::internal::WireFormatLite::WriteBool(1, this->is_sync_plugin(), output); - } - - if (_internal_metadata_.have_unknown_fields()) { - ::google::protobuf::internal::WireFormat::SerializeUnknownFields( - _internal_metadata_.unknown_fields(), output); - } - // @@protoc_insertion_point(serialize_end:flyteidl.core.PluginMetadata) -} - -::google::protobuf::uint8* PluginMetadata::InternalSerializeWithCachedSizesToArray( - ::google::protobuf::uint8* target) const { - // @@protoc_insertion_point(serialize_to_array_start:flyteidl.core.PluginMetadata) - ::google::protobuf::uint32 cached_has_bits = 0; - (void) cached_has_bits; - - // bool is_sync_plugin = 1; - if (this->is_sync_plugin() != 0) { - target = ::google::protobuf::internal::WireFormatLite::WriteBoolToArray(1, this->is_sync_plugin(), target); - } - - if (_internal_metadata_.have_unknown_fields()) { - target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray( - _internal_metadata_.unknown_fields(), target); - } - // @@protoc_insertion_point(serialize_to_array_end:flyteidl.core.PluginMetadata) - return target; -} - -size_t PluginMetadata::ByteSizeLong() const { -// @@protoc_insertion_point(message_byte_size_start:flyteidl.core.PluginMetadata) - size_t total_size = 0; - - if (_internal_metadata_.have_unknown_fields()) { - total_size += - ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize( - _internal_metadata_.unknown_fields()); - } - ::google::protobuf::uint32 cached_has_bits = 0; - // Prevent compiler warnings about cached_has_bits being unused - (void) cached_has_bits; - - // bool is_sync_plugin = 1; - if (this->is_sync_plugin() != 0) { - total_size += 1 + 1; - } - - int cached_size = ::google::protobuf::internal::ToCachedSize(total_size); - SetCachedSize(cached_size); - return total_size; -} - -void PluginMetadata::MergeFrom(const ::google::protobuf::Message& from) { -// @@protoc_insertion_point(generalized_merge_from_start:flyteidl.core.PluginMetadata) - GOOGLE_DCHECK_NE(&from, this); - const PluginMetadata* source = - ::google::protobuf::DynamicCastToGenerated( - &from); - if (source == nullptr) { - // @@protoc_insertion_point(generalized_merge_from_cast_fail:flyteidl.core.PluginMetadata) - ::google::protobuf::internal::ReflectionOps::Merge(from, this); - } else { - // @@protoc_insertion_point(generalized_merge_from_cast_success:flyteidl.core.PluginMetadata) - MergeFrom(*source); - } -} - -void PluginMetadata::MergeFrom(const PluginMetadata& from) { -// @@protoc_insertion_point(class_specific_merge_from_start:flyteidl.core.PluginMetadata) - GOOGLE_DCHECK_NE(&from, this); - _internal_metadata_.MergeFrom(from._internal_metadata_); - ::google::protobuf::uint32 cached_has_bits = 0; - (void) cached_has_bits; - - if (from.is_sync_plugin() != 0) { - set_is_sync_plugin(from.is_sync_plugin()); - } -} - -void PluginMetadata::CopyFrom(const ::google::protobuf::Message& from) { -// @@protoc_insertion_point(generalized_copy_from_start:flyteidl.core.PluginMetadata) - if (&from == this) return; - Clear(); - MergeFrom(from); -} - -void PluginMetadata::CopyFrom(const PluginMetadata& from) { -// @@protoc_insertion_point(class_specific_copy_from_start:flyteidl.core.PluginMetadata) - if (&from == this) return; - Clear(); - MergeFrom(from); -} - -bool PluginMetadata::IsInitialized() const { - return true; -} - -void PluginMetadata::Swap(PluginMetadata* other) { - if (other == this) return; - InternalSwap(other); -} -void PluginMetadata::InternalSwap(PluginMetadata* other) { - using std::swap; - _internal_metadata_.Swap(&other->_internal_metadata_); - swap(is_sync_plugin_, other->is_sync_plugin_); -} - -::google::protobuf::Metadata PluginMetadata::GetMetadata() const { - ::google::protobuf::internal::AssignDescriptors(&::assign_descriptors_table_flyteidl_2fcore_2ftasks_2eproto); - return ::file_level_metadata_flyteidl_2fcore_2ftasks_2eproto[kIndexInFileMessages]; -} - - // =================================================================== TaskMetadata_TagsEntry_DoNotUse::TaskMetadata_TagsEntry_DoNotUse() {} @@ -3138,7 +2779,7 @@ void TaskMetadata_TagsEntry_DoNotUse::MergeFrom(const TaskMetadata_TagsEntry_DoN } ::google::protobuf::Metadata TaskMetadata_TagsEntry_DoNotUse::GetMetadata() const { ::google::protobuf::internal::AssignDescriptors(&::assign_descriptors_table_flyteidl_2fcore_2ftasks_2eproto); - return ::file_level_metadata_flyteidl_2fcore_2ftasks_2eproto[6]; + return ::file_level_metadata_flyteidl_2fcore_2ftasks_2eproto[5]; } void TaskMetadata_TagsEntry_DoNotUse::MergeFrom( const ::google::protobuf::Message& other) { @@ -4207,7 +3848,7 @@ void TaskTemplate_ConfigEntry_DoNotUse::MergeFrom(const TaskTemplate_ConfigEntry } ::google::protobuf::Metadata TaskTemplate_ConfigEntry_DoNotUse::GetMetadata() const { ::google::protobuf::internal::AssignDescriptors(&::assign_descriptors_table_flyteidl_2fcore_2ftasks_2eproto); - return ::file_level_metadata_flyteidl_2fcore_2ftasks_2eproto[8]; + return ::file_level_metadata_flyteidl_2fcore_2ftasks_2eproto[7]; } void TaskTemplate_ConfigEntry_DoNotUse::MergeFrom( const ::google::protobuf::Message& other) { @@ -7774,7 +7415,7 @@ void K8sObjectMetadata_LabelsEntry_DoNotUse::MergeFrom(const K8sObjectMetadata_L } ::google::protobuf::Metadata K8sObjectMetadata_LabelsEntry_DoNotUse::GetMetadata() const { ::google::protobuf::internal::AssignDescriptors(&::assign_descriptors_table_flyteidl_2fcore_2ftasks_2eproto); - return ::file_level_metadata_flyteidl_2fcore_2ftasks_2eproto[15]; + return ::file_level_metadata_flyteidl_2fcore_2ftasks_2eproto[14]; } void K8sObjectMetadata_LabelsEntry_DoNotUse::MergeFrom( const ::google::protobuf::Message& other) { @@ -7815,7 +7456,7 @@ void K8sObjectMetadata_AnnotationsEntry_DoNotUse::MergeFrom(const K8sObjectMetad } ::google::protobuf::Metadata K8sObjectMetadata_AnnotationsEntry_DoNotUse::GetMetadata() const { ::google::protobuf::internal::AssignDescriptors(&::assign_descriptors_table_flyteidl_2fcore_2ftasks_2eproto); - return ::file_level_metadata_flyteidl_2fcore_2ftasks_2eproto[16]; + return ::file_level_metadata_flyteidl_2fcore_2ftasks_2eproto[15]; } void K8sObjectMetadata_AnnotationsEntry_DoNotUse::MergeFrom( const ::google::protobuf::Message& other) { @@ -8755,9 +8396,6 @@ template<> PROTOBUF_NOINLINE ::flyteidl::core::ExtendedResources* Arena::CreateM template<> PROTOBUF_NOINLINE ::flyteidl::core::RuntimeMetadata* Arena::CreateMaybeMessage< ::flyteidl::core::RuntimeMetadata >(Arena* arena) { return Arena::CreateInternal< ::flyteidl::core::RuntimeMetadata >(arena); } -template<> PROTOBUF_NOINLINE ::flyteidl::core::PluginMetadata* Arena::CreateMaybeMessage< ::flyteidl::core::PluginMetadata >(Arena* arena) { - return Arena::CreateInternal< ::flyteidl::core::PluginMetadata >(arena); -} template<> PROTOBUF_NOINLINE ::flyteidl::core::TaskMetadata_TagsEntry_DoNotUse* Arena::CreateMaybeMessage< ::flyteidl::core::TaskMetadata_TagsEntry_DoNotUse >(Arena* arena) { return Arena::CreateInternal< ::flyteidl::core::TaskMetadata_TagsEntry_DoNotUse >(arena); } diff --git a/flyteidl/gen/pb-cpp/flyteidl/core/tasks.pb.h b/flyteidl/gen/pb-cpp/flyteidl/core/tasks.pb.h index 1d284dcb0b..37446ea345 100644 --- a/flyteidl/gen/pb-cpp/flyteidl/core/tasks.pb.h +++ b/flyteidl/gen/pb-cpp/flyteidl/core/tasks.pb.h @@ -51,7 +51,7 @@ struct TableStruct_flyteidl_2fcore_2ftasks_2eproto { PROTOBUF_SECTION_VARIABLE(protodesc_cold); static const ::google::protobuf::internal::AuxillaryParseTableField aux[] PROTOBUF_SECTION_VARIABLE(protodesc_cold); - static const ::google::protobuf::internal::ParseTable schema[19] + static const ::google::protobuf::internal::ParseTable schema[18] PROTOBUF_SECTION_VARIABLE(protodesc_cold); static const ::google::protobuf::internal::FieldMetadata field_metadata[]; static const ::google::protobuf::internal::SerializationTable serialization_table[]; @@ -90,9 +90,6 @@ extern K8sObjectMetadata_LabelsEntry_DoNotUseDefaultTypeInternal _K8sObjectMetad class K8sPod; class K8sPodDefaultTypeInternal; extern K8sPodDefaultTypeInternal _K8sPod_default_instance_; -class PluginMetadata; -class PluginMetadataDefaultTypeInternal; -extern PluginMetadataDefaultTypeInternal _PluginMetadata_default_instance_; class Resources; class ResourcesDefaultTypeInternal; extern ResourcesDefaultTypeInternal _Resources_default_instance_; @@ -131,7 +128,6 @@ template<> ::flyteidl::core::K8sObjectMetadata* Arena::CreateMaybeMessage<::flyt template<> ::flyteidl::core::K8sObjectMetadata_AnnotationsEntry_DoNotUse* Arena::CreateMaybeMessage<::flyteidl::core::K8sObjectMetadata_AnnotationsEntry_DoNotUse>(Arena*); template<> ::flyteidl::core::K8sObjectMetadata_LabelsEntry_DoNotUse* Arena::CreateMaybeMessage<::flyteidl::core::K8sObjectMetadata_LabelsEntry_DoNotUse>(Arena*); template<> ::flyteidl::core::K8sPod* Arena::CreateMaybeMessage<::flyteidl::core::K8sPod>(Arena*); -template<> ::flyteidl::core::PluginMetadata* Arena::CreateMaybeMessage<::flyteidl::core::PluginMetadata>(Arena*); template<> ::flyteidl::core::Resources* Arena::CreateMaybeMessage<::flyteidl::core::Resources>(Arena*); template<> ::flyteidl::core::Resources_ResourceEntry* Arena::CreateMaybeMessage<::flyteidl::core::Resources_ResourceEntry>(Arena*); template<> ::flyteidl::core::RuntimeMetadata* Arena::CreateMaybeMessage<::flyteidl::core::RuntimeMetadata>(Arena*); @@ -1030,15 +1026,6 @@ class RuntimeMetadata final : ::std::string* release_flavor(); void set_allocated_flavor(::std::string* flavor); - // .flyteidl.core.PluginMetadata plugin_metadata = 4; - bool has_plugin_metadata() const; - void clear_plugin_metadata(); - static const int kPluginMetadataFieldNumber = 4; - const ::flyteidl::core::PluginMetadata& plugin_metadata() const; - ::flyteidl::core::PluginMetadata* release_plugin_metadata(); - ::flyteidl::core::PluginMetadata* mutable_plugin_metadata(); - void set_allocated_plugin_metadata(::flyteidl::core::PluginMetadata* plugin_metadata); - // .flyteidl.core.RuntimeMetadata.RuntimeType type = 1; void clear_type(); static const int kTypeFieldNumber = 1; @@ -1052,125 +1039,12 @@ class RuntimeMetadata final : ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_; ::google::protobuf::internal::ArenaStringPtr version_; ::google::protobuf::internal::ArenaStringPtr flavor_; - ::flyteidl::core::PluginMetadata* plugin_metadata_; int type_; mutable ::google::protobuf::internal::CachedSize _cached_size_; friend struct ::TableStruct_flyteidl_2fcore_2ftasks_2eproto; }; // ------------------------------------------------------------------- -class PluginMetadata final : - public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:flyteidl.core.PluginMetadata) */ { - public: - PluginMetadata(); - virtual ~PluginMetadata(); - - PluginMetadata(const PluginMetadata& from); - - inline PluginMetadata& operator=(const PluginMetadata& from) { - CopyFrom(from); - return *this; - } - #if LANG_CXX11 - PluginMetadata(PluginMetadata&& from) noexcept - : PluginMetadata() { - *this = ::std::move(from); - } - - inline PluginMetadata& operator=(PluginMetadata&& from) noexcept { - if (GetArenaNoVirtual() == from.GetArenaNoVirtual()) { - if (this != &from) InternalSwap(&from); - } else { - CopyFrom(from); - } - return *this; - } - #endif - static const ::google::protobuf::Descriptor* descriptor() { - return default_instance().GetDescriptor(); - } - static const PluginMetadata& default_instance(); - - static void InitAsDefaultInstance(); // FOR INTERNAL USE ONLY - static inline const PluginMetadata* internal_default_instance() { - return reinterpret_cast( - &_PluginMetadata_default_instance_); - } - static constexpr int kIndexInFileMessages = - 5; - - void Swap(PluginMetadata* other); - friend void swap(PluginMetadata& a, PluginMetadata& b) { - a.Swap(&b); - } - - // implements Message ---------------------------------------------- - - inline PluginMetadata* New() const final { - return CreateMaybeMessage(nullptr); - } - - PluginMetadata* New(::google::protobuf::Arena* arena) const final { - return CreateMaybeMessage(arena); - } - void CopyFrom(const ::google::protobuf::Message& from) final; - void MergeFrom(const ::google::protobuf::Message& from) final; - void CopyFrom(const PluginMetadata& from); - void MergeFrom(const PluginMetadata& from); - PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final; - bool IsInitialized() const final; - - size_t ByteSizeLong() const final; - #if GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER - static const char* _InternalParse(const char* begin, const char* end, void* object, ::google::protobuf::internal::ParseContext* ctx); - ::google::protobuf::internal::ParseFunc _ParseFunc() const final { return _InternalParse; } - #else - bool MergePartialFromCodedStream( - ::google::protobuf::io::CodedInputStream* input) final; - #endif // GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER - void SerializeWithCachedSizes( - ::google::protobuf::io::CodedOutputStream* output) const final; - ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray( - ::google::protobuf::uint8* target) const final; - int GetCachedSize() const final { return _cached_size_.Get(); } - - private: - void SharedCtor(); - void SharedDtor(); - void SetCachedSize(int size) const final; - void InternalSwap(PluginMetadata* other); - private: - inline ::google::protobuf::Arena* GetArenaNoVirtual() const { - return nullptr; - } - inline void* MaybeArenaPtr() const { - return nullptr; - } - public: - - ::google::protobuf::Metadata GetMetadata() const final; - - // nested types ---------------------------------------------------- - - // accessors ------------------------------------------------------- - - // bool is_sync_plugin = 1; - void clear_is_sync_plugin(); - static const int kIsSyncPluginFieldNumber = 1; - bool is_sync_plugin() const; - void set_is_sync_plugin(bool value); - - // @@protoc_insertion_point(class_scope:flyteidl.core.PluginMetadata) - private: - class HasBitSetters; - - ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_; - bool is_sync_plugin_; - mutable ::google::protobuf::internal::CachedSize _cached_size_; - friend struct ::TableStruct_flyteidl_2fcore_2ftasks_2eproto; -}; -// ------------------------------------------------------------------- - class TaskMetadata_TagsEntry_DoNotUse : public ::google::protobuf::internal::MapEntry( - &::flyteidl::core::_PluginMetadata_default_instance_); -} -inline ::flyteidl::core::PluginMetadata* RuntimeMetadata::release_plugin_metadata() { - // @@protoc_insertion_point(field_release:flyteidl.core.RuntimeMetadata.plugin_metadata) - - ::flyteidl::core::PluginMetadata* temp = plugin_metadata_; - plugin_metadata_ = nullptr; - return temp; -} -inline ::flyteidl::core::PluginMetadata* RuntimeMetadata::mutable_plugin_metadata() { - - if (plugin_metadata_ == nullptr) { - auto* p = CreateMaybeMessage<::flyteidl::core::PluginMetadata>(GetArenaNoVirtual()); - plugin_metadata_ = p; - } - // @@protoc_insertion_point(field_mutable:flyteidl.core.RuntimeMetadata.plugin_metadata) - return plugin_metadata_; -} -inline void RuntimeMetadata::set_allocated_plugin_metadata(::flyteidl::core::PluginMetadata* plugin_metadata) { - ::google::protobuf::Arena* message_arena = GetArenaNoVirtual(); - if (message_arena == nullptr) { - delete plugin_metadata_; - } - if (plugin_metadata) { - ::google::protobuf::Arena* submessage_arena = nullptr; - if (message_arena != submessage_arena) { - plugin_metadata = ::google::protobuf::internal::GetOwnedMessage( - message_arena, plugin_metadata, submessage_arena); - } - - } else { - - } - plugin_metadata_ = plugin_metadata; - // @@protoc_insertion_point(field_set_allocated:flyteidl.core.RuntimeMetadata.plugin_metadata) -} - -// ------------------------------------------------------------------- - -// PluginMetadata - -// bool is_sync_plugin = 1; -inline void PluginMetadata::clear_is_sync_plugin() { - is_sync_plugin_ = false; -} -inline bool PluginMetadata::is_sync_plugin() const { - // @@protoc_insertion_point(field_get:flyteidl.core.PluginMetadata.is_sync_plugin) - return is_sync_plugin_; -} -inline void PluginMetadata::set_is_sync_plugin(bool value) { - - is_sync_plugin_ = value; - // @@protoc_insertion_point(field_set:flyteidl.core.PluginMetadata.is_sync_plugin) -} - // ------------------------------------------------------------------- // ------------------------------------------------------------------- @@ -5353,8 +5158,6 @@ inline void Sql::set_dialect(::flyteidl::core::Sql_Dialect value) { // ------------------------------------------------------------------- -// ------------------------------------------------------------------- - // @@protoc_insertion_point(namespace_scope) diff --git a/flyteidl/gen/pb-cpp/flyteidl/service/agent.grpc.pb.cc b/flyteidl/gen/pb-cpp/flyteidl/service/agent.grpc.pb.cc index b0552a3645..d3505f4ce8 100644 --- a/flyteidl/gen/pb-cpp/flyteidl/service/agent.grpc.pb.cc +++ b/flyteidl/gen/pb-cpp/flyteidl/service/agent.grpc.pb.cc @@ -19,144 +19,144 @@ namespace flyteidl { namespace service { -static const char* AgentService_method_names[] = { - "/flyteidl.service.AgentService/CreateTask", - "/flyteidl.service.AgentService/GetTask", - "/flyteidl.service.AgentService/DeleteTask", +static const char* AsyncAgentService_method_names[] = { + "/flyteidl.service.AsyncAgentService/CreateTask", + "/flyteidl.service.AsyncAgentService/GetTask", + "/flyteidl.service.AsyncAgentService/DeleteTask", }; -std::unique_ptr< AgentService::Stub> AgentService::NewStub(const std::shared_ptr< ::grpc::ChannelInterface>& channel, const ::grpc::StubOptions& options) { +std::unique_ptr< AsyncAgentService::Stub> AsyncAgentService::NewStub(const std::shared_ptr< ::grpc::ChannelInterface>& channel, const ::grpc::StubOptions& options) { (void)options; - std::unique_ptr< AgentService::Stub> stub(new AgentService::Stub(channel)); + std::unique_ptr< AsyncAgentService::Stub> stub(new AsyncAgentService::Stub(channel)); return stub; } -AgentService::Stub::Stub(const std::shared_ptr< ::grpc::ChannelInterface>& channel) - : channel_(channel), rpcmethod_CreateTask_(AgentService_method_names[0], ::grpc::internal::RpcMethod::NORMAL_RPC, channel) - , rpcmethod_GetTask_(AgentService_method_names[1], ::grpc::internal::RpcMethod::NORMAL_RPC, channel) - , rpcmethod_DeleteTask_(AgentService_method_names[2], ::grpc::internal::RpcMethod::NORMAL_RPC, channel) +AsyncAgentService::Stub::Stub(const std::shared_ptr< ::grpc::ChannelInterface>& channel) + : channel_(channel), rpcmethod_CreateTask_(AsyncAgentService_method_names[0], ::grpc::internal::RpcMethod::NORMAL_RPC, channel) + , rpcmethod_GetTask_(AsyncAgentService_method_names[1], ::grpc::internal::RpcMethod::NORMAL_RPC, channel) + , rpcmethod_DeleteTask_(AsyncAgentService_method_names[2], ::grpc::internal::RpcMethod::NORMAL_RPC, channel) {} -::grpc::Status AgentService::Stub::CreateTask(::grpc::ClientContext* context, const ::flyteidl::admin::CreateTaskRequest& request, ::flyteidl::admin::CreateTaskResponse* response) { +::grpc::Status AsyncAgentService::Stub::CreateTask(::grpc::ClientContext* context, const ::flyteidl::admin::CreateTaskRequest& request, ::flyteidl::admin::CreateTaskResponse* response) { return ::grpc::internal::BlockingUnaryCall(channel_.get(), rpcmethod_CreateTask_, context, request, response); } -void AgentService::Stub::experimental_async::CreateTask(::grpc::ClientContext* context, const ::flyteidl::admin::CreateTaskRequest* request, ::flyteidl::admin::CreateTaskResponse* response, std::function f) { +void AsyncAgentService::Stub::experimental_async::CreateTask(::grpc::ClientContext* context, const ::flyteidl::admin::CreateTaskRequest* request, ::flyteidl::admin::CreateTaskResponse* response, std::function f) { ::grpc::internal::CallbackUnaryCall(stub_->channel_.get(), stub_->rpcmethod_CreateTask_, context, request, response, std::move(f)); } -void AgentService::Stub::experimental_async::CreateTask(::grpc::ClientContext* context, const ::grpc::ByteBuffer* request, ::flyteidl::admin::CreateTaskResponse* response, std::function f) { +void AsyncAgentService::Stub::experimental_async::CreateTask(::grpc::ClientContext* context, const ::grpc::ByteBuffer* request, ::flyteidl::admin::CreateTaskResponse* response, std::function f) { ::grpc::internal::CallbackUnaryCall(stub_->channel_.get(), stub_->rpcmethod_CreateTask_, context, request, response, std::move(f)); } -void AgentService::Stub::experimental_async::CreateTask(::grpc::ClientContext* context, const ::flyteidl::admin::CreateTaskRequest* request, ::flyteidl::admin::CreateTaskResponse* response, ::grpc::experimental::ClientUnaryReactor* reactor) { +void AsyncAgentService::Stub::experimental_async::CreateTask(::grpc::ClientContext* context, const ::flyteidl::admin::CreateTaskRequest* request, ::flyteidl::admin::CreateTaskResponse* response, ::grpc::experimental::ClientUnaryReactor* reactor) { ::grpc::internal::ClientCallbackUnaryFactory::Create(stub_->channel_.get(), stub_->rpcmethod_CreateTask_, context, request, response, reactor); } -void AgentService::Stub::experimental_async::CreateTask(::grpc::ClientContext* context, const ::grpc::ByteBuffer* request, ::flyteidl::admin::CreateTaskResponse* response, ::grpc::experimental::ClientUnaryReactor* reactor) { +void AsyncAgentService::Stub::experimental_async::CreateTask(::grpc::ClientContext* context, const ::grpc::ByteBuffer* request, ::flyteidl::admin::CreateTaskResponse* response, ::grpc::experimental::ClientUnaryReactor* reactor) { ::grpc::internal::ClientCallbackUnaryFactory::Create(stub_->channel_.get(), stub_->rpcmethod_CreateTask_, context, request, response, reactor); } -::grpc::ClientAsyncResponseReader< ::flyteidl::admin::CreateTaskResponse>* AgentService::Stub::AsyncCreateTaskRaw(::grpc::ClientContext* context, const ::flyteidl::admin::CreateTaskRequest& request, ::grpc::CompletionQueue* cq) { +::grpc::ClientAsyncResponseReader< ::flyteidl::admin::CreateTaskResponse>* AsyncAgentService::Stub::AsyncCreateTaskRaw(::grpc::ClientContext* context, const ::flyteidl::admin::CreateTaskRequest& request, ::grpc::CompletionQueue* cq) { return ::grpc::internal::ClientAsyncResponseReaderFactory< ::flyteidl::admin::CreateTaskResponse>::Create(channel_.get(), cq, rpcmethod_CreateTask_, context, request, true); } -::grpc::ClientAsyncResponseReader< ::flyteidl::admin::CreateTaskResponse>* AgentService::Stub::PrepareAsyncCreateTaskRaw(::grpc::ClientContext* context, const ::flyteidl::admin::CreateTaskRequest& request, ::grpc::CompletionQueue* cq) { +::grpc::ClientAsyncResponseReader< ::flyteidl::admin::CreateTaskResponse>* AsyncAgentService::Stub::PrepareAsyncCreateTaskRaw(::grpc::ClientContext* context, const ::flyteidl::admin::CreateTaskRequest& request, ::grpc::CompletionQueue* cq) { return ::grpc::internal::ClientAsyncResponseReaderFactory< ::flyteidl::admin::CreateTaskResponse>::Create(channel_.get(), cq, rpcmethod_CreateTask_, context, request, false); } -::grpc::Status AgentService::Stub::GetTask(::grpc::ClientContext* context, const ::flyteidl::admin::GetTaskRequest& request, ::flyteidl::admin::GetTaskResponse* response) { +::grpc::Status AsyncAgentService::Stub::GetTask(::grpc::ClientContext* context, const ::flyteidl::admin::GetTaskRequest& request, ::flyteidl::admin::GetTaskResponse* response) { return ::grpc::internal::BlockingUnaryCall(channel_.get(), rpcmethod_GetTask_, context, request, response); } -void AgentService::Stub::experimental_async::GetTask(::grpc::ClientContext* context, const ::flyteidl::admin::GetTaskRequest* request, ::flyteidl::admin::GetTaskResponse* response, std::function f) { +void AsyncAgentService::Stub::experimental_async::GetTask(::grpc::ClientContext* context, const ::flyteidl::admin::GetTaskRequest* request, ::flyteidl::admin::GetTaskResponse* response, std::function f) { ::grpc::internal::CallbackUnaryCall(stub_->channel_.get(), stub_->rpcmethod_GetTask_, context, request, response, std::move(f)); } -void AgentService::Stub::experimental_async::GetTask(::grpc::ClientContext* context, const ::grpc::ByteBuffer* request, ::flyteidl::admin::GetTaskResponse* response, std::function f) { +void AsyncAgentService::Stub::experimental_async::GetTask(::grpc::ClientContext* context, const ::grpc::ByteBuffer* request, ::flyteidl::admin::GetTaskResponse* response, std::function f) { ::grpc::internal::CallbackUnaryCall(stub_->channel_.get(), stub_->rpcmethod_GetTask_, context, request, response, std::move(f)); } -void AgentService::Stub::experimental_async::GetTask(::grpc::ClientContext* context, const ::flyteidl::admin::GetTaskRequest* request, ::flyteidl::admin::GetTaskResponse* response, ::grpc::experimental::ClientUnaryReactor* reactor) { +void AsyncAgentService::Stub::experimental_async::GetTask(::grpc::ClientContext* context, const ::flyteidl::admin::GetTaskRequest* request, ::flyteidl::admin::GetTaskResponse* response, ::grpc::experimental::ClientUnaryReactor* reactor) { ::grpc::internal::ClientCallbackUnaryFactory::Create(stub_->channel_.get(), stub_->rpcmethod_GetTask_, context, request, response, reactor); } -void AgentService::Stub::experimental_async::GetTask(::grpc::ClientContext* context, const ::grpc::ByteBuffer* request, ::flyteidl::admin::GetTaskResponse* response, ::grpc::experimental::ClientUnaryReactor* reactor) { +void AsyncAgentService::Stub::experimental_async::GetTask(::grpc::ClientContext* context, const ::grpc::ByteBuffer* request, ::flyteidl::admin::GetTaskResponse* response, ::grpc::experimental::ClientUnaryReactor* reactor) { ::grpc::internal::ClientCallbackUnaryFactory::Create(stub_->channel_.get(), stub_->rpcmethod_GetTask_, context, request, response, reactor); } -::grpc::ClientAsyncResponseReader< ::flyteidl::admin::GetTaskResponse>* AgentService::Stub::AsyncGetTaskRaw(::grpc::ClientContext* context, const ::flyteidl::admin::GetTaskRequest& request, ::grpc::CompletionQueue* cq) { +::grpc::ClientAsyncResponseReader< ::flyteidl::admin::GetTaskResponse>* AsyncAgentService::Stub::AsyncGetTaskRaw(::grpc::ClientContext* context, const ::flyteidl::admin::GetTaskRequest& request, ::grpc::CompletionQueue* cq) { return ::grpc::internal::ClientAsyncResponseReaderFactory< ::flyteidl::admin::GetTaskResponse>::Create(channel_.get(), cq, rpcmethod_GetTask_, context, request, true); } -::grpc::ClientAsyncResponseReader< ::flyteidl::admin::GetTaskResponse>* AgentService::Stub::PrepareAsyncGetTaskRaw(::grpc::ClientContext* context, const ::flyteidl::admin::GetTaskRequest& request, ::grpc::CompletionQueue* cq) { +::grpc::ClientAsyncResponseReader< ::flyteidl::admin::GetTaskResponse>* AsyncAgentService::Stub::PrepareAsyncGetTaskRaw(::grpc::ClientContext* context, const ::flyteidl::admin::GetTaskRequest& request, ::grpc::CompletionQueue* cq) { return ::grpc::internal::ClientAsyncResponseReaderFactory< ::flyteidl::admin::GetTaskResponse>::Create(channel_.get(), cq, rpcmethod_GetTask_, context, request, false); } -::grpc::Status AgentService::Stub::DeleteTask(::grpc::ClientContext* context, const ::flyteidl::admin::DeleteTaskRequest& request, ::flyteidl::admin::DeleteTaskResponse* response) { +::grpc::Status AsyncAgentService::Stub::DeleteTask(::grpc::ClientContext* context, const ::flyteidl::admin::DeleteTaskRequest& request, ::flyteidl::admin::DeleteTaskResponse* response) { return ::grpc::internal::BlockingUnaryCall(channel_.get(), rpcmethod_DeleteTask_, context, request, response); } -void AgentService::Stub::experimental_async::DeleteTask(::grpc::ClientContext* context, const ::flyteidl::admin::DeleteTaskRequest* request, ::flyteidl::admin::DeleteTaskResponse* response, std::function f) { +void AsyncAgentService::Stub::experimental_async::DeleteTask(::grpc::ClientContext* context, const ::flyteidl::admin::DeleteTaskRequest* request, ::flyteidl::admin::DeleteTaskResponse* response, std::function f) { ::grpc::internal::CallbackUnaryCall(stub_->channel_.get(), stub_->rpcmethod_DeleteTask_, context, request, response, std::move(f)); } -void AgentService::Stub::experimental_async::DeleteTask(::grpc::ClientContext* context, const ::grpc::ByteBuffer* request, ::flyteidl::admin::DeleteTaskResponse* response, std::function f) { +void AsyncAgentService::Stub::experimental_async::DeleteTask(::grpc::ClientContext* context, const ::grpc::ByteBuffer* request, ::flyteidl::admin::DeleteTaskResponse* response, std::function f) { ::grpc::internal::CallbackUnaryCall(stub_->channel_.get(), stub_->rpcmethod_DeleteTask_, context, request, response, std::move(f)); } -void AgentService::Stub::experimental_async::DeleteTask(::grpc::ClientContext* context, const ::flyteidl::admin::DeleteTaskRequest* request, ::flyteidl::admin::DeleteTaskResponse* response, ::grpc::experimental::ClientUnaryReactor* reactor) { +void AsyncAgentService::Stub::experimental_async::DeleteTask(::grpc::ClientContext* context, const ::flyteidl::admin::DeleteTaskRequest* request, ::flyteidl::admin::DeleteTaskResponse* response, ::grpc::experimental::ClientUnaryReactor* reactor) { ::grpc::internal::ClientCallbackUnaryFactory::Create(stub_->channel_.get(), stub_->rpcmethod_DeleteTask_, context, request, response, reactor); } -void AgentService::Stub::experimental_async::DeleteTask(::grpc::ClientContext* context, const ::grpc::ByteBuffer* request, ::flyteidl::admin::DeleteTaskResponse* response, ::grpc::experimental::ClientUnaryReactor* reactor) { +void AsyncAgentService::Stub::experimental_async::DeleteTask(::grpc::ClientContext* context, const ::grpc::ByteBuffer* request, ::flyteidl::admin::DeleteTaskResponse* response, ::grpc::experimental::ClientUnaryReactor* reactor) { ::grpc::internal::ClientCallbackUnaryFactory::Create(stub_->channel_.get(), stub_->rpcmethod_DeleteTask_, context, request, response, reactor); } -::grpc::ClientAsyncResponseReader< ::flyteidl::admin::DeleteTaskResponse>* AgentService::Stub::AsyncDeleteTaskRaw(::grpc::ClientContext* context, const ::flyteidl::admin::DeleteTaskRequest& request, ::grpc::CompletionQueue* cq) { +::grpc::ClientAsyncResponseReader< ::flyteidl::admin::DeleteTaskResponse>* AsyncAgentService::Stub::AsyncDeleteTaskRaw(::grpc::ClientContext* context, const ::flyteidl::admin::DeleteTaskRequest& request, ::grpc::CompletionQueue* cq) { return ::grpc::internal::ClientAsyncResponseReaderFactory< ::flyteidl::admin::DeleteTaskResponse>::Create(channel_.get(), cq, rpcmethod_DeleteTask_, context, request, true); } -::grpc::ClientAsyncResponseReader< ::flyteidl::admin::DeleteTaskResponse>* AgentService::Stub::PrepareAsyncDeleteTaskRaw(::grpc::ClientContext* context, const ::flyteidl::admin::DeleteTaskRequest& request, ::grpc::CompletionQueue* cq) { +::grpc::ClientAsyncResponseReader< ::flyteidl::admin::DeleteTaskResponse>* AsyncAgentService::Stub::PrepareAsyncDeleteTaskRaw(::grpc::ClientContext* context, const ::flyteidl::admin::DeleteTaskRequest& request, ::grpc::CompletionQueue* cq) { return ::grpc::internal::ClientAsyncResponseReaderFactory< ::flyteidl::admin::DeleteTaskResponse>::Create(channel_.get(), cq, rpcmethod_DeleteTask_, context, request, false); } -AgentService::Service::Service() { +AsyncAgentService::Service::Service() { AddMethod(new ::grpc::internal::RpcServiceMethod( - AgentService_method_names[0], + AsyncAgentService_method_names[0], ::grpc::internal::RpcMethod::NORMAL_RPC, - new ::grpc::internal::RpcMethodHandler< AgentService::Service, ::flyteidl::admin::CreateTaskRequest, ::flyteidl::admin::CreateTaskResponse>( - std::mem_fn(&AgentService::Service::CreateTask), this))); + new ::grpc::internal::RpcMethodHandler< AsyncAgentService::Service, ::flyteidl::admin::CreateTaskRequest, ::flyteidl::admin::CreateTaskResponse>( + std::mem_fn(&AsyncAgentService::Service::CreateTask), this))); AddMethod(new ::grpc::internal::RpcServiceMethod( - AgentService_method_names[1], + AsyncAgentService_method_names[1], ::grpc::internal::RpcMethod::NORMAL_RPC, - new ::grpc::internal::RpcMethodHandler< AgentService::Service, ::flyteidl::admin::GetTaskRequest, ::flyteidl::admin::GetTaskResponse>( - std::mem_fn(&AgentService::Service::GetTask), this))); + new ::grpc::internal::RpcMethodHandler< AsyncAgentService::Service, ::flyteidl::admin::GetTaskRequest, ::flyteidl::admin::GetTaskResponse>( + std::mem_fn(&AsyncAgentService::Service::GetTask), this))); AddMethod(new ::grpc::internal::RpcServiceMethod( - AgentService_method_names[2], + AsyncAgentService_method_names[2], ::grpc::internal::RpcMethod::NORMAL_RPC, - new ::grpc::internal::RpcMethodHandler< AgentService::Service, ::flyteidl::admin::DeleteTaskRequest, ::flyteidl::admin::DeleteTaskResponse>( - std::mem_fn(&AgentService::Service::DeleteTask), this))); + new ::grpc::internal::RpcMethodHandler< AsyncAgentService::Service, ::flyteidl::admin::DeleteTaskRequest, ::flyteidl::admin::DeleteTaskResponse>( + std::mem_fn(&AsyncAgentService::Service::DeleteTask), this))); } -AgentService::Service::~Service() { +AsyncAgentService::Service::~Service() { } -::grpc::Status AgentService::Service::CreateTask(::grpc::ServerContext* context, const ::flyteidl::admin::CreateTaskRequest* request, ::flyteidl::admin::CreateTaskResponse* response) { +::grpc::Status AsyncAgentService::Service::CreateTask(::grpc::ServerContext* context, const ::flyteidl::admin::CreateTaskRequest* request, ::flyteidl::admin::CreateTaskResponse* response) { (void) context; (void) request; (void) response; return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, ""); } -::grpc::Status AgentService::Service::GetTask(::grpc::ServerContext* context, const ::flyteidl::admin::GetTaskRequest* request, ::flyteidl::admin::GetTaskResponse* response) { +::grpc::Status AsyncAgentService::Service::GetTask(::grpc::ServerContext* context, const ::flyteidl::admin::GetTaskRequest* request, ::flyteidl::admin::GetTaskResponse* response) { (void) context; (void) request; (void) response; return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, ""); } -::grpc::Status AgentService::Service::DeleteTask(::grpc::ServerContext* context, const ::flyteidl::admin::DeleteTaskRequest* request, ::flyteidl::admin::DeleteTaskResponse* response) { +::grpc::Status AsyncAgentService::Service::DeleteTask(::grpc::ServerContext* context, const ::flyteidl::admin::DeleteTaskRequest* request, ::flyteidl::admin::DeleteTaskResponse* response) { (void) context; (void) request; (void) response; diff --git a/flyteidl/gen/pb-cpp/flyteidl/service/agent.grpc.pb.h b/flyteidl/gen/pb-cpp/flyteidl/service/agent.grpc.pb.h index 412a8bfd75..08120a1fa5 100644 --- a/flyteidl/gen/pb-cpp/flyteidl/service/agent.grpc.pb.h +++ b/flyteidl/gen/pb-cpp/flyteidl/service/agent.grpc.pb.h @@ -44,10 +44,10 @@ namespace service { // It can handle asynchronous tasks and synchronous tasks. // Asynchronous tasks are for tasks running long, for example running query job. // Synchronous tasks are for tasks running quick, for example, you want to execute something really fast, or even retrieving some metadata from a backend service. -class AgentService final { +class AsyncAgentService final { public: static constexpr char const* service_full_name() { - return "flyteidl.service.AgentService"; + return "flyteidl.service.AsyncAgentService"; } class StubInterface { public: diff --git a/flyteidl/gen/pb-cpp/flyteidl/service/agent.pb.cc b/flyteidl/gen/pb-cpp/flyteidl/service/agent.pb.cc index 98958cbcd9..4963d13cc8 100644 --- a/flyteidl/gen/pb-cpp/flyteidl/service/agent.pb.cc +++ b/flyteidl/gen/pb-cpp/flyteidl/service/agent.pb.cc @@ -38,21 +38,21 @@ ::google::protobuf::internal::AssignDescriptorsTable assign_descriptors_table_fl const char descriptor_table_protodef_flyteidl_2fservice_2fagent_2eproto[] = "\n\034flyteidl/service/agent.proto\022\020flyteidl" - ".service\032\032flyteidl/admin/agent.proto2\212\002\n" - "\014AgentService\022U\n\nCreateTask\022!.flyteidl.a" - "dmin.CreateTaskRequest\032\".flyteidl.admin." - "CreateTaskResponse\"\000\022L\n\007GetTask\022\036.flytei" - "dl.admin.GetTaskRequest\032\037.flyteidl.admin" - ".GetTaskResponse\"\000\022U\n\nDeleteTask\022!.flyte" - "idl.admin.DeleteTaskRequest\032\".flyteidl.a" - "dmin.DeleteTaskResponse\"\000B\?Z=github.com/" - "flyteorg/flyte/flyteidl/gen/pb-go/flytei" - "dl/serviceb\006proto3" + ".service\032\032flyteidl/admin/agent.proto2\217\002\n" + "\021AsyncAgentService\022U\n\nCreateTask\022!.flyte" + "idl.admin.CreateTaskRequest\032\".flyteidl.a" + "dmin.CreateTaskResponse\"\000\022L\n\007GetTask\022\036.f" + "lyteidl.admin.GetTaskRequest\032\037.flyteidl." + "admin.GetTaskResponse\"\000\022U\n\nDeleteTask\022!." + "flyteidl.admin.DeleteTaskRequest\032\".flyte" + "idl.admin.DeleteTaskResponse\"\000B\?Z=github" + ".com/flyteorg/flyte/flyteidl/gen/pb-go/f" + "lyteidl/serviceb\006proto3" ; ::google::protobuf::internal::DescriptorTable descriptor_table_flyteidl_2fservice_2fagent_2eproto = { false, InitDefaults_flyteidl_2fservice_2fagent_2eproto, descriptor_table_protodef_flyteidl_2fservice_2fagent_2eproto, - "flyteidl/service/agent.proto", &assign_descriptors_table_flyteidl_2fservice_2fagent_2eproto, 418, + "flyteidl/service/agent.proto", &assign_descriptors_table_flyteidl_2fservice_2fagent_2eproto, 423, }; void AddDescriptors_flyteidl_2fservice_2fagent_2eproto() { diff --git a/flyteidl/gen/pb-go/flyteidl/admin/agent.pb.go b/flyteidl/gen/pb-go/flyteidl/admin/agent.pb.go index 8a009493dd..12e64268c7 100644 --- a/flyteidl/gen/pb-go/flyteidl/admin/agent.pb.go +++ b/flyteidl/gen/pb-go/flyteidl/admin/agent.pb.go @@ -412,10 +412,12 @@ type Resource struct { // +optional Outputs *core.LiteralMap `protobuf:"bytes,2,opt,name=outputs,proto3" json:"outputs,omitempty"` // A descriptive message for the current state. e.g. waiting for cluster. - Message string `protobuf:"bytes,3,opt,name=message,proto3" json:"message,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Message string `protobuf:"bytes,3,opt,name=message,proto3" json:"message,omitempty"` + // log information for the task execution. + LogLinks []*core.TaskLog `protobuf:"bytes,4,rep,name=log_links,json=logLinks,proto3" json:"log_links,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *Resource) Reset() { *m = Resource{} } @@ -464,6 +466,13 @@ func (m *Resource) GetMessage() string { return "" } +func (m *Resource) GetLogLinks() []*core.TaskLog { + if m != nil { + return m.LogLinks + } + return nil +} + // A message used to delete a task. type DeleteTaskRequest struct { // A predefined yet extensible Task type identifier. @@ -564,56 +573,56 @@ func init() { func init() { proto.RegisterFile("flyteidl/admin/agent.proto", fileDescriptor_c434e52bb0028071) } var fileDescriptor_c434e52bb0028071 = []byte{ - // 805 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x55, 0x7f, 0x6f, 0xe3, 0x44, - 0x10, 0x6d, 0x92, 0xa6, 0x4d, 0x26, 0x6d, 0x2f, 0x59, 0x1a, 0x70, 0x73, 0x07, 0xaa, 0x82, 0x0e, + // 811 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x55, 0xff, 0x6e, 0xe3, 0x44, + 0x10, 0x6e, 0x92, 0xa6, 0x4d, 0x26, 0x6d, 0x2f, 0x59, 0x1a, 0x70, 0x73, 0x07, 0xaa, 0x82, 0x0e, 0x55, 0x20, 0x1c, 0x5d, 0x8b, 0x8e, 0x02, 0x02, 0x94, 0xb6, 0xa6, 0x57, 0x29, 0x8d, 0xaa, 0x6d, 0x8a, 0x00, 0x09, 0xac, 0x8d, 0x33, 0x35, 0x56, 0x9c, 0x5d, 0xe3, 0x5d, 0x57, 0x17, 0x89, 0xff, - 0x90, 0xf8, 0x0c, 0x7c, 0x0b, 0xbe, 0x22, 0xf2, 0xfa, 0x47, 0xe3, 0x28, 0x77, 0xca, 0x89, 0xff, - 0xbc, 0xf3, 0x66, 0xdf, 0xcc, 0x7b, 0x33, 0x2b, 0x43, 0xe7, 0xde, 0x9f, 0x2b, 0xf4, 0x26, 0x7e, - 0x8f, 0x4d, 0x66, 0x1e, 0xef, 0x31, 0x17, 0xb9, 0x32, 0x83, 0x50, 0x28, 0x41, 0xf6, 0x32, 0xcc, - 0xd4, 0x58, 0xe7, 0x59, 0x9e, 0xeb, 0x88, 0x10, 0x7b, 0xbe, 0xa7, 0x30, 0x64, 0xbe, 0x4c, 0xb2, - 0x3b, 0x07, 0x45, 0x54, 0x31, 0x39, 0xcd, 0xa0, 0x0f, 0x8b, 0x90, 0xc7, 0x15, 0x86, 0xf7, 0xcc, - 0xc1, 0x14, 0xfe, 0x68, 0x09, 0x9e, 0x20, 0x57, 0xde, 0xbd, 0x87, 0xe1, 0xea, 0xeb, 0xf8, 0x1a, - 0x9d, 0x48, 0x79, 0x82, 0x27, 0x70, 0xf7, 0x9f, 0x2a, 0xb4, 0x47, 0x4c, 0x4e, 0xad, 0x2c, 0x7e, - 0x8d, 0x8a, 0x4d, 0x98, 0x62, 0x84, 0x42, 0x2b, 0x6e, 0xc3, 0xce, 0x6f, 0xd8, 0xde, 0xc4, 0x28, - 0x1d, 0x96, 0x8e, 0x1a, 0xc7, 0x9f, 0x98, 0xb9, 0xb8, 0x98, 0xd4, 0x2c, 0x10, 0x5c, 0xe5, 0x1d, - 0xd0, 0x27, 0xaa, 0x08, 0x90, 0x67, 0x50, 0xe7, 0x6c, 0x86, 0x32, 0x60, 0x0e, 0x1a, 0xe5, 0xc3, - 0xd2, 0x51, 0x9d, 0x3e, 0x06, 0xc8, 0x15, 0x6c, 0xf9, 0x6c, 0x8c, 0xbe, 0x34, 0x2a, 0x87, 0x95, - 0xa3, 0xc6, 0xf1, 0x0b, 0xb3, 0xe8, 0xa1, 0xb9, 0xb2, 0x51, 0x73, 0xa0, 0xef, 0x58, 0x5c, 0x85, - 0x73, 0x9a, 0x12, 0x90, 0x9f, 0xa0, 0xc1, 0x38, 0x17, 0x8a, 0xc5, 0x99, 0xd2, 0xd8, 0xd4, 0x7c, - 0x2f, 0xd7, 0xe3, 0xeb, 0x3f, 0x5e, 0x4c, 0x48, 0x17, 0xa9, 0x88, 0x09, 0xef, 0x4d, 0x4f, 0xa5, - 0x2d, 0x31, 0x7c, 0xf0, 0x1c, 0xb4, 0x99, 0xe3, 0x88, 0x88, 0x2b, 0xa3, 0xaa, 0xc5, 0xb4, 0xa6, - 0xa7, 0xf2, 0x36, 0x41, 0xfa, 0x09, 0x40, 0x14, 0xb4, 0x91, 0x3f, 0x78, 0xa1, 0xe0, 0x33, 0xe4, - 0xca, 0x7e, 0x60, 0xa1, 0xc7, 0xc6, 0x3e, 0x4a, 0x63, 0x4b, 0xf7, 0xf4, 0xfd, 0x7a, 0x3d, 0x59, - 0x8f, 0x14, 0x3f, 0x66, 0x0c, 0x49, 0x73, 0xfb, 0xb8, 0x02, 0xea, 0x7c, 0x05, 0x8d, 0x05, 0x5b, - 0x48, 0x13, 0x2a, 0x53, 0x9c, 0xeb, 0xe9, 0xd5, 0x69, 0xfc, 0x49, 0xf6, 0xa1, 0xfa, 0xc0, 0xfc, - 0x28, 0x9b, 0x42, 0x72, 0xf8, 0xba, 0x7c, 0x5a, 0xea, 0x7c, 0x07, 0xcd, 0x65, 0x07, 0xde, 0xe9, - 0xfe, 0x25, 0x1c, 0xbc, 0xb1, 0xdb, 0x77, 0x21, 0xea, 0xfe, 0x55, 0x86, 0xd6, 0x79, 0x88, 0x4c, - 0x61, 0xec, 0x09, 0xc5, 0x3f, 0x22, 0x94, 0x8a, 0xbc, 0x80, 0x2d, 0x8f, 0x07, 0x91, 0x92, 0xe9, - 0x2e, 0x1e, 0x2c, 0xed, 0xe2, 0x20, 0x79, 0x58, 0xd7, 0x2c, 0xa0, 0x69, 0x22, 0xf9, 0x12, 0x6a, - 0x0a, 0x67, 0x81, 0xcf, 0x54, 0x52, 0xa5, 0x71, 0xfc, 0x74, 0xc5, 0x02, 0x8f, 0xd2, 0x14, 0x9a, - 0x27, 0x93, 0x8f, 0x61, 0x57, 0x44, 0x2a, 0x88, 0x94, 0x1d, 0x84, 0x78, 0xef, 0xbd, 0x36, 0x2a, - 0xba, 0xc7, 0x9d, 0x24, 0x78, 0xa3, 0x63, 0xe4, 0x57, 0xf8, 0x60, 0xe9, 0x9d, 0xcc, 0xd2, 0xa9, - 0x19, 0x9b, 0xba, 0xd8, 0xf3, 0xb5, 0x46, 0x4c, 0xdb, 0x6a, 0x55, 0xb8, 0xfb, 0x6f, 0x09, 0xc8, - 0xa2, 0x0b, 0x32, 0x10, 0x5c, 0x22, 0x79, 0x0e, 0xbb, 0x21, 0x4a, 0x11, 0x85, 0x0e, 0xea, 0x7a, - 0xda, 0x8d, 0x9d, 0x57, 0x1b, 0x74, 0x27, 0x0b, 0xc7, 0x0c, 0xe4, 0x25, 0xd4, 0xb2, 0x73, 0x2a, - 0xdd, 0x58, 0xee, 0x86, 0xa6, 0xf8, 0xab, 0x0d, 0x9a, 0xe7, 0x92, 0x13, 0xa8, 0xfb, 0xc2, 0xb5, - 0x7d, 0x8f, 0x4f, 0xb3, 0xd7, 0xf8, 0xfe, 0x0a, 0xcf, 0x06, 0xc2, 0xa5, 0x35, 0x5f, 0xb8, 0x83, - 0x38, 0xef, 0xac, 0x0a, 0x95, 0x10, 0x65, 0x97, 0xc2, 0xde, 0x25, 0xaa, 0xc5, 0x99, 0x3d, 0x85, - 0xba, 0xb6, 0x48, 0xcd, 0x03, 0x4c, 0x67, 0x5f, 0x8b, 0x03, 0xa3, 0x79, 0xa0, 0x4d, 0x2e, 0x2a, - 0x89, 0xfb, 0xdc, 0x29, 0xea, 0xe8, 0xfe, 0x09, 0x4f, 0x72, 0xce, 0xd4, 0x81, 0x2f, 0x16, 0xa4, - 0x95, 0xde, 0x2e, 0xed, 0x4d, 0xc2, 0xca, 0xeb, 0x09, 0xeb, 0xfe, 0x5d, 0x82, 0x5a, 0xc6, 0x45, - 0x3e, 0x83, 0xaa, 0x54, 0xf1, 0x2a, 0xc5, 0x45, 0xf7, 0x8e, 0xdb, 0xcb, 0x45, 0x6f, 0x63, 0x90, - 0x26, 0x39, 0xe4, 0x04, 0xb6, 0x93, 0x65, 0x91, 0xa9, 0xfd, 0x6f, 0x59, 0xd7, 0x2c, 0x93, 0x18, - 0xb0, 0x3d, 0x43, 0x29, 0x99, 0x8b, 0xe9, 0xc2, 0x65, 0xc7, 0xee, 0x1d, 0xb4, 0x2e, 0xd0, 0xc7, - 0xe2, 0x8b, 0xf8, 0xff, 0xee, 0xee, 0x03, 0x59, 0xa4, 0x4d, 0x0c, 0xfe, 0xf4, 0x37, 0xa8, 0x6a, - 0x2d, 0xa4, 0x0d, 0x2d, 0x6a, 0x8d, 0xe8, 0xcf, 0xfd, 0xb3, 0x81, 0x65, 0xff, 0xd0, 0xbf, 0x1a, - 0xdc, 0x51, 0xab, 0xb9, 0x11, 0x87, 0x6f, 0x2c, 0x7a, 0xdd, 0x1f, 0x5a, 0xc3, 0x51, 0x1e, 0x2e, - 0x91, 0x06, 0x6c, 0xdf, 0x58, 0xc3, 0x8b, 0xab, 0xe1, 0x65, 0xb3, 0x1c, 0x1f, 0xe8, 0xdd, 0x70, - 0x18, 0x1f, 0x2a, 0x64, 0x17, 0xea, 0xb7, 0x77, 0xe7, 0xe7, 0x96, 0x75, 0x61, 0x5d, 0x34, 0x37, - 0xcf, 0xbe, 0xfd, 0xe5, 0x1b, 0xd7, 0x53, 0xbf, 0x47, 0x63, 0xd3, 0x11, 0xb3, 0x9e, 0xb6, 0x45, - 0x84, 0x6e, 0xf2, 0xd1, 0xcb, 0xff, 0x5a, 0x2e, 0xf2, 0x5e, 0x30, 0xfe, 0xdc, 0x15, 0xbd, 0xe2, - 0xcf, 0x76, 0xbc, 0xa5, 0x7f, 0x60, 0x27, 0xff, 0x05, 0x00, 0x00, 0xff, 0xff, 0x2a, 0x68, 0x01, - 0x24, 0x85, 0x07, 0x00, 0x00, + 0x78, 0x09, 0xde, 0x82, 0x07, 0xe0, 0xe5, 0x90, 0xd7, 0x3f, 0x1a, 0x47, 0xb9, 0x53, 0x4e, 0xfc, + 0xe7, 0x9d, 0x6f, 0xf6, 0x9b, 0x6f, 0xbe, 0x99, 0x95, 0xa1, 0x73, 0xef, 0xcf, 0x15, 0x7a, 0x13, + 0xbf, 0xc7, 0x26, 0x33, 0x8f, 0xf7, 0x98, 0x8b, 0x5c, 0x99, 0x41, 0x28, 0x94, 0x20, 0x7b, 0x19, + 0x66, 0x6a, 0xac, 0xf3, 0x2c, 0xcf, 0x75, 0x44, 0x88, 0x3d, 0xdf, 0x53, 0x18, 0x32, 0x5f, 0x26, + 0xd9, 0x9d, 0x83, 0x22, 0xaa, 0x98, 0x9c, 0x66, 0xd0, 0x87, 0x45, 0xc8, 0xe3, 0x0a, 0xc3, 0x7b, + 0xe6, 0x60, 0x0a, 0x7f, 0xb4, 0x04, 0x4f, 0x90, 0x2b, 0xef, 0xde, 0xc3, 0x70, 0xf5, 0x75, 0x7c, + 0x8d, 0x4e, 0xa4, 0x3c, 0xc1, 0x13, 0xb8, 0xfb, 0x77, 0x15, 0xda, 0x23, 0x26, 0xa7, 0x56, 0x16, + 0xbf, 0x46, 0xc5, 0x26, 0x4c, 0x31, 0x42, 0xa1, 0x15, 0xcb, 0xb0, 0xf3, 0x1b, 0xb6, 0x37, 0x31, + 0x4a, 0x87, 0xa5, 0xa3, 0xc6, 0xf1, 0x27, 0x66, 0xde, 0x5c, 0x4c, 0x6a, 0x16, 0x08, 0xae, 0x72, + 0x05, 0xf4, 0x89, 0x2a, 0x02, 0xe4, 0x19, 0xd4, 0x39, 0x9b, 0xa1, 0x0c, 0x98, 0x83, 0x46, 0xf9, + 0xb0, 0x74, 0x54, 0xa7, 0x8f, 0x01, 0x72, 0x05, 0x5b, 0x3e, 0x1b, 0xa3, 0x2f, 0x8d, 0xca, 0x61, + 0xe5, 0xa8, 0x71, 0xfc, 0xc2, 0x2c, 0x7a, 0x68, 0xae, 0x14, 0x6a, 0x0e, 0xf4, 0x1d, 0x8b, 0xab, + 0x70, 0x4e, 0x53, 0x02, 0xf2, 0x13, 0x34, 0x18, 0xe7, 0x42, 0xb1, 0x38, 0x53, 0x1a, 0x9b, 0x9a, + 0xef, 0xe5, 0x7a, 0x7c, 0xfd, 0xc7, 0x8b, 0x09, 0xe9, 0x22, 0x15, 0x31, 0xe1, 0xbd, 0xe9, 0xa9, + 0xb4, 0x25, 0x86, 0x0f, 0x9e, 0x83, 0x36, 0x73, 0x1c, 0x11, 0x71, 0x65, 0x54, 0x75, 0x33, 0xad, + 0xe9, 0xa9, 0xbc, 0x4d, 0x90, 0x7e, 0x02, 0x10, 0x05, 0x6d, 0xe4, 0x0f, 0x5e, 0x28, 0xf8, 0x0c, + 0xb9, 0xb2, 0x1f, 0x58, 0xe8, 0xb1, 0xb1, 0x8f, 0xd2, 0xd8, 0xd2, 0x9a, 0xbe, 0x5f, 0x4f, 0x93, + 0xf5, 0x48, 0xf1, 0x63, 0xc6, 0x90, 0x88, 0xdb, 0xc7, 0x15, 0x50, 0xe7, 0x2b, 0x68, 0x2c, 0xd8, + 0x42, 0x9a, 0x50, 0x99, 0xe2, 0x5c, 0x4f, 0xaf, 0x4e, 0xe3, 0x4f, 0xb2, 0x0f, 0xd5, 0x07, 0xe6, + 0x47, 0xd9, 0x14, 0x92, 0xc3, 0xd7, 0xe5, 0xd3, 0x52, 0xe7, 0x3b, 0x68, 0x2e, 0x3b, 0xf0, 0x4e, + 0xf7, 0x2f, 0xe1, 0xe0, 0x8d, 0x6a, 0xdf, 0x85, 0xa8, 0xfb, 0x57, 0x19, 0x5a, 0xe7, 0x21, 0x32, + 0x85, 0xb1, 0x27, 0x14, 0xff, 0x88, 0x50, 0x2a, 0xf2, 0x02, 0xb6, 0x3c, 0x1e, 0x44, 0x4a, 0xa6, + 0xbb, 0x78, 0xb0, 0xb4, 0x8b, 0x83, 0xe4, 0x61, 0x5d, 0xb3, 0x80, 0xa6, 0x89, 0xe4, 0x4b, 0xa8, + 0x29, 0x9c, 0x05, 0x3e, 0x53, 0x49, 0x95, 0xc6, 0xf1, 0xd3, 0x15, 0x0b, 0x3c, 0x4a, 0x53, 0x68, + 0x9e, 0x4c, 0x3e, 0x86, 0x5d, 0x11, 0xa9, 0x20, 0x52, 0x76, 0x10, 0xe2, 0xbd, 0xf7, 0xda, 0xa8, + 0x68, 0x8d, 0x3b, 0x49, 0xf0, 0x46, 0xc7, 0xc8, 0xaf, 0xf0, 0xc1, 0xd2, 0x3b, 0x99, 0xa5, 0x53, + 0x33, 0x36, 0x75, 0xb1, 0xe7, 0x6b, 0x8d, 0x98, 0xb6, 0xd5, 0xaa, 0x70, 0xf7, 0x9f, 0x12, 0x90, + 0x45, 0x17, 0x64, 0x20, 0xb8, 0x44, 0xf2, 0x1c, 0x76, 0x43, 0x94, 0x22, 0x0a, 0x1d, 0xd4, 0xf5, + 0xb4, 0x1b, 0x3b, 0xaf, 0x36, 0xe8, 0x4e, 0x16, 0x8e, 0x19, 0xc8, 0x4b, 0xa8, 0x65, 0xe7, 0xb4, + 0x75, 0x63, 0x59, 0x0d, 0x4d, 0xf1, 0x57, 0x1b, 0x34, 0xcf, 0x25, 0x27, 0x50, 0xf7, 0x85, 0x6b, + 0xfb, 0x1e, 0x9f, 0x66, 0xaf, 0xf1, 0xfd, 0x15, 0x9e, 0x0d, 0x84, 0x4b, 0x6b, 0xbe, 0x70, 0x07, + 0x71, 0xde, 0x59, 0x15, 0x2a, 0x21, 0xca, 0x2e, 0x85, 0xbd, 0x4b, 0x54, 0x8b, 0x33, 0x7b, 0x0a, + 0x75, 0x6d, 0x91, 0x9a, 0x07, 0x98, 0xce, 0xbe, 0x16, 0x07, 0x46, 0xf3, 0x40, 0x9b, 0x5c, 0xec, + 0x24, 0xd6, 0xb9, 0x53, 0xec, 0xa3, 0xfb, 0x27, 0x3c, 0xc9, 0x39, 0x53, 0x07, 0xbe, 0x58, 0x68, + 0xad, 0xf4, 0xf6, 0xd6, 0xde, 0xd4, 0x58, 0x79, 0xbd, 0xc6, 0xba, 0xff, 0x96, 0xa0, 0x96, 0x71, + 0x91, 0xcf, 0xa0, 0x2a, 0x55, 0xbc, 0x4a, 0x71, 0xd1, 0xbd, 0xe3, 0xf6, 0x72, 0xd1, 0xdb, 0x18, + 0xa4, 0x49, 0x0e, 0x39, 0x81, 0xed, 0x64, 0x59, 0x64, 0x6a, 0xff, 0x5b, 0xd6, 0x35, 0xcb, 0x24, + 0x06, 0x6c, 0xcf, 0x50, 0x4a, 0xe6, 0x62, 0xba, 0x70, 0xd9, 0xb1, 0xa8, 0x7e, 0x73, 0x4d, 0xf5, + 0x77, 0xd0, 0xba, 0x40, 0x1f, 0x8b, 0xcf, 0xe8, 0xff, 0x8f, 0x64, 0x1f, 0xc8, 0x22, 0x6d, 0x32, + 0x95, 0x4f, 0x7f, 0x83, 0xaa, 0x36, 0x80, 0xb4, 0xa1, 0x45, 0xad, 0x11, 0xfd, 0xb9, 0x7f, 0x36, + 0xb0, 0xec, 0x1f, 0xfa, 0x57, 0x83, 0x3b, 0x6a, 0x35, 0x37, 0xe2, 0xf0, 0x8d, 0x45, 0xaf, 0xfb, + 0x43, 0x6b, 0x38, 0xca, 0xc3, 0x25, 0xd2, 0x80, 0xed, 0x1b, 0x6b, 0x78, 0x71, 0x35, 0xbc, 0x6c, + 0x96, 0xe3, 0x03, 0xbd, 0x1b, 0x0e, 0xe3, 0x43, 0x85, 0xec, 0x42, 0xfd, 0xf6, 0xee, 0xfc, 0xdc, + 0xb2, 0x2e, 0xac, 0x8b, 0xe6, 0xe6, 0xd9, 0xb7, 0xbf, 0x7c, 0xe3, 0x7a, 0xea, 0xf7, 0x68, 0x6c, + 0x3a, 0x62, 0xd6, 0xd3, 0xad, 0x8b, 0xd0, 0x4d, 0x3e, 0x7a, 0xf9, 0xaf, 0xce, 0x45, 0xde, 0x0b, + 0xc6, 0x9f, 0xbb, 0xa2, 0x57, 0xfc, 0x43, 0x8f, 0xb7, 0xf4, 0x5f, 0xef, 0xe4, 0xbf, 0x00, 0x00, + 0x00, 0xff, 0xff, 0x8e, 0xaa, 0xe8, 0xf4, 0xba, 0x07, 0x00, 0x00, } diff --git a/flyteidl/gen/pb-go/flyteidl/admin/agent.pb.validate.go b/flyteidl/gen/pb-go/flyteidl/admin/agent.pb.validate.go index 66c039b650..ba78b8518e 100644 --- a/flyteidl/gen/pb-go/flyteidl/admin/agent.pb.validate.go +++ b/flyteidl/gen/pb-go/flyteidl/admin/agent.pb.validate.go @@ -503,6 +503,21 @@ func (m *Resource) Validate() error { // no validation rules for Message + for idx, item := range m.GetLogLinks() { + _, _ = idx, item + + if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ResourceValidationError{ + field: fmt.Sprintf("LogLinks[%v]", idx), + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + return nil } diff --git a/flyteidl/gen/pb-go/flyteidl/core/tasks.pb.go b/flyteidl/gen/pb-go/flyteidl/core/tasks.pb.go index 221830f34f..d7310cce31 100644 --- a/flyteidl/gen/pb-go/flyteidl/core/tasks.pb.go +++ b/flyteidl/gen/pb-go/flyteidl/core/tasks.pb.go @@ -118,7 +118,7 @@ func (x Container_Architecture) String() string { } func (Container_Architecture) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_bd8423ba58d6ed80, []int{8, 0} + return fileDescriptor_bd8423ba58d6ed80, []int{7, 0} } // Mode to use for downloading @@ -150,7 +150,7 @@ func (x IOStrategy_DownloadMode) String() string { } func (IOStrategy_DownloadMode) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_bd8423ba58d6ed80, []int{9, 0} + return fileDescriptor_bd8423ba58d6ed80, []int{8, 0} } // Mode to use for uploading @@ -182,7 +182,7 @@ func (x IOStrategy_UploadMode) String() string { } func (IOStrategy_UploadMode) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_bd8423ba58d6ed80, []int{9, 1} + return fileDescriptor_bd8423ba58d6ed80, []int{8, 1} } // LiteralMapFormat decides the encoding format in which the input metadata should be made available to the containers. @@ -216,7 +216,7 @@ func (x DataLoadingConfig_LiteralMapFormat) String() string { } func (DataLoadingConfig_LiteralMapFormat) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_bd8423ba58d6ed80, []int{10, 0} + return fileDescriptor_bd8423ba58d6ed80, []int{9, 0} } // The dialect of the SQL statement. This is used to validate and parse SQL statements at compilation time to avoid @@ -250,7 +250,7 @@ func (x Sql_Dialect) String() string { } func (Sql_Dialect) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_bd8423ba58d6ed80, []int{13, 0} + return fileDescriptor_bd8423ba58d6ed80, []int{12, 0} } // A customizable interface to convey resources requested for a container. This can be interpreted differently for different @@ -501,12 +501,10 @@ type RuntimeMetadata struct { // checks to ensure tighter validation or setting expectations. Version string `protobuf:"bytes,2,opt,name=version,proto3" json:"version,omitempty"` //+optional It can be used to provide extra information about the runtime (e.g. python, golang... etc.). - Flavor string `protobuf:"bytes,3,opt,name=flavor,proto3" json:"flavor,omitempty"` - //+optional It can be used to provide extra information for the plugin. - PluginMetadata *PluginMetadata `protobuf:"bytes,4,opt,name=plugin_metadata,json=pluginMetadata,proto3" json:"plugin_metadata,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Flavor string `protobuf:"bytes,3,opt,name=flavor,proto3" json:"flavor,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *RuntimeMetadata) Reset() { *m = RuntimeMetadata{} } @@ -555,53 +553,6 @@ func (m *RuntimeMetadata) GetFlavor() string { return "" } -func (m *RuntimeMetadata) GetPluginMetadata() *PluginMetadata { - if m != nil { - return m.PluginMetadata - } - return nil -} - -type PluginMetadata struct { - //+optional It can be used to decide use sync plugin or async plugin during runtime. - IsSyncPlugin bool `protobuf:"varint,1,opt,name=is_sync_plugin,json=isSyncPlugin,proto3" json:"is_sync_plugin,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *PluginMetadata) Reset() { *m = PluginMetadata{} } -func (m *PluginMetadata) String() string { return proto.CompactTextString(m) } -func (*PluginMetadata) ProtoMessage() {} -func (*PluginMetadata) Descriptor() ([]byte, []int) { - return fileDescriptor_bd8423ba58d6ed80, []int{4} -} - -func (m *PluginMetadata) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_PluginMetadata.Unmarshal(m, b) -} -func (m *PluginMetadata) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_PluginMetadata.Marshal(b, m, deterministic) -} -func (m *PluginMetadata) XXX_Merge(src proto.Message) { - xxx_messageInfo_PluginMetadata.Merge(m, src) -} -func (m *PluginMetadata) XXX_Size() int { - return xxx_messageInfo_PluginMetadata.Size(m) -} -func (m *PluginMetadata) XXX_DiscardUnknown() { - xxx_messageInfo_PluginMetadata.DiscardUnknown(m) -} - -var xxx_messageInfo_PluginMetadata proto.InternalMessageInfo - -func (m *PluginMetadata) GetIsSyncPlugin() bool { - if m != nil { - return m.IsSyncPlugin - } - return false -} - // Task Metadata type TaskMetadata struct { // Indicates whether the system should attempt to lookup this task's output to avoid duplication of work. @@ -641,7 +592,7 @@ func (m *TaskMetadata) Reset() { *m = TaskMetadata{} } func (m *TaskMetadata) String() string { return proto.CompactTextString(m) } func (*TaskMetadata) ProtoMessage() {} func (*TaskMetadata) Descriptor() ([]byte, []int) { - return fileDescriptor_bd8423ba58d6ed80, []int{5} + return fileDescriptor_bd8423ba58d6ed80, []int{4} } func (m *TaskMetadata) XXX_Unmarshal(b []byte) error { @@ -808,7 +759,7 @@ func (m *TaskTemplate) Reset() { *m = TaskTemplate{} } func (m *TaskTemplate) String() string { return proto.CompactTextString(m) } func (*TaskTemplate) ProtoMessage() {} func (*TaskTemplate) Descriptor() ([]byte, []int) { - return fileDescriptor_bd8423ba58d6ed80, []int{6} + return fileDescriptor_bd8423ba58d6ed80, []int{5} } func (m *TaskTemplate) XXX_Unmarshal(b []byte) error { @@ -965,7 +916,7 @@ func (m *ContainerPort) Reset() { *m = ContainerPort{} } func (m *ContainerPort) String() string { return proto.CompactTextString(m) } func (*ContainerPort) ProtoMessage() {} func (*ContainerPort) Descriptor() ([]byte, []int) { - return fileDescriptor_bd8423ba58d6ed80, []int{7} + return fileDescriptor_bd8423ba58d6ed80, []int{6} } func (m *ContainerPort) XXX_Unmarshal(b []byte) error { @@ -1032,7 +983,7 @@ func (m *Container) Reset() { *m = Container{} } func (m *Container) String() string { return proto.CompactTextString(m) } func (*Container) ProtoMessage() {} func (*Container) Descriptor() ([]byte, []int) { - return fileDescriptor_bd8423ba58d6ed80, []int{8} + return fileDescriptor_bd8423ba58d6ed80, []int{7} } func (m *Container) XXX_Unmarshal(b []byte) error { @@ -1132,7 +1083,7 @@ func (m *IOStrategy) Reset() { *m = IOStrategy{} } func (m *IOStrategy) String() string { return proto.CompactTextString(m) } func (*IOStrategy) ProtoMessage() {} func (*IOStrategy) Descriptor() ([]byte, []int) { - return fileDescriptor_bd8423ba58d6ed80, []int{9} + return fileDescriptor_bd8423ba58d6ed80, []int{8} } func (m *IOStrategy) XXX_Unmarshal(b []byte) error { @@ -1196,7 +1147,7 @@ func (m *DataLoadingConfig) Reset() { *m = DataLoadingConfig{} } func (m *DataLoadingConfig) String() string { return proto.CompactTextString(m) } func (*DataLoadingConfig) ProtoMessage() {} func (*DataLoadingConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_bd8423ba58d6ed80, []int{10} + return fileDescriptor_bd8423ba58d6ed80, []int{9} } func (m *DataLoadingConfig) XXX_Unmarshal(b []byte) error { @@ -1278,7 +1229,7 @@ func (m *K8SPod) Reset() { *m = K8SPod{} } func (m *K8SPod) String() string { return proto.CompactTextString(m) } func (*K8SPod) ProtoMessage() {} func (*K8SPod) Descriptor() ([]byte, []int) { - return fileDescriptor_bd8423ba58d6ed80, []int{11} + return fileDescriptor_bd8423ba58d6ed80, []int{10} } func (m *K8SPod) XXX_Unmarshal(b []byte) error { @@ -1335,7 +1286,7 @@ func (m *K8SObjectMetadata) Reset() { *m = K8SObjectMetadata{} } func (m *K8SObjectMetadata) String() string { return proto.CompactTextString(m) } func (*K8SObjectMetadata) ProtoMessage() {} func (*K8SObjectMetadata) Descriptor() ([]byte, []int) { - return fileDescriptor_bd8423ba58d6ed80, []int{12} + return fileDescriptor_bd8423ba58d6ed80, []int{11} } func (m *K8SObjectMetadata) XXX_Unmarshal(b []byte) error { @@ -1392,7 +1343,7 @@ func (m *Sql) Reset() { *m = Sql{} } func (m *Sql) String() string { return proto.CompactTextString(m) } func (*Sql) ProtoMessage() {} func (*Sql) Descriptor() ([]byte, []int) { - return fileDescriptor_bd8423ba58d6ed80, []int{13} + return fileDescriptor_bd8423ba58d6ed80, []int{12} } func (m *Sql) XXX_Unmarshal(b []byte) error { @@ -1440,7 +1391,6 @@ func init() { proto.RegisterType((*GPUAccelerator)(nil), "flyteidl.core.GPUAccelerator") proto.RegisterType((*ExtendedResources)(nil), "flyteidl.core.ExtendedResources") proto.RegisterType((*RuntimeMetadata)(nil), "flyteidl.core.RuntimeMetadata") - proto.RegisterType((*PluginMetadata)(nil), "flyteidl.core.PluginMetadata") proto.RegisterType((*TaskMetadata)(nil), "flyteidl.core.TaskMetadata") proto.RegisterMapType((map[string]string)(nil), "flyteidl.core.TaskMetadata.TagsEntry") proto.RegisterType((*TaskTemplate)(nil), "flyteidl.core.TaskTemplate") @@ -1459,120 +1409,117 @@ func init() { func init() { proto.RegisterFile("flyteidl/core/tasks.proto", fileDescriptor_bd8423ba58d6ed80) } var fileDescriptor_bd8423ba58d6ed80 = []byte{ - // 1831 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x58, 0xdd, 0x72, 0xdb, 0xb8, - 0x15, 0xb6, 0x24, 0x5b, 0xb2, 0x8e, 0x7e, 0x4c, 0x61, 0x37, 0x29, 0xe3, 0x26, 0x69, 0x86, 0xb3, - 0x9b, 0xa4, 0xdb, 0x46, 0x6e, 0xbc, 0x19, 0xc7, 0x9b, 0xee, 0xa4, 0x23, 0x47, 0x4a, 0xac, 0xda, + // 1787 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x57, 0xdd, 0x72, 0xdb, 0xb8, + 0x15, 0xb6, 0x24, 0x5b, 0xb2, 0x8e, 0x2c, 0x9b, 0xc2, 0x6e, 0x52, 0xc6, 0x4d, 0xd2, 0x0c, 0xa7, + 0x9b, 0xa4, 0xdb, 0x46, 0x6e, 0xb4, 0x19, 0xdb, 0x9b, 0xee, 0xa4, 0x23, 0x47, 0x4c, 0xac, 0xda, 0xfa, 0x19, 0x48, 0xce, 0x36, 0xed, 0x74, 0x58, 0x98, 0x84, 0x69, 0xd6, 0x14, 0xc1, 0x80, 0xa0, - 0xbb, 0xca, 0x5b, 0xb4, 0x2f, 0xd1, 0xe9, 0x03, 0xf4, 0xb2, 0xef, 0xd0, 0xab, 0x3e, 0x49, 0x7b, - 0xd7, 0x8b, 0x1d, 0x80, 0x3f, 0xfa, 0xb3, 0xd7, 0xe3, 0x2b, 0x01, 0xe7, 0x7c, 0xe7, 0x00, 0x38, - 0xff, 0x14, 0xdc, 0x3b, 0xf3, 0xa6, 0x82, 0xba, 0xb6, 0xb7, 0x63, 0x31, 0x4e, 0x77, 0x04, 0x09, - 0x2f, 0xc2, 0x66, 0xc0, 0x99, 0x60, 0xa8, 0x96, 0xb2, 0x9a, 0x92, 0xb5, 0xfd, 0x70, 0x11, 0xe9, - 0xda, 0xd4, 0x17, 0xee, 0x99, 0x4b, 0x79, 0x0c, 0xdf, 0x7e, 0xb0, 0xc4, 0xf7, 0x05, 0xe5, 0x67, - 0xc4, 0xa2, 0x09, 0xfb, 0xfe, 0x22, 0xdb, 0x73, 0x05, 0xe5, 0xc4, 0x0b, 0xaf, 0xe6, 0x86, 0xd4, - 0x8a, 0xb8, 0x2b, 0xa6, 0x09, 0xf7, 0xa1, 0xc3, 0x98, 0xe3, 0xd1, 0x1d, 0xb5, 0x3b, 0x8d, 0xce, - 0x76, 0xec, 0x88, 0x13, 0xe1, 0x32, 0x3f, 0x95, 0x5e, 0xe6, 0x87, 0x82, 0x47, 0x96, 0x88, 0xb9, - 0xc6, 0xbf, 0xf3, 0x50, 0xc6, 0x34, 0x64, 0x11, 0xb7, 0x68, 0x88, 0x0e, 0x60, 0x93, 0xd3, 0x8f, - 0x11, 0x0d, 0x45, 0xa8, 0xe7, 0x1e, 0x15, 0x9e, 0x56, 0x76, 0x1f, 0x37, 0x17, 0x1e, 0xda, 0xcc, - 0xb0, 0xd9, 0xaa, 0xe3, 0x0b, 0x3e, 0xc5, 0x99, 0x1c, 0x7a, 0x0d, 0x45, 0xcf, 0x9d, 0xb8, 0x22, - 0xd4, 0xf3, 0xb7, 0xd2, 0x90, 0x48, 0x6d, 0xff, 0x09, 0x6a, 0x0b, 0x0c, 0xf4, 0x0d, 0xac, 0xfb, - 0x64, 0x42, 0xf5, 0xdc, 0xa3, 0xdc, 0xd3, 0xfa, 0xee, 0x97, 0x37, 0xaa, 0xeb, 0x93, 0x09, 0xc5, - 0x4a, 0x04, 0x7d, 0x0e, 0x1b, 0x97, 0xc4, 0x8b, 0xa8, 0x9e, 0x7f, 0x94, 0x7b, 0x5a, 0xc6, 0xf1, - 0xc6, 0xf8, 0x23, 0x54, 0xe7, 0xb1, 0xa8, 0x02, 0xa5, 0x93, 0xfe, 0x51, 0x7f, 0xf0, 0x5d, 0x5f, - 0x5b, 0x43, 0x25, 0x28, 0xbc, 0x19, 0x9e, 0x68, 0x39, 0xb9, 0x78, 0x37, 0x3c, 0xd1, 0xf2, 0x08, - 0xa0, 0xd8, 0xeb, 0xf4, 0x06, 0xf8, 0x83, 0x56, 0x90, 0xd0, 0xd1, 0x78, 0x80, 0x5b, 0xef, 0x3a, - 0xda, 0x3a, 0xba, 0x03, 0x8d, 0xce, 0xf0, 0xb0, 0xd3, 0xeb, 0xe0, 0xd6, 0xb1, 0x99, 0x92, 0x37, - 0x8c, 0xbf, 0xe6, 0xa0, 0xfe, 0x6e, 0x78, 0xd2, 0xb2, 0x2c, 0xea, 0x51, 0x4e, 0x04, 0xe3, 0xe8, - 0x2e, 0x14, 0x6d, 0x7a, 0xe9, 0x5a, 0xf1, 0x23, 0xca, 0x38, 0xd9, 0xa1, 0xc7, 0x50, 0x8b, 0xfc, - 0x80, 0x70, 0xe1, 0x4a, 0x87, 0x51, 0x5b, 0xdd, 0x73, 0xf3, 0x70, 0x0d, 0x2f, 0x92, 0xd1, 0x13, - 0xa8, 0x67, 0x5b, 0x33, 0x74, 0x3f, 0x51, 0xbd, 0x20, 0xf5, 0x48, 0x60, 0x46, 0x1f, 0xb9, 0x9f, - 0xe8, 0xc1, 0x5d, 0xf8, 0x7c, 0x11, 0x68, 0xc6, 0x4f, 0xfe, 0x03, 0x34, 0x3a, 0xdf, 0x0b, 0xea, - 0xdb, 0xd4, 0x9e, 0x79, 0xfb, 0x2d, 0x6c, 0x39, 0x41, 0x64, 0x92, 0xd9, 0x45, 0xd5, 0xf5, 0x2a, - 0xbb, 0x0f, 0x96, 0x6c, 0xbc, 0xf8, 0x1a, 0x5c, 0x77, 0x82, 0x68, 0x6e, 0x6f, 0xfc, 0x37, 0x07, - 0x5b, 0x38, 0xf2, 0x85, 0x3b, 0xa1, 0x3d, 0x2a, 0x88, 0x4d, 0x04, 0x41, 0xaf, 0x61, 0x5d, 0x4c, - 0x83, 0xd4, 0x69, 0x5f, 0x2d, 0x3b, 0x6d, 0x11, 0x9d, 0xee, 0xc7, 0xd3, 0x80, 0x62, 0x25, 0x87, - 0x74, 0x28, 0x5d, 0x52, 0x1e, 0xba, 0xcc, 0x4f, 0x7c, 0x97, 0x6e, 0xa5, 0x2d, 0xcf, 0x3c, 0x72, - 0xc9, 0x78, 0x6c, 0x03, 0x9c, 0xec, 0xe4, 0x6b, 0x02, 0x2f, 0x72, 0x5c, 0xdf, 0x9c, 0x24, 0x6a, - 0xf5, 0xf5, 0x2b, 0x5f, 0x33, 0x54, 0xa8, 0xf4, 0x6c, 0x5c, 0x0f, 0x16, 0xf6, 0xc6, 0x13, 0xa8, - 0xcc, 0x5d, 0x07, 0x95, 0x61, 0x63, 0x30, 0x3e, 0xec, 0x60, 0x6d, 0x0d, 0xd5, 0xa0, 0xfc, 0xf6, - 0xf8, 0xc3, 0xb8, 0x63, 0x8e, 0xda, 0x47, 0x5a, 0xce, 0xd8, 0x83, 0xfa, 0xa2, 0x2a, 0xf4, 0x05, - 0xd4, 0xdd, 0xd0, 0x0c, 0xa7, 0xbe, 0x65, 0xc6, 0x4a, 0xd5, 0xf3, 0x37, 0x71, 0xd5, 0x0d, 0x47, - 0x53, 0xdf, 0x8a, 0xd1, 0xc6, 0xff, 0xd6, 0xa1, 0x3a, 0x26, 0xe1, 0x45, 0x26, 0x66, 0x40, 0xd5, - 0x76, 0x43, 0x8b, 0x5d, 0x52, 0x4e, 0x4e, 0x3d, 0x9a, 0x0a, 0xcd, 0xd3, 0xd0, 0x3e, 0x94, 0x78, - 0x7c, 0x2b, 0x65, 0x8f, 0xca, 0xee, 0xc3, 0x1f, 0x37, 0x29, 0x4e, 0xe1, 0xe8, 0x6b, 0x28, 0xc9, - 0x5f, 0x16, 0x89, 0xc4, 0x1e, 0xf7, 0x9a, 0x71, 0x45, 0x68, 0xa6, 0x15, 0xa1, 0xd9, 0x4e, 0x2a, - 0x06, 0x4e, 0x91, 0x68, 0x0f, 0x4a, 0x9c, 0x0a, 0xee, 0xd2, 0x50, 0xdf, 0x50, 0x42, 0xf7, 0x57, - 0xd2, 0x4e, 0xf0, 0xe9, 0x48, 0x70, 0x22, 0xa8, 0x33, 0xc5, 0x29, 0x18, 0xfd, 0x02, 0x1a, 0xe9, - 0xb5, 0xa7, 0x66, 0xea, 0xc0, 0xa2, 0xf2, 0x93, 0x96, 0x31, 0xde, 0x27, 0x9e, 0xdc, 0x07, 0xdd, - 0xa6, 0x01, 0xa7, 0x16, 0x11, 0xd4, 0x36, 0x29, 0xe7, 0x8c, 0x9b, 0x13, 0x1a, 0x86, 0xc4, 0xa1, - 0x7a, 0x49, 0xc9, 0xdc, 0x9d, 0xf1, 0x3b, 0x92, 0xdd, 0x8b, 0xb9, 0x32, 0x6f, 0x54, 0x09, 0xe5, - 0x51, 0x20, 0x5c, 0x69, 0xb2, 0xcd, 0x34, 0x6f, 0x16, 0xc8, 0xe8, 0x19, 0x20, 0x8b, 0x58, 0xe7, - 0xd4, 0x0c, 0x29, 0x77, 0x89, 0xe7, 0x7e, 0x52, 0xf6, 0x2d, 0x2b, 0xfb, 0x36, 0x14, 0x67, 0x34, - 0xc7, 0x40, 0x5f, 0x42, 0xdd, 0xa1, 0xbe, 0x8c, 0x6a, 0x1a, 0x9a, 0x36, 0xb5, 0x2e, 0x74, 0x50, - 0xd0, 0x5a, 0x46, 0x6d, 0x53, 0xeb, 0x42, 0x16, 0x24, 0x41, 0x9c, 0x50, 0xaf, 0xa8, 0xfa, 0xb6, - 0x5c, 0x90, 0xe6, 0x5d, 0xdb, 0x1c, 0x13, 0x27, 0x8c, 0xcb, 0x9b, 0x12, 0x41, 0x5f, 0x41, 0x23, - 0x60, 0xb6, 0x29, 0xe8, 0x24, 0xf0, 0x88, 0xa0, 0xa6, 0x2a, 0x6c, 0x55, 0xf5, 0xd6, 0xad, 0x80, - 0xd9, 0xe3, 0x84, 0x2e, 0xcb, 0xd2, 0xf6, 0x4b, 0x28, 0x67, 0xe2, 0x48, 0x83, 0xc2, 0x05, 0x9d, - 0x26, 0xe5, 0x43, 0x2e, 0xaf, 0xae, 0x6d, 0xaf, 0xf2, 0xfb, 0xb9, 0x83, 0x3b, 0xf0, 0xd9, 0x82, - 0x19, 0x92, 0x1a, 0xf0, 0x9f, 0x8d, 0x38, 0xee, 0xd2, 0x43, 0xd0, 0xcf, 0x21, 0xef, 0xda, 0x49, - 0xca, 0xdf, 0x5b, 0x7a, 0x45, 0x37, 0xeb, 0x60, 0x38, 0xef, 0xda, 0x08, 0x25, 0xe9, 0x1c, 0x9f, - 0x15, 0xa7, 0xe8, 0x4b, 0xd8, 0xcc, 0x32, 0xad, 0xa0, 0x94, 0xfc, 0xf4, 0x47, 0x4c, 0x81, 0x33, - 0x30, 0xfa, 0x35, 0x94, 0xb3, 0x06, 0x78, 0x4d, 0x8e, 0xca, 0xd4, 0xb3, 0xbb, 0x29, 0x08, 0xcf, - 0xf0, 0x68, 0x07, 0x8a, 0x56, 0x14, 0x0a, 0x36, 0x49, 0x02, 0xf3, 0x27, 0x2b, 0xd1, 0x3c, 0x52, - 0xfd, 0x0d, 0x27, 0x30, 0xb4, 0x0f, 0x65, 0x8b, 0xf9, 0x82, 0xb8, 0x3e, 0xe5, 0x2a, 0x14, 0x2b, - 0xbb, 0xfa, 0xd2, 0x69, 0x6f, 0x52, 0xfe, 0xe1, 0x1a, 0x9e, 0x81, 0xd1, 0xaf, 0xa0, 0x74, 0xb1, - 0x1f, 0x9a, 0x01, 0xb3, 0xf5, 0x86, 0x92, 0xbb, 0xb3, 0x24, 0x77, 0xb4, 0x1f, 0x0e, 0x99, 0x7d, - 0xb8, 0x86, 0x8b, 0x17, 0x6a, 0x85, 0x1e, 0x43, 0x21, 0xfc, 0xe8, 0xe9, 0x48, 0xa1, 0xd1, 0x12, - 0x7a, 0xf4, 0xd1, 0x3b, 0x5c, 0xc3, 0x12, 0x20, 0xc3, 0x40, 0x0e, 0x13, 0xa6, 0xb4, 0x63, 0x96, - 0x26, 0x32, 0xe4, 0x37, 0xf0, 0x96, 0x64, 0xc8, 0xe7, 0xa7, 0x59, 0xd2, 0x05, 0x2d, 0xed, 0xf8, - 0xa6, 0xbc, 0x1b, 0xfd, 0x5e, 0xa8, 0x70, 0x5f, 0x2d, 0x01, 0xa3, 0x04, 0xf6, 0x26, 0x46, 0xe1, - 0xad, 0x70, 0x91, 0x80, 0x06, 0x80, 0x68, 0xd2, 0x05, 0x4c, 0x9e, 0xb6, 0x01, 0x95, 0x0e, 0x95, - 0xdd, 0x47, 0x4b, 0xca, 0x56, 0xda, 0x05, 0x6e, 0xd0, 0x95, 0x0e, 0xf2, 0x1b, 0x28, 0x5a, 0xcc, - 0x3f, 0x73, 0x1d, 0x5d, 0x53, 0xb9, 0xf0, 0xe4, 0x8a, 0x00, 0x48, 0xc3, 0x4d, 0x5a, 0xf9, 0xcc, - 0x75, 0x92, 0x66, 0x1f, 0x8b, 0x6d, 0x7f, 0x03, 0x95, 0x39, 0xf2, 0xad, 0xa2, 0x7c, 0x13, 0x8a, - 0x82, 0x70, 0x87, 0x0a, 0x63, 0x0f, 0x6a, 0x99, 0x07, 0x87, 0x8c, 0x0b, 0x99, 0xc7, 0x99, 0x17, - 0xcd, 0x80, 0x71, 0xa1, 0x34, 0xd6, 0x70, 0xcd, 0x9a, 0x87, 0x19, 0xff, 0x2f, 0x40, 0x39, 0x13, - 0x94, 0x27, 0xb9, 0x13, 0x59, 0x7a, 0xe2, 0xd3, 0xe3, 0x8d, 0xec, 0x43, 0x16, 0x9b, 0x4c, 0x88, - 0x6f, 0xab, 0x71, 0xa6, 0x8c, 0xd3, 0xad, 0x4c, 0x09, 0xc2, 0x9d, 0x50, 0x2f, 0x28, 0xb2, 0x5a, - 0xa3, 0x3d, 0x28, 0xcf, 0xec, 0xba, 0x7e, 0x65, 0xac, 0xcd, 0xec, 0x39, 0x83, 0xa2, 0x67, 0x50, - 0xa0, 0xfe, 0xa5, 0xbe, 0xa1, 0x8c, 0xb8, 0x9c, 0x45, 0x47, 0x74, 0xfa, 0x5e, 0xbe, 0x7a, 0x48, - 0x5c, 0x8e, 0x25, 0x0e, 0xbd, 0xcc, 0xcc, 0x5e, 0xbc, 0x51, 0xe2, 0x20, 0xaf, 0xe7, 0x52, 0x73, - 0xa3, 0x5d, 0xd8, 0x90, 0xe6, 0x08, 0xf5, 0x92, 0x92, 0xbb, 0x7f, 0x5d, 0x1e, 0x48, 0xf3, 0xe0, - 0x18, 0x8a, 0x5a, 0x50, 0x91, 0x59, 0x6b, 0x26, 0x27, 0x5e, 0x1d, 0x2d, 0x6d, 0x22, 0xc8, 0x31, - 0x23, 0xb6, 0xeb, 0x3b, 0xb1, 0x3f, 0x31, 0x48, 0xa1, 0x78, 0x8d, 0xba, 0x50, 0x25, 0xdc, 0x3a, - 0x77, 0x05, 0xb5, 0x44, 0xc4, 0xa9, 0xaa, 0xaa, 0xab, 0x93, 0x5c, 0x76, 0x7a, 0xb3, 0x35, 0x07, - 0xc6, 0x0b, 0xa2, 0x46, 0x17, 0xaa, 0xf3, 0xdc, 0xc5, 0xd9, 0xad, 0x0c, 0x1b, 0xad, 0x5e, 0x7b, - 0xef, 0x85, 0x96, 0x53, 0x4b, 0xdc, 0xdb, 0x7b, 0x11, 0xcf, 0x6f, 0x2d, 0xdc, 0x33, 0xdf, 0xef, - 0x69, 0x85, 0x6c, 0xfd, 0x52, 0x5b, 0x37, 0xfe, 0x99, 0x07, 0xe8, 0x0e, 0xd2, 0x1e, 0x86, 0x8e, - 0xa0, 0x66, 0xb3, 0xbf, 0xf8, 0x1e, 0x23, 0xb6, 0x39, 0x61, 0x76, 0x3a, 0xba, 0x2c, 0x8f, 0xaf, - 0x33, 0x89, 0x66, 0x3b, 0x81, 0xf7, 0x98, 0x4d, 0x71, 0xd5, 0x9e, 0xdb, 0xa1, 0x0e, 0x54, 0xa2, - 0x60, 0xa6, 0x2a, 0xaf, 0x54, 0x7d, 0x71, 0xbd, 0xaa, 0x93, 0x20, 0x53, 0x04, 0x51, 0xb6, 0x36, - 0x8e, 0xa1, 0x3a, 0x7f, 0x08, 0x42, 0x50, 0x6f, 0x0f, 0xbe, 0xeb, 0x1f, 0x0f, 0x5a, 0x6d, 0xb3, - 0xd3, 0x7a, 0xa7, 0xa6, 0x92, 0xcf, 0x60, 0x2b, 0xa3, 0x8d, 0xc6, 0xb8, 0xd3, 0xea, 0x69, 0xb9, - 0x98, 0x68, 0xf6, 0x07, 0x63, 0x33, 0xe5, 0x69, 0x79, 0xa3, 0x03, 0x30, 0x3b, 0x47, 0xea, 0x3a, - 0x19, 0x2a, 0xa9, 0x41, 0xdf, 0xec, 0xfc, 0xae, 0x3b, 0xd6, 0xd6, 0x90, 0x06, 0xd5, 0x84, 0x16, - 0x6b, 0xcf, 0xa1, 0x06, 0xd4, 0x12, 0x45, 0x31, 0x43, 0xcb, 0x1b, 0x7f, 0xcf, 0x43, 0x63, 0xc5, - 0xdf, 0x32, 0x51, 0xa8, 0x2f, 0xbb, 0xa8, 0x9d, 0xcc, 0x2f, 0xe9, 0x16, 0x3d, 0x00, 0x70, 0xfd, - 0x20, 0x12, 0x66, 0x40, 0xc4, 0x79, 0x92, 0xc7, 0x65, 0x45, 0x19, 0x12, 0x71, 0x8e, 0x7e, 0x06, - 0x15, 0x16, 0x89, 0x8c, 0x1f, 0x0f, 0x75, 0x10, 0x93, 0x14, 0xa0, 0x0b, 0xc5, 0x33, 0xc6, 0x27, - 0x24, 0x9e, 0x5f, 0xea, 0xbb, 0xcf, 0x6f, 0x8a, 0xbd, 0xe6, 0x71, 0xfc, 0xfd, 0xd4, 0x23, 0xc1, - 0x5b, 0x25, 0x88, 0x13, 0x05, 0xe8, 0x15, 0x54, 0x5c, 0x66, 0x86, 0x89, 0xd5, 0x93, 0x0e, 0x72, - 0xef, 0x5a, 0xb7, 0x60, 0x70, 0x59, 0xba, 0x36, 0x9e, 0x83, 0xb6, 0xac, 0x17, 0x6d, 0xc2, 0xfa, - 0x6f, 0x47, 0x03, 0x19, 0x7a, 0x9b, 0xb0, 0xfe, 0xa1, 0xd5, 0x3b, 0x8e, 0x23, 0x6f, 0x88, 0x07, - 0xe3, 0x81, 0x96, 0x37, 0xfe, 0x95, 0x83, 0x62, 0xdc, 0x23, 0xd0, 0xb7, 0x73, 0xcd, 0x32, 0x77, - 0x65, 0x0a, 0x1d, 0xed, 0x87, 0x83, 0xd3, 0x3f, 0x53, 0x4b, 0x5c, 0xd1, 0x31, 0x77, 0x61, 0x53, - 0x8e, 0x0d, 0x61, 0x40, 0xad, 0x64, 0xfc, 0xbb, 0xb6, 0xed, 0x95, 0x02, 0x66, 0x8f, 0x02, 0x6a, - 0x2d, 0xe7, 0x6d, 0xe1, 0xf6, 0x79, 0x6b, 0xfc, 0x23, 0x0f, 0x8d, 0x95, 0x6b, 0xa1, 0x36, 0x14, - 0x3d, 0x72, 0x4a, 0xbd, 0xf4, 0x13, 0xf1, 0x97, 0x37, 0x3d, 0xa4, 0x79, 0xac, 0xe0, 0xe9, 0x67, - 0x9e, 0xda, 0xa0, 0x11, 0x54, 0x88, 0xef, 0x33, 0xa1, 0x06, 0xcf, 0xf4, 0x5b, 0xf1, 0xf9, 0x8d, - 0xaa, 0x5a, 0x33, 0x99, 0x58, 0xdf, 0xbc, 0x16, 0xd9, 0x4e, 0xe6, 0xce, 0xba, 0x4d, 0x3b, 0xd9, - 0x7e, 0x0d, 0xda, 0xb2, 0xee, 0xdb, 0xc8, 0x1b, 0x7f, 0xcb, 0x41, 0x61, 0xf4, 0xd1, 0x43, 0xf7, - 0xa1, 0x1c, 0x0a, 0x22, 0xe8, 0x84, 0xfa, 0x22, 0x91, 0x9c, 0x11, 0xd0, 0x0b, 0x28, 0xd9, 0x2e, - 0xf1, 0xa8, 0x25, 0x92, 0x9a, 0xb0, 0xbd, 0x3a, 0x24, 0x34, 0xdb, 0x31, 0x02, 0xa7, 0x50, 0xe3, - 0x25, 0x94, 0x12, 0x9a, 0xfc, 0x06, 0x39, 0xe9, 0xb7, 0x3b, 0x6f, 0xbb, 0xfd, 0x4e, 0x3b, 0x0e, - 0xbb, 0x56, 0x7f, 0xd4, 0xd5, 0x72, 0x72, 0x75, 0xd8, 0x7d, 0xdf, 0xd1, 0xf2, 0xb3, 0x2f, 0x96, - 0xc2, 0xc1, 0xb7, 0xbf, 0x7f, 0xe5, 0xb8, 0xe2, 0x3c, 0x3a, 0x6d, 0x5a, 0x6c, 0xb2, 0xa3, 0x4e, - 0x62, 0xdc, 0x89, 0x17, 0x3b, 0xd9, 0xbf, 0x0a, 0x0e, 0xf5, 0x77, 0x82, 0xd3, 0x67, 0x0e, 0xdb, - 0x59, 0xf8, 0xa3, 0xe1, 0xb4, 0xa8, 0x62, 0xeb, 0xeb, 0x1f, 0x02, 0x00, 0x00, 0xff, 0xff, 0x33, - 0xce, 0x13, 0xac, 0x07, 0x11, 0x00, 0x00, + 0xbb, 0xca, 0x5b, 0xb4, 0x2f, 0xd1, 0xe9, 0x4c, 0x6f, 0x7b, 0xd9, 0x77, 0xe8, 0x55, 0xdf, 0xa4, + 0x77, 0xbd, 0xe8, 0x00, 0xfc, 0xd1, 0x8f, 0x9d, 0x78, 0x7c, 0x45, 0x9c, 0x73, 0xbe, 0x73, 0x00, + 0x1c, 0x9c, 0x3f, 0xc2, 0xbd, 0x33, 0x7f, 0x2a, 0xa8, 0xe7, 0xf8, 0x3b, 0x36, 0xe3, 0x74, 0x47, + 0x90, 0xe8, 0x22, 0x6a, 0x86, 0x9c, 0x09, 0x86, 0xea, 0x99, 0xa8, 0x29, 0x45, 0xdb, 0x0f, 0x17, + 0x91, 0x9e, 0x43, 0x03, 0xe1, 0x9d, 0x79, 0x94, 0x27, 0xf0, 0xed, 0x07, 0x4b, 0xf2, 0x40, 0x50, + 0x7e, 0x46, 0x6c, 0x9a, 0x8a, 0xef, 0x2f, 0x8a, 0x7d, 0x4f, 0x50, 0x4e, 0xfc, 0xe8, 0x7a, 0x69, + 0x44, 0xed, 0x98, 0x7b, 0x62, 0x9a, 0x4a, 0x1f, 0xba, 0x8c, 0xb9, 0x3e, 0xdd, 0x51, 0xd4, 0x69, + 0x7c, 0xb6, 0xe3, 0xc4, 0x9c, 0x08, 0x8f, 0x05, 0x99, 0xf6, 0xb2, 0x3c, 0x12, 0x3c, 0xb6, 0x45, + 0x22, 0x35, 0xfe, 0x5d, 0x84, 0x2a, 0xa6, 0x11, 0x8b, 0xb9, 0x4d, 0x23, 0x74, 0x00, 0xeb, 0x9c, + 0x7e, 0x88, 0x69, 0x24, 0x22, 0xbd, 0xf0, 0xa8, 0xf4, 0xb4, 0xd6, 0x7a, 0xdc, 0x5c, 0xb8, 0x68, + 0x33, 0xc7, 0xe6, 0x2b, 0x33, 0x10, 0x7c, 0x8a, 0x73, 0x3d, 0xf4, 0x0a, 0xca, 0xbe, 0x37, 0xf1, + 0x44, 0xa4, 0x17, 0x6f, 0x65, 0x21, 0xd5, 0xda, 0xfe, 0x23, 0xd4, 0x17, 0x04, 0xe8, 0x5b, 0x58, + 0x0d, 0xc8, 0x84, 0xea, 0x85, 0x47, 0x85, 0xa7, 0x9b, 0xad, 0xaf, 0x6e, 0x34, 0xd7, 0x27, 0x13, + 0x8a, 0x95, 0x0a, 0xfa, 0x12, 0xd6, 0x2e, 0x89, 0x1f, 0x53, 0xbd, 0xf8, 0xa8, 0xf0, 0xb4, 0x8a, + 0x13, 0xc2, 0xf8, 0x03, 0x6c, 0xcc, 0x63, 0x51, 0x0d, 0x2a, 0x27, 0xfd, 0xa3, 0xfe, 0xe0, 0xfb, + 0xbe, 0xb6, 0x82, 0x2a, 0x50, 0x7a, 0x3d, 0x3c, 0xd1, 0x0a, 0x72, 0xf1, 0x76, 0x78, 0xa2, 0x15, + 0x11, 0x40, 0xb9, 0x67, 0xf6, 0x06, 0xf8, 0xbd, 0x56, 0x92, 0xd0, 0xd1, 0x78, 0x80, 0xdb, 0x6f, + 0x4d, 0x6d, 0x15, 0xdd, 0x81, 0x86, 0x39, 0x3c, 0x34, 0x7b, 0x26, 0x6e, 0x1f, 0x5b, 0x19, 0x7b, + 0xcd, 0xf8, 0x4b, 0x01, 0x36, 0xdf, 0x0e, 0x4f, 0xda, 0xb6, 0x4d, 0x7d, 0xca, 0x89, 0x60, 0x1c, + 0xdd, 0x85, 0xb2, 0x43, 0x2f, 0x3d, 0x3b, 0xb9, 0x44, 0x15, 0xa7, 0x14, 0x7a, 0x0c, 0xf5, 0x38, + 0x08, 0x09, 0x17, 0x9e, 0x7c, 0x30, 0xea, 0xa8, 0x73, 0xae, 0x1f, 0xae, 0xe0, 0x45, 0x36, 0x7a, + 0x02, 0x9b, 0x39, 0x69, 0x45, 0xde, 0x47, 0xaa, 0x97, 0xa4, 0x1d, 0x09, 0xcc, 0xf9, 0x23, 0xef, + 0x23, 0x3d, 0xb8, 0x0b, 0x5f, 0x2e, 0x02, 0xad, 0xe4, 0xca, 0xbf, 0x87, 0x86, 0xf9, 0x83, 0xa0, + 0x81, 0x43, 0x9d, 0xd9, 0x6b, 0xbf, 0x81, 0x2d, 0x37, 0x8c, 0x2d, 0x32, 0x3b, 0xa8, 0x3a, 0x5e, + 0xad, 0xf5, 0x60, 0xc9, 0xc7, 0x8b, 0xb7, 0xc1, 0x9b, 0x6e, 0x18, 0xcf, 0xd1, 0xc6, 0x3f, 0x0a, + 0xb0, 0x85, 0xe3, 0x40, 0x78, 0x13, 0xda, 0xa3, 0x82, 0x38, 0x44, 0x10, 0xf4, 0x0a, 0x56, 0xc5, + 0x34, 0xcc, 0x1e, 0xed, 0xeb, 0xe5, 0x47, 0x5b, 0x44, 0x67, 0xf4, 0x78, 0x1a, 0x52, 0xac, 0xf4, + 0x90, 0x0e, 0x95, 0x4b, 0xca, 0x23, 0x8f, 0x05, 0xe9, 0xdb, 0x65, 0xa4, 0xf4, 0xe5, 0x99, 0x4f, + 0x2e, 0x19, 0x4f, 0x7c, 0x80, 0x53, 0xca, 0x78, 0x02, 0xb5, 0x39, 0x33, 0xa8, 0x0a, 0x6b, 0x83, + 0xf1, 0xa1, 0x89, 0xb5, 0x15, 0x54, 0x87, 0xea, 0x9b, 0xe3, 0xf7, 0x63, 0xd3, 0x1a, 0x75, 0x8e, + 0xb4, 0x82, 0xf1, 0xdf, 0x55, 0xd8, 0x18, 0x93, 0xe8, 0x22, 0x3f, 0xab, 0x01, 0x1b, 0x8e, 0x17, + 0xd9, 0xec, 0x92, 0x72, 0x72, 0xea, 0x27, 0x67, 0x5e, 0xc7, 0x0b, 0x3c, 0xb4, 0x0f, 0x15, 0x9e, + 0x58, 0x57, 0xe7, 0xa9, 0xb5, 0x1e, 0x7e, 0xfe, 0x4a, 0x38, 0x83, 0xa3, 0x6f, 0xa0, 0x22, 0xbf, + 0x2c, 0x16, 0xfa, 0xaa, 0xd2, 0xbc, 0xd7, 0x4c, 0x32, 0xb2, 0x99, 0x65, 0x64, 0xb3, 0x93, 0x66, + 0x2c, 0xce, 0x90, 0x68, 0x17, 0x2a, 0x9c, 0x0a, 0xee, 0xd1, 0x48, 0x5f, 0x53, 0x4a, 0xf7, 0xaf, + 0x84, 0xbd, 0xe0, 0xd3, 0x91, 0xe0, 0x44, 0x50, 0x77, 0x8a, 0x33, 0x30, 0xfa, 0x39, 0x34, 0xb2, + 0x63, 0x4f, 0xad, 0xcc, 0x81, 0x65, 0xe5, 0x27, 0x2d, 0x17, 0xbc, 0x4b, 0x3d, 0xb9, 0x0f, 0xba, + 0x43, 0x43, 0x4e, 0x6d, 0x22, 0xa8, 0x63, 0x51, 0xce, 0x19, 0xb7, 0x26, 0x34, 0x8a, 0x88, 0x4b, + 0xf5, 0x8a, 0xd2, 0xb9, 0x3b, 0x93, 0x9b, 0x52, 0xdc, 0x4b, 0xa4, 0x32, 0x6e, 0x55, 0x09, 0xe3, + 0x71, 0x28, 0x3c, 0xe9, 0xb2, 0xf5, 0x2c, 0x6e, 0x17, 0xd8, 0xe8, 0x19, 0x20, 0x9b, 0xd8, 0xe7, + 0xd4, 0x8a, 0x28, 0xf7, 0x88, 0xef, 0x7d, 0x54, 0xfe, 0xad, 0x2a, 0xff, 0x36, 0x94, 0x64, 0x34, + 0x27, 0x40, 0x5f, 0xc1, 0xa6, 0x4b, 0x03, 0x19, 0x55, 0x34, 0xb2, 0x1c, 0x6a, 0x5f, 0xe8, 0xa0, + 0xa0, 0xf5, 0x9c, 0xdb, 0xa1, 0xf6, 0x85, 0x2c, 0x08, 0x82, 0xb8, 0x91, 0x5e, 0x53, 0xf5, 0x65, + 0xb9, 0x20, 0xcc, 0x3f, 0x6d, 0x73, 0x4c, 0xdc, 0x28, 0x29, 0x2f, 0x4a, 0x05, 0x7d, 0x0d, 0x8d, + 0x90, 0x39, 0x96, 0xa0, 0x93, 0xd0, 0x27, 0x82, 0x5a, 0xaa, 0xb0, 0x6c, 0xa8, 0xbb, 0x6e, 0x85, + 0xcc, 0x19, 0xa7, 0x7c, 0x59, 0x16, 0xb6, 0xf7, 0xa0, 0x9a, 0xab, 0x23, 0x0d, 0x4a, 0x17, 0x74, + 0x9a, 0xa6, 0xaf, 0x5c, 0x5e, 0x5f, 0x5b, 0x5e, 0x16, 0xf7, 0x0b, 0x07, 0x77, 0xe0, 0x8b, 0x05, + 0x37, 0xa4, 0x39, 0xf8, 0x9f, 0xb5, 0x24, 0xee, 0xb2, 0x4d, 0xd0, 0xcf, 0xa0, 0xe8, 0x39, 0x69, + 0xca, 0xdd, 0x5b, 0xba, 0x45, 0x37, 0xef, 0x20, 0xb8, 0xe8, 0x39, 0x08, 0xa5, 0xe9, 0x94, 0xec, + 0x95, 0xa4, 0xc8, 0x1e, 0xac, 0x4f, 0xd2, 0x7b, 0xaa, 0x54, 0xa8, 0xb5, 0x7e, 0xfc, 0x19, 0x57, + 0xe0, 0x1c, 0x8c, 0x7e, 0x05, 0xd5, 0xbc, 0x01, 0xa5, 0x31, 0xb9, 0x9c, 0xf1, 0x32, 0x85, 0x9c, + 0x6e, 0x06, 0xc2, 0x33, 0x3c, 0xda, 0x81, 0xb2, 0x1d, 0x47, 0x82, 0x4d, 0xd2, 0xc0, 0xfc, 0xd1, + 0x95, 0x68, 0x1e, 0xa9, 0xfe, 0x82, 0x53, 0x18, 0xda, 0x87, 0xaa, 0xcd, 0x02, 0x41, 0xbc, 0x80, + 0x72, 0x15, 0x8a, 0xb5, 0x96, 0xbe, 0xb4, 0xdb, 0xeb, 0x4c, 0x7e, 0xb8, 0x82, 0x67, 0x60, 0xf4, + 0x4b, 0xa8, 0x5c, 0xec, 0x47, 0x56, 0xc8, 0x1c, 0xbd, 0xa1, 0xf4, 0xee, 0x2c, 0xe9, 0x1d, 0xed, + 0x47, 0x43, 0xe6, 0x1c, 0xae, 0xe0, 0xf2, 0x85, 0x5a, 0xa1, 0xc7, 0x50, 0x8a, 0x3e, 0xf8, 0x3a, + 0x52, 0x68, 0xb4, 0x84, 0x1e, 0x7d, 0xf0, 0x0f, 0x57, 0xb0, 0x04, 0xc8, 0x30, 0x90, 0xcd, 0xdc, + 0x92, 0x7e, 0xcc, 0xd3, 0x44, 0x86, 0xfc, 0x1a, 0xde, 0x92, 0x02, 0x79, 0xfd, 0x2c, 0x4b, 0xba, + 0xa0, 0x65, 0x1d, 0xd7, 0x92, 0x67, 0xa3, 0x3f, 0x08, 0x15, 0xee, 0x57, 0x4b, 0xc0, 0x28, 0x85, + 0xbd, 0x4e, 0x50, 0x78, 0x2b, 0x5a, 0x64, 0xa0, 0x01, 0x20, 0x9a, 0x56, 0x61, 0x8b, 0x67, 0x65, + 0x58, 0xa5, 0x43, 0xad, 0xf5, 0x68, 0xc9, 0xd8, 0x95, 0x72, 0x8d, 0x1b, 0xf4, 0x4a, 0x05, 0xff, + 0x35, 0x94, 0x6d, 0x16, 0x9c, 0x79, 0xae, 0xae, 0xa9, 0x5c, 0x78, 0x72, 0x4d, 0x00, 0x64, 0xe1, + 0x26, 0xbd, 0x7c, 0xe6, 0xb9, 0x69, 0xb3, 0x4d, 0xd4, 0xb6, 0xbf, 0x85, 0xda, 0x1c, 0xfb, 0x56, + 0x51, 0xbe, 0x0e, 0x65, 0x41, 0xb8, 0x4b, 0x85, 0xb1, 0x0b, 0xf5, 0xfc, 0x05, 0x87, 0x8c, 0x0b, + 0x99, 0xc7, 0xf9, 0x2b, 0x5a, 0x21, 0xe3, 0x42, 0x59, 0xac, 0xe3, 0xba, 0x3d, 0x0f, 0x33, 0xfe, + 0x57, 0x82, 0x6a, 0xae, 0x28, 0x77, 0xf2, 0x26, 0xb2, 0xf4, 0x24, 0xbb, 0x27, 0x84, 0xec, 0x03, + 0x36, 0x9b, 0x4c, 0x48, 0xe0, 0xa8, 0x71, 0xa2, 0x8a, 0x33, 0x52, 0xa6, 0x04, 0xe1, 0x6e, 0xa4, + 0x97, 0x14, 0x5b, 0xad, 0xd1, 0x2e, 0x54, 0x67, 0x7e, 0x5d, 0xbd, 0x36, 0xd6, 0x66, 0xfe, 0x9c, + 0x41, 0xd1, 0x33, 0x28, 0xd1, 0xe0, 0x52, 0x5f, 0x53, 0x4e, 0x5c, 0xce, 0xa2, 0x23, 0x3a, 0x7d, + 0x27, 0x6f, 0x3d, 0x24, 0x1e, 0xc7, 0x12, 0x87, 0xf6, 0x72, 0xb7, 0x97, 0x6f, 0xd4, 0x38, 0x28, + 0xea, 0x85, 0xcc, 0xdd, 0xa8, 0x05, 0x6b, 0xd2, 0x1d, 0x91, 0x5e, 0x51, 0x7a, 0xf7, 0x3f, 0x95, + 0x07, 0xd2, 0x3d, 0x38, 0x81, 0xa2, 0x36, 0xd4, 0x64, 0xd6, 0x5a, 0xe9, 0x8e, 0xd7, 0x47, 0x4b, + 0x87, 0x08, 0x72, 0xcc, 0x88, 0xe3, 0x05, 0x6e, 0xf2, 0x9e, 0x18, 0xa4, 0x52, 0xb2, 0x46, 0x5d, + 0xd8, 0x20, 0xdc, 0x3e, 0xf7, 0x04, 0xb5, 0x45, 0xcc, 0xa9, 0xaa, 0xaa, 0x57, 0x27, 0xa9, 0x7c, + 0xf7, 0x66, 0x7b, 0x0e, 0x8c, 0x17, 0x54, 0x8d, 0x2e, 0x6c, 0xcc, 0x4b, 0x17, 0x67, 0xa7, 0x2a, + 0xac, 0xb5, 0x7b, 0x9d, 0xdd, 0x17, 0x5a, 0x41, 0x2d, 0x71, 0x6f, 0xf7, 0x45, 0x32, 0x3f, 0xb5, + 0x71, 0xcf, 0x7a, 0xb7, 0xab, 0x95, 0xf2, 0xf5, 0x9e, 0xb6, 0x6a, 0xfc, 0xb3, 0x08, 0xd0, 0x1d, + 0x64, 0x3d, 0x0c, 0x1d, 0x41, 0xdd, 0x61, 0x7f, 0x0e, 0x7c, 0x46, 0x1c, 0x6b, 0xc2, 0x9c, 0x6c, + 0x74, 0x58, 0x1e, 0x1f, 0x67, 0x1a, 0xcd, 0x4e, 0x0a, 0xef, 0x31, 0x87, 0xe2, 0x0d, 0x67, 0x8e, + 0x42, 0x26, 0xd4, 0xe2, 0x70, 0x66, 0xaa, 0xa8, 0x4c, 0xfd, 0xf4, 0xd3, 0xa6, 0x4e, 0xc2, 0xdc, + 0x10, 0xc4, 0xf9, 0xda, 0x38, 0x86, 0x8d, 0xf9, 0x4d, 0x10, 0x82, 0xcd, 0xce, 0xe0, 0xfb, 0xfe, + 0xf1, 0xa0, 0xdd, 0xb1, 0xcc, 0xf6, 0x5b, 0x35, 0x5d, 0x7c, 0x01, 0x5b, 0x39, 0x6f, 0x34, 0xc6, + 0x66, 0xbb, 0xa7, 0x15, 0x12, 0xa6, 0xd5, 0x1f, 0x8c, 0xad, 0x4c, 0xa6, 0x15, 0x0d, 0x13, 0x60, + 0xb6, 0x8f, 0xb4, 0x75, 0x32, 0x54, 0x5a, 0x83, 0xbe, 0x65, 0xfe, 0xb6, 0x3b, 0xd6, 0x56, 0x90, + 0x06, 0x1b, 0x29, 0x2f, 0xb1, 0x5e, 0x40, 0x0d, 0xa8, 0xa7, 0x86, 0x12, 0x81, 0x56, 0x34, 0xfe, + 0x56, 0x84, 0xc6, 0x95, 0xf7, 0x96, 0x89, 0x42, 0x03, 0xd9, 0x45, 0x9d, 0x74, 0x7e, 0xc9, 0x48, + 0xf4, 0x00, 0xc0, 0x0b, 0xc2, 0x58, 0x58, 0x21, 0x11, 0xe7, 0x69, 0x1e, 0x57, 0x15, 0x67, 0x48, + 0xc4, 0x39, 0xfa, 0x09, 0xd4, 0x58, 0x2c, 0x72, 0x79, 0x32, 0x54, 0x41, 0xc2, 0x52, 0x80, 0x2e, + 0x94, 0xcf, 0x18, 0x9f, 0x90, 0x64, 0x7e, 0xd9, 0x6c, 0x3d, 0xbf, 0x29, 0xf6, 0x9a, 0xc7, 0xc9, + 0xff, 0x4b, 0x8f, 0x84, 0x6f, 0x94, 0x22, 0x4e, 0x0d, 0xa0, 0x97, 0x50, 0xf3, 0x98, 0x15, 0xa5, + 0x5e, 0x4f, 0x3b, 0xc8, 0xbd, 0x4f, 0x3e, 0x0b, 0x06, 0x8f, 0x65, 0x6b, 0xe3, 0x39, 0x68, 0xcb, + 0x76, 0xd1, 0x3a, 0xac, 0xfe, 0x66, 0x34, 0x90, 0xa1, 0xb7, 0x0e, 0xab, 0xef, 0xdb, 0xbd, 0xe3, + 0x24, 0xf2, 0x86, 0x78, 0x30, 0x1e, 0x68, 0x45, 0xe3, 0x5f, 0x05, 0x28, 0x27, 0x3d, 0x02, 0x7d, + 0x37, 0xd7, 0x2c, 0x0b, 0xd7, 0xa6, 0xd0, 0xd1, 0x7e, 0x34, 0x38, 0xfd, 0x13, 0xb5, 0xc5, 0x35, + 0x1d, 0xb3, 0x05, 0xeb, 0x72, 0x6c, 0x88, 0x42, 0x6a, 0xa7, 0xe3, 0xdf, 0x27, 0xdb, 0x5e, 0x25, + 0x64, 0xce, 0x28, 0xa4, 0xf6, 0x72, 0xde, 0x96, 0x6e, 0x9f, 0xb7, 0xc6, 0xdf, 0x8b, 0xd0, 0xb8, + 0x72, 0x2c, 0xd4, 0x81, 0xb2, 0x4f, 0x4e, 0xa9, 0x9f, 0xfd, 0xa2, 0xfd, 0xe2, 0xa6, 0x8b, 0x34, + 0x8f, 0x15, 0x3c, 0xfb, 0xcd, 0x52, 0x04, 0x1a, 0x41, 0x8d, 0x04, 0x01, 0x13, 0x6a, 0xf0, 0xcc, + 0xfe, 0xd5, 0x9e, 0xdf, 0x68, 0xaa, 0x3d, 0xd3, 0x49, 0xec, 0xcd, 0x5b, 0x91, 0xed, 0x64, 0x6e, + 0xaf, 0xdb, 0xb4, 0x93, 0xed, 0x57, 0xa0, 0x2d, 0xdb, 0xbe, 0x8d, 0xbe, 0xf1, 0xd7, 0x02, 0x94, + 0x46, 0x1f, 0x7c, 0x74, 0x1f, 0xaa, 0x91, 0x20, 0x82, 0x4e, 0x68, 0x20, 0x52, 0xcd, 0x19, 0x03, + 0xbd, 0x80, 0x8a, 0xe3, 0x11, 0x9f, 0xda, 0x22, 0xad, 0x09, 0xdb, 0x57, 0x87, 0x84, 0x66, 0x27, + 0x41, 0xe0, 0x0c, 0x6a, 0xec, 0x41, 0x25, 0xe5, 0xc9, 0x7f, 0x89, 0x93, 0x7e, 0xc7, 0x7c, 0xd3, + 0xed, 0x9b, 0x9d, 0x24, 0xec, 0xda, 0xfd, 0x51, 0x57, 0x2b, 0xc8, 0xd5, 0x61, 0xf7, 0x9d, 0xa9, + 0x15, 0x67, 0x7f, 0x1e, 0xa5, 0x83, 0xef, 0x7e, 0xf7, 0xd2, 0xf5, 0xc4, 0x79, 0x7c, 0xda, 0xb4, + 0xd9, 0x64, 0x47, 0xed, 0xc4, 0xb8, 0x9b, 0x2c, 0x76, 0xf2, 0xbf, 0x7a, 0x97, 0x06, 0x3b, 0xe1, + 0xe9, 0x33, 0x97, 0xed, 0x2c, 0xfc, 0xe8, 0x9f, 0x96, 0x55, 0x6c, 0x7d, 0xf3, 0xff, 0x00, 0x00, + 0x00, 0xff, 0xff, 0x61, 0xf6, 0x49, 0xdf, 0x87, 0x10, 0x00, 0x00, } diff --git a/flyteidl/gen/pb-go/flyteidl/core/tasks.pb.validate.go b/flyteidl/gen/pb-go/flyteidl/core/tasks.pb.validate.go index d48e63197e..7731c43125 100644 --- a/flyteidl/gen/pb-go/flyteidl/core/tasks.pb.validate.go +++ b/flyteidl/gen/pb-go/flyteidl/core/tasks.pb.validate.go @@ -298,16 +298,6 @@ func (m *RuntimeMetadata) Validate() error { // no validation rules for Flavor - if v, ok := interface{}(m.GetPluginMetadata()).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return RuntimeMetadataValidationError{ - field: "PluginMetadata", - reason: "embedded message failed validation", - cause: err, - } - } - } - return nil } @@ -365,73 +355,6 @@ var _ interface { ErrorName() string } = RuntimeMetadataValidationError{} -// Validate checks the field values on PluginMetadata with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. -func (m *PluginMetadata) Validate() error { - if m == nil { - return nil - } - - // no validation rules for IsSyncPlugin - - return nil -} - -// PluginMetadataValidationError is the validation error returned by -// PluginMetadata.Validate if the designated constraints aren't met. -type PluginMetadataValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e PluginMetadataValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e PluginMetadataValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e PluginMetadataValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e PluginMetadataValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e PluginMetadataValidationError) ErrorName() string { return "PluginMetadataValidationError" } - -// Error satisfies the builtin error interface -func (e PluginMetadataValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sPluginMetadata.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = PluginMetadataValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = PluginMetadataValidationError{} - // Validate checks the field values on TaskMetadata with the rules defined in // the proto definition for this message. If any rules are violated, an error // is returned. diff --git a/flyteidl/gen/pb-go/flyteidl/service/admin.swagger.json b/flyteidl/gen/pb-go/flyteidl/service/admin.swagger.json index ffef099025..63ea63a40d 100644 --- a/flyteidl/gen/pb-go/flyteidl/service/admin.swagger.json +++ b/flyteidl/gen/pb-go/flyteidl/service/admin.swagger.json @@ -6548,16 +6548,6 @@ }, "description": "A map of Parameters." }, - "corePluginMetadata": { - "type": "object", - "properties": { - "is_sync_plugin": { - "type": "boolean", - "format": "boolean", - "description": "+optional It can be used to decide use sync plugin or async plugin during runtime." - } - } - }, "corePrimitive": { "type": "object", "properties": { @@ -6677,10 +6667,6 @@ "flavor": { "type": "string", "description": "+optional It can be used to provide extra information about the runtime (e.g. python, golang... etc.)." - }, - "plugin_metadata": { - "$ref": "#/definitions/corePluginMetadata", - "description": "+optional It can be used to provide extra information for the plugin." } }, "description": "Runtime information. This is loosely defined to allow for extensibility." diff --git a/flyteidl/gen/pb-go/flyteidl/service/agent.pb.go b/flyteidl/gen/pb-go/flyteidl/service/agent.pb.go index f2376ee8f6..274daaf196 100644 --- a/flyteidl/gen/pb-go/flyteidl/service/agent.pb.go +++ b/flyteidl/gen/pb-go/flyteidl/service/agent.pb.go @@ -28,21 +28,21 @@ const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package func init() { proto.RegisterFile("flyteidl/service/agent.proto", fileDescriptor_f7d1dfd1fb77d2ef) } var fileDescriptor_f7d1dfd1fb77d2ef = []byte{ - // 209 bytes of a gzipped FileDescriptorProto + // 214 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0x49, 0xcb, 0xa9, 0x2c, 0x49, 0xcd, 0x4c, 0xc9, 0xd1, 0x2f, 0x4e, 0x2d, 0x2a, 0xcb, 0x4c, 0x4e, 0xd5, 0x4f, 0x4c, 0x4f, 0xcd, 0x2b, 0xd1, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x12, 0x80, 0xc9, 0xea, 0x41, 0x65, 0xa5, - 0xa4, 0xe0, 0xea, 0x13, 0x53, 0x72, 0x33, 0xf3, 0x90, 0x55, 0x1b, 0x75, 0x31, 0x71, 0xf1, 0x38, - 0x82, 0xf8, 0xc1, 0x10, 0xc5, 0x42, 0xa1, 0x5c, 0x5c, 0xce, 0x45, 0xa9, 0x89, 0x25, 0xa9, 0x21, - 0x89, 0xc5, 0xd9, 0x42, 0x8a, 0x7a, 0x70, 0xd3, 0xc0, 0x7a, 0xf5, 0x10, 0x72, 0x41, 0xa9, 0x85, - 0xa5, 0xa9, 0xc5, 0x25, 0x52, 0x4a, 0xf8, 0x94, 0x14, 0x17, 0xe4, 0xe7, 0x15, 0xa7, 0x2a, 0x31, - 0x08, 0xf9, 0x70, 0xb1, 0xbb, 0xa7, 0x96, 0x80, 0xcd, 0x94, 0x43, 0xd7, 0x00, 0x95, 0x80, 0x19, - 0x28, 0x8f, 0x53, 0x1e, 0x6e, 0x5a, 0x28, 0x17, 0x97, 0x4b, 0x6a, 0x4e, 0x2a, 0x2e, 0x47, 0x22, - 0xe4, 0x70, 0x3a, 0x12, 0x59, 0x09, 0xcc, 0x58, 0x27, 0xfb, 0x28, 0xdb, 0xf4, 0xcc, 0x92, 0x8c, - 0xd2, 0x24, 0xbd, 0xe4, 0xfc, 0x5c, 0x7d, 0xb0, 0x8e, 0xfc, 0xa2, 0x74, 0x08, 0x43, 0x1f, 0x1e, - 0x88, 0xe9, 0xa9, 0x79, 0xfa, 0x05, 0x49, 0xba, 0xe9, 0xf9, 0xfa, 0xe8, 0xf1, 0x90, 0xc4, 0x06, - 0x0e, 0x54, 0x63, 0x40, 0x00, 0x00, 0x00, 0xff, 0xff, 0x9a, 0xb8, 0x57, 0xf9, 0xa2, 0x01, 0x00, - 0x00, + 0xa4, 0xe0, 0xea, 0x13, 0x53, 0x72, 0x33, 0xf3, 0x90, 0x55, 0x1b, 0xf5, 0x33, 0x71, 0x09, 0x3a, + 0x16, 0x57, 0xe6, 0x25, 0x3b, 0x82, 0x04, 0x83, 0x21, 0x3a, 0x84, 0x42, 0xb9, 0xb8, 0x9c, 0x8b, + 0x52, 0x13, 0x4b, 0x52, 0x43, 0x12, 0x8b, 0xb3, 0x85, 0x14, 0xf5, 0xe0, 0x46, 0x82, 0x0d, 0xd0, + 0x43, 0xc8, 0x05, 0xa5, 0x16, 0x96, 0xa6, 0x16, 0x97, 0x48, 0x29, 0xe1, 0x53, 0x52, 0x5c, 0x90, + 0x9f, 0x57, 0x9c, 0xaa, 0xc4, 0x20, 0xe4, 0xc3, 0xc5, 0xee, 0x9e, 0x5a, 0x02, 0x36, 0x53, 0x0e, + 0x5d, 0x03, 0x54, 0x02, 0x66, 0xa0, 0x3c, 0x4e, 0x79, 0xb8, 0x69, 0xa1, 0x5c, 0x5c, 0x2e, 0xa9, + 0x39, 0xa9, 0xb8, 0x1c, 0x89, 0x90, 0xc3, 0xe9, 0x48, 0x64, 0x25, 0x30, 0x63, 0x9d, 0xec, 0xa3, + 0x6c, 0xd3, 0x33, 0x4b, 0x32, 0x4a, 0x93, 0xf4, 0x92, 0xf3, 0x73, 0xf5, 0xc1, 0x3a, 0xf2, 0x8b, + 0xd2, 0x21, 0x0c, 0x7d, 0x78, 0x48, 0xa6, 0xa7, 0xe6, 0xe9, 0x17, 0x24, 0xe9, 0xa6, 0xe7, 0xeb, + 0xa3, 0x47, 0x46, 0x12, 0x1b, 0x38, 0x64, 0x8d, 0x01, 0x01, 0x00, 0x00, 0xff, 0xff, 0x92, 0xbb, + 0xf6, 0x3c, 0xa7, 0x01, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -53,10 +53,10 @@ var _ grpc.ClientConn // is compatible with the grpc package it is being compiled against. const _ = grpc.SupportPackageIsVersion4 -// AgentServiceClient is the client API for AgentService service. +// AsyncAgentServiceClient is the client API for AsyncAgentService service. // // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. -type AgentServiceClient interface { +type AsyncAgentServiceClient interface { // Send a task create request to the agent server. CreateTask(ctx context.Context, in *admin.CreateTaskRequest, opts ...grpc.CallOption) (*admin.CreateTaskResponse, error) // Get job status. @@ -65,43 +65,43 @@ type AgentServiceClient interface { DeleteTask(ctx context.Context, in *admin.DeleteTaskRequest, opts ...grpc.CallOption) (*admin.DeleteTaskResponse, error) } -type agentServiceClient struct { +type asyncAgentServiceClient struct { cc *grpc.ClientConn } -func NewAgentServiceClient(cc *grpc.ClientConn) AgentServiceClient { - return &agentServiceClient{cc} +func NewAsyncAgentServiceClient(cc *grpc.ClientConn) AsyncAgentServiceClient { + return &asyncAgentServiceClient{cc} } -func (c *agentServiceClient) CreateTask(ctx context.Context, in *admin.CreateTaskRequest, opts ...grpc.CallOption) (*admin.CreateTaskResponse, error) { +func (c *asyncAgentServiceClient) CreateTask(ctx context.Context, in *admin.CreateTaskRequest, opts ...grpc.CallOption) (*admin.CreateTaskResponse, error) { out := new(admin.CreateTaskResponse) - err := c.cc.Invoke(ctx, "/flyteidl.service.AgentService/CreateTask", in, out, opts...) + err := c.cc.Invoke(ctx, "/flyteidl.service.AsyncAgentService/CreateTask", in, out, opts...) if err != nil { return nil, err } return out, nil } -func (c *agentServiceClient) GetTask(ctx context.Context, in *admin.GetTaskRequest, opts ...grpc.CallOption) (*admin.GetTaskResponse, error) { +func (c *asyncAgentServiceClient) GetTask(ctx context.Context, in *admin.GetTaskRequest, opts ...grpc.CallOption) (*admin.GetTaskResponse, error) { out := new(admin.GetTaskResponse) - err := c.cc.Invoke(ctx, "/flyteidl.service.AgentService/GetTask", in, out, opts...) + err := c.cc.Invoke(ctx, "/flyteidl.service.AsyncAgentService/GetTask", in, out, opts...) if err != nil { return nil, err } return out, nil } -func (c *agentServiceClient) DeleteTask(ctx context.Context, in *admin.DeleteTaskRequest, opts ...grpc.CallOption) (*admin.DeleteTaskResponse, error) { +func (c *asyncAgentServiceClient) DeleteTask(ctx context.Context, in *admin.DeleteTaskRequest, opts ...grpc.CallOption) (*admin.DeleteTaskResponse, error) { out := new(admin.DeleteTaskResponse) - err := c.cc.Invoke(ctx, "/flyteidl.service.AgentService/DeleteTask", in, out, opts...) + err := c.cc.Invoke(ctx, "/flyteidl.service.AsyncAgentService/DeleteTask", in, out, opts...) if err != nil { return nil, err } return out, nil } -// AgentServiceServer is the server API for AgentService service. -type AgentServiceServer interface { +// AsyncAgentServiceServer is the server API for AsyncAgentService service. +type AsyncAgentServiceServer interface { // Send a task create request to the agent server. CreateTask(context.Context, *admin.CreateTaskRequest) (*admin.CreateTaskResponse, error) // Get job status. @@ -110,93 +110,93 @@ type AgentServiceServer interface { DeleteTask(context.Context, *admin.DeleteTaskRequest) (*admin.DeleteTaskResponse, error) } -// UnimplementedAgentServiceServer can be embedded to have forward compatible implementations. -type UnimplementedAgentServiceServer struct { +// UnimplementedAsyncAgentServiceServer can be embedded to have forward compatible implementations. +type UnimplementedAsyncAgentServiceServer struct { } -func (*UnimplementedAgentServiceServer) CreateTask(ctx context.Context, req *admin.CreateTaskRequest) (*admin.CreateTaskResponse, error) { +func (*UnimplementedAsyncAgentServiceServer) CreateTask(ctx context.Context, req *admin.CreateTaskRequest) (*admin.CreateTaskResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method CreateTask not implemented") } -func (*UnimplementedAgentServiceServer) GetTask(ctx context.Context, req *admin.GetTaskRequest) (*admin.GetTaskResponse, error) { +func (*UnimplementedAsyncAgentServiceServer) GetTask(ctx context.Context, req *admin.GetTaskRequest) (*admin.GetTaskResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method GetTask not implemented") } -func (*UnimplementedAgentServiceServer) DeleteTask(ctx context.Context, req *admin.DeleteTaskRequest) (*admin.DeleteTaskResponse, error) { +func (*UnimplementedAsyncAgentServiceServer) DeleteTask(ctx context.Context, req *admin.DeleteTaskRequest) (*admin.DeleteTaskResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method DeleteTask not implemented") } -func RegisterAgentServiceServer(s *grpc.Server, srv AgentServiceServer) { - s.RegisterService(&_AgentService_serviceDesc, srv) +func RegisterAsyncAgentServiceServer(s *grpc.Server, srv AsyncAgentServiceServer) { + s.RegisterService(&_AsyncAgentService_serviceDesc, srv) } -func _AgentService_CreateTask_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { +func _AsyncAgentService_CreateTask_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(admin.CreateTaskRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(AgentServiceServer).CreateTask(ctx, in) + return srv.(AsyncAgentServiceServer).CreateTask(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/flyteidl.service.AgentService/CreateTask", + FullMethod: "/flyteidl.service.AsyncAgentService/CreateTask", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(AgentServiceServer).CreateTask(ctx, req.(*admin.CreateTaskRequest)) + return srv.(AsyncAgentServiceServer).CreateTask(ctx, req.(*admin.CreateTaskRequest)) } return interceptor(ctx, in, info, handler) } -func _AgentService_GetTask_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { +func _AsyncAgentService_GetTask_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(admin.GetTaskRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(AgentServiceServer).GetTask(ctx, in) + return srv.(AsyncAgentServiceServer).GetTask(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/flyteidl.service.AgentService/GetTask", + FullMethod: "/flyteidl.service.AsyncAgentService/GetTask", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(AgentServiceServer).GetTask(ctx, req.(*admin.GetTaskRequest)) + return srv.(AsyncAgentServiceServer).GetTask(ctx, req.(*admin.GetTaskRequest)) } return interceptor(ctx, in, info, handler) } -func _AgentService_DeleteTask_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { +func _AsyncAgentService_DeleteTask_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(admin.DeleteTaskRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(AgentServiceServer).DeleteTask(ctx, in) + return srv.(AsyncAgentServiceServer).DeleteTask(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/flyteidl.service.AgentService/DeleteTask", + FullMethod: "/flyteidl.service.AsyncAgentService/DeleteTask", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(AgentServiceServer).DeleteTask(ctx, req.(*admin.DeleteTaskRequest)) + return srv.(AsyncAgentServiceServer).DeleteTask(ctx, req.(*admin.DeleteTaskRequest)) } return interceptor(ctx, in, info, handler) } -var _AgentService_serviceDesc = grpc.ServiceDesc{ - ServiceName: "flyteidl.service.AgentService", - HandlerType: (*AgentServiceServer)(nil), +var _AsyncAgentService_serviceDesc = grpc.ServiceDesc{ + ServiceName: "flyteidl.service.AsyncAgentService", + HandlerType: (*AsyncAgentServiceServer)(nil), Methods: []grpc.MethodDesc{ { MethodName: "CreateTask", - Handler: _AgentService_CreateTask_Handler, + Handler: _AsyncAgentService_CreateTask_Handler, }, { MethodName: "GetTask", - Handler: _AgentService_GetTask_Handler, + Handler: _AsyncAgentService_GetTask_Handler, }, { MethodName: "DeleteTask", - Handler: _AgentService_DeleteTask_Handler, + Handler: _AsyncAgentService_DeleteTask_Handler, }, }, Streams: []grpc.StreamDesc{}, diff --git a/flyteidl/gen/pb-go/flyteidl/service/agent.swagger.json b/flyteidl/gen/pb-go/flyteidl/service/agent.swagger.json index 502b341ea3..1f1928a32a 100644 --- a/flyteidl/gen/pb-go/flyteidl/service/agent.swagger.json +++ b/flyteidl/gen/pb-go/flyteidl/service/agent.swagger.json @@ -226,6 +226,13 @@ "message": { "type": "string", "description": "A descriptive message for the current state. e.g. waiting for cluster." + }, + "log_links": { + "type": "array", + "items": { + "$ref": "#/definitions/coreTaskLog" + }, + "description": "log information for the task execution." } } }, @@ -692,16 +699,6 @@ "default": "CLIENT_CREDENTIALS", "description": "Type of the token requested.\n\n - CLIENT_CREDENTIALS: CLIENT_CREDENTIALS indicates a 2-legged OAuth token requested using client credentials." }, - "corePluginMetadata": { - "type": "object", - "properties": { - "is_sync_plugin": { - "type": "boolean", - "format": "boolean", - "description": "+optional It can be used to decide use sync plugin or async plugin during runtime." - } - } - }, "corePrimitive": { "type": "object", "properties": { @@ -787,10 +784,6 @@ "flavor": { "type": "string", "description": "+optional It can be used to provide extra information about the runtime (e.g. python, golang... etc.)." - }, - "plugin_metadata": { - "$ref": "#/definitions/corePluginMetadata", - "description": "+optional It can be used to provide extra information for the plugin." } }, "description": "Runtime information. This is loosely defined to allow for extensibility." diff --git a/flyteidl/gen/pb-go/flyteidl/service/external_plugin_service.swagger.json b/flyteidl/gen/pb-go/flyteidl/service/external_plugin_service.swagger.json index 750b4d795d..2196ca521f 100644 --- a/flyteidl/gen/pb-go/flyteidl/service/external_plugin_service.swagger.json +++ b/flyteidl/gen/pb-go/flyteidl/service/external_plugin_service.swagger.json @@ -614,16 +614,6 @@ "default": "CLIENT_CREDENTIALS", "description": "Type of the token requested.\n\n - CLIENT_CREDENTIALS: CLIENT_CREDENTIALS indicates a 2-legged OAuth token requested using client credentials." }, - "corePluginMetadata": { - "type": "object", - "properties": { - "is_sync_plugin": { - "type": "boolean", - "format": "boolean", - "description": "+optional It can be used to decide use sync plugin or async plugin during runtime." - } - } - }, "corePrimitive": { "type": "object", "properties": { @@ -709,10 +699,6 @@ "flavor": { "type": "string", "description": "+optional It can be used to provide extra information about the runtime (e.g. python, golang... etc.)." - }, - "plugin_metadata": { - "$ref": "#/definitions/corePluginMetadata", - "description": "+optional It can be used to provide extra information for the plugin." } }, "description": "Runtime information. This is loosely defined to allow for extensibility." diff --git a/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/README.md b/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/README.md index e072239ba1..863164c8d5 100644 --- a/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/README.md +++ b/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/README.md @@ -266,7 +266,6 @@ Class | Method | HTTP request | Description - [CoreOutputReference](docs/CoreOutputReference.md) - [CoreParameter](docs/CoreParameter.md) - [CoreParameterMap](docs/CoreParameterMap.md) - - [CorePluginMetadata](docs/CorePluginMetadata.md) - [CorePrimitive](docs/CorePrimitive.md) - [CorePromiseAttribute](docs/CorePromiseAttribute.md) - [CoreQualityOfService](docs/CoreQualityOfService.md) diff --git a/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/api/swagger.yaml b/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/api/swagger.yaml index 5bcaa69fbf..faeca2cd95 100644 --- a/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/api/swagger.yaml +++ b/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/api/swagger.yaml @@ -15752,8 +15752,6 @@ definitions: discoverable: true runtime: flavor: "flavor" - plugin_metadata: - is_sync_plugin: true type: {} version: "version" cache_serializable: true @@ -16024,8 +16022,6 @@ definitions: discoverable: true runtime: flavor: "flavor" - plugin_metadata: - is_sync_plugin: true type: {} version: "version" cache_serializable: true @@ -21303,8 +21299,6 @@ definitions: discoverable: true runtime: flavor: "flavor" - plugin_metadata: - is_sync_plugin: true type: {} version: "version" cache_serializable: true @@ -21591,8 +21585,6 @@ definitions: discoverable: true runtime: flavor: "flavor" - plugin_metadata: - is_sync_plugin: true type: {} version: "version" cache_serializable: true @@ -22292,8 +22284,6 @@ definitions: discoverable: true runtime: flavor: "flavor" - plugin_metadata: - is_sync_plugin: true type: {} version: "version" cache_serializable: true @@ -22574,8 +22564,6 @@ definitions: discoverable: true runtime: flavor: "flavor" - plugin_metadata: - is_sync_plugin: true type: {} version: "version" cache_serializable: true @@ -30868,8 +30856,6 @@ definitions: discoverable: true runtime: flavor: "flavor" - plugin_metadata: - is_sync_plugin: true type: {} version: "version" cache_serializable: true @@ -31140,8 +31126,6 @@ definitions: discoverable: true runtime: flavor: "flavor" - plugin_metadata: - is_sync_plugin: true type: {} version: "version" cache_serializable: true @@ -43558,8 +43542,6 @@ definitions: discoverable: true runtime: flavor: "flavor" - plugin_metadata: - is_sync_plugin: true type: {} version: "version" cache_serializable: true @@ -43830,8 +43812,6 @@ definitions: discoverable: true runtime: flavor: "flavor" - plugin_metadata: - is_sync_plugin: true type: {} version: "version" cache_serializable: true @@ -56195,8 +56175,6 @@ definitions: discoverable: true runtime: flavor: "flavor" - plugin_metadata: - is_sync_plugin: true type: {} version: "version" cache_serializable: true @@ -56467,8 +56445,6 @@ definitions: discoverable: true runtime: flavor: "flavor" - plugin_metadata: - is_sync_plugin: true type: {} version: "version" cache_serializable: true @@ -68611,8 +68587,6 @@ definitions: discoverable: true runtime: flavor: "flavor" - plugin_metadata: - is_sync_plugin: true type: {} version: "version" cache_serializable: true @@ -68883,8 +68857,6 @@ definitions: discoverable: true runtime: flavor: "flavor" - plugin_metadata: - is_sync_plugin: true type: {} version: "version" cache_serializable: true @@ -74905,8 +74877,6 @@ definitions: discoverable: true runtime: flavor: "flavor" - plugin_metadata: - is_sync_plugin: true type: {} version: "version" cache_serializable: true @@ -87077,8 +87047,6 @@ definitions: discoverable: true runtime: flavor: "flavor" - plugin_metadata: - is_sync_plugin: true type: {} version: "version" cache_serializable: true @@ -87349,8 +87317,6 @@ definitions: discoverable: true runtime: flavor: "flavor" - plugin_metadata: - is_sync_plugin: true type: {} version: "version" cache_serializable: true @@ -95076,16 +95042,6 @@ definitions: dataclass_type: {} tag: "tag" required: true - corePluginMetadata: - type: "object" - properties: - is_sync_plugin: - type: "boolean" - format: "boolean" - description: "+optional It can be used to decide use sync plugin or async\ - \ plugin during runtime." - example: - is_sync_plugin: true corePrimitive: type: "object" properties: @@ -95215,15 +95171,9 @@ definitions: type: "string" description: "+optional It can be used to provide extra information about\ \ the runtime (e.g. python, golang... etc.)." - plugin_metadata: - description: "+optional It can be used to provide extra information for the\ - \ plugin." - $ref: "#/definitions/corePluginMetadata" description: "Runtime information. This is loosely defined to allow for extensibility." example: flavor: "flavor" - plugin_metadata: - is_sync_plugin: true type: {} version: "version" coreScalar: @@ -95857,8 +95807,6 @@ definitions: discoverable: true runtime: flavor: "flavor" - plugin_metadata: - is_sync_plugin: true type: {} version: "version" cache_serializable: true @@ -96035,8 +95983,6 @@ definitions: discoverable: true runtime: flavor: "flavor" - plugin_metadata: - is_sync_plugin: true type: {} version: "version" cache_serializable: true @@ -109047,8 +108993,6 @@ definitions: discoverable: true runtime: flavor: "flavor" - plugin_metadata: - is_sync_plugin: true type: {} version: "version" cache_serializable: true @@ -109319,8 +109263,6 @@ definitions: discoverable: true runtime: flavor: "flavor" - plugin_metadata: - is_sync_plugin: true type: {} version: "version" cache_serializable: true diff --git a/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/model_core_plugin_metadata.go b/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/model_core_plugin_metadata.go deleted file mode 100644 index 650b85d54e..0000000000 --- a/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/model_core_plugin_metadata.go +++ /dev/null @@ -1,15 +0,0 @@ -/* - * flyteidl/service/admin.proto - * - * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) - * - * API version: version not set - * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) - */ - -package flyteadmin - -type CorePluginMetadata struct { - // +optional It can be used to decide use sync plugin or async plugin during runtime. - IsSyncPlugin bool `json:"is_sync_plugin,omitempty"` -} diff --git a/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/model_core_runtime_metadata.go b/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/model_core_runtime_metadata.go index 0a6fa263fc..51fe719888 100644 --- a/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/model_core_runtime_metadata.go +++ b/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/model_core_runtime_metadata.go @@ -17,6 +17,4 @@ type CoreRuntimeMetadata struct { Version string `json:"version,omitempty"` // +optional It can be used to provide extra information about the runtime (e.g. python, golang... etc.). Flavor string `json:"flavor,omitempty"` - // +optional It can be used to provide extra information for the plugin. - PluginMetadata *CorePluginMetadata `json:"plugin_metadata,omitempty"` } diff --git a/flyteidl/gen/pb-go/flyteidl/service/openapi.go b/flyteidl/gen/pb-go/flyteidl/service/openapi.go index 95a399839e..94b2afe544 100644 --- a/flyteidl/gen/pb-go/flyteidl/service/openapi.go +++ b/flyteidl/gen/pb-go/flyteidl/service/openapi.go @@ -78,7 +78,7 @@ func (fi bindataFileInfo) Sys() interface{} { return nil } -var _adminSwaggerJson = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\xfd\x7b\x73\xeb\xb8\x95\x2f\x0c\xff\x3f\x9f\x02\x67\xcf\xa9\xea\xee\x44\xb6\x3b\xc9\x4c\xde\x94\xa7\x4e\xbd\x8f\xda\xd6\xde\xad\xd3\xbe\xc5\x97\xee\xe9\x67\x94\x52\x43\x24\x24\x21\x26\x01\x06\x00\xed\xad\x4e\xe5\xbb\x3f\x85\x85\x0b\x41\x8a\x94\xa8\x8b\x6d\x79\x37\x67\xaa\xd2\xde\x22\x89\xeb\xc2\xc2\xba\xfe\xd6\x3f\xff\x0d\xa1\x0f\xf2\x19\xcf\x66\x44\x7c\x38\x45\x1f\xfe\x78\xfc\xed\x87\x9e\xfe\x8d\xb2\x29\xff\x70\x8a\xf4\x73\x84\x3e\x28\xaa\x12\xa2\x9f\x4f\x93\x85\x22\x34\x4e\x4e\x24\x11\x4f\x34\x22\x27\x38\x4e\x29\x3b\xce\x04\x57\x1c\x3e\x44\xe8\xc3\x13\x11\x92\x72\xa6\x5f\xb7\x7f\x22\xc6\x15\x92\x44\x7d\xf8\x37\x84\xfe\x05\xcd\xcb\x68\x4e\x52\x22\x3f\x9c\xa2\xff\x31\x1f\xcd\x95\xca\x5c\x03\xfa\x6f\xa9\xdf\xfd\x1b\xbc\x1b\x71\x26\xf3\xd2\xcb\x38\xcb\x12\x1a\x61\x45\x39\x3b\xf9\xbb\xe4\xac\x78\x37\x13\x3c\xce\xa3\x96\xef\x62\x35\x97\xc5\x1c\x4f\x70\x46\x4f\x9e\xfe\x70\x82\x23\x45\x9f\xc8\x38\xc1\x39\x8b\xe6\xe3\x2c\xc1\x4c\x9e\xfc\x93\xc6\x7a\x8e\x7f\x27\x91\xfa\x17\xfc\x23\xe6\x29\xa6\xcc\xfc\xcd\x70\x4a\xfe\xe5\xdb\x41\xe8\xc3\x8c\xa8\xe0\x9f\x7a\xb6\x79\x9a\x62\xb1\xd0\x2b\xf2\x91\xa8\x68\x8e\xd4\x9c\x20\xd3\x0f\x72\x4b\xc4\xa7\x08\xa3\x53\x41\xa6\xa7\xbf\x08\x32\x1d\xbb\x85\x3e\x36\x0b\x7c\x01\xa3\xb9\x49\x30\xfb\xe5\xd8\x2e\x13\xb4\xcc\x33\x22\x60\x6e\xc3\x58\xb7\xfe\x89\xa8\x3e\x34\x5b\xbc\x1f\xbe\x2d\x88\xcc\x38\x93\x44\x96\x86\x87\xd0\x87\x3f\x7e\xfb\x6d\xe5\x27\x84\x3e\xc4\x44\x46\x82\x66\xca\xee\x65\x1f\xc9\x3c\x8a\x88\x94\xd3\x3c\x41\xae\xa5\x70\x30\x66\xaa\x7a\x63\xf1\x52\x63\x08\x7d\xf8\xdf\x82\x4c\x75\x3b\xff\x7e\x12\x93\x29\x65\x54\xb7\x2b\x0d\xfd\x04\xa3\x2d\x7d\xf5\xaf\x7f\xab\xfb\xfb\x5f\xc1\x8c\x32\x2c\x70\x4a\x14\x11\xc5\x8e\x9b\xff\xab\xcc\x45\xef\x91\xee\xbc\xd8\xc7\xea\xc0\x2b\xb3\xbd\xc2\x29\xd1\x7b\xa2\x77\xca\x7e\x01\x7f\x0b\x22\x79\x2e\x22\x82\x26\x24\xe1\x6c\x26\x91\xe2\x4b\x6b\x40\xa1\x05\x4d\x5e\xd5\x27\x82\xfc\x23\xa7\x82\xe8\xbd\x52\x22\x27\x95\xa7\x6a\x91\xc1\x20\xa5\x12\x94\xcd\xc2\xa5\xf8\x57\xaf\xd5\xd4\x0c\x55\x6e\x30\x33\xf3\x41\xe3\xc4\x46\xac\xef\x5e\x89\x30\x43\x13\x82\xf4\x59\xa4\x31\x11\x24\x46\x58\x22\x8c\x64\x3e\x91\x44\xa1\x67\xaa\xe6\x94\xe9\x7f\x67\x24\xa2\x53\x1a\xb9\x35\x3b\x9c\xb5\x81\x3f\x57\xaf\xcc\x83\x24\x42\x0f\xfc\x89\xc6\x24\x46\x4f\x38\xc9\x09\x9a\x72\x51\x5a\x9e\xe3\x11\xbb\x9f\xeb\x75\x48\x27\x94\xc1\xc9\xd3\x6b\xe9\x28\xe4\xf7\x6e\xb9\x7e\x8f\x74\x7f\x28\x67\xf4\x1f\x39\x49\x16\x88\xc6\x84\x29\x3a\xa5\x44\x56\x5b\xfb\x3d\x87\xfe\x71\x82\x8e\x90\x5e\x67\x22\x14\xac\x37\x67\x8a\x7c\x56\x12\x1d\xa1\x84\x3e\x12\xf4\xd5\x05\x95\x0a\xf5\x6f\x86\x5f\xf5\xd0\x57\xe6\xbc\x20\xe0\x4d\x5f\xbd\xc2\x0a\xfb\xbf\xff\x16\x1c\x3d\x85\x67\xd5\x43\xf7\xa1\xaf\x4f\xf3\x9d\xb9\x1a\x8a\x16\xfe\xf6\x6f\x61\x3b\x76\xbf\x56\xf3\xdb\x82\xd9\x5a\x4e\xdb\x96\xbf\xc2\x32\x95\x59\xab\xd4\x3b\xb4\x2b\x67\xd5\xed\x56\x59\xab\x7c\x5f\xbc\x55\x4f\xe1\xa5\xf9\xeb\x2e\xcc\x15\x2b\xa0\x7a\x4c\x99\x39\x24\xfe\xcc\x08\xa9\xcf\x89\xa3\xde\x03\x61\x29\xbb\xf0\xda\x60\x66\x01\xbb\x75\x5c\x34\x58\x95\x03\x9c\x77\x42\x53\xba\x6e\x7f\x87\x2c\xd6\x22\x97\x65\x76\x2c\x4f\x27\x44\xe8\x65\x70\x6c\x0f\x66\x3b\xd1\x6c\x50\xe5\x82\x91\xb8\xc5\x34\xff\x91\x13\xb1\x58\x31\xcf\x29\x4e\x64\xd3\x44\x29\x53\x44\xcb\xb7\x95\xc7\x53\x2e\x52\xac\xec\x0b\x7f\xfe\x8f\x4d\x17\x42\xf1\x47\xb2\x6e\xff\x87\x66\x37\x23\x2c\x81\x0c\xd2\x3c\x51\x34\x4b\x08\xca\xf0\x8c\x48\xbb\x22\x79\xa2\x64\x0f\x5e\xd3\x32\x35\x11\x47\xfe\x06\x82\x1e\xdc\xcd\x9b\x4b\xf8\x05\x4d\xbd\x00\xc9\xc8\x67\x05\x2d\x8d\x18\xdc\xbd\xb0\x44\xe1\x8d\xf2\x02\x4b\xb9\x1d\xcd\x48\x2e\xd4\x78\xb2\x38\x7e\x24\x4b\xfd\x36\x52\x0e\x66\x08\x2b\x25\xe8\x24\x57\x44\xcf\x5b\xb7\xe1\xee\x4e\x60\x8f\xe6\x82\x6e\xc3\x1a\xde\x6e\xc2\x31\x15\x24\x82\xb9\x6d\x72\x60\xfc\x57\x7a\xde\x5a\x7f\x59\x98\xd9\x3f\x92\x05\xc8\x23\x35\x2b\xe0\xb7\x7c\xc4\x46\x0c\x1d\xa1\xf3\xc1\xdd\xd9\xe0\xea\x7c\x78\xf5\xe9\x14\x7d\xb7\x40\x31\x99\xe2\x3c\x51\x3d\x34\xa5\x24\x89\x25\xc2\x82\x40\x93\x24\xd6\x32\x87\x1e\x0c\x61\x31\x65\x33\xc4\x45\x4c\xc4\xcb\x2d\x63\xe5\x29\x61\x79\x5a\xb9\x57\xe0\xf7\x62\xf4\x95\x2f\xb4\x88\xe1\x1f\x95\x9e\xfc\x6d\x69\x81\x61\xc6\xba\xef\xa0\xb5\x57\x13\x6a\xa2\x39\x4d\x62\x41\xd8\x89\xc2\xf2\x71\x4c\x3e\x93\x28\x37\x77\xf2\x3f\xcb\x3f\x8c\xb5\x64\xca\x63\x52\xfe\xa5\xf4\x8f\x42\x14\xda\xf8\x53\xaf\xa5\x6e\xfc\x25\xe8\xb4\xed\xbe\x83\x5f\x68\x5c\xfb\x36\xfc\xb2\x66\x0e\xee\x9d\x15\x83\x75\xaf\x34\x8e\xca\xbd\x60\x25\xbe\xda\x77\x04\x51\x62\x31\xc6\x4a\x91\x34\x53\x1b\xea\xeb\x18\x25\x5a\xae\x5c\x25\x47\x5e\xf1\x98\x0c\x5c\x7f\xbf\x20\x23\xce\x92\x18\x4d\x16\x96\x6b\x4d\x89\x20\x2c\x22\xcd\x2d\xdc\x63\xf9\x58\xb4\xb0\x4e\x18\x2d\xf5\x27\x3f\x72\xa1\x3f\x7f\x0f\x02\x69\x69\xe0\xaf\x21\x93\x6e\x7b\xe2\xbe\x38\x0b\xc1\x96\xfc\xa3\xb3\x27\xec\xbe\x92\x6d\xad\x0f\x5c\x20\xb9\x90\x8a\xa4\x6b\xed\x10\xef\x67\x21\xec\x05\x71\xa8\x03\xae\xdc\x51\xbf\x81\x53\x5f\xbe\x71\xbb\xe3\xbd\xc1\x92\xed\xcb\x8a\x78\xe8\xf3\x74\x3e\x9c\xd5\x53\xbd\x73\xdb\x17\x38\x31\xde\xc5\x34\x4b\xb2\xe0\xbe\x07\xf9\x42\xe6\x86\xc6\xbd\x72\xab\x3d\x86\x01\xac\x51\x34\xcb\x76\x68\x7f\xfe\xf4\xa7\xa1\x85\xc6\x98\xe3\xd4\x9c\xca\xc0\x58\x85\x22\x2e\x8c\x2c\x18\xdb\xf3\x6e\x74\xcd\xfe\x7d\xff\x6e\x70\x7f\x8a\xfa\x28\xc6\x0a\xeb\x03\x2e\x48\x26\x88\x24\x4c\x81\x1e\xaf\xbf\x57\x0b\x94\xf2\x98\x24\x46\xe3\xfc\xa8\x25\x5f\x74\x8e\x15\x3e\xc3\x0a\x27\x7c\x76\x8c\xfa\xf0\x4f\xfd\x31\x95\x08\x27\x92\x23\xec\xc8\x8a\xc4\xae\x09\xcc\x62\xc7\x5a\x30\x8a\x78\x9a\xd1\xc4\xdb\xe0\xbd\x71\x85\xb2\x98\x3e\xd1\x38\xc7\x09\xe2\x13\xcd\x55\xb4\x86\x3c\x78\x22\x4c\xe5\x38\x49\x16\x08\x27\x09\xb2\xdd\xba\x17\x90\x9c\xf3\x3c\x89\x75\xbb\x6e\x94\x92\xa6\x34\xc1\x42\xab\xe0\x66\xb4\xd7\xb6\x2d\x74\x3f\x27\x7e\xac\x30\x2e\xbd\x9a\x29\x7e\x24\x12\x51\x85\x32\x2e\x25\x9d\x24\xc5\x99\x7f\x18\x22\x18\xf7\xd9\xc5\x10\xf4\xf9\x48\x21\x6e\x78\xa8\xeb\xdc\xda\x6f\x5c\x8f\x29\x66\x8c\x40\xc7\x5c\xcd\x89\xb0\xdd\xdb\x97\xdf\x5a\x35\x7f\xb8\xba\xbb\x19\x9c\x0d\x3f\x0e\x07\xe7\xcb\xba\xf9\x7d\xff\xee\x87\xe5\x5f\x7f\xba\xbe\xfd\xe1\xe3\xc5\xf5\x4f\xcb\x4f\x2e\xfa\x0f\x57\x67\xdf\x8f\x6f\x2e\xfa\x57\xcb\x0f\x2d\x59\xb5\x56\xf3\xc3\x91\x6d\x78\xb6\x3a\x9b\xe6\x4b\xd9\x34\x7b\x5f\xae\x51\x73\x4a\x13\xd0\x41\x5b\x1b\x34\xbd\x0d\xc1\x7e\x89\x32\x2c\xa5\x91\x8c\xcc\x08\x8e\x47\xec\x92\x0b\xcd\xc0\xa6\x5c\xf3\x08\x2d\x3d\x29\x91\x47\x8a\xb2\x99\xff\xe8\x14\x8d\xf2\x6f\xbf\xfd\x53\x74\x41\xd9\x23\xfc\x45\x0e\x71\x71\x3a\x8b\x6f\x67\xf1\xfd\x6d\x59\x7c\xb5\xe8\x73\x12\x1a\x7a\xf7\x1b\x32\xa4\x85\x0b\x96\xe5\x0a\x44\x09\x9e\x2b\xfd\xa7\xee\x12\xc8\x63\x45\xe0\x50\x3b\x83\xe2\x27\xa2\xfc\x8b\x5a\xb4\x79\x0f\x76\xc4\x9f\xb8\x78\x9c\x26\xfc\xd9\x0f\xfc\x13\x51\x7a\xec\xb7\xb6\x97\x2e\x94\xa8\x0b\x25\x7a\xdb\x50\xa2\x83\x32\xe6\xbd\x3c\xf3\x2b\x5b\xfe\x0c\x07\x6c\xf0\x64\x35\x3a\xaa\x1a\xfc\x50\x81\x9b\xe9\x55\xb8\x66\xd9\x99\xb3\x86\x73\x96\x5e\x7e\x2f\xdc\xb3\x34\xe8\xd7\xe7\x9c\xbf\x09\x7f\x4b\xe7\x4e\xd9\x72\xa1\xde\x25\x83\x6d\x79\x77\xbc\x9a\x33\xe4\xe5\x19\xfe\x52\x6c\xc3\x26\xc1\x0c\x1b\x44\x2f\xb4\x0e\x57\x58\x13\x9f\x50\x1b\x90\x50\x17\x81\xb0\x1c\x72\x50\x1b\x63\xb0\x5b\x50\xc1\xb6\x77\x53\xfb\x30\x81\x4f\x44\x95\x5e\x7e\x2f\x77\x53\x69\xd0\xaf\x7f\x37\xfd\x46\xa3\x03\xba\x70\x80\x17\x5c\xba\x2f\xfd\x46\x3b\x5c\x87\xff\x6f\xc0\xc3\xdf\xb9\xf4\x37\x5a\xa3\x2f\xcb\x87\xff\xa5\x3a\xed\xdf\xa7\x97\xbe\x73\xcb\x77\x6e\xf9\xb7\xf0\x9f\xbc\x3f\xb7\xfc\xcb\xaa\xa7\xc5\xf1\x1a\x3b\x5a\xb0\xfa\x5a\x70\x28\xff\xd5\xc2\x49\x03\x7f\x39\x95\x6f\xd3\xa0\xf1\x46\x1d\xee\xbc\x18\xdf\x00\x8e\xd0\x2f\x96\x90\xd6\xa8\x73\x4b\xdf\xbd\x07\x75\x6e\x79\xd0\x2f\xaf\xc3\xbd\x19\xf3\x7d\xa1\xcb\xf3\x9d\xb0\x81\xcd\x6f\xcb\x2f\x58\x26\xef\x64\xf1\x97\xcf\xc6\x3f\x98\x09\xbd\x1f\xd9\xfb\x0d\x2e\xde\x96\xb7\xee\xde\x73\xb2\x6a\xae\xd9\xe0\x76\x5a\x97\x61\x55\xfd\x9a\x12\xf9\xc7\x77\x79\xdf\xbe\x46\x92\x55\x77\xe1\x76\x17\xae\x6d\xaa\xbb\x70\xbf\xe0\x0b\xf7\xe0\xe0\x6f\x0e\x26\x02\xb4\x0b\x22\xef\x80\x31\xba\x18\xf2\x3d\x2e\x4e\x17\x43\xde\xc5\x90\xff\xc6\x62\xc8\x77\xd1\x9e\xb6\xc5\xa2\x7c\x0b\x3d\xaa\x53\xa3\x3a\x35\x2a\xfc\xbd\x53\xa3\x3a\x35\xaa\x53\xa3\xbe\x70\x14\xd1\x4e\x87\x6a\xbf\x10\x9d\x0e\xd5\x7a\xa9\x3a\x1d\x6a\xc5\xe2\x74\x3a\x54\xa7\x43\xfd\xb6\x74\x28\xf2\x44\x98\x92\x90\x8c\x16\x6a\x14\x1f\x32\x2e\x9b\x35\xa1\x90\x3b\xd4\x68\x41\xd0\x66\x39\x29\x0c\x02\x97\x7e\x41\x73\x2c\x11\x8f\xa2\x5c\x54\xce\x40\x55\x0f\x3a\x13\x04\x2b\x02\x2d\xe8\x0f\xdf\x83\xfe\xb3\x3c\xdd\xd7\x8a\xc1\x9f\xf0\x78\x89\xda\xcd\x41\xa8\x7b\xb2\x5a\x1e\xd9\xdb\xd4\xff\x91\x93\x76\xea\xdf\x0b\x12\xb5\xc2\xf2\x71\xcf\x44\x5d\xca\xb5\xd8\x8a\xa8\xa1\x85\xf7\x42\xd4\xcb\xd3\xfd\xcd\x10\x75\xdd\xd4\x0f\x81\xa8\x9f\x6d\x1e\xff\x9e\x09\x7b\x09\x1e\x60\x2b\xe2\xf6\xad\xbc\x17\x02\xaf\x9f\xf6\x6f\x86\xc8\x9b\xa6\xff\xb6\x84\xee\x53\x24\x5b\x93\xf8\xbd\xa0\xb3\x99\x56\x33\x40\xc3\xd3\xa4\xb8\xbe\x46\x50\x91\x14\xb8\x96\xac\xfd\xab\xef\x81\xa4\xfd\x60\xcd\xd8\x7f\x33\xb4\xbc\x34\xef\x03\x21\xe2\x13\x41\x22\xfe\x04\xf5\xc2\xda\x11\xf3\x2d\x01\x0a\x06\x7e\x9d\x09\xf2\x44\x79\x2e\x93\xc5\x91\xc8\x19\x72\xcc\x1f\xf9\xe6\x8d\xb5\xfa\x99\x26\x09\xe2\x4c\xeb\x5f\x0a\x0b\xe5\x1e\x6b\xfd\x5b\xf0\x14\x4e\x45\x82\xa5\x42\x8f\x8c\x3f\x33\x34\xc5\x34\xc9\x05\x41\x19\xa7\x4c\x1d\x8f\xd8\x90\xa1\x5b\x33\x46\xc8\x1b\xe8\xa1\x5c\xea\xb3\x14\x61\xc6\xb8\x42\xd1\x1c\xb3\x19\x41\x98\x2d\x6c\x02\x6e\x41\x19\x88\x0b\x94\x67\x31\xd6\x8a\xef\x9c\x54\xa3\xf4\xfc\x18\xc1\x7c\x47\x25\xa2\x12\x91\xcf\x4a\x90\x94\x24\x0b\xdd\x87\xa6\x7d\xc5\x91\x5d\x1f\x33\x54\x9b\xce\x47\x84\xe0\x42\x42\xc6\xc1\x64\xf1\x2b\x66\x8a\x32\x82\x40\x51\x92\xc6\x34\x77\x84\x2e\xb8\x04\xb3\xcd\x0f\x7f\x91\x28\x4a\x72\xa9\x88\xe8\xa1\x49\x3e\x93\x5a\x53\xcc\x12\xac\xa6\x5c\xa4\x7a\x84\x94\x49\x85\x27\x34\xa1\x6a\xd1\x43\x29\x8e\xe6\xa6\x2d\x58\x03\xd9\x1b\xb1\x98\x3f\x33\xa9\x04\xc1\xbe\x77\xf7\x10\x7d\x1d\x3e\x33\x04\x20\xbf\xe9\x41\xda\x21\x4d\xb5\xba\x1b\x0c\xbf\xd8\x71\xb3\x27\xba\x11\x12\xa3\x09\x89\x70\x2e\xad\x87\x41\x89\x05\x22\x9f\xe7\x38\x97\xb0\x77\x7a\x7a\x36\x67\x23\xe2\x69\x96\x10\x45\x10\x9d\x22\x25\x28\x89\x11\x9e\x61\xaa\x97\xee\x8e\xac\x00\x41\xf7\x44\x6f\x37\xd0\x52\xfd\x2f\xa0\x7e\xa7\x5c\x10\x14\x13\x85\x69\xb2\xd2\xeb\x64\xbf\xed\xb8\xdc\x7b\xe2\x72\xe5\x0d\x3f\x08\x36\x67\x40\xfc\xf7\x70\x69\x33\x6b\xba\x8f\x70\xb2\xe3\xfd\x7d\x6b\x07\xd5\xd1\xf6\xfb\xa2\x6d\xb3\x6b\x87\x43\xdc\xaf\x16\x83\xdd\xbe\xa2\x45\x51\xcd\xe2\x5d\xd1\xf4\x6b\x84\x05\x74\x0e\xe7\xce\xe1\xdc\xb8\x32\xef\xd3\xe1\x7c\x30\x1e\xa3\xce\xe7\xfc\x42\x3e\x67\x2a\x3b\xa7\x73\xe7\x74\x6e\xbb\x40\x9d\xd3\xb9\x73\x3a\xbf\x5f\xa7\xf3\x4b\xe2\x3e\xef\x15\xdd\xf9\x5d\x89\xd6\x9d\x58\xdd\x89\xd5\x1d\x84\xb3\x9f\xda\xbe\x58\x98\xfb\xfa\x43\x4c\x12\xa2\x48\xb3\x3d\x8b\x88\x54\x6b\x0b\xe6\x7a\xa6\x4c\xcb\x71\x33\x41\xa4\xdc\x95\x21\xf9\x86\xdf\x27\x5b\xf2\xc3\xef\xa0\xe6\x3b\x3e\xd5\xf1\xa9\x6d\xa6\x76\x38\xa6\xd9\xe0\x30\xbf\x96\x6d\xd6\xf3\xdf\x2c\x6f\x96\xfe\x1e\x8c\x1b\xb2\xf0\x8b\x1a\x0a\xd7\x52\xbb\xe2\xfe\x70\x5b\x3a\xdf\x91\x1f\x9b\xbe\xde\x27\x33\x36\x63\xef\x38\x71\xc7\x89\x3b\x4e\xfc\xbe\x39\xb1\x3b\xc9\x6f\xea\x22\x33\x7e\xba\x71\x96\x60\x36\xa6\xb1\x3c\xf9\x67\xa1\xcb\xbf\x94\x87\x4c\x1f\xa8\xd8\xa4\x98\xfa\x94\x4e\xf1\x8b\xfe\x24\x29\x0c\xe6\x1e\x33\x73\x8d\x13\xcd\xd8\xd8\x6f\x12\xcc\x86\xf1\xbb\xf0\xa3\xd5\xce\xfe\x35\x7c\x6a\xbb\xf0\x71\xac\xc0\xd3\x81\x29\x33\x26\xbc\x22\xaf\xb6\x64\xa0\x3c\x8c\x13\xbe\x0b\x57\x0f\x26\x16\x30\x76\xc7\xaf\x83\x45\x39\xbc\x69\x77\x7e\x9d\x2e\x97\xb0\xf3\x5c\xb4\x9c\x70\xe7\xb9\x38\x5c\xcf\xc5\x5b\xb9\x23\x5f\xf9\x78\xbe\x96\x58\xd7\x3e\x08\xdf\x44\xab\x41\x50\x6b\x9e\x25\x1c\xc7\xab\x5c\x31\x85\xe0\x15\x82\xa3\xac\x8d\xc4\x2f\x3e\x7b\x0f\xc2\x5a\x31\xda\xdf\x58\x24\xdf\xf2\xc4\x0f\x45\x4b\x79\xc5\x50\xbe\x7a\x12\xdf\x40\x25\x79\x1f\xf8\xa9\xc5\x78\xbb\xd0\xbe\xce\xa2\xf4\xf6\x16\xa5\x2e\xb4\xaf\x53\x01\x0f\x4c\x05\xec\x42\xfb\xba\xd0\xbe\x4e\x41\x5e\x3d\xed\x4e\x41\xfe\x22\x42\xfb\x5a\x89\xda\x2f\x88\xbd\xb9\xbb\xd0\xdd\xc9\xdc\xee\xbd\x4e\xe6\xee\x64\xee\x2f\x54\xe6\x3e\x8c\x15\xee\x04\xee\x4e\xe0\xee\x04\xee\x4e\xe0\xee\x04\xee\xbd\x2f\x63\x27\x70\xbf\x66\x81\xce\x7a\xa9\x7b\x4d\x92\xcd\x7b\xf5\xe5\x74\xe2\x76\x27\x6e\x1f\xb6\xb8\x7d\x30\x13\x7a\x3f\x65\x1e\xdb\xcd\xa7\x2b\x52\xde\x15\x29\xef\x8a\x94\xbf\x78\x91\x72\xf7\x75\x8b\x8c\x0f\x7b\xb8\x14\x56\xb9\x34\x80\x8f\x82\xcc\xa8\x54\xc0\xfe\xdb\xc8\x2b\xeb\x13\x3d\xde\xab\x9c\xd2\xa5\x7a\xf8\xa7\x9d\xd4\xd2\x49\x2d\xbf\x51\xa9\xe5\x80\x62\xc1\x0e\x22\x63\x25\xc5\x2a\x9a\xe3\x49\x42\xc6\xde\xe8\x23\xdb\xea\xc1\x17\x54\x2a\x89\xa2\x5c\x2a\x9e\x36\x5f\x2e\x97\xae\x87\xbe\xef\xe0\x8c\xb3\x29\x9d\xe5\xe6\x6e\x31\xe0\x9c\xc1\x89\x2e\x24\xc1\x45\x46\xd6\x79\xaa\x6a\x5a\x7f\x17\xd7\x52\xfd\xd0\x5f\xeb\x76\xda\x44\x70\x2f\x8c\x7c\x56\xea\xd6\xb2\xd6\xf8\x76\x70\x77\xfd\x70\x7b\x36\x38\x45\xfd\x2c\x4b\xa8\xb1\xbb\x1b\x52\xa0\xbf\xea\x49\x21\x85\xe5\x63\xb1\x97\xc2\x90\xb9\xc1\xb0\x05\x43\xbf\x96\x8d\xd1\x11\x3a\xbb\x78\xb8\xbb\x1f\xdc\x36\x34\x68\x09\x05\xf2\x56\x49\x9a\x25\x58\x91\x18\x3d\xe6\x13\x22\x18\xd1\xd2\x8e\x45\xba\x2d\xcc\xff\xa6\xd1\xc1\x7f\x0f\xce\x1e\xee\x87\xd7\x57\xe3\xbf\x3e\x0c\x1e\x06\xa7\xc8\x51\x9c\x6e\x56\x8f\x4b\x8f\x22\x5e\x30\x9c\x6a\x0d\x44\xff\x50\x64\xca\xfe\x23\x27\x39\x41\x58\x4a\x3a\x63\x29\x01\x44\xe0\x52\x8b\x6e\xc0\x17\xfd\xef\x06\x17\xe5\x96\xe7\x24\x84\xdf\x45\x09\x9e\x90\xc4\xfa\x23\xc0\xc4\xae\x09\x3d\x80\x2a\x36\x8e\x8a\xdc\xac\xea\x5f\x1f\xfa\x17\xc3\xfb\x9f\xc7\xd7\x1f\xc7\x77\x83\xdb\x1f\x87\x67\x83\xb1\x95\x2a\xcf\xfa\xba\xdf\x52\x4f\x56\xf8\x44\xff\xc8\x71\xa2\xb5\x13\x3e\x75\x78\xbc\xe8\x79\x4e\x18\xca\x19\x50\x9c\x51\x79\xb4\x1e\xe4\x3b\xd5\xa7\xcc\xcc\xe8\xe6\xe2\xe1\xd3\xf0\x6a\x7c\xfd\xe3\xe0\xf6\x76\x78\x3e\x38\x45\x77\x24\x01\xa5\xc0\x2d\x3a\xec\x62\x96\xe4\x33\xca\x10\x4d\xb3\x84\xe8\xd5\xc0\x36\x9b\x78\x8e\x9f\x28\x17\xf6\xe8\xce\xe8\x13\x61\x66\x1d\xe1\xcc\x42\xfb\x4e\xf8\x1e\x07\x4b\x77\x7d\xf5\x71\xf8\xe9\x14\xf5\xe3\xd8\xcf\x41\x42\x1b\x25\xca\x71\xb0\xce\x47\xe5\x61\x6b\xe6\x00\xdd\x1b\x22\xe2\x4f\x44\x08\x1a\x93\x0a\x1d\xf5\xef\xee\x86\x9f\xae\x2e\x07\x57\xf7\xb0\x62\x4a\xf0\x44\xa2\x39\x7f\x06\x53\x36\xcc\x10\x2c\xdc\x4f\x98\x26\xd0\x99\xdb\x2c\xce\xd0\xf3\x9c\x82\xfb\x03\x80\x99\x7d\xcf\x46\x3f\x13\x39\x7b\x73\xeb\x6c\xe9\xe0\x2d\xab\x2d\xd5\x93\xb4\xfc\x46\xe5\x58\xac\x7a\xa1\x44\xe5\xcb\x2f\xae\xa3\xd6\xe5\x2f\x2a\xe4\xd6\xac\xac\x2d\xd1\x4b\xf3\x4c\x8b\xbd\x6e\xad\xab\x95\xd7\xf0\xf5\xae\x59\xa2\x04\x8d\xe4\xcb\x42\x3d\x89\x9c\x29\x9a\x12\x64\x3b\xb3\x87\x73\x8f\xf0\x4f\x97\xa6\xe1\xf7\x70\xc1\x2e\x95\x72\xf8\x44\x94\x1d\x7e\xa7\x02\x76\x2a\xe0\x61\xa8\x80\xef\x2d\xdb\x3f\x26\xd9\x72\x87\x95\x89\xc1\x3b\xc6\xeb\xb5\x14\xa4\x61\xec\x89\xd6\xa2\x9a\x90\x27\x92\x80\x94\xa7\x04\xd6\x4a\xa3\x95\x5d\x26\x82\xe0\x47\x2d\xf0\xc5\xfc\x39\x94\x5c\x6a\x90\xfb\xd1\x7e\x6e\xe1\x36\x41\x1c\x7f\xfa\xe3\xeb\x5d\x16\x7a\xb9\xe3\xd7\x28\xe1\x7d\x0b\x41\x32\x2b\x31\x02\x83\x04\xfb\x5f\xac\x25\x78\xcd\x6d\x11\x7c\xf1\x1e\x2e\x8a\x70\xb8\x07\xa4\x75\xdd\x86\x4a\xb0\x63\xa1\x29\x51\x38\xc6\x0a\xeb\x43\x33\x23\xea\x18\x5d\x33\x78\x76\x8f\xe5\x63\x0f\xb9\x2b\x4f\xb3\x95\xc2\xca\xf0\x0a\xa9\xf5\xef\xc4\x80\xbf\x39\x1f\xef\xae\xef\xee\xfa\xae\x5f\x99\x2e\xcc\xb3\x61\x85\xf7\x75\x31\x6e\xe4\xf3\xda\xdf\xfd\x65\x5a\x7c\xbf\x57\xd8\xeb\x3a\xb9\xf6\x7a\xa1\x99\xca\x59\xdd\x6d\x65\xfe\xaf\xbb\xad\xba\xdb\xaa\xbb\xad\x0e\x60\x85\xdf\xdc\x61\x58\xc3\xdd\xdf\xd4\x63\xb8\x4e\x3b\xdd\x1a\xf2\xae\xd0\x46\x37\x01\xbd\xfb\xa5\x2d\xb6\x5d\xf1\x0d\x7d\x1f\x3e\xc2\x60\x92\xaf\x91\xd6\xb6\xd7\xcb\xdc\xe4\x8b\x74\xfa\xe9\x0b\xde\xf8\x1d\x02\xe1\x5e\x11\x08\x0f\x63\xae\x2f\x92\x02\xf7\x36\x16\xd3\xb7\x4f\x7b\xeb\xa0\x06\xbb\xc4\xae\x2e\xb1\x0b\x7e\xef\xa0\x06\xf7\x47\xad\x2f\x2b\x5d\xf3\x98\x8c\x2b\x51\x02\xfe\x9f\xe3\xaa\xe7\xa7\xf4\x24\x74\x03\x95\x1e\x14\x99\x6e\xd0\x3a\x8d\xf7\x59\x44\xea\x8a\xc7\xa4\x75\x24\x41\xe9\xe5\x03\x97\xc1\xdd\x3c\x8d\x2c\x5e\x1a\xf8\x0b\x4b\xe2\x0d\x5b\xfe\x25\x1a\x76\x6a\x08\xb8\xb3\xf2\xac\x5d\xa8\x2f\x35\xbe\xa0\xe0\x50\xef\xc8\x53\xd1\x8e\x8d\xbb\x98\xc6\x71\x03\x33\xaf\x7f\xee\x59\x7a\xfd\xe3\x97\xc1\x0c\x6a\xcf\xd1\xc1\xac\x12\xbe\xfd\x3e\xec\x2a\xe1\x88\x5f\xc3\xb2\xb2\x72\xef\xbf\x38\xae\xbe\x8a\x92\x3b\xde\xde\x72\xb9\xbe\x54\x0e\xdf\x41\xfc\xac\xb2\x75\x74\x18\x3a\x9d\xa9\xe5\x70\x26\xdc\x99\x5a\xde\xb5\xa9\xc5\xb8\x68\xc7\x19\x16\x84\xa9\x1a\x91\xba\x7a\x9d\xc0\xeb\x21\xe6\x82\x93\x3a\xa0\x01\xa4\x25\x5a\x64\x2f\x64\x7f\x55\x7d\x59\xb6\x17\x2b\x18\x04\x99\x90\x27\xff\x2c\xfe\xf6\xc2\x7a\xa9\x02\xc4\x8a\xe8\x24\x83\xf5\x2f\xf5\x1d\x9d\xdb\x40\xa5\xdd\x73\x25\xb1\x2a\x89\x82\x10\x44\xbd\x36\x9e\xe9\xc6\xbc\xfd\xbe\x52\x24\x97\x06\xfd\xba\xb1\x4d\xcb\x1b\xdf\xee\x00\xb9\x9d\xa1\x26\xdd\x2f\xc8\x29\xd3\xd2\x28\x9f\x16\x17\x83\x44\xcf\x34\x49\x00\x51\x04\x32\x1e\x9b\x6e\x80\xdf\x5c\xc4\x43\xe3\xce\xbf\x69\xdc\x43\x1d\x77\xa8\x63\x09\x6d\xec\xa9\xfb\xca\x99\x76\xc4\x06\xe9\xac\xa0\x0d\xad\x31\xc0\x7e\x19\x9c\xe0\x13\x51\xaf\xc5\x06\xb6\x3d\xfb\x2b\xcf\xbd\x20\x53\x22\x08\x8b\xc8\x01\x7a\xdb\x37\x09\x03\xf9\xc9\x4c\xd2\xc6\x80\x78\x28\x81\x70\xaa\x8a\x5b\x3d\xad\x24\xea\x76\x99\xe4\x5d\x26\x79\x97\x49\x5e\x3d\xea\x5d\x26\x79\x97\x49\x5e\x9b\x03\x11\x93\x84\x28\xd2\x28\x55\x9c\xc3\xe3\xb7\x92\x2a\x4c\xef\x5f\x86\x60\x61\xe6\xd2\xc9\x16\xbf\x19\xcd\xc2\x6d\xf8\x41\x68\x16\xe6\xac\xad\x33\x3f\x94\x7e\xac\x09\xb1\x7e\x75\x93\xc4\x36\x4c\xa3\x64\x97\x38\x87\xd7\xdf\x25\xeb\xa8\x0e\xbd\xb3\x51\xa0\x60\xeb\x5e\x8e\x93\x2c\x1d\x81\x76\x13\xb7\x1e\xc3\xf7\x3b\xef\x43\xe1\xa0\x4d\x74\x7f\xa8\x7c\x74\xeb\xa4\x94\x43\xb1\xd8\x7c\x41\x3c\xb2\xb3\xde\xbc\x71\xae\xc4\x12\x33\x7c\xb7\xd3\xed\x8c\x55\x9d\xb1\xaa\x33\x56\x75\xc6\xaa\xce\x58\x85\x3a\x63\xd5\xc6\xc6\xaa\x2f\x48\xa6\xea\x0c\x57\x9d\x58\xb5\xbf\xe9\x1e\xaa\x96\x79\x48\xd6\xba\xd6\x28\xe9\x45\x0e\xd5\xda\xc8\x7b\x3b\xed\x5f\xd6\x84\xdc\xdf\xb8\x11\xbc\x1f\x7e\x25\x5f\x9a\x25\xed\x12\x58\xec\x76\xf4\x8b\x8d\x2b\xee\x4a\x87\xd6\xae\x55\x17\xf6\xbc\x62\x71\xba\xb0\xe7\x2e\xec\xf9\xe0\xc2\x9e\xf7\xae\xac\x64\x5c\xae\x02\x24\x32\xa5\xb3\x56\xe6\x3f\xbb\x3b\x1b\x12\x8d\x80\x14\x0c\xca\x71\x4c\xb2\x84\x2f\xc0\x92\xb2\xe2\x3a\x77\x5d\xdc\x2c\x49\xd4\x87\x7e\xa3\xbb\x91\xbf\x96\xce\x71\x28\x32\x69\x31\xef\x83\x90\x42\x4f\xfe\x59\x49\xe7\x6f\x85\x97\xc9\x10\xf9\x4c\x25\xdc\x4a\xeb\x09\x7b\xc4\xea\x9f\x04\xa5\x0b\xed\x3d\x38\xc9\x55\x90\xbb\x27\xb5\x60\x95\x11\xa1\x16\xc1\x9b\x24\xcd\xd4\xe2\xbf\x46\x8c\x2a\xef\x61\xa3\x33\xc6\x85\xe1\x6a\xfa\xe3\x39\x66\x71\x42\x84\xbe\x54\x5d\x3b\x11\x66\x8c\x2b\x10\x37\x60\x06\x31\x7a\xa2\xd8\x08\x27\xfd\x9b\x61\x6b\x3f\xf3\x3b\x3a\x5d\xaf\x5d\xac\x6e\xcd\x5d\xf7\x29\xe1\x13\xa8\x60\x99\x97\x75\x7a\xdd\x40\xe7\x19\x2d\xed\xdc\x5b\x31\x04\x85\xe5\x63\x15\x38\xa4\x9c\x85\x3e\x5e\x09\x25\xb2\xe6\xdd\x12\xc6\xfc\xea\x57\x2b\x70\x23\xe5\x67\x16\x80\x04\x1e\xc3\x90\xab\xe3\x70\x3f\x86\x1d\xba\xdf\x8a\x96\xdd\x2f\xae\x74\x37\xfc\x28\x88\x12\x8b\x31\x56\x4a\x33\x99\x7d\x62\x9c\xdc\x63\xf9\xd8\x1a\xe3\xa4\xf4\xf2\x81\xb3\x9c\x12\xc6\x49\x79\xe0\x2f\xce\x72\x5a\x52\xe7\x1a\xce\xf4\xfe\xf2\xe3\xdb\x9e\xb5\x0d\x26\xfe\x5b\xc9\x95\x6f\xc7\x7b\xd6\x99\x69\xdf\x63\xde\xfc\x2a\x66\x7a\x30\x23\xac\xf0\xf3\x2f\xf1\xe4\x96\x6f\xa7\xee\x88\xae\x5a\xa3\x2f\xae\x10\x6e\x45\xe8\x58\x33\xb7\x77\x52\x10\xb7\x2a\x37\xed\x7b\x54\x2f\x63\xe6\x0e\x76\x63\x93\x18\xa0\x61\x19\xad\xdc\x9f\x21\x17\x15\x54\x94\x9e\x9d\x43\xa2\x35\x95\x61\x42\x7c\xc4\x85\x91\xbc\x62\x7b\x66\x8d\xd9\xce\x80\xf9\x9e\xa2\x3e\x8a\x6d\x6d\x7e\x41\x32\x41\x24\x61\xca\xa8\xda\xa6\xde\x95\x2b\xef\x4f\x99\xb5\x10\x9d\x63\x85\xcf\xb0\xc2\x09\x9f\x1d\xa3\xbe\x2f\xec\x4f\x25\xc2\x89\xe4\x08\x3b\xc2\x21\xb1\x6b\x02\xb3\xd8\xb1\x07\x8c\x22\x9e\x66\x34\xf1\x48\xed\xde\x8a\x4f\x59\x4c\x9f\x68\x9c\xe3\xc4\x23\x63\x8f\xd8\xe0\x89\x30\x95\x83\x0a\x87\x93\x04\xd9\x6e\xdd\x0b\x81\x7e\xee\x46\x29\x69\x4a\x13\x2c\x90\xe2\x76\xb4\xd7\xb6\x2d\x74\x3f\x27\x7e\xac\x0e\x05\x1c\xa5\xf8\x91\x48\x44\x15\xca\xb8\x94\x74\x92\x14\xc7\xf8\x61\x88\x60\xdc\x67\x17\x43\x30\x8d\x46\x0a\x71\xc3\x07\x5d\xe7\xd6\x4f\xe0\x7a\x4c\x31\x63\x04\x3a\xe6\x6a\x4e\x84\xed\xde\xbe\xfc\xd6\x56\xce\xb7\xc6\x88\x6e\xb6\x98\x86\x23\x7b\x3b\xa5\xb3\xb5\xc6\xd9\x56\xdd\x6c\xa7\x6b\x36\x2b\x9a\x2f\xe0\xa5\x6d\xaf\x0d\x5e\x50\x59\x56\x07\xdf\x85\xcb\xb6\x34\xe2\xd7\xc0\x47\xfb\x8d\x2a\x82\x9d\x16\xf8\x22\xeb\xf6\xa5\xaa\x80\x07\xae\xff\x75\xc8\x6e\x1d\x8a\x7d\x17\x80\xb1\xc7\xc5\xe9\x02\x30\xba\x00\x8c\x2f\x36\x00\xa3\x59\x9b\xa0\xf1\xce\xe9\x7a\x1b\x56\x90\xf2\x46\x01\xf1\x0b\x88\x52\x58\x3e\xb6\xad\x29\xa5\x45\xe5\x61\xfc\x2e\xa4\xfa\xda\x09\xbf\x86\x74\xdf\xd5\x29\xda\x6b\x9d\xa2\x83\x9b\x76\x27\xf8\x75\x82\x5f\x27\xdb\xb4\x9c\x70\x27\xdb\x1c\xae\x6c\xf3\x56\x0a\xcb\x97\x04\xa1\xab\x85\xa7\x52\x66\xcc\xca\x00\x5b\x03\x47\x03\xee\x81\x3c\x4b\x38\x8e\xd7\x05\xe1\xfc\x82\x0a\xb9\x66\x85\x68\x66\xda\xd5\x1f\x1c\xb8\x64\xb6\x14\x7f\x63\x46\xfe\x5b\x88\xa9\x6d\x9c\xfa\x9b\x86\xd5\x02\xfd\x42\x30\x59\x29\x28\xed\xa5\xb4\x90\x2a\x4d\xb7\x52\x38\xe4\x1f\x0f\x9c\xaa\xfd\x96\xbe\x86\x7a\xf1\x05\x3b\x08\x3a\x27\xc0\x6f\xb3\xf0\xf9\xc1\x48\xad\x9d\x6a\xd7\x65\x55\x76\x46\xfd\x4e\xf1\xed\x14\xdf\xbd\x2f\xe3\x21\x29\xbe\x6f\x28\x51\x9b\x34\x91\x17\x29\x63\xb8\x9d\x6c\xdd\x89\xd6\x9d\x68\xdd\x89\xd6\x5f\xac\x68\x7d\x18\x2b\xdc\xc9\xd5\x9d\x5c\xdd\xc9\xd5\x9d\x5c\xdd\xc9\xd5\x7b\x5f\xc6\x4e\xae\xae\xc8\xd5\xf0\x97\x4b\x93\xde\x54\xc8\x6e\x2d\x5c\xb7\xc8\x89\x7e\x2f\x92\x75\x27\x55\x77\x52\xf5\x61\x4b\xd5\x07\x33\xa1\x2f\x2f\x11\xb2\x4b\x25\xec\x52\x09\xbb\x54\xc2\xb7\x48\x25\x74\xbc\x64\x95\x84\xb2\x2c\x58\xfc\xb8\xc4\x81\x0e\x56\xb6\x28\x46\xbb\x6d\x78\xc7\xbe\x96\xda\x01\xcd\x6f\x53\x69\xaa\xf4\x9b\x6b\xe8\x80\xea\x4f\xf5\x9c\xb4\xa0\x19\x85\x1b\xdf\x7a\x84\xb0\x9f\xec\x9b\xef\x0b\x0c\x7c\x79\xd4\x5d\xfd\x29\x14\xec\x5a\x57\x7f\xea\x05\xe7\xed\x0e\xd7\x9a\x99\x3b\x1a\x35\x36\xde\x77\x3a\xed\x37\x07\x97\x6b\x3e\xe9\x6f\x1a\x2e\x57\x7b\x93\x2c\x25\xef\x9c\xfc\xb3\xf6\xa2\x78\x83\xb2\x5b\x1b\xdf\x0e\x9f\x88\xfa\x52\xae\x86\xae\xec\x56\x57\x1f\x62\x4f\xd3\xdd\x8a\xf5\xbf\xdb\xd9\x76\x45\xc6\xba\x22\x63\x5d\x91\xb1\xae\xc8\x58\x57\x64\x0c\xfd\xc6\x8b\x8c\x6d\x2c\x3e\x9a\x71\x7c\x29\x12\x64\x57\x64\xac\x13\x22\xf7\x37\xdd\xdf\x96\x10\x79\x80\x16\x84\x83\xa8\xa6\xe6\x2d\x08\x6f\x8e\xfb\xe1\x46\xd2\x16\xfb\xc3\x2d\x68\x87\xff\x61\xff\xaf\xc3\xff\xe8\xf0\x3f\x1a\x66\xdd\x05\xb3\x76\xf8\x1f\xa8\x0b\xd7\xec\xc2\x35\x0f\x39\x5c\xb3\xc5\x36\x76\xf8\x1f\x2d\xc5\xb9\x17\xc2\x00\x71\x32\xd7\x46\x38\x20\x3f\x2d\x2b\x1a\x07\x2b\xa5\xb9\xb1\xfe\x76\x70\x40\x6a\xa7\x7d\x10\x2a\xc9\x2b\xe2\x80\xd4\xd1\x75\x6b\x05\xe4\x7d\xe0\x81\xb8\xd1\x76\x89\x8b\x5d\x88\xf5\xe1\x87\x58\x1f\x5c\xe2\xe2\xc1\x48\xb2\x9d\xba\xd7\xe5\x2e\x76\xb9\x8b\x9d\x32\xdc\x29\xc3\x7b\x5f\xc6\x43\x52\x86\xdf\x58\xc2\x7e\x41\x5c\x90\xdd\x64\xed\x4e\xd4\x36\xef\x75\xa2\x76\x27\x6a\x7f\xa1\xa2\xf6\x61\xac\x70\x27\x67\x77\x72\x76\x27\x67\x77\x72\x76\x27\x67\xef\x7d\x19\x3b\x39\xfb\xd5\x70\x42\xea\x84\xed\x96\xf9\x36\xef\x49\xd2\xee\xa4\xec\x4e\xca\x3e\x6c\x29\xfb\x60\x26\xd4\x61\x86\x74\x98\x21\x1d\x66\x48\x87\x19\xb2\x95\x7c\xf3\x6f\xf6\x58\x7e\x08\x6e\x62\x7f\x65\x7f\xf8\x2e\xe1\x93\xfb\x45\x46\xf4\x7f\xcf\x69\x4a\x98\x04\x69\x94\xaa\x45\x28\xcf\x34\xac\xfc\xf2\x9a\x7f\xb8\x1b\x5e\x7d\xba\x08\xb3\x69\x3e\x5c\x3e\x5c\xdc\x0f\x6f\xfa\xb7\x7e\x5d\xfc\xac\xc2\xb5\xb0\xdf\x95\x44\x32\x4b\xf2\xb7\x44\xeb\x9e\x70\x6a\xee\x14\x56\xb9\xdc\x6e\x64\xb7\x83\xbb\xc1\xed\x8f\x90\x0d\x34\x3e\x1f\xde\xf5\xbf\xbb\x28\x11\x44\xe9\x79\xff\xec\xaf\x0f\xc3\xdb\xe6\xe7\x83\xff\x1e\xde\xdd\xdf\x35\x3d\xbd\x1d\x5c\x0c\xfa\x77\xcd\x5f\x7f\xec\x0f\x2f\x1e\x6e\x07\x2b\xd7\x63\xe5\x68\x57\x2b\x21\x12\x16\x09\xe2\xfc\x51\x64\xb9\x86\x28\xd6\x10\x79\xf1\xd1\xb1\xc3\xba\xbe\x4e\xd1\x83\xd5\xe9\xa9\x6d\xdc\x30\xd8\xa0\x21\xa3\x8c\xc4\x54\xe2\x49\x42\xe2\xa5\x96\xdc\x1a\x36\xb5\x84\x4b\x83\x7a\xd6\xda\xb3\x17\x39\x35\xcf\x8b\x0c\x2f\x40\x90\xa3\xa8\x08\x8b\x6b\xfa\x30\xfb\xd0\xd8\x03\xd3\xbc\x8b\x3e\x91\x52\x4f\x51\x2e\x04\x61\x2a\x59\x20\xf2\x99\x4a\x25\x97\x1a\x75\xdb\xd7\xd4\xac\xbd\x53\x7d\x83\x73\x2c\xd1\x84\x10\x56\x1e\xbf\x20\x09\xc1\xb2\x66\xcc\x76\xf7\xdb\x2d\x8b\xdf\x2b\x6b\x8d\x31\x97\xd1\x14\xd3\x24\x17\xa4\x72\x5a\x78\x9a\x61\x41\x25\x67\x83\xcf\xfa\x2e\xd3\x07\xf9\x1a\x3e\xe7\x62\xbb\x13\x33\xf8\x6b\x48\xc1\x57\xe5\x7f\x7e\xba\x2f\xff\xab\x74\xe6\x2f\xee\xcb\xff\x5a\x4d\xeb\x41\xc3\x55\xca\x3e\x42\x9f\xee\x4f\xd1\x27\x08\x71\x12\xe8\x7e\x8e\x0d\xc5\x5e\xdc\x9f\xa2\x0b\x22\x25\xfc\x52\x7c\xac\xa8\x4a\x60\x6e\xdf\x51\x86\xc5\x02\xb9\xe9\x9b\x44\x57\x1c\xcd\x11\xf1\x4b\x53\x5d\x3c\xf6\xf7\x9c\x81\xea\x5e\xac\xde\x05\x9f\xd1\x08\x27\xbb\x2d\x62\xff\xaa\xc4\x07\xae\x6f\x57\x2e\x45\xf8\xf6\xf2\x5a\xf4\xaf\xce\x21\x89\xd4\x0d\xb5\x66\xe6\x57\x44\x6a\x22\x89\x38\x8b\xad\x97\x46\xdf\xfe\x8b\x40\xa8\xff\x3b\x87\x44\xdc\x5c\x52\x36\xd3\x2d\xa2\x13\x74\x7d\x3b\x62\xd7\x22\x36\x86\x50\xa2\xa5\x61\x43\x73\x54\x22\xc6\x15\xa2\x69\xc6\x85\xc2\x4c\x69\x45\x00\xc4\x00\xbb\x22\x86\x03\x9c\xf1\x34\xcd\x15\xd6\x07\x6d\x69\x51\x99\x31\x87\xdc\x11\x35\x8c\xc1\xb5\x52\xb3\x86\x46\x4e\x28\xe6\x92\x09\xdd\xbe\x96\x51\xca\x3a\x34\x8d\x97\x54\x59\xd7\x04\x16\x02\x97\xa5\x89\x0f\x54\x91\xb4\xfa\x7e\xcb\x20\xcf\x7f\xd5\x1a\x08\xce\x4c\x52\x05\x11\x7d\x11\xcd\xa9\x22\x91\xd2\x47\x70\x2b\x9a\x78\xb8\xfa\xe1\xea\xfa\xa7\x50\x82\xf8\xd0\xbf\x3c\xff\xf3\x7f\x94\x7e\xb8\xbd\x5c\xfa\x61\xfc\xe3\x9f\x97\x7e\xf9\xff\xad\xa4\xa7\x6a\x4f\x4b\x7a\x7e\x30\x97\x23\x10\xa9\xc1\x26\xec\xa6\x8a\x68\x8a\x67\x04\xc9\x3c\xd3\x14\x20\x8f\xcb\xfb\xab\x45\xca\x0b\x8e\x63\xca\x66\x26\x03\xf4\x82\x2a\x22\x70\x72\x89\xb3\x8f\xce\x7e\xbd\xc5\xea\xfc\xdf\xbb\x52\xbe\xee\x87\x9f\xfb\x97\x61\xc6\xef\x87\x9b\xdb\xeb\xfb\xeb\x95\xb3\x2e\xb5\xb0\x7c\x8c\xf4\xe3\x53\xf8\x5f\x74\x82\x74\xeb\x5e\xf2\x4d\x89\xc2\x5a\x23\x40\x5f\x9b\xa4\x39\x9f\x48\x43\x59\x02\xa7\x26\x13\x34\xa5\x70\xa5\x18\x0b\xde\x37\x46\xb8\xf6\xda\x83\x3f\x37\xe6\x03\xd0\x96\xdd\xa5\xcc\x62\x2c\x62\xf4\x77\x59\x4d\x1f\x07\xc3\xb1\xf9\x81\xc4\xe8\x08\xcd\x95\xca\xe4\xe9\xc9\xc9\xf3\xf3\xf3\xb1\x7e\xfb\x98\x8b\xd9\x89\xfe\xe3\x88\xb0\xe3\xb9\x4a\x13\x93\x2e\xaf\x57\xe1\x14\xdd\x08\xae\xaf\x10\x50\xd0\x89\xa0\x38\xa1\xbf\x92\x18\x4d\x0c\xff\xe3\x53\xf4\x4b\xc4\x05\x39\x2e\x36\xc6\x1a\x95\xec\x3d\x62\x0d\x4f\x27\xfa\xa5\x1a\x66\x52\xdd\x4f\x14\x93\x88\xc6\x56\xcc\x20\x2c\xe2\x60\x79\x34\xbe\x0a\xdd\x9e\xcb\x34\xd4\x1a\x4d\x96\xab\x62\x39\x03\x65\x05\xc7\x24\xc8\x76\x57\xbc\x4c\x70\x5a\xf1\x19\x1a\xb5\x35\xd7\x2a\xba\xbe\x5b\x31\xdc\xaa\xee\xd5\x4c\x4f\x38\xe2\x09\x9a\xe4\xd3\x29\x11\xa1\x43\xba\xa7\xb5\x19\x2a\x91\x20\x11\x4f\x53\x90\x18\xf4\x57\xb9\x34\x54\x0d\x2b\x66\x47\x7b\x3c\x62\xb0\xff\x5a\xcd\x01\x0a\x88\x39\xb0\x3a\x46\x48\x8c\x30\x5b\x98\x6e\x26\xf9\x34\x6c\xdf\xc0\x50\xe0\x18\x51\x35\x62\xfd\x24\x41\x82\xa4\x5c\x91\x20\x87\x12\x9c\x67\xe5\x05\x07\x16\x29\x48\x96\xe0\x88\xc4\x86\x1e\x12\x1e\xe1\x04\x4d\x69\x42\xe4\x42\x2a\x92\x86\x0d\x7c\x0d\xb6\x1a\xbd\x66\x54\xa2\x98\x3f\xb3\x84\x63\x3b\x8f\xea\x67\xdf\x94\x4f\xe3\xc0\x41\x04\x0c\x84\xe0\x02\xfe\xe7\x07\xca\xe2\xbd\x71\xa8\x87\xbb\xc1\x6d\xf8\xef\xbb\x9f\xef\xee\x07\x97\x9b\x71\x1f\x4f\x59\x30\x3c\xd0\xe1\x4f\xd1\x9d\x59\x04\x2e\xb4\x44\x24\x1a\x26\x75\x69\x49\xa9\xf8\x81\xc7\x5b\x72\xdf\xcb\xfe\xd5\x43\xbf\xc4\x51\xee\xce\xbe\x1f\x9c\x3f\x54\xf4\x01\x3b\xbf\x92\x0c\x6f\xd4\xbf\xf0\xb7\xb3\xef\x87\x17\xe7\xe3\x1a\x85\xf1\xc3\xed\xe0\xec\xfa\xc7\xc1\x6d\xa1\xdb\xd5\x2e\x51\x65\x30\x55\x66\x75\x6f\x98\xd2\x9c\xc7\x68\xb2\xa8\x07\x84\xd0\x92\x73\x02\xbe\xd8\x02\x12\xc5\xb4\x7a\x0a\xbc\xc9\x61\x73\x14\x5f\xa4\x3c\x26\x3d\xfb\x0e\x20\x69\x18\xe3\x8a\x91\x98\xeb\x1b\xd6\xbd\x63\x16\x18\x2a\x0c\xc8\x85\x5f\xb8\x53\xd4\x47\x52\xbf\x98\xeb\x43\x2d\xe8\x6c\x06\x86\xc3\xca\x50\x4d\x6b\xf6\x53\x58\x5e\xf8\xce\xec\x7f\x26\x38\x9c\x73\xdd\xad\xb5\x38\x7b\xab\x84\xf9\x10\x50\x57\xca\x2d\x0a\x0c\x06\x87\x9a\xa1\xb9\xcd\xd2\x8b\xd0\xb8\x5e\xe6\x3c\x1a\x7b\x91\x3e\x5c\xc0\xb6\xa4\xb1\x77\x66\x82\x3c\x51\x9e\x07\x9f\x5a\x60\x8f\xd2\x8e\xd7\x36\x5f\x2c\x00\x2c\x9b\x31\x8a\x54\x9a\xf1\xe4\x51\xdb\x82\x66\x61\x4f\xd0\xc2\x54\xf0\xb4\xa6\x8d\xf2\x31\x19\x5e\xdf\x29\x81\x15\x99\x2d\xce\x2d\xcb\xd8\xfe\x78\x9c\x5f\xff\x74\x75\x71\xdd\x3f\x1f\x0f\xfa\x9f\xca\x27\xde\x3f\xb9\xbb\xbf\x1d\xf4\x2f\xcb\x8f\xc6\x57\xd7\xf7\x63\xf7\xc6\x4a\x92\x6f\xe8\x60\xf9\x9e\x2e\xbf\x78\x8a\x34\xcb\x05\xd6\xe8\x00\xef\x02\xfe\x38\x21\x53\x2e\x0c\x9f\x4f\x5d\xe8\x82\x15\x61\xdc\xda\x5a\x5d\xac\x32\x8b\x53\xb0\x8c\xd5\x35\x69\xac\xde\x4a\x10\x9c\xc2\x3d\x81\x19\x1a\xb0\xf8\xe8\x7a\x7a\x74\x67\x7e\x4c\xb1\x78\x24\xc2\x7f\xfa\x2c\xa8\x52\x84\x95\x54\x3a\xec\x86\xec\x95\xc4\xa2\x83\x63\x74\xab\xf9\xbe\x7e\xdf\x5f\x6a\x9a\xd8\x63\xa2\x30\x4d\xa4\x1d\x6c\x69\x5d\x4f\xd1\x05\x16\xb3\xc2\x0e\xf7\x35\x9f\x4e\x4d\x63\xdf\x98\x61\xe8\x3b\xac\x34\x8b\x1a\xde\xab\x49\xc3\xdd\x8b\xd0\x9f\x7d\xd9\xcb\xc3\xcb\x54\xf5\x90\xed\x46\x53\x0f\x37\xb0\xe2\x46\x63\x2f\xe9\x86\xf6\x49\x0d\xad\xc1\xc4\xcd\xe3\xd5\x97\x4c\x7d\xdb\xcb\xe4\x54\x7e\xb1\x86\x9c\x4c\x2e\x95\xde\xf9\xa9\xd6\x36\x6b\x68\x89\x7c\xa6\xd6\x60\x10\x8e\xbb\x42\x42\x45\x33\x60\x5e\xc5\x59\x46\xb0\x90\x75\xbb\x5d\x16\x03\x1b\xf6\xde\xf4\x14\xf6\x61\x37\xd9\xf5\xd3\x43\x9c\x81\xc1\xc1\x0b\x11\x15\x8a\x6c\x41\x03\xa6\xad\x25\x0a\xb8\x01\xb4\xa5\x6b\x8b\x6c\x74\x49\xa5\x56\x1a\xcd\x8f\xdf\x59\xc8\xa5\xed\x08\xe2\x63\x7f\x78\x51\x11\x2e\xc6\xe7\x83\x8f\xfd\x87\x8b\xd5\x66\xc2\xd2\x77\xd5\x2d\x46\x47\x48\x3f\x2f\xfb\xcd\xe9\xd4\xdc\x19\x0e\x38\xca\xa8\xb4\x84\x81\xd1\xca\x42\xd5\x18\x7b\x75\x4c\xb2\x84\x2f\x52\xc2\xc0\xc4\x53\xba\x09\xf5\x7a\x4e\x31\xb5\x57\x4b\x30\x58\xb0\xe2\x58\xb3\x1b\x5c\x63\x47\x0e\xad\x8a\xc4\xfe\xe6\x2d\x83\x55\x55\x58\xf7\x8d\xf1\x9e\xd9\xff\xdc\x29\xac\xb6\x3c\x63\xfd\xb3\xfb\xe1\x8f\x83\xb2\x7e\x78\xf6\xfd\xf0\xc7\x3a\xa9\x66\xfc\x69\x70\x35\xb8\xed\xdf\xaf\x11\x4e\x2a\x4d\xd6\x09\x27\x52\x0f\xb8\xea\x3d\xa5\xd2\x47\x04\x45\x06\xf2\x0a\x51\x25\xd1\x13\x95\x74\x42\x01\x20\xcc\x7a\x22\x1f\x86\xc0\x59\x9f\x70\x42\x63\xaa\x16\x4e\x7c\x31\xfd\x96\xf7\x51\x73\x52\xdb\xbe\x31\x3b\x84\xfe\x49\xb0\xf2\x99\xcd\x71\x93\x3e\x45\xa0\xdb\x3e\x81\xd2\x16\x7c\xc6\xb4\x20\xcd\x66\x44\x98\xe1\x80\xf7\x25\x1c\x4b\xf0\x5c\x8f\x2a\x14\x56\x8a\x55\xf3\x42\xeb\x8c\x30\x22\x00\x04\xce\x77\x62\x04\x29\x41\xd8\x57\x5a\xe6\xca\x12\x1a\x51\x95\x2c\x50\x04\x36\x2c\x30\x67\xa6\x98\xe1\x99\x15\x0e\x40\xcd\xa9\x90\xc4\x5f\x0d\x8a\xda\xf5\xd4\x9a\xf6\xef\x29\xd9\xf2\x98\x3d\x5c\x9d\x0f\x3e\x0e\xaf\xca\x24\xf0\xfd\xf0\x53\x49\x84\xbd\x1c\x9c\x0f\x1f\x4a\xb7\xb9\x96\x64\x57\xcb\xf5\xd5\x66\x6b\x8e\xa2\x7f\xe9\x14\x9d\x9b\x4f\x4f\xf5\xe2\xd6\x40\xc4\x79\xe5\xb7\xb2\x0e\xb7\x2e\x24\xcf\xfd\x31\x60\x4a\xd4\xfa\x25\xda\x9a\x90\xac\x0f\xb2\x64\x43\xaa\x0f\x55\x58\xea\xfb\xaa\xea\x54\xae\x4e\xd9\xbd\x08\x41\x97\xc7\x85\x65\x29\x8c\x61\x00\xa3\x41\x93\x11\xab\xc6\xad\x55\x30\xec\x1f\xc1\x45\x9d\xe6\x52\x19\x57\x22\x10\x27\x7a\xfc\x8b\xd4\x0b\x0a\xae\xc6\x63\x74\x47\xc8\x88\x39\xeb\xc1\x8c\xaa\x79\x3e\x39\x8e\x78\x7a\x52\xe0\x13\x9e\xe0\x8c\xa6\x58\x4b\xd2\x44\x2c\x4e\x26\x09\x9f\x9c\xa4\x58\x2a\x22\x4e\xb2\xc7\x19\x44\xc0\x38\x77\xea\x89\x6f\x76\xc6\xff\xfd\xe2\x4f\xdf\x1e\x5d\xfc\xe5\xdb\x0f\xcb\x16\xb2\xa6\xfd\x1f\xb0\x08\x67\x32\x4f\x6c\xc4\x9c\x08\xd7\xc6\x1d\xf9\x9c\xac\xdb\xef\xab\xf2\x76\xed\xa6\xbf\x9e\xdd\x3c\x94\x2c\xd6\xe5\x7f\x5e\x0e\x2e\xaf\x6f\x7f\x2e\x71\xca\xfb\xeb\xdb\xfe\xa7\x12\x43\x1d\xdc\x7c\x3f\xb8\x1c\xdc\xf6\x2f\xc6\xee\xe1\x2e\xb6\xb7\x1f\x18\x7f\x66\xe5\xa5\x91\x8e\x03\x2e\xf5\x74\x8a\x3e\x72\x81\x7e\xf0\x3b\x79\x34\xc1\x12\xae\x18\x77\x67\xc9\x1e\xca\x78\x0c\x8c\x17\x91\x6c\x4e\x52\x22\x70\x62\x6d\x06\x52\x71\x81\x67\xe6\xa6\x97\x91\xc0\x2a\x9a\x23\x99\xe1\x88\xf4\x50\x04\xd4\x30\xeb\xc1\xa6\x80\xaa\xc5\x67\x55\x3b\xdf\x6d\xce\x14\x4d\x89\x53\xc1\xed\x3f\xef\xcd\x66\x6c\xb1\x39\xd7\xf7\xdf\x97\x85\xbd\x8f\x17\x3f\xdf\x0f\xc6\x77\xe7\x3f\xac\x5c\x4f\xf3\x59\x69\x64\x77\x10\x80\x74\xc6\x93\x3c\x65\xe1\xdf\xdb\x8f\x6d\x78\x75\x3f\xf8\x54\x1d\xdd\x75\xff\xbe\x4c\x19\xb7\xe5\x00\xb7\x0f\xdf\x5d\x5f\x5f\x0c\x4a\x2e\xe1\x0f\xe7\xfd\xfb\xc1\xfd\xf0\xb2\x44\x3f\xe7\x0f\xb7\x06\x8d\x70\xd5\x34\xdd\x08\x6a\x26\xaa\xa7\x15\x4e\x73\xdf\xac\xb0\x15\x27\xea\xdb\x80\x72\x73\x96\x8f\x02\xb8\x1d\x13\x0e\x06\x56\x9d\x23\x6f\x52\x8d\xcc\x48\x6b\xd9\xa1\x2a\x6f\x13\x6a\x66\xc7\x2b\x37\x7a\x15\x57\xbe\xf7\x43\x30\x50\xa0\x46\xd9\xc6\x49\xc2\x9f\x4d\x28\x6f\x4a\xf5\xad\x6c\x81\xd1\xf4\x2b\xb2\xf0\x10\x1e\xd7\x70\xbc\xf2\xb6\x90\x48\x10\x75\xc9\x73\xa6\xb6\x27\xb9\xfe\x55\x89\xef\x0c\xae\x7e\x1c\xff\xd8\x2f\x53\xe0\xf0\x62\x35\xab\x09\x9b\xa8\xb9\x8a\xfb\x57\x3f\xfb\x4b\x18\x02\xbe\x7b\x5e\x43\x35\xb2\x6b\x94\x50\x2d\xf6\x46\x58\x6b\xaf\x09\x48\x34\x88\x50\x30\x39\xa4\x7a\x72\x10\x60\x9a\x19\x7f\x92\xe1\x4f\x66\x90\xa7\xee\x8f\x4a\x7b\x12\xd6\x05\xac\xa9\x2e\x9e\x1e\xda\xb1\x5a\x35\x43\x84\x3d\x51\xc1\x01\xcf\x16\x3d\x61\x41\xb5\x34\x6e\x5a\xd6\x73\x3d\x85\xff\xdd\xac\x4d\x30\x8c\x56\x18\xd7\x1d\x17\xea\xdc\x07\xf2\x6e\x67\x0d\xa9\x0b\x68\x5d\x0e\x65\xad\x37\x74\x2c\x7f\x5b\xb3\x39\x3b\x06\xfc\x96\x27\xfc\x8f\xe4\x9c\xe2\x44\x33\x80\xfd\xc9\x8b\xfd\xab\xbb\x61\x59\x7e\x2c\xab\x19\x01\x5f\xde\x5a\x5e\x04\x43\xa5\x19\xb9\x53\x26\xee\xfe\x7a\x61\xb4\x0b\x00\x3d\x36\xe7\x36\x50\x2c\x40\x00\x72\x28\x28\x19\x16\xb2\xf2\x85\x44\x00\x84\x56\x04\x5c\xe9\x3b\x0b\xc2\x99\x9e\x38\x8d\x47\x8c\x7c\xce\x08\x93\x10\x1c\x60\xee\xb3\xc2\xd7\x2e\x8f\xd1\x70\x0a\x2c\x41\xbf\xce\x50\xce\xac\x03\x4c\x5f\xb8\x66\x90\x3d\x2d\xca\xda\x21\x78\x0d\x11\x0c\x2f\x8c\xb8\x60\xa9\x62\xf0\x23\xf6\x93\x77\xa2\xc1\xa3\x29\xd7\x0c\x48\xef\xa2\x6d\xef\x14\x61\x26\x69\x0f\x69\x85\xa5\xba\xa7\x90\x3a\xa0\x15\x4a\x1b\xc2\xa5\x39\x8d\xfd\xf3\xf5\xaf\x81\xa5\x38\xe1\xf0\x32\xa8\xbf\x0b\x2a\x57\x41\x83\x68\x9c\x18\x8f\xc9\xb8\xfd\x9d\x10\x71\x41\xac\x9f\x65\xe3\x6b\x60\x1d\x63\xbf\xc7\xf2\x71\xc9\xf7\x30\x64\x52\x61\x16\x91\xb3\x04\xcb\x2d\x83\x90\x9c\x8d\xa3\x57\x96\x38\x6e\x6f\x1f\x6e\xee\x87\xdf\xad\xe1\xf2\xd5\x8f\x97\xc3\x80\xa2\x24\x77\xee\xb9\x89\xe0\x38\x46\x9a\x7d\xce\xb8\x71\x05\x5a\xc1\xbf\x80\xfe\x36\x79\x3d\x3e\xa0\xb2\x04\x3b\x5e\xa4\x23\x58\x3b\x47\xe8\x4a\xa0\x76\x21\x50\xa4\x57\x02\x05\x26\x0f\xb7\xd5\xe0\x59\x34\x05\x49\xac\x75\x2b\x4b\xb0\x9a\x72\x91\x1a\x2e\x5f\x9a\xb4\x69\x7c\x75\xa3\x94\x29\x22\x44\x9e\x29\xea\xb0\xdc\xab\x52\x2a\x54\x78\xe7\xb3\x4b\x22\x25\x9e\x91\x5d\x1c\xd0\x75\xca\xc3\xdd\x8f\xe1\x3f\xc1\xc1\xdc\x46\xf6\x2f\x8d\xd0\x45\xbe\x3b\x7a\xba\x66\x1f\x4d\x20\xcf\x0d\x4f\x68\xb4\x65\xc0\xdd\xc7\xfe\xf0\x62\x3c\xbc\xd4\x4a\x7c\xff\x7e\x70\x51\x12\x25\xe0\x59\xff\xe3\xfd\xe0\xd6\x82\x58\xf7\xbf\xbb\x18\x8c\xaf\xae\xcf\x07\x77\xe3\xb3\xeb\xcb\x9b\x8b\xc1\x9a\xc8\x9c\xc6\xc6\x97\xad\xab\xd5\x57\x4f\x97\x7e\x81\x1d\xd6\xbc\x2c\xb4\x97\x41\xd6\x18\xa6\x09\x38\xc1\xb9\x71\x86\x63\xc4\x78\x4c\xe0\x67\xe9\xac\x33\x1e\x39\x1a\x0d\xd5\x57\x49\x82\x70\xae\x78\x8a\xc1\x6b\x93\x2c\x46\x0c\x4f\x34\x6b\xc5\x49\x12\x84\x77\x89\x9c\x31\xcd\x62\x75\x63\x06\xa2\x3d\x4a\x88\x66\xe7\x59\x90\xec\x67\xfd\x06\x53\xca\x20\xd2\x36\xc5\xe2\xd1\xb8\x99\x8a\x2e\x8b\x43\x21\x11\x96\x23\xa6\xc7\x45\xac\x61\xa8\xcd\x0a\x9f\xb6\x7a\xab\x71\x75\x52\xfc\x48\xf4\xaa\xa4\x79\x34\x47\x99\xe0\x33\x41\xa4\xb4\xb6\xe5\x08\x33\x13\x80\x60\x5f\xd7\xd7\xd0\x88\x31\xae\x97\xc2\x99\xb0\x63\x92\x11\x16\x13\x16\x51\x93\xd6\x07\xbe\x7b\x6f\xda\x9c\x09\x9c\xcd\x91\xe4\xe0\xf4\x86\x65\x07\xfb\x95\xf9\xc8\xdd\x64\x66\xc6\xe6\x71\x68\x81\x16\xb9\xe6\x13\xd7\x20\x27\x9a\x55\x86\x8f\xdd\x65\xe8\xdc\x2e\xc6\x0e\x98\x66\x09\x51\x06\xac\x1f\x96\x1c\x36\x43\xaf\x75\x69\x3f\xf4\x36\xd5\x6d\x82\xbe\xb0\xdd\x98\xb1\xb4\x23\x3a\xae\xb1\x6c\xdb\x23\x85\xbe\xc7\x2c\x4e\x74\x2b\xce\x87\x51\x3e\x8b\x90\x8a\xd2\xd7\x54\xe3\x4e\xe3\x2e\xb7\x68\x84\x73\xb9\xcb\x35\x5a\xc9\xc5\x34\x56\xc1\xa3\x22\x28\x04\xc8\xdb\x26\x62\xc2\xea\x66\x9a\x45\xe2\x84\xdb\x55\x32\xaf\xe7\xa6\xfe\x13\x82\xd1\x34\x5c\xb3\x99\xa0\x2c\xa2\x19\x4e\xb6\xd2\xfd\x2a\xc1\xf8\x36\xc6\xfd\x6b\x3a\xd5\xe4\xf3\xcd\x92\xdb\x56\x11\x91\x42\x82\xb2\x1d\xa6\xdf\xc2\x0d\x2c\x49\x36\xab\x81\xc8\x22\x9a\x04\x0b\x9e\x1b\x7f\x1c\xac\x0b\x89\x6b\x8e\xea\x71\xdd\x76\xeb\x93\x81\xcb\x01\xd0\x5b\x6c\xb6\x89\xfc\x69\x5a\xbf\x4a\x2b\xb6\x77\x13\x8c\x87\x93\x9b\xfa\x36\xeb\x76\x20\x78\xf8\xaf\x55\xb4\x73\x89\x33\x4d\x33\x16\xb6\x1f\x17\x73\xb4\x4a\x92\xad\x0a\xe6\xe2\x67\x02\xdf\xb9\xcf\x0b\x69\xbf\x1b\xc5\x12\xda\x00\xa8\xe5\x4e\x4a\x31\x04\x41\x8e\xb9\xa5\xf1\x69\xae\x65\x59\x84\x21\x0a\x01\x7d\x4d\x8e\x67\xc7\xc8\x15\x61\xe8\xa1\xfe\xcd\xcd\xe0\xea\xbc\x87\x88\x8a\xbe\x71\x31\x8b\x36\x60\x69\xc4\x14\xb7\xd2\xca\xc2\x15\xd0\x48\x89\x98\x91\xd2\x9c\x5d\x74\x13\x84\x2a\xcf\xa8\x54\x36\x7c\x56\xf3\x95\xa0\xd4\x09\x4d\xab\x62\xb6\xa1\x90\x5c\xcd\x77\x21\x0d\x2c\x65\x9e\x6a\x5d\x76\x4c\x71\x3a\x16\x3c\xd9\x85\x29\x9c\xc3\x54\x40\x5d\xf6\xe9\xf9\x14\xa7\x48\x37\x6b\x43\x41\xbc\xcb\xd1\x8b\x74\x5a\x30\xd2\x7c\x59\xdf\x9b\xc1\xbd\xe5\xbc\x0f\x36\x1e\x8d\xba\x10\x08\x48\xdf\x6f\x60\x15\x85\xd9\x78\x6c\x2d\xf5\x63\x1c\x45\x5a\xe5\xde\xf3\xa4\x82\xfa\x39\xce\x25\x60\x3b\x7a\xb1\x69\xae\xa3\x73\x37\xcc\x4c\x73\x30\x08\x06\xd6\x57\xae\xe4\x11\x2d\xda\xaf\xe9\x77\xb2\x58\xea\xd5\x55\xb8\x79\x90\xde\xa4\x62\x2e\x61\x49\x60\x27\xa5\xa9\x90\xa3\xe6\x64\x81\xe6\xf8\x89\x94\xba\x74\x09\x31\xba\xe1\x05\xcf\x45\x1d\xa3\x1b\xb1\x73\x92\x09\xa2\x25\xfd\xaa\x03\xc5\xd3\xf4\x6d\x99\x12\x3b\xba\xee\xe8\xfa\xdd\xd3\xf5\x99\x29\x94\xd4\xf7\x85\xb1\x76\x12\xe0\x4c\x63\xe3\x8c\xf3\x64\xdc\xc2\x26\xd2\x7e\xc5\x4b\x9e\xb0\x4a\xd9\x28\x80\x04\xe0\x39\xc8\x47\xa5\x6b\x93\xeb\xbb\x2e\x48\xb1\xb5\xc3\x5b\xb1\x0c\xce\x65\x16\xd4\xcb\xd9\xe5\xbc\xd7\xb5\xb2\xaa\x25\xf4\xe2\x62\xce\x99\x91\x6f\xbc\xbb\x2c\xac\x7f\x5a\x3a\x4c\x4e\x14\xa1\x6c\xa9\x1a\x9b\xa1\x67\xbd\xc0\x46\xee\xf8\x47\xce\x15\x96\xdf\x1c\x8f\x98\x16\xa2\x1e\xc9\xc2\x98\x5b\xb5\x98\xf2\x3b\x2d\x8b\x1f\x49\xc2\x24\x84\x7b\xff\xce\xb8\xe7\x34\x89\x3b\x73\xb5\x51\x4d\x4d\x11\x38\x08\xba\xf6\xbd\x40\x88\xae\x6d\xd4\x4a\x49\x45\x00\x34\xc8\xf9\x66\x2e\xf6\x99\x19\xfe\x8c\x28\x48\xb1\x56\x54\x81\xce\x14\x9b\x2a\x73\x4b\x43\x5f\x6b\xba\x32\x54\x21\x38\xf8\x49\xe2\x7c\x37\xc6\x2f\x97\xdb\x58\xcb\x19\xbd\xb6\x70\x67\x63\xde\x4f\x9c\xdd\x28\x12\x7c\xa9\x74\x1b\x96\xc8\xec\xf4\xc4\xb0\x03\xe7\xbf\x26\xec\xf8\x99\x3e\xd2\x8c\xc4\x14\x43\x04\xbc\xfe\xd7\x89\x9e\xd7\xbf\x9f\xdd\x5e\x5f\x8d\x8b\x4c\x9e\xff\x1a\xb1\x7e\x22\xb9\xcf\x52\x40\x8c\x33\x1f\x6e\x9f\x09\xe2\x44\x42\x3b\x17\xb0\xba\x16\x66\xc4\x11\x6b\x1a\x41\xcc\x23\x79\x8c\x9f\xe5\x31\x4e\xf1\xaf\x9c\x81\x2b\xbd\x0f\x7f\x9e\x25\x3c\x8f\x7f\xc2\x2a\x9a\x9f\xc0\xb9\x56\x27\xe4\x89\x30\x65\xdc\x54\x7a\xb9\x62\x48\xde\x95\x10\xad\xff\xef\x7a\xcc\x45\x52\x91\xd4\x9a\x6c\x44\x32\x85\xfe\x1f\x41\x26\x9c\xab\xfa\x4b\x8a\x4f\xa7\x92\x6c\x74\x21\x15\x4a\xda\xdd\x35\xfa\xcb\x9f\xbf\xfd\x83\x26\xa1\x6d\xd6\x78\x78\x77\x3d\xd6\xdf\xff\xfb\xb9\xfd\x5e\x6e\xc0\xee\xae\xb3\x82\xb5\x39\xe2\x31\x81\xf3\x39\x83\xdb\x4f\x80\xf3\x02\xd8\x1b\x90\x43\xb1\x8f\x75\xdc\xed\xbc\xd4\xfa\x6e\x2a\xdb\x56\x8b\x09\x2a\x76\x30\x47\x74\x84\x18\x47\xa9\x89\x35\xc5\x0c\xfd\xc7\x0f\xdf\xd5\x6f\x60\x2e\xe8\x56\x1d\x52\x0b\xd7\x10\x74\x29\xe9\xaf\x44\x22\x4d\x35\x9a\x8a\x79\xaa\xbb\x16\x44\xce\x79\x12\xa3\x67\x02\x6a\x92\x8d\x03\xf5\x5a\xb9\x20\x23\x16\x36\x01\x21\x87\x08\x27\x8a\xcf\x08\xdc\xd5\x4e\x51\x53\x44\x68\x51\xc5\x64\x69\x28\x2e\x48\xcf\x40\x7d\xdd\xfd\xc9\xc5\x56\xc3\x34\xe1\x91\x4b\x6a\xb1\x26\xb9\x78\x52\x3f\xf3\x69\xd5\xf4\x8a\x9a\x6d\xf8\xd5\x4d\xb6\x66\xdb\xfa\xa5\xb1\x49\x28\xd6\x86\x55\xdd\x99\xfa\xc1\xd0\x88\xb3\x71\x42\xd9\xe3\x56\x9b\x71\xed\x44\x39\xdd\x82\x5d\x33\xdd\xa2\xb7\x73\x1b\x0b\xc8\x06\xe7\xe3\x63\x9e\x24\x26\xb5\x25\xdc\x1e\x90\xbb\xcc\xba\x81\x30\x90\x99\x1c\x50\x12\x5b\xbf\x97\xd5\x84\x05\x61\x10\xf0\x36\x62\x93\x85\xf5\xd9\xca\x1e\x92\x79\x34\x77\x99\x79\x11\x67\x52\x8b\xd1\x5c\xa0\x88\xa7\xa9\x29\x6e\xca\x08\x52\x9c\x27\xd2\x46\xbb\xb3\x23\x85\x23\x35\x62\x45\x7f\x6b\x4e\x9e\xa9\x80\xb4\x5b\xea\x5e\x7b\x97\x4e\x51\x69\x69\xa5\xc0\x4d\xe3\x10\xb3\x01\x8c\x60\xc6\x13\x15\xa0\x3f\xf0\xe5\xb3\x64\x36\xac\x41\x33\x90\x73\x2e\xd4\x38\xae\xe5\x39\x6b\x89\xa6\xca\x08\x19\x39\x4a\x20\x68\x98\x3f\x69\xe1\x9f\x3c\x7b\xe3\xeb\xaa\x21\x68\xaa\x5e\x35\x82\x76\xc7\x68\xe5\xc8\x36\x25\xc1\x86\xb5\x32\x08\x1e\x51\x39\x26\x7c\xdd\x18\xef\xe0\xab\x33\xfd\xd1\xca\xc5\xab\x9e\x3b\x27\x04\xf1\xb8\x00\x9b\x33\xf7\xba\xcd\x08\x59\xb5\xa6\x16\x3a\xe1\xe5\x32\x47\x57\x4d\xe5\xa1\x6c\xc9\xd5\x63\x01\x93\xbd\x24\x20\x6b\x62\x31\xa1\x4a\x60\x51\x42\x0a\xf1\xfa\xa0\x24\x58\x40\x7c\xd6\x88\x19\xdc\x38\xa3\x29\xc4\x28\xa6\x12\x12\x44\xe0\x2e\x0d\x9c\x61\xa8\x9d\x12\x58\x39\xda\x45\x9e\xa3\x89\x3f\x87\xc0\xb2\x82\x34\x1c\xb3\xd3\x1d\x79\x7c\x2c\xad\x9f\xf1\x28\x2f\x04\xb9\x08\x24\x5c\x8b\xa9\x83\x28\x93\x74\x36\x57\x88\x32\x6b\x77\xc4\xc9\x8c\x0b\xaa\xe6\xa9\xec\xa1\x49\x2e\xb5\x16\x6a\x82\xd5\x4c\x3c\x0a\x51\x51\x2b\x2e\xb4\x6b\x12\x71\x5c\x69\x70\x59\x45\xd9\x82\x34\xda\x1d\xca\x41\xe5\xae\x58\x43\x38\x7d\x8f\x33\x58\x6d\x83\x42\xdd\x46\x03\x4f\x89\x4c\x1c\x20\x77\xc8\x4e\x50\x05\xa4\xe9\x1c\x00\x2a\xe4\xde\xbc\x14\xaf\x51\x88\x0b\x99\x64\x50\x41\x5c\xec\x36\x48\x5e\x65\x64\x4a\x83\xde\xe4\x9d\x4e\x69\xa6\x6a\x03\xb7\x96\x5d\x45\xb7\x01\xe6\x4f\xbb\xc5\x86\x64\x2c\xa0\x66\x40\x6a\x1b\xb1\x3b\x42\x9a\x81\xdc\x96\xf6\xde\x94\xc6\x85\x29\xd8\x44\x8f\xd5\x24\xbf\x8b\x13\xfb\x7c\x70\x77\x76\x3b\xbc\x31\x90\x13\xd7\xb7\x97\xfd\xfb\x71\x8d\x5f\xbb\xe6\xad\xcb\xfe\xed\x0f\xe7\xeb\x5f\xfb\xfe\xbe\x9c\x95\x5d\xf3\xca\xed\xdd\xea\x64\x8e\x16\x43\xac\x49\x0a\xab\xed\xe7\x14\x65\x0b\x35\xe7\xcc\x87\x28\xc4\x25\xde\x74\x84\x4c\x46\xb0\x82\x10\x22\x21\x55\x8d\xe3\xf0\x1e\xe2\x72\xd6\x4b\x98\xe5\xcd\x32\x30\x6c\x7b\x15\x8d\x36\x38\x91\x9f\x12\x3e\x01\xbf\x75\x5e\x2a\x71\xbb\x22\x02\x7d\xc7\x78\x9f\x73\x2a\xb3\x04\x2f\x96\x7a\x58\x77\xe5\x5c\xe1\x94\x40\xc4\x71\x81\x1f\xe7\x92\x45\xf4\xce\x40\x02\x93\xbf\xd7\xe9\x14\x32\x99\x14\xc5\x8a\xa0\x09\x51\xcf\x90\x37\xe7\x7e\xf5\xb6\x54\x17\x30\x22\x8f\x47\x0c\xcc\x39\x23\xbd\xc8\x71\x0e\xd1\x7e\xa3\x0f\x3d\x34\xfa\x10\x93\x27\x92\xf0\x4c\xef\xbc\xfe\xa1\xe1\x92\x19\xa4\x98\x26\x57\x5c\x79\xcb\xdc\x2e\xfb\x29\x48\x44\x33\x90\xcc\xc7\x44\xb7\xfb\x7a\x82\x47\x89\x92\x1d\x3b\x83\x31\x20\x1c\xc7\x5a\xc9\x06\x56\xe6\x86\x57\x84\x00\xb1\x60\xea\xa5\x5a\x99\x9b\x88\x14\xde\xfc\x6d\x7a\x0c\xdb\x2c\x9b\x3d\x6b\x77\x80\x3d\xbd\xa0\x4b\x76\xd7\x8b\x5c\x6b\x25\x3f\x90\x05\xa4\x60\xdc\x60\x2a\xb6\x74\xcd\xd6\xc5\xbc\xbe\x88\x93\x76\x50\xd3\xd1\x01\xb9\x6b\xeb\xd7\x61\x37\xc7\xad\x8f\xd5\x7b\x2d\x2d\xd5\xc5\x72\xf9\x8e\x5b\xaa\xad\x0f\x4d\x4a\x6a\x63\x08\x03\xaa\x2a\x5e\x19\x89\x36\xd0\xb8\xfc\x00\xef\xf4\x77\x6b\x35\x15\x2f\xae\x45\x61\x4d\x7f\xd8\x05\x9b\x1c\x5f\xcd\xc7\x27\x6b\x47\x1c\x25\x5c\x96\xb1\x72\x5a\x0f\xfa\xcc\x7e\xba\x6a\xdc\x83\x90\x7c\xb5\x5c\xb8\x51\x40\x43\xcd\xc2\x57\xc0\x20\xcd\x3d\xa3\xac\x87\xcc\xbe\xdd\x43\x14\xa2\x2d\x41\x21\x4b\x0a\xe4\x00\x16\xa3\xc2\x0d\x32\x62\x45\xcc\x8a\x44\xcf\x24\x81\x30\xb7\x88\xa7\x19\x98\xf8\xed\x70\x6d\x4b\x24\x36\x11\xc3\x3d\xc4\x73\xa5\x1b\x33\x39\x39\xce\x88\x6b\x13\x7e\x0a\xb7\x87\xf1\xbd\xd9\xe0\x77\x0f\x2c\x6d\x68\xdd\xdc\xa5\x94\xa1\x4f\x44\x41\x2b\x00\xdc\x1f\x4e\x10\xf4\x84\x6a\x08\x65\xfd\xda\xef\x70\xa2\xec\x4c\x36\xd8\xf9\x02\x38\xe5\xbb\x84\x4f\x56\x1b\x09\xa0\x71\xf4\x70\x3b\x74\x16\xc9\x22\x7e\x2a\x40\x2f\x2e\x79\x14\x07\x37\xb7\x83\xb3\xfe\xfd\xe0\xfc\x18\x3d\x48\xa2\x97\xc7\x4f\x17\xf2\xab\xbd\x4a\x62\x46\x6e\x91\x58\x98\x54\x04\x37\x19\x42\x88\x10\xa5\x2c\xe8\x35\x8c\xa3\x0c\xd3\xb2\x9a\xb0\x01\x24\x85\x5a\x43\x1d\x00\x0b\x55\xe7\x69\x23\xf3\xd6\x9d\x40\x88\x93\x1a\xbf\x9f\x28\x35\x33\xde\x74\x39\x32\x6f\x1d\xf9\x94\x23\xfa\x5e\x7a\x32\x70\xb4\xd4\x9c\x50\x81\x5a\x4d\xcb\x10\xd5\xb8\xfd\x9c\x82\x10\xf7\x4b\x9c\xad\x4e\x3f\xc5\xcf\x25\xa2\x35\xa2\x70\xe0\xbb\x7f\xe9\x73\xe0\xd8\xda\xd8\xb0\xc2\xdd\x27\x58\x38\xb4\x0c\x6f\xf5\x7c\xd3\x64\x7c\x48\x67\x24\x0b\x27\x56\x19\x84\x8d\x63\x95\x08\xce\x0e\xfc\x42\x19\x2a\x5d\x89\x3d\x34\xa5\x9f\x6d\xa3\x45\x7c\xbb\x7b\x35\x08\x78\x68\x88\xa7\x9c\xe3\xe5\x33\xb5\x81\xd8\x70\x03\xdf\xaf\x14\x22\xb9\xd4\x22\x51\xa4\xc5\x25\x41\x22\x2e\xf4\x4d\x01\xdd\x16\x5e\x88\x75\x22\x83\xc2\x42\x2f\xca\xb2\x57\x66\xd5\xe9\x2f\x6a\x90\xc4\x58\x91\x23\x2d\x7a\xad\x49\x80\xb6\x39\x32\x90\x4d\x83\x55\x00\x07\x56\xdc\x3c\x13\x32\xc3\xcc\x85\x66\x37\x0c\xd7\x5d\x79\x3b\xb0\x2a\xad\x02\x61\x48\x0f\x03\xf9\x0a\x52\x7f\x4a\xe3\x90\x19\xac\xe7\xca\x71\xd8\xe8\x97\x43\x58\xb6\x67\xec\x83\x71\x1a\x06\x9b\x67\xf1\x21\x0d\x36\xc1\x52\x21\x3b\xa6\x26\x53\x44\xa0\x22\xbe\xac\x11\xb6\xa4\xdb\xb7\x55\xde\x34\x09\x95\xb5\x58\x02\x9e\x11\xe9\x70\x53\x0c\x4a\x8c\xd6\x69\x9c\x20\x6c\x4a\x31\xfb\xb3\x6d\x6b\x32\xbb\x5b\x22\x64\x26\x10\xa4\xbf\xdc\xf4\x31\xea\xb3\x25\xbc\x2c\x17\x97\x55\x5a\x2f\x73\x27\xe1\xe4\x19\x2f\x24\xca\x84\x81\x96\x31\x91\xfb\x6e\xf2\xa0\x81\x95\x3f\xf2\xa1\x10\xca\xa5\x4e\x20\xb0\xc5\xac\x0f\x9a\x73\x72\xef\xf8\x05\x5c\x79\x95\xa8\x72\x2f\x90\x17\xcd\x15\xb6\x8a\x16\xac\x4e\x91\x71\x34\xc7\x6c\x46\xc6\xce\xc8\xba\x8d\xb6\xa4\xdb\x39\x83\x66\xce\x6d\x2b\xf5\x97\xd3\x8d\x51\x98\x6c\xfd\x17\xf3\xaa\x37\x20\xea\x43\x20\x15\x9e\x11\x64\x46\xd4\xca\x2c\x5d\x8a\x18\xb3\x60\xc3\xa0\x27\xd8\x56\x07\xe5\x28\xfa\x26\xe1\x1d\x42\x9f\x2e\xf0\x84\x24\x6f\x13\x39\x01\x5d\x5b\xe3\x3c\x78\xeb\x4c\x36\x00\x41\xcf\x60\xcf\xaf\xb0\x0c\x6b\xbd\x17\x79\x5d\x6e\xc0\xaa\x79\x96\xaa\x9f\xef\x30\x51\x57\x2b\x64\x9b\xa9\x36\x55\x10\x09\xaf\xbd\xa0\xd2\x46\x9d\x81\x2d\xbc\xfe\xaa\x36\xe5\xed\x06\x12\x14\xfc\x68\x18\xc7\xce\x15\x3f\xd6\x4e\x65\x6b\x90\x81\x96\x55\xf0\x86\x53\xc4\x38\x23\x88\xca\xe2\x65\x55\x4e\x87\xf2\x10\x3d\x5a\xc4\x37\xc6\x17\x5f\xa5\xcb\x17\x5f\x7a\x69\x4b\x4b\x01\x9e\xe0\x6d\x03\x2e\xbf\x9b\x11\xad\xa8\x62\xb1\x00\x88\x4f\xc3\x87\xcb\x32\xdd\xda\x71\xee\x5d\xe0\xbe\x77\x08\xae\x41\xa4\xae\xe2\x08\xc4\xc8\xca\xe0\x90\xc1\x41\xb5\x2f\xd9\x8f\x2c\x4c\xcd\x88\x79\xcb\x06\x10\x22\x95\x28\xc5\x19\xf8\xf4\x18\x57\xc5\x57\x06\x76\x49\xf9\x2d\xec\x39\x41\x5c\x9a\x1a\x5a\x0d\x2b\xb0\xce\xb4\xe3\xae\xdf\x62\x5d\xcb\xf0\x96\x0e\x9a\x77\x46\x9f\x08\x73\x34\xdd\x73\x67\x42\x0f\xca\x75\x9a\x2c\x8e\x30\x84\x19\x93\x38\xf4\x7c\xac\xe6\x48\xc6\x20\x73\x08\xf6\xc8\xf6\x4b\x76\x5f\x1b\x46\x63\x40\xd2\x4a\xe8\xf6\x2e\x30\x3c\xa4\x52\x8b\xdb\x6b\x32\xc1\xb1\x44\xbf\x63\x5c\xfd\x2e\x40\x36\x76\xc6\x0b\xf8\xd4\x99\xa0\x7a\x4b\x25\x5b\xe0\xd0\x5a\xc2\x41\x38\x40\xd8\x5a\xbb\xf2\xbb\xc6\x06\x14\x81\xef\x2f\x2a\x8d\x0e\x96\xb3\xe0\x9a\x6a\x5e\x75\x1e\x7b\x54\xbd\x16\xaa\x06\x4f\x53\x56\xaf\x38\xe9\x25\x43\xa7\x5c\xe7\xa2\xf7\x7b\xd1\xca\x35\xbf\x84\x08\xb0\x0b\xb5\xa5\xad\x23\xa7\xd6\x80\x20\xd7\xdb\x25\xb6\xc9\xf3\x6c\x92\xcb\x45\x39\x74\xcd\x96\xc1\x68\x40\xf9\x3d\x1e\xb1\x8f\x5c\xd8\x2b\x58\xda\x3a\x03\x13\x1c\x3d\x1e\x11\x16\x23\x9c\xab\xb9\x41\xdb\xb5\x7e\x85\x85\xa5\x06\x2d\x69\x00\xd9\x78\x28\x0d\x2a\x23\x2c\x62\x57\xf1\xe2\x89\xbb\x51\x8c\x58\xd0\x08\x54\x32\x80\x42\x4f\x50\xaa\xb6\x49\xd5\x24\x52\xeb\x57\x4d\x6b\x51\x57\x84\x75\xa9\x04\xeb\xea\x73\x56\x2a\x2a\x0b\x35\x18\x20\xc0\x89\x4f\x97\x57\x67\xe8\xac\x8d\x4e\xbf\xd3\xf4\xbc\xec\x85\xe8\x59\x8d\xc2\x98\xa4\xec\x0c\xb4\xa4\xf3\xad\xe3\xb5\x25\xd4\xe0\x69\x2e\x20\x5c\xb7\xae\xcd\xaf\xa3\x39\x4d\x0a\xdf\xc5\x37\x3d\x3f\x4c\xdd\x64\x42\x9e\x48\x62\x30\xeb\x23\x01\x91\xf9\xc6\x6a\xf8\x2d\xfa\x3f\xa6\x30\x29\xfa\xc3\x88\x7d\x02\x36\x9c\x24\x0b\x40\xd4\xf4\x2d\x63\x55\x69\xe6\xb1\x76\x00\xca\xa6\x02\xa1\xf2\x40\xcc\x5e\xcf\xf1\x13\x19\x31\xd7\xcc\xff\x41\x8f\xe8\xf7\xe8\x0f\x4d\xea\x9d\x0b\xb0\x7f\x61\x3b\xc7\xc7\x20\x7c\x3d\xb8\xe5\x2c\xa3\xb4\xfc\xc6\x99\x41\x4a\x46\xc8\x1a\x64\x0d\x0f\x8c\x4d\xd9\x13\x8f\x96\xb2\x38\xc2\x53\x8b\x05\x61\x6a\xcc\x78\x4c\xc6\xa4\xc6\xa5\xb9\x82\x49\x68\x21\xe0\x8a\xc7\x64\xad\x43\xd2\x33\xd3\x9f\xc0\x74\x23\xf3\x89\xdf\x0e\x48\xf0\xf7\xd9\xdc\xde\xfa\x50\xa6\xb4\xfa\x91\x7b\xf4\xd9\x6d\xc6\xbd\xad\x33\xd5\x85\x89\xf6\xe0\x42\xb0\x03\xa8\x77\xe8\x25\x58\x39\xf7\x7a\xf5\x38\x56\x1d\x01\xfa\x65\x3d\x73\x7b\x59\x05\xb8\xba\x50\xfb\x44\xd0\x19\xd5\xf2\x7b\x7b\x87\x2d\x70\xc2\x6d\xbc\x19\x06\x64\xb4\x95\x3b\xa3\x58\x0a\x07\xb4\x72\xe4\xe9\xaf\x70\x42\x4e\x78\x5e\x15\xe0\xed\x02\x50\x19\xba\xfb\xad\xac\xbe\xd0\x7c\x78\x66\x32\x00\xc9\x9c\x9a\x9c\xfb\xfe\xd9\x05\xd2\xa7\x83\xa7\x06\x98\x0a\x16\x2d\x57\x73\x2e\xe8\xaf\x8d\x19\x4a\xcd\x32\x7a\xe1\x69\x2d\x12\xba\xcc\x38\xcb\xd2\x3a\x10\xab\x11\x29\x54\x49\x2b\xa9\xd3\x99\xd0\x24\x07\x0c\x56\xcd\x66\xa7\x79\x62\x0a\x37\x44\x5c\xc4\xa6\x72\xba\x2c\xa5\x8f\x41\x18\xae\x13\xef\xb1\xf2\x0d\x52\x0b\x55\x69\x4b\x43\x18\x0b\xce\x4a\x01\xf4\xaf\x39\xc9\xf7\x94\x81\xf7\xa6\x31\xcb\xf7\x78\x26\x8b\x20\x64\xb3\x36\x9a\x37\x17\xeb\xfb\x0f\x3d\x53\x19\xe4\xac\x3a\xcb\xa2\x87\x80\x32\x2a\xb9\x29\x0c\xba\x91\x45\xe7\xd6\x40\xdf\xef\xc1\xa4\xf3\x1a\xf1\x1c\xcb\x32\x52\x0d\xfb\xb1\xe4\xf7\xe4\x33\x38\xab\x2c\xe2\x85\xec\x24\xae\x86\x40\x45\xfa\x78\x41\x93\xc9\x16\x4c\x6e\x59\xa8\x5e\x19\x15\x5d\x18\x50\x3c\x5b\xab\x49\xa6\x56\x1c\xd2\x2e\x9e\x05\x05\x84\xb8\x45\xf1\xb2\xaf\x81\xeb\xae\x8b\x90\xc7\x68\x29\xc5\x88\xb5\x10\xd7\xe1\x96\x70\x51\xcf\xe3\x37\x30\x40\xd8\x86\xca\x5d\x2f\xfb\xed\x9b\x4e\x84\x61\x49\x87\x7a\x24\x96\xe1\x61\xd6\x1e\x06\x5f\x09\xe4\x6d\x0c\x88\x5e\xb4\x79\xbd\x93\xe1\xc9\x71\x1c\xe1\x68\xde\x38\xa9\x09\xe7\x09\xc1\xac\x49\x7a\xad\x7d\x5c\x3d\x22\x06\xdc\x14\x58\x77\x92\x00\xc2\xaf\x5b\x02\x5b\x15\xb2\x10\xdf\x59\x0c\xc8\xec\x86\x87\x9b\xd8\x40\x37\x50\x45\x98\xb3\xfc\x50\x36\x4b\x48\x75\xad\x2c\x84\x7e\xcf\x76\x92\x44\x79\x12\x94\x85\xcc\x88\xd0\xa3\xd6\x4b\xfc\x44\x98\xd6\x19\xec\x38\x9c\x33\xe3\xd9\x25\x44\xfb\x62\x50\x3d\xdf\xb5\xf3\xa7\x41\xd6\x61\x3c\x62\x70\x70\x79\xf9\xb0\x6a\x5a\x95\x5a\xcd\x08\xed\x52\x5b\x9f\xce\x40\x88\xd8\xf8\x78\xde\x95\xcd\xc4\x1b\x9f\x49\xd3\xf7\x18\x62\x0c\x76\x76\xad\x05\xee\x97\x02\xaa\xc1\x6c\xac\x83\xe3\x7a\x25\x23\x32\x44\x6d\x94\xc3\x4e\x83\xa0\x8d\x26\x38\xa8\x17\xbd\x4b\x8a\xf2\x17\xee\x36\x68\x39\x94\x95\xae\xea\x96\x8e\x67\xb0\x4e\xae\x3a\xb7\x17\x36\x64\xbb\xec\xb2\xf5\xf9\x3d\x45\x98\xa3\x2d\xf0\xaa\x04\x06\x74\x02\xc8\x29\xff\xc9\x68\xd8\x54\x1a\x0b\x98\x2b\x73\x91\x66\x6a\x61\xab\xa2\xc1\xbd\x18\xe6\xf4\x1a\xc4\xb7\x3a\xf7\x70\xf5\x8e\x8c\x4b\x0e\xe2\xba\xce\xa0\x23\x6b\x56\xa8\x6d\xd2\x2d\x74\x88\x20\x52\x41\x6c\x68\x8a\x06\x31\x05\x66\xc7\x38\x69\xb4\x65\xed\x81\x69\x42\x9a\x6d\x81\xd2\x60\xc1\x5f\x95\xc8\x89\xe6\x5d\x38\x49\x2a\xf3\xc2\x90\x0e\xad\x7c\x91\xb9\x49\x51\x09\xb7\xbd\xb3\x3a\xc1\x13\xb2\x91\x7b\xfa\xc2\x7c\xb0\x92\x8a\xe0\x15\x88\xec\xce\xb2\x64\xd1\x2e\xa2\x3c\x0c\xbd\xab\x05\x49\x5b\x37\xb0\x10\x5a\x6d\xe5\xdd\x54\x86\x27\xdb\x6e\x88\x92\x44\xb9\xa0\x6a\x31\xb6\x46\xbf\xf6\x4c\xeb\xce\x7e\x79\x66\x3f\x6c\xa3\x51\x9f\x22\xd7\x9f\x33\x32\xc2\x3d\x25\xa8\xa9\xa0\x63\xa7\xd0\x66\xbb\xb5\x96\x5c\x0b\x9e\xb4\x6a\x61\x1d\x7a\x53\xbb\xa1\xea\x2e\xb6\x1d\x9e\xad\xcc\x31\xe6\x53\x87\x8b\xd4\x7e\x61\xab\x25\x4b\x36\xb0\x96\x3a\xf8\xe5\x4c\x50\x2e\x6c\x65\x90\x36\x41\x6d\x29\xfe\x3c\xce\xb0\xc0\x49\x42\x12\x2a\xd3\xed\x6d\xbb\x7f\xfa\xe3\xca\xd1\x9e\x99\x0a\x36\xd2\xd6\x83\xfa\x4c\xd3\x3c\x45\x2c\x4f\x27\x56\xca\xc5\xf2\x31\x04\xbf\x74\xa9\xfa\x06\xc3\xc9\x0d\xb0\x04\x18\x20\x02\x38\xd3\x11\x0b\x80\xad\xad\xa9\x02\x47\x73\x4a\x9e\x00\x76\x53\x30\x22\xe5\x31\xba\xe2\x8a\x9c\xa2\x4b\x9c\xdd\x83\xa0\x66\x4a\x4a\xce\x8c\x75\x1c\x4b\xa4\xa5\xd6\x9c\x51\xd5\x1b\x31\x8b\x86\xed\x56\xe5\x24\xe2\xcc\x20\xa2\x46\xb0\xb0\xbe\x09\x30\xf7\x3a\x68\x50\xe5\x12\x1b\xa9\x6c\x58\x6c\x81\x9f\xc7\x41\xf4\xea\xd8\x64\x07\x6c\x40\xc7\xb7\xf8\xd9\xc4\x6b\x9f\x63\x85\x4d\xb5\xd8\x55\x92\xbb\x0d\x88\xb2\x15\x84\x0c\x10\xb0\x0b\x1c\xe1\x16\x8d\xc2\xd7\x3e\x33\xd1\xa9\x5f\xd3\x63\x72\x8c\xbe\x4b\xf8\x44\xf6\x90\xf4\xa0\xd9\xf0\x50\x12\x25\x7b\xc6\x41\x05\xff\x36\xa9\x60\xdf\xb8\xd5\x2f\xf8\x3e\x94\xfd\x9b\xd2\xcf\x06\x04\x43\xfe\xe9\xf4\xe4\x24\x5d\x1c\x4d\xf2\xe8\x91\x28\xfd\x17\xc8\x14\xb5\x2b\xe4\x10\xa4\x70\x1d\x1e\xd5\xba\xd5\x59\xc6\xb2\x6a\x45\x91\x36\xad\x46\x12\xc0\x4d\xd7\x57\xba\x2f\xac\xea\xa0\x8f\x38\xab\xaf\x1a\x69\xa7\x2c\xf2\xa6\xe3\x55\x02\x5c\x7e\x1d\x6d\xc5\x14\x8e\x0d\x71\x9e\xa7\x09\x9e\x55\x54\x96\x0d\x94\x94\xeb\x94\x5a\x2a\xd2\x73\x87\x78\x0b\x7d\xca\xca\x51\x66\x5f\x39\x77\x24\xb8\x15\xad\xbb\xe5\x78\xc4\xfa\x12\x3d\x13\x53\x0f\x16\x72\x12\xc1\x3b\x91\x53\x39\xf7\x19\x89\x60\x2f\x85\x46\x0d\x1c\xae\x41\x4d\xb0\x8a\xa3\xd3\xac\x9c\xff\xc6\x6a\xa0\x38\x91\xa4\xa7\x1b\x06\x48\x34\x17\x48\x88\x9e\x05\xce\x32\x22\x46\xcc\x42\x9b\x02\x80\x37\xe7\x36\x48\xa4\x29\x9a\xbc\xd3\x28\x5f\x57\xa3\x0c\x93\x3e\xca\x09\x8b\xeb\xce\x37\xe4\x37\xae\x4c\xf5\x58\x91\x1b\xa8\x65\xd1\xb6\x91\xde\x6f\x6f\x36\x6e\x39\xe6\x75\xda\x79\xbf\x12\xa6\x0f\xe5\xa6\x53\x50\x20\x65\x51\x55\xd3\xd9\xfa\xbc\xfa\x5e\x12\x73\x00\x19\x1b\x3e\x8e\x39\x91\x81\x11\x1f\x79\x5b\x5c\x42\xa7\x44\x4b\x1f\x23\xa6\xc9\x38\x74\x38\x18\x80\x6d\x87\xb7\xad\x3b\x8d\x04\x97\xd2\x46\xde\x9b\x76\x56\xe7\x4f\xed\x50\xcb\xcf\xa0\x84\x0f\xaf\xaf\xc6\xcb\x55\xfd\x82\x67\xae\xbe\x9f\x7d\x58\x9b\x64\xdf\xd8\xd4\xda\x6a\x7e\xc5\x5a\x6c\x50\xcf\xef\xe4\xec\x62\xe8\x8b\x58\x55\xba\x5e\x2e\xe8\x17\x22\xab\x37\x97\xf4\x5b\x9e\x71\x50\xdc\xaf\xd2\xc4\x8a\xf2\x7e\xeb\x37\xab\x1c\xef\xbb\x0b\x6c\x5e\x65\xeb\xd7\xf2\x87\x32\xcd\xac\x0b\x4b\xdf\xd3\x36\x35\x5c\x2b\x11\x08\x8c\x2f\xed\x61\x07\xc1\x4b\xbf\x25\x15\x4e\xb3\x30\xe5\xd2\xe1\x86\xda\x69\x9a\xa3\xd6\x74\x09\xbe\x2a\x9e\x79\x84\x4d\x34\x4b\x75\x70\x4b\x5b\xb1\x99\xc7\xeb\xde\xc2\xa4\xef\x23\x8c\xf9\xf5\x72\x98\x93\x45\x11\xb5\x27\xad\xec\xe6\x4a\x70\x37\xd8\xfd\x27\xc4\x43\xc2\x37\x6e\xe8\xae\x49\x8a\x1e\x3a\x4a\x10\x2c\x6d\x38\x06\xe4\xf2\x55\xf2\x7c\x36\x30\x0f\xfb\x31\x9b\x6c\xe0\x23\x5f\x84\x21\xb8\x6a\x6c\x5d\xb1\xc8\x1d\x44\x2a\x04\x79\x22\x02\x68\xc7\xc6\xfc\xb0\xf2\x51\xc5\x89\x20\x38\x5e\x04\x2b\xe2\x03\x0e\x4c\xcf\x60\x1e\x93\x34\xd5\x0a\x3c\xa8\x26\x8c\x1f\xf1\xcc\xe9\x2c\xa5\xb7\xa0\x82\x06\x9d\xea\x1b\x2b\x08\x57\xd0\x5f\xb0\x23\xf2\x99\x4a\xa5\xe5\x8a\x9a\x58\x4d\xd7\x08\x48\x3c\x50\x57\x6b\x4e\xec\x0d\x37\xfa\xd0\xff\xee\xfa\xf6\x7e\x70\x3e\xfa\x50\x44\xe7\xbb\xf4\x33\x8f\x08\xe5\x00\xfe\x39\x1b\x31\x1f\x50\xeb\x01\x90\x61\x2f\x11\x8e\xe3\x02\xd9\xc0\x2a\x91\x46\x66\x5b\xc9\x91\x83\x53\xb1\x36\x94\x76\x45\x33\x0f\x90\x83\x74\xa8\x27\x6b\x85\xeb\xac\x74\x72\x4c\x26\xd5\x8a\x94\x97\x3d\x5d\x36\x21\x76\xab\x32\xba\x36\x51\x0e\x5c\x90\x91\x67\xa7\x2b\xc1\xed\x7c\x82\xcd\x25\xbc\x19\xb7\x73\x1b\xb2\xc5\xa6\x7e\xa4\x9f\x49\x7c\xdb\x20\x55\xed\x25\xa3\xa5\x55\x24\x60\xed\x2e\xe4\x8c\x6e\xa2\xf1\xfb\xa9\x3c\xe8\xef\xda\xb3\xa5\xeb\x02\x92\xad\x80\x57\x05\x6c\x55\x85\x30\x8a\x88\x50\x98\x32\x34\x85\x83\xcd\xa2\x05\x02\xc0\x0e\x02\x3e\xec\x3f\xa2\x94\x32\x40\x0e\x58\xb5\xb4\x0f\xe5\x79\x6c\x20\xb4\x5e\x0e\xaf\x1e\xee\x4b\xa2\xea\xf7\xd7\x0f\xe5\xa2\xee\xfd\x9f\x57\xca\xaa\x95\x16\x56\x05\x0b\x05\x53\x2c\xb2\x10\x2d\xca\xac\x5f\x99\xda\x89\x26\x0b\x45\x1e\x6e\x2f\x76\x92\xef\xea\x9d\x65\x8d\x18\xe1\xa1\x74\x55\x8f\x88\xd0\xe6\xd3\x98\x44\xeb\x50\x4c\xdb\xd3\x91\x89\x82\xd2\xeb\x60\xad\x89\x16\xe1\x0c\x4b\x94\x61\x61\xfd\x50\xb1\x09\x80\x2a\x57\x06\x33\x9a\xd7\x2a\x04\x89\x4f\x44\xfd\xa8\xaf\x3e\xce\xf6\x91\x05\x61\x45\x59\xf0\x8f\x92\xf1\x93\x69\x78\x83\x93\x66\x87\xb2\x22\xd5\xc5\x09\xcb\xd0\x03\xb2\x3d\x84\xb8\x0b\xc7\xa6\x42\x7c\x5f\x37\x07\x2b\xe2\xe2\x09\xb5\x4a\xca\x99\xa6\x48\x03\xa7\xea\x30\x58\x83\xe6\xf8\xd4\x7c\xdc\x12\x91\x2e\x88\x6a\xd7\x6d\x15\x4b\x89\xfa\x37\xc3\x9a\xb5\xbe\xa8\xba\x90\xbe\xac\x72\x36\x89\xf7\x66\xed\x1b\x24\x29\x48\x4f\x3c\x08\x54\x24\x3b\xd3\xdd\x60\x90\x8c\xd3\xff\xa6\x1c\x49\x70\x08\x68\xbd\x75\x2a\x43\x29\xed\x78\x0d\x30\xef\x66\x99\x78\xc5\x32\x6c\x08\x7a\x14\x0e\xc8\xa6\x81\x84\x40\x3f\xcb\x31\xc6\xbd\x10\xf8\x87\x9b\x82\xb9\x36\xb6\x60\x6f\x60\x48\xc5\x6c\xda\xa0\x21\xfd\x68\x28\xda\x83\x65\x00\xfc\x87\x2b\xc8\xe8\x62\x83\x6d\xee\x7a\x38\xdd\x90\xda\x36\x03\x50\x2a\xc6\xe7\xcc\xdf\x16\x8b\x1a\x67\xd8\xda\x1d\x40\x89\x72\x95\x12\xea\x0a\xeb\x1d\x8f\x58\x10\xb0\x22\x8d\xda\xa3\xcf\x88\x2b\x4e\x02\x15\x6f\x19\x00\x5b\x43\x92\x8e\x17\x7e\x4a\x3b\x50\x4d\x91\x57\xf3\x72\x79\x91\xa5\x7e\xec\xe9\x94\x73\xec\x12\x11\x9d\x05\xc5\xc6\x01\x86\xf6\x25\x68\x2f\x28\x28\x60\x3b\x06\x73\x34\x18\x2d\x70\x50\xae\x2e\x48\x5e\x8f\x39\x91\xec\x2b\xe5\x53\x3d\x69\x62\x4b\xa2\xe0\xaa\x7b\x40\x4b\x75\x98\xda\x96\x57\x1f\xf0\x3d\xa0\x33\x6d\xaa\x38\x04\xc7\x6a\xad\x99\xca\xf9\x78\x81\x12\xc2\x58\x24\xe8\xb4\xc9\xaa\xfe\x39\x23\xd1\x36\x10\x32\x37\x58\xe0\x94\x28\x22\x56\x85\x23\x95\x8b\x49\x83\x88\xe3\x76\xd0\xf6\x6b\x76\xd1\x54\xda\xa8\x96\x64\xf1\xda\xed\xc5\x3a\x48\x18\x3f\x8b\x8d\xd0\xaf\xf4\x34\x7e\xb4\x96\xff\x0d\x67\x61\xfb\x29\xa6\x61\xa3\xad\x02\x04\xa0\x5d\xe7\xf4\x3a\x50\x28\xf7\x4b\xa0\x22\xa5\x70\xa1\x03\xc1\x40\x59\x3f\xca\x26\xf0\x93\x75\xbc\x74\x2f\xbc\xdb\x65\x38\xb8\x14\xda\xca\xa1\x2a\xe5\x4e\x00\x95\x80\x4a\x65\x70\x40\xea\x01\x4c\x40\x68\xa9\x8b\x90\x0c\xdc\x7e\x16\xde\xae\x30\xe8\x5a\xc9\xaa\x5a\x5c\xaa\xb2\x5c\x6b\x78\xdc\xbe\xc0\x1d\x3a\x89\x66\xdf\x12\xcd\x3a\x52\x2e\x45\xd7\x6a\xea\x24\xa2\x82\x33\x63\x8b\x3e\x5b\x80\x80\xf2\x04\x21\xf7\xc8\x5e\x91\xb6\x72\x2c\x5c\xfd\x94\xf9\x7f\x95\x39\xb8\x23\xea\x90\x54\xeb\x92\x2a\x8f\x03\x17\x14\x78\xa0\x92\x50\x1a\xb0\x71\x35\x30\x5a\x13\x06\x69\xac\xfc\xc3\x2b\xe3\xc0\x82\xe4\xe6\x05\xcf\xd1\x33\x95\x73\xa4\xf8\x88\x41\x9c\xa0\xf7\x06\x28\x8e\xcc\x8b\x3d\x78\x0b\x60\x10\x64\x3e\x49\xa9\x42\x38\x98\x61\xc9\x24\xd9\xb3\xe7\x59\x7f\x00\x33\xae\xcd\xb3\xaf\x83\xe8\x59\x73\x68\xb6\xb0\xaf\x15\x8d\xec\x9a\x4a\x1f\xc4\x34\xbf\x6c\x32\x7d\xa0\xf1\x84\x1a\x66\xed\x99\xeb\xb2\xe9\x51\xbd\xb5\xc1\x82\x86\x02\xb2\x2b\x95\xaa\x72\xb7\x58\x43\xcf\x9a\x4c\xfa\x62\x23\x5a\xa5\xd2\x17\xaf\xef\x23\x97\xbe\xa9\x4c\xd9\xaa\xdc\x4a\xf7\x49\x83\xfd\xdb\xe5\xec\x2a\xee\x02\xe7\x43\x49\xe9\xa6\x51\x52\x3a\x34\x54\xb3\x22\x21\x60\xfb\xf0\xf2\x4d\xd4\xc1\x22\x3f\x2b\xa4\xa2\x20\xdd\xb2\x8c\x09\x43\xaa\x9c\x9f\x71\x05\x39\x35\x11\x94\x70\x5f\xca\xf3\x1c\xb1\x7a\x09\x64\x35\x4f\xdc\x35\x45\x63\xaf\xe8\x67\xc1\xf9\x73\xb3\xb0\x16\xad\x9f\x7c\x90\x9b\x51\x96\x6d\x31\xf6\xaa\x88\x59\xb8\xf8\x9a\x82\x93\xb4\xe0\xb1\x4d\xc2\x71\xcd\xa9\xac\x1f\xfa\x52\x02\xc5\xda\x73\x61\x2f\xdd\x3d\xaa\x76\x4b\xdc\xb9\x75\xbe\x89\x97\x91\x2d\x37\xb6\x01\xd3\xb1\xd7\xe3\x2b\xae\xda\x6d\xaa\xcc\x02\xaa\xe8\xde\xb0\x50\xab\xf0\x04\xba\xf1\x1e\xb8\x77\xed\xd8\xb1\x09\x75\xf1\x08\xdd\x95\x3d\x29\xcd\xd8\x56\xef\x7f\x89\x59\x6f\x5a\x1a\x38\xf0\x37\x0a\x1b\xef\x4b\x43\xcb\x01\xd4\x04\xb6\x61\x92\x15\x4e\xec\x85\xbb\x9c\xc5\x44\x30\x82\xd5\xfc\xf5\xb2\x2c\xce\x76\x35\x4f\x07\xe3\x7b\xd9\x8c\x8b\xb3\xbd\xd4\x85\x0f\x87\x5b\xae\x91\xbe\x76\x9c\xfa\xf5\x36\x96\x22\x1b\x7c\xe0\xab\x04\x2f\xa9\x8e\x35\x66\xc3\x00\x84\x66\x13\x2a\xdd\x29\x11\xa3\x5e\x9d\x7b\x99\x94\x94\x1a\xbb\xcf\x52\x32\x8a\x3e\xed\x61\x6d\xe5\x35\x4b\xf2\x45\xe4\x7e\xbc\x7c\x3a\xc2\xaa\x2a\xce\x79\x90\xa1\x00\xa5\xb4\x15\xa6\xcc\x72\xaf\x55\x49\x09\x5a\xa6\x4c\x71\x5d\x1e\xc2\xc1\x67\xb8\x7c\xf1\x09\x2e\x5d\xba\x43\x97\xee\x50\xb3\x47\x5d\xba\x03\x42\x87\x96\xee\xb0\x4e\x05\x5d\x65\x00\xf5\x3e\x39\xa8\xb6\x59\x2a\x71\x63\xf6\x77\x8d\x1e\xb9\x7d\x48\xbf\xb3\x21\x86\xf1\x50\xf6\x17\xfb\x43\x6d\x48\xd4\xd2\x67\xd5\xd9\x86\xf6\x4c\xb6\xa8\xba\x05\xb0\x88\x13\x8b\x43\x67\x03\x96\xcb\xf6\xa7\x55\xa6\xd2\x11\xfb\x9e\x3f\x93\x27\x22\x7a\x08\x2b\x94\x72\xa9\x80\x0f\xbb\xf8\x18\x38\x08\x25\x48\x73\x13\x07\x81\xd1\x15\x4e\x49\x6c\x2a\x1e\x06\x61\x8d\xd6\x60\x6b\x5d\xad\x75\x70\xab\x80\x1c\x6a\xb6\xc1\xc5\x4d\x8c\x98\x09\x35\x34\xe1\x6d\x20\x2b\x50\x37\x31\x20\x98\xdf\x79\x47\xf0\xef\x8e\xd1\xbd\xbe\x9f\xa8\x2c\x8f\x37\x40\x5f\x6b\x1a\xdb\x88\xcd\x04\xcf\x33\x6f\x43\xe3\x13\x53\xfa\xd6\x44\x3f\x2d\x3b\x82\x61\x30\xce\x0b\x1c\xe1\x58\xeb\xe2\xab\x09\xe7\x4d\xa2\x50\xb7\x82\x30\x0a\x09\x48\x1f\x43\x1f\x5a\x67\x43\xdd\x8d\xff\x36\x00\x6e\x59\x05\xc4\xfe\x42\xce\xe5\x73\x22\xc1\x2a\xe4\xad\xee\xa5\x3c\xf2\x32\x56\x41\xed\x38\x57\xd9\x44\xbd\xdf\xc2\xd9\xf6\xeb\x61\x10\x8a\xce\x6d\xcc\x97\x49\x52\xb5\xf7\xc4\x8b\x59\x4b\x5b\x47\xcf\x36\xf1\x8b\x9b\x5c\x64\x1c\x24\xb1\x64\xe1\x60\x1b\x2c\xd2\x5b\xc6\xb3\xdc\xc4\xb5\xd1\x30\xcc\xa9\x96\xb2\xa9\x54\x97\x58\x45\x73\xcd\xb9\x0b\xc4\xb3\x3d\xc5\xfb\x15\x5c\xf9\x65\x2d\xa8\x35\x33\x38\x0b\x7b\x6f\x70\x29\xb4\xb0\xa8\x9b\x7b\xdf\x85\xd7\x3b\x49\x22\xd5\xfd\x19\xb7\x9b\x2d\x68\x1d\xd8\x45\xdd\x27\xf6\x89\x9e\xe8\x3a\x2a\x5a\x37\xfe\x76\xb4\x55\xae\xb8\xb5\xf7\x48\xc2\x1d\x20\x64\xce\x2d\x60\x57\xf1\xa2\xad\xd0\xda\xe0\xfe\x17\x74\xbb\x2c\x20\x8b\x92\xff\xa4\xc5\x11\x6f\x71\x4d\x71\xa6\x95\x08\xc5\xf5\x2d\x29\x66\x46\x8e\x35\x71\xb2\x08\xa3\x5c\x50\x77\xf6\x2b\x39\xe1\xcd\xd4\x01\x16\xca\x93\xb0\xa2\x52\x84\x83\x62\x73\xc6\xe1\x8f\x23\x95\x63\x1f\x98\x08\x34\xe1\x8a\xa0\x9b\xfc\x77\xe7\x58\x17\x4e\xbc\xab\xd9\xd3\xb5\x84\xbd\xc3\x2e\xe3\x3a\x7c\xc3\x56\x27\x8d\xb2\x59\x00\x8e\x58\x6f\x25\x6e\x53\xfb\xa0\xf6\xcb\x76\xf5\x1b\x6a\x3f\x75\xb2\xcf\x36\xdf\xae\x00\x6f\xda\x3a\x36\xbb\x14\xe7\x6e\x03\x61\xad\xf4\x14\xc2\x56\x5a\xfb\x1d\xa0\xcf\x52\x70\xd4\x63\x2b\x4d\xfd\x97\xff\xcb\xd4\xca\x32\x4b\xf3\x5f\x88\x8b\x11\x33\xbf\xf7\x7c\x9d\x0a\xfd\x42\x01\x00\x8b\x53\x52\x40\x64\x8a\x32\x98\x1e\x40\x8a\x58\x30\x34\x03\xf6\xeb\x61\xfa\xf5\x18\x1e\xf3\x09\x11\x8c\xe8\xa1\x39\xf0\x01\xcf\xcc\x52\xcc\xf0\x0c\xa0\x85\x7b\x10\x19\x07\xe2\x6a\xa1\x8a\x18\x92\x36\xf5\x0e\x81\x5b\x69\x66\x69\xf3\x6d\x8b\xba\xbf\xd0\xa7\x11\x65\x2d\xb2\x69\x11\x5e\x51\x4f\xfd\xb7\xb6\xff\xed\x24\xf6\xfb\xfe\xdd\x0f\xe3\xdb\xc1\xdd\xf5\xc3\xed\x59\x49\x6c\x3f\xbb\x78\xb8\xbb\x1f\xdc\xd6\x3e\x2b\x72\x55\xff\xfa\x30\x78\x68\x78\xe4\x1a\xb8\xe8\x7f\x37\x28\x15\xd1\xfe\xeb\x43\xff\x62\x78\xff\xf3\xf8\xfa\xe3\xf8\x6e\x70\xfb\xe3\xf0\x6c\x30\xbe\xbb\x19\x9c\x0d\x3f\x0e\xcf\xfa\xfa\xcb\xf0\xdd\x9b\x8b\x87\x4f\xc3\xab\xb1\x0b\x3b\x0e\x1f\xfd\x74\x7d\xfb\xc3\xc7\x8b\xeb\x9f\xc6\x41\x97\xd7\x57\x1f\x87\x9f\xea\x66\xd1\xbf\xbb\x1b\x7e\xba\xba\x1c\x5c\xad\x2e\xd6\x5d\xbf\x1a\x8d\x75\x80\x83\x8b\x2c\x30\x1a\x05\x62\xd2\x64\x61\x49\x9b\xfe\x0a\xbe\x8b\x1b\x43\x8f\x47\x3d\xf7\x97\x29\xad\x7d\xa4\x59\xa0\xf3\x8b\x15\xdc\x63\xc4\xbc\xe3\xd2\x5f\xaa\x0a\xcf\xa4\x4b\x3d\x2e\x8d\xf6\x14\xf5\xe1\xac\x80\xc2\x50\xea\x14\x32\x1b\xfc\x48\x9d\xab\x1b\xe8\x30\xa1\x29\x05\xaf\x37\x3a\x42\xd5\x0d\x2f\x37\x68\xe7\x04\x43\xb0\x7e\xbb\x78\xd5\x69\x90\xd5\xac\x66\xa0\x94\x53\xe4\x38\x34\x31\xe6\x04\x83\x3d\xbb\x60\x38\xa5\x51\x35\x05\x03\xe0\x57\x51\x01\x35\x52\x6d\xb1\x44\x60\xe5\x96\xe7\x04\xfd\xf0\x97\x62\x50\xe0\xc1\xb0\x9a\x77\xbe\x54\x51\xcf\x3e\x10\xb9\x59\xd5\x75\xe4\x59\xea\xc9\x1d\x73\x6b\x5a\x86\x73\x6b\x2b\x77\x83\xbb\x29\x67\x01\xdc\x58\xc9\xf7\xa4\x8f\xb7\x99\x51\x85\xc6\x4f\xd1\x1d\x40\x9d\xc8\x42\x75\xd7\xbb\x98\x25\xf9\x8c\x32\x44\xd3\x2c\x21\x45\xcd\xf7\x09\x99\xe3\x27\xca\x5d\xf9\x0a\x53\xe5\x03\xd6\xd1\x8a\x56\xe8\x08\x35\x1e\x94\x53\xd4\x8f\x63\x59\x66\x70\x25\xca\x71\x2c\xf3\xa8\x3c\xec\x10\x21\x8c\xc5\x9e\x6d\x56\xe8\xa8\x38\x72\xb0\x62\xfb\x07\x73\x59\x66\x87\xe5\xbb\x77\x87\xeb\x5f\xaf\xe0\xd8\x91\xf2\x78\x2b\x61\xe0\x1e\xcb\x47\xc7\x9a\xd7\x09\x04\x0e\x56\x67\xb7\x1e\x2d\xbe\x4e\xdb\x4e\xfd\xca\x8e\xe1\xa0\x6d\xd7\x67\x23\x2a\xf4\x9a\x2e\xdd\x8c\x93\x4a\xe9\xae\xd6\xfd\x95\x4a\x7f\xd5\x76\xb6\x57\x6f\x4f\xbd\x34\x06\x47\x72\xec\xe9\x7f\x83\x79\xdc\xc0\xa7\xd7\xfe\xcb\x95\x22\xdb\x38\x58\xb7\x4d\x7d\x40\x4b\x49\xba\xd6\x0f\xb4\x92\x0e\xf7\x04\xef\xd4\x5e\x18\x84\xc2\x0b\x34\x02\x77\x1f\xa6\xcc\x96\xe3\x21\xde\x1f\xe5\x0a\x50\xeb\x73\xec\x4b\xc4\xe1\x09\x7f\x2a\x29\x97\x29\x91\x12\x37\x00\x96\x04\x26\xb1\x5d\x18\x83\x3f\xa1\xf6\xc3\x96\xf4\xe4\xce\xe4\xbd\xfe\x6a\x95\xd1\xe7\x36\xd4\x8c\xdd\x44\xb5\xc0\x1a\xbb\x48\x5b\x74\x6d\xf2\xed\x34\x7f\xe9\x15\xc1\x34\x5c\x04\x31\x46\x4d\xee\x9f\x96\x66\xb5\xea\x82\xd5\x56\x59\x0a\x5d\x78\x9b\xc7\xe0\x04\xad\x6f\x8d\x88\x6d\xfd\x2a\xb8\xbc\x3e\x1b\x50\x5d\xc9\xdf\x19\x56\xa0\x8e\x78\x9a\x1a\xb9\xa0\x64\x4b\xed\x21\x6c\xd2\x1c\x0b\x69\x4a\xe6\xd1\xdc\x78\x99\xf4\x95\xd1\x1b\xb1\xe7\x60\x43\x4a\x81\xc0\xfd\xb0\x25\x40\x13\xfd\xac\x8f\x1b\x7d\x2a\x85\x57\x83\xc8\x48\x21\xd6\x37\x20\x04\xe3\x10\x2c\xca\x47\xad\x21\xf0\x60\xbf\x76\x20\xf5\x2d\x6a\x05\x56\xd6\xb7\xa9\x62\xa0\x9f\x5b\x50\xa8\x6f\x07\x4d\xb9\xed\x10\x82\x5a\x81\x75\x23\xd8\x43\xa9\xc0\x57\x85\xf7\xf6\xe9\x9a\x26\xbb\x37\x9d\x58\x8c\x0a\x3d\x5d\xb7\xda\xbf\x77\x33\xfa\xbd\xf1\x3b\xe4\x0d\xa0\x26\x41\x6b\x1e\xe1\x1b\x1d\x69\x99\xd5\x25\xdb\xdb\x40\x0c\x89\x8e\x0c\x6a\xe0\x57\x10\x69\xd9\xbf\x19\x7e\xd5\x43\x5f\x85\xd9\x66\x5f\x6d\x75\x00\xed\xb8\x6d\xb9\x40\xd0\xa6\x4a\x29\x07\xe5\x63\x07\x7b\x55\x39\x89\x76\xcf\xec\x41\x44\x4d\xe7\x50\x7f\x59\xfa\x06\x9c\xd3\x50\xfe\xce\xf8\x6f\x7d\xc0\xb3\x75\x01\x19\x19\x97\xca\x9a\xb5\x8b\x47\x6c\xb2\xa8\x3a\x79\x7a\xde\xcb\xd3\xfa\x94\xee\x5c\xd2\x4d\xb7\xb7\x9c\x9e\xbc\xe7\x40\xdc\xd5\xf7\xc1\x9a\x84\xe7\xbe\x89\xb9\xe6\xd3\x80\x8b\x35\x45\x29\x74\x11\xec\x75\xb3\x2a\xd9\xcb\xdc\x62\xd6\x6e\xca\x3a\xf9\xe7\xbd\x91\x5b\x8b\xb0\xef\x7e\xdd\x8a\xd8\x88\xff\x06\xe1\xba\xa3\xb2\x97\xa5\xb2\x7d\x64\x3c\x94\x07\xb7\xf9\x05\x7a\x66\xe4\xb8\xa0\x19\x67\x70\xd5\xca\x84\x67\xf0\xa5\xba\x7f\xeb\x0b\xe6\x6e\xe8\xf3\x0d\xd6\x64\xbd\xd3\xf7\xce\x04\x0e\x18\xb7\xeb\xf2\x58\xab\x43\xed\x2b\x5b\x84\x88\x53\x93\xdd\xa8\x68\x4a\x7a\x88\xb3\x64\x11\x04\x3b\xd8\xf3\x0a\xe4\x66\x62\x94\xe6\x84\x0a\xd7\x89\xc5\x18\xdc\x28\x1d\x7e\x43\x69\xbc\x89\x46\x76\x88\x34\xb9\xea\x5f\x0e\xce\xc7\x83\xab\xfb\xe1\xfd\xcf\x35\xf8\x91\xe5\xc7\x0e\x42\x32\x78\xe1\xee\xe7\xbb\xfb\xc1\xe5\xf8\xd3\xe0\x6a\x70\xdb\xbf\x5f\x03\x2f\xb9\xaa\xb3\x26\xe8\xc2\x5c\xd6\xa9\x6f\x9b\xc0\x17\x3a\x33\x6f\x4d\xef\xcb\x20\x93\x41\x27\x94\x34\x00\x4d\x9a\xd4\x7f\x16\x13\x81\x62\xf2\x44\x12\x9e\x15\x66\xd5\xda\x05\x0b\x10\x28\x6b\xda\x5f\x85\x42\x09\x6d\x56\xd7\xf8\x14\x99\x5a\x6f\x41\xb9\x5b\xdf\x20\x88\x7c\x58\x10\xf6\x95\x42\xe4\x73\x96\xd0\x88\xaa\x20\x35\x90\x0b\xeb\x5e\x31\xee\x43\x88\x4e\x5d\x43\x5c\x7b\x8b\x46\xd9\xbb\xce\x1f\x7a\xd2\x97\xb5\x7d\x7f\xa2\x3c\x22\xda\xda\x02\x42\x7b\x50\xec\x1b\x9c\xc6\x4b\x80\x6d\x5b\x8c\xee\x25\xcc\x03\xcb\x39\x3a\x36\xbd\xaf\x01\xcc\xad\x7e\x90\xeb\x6f\xc3\x55\x71\x32\xa5\x73\xbd\x3a\x50\xa6\x1d\xa5\xbe\x71\xb8\x4b\xa9\xb0\xe6\x1e\x90\x37\x6c\xec\xfa\x86\x01\x0b\x4b\xf5\x62\x98\x89\x39\xc5\x48\x90\x94\x2b\xad\x80\x99\x88\x80\x9e\x16\xaa\x28\x4e\xe8\xaf\x80\x51\x25\xc8\x71\x10\x41\xe1\x90\xbd\x0a\xf7\x81\xc5\x8f\x38\x1e\xb1\xf3\xc1\xcd\xed\xe0\x4c\x33\xa4\x63\xf4\x20\x01\x7e\xaa\x34\xf5\x73\x4b\xde\x46\x1c\x0b\x23\x19\x28\x93\x8a\xe0\xa6\x60\x30\x22\x04\x17\xed\xf9\x83\xef\x6f\x00\xdf\xd5\x93\x37\x3c\x2b\xd9\xa6\x9c\x01\xe0\xaa\xb1\x2a\x72\x90\x33\xb0\xf7\x9c\xac\x5b\xfc\x5c\x5a\x91\x10\x7e\x03\x24\x91\xf2\xaa\xbf\xe0\x6a\x03\x80\x67\xfb\xf9\x95\xfa\xbc\x81\x6f\x57\xcd\xf3\x1e\x42\xec\xa4\x2a\xd0\x40\x0d\x60\xa8\xaf\x7a\x53\x99\x67\xa3\xa8\x28\xde\x02\xaa\xa3\x42\xfa\x13\x32\xc3\x0c\x89\x9c\xb1\x0a\x3c\x6c\x68\x69\x5b\x0e\x9a\xd9\xf4\xa8\xea\x35\xc3\x29\xcf\x19\x28\x0d\x10\xc6\x5a\x33\x18\x99\x11\xa6\xd6\x0c\xe6\xad\x80\x58\x2a\x43\x3d\x5c\x2c\x96\x9a\x81\x36\xc1\xb1\xd4\xf9\x93\xa0\xf4\xf2\x66\xd7\xb2\x0b\xca\x2b\x39\x95\xf4\xa1\xf2\xf7\x73\xbd\x96\x8d\xe5\xe3\xce\xdd\xdd\x63\xf9\xb8\xbe\xab\x98\x44\x8f\x9b\x5e\x36\xd5\xcc\xcc\xc4\x56\xae\x5e\x32\xf6\x2d\xf4\x53\x5b\x9a\x05\x0a\x96\x47\x8f\xe8\xfb\xfb\xcb\x0b\x34\xa5\x5a\xee\xd5\xd7\xca\x15\xd6\x32\xf6\x83\x48\x9c\x5d\xd8\xda\x56\x73\x91\xf8\xbb\x17\x36\xde\x89\x52\x81\x94\xa0\x6f\x34\x3c\x23\xce\xd8\x2b\x2c\xda\x5e\xa5\x34\x8b\xc0\x2c\xe6\xa9\x99\xc7\x89\xcc\xa7\x53\xfa\xf9\x58\x61\xf1\x4d\xc3\x7a\x98\xa8\x8a\xf1\xdf\xf9\x64\xac\x47\xb4\xe3\x45\x5c\xd7\x1c\xb2\x05\x95\xfd\xb2\xd9\x99\x9d\x9b\x77\xff\x2f\x9f\x40\xb6\x7b\x26\x38\x20\x00\x82\x77\xce\x46\x2a\xd8\x57\x1c\x25\x1d\x23\x97\x40\x55\x02\x39\x89\xb8\x10\xc4\x26\xc9\x9b\xda\xa2\x19\x16\x8a\x82\xb5\xd6\x81\xa4\x94\xd0\xf1\x8b\x2d\x0a\x4b\x7e\xcf\x71\x81\x44\x3d\x21\x04\x1c\x3c\x19\x4d\x36\x53\x7a\xcf\x4a\xbe\xc9\xca\x09\xb4\x91\xa7\x16\x37\x13\x0c\x32\x6b\x45\xac\xc1\x13\x61\x6a\x2f\xfa\x09\x34\x51\x93\xb6\xdf\xce\xcb\x60\x4a\x7c\x0e\xcf\x8b\xcb\xcd\x85\xf4\x86\x51\x4d\x4a\x60\xb8\xe7\x6d\xa2\x94\x75\xa9\x37\x39\xfa\x9f\x5a\xfb\x8e\xe1\xd5\xe5\x75\x59\x13\x1a\x6f\x57\xbb\x28\xf5\x5d\x84\xb5\x3a\x68\xff\x2d\x81\x7c\x24\x31\x56\x8c\x00\x40\xc2\x2a\xa7\xd5\x3d\x37\x7d\x6a\xda\xaa\x74\xb9\x76\xcb\xb7\x40\xad\x29\x35\xf3\x89\x40\x4a\xe7\x3e\x02\xd1\x37\xc9\xdd\x87\x81\x3c\x88\x04\x42\xa8\x57\x5a\xb1\x4c\x99\x71\xcd\xf9\xbc\x64\x87\x5b\xc8\xe8\x66\x30\x5a\x68\x24\x99\x20\x91\xbe\xca\x4e\xd1\x4d\x42\xb4\xe4\x95\x6b\xe9\x2b\x4f\x12\x87\xf0\xb5\x5a\x3a\xdc\x08\x95\xee\xc5\xe7\x15\xe8\x1e\x2b\x26\xe6\x10\xee\x56\xcf\x2c\x58\x83\xfd\x23\x2e\x04\xeb\x0b\x26\x64\x30\x24\x96\xb5\x48\xe0\xf0\x0b\x13\x37\x0b\xa6\x24\x5c\xba\xc8\xe8\xaf\x9a\xfd\x0a\x22\xe7\xbc\x31\xc9\x31\x9c\xed\xcb\xcc\xc1\x2d\xe5\x0b\x4e\xc2\xdd\x87\x4d\x71\xd5\x2d\xe4\x9a\xca\x1d\x58\x12\x71\x56\x4d\xd1\x57\x7f\xf0\xd1\x1f\x16\x6f\xd5\xde\xad\x76\x68\x70\x4b\x16\xa6\xb6\x10\xfb\xac\x70\x5d\x14\xca\xcc\xc2\xf8\x5e\xfd\xe7\x85\x01\xb9\x48\x09\xa0\x4a\x16\x55\xe7\x90\xbe\x6b\x9b\xb6\x58\xcf\x73\x9c\x8b\x8d\x20\x29\x0a\xd4\xf2\x4d\x38\xb7\x4d\x46\x29\x86\xa5\x17\xa1\x9e\x5d\xda\x62\x12\x20\x46\xdb\x50\x23\x59\x42\x82\xb3\x64\x63\x96\xb1\x56\xc5\x6b\x66\xca\xbb\xba\xd5\x40\x4a\x2e\x44\x99\x97\xf2\xae\x95\x28\xb0\x34\x81\x0e\x5b\x6c\x73\x6c\x31\x5b\x59\xc4\xd3\x1e\x20\x01\x2a\x01\x89\xff\x85\x03\xad\x2a\x38\x58\xa3\xf7\xba\xcc\xa7\xd2\xee\xb4\x4a\x73\x2a\x7d\xa1\x79\xc9\xf9\x8e\x1e\x38\x3d\x99\xc5\x18\x12\x47\x77\x89\xc2\x29\xcd\xdf\x78\x0f\xa0\x4d\x12\x23\x83\x5e\x60\x90\x8f\xed\xda\x79\xcf\x49\x86\x05\x61\x6a\xc4\x6e\xf5\x28\xcc\x17\x45\x24\x86\x8b\xc3\x71\x68\xf4\x50\xb3\x76\x8a\xb0\xfd\x0a\x16\xbd\x29\x10\x4e\x8e\xcd\x4b\xa0\x9a\xbe\x60\x92\xfd\x77\xe6\x1d\x83\x79\x60\x31\x7f\xf4\x54\xe9\xb4\x50\xe3\xb5\x00\x19\xcd\x29\x40\x0e\xc4\x44\xda\x0b\x89\x2a\x8b\x29\xe1\xc5\xef\x9c\x38\xfc\x65\xf8\xcc\xf3\xaf\x3a\x86\xed\x0c\x05\xcc\x19\xe8\xe4\x88\x05\x7d\xac\x80\xeb\x34\xca\xfa\x96\xaa\x04\xec\x33\x8d\xbd\xe3\x0b\xfe\x69\x76\x88\x0b\x3a\xa3\x2c\x28\x9a\x64\xa7\x97\xe2\x0c\xcc\xbb\xe6\x0c\xf2\xa9\xbf\xd3\xee\x6d\x96\xc1\x31\x8c\xf8\x7f\xfe\xfb\x6f\xc7\xb4\xc9\xfb\x21\xc7\x76\x05\x0e\x61\x27\x37\xdb\x96\x70\xe7\x03\x14\x91\x06\x74\x8a\x40\xa7\x95\xa5\xcc\x89\xe2\x57\x7b\xb9\x69\xa2\xe1\x6a\x6e\xdc\xbd\x65\x72\x07\xdf\x88\xc8\x57\x9c\x0d\x73\xc5\xbc\xed\x5a\x52\x09\xd9\x01\x7a\x24\xe6\x24\x7b\x03\x41\x58\x90\x7c\xc9\x4c\x33\x62\xc5\x27\xd2\xe0\xa1\x18\x78\x57\xf3\x43\xb1\x3a\x2d\x17\x66\x15\xef\x2f\x22\x25\x0a\x77\x78\x10\x8d\xec\xca\x67\x98\x28\x52\xdd\x7e\xe5\xa6\xad\x70\xee\x00\xe7\x70\x97\xa8\xcd\x39\x96\x2f\x17\x9a\x53\x5b\xf6\xc9\x58\xd3\x43\xe1\x61\x5d\x90\x8e\x19\xa4\xc9\xf6\xd4\x1b\x92\x4b\x22\x0c\xa7\xf3\x70\x58\x96\x12\x42\x14\x47\x88\xd1\x5c\xe3\x6b\x24\x29\xa6\x1b\xe5\x13\xe8\xf7\xeb\x31\x26\x4b\xce\x06\x3c\x23\x62\x1c\xe7\x6a\xe9\x58\xac\x8a\xf1\xd7\x1f\x9d\xe7\x6a\xb1\xbe\x7d\x99\xe0\xe5\xb2\x37\xab\x70\x3d\xf5\xfb\x0d\xcd\xae\x97\x98\x83\x10\x9f\xb2\xd4\xdc\x80\x9a\x49\x2a\xa8\x99\x36\xe6\xb4\x64\x22\x81\x1b\x98\x29\x80\xd4\x2b\x34\x29\x7b\x45\x1b\x6c\x6f\x18\x39\x9a\xe4\x85\x49\xc9\x57\x4b\x88\x8f\x47\xec\xa3\x29\x37\x02\x5a\x9e\x19\x40\x04\x09\x3f\xe4\x73\xc6\x25\x29\x65\xa0\xd5\x54\x40\xb0\x19\xa4\x76\x18\xf5\xc2\x7a\xf1\xd1\xee\xb2\xfa\x9b\xe3\x9f\x2e\x6f\xf8\xf2\x94\xeb\x29\x70\x27\x71\x30\xa2\x19\xd5\xb4\x33\xae\x3d\x69\x2f\x57\x85\xb7\x88\xe9\x02\x1c\x2c\x95\x2c\x7a\xc8\x4f\xaf\x42\x10\x09\x79\x22\x60\x4e\x87\x31\x86\x75\x2e\xca\x76\xbd\x06\x76\xb2\xee\x00\x15\xe9\x9f\xc0\x16\x50\x5c\x1d\x41\x39\x49\xae\x8e\x16\xcb\xe9\x3f\x3b\x67\xaa\xd5\x05\xa6\x6c\x20\x9e\xf7\xc3\x7a\x1f\x0b\xa2\x10\xf9\xac\x88\xad\x08\x7a\xef\x72\x09\x97\xd3\x0f\x50\x7d\x3a\x54\xb3\xec\xf8\xe2\xb5\x99\xfb\x2e\x83\xdc\x25\x4b\xc6\xee\xca\xb7\xc9\x83\x73\xcc\x62\x9b\x11\x6b\x95\x0c\x2d\x6c\xc1\xec\x8c\xd1\xcd\xe7\x0a\xd8\xbc\xce\x00\x28\xdd\xb4\x69\x10\xdd\xe1\x22\x73\x0a\xa3\x56\x59\x20\xbc\x82\x0b\x2d\xb9\xe7\x4c\xd1\x44\x13\x87\x1d\x83\x44\x53\x88\x8c\xb3\x40\x85\x10\xd9\xde\x84\x85\x47\xa5\xa4\x6c\x36\xb6\x2b\xe9\x92\x3b\xdb\x5d\x0c\x65\x9a\xba\x34\x4d\x99\x1f\xbf\x73\x0d\xad\x36\xaa\x1b\xb2\x06\x9c\x32\x97\x56\x0a\x1a\x07\xe3\x6e\x32\x16\x60\xce\x65\xa3\x8e\x69\x6c\x96\x82\x9a\xc2\xd3\x30\xd1\x4d\xec\xee\x20\xd3\x2d\xe3\x38\x14\x57\x88\xb4\xa9\xa2\x26\x01\x0c\x22\xf5\x55\x43\x2e\xac\x6c\xcc\x81\x1d\x32\x2f\xa2\xd9\xb2\x57\x3e\xd3\xbf\x92\x4e\x8b\x5d\x77\x36\x1d\x01\x27\xc9\x04\x47\x8f\x5e\x0b\xf3\xb6\x08\x2e\x5c\xd9\x00\x2d\x57\x42\x5d\x34\x43\x5c\x7a\xa0\x11\x48\x37\xa1\xb7\xd0\x20\xf9\xd8\x61\x17\x9d\x9b\x55\xb3\x10\x69\x06\xba\xc9\x8c\xde\xe4\x36\xc4\x24\x4b\xf8\x22\x6d\xb8\xcf\xaa\x29\x84\xbb\x44\xea\x34\x65\x30\xee\xf5\x2a\xab\x30\xbd\x8d\x2f\xb3\xa5\x7c\xa4\x3d\xe0\x4a\x6d\xc0\x25\x3f\x25\x7c\x02\x26\x55\x6b\x7e\x70\x39\x36\x41\xaa\x47\xf5\x3c\x6f\x9a\xf9\x53\x3d\x91\x54\x66\x89\x56\x66\x9a\x7b\x30\x39\x27\x2f\xbb\x6f\x06\xa3\x60\xbd\x75\xb0\x7d\xb4\x76\xed\xe7\x2f\x81\x60\x7c\xe1\x24\x01\xf3\xae\xe1\x5f\x15\x2b\x9b\x49\xf6\x3b\x36\x4e\x6a\xc5\x47\x4c\xe1\x99\xdb\x5c\x2b\x5c\xf2\x67\x46\x84\x9c\xd3\xac\x54\x2f\x71\xe7\xf0\x70\x4b\xd1\xf6\x3f\x26\x18\x7a\x03\xde\xc9\xb3\x23\x83\x50\xa2\xe9\x43\x66\x38\x2a\xac\xa2\x51\x82\xa5\xa4\xd3\x45\x00\x2c\xe2\x23\x6d\x21\x7d\xab\x6c\x46\x08\x4a\x94\xd5\x31\x1a\x33\xbe\xfd\x64\xd6\xef\x9e\x55\xf8\x50\x3e\x7e\x34\x0e\x11\xdc\xf4\x7d\xb2\x8c\x22\xe3\x6e\x6a\x8b\x26\xd3\x88\x44\x6b\x20\x04\xb6\xcb\x84\x5f\x09\xfe\xd3\x6c\x46\x28\x84\x49\x3b\x6c\xab\xc8\x78\xc0\x8f\x10\x0c\x47\x95\x52\x29\x61\xf3\xb5\xe2\xe4\xec\xc2\x9a\x38\x3d\x58\x08\x60\x2a\x14\x1f\xf7\x90\xdc\x09\x64\xab\x0d\x5d\x9c\x93\x84\xec\x25\xe2\x7a\x0b\x22\xa9\x86\x33\x04\xe4\xb1\x92\x34\x8a\x32\x03\xeb\x8d\x0b\x5b\x04\x82\x37\x40\xf5\xd4\x0f\xfd\x27\x33\x50\x1b\x0b\x5e\xb7\x8b\x60\x18\x84\x55\x6e\xab\xbb\xd4\x61\xfe\x99\x16\x2c\xc9\x15\xdd\x94\xe8\xaa\xe8\xd4\xcb\x2b\x87\x48\x6a\x6f\x1c\x32\xbd\x34\xae\x4f\xa4\x4d\x78\xc7\xda\x03\xb0\x15\x07\x5a\xe6\xd3\xed\xe8\xc2\x3a\x50\x15\x47\x33\xa2\x4c\xf5\xff\x98\x3e\xd1\x38\xc7\xc9\xbb\xa2\x89\xbd\x25\x7c\xec\x69\xf5\xeb\x0f\xf9\x66\xa7\xf6\x8e\x28\xe9\xae\x84\x25\x18\x45\xbb\x39\x07\xb8\x05\x87\x71\x2c\x8d\xe0\xfa\xc5\xcb\x2d\x3b\x83\x24\xd8\x91\x59\xa8\x80\xdf\x90\x40\x65\xe6\x18\xdb\x2f\x3c\x2c\x40\x09\x10\x0b\x97\x40\x04\xcd\x1a\xbd\x3d\xd7\xab\x92\xf6\x97\x2e\x7a\x6d\x4e\xe3\xd5\x51\x15\xd4\xdd\xc9\x83\x9b\xc9\x83\x0e\x64\xf3\x00\x2f\xff\xa6\x63\x70\x98\xf7\xcf\x01\x08\x87\x4b\x57\xe2\xfe\x44\xc4\x77\x44\x26\x07\x21\x29\x2e\x6d\xc5\x6b\xc9\x8b\x47\x0e\xe5\xa8\xc0\x0c\x3a\xdc\x2d\x3a\x8c\x93\x7c\x6b\xdd\x40\x2f\x77\xc1\xae\xa7\x97\xbd\xd0\x07\x00\x7e\x62\xc8\x8b\xce\x6d\x05\x11\x38\xbc\x41\x2c\xdd\x92\xef\x61\x4d\x94\xa2\x1d\x5e\xab\xf8\xc4\xa5\xe5\x7c\x89\xed\xb5\x49\x70\xad\x37\xf7\x25\x49\x6d\xd3\xb1\xec\x43\x47\x79\x61\x2f\x8e\xa5\xc6\xe0\x83\x2e\x58\xb8\xdd\x2d\x5a\x03\xad\xe3\xb6\x6c\x9f\x87\xac\xae\xec\xdb\xee\x69\xfc\x2e\xc7\x6f\x9c\x09\x32\xa5\x9f\xb7\x12\xc5\x6f\xe0\x53\xab\x5e\xea\x65\xae\x14\x92\x03\xf7\x0c\x14\x9e\x0b\x02\x1a\xed\x4a\xdb\x62\x53\x23\x56\x64\x46\xda\xb4\xc8\x47\xb2\x40\x5c\x94\x7e\xda\x16\x04\x72\xff\x45\xef\xcc\xbe\xce\x95\xca\xe4\xe9\xc9\xc9\x8c\xaa\x79\x3e\x39\x8e\x78\x6a\xe2\xf0\xb9\x98\x99\x3f\x4e\xa8\x94\x39\x91\x27\x7f\xfc\xc3\x1f\x8a\x2d\x9e\xe0\xe8\x71\x66\x60\x75\x96\xfd\x4e\xe5\x2d\x27\x58\xee\x16\xd9\xe3\x52\xd8\x5e\x38\x95\x39\xe8\xc6\x25\x8f\xea\x6f\xa4\xc2\x69\x16\x86\x82\x9a\xb2\x71\x52\xe1\xa2\x58\x05\xe4\x25\xea\x69\xa2\x39\xce\x32\xc2\x9a\xcd\x0e\x26\xd1\x74\x07\xd6\xe3\x52\x55\xed\x08\xc9\xe7\x2c\xc1\xac\x0c\xbf\x00\x95\x97\x04\x89\x08\x53\x16\x1a\xa0\x28\x25\x0d\xd4\x68\x20\x80\x0c\xff\xdf\x2c\x15\x11\xe6\x48\x65\x51\x52\xcd\x0d\xc7\x96\x37\x75\x45\x2f\x71\xb0\x74\xd5\x92\xb2\xc5\xda\x11\xb7\x6a\xab\x92\x14\xef\x96\x4b\x8b\x6f\x5e\xd2\x46\x70\x36\x26\x9f\x35\x93\x93\xdb\x02\x76\x3d\x48\x22\x51\xff\xa7\x3b\x24\x17\x4c\xe1\xcf\xa7\xe8\x92\x32\x10\x60\xbf\xe7\xb9\x90\xe8\x1c\x2f\x8e\xf8\xf4\x28\xe5\x4c\xcd\xd1\x25\xfc\xaf\xfd\xe9\x99\x90\x47\xf4\x33\xc1\xc2\xf2\x07\x5b\x92\xce\xd7\x37\xd7\x24\x24\x72\x26\x11\x79\xd2\x27\xf4\x0f\xff\x89\x52\xd3\xf2\x29\xfa\xf6\xe4\x0f\xff\x89\x7e\x07\xff\xff\xff\x47\xbf\x6b\xd0\xf4\x37\x83\xfc\x82\xca\xc5\xb7\x65\x77\x6e\xaf\xb2\x52\x5b\x54\x73\x3f\x13\xbc\xd8\xa9\xda\x96\x1f\x69\xf4\xc8\xa7\xd3\xb1\x26\x0c\x93\xc8\x37\xc6\x62\x09\x2e\x7a\x4b\xfc\x54\x6a\x6b\x4f\x9b\x4a\x76\x45\x0d\x19\xdb\xa9\x41\x7c\x70\xec\x5a\xe6\x45\xe5\x5d\x08\x22\x2a\x55\x33\xa6\x12\xbe\x22\xb1\xe6\xaa\x9b\x9c\x0e\x67\xdd\x73\xc9\xdf\xce\x82\x13\x22\xa4\x84\xf5\xd4\x7d\xe0\x5f\x18\xc5\x6a\x02\x7d\xec\x42\xd6\x1e\x87\xa5\xf0\xda\x2f\x26\x66\x12\xa6\xf6\x56\xf1\x92\x72\xa9\xf3\xf5\xa1\x92\x77\x5c\xec\xa4\x6f\x3d\x92\xc6\x54\x86\x35\xf5\x92\x5c\x0d\xdf\xb0\xb2\x3f\x64\x88\x73\xe1\x71\x8c\x8d\x5d\xc4\x56\x55\x5c\x6f\xc5\xa4\xc2\x04\x97\xb5\x3b\xf4\x7a\xea\xe7\xfe\x93\x75\xc3\x84\x48\x33\xf7\x76\x51\x2f\x0e\x46\xab\x45\x24\xcd\x12\x6b\x46\x5c\x03\x76\xb8\x6e\x43\xef\x3c\xbe\x05\x34\x0e\x61\x8f\x90\xbf\xc1\x9c\x64\x6b\x01\x04\xea\xf7\x33\x17\x11\x39\xe3\xbb\x85\xbd\x26\x94\x2d\xc5\xcb\xb7\x2f\x45\xe4\x57\xef\xc2\x16\x9d\x72\x78\xc0\x3c\x2e\x94\x05\xe3\x16\xb0\x55\x28\x02\x20\xd2\xf2\x6c\x00\xd0\x6e\x1f\x58\x97\x4b\xb5\x11\x76\xe0\xda\xc6\x70\x5c\x30\x3c\x57\x5a\xa3\x52\x51\x43\x60\xcd\x0b\x57\xc4\xae\x41\x50\xd1\xce\xe3\x08\xaa\xc4\x14\x91\x4a\x95\x6a\xec\xd8\x94\x4a\x11\x5b\x62\x95\x9a\x82\x4d\x3d\x24\x30\x04\x65\xaa\xb9\x6e\x4f\x12\x71\x34\xc5\x11\x65\xb3\x5e\x00\x53\x09\x90\x11\xe1\x75\x50\x47\xa4\xf7\x58\x3e\xee\x37\xd0\x70\xe7\x02\x96\x34\x2e\x8a\xa8\x59\x60\x19\xe3\xd8\xa0\x4b\x18\x7d\x0a\xcb\xc7\x26\x64\xa5\x25\x58\xb7\x15\xa3\xf3\x4b\xe1\xc0\xe0\x56\x8d\xcf\xa5\xa0\x93\x50\x9f\x82\x9a\x0d\xae\xa4\xb2\x05\x79\x74\x19\x7f\xd8\xa3\xb0\x54\xd1\x4d\x57\x8c\x5f\xce\xb9\x50\xe3\x2d\x71\x61\xab\x69\xf4\x8c\x1c\x25\x00\xe8\xc2\x9f\x88\x78\xa2\xe4\xb9\x0c\xaf\xba\x09\x2d\x1a\xa3\x59\x10\x55\x07\xf8\x9b\x69\xc6\x21\x85\x66\x8a\x52\xcc\x16\x86\x51\x6a\xe6\x82\xe5\xa3\xf4\x85\x5c\x91\x4c\x71\x92\xf4\x90\x20\xb9\x34\x05\x8e\x25\x49\xa6\x47\xae\x14\x46\x8c\x12\x3e\xa3\x11\x4e\xd0\x24\xe1\xd1\xa3\x34\x19\x6e\x6c\x66\x98\x54\x26\x78\x44\xa4\x0c\x24\xab\x22\x9b\xdd\xe6\x18\x42\x15\x57\x45\x44\x4a\x19\x95\x8a\x46\x4e\x64\x2a\x40\x29\x4c\x2d\xf1\x08\x83\x49\x18\x32\x36\x61\xb8\x5a\xd2\x23\x06\x9c\x33\x67\xb6\x68\x12\x5c\xd7\x16\x73\xcf\x05\x89\x37\x1d\xa0\x3d\x40\x08\x3a\x0a\x19\xab\xf2\x81\x5c\x73\xa4\xce\xec\x67\x70\x8c\x57\x91\xc0\x6d\xf9\x44\x79\x82\xf4\x27\xad\x04\x6b\x04\x31\xe5\x3e\x04\xbe\x24\xb9\xf8\xc8\xf0\x03\x43\x34\x83\x21\x37\xe0\x98\xad\xa3\x69\xbd\x8a\x20\xf2\x40\x9d\xae\xaa\xd7\x9c\xb2\x28\xc9\x63\x5f\xa9\x51\x8b\x00\x4f\x9a\x48\xdc\xf2\xe8\xb5\xd7\x82\x42\x0f\x61\x89\x9e\x49\x92\xe8\xff\x9a\x08\xf8\x23\x5f\x38\x41\xb3\x64\x53\xdc\x02\x3a\x71\x5c\xba\x89\xa2\x0e\x0e\x9d\xf2\x06\xab\xb9\xc9\xf9\x4f\xb9\x32\x45\x32\x0d\x3a\xa5\xb3\x6f\x19\x38\xc3\x49\xc2\x27\x70\xd2\x01\xb8\xd2\xe5\xb9\x06\x69\x75\x79\x14\x11\x12\x93\x18\x7d\x1d\x1c\x5c\x8f\x47\xf1\x4d\x3d\x8c\x62\x69\x45\x0e\x00\xb4\xb2\x6a\x58\x6b\x84\xae\x2c\xd7\x79\x3b\x46\x37\x15\x60\x96\xb0\x7e\x3b\xae\xc2\x74\xf5\x96\xb6\xf0\x6d\x80\x2e\x2b\x93\x78\xb9\x1d\xda\x10\xe8\xb2\xd4\xe7\x1e\x80\x2e\x2b\xf3\x6c\x88\xdd\xe7\xb3\x17\xcd\x39\xd6\x93\xba\xe0\xed\x13\xc1\x0c\x40\x98\xb9\x3b\x4b\x24\xe8\x0e\xe4\xa2\x8e\x10\x0f\x0b\xc4\xb3\x52\x0d\xf1\x6d\x41\x3c\x2b\x83\x39\x64\x10\xcf\xca\x50\x0f\x17\xc4\xb3\x66\xa0\x2d\x40\x3c\x8d\x73\x7f\xac\x89\xba\x1d\x53\x80\xc4\x96\x49\x3e\xbd\x83\x54\xef\x95\x63\x3c\x33\x81\x03\xe6\x1a\x73\x77\xb4\xc5\xb4\x86\xd1\xda\x1c\xc8\xa6\x70\xa8\x8a\x13\x62\x53\xda\xf3\xde\x37\x03\xfe\xb0\xa9\xd9\xbd\x17\x5a\xbb\xc1\x0e\x19\xe1\xcc\xe6\x94\x37\x95\x9a\x39\x9c\xec\xd9\xed\xf0\x51\x01\x83\xb0\xc4\xf2\x5b\x21\x88\x5d\x56\xaa\x36\xcc\xf9\xb3\xad\x9c\x04\x64\x68\x88\xb2\x91\x04\xa1\xd3\xb1\x55\xda\x9a\x56\x8e\x32\x45\x66\x55\x9d\xb6\x38\x34\x94\xa9\x3f\xfd\x71\x2d\x27\x32\x10\x8b\x4e\x3d\x0c\x6a\x27\x78\x67\x87\x7d\x46\x62\x14\xcd\xb5\x56\x24\xb5\xfa\xa2\xa7\x63\x6e\x56\x89\x52\x4c\x9d\x22\x95\x4b\xe3\x5a\xa2\x72\xc4\x4a\x98\xa4\xc7\xe8\x23\x14\x84\xc5\x69\xa6\xf5\x2f\x3f\x3f\xaa\x29\x69\x94\x7f\xfb\xed\x9f\x08\xfa\x16\xa5\x04\xb3\x92\x0e\x0b\x6a\x93\xbe\xfa\x00\xc3\x4f\xcd\xc9\x88\xd5\x6e\x05\x1a\x7c\x36\x35\xa6\x5c\xbc\xdf\x90\x4d\xb9\xd3\x89\xa1\xd0\x21\x8e\xe6\x48\xe6\x13\x53\xa9\x37\xb0\x61\x38\x41\xfa\x82\xcf\xc0\x51\x0d\x37\xb2\x1b\xf4\xaa\x53\xf8\xb2\x31\x00\xd6\xdd\xd8\xf6\x36\xee\xc3\x3d\x72\x24\x49\x09\xdb\xa9\xc6\x69\x66\x38\x5f\x78\xf0\xa5\xc1\x7d\xe9\x19\x1f\x82\xd6\xcf\xb0\xb5\xec\x6b\x59\x1a\xc2\x79\xc1\x4b\x96\x27\x58\xd8\xa3\x3f\x62\x5a\xd1\x10\xe4\x89\xf2\x5c\x26\x0b\x14\x73\x46\x7a\x40\x09\x79\x34\x37\x8e\x55\xad\xb3\x60\x5b\xb0\xe2\x89\xca\x5c\x2b\xb4\xd0\x96\xab\x8f\x21\x15\x36\x98\x54\x73\x0a\xfd\x68\xf5\x9b\xc0\x57\x61\x96\x1c\x6a\xa7\x45\x85\xb0\xb1\x15\x9e\xdf\x12\x36\xb6\x44\x55\x1d\x6c\xac\x87\x8d\x5d\x5e\x97\x43\x84\x8d\xad\xec\x79\x3b\xd8\xd8\xba\x2d\xdf\x02\x36\xb6\xd4\xcc\x17\x03\x1b\x5b\x59\xd1\x2f\x06\x36\xb6\x32\xaf\x0e\x36\xf6\xcb\x83\x8d\xdd\x11\x18\xb5\x9e\x17\x1b\x7c\x25\x45\xd9\x62\x63\x22\xfb\x4a\xa2\xe1\xb5\x26\xb0\xe8\xb1\x1c\xd4\xe6\xaf\xab\xdd\xc1\x58\xeb\x99\xd0\x66\x60\xac\xb5\xaa\x7a\x33\xab\xdb\x15\xe0\x09\x14\x83\x57\x06\x63\x2d\x4d\xa0\x8b\xaf\xdc\x3c\xbe\xb2\x96\xf8\x6c\xdf\x7a\x78\x2e\xe8\xb2\x7a\x21\xb7\x84\x63\x2d\xed\x4f\xab\x48\x4c\x10\xdd\xf7\x40\x89\x2f\x2b\xcd\xdf\x97\x0e\xf9\x5a\x59\x3e\x5c\x45\x69\x81\xa1\xb5\x84\xe7\xd0\xe2\x8c\x12\x1e\xfa\xff\x3b\xca\xdd\x22\x32\xb8\xb2\xbc\xde\xaf\x62\x68\xb1\x05\xa9\xb6\xa6\x50\xa7\x95\xee\x27\x51\xd6\x25\x4f\x6e\xe8\x62\x76\x83\xb8\xcb\x48\xd4\x60\x63\xa6\x29\xdd\x57\xb3\xeb\x2e\x32\x8f\x85\x05\x0a\xf9\x52\x5e\xa8\xbe\x9e\xcc\x70\x8c\x8c\x5f\x49\x87\x05\xa0\x0e\xf3\xe5\x8c\x4a\x25\x1a\x63\x9b\x96\x46\xb8\x8b\xab\x34\xcb\x5b\x07\xc4\x04\xab\x3a\xdb\xee\xb3\x94\xa4\x5c\xac\x0b\xac\xaa\xfd\xd2\x96\xba\xd9\xe6\x53\x92\xcd\x49\xaa\x25\x99\xf1\xa6\x8d\xb4\xdd\x6f\x9f\x34\x6c\x73\xd7\x4c\xa0\x63\x89\x08\x02\x47\xa8\x7e\x37\x36\x88\x94\xad\xb7\x7b\xd7\x6d\xb6\x98\x99\x1b\x3a\x84\x1c\x98\xf2\x6a\x83\x9b\x7d\xa9\xe4\xee\x06\xfa\xae\x8d\xe9\xf0\x21\x35\xeb\xa3\x36\x56\xc4\x6b\xac\xc2\x9d\x2a\xbe\xb2\x85\xa0\x37\x70\xe5\x97\xbd\xf3\x9a\x13\x86\x55\x80\x37\x0f\xf0\x68\x40\x4d\x5d\x5e\x1e\x88\xcc\x91\x44\x1c\x85\x9a\x41\x69\x30\xcb\xeb\x55\xa2\x12\xa7\x51\xee\x40\x24\xb9\x68\x8c\x32\x6d\x63\xd0\x8e\x54\x8e\x13\xd0\x24\xc2\xea\x95\xd5\x4d\x9d\x2c\x6a\xd2\x1e\xdb\x79\x4c\x28\x53\x7f\xfe\x8f\x8d\x76\x53\xab\x56\x76\xdd\xa0\xe2\x16\x8e\x22\x22\x8d\x8d\xdd\x46\x21\xe3\x09\x7f\x82\x62\x5b\xbb\xec\xaa\x3e\xca\x7a\xde\x9a\xc1\x7b\x28\xe2\xb8\x20\x75\x23\x2e\xcc\x05\xcf\x67\x73\x67\x43\xd2\x67\x46\x4f\xad\x6e\x2f\x7f\x5c\xb2\x91\x6f\xbc\x97\xdf\xe5\x34\xd9\xce\x42\x77\x57\x2a\x43\xf6\x69\x78\x8f\xe4\xdc\x9f\xd6\x09\x34\x5b\xbb\xb1\xcb\x83\x6e\xdf\xa7\xfd\xd6\xfb\x6b\xa0\x9b\x9e\x83\xdf\x9c\xf2\x24\x01\x4f\x83\x24\xe9\x13\x11\xf5\xdd\xc3\x84\xef\xe9\x66\xc8\x79\x7e\x00\xf0\x75\x91\x18\xd1\x4a\xfe\xba\x31\xa2\xa1\x44\x6e\xf4\xd5\xa0\x05\x13\xaa\xc6\x19\x61\x75\x36\xb6\x9f\x96\x2b\xc0\xbc\xb3\x80\x41\x17\x3d\xb6\xb7\xa0\x41\xb7\x24\xaf\x1c\x38\xb8\x66\x1e\x87\x1a\x3c\x58\x61\x76\x3e\x96\xaf\xb8\x66\x5c\xe0\x90\x51\x7c\xfa\x7a\x89\x47\xac\x5f\xca\xa7\x70\x95\xb2\x27\x8b\x22\x20\xdb\xe8\x10\x21\x33\x83\x3a\x1b\xd6\xb0\x02\x6e\x34\xfd\x17\x68\x3a\x06\xbc\xd6\x84\x14\xba\xb0\x41\x88\x26\x27\xf1\x11\x8e\x16\x51\x42\xa3\x40\x67\x9e\x09\x9c\xcd\xeb\x38\x9e\xdb\xf9\x0e\x75\xe7\xad\x50\x77\x9a\x0a\x52\x6d\x12\xb7\xed\xe8\x8a\xe1\x94\x74\x68\x40\x75\x68\x40\x3d\x8f\x77\xc1\x8a\xd2\x5a\x6f\x08\xa3\xb0\x7c\xee\x3a\x48\xa0\x37\x80\x04\xda\xe6\xf0\x15\x78\x3f\xa5\x63\xd7\xc1\x14\x7d\x68\x05\x53\xe4\x2f\xc1\x83\x42\x9e\x69\x3e\x8f\x6f\x8c\x68\xb2\x3c\xb0\xb7\x84\x25\xaa\x11\x17\x36\x91\x9b\x56\xe1\x12\xad\xa2\x8b\x56\xeb\xf2\xb6\x28\x41\x9b\xad\xcc\x46\x00\x40\xb5\x77\xd7\x81\xc0\x01\x35\x6f\xc3\x81\x9c\x9b\x7d\x66\xb5\x6c\x56\x3b\x34\xcc\x6c\xd9\x44\xc1\xda\x2c\xc9\xc5\xd3\xc3\xfb\x4a\x74\x29\x8a\xac\x6d\x97\xec\xd2\x77\x3e\x68\x22\xd0\x9c\x27\xb1\x03\xa1\xf0\xab\xe5\x3b\xf0\x99\x00\x7e\x81\xdc\x66\x40\xb1\x73\xd0\xb6\x8a\x82\x60\xab\x52\x5a\xfc\x26\xc2\x70\xf7\xc0\x68\xf6\x61\x45\xf0\x9c\x64\x1b\xfb\xc1\x5a\x59\x44\x96\xcd\xdf\x2b\xc6\x58\x5a\x21\xb0\x9a\xd7\x0f\x73\xad\xdd\x77\xcd\xe0\x56\x89\x1e\x81\x71\x50\xd4\x95\xfa\x34\x74\x06\x4f\x9f\xa8\x33\x44\xe0\xb0\xc7\x95\x5e\x3a\x37\xbb\x56\x9e\xba\x2a\xb1\x6c\x11\x0c\xb6\x54\xb9\x6d\x77\x70\xa0\x14\x7f\x1e\x67\x58\xe0\x24\x21\x09\x95\xe9\x8b\x05\x03\x9f\x95\xdd\xb5\xfa\xac\x0a\x6e\x4c\x44\x2c\x4f\x27\x86\x14\xdd\x40\x6c\xb1\x3f\xc5\x91\xc8\x59\x08\x6d\xe6\x37\xc6\x17\x13\xcc\xe1\x5e\x00\xab\x52\x34\x87\xaa\xad\x53\x4c\x05\x23\xb2\xb1\x46\x26\x89\x72\x41\xd5\x62\x6c\x4b\x8e\xb6\x3f\x70\x77\xf6\xcb\x33\xfb\xe1\x6a\x0f\xb7\xcb\xea\x77\xfd\xf9\x12\xa7\x19\x11\x50\x26\xc8\x15\xbc\x09\xca\xaa\x5a\xd4\x06\xe2\x6b\x0d\x41\xf8\xf3\xd2\xb5\xdd\x14\x38\x8c\x9f\xc7\x41\x46\xd5\x38\xaa\x12\xc7\xba\xc3\x5a\x87\x3b\xb5\x6a\x92\x2f\x8c\xbc\xd4\xe0\x45\x7e\x81\x2a\x23\x36\x6d\xc2\x34\xad\x07\x1c\xb8\x82\xc1\x5e\x59\x6c\x4c\x90\xf2\x6e\x95\xaa\x86\x71\x5a\xac\x9f\xba\xe0\xa3\x15\x83\xed\x07\x5f\xb5\x18\x71\xd0\xc9\x9e\x86\xad\x0f\xba\x10\x79\xa6\xe8\x64\x19\xda\x46\xed\xaf\x84\x68\x3f\x81\x34\x6b\xe7\x66\x28\x75\x6b\xea\x8a\x96\x38\xb1\x9d\x9d\x96\xff\x2d\x8e\x98\x43\x08\x32\x08\x4b\x61\x1e\xdf\x75\x4a\x95\x72\x89\x02\xc6\x00\xad\xa9\xb3\x6c\x9b\xfd\xca\x85\x7b\x60\xa8\xf4\x6a\x4c\x44\xc7\x23\xd6\x97\xe8\x99\x20\x46\x2c\x84\x44\x4d\x0d\x57\x6f\xd5\x86\xda\x4f\x13\xa2\x7b\xf2\xb1\x29\x5a\x78\xa0\x4a\xfa\xf2\x63\xa6\x8f\x29\x4e\x24\xe9\xe9\x86\xa1\x6a\xa9\xe2\x10\xfc\x89\xd1\xb3\xc0\x59\x46\xc4\x88\xd9\x2c\x0e\x70\xb8\x70\x9e\x98\xf6\x9b\x42\x5c\xed\x1a\x90\x71\x84\xa3\xf9\x2b\xed\x11\x86\x64\x9c\x68\x4e\x62\x97\x2f\x5c\xde\x1e\x37\x6f\x63\xb0\xde\x60\xb3\x86\x53\x57\x3e\xab\x67\x3b\x49\x22\xcd\x51\x7c\x99\xe9\x8c\x08\x3d\x6a\x4d\xc3\x4f\x84\x21\x3a\x75\xe3\xb0\xb1\x3b\xe8\x19\x3c\x53\x9a\xf4\x9f\x30\x4d\x4c\x02\xbe\xeb\xda\x09\x81\xc6\xfc\x3e\x62\xc6\xdd\xcd\xa2\x52\x86\x2a\x65\x54\xce\x35\xa7\xce\xc1\x27\x09\x6a\x46\x53\xe2\x0c\x7b\xda\xe4\x34\x0f\xf4\xeb\xab\x39\xe8\x13\x15\x9c\xa5\x90\x24\x63\x71\x99\xdc\xf2\x49\xa2\xfc\xf1\xa8\x4d\x71\x5c\x2b\x11\xc7\xb1\x2c\x1b\x3f\x8d\x5a\x49\x7f\x2d\x99\x5d\x8e\x4a\x59\x81\x51\x00\x2b\x04\x41\x9c\xae\xb2\xd8\x2a\xf9\xb7\x4b\x6d\x58\x4e\x6d\xa8\x5f\x9b\x43\x4c\x6f\xf0\x87\x78\xd3\x14\x87\xa6\xed\xdf\x87\x64\xbb\xc7\x54\x87\x37\xce\x09\x78\x99\x74\x80\xb7\xcd\xdf\x78\x89\xd4\x8d\x2e\xc1\xe1\x0d\x13\x1c\x5a\x5b\x6a\xcb\xb1\xd9\xcd\xc7\x76\xa3\xe4\x80\x35\x60\x4e\x75\xbd\x5c\x12\x25\x68\x24\xf7\xc1\x1f\x64\x86\x5b\x46\xb5\x81\x16\x98\xad\x91\x9a\xf4\x0b\xde\x09\x09\x71\x62\xbe\xce\xdf\x44\x10\xfc\x18\xf3\xe7\x25\x5b\x9d\x0c\xd1\x34\x2e\xb9\x16\x7b\x04\x89\xa8\x24\xa5\x48\x16\x2a\x11\x23\xd2\x1a\x3b\xf1\x88\xcd\x29\x11\x58\x44\x73\xc8\x6e\x2c\x36\xc6\x64\xc9\x1a\x40\x23\x13\xcb\x10\x7a\x9b\x36\xd8\xf4\x16\xeb\x5e\xb5\x30\x79\x7c\x3a\xbb\xe7\x7a\x24\xa9\xf9\xc4\x0b\x33\x56\xca\x08\x4d\x72\xad\xb6\x7f\xd7\x40\x7c\xbf\xd8\x2f\x1a\x8c\xef\x83\x89\x82\x2f\x5a\x06\xe4\x17\xd4\xd0\x05\xe5\xbf\x50\x50\x7e\xcd\x12\x6f\x16\x98\xbf\x95\xc9\xef\xf5\x63\x86\x5d\xcf\xaf\x11\x37\xbc\x2e\x68\x2b\x9f\x8c\x5f\xfc\xe8\xd5\xce\xb9\xed\x09\xfc\xc9\x13\x85\x91\x88\x85\xa6\xb3\x09\x89\x63\xe0\xb4\x8a\xdb\x4a\xd1\x05\xed\x38\xf3\x80\xbe\x7b\xb1\xd4\xc4\x8e\x13\xce\x66\x92\xc6\x06\x6c\x25\xc3\x50\xb1\x35\x34\x5e\x00\xb8\x00\xec\x6f\x92\x10\xe1\xbc\x12\x02\x7d\x2d\x29\xb3\x68\x8a\xfe\xb7\x98\x13\xc9\xbe\x52\xc6\x58\x80\xd9\x02\x3d\x32\xfe\x9c\x90\x78\x06\x3b\x54\x1d\xcc\x11\xa2\xa4\x87\xa8\xf2\x9f\x09\x40\x23\xe0\xb9\x1a\xe9\xb1\x43\xac\x99\xd1\x00\x88\xfd\x36\xa8\x89\xee\x9b\xf9\xe6\x18\xa1\x21\x43\x53\x1c\xa9\x1e\x92\xf9\xa4\x68\x3f\xe6\xa6\xc8\xb5\xd6\xbe\x83\x89\x17\x8d\x74\x31\xe3\x35\x9d\xd7\x9f\x0d\xc7\x1d\x34\xb9\xf6\x13\x8a\x77\x8a\xad\x7b\xc2\xbb\x40\x8c\x5e\xe6\xd2\x06\x61\x20\xce\xfc\xd1\xb7\xf0\x4a\x1e\x23\x1a\xf0\x3e\x0d\xde\x32\xe3\x71\xa3\xad\xb3\x32\x95\x4d\xc7\x52\x04\x42\x5a\x41\xc9\x3a\xaa\xa0\x5d\xb3\xdc\x5a\x6a\x92\x4a\x10\x9c\x5a\xe7\x80\xbe\x6a\x40\xac\x31\x61\x90\x7a\xf4\x54\x18\x09\x73\x93\x2d\xbe\xa0\xec\x51\xef\x6e\x81\x8a\x0d\xf5\xe5\xa1\xe7\xba\x4d\xcb\xf4\x8d\x47\xce\x38\x33\x0e\xc2\x9d\xe4\x4e\x3a\x63\x38\xd9\xd0\xc6\xb1\xb4\x72\xcb\x3e\x3d\x27\x67\x59\x71\x41\x4b\x11\xc6\xd8\x87\x4c\x8f\x1b\xd9\x90\x2a\xf3\x0d\xe5\x3d\x8c\x62\x92\x11\x16\x13\x16\x2d\x80\x44\x18\x20\xe7\x08\x86\x13\x84\xe1\x3b\x9c\x1c\xa3\x73\x93\x5f\xe3\x25\x3c\x7b\xad\xc3\x85\x9e\x62\x46\xa7\x5a\x4f\x00\x23\xac\x1d\xe5\x88\x99\x61\x3a\x1f\x48\x50\xb4\xdf\xaf\x58\xdd\xce\xe8\x1b\xe4\x6a\x47\x54\x62\x56\xfe\x1e\xad\xbe\x70\xa0\xb7\x55\xbb\xa3\x9b\x73\x35\x08\x64\x3e\x39\x82\x7f\x97\x12\xce\x1c\x50\x4f\x81\x22\x43\x12\x02\xe6\x40\xeb\xf1\x82\x8b\xb1\x09\x58\x6e\x1f\x7e\xbb\x35\x79\x1c\x41\x1f\x25\xa5\x26\xa5\x8c\xa6\x79\x1a\x38\xef\x4c\xc5\x82\xc8\xda\x2f\x4d\x26\x46\xa6\xf5\x80\xc8\x81\x97\x23\x7d\xb9\xb2\x05\x9a\xd1\x27\xc2\x46\x2c\xe3\x94\xa9\x63\x74\xc5\x15\x09\x4a\x44\x18\xe8\x28\x9e\x29\x9a\x1a\xb4\x53\x41\xf4\x39\x30\xa0\xd8\x00\x34\x39\xc7\xaa\x87\xe2\x1c\x8e\x2a\x23\x4a\xb3\x0e\x7d\xe3\x2a\xd8\x19\x88\x8f\x16\x23\x66\x6e\xba\x29\xa6\x49\x2e\x88\x95\x59\xb1\xc9\x8b\x29\x86\x5c\x8c\xcc\x22\xa1\x05\x93\x48\xe9\x6c\xae\xf4\x16\x69\x19\xcf\xfa\x1b\xe7\x9a\x1b\xf1\x11\x9b\x10\x84\x51\xc6\x25\x55\xf4\xc9\xfb\x2f\xe9\x14\x61\x29\xc1\x82\x72\x8c\xce\x4b\xf6\x7f\x2a\x41\xf5\x6e\x8a\xab\xa5\x6c\x6c\x6d\xcf\xcd\xf9\x38\x3b\x6f\x64\xa9\x17\xbb\xca\x78\x22\x79\x92\xab\xd0\x05\x5b\xbf\xb7\x85\x69\xdc\x01\xf7\x83\x81\x98\x4f\x47\xcc\xd1\xb5\x3c\x46\x7d\x89\x24\xd7\xbb\x24\xcd\x56\x46\x82\x2a\x22\xa8\x41\x71\x22\xca\x6c\x82\x3f\xa7\xfe\x0c\xa4\x58\x3c\x6a\x11\x2a\xb4\xc0\x1b\x4c\xd1\x92\xb5\x63\x62\x24\x24\x80\xb5\x0a\xb7\x03\x4c\xff\x88\x71\x76\xc4\xc8\x0c\xaf\xdb\x91\x11\x2b\x6d\x09\xfa\x9a\x4e\x0b\x85\xb4\xc9\xe7\x18\xac\xdd\x18\x22\x9f\x9a\x76\xc9\x74\xdc\xb4\x49\xd3\x84\xe3\x35\x6e\xe3\x69\x71\xe8\xd1\xdf\xf9\xc4\x8c\x51\xeb\xfd\x5c\x81\x14\xa8\xd5\xab\x29\x17\x64\x8e\x59\xdc\x73\x9b\x55\x1e\x1b\xdc\x8c\xd6\xd4\xe6\x94\x31\x90\x04\x1d\x88\x30\x31\x58\x4c\x98\x05\x7b\x61\x15\x37\xbb\x15\xc5\x3e\x6c\x74\x57\xf8\xd6\xa0\xf6\x89\x31\x40\x18\x96\xb7\xc8\xec\x11\x97\x34\xcd\x92\x22\xa7\x29\xb0\x8d\x4e\xb5\x88\xe5\x78\x24\x7f\x02\xd3\x95\xd3\xda\xe0\x56\xb7\x3b\xa7\xe9\xac\x66\xe4\x9e\x91\xc2\xad\xe1\x6c\x5e\xa6\x0c\x66\xc0\xc2\xbe\x96\x44\xff\x53\x91\x42\xed\x33\xc2\xfa\x88\x39\x11\xe4\x1b\xe0\x32\xb6\xd9\xc0\x78\xa6\x45\x68\x03\xf3\x6a\xd7\x0f\x45\xc6\xc9\x5d\x3a\x27\xf6\x30\xb8\x57\x6b\x2e\xaa\xef\x28\xc3\xa5\xcc\xdb\x2d\x04\xbf\x24\xdf\x28\xb9\x2a\x70\xfb\x2d\x9a\x6a\x9a\x28\xbc\xae\xcc\xc8\x06\x94\x60\xf6\x99\x20\xdd\x9d\xa5\x66\x57\xf1\x06\x43\x44\xc0\x9c\x24\x19\x8a\xe9\x14\xcc\x52\x0a\xd8\xb7\x07\x16\x33\x58\xf0\xfa\xb0\xa7\x39\x33\x20\x71\xc6\x23\xf2\x6c\xf1\xb6\xed\xd5\x58\x34\x7e\x3c\x62\x43\xf5\x95\xd4\x22\x3a\x67\x33\x7d\xd1\xc4\x4f\x54\x16\x45\x4e\x22\xce\x64\x9e\x12\x61\xbb\xd0\x37\xb2\xa6\x48\x5b\x20\x00\x3b\x19\x4a\x8f\x4d\xef\xfd\x13\x4e\x68\xec\x0a\xf1\xe8\x1f\xcd\x99\xd3\xa3\x94\xce\xa3\x58\x13\x12\x66\x37\x37\xd6\x6b\xf5\x66\x62\xfd\x8f\xa1\xe4\x8e\xd2\x42\xc8\xc7\xd6\x56\x7f\x52\x15\xf1\xed\xaa\xaf\x10\xef\x27\x4b\x93\x42\xab\x05\x23\xbb\x0a\xe7\xeb\x50\x0c\x1d\xa2\x6e\x6e\x42\x80\x75\x3f\xce\xe8\x63\x06\xb7\x11\xfb\xa9\x4c\xd0\x8e\xda\x70\x96\x50\xbc\x27\x14\x64\x03\xa9\xb0\x16\x2f\xcc\x75\xc0\x85\xd5\x70\xec\x9d\xd3\xbc\xb5\xe7\x3b\x96\x89\x90\x11\x4e\x96\x77\x78\x85\xbd\xd9\xbc\xbf\x5a\x09\xb0\xc7\xcd\xb4\xbd\x32\xe9\x37\xe2\x49\xb2\x49\x09\x93\xca\xcc\xcf\x8a\xcf\x57\x8f\xa8\xe8\x47\x6f\x80\xdb\x0b\x38\x35\xe6\xf2\xc6\x89\x35\xa5\x48\x65\x77\x29\x7c\xc9\xa8\x61\x0b\xcb\x5a\x47\x8c\x4f\xa1\xc8\x4d\xd2\x14\xd5\x95\x09\x9e\xd2\x4d\x50\x96\x4d\xa0\xd3\xad\xb3\x8b\xaf\xb1\x32\x38\xeb\x39\x88\xa6\x86\xbc\x6c\x8f\x90\xaf\x87\xad\xb8\xb9\xe2\x0c\xa5\x38\xdb\x6a\xc1\xd7\x79\x85\xfa\x28\x35\x2e\x39\xbb\x7a\x80\xb7\x48\xa0\x5e\x0c\x2c\xf2\x33\x5e\x14\xa9\xd1\x4d\xf8\xb9\x6c\x23\x72\x78\xd0\xaf\x0f\xd9\x94\x6f\x70\x38\x8b\x54\x66\x7b\xfa\xb0\xa3\xd9\xe0\xfc\x79\x2f\x85\xd9\x7d\xb3\xa6\x6d\xce\xe3\x59\x1d\x51\x6f\x7c\x32\xdd\x0a\xbe\xa4\x8d\x32\x64\x22\xa1\x79\x72\x93\xbb\xb5\x7c\xb4\x82\x16\x11\x0c\x67\xf5\x52\x5d\x96\xe8\x70\xef\x6b\x54\x69\x07\x19\x53\xb8\x0b\xa6\xbe\xa9\x6f\xf5\x15\xd6\xcc\x1e\x92\x56\x8b\xb5\x23\x76\xc3\x66\x38\xc0\xae\x47\x8f\xfa\x5b\x7f\x42\xd7\x16\x39\x68\xbf\x18\xc0\xcd\xa4\xb5\x73\x15\x91\x99\x36\x45\x6d\x4a\x13\x2d\x62\x0f\x6b\x0c\x9c\x2e\x41\xcc\x07\x54\x99\x50\x79\x27\x3d\xe5\x82\x06\x85\x41\x9d\x8c\x84\x28\x14\x28\x09\x9d\x3c\x81\x42\x0f\xa6\xc5\x39\x7f\x36\xd1\xe9\x82\x6a\x9e\x65\x84\x55\x05\xe6\x1e\xcd\x0b\xa8\xb5\x96\x18\x63\x93\xff\x80\x9b\x98\x41\x6c\x6b\x1f\x17\xa3\x6a\xd8\xd2\x7d\x94\x78\x6a\x9f\x7f\xe7\x7a\xbd\xd7\x5f\x2c\xef\x4d\xed\x08\xef\xcb\xad\x6f\x3c\x3a\x2f\xe5\x6f\x1e\x30\xf5\x11\x3e\x75\x4a\x0f\x46\x53\x41\xc0\xc1\x9f\x7a\x4c\x0d\x03\xaa\xcb\x39\xdc\x77\x77\xe7\x3f\x9c\x3c\x0c\x11\x51\x11\x4a\xe8\x23\x19\xb1\x48\x3e\xf5\xb4\x78\xfc\x8f\x9c\x28\xfd\x73\x83\x47\x80\xa6\x84\x49\xe0\x04\x54\x2d\x61\x0f\xd5\x2f\xa4\x5b\x18\xfd\xdf\xf3\xf2\xf7\x2b\x48\x7e\x29\x7d\x18\x68\xd7\xd5\xbb\x01\x32\x85\x92\x1e\x66\x69\x65\x0d\xc5\x18\x5b\xe4\xa0\xae\x1a\xe6\x16\xe9\x42\xec\xef\x39\xdb\x50\xe8\x3a\x2b\x3e\x0a\x46\xd1\x20\xd3\xa5\x19\x06\xac\xeb\xcd\xf2\x90\xcc\x37\xb5\xad\xaf\x63\x22\x45\x5a\xb6\xb3\x2d\x17\x85\x43\x91\x12\x84\x00\x0b\xf1\xf4\x64\xef\x7a\x8b\xc4\xe1\x27\x16\x7c\x74\x3c\x62\x97\xce\xe3\x5c\xfc\x2a\x0b\x3d\x3c\x9d\x04\x10\xe0\xe5\x56\xa0\xd9\x98\x4a\xff\x03\x14\x74\x91\x79\xa2\x4c\x45\xbb\x29\x65\x38\xf1\x03\x35\x4f\xea\xb8\x84\xc0\x2c\x9a\xef\x6a\x42\xa6\xd3\x31\x49\x36\x91\x44\x87\xd3\x41\x22\x35\x7d\x47\x8f\x0d\xa7\x73\x9b\x9a\x8d\xc5\x64\x6c\x25\x5a\x53\xf7\x09\x15\x26\x68\x9c\x98\x8a\x72\x04\x81\x8f\xb2\x9a\x3d\x66\x00\x22\xf4\x2e\x5a\x49\xdd\xb8\x28\x4d\xda\x86\x0f\xc9\x86\x5e\x10\x56\x23\x26\x72\x06\xc5\x26\x7c\xc4\x02\x46\x05\x5e\x78\xe4\xfc\x07\xd6\x9b\x33\xd3\x6c\xc2\xc0\x71\x9b\x97\xb5\x7e\xc6\x73\x09\xb6\x9a\x94\x28\x7d\x41\x7d\x0d\x75\x60\x4d\xc8\x50\x0f\x65\x82\xa6\x60\x6e\x95\xdf\xd4\x6c\xdd\x19\x56\x38\xe1\xb3\xbe\x50\x74\x8a\x23\x75\x8f\x77\xd2\xc0\xb1\x6d\x66\xdb\xf0\x53\x37\x0c\x34\x3c\xd7\x8b\x3f\x23\x8c\x08\x98\xa8\xd6\xc9\xeb\x8f\x30\x3c\xd9\x8a\x73\x83\x95\xcd\x1a\x46\xa5\xb7\x58\xe0\x5c\xf1\x54\xeb\xb7\x38\x49\x16\x3d\x63\x91\x25\x68\x8e\xe5\xdc\x6d\xb4\x31\xa6\xb5\xb9\x9b\xec\xe2\x9e\xe1\x68\x4e\xee\xa0\x2a\x72\xdd\xe2\x56\x46\xf9\x81\xb0\x3c\xfd\x70\x8a\xfe\xa7\x98\xe3\x59\xff\xec\xfb\xc1\xf8\x7c\x78\xd7\xff\xee\x62\x70\x1e\xcc\xc7\x3e\xb9\x1c\xde\xdd\x2d\xff\xfa\xfd\xf0\x7e\xf9\xc7\x9b\xeb\x9b\x87\x8b\xfe\x7d\x5d\x2b\x17\xd7\xd7\x3f\x3c\xdc\x8c\x3f\xf6\x87\x17\x0f\xb7\x83\x9a\x4f\x1f\xee\x9b\x1f\xde\xfd\x30\xbc\xb9\x19\x9c\xbb\x55\xf9\x5b\x70\xba\xc0\x7a\x0c\xa9\x17\xf5\xd3\xa8\x1e\xc0\x23\x54\x7e\xf1\x14\x3d\x54\x4b\x1f\xd8\x58\x64\x83\x63\xf1\x8c\xa5\xe6\x61\x10\x0a\x3f\x62\xc8\x7d\xae\x17\xa5\xe9\x53\x13\xae\x13\xcd\x09\x4a\x38\x7f\xcc\x33\xcb\xda\x4c\x7c\x18\xe3\xc6\xf0\x43\x64\xd0\xda\xf7\xc3\xfb\xd3\xe5\x12\x0c\xbe\xb1\x00\x31\xcb\x9d\x01\x18\x17\x76\xec\x14\x6c\x29\x0e\x9a\xbf\xb0\xde\x06\x3d\xf8\x9d\x59\xd5\x8f\x69\x0d\x33\x55\xe9\x26\x8e\x6d\xd1\x5f\x37\xb1\xa0\xe1\xf2\xbe\xae\x5a\x4d\xbf\x1c\xa6\xf6\x14\x9a\x90\x08\xe7\x26\xa8\x49\xdf\x53\x42\x70\x11\x0e\xb8\xa0\x87\xfd\x35\x6a\xe9\xa8\xb6\xc1\xca\x9e\xe9\x89\xcb\x47\x9a\x65\x24\xfe\xb0\x2c\xbf\x94\xab\xc3\xda\x9a\xe4\x7c\x8a\x82\x33\xa9\xf5\x7a\xd0\xf9\x5d\xe1\x94\xf9\xc2\x7b\xd2\x20\x70\xa3\x08\x65\x01\x20\x67\x7d\x27\xf8\xc2\x16\x14\x5c\x63\x58\xa1\x67\x02\x29\xd5\xb9\xad\x1c\x65\x74\x6f\x7d\xb6\xa1\x3b\x63\xd3\x76\x75\xe0\x4a\xa9\xd6\x8d\xcc\x78\x1f\x02\xb7\xfe\x5e\x92\x3a\x46\xbc\x43\x5e\xec\xb9\x69\x14\xb8\xb3\x8b\x79\x83\x11\x37\x04\x37\xb8\xdb\xa0\xc6\x42\xbe\x42\xbe\x5a\xbe\x91\xd6\x5c\x16\x9a\x6d\xb7\x19\x8f\xc3\x02\x29\x01\x5c\xb7\x1f\x58\x09\x04\x79\xed\x5a\xdd\xf3\x18\x2f\x34\x71\x40\xac\xb1\xcc\xb3\x8c\x0b\x85\x1a\xda\x30\x6e\x7c\x33\x3e\xb8\x73\xec\x3c\x3c\x8f\x83\x46\xb4\x84\x21\x6b\x6a\x69\xb4\x83\x47\xb0\xeb\x5a\x30\x8e\x30\x40\x16\x14\x41\x5f\xf7\x28\x2d\xa9\xd4\x25\x0a\xad\x13\x7e\x77\xc9\x30\xc8\xf4\x05\xdf\xb6\x0c\x5f\x5d\xef\xd7\xae\x85\xda\x2d\x4f\xc8\x54\x8d\x6b\xbd\x3e\x2b\x0c\x9c\xba\x45\xd6\x84\x28\x43\x67\xf3\x3d\xb4\xd8\x5e\x4b\xf8\xa3\x0d\xec\xd1\xaa\x41\x60\x21\x10\x9c\x2b\x23\x9f\x16\x3a\x0c\x72\xab\x09\xe6\x05\xdb\xa9\xcd\x05\xf3\x42\xa0\x96\xf9\x8d\x3f\xd4\xa7\x4d\x1d\x8f\xd8\x00\x02\x28\x0a\x45\xc4\xa5\x88\x81\x16\xb0\x56\xfe\x2f\x15\x1d\x7d\xd5\x68\xcd\x66\x84\xd7\x82\xee\x6d\xbd\xfc\x64\x81\x8a\xc2\xb2\xa5\xef\xda\x9c\x1e\x63\xf5\x76\x22\xa0\x99\xb0\x2d\xe3\xae\x48\x66\x2d\xf3\x66\x9e\x45\xa4\x0f\xc4\x87\xe9\xae\x8e\xd1\x4f\xce\xf2\x03\x81\xaf\x45\x4d\x66\x1b\xbb\x91\xe0\x85\x03\x85\xac\x5b\xd8\x7d\xe0\x2c\xee\x3b\x14\x76\xf5\x02\x7b\x40\xa7\x9a\x55\x2e\x29\xe0\x8c\x19\x8b\xec\x06\x69\x1f\x67\xfe\xa3\x3b\xb2\x3a\x2a\xe0\x23\x94\xe1\xb4\x91\x55\x20\x74\xb0\x64\xf1\xbf\xcc\x66\x99\x4c\x54\x57\x58\xcb\x96\x45\xb4\x1e\x54\x7d\x7e\xc0\x03\x68\x12\x55\xd1\x94\x26\x09\xc8\x01\xc7\xa8\x0f\xe5\x81\x21\x91\x53\x5f\x85\x2e\xc0\x82\xce\x18\x5f\x97\x63\xd6\x40\x4c\x51\x40\x4c\x77\xcd\xc4\x24\x81\x9a\x8a\x3c\xfe\xfd\x50\xd4\x1e\x30\x5d\x34\x6f\xc1\xcb\x88\xd8\xed\x91\x5c\x36\x50\xde\xdf\x22\x3a\x7a\x69\xb8\xc1\x87\xff\xaa\x1f\xfa\xa7\x1c\x0b\xcc\x14\xc4\xfc\x5a\xd1\x5d\x90\x20\xf5\x88\x7c\x86\xf8\x0c\x66\x0c\xc1\xf0\x53\xb8\xb9\xce\xe5\x0f\xe1\x5e\x88\xc6\x3d\x44\x8f\xc9\x31\x54\x67\x13\x5a\x96\x98\x14\x6f\xce\xb5\xe4\x30\x62\x4b\xb1\x8c\xc7\xa8\x9f\x48\x6e\xbf\x20\x2c\x4a\xa0\x1c\x77\x10\x9e\xec\x29\xdf\xba\x95\x26\x0b\x50\x50\x60\x2b\x8b\xe6\xb9\x7d\x10\x7c\x08\x45\xc6\xc0\x27\x9e\xc0\x49\x2f\x7e\xff\x3d\xcf\x8c\xb7\xa2\x29\x4e\xe2\x05\xcb\x39\x2c\x5d\x43\x2f\xb6\x49\xa6\x54\xe0\xaa\x0d\x82\x37\x60\x63\x8a\x18\xd3\x00\x81\x05\x7d\x8d\x15\x4a\x08\x96\x0a\xfd\xe1\x9b\x8d\x62\x43\xdc\x04\x0b\xee\x6a\x8f\x6f\x91\x28\xe6\x52\x0d\x42\xe1\xce\x77\x0c\xb5\xe3\xb0\x50\x08\x23\x46\x9e\xc3\xc8\x52\x0e\xc1\xc0\xae\x20\x1c\x09\x72\x5b\x4d\x3c\x99\xc9\xcc\x87\x6c\x0d\xa3\x32\x35\xf0\x11\x07\x77\x6c\xdd\xa7\x76\x58\x35\x94\x65\x95\x27\x1b\xe2\x09\x90\x5c\x45\xd0\xff\x1c\xab\x11\xb3\x9c\xd5\x85\x8d\x04\x69\x5e\xfd\x24\x29\x07\xda\x63\xc8\x25\x61\x7a\xc2\x50\x9f\xfd\xd8\x2f\xd0\x15\xa8\x5f\x3e\xda\xb9\x64\xa7\x2b\x0e\x8b\x89\xc7\xf3\x78\x47\x61\xdb\xb5\xd2\x4e\x9d\x7d\xf9\x15\x85\xe0\x9a\xee\x2f\x4c\xa1\xfc\x16\xc2\x30\xa9\x1b\xf2\x9a\x83\xb5\x6c\xd3\x5f\x21\x1b\xef\xbb\x83\xf6\xa2\x72\xbd\x7d\x1c\xae\xd9\x67\x5e\x63\x6e\x6f\xd8\xdc\x40\xb6\xd8\x45\x01\xf7\x61\xf7\xaf\xe5\xf1\x2d\x0d\x7d\x18\x43\xd2\xdf\x7a\x2e\x58\x24\xd1\x39\xd6\x61\x62\xaf\xe3\x20\xa7\x27\x48\x21\x80\xe0\x3f\xc7\xf8\xec\x9b\x0d\x9e\xd7\xec\x7d\x4f\xbf\x57\xcc\xdf\x4d\xc5\x07\xc1\x2d\x4f\xbc\x59\xd8\xeb\xc7\x7f\xc7\x11\x44\xfa\x43\x4f\x2e\xc7\x60\x19\x90\xc9\xc1\x58\x63\x30\xe6\xd7\x8a\x87\x99\xe0\x11\x91\xf2\x18\x0d\xe0\xa2\xb1\xff\x44\x78\xea\x1c\x12\xc1\xcb\x23\xa6\x35\x13\x87\xdf\x12\xb4\x5f\x26\xf1\xba\x13\x60\xc0\xe0\x76\xf2\xe5\xa4\xeb\x6b\x94\x34\x69\x13\x0e\x8b\x0e\xda\x80\xb2\x06\x68\x30\x3b\x45\x31\x8f\x1e\x89\x38\x11\x24\xa6\xf2\x14\x7c\xeb\xaa\xd1\xa9\x97\x6a\x6d\x7b\x67\x49\xa3\x29\x50\x60\x4d\x52\xdc\x99\xe9\xdf\x06\x58\xbb\xf0\xda\x1e\xa2\x53\x50\x27\x5c\x4e\x86\x09\x42\x76\x70\x37\x84\x29\xb1\x80\xb8\x7e\x6f\xca\xaa\x2c\x84\xd3\x34\xb4\xd0\xd6\x94\x4d\x24\xf6\x11\x83\xb3\xe5\xb4\xef\xe7\x44\x12\x17\x70\x60\x26\xa5\xb8\x8d\x65\x36\xec\x22\xc3\x6a\x2e\x21\x75\xb5\xbc\x06\x56\xe9\x82\x4f\xf5\x0a\xe1\x0c\xe2\x15\x8c\x95\xa2\xf8\xc8\x27\x58\x4a\x45\x93\x64\xc4\x18\x21\xb1\x44\x90\x65\xfa\x55\x6d\x86\xbc\xfe\xb4\x87\x70\x1c\xa3\xff\xfd\xf5\xc7\x8b\x9f\xef\x07\xe3\xe1\x15\x18\xad\x87\x17\x83\x6f\x7a\xfe\xc7\xeb\x87\x7b\xff\xab\xb1\xb0\x3c\x11\x81\x52\xfc\x08\x2a\x1e\x93\xc4\x26\x4f\x90\x11\x0b\x47\xea\xb0\x03\xf4\x13\x49\x5c\xa4\xab\x15\x53\x3c\x84\xa2\xdd\xc3\xc6\x8a\xc5\xc6\xe6\xb7\x81\xf2\x7b\xeb\x3f\x59\x4d\x83\x8e\x78\x7c\x17\x4e\x0c\x84\x1c\x19\x2c\x83\x64\x72\xab\xfb\x16\x04\x47\xd8\x8c\xb2\xa6\x78\x3c\xc2\x9e\x5e\x52\x88\xff\x81\x2c\x7e\xd4\xea\xf5\x0d\xa6\xa2\x35\xed\xd5\xa3\x01\xb9\x13\xa3\xf5\x74\x2c\xab\x87\x4a\x1a\x59\xd8\x64\xdb\x34\xc6\x7c\xd6\x01\xc1\xbd\xf9\x74\x2d\xbc\x14\xf9\xac\x84\x43\xa9\xf0\xf9\x1c\x0e\xca\xc9\x5f\x34\x05\x0d\x8e\xd8\xfd\xf5\xf9\xf5\x29\x22\x09\x9e\x70\x08\xe5\xb7\x21\x41\xae\x09\xbb\x60\x11\x4f\x83\x86\x4a\x08\x25\x3d\x94\x15\x08\x25\xa1\x11\xed\xd8\xb4\xb1\x06\xa9\x24\xe3\x62\x19\xdf\x63\xbf\x2a\xa0\x9d\xec\x0d\x17\x6d\xae\x7f\xfd\x1a\x2c\x1d\xcf\xb4\x22\x57\xe1\xbc\xf6\x6e\x9e\x12\x6c\x6a\xe9\x1b\xb7\x90\xb5\xe5\xdb\x00\xd6\x24\x29\xd5\x53\xd4\x07\x47\x1e\x5b\x17\x7c\xf1\x26\x67\xe8\x87\xbf\x48\x34\xc9\xd5\x88\x95\xdb\xe0\x0c\xf5\x7f\xba\x43\xdf\x61\x15\xcd\xbf\x19\xb1\x6b\xad\x66\xfe\xf0\x97\x06\x28\xa5\x8d\xd1\x09\xf5\x9a\x9c\x63\x85\x2f\x38\x8e\x29\x9b\xd5\x41\x13\x16\xf5\x63\x06\xf7\xfd\x53\x74\x6d\x75\xf8\x22\x13\xc4\xa7\x04\x07\x0d\x01\x43\x86\x89\x38\x2e\x02\xac\x9c\x95\xe1\xdb\x8c\x66\x06\x17\xd6\x88\xdd\x1b\x4c\x46\xcd\x55\xa9\x42\x19\xb7\x35\x8c\xb4\x56\x66\xd0\x2a\xb1\xcb\x90\x22\xc9\x02\xe9\xd5\x01\x32\xf6\x9b\x61\xe5\x31\x90\x67\x96\x99\xfd\x88\x81\x82\xee\x73\x53\x12\x1e\xe1\x04\x62\xf2\x8e\x02\x9b\x9e\x56\xdb\x79\x0e\xf9\xe1\xa6\xe8\xf9\xa2\x1c\x3a\xeb\x21\x0b\xbc\x50\x16\x6e\x14\x18\x00\x60\x1f\xad\x37\x36\xe5\x9a\xe3\x18\x2c\x36\x30\xbe\x25\x66\x75\xf4\x87\x1e\x9b\xcd\x2c\x8b\x7e\xea\xd3\xb6\x78\xce\x1c\x16\x49\x04\xe6\x7b\xb6\x80\xf0\x6d\x28\x3a\xc2\x21\xf4\xa3\xe0\xce\x96\x28\x97\x76\xd1\xdf\x89\xc1\x67\x23\x66\x22\x05\x4b\xfb\x12\xa2\xf7\x04\xbd\x73\x06\x81\x8c\xcb\xb9\x62\x79\x66\x03\x1b\xad\xac\x9f\x09\x72\xe4\x33\xa0\xe2\xd2\x9a\xea\x1b\xf6\x18\xdd\x86\xea\x75\xcc\xa3\x3c\x75\xc8\xca\x90\x3d\x55\x94\x95\x2f\x49\x3c\xe6\x62\x5f\x47\xf1\x80\xd2\xa2\x08\xa4\x8f\xb7\xd6\x8f\x0d\xc1\xf4\xc3\x4f\x97\x25\xf5\x66\xc1\x17\x78\xc7\x6e\x51\x6b\xa6\xa1\x71\x56\x6e\xa9\xd4\xda\xce\x79\x89\x57\x05\xfa\x2b\x17\x20\x6c\x91\xcf\x19\x07\x23\xb7\x49\xcf\xe2\xf1\x57\x12\x0d\x6f\xb4\x04\xa4\x35\x5e\x7f\x06\x73\xa9\x4c\x70\x19\xa4\xeb\x98\xaf\x4d\xba\x40\x0f\x7d\x8b\x46\xf9\xb7\xdf\xfe\x29\x42\x9f\xdd\x1f\x7f\xfe\xcf\xff\xfc\xd3\x9f\x37\x49\x27\x71\x0a\x39\xb4\x5b\xac\x91\x2f\x27\x55\x16\x89\xc2\x1d\x58\xe6\x54\x3b\xec\x82\x3d\x80\x4d\xcb\xbf\x0d\xca\x63\x10\x3b\x84\x67\xf6\x84\xcb\xf0\x64\xa2\xd2\xd1\x2c\x22\x09\x24\x51\xbd\x32\x87\xf0\xc2\xae\x95\xe8\xff\xd7\x0a\xb0\xb2\xb1\x3e\x2a\xdb\xc5\x38\xd1\xc4\x8b\xd7\xba\x11\xf4\xb5\xb5\xff\x29\x70\x20\x7e\xe3\x2e\x38\x9e\xc4\x44\x98\x31\x79\x93\x9d\x37\x24\x02\x73\x20\x9f\xb3\x84\xc7\x0e\x1e\xb5\xc8\x05\xa4\x20\x20\x0c\x3e\x63\xcd\xb9\x7b\x16\x46\xcb\x7c\x64\x3c\x2f\x53\x1c\x19\x54\x50\x89\xbe\xfe\x7c\xaa\x7f\xeb\xa1\xc5\x29\x04\x91\xf6\xd0\xaf\xa7\x16\x2d\x07\x0b\x35\xd6\x3f\x7d\xe3\x64\x6d\xdb\x04\x0c\x9a\x4a\xf4\xd5\xc9\x13\x16\xa6\x66\xf4\x89\x19\xd1\x57\x96\xb3\xfa\xba\x78\xa1\x6c\x9e\x70\xfe\x68\x03\x6c\x97\x3e\x3c\x71\xc0\x6b\x40\xde\xde\x6f\x62\xb6\xde\x27\xe6\x2b\x74\x04\x2f\x10\x74\x9c\x4d\xd0\xf1\xdf\x25\x67\xe8\x78\x81\xd3\xc4\xfe\xea\x9e\xda\xf8\x5f\x2c\x6d\x4e\x5c\xec\x83\x7c\x92\x85\xb1\x94\x7e\x97\xf0\x09\xcc\xea\xd2\xcd\xd4\x44\xd0\xc2\x40\x8b\xdb\xa7\xb8\xb0\xec\x44\x5c\x22\x2a\xe0\x07\xa5\x5c\x99\x57\x80\xc7\xd5\xcd\xea\xb3\x1f\xd2\x7f\x1b\xbf\x30\x2c\x8a\x4b\xe2\x33\xc6\x61\x1f\xbd\xa6\x1b\xfd\x8c\xbe\xb6\x2c\xe8\x1b\x7d\xc7\xd8\x70\x65\xb3\x0c\x75\x1d\x2c\x7c\x07\x3f\x07\x1d\x50\x86\x4c\x5a\xe6\x8a\x2f\x7f\x3d\x39\x3e\x3e\xf6\x5f\x43\xd6\xfa\xff\x8b\xa8\x92\x24\x99\x9a\x96\xdc\x0d\xb6\x18\xb1\x4b\x57\x78\xc1\x19\xaf\x0b\x48\xc7\x4c\x70\xc5\x23\x9e\xa0\xa3\xc2\xa0\x1b\xf3\x48\xa2\x7f\xd7\x62\x6d\xb0\x94\xf0\xa3\xd6\xe3\x1a\x60\x60\x0d\xd2\xf3\x2b\x1d\x2a\x6b\x10\xaf\x1e\xab\x10\xc5\xcd\x2b\xb6\x58\x86\x55\x3c\x80\x16\x34\xe5\x9c\x58\xa4\x37\x21\xf4\xcb\xe4\xb3\x82\x47\x0d\x40\x7a\xb5\xa1\xec\xf5\x37\xe5\x12\xbb\x2d\xf0\xf4\x0c\x59\x37\x2c\x80\xc5\xbb\xb2\x9c\xc1\xcc\xb3\x17\xba\x4f\xf4\xe5\xc2\xc2\x52\x00\x32\x4f\x53\x2c\x16\x27\xc5\x69\x5b\x26\xce\x02\x69\x0d\x78\x4c\xe2\x16\x00\x5c\xb8\x89\x3d\x5a\x36\x8a\xc1\x8a\x97\xee\x46\xf3\x67\x37\x82\x5a\x86\x01\x62\x01\x61\x11\x8f\x2d\x5d\x17\xd9\xa7\x65\x89\xc5\xbf\xb3\x2c\xab\xb8\x88\x18\x59\x18\xe3\x98\x32\x10\x1e\xf6\x0d\xf7\x71\x03\xfb\xe6\x63\xa8\x8a\x4b\x66\x1b\xb8\x47\x87\xd7\x77\xee\x9b\xf6\x97\x2e\xac\x43\x59\x64\xc7\x49\x88\x8f\xc7\x66\x48\xe0\xe7\xe2\xfa\x85\xd8\x0e\x63\x9d\xc9\x7d\x6e\xae\xf9\xf7\x19\xbf\xa1\x89\xbe\xb5\x80\xc6\x8f\x47\xac\xf4\x73\x0f\x91\x84\xa6\x94\xf9\xd8\x3a\xc3\xdc\xf9\xd4\x48\xcf\x8f\x54\xe9\x2d\x93\xf1\xa3\xe6\x60\x0e\xd7\x29\x50\xa9\xfa\x6c\xe1\x48\xc7\x3b\xa6\xac\x05\x22\x97\x7a\x5c\x85\x8e\xae\x85\x59\xdd\xc4\x91\x15\x48\x69\x40\x78\x70\x7e\x47\x4c\xb7\xe6\xce\x52\x11\x2e\x1c\xb4\x17\x34\x77\xe4\x00\xf1\x03\x0e\x00\x7d\x94\x62\x7e\xbd\xfc\x5b\x23\xa0\x0c\x58\x9e\xee\x9a\x6c\x62\xc3\x87\xdf\xca\x4c\x77\x23\x88\xbb\xa9\x6c\xe2\x12\x61\x79\xea\x0e\xd4\x06\x14\x37\xb0\xe2\x4f\x4c\xa2\x04\x1b\xa4\x1a\xdd\x10\x44\x3e\xf6\x8c\x83\x34\x0b\xfa\x32\xd7\x8b\xe9\xc6\xd4\xd8\x49\x08\xfb\xda\xfc\xfb\x1b\x64\xef\x86\x6f\x7b\xf6\x3e\x17\xd2\x23\x80\x98\x3d\x87\x1a\x8d\x24\x36\x36\x74\x40\x25\x9e\x61\x11\x1b\x6b\x79\xa8\x55\x98\x0c\x5e\x2d\x7f\x2d\x78\x8e\x9e\xa9\x9c\x8f\xd8\x3d\x77\x06\x47\xc4\xb8\xc7\x75\xee\x81\x32\xba\xd4\x1f\x96\xc0\x04\x60\xd4\x75\x14\xa0\x99\xf0\x4e\xb9\x46\x10\x05\x3b\x66\x3c\x26\xbb\x01\x18\xdd\x17\xbe\x0a\xe7\xbf\x16\xc4\xe4\x83\xc1\x4d\xd1\x94\x4e\x4b\xa4\xdc\xd0\x36\x5f\xdd\x78\xb8\x87\x6c\x3b\x50\x12\xf8\x79\x23\x74\xed\x10\x1b\xcc\xdf\x6a\xd0\x8a\xd3\x38\x83\x6c\xe0\xd2\xda\x7b\xb4\xe4\x5d\x37\x21\xaa\x41\x2b\x6a\x75\xf7\x9b\xb9\x47\xb0\xec\x3e\xc0\x18\xa3\x99\xe0\x79\xe6\x53\xe6\x5d\xba\x9f\xd9\x06\x2b\xd3\x0c\xd9\x94\x9f\x5a\x9d\xea\x82\xb2\x47\x43\xf1\x2f\xb5\x47\x06\x10\x9b\xc4\x25\x18\x37\x57\xa5\x15\xe6\x70\x84\x28\x8b\x92\x1c\x2e\x3e\xa9\x70\xf4\x68\x40\xbd\x9b\x8c\xbe\xfa\x9b\xf1\xfa\x64\xca\x06\x89\x29\x4f\x12\xdb\x6d\x71\x81\x16\x65\xac\x9f\x28\x46\x18\x3d\xdc\x0e\xeb\xfb\x7e\xa4\xcb\xce\x9c\xfa\xdb\xb3\x4c\x20\xf0\x3f\x3f\xd0\x8d\xe2\x2e\x2b\xb0\x78\xa4\x44\xea\xde\xb8\xd4\x04\xba\x6a\x88\x54\x69\x05\x22\xbe\xad\x31\xed\x6f\x4c\xa7\xb3\x2c\x1f\xeb\x85\x4a\x36\x09\x10\xd0\xa3\xf8\x74\xf3\xd0\x0f\xbe\x5b\x45\x2a\x9f\x6e\x1e\x50\xd0\x87\x01\x3c\x4c\x48\xa4\x7c\xa4\xf1\x31\x3a\x2b\x70\x88\xab\x92\x79\x4c\x9e\x68\x64\x52\x5c\x7b\x5a\x2a\x1a\x31\x80\xf7\xd4\xba\xce\x91\xc3\x84\x42\x9f\x6e\x1e\x2c\x92\x94\x87\x9b\xb2\x90\xca\x00\x61\xb1\xd9\xb5\x53\x01\xd6\x64\x9c\x1d\x81\xc4\x86\x45\x5c\x78\x3b\x7a\xa0\x5c\xff\x7f\xec\xbd\x5b\x73\x1b\x49\x72\x36\x7c\xbf\xbf\xa2\x22\x7c\xa1\xd1\xf7\x81\xe0\x68\xf6\xb5\x63\xac\x08\x5f\x40\x14\xb5\xc3\x1d\x89\xd4\xf2\x30\xb3\x7e\x0d\x07\x54\xe8\x2e\x00\x6d\x36\xaa\x5a\x5d\xdd\xe4\xc0\x5e\xff\xf7\x37\x2a\x33\xeb\xd0\x47\x74\x03\xa4\x24\xaf\xe7\xc2\xde\x11\x01\xd4\xf9\x90\x95\xf9\xe4\xf3\x44\x3c\x2b\x4a\x32\x30\x1e\x5e\x4d\xed\x9c\x5c\xfb\x48\x88\x69\x96\x9a\x4b\x63\x2b\x61\x96\x01\xa8\x7f\x34\xf5\xe9\x5b\x06\xf5\x18\x70\x00\x0c\xda\x51\x87\x7f\xe2\x32\xfc\xb8\xdc\x31\x9e\x2f\x93\x22\x37\xcf\x30\xfc\x31\x4c\x85\x7d\x7b\x2c\xed\x8b\xca\x5b\x46\x24\xd8\x02\x13\x9c\xc8\x42\xcf\x65\x90\xc1\xe2\xb2\x82\x31\x79\x21\x91\x0c\xe8\xf0\x00\x7b\x63\xe9\xb9\xa2\x54\x95\xb1\xbd\x56\x73\x27\x00\xb3\xcb\xd0\x88\x9a\x4b\x60\x26\x31\x77\x2b\x08\x9f\xfb\xbb\xff\x35\xfb\x24\x1f\x92\x38\xe1\x27\x85\xd0\x29\x3f\x29\xfe\xcf\xa7\x49\xed\x4f\xfc\xd5\xf7\xdf\x7f\x42\x2d\x9b\x2e\xda\x05\xb7\x8c\x8e\x76\xf0\xb4\xc7\x29\x6c\xf1\x0b\xb3\x4a\x8f\x98\xa7\xf7\xc9\xbd\x60\x9f\x70\xba\x3f\x11\x81\xdf\x61\xd3\x36\x97\x6d\xf3\xc6\x0e\x99\x36\xa0\x53\x6d\x9f\x37\xd6\x33\x6d\xaf\xd6\xd3\x7f\x5c\x2f\xcd\x6c\xfd\xb0\x9e\xbe\xfa\x1e\xfe\xb3\x36\x47\xfb\x36\xaf\xcb\x9e\x69\x6b\x76\xcb\x41\xd4\xb2\x2d\xdd\x59\x34\x97\xfb\x0f\x23\x36\xee\x2c\x82\x55\xdb\xb6\xf1\x79\x21\x8e\xcd\x6e\x45\x5e\xc7\x11\xe8\xeb\x06\x61\x66\x6f\x44\xf0\x48\xb6\x49\xcf\x14\x09\x70\xcf\x6e\xda\xcb\x10\x80\x0b\x1f\x8e\xe0\xe3\x81\xef\x0f\xeb\x4f\xed\xbb\x7b\xba\xd3\xdf\xcc\x54\x88\x11\x0c\x32\x37\xe6\xeb\x03\x1b\x59\xf9\x6a\x5f\x1b\x1f\x39\x2a\xea\x34\x89\xdc\x63\x7a\xad\x8f\xd9\x45\x76\x39\xa2\xcb\x44\xbb\xbc\x3f\xd7\x12\x0b\xad\x74\xef\x6b\x5b\xef\x9a\xf6\x52\x28\xd8\xe3\xa2\x6e\x2d\x0b\x3f\x70\x45\x1c\x09\x85\x33\x4f\xea\xc5\x76\x30\x49\xa8\xaf\xf8\x2d\xfd\xf8\x43\x83\x32\xd4\x99\x97\x1f\x20\x33\xdb\x91\x61\x6d\xb9\x34\xd6\x9a\xad\xb5\x23\xb0\x84\xaf\xfc\x83\x9a\x74\x97\x1d\xd4\x20\xac\x71\xa0\x96\x2d\x55\x65\x4b\x79\xc4\xd8\x2a\x4f\x31\x76\x50\x6c\xc0\xad\xec\x35\xe0\xec\x31\xe7\xdd\xcb\xa8\x17\x97\xf2\x7c\x8d\x4e\x2f\x2d\x0a\xfd\xb2\x65\x86\x7d\x1e\xdb\x11\x33\x7c\x80\xce\x76\x88\x65\x01\x97\x4a\xdf\x4e\x73\xad\xac\x12\x46\xbb\x97\x96\x53\xac\x0f\xd8\x50\x7d\x72\x5d\xa4\x72\x54\x57\x88\xcd\x5e\xe9\xe6\xc1\x1a\x2b\xf5\x5e\x8f\xc7\xf1\xad\x63\x79\xb1\xaa\xef\x94\xb3\x8b\x8d\x5b\x0a\xe0\x3a\xef\x6e\xc3\x78\x5d\xf7\x9e\x26\x90\xd0\x71\x57\x0b\xe6\x72\x66\xbf\xe2\x19\x1b\x75\x82\x5e\x16\x4c\x47\x2c\x97\x98\xe1\x02\x3e\x33\xee\x47\x9d\x3a\xd7\xd1\x89\xb1\x09\xf9\xb5\x2e\xdc\x69\x91\xfb\xdb\x88\x54\xe0\x1c\x2f\x73\xaf\x02\xdf\x83\xc8\xdb\x60\xc7\x23\x2a\xbf\xb1\x5d\xa4\xa2\xec\x58\xb6\x55\x3c\xfc\xa1\x42\x05\x41\xc2\x11\xa1\x6a\x31\x2f\x20\xdd\xf9\x65\xea\x89\x3f\x6b\x95\x35\x77\x6b\x71\xd4\x69\x9c\xf0\xed\x22\x57\xdd\x12\x85\x03\x86\xc9\x16\x51\xf1\xd9\x6f\x50\xb2\x68\xc7\x3e\x97\x3c\xc5\xcb\x4d\xd2\x72\xb4\xcd\x06\xf7\xc7\x0f\xff\xc4\x66\x70\xfb\xb0\x0f\x70\x2e\x02\x68\x0b\x4a\x2b\x14\x4b\xb6\x99\xc8\xb5\x92\xbc\x53\xab\xf3\xfe\x47\xbd\x20\xbd\x31\xf3\x34\x56\x65\x53\x5b\x6c\x44\x4f\x5a\x4a\x0b\x3b\xc5\xd9\x7d\xb9\x14\xb9\x14\xa8\x47\x0a\xdf\x63\xf6\x7b\x83\x9a\xab\x78\x59\x6c\x7e\x58\x44\x69\x32\x58\x04\x0d\x32\x46\x67\xe6\x67\x67\xf8\xab\xbe\x0e\x54\xca\xaf\x34\x5d\x32\xfc\x8c\xe1\x67\x53\xf6\x86\x47\xf7\x42\xc6\x2c\x4b\xcb\x75\x42\x04\x31\x68\xee\x27\xd5\x87\x7d\xb5\x63\x68\x5b\x60\xf9\xe6\x1a\x9a\xcb\x2d\xbf\x47\x62\x72\x32\x22\xcd\xcb\xa1\x8b\x5e\xd0\xb9\x4a\x16\x49\x73\xed\xee\x9d\x2d\x77\x1f\x36\x8b\xa9\xaf\x3d\x5d\x62\xbe\xdc\xe3\x46\x11\xca\xa8\xe2\xa9\x19\xb1\x71\xdd\x6a\x6d\xf0\x78\x59\xae\x15\xa7\x4c\x4b\x8d\xc1\xdd\x0b\x21\x3c\x20\xd7\x2f\x25\xe3\x40\x05\xf6\x42\xb3\x32\xb3\xf6\x19\xc4\x96\x52\x40\xfa\xe0\x14\x98\x0f\xb2\x24\xba\x47\x6c\x29\x64\x4f\x30\xd7\xbd\x86\x80\x21\x13\x1e\xe4\xd8\x76\x34\xac\x90\x08\xe7\x38\xdc\x4a\x83\x9b\x7f\xcf\x3a\x1d\x98\x19\x52\x6c\x84\x5c\x1c\x40\x11\x3f\x7c\xd2\x2a\x59\x20\x64\x06\xbb\x18\x9d\x1b\xc2\x52\x26\x24\x0a\xe8\xdf\xd8\x8e\xff\x38\x59\xd5\xcc\xe8\x44\x33\xcd\x8b\x44\x9b\xb3\xac\x75\xc4\x3d\xfd\xd0\x31\xa3\xce\xc7\x71\x1e\xb5\xf0\x1d\xd5\xc6\xc2\x65\x9a\x4d\xd9\x3b\x88\x6c\x04\x2f\x03\xe5\xd8\x83\xba\x0e\xac\x62\x23\x3a\x69\x74\x9f\x02\xa2\x69\x7b\x10\x7c\xbf\x37\x60\xe5\xb2\x0a\xa7\x6c\xe6\x23\xca\xc8\x9f\x84\xb1\xe2\x3d\x3d\x12\xa9\x16\x87\x2c\xbe\x41\xc1\x17\x40\x5d\xc1\x02\x62\x60\x49\x69\xf3\x77\xaf\x0a\xe2\x9a\xf9\x08\x89\xfb\xfc\x5e\xc8\x3e\x0f\xfb\xf0\x16\x62\x08\xa4\xd7\x25\xe0\x62\x2b\x0a\xc3\x2b\x87\x34\x70\xf8\xb6\xf3\x94\x55\xc9\xea\xd4\x0c\xb9\x79\x86\x44\xf7\x94\x2e\x88\x11\x36\x22\xbd\x7a\xdc\x28\x1d\xee\x33\x3b\x7f\xf8\x92\xcd\x4b\xa7\xfc\x00\xe9\x96\x6e\x80\x11\x67\x29\x55\xc8\x89\x05\xad\x76\x9b\x14\xdd\x3a\x6e\xbe\x99\x3d\x42\x61\x18\x00\x99\x60\x8b\x6a\xee\xe6\x9f\x7f\xd4\x57\xb0\x63\x9f\x82\x7d\xa5\x5d\x6a\xfb\xf8\xcc\xa7\x03\x63\xbe\x0e\xd3\xeb\x75\xba\x79\xec\xf8\x82\x32\x15\x33\xbf\xbc\xc6\x8b\x72\x7f\xfd\x6e\xd5\xc4\xbc\x07\xf5\x6d\xdf\xca\xfe\x10\x00\xc3\xd8\xb2\x4c\xd2\x18\xe9\xf3\x02\x83\x50\x59\x8b\x03\x38\xed\xe1\xfa\x4f\xb4\xbb\x4f\xda\xd7\xd8\x47\x15\x1f\xb3\xb0\xc6\x53\xa4\x36\xd7\xf5\x80\xbc\x11\x1d\x82\x77\xb6\xfb\x47\x22\x53\xdd\x88\xff\x78\xa1\xab\x22\x6e\x3d\x0d\x06\x88\xd7\xb2\x5c\xdd\x80\x62\x54\x17\x0b\x51\x20\xa6\x62\xd3\x8a\xcd\x3c\x9b\x6a\x5c\x92\x5b\xd7\xa4\x10\x62\xc8\x5f\xff\x9c\xfd\xf9\xe6\xea\xf2\x64\xcb\x73\xbd\xe1\xc0\xf2\x60\xcb\x9a\x58\x11\x4e\x7c\x1e\x5b\x24\x43\x22\xe7\xf2\x84\xad\xd5\x04\x71\x33\xaf\xd9\xa6\x28\x32\xfd\xfa\xf4\x74\x9d\x14\x9b\x72\x39\x8d\xd4\xf6\xd4\x0f\xcd\x29\xcf\x92\xd3\x65\xaa\x96\xa7\xb9\x80\xcc\x89\x93\x57\xd3\x1f\x5e\xc1\xcc\x9c\x3e\xbc\x3a\x05\xb4\xc4\x74\xad\xfe\xe1\xfd\x0f\xff\xfc\xc7\x7f\x32\x05\x67\xbb\x62\xa3\xe4\x6b\x02\xe5\xf4\x96\x7d\x82\x56\xf9\x29\xfe\xa4\x56\xcb\x3f\x4f\xbf\x0f\x9b\x41\x5f\xdd\xaa\x58\xa4\xfa\xf4\xe1\xd5\xc2\x4e\xcc\x34\xdb\xfd\x9e\x6b\xf0\xd5\x72\x0d\xee\x93\xe2\xf7\x5c\x83\xaf\x9a\x6b\x30\xdc\xc2\x71\x67\x0c\x90\x37\xfb\xf3\xd1\xfc\xdd\x9d\x91\xd6\xf5\xbe\xef\x1c\x6a\xb9\x1c\xc2\x4c\xb0\x23\xae\x88\x7b\x31\xea\x89\x5d\xeb\xae\x7b\x3a\x74\xb8\xd8\xc6\x0a\xa8\x74\x1a\xf3\xa3\x88\x2f\x00\xd9\x97\x44\x40\xce\x8f\x2e\xc1\x8c\x27\x6d\x19\x04\x84\x60\x3d\x66\xfc\x9e\x53\x66\xe2\xa9\xf5\x25\xa8\xbb\x07\x6a\x4b\xa4\xf8\x6b\x8b\xb7\x55\x8f\x56\x53\xe2\x29\x94\x18\x06\x6a\x73\x3b\x82\x79\x5c\x3c\xd0\x16\xdb\xae\x8e\x66\x6c\xb8\x3e\x0c\xb8\x3d\x43\x1a\x57\x17\xa7\x43\xd4\x6b\xa2\x6d\x85\xf6\xe2\xb0\xcc\x38\xe6\x1e\xb2\x04\x7c\x59\x99\x67\x4a\x0b\x3d\x65\xef\x6a\xea\xb5\x1e\x8c\x7e\xfd\xee\x8c\xbd\xfa\xf1\x9f\xff\x38\x97\xdf\xb5\xdc\xdb\x70\xde\xab\x7c\x4d\xd8\x78\xb8\xad\xb7\x5c\x17\x22\x3f\xcd\x57\xd1\x29\x9e\x72\xa7\xe6\xf7\x27\x54\xe9\x89\x5a\x9d\x38\x9a\xf9\x13\x62\xdc\x9e\x6e\xe3\x71\xa4\x31\x95\xa5\x87\x77\x0d\x5d\x34\x1a\x2e\x25\xa4\x97\x53\x2b\x27\x28\x82\xb9\x8b\xa8\x3d\xa4\x56\x2d\xff\xf1\x26\x55\x4b\xfd\xd2\x91\x5a\x72\x6d\xeb\xf0\x2c\x73\xdd\x5b\xf3\x69\x14\x27\xec\x12\x79\x4e\x47\x85\x3d\x4b\xc2\xe7\xc8\x98\x81\x6f\xdf\x6c\xfe\xba\x47\x8e\x1d\x9e\xab\x52\x5a\xc6\x7e\x25\x85\x5a\x01\x74\x03\x2c\x61\x8b\x3c\x03\x5f\x2d\xe0\x99\x1c\x9f\x4e\x2e\x32\xbc\x60\x20\xaa\xd0\x3d\xdc\x47\xaa\x56\xec\x1b\xe7\xe7\x50\xad\x38\x76\xdc\xe9\x40\xf9\x4a\x03\x7e\x2c\x3c\x1c\xb7\xd2\x18\x54\x85\xf9\xfe\xde\x08\xaa\x3b\x07\xbc\xa2\x9c\x27\x88\xcf\x78\x0e\x46\x9a\x38\x29\xd4\x09\x10\x91\x01\xbd\x15\xea\xc8\x74\xc1\x2a\x20\xf2\x3c\xe6\x9a\x34\xdf\x1f\xd0\x4e\x34\xcc\x7f\x0b\x1a\x4a\x36\x89\x46\x5a\x66\x82\xd9\x26\x52\x8a\x9c\x62\x6a\x7b\x6f\xd4\x91\x71\xe9\x70\x2a\xfb\x51\xb6\xfe\x25\x1a\x6a\x7c\xb8\x1c\x2b\x1e\x1c\x02\x53\x06\xd6\xe7\x46\x6d\x95\x31\x67\x54\xa9\x83\x0f\xf1\xf5\x02\x97\x70\xa7\xed\xb5\xe5\x19\x12\x8f\x7e\xbd\xde\x98\xad\x65\x3e\x42\xa7\x5e\xf8\xa5\x51\xb2\x49\xcb\xaa\x50\xcc\x9e\xf6\x3b\x85\x8f\xfe\x75\x03\xa8\x07\xd4\x1e\x05\xf9\x6f\xe2\xed\x4f\xfe\xd3\xbc\x6b\xcc\x92\x72\x2f\x05\x77\x73\x23\x48\x07\xf9\x75\x43\x48\x9a\xb5\xe6\x3b\x19\x30\xca\xed\xc8\x39\x70\x89\x23\x43\x26\x80\x4b\x4c\xa5\xb0\x39\x14\x27\xad\x49\x14\x5d\xfb\xd2\x8a\x6d\xc7\x0b\xcb\x01\x3d\xae\xa9\x37\xae\x00\xa2\x7b\x6e\xb6\xdb\x53\xe8\x41\xc6\x0d\x8e\x31\x1e\x08\xd6\xb6\xe8\x02\x6e\x8e\xdf\x8c\x20\x9a\x35\x66\xec\xa0\x12\x5c\x9c\x8d\x11\x0c\xf6\x42\xd7\x00\x8e\x73\xb1\xf5\x79\xac\xda\x30\xbb\xc8\x3a\xea\x33\x32\x4d\x2b\x1b\x8f\x47\xf7\xc3\x07\xb7\xbf\x10\xd2\xb8\x2c\xe1\xf3\xcb\xab\xdb\x10\xad\x91\x60\x6f\x4f\xa2\x8d\x88\xee\xc1\x61\x82\x57\x9e\x13\xe2\x25\x86\xd3\xb9\xf4\x72\x8e\x85\xb2\xd0\x83\x9d\x53\xb8\x70\x2a\x2f\x2a\x67\x71\xa2\xb3\x94\xef\x20\xc8\x2b\x31\xf7\xca\x07\x88\x5d\xd2\xa2\x39\x0a\xf6\xf9\x8b\x87\xcf\xb4\x99\x95\x99\xff\xdd\xd8\xb1\xf4\x60\x5a\x3f\x98\xcd\xf3\x80\x69\xb1\xe5\xb2\x48\xa2\xb9\xdc\x0a\x2e\x43\x54\x1e\x05\xb9\xcd\x20\xc7\x4a\x10\x07\xfc\x6a\x25\xa2\xc2\x93\xc8\x82\xf1\xee\x46\x6a\xdf\x1e\x1c\xd7\x77\xb7\xf3\x7a\xbb\xfe\x13\xe0\x7e\x31\x46\x9f\xab\x07\x3a\x86\xed\xd5\x78\x60\xf0\x06\xe4\x3f\xe9\xca\xb5\x8f\x41\xf8\x97\x5d\x53\x6c\x29\x8a\x47\x01\x1c\x29\x94\xd4\xdd\x66\xe3\x1f\x2d\x01\x73\x9c\xa2\x7b\xbb\x16\x7e\x80\x04\xc3\x0d\x16\x82\xc9\x1c\x99\x9b\xac\xb1\xb2\xbd\xa0\x34\x73\xf0\xf6\xbc\x20\xbf\xd5\x0b\xb8\xa6\xcd\xeb\x31\x7f\x10\xf1\x5c\x56\xa9\xf2\xc8\x66\xf4\x1b\x8e\x79\x71\xc3\xa7\x39\x6d\xec\x18\x0f\xf2\xe5\x9f\x03\x3d\x90\x27\x06\x76\x89\xd4\x3d\x62\x8b\xd8\xe9\xe7\x7c\x55\x59\x9d\xd7\xd0\xba\x1f\x00\xc9\x12\xda\x8a\x97\x91\xd6\x69\x05\x4f\xe1\x16\xa5\x23\x02\x43\x96\x50\x07\x80\x25\xbf\x64\xc3\xd3\xd9\x56\xc6\x5c\x5a\x86\x8c\x55\x99\x22\xf3\x73\x57\x1e\x02\xf1\x02\xda\x6c\xbe\xaf\x97\xd5\xe9\xfc\x6a\x2c\xd0\x8b\x74\xb0\x87\x00\x8c\x8c\x67\x9d\x5d\xf5\x42\xea\x12\x4c\x0a\x2b\x15\x07\x8e\xe7\xb5\x28\xe0\x36\x8f\xcb\x14\x09\x1f\xc0\x63\x0e\x1c\x83\x3c\x4d\x59\x52\xe8\xb9\x74\x94\x88\x98\x6c\x00\x27\xac\x75\xa9\x5b\x95\x71\xe9\xb4\xca\xe1\x63\x2e\xc1\x0e\x4b\xa2\xa4\x68\x40\xb8\x77\xa1\xbc\x52\x96\x09\x8e\xf9\xc9\x38\x6d\x73\x19\xbe\xb9\xea\x93\x40\xc9\xbc\x3c\x4d\x78\x8f\x0a\xfc\x53\x2c\xdd\x99\xa9\xe2\x20\xdc\x02\xf6\xce\x3c\xb8\xac\x72\x32\xb6\x96\x38\x51\x08\x69\x69\x5e\x35\x85\xb6\x3e\x72\xff\x6e\x85\x3c\x85\xa8\x4c\x79\x8e\x09\x1a\xab\x32\x65\xc9\x2a\x10\x81\x86\x39\x40\x42\x3c\x33\x5d\x91\x82\xbb\xda\x7a\xc9\x35\xdf\x8a\x80\x8b\x83\xdc\x3b\x69\x80\xa1\x40\x96\x7f\x0c\xce\x9b\xb2\x5e\x4e\xd9\x5b\x4f\xf9\x89\x33\x0c\x7b\x22\x20\xd2\x4d\x34\x1e\x7f\xae\xbd\x41\x1a\x39\xf4\xce\x34\x51\x49\xb3\x23\xdd\xae\xeb\x98\x41\x10\xe4\x18\x07\xd0\xb0\x72\x2c\xfd\xa8\xe1\x56\x1a\x09\xf3\xd3\x1a\x6c\xc3\x6d\x88\x8e\x06\xda\x5b\x61\x64\x23\x43\x12\xe2\x03\x1a\xea\x48\x9e\x5b\x1a\xbb\xed\xd1\x9c\x86\x79\x1c\xd9\xd4\x40\xc1\x6d\x7c\x43\x83\x95\x13\xc2\x71\x86\x8c\xec\x9a\x17\x63\xb1\x39\x2e\x19\x67\x7c\x43\x5b\x71\x50\x43\x9a\x09\xa7\xc7\xc8\x76\x3a\xa1\xfd\x03\x1a\xea\xe4\xfc\xbd\xc6\x0b\x1c\x15\x82\x47\x9b\x6a\x5e\xbc\x65\xaf\x75\x3d\x80\xbc\x28\xd8\x8f\xe3\x53\xfa\x67\x7e\xcd\x81\x88\x1d\x33\xcd\x9f\xb2\x2b\x29\x10\x39\xa7\x56\xc1\xa5\x42\x0d\x20\xb5\x3b\x10\x10\x71\xa7\xdc\xd2\x34\x4c\xde\x5b\xba\x20\xb3\xe5\x26\x8c\xfb\xd2\xe1\xd4\xc3\x65\x83\xa7\x48\x87\x2d\xd9\x26\xb7\x73\x84\x79\x39\x2c\xe9\xbe\xfd\xcd\x1f\x00\x50\xc7\x9f\x00\x6d\xfd\x18\x3e\x2d\xbd\x48\x72\xf7\x8a\xb3\xf0\xf1\xea\xba\x61\x08\x27\xdd\x37\xbe\x1f\x37\x55\x14\xe2\x08\x71\xba\xbb\xcb\xb7\xe7\xef\x2e\x2e\xab\x8a\x72\x7f\xb9\x3b\xbf\xab\xfe\xe5\xfa\xee\xf2\xf2\xe2\xf2\x4f\xe1\x9f\x6e\xee\xce\xce\xce\xcf\xdf\x56\xbf\xf7\x6e\x76\xf1\xbe\xf6\x3d\xf3\xa7\xea\x97\x66\x6f\xae\xae\x6b\x1a\x76\x56\x80\x2e\xf8\xd3\xed\xc5\x87\xf3\xb7\x8b\xab\xbb\x8a\x0c\xde\xdb\x7f\xbd\x9c\x7d\xb8\x38\x5b\xb4\xb4\xe7\xfa\xfc\xec\xea\x97\xf3\xeb\x3d\x2a\x76\xbe\xbf\xad\x43\xfa\x14\xf0\xb1\x83\x35\x0d\x67\x6c\x95\x27\x42\xc6\xe9\x0e\xb1\xf7\xf6\x65\x5b\x03\xd3\x86\x77\x6f\xb2\x15\xaa\x3c\x06\x42\x7f\xbb\x11\x4c\x3d\x88\x1c\x98\x8d\xb0\x34\xa2\x41\xf0\x59\xd4\xf5\x5a\x73\x51\xe4\xcd\xa8\x40\x6f\xa6\x50\x91\xef\x5c\x2e\x5a\x5f\x73\x3c\x2b\x1e\x55\xc2\x32\x91\xf7\xb5\x05\x2c\xa3\xbc\xcc\x8a\x64\xd9\x9d\x14\x31\x3a\x99\x78\xe8\xdb\x1b\x39\x5c\xdb\x09\xaf\x2e\xdb\x0f\xc6\x4a\x6e\xc0\x31\xc0\x63\x28\xe1\x50\xa9\x4e\xf7\x6b\x0b\xd6\xcc\xca\x65\x9a\x44\x2c\x89\xeb\xfe\x14\xca\xf1\x07\x97\x71\x9d\xea\x39\x13\x39\x98\xaa\xe6\x05\x90\xe5\xe2\x84\x97\xc5\x06\x69\x09\x29\x15\x81\x84\x39\xe6\x52\x8b\x28\x17\x18\x0b\x10\x1a\x9c\xb4\xa8\xd1\x18\xd4\x04\x8d\x21\x56\x8e\x18\x08\xc0\xa6\x81\xec\x46\x47\x8c\x00\x7f\x89\xa5\x8f\x70\x92\xe2\xf7\x7b\x87\x86\x5a\x9c\xe8\xba\x40\x3f\xdc\xf0\xf8\xa1\x55\x7a\x34\xfd\x36\x27\xb5\x53\x3a\xc4\x49\xb6\xb9\x1b\xed\xdd\xd8\xb7\xc6\xc2\x85\x52\x4d\x66\xa0\xd2\xe9\xa3\xb3\x5c\xc0\x25\x42\x50\x00\xeb\xbf\x00\xe8\x0a\xe5\x7a\x40\x8a\x87\x79\xaa\x2d\xc5\x86\xa7\x2b\xb4\x38\xcc\xd4\xb4\x33\x25\x60\xf9\xb7\xea\x5e\xc8\x6b\x9c\xb0\xaf\x72\x1c\x4a\x7c\xf9\x78\x9e\x16\xe7\x11\xf2\x2e\x4c\xd3\x46\xbb\xaa\x6c\xae\x1b\x18\x53\x05\xbe\x13\x82\x8f\x31\xa5\xc3\xb3\xb0\xdb\x34\xb9\xd5\x2a\xf9\xcd\x14\x38\x97\xa2\x95\x87\x1a\xf0\x42\x96\x31\xcf\x9d\xcb\x80\x8d\x42\xda\xb1\x7b\x21\x41\x23\x12\x25\xe4\xf7\xae\xd9\x71\xfe\xf3\xe6\x5c\xf4\x38\xf4\xc1\xe7\x97\x54\xa4\x33\xc3\x28\x8f\x1d\xa7\x02\x73\x6c\x1c\xaf\x00\xac\x9b\xb3\xf7\x17\xe7\x97\xb7\x8b\xb3\xeb\xf3\xb7\xe7\x97\xb7\x17\xb3\xf7\x37\x43\xb7\xdf\x53\xe4\x45\xd5\x76\x5f\x3d\x3d\xc8\x9d\x10\xa7\xb4\xf3\x7c\x7a\xae\xeb\x94\xdf\x76\x30\x25\xfb\x5b\x9f\xc4\xd9\x22\x4e\x74\x64\xae\xbf\xdd\x42\xc8\x18\x08\xfc\x0f\x5a\xaa\xed\x45\xd5\x7b\xe1\xbe\xc1\xdc\x37\xec\x09\x82\xb7\xdd\x83\x5d\xd1\xee\x73\x40\xdd\x81\x1b\x32\x17\x66\xf3\xc7\x15\xde\x84\xe9\x7e\xd5\x26\x53\xdc\x71\x7d\xab\x16\x51\xef\x13\xb6\x37\xd1\xba\x04\x7a\x06\xfb\x35\x80\x1c\x76\x8c\x0a\xb1\xaa\x86\x2a\x02\x49\xa0\x80\xcd\x12\x3d\x97\x5b\x2e\x63\x5e\xa8\x7c\xd7\xd1\xc5\x61\x87\x67\xb8\x6d\xaa\x47\x68\x78\x65\x4b\x21\x62\x3b\x0b\xf8\x55\x2e\xeb\x4b\x09\xb5\x06\x6e\xaf\x7e\x3e\xbf\xbc\x59\x9c\x5f\xfe\xb2\xf8\x78\x7d\xfe\xee\xe2\xaf\x0e\x09\x99\x71\xdd\xa6\x78\x9b\xe5\xc2\x9c\x2e\x96\xba\xa9\xf5\x7c\x41\x19\x5a\x5b\x0e\x49\x0f\x26\xab\xb9\xb4\x27\x4b\xee\x8b\xdf\xe4\xaa\x5c\x6f\xda\x0b\xaa\xb7\xf2\xe3\xec\xf6\xa7\x83\x9a\x09\xc4\x7a\xa8\x55\x89\xbb\xad\x89\x08\x4d\x56\x74\xee\x21\x8c\xb4\xd6\x3c\xa0\x87\x84\xaf\xb6\x45\x19\x3a\x4e\xb4\x83\x5e\x2f\xcd\x43\xab\xd7\xf8\x6f\xf9\x7a\xd7\x02\xba\x0d\xce\xcd\xca\x35\x02\x08\x65\x94\x3c\x6e\x94\xf6\xba\xe5\x6f\x95\x1b\xec\x87\x93\x54\xac\xd7\x22\xc6\xe5\x55\x2f\x98\x7c\x70\x74\x04\x46\xfe\x5e\x6f\x1b\x45\x12\x25\x3d\xe2\x62\x76\x78\xaf\xe1\x07\xf8\x47\xf7\x93\xf6\xb3\xe2\x8c\xc8\x71\x20\xbe\x59\x70\xd9\x11\x48\x7e\x68\x22\x34\x07\x1d\x45\x57\x39\x73\xc9\x4f\xe4\x30\xb1\x21\x03\xbf\x0f\xba\x00\x2f\xc7\xe3\x42\x5d\x3b\xae\x45\x96\xf2\x48\xb8\x1c\x06\x64\x35\x85\x77\xfd\x21\x01\x3c\x92\x7e\x95\xe4\x6f\x09\x24\x61\xbd\xda\x55\xdb\x12\x00\xcf\xed\xb5\x3d\x8f\x9f\xdf\xb5\xd2\xfb\x70\x23\x2e\x43\x70\x34\xa3\xf6\x1e\x41\xdf\xd1\x17\x05\x82\x96\x9d\xb0\xe4\x51\xcb\xa1\x56\xf3\x2f\x34\xf1\xf8\x66\xae\x3a\xba\xb9\x65\x0b\x75\xcb\xc3\x99\x8e\x7d\xfe\xc2\xa2\xc8\x7b\x09\x86\x9f\x22\x1c\xf1\x31\x57\xdb\x44\x8b\x59\x51\xe4\xc9\xb2\x0c\x15\x56\x47\x02\xe6\x2a\x8f\x13\xdf\xe1\x2c\x57\x71\x19\x59\x4a\x20\xe8\xad\x87\xfd\x90\x97\xcf\x5a\x1d\x31\x3b\x31\xab\x8f\x5e\x6e\x22\x3e\x01\x40\x3f\x72\x56\xb5\xc5\xd8\xec\xc1\xd8\xe1\xfb\xfb\x68\xaf\xf2\x63\x96\x64\xcb\xa2\xe8\x1e\x4c\xbb\x06\x86\x25\xd6\x32\xfb\x75\xb0\x80\x3b\x50\x53\xb4\x5c\x96\x1c\x03\xe8\x55\x1b\xa5\x8b\x01\xc4\x5d\x35\xe3\xc0\x5d\xc3\xb0\x31\xd5\x8c\x19\xb4\x1b\x36\x5c\xa3\x39\x5f\x44\x9b\x6a\xc3\xa1\x37\x55\x26\xd4\x7a\x73\x9d\x79\x7c\x9c\xdb\x64\x50\x18\x6d\x82\x8e\x86\x84\x1c\xdb\x15\x55\x4b\x27\xd1\x3b\xce\xdb\x1d\x5a\x8c\xee\x45\x87\x97\x01\x9c\xa3\x29\x2f\x65\xb4\x61\x59\xca\x31\x99\x7c\xc3\x35\x2e\x69\x8b\x25\xe1\xcb\x24\x4d\x0a\x60\xe9\xc1\x10\x67\x6d\x84\xcd\x33\x8f\xe7\xf7\x96\xec\x9c\x7b\x4a\xa6\xbe\x45\x7f\x24\x66\xd7\xf5\xea\x8b\xa2\x76\xfd\x96\x0d\x8f\xa1\x61\xcb\x92\x10\xbb\x7e\x3a\xcc\x41\x0c\xcb\xd2\xf7\x65\xdc\xcc\x52\x89\x1f\xeb\x3f\xaf\x8c\x37\x90\x30\x3c\x85\xbf\x36\xd1\x0b\xbd\x93\xd1\x02\x69\x1d\xbe\xc4\x66\x60\x17\x0e\xbf\x6b\x1f\x80\xc8\x7e\x0e\x8f\x5a\xd3\x18\xcb\x31\xa1\x72\xc6\xc3\x7f\xc7\x18\xf0\xcf\x4b\x59\x24\xdb\x56\x42\x9b\xe6\x40\xb5\x98\x79\xe3\xc7\x88\xe4\x4e\x46\x5c\xd3\x75\x31\x94\xd6\x23\x68\x95\x2a\xde\x21\xc8\x6f\xcb\x46\x6d\x93\xae\xb2\x63\x55\x2e\xbb\xd8\xf4\xb1\x55\xfd\xa5\xf7\x45\x8d\xec\x9c\x3e\x95\x57\x39\xbc\x29\x78\x21\xcc\x0c\x1e\x36\xa0\xe6\xd7\x27\xf0\xf3\xf6\xc2\x29\x15\x73\x70\x9f\x1b\x3b\xd2\x2b\x6c\x39\xeb\x16\x40\x97\x2d\xdb\xb0\x6e\xc6\x1c\x03\x9e\x3f\x72\xbe\x12\xb9\x67\x29\xed\x17\xed\xf9\xe3\x0f\x43\xb6\xd4\x5f\x4a\x6e\x2e\x8e\xab\xd5\x0d\x92\x0a\x1d\xd3\xe9\x22\x69\x6e\xab\xf6\x73\xba\x5e\xeb\x6d\x35\x0e\x19\x2e\xfc\xc1\x29\xdb\x6d\xbd\xb9\x31\xbf\x1e\x7e\x5c\x5f\x54\xfc\x8d\x59\x9e\x28\x20\xd7\x51\x2b\xa4\xaa\xec\xe6\x5a\x6e\xad\xf7\x88\x91\xfc\x5c\x8a\x52\x98\x05\xb4\x2c\xe3\x75\x33\x1c\x30\xe2\x49\xe1\xbb\xb4\x51\x8f\x6c\x5b\x46\x1b\x66\x0b\x67\xb1\x48\xf9\xae\xd2\x35\x38\xca\x0b\x05\xc4\xa7\xa3\x38\xc6\x02\xba\xea\xa8\xd4\x85\xda\x02\x12\xdb\x97\x9b\x97\x12\x76\x39\xe3\x76\x77\xb5\x5d\x84\x15\x1a\xbe\x03\x63\xc0\x37\x1f\xcf\xcf\x2e\xde\x5d\xd4\x02\xb0\xb3\x9b\x9f\xc3\x7f\xff\x7a\x75\xfd\xf3\xbb\xf7\x57\xbf\x86\x7f\x7b\x3f\xbb\xbb\x3c\xfb\x69\xf1\xf1\xfd\xec\xb2\x12\xa6\x9d\xdd\xce\x6e\xce\x6f\xf7\x44\x62\x9b\xb5\x76\x4f\x04\x0f\x58\x02\x2d\x36\xdc\x4a\x60\x58\x87\x0c\xd5\xfa\x9a\xcd\x2c\x67\x62\x85\xd5\xd3\x46\xd3\x01\x7e\x93\x22\x8a\x10\x83\xee\x6f\x79\xc1\xcf\x78\xc1\x53\xb5\x9e\xb2\x19\x23\xe4\x3c\x66\x44\x68\x63\x4a\x12\xa1\x9c\x99\x1d\x2c\xc2\xd8\x93\x91\x77\x76\x78\x8d\x5f\xb5\x22\x2a\xc7\x54\x84\x6a\x30\x36\xfd\x6f\x2e\xcf\x1f\x84\x2c\x4a\x60\xeb\xe5\x69\xca\xa8\x5a\xfb\x85\x80\xda\xc0\xb6\x52\x27\xdb\x24\xe5\xb9\x97\x63\xbd\xa2\xb2\xe0\x39\x67\xdb\xea\x98\xac\x9a\x79\xf3\xf6\xc5\x7b\x77\xc1\xa0\xdd\x67\xef\x2f\xc0\x40\x8e\x0a\xab\x35\x66\x2b\x9f\x4b\xa4\x0a\xa4\x1a\xb7\x1c\xb2\x74\x0a\x45\x2e\x68\xac\x9e\xbe\xdc\xbd\x10\x8f\xe2\x4c\xb7\xc1\x9a\xe7\x7a\x7a\xbb\x46\xda\xff\x38\x97\x45\xbe\x1b\x6c\xf5\xde\x42\x5a\xba\x86\x97\x0b\x81\xfe\xaa\x12\xad\xe8\x21\x64\xb6\xf4\x4b\x30\x85\x2d\x22\x95\x02\x58\x2e\x4e\x85\x00\xa0\x8e\xd7\x59\x6a\x6e\xde\x6f\x75\x1c\x42\xe6\x20\x18\x85\xa5\x2a\x65\xac\x09\x9e\xb8\x4d\xe4\xe9\x96\xff\xf6\xd2\xf6\x14\x99\x38\x9c\x50\x12\xb0\xac\x89\xd4\xbc\x53\x77\xe6\x90\xeb\x1f\xae\xb9\xec\x19\xaf\xfd\x6f\x09\x7b\xb2\xc2\xa3\xd8\x7b\x30\x10\x68\xf9\x20\x76\x6d\xf3\xd7\x10\xbb\x63\x21\x63\x3b\x14\x92\xe5\xc2\x7c\xd1\xa1\x38\x53\x04\xe7\xba\x7f\x43\xb6\x46\x45\x90\xb7\xfd\xec\x0e\x81\x11\x47\x6d\x9b\x56\x48\xc6\x70\xc3\x67\xb0\x5a\x21\xd5\x64\xe6\x0c\x01\x1a\x36\x36\x40\xd9\x29\x14\x79\x36\x93\xf5\x1f\x6a\xc9\x56\x90\xaa\x85\x19\x89\x2c\x17\x10\x0b\x82\xa9\xb0\xf2\x1a\xc0\xc5\xd5\x40\x7d\xd8\x25\x90\x0a\x0d\x11\x12\x78\x09\x89\xcf\x25\x05\xb9\x5f\x7d\x3f\xee\x9e\x2d\x90\xa3\x1d\x49\x79\xeb\xec\xe5\xee\x2e\x87\x76\x95\x32\x69\x23\xe8\xbb\xc6\x17\xd7\x53\xbc\x37\x87\x07\x80\x6b\x95\xd2\x3f\xf7\x66\x53\xd9\xd8\x45\xcb\x2b\x31\xf4\xba\x1e\xcd\xb7\xfa\x4b\x8d\x66\x95\xaa\x03\xec\x3e\x95\x1e\x5e\x68\x4b\x1e\xdd\x3f\xf2\x3c\x46\x07\x37\x00\x76\xa6\xec\x27\xf5\x28\x1e\x44\x3e\x61\x91\xc8\x0b\x4e\x1c\x67\x1a\x10\x0b\xb0\xa1\xa8\x9c\xb9\x84\x54\x16\x24\x8c\x93\xba\xcc\x05\x2b\x92\xf5\xa6\x10\x79\x88\x37\x51\xb9\x39\x8e\x0a\xa4\xb7\xcc\x44\x44\xac\x52\x1d\x03\xb0\x4a\xf9\x43\x93\xb4\xed\x10\x3a\x8c\x96\xf7\xbc\x95\x2c\xea\x43\x08\xd1\x80\xd1\xa1\x89\x3c\x40\x13\xb6\x56\x29\x97\xeb\xe9\x74\x0a\xf4\xfc\x2f\xbb\x98\x99\xc0\x1f\xb0\x18\x9f\x80\x52\xf3\x9b\x3c\x7d\xff\xac\xb9\x81\x2d\x1c\xb5\x4f\x69\x3c\xc2\x08\xb7\x83\xd1\xa7\x4a\x69\x91\xee\x1c\x91\x93\x4b\x74\x02\x64\xed\x6f\x85\x90\x3a\x41\x7f\x5e\xcb\xee\xbd\xa9\x47\x7f\xbe\x6c\xb0\xac\xdd\xbb\x30\x3a\x8d\xb6\xa3\x1c\x10\x70\x1c\x51\x12\x7e\xbf\xfd\xe1\x78\x50\x5a\x78\x7b\x59\x52\xc9\xb1\xb9\xce\xbf\xa8\xa4\x03\xab\x71\x10\xbf\x62\x6b\x49\x44\x46\x73\x50\x7e\x68\xfb\x98\x35\x52\x76\x8f\xc8\xd6\xed\x49\xbc\x1d\x99\x73\x3b\xc4\x8f\x71\x53\x9f\xee\xd1\xdb\x62\xbf\xa6\x54\x6b\x87\x46\xe6\x34\x7b\xf2\x81\x31\x96\x1f\xa6\x45\xa6\x3b\x78\x30\xba\x0c\x67\x08\x9b\xc4\x41\xd8\xa7\x12\xd5\x82\x5c\x3b\x1f\x16\x73\x24\x61\x41\x14\x4c\x17\x2a\xe7\x6b\xc1\xb6\x22\x4e\xca\x6d\xeb\x61\xe3\x9a\x7b\x0c\xbe\x53\xa5\xe5\xb6\x9b\xae\xf1\x58\xfb\xdf\x37\x12\xff\xeb\x0c\xaa\x1b\x6c\xff\xcf\x5c\xea\x82\x95\xf6\xa3\xf6\x62\x8c\x87\xc6\xda\x5c\xf4\x79\xa2\x81\x58\xf4\x90\xd4\x56\x57\x0c\x16\x0d\x11\xf2\x5d\x86\xb1\x85\xca\xec\x9e\xd8\xd0\x25\xfd\x44\xe3\xac\x42\x58\xbd\xfb\x52\xa8\xa3\x46\xc7\x0b\x7c\xe5\xaa\x6c\x90\x2a\x0d\x42\x32\x80\xd5\x1b\xd0\xfd\x13\xac\x0d\x0a\x24\xec\x4d\xa1\xd8\xca\x26\x4b\xde\x8b\x80\x7e\x2e\x06\x21\x80\x47\xe4\x32\xfa\xf9\x47\x6d\x51\x3a\x04\xa4\xf2\x06\x57\xe1\x2b\xc1\xc0\xd7\xc3\x2b\x8b\x9f\xc3\x1e\x62\x11\x40\x12\x17\x73\x59\xb4\x16\xe0\xe1\xa5\x50\x16\xfe\xe4\x17\x5e\xa6\xed\x5f\xa7\xf2\xe1\xab\x28\x14\x39\xfb\xf5\x86\xe1\x50\x13\x65\x7c\xde\xd7\xd0\xa0\x90\xfd\x08\x3e\x18\xae\xc5\x01\x86\x6c\x65\x1e\x70\xd0\xad\x66\x80\x19\x76\x51\x44\x1b\x6f\x79\x00\x49\x9e\x23\xf7\x23\x15\x60\xea\xe7\xd6\x93\xe0\x23\x38\x3a\x44\x99\x26\x6b\xa9\x42\xfd\x16\x25\x05\x44\x20\xcd\x01\xa4\xc2\x62\x59\x52\xec\x87\xf2\x8d\x64\x86\xdb\xb7\xd4\x0a\x85\x10\x2d\xea\x67\x25\x90\x0c\x2f\xa2\x04\xf9\xa4\x2c\x0e\x1a\x9f\x74\x24\x2a\x5b\x27\x47\xaf\x32\x74\xcc\x65\xb5\xaa\xc6\x20\x59\xac\x5d\x92\x0b\xe4\x34\xd6\xc6\x7a\x2b\x92\x07\xb3\x51\x9b\xcb\xda\x2d\x50\x38\x01\x9a\x6b\x6f\x2e\xb1\xd9\x01\x31\xf2\xbd\xd8\xe9\x50\xc1\x96\x56\x14\xeb\x5a\x90\x89\xe9\x0f\xcd\xd7\xfe\xa9\x80\x81\x5b\xe4\x5e\x87\x6e\xd8\x5d\x86\x95\x7e\x30\x3f\xee\x01\xf1\x36\x0a\x37\x6b\xd0\x67\xa3\x7a\x97\x28\x1d\x13\x7e\x9c\x69\x0e\x3d\x4e\x0f\x50\x98\x21\xce\x32\x4c\x2d\x82\x77\xbb\x79\x9e\xcf\x25\x71\xa7\x07\x97\x9c\x39\x70\x9a\xd3\x46\x29\xf2\xc8\xd8\xbc\xab\xd0\xfb\x00\xbd\xa5\xa5\xfa\xac\x56\x69\x83\xea\x56\x00\x7d\x2e\xa1\x6a\x4c\x22\xb6\x2e\xc8\xd6\x0a\x0f\x04\x7f\xd2\xe4\x76\x02\x3e\x83\x4c\x3d\xfc\x26\x31\x3c\xa2\x14\x32\x3e\x6e\x22\x61\x86\x6f\x26\x5b\xb1\x96\x16\x69\x79\x73\x7e\x76\x7d\x7e\xfb\xc5\x00\xa1\x16\x8d\x39\x1a\x11\x6a\xdb\xf9\xf6\xfc\xdd\xec\xee\xfd\xed\xe2\xed\xc5\xf5\x73\x40\x42\xe9\xa3\x03\x30\xa1\x37\x24\xc9\x70\xa6\x64\x21\x7e\x3b\xea\x4e\xce\x4b\xb9\xe0\x23\x72\x93\x9c\x28\x4b\x9f\xb9\x83\x85\x36\x25\x25\x9c\xde\x03\xf1\x8b\xe2\x8d\xe6\x14\x24\x56\xde\xe7\xb9\x4a\xd2\x14\x52\xb5\x5d\x74\x80\xd2\x00\xcd\xa0\xc2\xf9\x63\x29\x55\xe9\x4c\x9d\xcb\x65\x45\xf1\x03\x3c\x96\x1b\xf3\x08\xc6\x24\xed\xcc\x0c\x40\x9e\x40\x0a\x6c\x9f\xea\xc4\x3a\x91\xc2\x37\x03\x66\xcd\xb4\xaf\x93\x2a\x9c\x26\xf1\x39\xa1\x6f\x64\x78\x0d\xb5\x35\xed\x8a\xab\xac\x4f\x6b\x7e\xda\x0f\x5d\x0f\x71\x13\x03\x74\x22\xc6\xe0\x85\xdb\xcd\x37\xed\x4b\xf7\xd4\x6f\x01\x18\x77\x33\x93\x1c\x42\x28\xba\xe0\x79\xe1\x27\x92\x26\x02\xd5\xa8\x7c\x6c\xe5\x3e\x41\x88\x98\x5a\xd5\xc6\xd9\x1c\x85\x66\xac\x13\x08\xb4\x70\x62\x9f\x89\xd2\x52\x17\x22\x27\xaf\xcf\xec\xd7\x9b\xb9\x7c\x63\xae\xaf\x97\x74\x0b\x91\x62\x11\x56\x81\x00\x25\x55\xa9\xdf\x5a\x28\xe1\x09\xf6\x1d\xba\xd8\xb7\x82\x4b\xcd\x60\x6b\xa4\xa9\xc8\xfd\xca\xc0\xf6\x08\x11\x93\x72\x2f\xd0\xed\xfa\xdf\xbf\x64\x84\x3e\x35\x43\x61\xda\x4b\x9f\xe6\x62\xab\x8a\xe6\x7a\xea\x62\x02\x00\x48\xf8\x73\xae\x9c\x96\xcc\xa4\xa1\xab\x88\xd0\xf4\xad\x8b\xa8\x9a\x27\x34\x68\x2d\xdd\x62\x71\xbf\x2f\xa5\x27\x5c\x4a\x03\xee\xf5\xf0\x96\x60\x1b\x65\x0e\x50\x27\xe7\xe3\xa3\xe4\x8e\x89\x24\x05\x70\x9f\x19\xc6\xd6\x5b\xa7\x26\x69\x79\x0c\x74\x05\x8a\x3a\x0e\x42\x3d\x6b\xa1\x3c\xf2\xda\x69\x36\x34\xd5\xab\x96\xf9\x3c\xd4\x82\x33\x0b\x26\x95\xaa\xb0\x24\x21\x0e\xbf\x49\x60\x54\xf3\x05\xc7\x4e\xd3\xdb\x46\x62\x7c\xb1\x56\xca\xe2\x48\xc5\xb9\xdb\x10\xf4\x5a\x49\x9b\xc6\x56\x84\x84\x0b\x96\x64\xc1\x91\xb4\x8c\x59\x7c\x87\x6b\x9a\x56\xd7\x9c\x23\xfc\x3c\x08\xab\x71\x79\x75\x79\x1e\x22\x2d\x2e\x2e\x6f\xcf\xff\x74\x7e\x5d\x49\xb8\x7f\x7f\x35\xab\x24\xcd\xdf\xdc\x5e\xd7\x72\xe5\xdf\x5c\x5d\xbd\x3f\x6f\x40\x36\xce\x6f\x2f\x3e\x54\x0a\x7f\x7b\x77\x3d\xbb\xbd\xb8\xaa\x7c\xef\xcd\xc5\xe5\xec\xfa\x5f\xc3\xbf\x9c\x5f\x5f\x5f\x5d\xd7\xea\xbb\x3b\xeb\x07\x7f\x54\xba\xd1\xee\xfe\xf1\xb1\xe5\x80\xfb\xb4\x75\x1b\x57\x35\x5f\x8f\xd8\xc5\x03\x81\x73\xfb\x96\xa3\xcd\xa7\x8f\x43\x49\x04\xdc\x18\xa6\xa9\xa3\x56\xdd\xd3\x8b\xd4\x56\x86\x2e\xe3\xc7\x1d\x7b\xe6\x56\x5b\x3c\x05\x90\xb1\xd7\x00\x74\xb5\xd4\x1c\xb7\xa4\x09\x8d\x43\x9b\x41\x80\x6a\xcd\x3b\x25\x9a\x64\xfc\xec\x2d\xb5\x75\xec\x6b\xa7\xe7\xda\xda\x43\x59\xf4\x54\x74\x25\x7d\x8d\x0e\x2a\xb3\x6c\x00\x49\x6c\x0d\x05\xfb\x61\x70\x71\x43\x37\xcc\xca\x09\x96\x63\x97\x9a\x68\x7b\x5e\x51\x3f\x3d\xde\xd8\xf6\x53\x25\xcd\xb6\xd7\xb8\x54\x46\xb4\x1b\x38\xad\xc6\xb4\xfb\x96\xeb\xfb\xb1\xed\xa6\x4a\x9a\xed\x06\xb3\xef\xa0\x76\x83\xc3\xbb\x68\xe7\xb9\x19\x71\x88\x85\xc5\x54\x9b\xe7\x92\xf0\xdd\x57\x02\xd1\xde\x61\x6d\x34\x1b\xe0\x79\x9f\x97\x19\x1f\x1e\xc8\x80\xd6\xb8\xed\xca\x6b\xb4\xef\x37\xf0\x29\xf4\x70\x99\x0b\x7e\x1f\xab\x47\x9a\x8f\x3a\xb0\x95\x0d\x3a\xcd\xab\x03\x64\xce\x70\x7b\x45\x14\x39\x45\xa0\x10\x64\xe7\x8b\x07\x94\x5f\x42\xc4\xe5\x68\x83\x05\x6a\xb3\x75\xa6\x20\x48\x18\x90\x7e\x76\xe6\x12\xad\xf9\x36\xc5\x5a\x33\xab\xa6\x45\xc4\xed\x01\x5d\x75\x36\x34\x06\xd7\x75\x30\xb1\x94\xa8\x53\xe6\x80\x05\x5c\xe6\xf0\x66\x82\x01\x49\x24\x38\x93\x73\xf3\xe0\xc9\x45\x94\x68\x11\xa8\x76\xb5\xde\xd8\x9f\x8f\xd3\xf8\x28\x78\xd1\xea\x76\x1d\xec\x0f\xe7\x51\x51\xf2\x94\x7d\x2e\x45\xbe\x23\x8a\x44\xf4\x55\xe2\x5f\x22\x2e\x31\x23\xa8\x10\xdb\x0c\xd2\xee\xc3\x54\x96\xb9\xfc\x15\x13\x35\x60\x0a\x5e\x68\xf6\x27\x40\x6c\xd8\x2f\xd3\x25\xbc\xe5\x05\xdc\xc5\x7f\xc1\x3a\xdc\x67\xd3\xb9\xac\xa8\xe0\x04\xbf\xaa\x08\xe2\x4c\xe7\xd2\xca\x50\xc4\x2a\xd2\x53\x78\xf1\x4d\x55\xbe\x3e\x25\x01\x67\xb3\xd8\xd5\xfd\x52\xa9\xfb\x53\x21\x4f\xc1\x27\x55\x9c\xf2\xb2\x50\xa7\x80\xf6\xc2\xf9\xd7\xa7\x56\xe7\xd5\x0a\xe5\xea\xd3\x4d\xf2\x20\xe0\xff\x4d\x37\xc5\x36\xfd\x07\x9d\x6d\x7e\x3b\x59\xa7\xf9\x89\xf9\xed\x49\xf8\xdb\x13\xfb\xdb\x13\xfb\xdb\x13\xf3\x33\xfc\x7f\xd9\x0e\xc3\x3b\xe2\x37\x6e\xee\xb2\xc9\x5c\x26\x52\x8b\xbc\x00\xeb\xe7\x31\x4f\x0a\x2f\x37\xb4\x63\x2f\xfe\xeb\xbf\xd8\x34\xe7\x8f\x98\xb2\xfa\x96\x17\xfc\x23\xfa\x17\xff\xfb\xbf\x5f\x40\x40\x15\x93\xb7\x32\x9e\x7f\x2e\x45\x31\x97\x5a\x98\x4d\xc8\xfe\xbf\xb9\x84\x08\xec\x76\xb7\x28\xd0\xef\x8a\x3e\xc8\x58\xb3\x7f\xc1\x32\x2f\x90\x2e\x34\xd6\xa6\xa4\x8e\x6c\x88\x84\xa7\x2d\xd2\xe0\x1d\x2e\xfa\xcf\xe9\x5b\xfa\xfe\x88\x6d\xfd\x39\xad\xee\x6a\x2b\x78\xa3\x3f\xa7\x70\x81\xa6\x8a\x5b\xac\x19\x73\x8b\x17\xde\xc9\xd4\xb8\xb6\x3d\xd2\x80\x06\x3c\x6b\x98\xbe\x7d\xaf\xdc\x20\x65\xb9\xf5\xdc\x37\x8e\x11\x88\x15\xf8\x38\x04\x44\xcf\x13\xb3\x43\x6e\xd0\x13\x0a\x96\x1b\xf6\x1c\x6c\x52\x0a\x9d\xbb\xf2\xd0\x71\xa1\xff\xf8\xfa\xf4\x74\xc2\xd6\x1a\xfe\x67\xf9\x19\xfe\x07\xc0\x4f\x4f\xc5\xba\xdb\x18\x4c\x87\x7f\x6a\xce\xf2\xfe\x99\x78\x0a\x10\xe0\x97\x20\x7a\xaf\x2d\xd3\x37\xa5\x8c\x53\xe1\x53\x5d\x2b\x21\x91\x54\x99\x99\xb4\x13\xd5\x94\xd4\x81\x39\x5e\x8a\x88\x9b\x83\xaf\x51\x37\x62\x63\xd5\xaa\x10\x12\xbd\x61\xb9\x57\xdc\xe3\xe8\xb9\x02\xb3\x18\x90\x9c\xbc\x20\xc4\xbc\x80\x3f\x42\x25\xc0\x9c\x3e\xa9\x7f\xc4\x76\xaa\x24\x12\x70\xa0\xb6\x8d\x45\x94\x82\xd2\x82\xa5\xf7\x61\xb9\x28\xca\x5c\x32\xce\x32\x2e\x63\xae\x61\x05\xae\x72\x88\x76\xe6\x8c\x37\x1b\x3a\x41\x34\xb1\x2a\x0b\x20\xad\x42\x64\x41\x38\x12\xc8\xd2\x1e\xb4\x79\x12\x34\x02\xef\x04\x20\x8b\x6e\xfc\x70\x3a\x97\x56\x13\x8e\xa0\x7c\xe8\x29\x8b\x54\xb6\x23\x4a\xa2\xfa\xa0\x27\xd6\x73\x46\xc3\x3d\xf1\x78\x93\xfa\x77\x27\x2c\xa9\x86\xd6\x80\x10\xbe\x08\x54\xad\xad\x2e\xf8\x77\x42\x46\x2a\x16\xb9\x7e\x69\xb6\x61\xe2\xde\x1d\x68\x3f\x24\xda\x4f\x06\x9c\x52\xe6\x72\x23\x6f\xa1\x29\xde\x29\x27\x99\xd1\xa9\x50\x88\x0f\xca\x35\x6c\x5f\x94\xdf\x30\x0a\xa6\xad\xbd\xf4\x9f\x5f\x14\x11\x13\xc2\x52\xed\x9b\xf3\x70\x17\x04\x6e\xd9\xf0\xc4\xc5\x42\xd1\xc6\x21\xe3\xc4\x4a\x08\x27\x05\xa8\x14\xe6\x42\x17\x73\x49\x37\xf0\x84\xad\x04\x37\x76\xde\x84\x45\xfa\x01\x0f\x63\xbc\xee\x8b\x47\xe5\x31\x38\x56\x7f\x06\xb0\xbc\x95\xc2\xbd\x93\x18\xbf\x06\x88\x02\x1e\x15\x08\x30\xe8\x54\x9b\xb7\xa6\x0a\x0c\x56\xeb\x81\x78\xc0\x38\x58\x39\x93\xba\x74\x58\xa8\xa6\x03\x23\xb1\xc3\x40\x31\xab\xb7\x03\x3f\x30\x07\x0f\xf6\x0e\x61\x20\xc1\xe1\x08\x16\x37\x41\x65\x71\x9f\xf9\x18\x6e\xc8\x29\x0f\xbe\x99\xae\x4d\xd5\x33\x10\xd0\x80\xc3\xfc\x16\xe6\xa7\x7b\x1d\x56\x5a\xe4\x56\x6b\x05\xfb\x8a\x0c\x90\x9b\x24\x8f\x4f\x32\x9e\x17\x3b\xbb\x7c\xd3\x64\x09\x12\x0d\x69\x72\x2f\xd8\x2c\xcf\xd5\xe3\x53\x8f\x42\xe7\xd1\xd2\xf5\xc2\x3e\x06\x88\x3f\xf6\x95\xdf\xca\xff\x5a\x77\x77\x1c\xc6\x35\xdb\xe5\xf8\x68\xad\x27\x17\x45\xbe\x5b\x98\x85\xb8\xcd\x3a\x4f\x8a\x41\x39\x1f\xc3\x8d\xdc\x71\x34\xb6\x35\x17\x46\x27\x8d\x6d\x65\x56\xbf\x1d\x1a\xdb\x16\x86\xda\x26\x8d\xed\xc5\xe5\xc5\xed\xc5\xec\xfd\xc5\xff\xad\x95\xf8\xeb\xec\xe2\xf6\xe2\xf2\x4f\x8b\x77\x57\xd7\x8b\xeb\xf3\x9b\xab\xbb\xeb\xb3\xf3\x7e\x5e\xaa\x66\xeb\xbd\x09\x7e\xc2\xc2\x7a\x5e\xb3\xdb\x00\xa8\x81\xb9\x12\x64\x7f\x93\x46\x29\xac\x2a\xb3\x99\x13\xb9\x9e\xc0\x46\x7d\xcd\xce\xf3\xfc\x62\xcb\xd7\xe2\x63\x99\xa6\x00\xa7\xc2\xc4\xa4\xb3\x5c\xc0\xc3\x73\xc2\x3e\xaa\xf8\x22\xf8\x1d\x64\x53\xb6\x76\x03\xea\xe7\x71\x9c\x0b\xad\xb1\xfa\x09\xd5\x1f\x80\x87\x5c\xa6\x26\x81\xe7\xf8\x03\x4f\x52\xf3\x7e\x7b\xcd\xde\xf0\xe8\x5e\xad\x56\x98\xfd\x33\x71\x79\x5f\xec\x73\xa9\x0a\xce\xc4\x6f\x11\x70\xb1\xb5\xaf\x93\xf7\x6a\xfd\x15\xa0\xca\x03\xc2\x53\x1d\x8f\x14\xd0\xa2\x5b\xb4\x5f\xe7\xed\x07\x01\xf5\xf2\x03\xfe\xf4\x1d\xfe\xb2\xdd\x41\x59\xa4\x4f\x90\xdd\xff\x5e\xad\xdb\x95\x81\xc0\xba\x26\x39\x23\x0a\x24\x44\x44\xaa\xa2\xd6\x4c\x27\xf2\x7e\x2e\x7f\xdd\x08\xc9\x54\x99\xe3\x9f\xe0\x99\x6f\xcc\xcc\xb4\xd4\x1b\x01\x52\xc1\x13\xf6\x28\xd8\x96\xef\xd0\x6c\x86\x37\x81\x93\x33\x81\x25\x03\xb7\x88\xf9\x75\x9a\x48\x73\x5a\x64\x89\xcd\x4b\xa8\x4f\xfd\x53\xbc\xb8\x2c\x13\x21\x3f\x9e\x28\xb8\xef\x3e\xad\xe0\xf3\xc0\x55\xe6\x71\x93\x16\x20\x44\x27\x37\xa8\xa5\x2a\x75\x5f\x66\x9e\xb3\xf4\x85\x0d\x4e\xc2\x70\x3f\xa8\x24\x66\x71\x99\xa5\x49\xe4\xce\xdd\x47\x95\x77\x12\x33\x63\x02\xcd\xf0\x5b\xa7\x9e\xd5\xd6\xd7\xb1\x96\xec\x9c\x00\x49\xd7\x43\xd1\xfc\xcc\x24\xd5\x2c\x91\x51\x5a\x82\x0e\x5c\xa9\x45\x7e\x52\xe4\xc9\x7a\x0d\x06\xb8\x4d\x55\xfc\xf6\x59\xac\x3d\x4b\xe6\xf1\x59\x79\x61\xce\x7c\xaa\xd6\x49\xc4\xd3\x10\xdc\xec\x51\x11\x8e\x26\xd7\x65\x6c\xa1\x4a\x2e\xe4\x41\xd8\x06\x75\x32\x5d\x65\xb9\x00\xa6\xe6\x05\x1c\xe5\x0b\x3a\xee\x8e\x69\xf7\x8a\x99\x07\x3a\xb6\x2b\x24\xb1\xb5\xe1\x05\x7b\xc3\xf9\xba\xad\x54\x1a\x98\x98\x28\xa3\xce\xd4\xa3\x14\x39\x58\xb0\x00\xfb\x30\x3d\x95\x0a\x6c\x13\x27\x9f\xe6\xf0\xc9\x56\x3e\x70\xe5\x80\xd8\x98\xf8\xbb\x4e\x1e\x84\xfc\xf2\xac\xe3\x41\x05\x11\x8f\x36\x62\x61\xed\xf2\xa7\x3e\xb2\xdc\x05\x30\xf2\xb0\xb2\x3a\x26\xe1\x51\xea\xc2\x9b\xf0\x74\xc2\x16\x37\xcf\x2e\x0c\x24\xf6\x64\x64\x99\x46\x2c\x62\x11\xdd\x7f\xf1\xa3\xd9\x83\xac\x6c\x43\x18\x67\x6f\x45\x74\xcf\xee\xae\x2f\x30\x99\x39\x29\x98\x39\x0a\xf4\xc6\xeb\x32\x75\xbe\xdd\x0a\xbe\x7e\x06\xe6\xae\xa1\xc2\x52\x5e\x4b\xc0\xc9\xe9\x99\x06\x11\x20\x0a\xf2\x25\xcd\x21\x49\xb9\x34\x00\x04\xe3\x85\x95\x1b\x02\x47\x3c\xd3\x5b\x50\x17\x2a\x8b\x40\x92\x2f\xe5\x4b\x91\x76\x30\x6b\x66\x2a\x5e\xd8\x38\xc9\xb1\x60\x9e\x46\x59\xd6\x8f\x41\x51\x47\x9b\xc7\xc0\x8d\xc5\x7a\x4b\x5f\x64\xf7\x3f\xea\x80\x1d\x44\x85\x04\xdf\xf0\xae\xe7\x1a\xb2\xd3\x57\xc9\xda\x46\xdb\x92\x15\x69\x20\x21\x1f\x01\xa8\xfd\x9b\xf3\xd2\x94\xf4\x51\xc5\x04\xd3\x73\x64\x75\xc6\x0a\x12\xe4\x3d\xf1\xb8\x8a\xb0\x09\x16\x07\x08\xf5\x9a\x1d\x21\x78\xcc\xd4\x8a\xbc\x89\x59\x96\x26\x40\xdd\x1c\x23\x4b\x3c\x90\x7f\xe8\x2a\x3a\x3e\x2c\xcd\x36\x36\xe0\x28\xf9\x68\x81\x78\xbd\xf1\x46\x1f\xe4\x32\xfd\xaa\x3a\xb9\xeb\x36\xd5\xb1\x6a\x7f\x2e\x1f\xe9\xd0\x27\x74\xbf\x37\x6d\x9d\xaa\x25\x0c\x54\x37\x28\xae\xe7\x80\x36\xa7\x53\x9e\xc4\x63\xae\x77\x3b\x26\x57\xee\xa7\x7d\x0d\xbc\xb2\x9e\x0e\x57\x93\x9d\x66\x46\xc4\xfa\x61\x04\xbf\x83\xab\xad\xeb\xad\x0d\x01\x42\xed\x22\x84\xce\x1a\x2f\x48\x56\x02\x76\x85\x3b\x8e\x3b\x9e\xd5\xd5\xbe\x1c\x35\xd1\x4d\x5e\x97\x3d\x63\xe9\xa9\x60\xfa\x27\xf9\x08\x72\x0e\xdc\xb9\x8e\xa1\xa3\xdb\x91\x26\x63\x11\x2f\x0e\xe8\xc3\x39\xfd\x76\x58\x5f\xdc\x48\x63\xf3\xc0\xe5\x25\x4f\xcc\xcd\x18\xf3\x3c\xf6\xfd\x98\xc0\x8b\x38\xe2\x19\x78\x9d\xc1\x8b\xff\xf0\x6a\x6a\xeb\xb8\xf6\xc9\x34\xe6\x78\xc0\x14\x77\x84\x2b\xab\x16\x4d\x96\x7d\xeb\xc8\x2d\x52\x44\x33\x9b\x95\xe3\x97\x6b\x25\xcd\x64\xd0\xda\xad\xaf\x30\x7b\x5e\x1d\xb3\xb8\x9e\xe3\xec\x28\x0b\xe5\x83\x1b\xd0\x9f\x0b\xa0\xc1\x0d\x13\xd8\xe0\x80\xbc\x88\x3b\x80\x11\xd6\xda\xb4\x87\xd0\x08\xb8\xed\x28\xc0\x6f\x96\x0b\x1b\x26\xdb\x89\xc2\xd1\x18\xa4\x56\xe7\x0e\xa2\x40\xae\xd7\x55\x1a\x1a\xcb\xc4\xe0\xa8\xc3\x20\x66\x43\x96\x6d\xa4\xb6\x99\x92\x80\xc2\xc1\xa4\xac\xb9\xa4\xc2\xad\x5a\xb9\x0b\x24\x55\x32\xfb\x26\xe4\xbf\xc3\x3c\x11\xa1\x55\xfa\x40\x11\xc3\x40\x54\x03\x74\x0e\x4d\x03\xcf\xcc\x53\xc8\x3c\xfc\x21\x94\x4d\x17\x19\x00\xdf\x6b\x92\xdd\xb9\x58\x27\xba\x10\x61\x32\x64\xf8\xfb\x27\x53\x57\xad\xf8\x0a\xfa\x86\xbe\x53\x5d\x75\x9f\xd1\x6f\xce\xa7\x11\xed\xd9\x65\x22\xbe\x70\xbf\xeb\x5f\x0c\xb5\x7c\x75\x7f\x1c\x56\xee\x3b\x5c\x03\xf8\xd8\xd1\x48\xcc\xa5\x9d\x1c\x86\x9b\x24\xa2\x4c\xe2\x1e\xbf\x67\xa6\x68\x5d\xf2\x9c\xcb\x42\x08\x3d\x97\x14\x67\x45\x82\xb9\x90\x43\xa5\x86\xfb\x73\xa6\x7c\xa4\x74\x81\x7c\x4d\xf0\x93\x15\x4f\xd2\x32\xef\x7c\x5d\xe3\xaa\x3c\x88\x65\xa1\x6f\x94\xce\xa0\x58\xd6\x36\x69\x2e\x5f\x37\xd8\x45\x8e\x24\xa4\x1e\x25\xad\xa6\xb3\x76\x74\xc1\x5e\x2e\xc3\xe7\xdb\xb9\x56\x3b\x52\x78\x7f\xd4\x8b\x4c\x8d\x38\xf1\x7e\xfe\x51\x7f\x54\x1d\xc9\xcf\xfa\x73\xc3\x05\xd8\x83\x16\xf8\xdc\x25\x10\xc2\xf5\x3d\x04\xda\xf6\x79\x1e\x06\x71\x67\xee\x0d\xc7\x75\x9e\x5d\xb0\x6a\x37\x5c\xc6\xa9\x79\x91\xf3\xa2\x76\x03\x79\x58\xb3\x79\x01\x14\xf6\x70\xec\xce\x61\x83\x94\x90\x45\xd4\xc8\x27\xdc\x37\x4e\xb5\x44\xc4\x5e\xe8\x60\xad\x96\x6a\x7a\x60\x5b\x5a\x8a\xb7\x61\x48\x96\xd7\x6d\xd8\xaf\x6e\xbf\x9c\x87\x6d\xff\x42\xe6\x4b\x75\xaf\xad\x92\xf5\x37\xf0\x6e\xfe\xd0\xbc\x12\x22\x3a\x73\xe8\xa2\x76\x60\xfe\x23\x4f\x1d\xc8\x9b\x32\xa7\x76\xc8\x2b\x3e\x97\x24\x4f\x8e\xc1\x74\x88\xa2\x22\x3b\x9a\x66\xaf\x5c\x32\xed\xab\x7f\xb4\xdc\x58\x3b\xb6\x82\x45\x05\x04\x74\x2a\x8a\xca\x1c\x22\xdd\xe4\x8d\x63\x02\x2f\x61\x3d\x8a\x37\x05\x4c\x0f\x87\x4f\x42\x3b\xb1\xcd\x4c\x72\xee\xd7\x4a\xa7\x6e\xc1\xeb\x86\x42\xeb\xee\xd2\x27\xfd\xac\x5c\x17\x4c\x17\x22\x6b\x3d\x7e\x2b\xd6\xe5\x2e\x13\x33\x29\x55\x51\x4f\xc7\x18\x6d\x5f\x72\x57\xca\xc0\xad\x33\xe2\x32\x9a\x05\x1e\x92\x3f\xdf\x5c\x5d\xb2\x8c\xef\x00\xea\x07\x7c\xde\xe6\xab\x40\x0f\x5a\x3f\xa8\xf6\xcd\x40\xb5\xf3\xd5\x53\x05\xc7\xd4\x62\x86\xdb\xdd\xf1\x54\x63\xd3\x58\x84\x35\x43\x4b\xd2\x9c\x59\xb9\x4a\x4f\xb2\x94\xcb\x00\xcd\xad\xa7\xac\x56\x7d\x18\xbe\x77\x81\x3c\x02\x48\x41\x03\xc0\x43\x46\x6b\x21\x2f\x5b\xf1\xbe\x40\x33\x63\x17\xd4\x71\x11\xfb\xce\x33\xa2\x17\xc7\xf8\x01\x55\x49\x78\x64\xb6\x09\x92\x45\x58\x14\x82\x03\xb2\x70\x0d\x18\xd3\x4e\xbe\x6e\x1e\xa5\x5c\xeb\x5e\x50\xca\x73\x30\xf3\x87\x49\x7a\xfb\x8f\xaf\x6a\x3b\x11\x35\x07\x54\x1e\xf8\x2e\x75\x1f\x03\x39\x80\x3d\xba\xbc\x08\x59\x60\xef\x07\x62\x18\x14\xe9\x27\x7a\x24\xf8\x3d\xf2\x36\xde\x8b\x9d\x75\xd0\xd1\x51\xc5\xb7\x62\xe2\x7c\x8b\xce\x79\x16\x60\xdc\x9a\x05\xcf\x25\x80\x40\xdf\x85\xcd\x63\xef\x94\x9a\x20\x1c\x91\x2a\xe7\x58\x2c\x0f\x01\x3d\x73\xf9\x4e\xa9\x29\x77\x8f\x58\x6a\x3f\x1d\x37\xf5\x0a\x09\x04\x04\x10\xbb\xda\x74\x0e\xdf\x9b\x3f\x25\x12\xe5\xf2\x92\xad\x79\x40\xd1\x38\xc1\x8a\x82\x06\x59\x75\x76\xf5\xa8\x59\x8c\x0c\x2a\x65\xa2\x37\x10\x65\xc0\xb0\x1e\xd4\x4f\x57\x0a\xe2\x8f\x72\x2e\xb5\xd9\xc3\x10\x99\x10\x0f\x82\xdc\x93\x95\x90\xfa\xc5\xdb\xf7\x0e\xa5\x83\xfb\x92\x04\x34\x3b\x76\x5b\xf0\xe8\x38\xe6\x71\x0e\xe8\xea\x11\xfc\x6d\x94\x87\xf9\x81\x67\x7d\xb9\x9f\x47\x97\xb8\x6f\x96\x1c\x7f\x54\xfd\x45\x05\xca\xda\xa0\xa9\x57\x49\x00\x0d\x47\xef\x4e\x1e\x79\xe3\xb4\x32\xd0\xef\x97\x80\x19\xec\x60\x18\x79\x54\xec\xbf\x6e\x02\x26\x4a\x87\x90\x73\x6f\x41\x73\xb0\x83\x62\x19\x70\xd0\xe1\x96\x9e\xb2\x1b\x21\xd8\x27\x18\x29\x53\xd9\x27\x52\xc4\x04\xd0\x6f\xc1\x93\x56\xc1\x32\xf8\xf6\x85\x5c\xa9\xe3\xce\xff\x7c\xdd\x00\x95\x1e\x35\x2a\xed\xed\x3c\x16\xb6\x0a\x09\xc9\xf2\x79\x59\x34\x06\x5d\x0c\xb5\xb9\xfe\xe8\xfd\x4d\x94\x5b\x6b\x5b\x6a\x4c\x32\x98\xe2\x43\x78\xda\x6a\x8b\xc4\xf4\x72\x82\xd4\xe9\xf7\x52\x3d\x4a\x3c\x8f\xa9\x26\xf6\x9d\xd9\x7f\x60\xb3\x60\x18\x04\x2d\xc1\x12\x4f\xc3\x97\xc0\xe5\x3e\x73\xff\x66\x37\x18\xf1\xc5\x36\x83\x94\x95\x06\x7b\x97\x44\xa8\xe0\x02\xff\x6e\x36\x61\x6f\x26\xec\x6c\xc2\xa6\xd3\xe9\xcb\x09\xea\xec\x53\x8b\xf0\x27\x78\xf4\x17\x7c\x6d\xca\x26\x71\x9f\x55\x50\x01\xc8\xd5\x19\xfb\xc4\x72\xfe\x71\xff\xad\xc0\xab\x66\xbb\x80\x99\xc8\x94\x36\x45\xe8\x98\x68\xa3\x12\xdf\x28\x00\x5a\x8b\x48\xe5\x16\xaa\xad\x0b\x95\x5b\xd8\xe9\x03\xcf\x79\x22\x81\xa0\x81\x37\x41\xf7\x54\x73\xc0\x30\x2f\x7e\xe3\x5b\xe8\x7f\x22\x1d\xc9\xae\x19\xa6\x5b\xd7\xfe\x62\x97\x51\x58\xe9\x31\x4f\x8a\xc2\x18\x64\x7a\x2e\x6f\xd8\xeb\x7f\x61\xb3\x2c\x4b\x05\x9b\xb1\xbf\xb1\x37\x5c\x72\xc9\xd9\x1b\xf6\x37\x76\xc6\x65\xc1\x53\x55\x66\x82\x9d\xb1\xbf\x99\x61\x33\xe5\x5d\x2a\x63\x01\xed\x26\x8c\x33\x59\xa6\x68\xe8\x7d\x67\x21\x9d\x2f\x5d\xbf\xb8\x9f\x9d\xa5\x28\x1e\x85\x90\x4c\xab\x2d\x5d\x85\x7f\x75\xb7\xbf\x4e\xe4\x3a\x15\x05\xad\x87\x2a\xf8\x16\x2b\x38\x81\x9e\xbe\x9e\x4b\xe7\xa7\xfe\xab\x69\xf1\x5f\xd9\xdf\xd8\x65\x99\xa6\xa6\x49\xe6\xa0\x31\x0b\xe9\x35\xb3\xc9\x50\x42\x4e\x1f\x93\xfb\x24\x13\x71\xc2\x21\x1d\xca\xfc\xeb\xf4\x16\x66\x7b\x51\x7a\xe6\xcb\x70\x4f\x3b\x79\xb0\x63\x8e\x9e\x67\xa1\x56\x70\xe2\x75\xa1\xb5\xd2\x89\xb9\x08\x7f\x3a\xde\x08\xf6\x74\xbe\xb4\x1f\xe8\x8d\x82\xd2\x6e\xa1\x48\xde\x41\x47\x40\xed\xb2\xb5\x65\xb5\x5c\x05\xe1\xa5\x7e\xec\x21\x0b\x8a\x8f\x5f\xd0\x1c\xff\xa5\x31\x44\x83\x99\xf2\x49\xd5\xaa\x42\x56\x01\xb6\xa4\x27\xec\x1a\x14\xdb\x75\xfa\x58\xbf\x54\x25\x2f\x2b\x43\xac\x92\x41\xda\xa0\xb5\xc6\xde\x39\x35\x2a\xa9\x00\x07\x21\x93\xf4\xd4\x6c\xd5\xd3\x4b\x25\x05\xe3\x5a\x27\x6b\x24\x19\x03\x87\x0e\x8a\x6a\x5a\xa3\xe0\xb6\x6a\xb2\x06\x5b\x00\xec\x03\xd3\x24\x04\xa8\x16\xe6\x14\x30\x53\x90\xee\xe6\xd2\xfc\x82\x6e\x24\x48\x56\x49\x1c\xd5\x34\xd6\x46\x54\xcf\xb6\x2e\x3a\x90\x83\xc2\x5b\x16\x58\x5f\x26\xfc\x11\x0b\x8e\x12\x2f\x8f\x88\xf8\x5c\x06\x3c\x8c\x54\x9a\x25\xe9\x41\xf4\xc2\x52\xa4\x4a\xae\xcd\xaa\xe8\x3a\x04\xd4\x96\x77\x8b\x94\x8d\x6c\x02\x16\xd6\xd9\x02\x73\x59\xd2\x57\x68\x4a\xcc\x3d\x99\xc4\xde\xa5\xa3\xcb\xa5\xb1\x23\x5c\xb4\xc1\xdd\x86\xd4\xb9\x2e\x5a\x80\xe3\x50\x22\x77\x5a\xe4\xc0\xf5\x8e\x38\x25\x17\xc9\xc2\x8b\xd3\x53\xe6\x60\x8f\x86\x6d\xaa\x5e\x78\x7b\xbb\xf7\x8b\x22\x65\x0d\x82\x84\x01\xeb\xf1\x6b\x22\xdd\x87\xe0\xdf\xdf\xcd\x2e\xde\xd7\xbe\xd7\xc4\xbf\xb7\x80\xe4\x6f\x2f\x3e\x9c\xbf\x5d\x5c\xdd\xdd\x36\xbe\x67\x4a\xa3\x3f\xed\x81\xc0\x77\x8e\xde\x53\x80\x80\x3f\xa3\xe6\xd4\x42\xad\x6c\x3e\xf4\xf0\x3b\xbd\xa1\xfa\x35\x0c\x6b\x56\x04\xef\xab\x50\x1d\xab\xb9\x70\x3a\x59\x1d\xe4\x82\xa2\x6d\xc3\x1a\x5b\x1f\xb0\x2b\xf9\x0e\x7f\xfe\x51\xa5\x49\xd4\x0f\x5d\xb5\xd7\xd5\x46\x3d\xb6\x60\x01\x97\x02\xb0\xdc\xe4\xf2\xa3\x46\xa1\x85\x5e\x88\xa8\xf0\xd1\xe4\x66\xe7\xfe\x57\xc3\xe5\xf6\xbf\xc1\xd1\x13\xe7\x86\x0d\xe4\x92\x5d\x7c\x1a\xee\x56\xa0\xc9\x05\x71\x0b\x74\xaf\x83\x6f\x0f\x70\x1b\x11\xa7\xa8\x43\x65\xe4\xe1\x80\x7e\xdc\xa8\x94\x3c\x72\x48\x39\x3c\x97\x99\xc8\x23\x05\x30\x33\x64\xb3\x50\x2c\xda\x24\x69\xec\x15\xa4\xbe\x03\x5c\x3e\xa0\x67\x5f\x92\x88\xaa\x70\xf8\x09\x5b\x7c\xcf\xad\x6b\x97\xdd\x5b\xdc\xdd\x47\x61\x8f\x9e\x12\x68\xdb\xb7\xec\x7f\x25\x40\x28\x0e\x05\x91\x84\xd5\x22\xe1\x66\xd0\x2b\xed\x19\xe5\xd4\x37\xd7\x2d\x89\x03\x45\xfe\xe1\x54\xd4\xe6\x95\x96\x59\x7d\x28\x81\x3a\x1a\x3d\xa9\x08\x03\xd3\x02\x9a\xb3\x15\x1c\x6d\x31\x4f\xe4\x4a\x93\x3a\x97\x3e\xf6\xff\x42\x87\x76\x59\xeb\x3c\xa3\xff\xd5\x42\x79\x27\xec\x45\xa5\xa3\x2f\x80\x5a\x58\x2a\xa8\x8f\xe2\xb3\x95\xa1\x81\xe5\x3a\x61\x49\x31\x97\x89\xc6\x95\x99\x8b\x54\x3c\x98\xd6\x85\xf1\x01\x42\xac\xd9\xb7\xb3\xed\x36\x64\x83\x70\x4b\x22\x40\xcb\x86\x36\x61\x1e\x52\xd4\x62\x60\x32\x16\xda\xd8\x8d\xa0\x0d\x24\x7e\x33\x1b\x20\x81\xf0\x17\x42\x9b\x62\x21\x6d\xfb\x00\xf1\x84\xca\xe3\x73\x79\xb1\x82\x4c\x6e\xc8\x1f\x8f\x63\x7c\x85\x5a\xb5\x18\xc7\x17\x98\x50\x3c\x40\xd1\x9b\xdc\x4e\x04\x69\x00\xe3\x4e\x12\x0f\x22\xdf\x15\xe0\xd4\x85\x71\x95\x82\x17\x1b\x96\x14\x13\x20\x7a\xb4\x27\xe5\x5c\xf2\x38\xa6\x04\x58\x2c\xce\x0c\x0d\xac\xfb\x9e\x79\xa6\xcf\x97\xea\xa1\xcf\xb0\x3d\x16\xbb\x89\xbb\x3a\x4b\xb9\x5c\xe0\x0d\xf2\x15\xd0\x9b\x81\x3c\x73\x57\x18\xbf\x5c\x2e\x1c\x39\xd5\x93\xb4\x33\x50\xf0\x0f\x45\xd3\x8d\x1d\x6b\x2b\x9a\xe0\x62\xf0\xe4\xf4\xf6\x79\xe2\xfc\x34\x84\x9c\xc9\x99\x45\x17\x0c\x3f\x05\x3c\xb0\x93\xd7\x50\x36\x76\xb5\xee\x43\x76\xda\x15\xf0\xad\x62\xef\x86\xcc\x7c\xed\x0e\xa9\x4f\xfb\x78\xd8\x57\xc3\x42\x3c\x08\xfa\xb5\xa7\x59\xcf\x0b\xff\xea\xf4\xa3\x34\x61\x60\xb6\xb7\x41\x84\x17\x53\xa0\x04\xfa\xe1\x9c\x9b\xa7\x5d\x7e\x3b\x7c\x87\xa9\x16\x84\xf4\x53\xfa\xa8\xe1\x9c\x1a\xea\x29\xf1\x0c\x0a\xd0\xae\x29\xbb\x90\xcc\x9a\x7b\x13\xf6\x02\x17\x96\x7e\x41\x2e\x48\xd2\x70\x27\xb8\x44\x4c\xbb\x87\x72\xce\xeb\x30\x23\xcc\xfc\xf1\xdb\x0d\x23\x41\xbd\x04\xa5\xcf\x3a\x2e\x6f\x12\xc8\x3c\x3a\x84\x5c\x02\xa3\x88\x4b\x2c\x80\x2e\x49\x7c\x76\xef\xd0\x68\x57\xde\x9b\xed\x3b\x6c\xe3\x5d\xec\x8d\xfd\xa1\x19\xa2\xac\xa4\xfb\xd4\x7e\xce\x54\x3e\x97\xb6\x34\x72\x49\x6a\x14\x74\xab\x17\x15\x24\x42\x90\xcd\x1f\xac\x54\x08\x06\x5b\x0d\x3f\x90\x86\xf4\x2c\xca\xf5\x53\x00\x70\x30\x4b\x87\x41\x04\xda\x7d\x5f\x9b\x31\x3c\xcc\x02\xdf\xe2\x35\x5f\x67\x5a\x4d\x53\x33\x28\x49\x61\x89\x5d\x83\x24\x25\x5d\x02\x3d\xf1\xaa\x34\x87\x51\xc0\xe1\x3c\x97\x66\xf0\xd8\x2a\x01\xf4\x3e\x8d\xcb\x5c\x7e\x50\xda\x72\x62\x68\x3f\x1e\x36\xb4\x4c\xc3\xf6\xc2\x49\x19\xd2\x1f\xde\xc2\xa5\x4d\x3e\x7f\x64\xb7\x72\x57\x0b\x64\xa7\x11\xb1\xcd\x4e\x95\xb9\xef\x54\xc4\xe5\x5c\xfe\x87\x19\x1e\x78\x4e\x71\x69\xa7\x55\xad\x70\x0b\xc3\x0c\x42\xb0\xe4\x13\x16\xfa\xdd\x3f\xbe\xfc\xf4\x12\xb3\x49\x4a\x0d\xea\xb1\x93\xea\x05\xe2\xe8\xfc\xcb\x34\x85\x48\xb4\xed\x81\xa3\x94\xf1\x55\xf4\x22\xb1\xe8\x51\xb7\x90\x55\x13\x63\xc8\x46\xef\x5b\xc1\xde\xf9\x3c\x63\x11\x2f\xa2\xcd\x89\xb5\xe5\xe8\x18\xb3\xb7\x1f\x4d\x1f\xca\x48\x1a\x4b\xab\x9d\xd1\xde\x3c\x38\xf3\xad\xe3\xd8\xac\xac\x17\xd3\x05\xc0\x52\xdd\xd6\xe5\x9d\x1c\x05\x30\x2e\x4e\x44\x82\x54\xed\x3c\xf7\x75\xab\x0d\xe9\x5f\x9c\xe4\x25\x97\x7c\x2b\x62\xf6\x02\xf2\x1e\x5f\xd8\xc9\x9f\xcb\x6c\x39\x4d\x77\xab\x82\x88\xda\xcc\xa0\x4c\x41\x86\x6c\xcf\x2d\xb7\x88\x9b\xcf\xa4\x3d\x83\xdd\xf9\xd0\x6a\xb7\x75\xdc\xd8\xb8\x9a\x86\x1b\x2c\xe8\xe3\x72\xa3\x73\x53\x45\x85\x55\xf5\x10\xb8\xbe\x9f\xb0\x65\xce\x25\x28\xc8\xc4\xa1\x51\xe5\x77\x27\x3c\x9e\x91\x05\xcd\x26\x42\x49\x9e\xee\x20\x03\x64\x32\x97\x48\x19\x07\xdc\xe2\xbb\x28\x4d\x22\xb6\xce\x79\xb6\xa9\xd9\x41\xe2\x41\xc8\x02\x74\x94\xaf\x05\xd7\xc7\x45\xeb\xf3\x7a\x09\x6c\x70\x3c\x65\x26\xe1\xf5\xc1\x65\x8d\xe4\x17\x9a\xd7\x71\xb5\x00\x42\x4f\xc4\x8b\x71\x04\x3f\x7b\x69\x68\x2b\xe4\x86\xc4\xb4\x05\x11\x48\xd3\x39\x66\x6b\xdd\x17\xfe\xc6\x71\x25\xee\x19\x8b\xe9\x3c\x36\x64\xef\xb8\x6c\x8e\x62\x24\xbd\xa8\x5a\x91\xdc\x93\xf4\x78\xcf\x35\xa6\xf1\x91\xa7\xc2\x02\xe1\xdd\xc1\x31\x21\xa1\x48\x60\x2b\x64\x7f\x29\x97\x2a\xb5\x74\x8f\x17\x6f\x99\xca\x41\x69\xa5\x50\xf4\xa7\x24\xee\xb2\x0e\x12\x19\x8b\xdf\x8e\xe2\x5c\xe9\xbf\xe8\xad\xd9\x6c\xaa\x09\x04\x3d\xea\x9d\x85\xd3\x29\x17\xe6\x12\x2e\xec\xcb\xb8\xf1\x2d\x5d\x07\xab\xce\xd2\x62\x03\x08\x52\x4c\xd2\xf0\x83\xba\xe5\x3b\x16\x6d\xb8\x5c\x07\xae\x09\x00\xf4\x89\x4c\xe5\x28\xa8\xfa\x00\xe4\x86\x2a\xb7\x39\xed\x94\xa9\x4d\x99\x22\x2e\x90\x80\x00\x6d\x65\xd3\xb1\xf9\x7a\x9d\x8b\x35\xd0\x8c\xcc\x65\x85\x6b\x02\x88\x1d\xad\x18\x0a\xd6\xd3\x97\xaa\xff\x34\x7c\x37\x5d\xaf\xc1\x22\xdf\xb9\x44\x67\x52\x23\xf6\xfb\xb9\x3e\xac\x13\x96\x88\xe9\x84\xfd\xe0\x41\xe9\x22\x52\xd2\x65\x4a\x77\xa4\xc9\xd6\x5c\xfe\x6c\xcf\xd3\xa1\x49\x8c\xd3\xde\x76\xf8\xac\xa1\x69\xdc\xba\x68\x7a\x53\xcd\x0b\x5e\x94\x23\xee\x20\xd2\xad\x3f\x33\x3f\xbe\xc1\xdf\xf6\xad\xeb\x33\x44\x8c\x5b\x52\x32\xf3\x7d\x73\x73\x9a\xba\x3d\x69\x79\xdb\x58\xef\x75\x20\xa7\xaa\xdb\x81\xfc\x14\xa6\xba\x65\x9e\xd9\xef\x43\x4e\x3b\xd8\x54\x7a\xfa\x34\xd6\x45\x6c\x71\xdd\x94\x9a\xa2\xeb\xcf\xd8\x96\x13\x20\xcb\x55\x5c\x46\x22\x36\x3b\x17\xde\x43\x88\x88\x71\xa4\x2e\x95\x43\xb2\xed\xa2\xad\x30\x53\xc1\xad\xfb\xa5\x7c\x0e\x83\xc8\xc0\xdd\xf0\xdf\x75\xf8\x1b\xac\xc5\xd7\x36\xe8\xe1\xfe\xc4\x71\xca\x47\xde\x53\xae\xfa\x2a\x85\xb7\xca\x93\x75\x22\x79\xa1\x72\xf6\x9d\x4b\xdd\x7e\xe9\x74\xbf\xba\x2d\x84\x91\xc7\x44\x65\x88\xf0\x98\xf8\xa2\x86\x47\xdb\x22\x35\xdf\xd2\x05\xdf\x66\x21\x29\xae\x13\x85\xa7\x91\x49\x71\x10\x9c\x6d\x02\xbe\xd3\x44\xfb\xbc\xcd\xb9\xa4\x88\x03\xce\x9b\xca\x43\x56\xf7\xce\xbb\x39\x2b\x8b\xc5\x81\x44\x4f\xf8\xe3\x71\x8e\x27\x82\x21\x7c\xe0\x59\x3f\x75\x0e\x27\x97\x03\x26\xae\x39\xa5\x7c\x6b\xa9\x54\xd7\x67\xbf\x6e\xca\x48\x2a\xdf\x7a\xe8\xfc\xfa\xbd\x0d\x14\xf9\xf7\x60\xe5\x81\x05\x13\x81\x1c\xa2\x98\x08\x84\x4f\x7b\x77\xac\x99\x5b\xdc\xf2\xed\x9c\xa5\xaa\x8c\x19\x1d\x6a\x14\x86\xcf\xa7\x78\x3b\x02\xa9\xef\x74\xda\x95\xd8\x34\x52\xcf\xd9\x9d\x3f\xf0\xbb\xf6\x1d\x08\x9f\x75\x9c\xc0\xbd\x5b\x9f\x46\xf6\xd9\xa6\x9e\x46\x1a\xe6\xde\x1d\xc7\xa3\xe6\xde\x79\xc1\x81\x61\x70\x9c\x83\x14\xde\xa3\x49\x9c\xc2\x7e\x0b\x03\x08\x2d\x1c\xc8\x95\xc0\xac\xbe\x3f\xba\x3a\xcb\x43\xd0\x5f\x55\xc6\x73\x21\x8b\x05\xd4\x38\xae\x32\xa8\xe4\x23\xfc\xbc\x62\x30\x0d\x72\x04\xff\xdb\xad\x42\xff\xbe\xa5\x13\xfa\x77\x76\x43\x3e\x2d\x73\x5e\x25\x00\x22\xd5\xf7\xec\xbb\x04\x30\x47\x41\x2c\xd4\x4d\x5c\x97\x38\x3f\x76\xe8\x80\xd1\x0b\x3a\x54\x39\xda\x07\x75\xc8\xb7\x1e\x42\xd5\x50\x0a\xb9\xf7\x28\x2b\xdc\x1c\xb5\xf6\x6f\x81\xc4\xc0\x65\xe5\xdf\x40\x07\x6b\xe6\x2f\x65\xff\x29\x72\xe5\x33\x80\xd0\x59\x15\x16\xdc\x6b\xaf\x1f\xae\x8e\x8c\xf6\x38\xea\xf2\x86\xc2\x94\xf0\x17\x62\x6c\x42\x8f\xc2\x72\x67\x9f\x23\x1d\x21\xa4\x4c\x44\x8b\x0e\x15\x92\x41\x4d\x09\x1e\x9e\xa1\xaa\x48\x52\xbb\xcc\xec\x06\x3d\x05\x7f\x05\xa5\xd6\x6c\x79\x46\xf8\x3e\x82\x12\xd7\x83\x37\x53\xe8\xc4\xbf\xfd\xf5\xdf\xa7\x5d\xba\xf7\xd0\xf4\xb1\x70\x29\xd7\xf8\x77\x79\x22\x64\x0c\xc1\x58\x1e\x37\x05\xb2\x64\xc5\x3b\x5f\x39\x9e\xcd\x32\x7c\x92\x8c\xe0\xf6\xab\x56\x2f\x70\x11\x7d\x81\x88\xbe\x3f\x64\xdd\xf6\xad\xc4\xfb\xba\x4c\x09\xbd\x88\x77\x92\x6f\x93\xe8\x8b\xb6\x71\x97\x88\x34\x86\x26\x52\xed\xfb\xa2\x52\xb1\x88\xee\xc7\xda\x04\x07\xd3\xfb\x8b\xe8\x9e\xfd\x74\xfb\xe1\x3d\xaa\xb9\x26\x7a\x2e\x2f\x79\x91\x3c\x88\xbb\x3c\x75\xe1\x00\xe2\x6b\xca\x53\xbb\x47\xaa\x74\xd3\x01\xb5\x91\xe5\xa6\xb6\x86\x43\xa8\x06\xb0\xdd\x9d\x2c\xcb\xe8\x5e\x14\xa7\x39\x97\xb1\xda\x62\x37\x4e\x75\xb9\x5a\x25\xbf\x4d\x0b\x9e\x77\x48\x03\xa0\x1f\xe1\x2b\xda\xb9\x5e\xf0\xa9\xf0\x36\x2f\x9a\xba\x8f\x90\xe8\x4b\x32\xe2\x15\xe3\x16\xf3\xd2\xf8\x56\x00\xb7\x23\xab\xca\x6a\x40\x29\x98\x3b\x0b\xea\x93\x5a\x13\x82\x5e\x91\xb6\xf5\xa7\xc0\xb8\xff\x14\xb4\xaa\xaa\xaf\x6e\x1b\xe5\x15\x1d\xb7\xfc\x1e\xdf\x87\xeb\x5c\x68\x3d\x61\x5a\x41\x8b\xe7\xd2\x62\xd1\x6d\xbe\x14\xe0\x5e\x80\x1d\x36\xdd\xb1\x48\x65\x09\x08\x60\xba\x7e\x6d\xd4\x23\xf8\xe9\xc3\x4c\x51\xd0\x2c\x2e\x65\x91\xa4\x8c\xaf\x0a\x72\xe2\x03\x15\xbe\x95\xbe\xd2\xd3\xb9\x84\x50\x6c\x04\xdd\x07\x88\x84\x0b\xbf\xb8\x4e\x68\xb6\xe2\x51\x92\x26\x05\x11\x74\x41\x92\x11\x37\xfd\x35\xf7\x81\x19\xcb\x9c\xef\x78\xea\x1f\x56\x3c\x2d\x7d\x72\xec\x89\x16\x3d\x04\x90\x89\x5e\xa0\x83\xe0\x4b\x30\xce\x25\x61\xf0\x01\xc9\xb2\x67\xa6\xf2\xcb\xda\x2d\xfa\x87\xf0\x7f\x2b\xef\xf0\x3e\xab\xe0\x88\x07\xf9\x31\x97\x63\xf3\xc9\xed\xf4\xa2\xbd\x9d\x91\xc4\x16\x1f\x5c\x31\xc5\x7d\xfa\xa9\xbb\x1e\x21\x66\xd2\xf1\xe8\x9f\x5a\x95\xaf\x66\x0d\x23\x46\xaf\xdd\x48\xfc\x42\xee\x8c\x2e\x06\xf3\x21\xcd\xb7\xde\xf8\x8f\x4a\xa5\xc7\x7a\xe4\x89\x94\x21\x51\x72\x01\xc2\xb7\xc7\x3c\x27\x71\x01\x38\xc7\xd6\xc5\x5b\x17\x73\x77\x94\xe0\x55\xb9\x2c\x82\x83\x51\x13\xe0\x20\x83\x46\xf4\x20\xc5\x75\xd6\x02\xba\x18\x89\x78\x87\x32\x10\xad\x65\x4d\xfb\x66\x88\x20\xe0\xe7\xe0\xbe\x8d\x40\x9b\x5a\x6b\xe1\x28\x67\x1d\xca\xd4\xd6\xaa\x72\x8e\xbb\x90\x5e\xd9\x8d\x63\x50\xb7\x1d\x4f\x14\xc7\x37\xf7\x27\x59\xf1\x73\x19\x58\xec\xc8\x89\x66\x53\x0a\xdc\xa8\xb5\xf9\xf3\x2a\xcb\xf0\x68\x7f\xde\x31\x1c\xfa\xbd\x27\xe7\xdb\x50\x0d\x0f\xb0\x20\x91\xda\x2e\x13\x69\x59\x09\xc8\xc9\x0d\x4f\x8d\x99\xa5\x28\x75\x01\x09\xfb\x64\x40\x8d\x94\xda\xd8\x3b\x33\x27\x64\x7b\x0d\x8f\xac\x7d\xcf\xf1\xf0\x7d\xf7\xb4\x74\xff\x1d\x91\xc6\x7a\x0f\xcc\x05\x92\x3e\xf2\x9d\x06\xc5\x68\x61\x4e\xc5\x15\x3a\x76\xab\xed\x9f\x04\xe6\x87\xa5\xbf\x9d\x4b\x18\xa1\x92\x84\xe4\xa9\x2f\x09\x31\x00\xa4\x56\x1b\xdb\x73\x7d\xbd\xd0\xed\x83\xf3\x75\x62\x35\x79\x6f\xac\x06\x83\xd0\xff\x33\xc2\x33\x3d\x4e\xe0\x23\x7d\xd1\xc1\x35\x89\x16\x23\xc1\x84\x20\x71\xcb\x85\xa8\x27\x6c\xcb\x13\x49\xdb\x00\xf5\x07\x63\xb1\x2c\xd7\xeb\x4e\x17\xe9\xb7\x1f\x6b\xa9\xee\x93\xbf\x7b\x5f\x78\x2f\x5b\xdd\x53\x78\x8b\x2f\x6c\x4d\xe8\xbe\x36\xef\xbe\x2f\xe3\x20\xfe\x8a\xde\xf8\xd6\x90\x58\x63\x11\x3d\x8d\x37\xfe\x62\x88\x37\xde\x62\xbb\x20\xc5\x8e\x9e\xd3\x16\x7f\xf3\xbb\x9b\xfe\xcb\xb8\xe9\x07\x2d\x0a\xa4\x75\x59\x24\x55\x03\xbd\xa7\x85\x07\x32\x1f\x3a\x32\x60\x68\x15\xb2\x8b\x99\xd3\x3d\xd6\x6c\xc9\xa3\x67\xa0\x42\x84\xdb\xf1\x78\x7f\xe0\x1e\xf0\xcb\x8d\xda\x0a\x06\x55\x69\x54\xae\x61\x94\xc5\x38\x01\xb4\xaa\xe9\xa0\x47\x8c\x10\x1e\x05\xae\x53\x44\xae\xc4\xde\xa8\xfe\x4e\x8a\x47\x66\x6e\xab\x49\x08\xdf\x0b\xa6\x07\x24\xcd\x5e\x1a\xeb\xb0\x82\xf5\x77\x94\x0d\xb9\x58\xf3\x3c\x86\x0c\x13\xda\x92\x29\x8f\xee\xcd\x7f\x43\xfb\xa8\x46\x82\x18\x5a\x75\x05\x84\xbd\xfa\xd2\x12\x19\x21\x19\x1e\xa1\x19\x7d\xfb\xf0\xe7\x9a\xf1\x28\x57\x1a\x9d\x46\x4e\x09\x18\x32\x9c\xc1\x80\x7d\x48\xe2\x92\xa7\x58\x63\xa7\xa7\x7d\x2c\x7c\xad\x0e\x38\x0a\x44\xbb\x9a\x68\x36\x9a\x0e\xe4\x28\x82\x61\x9c\xce\xe5\x5b\x17\x30\x79\xcd\xee\xb4\x20\x94\x99\xb6\xb4\xe7\xbd\x2d\x7d\x36\xf3\xa1\x81\x09\xec\xb4\x21\x7a\x06\xc0\x82\xac\x83\x81\xd0\xdd\x23\xb1\x87\x50\xf3\x98\x49\x19\x4d\x0c\x7c\x11\x28\x87\xfb\x61\xc1\x77\x42\x2e\x78\xbc\x0b\xd9\xf8\x12\xc9\x20\x4a\xc7\x78\xbc\x4d\xa4\xd9\x04\x56\x9d\xd2\xdd\x34\x96\xa8\x1e\x21\xc7\x20\xe2\x94\xa6\xb5\x43\x50\x33\x29\x8c\x71\xc9\xf3\x24\xdd\xc1\x7b\x22\xcb\xc5\x49\x50\x4f\x30\x3f\x94\xf1\x04\x94\xfb\x44\x23\x52\x6a\xb1\x2a\x53\x7c\x75\xc0\xbb\xdc\x75\x80\x4e\xa4\xbb\x8b\x89\x31\x38\x0a\x92\x4e\x09\x2a\x46\x41\xc2\xa7\xc8\x1e\x69\x44\x2b\xc7\x45\xdc\x3c\x5b\x64\x0e\x20\xf7\x8d\x7a\xb4\xa9\x6e\x8f\xdc\x63\x99\xbb\x6e\xd7\x27\x8b\xb2\xf4\xdb\xa1\xf6\x05\x68\xcf\xa9\x80\xf2\xcd\x85\xd6\xe8\x33\x11\xbb\xb3\x29\x91\xd0\x1d\xd2\xf4\xf5\x9e\xeb\x52\x63\xc6\x9c\x99\x4b\xb8\xbf\xac\xa3\xa3\xea\xb8\x66\xae\x77\x89\x56\x92\xcd\xcb\xef\xbf\xff\xa3\x60\xdf\x43\x0a\x21\xbd\x47\x30\x3e\x06\x7c\x91\x58\x3a\x1c\xd9\xae\x02\x81\x64\x92\x8d\x19\x61\x6d\x10\x55\x9b\xaf\x0f\x20\x4f\x1e\x6d\x98\x2e\x97\x88\x60\xe4\x14\x62\xe1\xd2\xf1\x4e\xbf\x57\x00\x46\xc4\x9b\xdd\xb6\xfe\x7f\x49\x40\x01\x55\x2e\xe6\x32\x53\x48\x8d\x0e\xd0\xcf\xa5\x60\x5b\x9e\xdf\x83\x68\x29\xba\xe7\x81\x0a\xfe\xbb\x44\x4c\xab\xe1\x85\x97\x95\xf6\x50\x40\x07\x29\x8f\x59\x5e\x4a\x69\x55\x98\x98\x31\x4c\xbd\xaf\x7f\x32\x97\xcb\x32\x7c\x7b\x56\x82\x05\x7e\x69\x41\xc0\x00\x0e\x5b\x05\x5c\x21\xd4\x28\xae\x7d\xbb\xa6\x6c\x40\xd4\x60\x2e\x9f\x38\x6c\xb0\xcf\xe1\xf7\x91\x6c\x30\xeb\xcc\x0b\xf2\x15\xa0\xbb\xa1\x50\x30\x4c\x07\x2e\x7b\x30\x72\x3e\x82\x5a\xf0\x84\xfd\x94\x3c\x88\x09\xbb\xc9\x78\x7e\x3f\x61\x6f\x31\xfc\xf7\x67\xb5\x6c\xf3\xe1\x35\x08\x25\x8e\xf6\xe3\x1d\xe6\xc6\xea\x23\x5a\x69\xb7\xfe\x7f\x6d\x10\x03\xb0\xae\xd8\xf7\xff\x4c\x44\x5e\x07\xd7\xc7\xdf\xbb\x27\x62\x4f\x98\xfa\x77\xf0\xda\xdf\xe5\xab\xb8\x9f\xe6\xe3\x0f\xe1\xff\xda\xf3\xcb\x5a\x5c\x60\x7b\xd2\x29\xd7\x8a\x4a\xfb\xb6\x12\x9b\x93\xb8\x7e\x29\x37\xf3\x9b\x87\x6d\x05\x4a\x1f\x8f\x5d\x6a\xfb\x08\xd0\x3d\xfd\xd4\x8e\xd7\x59\xaa\x74\x99\xf7\x6f\xfe\xeb\x6a\xab\x6d\xed\x2d\x54\x9f\xb0\xd8\xb6\x4b\x01\xac\x05\x43\xe1\x27\xf8\xb5\xc5\x7f\xa8\xe5\x02\xb0\x56\xc7\xed\xf0\xb6\xe2\x1c\x81\xb0\x8a\x2a\x4d\xf5\x37\xe4\x4d\x26\x80\x71\xca\x9b\xa2\x3e\x20\x50\x5b\x61\xce\x35\x32\x97\x96\x73\x1d\x33\x66\xf3\x5c\x00\x39\x74\x2e\x40\xd9\x8e\x65\x3c\x77\x80\x07\x6b\x11\x05\x2f\x1f\x0f\x8a\x09\xb3\xdc\x20\x59\x95\xde\x5b\x4b\x21\xa4\x1b\xed\x31\xa6\x04\x10\x21\xd7\x46\x9f\xd0\x6e\x8f\xc2\x52\xef\x77\xa8\x70\x36\x7e\x17\xbc\x05\xc1\xe4\x5e\x8b\x22\x38\xcd\x6b\xa6\x45\x65\x6b\x56\x22\x54\xdf\x14\xe2\xbf\x35\x06\x5d\x23\xe7\xaa\x38\x50\x06\xc5\xf4\x9e\xc2\x5f\xfe\x91\x17\x1b\x7c\xd0\x6e\x55\x21\xf0\xcc\x44\x96\x20\x5c\x2f\xe8\x75\x5e\xa6\x6a\x09\x92\x72\xe6\x93\xae\xb7\x61\x44\x5b\x7b\xd0\xd0\x35\x27\x6c\xc8\xc9\x60\x4e\x13\xc8\xb4\xcd\x85\x06\xc2\x95\x66\x94\x6a\x28\x3e\x79\xdc\xa3\xbb\xd9\x5c\x73\xe8\xbf\x6d\x3c\xb6\x9b\xa2\x0c\x66\x5b\x03\x58\xf5\xfc\x80\x0c\x9a\x86\xc4\x05\x91\x15\x53\x18\x18\xf9\x4a\x6b\xfd\xb5\xca\xe5\x73\x39\xc3\x4f\x82\x4b\x80\x7b\x95\x25\x87\x07\x25\x91\x5a\xb7\xff\x30\x7d\x95\xcd\x42\x04\x22\x79\x08\x26\xde\x97\x09\x8f\x81\x09\x64\x35\xca\x22\xc9\x05\x93\x80\x42\x98\x4b\x5d\x2e\x4f\x3c\x31\x89\x79\xc5\x3d\x00\x99\x8e\x16\x19\x87\xa7\x0c\xf0\x15\x9d\xb4\x5c\xc3\xe8\x99\xf4\x6a\x29\x96\xc0\x8f\xa7\x74\xf8\x43\xae\x24\x66\xc6\xbb\xbe\xbb\x72\xcc\x63\x0d\x5e\xd1\x16\xae\x84\x97\x5d\xdf\x79\x01\x7a\x4e\x90\x81\x79\x8d\x28\x8a\xaf\x7d\x81\x87\xd1\xd0\xa1\x57\x37\xc4\xd3\xe6\xf2\xff\xb7\x77\x43\x37\xa8\x78\xc4\x4a\x37\x23\x63\xae\xa8\x4e\xb0\x73\xa5\x6d\xf6\x09\x19\x18\x81\xdd\x8d\x6a\x2c\xf9\xb6\x52\xb9\xc5\xb5\x84\xa2\x1e\x8a\xd2\x65\xe1\xd3\x87\x44\x07\x74\xdf\x50\xdb\x8d\x10\xec\x75\x2e\x56\xaf\x3f\xe5\x62\xb5\xb0\x33\x3d\x85\x0e\x4d\x4d\x8f\x9a\xa4\xdf\x03\x17\x87\xce\x94\x6c\x27\x3f\xdc\x43\x4e\x5a\xeb\x12\x96\x13\xf4\x29\x59\x31\x2f\xe7\x69\xfa\x03\x0c\x10\x22\xae\xb3\x91\x37\x5a\xf6\xc5\xaf\xb9\x2e\x24\xd8\x00\xa8\x55\x87\x0c\xe6\xdf\xff\xf5\x56\x19\xb3\x21\xd7\xdb\x6d\x15\x32\x63\x0f\x7b\x2e\xdd\x85\xd7\x8d\x0b\xfd\xb2\xe8\x74\x98\x40\x9d\xf1\x47\x49\x3c\x36\xa3\x5c\x4f\xc3\xae\xb5\x1a\x80\x28\xb8\xd6\x1a\x18\x38\xbf\xcb\xa4\xf5\xf4\x25\x4e\x49\x71\x12\xc8\xad\xf3\x34\x0d\x35\x15\x7c\xa4\x6d\x2e\x7d\x5e\xaa\xb1\x5a\xd3\xd4\xba\xf0\x2a\xf6\x06\xb1\x16\xc5\x90\x10\x2c\x26\x96\x74\x85\xe8\x0a\x29\x1e\x76\xb2\xe4\xa0\xe5\xeb\x54\xb4\xf6\xed\xe6\xa7\x7a\x44\x7e\x63\x79\xd1\x7b\x22\xcf\x58\xed\xe2\x5e\x34\xe0\xcc\x7b\xdb\xda\x1e\xe9\x08\x28\x25\x60\x33\xdb\x53\x36\xe2\x79\x6e\x51\xfe\x54\x2b\x33\x6f\xa5\x15\x8f\x2a\x6e\xce\x8e\x76\x6e\x44\x74\x9f\xa9\x44\x8e\x3e\x8b\x2a\x14\x17\xb0\xd8\x0b\xe6\x4b\x73\xaf\xc3\x41\x97\x63\xc5\x9e\xc4\x8e\x68\x80\x57\x58\x68\xa8\x27\x63\xe3\xcc\x69\x25\x77\x2f\xbb\xa7\xf6\x5f\x08\x7f\x37\x3c\x83\x2f\xb6\x25\x3e\x54\xbb\x55\x78\x8b\x63\xa7\xc2\x04\xca\x1b\xd9\x5f\x03\x07\x9b\xb3\x0a\x85\x61\xeb\x90\x82\x0b\xf2\x77\xcf\xd0\xef\x9e\xa1\xff\xe1\x9e\xa1\x2f\xe9\x16\x02\x6c\xcc\x73\xfa\x84\x7a\x02\xe4\x47\x6c\x47\x57\xeb\xe8\x1c\xc7\x56\xeb\x78\x12\xc8\x3e\x07\x99\x8e\x4d\xa0\xbf\x25\xc2\x30\xe3\xb3\xe4\xd1\xbd\x90\x9d\x31\x7a\x4b\x5f\xd4\xa9\xc0\xf9\xb4\x08\x96\x36\xf6\xa5\xe0\xd7\xfd\x50\x16\x0f\x75\x22\xd2\xe0\x36\x42\x10\xb3\x4f\xc0\xf6\x34\x1d\x3f\x01\xd0\x98\xca\x1d\xb1\xb5\xa6\x2c\x3c\x0c\x46\x22\x4d\x12\x82\xa5\x6a\x54\xd0\x43\x31\x71\xb6\xe2\x45\xa6\x54\xda\x0a\x8d\x7b\xd2\x01\x6c\x24\xca\x0c\x1d\xbc\x0b\x34\x46\x75\x08\x18\xb3\xa3\xe8\x93\x2e\x7c\x8a\x06\xe6\x63\x80\x16\x06\xac\xa6\xb8\x84\x5c\x4a\x3f\x1c\x81\xc0\x1e\x77\x0e\x17\xc2\x88\x2d\x45\xc4\x41\xfa\xd3\x82\xf7\x22\xee\xb2\x4f\x42\x52\xa4\x46\x3a\x88\x6e\xd6\xd3\x11\xb5\x84\x72\x17\x49\x9b\xf0\xc5\xd8\xcd\x55\xb3\x10\x2c\xb4\x1c\x5b\x6e\x91\x24\x96\x76\x71\x9f\xa4\xad\xe5\x98\x5e\x80\xfe\xde\xb0\x1b\xae\xf5\xdc\xb9\xa0\x82\xce\xa0\x9c\xe1\x07\xe9\x4f\x90\x8e\xb3\x1d\x88\xdc\x99\xcb\x99\x53\x3a\xf5\xd8\x2f\x87\xdc\xc3\x70\x29\x62\x16\x1b\x53\x83\x5c\x8e\xfe\xe5\x32\x61\xba\x8c\x36\xc0\x56\x59\x3d\xa7\xc2\x73\xab\xb9\x63\x27\x73\x69\x1e\x44\xe0\x6a\xd9\x72\xc8\x8b\x7f\x34\xc6\xaa\x4e\xfe\x53\x38\x78\x16\x91\x77\x85\x88\x2c\x7c\x38\x29\xd9\x8a\x5e\xb3\xc4\xa1\x08\xb0\xf0\x98\x92\x32\x8b\x79\x21\xa6\x73\x8f\xb6\x49\xd0\xd3\x69\x51\x1e\x64\x32\xeb\xb0\x63\x21\x8e\xb1\x76\xd2\xa6\xc9\x4a\x44\xbb\xa8\xa1\x03\xd4\x4f\x13\xf1\xfb\xb3\xed\xdb\x7a\xb6\x21\xcb\x2e\xe6\x0c\x8e\x19\x5a\x6a\xea\xb5\xff\xf9\x71\x83\x2b\x58\xd0\x12\x3d\x62\x9c\xbf\xe0\xb3\xb3\xc5\x06\x1e\x67\xcf\x0f\x7e\x07\xf5\x5f\x67\xfe\x61\xeb\x2f\xeb\x80\x02\xa1\x61\x16\x86\xc1\xc5\x22\x5c\x3a\xc6\xa0\x1d\x1c\xd6\xef\x66\x99\xf9\xa6\xc0\x49\x43\x1e\xae\xc6\xe2\x76\x70\xa5\x4b\x6b\x69\x4b\x81\xf7\x5d\x8f\xc5\x1d\xb0\xba\xf3\xe2\x85\x76\xa3\x5e\x3d\x01\x2d\xf6\xff\x7d\xa2\x8b\x5f\x6a\x9a\xa1\x87\x89\x8e\x3e\x9b\x69\x6a\x9b\x8a\xcd\x1c\x6a\x51\x5d\x57\x6d\x1e\xb5\xb2\x6b\x0e\x1e\x4f\x56\x25\xce\xb4\x7b\xcc\x3b\xe8\x93\x1b\xaf\x4f\x78\x35\x3d\xe6\x3c\xcb\x44\x6e\x2f\xf2\x86\xad\x05\x92\x6b\x50\x0b\x68\x26\x6e\x04\x6a\x75\xd7\x5e\xb9\xe6\x28\xa9\x15\x0d\x5f\x83\xa1\x9b\xb6\xcf\xdc\x65\x99\xa6\x9d\x33\xb7\x5f\xc9\xe9\xf2\xee\xfd\xfb\xc5\x2f\xb3\xf7\x77\xe7\xb6\xfb\xad\xca\x48\xc1\xd7\x3a\xc7\xc4\xb5\x84\xc6\xc4\x6b\x2f\x9a\x6a\x85\xd5\x0b\x57\xbe\xd7\xe8\xe4\x2a\xd3\xb4\xaa\x9a\x35\x97\x9f\xa8\x1c\x80\x69\xa3\x22\xa8\x19\x37\xd6\x3b\x70\xd5\xfa\xe1\x6b\x9f\x4c\xe1\x9f\xf0\xb7\x27\xcc\x77\xe2\x35\x68\x3b\x92\x66\x5c\xfb\xb8\x52\x36\xcc\x11\xdb\x01\xc1\xc0\x5d\xdb\xe1\xa9\x75\x01\x0f\xdb\x1e\x77\x12\x18\xc9\x45\x6c\xe5\xfc\x9e\x64\x77\xe0\xd8\x7d\xaa\xc6\xa9\xdd\x59\x1e\xe3\x93\x06\xca\x9d\xa0\x9a\x1b\x68\x54\x7b\xc1\xb3\xb9\x44\x1f\xa8\x69\x53\xa1\xba\xdb\xc4\x2e\xc8\xbc\x4d\xb9\x5c\x97\x7c\x6d\xac\x5b\x5b\xf9\x5c\x6e\x93\xf5\x06\x79\x40\xca\xcc\xe3\x93\x39\x93\x40\x17\x53\x5b\x42\x35\x7c\x72\x22\xe7\x92\xfa\x24\xd7\xbe\x78\xc4\xca\xfe\xf9\xc6\x75\x87\x40\xe9\x58\x10\x09\xd2\xc9\xb9\xc4\xc9\x45\x7e\x12\x1b\x09\x81\x17\x0b\x2f\xea\x4b\x97\x43\xec\x12\x75\xfa\xcd\x99\xbe\x86\x98\xcc\x5c\xba\x14\x5d\xf4\x1c\x51\x1f\x02\xe1\x12\x6c\xd2\xfe\xf3\xc4\x4e\x86\xdd\x13\xd4\xb6\xf6\x55\x7f\xf4\x1d\x60\x36\xdc\x62\x84\xfa\x74\xf3\x18\x1b\xe8\x2d\xe4\xc1\xc1\xd1\xc5\xdb\x00\x79\xd9\xed\xad\xb1\xfd\xc2\xef\x74\x42\x5b\x55\xb9\x4c\x47\x34\x09\xbf\xdf\xdb\x28\x3c\x92\xfb\x1b\x35\xe0\x39\x7c\x5d\xdb\x5a\x66\x99\xf6\x55\xbb\x54\xaa\x63\x5e\x9e\x30\xa0\x58\x69\x14\xfd\x60\xdf\x60\x94\x51\x71\xc8\x7a\x19\x90\xac\x58\x1f\x22\x7b\xfa\xf4\x35\x28\x4d\xf4\x41\xcd\xf1\xf6\xd3\xe0\x16\x39\x0b\x81\x2e\xbb\x51\x27\x2c\xdd\x73\x95\x03\xb6\xe3\x98\xa4\x78\x92\x95\x71\x4e\xf0\x78\x31\x9b\x07\x35\x96\xcd\xfa\x9f\xb8\x45\x34\xf1\x33\x37\x81\x46\x46\x65\xae\xcd\x71\x49\xe7\x1d\x9d\xda\x2a\x67\x7c\x2e\x6d\xaa\x9a\x3d\x8e\x67\x16\x9c\x9b\xbb\xbf\x62\x02\x68\x86\x7c\xfa\x60\xb1\x16\x4c\x49\x61\x4f\xc3\xb9\xb4\xda\xdf\x13\xc6\x97\xda\x4a\x6a\x73\xb9\x73\x3a\xd7\x89\xa3\x2f\xe2\x92\x01\xea\x79\xff\x99\x57\x33\x03\x2a\xf7\xfc\x1f\xcc\xff\xfd\xf7\x1f\xfe\x5f\x00\x00\x00\xff\xff\x98\xc4\xeb\x66\x65\xb9\x04\x00") +var _adminSwaggerJson = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\xfd\x7b\x73\xeb\xb8\x95\x2f\x0c\xff\x3f\x9f\x02\x67\xcf\xa9\xea\xee\x44\xb6\x3b\xc9\x4c\xde\x94\xa7\x4e\xbd\x8f\xda\xd6\xde\xad\xd3\xbe\xc5\x97\xee\xe9\x67\x94\x52\x43\x24\x24\x21\x26\x01\x06\x00\xed\xad\x4e\xe5\xbb\x3f\x85\x85\x0b\x41\x8a\x94\xa8\x8b\x6d\x79\x37\x67\xaa\xd2\xde\x22\x89\xeb\xc2\xc2\xba\xfe\xd6\x3f\xff\x0d\xa1\x0f\xf2\x19\xcf\x66\x44\x7c\x38\x45\x1f\xfe\x78\xfc\xed\x87\x9e\xfe\x8d\xb2\x29\xff\x70\x8a\xf4\x73\x84\x3e\x28\xaa\x12\xa2\x9f\x4f\x93\x85\x22\x34\x4e\x4e\x24\x11\x4f\x34\x22\x27\x38\x4e\x29\x3b\xce\x04\x57\x1c\x3e\x44\xe8\xc3\x13\x11\x92\x72\xa6\x5f\xb7\x7f\x22\xc6\x15\x92\x44\x7d\xf8\x37\x84\xfe\x05\xcd\xcb\x68\x4e\x52\x22\x3f\x9c\xa2\xff\x31\x1f\xcd\x95\xca\x5c\x03\xfa\x6f\xa9\xdf\xfd\x1b\xbc\x1b\x71\x26\xf3\xd2\xcb\x38\xcb\x12\x1a\x61\x45\x39\x3b\xf9\xbb\xe4\xac\x78\x37\x13\x3c\xce\xa3\x96\xef\x62\x35\x97\xc5\x1c\x4f\x70\x46\x4f\x9e\xfe\x70\x82\x23\x45\x9f\xc8\x38\xc1\x39\x8b\xe6\xe3\x2c\xc1\x4c\x9e\xfc\x93\xc6\x7a\x8e\x7f\x27\x91\xfa\x17\xfc\x23\xe6\x29\xa6\xcc\xfc\xcd\x70\x4a\xfe\xe5\xdb\x41\xe8\xc3\x8c\xa8\xe0\x9f\x7a\xb6\x79\x9a\x62\xb1\xd0\x2b\xf2\x91\xa8\x68\x8e\xd4\x9c\x20\xd3\x0f\x72\x4b\xc4\xa7\x08\xa3\x53\x41\xa6\xa7\xbf\x08\x32\x1d\xbb\x85\x3e\x36\x0b\x7c\x01\xa3\xb9\x49\x30\xfb\xe5\xd8\x2e\x13\xb4\xcc\x33\x22\x60\x6e\xc3\x58\xb7\xfe\x89\xa8\x3e\x34\x5b\xbc\x1f\xbe\x2d\x88\xcc\x38\x93\x44\x96\x86\x87\xd0\x87\x3f\x7e\xfb\x6d\xe5\x27\x84\x3e\xc4\x44\x46\x82\x66\xca\xee\x65\x1f\xc9\x3c\x8a\x88\x94\xd3\x3c\x41\xae\xa5\x70\x30\x66\xaa\x7a\x63\xf1\x52\x63\x08\x7d\xf8\xdf\x82\x4c\x75\x3b\xff\x7e\x12\x93\x29\x65\x54\xb7\x2b\x0d\xfd\x04\xa3\x2d\x7d\xf5\xaf\x7f\xab\xfb\xfb\x5f\xc1\x8c\x32\x2c\x70\x4a\x14\x11\xc5\x8e\x9b\xff\xab\xcc\x45\xef\x91\xee\xbc\xd8\xc7\xea\xc0\x2b\xb3\xbd\xc2\x29\xd1\x7b\xa2\x77\xca\x7e\x01\x7f\x0b\x22\x79\x2e\x22\x82\x26\x24\xe1\x6c\x26\x91\xe2\x4b\x6b\x40\xa1\x05\x4d\x5e\xd5\x27\x82\xfc\x23\xa7\x82\xe8\xbd\x52\x22\x27\x95\xa7\x6a\x91\xc1\x20\xa5\x12\x94\xcd\xc2\xa5\xf8\x57\xaf\xd5\xd4\x0c\x55\x6e\x30\x33\xf3\x41\xe3\xc4\x46\xac\xef\x5e\x89\x30\x43\x13\x82\xf4\x59\xa4\x31\x11\x24\x46\x58\x22\x8c\x64\x3e\x91\x44\xa1\x67\xaa\xe6\x94\xe9\x7f\x67\x24\xa2\x53\x1a\xb9\x35\x3b\x9c\xb5\x81\x3f\x57\xaf\xcc\x83\x24\x42\x0f\xfc\x89\xc6\x24\x46\x4f\x38\xc9\x09\x9a\x72\x51\x5a\x9e\xe3\x11\xbb\x9f\xeb\x75\x48\x27\x94\xc1\xc9\xd3\x6b\xe9\x28\xe4\xf7\x6e\xb9\x7e\x8f\x74\x7f\x28\x67\xf4\x1f\x39\x49\x16\x88\xc6\x84\x29\x3a\xa5\x44\x56\x5b\xfb\x3d\x87\xfe\x71\x82\x8e\x90\x5e\x67\x22\x14\xac\x37\x67\x8a\x7c\x56\x12\x1d\xa1\x84\x3e\x12\xf4\xd5\x05\x95\x0a\xf5\x6f\x86\x5f\xf5\xd0\x57\xe6\xbc\x20\xe0\x4d\x5f\xbd\xc2\x0a\xfb\xbf\xff\x16\x1c\x3d\x85\x67\xd5\x43\xf7\xa1\xaf\x4f\xf3\x9d\xb9\x1a\x8a\x16\xfe\xf6\x6f\x61\x3b\x76\xbf\x56\xf3\xdb\x82\xd9\x5a\x4e\xdb\x96\xbf\xc2\x32\x95\x59\xab\xd4\x3b\xb4\x2b\x67\xd5\xed\x56\x59\xab\x7c\x5f\xbc\x55\x4f\xe1\xa5\xf9\xeb\x2e\xcc\x15\x2b\xa0\x7a\x4c\x99\x39\x24\xfe\xcc\x08\xa9\xcf\x89\xa3\xde\x03\x61\x29\xbb\xf0\xda\x60\x66\x01\xbb\x75\x5c\x34\x58\x95\x03\x9c\x77\x42\x53\xba\x6e\x7f\x87\x2c\xd6\x22\x97\x65\x76\x2c\x4f\x27\x44\xe8\x65\x70\x6c\x0f\x66\x3b\xd1\x6c\x50\xe5\x82\x91\xb8\xc5\x34\xff\x91\x13\xb1\x58\x31\xcf\x29\x4e\x64\xd3\x44\x29\x53\x44\xcb\xb7\x95\xc7\x53\x2e\x52\xac\xec\x0b\x7f\xfe\x8f\x4d\x17\x42\xf1\x47\xb2\x6e\xff\x87\x66\x37\x23\x2c\x81\x0c\xd2\x3c\x51\x34\x4b\x08\xca\xf0\x8c\x48\xbb\x22\x79\xa2\x64\x0f\x5e\xd3\x32\x35\x11\x47\xfe\x06\x82\x1e\xdc\xcd\x9b\x4b\xf8\x05\x4d\xbd\x00\xc9\xc8\x67\x05\x2d\x8d\x18\xdc\xbd\xb0\x44\xe1\x8d\xf2\x02\x4b\xb9\x1d\xcd\x48\x2e\xd4\x78\xb2\x38\x7e\x24\x4b\xfd\x36\x52\x0e\x66\x08\x2b\x25\xe8\x24\x57\x44\xcf\x5b\xb7\xe1\xee\x4e\x60\x8f\xe6\x82\x6e\xc3\x1a\xde\x6e\xc2\x31\x15\x24\x82\xb9\x6d\x72\x60\xfc\x57\x7a\xde\x5a\x7f\x59\x98\xd9\x3f\x92\x05\xc8\x23\x35\x2b\xe0\xb7\x7c\xc4\x46\x0c\x1d\xa1\xf3\xc1\xdd\xd9\xe0\xea\x7c\x78\xf5\xe9\x14\x7d\xb7\x40\x31\x99\xe2\x3c\x51\x3d\x34\xa5\x24\x89\x25\xc2\x82\x40\x93\x24\xd6\x32\x87\x1e\x0c\x61\x31\x65\x33\xc4\x45\x4c\xc4\xcb\x2d\x63\xe5\x29\x61\x79\x5a\xb9\x57\xe0\xf7\x62\xf4\x95\x2f\xb4\x88\xe1\x1f\x95\x9e\xfc\x6d\x69\x81\x61\xc6\xba\xef\xa0\xb5\x57\x13\x6a\xa2\x39\x4d\x62\x41\xd8\x89\xc2\xf2\x71\x4c\x3e\x93\x28\x37\x77\xf2\x3f\xcb\x3f\x8c\xb5\x64\xca\x63\x52\xfe\xa5\xf4\x8f\x42\x14\xda\xf8\x53\xaf\xa5\x6e\xfc\x25\xe8\xb4\xed\xbe\x83\x5f\x68\x5c\xfb\x36\xfc\xb2\x66\x0e\xee\x9d\x15\x83\x75\xaf\x34\x8e\xca\xbd\x60\x25\xbe\xda\x77\x04\x51\x62\x31\xc6\x4a\x91\x34\x53\x1b\xea\xeb\x18\x25\x5a\xae\x5c\x25\x47\x5e\xf1\x98\x0c\x5c\x7f\xbf\x20\x23\xce\x92\x18\x4d\x16\x96\x6b\x4d\x89\x20\x2c\x22\xcd\x2d\xdc\x63\xf9\x58\xb4\xb0\x4e\x18\x2d\xf5\x27\x3f\x72\xa1\x3f\x7f\x0f\x02\x69\x69\xe0\xaf\x21\x93\x6e\x7b\xe2\xbe\x38\x0b\xc1\x96\xfc\xa3\xb3\x27\xec\xbe\x92\x6d\xad\x0f\x5c\x20\xb9\x90\x8a\xa4\x6b\xed\x10\xef\x67\x21\xec\x05\x71\xa8\x03\xae\xdc\x51\xbf\x81\x53\x5f\xbe\x71\xbb\xe3\xbd\xc1\x92\xed\xcb\x8a\x78\xe8\xf3\x74\x3e\x9c\xd5\x53\xbd\x73\xdb\x17\x38\x31\xde\xc5\x34\x4b\xb2\xe0\xbe\x07\xf9\x42\xe6\x86\xc6\xbd\x72\xab\x3d\x86\x01\xac\x51\x34\xcb\x76\x68\x7f\xfe\xf4\xa7\xa1\x85\xc6\x98\xe3\xd4\x9c\xca\xc0\x58\x85\x22\x2e\x8c\x2c\x18\xdb\xf3\x6e\x74\xcd\xfe\x7d\xff\x6e\x70\x7f\x8a\xfa\x28\xc6\x0a\xeb\x03\x2e\x48\x26\x88\x24\x4c\x81\x1e\xaf\xbf\x57\x0b\x94\xf2\x98\x24\x46\xe3\xfc\xa8\x25\x5f\x74\x8e\x15\x3e\xc3\x0a\x27\x7c\x76\x8c\xfa\xf0\x4f\xfd\x31\x95\x08\x27\x92\x23\xec\xc8\x8a\xc4\xae\x09\xcc\x62\xc7\x5a\x30\x8a\x78\x9a\xd1\xc4\xdb\xe0\xbd\x71\x85\xb2\x98\x3e\xd1\x38\xc7\x09\xe2\x13\xcd\x55\xb4\x86\x3c\x78\x22\x4c\xe5\x38\x49\x16\x08\x27\x09\xb2\xdd\xba\x17\x90\x9c\xf3\x3c\x89\x75\xbb\x6e\x94\x92\xa6\x34\xc1\x42\xab\xe0\x66\xb4\xd7\xb6\x2d\x74\x3f\x27\x7e\xac\x30\x2e\xbd\x9a\x29\x7e\x24\x12\x51\x85\x32\x2e\x25\x9d\x24\xc5\x99\x7f\x18\x22\x18\xf7\xd9\xc5\x10\xf4\xf9\x48\x21\x6e\x78\xa8\xeb\xdc\xda\x6f\x5c\x8f\x29\x66\x8c\x40\xc7\x5c\xcd\x89\xb0\xdd\xdb\x97\xdf\x5a\x35\x7f\xb8\xba\xbb\x19\x9c\x0d\x3f\x0e\x07\xe7\xcb\xba\xf9\x7d\xff\xee\x87\xe5\x5f\x7f\xba\xbe\xfd\xe1\xe3\xc5\xf5\x4f\xcb\x4f\x2e\xfa\x0f\x57\x67\xdf\x8f\x6f\x2e\xfa\x57\xcb\x0f\x2d\x59\xb5\x56\xf3\xc3\x91\x6d\x78\xb6\x3a\x9b\xe6\x4b\xd9\x34\x7b\x5f\xae\x51\x73\x4a\x13\xd0\x41\x5b\x1b\x34\xbd\x0d\xc1\x7e\x89\x32\x2c\xa5\x91\x8c\xcc\x08\x8e\x47\xec\x92\x0b\xcd\xc0\xa6\x5c\xf3\x08\x2d\x3d\x29\x91\x47\x8a\xb2\x99\xff\xe8\x14\x8d\xf2\x6f\xbf\xfd\x53\x74\x41\xd9\x23\xfc\x45\x0e\x71\x71\x3a\x8b\x6f\x67\xf1\xfd\x6d\x59\x7c\xb5\xe8\x73\x12\x1a\x7a\xf7\x1b\x32\xa4\x85\x0b\x96\xe5\x0a\x44\x09\x9e\x2b\xfd\xa7\xee\x12\xc8\x63\x45\xe0\x50\x3b\x83\xe2\x27\xa2\xfc\x8b\x5a\xb4\x79\x0f\x76\xc4\x9f\xb8\x78\x9c\x26\xfc\xd9\x0f\xfc\x13\x51\x7a\xec\xb7\xb6\x97\x2e\x94\xa8\x0b\x25\x7a\xdb\x50\xa2\x83\x32\xe6\xbd\x3c\xf3\x2b\x5b\xfe\x0c\x07\x6c\xf0\x64\x35\x3a\xaa\x1a\xfc\x50\x81\x9b\xe9\x55\xb8\x66\xd9\x99\xb3\x86\x73\x96\x5e\x7e\x2f\xdc\xb3\x34\xe8\xd7\xe7\x9c\xbf\x09\x7f\x4b\xe7\x4e\xd9\x72\xa1\xde\x25\x83\x6d\x79\x77\xbc\x9a\x33\xe4\xe5\x19\xfe\x52\x6c\xc3\x26\xc1\x0c\x1b\x44\x2f\xb4\x0e\x57\x58\x13\x9f\x50\x1b\x90\x50\x17\x81\xb0\x1c\x72\x50\x1b\x63\xb0\x5b\x50\xc1\xb6\x77\x53\xfb\x30\x81\x4f\x44\x95\x5e\x7e\x2f\x77\x53\x69\xd0\xaf\x7f\x37\xfd\x46\xa3\x03\xba\x70\x80\x17\x5c\xba\x2f\xfd\x46\x3b\x5c\x87\xff\x6f\xc0\xc3\xdf\xb9\xf4\x37\x5a\xa3\x2f\xcb\x87\xff\xa5\x3a\xed\xdf\xa7\x97\xbe\x73\xcb\x77\x6e\xf9\xb7\xf0\x9f\xbc\x3f\xb7\xfc\xcb\xaa\xa7\xc5\xf1\x1a\x3b\x5a\xb0\xfa\x5a\x70\x28\xff\xd5\xc2\x49\x03\x7f\x39\x95\x6f\xd3\xa0\xf1\x46\x1d\xee\xbc\x18\xdf\x00\x8e\xd0\x2f\x96\x90\xd6\xa8\x73\x4b\xdf\xbd\x07\x75\x6e\x79\xd0\x2f\xaf\xc3\xbd\x19\xf3\x7d\xa1\xcb\xf3\x9d\xb0\x81\xcd\x6f\xcb\x2f\x58\x26\xef\x64\xf1\x97\xcf\xc6\x3f\x98\x09\xbd\x1f\xd9\xfb\x0d\x2e\xde\x96\xb7\xee\xde\x73\xb2\x6a\xae\xd9\xe0\x76\x5a\x97\x61\x55\xfd\x9a\x12\xf9\xc7\x77\x79\xdf\xbe\x46\x92\x55\x77\xe1\x76\x17\xae\x6d\xaa\xbb\x70\xbf\xe0\x0b\xf7\xe0\xe0\x6f\x0e\x26\x02\xb4\x0b\x22\xef\x80\x31\xba\x18\xf2\x3d\x2e\x4e\x17\x43\xde\xc5\x90\xff\xc6\x62\xc8\x77\xd1\x9e\xb6\xc5\xa2\x7c\x0b\x3d\xaa\x53\xa3\x3a\x35\x2a\xfc\xbd\x53\xa3\x3a\x35\xaa\x53\xa3\xbe\x70\x14\xd1\x4e\x87\x6a\xbf\x10\x9d\x0e\xd5\x7a\xa9\x3a\x1d\x6a\xc5\xe2\x74\x3a\x54\xa7\x43\xfd\xb6\x74\x28\xf2\x44\x98\x92\x90\x8c\x16\x6a\x14\x1f\x32\x2e\x9b\x35\xa1\x90\x3b\xd4\x68\x41\xd0\x66\x39\x29\x0c\x02\x97\x7e\x41\x73\x2c\x11\x8f\xa2\x5c\x54\xce\x40\x55\x0f\x3a\x13\x04\x2b\x02\x2d\xe8\x0f\xdf\x83\xfe\xb3\x3c\xdd\xd7\x8a\xc1\x9f\xf0\x78\x89\xda\xcd\x41\xa8\x7b\xb2\x5a\x1e\xd9\xdb\xd4\xff\x91\x93\x76\xea\xdf\x0b\x12\xb5\xc2\xf2\x71\xcf\x44\x5d\xca\xb5\xd8\x8a\xa8\xa1\x85\xf7\x42\xd4\xcb\xd3\xfd\xcd\x10\x75\xdd\xd4\x0f\x81\xa8\x9f\x6d\x1e\xff\x9e\x09\x7b\x09\x1e\x60\x2b\xe2\xf6\xad\xbc\x17\x02\xaf\x9f\xf6\x6f\x86\xc8\x9b\xa6\xff\xb6\x84\xee\x53\x24\x5b\x93\xf8\xbd\xa0\xb3\x99\x56\x33\x40\xc3\xd3\xa4\xb8\xbe\x46\x50\x91\x14\xb8\x96\xac\xfd\xab\xef\x81\xa4\xfd\x60\xcd\xd8\x7f\x33\xb4\xbc\x34\xef\x03\x21\xe2\x13\x41\x22\xfe\x04\xf5\xc2\xda\x11\xf3\x2d\x01\x0a\x06\x7e\x9d\x09\xf2\x44\x79\x2e\x93\xc5\x91\xc8\x19\x72\xcc\x1f\xf9\xe6\x8d\xb5\xfa\x99\x26\x09\xe2\x4c\xeb\x5f\x0a\x0b\xe5\x1e\x6b\xfd\x5b\xf0\x14\x4e\x45\x82\xa5\x42\x8f\x8c\x3f\x33\x34\xc5\x34\xc9\x05\x41\x19\xa7\x4c\x1d\x8f\xd8\x90\xa1\x5b\x33\x46\xc8\x1b\xe8\xa1\x5c\xea\xb3\x14\x61\xc6\xb8\x42\xd1\x1c\xb3\x19\x41\x98\x2d\x6c\x02\x6e\x41\x19\x88\x0b\x94\x67\x31\xd6\x8a\xef\x9c\x54\xa3\xf4\xfc\x18\xc1\x7c\x47\x25\xa2\x12\x91\xcf\x4a\x90\x94\x24\x0b\xdd\x87\xa6\x7d\xc5\x91\x5d\x1f\x33\x54\x9b\xce\x47\x84\xe0\x42\x42\xc6\xc1\x64\xf1\x2b\x66\x8a\x32\x82\x40\x51\x92\xc6\x34\x77\x84\x2e\xb8\x04\xb3\xcd\x0f\x7f\x91\x28\x4a\x72\xa9\x88\xe8\xa1\x49\x3e\x93\x5a\x53\xcc\x12\xac\xa6\x5c\xa4\x7a\x84\x94\x49\x85\x27\x34\xa1\x6a\xd1\x43\x29\x8e\xe6\xa6\x2d\x58\x03\xd9\x1b\xb1\x98\x3f\x33\xa9\x04\xc1\xbe\x77\xf7\x10\x7d\x1d\x3e\x33\x04\x20\xbf\xe9\x41\xda\x21\x4d\xb5\xba\x1b\x0c\xbf\xd8\x71\xb3\x27\xba\x11\x12\xa3\x09\x89\x70\x2e\xad\x87\x41\x89\x05\x22\x9f\xe7\x38\x97\xb0\x77\x7a\x7a\x36\x67\x23\xe2\x69\x96\x10\x45\x10\x9d\x22\x25\x28\x89\x11\x9e\x61\xaa\x97\xee\x8e\xac\x00\x41\xf7\x44\x6f\x37\xd0\x52\xfd\x2f\xa0\x7e\xa7\x5c\x10\x14\x13\x85\x69\xb2\xd2\xeb\x64\xbf\xed\xb8\xdc\x7b\xe2\x72\xe5\x0d\x3f\x08\x36\x67\x40\xfc\xf7\x70\x69\x33\x6b\xba\x8f\x70\xb2\xe3\xfd\x7d\x6b\x07\xd5\xd1\xf6\xfb\xa2\x6d\xb3\x6b\x87\x43\xdc\xaf\x16\x83\xdd\xbe\xa2\x45\x51\xcd\xe2\x5d\xd1\xf4\x6b\x84\x05\x74\x0e\xe7\xce\xe1\xdc\xb8\x32\xef\xd3\xe1\x7c\x30\x1e\xa3\xce\xe7\xfc\x42\x3e\x67\x2a\x3b\xa7\x73\xe7\x74\x6e\xbb\x40\x9d\xd3\xb9\x73\x3a\xbf\x5f\xa7\xf3\x4b\xe2\x3e\xef\x15\xdd\xf9\x5d\x89\xd6\x9d\x58\xdd\x89\xd5\x1d\x84\xb3\x9f\xda\xbe\x58\x98\xfb\xfa\x43\x4c\x12\xa2\x48\xb3\x3d\x8b\x88\x54\x6b\x0b\xe6\x7a\xa6\x4c\xcb\x71\x33\x41\xa4\xdc\x95\x21\xf9\x86\xdf\x27\x5b\xf2\xc3\xef\xa0\xe6\x3b\x3e\xd5\xf1\xa9\x6d\xa6\x76\x38\xa6\xd9\xe0\x30\xbf\x96\x6d\xd6\xf3\xdf\x2c\x6f\x96\xfe\x1e\x8c\x1b\xb2\xf0\x8b\x1a\x0a\xd7\x52\xbb\xe2\xfe\x70\x5b\x3a\xdf\x91\x1f\x9b\xbe\xde\x27\x33\x36\x63\xef\x38\x71\xc7\x89\x3b\x4e\xfc\xbe\x39\xb1\x3b\xc9\x6f\xea\x22\x33\x7e\xba\x71\x96\x60\x36\xa6\xb1\x3c\xf9\x67\xa1\xcb\xbf\x94\x87\x4c\x1f\xa8\xd8\xa4\x98\xfa\x94\x4e\xf1\x8b\xfe\x24\x29\x0c\xe6\x1e\x33\x73\x8d\x13\xcd\xd8\xd8\x6f\x12\xcc\x86\xf1\xbb\xf0\xa3\xd5\xce\xfe\x35\x7c\x6a\xbb\xf0\x71\xac\xc0\xd3\x81\x29\x33\x26\xbc\x22\xaf\xb6\x64\xa0\x3c\x8c\x13\xbe\x0b\x57\x0f\x26\x16\x30\x76\xc7\xaf\x83\x45\x39\xbc\x69\x77\x7e\x9d\x2e\x97\xb0\xf3\x5c\xb4\x9c\x70\xe7\xb9\x38\x5c\xcf\xc5\x5b\xb9\x23\x5f\xf9\x78\xbe\x96\x58\xd7\x3e\x08\xdf\x44\xab\x41\x50\x6b\x9e\x25\x1c\xc7\xab\x5c\x31\x85\xe0\x15\x82\xa3\xac\x8d\xc4\x2f\x3e\x7b\x0f\xc2\x5a\x31\xda\xdf\x58\x24\xdf\xf2\xc4\x0f\x45\x4b\x79\xc5\x50\xbe\x7a\x12\xdf\x40\x25\x79\x1f\xf8\xa9\xc5\x78\xbb\xd0\xbe\xce\xa2\xf4\xf6\x16\xa5\x2e\xb4\xaf\x53\x01\x0f\x4c\x05\xec\x42\xfb\xba\xd0\xbe\x4e\x41\x5e\x3d\xed\x4e\x41\xfe\x22\x42\xfb\x5a\x89\xda\x2f\x88\xbd\xb9\xbb\xd0\xdd\xc9\xdc\xee\xbd\x4e\xe6\xee\x64\xee\x2f\x54\xe6\x3e\x8c\x15\xee\x04\xee\x4e\xe0\xee\x04\xee\x4e\xe0\xee\x04\xee\xbd\x2f\x63\x27\x70\xbf\x66\x81\xce\x7a\xa9\x7b\x4d\x92\xcd\x7b\xf5\xe5\x74\xe2\x76\x27\x6e\x1f\xb6\xb8\x7d\x30\x13\x7a\x3f\x65\x1e\xdb\xcd\xa7\x2b\x52\xde\x15\x29\xef\x8a\x94\xbf\x78\x91\x72\xf7\x75\x8b\x8c\x0f\x7b\xb8\x14\x56\xb9\x34\x80\x8f\x82\xcc\xa8\x54\xc0\xfe\xdb\xc8\x2b\xeb\x13\x3d\xde\xab\x9c\xd2\xa5\x7a\xf8\xa7\x9d\xd4\xd2\x49\x2d\xbf\x51\xa9\xe5\x80\x62\xc1\x0e\x22\x63\x25\xc5\x2a\x9a\xe3\x49\x42\xc6\xde\xe8\x23\xdb\xea\xc1\x17\x54\x2a\x89\xa2\x5c\x2a\x9e\x36\x5f\x2e\x97\xae\x87\xbe\xef\xe0\x8c\xb3\x29\x9d\xe5\xe6\x6e\x31\xe0\x9c\xc1\x89\x2e\x24\xc1\x45\x46\xd6\x79\xaa\x6a\x5a\x7f\x17\xd7\x52\xfd\xd0\x5f\xeb\x76\xda\x44\x70\x2f\x8c\x7c\x56\xea\xd6\xb2\xd6\xf8\x76\x70\x77\xfd\x70\x7b\x36\x38\x45\xfd\x2c\x4b\xa8\xb1\xbb\x1b\x52\xa0\xbf\xea\x49\x21\x85\xe5\x63\xb1\x97\xc2\x90\xb9\xc1\xb0\x05\x43\xbf\x96\x8d\xd1\x11\x3a\xbb\x78\xb8\xbb\x1f\xdc\x36\x34\x68\x09\x05\xf2\x56\x49\x9a\x25\x58\x91\x18\x3d\xe6\x13\x22\x18\xd1\xd2\x8e\x45\xba\x2d\xcc\xff\xa6\xd1\xc1\x7f\x0f\xce\x1e\xee\x87\xd7\x57\xe3\xbf\x3e\x0c\x1e\x06\xa7\xc8\x51\x9c\x6e\x56\x8f\x4b\x8f\x22\x5e\x30\x9c\x6a\x0d\x44\xff\x50\x64\xca\xfe\x23\x27\x39\x41\x58\x4a\x3a\x63\x29\x01\x44\xe0\x52\x8b\x6e\xc0\x17\xfd\xef\x06\x17\xe5\x96\xe7\x24\x84\xdf\x45\x09\x9e\x90\xc4\xfa\x23\xc0\xc4\xae\x09\x3d\x80\x2a\x36\x8e\x8a\xdc\xac\xea\x5f\x1f\xfa\x17\xc3\xfb\x9f\xc7\xd7\x1f\xc7\x77\x83\xdb\x1f\x87\x67\x83\xb1\x95\x2a\xcf\xfa\xba\xdf\x52\x4f\x56\xf8\x44\xff\xc8\x71\xa2\xb5\x13\x3e\x75\x78\xbc\xe8\x79\x4e\x18\xca\x19\x50\x9c\x51\x79\xb4\x1e\xe4\x3b\xd5\xa7\xcc\xcc\xe8\xe6\xe2\xe1\xd3\xf0\x6a\x7c\xfd\xe3\xe0\xf6\x76\x78\x3e\x38\x45\x77\x24\x01\xa5\xc0\x2d\x3a\xec\x62\x96\xe4\x33\xca\x10\x4d\xb3\x84\xe8\xd5\xc0\x36\x9b\x78\x8e\x9f\x28\x17\xf6\xe8\xce\xe8\x13\x61\x66\x1d\xe1\xcc\x42\xfb\x4e\xf8\x1e\x07\x4b\x77\x7d\xf5\x71\xf8\xe9\x14\xf5\xe3\xd8\xcf\x41\x42\x1b\x25\xca\x71\xb0\xce\x47\xe5\x61\x6b\xe6\x00\xdd\x1b\x22\xe2\x4f\x44\x08\x1a\x93\x0a\x1d\xf5\xef\xee\x86\x9f\xae\x2e\x07\x57\xf7\xb0\x62\x4a\xf0\x44\xa2\x39\x7f\x06\x53\x36\xcc\x10\x2c\xdc\x4f\x98\x26\xd0\x99\xdb\x2c\xce\xd0\xf3\x9c\x82\xfb\x03\x80\x99\x7d\xcf\x46\x3f\x13\x39\x7b\x73\xeb\x6c\xe9\xe0\x2d\xab\x2d\xd5\x93\xb4\xfc\x46\xe5\x58\xac\x7a\xa1\x44\xe5\xcb\x2f\xae\xa3\xd6\xe5\x2f\x2a\xe4\xd6\xac\xac\x2d\xd1\x4b\xf3\x4c\x8b\xbd\x6e\xad\xab\x95\xd7\xf0\xf5\xae\x59\xa2\x04\x8d\xe4\xcb\x42\x3d\x89\x9c\x29\x9a\x12\x64\x3b\xb3\x87\x73\x8f\xf0\x4f\x97\xa6\xe1\xf7\x70\xc1\x2e\x95\x72\xf8\x44\x94\x1d\x7e\xa7\x02\x76\x2a\xe0\x61\xa8\x80\xef\x2d\xdb\x3f\x26\xd9\x72\x87\x95\x89\xc1\x3b\xc6\xeb\xb5\x14\xa4\x61\xec\x89\xd6\xa2\x9a\x90\x27\x92\x80\x94\xa7\x04\xd6\x4a\xa3\x95\x5d\x26\x82\xe0\x47\x2d\xf0\xc5\xfc\x39\x94\x5c\x6a\x90\xfb\xd1\x7e\x6e\xe1\x36\x41\x1c\x7f\xfa\xe3\xeb\x5d\x16\x7a\xb9\xe3\xd7\x28\xe1\x7d\x0b\x41\x32\x2b\x31\x02\x83\x04\xfb\x5f\xac\x25\x78\xcd\x6d\x11\x7c\xf1\x1e\x2e\x8a\x70\xb8\x07\xa4\x75\xdd\x86\x4a\xb0\x63\xa1\x29\x51\x38\xc6\x0a\xeb\x43\x33\x23\xea\x18\x5d\x33\x78\x76\x8f\xe5\x63\x0f\xb9\x2b\x4f\xb3\x95\xc2\xca\xf0\x0a\xa9\xf5\xef\xc4\x80\xbf\x39\x1f\xef\xae\xef\xee\xfa\xae\x5f\x99\x2e\xcc\xb3\x61\x85\xf7\x75\x31\x6e\xe4\xf3\xda\xdf\xfd\x65\x5a\x7c\xbf\x57\xd8\xeb\x3a\xb9\xf6\x7a\xa1\x99\xca\x59\xdd\x6d\x65\xfe\xaf\xbb\xad\xba\xdb\xaa\xbb\xad\x0e\x60\x85\xdf\xdc\x61\x58\xc3\xdd\xdf\xd4\x63\xb8\x4e\x3b\xdd\x1a\xf2\xae\xd0\x46\x37\x01\xbd\xfb\xa5\x2d\xb6\x5d\xf1\x0d\x7d\x1f\x3e\xc2\x60\x92\xaf\x91\xd6\xb6\xd7\xcb\xdc\xe4\x8b\x74\xfa\xe9\x0b\xde\xf8\x1d\x02\xe1\x5e\x11\x08\x0f\x63\xae\x2f\x92\x02\xf7\x36\x16\xd3\xb7\x4f\x7b\xeb\xa0\x06\xbb\xc4\xae\x2e\xb1\x0b\x7e\xef\xa0\x06\xf7\x47\xad\x2f\x2b\x5d\xf3\x98\x8c\x2b\x51\x02\xfe\x9f\xe3\xaa\xe7\xa7\xf4\x24\x74\x03\x95\x1e\x14\x99\x6e\xd0\x3a\x8d\xf7\x59\x44\xea\x8a\xc7\xa4\x75\x24\x41\xe9\xe5\x03\x97\xc1\xdd\x3c\x8d\x2c\x5e\x1a\xf8\x0b\x4b\xe2\x0d\x5b\xfe\x25\x1a\x76\x6a\x08\xb8\xb3\xf2\xac\x5d\xa8\x2f\x35\xbe\xa0\xe0\x50\xef\xc8\x53\xd1\x8e\x8d\xbb\x98\xc6\x71\x03\x33\xaf\x7f\xee\x59\x7a\xfd\xe3\x97\xc1\x0c\x6a\xcf\xd1\xc1\xac\x12\xbe\xfd\x3e\xec\x2a\xe1\x88\x5f\xc3\xb2\xb2\x72\xef\xbf\x38\xae\xbe\x8a\x92\x3b\xde\xde\x72\xb9\xbe\x54\x0e\xdf\x41\xfc\xac\xb2\x75\x74\x18\x3a\x9d\xa9\xe5\x70\x26\xdc\x99\x5a\xde\xb5\xa9\xc5\xb8\x68\xc7\x19\x16\x84\xa9\x1a\x91\xba\x7a\x9d\xc0\xeb\x21\xe6\x82\x93\x3a\xa0\x01\xa4\x25\x5a\x64\x2f\x64\x7f\x55\x7d\x59\xb6\x17\x2b\x18\x04\x99\x90\x27\xff\x2c\xfe\xf6\xc2\x7a\xa9\x02\xc4\x8a\xe8\x24\x83\xf5\x2f\xf5\x1d\x9d\xdb\x40\xa5\xdd\x73\x25\xb1\x2a\x89\x82\x10\x44\xbd\x36\x9e\xe9\xc6\xbc\xfd\xbe\x52\x24\x97\x06\xfd\xba\xb1\x4d\xcb\x1b\xdf\xee\x00\xb9\x9d\xa1\x26\xdd\x2f\xc8\x29\xd3\xd2\x28\x9f\x16\x17\x83\x44\xcf\x34\x49\x00\x51\x04\x32\x1e\x9b\x6e\x80\xdf\x5c\xc4\x43\xe3\xce\xbf\x69\xdc\x43\x1d\x77\xa8\x63\x09\x6d\xec\xa9\xfb\xca\x99\x76\xc4\x06\xe9\xac\xa0\x0d\xad\x31\xc0\x7e\x19\x9c\xe0\x13\x51\xaf\xc5\x06\xb6\x3d\xfb\x2b\xcf\xbd\x20\x53\x22\x08\x8b\xc8\x01\x7a\xdb\x37\x09\x03\xf9\xc9\x4c\xd2\xc6\x80\x78\x28\x81\x70\xaa\x8a\x5b\x3d\xad\x24\xea\x76\x99\xe4\x5d\x26\x79\x97\x49\x5e\x3d\xea\x5d\x26\x79\x97\x49\x5e\x9b\x03\x11\x93\x84\x28\xd2\x28\x55\x9c\xc3\xe3\xb7\x92\x2a\x4c\xef\x5f\x86\x60\x61\xe6\xd2\xc9\x16\xbf\x19\xcd\xc2\x6d\xf8\x41\x68\x16\xe6\xac\xad\x33\x3f\x94\x7e\xac\x09\xb1\x7e\x75\x93\xc4\x36\x4c\xa3\x64\x97\x38\x87\xd7\xdf\x25\xeb\xa8\x0e\xbd\xb3\x51\xa0\x60\xeb\x5e\x8e\x93\x2c\x1d\x81\x76\x13\xb7\x1e\xc3\xf7\x3b\xef\x43\xe1\xa0\x4d\x74\x7f\xa8\x7c\x74\xeb\xa4\x94\x43\xb1\xd8\x7c\x41\x3c\xb2\xb3\xde\xbc\x71\xae\xc4\x12\x33\x7c\xb7\xd3\xed\x8c\x55\x9d\xb1\xaa\x33\x56\x75\xc6\xaa\xce\x58\x85\x3a\x63\xd5\xc6\xc6\xaa\x2f\x48\xa6\xea\x0c\x57\x9d\x58\xb5\xbf\xe9\x1e\xaa\x96\x79\x48\xd6\xba\xd6\x28\xe9\x45\x0e\xd5\xda\xc8\x7b\x3b\xed\x5f\xd6\x84\xdc\xdf\xb8\x11\xbc\x1f\x7e\x25\x5f\x9a\x25\xed\x12\x58\xec\x76\xf4\x8b\x8d\x2b\xee\x4a\x87\xd6\xae\x55\x17\xf6\xbc\x62\x71\xba\xb0\xe7\x2e\xec\xf9\xe0\xc2\x9e\xf7\xae\xac\x64\x5c\xae\x02\x24\x32\xa5\xb3\x56\xe6\x3f\xbb\x3b\x1b\x12\x8d\x80\x14\x0c\xca\x71\x4c\xb2\x84\x2f\xc0\x92\xb2\xe2\x3a\x77\x5d\xdc\x2c\x49\xd4\x87\x7e\xa3\xbb\x91\xbf\x96\xce\x71\x28\x32\x69\x31\xef\x83\x90\x42\x4f\xfe\x59\x49\xe7\x6f\x85\x97\xc9\x10\xf9\x4c\x25\xdc\x4a\xeb\x09\x7b\xc4\xea\x9f\x04\xa5\x0b\xed\x3d\x38\xc9\x55\x90\xbb\x27\xb5\x60\x95\x11\xa1\x16\xc1\x9b\x24\xcd\xd4\xe2\xbf\x46\x8c\x2a\xef\x61\xa3\x33\xc6\x85\xe1\x6a\xfa\xe3\x39\x66\x71\x42\x84\xbe\x54\x5d\x3b\x11\x66\x8c\x2b\x10\x37\x60\x06\x31\x7a\xa2\xd8\x08\x27\xfd\x9b\x61\x6b\x3f\xf3\x3b\x3a\x5d\xaf\x5d\xac\x6e\xcd\x5d\xf7\x29\xe1\x13\xa8\x60\x99\x97\x75\x7a\xdd\x40\xe7\x19\x2d\xed\xdc\x5b\x31\x04\x85\xe5\x63\x15\x38\xa4\x9c\x85\x3e\x5e\x09\x25\xb2\xe6\xdd\x12\xc6\xfc\xea\x57\x2b\x70\x23\xe5\x67\x16\x80\x04\x1e\xc3\x90\xab\xe3\x70\x3f\x86\x1d\xba\xdf\x8a\x96\xdd\x2f\xae\x74\x37\xfc\x28\x88\x12\x8b\x31\x56\x4a\x33\x99\x7d\x62\x9c\xdc\x63\xf9\xd8\x1a\xe3\xa4\xf4\xf2\x81\xb3\x9c\x12\xc6\x49\x79\xe0\x2f\xce\x72\x5a\x52\xe7\x1a\xce\xf4\xfe\xf2\xe3\xdb\x9e\xb5\x0d\x26\xfe\x5b\xc9\x95\x6f\xc7\x7b\xd6\x99\x69\xdf\x63\xde\xfc\x2a\x66\x7a\x30\x23\xac\xf0\xf3\x2f\xf1\xe4\x96\x6f\xa7\xee\x88\xae\x5a\xa3\x2f\xae\x10\x6e\x45\xe8\x58\x33\xb7\x77\x52\x10\xb7\x2a\x37\xed\x7b\x54\x2f\x63\xe6\x0e\x76\x63\x93\x18\xa0\x61\x19\xad\xdc\x9f\x21\x17\x15\x54\x94\x9e\x9d\x43\xa2\x35\x95\x61\x42\x7c\xc4\x85\x91\xbc\x62\x7b\x66\x8d\xd9\xce\x80\xf9\x9e\xa2\x3e\x8a\x6d\x6d\x7e\x41\x32\x41\x24\x61\xca\xa8\xda\xa6\xde\x95\x2b\xef\x4f\x99\xb5\x10\x9d\x63\x85\xcf\xb0\xc2\x09\x9f\x1d\xa3\xbe\x2f\xec\x4f\x25\xc2\x89\xe4\x08\x3b\xc2\x21\xb1\x6b\x02\xb3\xd8\xb1\x07\x8c\x22\x9e\x66\x34\xf1\x48\xed\xde\x8a\x4f\x59\x4c\x9f\x68\x9c\xe3\xc4\x23\x63\x8f\xd8\xe0\x89\x30\x95\x83\x0a\x87\x93\x04\xd9\x6e\xdd\x0b\x81\x7e\xee\x46\x29\x69\x4a\x13\x2c\x90\xe2\x76\xb4\xd7\xb6\x2d\x74\x3f\x27\x7e\xac\x0e\x05\x1c\xa5\xf8\x91\x48\x44\x15\xca\xb8\x94\x74\x92\x14\xc7\xf8\x61\x88\x60\xdc\x67\x17\x43\x30\x8d\x46\x0a\x71\xc3\x07\x5d\xe7\xd6\x4f\xe0\x7a\x4c\x31\x63\x04\x3a\xe6\x6a\x4e\x84\xed\xde\xbe\xfc\xd6\x56\xce\xb7\xc6\x88\x6e\xb6\x98\x86\x23\x7b\x3b\xa5\xb3\xb5\xc6\xd9\x56\xdd\x6c\xa7\x6b\x36\x2b\x9a\x2f\xe0\xa5\x6d\xaf\x0d\x5e\x50\x59\x56\x07\xdf\x85\xcb\xb6\x34\xe2\xd7\xc0\x47\xfb\x8d\x2a\x82\x9d\x16\xf8\x22\xeb\xf6\xa5\xaa\x80\x07\xae\xff\x75\xc8\x6e\x1d\x8a\x7d\x17\x80\xb1\xc7\xc5\xe9\x02\x30\xba\x00\x8c\x2f\x36\x00\xa3\x59\x9b\xa0\xf1\xce\xe9\x7a\x1b\x56\x90\xf2\x46\x01\xf1\x0b\x88\x52\x58\x3e\xb6\xad\x29\xa5\x45\xe5\x61\xfc\x2e\xa4\xfa\xda\x09\xbf\x86\x74\xdf\xd5\x29\xda\x6b\x9d\xa2\x83\x9b\x76\x27\xf8\x75\x82\x5f\x27\xdb\xb4\x9c\x70\x27\xdb\x1c\xae\x6c\xf3\x56\x0a\xcb\x97\x04\xa1\xab\x85\xa7\x52\x66\xcc\xca\x00\x5b\x03\x47\x03\xee\x81\x3c\x4b\x38\x8e\xd7\x05\xe1\xfc\x82\x0a\xb9\x66\x85\x68\x66\xda\xd5\x1f\x1c\xb8\x64\xb6\x14\x7f\x63\x46\xfe\x5b\x88\xa9\x6d\x9c\xfa\x9b\x86\xd5\x02\xfd\x42\x30\x59\x29\x28\xed\xa5\xb4\x90\x2a\x4d\xb7\x52\x38\xe4\x1f\x0f\x9c\xaa\xfd\x96\xbe\x86\x7a\xf1\x05\x3b\x08\x3a\x27\xc0\x6f\xb3\xf0\xf9\xc1\x48\xad\x9d\x6a\xd7\x65\x55\x76\x46\xfd\x4e\xf1\xed\x14\xdf\xbd\x2f\xe3\x21\x29\xbe\x6f\x28\x51\x9b\x34\x91\x17\x29\x63\xb8\x9d\x6c\xdd\x89\xd6\x9d\x68\xdd\x89\xd6\x5f\xac\x68\x7d\x18\x2b\xdc\xc9\xd5\x9d\x5c\xdd\xc9\xd5\x9d\x5c\xdd\xc9\xd5\x7b\x5f\xc6\x4e\xae\xae\xc8\xd5\xf0\x97\x4b\x93\xde\x54\xc8\x6e\x2d\x5c\xb7\xc8\x89\x7e\x2f\x92\x75\x27\x55\x77\x52\xf5\x61\x4b\xd5\x07\x33\xa1\x2f\x2f\x11\xb2\x4b\x25\xec\x52\x09\xbb\x54\xc2\xb7\x48\x25\x74\xbc\x64\x95\x84\xb2\x2c\x58\xfc\xb8\xc4\x81\x0e\x56\xb6\x28\x46\xbb\x6d\x78\xc7\xbe\x96\xda\x01\xcd\x6f\x53\x69\xaa\xf4\x9b\x6b\xe8\x80\xea\x4f\xf5\x9c\xb4\xa0\x19\x85\x1b\xdf\x7a\x84\xb0\x9f\xec\x9b\xef\x0b\x0c\x7c\x79\xd4\x5d\xfd\x29\x14\xec\x5a\x57\x7f\xea\x05\xe7\xed\x0e\xd7\x9a\x99\x3b\x1a\x35\x36\xde\x77\x3a\xed\x37\x07\x97\x6b\x3e\xe9\x6f\x1a\x2e\x57\x7b\x93\x2c\x25\xef\x9c\xfc\xb3\xf6\xa2\x78\x83\xb2\x5b\x1b\xdf\x0e\x9f\x88\xfa\x52\xae\x86\xae\xec\x56\x57\x1f\x62\x4f\xd3\xdd\x8a\xf5\xbf\xdb\xd9\x76\x45\xc6\xba\x22\x63\x5d\x91\xb1\xae\xc8\x58\x57\x64\x0c\xfd\xc6\x8b\x8c\x6d\x2c\x3e\x9a\x71\x7c\x29\x12\x64\x57\x64\xac\x13\x22\xf7\x37\xdd\xdf\x96\x10\x79\x80\x16\x84\x83\xa8\xa6\xe6\x2d\x08\x6f\x8e\xfb\xe1\x46\xd2\x16\xfb\xc3\x2d\x68\x87\xff\x61\xff\xaf\xc3\xff\xe8\xf0\x3f\x1a\x66\xdd\x05\xb3\x76\xf8\x1f\xa8\x0b\xd7\xec\xc2\x35\x0f\x39\x5c\xb3\xc5\x36\x76\xf8\x1f\x2d\xc5\xb9\x17\xc2\x00\x71\x32\xd7\x46\x38\x20\x3f\x2d\x2b\x1a\x07\x2b\xa5\xb9\xb1\xfe\x76\x70\x40\x6a\xa7\x7d\x10\x2a\xc9\x2b\xe2\x80\xd4\xd1\x75\x6b\x05\xe4\x7d\xe0\x81\xb8\xd1\x76\x89\x8b\x5d\x88\xf5\xe1\x87\x58\x1f\x5c\xe2\xe2\xc1\x48\xb2\x9d\xba\xd7\xe5\x2e\x76\xb9\x8b\x9d\x32\xdc\x29\xc3\x7b\x5f\xc6\x43\x52\x86\xdf\x58\xc2\x7e\x41\x5c\x90\xdd\x64\xed\x4e\xd4\x36\xef\x75\xa2\x76\x27\x6a\x7f\xa1\xa2\xf6\x61\xac\x70\x27\x67\x77\x72\x76\x27\x67\x77\x72\x76\x27\x67\xef\x7d\x19\x3b\x39\xfb\xd5\x70\x42\xea\x84\xed\x96\xf9\x36\xef\x49\xd2\xee\xa4\xec\x4e\xca\x3e\x6c\x29\xfb\x60\x26\xd4\x61\x86\x74\x98\x21\x1d\x66\x48\x87\x19\xb2\x95\x7c\xf3\x6f\xf6\x58\x7e\x08\x6e\x62\x7f\x65\x7f\xf8\x2e\xe1\x93\xfb\x45\x46\xf4\x7f\xcf\x69\x4a\x98\x04\x69\x94\xaa\x45\x28\xcf\x34\xac\xfc\xf2\x9a\x7f\xb8\x1b\x5e\x7d\xba\x08\xb3\x69\x3e\x5c\x3e\x5c\xdc\x0f\x6f\xfa\xb7\x7e\x5d\xfc\xac\xc2\xb5\xb0\xdf\x95\x44\x32\x4b\xf2\xb7\x44\xeb\x9e\x70\x6a\xee\x14\x56\xb9\xdc\x6e\x64\xb7\x83\xbb\xc1\xed\x8f\x90\x0d\x34\x3e\x1f\xde\xf5\xbf\xbb\x28\x11\x44\xe9\x79\xff\xec\xaf\x0f\xc3\xdb\xe6\xe7\x83\xff\x1e\xde\xdd\xdf\x35\x3d\xbd\x1d\x5c\x0c\xfa\x77\xcd\x5f\x7f\xec\x0f\x2f\x1e\x6e\x07\x2b\xd7\x63\xe5\x68\x57\x2b\x21\x12\x16\x09\xe2\xfc\x51\x64\xb9\x86\x28\xd6\x10\x79\xf1\xd1\xb1\xc3\xba\xbe\x4e\xd1\x83\xd5\xe9\xa9\x6d\xdc\x30\xd8\xa0\x21\xa3\x8c\xc4\x54\xe2\x49\x42\xe2\xa5\x96\xdc\x1a\x36\xb5\x84\x4b\x83\x7a\xd6\xda\xb3\x17\x39\x35\xcf\x8b\x0c\x2f\x40\x90\xa3\xa8\x08\x8b\x6b\xfa\x30\xfb\xd0\xd8\x03\xd3\xbc\x8b\x3e\x91\x52\x4f\x51\x2e\x04\x61\x2a\x59\x20\xf2\x99\x4a\x25\x97\x1a\x75\xdb\xd7\xd4\xac\xbd\x53\x7d\x83\x73\x2c\xd1\x84\x10\x56\x1e\xbf\x20\x09\xc1\xb2\x66\xcc\x76\xf7\xdb\x2d\x8b\xdf\x2b\x6b\x8d\x31\x97\xd1\x14\xd3\x24\x17\xa4\x72\x5a\x78\x9a\x61\x41\x25\x67\x83\xcf\xfa\x2e\xd3\x07\xf9\x1a\x3e\xe7\x62\xbb\x13\x33\xf8\x6b\x48\xc1\x57\xe5\x7f\x7e\xba\x2f\xff\xab\x74\xe6\x2f\xee\xcb\xff\x5a\x4d\xeb\x41\xc3\x55\xca\x3e\x42\x9f\xee\x4f\xd1\x27\x08\x71\x12\xe8\x7e\x8e\x0d\xc5\x5e\xdc\x9f\xa2\x0b\x22\x25\xfc\x52\x7c\xac\xa8\x4a\x60\x6e\xdf\x51\x86\xc5\x02\xb9\xe9\x9b\x44\x57\x1c\xcd\x11\xf1\x4b\x53\x5d\x3c\xf6\xf7\x9c\x81\xea\x5e\xac\xde\x05\x9f\xd1\x08\x27\xbb\x2d\x62\xff\xaa\xc4\x07\xae\x6f\x57\x2e\x45\xf8\xf6\xf2\x5a\xf4\xaf\xce\x21\x89\xd4\x0d\xb5\x66\xe6\x57\x44\x6a\x22\x89\x38\x8b\xad\x97\x46\xdf\xfe\x8b\x40\xa8\xff\x3b\x87\x44\xdc\x5c\x52\x36\xd3\x2d\xa2\x13\x74\x7d\x3b\x62\xd7\x22\x36\x86\x50\xa2\xa5\x61\x43\x73\x54\x22\xc6\x15\xa2\x69\xc6\x85\xc2\x4c\x69\x45\x00\xc4\x00\xbb\x22\x86\x03\x9c\xf1\x34\xcd\x15\xd6\x07\x6d\x69\x51\x99\x31\x87\xdc\x11\x35\x8c\xc1\xb5\x52\xb3\x86\x46\x4e\x28\xe6\x92\x09\xdd\xbe\x96\x51\xca\x3a\x34\x8d\x97\x54\x59\xd7\x04\x16\x02\x97\xa5\x89\x0f\x54\x91\xb4\xfa\x7e\xcb\x20\xcf\x7f\xd5\x1a\x08\xce\x4c\x52\x05\x11\x7d\x11\xcd\xa9\x22\x91\xd2\x47\x70\x2b\x9a\x78\xb8\xfa\xe1\xea\xfa\xa7\x50\x82\xf8\xd0\xbf\x3c\xff\xf3\x7f\x94\x7e\xb8\xbd\x5c\xfa\x61\xfc\xe3\x9f\x97\x7e\xf9\xff\xad\xa4\xa7\x6a\x4f\x4b\x7a\x7e\x30\x97\x23\x10\xa9\xc1\x26\xec\xa6\x8a\x68\x8a\x67\x04\xc9\x3c\xd3\x14\x20\x8f\xcb\xfb\xab\x45\xca\x0b\x8e\x63\xca\x66\x26\x03\xf4\x82\x2a\x22\x70\x72\x89\xb3\x8f\xce\x7e\xbd\xc5\xea\xfc\xdf\xbb\x52\xbe\xee\x87\x9f\xfb\x97\x61\xc6\xef\x87\x9b\xdb\xeb\xfb\xeb\x95\xb3\x2e\xb5\xb0\x7c\x8c\xf4\xe3\x53\xf8\x5f\x74\x82\x74\xeb\x5e\xf2\x4d\x89\xc2\x5a\x23\x40\x5f\x9b\xa4\x39\x9f\x48\x43\x59\x02\xa7\x26\x13\x34\xa5\x70\xa5\x18\x0b\xde\x37\x46\xb8\xf6\xda\x83\x3f\x37\xe6\x03\xd0\x96\xdd\xa5\xcc\x62\x2c\x62\xf4\x77\x59\x4d\x1f\x07\xc3\xb1\xf9\x81\xc4\xe8\x08\xcd\x95\xca\xe4\xe9\xc9\xc9\xf3\xf3\xf3\xb1\x7e\xfb\x98\x8b\xd9\x89\xfe\xe3\x88\xb0\xe3\xb9\x4a\x13\x93\x2e\xaf\x57\xe1\x14\xdd\x08\xae\xaf\x10\x50\xd0\x89\xa0\x38\xa1\xbf\x92\x18\x4d\x0c\xff\xe3\x53\xf4\x4b\xc4\x05\x39\x2e\x36\xc6\x1a\x95\xec\x3d\x62\x0d\x4f\x27\xfa\xa5\x1a\x66\x52\xdd\x4f\x14\x93\x88\xc6\x56\xcc\x20\x2c\xe2\x60\x79\x34\xbe\x0a\xdd\x9e\xcb\x34\xd4\x1a\x4d\x96\xab\x62\x39\x03\x65\x05\xc7\x24\xc8\x76\x57\xbc\x4c\x70\x5a\xf1\x19\x1a\xb5\x35\xd7\x2a\xba\xbe\x5b\x31\xdc\xaa\xee\xd5\x4c\x4f\x38\xe2\x09\x9a\xe4\xd3\x29\x11\xa1\x43\xba\xa7\xb5\x19\x2a\x91\x20\x11\x4f\x53\x90\x18\xf4\x57\xb9\x34\x54\x0d\x2b\x66\x47\x7b\x3c\x62\xb0\xff\x5a\xcd\x01\x0a\x88\x39\xb0\x3a\x46\x48\x8c\x30\x5b\x98\x6e\x26\xf9\x34\x6c\xdf\xc0\x50\xe0\x18\x51\x35\x62\xfd\x24\x41\x82\xa4\x5c\x91\x20\x87\x12\x9c\x67\xe5\x05\x07\x16\x29\x48\x96\xe0\x88\xc4\x86\x1e\x12\x1e\xe1\x04\x4d\x69\x42\xe4\x42\x2a\x92\x86\x0d\x7c\x0d\xb6\x1a\xbd\x66\x54\xa2\x98\x3f\xb3\x84\x63\x3b\x8f\xea\x67\xdf\x94\x4f\xe3\xc0\x41\x04\x0c\x84\xe0\x02\xfe\xe7\x07\xca\xe2\xbd\x71\xa8\x87\xbb\xc1\x6d\xf8\xef\xbb\x9f\xef\xee\x07\x97\x9b\x71\x1f\x4f\x59\x30\x3c\xd0\xe1\x4f\xd1\x9d\x59\x04\x2e\xb4\x44\x24\x1a\x26\x75\x69\x49\xa9\xf8\x81\xc7\x5b\x72\xdf\xcb\xfe\xd5\x43\xbf\xc4\x51\xee\xce\xbe\x1f\x9c\x3f\x54\xf4\x01\x3b\xbf\x92\x0c\x6f\xd4\xbf\xf0\xb7\xb3\xef\x87\x17\xe7\xe3\x1a\x85\xf1\xc3\xed\xe0\xec\xfa\xc7\xc1\x6d\xa1\xdb\xd5\x2e\x51\x65\x30\x55\x66\x75\x6f\x98\xd2\x9c\xc7\x68\xb2\xa8\x07\x84\xd0\x92\x73\x02\xbe\xd8\x02\x12\xc5\xb4\x7a\x0a\xbc\xc9\x61\x73\x14\x5f\xa4\x3c\x26\x3d\xfb\x0e\x20\x69\x18\xe3\x8a\x91\x98\xeb\x1b\xd6\xbd\x63\x16\x18\x2a\x0c\xc8\x85\x5f\xb8\x53\xd4\x47\x52\xbf\x98\xeb\x43\x2d\xe8\x6c\x06\x86\xc3\xca\x50\x4d\x6b\xf6\x53\x58\x5e\xf8\xce\xec\x7f\x26\x38\x9c\x73\xdd\xad\xb5\x38\x7b\xab\x84\xf9\x10\x50\x57\xca\x2d\x0a\x0c\x06\x87\x9a\xa1\xb9\xcd\xd2\x8b\xd0\xb8\x5e\xe6\x3c\x1a\x7b\x91\x3e\x5c\xc0\xb6\xa4\xb1\x77\x66\x82\x3c\x51\x9e\x07\x9f\x5a\x60\x8f\xd2\x8e\xd7\x36\x5f\x2c\x00\x2c\x9b\x31\x8a\x54\x9a\xf1\xe4\x51\xdb\x82\x66\x61\x4f\xd0\xc2\x54\xf0\xb4\xa6\x8d\xf2\x31\x19\x5e\xdf\x29\x81\x15\x99\x2d\xce\x2d\xcb\xd8\xfe\x78\x9c\x5f\xff\x74\x75\x71\xdd\x3f\x1f\x0f\xfa\x9f\xca\x27\xde\x3f\xb9\xbb\xbf\x1d\xf4\x2f\xcb\x8f\xc6\x57\xd7\xf7\x63\xf7\xc6\x4a\x92\x6f\xe8\x60\xf9\x9e\x2e\xbf\x78\x8a\x34\xcb\x05\xd6\xe8\x00\xef\x02\xfe\x38\x21\x53\x2e\x0c\x9f\x4f\x5d\xe8\x82\x15\x61\xdc\xda\x5a\x5d\xac\x32\x8b\x53\xb0\x8c\xd5\x35\x69\xac\xde\x4a\x10\x9c\xc2\x3d\x81\x19\x1a\xb0\xf8\xe8\x7a\x7a\x74\x67\x7e\x4c\xb1\x78\x24\xc2\x7f\xfa\x2c\xa8\x52\x84\x95\x54\x3a\xec\x86\xec\x95\xc4\xa2\x83\x63\x74\xab\xf9\xbe\x7e\xdf\x5f\x6a\x9a\xd8\x63\xa2\x30\x4d\xa4\x1d\x6c\x69\x5d\x4f\xd1\x05\x16\xb3\xc2\x0e\xf7\x35\x9f\x4e\x4d\x63\xdf\x98\x61\xe8\x3b\xac\x34\x8b\x1a\xde\xab\x49\xc3\xdd\x8b\xd0\x9f\x7d\xd9\xcb\xc3\xcb\x54\xf5\x90\xed\x46\x53\x0f\x37\xb0\xe2\x46\x63\x2f\xe9\x86\xf6\x49\x0d\xad\xc1\xc4\xcd\xe3\xd5\x97\x4c\x7d\xdb\xcb\xe4\x54\x7e\xb1\x86\x9c\x4c\x2e\x95\xde\xf9\xa9\xd6\x36\x6b\x68\x89\x7c\xa6\xd6\x60\x10\x8e\xbb\x42\x42\x45\x33\x60\x5e\xc5\x59\x46\xb0\x90\x75\xbb\x5d\x16\x03\x1b\xf6\xde\xf4\x14\xf6\x61\x37\xd9\xf5\xd3\x43\x9c\x81\xc1\xc1\x0b\x11\x15\x8a\x6c\x41\x03\xa6\xad\x25\x0a\xb8\x01\xb4\xa5\x6b\x8b\x6c\x74\x49\xa5\x56\x1a\xcd\x8f\xdf\x59\xc8\xa5\xed\x08\xe2\x63\x7f\x78\x51\x11\x2e\xc6\xe7\x83\x8f\xfd\x87\x8b\xd5\x66\xc2\xd2\x77\xd5\x2d\x46\x47\x48\x3f\x2f\xfb\xcd\xe9\xd4\xdc\x19\x0e\x38\xca\xa8\xb4\x84\x81\xd1\xca\x42\xd5\x18\x7b\x75\x4c\xb2\x84\x2f\x52\xc2\xc0\xc4\x53\xba\x09\xf5\x7a\x4e\x31\xb5\x57\x4b\x30\x58\xb0\xe2\x58\xb3\x1b\x5c\x63\x47\x0e\xad\x8a\xc4\xfe\xe6\x2d\x83\x55\x55\x58\xf7\x8d\xf1\x9e\xd9\xff\xdc\x29\xac\xb6\x3c\x63\xfd\xb3\xfb\xe1\x8f\x83\xb2\x7e\x78\xf6\xfd\xf0\xc7\x3a\xa9\x66\xfc\x69\x70\x35\xb8\xed\xdf\xaf\x11\x4e\x2a\x4d\xd6\x09\x27\x52\x0f\xb8\xea\x3d\xa5\xd2\x47\x04\x45\x06\xf2\x0a\x51\x25\xd1\x13\x95\x74\x42\x01\x20\xcc\x7a\x22\x1f\x86\xc0\x59\x9f\x70\x42\x63\xaa\x16\x4e\x7c\x31\xfd\x96\xf7\x51\x73\x52\xdb\xbe\x31\x3b\x84\xfe\x49\xb0\xf2\x99\xcd\x71\x93\x3e\x45\xa0\xdb\x3e\x81\xd2\x16\x7c\xc6\xb4\x20\xcd\x66\x44\x98\xe1\x80\xf7\x25\x1c\x4b\xf0\x5c\x8f\x2a\x14\x56\x8a\x55\xf3\x42\xeb\x8c\x30\x22\x00\x04\xce\x77\x62\x04\x29\x41\xd8\x57\x5a\xe6\xca\x12\x1a\x51\x95\x2c\x50\x04\x36\x2c\x30\x67\xa6\x98\xe1\x99\x15\x0e\x40\xcd\xa9\x90\xc4\x5f\x0d\x8a\xda\xf5\xd4\x9a\xf6\xef\x29\xd9\xf2\x98\x3d\x5c\x9d\x0f\x3e\x0e\xaf\xca\x24\xf0\xfd\xf0\x53\x49\x84\xbd\x1c\x9c\x0f\x1f\x4a\xb7\xb9\x96\x64\x57\xcb\xf5\xd5\x66\x6b\x8e\xa2\x7f\xe9\x14\x9d\x9b\x4f\x4f\xf5\xe2\xd6\x40\xc4\x79\xe5\xb7\xb2\x0e\xb7\x2e\x24\xcf\xfd\x31\x60\x4a\xd4\xfa\x25\xda\x9a\x90\xac\x0f\xb2\x64\x43\xaa\x0f\x55\x58\xea\xfb\xaa\xea\x54\xae\x4e\xd9\xbd\x08\x41\x97\xc7\x85\x65\x29\x8c\x61\x00\xa3\x41\x93\x11\xab\xc6\xad\x55\x30\xec\x1f\xc1\x45\x9d\xe6\x52\x19\x57\x22\x10\x27\x7a\xfc\x8b\xd4\x0b\x0a\xae\xc6\x63\x74\x47\xc8\x88\x39\xeb\xc1\x8c\xaa\x79\x3e\x39\x8e\x78\x7a\x52\xe0\x13\x9e\xe0\x8c\xa6\x58\x4b\xd2\x44\x2c\x4e\x26\x09\x9f\x9c\xa4\x58\x2a\x22\x4e\xb2\xc7\x19\x44\xc0\x38\x77\xea\x89\x6f\x76\xc6\xff\xfd\xe2\x4f\xdf\x1e\x5d\xfc\xe5\xdb\x0f\xcb\x16\xb2\xa6\xfd\x1f\xb0\x08\x67\x32\x4f\x6c\xc4\x9c\x08\xd7\xc6\x1d\xf9\x9c\xac\xdb\xef\xab\xf2\x76\xed\xa6\xbf\x9e\xdd\x3c\x94\x2c\xd6\xe5\x7f\x5e\x0e\x2e\xaf\x6f\x7f\x2e\x71\xca\xfb\xeb\xdb\xfe\xa7\x12\x43\x1d\xdc\x7c\x3f\xb8\x1c\xdc\xf6\x2f\xc6\xee\xe1\x2e\xb6\xb7\x1f\x18\x7f\x66\xe5\xa5\x91\x8e\x03\x2e\xf5\x74\x8a\x3e\x72\x81\x7e\xf0\x3b\x79\x34\xc1\x12\xae\x18\x77\x67\xc9\x1e\xca\x78\x0c\x8c\x17\x91\x6c\x4e\x52\x22\x70\x62\x6d\x06\x52\x71\x81\x67\xe6\xa6\x97\x91\xc0\x2a\x9a\x23\x99\xe1\x88\xf4\x50\x04\xd4\x30\xeb\xc1\xa6\x80\xaa\xc5\x67\x55\x3b\xdf\x6d\xce\x14\x4d\x89\x53\xc1\xed\x3f\xef\xcd\x66\x6c\xb1\x39\xd7\xf7\xdf\x97\x85\xbd\x8f\x17\x3f\xdf\x0f\xc6\x77\xe7\x3f\xac\x5c\x4f\xf3\x59\x69\x64\x77\x10\x80\x74\xc6\x93\x3c\x65\xe1\xdf\xdb\x8f\x6d\x78\x75\x3f\xf8\x54\x1d\xdd\x75\xff\xbe\x4c\x19\xb7\xe5\x00\xb7\x0f\xdf\x5d\x5f\x5f\x0c\x4a\x2e\xe1\x0f\xe7\xfd\xfb\xc1\xfd\xf0\xb2\x44\x3f\xe7\x0f\xb7\x06\x8d\x70\xd5\x34\xdd\x08\x6a\x26\xaa\xa7\x15\x4e\x73\xdf\xac\xb0\x15\x27\xea\xdb\x80\x72\x73\x96\x8f\x02\xb8\x1d\x13\x0e\x06\x56\x9d\x23\x6f\x52\x8d\xcc\x48\x6b\xd9\xa1\x2a\x6f\x13\x6a\x66\xc7\x2b\x37\x7a\x15\x57\xbe\xf7\x43\x30\x50\xa0\x46\xd9\xc6\x49\xc2\x9f\x4d\x28\x6f\x4a\xf5\xad\x6c\x81\xd1\xf4\x2b\xb2\xf0\x10\x1e\xd7\x70\xbc\xf2\xb6\x90\x48\x10\x75\xc9\x73\xa6\xb6\x27\xb9\xfe\x55\x89\xef\x0c\xae\x7e\x1c\xff\xd8\x2f\x53\xe0\xf0\x62\x35\xab\x09\x9b\xa8\xb9\x8a\xfb\x57\x3f\xfb\x4b\x18\x02\xbe\x7b\x5e\x43\x35\xb2\x6b\x94\x50\x2d\xf6\x46\x58\x6b\xaf\x09\x48\x34\x88\x50\x30\x39\xa4\x7a\x72\x10\x60\x9a\x19\x7f\x92\xe1\x4f\x66\x90\xa7\xee\x8f\x4a\x7b\x12\xd6\x05\xac\xa9\x2e\x9e\x1e\xda\xb1\x5a\x35\x43\x84\x3d\x51\xc1\x01\xcf\x16\x3d\x61\x41\xb5\x34\x6e\x5a\xd6\x73\x3d\x85\xff\xdd\xac\x4d\x30\x8c\x56\x18\xd7\x1d\x17\xea\xdc\x07\xf2\x6e\x67\x0d\xa9\x0b\x68\x5d\x0e\x65\xad\x37\x74\x2c\x7f\x5b\xb3\x39\x3b\x06\xfc\x96\x27\xfc\x8f\xe4\x9c\xe2\x44\x33\x80\xfd\xc9\x8b\xfd\xab\xbb\x61\x59\x7e\x2c\xab\x19\x01\x5f\xde\x5a\x5e\x04\x43\xa5\x19\xb9\x53\x26\xee\xfe\x7a\x61\xb4\x0b\x00\x3d\x36\xe7\x36\x50\x2c\x40\x00\x72\x28\x28\x19\x16\xb2\xf2\x85\x44\x00\x84\x56\x04\x5c\xe9\x3b\x0b\xc2\x99\x9e\x38\x8d\x47\x8c\x7c\xce\x08\x93\x10\x1c\x60\xee\xb3\xc2\xd7\x2e\x8f\xd1\x70\x0a\x2c\x41\xbf\xce\x50\xce\xac\x03\x4c\x5f\xb8\x66\x90\x3d\x2d\xca\xda\x21\x78\x0d\x11\x0c\x2f\x8c\xb8\x60\xa9\x62\xf0\x23\xf6\x93\x77\xa2\xc1\xa3\x29\xd7\x0c\x48\xef\xa2\x6d\xef\x14\x61\x26\x69\x0f\x69\x85\xa5\xba\xa7\x90\x3a\xa0\x15\x4a\x1b\xc2\xa5\x39\x8d\xfd\xf3\xf5\xaf\x81\xa5\x38\xe1\xf0\x32\xa8\xbf\x0b\x2a\x57\x41\x83\x68\x9c\x18\x8f\xc9\xb8\xfd\x9d\x10\x71\x41\xac\x9f\x65\xe3\x6b\x60\x1d\x63\xbf\xc7\xf2\x71\xc9\xf7\x30\x64\x52\x61\x16\x91\xb3\x04\xcb\x2d\x83\x90\x9c\x8d\xa3\x57\x96\x38\x6e\x6f\x1f\x6e\xee\x87\xdf\xad\xe1\xf2\xd5\x8f\x97\xc3\x80\xa2\x24\x77\xee\xb9\x89\xe0\x38\x46\x9a\x7d\xce\xb8\x71\x05\x5a\xc1\xbf\x80\xfe\x36\x79\x3d\x3e\xa0\xb2\x04\x3b\x5e\xa4\x23\x58\x3b\x47\xe8\x4a\xa0\x76\x21\x50\xa4\x57\x02\x05\x26\x0f\xb7\xd5\xe0\x59\x34\x05\x49\xac\x75\x2b\x4b\xb0\x9a\x72\x91\x1a\x2e\x5f\x9a\xb4\x69\x7c\x75\xa3\x94\x29\x22\x44\x9e\x29\xea\xb0\xdc\xab\x52\x2a\x54\x78\xe7\xb3\x4b\x22\x25\x9e\x91\x5d\x1c\xd0\x75\xca\xc3\xdd\x8f\xe1\x3f\xc1\xc1\xdc\x46\xf6\x2f\x8d\xd0\x45\xbe\x3b\x7a\xba\x66\x1f\x4d\x20\xcf\x0d\x4f\x68\xb4\x65\xc0\xdd\xc7\xfe\xf0\x62\x3c\xbc\xd4\x4a\x7c\xff\x7e\x70\x51\x12\x25\xe0\x59\xff\xe3\xfd\xe0\xd6\x82\x58\xf7\xbf\xbb\x18\x8c\xaf\xae\xcf\x07\x77\xe3\xb3\xeb\xcb\x9b\x8b\xc1\x9a\xc8\x9c\xc6\xc6\x97\xad\xab\xd5\x57\x4f\x97\x7e\x81\x1d\xd6\xbc\x2c\xb4\x97\x41\xd6\x18\xa6\x09\x38\xc1\xb9\x71\x86\x63\xc4\x78\x4c\xe0\x67\xe9\xac\x33\x1e\x39\x1a\x0d\xd5\x57\x49\x82\x70\xae\x78\x8a\xc1\x6b\x93\x2c\x46\x0c\x4f\x34\x6b\xc5\x49\x12\x84\x77\x89\x9c\x31\xcd\x62\x75\x63\x06\xa2\x3d\x4a\x88\x66\xe7\x59\x90\xec\x67\xfd\x06\x53\xca\x20\xd2\x36\xc5\xe2\xd1\xb8\x99\x8a\x2e\x8b\x43\x21\x11\x96\x23\xa6\xc7\x45\xac\x61\xa8\xcd\x0a\x9f\xb6\x7a\xab\x71\x75\x52\xfc\x48\xf4\xaa\xa4\x79\x34\x47\x99\xe0\x33\x41\xa4\xb4\xb6\xe5\x08\x33\x13\x80\x60\x5f\xd7\xd7\xd0\x88\x31\xae\x97\xc2\x99\xb0\x63\x92\x11\x16\x13\x16\x51\x93\xd6\x07\xbe\x7b\x6f\xda\x9c\x09\x9c\xcd\x91\xe4\xe0\xf4\x86\x65\x07\xfb\x95\xf9\xc8\xdd\x64\x66\xc6\xe6\x71\x68\x81\x16\xb9\xe6\x13\xd7\x20\x27\x9a\x55\x86\x8f\xdd\x65\xe8\xdc\x2e\xc6\x0e\x98\x66\x09\x51\x06\xac\x1f\x96\x1c\x36\x43\xaf\x75\x69\x3f\xf4\x36\xd5\x6d\x82\xbe\xb0\xdd\x98\xb1\xb4\x23\x3a\xae\xb1\x6c\xdb\x23\x85\xbe\xc7\x2c\x4e\x74\x2b\xce\x87\x51\x3e\x8b\x90\x8a\xd2\xd7\x54\xe3\x4e\xe3\x2e\xb7\x68\x84\x73\xb9\xcb\x35\x5a\xc9\xc5\x34\x56\xc1\xa3\x22\x28\x04\xc8\xdb\x26\x62\xc2\xea\x66\x9a\x45\xe2\x84\xdb\x55\x32\xaf\xe7\xa6\xfe\x13\x82\xd1\x34\x5c\xb3\x99\xa0\x2c\xa2\x19\x4e\xb6\xd2\xfd\x2a\xc1\xf8\x36\xc6\xfd\x6b\x3a\xd5\xe4\xf3\xcd\x92\xdb\x56\x11\x91\x42\x82\xb2\x1d\xa6\xdf\xc2\x0d\x2c\x49\x36\xab\x81\xc8\x22\x9a\x04\x0b\x9e\x1b\x7f\x1c\xac\x0b\x89\x6b\x8e\xea\x71\xdd\x76\xeb\x93\x81\xcb\x01\xd0\x5b\x6c\xb6\x89\xfc\x69\x5a\xbf\x4a\x2b\xb6\x77\x13\x8c\x87\x93\x9b\xfa\x36\xeb\x76\x20\x78\xf8\xaf\x55\xb4\x73\x89\x33\x4d\x33\x16\xb6\x1f\x17\x73\xb4\x4a\x92\xad\x0a\xe6\xe2\x67\x02\xdf\xb9\xcf\x0b\x69\xbf\x1b\xc5\x12\xda\x00\xa8\xe5\x4e\x4a\x31\x04\x41\x8e\xb9\xa5\xf1\x69\xae\x65\x59\x84\x21\x0a\x01\x7d\x4d\x8e\x67\xc7\xc8\x15\x61\xe8\xa1\xfe\xcd\xcd\xe0\xea\xbc\x87\x88\x8a\xbe\x71\x31\x8b\x36\x60\x69\xc4\x14\xb7\xd2\xca\xc2\x15\xd0\x48\x89\x98\x91\xd2\x9c\x5d\x74\x13\x84\x2a\xcf\xa8\x54\x36\x7c\x56\xf3\x95\xa0\xd4\x09\x4d\xab\x62\xb6\xa1\x90\x5c\xcd\x77\x21\x0d\x2c\x65\x9e\x6a\x5d\x76\x4c\x71\x3a\x16\x3c\xd9\x85\x29\x9c\xc3\x54\x40\x5d\xf6\xe9\xf9\x14\xa7\x48\x37\x6b\x43\x41\xbc\xcb\xd1\x8b\x74\x5a\x30\xd2\x7c\x59\xdf\x9b\xc1\xbd\xe5\xbc\x0f\x36\x1e\x8d\xba\x10\x08\x48\xdf\x6f\x60\x15\x85\xd9\x78\x6c\x2d\xf5\x63\x1c\x45\x5a\xe5\xde\xf3\xa4\x82\xfa\x39\xce\x25\x60\x3b\x7a\xb1\x69\xae\xa3\x73\x37\xcc\x4c\x73\x30\x08\x06\xd6\x57\xae\xe4\x11\x2d\xda\xaf\xe9\x77\xb2\x58\xea\xd5\x55\xb8\x79\x90\xde\xa4\x62\x2e\x61\x49\x60\x27\xa5\xa9\x90\xa3\xe6\x64\x81\xe6\xf8\x89\x94\xba\x74\x09\x31\xba\xe1\x05\xcf\x45\x1d\xa3\x1b\xb1\x73\x92\x09\xa2\x25\xfd\xaa\x03\xc5\xd3\xf4\x6d\x99\x12\x3b\xba\xee\xe8\xfa\xdd\xd3\xf5\x99\x29\x94\xd4\xf7\x85\xb1\x76\x12\xe0\x4c\x63\xe3\x8c\xf3\x64\xdc\xc2\x26\xd2\x7e\xc5\x4b\x9e\xb0\x4a\xd9\x28\x80\x04\xe0\x39\xc8\x47\xa5\x6b\x93\xeb\xbb\x2e\x48\xb1\xb5\xc3\x5b\xb1\x0c\xce\x65\x16\xd4\xcb\xd9\xe5\xbc\xd7\xb5\xb2\xaa\x25\xf4\xe2\x62\xce\x99\x91\x6f\xbc\xbb\x2c\xac\x7f\x5a\x3a\x4c\x4e\x14\xa1\x6c\xa9\x1a\x9b\xa1\x67\xbd\xc0\x46\xee\xf8\x47\xce\x15\x96\xdf\x1c\x8f\x98\x16\xa2\x1e\xc9\xc2\x98\x5b\xb5\x98\xf2\x3b\x2d\x8b\x1f\x49\xc2\x24\x84\x7b\xff\xce\xb8\xe7\x34\x89\x3b\x73\xb5\x51\x4d\x4d\x11\x38\x08\xba\xf6\xbd\x40\x88\xae\x6d\xd4\x4a\x49\x45\x00\x34\xc8\xf9\x66\x2e\xf6\x99\x19\xfe\x8c\x28\x48\xb1\x56\x54\x81\xce\x14\x9b\x2a\x73\x4b\x43\x5f\x6b\xba\x32\x54\x21\x38\xf8\x49\xe2\x7c\x37\xc6\x2f\x97\xdb\x58\xcb\x19\xbd\xb6\x70\x67\x63\xde\x4f\x9c\xdd\x28\x12\x7c\xa9\x74\x1b\x96\xc8\xec\xf4\xc4\xb0\x03\xe7\xbf\x26\xec\xf8\x99\x3e\xd2\x8c\xc4\x14\x43\x04\xbc\xfe\xd7\x89\x9e\xd7\xbf\x9f\xdd\x5e\x5f\x8d\x8b\x4c\x9e\xff\x1a\xb1\x7e\x22\xb9\xcf\x52\x40\x8c\x33\x1f\x6e\x9f\x09\xe2\x44\x42\x3b\x17\xb0\xba\x16\x66\xc4\x11\x6b\x1a\x41\xcc\x23\x79\x8c\x9f\xe5\x31\x4e\xf1\xaf\x9c\x81\x2b\xbd\x0f\x7f\x9e\x25\x3c\x8f\x7f\xc2\x2a\x9a\x9f\xc0\xb9\x56\x27\xe4\x89\x30\x65\xdc\x54\x7a\xb9\x62\x48\xde\x95\x10\xad\xff\xef\x7a\xcc\x45\x52\x91\xd4\x9a\x6c\x44\x32\x85\xfe\x1f\x41\x26\x9c\xab\xfa\x4b\x8a\x4f\xa7\x92\x6c\x74\x21\x15\x4a\xda\xdd\x35\xfa\xcb\x9f\xbf\xfd\x83\x26\xa1\x6d\xd6\x78\x78\x77\x3d\xd6\xdf\xff\xfb\xb9\xfd\x5e\x6e\xc0\xee\xae\xb3\x82\xb5\x39\xe2\x31\x81\xf3\x39\x83\xdb\x4f\x80\xf3\x02\xd8\x1b\x90\x43\xb1\x8f\x75\xdc\xed\xbc\xd4\xfa\x6e\x2a\xdb\x56\x8b\x09\x2a\x76\x30\x47\x74\x84\x18\x47\xa9\x89\x35\xc5\x0c\xfd\xc7\x0f\xdf\xd5\x6f\x60\x2e\xe8\x56\x1d\x52\x0b\xd7\x10\x74\x29\xe9\xaf\x44\x22\x4d\x35\x9a\x8a\x79\xaa\xbb\x16\x44\xce\x79\x12\xa3\x67\x02\x6a\x92\x8d\x03\xf5\x5a\xb9\x20\x23\x16\x36\x01\x21\x87\x08\x27\x8a\xcf\x08\xdc\xd5\x4e\x51\x53\x44\x68\x51\xc5\x64\x69\x28\x2e\x48\xcf\x40\x7d\xdd\xfd\xc9\xc5\x56\xc3\x34\xe1\x91\x4b\x6a\xb1\x26\xb9\x78\x52\x3f\xf3\x69\xd5\xf4\x8a\x9a\x6d\xf8\xd5\x4d\xb6\x66\xdb\xfa\xa5\xb1\x49\x28\xd6\x86\x55\xdd\x99\xfa\xc1\xd0\x88\xb3\x71\x42\xd9\xe3\x56\x9b\x71\xed\x44\x39\xdd\x82\x5d\x33\xdd\xa2\xb7\x73\x1b\x0b\xc8\x06\xe7\xe3\x63\x9e\x24\x26\xb5\x25\xdc\x1e\x90\xbb\xcc\xba\x81\x30\x90\x99\x1c\x50\x12\x5b\xbf\x97\xd5\x84\x05\x61\x10\xf0\x36\x62\x93\x85\xf5\xd9\xca\x1e\x92\x79\x34\x77\x99\x79\x11\x67\x52\x8b\xd1\x5c\xa0\x88\xa7\xa9\x29\x6e\xca\x08\x52\x9c\x27\xd2\x46\xbb\xb3\x23\x85\x23\x35\x62\x45\x7f\x6b\x4e\x9e\xa9\x80\xb4\x5b\xea\x5e\x7b\x97\x4e\x51\x69\x69\xa5\xc0\x4d\xe3\x10\xb3\x01\x8c\x60\xc6\x13\x15\xa0\x3f\xf0\xe5\xb3\x64\x36\xac\x41\x33\x90\x73\x2e\xd4\x38\xae\xe5\x39\x6b\x89\xa6\xca\x08\x19\x39\x4a\x20\x68\x98\x3f\x69\xe1\x9f\x3c\x7b\xe3\xeb\xaa\x21\x68\xaa\x5e\x35\x82\x76\xc7\x68\xe5\xc8\x36\x25\xc1\x86\xb5\x32\x08\x1e\x51\x39\x26\x7c\xdd\x18\xef\xe0\xab\x33\xfd\xd1\xca\xc5\xab\x9e\x3b\x27\x04\xf1\xb8\x00\x9b\x33\xf7\xba\xcd\x08\x59\xb5\xa6\x16\x3a\xe1\xe5\x32\x47\x57\x4d\xe5\xa1\x6c\xc9\xd5\x63\x01\x93\xbd\x24\x20\x6b\x62\x31\xa1\x4a\x60\x51\x42\x0a\xf1\xfa\xa0\x24\x58\x40\x7c\xd6\x88\x19\xdc\x38\xa3\x29\xc4\x28\xa6\x12\x12\x44\xe0\x2e\x0d\x9c\x61\xa8\x9d\x12\x58\x39\xda\x45\x9e\xa3\x89\x3f\x87\xc0\xb2\x82\x34\x1c\xb3\xd3\x1d\x79\x7c\x2c\xad\x9f\xf1\x28\x2f\x04\xb9\x08\x24\x5c\x8b\xa9\x83\x28\x93\x74\x36\x57\x88\x32\x6b\x77\xc4\xc9\x8c\x0b\xaa\xe6\xa9\xec\xa1\x49\x2e\xb5\x16\x6a\x82\xd5\x4c\x3c\x0a\x51\x51\x2b\x2e\xb4\x6b\x12\x71\x5c\x69\x70\x59\x45\xd9\x82\x34\xda\x1d\xca\x41\xe5\xae\x58\x43\x38\x7d\x8f\x33\x58\x6d\x83\x42\xdd\x46\x03\x4f\x89\x4c\x1c\x20\x77\xc8\x4e\x50\x05\xa4\xe9\x1c\x00\x2a\xe4\xde\xbc\x14\xaf\x51\x88\x0b\x99\x64\x50\x41\x5c\xec\x36\x48\x5e\x65\x64\x4a\x83\xde\xe4\x9d\x4e\x69\xa6\x6a\x03\xb7\x96\x5d\x45\xb7\x01\xe6\x4f\xbb\xc5\x86\x64\x2c\xa0\x66\x40\x6a\x1b\xb1\x3b\x42\x9a\x81\xdc\x96\xf6\xde\x94\xc6\x85\x29\xd8\x44\x8f\xd5\x24\xbf\x8b\x13\xfb\x7c\x70\x77\x76\x3b\xbc\x31\x90\x13\xd7\xb7\x97\xfd\xfb\x71\x8d\x5f\xbb\xe6\xad\xcb\xfe\xed\x0f\xe7\xeb\x5f\xfb\xfe\xbe\x9c\x95\x5d\xf3\xca\xed\xdd\xea\x64\x8e\x16\x43\xac\x49\x0a\xab\xed\xe7\x14\x65\x0b\x35\xe7\xcc\x87\x28\xc4\x25\xde\x74\x84\x4c\x46\xb0\x82\x10\x22\x21\x55\x8d\xe3\xf0\x1e\xe2\x72\xd6\x4b\x98\xe5\xcd\x32\x30\x6c\x7b\x15\x8d\x36\x38\x91\x9f\x12\x3e\x01\xbf\x75\x5e\x2a\x71\xbb\x22\x02\x7d\xc7\x78\x9f\x73\x2a\xb3\x04\x2f\x96\x7a\x58\x77\xe5\x5c\xe1\x94\x40\xc4\x71\x81\x1f\xe7\x92\x45\xf4\xce\x40\x02\x93\xbf\xd7\xe9\x14\x32\x99\x14\xc5\x8a\xa0\x09\x51\xcf\x90\x37\xe7\x7e\xf5\xb6\x54\x17\x30\x22\x8f\x47\x0c\xcc\x39\x23\xbd\xc8\x71\x0e\xd1\x7e\xa3\x0f\x3d\x34\xfa\x10\x93\x27\x92\xf0\x4c\xef\xbc\xfe\xa1\xe1\x92\x19\xa4\x98\x26\x57\x5c\x79\xcb\xdc\x2e\xfb\x29\x48\x44\x33\x90\xcc\xc7\x44\xb7\xfb\x7a\x82\x47\x89\x92\x1d\x3b\x83\x31\x20\x1c\xc7\x5a\xc9\x06\x56\xe6\x86\x57\x84\x00\xb1\x60\xea\xa5\x5a\x99\x9b\x88\x14\xde\xfc\x6d\x7a\x0c\xdb\x2c\x9b\x3d\x6b\x77\x80\x3d\xbd\xa0\x4b\x76\xd7\x8b\x5c\x6b\x25\x3f\x90\x05\xa4\x60\xdc\x60\x2a\xb6\x74\xcd\xd6\xc5\xbc\xbe\x88\x93\x76\x50\xd3\xd1\x01\xb9\x6b\xeb\xd7\x61\x37\xc7\xad\x8f\xd5\x7b\x2d\x2d\xd5\xc5\x72\xf9\x8e\x5b\xaa\xad\x0f\x4d\x4a\x6a\x63\x08\x03\xaa\x2a\x5e\x19\x89\x36\xd0\xb8\xfc\x00\xef\xf4\x77\x6b\x35\x15\x2f\xae\x45\x61\x4d\x7f\xd8\x05\x9b\x1c\x5f\xcd\xc7\x27\x6b\x47\x1c\x25\x5c\x96\xb1\x72\x5a\x0f\xfa\xcc\x7e\xba\x6a\xdc\x83\x90\x7c\xb5\x5c\xb8\x51\x40\x43\xcd\xc2\x57\xc0\x20\xcd\x3d\xa3\xac\x87\xcc\xbe\xdd\x43\x14\xa2\x2d\x41\x21\x4b\x0a\xe4\x00\x16\xa3\xc2\x0d\x32\x62\x45\xcc\x8a\x44\xcf\x24\x81\x30\xb7\x88\xa7\x19\x98\xf8\xed\x70\x6d\x4b\x24\x36\x11\xc3\x3d\xc4\x73\xa5\x1b\x33\x39\x39\xce\x88\x6b\x13\x7e\x0a\xb7\x87\xf1\xbd\xd9\xe0\x77\x0f\x2c\x6d\x68\xdd\xdc\xa5\x94\xa1\x4f\x44\x41\x2b\x00\xdc\x1f\x4e\x10\xf4\x84\x6a\x08\x65\xfd\xda\xef\x70\xa2\xec\x4c\x36\xd8\xf9\x02\x38\xe5\xbb\x84\x4f\x56\x1b\x09\xa0\x71\xf4\x70\x3b\x74\x16\xc9\x22\x7e\x2a\x40\x2f\x2e\x79\x14\x07\x37\xb7\x83\xb3\xfe\xfd\xe0\xfc\x18\x3d\x48\xa2\x97\xc7\x4f\x17\xf2\xab\xbd\x4a\x62\x46\x6e\x91\x58\x98\x54\x04\x37\x19\x42\x88\x10\xa5\x2c\xe8\x35\x8c\xa3\x0c\xd3\xb2\x9a\xb0\x01\x24\x85\x5a\x43\x1d\x00\x0b\x55\xe7\x69\x23\xf3\xd6\x9d\x40\x88\x93\x1a\xbf\x9f\x28\x35\x33\xde\x74\x39\x32\x6f\x1d\xf9\x94\x23\xfa\x5e\x7a\x32\x70\xb4\xd4\x9c\x50\x81\x5a\x4d\xcb\x10\xd5\xb8\xfd\x9c\x82\x10\xf7\x4b\x9c\xad\x4e\x3f\xc5\xcf\x25\xa2\x35\xa2\x70\xe0\xbb\x7f\xe9\x73\xe0\xd8\xda\xd8\xb0\xc2\xdd\x27\x58\x38\xb4\x0c\x6f\xf5\x7c\xd3\x64\x7c\x48\x67\x24\x0b\x27\x56\x19\x84\x8d\x63\x95\x08\xce\x0e\xfc\x42\x19\x2a\x5d\x89\x3d\x34\xa5\x9f\x6d\xa3\x45\x7c\xbb\x7b\x35\x08\x78\x68\x88\xa7\x9c\xe3\xe5\x33\xb5\x81\xd8\x70\x03\xdf\xaf\x14\x22\xb9\xd4\x22\x51\xa4\xc5\x25\x41\x22\x2e\xf4\x4d\x01\xdd\x16\x5e\x88\x75\x22\x83\xc2\x42\x2f\xca\xb2\x57\x66\xd5\xe9\x2f\x6a\x90\xc4\x58\x91\x23\x2d\x7a\xad\x49\x80\xb6\x39\x32\x90\x4d\x83\x55\x00\x07\x56\xdc\x3c\x13\x32\xc3\xcc\x85\x66\x37\x0c\xd7\x5d\x79\x3b\xb0\x2a\xad\x02\x61\x48\x0f\x03\xf9\x0a\x52\x7f\x4a\xe3\x90\x19\xac\xe7\xca\x71\xd8\xe8\x97\x43\x58\xb6\x67\xec\x83\x71\x1a\x06\x9b\x67\xf1\x21\x0d\x36\xc1\x52\x21\x3b\xa6\x26\x53\x44\xa0\x22\xbe\xac\x11\xb6\xa4\xdb\xb7\x55\xde\x34\x09\x95\xb5\x58\x02\x9e\x11\xe9\x70\x53\x0c\x4a\x8c\xd6\x69\x9c\x20\x6c\x4a\x31\xfb\xb3\x6d\x6b\x32\xbb\x5b\x22\x64\x26\x10\xa4\xbf\xdc\xf4\x31\xea\xb3\x25\xbc\x2c\x17\x97\x55\x5a\x2f\x73\x27\xe1\xe4\x19\x2f\x24\xca\x84\x81\x96\x31\x91\xfb\x6e\xf2\xa0\x81\x95\x3f\xf2\xa1\x10\xca\xa5\x4e\x20\xb0\xc5\xac\x0f\x9a\x73\x72\xef\xf8\x05\x5c\x79\x95\xa8\x72\x2f\x90\x17\xcd\x15\xb6\x8a\x16\xac\x4e\x91\x71\x34\xc7\x6c\x46\xc6\xce\xc8\xba\x8d\xb6\xa4\xdb\x39\x83\x66\xce\x6d\x2b\xf5\x97\xd3\x8d\x51\x98\x6c\xfd\x17\xf3\xaa\x37\x20\xea\x43\x20\x15\x9e\x11\x64\x46\xd4\xca\x2c\x5d\x8a\x18\xb3\x60\xc3\xa0\x27\xd8\x56\x07\xe5\x28\xfa\x26\xe1\x1d\x42\x9f\x2e\xf0\x84\x24\x6f\x13\x39\x01\x5d\x5b\xe3\x3c\x78\xeb\x4c\x36\x00\x41\xcf\x60\xcf\xaf\xb0\x0c\x6b\xbd\x17\x79\x5d\x6e\xc0\xaa\x79\x96\xaa\x9f\xef\x30\x51\x57\x2b\x64\x9b\xa9\x36\x55\x10\x09\xaf\xbd\xa0\xd2\x46\x9d\x81\x2d\xbc\xfe\xaa\x36\xe5\xed\x06\x12\x14\xfc\x68\x18\xc7\xce\x15\x3f\xd6\x4e\x65\x6b\x90\x81\x96\x55\xf0\x86\x53\xc4\x38\x23\x88\xca\xe2\x65\x55\x4e\x87\xf2\x10\x3d\x5a\xc4\x37\xc6\x17\x5f\xa5\xcb\x17\x5f\x7a\x69\x4b\x4b\x01\x9e\xe0\x6d\x03\x2e\xbf\x9b\x11\xad\xa8\x62\xb1\x00\x88\x4f\xc3\x87\xcb\x32\xdd\xda\x71\xee\x5d\xe0\xbe\x77\x08\xae\x41\xa4\xae\xe2\x08\xc4\xc8\xca\xe0\x90\xc1\x41\xb5\x2f\xd9\x8f\x2c\x4c\xcd\x88\x79\xcb\x06\x10\x22\x95\x28\xc5\x19\xf8\xf4\x18\x57\xc5\x57\x06\x76\x49\xf9\x2d\xec\x39\x41\x5c\x9a\x1a\x5a\x0d\x2b\xb0\xce\xb4\xe3\xae\xdf\x62\x5d\xcb\xf0\x96\x0e\x9a\x77\x46\x9f\x08\x73\x34\xdd\x73\x67\x42\x0f\xca\x75\x9a\x2c\x8e\x30\x84\x19\x93\x38\xf4\x7c\xac\xe6\x48\xc6\x20\x73\x08\xf6\xc8\xf6\x4b\x76\x5f\x1b\x46\x63\x40\xd2\x4a\xe8\xf6\x2e\x30\x3c\xa4\x52\x8b\xdb\x6b\x32\xc1\xb1\x44\xbf\x63\x5c\xfd\x2e\x40\x36\x76\xc6\x0b\xf8\xd4\x99\xa0\x7a\x4b\x25\x5b\xe0\xd0\x5a\xc2\x41\x38\x40\xd8\x5a\xbb\xf2\xbb\xc6\x06\x14\x81\xef\x2f\x2a\x8d\x0e\x96\xb3\xe0\x9a\x6a\x5e\x75\x1e\x7b\x54\xbd\x16\xaa\x06\x4f\x53\x56\xaf\x38\xe9\x25\x43\xa7\x5c\xe7\xa2\xf7\x7b\xd1\xca\x35\xbf\x84\x08\xb0\x0b\xb5\xa5\xad\x23\xa7\xd6\x80\x20\xd7\xdb\x25\xb6\xc9\xf3\x6c\x92\xcb\x45\x39\x74\xcd\x96\xc1\x68\x40\xf9\x3d\x1e\xb1\x8f\x5c\xd8\x2b\x58\xda\x3a\x03\x13\x1c\x3d\x1e\x11\x16\x23\x9c\xab\xb9\x41\xdb\xb5\x7e\x85\x85\xa5\x06\x2d\x69\x00\xd9\x78\x28\x0d\x2a\x23\x2c\x62\x57\xf1\xe2\x89\xbb\x51\x8c\x58\xd0\x08\x54\x32\x80\x42\x4f\x50\xaa\xb6\x49\xd5\x24\x52\xeb\x57\x4d\x6b\x51\x57\x84\x75\xa9\x04\xeb\xea\x73\x56\x2a\x2a\x0b\x35\x18\x20\xc0\x89\x4f\x97\x57\x67\xe8\xac\x8d\x4e\xbf\xd3\xf4\xbc\xec\x85\xe8\x59\x8d\xc2\x98\xa4\xec\x0c\xb4\xa4\xf3\xad\xe3\xb5\x25\xd4\xe0\x69\x2e\x20\x5c\xb7\xae\xcd\xaf\xa3\x39\x4d\x0a\xdf\xc5\x37\x3d\x3f\x4c\xdd\x64\x42\x9e\x48\x62\x30\xeb\x23\x01\x91\xf9\xc6\x6a\xf8\x2d\xfa\x3f\xa6\x30\x29\xfa\xc3\x88\x7d\x02\x36\x9c\x24\x0b\x40\xd4\xf4\x2d\x63\x55\x69\xe6\xb1\x76\x00\xca\xa6\x02\xa1\xf2\x40\xcc\x5e\xcf\xf1\x13\x19\x31\xd7\xcc\xff\x41\x8f\xe8\xf7\xe8\x0f\x4d\xea\x9d\x0b\xb0\x7f\x61\x3b\xc7\xc7\x20\x7c\x3d\xb8\xe5\x2c\xa3\xb4\xfc\xc6\x99\x41\x4a\x46\xc8\x1a\x64\x0d\x0f\x8c\x4d\xd9\x13\x8f\x96\xb2\x38\xc2\x53\x8b\x05\x61\x6a\xcc\x78\x4c\xc6\xa4\xc6\xa5\xb9\x82\x49\x68\x21\xe0\x8a\xc7\x64\xad\x43\xd2\x33\xd3\x9f\xc0\x74\x23\xf3\x89\xdf\x0e\x48\xf0\xf7\xd9\xdc\xde\xfa\x50\xa6\xb4\xfa\x91\x7b\xf4\xd9\x6d\xc6\xbd\xad\x33\xd5\x85\x89\xf6\xe0\x42\xb0\x03\xa8\x77\xe8\x25\x58\x39\xf7\x7a\xf5\x38\x56\x1d\x01\xfa\x65\x3d\x73\x7b\x59\x05\xb8\xba\x50\xfb\x44\xd0\x19\xd5\xf2\x7b\x7b\x87\x2d\x70\xc2\x6d\xbc\x19\x06\x64\xb4\x95\x3b\xa3\x58\x0a\x07\xb4\x72\xe4\xe9\xaf\x70\x42\x4e\x78\x5e\x15\xe0\xed\x02\x50\x19\xba\xfb\xad\xac\xbe\xd0\x7c\x78\x66\x32\x00\xc9\x9c\x9a\x9c\xfb\xfe\xd9\x05\xd2\xa7\x83\xa7\x06\x98\x0a\x16\x2d\x57\x73\x2e\xe8\xaf\x8d\x19\x4a\xcd\x32\x7a\xe1\x69\x2d\x12\xba\xcc\x38\xcb\xd2\x3a\x10\xab\x11\x29\x54\x49\x2b\xa9\xd3\x99\xd0\x24\x07\x0c\x56\xcd\x66\xa7\x79\x62\x0a\x37\x44\x5c\xc4\xa6\x72\xba\x2c\xa5\x8f\x41\x18\xae\x13\xef\xb1\xf2\x0d\x52\x0b\x55\x69\x4b\x43\x18\x0b\xce\x4a\x01\xf4\xaf\x39\xc9\xf7\x94\x81\xf7\xa6\x31\xcb\xf7\x78\x26\x8b\x20\x64\xb3\x36\x9a\x37\x17\xeb\xfb\x0f\x3d\x53\x19\xe4\xac\x3a\xcb\xa2\x87\x80\x32\x2a\xb9\x29\x0c\xba\x91\x45\xe7\xd6\x40\xdf\xef\xc1\xa4\xf3\x1a\xf1\x1c\xcb\x32\x52\x0d\xfb\xb1\xe4\xf7\xe4\x33\x38\xab\x2c\xe2\x85\xec\x24\xae\x86\x40\x45\xfa\x78\x41\x93\xc9\x16\x4c\x6e\x59\xa8\x5e\x19\x15\x5d\x18\x50\x3c\x5b\xab\x49\xa6\x56\x1c\xd2\x2e\x9e\x05\x05\x84\xb8\x45\xf1\xb2\xaf\x81\xeb\xae\x8b\x90\xc7\x68\x29\xc5\x88\xb5\x10\xd7\xe1\x96\x70\x51\xcf\xe3\x37\x30\x40\xd8\x86\xca\x5d\x2f\xfb\xed\x9b\x4e\x84\x61\x49\x87\x7a\x24\x96\xe1\x61\xd6\x1e\x06\x5f\x09\xe4\x6d\x0c\x88\x5e\xb4\x79\xbd\x93\xe1\xc9\x71\x1c\xe1\x68\xde\x38\xa9\x09\xe7\x09\xc1\xac\x49\x7a\xad\x7d\x5c\x3d\x22\x06\xdc\x14\x58\x77\x92\x00\xc2\xaf\x5b\x02\x5b\x15\xb2\x10\xdf\x59\x0c\xc8\xec\x86\x87\x9b\xd8\x40\x37\x50\x45\x98\xb3\xfc\x50\x36\x4b\x48\x75\xad\x2c\x84\x7e\xcf\x76\x92\x44\x79\x12\x94\x85\xcc\x88\xd0\xa3\xd6\x4b\xfc\x44\x98\xd6\x19\xec\x38\x9c\x33\xe3\xd9\x25\x44\xfb\x62\x50\x3d\xdf\xb5\xf3\xa7\x41\xd6\x61\x3c\x62\x70\x70\x79\xf9\xb0\x6a\x5a\x95\x5a\xcd\x08\xed\x52\x5b\x9f\xce\x40\x88\xd8\xf8\x78\xde\x95\xcd\xc4\x1b\x9f\x49\xd3\xf7\x18\x62\x0c\x76\x76\xad\x05\xee\x97\x02\xaa\xc1\x6c\xac\x83\xe3\x7a\x25\x23\x32\x44\x6d\x94\xc3\x4e\x83\xa0\x8d\x26\x38\xa8\x17\xbd\x4b\x8a\xf2\x17\xee\x36\x68\x39\x94\x95\xae\xea\x96\x8e\x67\xb0\x4e\xae\x3a\xb7\x17\x36\x64\xbb\xec\xb2\xf5\xf9\x3d\x45\x98\xa3\x2d\xf0\xaa\x04\x06\x74\x02\xc8\x29\xff\xc9\x68\xd8\x54\x1a\x0b\x98\x2b\x73\x91\x66\x6a\x61\xab\xa2\xc1\xbd\x18\xe6\xf4\x1a\xc4\xb7\x3a\xf7\x70\xf5\x8e\x8c\x4b\x0e\xe2\xba\xce\xa0\x23\x6b\x56\xa8\x6d\xd2\x2d\x74\x88\x20\x52\x41\x6c\x68\x8a\x06\x31\x05\x66\xc7\x38\x69\xb4\x65\xed\x81\x69\x42\x9a\x6d\x81\xd2\x60\xc1\x5f\x95\xc8\x89\xe6\x5d\x38\x49\x2a\xf3\xc2\x90\x0e\xad\x7c\x91\xb9\x49\x51\x09\xb7\xbd\xb3\x3a\xc1\x13\xb2\x91\x7b\xfa\xc2\x7c\xb0\x92\x8a\xe0\x15\x88\xec\xce\xb2\x64\xd1\x2e\xa2\x3c\x0c\xbd\xab\x05\x49\x5b\x37\xb0\x10\x5a\x6d\xe5\xdd\x54\x86\x27\xdb\x6e\x88\x92\x44\xb9\xa0\x6a\x31\xb6\x46\xbf\xf6\x4c\xeb\xce\x7e\x79\x66\x3f\x6c\xa3\x51\x9f\x22\xd7\x9f\x33\x32\xc2\x3d\x25\xa8\xa9\xa0\x63\xa7\xd0\x66\xbb\xb5\x96\x5c\x0b\x9e\xb4\x6a\x61\x1d\x7a\x53\xbb\xa1\xea\x2e\xb6\x1d\x9e\xad\xcc\x31\xe6\x53\x87\x8b\xd4\x7e\x61\xab\x25\x4b\x36\xb0\x96\x3a\xf8\xe5\x4c\x50\x2e\x6c\x65\x90\x36\x41\x6d\x29\xfe\x3c\xce\xb0\xc0\x49\x42\x12\x2a\xd3\xed\x6d\xbb\x7f\xfa\xe3\xca\xd1\x9e\x99\x0a\x36\xd2\xd6\x83\xfa\x4c\xd3\x3c\x45\x2c\x4f\x27\x56\xca\xc5\xf2\x31\x04\xbf\x74\xa9\xfa\x06\xc3\xc9\x0d\xb0\x04\x18\x20\x02\x38\xd3\x11\x0b\x80\xad\xad\xa9\x02\x47\x73\x4a\x9e\x00\x76\x53\x30\x22\xe5\x31\xba\xe2\x8a\x9c\xa2\x4b\x9c\xdd\x83\xa0\x66\x4a\x4a\xce\x8c\x75\x1c\x4b\xa4\xa5\xd6\x9c\x51\xd5\x1b\x31\x8b\x86\xed\x56\xe5\x24\xe2\xcc\x20\xa2\x46\xb0\xb0\xbe\x09\x30\xf7\x3a\x68\x50\xe5\x12\x1b\xa9\x6c\x58\x6c\x81\x9f\xc7\x41\xf4\xea\xd8\x64\x07\x6c\x40\xc7\xb7\xf8\xd9\xc4\x6b\x9f\x63\x85\x4d\xb5\xd8\x55\x92\xbb\x0d\x88\xb2\x15\x84\x0c\x10\xb0\x0b\x1c\xe1\x16\x8d\xc2\xd7\x3e\x33\xd1\xa9\x5f\xd3\x63\x72\x8c\xbe\x4b\xf8\x44\xf6\x90\xf4\xa0\xd9\xf0\x50\x12\x25\x7b\xc6\x41\x05\xff\x36\xa9\x60\xdf\xb8\xd5\x2f\xf8\x3e\x94\xfd\x9b\xd2\xcf\x06\x04\x43\xfe\xe9\xf4\xe4\x24\x5d\x1c\x4d\xf2\xe8\x91\x28\xfd\x17\xc8\x14\xb5\x2b\xe4\x10\xa4\x70\x1d\x1e\xd5\xba\xd5\x59\xc6\xb2\x6a\x45\x91\x36\xad\x46\x12\xc0\x4d\xd7\x57\xba\x2f\xac\xea\xa0\x8f\x38\xab\xaf\x1a\x69\xa7\x2c\xf2\xa6\xe3\x55\x02\x5c\x7e\x1d\x6d\xc5\x14\x8e\x0d\x71\x9e\xa7\x09\x9e\x55\x54\x96\x0d\x94\x94\xeb\x94\x5a\x2a\xd2\x73\x87\x78\x0b\x7d\xca\xca\x51\x66\x5f\x39\x77\x24\xb8\x15\xad\xbb\xe5\x78\xc4\xfa\x12\x3d\x13\x53\x0f\x16\x72\x12\xc1\x3b\x91\x53\x39\xf7\x19\x89\x60\x2f\x85\x46\x0d\x1c\xae\x41\x4d\xb0\x8a\xa3\xd3\xac\x9c\xff\xc6\x6a\xa0\x38\x91\xa4\xa7\x1b\x06\x48\x34\x17\x48\x88\x9e\x05\xce\x32\x22\x46\xcc\x42\x9b\x02\x80\x37\xe7\x36\x48\xa4\x29\x9a\xbc\xd3\x28\x5f\x57\xa3\x0c\x93\x3e\xca\x09\x8b\xeb\xce\x37\xe4\x37\xae\x4c\xf5\x58\x91\x1b\xa8\x65\xd1\xb6\x91\xde\x6f\x6f\x36\x6e\x39\xe6\x75\xda\x79\xbf\x12\xa6\x0f\xe5\xa6\x53\x50\x20\x65\x51\x55\xd3\xd9\xfa\xbc\xfa\x5e\x12\x73\x00\x19\x1b\x3e\x8e\x39\x91\x81\x11\x1f\x79\x5b\x5c\x42\xa7\x44\x4b\x1f\x23\xa6\xc9\x38\x74\x38\x18\x80\x6d\x87\xb7\xad\x3b\x8d\x04\x97\xd2\x46\xde\x9b\x76\x56\xe7\x4f\xed\x50\xcb\xcf\xa0\x84\x0f\xaf\xaf\xc6\xcb\x55\xfd\x82\x67\xae\xbe\x9f\x7d\x58\x9b\x64\xdf\xd8\xd4\xda\x6a\x7e\xc5\x5a\x6c\x50\xcf\xef\xe4\xec\x62\xe8\x8b\x58\x55\xba\x5e\x2e\xe8\x17\x22\xab\x37\x97\xf4\x5b\x9e\x71\x50\xdc\xaf\xd2\xc4\x8a\xf2\x7e\xeb\x37\xab\x1c\xef\xbb\x0b\x6c\x5e\x65\xeb\xd7\xf2\x87\x32\xcd\xac\x0b\x4b\xdf\xd3\x36\x35\x5c\x2b\x11\x08\x8c\x2f\xed\x61\x07\xc1\x4b\xbf\x25\x15\x4e\xb3\x30\xe5\xd2\xe1\x86\xda\x69\x9a\xa3\xd6\x74\x09\xbe\x2a\x9e\x79\x84\x4d\x34\x4b\x75\x70\x4b\x5b\xb1\x99\xc7\xeb\xde\xc2\xa4\xef\x23\x8c\xf9\xf5\x72\x98\x93\x45\x11\xb5\x27\xad\xec\xe6\x4a\x70\x37\xd8\xfd\x27\xc4\x43\xc2\x37\x6e\xe8\xae\x49\x8a\x1e\x3a\x4a\x10\x2c\x6d\x38\x06\xe4\xf2\x55\xf2\x7c\x36\x30\x0f\xfb\x31\x9b\x6c\xe0\x23\x5f\x84\x21\xb8\x6a\x6c\x5d\xb1\xc8\x1d\x44\x2a\x04\x79\x22\x02\x68\xc7\xc6\xfc\xb0\xf2\x51\xc5\x89\x20\x38\x5e\x04\x2b\xe2\x03\x0e\x4c\xcf\x60\x1e\x93\x34\xd5\x0a\x3c\xa8\x26\x8c\x1f\xf1\xcc\xe9\x2c\xa5\xb7\xa0\x82\x06\x9d\xea\x1b\x2b\x08\x57\xd0\x5f\xb0\x23\xf2\x99\x4a\xa5\xe5\x8a\x9a\x58\x4d\xd7\x08\x48\x3c\x50\x57\x6b\x4e\xec\x0d\x37\xfa\xd0\xff\xee\xfa\xf6\x7e\x70\x3e\xfa\x50\x44\xe7\xbb\xf4\x33\x8f\x08\xe5\x00\xfe\x39\x1b\x31\x1f\x50\xeb\x01\x90\x61\x2f\x11\x8e\xe3\x02\xd9\xc0\x2a\x91\x46\x66\x5b\xc9\x91\x83\x53\xb1\x36\x94\x76\x45\x33\x0f\x90\x83\x74\xa8\x27\x6b\x85\xeb\xac\x74\x72\x4c\x26\xd5\x8a\x94\x97\x3d\x5d\x36\x21\x76\xab\x32\xba\x36\x51\x0e\x5c\x90\x91\x67\xa7\x2b\xc1\xed\x7c\x82\xcd\x25\xbc\x19\xb7\x73\x1b\xb2\xc5\xa6\x7e\xa4\x9f\x49\x7c\xdb\x20\x55\xed\x25\xa3\xa5\x55\x24\x60\xed\x2e\xe4\x8c\x6e\xa2\xf1\xfb\xa9\x3c\xe8\xef\xda\xb3\xa5\xeb\x02\x92\xad\x80\x57\x05\x6c\x55\x85\x30\x8a\x88\x50\x98\x32\x34\x85\x83\xcd\xa2\x05\x02\xc0\x0e\x02\x3e\xec\x3f\xa2\x94\x32\x40\x0e\x58\xb5\xb4\x0f\xe5\x79\x6c\x20\xb4\x5e\x0e\xaf\x1e\xee\x4b\xa2\xea\xf7\xd7\x0f\xe5\xa2\xee\xfd\x9f\x57\xca\xaa\x95\x16\x56\x05\x0b\x05\x53\x2c\xb2\x10\x2d\xca\xac\x5f\x99\xda\x89\x26\x0b\x45\x1e\x6e\x2f\x76\x92\xef\xea\x9d\x65\x8d\x18\xe1\xa1\x74\x55\x8f\x88\xd0\xe6\xd3\x98\x44\xeb\x50\x4c\xdb\xd3\x91\x89\x82\xd2\xeb\x60\xad\x89\x16\xe1\x0c\x4b\x94\x61\x61\xfd\x50\xb1\x09\x80\x2a\x57\x06\x33\x9a\xd7\x2a\x04\x89\x4f\x44\xfd\xa8\xaf\x3e\xce\xf6\x91\x05\x61\x45\x59\xf0\x8f\x92\xf1\x93\x69\x78\x83\x93\x66\x87\xb2\x22\xd5\xc5\x09\xcb\xd0\x03\xb2\x3d\x84\xb8\x0b\xc7\xa6\x42\x7c\x5f\x37\x07\x2b\xe2\xe2\x09\xb5\x4a\xca\x99\xa6\x48\x03\xa7\xea\x30\x58\x83\xe6\xf8\xd4\x7c\xdc\x12\x91\x2e\x88\x6a\xd7\x6d\x15\x4b\x89\xfa\x37\xc3\x9a\xb5\xbe\xa8\xba\x90\xbe\xac\x72\x36\x89\xf7\x66\xed\x1b\x24\x29\x48\x4f\x3c\x08\x54\x24\x3b\xd3\xdd\x60\x90\x8c\xd3\xff\xa6\x1c\x49\x70\x08\x68\xbd\x75\x2a\x43\x29\xed\x78\x0d\x30\xef\x66\x99\x78\xc5\x32\x6c\x08\x7a\x14\x0e\xc8\xa6\x81\x84\x40\x3f\xcb\x31\xc6\xbd\x10\xf8\x87\x9b\x82\xb9\x36\xb6\x60\x6f\x60\x48\xc5\x6c\xda\xa0\x21\xfd\x68\x28\xda\x83\x65\x00\xfc\x87\x2b\xc8\xe8\x62\x83\x6d\xee\x7a\x38\xdd\x90\xda\x36\x03\x50\x2a\xc6\xe7\xcc\xdf\x16\x8b\x1a\x67\xd8\xda\x1d\x40\x89\x72\x95\x12\xea\x0a\xeb\x1d\x8f\x58\x10\xb0\x22\x8d\xda\xa3\xcf\x88\x2b\x4e\x02\x15\x6f\x19\x00\x5b\x43\x92\x8e\x17\x7e\x4a\x3b\x50\x4d\x91\x57\xf3\x72\x79\x91\xa5\x7e\xec\xe9\x94\x73\xec\x12\x11\x9d\x05\xc5\xc6\x01\x86\xf6\x25\x68\x2f\x28\x28\x60\x3b\x06\x73\x34\x18\x2d\x70\x50\xae\x2e\x48\x5e\x8f\x39\x91\xec\x2b\xe5\x53\x3d\x69\x62\x4b\xa2\xe0\xaa\x7b\x40\x4b\x75\x98\xda\x96\x57\x1f\xf0\x3d\xa0\x33\x6d\xaa\x38\x04\xc7\x6a\xad\x99\xca\xf9\x78\x81\x12\xc2\x58\x24\xe8\xb4\xc9\xaa\xfe\x39\x23\xd1\x36\x10\x32\x37\x58\xe0\x94\x28\x22\x56\x85\x23\x95\x8b\x49\x83\x88\xe3\x76\xd0\xf6\x6b\x76\xd1\x54\xda\xa8\x96\x64\xf1\xda\xed\xc5\x3a\x48\x18\x3f\x8b\x8d\xd0\xaf\xf4\x34\x7e\xb4\x96\xff\x0d\x67\x61\xfb\x29\xa6\x61\xa3\xad\x02\x04\xa0\x5d\xe7\xf4\x3a\x50\x28\xf7\x4b\xa0\x22\xa5\x70\xa1\x03\xc1\x40\x59\x3f\xca\x26\xf0\x93\x75\xbc\x74\x2f\xbc\xdb\x65\x38\xb8\x14\xda\xca\xa1\x2a\xe5\x4e\x00\x95\x80\x4a\x65\x70\x40\xea\x01\x4c\x40\x68\xa9\x8b\x90\x0c\xdc\x7e\x16\xde\xae\x30\xe8\x5a\xc9\xaa\x5a\x5c\xaa\xb2\x5c\x6b\x78\xdc\xbe\xc0\x1d\x3a\x89\x66\xdf\x12\xcd\x3a\x52\x2e\x45\xd7\x6a\xea\x24\xa2\x82\x33\x63\x8b\x3e\x5b\x80\x80\xf2\x04\x21\xf7\xc8\x5e\x91\xb6\x72\x2c\x5c\xfd\x94\xf9\x7f\x95\x39\xb8\x23\xea\x90\x54\xeb\x92\x2a\x8f\x03\x17\x14\x78\xa0\x92\x50\x1a\xb0\x71\x35\x30\x5a\x13\x06\x69\xac\xfc\xc3\x2b\xe3\xc0\x82\xe4\xe6\x05\xcf\xd1\x33\x95\x73\xa4\xf8\x88\x41\x9c\xa0\xf7\x06\x28\x8e\xcc\x8b\x3d\x78\x0b\x60\x10\x64\x3e\x49\xa9\x42\x38\x98\x61\xc9\x24\xd9\xb3\xe7\x59\x7f\x00\x33\xae\xcd\xb3\xaf\x83\xe8\x59\x73\x68\xb6\xb0\xaf\x15\x8d\xec\x9a\x4a\x1f\xc4\x34\xbf\x6c\x32\x7d\xa0\xf1\x84\x1a\x66\xed\x99\xeb\xb2\xe9\x51\xbd\xb5\xc1\x82\x86\x02\xb2\x2b\x95\xaa\x72\xb7\x58\x43\xcf\x9a\x4c\xfa\x62\x23\x5a\xa5\xd2\x17\xaf\xef\x23\x97\xbe\xa9\x4c\xd9\xaa\xdc\x4a\xf7\x49\x83\xfd\xdb\xe5\xec\x2a\xee\x02\xe7\x43\x49\xe9\xa6\x51\x52\x3a\x34\x54\xb3\x22\x21\x60\xfb\xf0\xf2\x4d\xd4\xc1\x22\x3f\x2b\xa4\xa2\x20\xdd\xb2\x8c\x09\x43\xaa\x9c\x9f\x71\x05\x39\x35\x11\x94\x70\x5f\xca\xf3\x1c\xb1\x7a\x09\x64\x35\x4f\xdc\x35\x45\x63\xaf\xe8\x67\xc1\xf9\x73\xb3\xb0\x16\xad\x9f\x7c\x90\x9b\x51\x96\x6d\x31\xf6\xaa\x88\x59\xb8\xf8\x9a\x82\x93\xb4\xe0\xb1\x4d\xc2\x71\xcd\xa9\xac\x1f\xfa\x52\x02\xc5\xda\x73\x61\x2f\xdd\x3d\xaa\x76\x4b\xdc\xb9\x75\xbe\x89\x97\x91\x2d\x37\xb6\x01\xd3\xb1\xd7\xe3\x2b\xae\xda\x6d\xaa\xcc\x02\xaa\xe8\xde\xb0\x50\xab\xf0\x04\xba\xf1\x1e\xb8\x77\xed\xd8\xb1\x09\x75\xf1\x08\xdd\x95\x3d\x29\xcd\xd8\x56\xef\x7f\x89\x59\x6f\x5a\x1a\x38\xf0\x37\x0a\x1b\xef\x4b\x43\xcb\x01\xd4\x04\xb6\x61\x92\x15\x4e\xec\x85\xbb\x9c\xc5\x44\x30\x82\xd5\xfc\xf5\xb2\x2c\xce\x76\x35\x4f\x07\xe3\x7b\xd9\x8c\x8b\xb3\xbd\xd4\x85\x0f\x87\x5b\xae\x91\xbe\x76\x9c\xfa\xf5\x36\x96\x22\x1b\x7c\xe0\xab\x04\x2f\xa9\x8e\x35\x66\xc3\x00\x84\x66\x13\x2a\xdd\x29\x11\xa3\x5e\x9d\x7b\x99\x94\x94\x1a\xbb\xcf\x52\x32\x8a\x3e\xed\x61\x6d\xe5\x35\x4b\xf2\x45\xe4\x7e\xbc\x7c\x3a\xc2\xaa\x2a\xce\x79\x90\xa1\x00\xa5\xb4\x15\xa6\xcc\x72\xaf\x55\x49\x09\x5a\xa6\x4c\x71\x5d\x1e\xc2\xc1\x67\xb8\x7c\xf1\x09\x2e\x5d\xba\x43\x97\xee\x50\xb3\x47\x5d\xba\x03\x42\x87\x96\xee\xb0\x4e\x05\x5d\x65\x00\xf5\x3e\x39\xa8\xb6\x59\x2a\x71\x63\xf6\x77\x8d\x1e\xb9\x7d\x48\xbf\xb3\x21\x86\xf1\x50\xf6\x17\xfb\x43\x6d\x48\xd4\xd2\x67\xd5\xd9\x86\xf6\x4c\xb6\xa8\xba\x05\xb0\x88\x13\x8b\x43\x67\x03\x96\xcb\xf6\xa7\x55\xa6\xd2\x11\xfb\x9e\x3f\x93\x27\x22\x7a\x08\x2b\x94\x72\xa9\x80\x0f\xbb\xf8\x18\x38\x08\x25\x48\x73\x13\x07\x81\xd1\x15\x4e\x49\x6c\x2a\x1e\x06\x61\x8d\xd6\x60\x6b\x5d\xad\x75\x70\xab\x80\x1c\x6a\xb6\xc1\xc5\x4d\x8c\x98\x09\x35\x34\xe1\x6d\x20\x2b\x50\x37\x31\x20\x98\xdf\x79\x47\xf0\xef\x8e\xd1\xbd\xbe\x9f\xa8\x2c\x8f\x37\x40\x5f\x6b\x1a\xdb\x88\xcd\x04\xcf\x33\x6f\x43\xe3\x13\x53\xfa\xd6\x44\x3f\x2d\x3b\x82\x61\x30\xce\x0b\x1c\xe1\x58\xeb\xe2\xab\x09\xe7\x4d\xa2\x50\xb7\x82\x30\x0a\x09\x48\x1f\x43\x1f\x5a\x67\x43\xdd\x8d\xff\x36\x00\x6e\x59\x05\xc4\xfe\x42\xce\xe5\x73\x22\xc1\x2a\xe4\xad\xee\xa5\x3c\xf2\x32\x56\x41\xed\x38\x57\xd9\x44\xbd\xdf\xc2\xd9\xf6\xeb\x61\x10\x8a\xce\x6d\xcc\x97\x49\x52\xb5\xf7\xc4\x8b\x59\x4b\x5b\x47\xcf\x36\xf1\x8b\x9b\x5c\x64\x1c\x24\xb1\x64\xe1\x60\x1b\x2c\xd2\x5b\xc6\xb3\xdc\xc4\xb5\xd1\x30\xcc\xa9\x96\xb2\xa9\x54\x97\x58\x45\x73\xcd\xb9\x0b\xc4\xb3\x3d\xc5\xfb\x15\x5c\xf9\x65\x2d\xa8\x35\x33\x38\x0b\x7b\x6f\x70\x29\xb4\xb0\xa8\x9b\x7b\xdf\x85\xd7\x3b\x49\x22\xd5\xfd\x19\xb7\x9b\x2d\x68\x1d\xd8\x45\xdd\x27\xf6\x89\x9e\xe8\x3a\x2a\x5a\x37\xfe\x76\xb4\x55\xae\xb8\xb5\xf7\x48\xc2\x1d\x20\x64\xce\x2d\x60\x57\xf1\xa2\xad\xd0\xda\xe0\xfe\x17\x74\xbb\x2c\x20\x8b\x92\xff\xa4\xc5\x11\x6f\x71\x4d\x71\xa6\x95\x08\xc5\xf5\x2d\x29\x66\x46\x8e\x35\x71\xb2\x08\xa3\x5c\x50\x77\xf6\x2b\x39\xe1\xcd\xd4\x01\x16\xca\x93\xb0\xa2\x52\x84\x83\x62\x73\xc6\xe1\x8f\x23\x95\x63\x1f\x98\x08\x34\xe1\x8a\xa0\x9b\xfc\x77\xe7\x58\x17\x4e\xbc\xab\xd9\xd3\xb5\x84\xbd\xc3\x2e\xe3\x3a\x7c\xc3\x56\x27\x8d\xb2\x59\x00\x8e\x58\x6f\x25\x6e\x53\xfb\xa0\xf6\xcb\x76\xf5\x1b\x6a\x3f\x75\xb2\xcf\x36\xdf\xae\x00\x6f\xda\x3a\x36\xbb\x14\xe7\x6e\x03\x61\xad\xf4\x14\xc2\x56\x5a\xfb\x1d\xa0\xcf\x52\x70\xd4\x63\x2b\x4d\xfd\x97\xff\xcb\xd4\xca\x32\x4b\xf3\x5f\x88\x8b\x11\x33\xbf\xf7\x7c\x9d\x0a\xfd\x42\x01\x00\x8b\x53\x52\x40\x64\x8a\x32\x98\x1e\x40\x8a\x58\x30\x34\x03\xf6\xeb\x61\xfa\xf5\x18\x1e\xf3\x09\x11\x8c\xe8\xa1\x39\xf0\x01\xcf\xcc\x52\xcc\xf0\x0c\xa0\x85\x7b\x10\x19\x07\xe2\x6a\xa1\x8a\x18\x92\x36\xf5\x0e\x81\x5b\x69\x66\x69\xf3\x6d\x8b\xba\xbf\xd0\xa7\x11\x65\x2d\xb2\x69\x11\x5e\x51\x4f\xfd\xb7\xb6\xff\xed\x24\xf6\xfb\xfe\xdd\x0f\xe3\xdb\xc1\xdd\xf5\xc3\xed\x59\x49\x6c\x3f\xbb\x78\xb8\xbb\x1f\xdc\xd6\x3e\x2b\x72\x55\xff\xfa\x30\x78\x68\x78\xe4\x1a\xb8\xe8\x7f\x37\x28\x15\xd1\xfe\xeb\x43\xff\x62\x78\xff\xf3\xf8\xfa\xe3\xf8\x6e\x70\xfb\xe3\xf0\x6c\x30\xbe\xbb\x19\x9c\x0d\x3f\x0e\xcf\xfa\xfa\xcb\xf0\xdd\x9b\x8b\x87\x4f\xc3\xab\xb1\x0b\x3b\x0e\x1f\xfd\x74\x7d\xfb\xc3\xc7\x8b\xeb\x9f\xc6\x41\x97\xd7\x57\x1f\x87\x9f\xea\x66\xd1\xbf\xbb\x1b\x7e\xba\xba\x1c\x5c\xad\x2e\xd6\x5d\xbf\x1a\x8d\x75\x80\x83\x8b\x2c\x30\x1a\x05\x62\xd2\x64\x61\x49\x9b\xfe\x0a\xbe\x8b\x1b\x43\x8f\x47\x3d\xf7\x97\x29\xad\x7d\xa4\x59\xa0\xf3\x8b\x15\xdc\x63\xc4\xbc\xe3\xd2\x5f\xaa\x0a\xcf\xa4\x4b\x3d\x2e\x8d\xf6\x14\xf5\xe1\xac\x80\xc2\x50\xea\x14\x32\x1b\xfc\x48\x9d\xab\x1b\xe8\x30\xa1\x29\x05\xaf\x37\x3a\x42\xd5\x0d\x2f\x37\x68\xe7\x04\x43\xb0\x7e\xbb\x78\xd5\x69\x90\xd5\xac\x66\xa0\x94\x53\xe4\x38\x34\x31\xe6\x04\x83\x3d\xbb\x60\x38\xa5\x51\x35\x05\x03\xe0\x57\x51\x01\x35\x52\x6d\xb1\x44\x60\xe5\x96\xe7\x04\xfd\xf0\x97\x62\x50\xe0\xc1\xb0\x9a\x77\xbe\x54\x51\xcf\x3e\x10\xb9\x59\xd5\x75\xe4\x59\xea\xc9\x1d\x73\x6b\x5a\x86\x73\x6b\x2b\x77\x83\xbb\x29\x67\x01\xdc\x58\xc9\xf7\xa4\x8f\xb7\x99\x51\x85\xc6\x4f\xd1\x1d\x40\x9d\xc8\x42\x75\xd7\xbb\x98\x25\xf9\x8c\x32\x44\xd3\x2c\x21\x45\xcd\xf7\x09\x99\xe3\x27\xca\x5d\xf9\x0a\x53\xe5\x03\xd6\xd1\x8a\x56\xe8\x08\x35\x1e\x94\x53\xd4\x8f\x63\x59\x66\x70\x25\xca\x71\x2c\xf3\xa8\x3c\xec\x10\x21\x8c\xc5\x9e\x6d\x56\xe8\xa8\x38\x72\xb0\x62\xfb\x07\x73\x59\x66\x87\xe5\xbb\x77\x87\xeb\x5f\xaf\xe0\xd8\x91\xf2\x78\x2b\x61\xe0\x1e\xcb\x47\xc7\x9a\xd7\x09\x04\x0e\x56\x67\xb7\x1e\x2d\xbe\x4e\xdb\x4e\xfd\xca\x8e\xe1\xa0\x6d\xd7\x67\x23\x2a\xf4\x9a\x2e\xdd\x8c\x93\x4a\xe9\xae\xd6\xfd\x95\x4a\x7f\xd5\x76\xb6\x57\x6f\x4f\xbd\x34\x06\x47\x72\xec\xe9\x7f\x83\x79\xdc\xc0\xa7\xd7\xfe\xcb\x95\x22\xdb\x38\x58\xb7\x4d\x7d\x40\x4b\x49\xba\xd6\x0f\xb4\x92\x0e\xf7\x04\xef\xd4\x5e\x18\x84\xc2\x0b\x34\x02\x77\x1f\xa6\xcc\x96\xe3\x21\xde\x1f\xe5\x0a\x50\xeb\x73\xec\x4b\xc4\xe1\x09\x7f\x2a\x29\x97\x29\x91\x12\x37\x00\x96\x04\x26\xb1\x5d\x18\x83\x3f\xa1\xf6\xc3\x96\xf4\xe4\xce\xe4\xbd\xfe\x6a\x95\xd1\xe7\x36\xd4\x8c\xdd\x44\xb5\xc0\x1a\xbb\x48\x5b\x74\x6d\xf2\xed\x34\x7f\xe9\x15\xc1\x34\x5c\x04\x31\x46\x4d\xee\x9f\x96\x66\xb5\xea\x82\xd5\x56\x59\x0a\x5d\x78\x9b\xc7\xe0\x04\xad\x6f\x8d\x88\x6d\xfd\x2a\xb8\xbc\x3e\x1b\x50\x5d\xc9\xdf\x19\x56\xa0\x8e\x78\x9a\x1a\xb9\xa0\x64\x4b\xed\x21\x6c\xd2\x1c\x0b\x69\x4a\xe6\xd1\xdc\x78\x99\xf4\x95\xd1\x1b\xb1\xe7\x60\x43\x4a\x81\xc0\xfd\xb0\x25\x40\x13\xfd\xac\x8f\x1b\x7d\x2a\x85\x57\x83\xc8\x48\x21\xd6\x37\x20\x04\xe3\x10\x2c\xca\x47\xad\x21\xf0\x60\xbf\x76\x20\xf5\x2d\x6a\x05\x56\xd6\xb7\xa9\x62\xa0\x9f\x5b\x50\xa8\x6f\x07\x4d\xb9\xed\x10\x82\x5a\x81\x75\x23\xd8\x43\xa9\xc0\x57\x85\xf7\xf6\xe9\x9a\x26\xbb\x37\x9d\x58\x8c\x0a\x3d\x5d\xb7\xda\xbf\x77\x33\xfa\xbd\xf1\x3b\xe4\x0d\xa0\x26\x41\x6b\x1e\xe1\x1b\x1d\x69\x99\xd5\x25\xdb\xdb\x40\x0c\x89\x8e\x0c\x6a\xe0\x57\x10\x69\xd9\xbf\x19\x7e\xd5\x43\x5f\x85\xd9\x66\x5f\x6d\x75\x00\xed\xb8\x6d\xb9\x40\xd0\xa6\x4a\x29\x07\xe5\x63\x07\x7b\x55\x39\x89\x76\xcf\xec\x41\x44\x4d\xe7\x50\x7f\x59\xfa\x06\x9c\xd3\x50\xfe\xce\xf8\x6f\x7d\xc0\xb3\x75\x01\x19\x19\x97\xca\x9a\xb5\x8b\x47\x6c\xb2\xa8\x3a\x79\x7a\xde\xcb\xd3\xfa\x94\xee\x5c\xd2\x4d\xb7\xb7\x9c\x9e\xbc\xe7\x40\xdc\xd5\xf7\xc1\x9a\x84\xe7\xbe\x89\xb9\xe6\xd3\x80\x8b\x35\x45\x29\x74\x11\xec\x75\xb3\x2a\xd9\xcb\xdc\x62\xd6\x6e\xca\x3a\xf9\xe7\xbd\x91\x5b\x8b\xb0\xef\x7e\xdd\x8a\xd8\x88\xff\x06\xe1\xba\xa3\xb2\x97\xa5\xb2\x7d\x64\x3c\x94\x07\xb7\xf9\x05\x7a\x66\xe4\xb8\xa0\x19\x67\x70\xd5\xca\x84\x67\xf0\xa5\xba\x7f\xeb\x0b\xe6\x6e\xe8\xf3\x0d\xd6\x64\xbd\xd3\xf7\xce\x04\x0e\x18\xb7\xeb\xf2\x58\xab\x43\xed\x2b\x5b\x84\x88\x53\x93\xdd\xa8\x68\x4a\x7a\x88\xb3\x64\x11\x04\x3b\xd8\xf3\x0a\xe4\x66\x62\x94\xe6\x84\x0a\xd7\x89\xc5\x18\xdc\x28\x1d\x7e\x43\x69\xbc\x89\x46\x76\x88\x34\xb9\xea\x5f\x0e\xce\xc7\x83\xab\xfb\xe1\xfd\xcf\x35\xf8\x91\xe5\xc7\x0e\x42\x32\x78\xe1\xee\xe7\xbb\xfb\xc1\xe5\xf8\xd3\xe0\x6a\x70\xdb\xbf\x5f\x03\x2f\xb9\xaa\xb3\x26\xe8\xc2\x5c\xd6\xa9\x6f\x9b\xc0\x17\x3a\x33\x6f\x4d\xef\xcb\x20\x93\x41\x27\x94\x34\x00\x4d\x9a\xd4\x7f\x16\x13\x81\x62\xf2\x44\x12\x9e\x15\x66\xd5\xda\x05\x0b\x10\x28\x6b\xda\x5f\x85\x42\x09\x6d\x56\xd7\xf8\x14\x99\x5a\x6f\x41\xb9\x5b\xdf\x20\x88\x7c\x58\x10\xf6\x95\x42\xe4\x73\x96\xd0\x88\xaa\x20\x35\x90\x0b\xeb\x5e\x31\xee\x43\x88\x4e\x5d\x43\x5c\x7b\x8b\x46\xd9\xbb\xce\x1f\x7a\xd2\x97\xb5\x7d\x7f\xa2\x3c\x22\xda\xda\x02\x42\x7b\x50\xec\x1b\x9c\xc6\x4b\x80\x6d\x5b\x8c\xee\x25\xcc\x03\xcb\x39\x3a\x36\xbd\xaf\x01\xcc\xad\x7e\x90\xeb\x6f\xc3\x55\x71\x32\xa5\x73\xbd\x3a\x50\xa6\x1d\xa5\xbe\x71\xb8\x4b\xa9\xb0\xe6\x1e\x90\x37\x6c\xec\xfa\x86\x01\x0b\x4b\xf5\x62\x98\x89\x39\xc5\x48\x90\x94\x2b\xad\x80\x99\x88\x80\x9e\x16\xaa\x28\x4e\xe8\xaf\x80\x51\x25\xc8\x71\x10\x41\xe1\x90\xbd\x0a\xf7\x81\xc5\x8f\x38\x1e\xb1\xf3\xc1\xcd\xed\xe0\x4c\x33\xa4\x63\xf4\x20\x01\x7e\xaa\x34\xf5\x73\x4b\xde\x46\x1c\x0b\x23\x19\x28\x93\x8a\xe0\xa6\x60\x30\x22\x04\x17\xed\xf9\x83\xef\x6f\x00\xdf\xd5\x93\x37\x3c\x2b\xd9\xa6\x9c\x01\xe0\xaa\xb1\x2a\x72\x90\x33\xb0\xf7\x9c\xac\x5b\xfc\x5c\x5a\x91\x10\x7e\x03\x24\x91\xf2\xaa\xbf\xe0\x6a\x03\x80\x67\xfb\xf9\x95\xfa\xbc\x81\x6f\x57\xcd\xf3\x1e\x42\xec\xa4\x2a\xd0\x40\x0d\x60\xa8\xaf\x7a\x53\x99\x67\xa3\xa8\x28\xde\x02\xaa\xa3\x42\xfa\x13\x32\xc3\x0c\x89\x9c\xb1\x0a\x3c\x6c\x68\x69\x5b\x0e\x9a\xd9\xf4\xa8\xea\x35\xc3\x29\xcf\x19\x28\x0d\x10\xc6\x5a\x33\x18\x99\x11\xa6\xd6\x0c\xe6\xad\x80\x58\x2a\x43\x3d\x5c\x2c\x96\x9a\x81\x36\xc1\xb1\xd4\xf9\x93\xa0\xf4\xf2\x66\xd7\xb2\x0b\xca\x2b\x39\x95\xf4\xa1\xf2\xf7\x73\xbd\x96\x8d\xe5\xe3\xce\xdd\xdd\x63\xf9\xb8\xbe\xab\x98\x44\x8f\x9b\x5e\x36\xd5\xcc\xcc\xc4\x56\xae\x5e\x32\xf6\x2d\xf4\x53\x5b\x9a\x05\x0a\x96\x47\x8f\xe8\xfb\xfb\xcb\x0b\x34\xa5\x5a\xee\xd5\xd7\xca\x15\xd6\x32\xf6\x83\x48\x9c\x5d\xd8\xda\x56\x73\x91\xf8\xbb\x17\x36\xde\x89\x52\x81\x94\xa0\x6f\x34\x3c\x23\xce\xd8\x2b\x2c\xda\x5e\xa5\x34\x8b\xc0\x2c\xe6\xa9\x99\xc7\x89\xcc\xa7\x53\xfa\xf9\x58\x61\xf1\x4d\xc3\x7a\x98\xa8\x8a\xf1\xdf\xf9\x64\xac\x47\xb4\xe3\x45\x5c\xd7\x1c\xb2\x05\x95\xfd\xb2\xd9\x99\x9d\x9b\x77\xff\x2f\x9f\x40\xb6\x7b\x26\x38\x20\x00\x82\x77\xce\x46\x2a\xd8\x57\x1c\x25\x1d\x23\x97\x40\x55\x02\x39\x89\xb8\x10\xc4\x26\xc9\x9b\xda\xa2\x19\x16\x8a\x82\xb5\xd6\x81\xa4\x94\xd0\xf1\x8b\x2d\x0a\x4b\x7e\xcf\x71\x81\x44\x3d\x21\x04\x1c\x3c\x19\x4d\x36\x53\x7a\xcf\x4a\xbe\xc9\xca\x09\xb4\x91\xa7\x16\x37\x13\x0c\x32\x6b\x45\xac\xc1\x13\x61\x6a\x2f\xfa\x09\x34\x51\x93\xb6\xdf\xce\xcb\x60\x4a\x7c\x0e\xcf\x8b\xcb\xcd\x85\xf4\x86\x51\x4d\x4a\x60\xb8\xe7\x6d\xa2\x94\x75\xa9\x37\x39\xfa\x9f\x5a\xfb\x8e\xe1\xd5\xe5\x75\x59\x13\x1a\x6f\x57\xbb\x28\xf5\x5d\x84\xb5\x3a\x68\xff\x2d\x81\x7c\x24\x31\x56\x8c\x00\x40\xc2\x2a\xa7\xd5\x3d\x37\x7d\x6a\xda\xaa\x74\xb9\x76\xcb\xb7\x40\xad\x29\x35\xf3\x89\x40\x4a\xe7\x3e\x02\xd1\x37\xc9\xdd\x87\x81\x3c\x88\x04\x42\xa8\x57\x5a\xb1\x4c\x99\x71\xcd\xf9\xbc\x64\x87\x5b\xc8\xe8\x66\x30\x5a\x68\x24\x99\x20\x91\xbe\xca\x4e\xd1\x4d\x42\xb4\xe4\x95\x6b\xe9\x2b\x4f\x12\x87\xf0\xb5\x5a\x3a\xdc\x08\x95\xee\xc5\xe7\x15\xe8\x1e\x2b\x26\xe6\x10\xee\x56\xcf\x2c\x58\x83\xfd\x23\x2e\x04\xeb\x0b\x26\x64\x30\x24\x96\xb5\x48\xe0\xf0\x0b\x13\x37\x0b\xa6\x24\x5c\xba\xc8\xe8\xaf\x9a\xfd\x0a\x22\xe7\xbc\x31\xc9\x31\x9c\xed\xcb\xcc\xc1\x2d\xe5\x0b\x4e\xc2\xdd\x87\x4d\x71\xd5\x2d\xe4\x9a\xca\x1d\x58\x12\x71\x56\x4d\xd1\x57\x7f\xf0\xd1\x1f\x16\x6f\xd5\xde\xad\x76\x68\x70\x4b\x16\xa6\xb6\x10\xfb\xac\x70\x5d\x14\xca\xcc\xc2\xf8\x5e\xfd\xe7\x85\x01\xb9\x48\x09\xa0\x4a\x16\x55\xe7\x90\xbe\x6b\x9b\xb6\x58\xcf\x73\x9c\x8b\x8d\x20\x29\x0a\xd4\xf2\x4d\x38\xb7\x4d\x46\x29\x86\xa5\x17\xa1\x9e\x5d\xda\x62\x12\x20\x46\xdb\x50\x23\x59\x42\x82\xb3\x64\x63\x96\xb1\x56\xc5\x6b\x66\xca\xbb\xba\xd5\x40\x4a\x2e\x44\x99\x97\xf2\xae\x95\x28\xb0\x34\x81\x0e\x5b\x6c\x73\x6c\x31\x5b\x59\xc4\xd3\x1e\x20\x01\x2a\x01\x89\xff\x85\x03\xad\x2a\x38\x58\xa3\xf7\xba\xcc\xa7\xd2\xee\xb4\x4a\x73\x2a\x7d\xa1\x79\xc9\xf9\x8e\x1e\x38\x3d\x99\xc5\x18\x12\x47\x77\x89\xc2\x29\xcd\xdf\x78\x0f\xa0\x4d\x12\x23\x83\x5e\x60\x90\x8f\xed\xda\x79\xcf\x49\x86\x05\x61\x6a\xc4\x6e\xf5\x28\xcc\x17\x45\x24\x86\x8b\xc3\x71\x68\xf4\x50\xb3\x76\x8a\xb0\xfd\x0a\x16\xbd\x29\x10\x4e\x8e\xcd\x4b\xa0\x9a\xbe\x60\x92\xfd\x77\xe6\x1d\x83\x79\x60\x31\x7f\xf4\x54\xe9\xb4\x50\xe3\xb5\x00\x19\xcd\x29\x40\x0e\xc4\x44\xda\x0b\x89\x2a\x8b\x29\xe1\xc5\xef\x9c\x38\xfc\x65\xf8\xcc\xf3\xaf\x3a\x86\xed\x0c\x05\xcc\x19\xe8\xe4\x88\x05\x7d\xac\x80\xeb\x34\xca\xfa\x96\xaa\x04\xec\x33\x8d\xbd\xe3\x0b\xfe\x69\x76\x88\x0b\x3a\xa3\x2c\x28\x9a\x64\xa7\x97\xe2\x0c\xcc\xbb\xe6\x0c\xf2\xa9\xbf\xd3\xee\x6d\x96\xc1\x31\x8c\xf8\x7f\xfe\xfb\x6f\xc7\xb4\xc9\xfb\x21\xc7\x76\x05\x0e\x61\x27\x37\xdb\x96\x70\xe7\x03\x14\x91\x06\x74\x8a\x40\xa7\x95\xa5\xcc\x89\xe2\x57\x7b\xb9\x69\xa2\xe1\x6a\x6e\xdc\xbd\x65\x72\x07\xdf\x88\xc8\x57\x9c\x0d\x73\xc5\xbc\xed\x5a\x52\x09\xd9\x01\x7a\x24\xe6\x24\x7b\x03\x41\x58\x90\x7c\xc9\x4c\x33\x62\xc5\x27\xd2\xe0\xa1\x18\x78\x57\xf3\x43\xb1\x3a\x2d\x17\x66\x15\xef\x2f\x22\x25\x0a\x77\x78\x10\x8d\xec\xca\x67\x98\x28\x52\xdd\x7e\xe5\xa6\xad\x70\xee\x00\xe7\x70\x97\xa8\xcd\x39\x96\x2f\x17\x9a\x53\x5b\xf6\xc9\x58\xd3\x43\xe1\x61\x5d\x90\x8e\x19\xa4\xc9\xf6\xd4\x1b\x92\x4b\x22\x0c\xa7\xf3\x70\x58\x96\x12\x42\x14\x47\x88\xd1\x5c\xe3\x6b\x24\x29\xa6\x1b\xe5\x13\xe8\xf7\xeb\x31\x26\x4b\xce\x06\x3c\x23\x62\x1c\xe7\x6a\xe9\x58\xac\x8a\xf1\xd7\x1f\x9d\xe7\x6a\xb1\xbe\x7d\x99\xe0\xe5\xb2\x37\xab\x70\x3d\xf5\xfb\x0d\xcd\xae\x97\x98\x83\x10\x9f\xb2\xd4\xdc\x80\x9a\x49\x2a\xa8\x99\x36\xe6\xb4\x64\x22\x81\x1b\x98\x29\x80\xd4\x2b\x34\x29\x7b\x45\x1b\x6c\x6f\x18\x39\x9a\xe4\x85\x49\xc9\x57\x4b\x88\x8f\x47\xec\xa3\x29\x37\x02\x5a\x9e\x19\x40\x04\x09\x3f\xe4\x73\xc6\x25\x29\x65\xa0\xd5\x54\x40\xb0\x19\xa4\x76\x18\xf5\xc2\x7a\xf1\xd1\xee\xb2\xfa\x9b\xe3\x9f\x2e\x6f\xf8\xf2\x94\xeb\x29\x70\x27\x71\x30\xa2\x19\xd5\xb4\x33\xae\x3d\x69\x2f\x57\x85\xb7\x88\xe9\x02\x1c\x2c\x95\x2c\x7a\xc8\x4f\xaf\x42\x10\x09\x79\x22\x60\x4e\x87\x31\x86\x75\x2e\xca\x76\xbd\x06\x76\xb2\xee\x00\x15\xe9\x9f\xc0\x16\x50\x5c\x1d\x41\x39\x49\xae\x8e\x16\xcb\xe9\x3f\x3b\x67\xaa\xd5\x05\xa6\x6c\x20\x9e\xf7\xc3\x7a\x1f\x0b\xa2\x10\xf9\xac\x88\xad\x08\x7a\xef\x72\x09\x97\xd3\x0f\x50\x7d\x3a\x54\xb3\xec\xf8\xe2\xb5\x99\xfb\x2e\x83\xdc\x25\x4b\xc6\xee\xca\xb7\xc9\x83\x73\xcc\x62\x9b\x11\x6b\x95\x0c\x2d\x6c\xc1\xec\x8c\xd1\xcd\xe7\x0a\xd8\xbc\xce\x00\x28\xdd\xb4\x69\x10\xdd\xe1\x22\x73\x0a\xa3\x56\x59\x20\xbc\x82\x0b\x2d\xb9\xe7\x4c\xd1\x44\x13\x87\x1d\x83\x44\x53\x88\x8c\xb3\x40\x85\x10\xd9\xde\x84\x85\x47\xa5\xa4\x6c\x36\xb6\x2b\xe9\x92\x3b\xdb\x5d\x0c\x65\x9a\xba\x34\x4d\x99\x1f\xbf\x73\x0d\xad\x36\xaa\x1b\xb2\x06\x9c\x32\x97\x56\x0a\x1a\x07\xe3\x6e\x32\x16\x60\xce\x65\xa3\x8e\x69\x6c\x96\x82\x9a\xc2\xd3\x30\xd1\x4d\xec\xee\x20\xd3\x2d\xe3\x38\x14\x57\x88\xb4\xa9\xa2\x26\x01\x0c\x22\xf5\x55\x43\x2e\xac\x6c\xcc\x81\x1d\x32\x2f\xa2\xd9\xb2\x57\x3e\xd3\xbf\x92\x4e\x8b\x5d\x77\x36\x1d\x01\x27\xc9\x04\x47\x8f\x5e\x0b\xf3\xb6\x08\x2e\x5c\xd9\x00\x2d\x57\x42\x5d\x34\x43\x5c\x7a\xa0\x11\x48\x37\xa1\xb7\xd0\x20\xf9\xd8\x61\x17\x9d\x9b\x55\xb3\x10\x69\x06\xba\xc9\x8c\xde\xe4\x36\xc4\x24\x4b\xf8\x22\x6d\xb8\xcf\xaa\x29\x84\xbb\x44\xea\x34\x65\x30\xee\xf5\x2a\xab\x30\xbd\x8d\x2f\xb3\xa5\x7c\xa4\x3d\xe0\x4a\x6d\xc0\x25\x3f\x25\x7c\x02\x26\x55\x6b\x7e\x70\x39\x36\x41\xaa\x47\xf5\x3c\x6f\x9a\xf9\x53\x3d\x91\x54\x66\x89\x56\x66\x9a\x7b\x30\x39\x27\x2f\xbb\x6f\x06\xa3\x60\xbd\x75\xb0\x7d\xb4\x76\xed\xe7\x2f\x81\x60\x7c\xe1\x24\x01\xf3\xae\xe1\x5f\x15\x2b\x9b\x49\xf6\x3b\x36\x4e\x6a\xc5\x47\x4c\xe1\x99\xdb\x5c\x2b\x5c\xf2\x67\x46\x84\x9c\xd3\xac\x54\x2f\x71\xe7\xf0\x70\x4b\xd1\xf6\x3f\x26\x18\x7a\x03\xde\xc9\xb3\x23\x83\x50\xa2\xe9\x43\x66\x38\x2a\xac\xa2\x51\x82\xa5\xa4\xd3\x45\x00\x2c\xe2\x23\x6d\x21\x7d\xab\x6c\x46\x08\x4a\x94\xd5\x31\x1a\x33\xbe\xfd\x64\xd6\xef\x9e\x55\xf8\x50\x3e\x7e\x34\x0e\x11\xdc\xf4\x7d\xb2\x8c\x22\xe3\x6e\x6a\x8b\x26\xd3\x88\x44\x6b\x20\x04\xb6\xcb\x84\x5f\x09\xfe\xd3\x6c\x46\x28\x84\x49\x3b\x6c\xab\xc8\x78\xc0\x8f\x10\x0c\x47\x95\x52\x29\x61\xf3\xb5\xe2\xe4\xec\xc2\x9a\x38\x3d\x58\x08\x60\x2a\x14\x1f\xf7\x90\xdc\x09\x64\xab\x0d\x5d\x9c\x93\x84\xec\x25\xe2\x7a\x0b\x22\xa9\x86\x33\x04\xe4\xb1\x92\x34\x8a\x32\x03\xeb\x8d\x0b\x5b\x04\x82\x37\x40\xf5\xd4\x0f\xfd\x27\x33\x50\x1b\x0b\x5e\xb7\x8b\x60\x18\x84\x55\x6e\xab\xbb\xd4\x61\xfe\x99\x16\x2c\xc9\x15\xdd\x94\xe8\xaa\xe8\xd4\xcb\x2b\x87\x48\x6a\x6f\x1c\x32\xbd\x34\xae\x4f\xa4\x4d\x78\xc7\xda\x03\xb0\x15\x07\x5a\xe6\xd3\xed\xe8\xc2\x3a\x50\x15\x47\x33\xa2\x4c\xf5\xff\x98\x3e\xd1\x38\xc7\xc9\xbb\xa2\x89\xbd\x25\x7c\xec\x69\xf5\xeb\x0f\xf9\x66\xa7\xf6\x8e\x28\xe9\xae\x84\x25\x18\x45\xbb\x39\x07\xb8\x05\x87\x71\x2c\x8d\xe0\xfa\xc5\xcb\x2d\x3b\x83\x24\xd8\x91\x59\xa8\x80\xdf\x90\x40\x65\xe6\x18\xdb\x2f\x3c\x2c\x40\x09\x10\x0b\x97\x40\x04\xcd\x1a\xbd\x3d\xd7\xab\x92\xf6\x97\x2e\x7a\x6d\x4e\xe3\xd5\x51\x15\xd4\xdd\xc9\x83\x9b\xc9\x83\x0e\x64\xf3\x00\x2f\xff\xa6\x63\x70\x98\xf7\xcf\x01\x08\x87\x4b\x57\xe2\xfe\x44\xc4\x77\x44\x26\x07\x21\x29\x2e\x6d\xc5\x6b\xc9\x8b\x47\x0e\xe5\xa8\xc0\x0c\x3a\xdc\x2d\x3a\x8c\x93\x7c\x6b\xdd\x40\x2f\x77\xc1\xae\xa7\x97\xbd\xd0\x07\x00\x7e\x62\xc8\x8b\xce\x6d\x05\x11\x38\xbc\x41\x2c\xdd\x92\xef\x61\x4d\x94\xa2\x1d\x5e\xab\xf8\xc4\xa5\xe5\x7c\x89\xed\xb5\x49\x70\xad\x37\xf7\x25\x49\x6d\xd3\xb1\xec\x43\x47\x79\x61\x2f\x8e\xa5\xc6\xe0\x83\x2e\x58\xb8\xdd\x2d\x5a\x03\xad\xe3\xb6\x6c\x9f\x87\xac\xae\xec\xdb\xee\x69\xfc\x2e\xc7\x6f\x9c\x09\x32\xa5\x9f\xb7\x12\xc5\x6f\xe0\x53\xab\x5e\xea\x65\xae\x14\x92\x03\xf7\x0c\x14\x9e\x0b\x02\x1a\xed\x4a\xdb\x62\x53\x23\x56\x64\x46\xda\xb4\xc8\x47\xb2\x40\x5c\x94\x7e\xda\x16\x04\x72\xff\x45\xef\xcc\xbe\xce\x95\xca\xe4\xe9\xc9\xc9\x8c\xaa\x79\x3e\x39\x8e\x78\x6a\xe2\xf0\xb9\x98\x99\x3f\x4e\xa8\x94\x39\x91\x27\x7f\xfc\xc3\x1f\x8a\x2d\x9e\xe0\xe8\x71\x66\x60\x75\x96\xfd\x4e\xe5\x2d\x27\x58\xee\x16\xd9\xe3\x52\xd8\x5e\x38\x95\x39\xe8\xc6\x25\x8f\xea\x6f\xa4\xc2\x69\x16\x86\x82\x9a\xb2\x71\x52\xe1\xa2\x58\x05\xe4\x25\xea\x69\xa2\x39\xce\x32\xc2\x9a\xcd\x0e\x26\xd1\x74\x07\xd6\xe3\x52\x55\xed\x08\xc9\xe7\x2c\xc1\xac\x0c\xbf\x00\x95\x97\x04\x89\x08\x53\x16\x1a\xa0\x28\x25\x0d\xd4\x68\x20\x80\x0c\xff\xdf\x2c\x15\x11\xe6\x48\x65\x51\x52\xcd\x0d\xc7\x96\x37\x75\x45\x2f\x71\xb0\x74\xd5\x92\xb2\xc5\xda\x11\xb7\x6a\xab\x92\x14\xef\x96\x4b\x8b\x6f\x5e\xd2\x46\x70\x36\x26\x9f\x35\x93\x93\xdb\x02\x76\x3d\x48\x22\x51\xff\xa7\x3b\x24\x17\x4c\xe1\xcf\xa7\xe8\x92\x32\x10\x60\xbf\xe7\xb9\x90\xe8\x1c\x2f\x8e\xf8\xf4\x28\xe5\x4c\xcd\xd1\x25\xfc\xaf\xfd\xe9\x99\x90\x47\xf4\x33\xc1\xc2\xf2\x07\x5b\x92\xce\xd7\x37\xd7\x24\x24\x72\x26\x11\x79\xd2\x27\xf4\x0f\xff\x89\x52\xd3\xf2\x29\xfa\xf6\xe4\x0f\xff\x89\x7e\x07\xff\xff\xff\x47\xbf\x6b\xd0\xf4\x37\x83\xfc\x82\xca\xc5\xb7\x65\x77\x6e\xaf\xb2\x52\x5b\x54\x73\x3f\x13\xbc\xd8\xa9\xda\x96\x1f\x69\xf4\xc8\xa7\xd3\xb1\x26\x0c\x93\xc8\x37\xc6\x62\x09\x2e\x7a\x4b\xfc\x54\x6a\x6b\x4f\x9b\x4a\x76\x45\x0d\x19\xdb\xa9\x41\x7c\x70\xec\x5a\xe6\x45\xe5\x5d\x08\x22\x2a\x55\x33\xa6\x12\xbe\x22\xb1\xe6\xaa\x9b\x9c\x0e\x67\xdd\x73\xc9\xdf\xce\x82\x13\x22\xa4\x84\xf5\xd4\x7d\xe0\x5f\x18\xc5\x6a\x02\x7d\xec\x42\xd6\x1e\x87\xa5\xf0\xda\x2f\x26\x66\x12\xa6\xf6\x56\xf1\x92\x72\xa9\xf3\xf5\xa1\x92\x77\x5c\xec\xa4\x6f\x3d\x92\xc6\x54\x86\x35\xf5\x92\x5c\x0d\xdf\xb0\xb2\x3f\x64\x88\x73\xe1\x71\x8c\x8d\x5d\xc4\x56\x55\x5c\x6f\xc5\xa4\xc2\x04\x97\xb5\x3b\xf4\x7a\xea\xe7\xfe\x93\x75\xc3\x84\x48\x33\xf7\x76\x51\x2f\x0e\x46\xab\x45\x24\xcd\x12\x6b\x46\x5c\x03\x76\xb8\x6e\x43\xef\x3c\xbe\x05\x34\x0e\x61\x8f\x90\xbf\xc1\x9c\x64\x6b\x01\x04\xea\xf7\x33\x17\x11\x39\xe3\xbb\x85\xbd\x26\x94\x2d\xc5\xcb\xb7\x2f\x45\xe4\x57\xef\xc2\x16\x9d\x72\x78\xc0\x3c\x2e\x94\x05\xe3\x16\xb0\x55\x28\x02\x20\xd2\xf2\x6c\x00\xd0\x6e\x1f\x58\x97\x4b\xb5\x11\x76\xe0\xda\xc6\x70\x5c\x30\x3c\x57\x5a\xa3\x52\x51\x43\x60\xcd\x0b\x57\xc4\xae\x41\x50\xd1\xce\xe3\x08\xaa\xc4\x14\x91\x4a\x95\x6a\xec\xd8\x94\x4a\x11\x5b\x62\x95\x9a\x82\x4d\x3d\x24\x30\x04\x65\xaa\xb9\x6e\x4f\x12\x71\x34\xc5\x11\x65\xb3\x5e\x00\x53\x09\x90\x11\xe1\x75\x50\x47\xa4\xf7\x58\x3e\xee\x37\xd0\x70\xe7\x02\x96\x34\x2e\x8a\xa8\x59\x60\x19\xe3\xd8\xa0\x4b\x18\x7d\x0a\xcb\xc7\x26\x64\xa5\x25\x58\xb7\x15\xa3\xf3\x4b\xe1\xc0\xe0\x56\x8d\xcf\xa5\xa0\x93\x50\x9f\x82\x9a\x0d\xae\xa4\xb2\x05\x79\x74\x19\x7f\xd8\xa3\xb0\x54\xd1\x4d\x57\x8c\x5f\xce\xb9\x50\xe3\x2d\x71\x61\xab\x69\xf4\x8c\x1c\x25\x00\xe8\xc2\x9f\x88\x78\xa2\xe4\xb9\x0c\xaf\xba\x09\x2d\x1a\xa3\x59\x10\x55\x07\xf8\x9b\x69\xc6\x21\x85\x66\x8a\x52\xcc\x16\x86\x51\x6a\xe6\x82\xe5\xa3\xf4\x85\x5c\x91\x4c\x71\x92\xf4\x90\x20\xb9\x34\x05\x8e\x25\x49\xa6\x47\xae\x14\x46\x8c\x12\x3e\xa3\x11\x4e\xd0\x24\xe1\xd1\xa3\x34\x19\x6e\x6c\x66\x98\x54\x26\x78\x44\xa4\x0c\x24\xab\x22\x9b\xdd\xe6\x18\x42\x15\x57\x45\x44\x4a\x19\x95\x8a\x46\x4e\x64\x2a\x40\x29\x4c\x2d\xf1\x08\x83\x49\x18\x32\x36\x61\xb8\x5a\xd2\x23\x06\x9c\x33\x67\xb6\x68\x12\x5c\xd7\x16\x73\xcf\x05\x89\x37\x1d\xa0\x3d\x40\x08\x3a\x0a\x19\xab\xf2\x81\x5c\x73\xa4\xce\xec\x67\x70\x8c\x57\x91\xc0\x6d\xf9\x44\x79\x82\xf4\x27\xad\x04\x6b\x04\x31\xe5\x3e\x04\xbe\x24\xb9\xf8\xc8\xf0\x03\x43\x34\x83\x21\x37\xe0\x98\xad\xa3\x69\xbd\x8a\x20\xf2\x40\x9d\xae\xaa\xd7\x9c\xb2\x28\xc9\x63\x5f\xa9\x51\x8b\x00\x4f\x9a\x48\xdc\xf2\xe8\xb5\xd7\x82\x42\x0f\x61\x89\x9e\x49\x92\xe8\xff\x9a\x08\xf8\x23\x5f\x38\x41\xb3\x64\x53\xdc\x02\x3a\x71\x5c\xba\x89\xa2\x0e\x0e\x9d\xf2\x06\xab\xb9\xc9\xf9\x4f\xb9\x32\x45\x32\x0d\x3a\xa5\xb3\x6f\x19\x38\xc3\x49\xc2\x27\x70\xd2\x01\xb8\xd2\xe5\xb9\x06\x69\x75\x79\x14\x11\x12\x93\x18\x7d\x1d\x1c\x5c\x8f\x47\xf1\x4d\x3d\x8c\x62\x69\x45\x0e\x00\xb4\xb2\x6a\x58\x6b\x84\xae\x2c\xd7\x79\x3b\x46\x37\x15\x60\x96\xb0\x7e\x3b\xae\xc2\x74\xf5\x96\xb6\xf0\x6d\x80\x2e\x2b\x93\x78\xb9\x1d\xda\x10\xe8\xb2\xd4\xe7\x1e\x80\x2e\x2b\xf3\x6c\x88\xdd\xe7\xb3\x17\xcd\x39\xd6\x93\xba\xe0\xed\x13\xc1\x0c\x40\x98\xb9\x3b\x4b\x24\xe8\x0e\xe4\xa2\x8e\x10\x0f\x0b\xc4\xb3\x52\x0d\xf1\x6d\x41\x3c\x2b\x83\x39\x64\x10\xcf\xca\x50\x0f\x17\xc4\xb3\x66\xa0\x2d\x40\x3c\x8d\x73\x7f\xac\x89\xba\x1d\x53\x80\xc4\x96\x49\x3e\xbd\x83\x54\xef\x95\x63\x3c\x33\x81\x03\xe6\x1a\x73\x77\xb4\xc5\xb4\x86\xd1\xda\x1c\xc8\xa6\x70\xa8\x8a\x13\x62\x53\xda\xf3\xde\x37\x03\xfe\xb0\xa9\xd9\xbd\x17\x5a\xbb\xc1\x0e\x19\xe1\xcc\xe6\x94\x37\x95\x9a\x39\x9c\xec\xd9\xed\xf0\x51\x01\x83\xb0\xc4\xf2\x5b\x21\x88\x5d\x56\xaa\x36\xcc\xf9\xb3\xad\x9c\x04\x64\x68\x88\xb2\x91\x04\xa1\xd3\xb1\x55\xda\x9a\x56\x8e\x32\x45\x66\x55\x9d\xb6\x38\x34\x94\xa9\x3f\xfd\x71\x2d\x27\x32\x10\x8b\x4e\x3d\x0c\x6a\x27\x78\x67\x87\x7d\x46\x62\x14\xcd\xb5\x56\x24\xb5\xfa\xa2\xa7\x63\x6e\x56\x89\x52\x4c\x9d\x22\x95\x4b\xe3\x5a\xa2\x72\xc4\x4a\x98\xa4\xc7\xe8\x23\x14\x84\xc5\x69\xa6\xf5\x2f\x3f\x3f\xaa\x29\x69\x94\x7f\xfb\xed\x9f\x08\xfa\x16\xa5\x04\xb3\x92\x0e\x0b\x6a\x93\xbe\xfa\x00\xc3\x4f\xcd\xc9\x88\xd5\x6e\x05\x1a\x7c\x36\x35\xa6\x5c\xbc\xdf\x90\x4d\xb9\xd3\x89\xa1\xd0\x21\x8e\xe6\x48\xe6\x13\x53\xa9\x37\xb0\x61\x38\x41\xfa\x82\xcf\xc0\x51\x0d\x37\xb2\x1b\xf4\xaa\x53\xf8\xb2\x31\x00\xd6\xdd\xd8\xf6\x36\xee\xc3\x3d\x72\x24\x49\x09\xdb\xa9\xc6\x69\x66\x38\x5f\x78\xf0\xa5\xc1\x7d\xe9\x19\x1f\x82\xd6\xcf\xb0\xb5\xec\x6b\x59\x1a\xc2\x79\xc1\x4b\x96\x27\x58\xd8\xa3\x3f\x62\x5a\xd1\x10\xe4\x89\xf2\x5c\x26\x0b\x14\x73\x46\x7a\x40\x09\x79\x34\x37\x8e\x55\xad\xb3\x60\x5b\xb0\xe2\x89\xca\x5c\x2b\xb4\xd0\x96\xab\x8f\x21\x15\x36\x98\x54\x73\x0a\xfd\x68\xf5\x9b\xc0\x57\x61\x96\x1c\x6a\xa7\x45\x85\xb0\xb1\x15\x9e\xdf\x12\x36\xb6\x44\x55\x1d\x6c\xac\x87\x8d\x5d\x5e\x97\x43\x84\x8d\xad\xec\x79\x3b\xd8\xd8\xba\x2d\xdf\x02\x36\xb6\xd4\xcc\x17\x03\x1b\x5b\x59\xd1\x2f\x06\x36\xb6\x32\xaf\x0e\x36\xf6\xcb\x83\x8d\xdd\x11\x18\xb5\x9e\x17\x1b\x7c\x25\x45\xd9\x62\x63\x22\xfb\x4a\xa2\xe1\xb5\x26\xb0\xe8\xb1\x1c\xd4\xe6\xaf\xab\xdd\xc1\x58\xeb\x99\xd0\x66\x60\xac\xb5\xaa\x7a\x33\xab\xdb\x15\xe0\x09\x14\x83\x57\x06\x63\x2d\x4d\xa0\x8b\xaf\xdc\x3c\xbe\xb2\x96\xf8\x6c\xdf\x7a\x78\x2e\xe8\xb2\x7a\x21\xb7\x84\x63\x2d\xed\x4f\xab\x48\x4c\x10\xdd\xf7\x40\x89\x2f\x2b\xcd\xdf\x97\x0e\xf9\x5a\x59\x3e\x5c\x45\x69\x81\xa1\xb5\x84\xe7\xd0\xe2\x8c\x12\x1e\xfa\xff\x3b\xca\xdd\x22\x32\xb8\xb2\xbc\xde\xaf\x62\x68\xb1\x05\xa9\xb6\xa6\x50\xa7\x95\xee\x27\x51\xd6\x25\x4f\x6e\xe8\x62\x76\x83\xb8\xcb\x48\xd4\x60\x63\xa6\x29\xdd\x57\xb3\xeb\x2e\x32\x8f\x85\x05\x0a\xf9\x52\x5e\xa8\xbe\x9e\xcc\x70\x8c\x8c\x5f\x49\x87\x05\xa0\x0e\xf3\xe5\x8c\x4a\x25\x1a\x63\x9b\x96\x46\xb8\x8b\xab\x34\xcb\x5b\x07\xc4\x04\xab\x3a\xdb\xee\xb3\x94\xa4\x5c\xac\x0b\xac\xaa\xfd\xd2\x96\xba\xd9\xe6\x53\x92\xcd\x49\xaa\x25\x99\xf1\xa6\x8d\xb4\xdd\x6f\x9f\x34\x6c\x73\xd7\x4c\xa0\x63\x89\x08\x02\x47\xa8\x7e\x37\x36\x88\x94\xad\xb7\x7b\xd7\x6d\xb6\x98\x99\x1b\x3a\x84\x1c\x98\xf2\x6a\x83\x9b\x7d\xa9\xe4\xee\x06\xfa\xae\x8d\xe9\xf0\x21\x35\xeb\xa3\x36\x56\xc4\x6b\xac\xc2\x9d\x2a\xbe\xb2\x85\xa0\x37\x70\xe5\x97\xbd\xf3\x9a\x13\x86\x55\x80\x37\x0f\xf0\x68\x40\x4d\x5d\x5e\x1e\x88\xcc\x91\x44\x1c\x85\x9a\x41\x69\x30\xcb\xeb\x55\xa2\x12\xa7\x51\xee\x40\x24\xb9\x68\x8c\x32\x6d\x63\xd0\x8e\x54\x8e\x13\xd0\x24\xc2\xea\x95\xd5\x4d\x9d\x2c\x6a\xd2\x1e\xdb\x79\x4c\x28\x53\x7f\xfe\x8f\x8d\x76\x53\xab\x56\x76\xdd\xa0\xe2\x16\x8e\x22\x22\x8d\x8d\xdd\x46\x21\xe3\x09\x7f\x82\x62\x5b\xbb\xec\xaa\x3e\xca\x7a\xde\x9a\xc1\x7b\x28\xe2\xb8\x20\x75\x23\x2e\xcc\x05\xcf\x67\x73\x67\x43\xd2\x67\x46\x4f\xad\x6e\x2f\x7f\x5c\xb2\x91\x6f\xbc\x97\xdf\xe5\x34\xd9\xce\x42\x77\x57\x2a\x43\xf6\x69\x78\x8f\xe4\xdc\x9f\xd6\x09\x34\x5b\xbb\xb1\xcb\x83\x6e\xdf\xa7\xfd\xd6\xfb\x6b\xa0\x9b\x9e\x83\xdf\x9c\xf2\x24\x01\x4f\x83\x24\xe9\x13\x11\xf5\xdd\xc3\x84\xef\xe9\x66\xc8\x79\x7e\x00\xf0\x75\x91\x18\xd1\x4a\xfe\xba\x31\xa2\xa1\x44\x6e\xf4\xd5\xa0\x05\x13\xaa\xc6\x19\x61\x75\x36\xb6\x9f\x96\x2b\xc0\xbc\xb3\x80\x41\x17\x3d\xb6\xb7\xa0\x41\xb7\x24\xaf\x1c\x38\xb8\x66\x1e\x87\x1a\x3c\x58\x61\x76\x3e\x96\xaf\xb8\x66\x5c\xe0\x90\x51\x7c\xfa\x7a\x89\x47\xac\x5f\xca\xa7\x70\x95\xb2\x27\x8b\x22\x20\xdb\xe8\x10\x21\x33\x83\x3a\x1b\xd6\xb0\x02\x6e\x34\xfd\x17\x68\x3a\x06\xbc\xd6\x84\x14\xba\xb0\x41\x88\x26\x27\xf1\x11\x8e\x16\x51\x42\xa3\x40\x67\x9e\x09\x9c\xcd\xeb\x38\x9e\xdb\xf9\x0e\x75\xe7\xad\x50\x77\x9a\x0a\x52\x6d\x12\xb7\xed\xe8\x8a\xe1\x94\x74\x68\x40\x75\x68\x40\x3d\x8f\x77\xc1\x8a\xd2\x5a\x6f\x08\xa3\xb0\x7c\xee\x3a\x48\xa0\x37\x80\x04\xda\xe6\xf0\x15\x78\x3f\xa5\x63\xd7\xc1\x14\x7d\x68\x05\x53\xe4\x2f\xc1\x83\x42\x9e\x69\x3e\x8f\x6f\x8c\x68\xb2\x3c\xb0\xb7\x84\x25\xaa\x11\x17\x36\x91\x9b\x56\xe1\x12\xad\xa2\x8b\x56\xeb\xf2\xb6\x28\x41\x9b\xad\xcc\x46\x00\x40\xb5\x77\xd7\x81\xc0\x01\x35\x6f\xc3\x81\x9c\x9b\x7d\x66\xb5\x6c\x56\x3b\x34\xcc\x6c\xd9\x44\xc1\xda\x2c\xc9\xc5\xd3\xc3\xfb\x4a\x74\x29\x8a\xac\x6d\x97\xec\xd2\x77\x3e\x68\x22\xd0\x9c\x27\xb1\x03\xa1\xf0\xab\xe5\x3b\xf0\x99\x00\x7e\x81\xdc\x66\x40\xb1\x73\xd0\xb6\x8a\x82\x60\xab\x52\x5a\xfc\x26\xc2\x70\xf7\xc0\x68\xf6\x61\x45\xf0\x9c\x64\x1b\xfb\xc1\x5a\x59\x44\x96\xcd\xdf\x2b\xc6\x58\x5a\x21\xb0\x9a\xd7\x0f\x73\xad\xdd\x77\xcd\xe0\x56\x89\x1e\x81\x71\x50\xd4\x95\xfa\x34\x74\x06\x4f\x9f\xa8\x33\x44\xe0\xb0\xc7\x95\x5e\x3a\x37\xbb\x56\x9e\xba\x2a\xb1\x6c\x11\x0c\xb6\x54\xb9\x6d\x77\x70\xa0\x14\x7f\x1e\x67\x58\xe0\x24\x21\x09\x95\xe9\x8b\x05\x03\x9f\x95\xdd\xb5\xfa\xac\x0a\x6e\x4c\x44\x2c\x4f\x27\x86\x14\xdd\x40\x6c\xb1\x3f\xc5\x91\xc8\x59\x08\x6d\xe6\x37\xc6\x17\x13\xcc\xe1\x5e\x00\xab\x52\x34\x87\xaa\xad\x53\x4c\x05\x23\xb2\xb1\x46\x26\x89\x72\x41\xd5\x62\x6c\x4b\x8e\xb6\x3f\x70\x77\xf6\xcb\x33\xfb\xe1\x6a\x0f\xb7\xcb\xea\x77\xfd\xf9\x12\xa7\x19\x11\x50\x26\xc8\x15\xbc\x09\xca\xaa\x5a\xd4\x06\xe2\x6b\x0d\x41\xf8\xf3\xd2\xb5\xdd\x14\x38\x8c\x9f\xc7\x41\x46\xd5\x38\xaa\x12\xc7\xba\xc3\x5a\x87\x3b\xb5\x6a\x92\x2f\x8c\xbc\xd4\xe0\x45\x7e\x81\x2a\x23\x36\x6d\xc2\x34\xad\x07\x1c\xb8\x82\xc1\x5e\x59\x6c\x4c\x90\xf2\x6e\x95\xaa\x86\x71\x5a\xac\x9f\xba\xe0\xa3\x15\x83\xed\x07\x5f\xb5\x18\x71\xd0\xc9\x9e\x86\xad\x0f\xba\x10\x79\xa6\xe8\x64\x19\xda\x46\xed\xaf\x84\x68\x3f\x81\x34\x6b\xe7\x66\x28\x75\x6b\xea\x8a\x96\x38\xb1\x9d\x9d\x96\xff\x2d\x8e\x98\x43\x08\x32\x08\x4b\x61\x1e\xdf\x75\x4a\x95\x72\x89\x02\xc6\x00\xad\xa9\xb3\x6c\x9b\xfd\xca\x85\x7b\x60\xa8\xf4\x6a\x4c\x44\xc7\x23\xd6\x97\xe8\x99\x20\x46\x2c\x84\x44\x4d\x0d\x57\x6f\xd5\x86\xda\x4f\x13\xa2\x7b\xf2\xb1\x29\x5a\x78\xa0\x4a\xfa\xf2\x63\xa6\x8f\x29\x4e\x24\xe9\xe9\x86\xa1\x6a\xa9\xe2\x10\xfc\x89\xd1\xb3\xc0\x59\x46\xc4\x88\xd9\x2c\x0e\x70\xb8\x70\x9e\x98\xf6\x9b\x42\x5c\xed\x1a\x90\x71\x84\xa3\xf9\x2b\xed\x11\x86\x64\x9c\x68\x4e\x62\x97\x2f\x5c\xde\x1e\x37\x6f\x63\xb0\xde\x60\xb3\x86\x53\x57\x3e\xab\x67\x3b\x49\x22\xcd\x51\x7c\x99\xe9\x8c\x08\x3d\x6a\x4d\xc3\x4f\x84\x21\x3a\x75\xe3\xb0\xb1\x3b\xe8\x19\x3c\x53\x9a\xf4\x9f\x30\x4d\x4c\x02\xbe\xeb\xda\x09\x81\xc6\xfc\x3e\x62\xc6\xdd\xcd\xa2\x52\x86\x2a\x65\x54\xce\x35\xa7\xce\xc1\x27\x09\x6a\x46\x53\xe2\x0c\x7b\xda\xe4\x34\x0f\xf4\xeb\xab\x39\xe8\x13\x15\x9c\xa5\x90\x24\x63\x71\x99\xdc\xf2\x49\xa2\xfc\xf1\xa8\x4d\x71\x5c\x2b\x11\xc7\xb1\x2c\x1b\x3f\x8d\x5a\x49\x7f\x2d\x99\x5d\x8e\x4a\x59\x81\x51\x00\x2b\x04\x41\x9c\xae\xb2\xd8\x2a\xf9\xb7\x4b\x6d\x58\x4e\x6d\xa8\x5f\x9b\x43\x4c\x6f\xf0\x87\x78\xd3\x14\x87\xa6\xed\xdf\x87\x64\xbb\xc7\x54\x87\x37\xce\x09\x78\x99\x74\x80\xb7\xcd\xdf\x78\x89\xd4\x8d\x2e\xc1\xe1\x0d\x13\x1c\x5a\x5b\x6a\xcb\xb1\xd9\xcd\xc7\x76\xa3\xe4\x80\x35\x60\x4e\x75\xbd\x5c\x12\x25\x68\x24\xf7\xc1\x1f\x64\x86\x5b\x46\xb5\x81\x16\x98\xad\x91\x9a\xf4\x0b\xde\x09\x09\x71\x62\xbe\xce\xdf\x44\x10\xfc\x18\xf3\xe7\x25\x5b\x9d\x0c\xd1\x34\x2e\xb9\x16\x7b\x04\x89\xa8\x24\xa5\x48\x16\x2a\x11\x23\xd2\x1a\x3b\xf1\x88\xcd\x29\x11\x58\x44\x73\xc8\x6e\x2c\x36\xc6\x64\xc9\x1a\x40\x23\x13\xcb\x10\x7a\x9b\x36\xd8\xf4\x16\xeb\x5e\xb5\x30\x79\x7c\x3a\xbb\xe7\x7a\x24\xa9\xf9\xc4\x0b\x33\x56\xca\x08\x4d\x72\xad\xb6\x7f\xd7\x40\x7c\xbf\xd8\x2f\x1a\x8c\xef\x83\x89\x82\x2f\x5a\x06\xe4\x17\xd4\xd0\x05\xe5\xbf\x50\x50\x7e\xcd\x12\x6f\x16\x98\xbf\x95\xc9\xef\xf5\x63\x86\x5d\xcf\xaf\x11\x37\xbc\x2e\x68\x2b\x9f\x8c\x5f\xfc\xe8\xd5\xce\xb9\xed\x09\xfc\xc9\x13\x85\x91\x88\x85\xa6\xb3\x09\x89\x63\xe0\xb4\x8a\xdb\x4a\xd1\x05\xed\x38\xf3\x80\xbe\x7b\xb1\xd4\xc4\x8e\x13\xce\x66\x92\xc6\x06\x6c\x25\xc3\x50\xb1\x35\x34\x5e\x00\xb8\x00\xec\x6f\x92\x10\xe1\xbc\x12\x02\x7d\x2d\x29\xb3\x68\x8a\xfe\xb7\x98\x13\xc9\xbe\x52\xc6\x58\x80\xd9\x02\x3d\x32\xfe\x9c\x90\x78\x06\x3b\x54\x1d\xcc\x11\xa2\xa4\x87\xa8\xf2\x9f\x09\x40\x23\xe0\xb9\x1a\xe9\xb1\x43\xac\x99\xd1\x00\x88\xfd\x36\xa8\x89\xee\x9b\xf9\xe6\x18\xa1\x21\x43\x53\x1c\xa9\x1e\x92\xf9\xa4\x68\x3f\xe6\xa6\xc8\xb5\xd6\xbe\x83\x89\x17\x8d\x74\x31\xe3\x35\x9d\xd7\x9f\x0d\xc7\x1d\x34\xb9\xf6\x13\x8a\x77\x8a\xad\x7b\xc2\xbb\x40\x8c\x5e\xe6\xd2\x06\x61\x20\xce\xfc\xd1\xb7\xf0\x4a\x1e\x23\x1a\xf0\x3e\x0d\xde\x32\xe3\x71\xa3\xad\xb3\x32\x95\x4d\xc7\x52\x04\x42\x5a\x41\xc9\x3a\xaa\xa0\x5d\xb3\xdc\x5a\x6a\x92\x4a\x10\x9c\x5a\xe7\x80\xbe\x6a\x40\xac\x31\x61\x90\x7a\xf4\x54\x18\x09\x73\x93\x2d\xbe\xa0\xec\x51\xef\x6e\x81\x8a\x0d\xf5\xe5\xa1\xe7\xba\x4d\xcb\xf4\x8d\x47\xce\x38\x33\x0e\xc2\x9d\xe4\x4e\x3a\x63\x38\xd9\xd0\xc6\xb1\xb4\x72\xcb\x3e\x3d\x27\x67\x59\x71\x41\x4b\x11\xc6\xd8\x87\x4c\x8f\x1b\xd9\x90\x2a\xf3\x0d\xe5\x3d\x8c\x62\x92\x11\x16\x13\x16\x2d\x80\x44\x18\x20\xe7\x08\x86\x13\x84\xe1\x3b\x9c\x1c\xa3\x73\x93\x5f\xe3\x25\x3c\x7b\xad\xc3\x85\x9e\x62\x46\xa7\x5a\x4f\x00\x23\xac\x1d\xe5\x88\x99\x61\x3a\x1f\x48\x50\xb4\xdf\xaf\x58\xdd\xce\xe8\x1b\xe4\x6a\x47\x54\x62\x56\xfe\x1e\xad\xbe\x70\xa0\xb7\x55\xbb\xa3\x9b\x73\x35\x08\x64\x3e\x39\x82\x7f\x97\x12\xce\x1c\x50\x4f\x81\x22\x43\x12\x02\xe6\x40\xeb\xf1\x82\x8b\xb1\x09\x58\x6e\x1f\x7e\xbb\x35\x79\x1c\x41\x1f\x25\xa5\x26\xa5\x8c\xa6\x79\x1a\x38\xef\x4c\xc5\x82\xc8\xda\x2f\x4d\x26\x46\xa6\xf5\x80\xc8\x81\x97\x23\x7d\xb9\xb2\x05\x9a\xd1\x27\xc2\x46\x2c\xe3\x94\xa9\x63\x74\xc5\x15\x09\x4a\x44\x18\xe8\x28\x9e\x29\x9a\x1a\xb4\x53\x41\xf4\x39\x30\xa0\xd8\x00\x34\x39\xc7\xaa\x87\xe2\x1c\x8e\x2a\x23\x4a\xb3\x0e\x7d\xe3\x2a\xd8\x19\x88\x8f\x16\x23\x66\x6e\xba\x29\xa6\x49\x2e\x88\x95\x59\xb1\xc9\x8b\x29\x86\x5c\x8c\xcc\x22\xa1\x05\x93\x48\xe9\x6c\xae\xf4\x16\x69\x19\xcf\xfa\x1b\xe7\x9a\x1b\xf1\x11\x9b\x10\x84\x51\xc6\x25\x55\xf4\xc9\xfb\x2f\xe9\x14\x61\x29\xc1\x82\x72\x8c\xce\x4b\xf6\x7f\x2a\x41\xf5\x6e\x8a\xab\xa5\x6c\x6c\x6d\xcf\xcd\xf9\x38\x3b\x6f\x64\xa9\x17\xbb\xca\x78\x22\x79\x92\xab\xd0\x05\x5b\xbf\xb7\x85\x69\xdc\x01\xf7\x83\x81\x98\x4f\x47\xcc\xd1\xb5\x3c\x46\x7d\x89\x24\xd7\xbb\x24\xcd\x56\x46\x82\x2a\x22\xa8\x41\x71\x22\xca\x6c\x82\x3f\xa7\xfe\x0c\xa4\x58\x3c\x6a\x11\x2a\xb4\xc0\x1b\x4c\xd1\x92\xb5\x63\x62\x24\x24\x80\xb5\x0a\xb7\x03\x4c\xff\x88\x71\x76\xc4\xc8\x0c\xaf\xdb\x91\x11\x2b\x6d\x09\xfa\x9a\x4e\x0b\x85\xb4\xc9\xe7\x18\xac\xdd\x18\x22\x9f\x9a\x76\xc9\x74\xdc\xb4\x49\xd3\x84\xe3\x35\x6e\xe3\x69\x71\xe8\xd1\xdf\xf9\xc4\x8c\x51\xeb\xfd\x5c\x81\x14\xa8\xd5\xab\x29\x17\x64\x8e\x59\xdc\x73\x9b\x55\x1e\x1b\xdc\x8c\xd6\xd4\xe6\x94\x31\x90\x04\x1d\x88\x30\x31\x58\x4c\x98\x05\x7b\x61\x15\x37\xbb\x15\xc5\x3e\x6c\x74\x57\xf8\xd6\xa0\xf6\x89\x31\x40\x18\x96\xb7\xc8\xec\x11\x97\x34\xcd\x92\x22\xa7\x29\xb0\x8d\x4e\xb5\x88\xe5\x78\x24\x7f\x02\xd3\x95\xd3\xda\xe0\x56\xb7\x3b\xa7\xe9\xac\x66\xe4\x9e\x91\xc2\xad\xe1\x6c\x5e\xa6\x0c\x66\xc0\xc2\xbe\x96\x44\xff\x53\x91\x42\xed\x33\xc2\xfa\x88\x39\x11\xe4\x1b\xe0\x32\xb6\xd9\xc0\x78\xa6\x45\x68\x03\xf3\x6a\xd7\x0f\x45\xc6\xc9\x5d\x3a\x27\xf6\x30\xb8\x57\x6b\x2e\xaa\xef\x28\xc3\xa5\xcc\xdb\x2d\x04\xbf\x24\xdf\x28\xb9\x2a\x70\xfb\x2d\x9a\x6a\x9a\x28\xbc\xae\xcc\xc8\x06\x94\x60\xf6\x99\x20\xdd\x9d\xa5\x66\x57\xf1\x06\x43\x44\xc0\x9c\x24\x19\x8a\xe9\x14\xcc\x52\x0a\xd8\xb7\x07\x16\x33\x58\xf0\xfa\xb0\xa7\x39\x33\x20\x71\xc6\x23\xf2\x6c\xf1\xb6\xed\xd5\x58\x34\x7e\x3c\x62\x43\xf5\x95\xd4\x22\x3a\x67\x33\x7d\xd1\xc4\x4f\x54\x16\x45\x4e\x22\xce\x64\x9e\x12\x61\xbb\xd0\x37\xb2\xa6\x48\x5b\x20\x00\x3b\x19\x4a\x8f\x4d\xef\xfd\x13\x4e\x68\xec\x0a\xf1\xe8\x1f\xcd\x99\xd3\xa3\x94\xce\xa3\x58\x13\x12\x66\x37\x37\xd6\x6b\xf5\x66\x62\xfd\x8f\xa1\xe4\x8e\xd2\x42\xc8\xc7\xd6\x56\x7f\x52\x15\xf1\xed\xaa\xaf\x10\xef\x27\x4b\x93\x42\xab\x05\x23\xbb\x0a\xe7\xeb\x50\x0c\x1d\xa2\x6e\x6e\x42\x80\x75\x3f\xce\xe8\x63\x06\xb7\x11\xfb\xa9\x4c\xd0\x8e\xda\x70\x96\x50\xbc\x27\x14\x64\x03\xa9\xb0\x16\x2f\xcc\x75\xc0\x85\xd5\x70\xec\x9d\xd3\xbc\xb5\xe7\x3b\x96\x89\x90\x11\x4e\x96\x77\x78\x85\xbd\xd9\xbc\xbf\x5a\x09\xb0\xc7\xcd\xb4\xbd\x32\xe9\x37\xe2\x49\xb2\x49\x09\x93\xca\xcc\xcf\x8a\xcf\x57\x8f\xa8\xe8\x47\x6f\x80\xdb\x0b\x38\x35\xe6\xf2\xc6\x89\x35\xa5\x48\x65\x77\x29\x7c\xc9\xa8\x61\x0b\xcb\x5a\x47\x8c\x4f\xa1\xc8\x4d\xd2\x14\xd5\x95\x09\x9e\xd2\x4d\x50\x96\x4d\xa0\xd3\xad\xb3\x8b\xaf\xb1\x32\x38\xeb\x39\x88\xa6\x86\xbc\x6c\x8f\x90\xaf\x87\xad\xb8\xb9\xe2\x0c\xa5\x38\xdb\x6a\xc1\xd7\x79\x85\xfa\x28\x35\x2e\x39\xbb\x7a\x80\xb7\x48\xa0\x5e\x0c\x2c\xf2\x33\x5e\x14\xa9\xd1\x4d\xf8\xb9\x6c\x23\x72\x78\xd0\xaf\x0f\xd9\x94\x6f\x70\x38\x8b\x54\x66\x7b\xfa\xb0\xa3\xd9\xe0\xfc\x79\x2f\x85\xd9\x7d\xb3\xa6\x6d\xce\xe3\x59\x1d\x51\x6f\x7c\x32\xdd\x0a\xbe\xa4\x8d\x32\x64\x22\xa1\x79\x72\x93\xbb\xb5\x7c\xb4\x82\x16\x11\x0c\x67\xf5\x52\x5d\x96\xe8\x70\xef\x6b\x54\x69\x07\x19\x53\xb8\x0b\xa6\xbe\xa9\x6f\xf5\x15\xd6\xcc\x1e\x92\x56\x8b\xb5\x23\x76\xc3\x66\x38\xc0\xae\x47\x8f\xfa\x5b\x7f\x42\xd7\x16\x39\x68\xbf\x18\xc0\xcd\xa4\xb5\x73\x15\x91\x99\x36\x45\x6d\x4a\x13\x2d\x62\x0f\x6b\x0c\x9c\x2e\x41\xcc\x07\x54\x99\x50\x79\x27\x3d\xe5\x82\x06\x85\x41\x9d\x8c\x84\x28\x14\x28\x09\x9d\x3c\x81\x42\x0f\xa6\xc5\x39\x7f\x36\xd1\xe9\x82\x6a\x9e\x65\x84\x55\x05\xe6\x1e\xcd\x0b\xa8\xb5\x96\x18\x63\x93\xff\x80\x9b\x98\x41\x6c\x6b\x1f\x17\xa3\x6a\xd8\xd2\x7d\x94\x78\x6a\x9f\x7f\xe7\x7a\xbd\xd7\x5f\x2c\xef\x4d\xed\x08\xef\xcb\xad\x6f\x3c\x3a\x2f\xe5\x6f\x1e\x30\xf5\x11\x3e\x75\x4a\x0f\x46\x53\x41\xc0\xc1\x9f\x7a\x4c\x0d\x03\xaa\xcb\x39\xdc\x77\x77\xe7\x3f\x9c\x3c\x0c\x11\x51\x11\x4a\xe8\x23\x19\xb1\x48\x3e\xf5\xb4\x78\xfc\x8f\x9c\x28\xfd\x73\x83\x47\x80\xa6\x84\x49\xe0\x04\x54\x2d\x61\x0f\xd5\x2f\xa4\x5b\x18\xfd\xdf\xf3\xf2\xf7\x2b\x48\x7e\x29\x7d\x18\x68\xd7\xd5\xbb\x01\x32\x85\x92\x1e\x66\x69\x65\x0d\xc5\x18\x5b\xe4\xa0\xae\x1a\xe6\x16\xe9\x42\xec\xef\x39\xdb\x50\xe8\x3a\x2b\x3e\x0a\x46\xd1\x20\xd3\xa5\x19\x06\xac\xeb\xcd\xf2\x90\xcc\x37\xb5\xad\xaf\x63\x22\x45\x5a\xb6\xb3\x2d\x17\x85\x43\x91\x12\x84\x00\x0b\xf1\xf4\x64\xef\x7a\x8b\xc4\xe1\x27\x16\x7c\x74\x3c\x62\x97\xce\xe3\x5c\xfc\x2a\x0b\x3d\x3c\x9d\x04\x10\xe0\xe5\x56\xa0\xd9\x98\x4a\xff\x03\x14\x74\x91\x79\xa2\x4c\x45\xbb\x29\x65\x38\xf1\x03\x35\x4f\xea\xb8\x84\xc0\x2c\x9a\xef\x6a\x42\xa6\xd3\x31\x49\x36\x91\x44\x87\xd3\x41\x22\x35\x7d\x47\x8f\x0d\xa7\x73\x9b\x9a\x8d\xc5\x64\x6c\x25\x5a\x53\xf7\x09\x15\x26\x68\x9c\x98\x8a\x72\x04\x81\x8f\xb2\x9a\x3d\x66\x00\x22\xf4\x2e\x5a\x49\xdd\xb8\x28\x4d\xda\x86\x0f\xc9\x86\x5e\x10\x56\x23\x26\x72\x06\xc5\x26\x7c\xc4\x02\x46\x05\x5e\x78\xe4\xfc\x07\xd6\x9b\x33\xd3\x6c\xc2\xc0\x71\x9b\x97\xb5\x7e\xc6\x73\x09\xb6\x9a\x94\x28\x7d\x41\x7d\x0d\x75\x60\x4d\xc8\x50\x0f\x65\x82\xa6\x60\x6e\x95\xdf\xd4\x6c\xdd\x19\x56\x38\xe1\xb3\xbe\x50\x74\x8a\x23\x75\x8f\x77\xd2\xc0\xb1\x6d\x66\xdb\xf0\x53\x37\x0c\x34\x3c\xd7\x8b\x3f\x23\x8c\x08\x98\xa8\xd6\xc9\xeb\x8f\x30\x3c\xd9\x8a\x73\x83\x95\xcd\x1a\x46\xa5\xb7\x58\xe0\x5c\xf1\x54\xeb\xb7\x38\x49\x16\x3d\x63\x91\x25\x68\x8e\xe5\xdc\x6d\xb4\x31\xa6\xb5\xb9\x9b\xec\xe2\x9e\xe1\x68\x4e\xee\xa0\x2a\x72\xdd\xe2\x56\x46\xf9\x81\xb0\x3c\xfd\x70\x8a\xfe\xa7\x98\xe3\x59\xff\xec\xfb\xc1\xf8\x7c\x78\xd7\xff\xee\x62\x70\x1e\xcc\xc7\x3e\xb9\x1c\xde\xdd\x2d\xff\xfa\xfd\xf0\x7e\xf9\xc7\x9b\xeb\x9b\x87\x8b\xfe\x7d\x5d\x2b\x17\xd7\xd7\x3f\x3c\xdc\x8c\x3f\xf6\x87\x17\x0f\xb7\x83\x9a\x4f\x1f\xee\x9b\x1f\xde\xfd\x30\xbc\xb9\x19\x9c\xbb\x55\xf9\x5b\x70\xba\xc0\x7a\x0c\xa9\x17\xf5\xd3\xa8\x1e\xc0\x23\x54\x7e\xf1\x14\x3d\x54\x4b\x1f\xd8\x58\x64\x83\x63\xf1\x8c\xa5\xe6\x61\x10\x0a\x3f\x62\xc8\x7d\xae\x17\xa5\xe9\x53\x13\xae\x13\xcd\x09\x4a\x38\x7f\xcc\x33\xcb\xda\x4c\x7c\x18\xe3\xc6\xf0\x43\x64\xd0\xda\xf7\xc3\xfb\xd3\xe5\x12\x0c\xbe\xb1\x00\x31\xcb\x9d\x01\x18\x17\x76\xec\x14\x6c\x29\x0e\x9a\xbf\xb0\xde\x06\x3d\xf8\x9d\x59\xd5\x8f\x69\x0d\x33\x55\xe9\x26\x8e\x6d\xd1\x5f\x37\xb1\xa0\xe1\xf2\xbe\xae\x5a\x4d\xbf\x1c\xa6\xf6\x14\x9a\x90\x08\xe7\x26\xa8\x49\xdf\x53\x42\x70\x11\x0e\xb8\xa0\x87\xfd\x35\x6a\xe9\xa8\xb6\xc1\xca\x9e\xe9\x89\xcb\x47\x9a\x65\x24\xfe\xb0\x2c\xbf\x94\xab\xc3\xda\x9a\xe4\x7c\x8a\x82\x33\xa9\xf5\x7a\xd0\xf9\x5d\xe1\x94\xf9\xc2\x7b\xd2\x20\x70\xa3\x08\x65\x01\x20\x67\x7d\x27\xf8\xc2\x16\x14\x5c\x63\x58\xa1\x67\x02\x29\xd5\xb9\xad\x1c\x65\x74\x6f\x7d\xb6\xa1\x3b\x63\xd3\x76\x75\xe0\x4a\xa9\xd6\x8d\xcc\x78\x1f\x02\xb7\xfe\x5e\x92\x3a\x46\xbc\x43\x5e\xec\xb9\x69\x14\xb8\xb3\x8b\x79\x83\x11\x37\x04\x37\xb8\xdb\xa0\xc6\x42\xbe\x42\xbe\x5a\xbe\x91\xd6\x5c\x16\x9a\x6d\xb7\x19\x8f\xc3\x02\x29\x01\x5c\xb7\x1f\x58\x09\x04\x79\xed\x5a\xdd\xf3\x18\x2f\x34\x71\x40\xac\xb1\xcc\xb3\x8c\x0b\x85\x1a\xda\x30\x6e\x7c\x33\x3e\xb8\x73\xec\x3c\x3c\x8f\x83\x46\xb4\x84\x21\x6b\x6a\x69\xb4\x83\x47\xb0\xeb\x5a\x30\x8e\x30\x40\x16\x14\x41\x5f\xf7\x28\x2d\xa9\xd4\x25\x0a\xad\x13\x7e\x77\xc9\x30\xc8\xf4\x05\xdf\xb6\x0c\x5f\x5d\xef\xd7\xae\x85\xda\x2d\x4f\xc8\x54\x8d\x6b\xbd\x3e\x2b\x0c\x9c\xba\x45\xd6\x84\x28\x43\x67\xf3\x3d\xb4\xd8\x5e\x4b\xf8\xa3\x0d\xec\xd1\xaa\x41\x60\x21\x10\x9c\x2b\x23\x9f\x16\x3a\x0c\x72\xab\x09\xe6\x05\xdb\xa9\xcd\x05\xf3\x42\xa0\x96\xf9\x8d\x3f\xd4\xa7\x4d\x1d\x8f\xd8\x00\x02\x28\x0a\x45\xc4\xa5\x88\x81\x16\xb0\x56\xfe\x2f\x15\x1d\x7d\xd5\x68\xcd\x66\x84\xd7\x82\xee\x6d\xbd\xfc\x64\x81\x8a\xc2\xb2\xa5\xef\xda\x9c\x1e\x63\xf5\x76\x22\xa0\x99\xb0\x2d\xe3\xae\x48\x66\x2d\xf3\x66\x9e\x45\xa4\x0f\xc4\x87\xe9\xae\x8e\xd1\x4f\xce\xf2\x03\x81\xaf\x45\x4d\x66\x1b\xbb\x91\xe0\x85\x03\x85\xac\x5b\xd8\x7d\xe0\x2c\xee\x3b\x14\x76\xf5\x02\x7b\x40\xa7\x9a\x55\x2e\x29\xe0\x8c\x19\x8b\xec\x06\x69\x1f\x67\xfe\xa3\x3b\xb2\x3a\x2a\xe0\x23\x94\xe1\xb4\x91\x55\x20\x74\xb0\x64\xf1\xbf\xcc\x66\x99\x4c\x54\x57\x58\xcb\x96\x45\xb4\x1e\x54\x7d\x7e\xc0\x03\x68\x12\x55\xd1\x94\x26\x09\xc8\x01\xc7\xa8\x0f\xe5\x81\x21\x91\x53\x5f\x85\x2e\xc0\x82\xce\x18\x5f\x97\x63\xd6\x40\x4c\x51\x40\x4c\x77\xcd\xc4\x24\x81\x9a\x8a\x3c\xfe\xfd\x50\xd4\x1e\x30\x5d\x34\x6f\xc1\xcb\x88\xd8\xed\x91\x5c\x36\x50\xde\xdf\x22\x3a\x7a\x69\xb8\xc1\x87\xff\xaa\x1f\xfa\xa7\x1c\x0b\xcc\x14\xc4\xfc\x5a\xd1\x5d\x90\x20\xf5\x88\x7c\x86\xf8\x0c\x66\x0c\xc1\xf0\x53\xb8\xb9\xce\xe5\x0f\xe1\x5e\x88\xc6\x3d\x44\x8f\xc9\x31\x54\x67\x13\x5a\x96\x98\x14\x6f\xce\xb5\xe4\x30\x62\x4b\xb1\x8c\xc7\xa8\x9f\x48\x6e\xbf\x20\x2c\x4a\xa0\x1c\x77\x10\x9e\xec\x29\xdf\xba\x95\x26\x0b\x50\x50\x60\x2b\x8b\xe6\xb9\x7d\x10\x7c\x08\x45\xc6\xc0\x27\x9e\xc0\x49\x2f\x7e\xff\x3d\xcf\x8c\xb7\xa2\x29\x4e\xe2\x05\xcb\x39\x2c\x5d\x43\x2f\xb6\x49\xa6\x54\xe0\xaa\x0d\x82\x37\x60\x63\x8a\x18\xd3\x00\x81\x05\x7d\x8d\x15\x4a\x08\x96\x0a\xfd\xe1\x9b\x8d\x62\x43\xdc\x04\x0b\xee\x6a\x8f\x6f\x91\x28\xe6\x52\x0d\x42\xe1\xce\x77\x0c\xb5\xe3\xb0\x50\x08\x23\x46\x9e\xc3\xc8\x52\x0e\xc1\xc0\xae\x20\x1c\x09\x72\x5b\x4d\x3c\x99\xc9\xcc\x87\x6c\x0d\xa3\x32\x35\xf0\x11\x07\x77\x6c\xdd\xa7\x76\x58\x35\x94\x65\x95\x27\x1b\xe2\x09\x90\x5c\x45\xd0\xff\x1c\xab\x11\xb3\x9c\xd5\x85\x8d\x04\x69\x5e\xfd\x24\x29\x07\xda\x63\xc8\x25\x61\x7a\xc2\x50\x9f\xfd\xd8\x2f\xd0\x15\xa8\x5f\x3e\xda\xb9\x64\xa7\x2b\x0e\x8b\x89\xc7\xf3\x78\x47\x61\xdb\xb5\xd2\x4e\x9d\x7d\xf9\x15\x85\xe0\x9a\xee\x2f\x4c\xa1\xfc\x16\xc2\x30\xa9\x1b\xf2\x9a\x83\xb5\x6c\xd3\x5f\x21\x1b\xef\xbb\x83\xf6\xa2\x72\xbd\x7d\x1c\xae\xd9\x67\x5e\x63\x6e\x6f\xd8\xdc\x40\xb6\xd8\x45\x01\xf7\x61\xf7\xaf\xe5\xf1\x2d\x0d\x7d\x18\x43\xd2\xdf\x7a\x2e\x58\x24\xd1\x39\xd6\x61\x62\xaf\xe3\x20\xa7\x27\x48\x21\x80\xe0\x3f\xc7\xf8\xec\x9b\x0d\x9e\xd7\xec\x7d\x4f\xbf\x57\xcc\xdf\x4d\xc5\x07\xc1\x2d\x4f\xbc\x59\xd8\xeb\xc7\x7f\xc7\x11\x44\xfa\x43\x4f\x2e\xc7\x60\x19\x90\xc9\xc1\x58\x63\x30\xe6\xd7\x8a\x87\x99\xe0\x11\x91\xf2\x18\x0d\xe0\xa2\xb1\xff\x44\x78\xea\x1c\x12\xc1\xcb\x23\xa6\x35\x13\x87\xdf\x12\xb4\x5f\x26\xf1\xba\x13\x60\xc0\xe0\x76\xf2\xe5\xa4\xeb\x6b\x94\x34\x69\x13\x0e\x8b\x0e\xda\x80\xb2\x06\x68\x30\x3b\x45\x31\x8f\x1e\x89\x38\x11\x24\xa6\xf2\x14\x7c\xeb\xaa\xd1\xa9\x97\x6a\x6d\x7b\x67\x49\xa3\x29\x50\x60\x4d\x52\xdc\x99\xe9\xdf\x06\x58\xbb\xf0\xda\x1e\xa2\x53\x50\x27\x5c\x4e\x86\x09\x42\x76\x70\x37\x84\x29\xb1\x80\xb8\x7e\x6f\xca\xaa\x2c\x84\xd3\x34\xb4\xd0\xd6\x94\x4d\x24\xf6\x11\x83\xb3\xe5\xb4\xef\xe7\x44\x12\x17\x70\x60\x26\xa5\xb8\x8d\x65\x36\xec\x22\xc3\x6a\x2e\x21\x75\xb5\xbc\x06\x56\xe9\x82\x4f\xf5\x0a\xe1\x0c\xe2\x15\x8c\x95\xa2\xf8\xc8\x27\x58\x4a\x45\x93\x64\xc4\x18\x21\xb1\x44\x90\x65\xfa\x55\x6d\x86\xbc\xfe\xb4\x87\x70\x1c\xa3\xff\xfd\xf5\xc7\x8b\x9f\xef\x07\xe3\xe1\x15\x18\xad\x87\x17\x83\x6f\x7a\xfe\xc7\xeb\x87\x7b\xff\xab\xb1\xb0\x3c\x11\x81\x52\xfc\x08\x2a\x1e\x93\xc4\x26\x4f\x90\x11\x0b\x47\xea\xb0\x03\xf4\x13\x49\x5c\xa4\xab\x15\x53\x3c\x84\xa2\xdd\xc3\xc6\x8a\xc5\xc6\xe6\xb7\x81\xf2\x7b\xeb\x3f\x59\x4d\x83\x8e\x78\x7c\x17\x4e\x0c\x84\x1c\x19\x2c\x83\x64\x72\xab\xfb\x16\x04\x47\xd8\x8c\xb2\xa6\x78\x3c\xc2\x9e\x5e\x52\x88\xff\x81\x2c\x7e\xd4\xea\xf5\x0d\xa6\xa2\x35\xed\xd5\xa3\x01\xb9\x13\xa3\xf5\x74\x2c\xab\x87\x4a\x1a\x59\xd8\x64\xdb\x34\xc6\x7c\xd6\x01\xc1\xbd\xf9\x74\x2d\xbc\x14\xf9\xac\x84\x43\xa9\xf0\xf9\x1c\x0e\xca\xc9\x5f\x34\x05\x0d\x8e\xd8\xfd\xf5\xf9\xf5\x29\x22\x09\x9e\x70\x08\xe5\xb7\x21\x41\xae\x09\xbb\x60\x11\x4f\x83\x86\x4a\x08\x25\x3d\x94\x15\x08\x25\xa1\x11\xed\xd8\xb4\xb1\x06\xa9\x24\xe3\x62\x19\xdf\x63\xbf\x2a\xa0\x9d\xec\x0d\x17\x6d\xae\x7f\xfd\x1a\x2c\x1d\xcf\xb4\x22\x57\xe1\xbc\xf6\x6e\x9e\x12\x6c\x6a\xe9\x1b\xb7\x90\xb5\xe5\xdb\x00\xd6\x24\x29\xd5\x53\xd4\x07\x47\x1e\x5b\x17\x7c\xf1\x26\x67\xe8\x87\xbf\x48\x34\xc9\xd5\x88\x95\xdb\xe0\x0c\xf5\x7f\xba\x43\xdf\x61\x15\xcd\xbf\x19\xb1\x6b\xad\x66\xfe\xf0\x97\x06\x28\xa5\x8d\xd1\x09\xf5\x9a\x9c\x63\x85\x2f\x38\x8e\x29\x9b\xd5\x41\x13\x16\xf5\x63\x06\xf7\xfd\x53\x74\x6d\x75\xf8\x22\x13\xc4\xa7\x04\x07\x0d\x01\x43\x86\x89\x38\x2e\x02\xac\x9c\x95\xe1\xdb\x8c\x66\x06\x17\xd6\x88\xdd\x1b\x4c\x46\xcd\x55\xa9\x42\x19\xb7\x35\x8c\xb4\x56\x66\xd0\x2a\xb1\xcb\x90\x22\xc9\x02\xe9\xd5\x01\x32\xf6\x9b\x61\xe5\x31\x90\x67\x96\x99\xfd\x88\x81\x82\xee\x73\x53\x12\x1e\xe1\x04\x62\xf2\x8e\x02\x9b\x9e\x56\xdb\x79\x0e\xf9\xe1\xa6\xe8\xf9\xa2\x1c\x3a\xeb\x21\x0b\xbc\x50\x16\x6e\x14\x18\x00\x60\x1f\xad\x37\x36\xe5\x9a\xe3\x18\x2c\x36\x30\xbe\x25\x66\x75\xf4\x87\x1e\x9b\xcd\x2c\x8b\x7e\xea\xd3\xb6\x78\xce\x1c\x16\x49\x04\xe6\x7b\xb6\x80\xf0\x6d\x28\x3a\xc2\x21\xf4\xa3\xe0\xce\x96\x28\x97\x76\xd1\xdf\x89\xc1\x67\x23\x66\x22\x05\x4b\xfb\x12\xa2\xf7\x04\xbd\x73\x06\x81\x8c\xcb\xb9\x62\x79\x66\x03\x1b\xad\xac\x9f\x09\x72\xe4\x33\xa0\xe2\xd2\x9a\xea\x1b\xf6\x18\xdd\x86\xea\x75\xcc\xa3\x3c\x75\xc8\xca\x90\x3d\x55\x94\x95\x2f\x49\x3c\xe6\x62\x5f\x47\xf1\x80\xd2\xa2\x08\xa4\x8f\xb7\xd6\x8f\x0d\xc1\xf4\xc3\x4f\x97\x25\xf5\x66\xc1\x17\x78\xc7\x6e\x51\x6b\xa6\xa1\x71\x56\x6e\xa9\xd4\xda\xce\x79\x89\x57\x05\xfa\x2b\x17\x20\x6c\x91\xcf\x19\x07\x23\xb7\x49\xcf\xe2\xf1\x57\x12\x0d\x6f\xb4\x04\xa4\x35\x5e\x7f\x06\x73\xa9\x4c\x70\x19\xa4\xeb\x98\xaf\x4d\xba\x40\x0f\x7d\x8b\x46\xf9\xb7\xdf\xfe\x29\x42\x9f\xdd\x1f\x7f\xfe\xcf\xff\xfc\xd3\x9f\x37\x49\x27\x71\x0a\x39\xb4\x5b\xac\x91\x2f\x27\x55\x16\x89\xc2\x1d\x58\xe6\x54\x3b\xec\x82\x3d\x80\x4d\xcb\xbf\x0d\xca\x63\x10\x3b\x84\x67\xf6\x84\xcb\xf0\x64\xa2\xd2\xd1\x2c\x22\x09\x24\x51\xbd\x32\x87\xf0\xc2\xae\x95\xe8\xff\xd7\x0a\xb0\xb2\xb1\x3e\x2a\xdb\xc5\x38\xd1\xc4\x8b\xd7\xba\x11\xf4\xb5\xb5\xff\x29\x70\x20\x7e\xe3\x2e\x38\x9e\xc4\x44\x98\x31\x79\x93\x9d\x37\x24\x02\x73\x20\x9f\xb3\x84\xc7\x0e\x1e\xb5\xc8\x05\xa4\x20\x20\x0c\x3e\x63\xcd\xb9\x7b\x16\x46\xcb\x7c\x64\x3c\x2f\x53\x1c\x19\x54\x50\x89\xbe\xfe\x7c\xaa\x7f\xeb\xa1\xc5\x29\x04\x91\xf6\xd0\xaf\xa7\x16\x2d\x07\x0b\x35\xd6\x3f\x7d\xe3\x64\x6d\xdb\x04\x0c\x9a\x4a\xf4\xd5\xc9\x13\x16\xa6\x66\xf4\x89\x19\xd1\x57\x96\xb3\xfa\xba\x78\xa1\x6c\x9e\x70\xfe\x68\x03\x6c\x97\x3e\x3c\x71\xc0\x6b\x40\xde\xde\x6f\x62\xb6\xde\x27\xe6\x2b\x74\x04\x2f\x10\x74\x9c\x4d\xd0\xf1\xdf\x25\x67\xe8\x78\x81\xd3\xc4\xfe\xea\x9e\xda\xf8\x5f\x2c\x6d\x4e\x5c\xec\x83\x7c\x92\x85\xb1\x94\x7e\x97\xf0\x09\xcc\xea\xd2\xcd\xd4\x44\xd0\xc2\x40\x8b\xdb\xa7\xb8\xb0\xec\x44\x5c\x22\x2a\xe0\x07\xa5\x5c\x99\x57\x80\xc7\xd5\xcd\xea\xb3\x1f\xd2\x7f\x1b\xbf\x30\x2c\x8a\x4b\xe2\x33\xc6\x61\x1f\xbd\xa6\x1b\xfd\x8c\xbe\xb6\x2c\xe8\x1b\x7d\xc7\xd8\x70\x65\xb3\x0c\x75\x1d\x2c\x7c\x07\x3f\x07\x1d\x50\x86\x4c\x5a\xe6\x8a\x2f\x7f\x3d\x39\x3e\x3e\xf6\x5f\x43\xd6\xfa\xff\x8b\xa8\x92\x24\x99\x9a\x96\xdc\x0d\xb6\x18\xb1\x4b\x57\x78\xc1\x19\xaf\x0b\x48\xc7\x4c\x70\xc5\x23\x9e\xa0\xa3\xc2\xa0\x1b\xf3\x48\xa2\x7f\xd7\x62\x6d\xb0\x94\xf0\xa3\xd6\xe3\x1a\x60\x60\x0d\xd2\xf3\x2b\x1d\x2a\x6b\x10\xaf\x1e\xab\x10\xc5\xcd\x2b\xb6\x58\x86\x55\x3c\x80\x16\x34\xe5\x9c\x58\xa4\x37\x21\xf4\xcb\xe4\xb3\x82\x47\x0d\x40\x7a\xb5\xa1\xec\xf5\x37\xe5\x12\xbb\x2d\xf0\xf4\x0c\x59\x37\x2c\x80\xc5\xbb\xb2\x9c\xc1\xcc\xb3\x17\xba\x4f\xf4\xe5\xc2\xc2\x52\x00\x32\x4f\x53\x2c\x16\x27\xc5\x69\x5b\x26\xce\x02\x69\x0d\x78\x4c\xe2\x16\x00\x5c\xb8\x89\x3d\x5a\x36\x8a\xc1\x8a\x97\xee\x46\xf3\x67\x37\x82\x5a\x86\x01\x62\x01\x61\x11\x8f\x2d\x5d\x17\xd9\xa7\x65\x89\xc5\xbf\xb3\x2c\xab\xb8\x88\x18\x59\x18\xe3\x98\x32\x10\x1e\xf6\x0d\xf7\x71\x03\xfb\xe6\x63\xa8\x8a\x4b\x66\x1b\xb8\x47\x87\xd7\x77\xee\x9b\xf6\x97\x2e\xac\x43\x59\x64\xc7\x49\x88\x8f\xc7\x66\x48\xe0\xe7\xe2\xfa\x85\xd8\x0e\x63\x9d\xc9\x7d\x6e\xae\xf9\xf7\x19\xbf\xa1\x89\xbe\xb5\x80\xc6\x8f\x47\xac\xf4\x73\x0f\x91\x84\xa6\x94\xf9\xd8\x3a\xc3\xdc\xf9\xd4\x48\xcf\x8f\x54\xe9\x2d\x93\xf1\xa3\xe6\x60\x0e\xd7\x29\x50\xa9\xfa\x6c\xe1\x48\xc7\x3b\xa6\xac\x05\x22\x97\x7a\x5c\x85\x8e\xae\x85\x59\xdd\xc4\x91\x15\x48\x69\x40\x78\x70\x7e\x47\x4c\xb7\xe6\xce\x52\x11\x2e\x1c\xb4\x17\x34\x77\xe4\x00\xf1\x03\x0e\x00\x7d\x94\x62\x7e\xbd\xfc\x5b\x23\xa0\x0c\x58\x9e\xee\x9a\x6c\x62\xc3\x87\xdf\xca\x4c\x77\x23\x88\xbb\xa9\x6c\xe2\x12\x61\x79\xea\x0e\xd4\x06\x14\x37\xb0\xe2\x4f\x4c\xa2\x04\x1b\xa4\x1a\xdd\x10\x44\x3e\xf6\x8c\x83\x34\x0b\xfa\x32\xd7\x8b\xe9\xc6\xd4\xd8\x49\x08\xfb\xda\xfc\xfb\x1b\x64\xef\x86\x6f\x7b\xf6\x3e\x17\xd2\x23\x80\x98\x3d\x87\x1a\x8d\x24\x36\x36\x74\x40\x25\x9e\x61\x11\x1b\x6b\x79\xa8\x55\x98\x0c\x5e\x2d\x7f\x2d\x78\x8e\x9e\xa9\x9c\x8f\xd8\x3d\x77\x06\x47\xc4\xb8\xc7\x75\xee\x81\x32\xba\xd4\x1f\x96\xc0\x04\x60\xd4\x75\x14\xa0\x99\xf0\x4e\xb9\x46\x10\x05\x3b\x66\x3c\x26\xbb\x01\x18\xdd\x17\xbe\x0a\xe7\xbf\x16\xc4\xe4\x83\xc1\x4d\xd1\x94\x4e\x4b\xa4\xdc\xd0\x36\x5f\xdd\x78\xb8\x87\x6c\x3b\x50\x12\xf8\x79\x23\x74\xed\x10\x1b\xcc\xdf\x6a\xd0\x8a\xd3\x38\x83\x6c\xe0\xd2\xda\x7b\xb4\xe4\x5d\x37\x21\xaa\x41\x2b\x6a\x75\xf7\x9b\xb9\x47\xb0\xec\x3e\xc0\x18\xa3\x99\xe0\x79\xe6\x53\xe6\x5d\xba\x9f\xd9\x06\x2b\xd3\x0c\xd9\x94\x9f\x5a\x9d\xea\x82\xb2\x47\x43\xf1\x2f\xb5\x47\x06\x10\x9b\xc4\x25\x18\x37\x57\xa5\x15\xe6\x70\x84\x28\x8b\x92\x1c\x2e\x3e\xa9\x70\xf4\x68\x40\xbd\x9b\x8c\xbe\xfa\x9b\xf1\xfa\x64\xca\x06\x89\x29\x4f\x12\xdb\x6d\x71\x81\x16\x65\xac\x9f\x28\x46\x18\x3d\xdc\x0e\xeb\xfb\x7e\xa4\xcb\xce\x9c\xfa\xdb\xb3\x4c\x20\xf0\x3f\x3f\xd0\x8d\xe2\x2e\x2b\xb0\x78\xa4\x44\xea\xde\xb8\xd4\x04\xba\x6a\x88\x54\x69\x05\x22\xbe\xad\x31\xed\x6f\x4c\xa7\xb3\x2c\x1f\xeb\x85\x4a\x36\x09\x10\xd0\xa3\xf8\x74\xf3\xd0\x0f\xbe\x5b\x45\x2a\x9f\x6e\x1e\x50\xd0\x87\x01\x3c\x4c\x48\xa4\x7c\xa4\xf1\x31\x3a\x2b\x70\x88\xab\x92\x79\x4c\x9e\x68\x64\x52\x5c\x7b\x5a\x2a\x1a\x31\x80\xf7\xd4\xba\xce\x91\xc3\x84\x42\x9f\x6e\x1e\x2c\x92\x94\x87\x9b\xb2\x90\xca\x00\x61\xb1\xd9\xb5\x53\x01\xd6\x64\x9c\x1d\x81\xc4\x86\x45\x5c\x78\x3b\x7a\xa0\x5c\xff\x7f\xec\xbd\x5b\x73\x1b\x49\x72\x36\x7c\xbf\xbf\xa2\x22\x7c\xa1\xd1\xf7\x81\xe0\x68\xf6\xb5\x63\xad\x08\x5f\x50\x14\xb5\xc3\x5d\x89\xd2\xf2\x30\xb3\x7e\x0d\x07\x54\xe8\x2e\x00\x65\x36\xaa\xa0\xae\x6e\x72\x60\xaf\xff\xfb\x1b\x95\x99\x75\xe8\x23\xba\x01\x52\x1a\xaf\xe7\xc2\xde\x11\xd1\x5d\x5d\xe7\xca\xca\x7c\xf2\x79\x12\xbe\x2d\x4a\x32\x30\x1e\x5e\x4d\xdd\x98\x5c\x87\x48\x88\xad\x96\x9e\x29\x6b\x2b\x61\x96\x01\xa8\x7f\x34\xf5\xe9\x5b\x3a\xf5\x18\x70\x00\x74\xda\x51\x9b\xbf\xf4\x19\x7e\x5c\xed\x18\xcf\x17\xb2\xc8\xed\x35\x0c\x5f\x86\xa1\x70\x77\x8f\x85\xbb\x51\x05\xcb\x88\x04\x5b\x60\x80\xa5\x2a\xcc\x4c\x45\x19\x2c\x3e\x2b\x18\x93\x17\xa4\x62\x40\x87\x07\xd8\x1b\x47\xcf\x95\x64\xba\x4c\xdd\xb1\x9a\x7b\x01\x98\xdd\x16\x8d\xa8\x99\x02\x66\x12\x7b\xb6\x82\xf0\x79\x38\xfb\x5f\xb3\xcf\xea\x41\xa6\x92\x9f\x14\xc2\x64\xfc\xa4\xf8\x3f\x9f\x27\xb5\x3f\xf1\x57\xdf\x7f\xff\x19\xb5\x6c\xba\x68\x17\xfc\x34\x3a\xda\xc1\xd3\x1e\xa7\x70\xc5\xcf\xed\x2c\x3d\x62\x9c\xde\xcb\x7b\xc1\x3e\xe3\x70\x7f\x26\x02\xbf\xc3\x86\x6d\xa6\xda\xc6\x8d\x1d\x32\x6c\x40\xa7\xda\x3e\x6e\xac\x67\xd8\x5e\xad\xa6\xff\xb8\x5a\xd8\xd1\xfa\x61\x35\x7d\xf5\x3d\xfc\x67\x6d\x8c\xf6\x2d\x5e\x9f\x3d\xd3\x56\xed\x96\x8d\xa8\x65\x59\xfa\xbd\x68\xa6\xf6\x6f\x46\x6c\xdc\x5e\x04\xb3\xb6\x6d\xe1\xf3\x42\x1c\x9b\xdd\x8a\xbc\x8e\x23\xd0\xd7\x0d\xc2\xcc\xde\x88\xe0\x91\x6c\x93\x81\x29\x12\xe0\x9e\xdd\xb4\x97\x31\x00\x17\x7e\x1c\xc1\xc7\x03\xcf\x0f\x6b\x4f\xed\xd9\x3d\xcd\xe9\xaf\x66\x26\xc4\x08\x06\x99\x1b\xfb\xf8\xc0\x4a\x56\x1e\xed\xab\xe3\x23\x47\x45\x9d\x26\x91\x7b\x4a\xb7\xf5\x31\xab\xc8\x4d\x47\x74\x99\x18\x9f\xf7\xe7\x6b\xe2\xa0\x95\xfe\x7e\xed\xbe\xbb\xa2\xb5\x14\x0b\xf6\xf8\xa8\x5b\xcb\xc4\x8f\x5c\x11\x47\x42\xe1\xec\x95\x7a\xbe\x19\x4c\x12\x1a\x3e\xfc\x96\x5e\xfe\xd0\xa0\x0c\xf5\xe6\xe5\x07\xc8\xcc\xf6\x64\x58\x1b\xae\xac\xb5\xe6\xbe\xda\x11\x58\xc2\x5b\xfe\x41\x55\xba\xdb\x1e\x54\x21\xfc\xe2\x40\x2d\x5b\xfa\x94\x2b\xe5\x11\x63\xab\x3c\xc3\xd8\x41\xb1\x06\xb7\x72\xd0\x80\x73\xdb\x5c\x70\x2f\xa3\x5e\x5c\xc6\xf3\x15\x3a\xbd\x8c\x28\xcc\xcb\x96\x11\x0e\x79\x6c\x47\x8c\xf0\x01\x3a\xdb\x31\x96\x05\x5c\x2a\x7d\x2b\xcd\xd7\xb2\x4a\x18\xed\x6f\x5a\x5e\xb1\x3e\x62\x43\x0d\xc9\x75\x89\xce\x51\x5d\x21\xb5\x6b\xa5\x9b\x07\x6b\xac\xd4\x7b\x3d\x1e\xc7\x37\x9e\xe5\xc5\xa9\xbe\x53\xce\x2e\x56\x6e\x21\x80\xeb\xbc\xbb\x0e\xe3\x75\xdd\x7b\xaa\x40\x42\xc7\x5d\x35\x98\xa9\x33\xf7\x48\x60\x6c\x34\x12\xbd\x2c\x98\x8e\x58\x2e\x30\xc3\x05\x7c\x66\x3c\xf4\x3a\x35\xae\xa3\x11\x63\x13\xf2\x6b\x4d\xb8\x33\x22\x0f\xa7\x11\xa9\xc0\x79\x5e\xe6\x5e\x05\xbe\x07\x91\xb7\xc1\x8e\x47\x7c\xfc\xc6\x35\x91\x8a\x72\x7d\xd9\xf6\xe1\xe1\x17\x15\x2a\x08\x12\x8e\x08\x55\x8b\x79\x01\xd9\x2e\x4c\xd3\x40\xfc\x59\xfb\x58\x73\xb5\x16\x47\xed\xc6\x92\x6f\xe6\xb9\xee\x96\x28\x1c\xd0\x4d\xae\x88\x8a\xcf\x7e\x8d\x92\x45\x3b\xf6\xa5\xe4\x19\x1e\x6e\x8a\xa6\xa3\xab\x36\xb8\x3f\x7e\xf8\x27\x76\x06\xa7\x0f\xfb\x00\xfb\x22\x80\xb6\xa0\xb4\x42\x33\xb9\xd9\x8a\xdc\x68\xc5\x3b\xb5\x3a\xef\xff\x60\xe6\xa4\x37\x66\xaf\xc6\xba\x6c\x6a\x8b\x8d\x68\x49\x4b\x69\x71\xa3\x38\xbb\x2f\x17\x22\x57\x02\xf5\x48\xe1\x39\xe6\x9e\x1b\x54\x5d\xcd\xcb\x62\xfd\xc3\x3c\xc9\xe4\x60\x11\x34\xc8\x18\x3d\xb3\xaf\x9d\xe3\x5b\x7d\x0d\xa8\x94\x5f\xa9\xba\x62\xf8\x1b\xc3\xdf\xa6\xec\x0d\x4f\xee\x85\x4a\xd9\x36\x2b\x57\x92\x08\x62\xd0\xdc\x97\xd5\x8b\x7d\xb5\x61\x68\x5b\x60\xf9\xf6\x18\x9a\xa9\x0d\xbf\x47\x62\x72\x32\x22\xed\xcd\xa1\x8b\x5e\xd0\xbb\x4a\xe6\xb2\x39\x77\xf7\x8e\x96\x3f\x0f\x9b\xc5\xd4\xe7\x9e\x29\x31\x5f\xee\x71\xad\x09\x65\x54\xf1\xd4\x8c\x58\xb8\x7e\xb6\x36\x78\xbc\x1c\xd7\x8a\x57\xa6\xa5\xca\xe0\xea\x85\x10\x1e\x90\xeb\x97\x8a\x71\xa0\x02\x7b\x61\x58\xb9\x75\xf6\x19\xc4\x96\x32\x40\xfa\xe0\x10\xd8\x1f\xb6\x32\xb9\x47\x6c\x29\x64\x4f\x30\xdf\xbc\x86\x80\x21\x13\x01\xe4\xd8\xb6\x35\x2c\x91\x08\xe7\x38\xdc\x4a\x83\x9b\x7f\xcf\x3c\x1d\x98\x19\x52\xac\x85\x9a\x1f\x40\x11\x3f\x7c\xd0\x2a\x59\x20\x64\x06\xfb\x18\x9d\xef\xc2\x52\x49\x12\x05\x0c\x77\x6c\xcf\x7f\x2c\x97\x35\x33\x5a\x1a\x66\x78\x21\x8d\xdd\xcb\x5a\x7b\x3c\xd0\x0f\x1d\xd3\xeb\x7c\x1c\xe7\x51\x0b\xdf\x51\xad\x2f\x7c\xa6\xd9\x94\xbd\x83\xc8\x46\x74\x33\xd0\x9e\x3d\xa8\x6b\xc3\x2a\xd6\xa2\x93\x46\xf7\x29\x20\x9a\xae\x05\xd1\xf3\xbd\x01\x2b\x9f\x55\x38\x65\x67\x21\xa2\x8c\xfc\x49\x18\x2b\xde\xd3\x22\x91\x19\x71\xc8\xe4\x1b\x14\x7c\x01\xd4\x15\x4c\x20\x06\x96\x94\xb1\x7f\x0f\xaa\x20\xbe\x9a\x8f\x90\xb8\xcf\xef\x85\xea\xf3\xb0\x0f\xaf\x21\x86\x40\x7a\x5d\x02\x3e\xb6\xa2\x31\xbc\x72\x48\x05\x87\x2f\xbb\x40\x59\x25\x97\xa7\xb6\xcb\xed\x35\x24\xb9\xa7\x74\x41\x8c\xb0\x11\xe9\xd5\xe3\x5a\x9b\x78\x9d\xb9\xf1\xc3\x9b\x6c\x5e\x7a\xe5\x07\x48\xb7\xf4\x1d\x8c\x38\x4b\xa5\x63\x4e\x2c\xa8\xb5\x5f\xa4\xe8\xd6\xf1\xe3\xcd\xdc\x16\x0a\xdd\x00\xc8\x04\x57\x54\x73\x35\xff\xf9\x0f\xe6\x23\xac\xd8\xa7\x60\x5f\x69\x97\xda\x3e\x3e\xf3\xe9\xc0\x98\xaf\xc7\xf4\x06\x9d\x6e\x9e\x7a\xbe\xa0\xad\x4e\x59\x98\x5e\xe3\x45\xb9\xbf\x7d\xb3\x6a\x62\xde\x83\xda\xb6\x6f\x66\x7f\x88\x80\x61\x6c\x51\xca\x2c\x45\xfa\xbc\xc8\x20\xd4\xce\xe2\x00\x4e\x7b\x38\xfe\xa5\xf1\xe7\x49\xfb\x1c\xfb\xa4\xd3\x63\x26\xd6\x78\x8a\xd4\xe6\xbc\x1e\x90\x37\x62\x62\xf0\xce\x66\x7f\x4f\x6c\x75\x37\xe2\x3f\x9d\x9b\xaa\x88\x5b\x4f\x85\x01\xe2\xb5\x28\x97\x37\xa0\x18\xd5\xc5\x42\x14\x89\xa9\xb8\xb4\x62\x3b\xce\xf6\x33\x3e\xc9\xad\x6b\x50\x08\x31\x14\x8e\x7f\xce\xfe\x74\xf3\xf1\xea\x64\xc3\x73\xb3\xe6\xc0\xf2\xe0\xca\x9a\x38\x11\x4e\xbc\x1e\x3b\x24\x83\x54\x33\x75\xc2\x56\x7a\x82\xb8\x99\xd7\x6c\x5d\x14\x5b\xf3\xfa\xf4\x74\x25\x8b\x75\xb9\x98\x26\x7a\x73\x1a\xba\xe6\x94\x6f\xe5\xe9\x22\xd3\x8b\xd3\x5c\x40\xe6\xc4\xc9\xab\xe9\x0f\xaf\x60\x64\x4e\x1f\x5e\x9d\x02\x5a\x62\xba\xd2\xff\xf0\xfe\x87\x7f\xfe\xfd\x3f\xd9\x82\xb7\xbb\x62\xad\xd5\x6b\x02\xe5\xf4\x96\x7d\x82\x56\xf9\x29\xbe\x52\xfb\xca\x3f\x4f\xbf\x8f\xab\x41\x8f\x6e\x74\x2a\x32\x73\xfa\xf0\x6a\xee\x06\x66\xba\xdd\xfd\x96\x6b\xf0\xcd\x72\x0d\xee\x65\xf1\x5b\xae\xc1\x37\xcd\x35\x18\x6e\xe1\xf8\x3d\x06\xc8\x9b\xc3\xfe\x68\xff\xee\xf7\x48\xe7\x7a\xdf\xb7\x0f\xb5\x1c\x0e\x71\x26\xd8\x11\x47\xc4\xbd\x18\x75\xc5\xae\x35\xd7\x5f\x1d\x3a\x5c\x6c\x63\x05\x54\x3a\x8d\xf9\x51\xc4\x17\x80\xec\x93\x09\x90\xf3\xa3\x4b\x70\xcb\x65\x5b\x06\x01\x21\x58\x8f\xe9\xbf\xe7\x94\x99\x78\x6a\x7d\x09\x6a\xee\x81\xda\x12\x19\xbe\xed\xf0\xb6\xfa\xd1\x69\x4a\x3c\x85\x12\xc3\x40\x6d\x6e\x4f\x30\x8f\x93\x07\xea\xe2\xea\xd5\x51\x8d\x35\x37\x87\x01\xb7\xcf\x90\xc6\xd5\xc7\xe9\x10\xf5\x2a\x8d\xfb\xa0\x3b\x38\x1c\x33\x8e\x3d\x87\x1c\x01\xdf\xb6\xcc\xb7\xda\x08\x33\x65\xef\x6a\xea\xb5\x01\x8c\x7e\xfd\xee\x9c\xbd\xfa\xc3\x3f\xff\x7e\xa6\xbe\x6b\x39\xb7\x61\xbf\xd7\xf9\x8a\xb0\xf1\x70\x5a\x6f\xb8\x29\x44\x7e\x9a\x2f\x93\x53\xdc\xe5\x4e\xed\xfb\x27\xf4\xd1\x13\xbd\x3c\xf1\x34\xf3\x27\xc4\xb8\x3d\xdd\xa4\xe3\x48\x63\x2a\x53\x0f\xcf\x1a\x3a\x68\x0c\x1c\x4a\x48\x2f\xa7\x97\x5e\x50\x04\x73\x17\x51\x7b\x48\x2f\x5b\xfe\xe3\x4d\xa6\x17\xe6\xa5\x27\xb5\xe4\xc6\x7d\x23\xb0\xcc\x75\x2f\xcd\xa7\x51\x9c\x70\x53\xe4\x39\x1d\x15\x6e\x2f\x89\xaf\x23\x63\x3a\xbe\x7d\xb1\x85\xe3\x1e\x39\x76\x78\xae\x4b\xe5\x18\xfb\xb5\x12\x7a\x09\xd0\x0d\xb0\x84\x1d\xf2\x0c\x7c\xb5\x80\x67\xf2\x7c\x3a\xb9\xd8\xe2\x01\x03\x51\x85\xee\xee\x3e\x52\xb5\x62\x5f\x3f\x3f\x87\x6a\xc5\xb1\xfd\x4e\x1b\xca\x37\xea\xf0\x63\xe1\xe1\xb8\x94\xc6\xa0\x2a\xec\xf3\x7b\x23\xa8\x7e\x1f\x08\x8a\x72\x81\x20\x7e\xcb\x73\x30\xd2\xc4\x49\xa1\x4f\x80\x88\x0c\xe8\xad\x50\x47\xa6\x0b\x56\x01\x91\xe7\x31\xc7\xa4\x7d\x7e\x40\x3d\xd1\x30\xff\x25\xaa\x28\xd9\x24\x06\x69\x99\x09\x66\x2b\x95\x12\x39\xc5\xd4\xf6\x9e\xa8\x23\xe3\xd2\xf1\x50\xf6\xa3\x6c\xc3\x4d\x34\xd6\xf8\xf0\x39\x56\x3c\xda\x04\xa6\x0c\xac\xcf\xb5\xde\x68\x6b\xce\xe8\xd2\x44\x3f\xe2\xed\x05\x0e\xe1\x4e\xdb\x6b\xc3\xb7\x48\x3c\xfa\xed\x5a\x63\x97\x96\xfd\x09\x9d\x7a\xf1\x43\xa3\x64\x93\x16\x55\xa1\x98\x3d\xf5\xf7\x0a\x1f\xfd\xf3\x06\x50\x0f\xa8\x3d\x0a\xf2\xdf\xc4\xdb\x2f\xff\xd3\xde\x6b\xec\x94\xf2\x37\x05\x7f\x72\x23\x48\x07\xf9\x75\x63\x48\x9a\xb3\xe6\x3b\x19\x30\xca\xcd\xc8\x31\xf0\x89\x23\x43\x06\x80\x2b\x4c\xa5\x70\x39\x14\x27\xad\x49\x14\x5d\xeb\xd2\x89\x6d\xa7\x73\xc7\x01\x3d\xae\xaa\x37\xbe\x00\xa2\x7b\x6e\xd6\x3b\x50\xe8\x41\xc6\x0d\xf6\x31\x6e\x08\xce\xb6\xe8\x02\x6e\x8e\x5f\x8c\x20\x9a\x35\xa6\xef\xe0\x23\x38\x39\x1b\x3d\x18\xad\x85\xae\x0e\x1c\xe7\x62\xeb\xf3\x58\xb5\x61\x76\x91\x75\x34\x64\x64\xda\x5a\x36\x2e\x8f\xfe\xc5\x07\xbf\xbe\x10\xd2\xb8\x28\xe1\xf7\xab\x8f\xb7\x31\x5a\x43\x62\x6b\x4f\x92\xb5\x48\xee\xc1\x61\x82\x47\x9e\x17\xe2\x25\x86\xd3\x99\x0a\x72\x8e\x85\x76\xd0\x83\x9d\x57\xb8\xf0\x2a\x2f\x3a\x67\xa9\x34\xdb\x8c\xef\x20\xc8\xab\x30\xf7\x2a\x04\x88\x7d\xd2\xa2\xdd\x0a\xf6\xf9\x8b\x87\x8f\xb4\x1d\x95\xb3\xf0\xde\xd8\xbe\x0c\x60\xda\xd0\x99\xcd\xfd\x80\x19\xb1\xe1\xaa\x90\xc9\x4c\x6d\x04\x57\x31\x2a\x8f\x82\xdc\xb6\x93\x53\x2d\x88\x03\x7e\xb9\x14\x49\x11\x48\x64\xc1\x78\xf7\x3d\xb5\x6f\x0d\x8e\x6b\xbb\x5f\x79\xbd\x4d\xff\x11\x70\xbf\x18\xa3\xcf\xf5\x03\x6d\xc3\xee\x68\x3c\x30\x78\x03\xf2\x9f\x74\xe4\xba\xcb\x20\xfc\xcb\xcd\x29\xb6\x10\xc5\xa3\x00\x8e\x14\x4a\xea\x6e\xb3\xf1\x8f\x96\x80\x39\x4e\xd1\xbd\x5d\x0b\x3f\x42\x82\xe1\x02\x8b\xc1\x64\x9e\xcc\x4d\xd5\x58\xd9\x5e\x50\x9a\x39\x78\x7b\x5e\x90\xdf\xea\x05\x1c\xd3\xf6\xf6\x98\x3f\x88\x74\xa6\xaa\x54\x79\x64\x33\x86\x05\xc7\x82\xb8\xe1\xd3\xec\x36\xae\x8f\x07\xf9\xf2\x2f\x80\x1e\x28\x10\x03\xfb\x44\xea\x1e\xb1\x45\x6c\xf4\x73\xde\xaa\x9c\xce\x6b\x6c\xdd\x0f\x80\x64\x09\xe3\xc4\xcb\x48\xeb\xb4\x82\xa7\xf0\x93\xd2\x13\x81\x21\x4b\xa8\x07\xc0\x92\x5f\xb2\xe1\xe9\x6c\x2b\x63\xa6\x1c\x43\xc6\xb2\xcc\x90\xf9\xb9\x2b\x0f\x81\x78\x01\x5d\x36\xdf\xb7\xcb\xea\xf4\x7e\x35\x16\xe9\x45\x7a\xd8\x43\x04\x46\xc6\xbd\xce\xcd\x7a\xa1\x4c\x09\x26\x85\x93\x8a\x03\xc7\xf3\x4a\x14\x70\x9a\xa7\x65\x86\x84\x0f\xe0\x31\x07\x8e\x41\x9e\x65\x4c\x16\x66\xa6\x3c\x25\x22\x26\x1b\xc0\x0e\xeb\x5c\xea\x4e\x65\x5c\x79\xad\x72\xf8\x99\x2b\xb0\xc3\x64\x22\x8b\x06\x84\x7b\x17\xcb\x2b\x6d\xb7\x82\x63\x7e\x32\x0e\xdb\x4c\xc5\x77\xae\xfa\x20\x50\x32\x2f\xcf\x24\xef\x51\x81\x7f\x8a\xa9\x7b\x66\x3f\x71\x10\x6e\x01\x5b\x67\x2f\x5c\x4e\x39\x19\x6b\x4b\x9c\x28\x84\xb4\xb4\xb7\x9a\xc2\x38\x1f\x79\xb8\xb7\x42\x9e\x42\x52\x66\x3c\xc7\x04\x8d\x65\x99\x31\xb9\x8c\x44\xa0\x61\x0c\x90\x10\xcf\x0e\x57\xa2\xe1\xac\x76\x5e\x72\xc3\x37\x22\xe2\xe2\x20\xf7\x4e\x16\x61\x28\x90\xe5\x1f\x83\xf3\xb6\xac\x97\x53\xf6\x36\x50\x7e\xe2\x08\xc3\x9a\x88\x88\x74\xa5\xc1\xed\xcf\xd7\x37\x4a\x23\x87\xd6\xd9\x2a\x6a\x65\x57\xa4\x5f\x75\x1d\x23\x08\x82\x1c\xe3\x00\x1a\x4e\x8e\xa5\x1f\x35\xdc\x4a\x23\x61\x5f\xad\xc1\x36\xfc\x82\xe8\xa8\xa0\x3b\x15\x46\x56\x32\x26\x21\x3e\xa0\xa2\x9e\xe4\xb9\xa5\xb2\x9b\x1e\xcd\x69\x18\xc7\x91\x55\x8d\x14\xdc\xc6\x57\x34\x9a\x39\x31\x1c\x67\x48\xcf\xae\x78\x31\x16\x9b\xe3\x93\x71\xc6\x57\xb4\x15\x07\x35\xa4\x9a\xb0\x7b\x8c\xac\xa7\x17\xda\x3f\xa0\xa2\x5e\xce\x3f\x68\xbc\xc0\x56\x21\x78\xb2\xae\xe6\xc5\x3b\xf6\x5a\xdf\x02\xc8\x8b\x82\xf5\x38\x3e\xa5\xff\x2c\xcc\x39\x10\xb1\x63\xb6\xfa\x53\xf6\x51\x09\x44\xce\xe9\x65\x74\xa8\x50\x05\x48\xed\x0e\x04\x44\xfc\x2e\xb7\xb0\x15\x53\xf7\x8e\x2e\xc8\x2e\xb9\x09\xe3\xa1\x74\xd8\xf5\x70\xda\xe0\x2e\xd2\x61\x4b\xb6\xc9\xed\x1c\x61\x5e\x0e\x4b\xba\x6f\xbf\xf3\x47\x00\xd4\xf1\x3b\x40\x5b\x3b\x86\x0f\x4b\x2f\x92\xdc\xdf\xe2\x1c\x7c\xbc\x3a\x6f\x18\xc2\x49\xf7\xf5\xef\xa7\x75\x15\x85\x38\x42\x9c\xee\xee\xea\xed\xc5\xbb\xcb\xab\xaa\xa2\xdc\x5f\xee\x2e\xee\xaa\x7f\xb9\xbe\xbb\xba\xba\xbc\xfa\x63\xfc\xa7\x9b\xbb\xf3\xf3\x8b\x8b\xb7\xd5\xe7\xde\x9d\x5d\xbe\xaf\x3d\x67\xff\x54\x7d\xe8\xec\xcd\xc7\xeb\x9a\x86\x9d\x13\xa0\x8b\xfe\x74\x7b\xf9\xe1\xe2\xed\xfc\xe3\x5d\x45\x06\xef\xed\xbf\x5e\x9d\x7d\xb8\x3c\x9f\xb7\xd4\xe7\xfa\xe2\xfc\xe3\x4f\x17\xd7\x7b\x54\xec\x42\x7b\x5b\xbb\xf4\x29\xe0\x63\x07\x6b\x1a\x9e\xb1\x65\x2e\x85\x4a\xb3\x1d\x62\xef\xdd\xcd\xb6\x06\xa6\x8d\xcf\x5e\xb9\x11\xba\x3c\x06\x42\x7f\xbb\x16\x4c\x3f\x88\x1c\x98\x8d\xb0\x34\xa2\x41\x08\x59\xd4\xf5\xaf\xe6\xa2\xc8\x9b\x51\x81\xde\x4c\xa1\x22\xdf\xf9\x5c\xb4\xbe\xea\x04\x56\x3c\xfa\x08\xdb\x8a\xbc\xaf\x2e\x60\x19\xe5\xe5\xb6\x90\x8b\xee\xa4\x88\xd1\xc9\xc4\x43\xef\xde\xc8\xe1\xda\x4e\x78\x75\xd5\xbe\x31\x56\x72\x03\x8e\x01\x1e\x43\x09\x87\x4a\x75\xfa\xb7\x1d\x58\x73\x5b\x2e\x32\x99\x30\x99\xd6\xfd\x29\x94\xe3\x0f\x2e\xe3\x3a\xd5\xf3\x56\xe4\x60\xaa\xda\x1b\xc0\x36\x17\x27\xbc\x2c\xd6\x48\x4b\x48\xa9\x08\x24\xcc\x31\x53\x46\x24\xb9\xc0\x58\x80\x30\xe0\xa4\x45\x8d\xc6\xe8\x4b\x50\x19\x62\xe5\x48\x81\x00\x6c\x1a\xc9\x6e\x74\xc4\x08\xf0\x4d\x2c\x7d\x84\x93\x14\x9f\xef\xed\x1a\xaa\xb1\x34\x75\x81\x7e\x38\xe1\xf1\x47\xa7\xf4\x68\xdb\x6d\x77\x6a\xaf\x74\x88\x83\xec\x72\x37\xda\x9b\xb1\x6f\x8e\xc5\x13\xa5\x9a\xcc\x40\xa5\xd3\x4f\xe7\xb9\x80\x43\x84\xa0\x00\xce\x7f\x01\xd0\x15\xca\xf5\x80\x14\x0f\x7b\x55\x5b\x88\x35\xcf\x96\x68\x71\xd8\xa1\x69\x67\x4a\xc0\xf2\x6f\xf5\xbd\x50\xd7\x38\x60\xdf\x64\x3b\x54\x78\xf3\x09\x3c\x2d\xde\x23\x14\x5c\x98\xb6\x8e\x6e\x56\xb9\x5c\x37\x30\xa6\x0a\xbc\x27\x44\x3f\x63\x4a\x47\x60\x61\x77\x69\x72\xcb\xa5\xfc\xc5\x16\x38\x53\xa2\x95\x87\x1a\xf0\x42\x8e\x31\xcf\xef\xcb\x80\x8d\x42\xda\xb1\x7b\xa1\x40\x23\x12\x25\xe4\xf7\xce\xd9\x71\xfe\xf3\xe6\x58\xf4\x38\xf4\xc1\xe7\x27\x2b\xd2\x99\x71\x94\xc7\xf5\x53\x81\x39\x36\x9e\x57\x00\xe6\xcd\xf9\xfb\xcb\x8b\xab\xdb\xf9\xf9\xf5\xc5\xdb\x8b\xab\xdb\xcb\xb3\xf7\x37\x43\x97\xdf\x53\xe4\x45\xd5\x56\x5f\x3d\x3d\xc8\xef\x10\xa7\xb4\xf2\x42\x7a\xae\x6f\x54\x58\x76\x30\x24\xfb\x6b\x2f\xd3\xed\x3c\x95\x26\xb1\xc7\xdf\x6e\x2e\x54\x0a\x04\xfe\x07\x4d\xd5\xf6\xa2\xea\xad\xf0\x4f\x30\xff\x84\xdb\x41\xf0\xb4\x7b\x70\x33\xda\xff\x0e\xa8\x3b\x70\x43\xe6\xc2\x2e\xfe\xb4\xc2\x9b\x30\xdd\xaf\xda\x64\x8b\x3b\xae\x6d\xd5\x22\xea\x6d\xc2\xfa\x4a\x63\x4a\xa0\x67\x70\x8f\x01\xe4\xb0\xa3\x57\x88\x55\x35\x56\x11\x90\x91\x02\x36\x93\x66\xa6\x36\x5c\xa5\xbc\xd0\xf9\xae\xa3\x89\xc3\x36\xcf\x78\xd9\x54\xb7\xd0\xf8\xc8\x56\x42\xa4\x6e\x14\xf0\x51\xae\xea\x53\x09\xb5\x06\x6e\x3f\xfe\xf9\xe2\xea\x66\x7e\x71\xf5\xd3\xfc\xd3\xf5\xc5\xbb\xcb\xbf\x7a\x24\xe4\x96\x9b\x36\xc5\xdb\x6d\x2e\xec\xee\xe2\xa8\x9b\x5a\xf7\x17\x94\xa1\x75\xe5\x90\xf4\xa0\x5c\xce\x94\xdb\x59\xf2\x50\xfc\x3a\xd7\xe5\x6a\xdd\x5e\x50\xbd\x96\x9f\xce\x6e\x7f\x3c\xa8\x9a\x40\xac\x87\x5a\x95\xb8\xda\x9a\x88\x50\xb9\xa4\x7d\x0f\x61\xa4\xb5\xea\x01\x3d\x24\x3c\xda\x16\x65\xe8\xd8\xd1\x0e\xba\xbd\x34\x37\xad\x5e\xe3\xbf\xe5\xf1\xae\x09\x74\x1b\xed\x9b\x95\x63\x04\x10\xca\x28\x79\xdc\x28\xed\x75\xcb\xdf\x2a\x27\xd8\x0f\x27\x99\x58\xad\x44\x8a\xd3\xab\x5e\x30\xf9\xe0\x68\x0b\x4c\xc2\xb9\xde\xd6\x8b\x24\x4a\x7a\xc4\xc1\xec\xf1\x5e\xc3\x37\xf0\x4f\xfe\x95\xf6\xbd\xe2\x9c\xc8\x71\x20\xbe\x59\x70\xd5\x11\x48\x7e\x68\x22\x34\x07\x6d\x45\x1f\x73\xe6\x93\x9f\xc8\x61\xe2\x42\x06\x61\x1d\x74\x01\x5e\x8e\xc7\x85\xfa\x7a\x5c\x8b\x6d\xc6\x13\xe1\x73\x18\x90\xd5\x14\xee\xf5\x87\x04\xf0\x48\xfa\x55\x91\xbf\x25\x92\x84\x0d\x6a\x57\x6d\x53\x00\x3c\xb7\xd7\x6e\x3f\x7e\x7e\xd7\x4a\xef\xc5\x8d\xb8\x0c\xc1\xd1\x8c\xda\x7b\x04\x7d\x47\x5f\x14\x08\x5a\x76\xc2\x92\x47\x4d\x87\xda\x97\x7f\xa2\x81\xc7\x3b\x73\xd5\xd1\xcd\x1d\x5b\xa8\x9f\x1e\xde\x74\xec\xf3\x17\x16\x45\xde\x4b\x30\xfc\x14\xe1\x88\x4f\xb9\xde\x48\x23\xce\x8a\x22\x97\x8b\x32\x56\x58\x1d\x09\x98\xab\x5c\x4e\x42\x83\xb7\xb9\x4e\xcb\xc4\x51\x02\x41\x6b\x03\xec\x87\xbc\x7c\xce\xea\x48\xd9\x89\x9d\x7d\x74\x73\x13\xe9\x09\x00\xfa\x91\xb3\xaa\x2d\xc6\xe6\x36\xc6\x0e\xdf\xdf\x27\x77\x94\x1f\x33\x25\x5b\x26\x45\x77\x67\xba\x39\x30\x2c\xb1\x96\xb9\xc7\xc1\x02\xee\x40\x4d\xd1\x74\x59\x70\x0c\xa0\x57\x6d\x94\x2e\x06\x10\x7f\xd4\x8c\x03\x77\x0d\xc3\xc6\x54\x33\x66\xd0\x6e\x58\x73\x83\xe6\x7c\x91\xac\xab\x15\x87\xd6\x54\x99\x50\xeb\xd5\xf5\xe6\xf1\x71\x6e\x93\x41\x61\xb4\x09\x3a\x1a\x24\x39\xb6\x2b\xaa\x96\x5e\xa2\x77\x9c\xb7\x3b\xb6\x18\xfd\x8d\x0e\x0f\x03\xd8\x47\x33\x5e\xaa\x64\xcd\xb6\x19\xc7\x64\xf2\x35\x37\x38\xa5\x1d\x96\x84\x2f\x64\x26\x0b\x60\xe9\xc1\x10\x67\xad\x87\xed\x35\x8f\xe7\xf7\x8e\xec\x9c\x07\x4a\xa6\xbe\x49\x7f\x24\x66\xd7\xb7\xea\xab\xa2\x76\xc3\x92\x8d\xb7\xa1\x61\xd3\x92\x10\xbb\x61\x38\xec\x46\x0c\xd3\x32\xb4\x65\xdc\xc8\x52\x89\x9f\xea\xaf\x57\xfa\xbb\xc5\x7a\x19\x8f\x58\x21\x15\x8f\x11\xa7\x4f\x5d\xe3\xa3\x75\x65\x2d\x33\xcd\x3b\x74\xe6\x5d\xd9\x28\xd9\xd1\x55\x76\xaa\xcb\x45\x17\x49\x3c\xd6\xaa\xbf\xf4\xbe\x60\x88\x5b\xb7\x4f\xe5\x2c\x8d\x37\x40\x5e\x88\x42\x8e\xf3\xf7\x44\x8d\xe6\x85\x38\x81\xd7\xdb\x0b\xa7\x0c\xc3\xc1\x6d\x6e\x4c\xb4\x20\x1c\xe5\x8d\x36\xc0\x12\xb6\xcd\xae\xda\xe9\x7c\x0c\x26\xfc\xc8\xf1\x92\x6a\xcf\x54\xda\xaf\x45\xf3\xfb\x1f\x5a\xba\xa5\xd1\xe8\xbf\x94\xdc\xee\x87\x1f\x97\x37\xc8\x95\x73\x4c\xa3\x0b\xd9\x5c\x56\xed\xdb\x4f\xfd\xab\xb7\xd5\xf0\x5a\x3c\xf1\x07\x67\x22\xb7\xb5\xe6\xc6\xbe\x3d\x7c\x17\xba\xac\xb8\xd1\xb6\xb9\xd4\xc0\x19\xa3\x97\xc8\xc0\xd8\x4d\x21\xdc\xfa\xdd\x23\x7a\xf2\x4b\x29\x4a\x61\x27\xd0\xa2\x4c\x57\x4d\x2f\xf7\x08\x4b\x39\x34\x69\xad\x1f\xd9\xa6\x4c\xd6\xcc\x15\xce\x52\x91\xf1\x5d\xa5\x69\x60\x24\x16\x1a\xf8\x3c\x47\x51\x67\x45\x2c\xcc\x49\x69\x0a\xbd\x01\x80\x71\x28\x37\x2f\x15\xac\x72\xc6\xdd\xea\x6a\xdb\xdf\x2b\xec\x72\x07\x86\x36\x6f\x3e\x5d\x9c\x5f\xbe\xbb\xac\xc5\x15\xcf\x6e\xfe\x1c\xff\xfb\xe7\x8f\xd7\x7f\x7e\xf7\xfe\xe3\xcf\xf1\xdf\xde\x9f\xdd\x5d\x9d\xff\x38\xff\xf4\xfe\xec\xaa\x12\x7d\x3c\xbb\x3d\xbb\xb9\xb8\xdd\x13\x60\x6c\x7e\xb5\x7b\x20\x78\x44\x7e\xe7\x20\xcf\x4e\xd9\xc1\xf9\x19\xe8\xab\xaf\xd9\x99\xa3\x02\xac\x90\x55\xba\x20\x31\xa0\x4a\x32\x04\xc7\x61\x2c\xf9\x2d\x2f\xf8\x39\x2f\x78\xa6\x57\x53\x76\xc6\x08\x10\x8e\x40\x7f\x63\x2d\x24\xe2\x49\xb3\xa3\x83\x45\x58\x33\x29\x09\x77\xf8\x20\x5d\xab\x97\xc4\x50\x98\x89\x58\xe4\xc4\x65\xb5\xcd\xd4\xc5\x83\x50\x45\x09\x24\xb4\x3c\xcb\x18\x7d\xd6\x3d\x10\x65\xec\xbb\x5a\x1a\xb9\x91\x19\xcf\x83\xca\xe8\x47\x2a\x0b\x6e\x29\xae\xae\x9e\xa0\xa9\x99\x0e\xee\x2e\x72\x77\x97\x0c\xea\x7d\xfe\xfe\x12\xec\xbe\xa4\x70\x12\x5a\xee\xe3\x33\x85\x0c\x78\xf4\xc5\x0d\x87\xe4\x93\x42\x93\x67\x15\x3f\x4f\x0f\x77\x4f\xc4\xa3\xa8\xc0\x5d\x0c\xe2\xb9\x6e\x94\xbe\x92\xee\x3f\x2e\x54\x91\xef\x06\x1b\x73\xb7\x90\x6d\x6d\xc0\x20\x27\x2c\x5b\x55\x79\x14\x1d\x5f\xcc\x95\x7e\x05\x16\x9e\x03\x5a\x52\x5c\xc6\x87\x5f\x10\xd7\xd2\x71\xe9\xc8\xec\xc9\xfb\x6b\xed\x87\x98\x10\x07\x7a\x61\xa1\x4b\x95\x1a\x42\xdd\x6d\xa4\x3a\xdd\xf0\x5f\x5e\xba\x96\x22\xc1\x84\xd7\xff\x01\xf2\x30\x91\xd9\xeb\xd7\xce\x6e\x72\xfd\xdd\x35\x53\x3d\xfd\xb5\xdf\x44\x76\x3b\x2b\xdc\xf5\xc2\xc5\x1c\xf1\x83\x0f\x62\xd7\x36\x7e\x0d\x0d\x37\x16\x13\x91\x43\x21\xdb\x5c\xd8\x07\x3d\x38\x31\x43\xcc\xa9\xff\x37\x24\x21\x54\x74\x66\xdb\xf7\xee\x38\xde\x7f\xd4\xb2\x69\x45\x1a\x0c\x37\x7c\x06\x8b\xf0\xd1\x97\xec\x98\x21\xee\xc0\xb9\xbc\x29\xe9\x82\x02\xaa\x76\xb0\xfe\x43\x2f\xd8\x12\x32\x90\x30\xd1\x8e\xe5\x02\x42\x1c\x30\x14\x4e\x35\x02\x28\xa6\x1a\x60\x06\x37\x05\x32\x61\xc0\xf1\xaf\xec\x1d\x53\x7c\x29\x29\x76\xfb\xea\xfb\x71\xe7\x6c\x81\xd4\xe3\xc8\x35\x5b\x27\xe5\xf6\x67\x39\xd4\xab\x54\xb2\x8d\x77\xee\xba\x54\xf6\x28\x7e\x0a\xd8\xcb\xf0\xb8\x66\xed\xa3\xf4\xcf\xbd\x49\x42\xce\x25\x9f\xe3\xf3\xcf\x46\x23\xfa\x53\x8d\x3d\x94\x3e\x07\x90\x74\x2a\x3d\x3e\xd0\x16\x3c\xb9\x7f\xe4\x79\x8a\x7e\x5b\xc0\xa1\x4c\xd9\x8f\xfa\x51\x3c\x88\x7c\xc2\x12\x91\x17\x9c\xa8\xbb\x0c\x04\xe2\x61\x41\x51\x39\x33\x05\x19\x1a\xc8\x83\xa6\x4c\x99\x0b\x56\xc8\xd5\xda\x5e\xa2\x23\x18\x85\xce\xed\x76\x54\x20\x6b\xe3\x56\x24\x44\x96\xd4\xd1\x01\xcb\x8c\x3f\x34\xb9\xc8\x0e\x61\x79\x60\x97\x3e\xcd\xd4\xc5\x29\x9d\x12\x4f\x1f\xf0\x85\x3a\x8c\x36\x4d\xa4\xb7\x99\xb0\x95\xce\xb8\x5a\x4d\xa7\x53\x60\x9d\x7f\x39\x6a\xa2\x53\x81\x71\xe4\xd3\xc3\xab\x33\xad\x8d\xc8\x76\x9e\xe0\xc7\x27\xc0\x00\xe2\xf2\x97\x42\x28\x23\xd1\xcf\xd3\x32\xfd\x6f\xea\x51\x81\xaf\x1b\x44\x69\xbf\x9e\x8f\x4e\xaf\xec\x28\x07\x84\xfd\x46\x94\x84\xcf\xb7\xdf\xbc\x0e\x4a\x17\x6e\x2f\x4b\x69\x35\x36\x07\xf6\x27\x2d\x3b\x62\xf8\x07\xf1\xee\xb5\x96\x44\x24\x25\x07\xe5\x0d\xb6\xf7\x59\x23\x95\xf3\x88\x2c\xce\x9e\x84\xcc\x91\xb9\x98\x43\x1c\x01\x37\xf5\xe1\x1e\xbd\x2c\xf6\x6b\x0d\xb5\x36\x68\x64\xae\x6b\x48\x4a\x1f\x63\x3a\x61\xba\x5c\xb6\x83\x1b\x97\xcf\x7c\x05\x77\x7a\x1a\x85\x03\x2a\xd1\x0e\xc8\xc1\x0a\xe1\x12\x4f\x1e\x15\x45\x47\x4c\xa1\x73\xbe\x12\x6c\x23\x52\x59\x6e\x5a\x37\x1b\x5f\xdd\x63\x70\x7f\x3a\x2b\x37\xdd\x34\x7e\xc7\x1a\xd0\xa1\x92\xf8\x5f\xe7\xf0\xb9\xc1\x06\xf4\x99\x87\xb4\x3b\xc9\x37\xaa\x2f\xfa\xfe\xa9\xaf\xed\x49\x99\x4b\x03\x84\x93\x87\xa4\x3c\xfa\x62\xb0\x68\x88\x9c\xee\xb6\xe8\x73\xae\x8c\xee\x89\x0b\x69\xd1\x2b\x06\x47\x15\xc2\xad\xdd\x87\x42\x1d\x4d\x38\x5e\xf8\x29\xd7\x65\x83\x6c\x67\x50\x84\x1b\xcc\xc6\x88\x06\x9e\xe0\x4e\x50\x20\x61\x32\x0a\xcd\x96\x2e\x89\xee\x5e\x44\xb4\x64\x29\x10\xc4\x3f\x22\xc7\xcd\x9f\xff\x60\x1c\x7a\x83\x00\x36\xc1\x62\x29\xc2\x47\x30\x20\xf2\xf0\xca\xe1\xaa\xb0\x85\x58\x04\x90\x87\xa5\x5c\x15\xad\x05\x04\xd8\x21\x94\x85\xaf\xfc\xc4\xcb\xac\xfd\x71\x2a\x1f\x1e\x45\x01\xc1\xb3\x9f\x6f\x18\x76\x35\x51\x89\xe7\x7d\x15\x8d\x0a\xd9\x8f\xec\x82\xee\x9a\x1f\x60\x09\x56\xc6\x01\x3b\xdd\x71\xc9\xdb\x6e\x17\x45\xb2\x0e\x96\x07\x90\xa7\x79\xd2\x37\x52\x87\xa5\x76\x6e\x02\x39\x3a\x82\x66\x63\xf4\xa1\x5c\x29\x1d\xeb\x7a\x68\x25\x20\x32\x65\x37\x20\x1d\x17\xcb\x64\xb1\x1f\xe2\x35\x92\x31\x6c\xdf\x54\x2b\x34\x42\x77\xa8\x9d\x95\x00\x23\x5c\x29\x24\xf2\x0c\x39\x7c\x2c\xde\x89\x48\x6c\xb4\x4e\x9a\x5d\x65\x6e\x98\xa9\xea\xa7\x1a\x9d\xe4\x30\x58\x32\x17\xc8\x75\x6b\xac\xf5\x56\xc8\x07\xbb\x50\x9b\xd3\xda\x4f\x50\xd8\x01\x9a\x73\x6f\xa6\xb0\xda\x11\x61\xee\xbd\xd8\x99\x58\xd9\x94\x66\x14\xeb\x9a\x90\xd2\xb6\x87\xc6\x6b\xff\x50\x40\xc7\xcd\xf3\xa0\x4f\x36\xec\x2c\xc3\x8f\x7e\xb0\x2f\xf7\x80\x3b\x1b\x85\xdb\x39\x18\xb2\x14\x83\x4f\x91\xb6\x89\xd0\xcf\x34\x86\x01\xbf\x05\xe8\xbc\x18\x7f\x17\xa7\x9c\xc0\xc5\xd7\xde\x6f\x67\x8a\x38\xb5\xa3\x43\xce\x6e\x38\xcd\x61\xa3\xd4\x69\x64\xf2\xdd\x55\x68\x5f\x80\xf6\xd0\x51\x40\x56\x3f\xe9\x82\xad\x4e\x18\x7b\xa6\xe0\xd3\x98\x5c\xea\x7c\x78\xad\x1f\x3c\x10\x14\x48\x83\xdb\x09\x04\x8c\x32\xb8\xf0\x49\x62\xfe\x43\x89\x5c\xbc\xfd\x24\xc2\x76\xdf\x99\x6a\xc5\xe0\x39\x04\xde\xcd\xc5\xf9\xf5\xc5\xed\x57\x03\x0a\x3a\x94\xde\x68\xa4\xa0\xab\xe7\xdb\x8b\x77\x67\x77\xef\x6f\xe7\x6f\x2f\xaf\x9f\x03\x2a\x48\x3f\x1d\x80\x15\xbc\x21\xaa\xfe\x73\xad\x0a\xf1\xcb\x51\x67\x72\x5e\xaa\x39\x1f\x91\xb3\xe2\xc5\x3a\xfa\xcc\x1d\x2c\xb4\x29\x35\xe0\x75\x00\x88\x77\x12\x4f\x34\xaf\x2c\xb0\x0c\x4e\xc3\xa5\xcc\x32\x48\xe1\xf5\xee\x75\x4a\x0f\xb3\x9d\x0a\xfb\x8f\xa3\xda\xa4\x3d\x75\xa6\x16\x15\x25\x08\x70\xf9\xad\xed\x25\x18\x93\x77\xb7\xb6\x03\x72\x09\xa9\x91\x7d\x6a\x04\x2b\xa9\x44\xa8\x06\xca\xd9\x97\x8a\x75\x52\x48\xd3\x20\x3e\x27\x24\x8a\x0c\xaf\xa1\xb6\xa6\x9b\x71\x95\xf9\xe9\xcc\x4f\xf7\xa3\x6f\x21\x2e\x62\xa9\xd0\x30\xad\xac\xe6\x9b\xf6\xa9\x7b\x1a\x96\x00\xf4\xbb\x1d\x49\x0e\x31\x08\x50\x8c\x0f\x03\x49\x03\x81\x2a\x45\x21\x38\x71\x2f\x11\x3a\xa4\x97\xb5\x7e\xb6\x5b\xa1\xed\x6b\x09\x91\x0a\x4e\xac\x24\x49\x56\x9a\x42\xe4\xe4\x36\x39\xfb\xf9\x66\xa6\xde\xd8\xe3\xeb\x25\x9d\x42\xa4\x64\x83\x9f\x40\xe0\x8a\xae\x7c\xdf\x59\x28\xf1\x0e\xf6\x1d\xfa\xa8\x37\x82\x2b\xc3\x60\x69\x64\x99\xc8\xc3\xcc\xc0\xfa\x08\x91\x92\xa2\x2b\xd0\xb0\x86\xf7\x5f\x32\x42\x25\xda\xae\xb0\xf5\xa5\x5f\x73\xb1\xd1\x45\x73\x3e\x75\x65\x88\x03\x54\xf8\x39\x67\x4e\x4b\xc6\xca\xd0\x59\x44\x28\xeb\xd6\x49\x54\xcd\x1f\x19\x34\x97\x6e\xb1\xb8\xdf\xa6\xd2\x13\x4e\xa5\x01\xe7\x7a\x7c\x4a\xb0\xb5\xb6\x1b\xa8\x97\x79\x09\x61\x66\xcf\x50\x91\x01\xe8\xcb\x76\x63\xeb\xa9\x53\x93\x3a\x3c\x06\xfb\x01\x45\x1d\x07\xad\x3d\x6b\xa1\xc2\x09\x9a\x5a\x2e\xb6\xd3\xab\xa2\xf8\x3c\x94\x73\x67\x0e\x64\xa8\x74\xe1\xc8\x23\x3c\xae\x8f\x40\x8a\xf6\x01\xcf\x5a\xd2\x5b\x47\x62\x02\x71\x56\xca\xfc\x48\x25\xb2\xdb\x18\x0c\x59\x49\xa7\xc5\x5a\xc4\x89\xf8\x2e\xf9\xde\x93\x77\x8c\x99\x7c\x87\x6b\x5d\x56\xe7\x9c\x27\x82\x3c\x08\xec\x70\xf5\xf1\xea\x22\x86\x2a\x5c\x5e\xdd\x5e\xfc\xf1\xe2\xba\x92\x88\xfd\xfe\xe3\x59\x25\x99\xfa\xe6\xf6\xba\x96\x43\xfd\xe6\xe3\xc7\xf7\x17\x0d\xcc\xc3\xc5\xed\xe5\x87\x4a\xe1\x6f\xef\xae\xcf\x6e\x2f\x3f\x56\x9e\x7b\x73\x79\x75\x76\xfd\xaf\xf1\x5f\x2e\xae\xaf\x3f\x5e\xd7\xbe\x77\x77\xde\x8f\x9e\xa8\x34\xa3\xdd\xfd\x13\x82\xb3\x11\x27\x66\xeb\x32\xae\x6a\x81\x1e\xb1\x8a\x07\x22\xcf\xf6\x4d\x47\x97\x67\x9d\xc6\x54\xf9\xb8\x30\x6c\x55\x47\xcd\xba\xa7\x17\x2f\xad\x74\xdd\x96\x1f\xb7\xed\xd9\x53\x6d\xfe\x14\x48\xc0\x5e\x03\xd0\x7f\xa5\xe6\xb8\x25\xad\x60\xec\xda\x2d\x44\xb0\x56\xbc\x53\xba\x47\xa5\xcf\x5e\x53\xf7\x8d\x7d\xf5\x0c\x1c\x4c\x7b\xa8\x6c\x9e\x8a\xc6\xa2\xaf\xd2\xd1\xc7\x5c\x96\xb8\x4c\x9d\xa1\xe0\x7e\x8c\x0e\x6e\x68\x86\x9d\x39\xd1\x74\xec\x52\x99\x6c\xcf\x37\xe9\xa7\x4d\x1b\x5b\x7f\xfa\x48\xb3\xee\x35\x8e\x8d\x11\xf5\x06\xae\xa3\x31\xf5\xbe\xe5\xe6\x7e\x6c\xbd\xe9\x23\xcd\x7a\x83\xd9\x77\x50\xbd\xc1\xe1\x5d\xb4\xf3\x9f\x8c\xd8\xc4\xe2\x62\xaa\xd5\xf3\xc9\xd9\xfe\x91\x48\xcc\x75\x58\x1d\xed\x02\x78\xde\xeb\xe5\x96\x0f\x0f\x64\x40\x6d\xfc\x72\xe5\x35\x3a\xf0\x1b\xf8\x15\x5a\xb8\xc8\x05\xbf\x4f\xf5\x23\x8d\x47\x1d\x19\xca\x06\xed\xe6\xd5\x0e\xb2\x7b\xb8\x3b\x22\x8a\x9c\x22\x50\x88\x52\x0b\xc5\x03\x4c\x4e\x12\xa1\x35\xda\x60\x91\x0a\x69\x9d\x41\x06\x38\x7b\x54\x18\x9d\x99\x42\x6b\xbe\x4d\xc9\xd4\x8e\xaa\xad\x11\x71\x3e\x40\x53\xbd\x0d\x8d\xc1\x75\x13\x0d\x2c\x25\x70\x94\x39\x80\xe9\x16\x39\xdc\x99\xa0\x43\xa4\x02\x67\x72\x6e\x2f\x3c\xb9\x48\xa4\x11\x91\x9a\x53\xeb\x89\xfd\xe5\x38\xed\x87\x82\x17\xad\x6e\xd7\xc1\xfe\x70\x9e\x14\x25\xcf\xd8\x97\x52\xe4\x3b\xa2\xce\x43\x5f\x25\xfe\x25\xe1\x0a\x33\x45\x0a\xb1\xd9\x42\x3a\x76\x9c\xe2\x30\x53\x3f\x03\x50\x02\x87\xe0\x85\x61\x7f\x04\xc8\x83\x7b\x98\x0e\xe1\x0d\x2f\xe0\x2c\xfe\x0b\x7e\xc3\xff\x36\x9d\xa9\x8a\x3a\x4a\xf4\x56\x45\x28\x65\x3a\x53\x4e\x9e\x20\xd5\x89\x99\xc2\x8d\x6f\xaa\xf3\xd5\x29\x09\xfb\xda\xc9\xae\xef\x17\x5a\xdf\x9f\x0a\x75\x0a\x3e\xa9\xe2\x94\x97\x85\x3e\x05\xb8\x14\x8e\xbf\x39\x75\xfa\x9f\x4e\x40\xd5\x9c\xae\xe5\x83\x80\xff\x37\x5d\x17\x9b\xec\x1f\xcc\x76\xfd\xcb\xc9\x2a\xcb\x4f\xec\xbb\x27\xf1\xbb\x27\xee\xdd\x13\xf7\xee\x89\x7d\x0d\xff\xdf\x76\x87\xe1\x1d\xf1\x0b\xb7\x67\xd9\x64\xa6\xa4\x32\x22\x2f\xc0\xfa\x79\xcc\x65\x11\x64\x68\x76\xec\xc5\x7f\xfd\x17\x9b\xe6\xfc\x11\x53\x19\xdf\xf2\x82\x7f\x42\xff\xe2\x7f\xff\xf7\x0b\x08\xa8\x62\x52\xcf\x96\xe7\x5f\x4a\x51\xcc\x94\x11\x76\x11\xb2\xff\x6f\xa6\x20\x02\xbb\xd9\xcd\x0b\xf4\xbb\xa2\x0f\x32\x35\xec\x5f\xb0\xcc\x4b\xa4\x91\x4c\x8d\x2d\xa9\x23\x9d\x40\xf2\xac\x45\x32\xba\xc3\x45\xff\x25\x7b\x4b\xcf\x8f\x58\xd6\x5f\xb2\xea\xaa\x76\x42\x28\xe6\x4b\x06\x07\x68\xa6\xb9\x03\x6b\x31\x3f\x79\xe1\x9e\x4c\x95\x6b\x5b\x23\x0d\x68\xc0\xb3\x86\xe9\xdb\xd7\xca\x0d\x52\x59\x3b\xcf\x7d\x63\x1b\x81\x58\x41\x88\x43\x40\xf4\x5c\xda\x15\x72\x83\x9e\x50\xb0\xdc\xb0\xe5\x60\x93\x52\xe8\xdc\x97\x87\x8e\x0b\xf3\xfb\xd7\xa7\xa7\x13\xb6\x32\xf0\x3f\x8b\x2f\xf0\x3f\x80\x1e\x7a\x2a\x36\xd6\x46\x67\x7a\x20\x5c\x73\x94\xf7\x8f\xc4\x53\xa0\xe8\xbe\x06\x01\x78\x6d\x9a\xbe\x29\x55\x9a\x89\x90\x02\x59\x09\x89\x64\xda\x49\xd6\xa3\x63\xac\x2e\xb5\x02\x63\xbc\x10\x09\xb7\x1b\x5f\xe3\xdb\x08\x2e\xd5\xcb\x42\x28\xf4\x86\xe5\x41\x89\x8d\xa3\xe7\x0a\xcc\x62\x80\x42\xf2\x82\x20\xe7\x02\xfe\x08\x1f\x01\x46\xed\x49\xfd\x27\xb6\xd3\x25\x91\x43\x03\xe5\x69\x2a\x92\x0c\x18\xf8\x1d\xed\x0b\xcb\x45\x51\xe6\x8a\x71\xb6\xe5\x2a\xe5\x06\x66\xe0\x32\x87\x68\x67\xce\x78\xb3\xa2\x13\x84\xe3\xea\xb2\x00\x32\x23\x44\x16\xc4\x3d\x81\xec\xdd\x51\x9d\x27\x51\x25\xf0\x4c\x00\x12\xe1\xc6\x8b\xd3\x99\x72\x5a\x61\x84\x85\x43\x4f\x59\xa2\xb7\x3b\xa2\xaa\xa9\x77\xba\x74\x9e\x33\xea\xee\x49\xc0\x9b\xd4\x9f\x9d\x30\x59\x0d\xad\x01\x51\x78\x11\xa9\x1d\x3b\xbd\xe8\xef\x84\x4a\x74\x2a\x72\xf3\xd2\x2e\x43\xe9\xef\x1d\x68\x3f\x48\x13\x06\x03\x76\x29\x7b\xb8\x91\xb7\xd0\x16\xef\x15\x75\x6c\xef\x54\xa8\xa5\xdb\xec\x9c\xfd\x4b\xe5\xd7\x8e\x82\x69\xab\x2f\xfd\xe7\x57\x45\xc4\xc4\xb8\x4e\x77\xe7\x3c\xdc\x05\x81\x4b\x36\xde\x71\xb1\x50\xb4\x71\xc8\x38\x71\xd2\xb2\xb2\x00\xf5\xba\x5c\x98\x62\xa6\xe8\x04\x9e\xb0\xa5\xe0\xd6\xce\x9b\xb0\xc4\x3c\xe0\x66\x8c\xc7\x7d\xf1\xa8\x03\x06\xc7\xe9\x92\x00\x18\xb6\x52\x78\x70\x12\xe3\x63\x80\x28\xe0\x49\x81\x00\x83\x4e\x15\x72\x67\xaa\x40\x67\xb5\x6e\x88\x07\xf4\x83\x93\xb9\xa8\x4b\x4a\xc5\x2a\x2b\xd0\x13\x3b\x0c\x14\xb3\x7a\x3d\xf0\x07\xbb\xf1\x60\xeb\x10\x06\x12\x6d\x8e\x60\x71\x13\x96\x16\xd7\x59\x88\xe1\xc6\x5c\xe3\xe0\x9b\xe9\x5a\x54\x3d\x1d\x01\x15\x38\xcc\x6f\x61\x5f\xdd\xeb\xb0\x32\x22\x77\x1a\x1c\xd8\x56\x64\x06\x5c\xcb\x3c\x3d\xd9\xf2\xbc\xd8\xb9\xe9\x9b\xc9\x05\x50\xf7\x67\xf2\x5e\xb0\xb3\x3c\xd7\x8f\x4f\xdd\x0b\x9d\x5b\x4b\xd7\x0d\xfb\x18\x24\xfb\xd8\x5b\x7e\x2b\x2f\x68\xdd\xdd\x71\x18\x07\x69\x97\xe3\xa3\xf5\x3b\xb9\x28\xf2\xdd\xdc\x4e\xc4\xcd\xb6\x73\xa7\x18\x94\x34\x31\xdc\xc8\x1d\x47\x6f\x5a\x73\x61\x74\xd2\x9b\x56\x46\xf5\xd7\x43\x6f\xda\xc2\x5c\xda\xa4\x37\xbd\xbc\xba\xbc\xbd\x3c\x7b\x7f\xf9\x7f\x6b\x25\xfe\x7c\x76\x79\x7b\x79\xf5\xc7\xf9\xbb\x8f\xd7\xf3\xeb\x8b\x9b\x8f\x77\xd7\xe7\x17\xfd\x7c\x45\xcd\xda\x07\x13\xfc\x84\xc5\xdf\x79\xcd\x6e\x23\xa0\x06\x26\x1b\x90\xfd\x4d\xda\x95\x30\xab\xec\x62\x96\x6a\x35\x81\x85\xfa\x9a\x5d\xe4\xf9\xe5\x86\xaf\xc4\xa7\x32\xcb\x00\x4e\x85\x99\x3d\xe7\xb9\x80\x8b\xe7\x84\x7d\xd2\xe9\x65\xf4\x1e\xa4\x23\xb6\x36\x03\xbe\xcf\xd3\x34\x17\xc6\xe0\xe7\x27\xf4\xfd\x08\x3c\xe4\x53\x1d\x09\x3c\xc7\x1f\xb8\xcc\xec\xfd\xed\x35\x7b\xc3\x93\x7b\xbd\x5c\x62\xfa\xcc\xc4\x27\x4e\xb1\x2f\xa5\x2e\x38\x13\xbf\x24\xc0\xd1\xd5\x3e\x4f\xde\xeb\xd5\x37\x80\x2a\x0f\x08\x4f\x75\x5c\x52\x40\xa3\x6c\xde\x7e\x9c\xb7\x6f\x04\xd4\xca\x0f\xf8\xea\x3b\x7c\xb3\xdd\x41\x59\x64\x4f\x90\x1e\xff\x5e\xaf\xda\x15\x63\xc0\xba\x26\x99\x1b\x0a\x24\x24\x44\xb6\xa1\x57\xcc\x48\x75\x3f\x53\x3f\xaf\x85\x62\xba\xcc\xf1\x4f\x70\xcd\xb7\x66\x66\x56\x9a\xb5\x00\x09\xd9\x09\x7b\x14\x6c\xc3\x77\x68\x36\xc3\x9d\xc0\xcb\x5c\xc0\x94\x81\x53\xc4\xbe\x9d\x49\x65\x77\x8b\xad\x74\x79\x09\xf5\xa1\x7f\x8a\x1b\x97\x63\xa8\xe3\xc7\x13\xc8\xf6\x9d\xa7\x15\x7c\x1e\xb8\xca\x02\x6e\xd2\x01\x84\x68\xe7\x06\x15\x4d\xad\xef\xcb\x6d\xe0\xb2\x7c\xe1\x82\x93\xd0\xdd\x0f\x5a\xa6\x2c\x2d\xb7\x99\x4c\xfc\xbe\xfb\xa8\xf3\x4e\xc2\x5e\x4c\xa0\x19\x7e\xea\xd4\xd3\xc2\xfa\x1a\xd6\x92\x9d\x13\x21\xe9\x7a\xa8\x7b\x9f\x99\xbc\x98\x49\x95\x64\x25\xe8\x83\x95\x46\xe4\x27\x45\x2e\x57\x2b\x30\xc0\x5d\xae\xdf\xaf\x9f\xdd\x38\xb0\x27\x1e\x9f\xd6\x16\x27\x9d\x67\x7a\x25\x13\x9e\xc5\xe0\xe6\x80\x8a\xf0\xf4\xa9\x6e\xd9\x93\x7a\x2a\xe4\x41\xb8\x0a\x75\x32\x20\x6d\x73\x01\x0c\xbe\x73\xd8\xca\xe7\xb4\xdd\x1d\x53\xef\x25\xb3\x17\x74\xac\x57\x4c\x6e\xea\xc2\x0b\xee\x84\x0b\xdf\x76\x12\x5a\x60\x62\xa2\xbc\x36\xd3\x8f\x4a\xe4\x60\xc1\x02\xec\xc3\xb6\x54\x69\xb0\x4d\xbc\xac\x96\xc7\x27\x3b\x59\xb9\xa5\x07\x62\x63\xe6\xec\x4a\x3e\x08\xf5\xf5\xd9\xa8\xa3\x0f\x24\x3c\x59\x8b\xb9\xb3\xcb\x9f\x7a\xcb\xf2\x07\xc0\xc8\xcd\xca\xe9\x5b\xc4\x5b\xa9\x0f\x6f\xc2\xd5\x09\x6b\xdc\xdc\xbb\x30\x90\xd8\x93\x91\x65\x2b\x31\x4f\x45\x72\xff\xd5\xb7\xe6\x00\xb2\x72\x15\x61\x9c\xbd\x15\xc9\x3d\xbb\xbb\xbe\xc4\x6c\x60\x59\x30\xbb\x15\x98\x75\xd0\xeb\xe9\xbc\xbb\x15\x7c\xf5\x0c\x8c\x4e\x43\x05\x87\x02\xc7\xbc\x97\x59\xb3\x15\x22\x40\x14\xe4\x4b\xda\x4d\x92\x72\x69\x00\x08\xc6\x0b\x27\x43\x03\x8e\x78\x66\x36\xa0\x3a\x53\x16\x91\x54\x5b\xc6\x17\x22\xeb\x60\x5c\xdc\xea\x74\xee\xe2\x24\xc7\x82\x79\x1a\x65\x39\x3f\x06\x45\x1d\x5d\x1e\x03\xb7\x16\xeb\x2d\x3d\xc8\xee\xff\x60\x22\x7a\x0d\x1d\x13\x3f\xc3\xbd\x9e\x1b\x48\xef\x5e\xca\x95\x8b\xb6\xc9\x25\x69\xe3\x60\x42\x3f\xa8\xc0\xdb\xfd\xd2\x96\xf4\x49\xa7\x04\xd3\xf3\x24\x66\xd6\x0a\x12\xe4\x3d\x09\xb8\x8a\xb8\x0a\x5e\x29\xdf\x80\x6f\xc0\x14\x82\xa7\x4c\x2f\xc9\x9b\xb8\xdd\x66\x12\x28\x7d\x53\x64\x0f\x07\xf6\x0c\x53\x45\xc7\xc7\xa5\xb9\xca\x46\x24\x1f\x9f\x1c\x10\xaf\x37\xde\x18\x82\x5c\xb6\x5d\x55\x27\x77\xdd\xa6\x3a\x56\x05\xce\xe7\x23\x1d\x7a\x85\xee\xf7\xa6\xad\x32\xbd\x80\x8e\xea\x06\xc5\xf5\x6c\xd0\x76\x77\xca\x65\x3a\xe6\x78\x77\x7d\xf2\xd1\xbf\xda\x57\xc1\x8f\xce\xd3\xe1\xbf\xe4\x86\x99\x11\xe1\x7a\x1c\xc1\xaf\xa5\xb1\xef\xbb\x6b\x43\x80\xd0\xf8\x08\xa1\xb7\xc6\x0b\x92\x1b\x80\x55\xe1\xb7\xe3\x8e\x6b\x75\xb5\x2d\x47\x0d\x74\x93\x18\x65\x4f\x5f\x06\x2e\x95\xfe\x41\x3e\x82\xdd\x02\x57\xae\xa7\xb8\xe8\x76\xa4\xa9\x54\xa4\xf3\x03\xda\x70\x41\xef\x0e\x6b\x8b\xef\x69\xac\x1e\xb8\xbc\xd4\x89\x3d\x19\x53\x9e\xa7\xa1\x1d\x13\xb8\x11\x27\x7c\x0b\x5e\x67\xf0\xe2\x3f\xbc\x9a\xba\x6f\x5c\x87\x64\x1a\xbb\x3d\x60\x8a\x3b\xc2\x95\x75\x8b\x56\xc7\xbe\x79\xe4\x27\x29\xa2\x99\xed\xcc\x09\xd3\xb5\x92\x66\x32\x68\xee\xd6\x67\x98\xdb\xaf\x8e\x99\x5c\xcf\xb1\x77\x94\x85\x0e\xc1\x0d\x68\xcf\x25\xd0\xa3\xc6\x09\x6c\xb0\x41\x5e\xa6\x1d\xc0\x08\x67\x6d\xba\x4d\x68\x04\xdc\x76\x14\xe0\x77\x9b\x0b\x17\x26\xdb\x89\xc2\xd3\x18\x64\x4e\xff\x0c\xa2\x40\xbe\xd5\x55\x1e\x17\x47\xd5\xe0\xb9\xb7\x20\x66\x43\x96\x6d\xa2\x37\x5b\xad\x00\x85\x83\x49\x59\x33\x45\x85\x3b\x15\x6b\x1f\x48\xaa\x64\xf6\x4d\xc8\x7f\x87\x79\x22\xc2\xe8\xec\x81\x22\x86\x91\xd8\x02\xe8\xdf\xd9\x0a\x9e\xdb\xab\x90\xbd\xf8\x43\x28\x9b\x0e\x32\x00\xbe\xd7\xa4\x9c\x73\xb1\x92\xa6\x10\x71\x32\x64\xfc\xfe\x93\xa9\x6e\x56\x7c\x05\x7d\x5d\xdf\xa9\xba\xb9\xcf\xe8\xb7\xfb\xd3\x88\xfa\xec\xb6\x22\xbd\xf4\xef\xf5\x4f\x86\x5a\xbe\x7a\xd8\x0e\x2b\xe7\x1d\xce\x01\xbc\xec\x18\x64\xb6\x32\x5e\x26\xc1\x0f\x12\x71\x0e\xf1\x80\xdf\xb3\x43\xb4\x2a\x79\xce\x55\x21\x84\x99\x29\x8a\xb3\x22\x43\x5b\x4c\x42\x52\xc3\xfd\x79\x53\x3e\xd1\xa6\x40\xc2\x23\x78\x65\xc9\x65\x56\xe6\x9d\xb7\x6b\x9c\x95\x07\xb1\x2c\xf4\xf5\xd2\x39\x14\xcb\xda\x06\xcd\xe7\xeb\x46\xab\xc8\x93\x84\xd4\xa3\xa4\xd5\x74\xd6\x8e\x26\xb8\xc3\x65\xf8\x78\x7b\xd7\x6a\x47\x0a\xef\x1f\xcc\x7c\xab\x47\xec\x78\x7f\xfe\x83\xf9\xa4\x3b\x92\x9f\xcd\x97\x86\x0b\xb0\x07\x2d\xf0\xa5\x4b\x38\x82\x9b\x7b\x08\xb4\xed\xf3\x3c\x0c\x22\x9f\xdc\x1b\x8e\xeb\xdc\xbb\x60\xd6\xae\xb9\x4a\x33\x7b\x23\xe7\x45\xed\x04\x0a\xb0\x66\x7b\x03\x28\xdc\xe6\xd8\x9d\xc3\x06\x29\x21\xf3\xa4\x91\x4f\xb8\xaf\x9f\x6a\x89\x88\xbd\xd0\xc1\xda\x57\xaa\xe9\x81\x6d\x69\x29\xc1\x86\x21\xb9\x56\xbf\x60\xbf\xb9\xfd\x72\x11\xd7\xfd\x2b\x99\x2f\xd5\xb5\xb6\x94\xab\x5f\xc1\xbd\xf9\x43\xf3\x48\x48\x68\xcf\xa1\x83\xda\x83\xf9\x8f\xdc\x75\x20\x6f\xca\xee\xda\x31\xdf\xf4\x4c\x91\x6c\x35\x06\xd3\x21\x8a\x8a\xf4\x62\x86\xbd\xf2\xc9\xb4\xaf\xfe\xd1\x91\x4b\xed\xd8\x12\x26\x15\x30\xb8\xe9\x24\x29\x73\x88\x74\x93\x37\x8e\x09\x3c\x84\xcd\x28\xde\x14\x30\x3d\x3c\x3e\x09\xed\xc4\x36\x33\xc9\xbb\x5f\x2b\x8d\xba\x05\xaf\x1b\x0a\x70\xfb\x43\x9f\x74\x95\x72\x53\x30\x53\x88\x6d\xeb\xf6\x5b\xb1\x2e\xab\x1a\xf3\x47\xd8\x97\x41\xe1\x7e\xe0\xd2\x19\x71\x18\x9d\x45\x1e\x92\x3f\xdd\x7c\xbc\x62\x5b\xbe\x03\xa8\x5f\xa1\x19\x3e\x0a\xfc\x9a\xf5\x8d\x6a\xdf\x08\x54\x1b\x5f\xdd\x55\xb0\x4f\x1d\x66\xb8\xdd\x1d\x4f\x5f\x6c\x1a\x8b\x30\x67\x68\x4a\xda\x3d\x2b\xd7\xd9\xc9\x36\xe3\x2a\x42\x73\x9b\x29\xab\x7d\x3e\x0e\xdf\xfb\x40\x1e\x01\xa4\xa0\x02\xe0\x21\xa3\xb9\x90\x97\xad\x78\xdf\xaa\x6c\xfe\x51\x11\xfb\xce\x3d\xa2\x17\xc7\xf8\x01\xd5\x2a\x78\x62\x97\x09\x92\x45\x38\x14\x82\x07\xb2\x70\x03\x18\xd3\x4e\xc2\x6b\x9e\x64\xdc\x98\x5e\x50\xca\x73\x30\xb6\xc7\x49\x7a\xfb\xb7\xaf\x6a\x3d\x11\x35\x07\x54\x1e\x78\x2f\xf5\x3f\x03\x39\x80\xdb\xba\x82\x38\x55\x64\xef\x47\x22\x09\x14\xe9\x27\x7a\x24\x78\x1f\x89\x0f\xef\xc5\xce\x39\xe8\x68\xab\xe2\x1b\x31\xf1\xbe\x45\xef\x3c\x8b\x30\x6e\xcd\x82\x67\x0a\x40\xa0\xef\xe2\xea\xb1\x77\x5a\x4f\x10\x8e\x48\x1f\xe7\x58\x2c\x8f\x01\x3d\x33\xf5\x4e\xeb\x29\xf7\x97\x58\xaa\x3f\x6d\x37\xf5\x0f\x12\x08\x08\x20\x76\xb5\xe1\x1c\xbe\x36\x7f\x94\x0a\x65\xd4\xe4\xc6\x5e\xa0\xa8\x9f\x60\x46\x41\x85\x9c\x6a\xb7\x7e\x34\x2c\x45\x06\x95\x52\x9a\x35\x44\x19\x30\xac\x07\xdf\xa7\x23\x05\xf1\x47\x39\x57\xc6\xae\x61\x88\x4c\x88\x07\x41\xee\xc9\x4a\x48\xfd\xf2\xed\x7b\x8f\xd2\xc1\x75\x49\xc2\x8a\x1d\xab\x2d\xba\x74\x1c\x73\x39\x07\x74\xf5\x08\xfe\x36\xca\xc3\xfc\xc0\xb7\x7d\xb9\x9f\x47\x97\xb8\x6f\x94\x3c\x7f\x54\xfd\x46\x05\x8a\xcb\xa0\xb5\x56\x49\x00\x8d\x7b\xef\x4e\x1d\x79\xe2\xb4\x52\xb8\xef\x97\x06\x19\xec\x60\x18\xb9\x55\xec\x3f\x6e\x22\x2a\x47\x8f\x90\xf3\x77\x41\xbb\xb1\x83\x92\x15\x70\xd0\xe1\x92\x9e\xb2\x1b\x21\xd8\x67\xe8\x29\xfb\xb1\xcf\xa4\x94\x08\xa0\xdf\x82\xcb\x56\x21\x2b\x78\xfa\x52\x2d\xf5\x71\xfb\x7f\xbe\x6a\x80\x4a\x8f\xea\x95\xf6\x7a\x1e\x0b\x5b\x85\x84\x64\xf5\xbc\x2c\x1a\x83\x0e\x86\xda\x58\x7f\x0a\xfe\x26\xca\xad\x75\x35\xb5\x26\x19\x0c\xf1\x21\x3c\x6d\xb5\x49\x62\x5b\x39\x41\xee\xf1\x7b\xa5\x1f\x15\xee\xc7\xf4\x25\xf6\x9d\x5d\x7f\x60\xb3\x60\x18\x04\x2d\xc1\x12\x77\xc3\x97\x40\x86\x7e\xe6\xff\xcd\x6e\x30\xe2\x8b\x75\x06\x89\x23\x03\xf6\x2e\x89\x13\xc1\x01\xfe\xdd\xd9\x84\xbd\x99\xb0\xf3\x09\x9b\x4e\xa7\x2f\x27\xa8\xbf\x4e\x35\xc2\x57\x70\xeb\x2f\xf8\xca\x96\x4d\xa2\x2f\xcb\xe8\x03\x20\x63\x66\xed\x13\xc7\xf9\xc7\xc3\x53\x91\x57\xcd\x35\x01\x33\x91\x29\x6d\x8a\xd0\x31\xc9\x5a\xcb\x50\x29\x00\x5a\x8b\x44\xe7\x0e\xaa\x6d\x0a\x9d\x3b\xd8\xe9\x03\xcf\xb9\x54\x40\xd0\xc0\x9b\xa0\x7b\xfa\x72\x44\xd1\x2e\x7e\xe1\x1b\x68\xbf\x54\x9e\xa5\xd6\x76\xd3\xad\xaf\x7f\xb1\xdb\x52\x58\xe9\x31\x97\x45\x61\x0d\x32\x33\x53\x37\xec\xf5\xbf\xb0\xb3\xed\x36\x13\xec\x8c\xfd\x8d\xbd\xe1\x8a\x2b\xce\xde\xb0\xbf\xb1\x73\xae\x0a\x9e\xe9\x72\x2b\xd8\x39\xfb\x9b\xed\x36\x5b\xde\x95\xb6\x16\xd0\x6e\xc2\x38\x53\x65\x86\x86\xde\x77\x0e\xd2\xf9\xd2\xb7\x8b\x87\xd1\x59\x88\xe2\x51\x08\xc5\x8c\xde\xd0\x51\xf8\x57\x7f\xfa\x1b\xa9\x56\x99\x28\x68\x3e\x54\xc1\xb7\xf8\x81\x13\x68\xe9\xeb\x99\xf2\x7e\xea\xbf\xda\x1a\xff\x95\xfd\x8d\x5d\x95\x59\x66\xab\x64\x37\x1a\x3b\x91\x5e\x33\x97\x0c\x25\xd4\xf4\x51\xde\xcb\xad\x48\x25\x87\x74\x28\xfb\xaf\xd3\x5b\x18\xed\x79\x19\x98\x2f\xe3\x35\xed\x65\xa3\x8e\xd9\x7a\x9e\x85\x5a\xc1\x8b\x9a\xc5\xd6\x4a\x27\xe6\x22\x7e\x75\xbc\x11\x1c\xf8\x7e\x69\x3d\xd0\x1d\x05\x25\xbf\x62\xf1\xb4\x83\xb6\x80\xda\x61\xeb\xca\x6a\x39\x0a\xe2\x43\xfd\xd8\x4d\x16\x94\x00\xbf\xa2\x39\xfe\x53\xa3\x8b\x06\x53\xcd\x93\xda\x51\x85\xac\x02\x6c\xc9\x40\xd8\x35\x28\xb6\xeb\x75\x93\x7e\xaa\x4a\x21\x56\xba\x58\xcb\x41\x9a\x91\xb5\xca\xde\xd1\x4d\x00\xd3\x4c\xed\x32\x95\xd9\xa9\x5d\xaa\xa7\x57\x5a\x09\xc6\x8d\x91\x2b\x24\x19\x03\x87\x0e\x8a\x2d\x3a\xa3\xe0\xb6\x6a\xb2\x46\x4b\x00\xec\x03\x5b\x25\x04\xa8\x16\x76\x17\xb0\x43\x90\xed\x66\xca\xbe\x41\x27\x12\x24\xab\x48\xcf\x45\x8d\x5f\x23\xaa\x67\xf7\x2d\xda\x90\xa3\xc2\x5b\x26\x58\x5f\x26\xfc\x11\x13\x8e\x12\x2f\x8f\x88\xf8\x5c\x45\x3c\x8c\x54\x9a\x23\xe9\x41\xf4\xc2\x42\x64\x5a\xad\xec\xac\xe8\xda\x04\xf4\x86\xcb\x63\xe0\x61\x71\x15\xb0\xb0\xce\x1a\xd8\xc3\x92\x1e\xa1\x21\xb1\xe7\xa4\x4c\x83\x4b\xc7\x94\x0b\x6b\x47\xf8\x68\x83\x3f\x0d\xa9\x71\x5d\xb4\x00\xc7\xa1\x44\xee\x8c\xc8\x81\x2c\x1d\x71\x4a\x3e\x92\x85\x07\x67\xa0\xcc\xc1\x16\x0d\x5b\x54\xbd\xf0\xf6\x76\xef\x17\x45\xca\x1a\x04\x09\x03\xe6\xe3\xb7\x44\xba\x0f\xc1\xbf\xbf\x3b\xbb\x7c\x5f\x7b\xae\x89\x7f\x6f\x01\xc9\xdf\x5e\x7e\xb8\x78\x3b\xff\x78\x77\xdb\x78\xce\x96\x46\x7f\xda\x03\x81\xef\xec\xbd\xa7\x00\x01\x7f\x41\xd1\xa6\xb9\x5e\xba\x7c\xe8\xe1\x67\x7a\x43\x36\x6b\x18\xd6\x2c\xa6\xca\x8f\xe5\xa5\x9a\x13\xa7\x93\xd5\x41\xcd\x29\xda\x36\xac\xb2\xf5\x0e\xfb\xa8\xde\xe1\xeb\x9f\x74\x26\x93\x7e\xe8\xaa\x3b\xae\xd6\xfa\xb1\x05\x0b\xb8\x10\x80\xe5\x26\x97\x1f\x55\x0a\x2d\xf4\x42\x24\x45\x88\x26\x37\x1b\xf7\xbf\x1a\x2e\xb7\xff\x0e\x8e\x9e\x38\xdf\x6d\x20\xa3\xeb\xe3\xd3\x70\xb6\x02\x4d\x2e\xa8\x43\xa0\x7b\x1d\x7c\x7b\x80\xdb\x48\x38\x45\x1d\x2a\x3d\x0f\x1b\xf4\xe3\x5a\x67\xe4\x91\x43\xca\xe1\x99\xda\x8a\x3c\xd1\x00\x33\x43\x36\x0b\xcd\x92\xb5\xcc\xd2\x20\xc1\xf4\x1d\xe0\xf2\x01\x3d\xfb\x92\xc4\x35\x85\xc7\x4f\xb8\xe2\x7b\x4e\x5d\x37\xed\xde\xe2\xea\x3e\x0a\x7b\xf4\x94\x40\xdb\xbe\x69\xff\x33\x01\x42\xb1\x2b\x88\x24\xac\x16\x09\xb7\x9d\x5e\xa9\xcf\x28\xa7\xbe\x3d\x6e\x49\x5d\x27\x09\x17\xa7\xa2\x36\xae\x34\xcd\xea\x5d\x09\xd4\xd1\xe8\x49\x45\x18\x98\x11\x50\x9d\x8d\xe0\x68\x8b\x05\x22\x57\x1a\xd4\x99\x0a\xb1\xff\x17\x26\xb6\xcb\x5a\xc7\x19\xfd\xaf\x0e\xca\x3b\x61\x2f\x2a\x0d\x7d\x01\xd4\xc2\x4a\xc3\xf7\x28\x3e\x5b\xe9\x1a\x98\xae\x13\x26\x8b\x99\x92\x06\x67\x66\x2e\x32\xf1\x60\x6b\x17\xc7\x07\x08\xb1\xe6\xee\xce\xae\xd9\x90\x0d\xc2\x1d\x89\x00\x4d\x1b\x5a\x84\x79\x4c\x51\x8b\x81\xc9\x54\x18\x6b\x37\x82\xb8\x8e\xf8\xc5\x2e\x00\x09\xe1\x2f\x84\x36\xa5\x42\xb9\xfa\x01\xe2\x09\x15\xa9\x67\xea\x72\x09\x99\xdc\x90\x3f\x9e\xa6\x78\x0b\x75\x72\x2b\x9e\x2f\x50\x52\x3c\x40\xd3\x9d\xdc\x0d\x04\x69\xc3\xe2\x4a\x12\x0f\x22\xdf\x15\xe0\xd4\x85\x7e\x55\x82\x17\x6b\x26\x8b\x09\x10\x3d\xba\x9d\x72\xa6\x78\x9a\x52\x02\x2c\x16\x67\xbb\x06\xe6\x7d\xcf\x38\xd3\xef\x0b\xfd\xd0\x67\xd8\x1e\x8b\xdd\xc4\x55\xbd\xcd\xb8\x9a\xe3\x09\xf2\x0d\xd0\x9b\x91\x6c\x6f\x57\x18\xbf\x5c\xcc\x3d\x39\xd5\x93\xd4\x33\x52\x76\x8f\xc5\xb4\xad\x1d\xeb\x3e\x34\xc1\xc9\x10\xc8\xe9\xdd\xf5\xc4\xfb\x69\x08\x39\x93\x33\x87\x2e\x18\xbe\x0b\x04\x60\x27\xaf\xa1\x6c\xdc\x6c\xdd\x87\xec\x74\x33\xe0\xd7\x8a\xbd\x1b\x32\xf2\xb5\x33\xa4\x3e\xec\xe3\x61\x5f\x0d\x0b\xf1\x20\xe8\xd7\x9e\x6a\x3d\x2f\xfc\xab\xd3\x8f\xd2\x84\x81\xb9\xd6\x46\x11\x5e\x4c\x81\x12\xe8\x87\xf3\x6e\x9e\x76\x59\xe6\xf8\x1e\xa6\x5b\x10\xd2\x4f\xe9\xa3\x86\x7d\x6a\xa8\xa7\x24\x30\x28\x40\xbd\xa6\xec\x52\x31\x67\xee\x4d\xd8\x0b\x9c\x58\xe6\x05\xb9\x20\x49\xdb\x9b\xe0\x12\x29\xad\x1e\xca\x39\xaf\xc3\x8c\x30\xf3\x27\x2c\x37\x8c\x04\xf5\x12\x94\x3e\x6b\xbf\xbc\x91\x90\x79\x74\x08\xb9\x04\x46\x11\x17\x58\x00\x1d\x92\x78\xed\xde\xa1\xd1\xae\x83\x37\x3b\x34\xd8\xc5\xbb\xd8\x1b\xf7\xa2\xed\xa2\x6d\x49\xe7\xa9\xfb\x9d\xe9\x7c\xa6\x5c\x69\xe4\x92\x34\xa8\x88\x56\x2f\x2a\x4a\x84\x20\x9b\x3f\x9a\xa9\x10\x0c\x76\x22\x78\xa0\xad\x18\x58\x94\xeb\xbb\x00\xe0\x60\x16\x1e\x83\x08\xb4\xfb\xe1\x6b\xd6\xf0\xb0\x13\x7c\x83\xc7\x7c\x9d\x69\x35\xcb\x6c\xa7\xc8\xc2\x11\xbb\x46\x49\x4a\xa6\x04\x7a\xe2\x65\x69\x37\xa3\x88\xc3\x79\xa6\x6c\xe7\xb1\xa5\x04\xf4\x3e\xf5\xcb\x4c\x7d\xd0\xc6\x71\x62\x98\xd0\x1f\x2e\xb4\x4c\xdd\xf6\xc2\x6b\x01\xd2\x1f\xde\xc2\xa1\x4d\x3e\x7f\x64\xb7\xf2\x47\x0b\x64\xa7\x11\xb1\xcd\x4e\x97\x79\x68\x54\xc2\xd5\x4c\xfd\x87\xed\x1e\xd4\xa3\x57\x6e\x58\xf5\x12\x97\x30\x8c\x20\x04\x4b\x3e\x63\xa1\xdf\xfd\xe3\xcb\xcf\x2f\x31\x9b\xa4\x34\x20\xbf\x3a\xa9\x1e\x20\x9e\xce\xbf\xcc\x32\x88\x44\xbb\x16\x78\x4a\x99\xf0\x89\x5e\x24\x16\x5d\xea\xe6\xaa\x6a\x62\x0c\x59\xe8\x7d\x33\x38\x38\x9f\xcf\x58\xc2\x8b\x64\x7d\xe2\x6c\x39\xda\xc6\xdc\xe9\x47\xc3\x87\x3a\x8c\xd6\xd2\x6a\x67\xb4\xb7\x17\xce\x7c\xe3\x39\x36\x2b\xf3\xc5\x36\x01\xb0\x54\xb7\x75\x79\x27\x4f\x01\x8c\x93\x13\x91\x20\x55\x3b\xcf\x3f\xee\xc4\x15\xc3\x8d\x93\xbc\xe4\x8a\x6f\x44\xca\x5e\x40\xde\xe3\x0b\x37\xf8\x33\xb5\x5d\x4c\xb3\xdd\xb2\x20\xa2\x36\xdb\x29\x53\x90\x21\xdb\x73\xca\xcd\xd3\xe6\x35\x69\x4f\x67\x77\x5e\xb4\xda\x6d\x1d\xdf\x37\xfe\x4b\xc3\x0d\x16\xf4\x71\xf9\xde\xb9\xa9\xa2\xc2\xaa\x7a\x08\xdc\xdc\x4f\xd8\x22\xe7\x0a\x14\x64\xd2\xd8\xa8\x0a\xab\x13\x2e\xcf\xc8\x82\xe6\x12\xa1\x14\xcf\x76\x90\x01\x32\x99\x29\xa4\x8c\x03\x6e\xf1\x5d\x92\xc9\x84\xad\x72\xbe\x5d\xd7\xec\x20\xf1\x20\x54\x01\x42\xc4\xd7\x82\x9b\xe3\xa2\xf5\x79\xbd\x04\x36\x38\x9e\x72\xa6\xe0\xf6\xc1\x55\x8d\xe4\x17\xaa\xd7\x71\xb4\x00\x42\x4f\xa4\xf3\x71\x04\x3f\x7b\x69\x68\x2b\xe4\x86\xc4\xb4\x05\x11\x48\xdb\x38\xe6\xbe\xba\x2f\xfc\x8d\xfd\x4a\xdc\x33\x0e\xd3\x79\x6c\xc8\xde\x73\xd9\x1c\xc5\x48\x7a\x59\xb5\x22\x79\x20\xe9\x09\x9e\x6b\x4c\xe3\x23\x4f\x85\x03\xc2\xfb\x8d\x63\x42\x42\x91\xc0\x56\xc8\xfe\x52\x2e\x74\xe6\xe8\x1e\x2f\xdf\x32\x9d\x83\xd2\x4a\xa1\xe9\x4f\x32\xed\xb2\x0e\xa4\x4a\xc5\x2f\x47\x71\xae\xf4\x1f\xf4\xce\x6c\xb6\x9f\x89\x04\x3d\xea\x8d\x85\xdd\x29\x17\xf6\x10\x2e\xdc\xcd\xb8\xf1\x94\xa9\x83\x55\xcf\xb2\x62\x0d\x08\x52\x4c\xd2\x08\x9d\xba\xe1\x3b\x96\xac\xb9\x5a\x45\xae\x09\x00\xf4\x89\xad\xce\x51\x91\xf4\x01\xc8\x0d\x75\xee\x72\xda\x29\x53\x9b\x32\x45\x7c\x20\x01\x01\xda\xda\xa5\x63\xf3\xd5\x2a\x17\x2b\xa0\x19\x99\xa9\x0a\xd7\x04\x10\x3b\x3a\x31\x14\xfc\x4e\x5f\xaa\xfe\xd3\xf0\xdd\x74\xdd\x06\x8b\x7c\xe7\x13\x9d\x49\xce\x37\xac\xe7\x7a\xb7\x4e\x98\x14\xd3\x09\xfb\x21\x80\xd2\x45\xa2\x95\xcf\x94\xee\x48\x93\xad\xb9\xfc\xd9\x9e\xab\x43\x93\x18\xa7\xbd\xee\xf0\x5b\x43\x14\xb8\x75\xd2\xf4\xa6\x9a\x17\xbc\x28\x47\x9c\x41\x24\xfc\x7e\x6e\x5f\xbe\xc1\x77\xfb\xe6\xf5\x39\x22\xc6\x1d\x29\x99\x7d\xde\x9e\x9c\xf6\xdb\x81\xb4\xbc\xad\xaf\xf7\x3a\x90\x33\xdd\xed\x40\x7e\x0a\x53\xdd\x31\xcf\xec\xf7\x21\x67\x1d\x6c\x2a\x3d\x6d\x1a\xeb\x22\x76\xb8\x6e\x4a\x4d\x31\xf5\x6b\x6c\xcb\x0e\xb0\xcd\x75\x5a\x26\x22\xb5\x2b\x17\xee\x43\x88\x88\xf1\xa4\x2e\x95\x4d\xb2\xed\xa0\xad\x30\x53\xc1\xa9\xfb\xb5\x7c\x0e\x83\xc8\xc0\x7d\xf7\xdf\x75\xf8\x1b\x9c\xc5\xd7\xd6\xe9\xf1\xfa\xc4\x7e\xca\x47\x9e\x53\xfe\xf3\x55\x0a\x6f\x9d\xcb\x95\x54\xbc\xd0\x39\xfb\xce\xa7\x6e\xbf\xf4\xba\x5f\xdd\x16\xc2\xc8\x6d\xa2\xd2\x45\xb8\x4d\x7c\x55\xc3\xa3\x6d\x92\xda\xa7\x4c\xc1\x37\xdb\x98\x14\xd7\xab\xaa\x53\xcf\x64\xd8\x09\xde\x36\x01\xdf\xa9\x34\x21\x6f\x73\xa6\x28\xe2\x80\xe3\xa6\xf3\x98\xd5\xbd\xf3\x6c\xde\x96\xc5\xfc\x40\xa2\x27\x7c\x79\x9c\xe3\x89\x60\x08\x1f\xf8\xb6\x9f\x3a\x87\x93\xcb\x01\x13\xd7\xbc\xd4\xbc\xb3\x54\xaa\xf3\xb3\x5f\x37\x65\x24\x95\x6f\x3d\x74\x7e\xfd\xde\x05\x8a\xc2\x7d\xb0\x72\xc1\x82\x81\x40\x0e\x51\x4c\x04\xc2\xab\xbd\xdf\xd6\xec\x29\xee\xf8\x76\xce\x33\x5d\xa6\x8c\x36\x35\x0a\xc3\xe7\x53\x3c\x1d\x81\xd4\x77\x3a\xed\x4a\x6c\x1a\xa9\xe7\xec\xf7\x1f\x78\xaf\x7d\x05\xc2\x6f\x1d\x3b\x70\xef\xd2\xa7\x9e\x7d\xb6\xa1\xa7\x9e\x86\xb1\xf7\xdb\xf1\xa8\xb1\xf7\x5e\x70\x60\x18\x1c\xe7\x20\x85\xfb\xa8\x4c\x33\x58\x6f\x71\x00\xa1\x85\x03\xb9\x12\x98\x35\xf7\x47\x7f\xce\xf1\x10\xf4\x7f\x6a\xcb\x73\xa1\x8a\x39\x7c\x71\xdc\xc7\xe0\x23\x9f\xe0\xf5\x8a\xc1\x34\xc8\x11\xfc\x6f\xb7\x1a\xfd\xfb\x8e\x4e\xe8\xdf\xd9\x0d\xf9\xb4\xec\x7e\x25\x01\x44\x6a\xee\xd9\x77\x12\x30\x47\x51\x2c\xd4\x0f\x5c\xc7\x70\x51\x83\x0e\xe8\xbd\xa8\x41\x95\xad\x7d\x50\x83\x42\xed\x21\x54\x0d\xa5\x90\x7b\x8f\xb2\xc2\xed\x56\xeb\xfe\x16\x49\x0c\x5c\x55\xfe\x0d\x74\xb0\x76\xfc\x32\xf6\x9f\x22\xd7\x21\x03\x08\x9d\x55\x71\xc1\xbd\xf6\xfa\xe1\xea\xc8\x68\x8f\xa3\x2e\x6f\x2c\x4c\x09\x7f\x21\xc6\x26\xf4\x28\x2c\x76\xee\x3a\xd2\x11\x42\xda\x8a\x64\xde\xa1\x42\x32\xa8\x2a\xd1\xc5\x33\x56\x15\x91\xb5\xc3\xcc\x2d\xd0\x53\xf0\x57\x50\x6a\xcd\x86\x6f\x09\xdf\x47\x50\xe2\x7a\xf0\x66\x0a\x8d\xf8\xb7\xbf\xfe\xfb\xb4\x4b\xf7\x1e\xaa\x3e\x16\x2e\xe5\x2b\xff\x2e\x97\x42\xa5\x10\x8c\xe5\x69\x53\x20\x4b\x55\xbc\xf3\x95\xed\xd9\x4e\xc3\x27\xc9\x08\x6e\x3f\x6a\xcd\x1c\x27\xd1\x57\x88\xe8\x87\x4d\xd6\x2f\xdf\x4a\xbc\xaf\xcb\x94\x30\xf3\x74\xa7\xf8\x46\x26\x5f\xb5\x8e\x3b\x29\xb2\x14\xaa\x48\x5f\xdf\x17\x95\x4a\x45\x72\x3f\xd6\x26\x38\x98\xde\x5f\x24\xf7\xec\xc7\xdb\x0f\xef\x51\xcd\x55\x9a\x99\xba\xe2\x85\x7c\x10\x77\x79\xe6\xc3\x01\xc4\xd7\x94\x67\x6e\x8d\x54\xe9\xa6\x23\x6a\x23\xc7\x4d\xed\x0c\x87\x58\x0d\x60\xb3\x3b\x59\x94\xc9\xbd\x28\x4e\x73\xae\x52\xbd\xc1\x66\x9c\x9a\x72\xb9\x94\xbf\x4c\x0b\x9e\x77\x48\x03\xa0\x1f\xe1\x1b\xda\xb9\x41\xf0\xa9\x08\x36\x2f\x9a\xba\x8f\x90\xe8\x4b\x32\xe2\x15\xe3\x16\xf3\xd2\xf8\x46\x00\xb7\x23\xab\xca\x6a\x40\x29\x98\x3b\x0b\xea\x93\xc6\x10\x82\x5e\x93\xb6\xf5\xe7\xc8\xb8\xff\x1c\xd5\xaa\xaa\xaf\xee\x2a\x15\x14\x1d\x37\xfc\x1e\xef\x87\xab\x5c\x18\x33\x61\x46\x43\x8d\x67\xca\x61\xd1\x5d\xbe\x14\xe0\x5e\x80\x1d\x36\xdb\xb1\x44\x6f\x25\x08\x60\xfa\x76\xad\xf5\x23\xf8\xe9\xe3\x4c\x51\xd0\x2c\x2e\x55\x21\x33\xc6\x97\x05\x39\xf1\x81\x0a\xdf\x49\x5f\x99\xe9\x4c\x41\x28\x36\x81\xe6\x03\x44\xc2\x87\x5f\x7c\x23\x0c\x5b\xf2\x44\x66\xb2\x20\x82\x2e\x48\x32\xe2\xb6\xbd\xf6\x3c\xb0\x7d\x99\xf3\x1d\xcf\xc2\xc5\x8a\x67\x65\x48\x8e\x3d\x31\xa2\x87\x00\x52\x9a\x39\x3a\x08\xbe\x06\xe3\x9c\x8c\x83\x0f\x48\x96\x7d\x66\x3f\x7e\x55\x3b\x45\x7f\x17\xff\x6f\xe5\x1e\xde\x67\x15\x1c\x71\x21\x3f\xe6\x70\x6c\x5e\xb9\xbd\x5e\x74\xb0\x33\x64\xea\xf0\xc1\x15\x53\x3c\xa4\x9f\xfa\xe3\x11\x62\x26\x1d\x97\xfe\xa9\x53\xf9\x6a\x7e\x61\x44\xef\xb5\x1b\x89\x5f\xc9\x9d\xd1\xc5\x60\x3e\xa4\xfa\xce\x1b\xff\x49\xeb\xec\x58\x8f\x3c\x91\x32\x48\xad\xe6\x20\x7c\x7b\xcc\x75\x12\x27\x80\x77\x6c\x5d\xbe\xf5\x31\x77\x4f\x09\x5e\x95\xcb\x22\x38\x18\x55\x01\x36\x32\xa8\x44\x0f\x52\xdc\x6c\x5b\x40\x17\x23\x11\xef\x50\x06\xa2\xb5\x9c\x69\xdf\x0c\x11\x44\xfc\x1c\x3c\xd4\x11\x68\x53\x6b\x35\x1c\xe5\xac\x43\x99\xda\xda\xa7\xbc\xe3\x2e\xa6\x57\xf6\xfd\x18\x7d\xdb\xf5\x27\x8a\xe3\xdb\xf3\x93\xac\xf8\x99\x8a\x2c\x76\xe4\x44\x73\x29\x05\xbe\xd7\xda\xfc\x79\x95\x69\x78\xb4\x3f\xef\x18\x0e\xfd\xde\x9d\xf3\x6d\xac\x86\x07\x58\x90\x44\x6f\x16\x52\x39\x56\x02\x72\x72\xc3\x55\xe3\xcc\x51\x94\xfa\x80\x84\xbb\x32\xa0\x46\x4a\xad\xef\xbd\x99\x13\xb3\xbd\xc6\x5b\xd6\xbe\xeb\x78\x7c\xbf\x7b\x5a\xba\xff\x8e\x48\x63\xbd\x05\xf6\x00\xc9\x1e\xf9\xce\x80\x62\xb4\xb0\xbb\xe2\x12\x1d\xbb\xd5\xfa\x4f\x22\xf3\xc3\xd1\xdf\xce\x14\xf4\x50\x49\x42\xf2\xd4\x16\x49\x0c\x00\x99\xd3\xc6\x0e\x5c\x5f\x2f\x4c\x7b\xe7\x7c\x9b\x58\x4d\xde\x1b\xab\xc1\x20\xf4\xff\x8c\xf0\x4c\x8f\x13\xf8\x48\x5f\x74\x74\x4c\xa2\xc5\x48\x30\x21\x48\xdc\xf2\x21\xea\x09\xdb\x70\xa9\x68\x19\xa0\xfe\x60\x2a\x16\xe5\x6a\xd5\xe9\x22\xfd\xf5\xc7\x5a\xaa\xeb\xe4\xef\xde\x17\xde\xcb\x56\xf7\x14\xde\xe2\x4b\xf7\x25\x74\x5f\xdb\x7b\xdf\xd7\x71\x10\x7f\x43\x6f\x7c\x6b\x48\xac\x31\x89\x9e\xc6\x1b\x7f\x39\xc4\x1b\xef\xb0\x5d\x90\x62\x47\xd7\x69\x87\xbf\xf9\xcd\x4d\xff\x75\xdc\xf4\x83\x26\x05\xd2\xba\xcc\x65\xd5\x40\xef\xa9\xe1\x81\xcc\x87\x9e\x0c\x18\x6a\x85\xec\x62\x76\x77\x4f\x0d\x5b\xf0\xe4\x19\xa8\x10\xe1\x74\x3c\xde\x1f\xb8\x07\xfc\x72\xa3\x37\x82\xc1\xa7\x0c\x2a\xd7\x30\xca\x62\x9c\x00\x5a\xd5\x36\x30\x20\x46\x08\x8f\x02\xc7\x29\x22\x57\xd2\x60\x54\x7f\xa7\xc4\x23\xb3\xa7\xd5\x24\x86\xef\x45\xc3\x03\x92\x66\x2f\xad\x75\x58\xc1\xfa\x7b\xca\x86\x5c\xac\x78\x9e\x42\x86\x09\x2d\xc9\x8c\x27\xf7\xf6\xbf\xa1\x7e\xf4\x45\x82\x18\x3a\x75\x05\x84\xbd\x86\xd2\xa4\x4a\x90\x0c\x8f\xd0\x8c\xa1\x7e\xf8\xba\x61\x3c\xc9\xb5\x41\xa7\x91\x57\x02\x86\x0c\x67\x30\x60\x1f\x64\x5a\xf2\x0c\xbf\xd8\xe9\x69\x1f\x0b\x5f\xab\x03\x8e\x22\xd1\xae\x26\x9a\x8d\x86\x03\x39\x8a\xa0\x1b\xa7\x33\xf5\xd6\x07\x4c\x5e\xb3\x3b\x23\x08\x65\x66\x1c\xed\x79\x6f\x4d\x9f\xcd\x7c\x68\x60\x02\x3b\x6d\x88\x9e\x0e\x70\x20\xeb\xa8\x23\x4c\x77\x4f\xec\x21\xd4\x3c\x66\x50\x46\x13\x03\x5f\x46\xca\xe1\xa1\x5b\xf0\x9e\x90\x0b\x9e\xee\x62\x36\x3e\xa9\x18\x44\xe9\x18\x4f\x37\x52\xd9\x45\xe0\xd4\x29\xfd\x49\xe3\x88\xea\x11\x72\x0c\x22\x4e\x59\x56\xdb\x04\x0d\x53\xc2\x1a\x97\x3c\x97\xd9\x0e\xee\x13\xdb\x5c\x9c\x44\xdf\x89\xc6\x87\x32\x9e\x80\x72\x9f\x68\x44\x4a\x23\x96\x65\x86\xb7\x0e\xb8\x97\xfb\x06\xd0\x8e\x74\x77\x39\xb1\x06\x47\x41\xd2\x29\xd1\x87\x51\x90\xf0\x29\xb2\x47\x1a\xd1\xca\x71\x11\xb7\xc0\x16\x99\x03\xc8\x7d\xad\x1f\x5d\xaa\xdb\x23\x0f\x58\xe6\xae\xd3\xf5\xc9\xa2\x2c\xfd\x76\xa8\xbb\x01\xba\x7d\x2a\xa2\x7c\xf3\xa1\x35\xfa\x4d\xa4\x7e\x6f\x92\x0a\x9a\x43\x9a\xbe\xc1\x73\x5d\x1a\xcc\x98\xb3\x63\x09\xe7\x97\x73\x74\x54\x1d\xd7\xcc\xb7\x4e\x1a\xad\xd8\xac\xfc\xfe\xfb\xdf\x0b\xf6\x3d\xa4\x10\xd2\x7d\x04\xe3\x63\xc0\x17\x89\xa5\xc3\x96\xed\x3f\x20\x90\x4c\xb2\x31\x22\xac\x0d\xa2\xea\xf2\xf5\x01\xe4\xc9\x93\x35\x33\xe5\x02\x11\x8c\x9c\x42\x2c\x5c\x79\xde\xe9\xf7\x1a\xc0\x88\x78\xb2\xbb\xda\xff\x2f\x09\x28\xa0\xca\xc5\x4c\x6d\x35\x52\xa3\x03\xf4\x73\x21\xd8\x86\xe7\xf7\x20\x5a\x8a\xee\x79\xa0\x82\xff\x4e\x8a\x69\x35\xbc\xf0\xb2\x52\x1f\x0a\xe8\x20\xe5\x31\xcb\x4b\xa5\x9c\x0a\x13\xb3\x86\x69\xf0\xf5\x4f\x66\x6a\x51\xc6\x77\xcf\x4a\xb0\x20\x4c\x2d\x08\x18\xc0\x66\xab\x81\x2b\x84\x2a\xc5\x4d\xa8\xd7\x94\x0d\x88\x1a\xcc\xd4\x13\x87\x0d\xf6\x39\xfc\x3e\x91\x0d\xe6\x9c\x79\x51\xbe\x02\x34\x37\x16\x0a\x86\xe1\xc0\x69\x0f\x46\xce\x27\x50\x0b\x9e\xb0\x1f\xe5\x83\x98\xb0\x9b\x2d\xcf\xef\x27\xec\x2d\x86\xff\xfe\xa4\x17\x6d\x3e\xbc\x06\xa1\xc4\xd1\x7e\xbc\xc3\xdc\x58\x7d\x44\x2b\xed\xd6\xff\xcf\x0d\x62\x00\xd6\x15\xfb\xfe\x9f\x89\xc8\xeb\xe0\xfa\xf8\x7b\xf7\x44\xec\x09\x53\xff\x06\x5e\xfb\xbb\xbc\x15\xf7\xd3\x7c\xfc\x2e\xfe\x5f\xb7\x7f\x39\x8b\x0b\x6c\x4f\xda\xe5\x5a\x51\x69\xbf\xae\xc4\x66\x99\xd6\x0f\xe5\x66\x7e\xf3\xb0\xa5\x40\xe9\xe3\xa9\x4f\x6d\x1f\x01\xba\xa7\x57\x5d\x7f\x9d\x67\xda\x94\x79\xff\xe2\xbf\xae\xd6\xda\x7d\xbd\x85\xea\x13\x26\xdb\x66\x21\x80\xb5\x60\x28\xfc\x04\x1f\x9b\xff\x87\x5e\xcc\x01\x6b\x75\xdc\x0a\x6f\x2b\xce\x13\x08\xeb\xa4\x52\xd5\x70\x42\xde\x6c\x05\x30\x4e\x05\x53\x34\x04\x04\x6a\x33\xcc\xbb\x46\x66\xca\x71\xae\x63\xc6\x6c\x9e\x0b\x20\x87\xce\x05\x28\xdb\xb1\x2d\xcf\x3d\xe0\xc1\x59\x44\xd1\xcd\x27\x80\x62\xe2\x2c\x37\x48\x56\xa5\xfb\xd6\x42\x08\xe5\x7b\x7b\x8c\x29\x01\x44\xc8\xb5\xde\x27\xb4\xdb\xa3\x70\xd4\xfb\x1d\x2a\x9c\x8d\xf7\xa2\xbb\x20\x98\xdc\x2b\x51\x44\xbb\x79\xcd\xb4\xa8\x2c\xcd\x4a\x84\xea\x57\x85\xf8\x6f\x8d\x41\xd7\xc8\xb9\x2a\x0e\x94\x41\x31\xbd\xa7\xf0\x97\x7f\xe2\xc5\x1a\x2f\xb4\x1b\x5d\x08\xdc\x33\x91\x25\x08\xe7\x0b\x7a\x9d\x17\x99\x5e\x80\xa4\x9c\xfd\xa5\xeb\x6e\x98\xd0\xd2\x1e\xd4\x75\xcd\x01\x1b\xb2\x33\xd8\xdd\x04\x32\x6d\x73\x61\x80\x70\xa5\x19\xa5\x1a\x8a\x4f\x1e\x77\xe9\x6e\x56\xd7\x6e\xfa\x6f\x1b\x97\xed\xa6\x28\x83\x5d\xd6\x00\x56\xbd\x38\x20\x83\xa6\x21\x71\x41\x64\xc5\x14\x06\x46\xbe\xd2\x5a\x7b\x9d\x72\xf9\x4c\x9d\xe1\x2f\xd1\x21\xc0\x83\xca\x92\xc7\x83\x92\x48\xad\x5f\x7f\x98\xbe\xca\xce\x62\x04\x22\x79\x08\x26\xc1\x97\x09\x97\x81\x09\x64\x35\xaa\x42\xe6\x82\x29\x40\x21\xcc\x94\x29\x17\x27\x81\x98\xc4\xde\xe2\x1e\x80\x4c\xc7\x88\x2d\x87\xab\x0c\xf0\x15\x9d\xb4\x1c\xc3\xe8\x99\x0c\x6a\x29\x8e\xc0\x8f\x67\xb4\xf9\x43\xae\x24\x66\xc6\xfb\xb6\xfb\x72\xec\x65\x0d\x6e\xd1\x0e\xae\x84\x87\x5d\xdf\x7e\x01\x7a\x4e\x90\x81\x79\x8d\x28\x8a\x6f\x7d\x80\xc7\xd1\xd0\xa1\x47\x37\xc4\xd3\x66\xea\xff\x77\x67\x43\x37\xa8\x78\xc4\x4c\xb7\x3d\x63\x8f\xa8\x4e\xb0\x73\xa5\x6e\xee\x0a\x19\x19\x81\xdd\x95\x6a\x4c\xf9\xb6\x52\xb9\xc3\xb5\xc4\xa2\x1e\x9a\xd2\x65\xe1\xd7\x07\x69\x22\xba\x6f\xf8\xda\x8d\x10\xec\x75\x2e\x96\xaf\x3f\xe7\x62\x39\x77\x23\x3d\x85\x06\x4d\x6d\x8b\x9a\xa4\xdf\x03\x27\x87\xd9\x6a\xd5\x4e\x7e\xb8\x87\x9c\xb4\xd6\x24\x2c\x27\x6a\x93\x5c\xb2\x20\xe7\x69\xdb\x03\x0c\x10\x22\xad\xb3\x91\x37\x6a\xf6\xd5\x8f\xb9\x2e\x24\xd8\x00\xa8\x55\x87\x0c\xe6\xdf\xff\xf1\x56\xe9\xb3\x21\xc7\xdb\x6d\x15\x32\xe3\x36\x7b\xae\xfc\x81\xd7\x8d\x0b\xfd\xba\xe8\x74\x18\x40\xb3\xe5\x8f\x8a\x78\x6c\x46\xb9\x9e\x86\x1d\x6b\x35\x00\x51\x74\xac\x35\x30\x70\x61\x95\x29\xe7\xe9\x93\x5e\x49\x71\x12\xc9\xad\xf3\x2c\x8b\x35\x15\x42\xa4\x6d\xa6\x42\x5e\xaa\xb5\x5a\xb3\xcc\xb9\xf0\x2a\xf6\x06\xb1\x16\xa5\x90\x10\x2c\x26\x8e\x74\x85\xe8\x0a\x29\x1e\x76\xb2\xe0\xa0\xe5\xeb\x55\xb4\xf6\xad\xe6\xa7\xba\x44\xfe\xca\xf2\xa2\xf7\x44\x9e\xf1\xb3\xf3\x7b\xd1\x80\x33\xef\xad\x6b\x7b\xa4\x23\xa2\x94\x80\xc5\xec\x76\xd9\x84\xe7\xb9\x43\xf9\xd3\x57\x99\xbd\x2b\x2d\x79\x52\x71\x73\x76\xd4\x73\x2d\x92\xfb\xad\x96\x6a\xf4\x5e\x54\xa1\xb8\x80\xc9\x5e\xb0\x50\x9a\xbf\x1d\x0e\x3a\x1c\x2b\xf6\x24\x36\xc4\x00\xbc\xc2\x41\x43\x03\x19\x1b\x67\x5e\x2b\xb9\x7b\xda\x3d\xb5\xff\x42\x84\xb3\xe1\x19\x7c\xb1\x2d\xf1\xa1\xda\xa9\xc2\x5b\x1c\x3b\x15\x26\x50\xde\xc8\xfe\x1a\xd8\xd9\x9c\x55\x28\x0c\x5b\xbb\x14\x5c\x90\xbf\x79\x86\x7e\xf3\x0c\xfd\x0f\xf7\x0c\x7d\x4d\xb7\x10\x60\x63\x9e\xd3\x27\xd4\x13\x20\x3f\x62\x39\xfa\xaf\x8e\xce\x71\x6c\xb5\x8e\x27\x91\xec\x73\x94\xe9\xd8\x04\xfa\x3b\x22\x0c\xdb\x3f\x0b\x9e\xdc\x0b\xd5\x19\xa3\x77\xf4\x45\x9d\x0a\x9c\x4f\x8b\x60\x69\x63\x5f\x8a\xde\xee\x87\xb2\x04\xa8\x13\x91\x06\xb7\x11\x82\xd8\x75\x02\xb6\xa7\x6d\xf8\x09\x80\xc6\x74\xee\x89\xad\x0d\x65\xe1\x61\x30\x12\x69\x92\x10\x2c\x55\xa3\x82\x1e\x8a\x89\x73\x1f\x9e\x6f\xb5\xce\x5a\xa1\x71\x4f\xda\x81\x8d\x44\x99\xa1\x9d\x77\x89\xc6\xa8\x89\x01\x63\xae\x17\x43\xd2\x45\x48\xd1\xc0\x7c\x0c\xd0\xc2\x80\xd9\x94\x96\x90\x4b\x19\xba\x23\x12\xd8\xe3\xde\xe1\x42\x18\xb1\x85\x48\x38\x48\x7f\x3a\xf0\x5e\xc2\x7d\xf6\x49\x4c\x8a\xd4\x48\x07\x31\xcd\xef\x74\x44\x2d\xa1\xdc\xb9\x6c\x13\xbe\x18\xbb\xb8\x6a\x16\x82\x83\x96\x63\xcd\x1d\x92\xc4\xd1\x2e\xee\x93\xb4\x75\x1c\xd3\x73\xd0\xdf\x1b\x76\xc2\xb5\xee\x3b\x97\x54\xd0\x39\x94\x33\x7c\x23\xfd\x11\xd2\x71\x36\x03\x91\x3b\x33\x75\xe6\x95\x4e\x03\xf6\xcb\x23\xf7\x30\x5c\x8a\x98\xc5\xc6\xd0\x20\x97\x63\xb8\xb9\x4c\x98\x29\x93\x35\xb0\x55\x56\xf7\xa9\x78\xdf\x6a\xae\xd8\xc9\x4c\xd9\x0b\x11\xb8\x5a\x36\x1c\xf2\xe2\x1f\xad\xb1\x6a\xe4\x7f\x0a\x0f\xcf\x22\xf2\xae\x18\x91\x85\x17\x27\xad\x5a\xd1\x6b\x8e\x38\x14\x01\x16\x01\x53\x52\x6e\x53\x5e\x88\xe9\x2c\xa0\x6d\x24\x7a\x3a\x1d\xca\x83\x4c\x66\x13\x37\x2c\xc6\x31\xd6\x76\xda\x4c\x2e\x45\xb2\x4b\x1a\x3a\x40\xfd\x34\x11\xbf\x5d\xdb\x7e\x5d\xd7\x36\x64\xd9\xc5\x9c\xc1\x31\x5d\x4b\x55\xbd\x0e\xaf\x1f\xd7\xb9\x82\x45\x35\x31\x23\xfa\xf9\x2b\x5e\x3b\x5b\x6c\xe0\x71\xf6\xfc\xe0\x7b\x50\xff\x71\x16\x2e\xb6\xe1\xb0\x8e\x28\x10\x1a\x66\x61\x1c\x5c\x2c\xe2\xa9\x63\x0d\xda\xc1\x61\xfd\x6e\x96\x99\x5f\x15\x38\x69\xc8\xc5\xd5\x5a\xdc\x1e\xae\x74\xe5\x2c\x6d\x25\xf0\xbc\xeb\xb1\xb8\x23\x56\x77\x5e\xbc\x30\xbe\xd7\xab\x3b\xa0\xc3\xfe\xbf\x97\xa6\xf8\xa9\xa6\x19\x7a\x98\xe8\xe8\xb3\x99\xa6\xae\xaa\x58\xcd\xa1\x16\xd5\x75\xd5\xe6\xd1\x4b\x37\xe7\xe0\xf2\xe4\x54\xe2\x6c\xbd\xc7\xdc\x83\x3e\xfb\xfe\xfa\x8c\x47\xd3\x63\xce\xb7\x5b\x91\xbb\x83\xbc\x61\x6b\x81\xe4\x1a\x7c\x05\x34\x13\xd7\x02\xb5\xba\x6b\xb7\x5c\xbb\x95\xd4\x8a\x86\xc7\xa0\xeb\xa6\xed\x23\x77\x55\x66\x59\xe7\xc8\xed\x57\x72\xba\xba\x7b\xff\x7e\xfe\xd3\xd9\xfb\xbb\x0b\xd7\xfc\x56\x65\xa4\xe8\xb1\xce\x3e\xf1\x35\xa1\x3e\x09\xda\x8b\xf6\xb3\xc2\xe9\x85\xeb\xd0\x6a\x74\x72\x95\x59\x56\x55\xcd\x9a\xa9\xcf\x54\x0e\xc0\xb4\x51\x11\xd4\xf6\x1b\xeb\xed\xb8\xea\xf7\xe1\xb1\xcf\xb6\xf0\xcf\xf8\xee\x09\x0b\x8d\x78\x0d\xda\x8e\xa4\x19\xd7\xde\xaf\x94\x0d\x73\xc4\x72\x40\x30\x70\xd7\x72\x78\x6a\x5d\xc0\xc3\x96\xc7\x9d\x02\x46\x72\x91\x3a\x39\xbf\x27\x59\x1d\xd8\x77\x9f\xab\x71\x6a\xbf\x97\xa7\x78\xa5\x81\x72\x27\xa8\xe6\x06\x1a\xd5\x41\xf0\x6c\xa6\xd0\x07\x6a\xeb\x54\xe8\xee\x3a\xb1\x4b\x32\x6f\x33\xae\x56\x25\x5f\x59\xeb\xd6\x7d\x7c\xa6\x36\x72\xb5\x46\x1e\x90\x72\x1b\xf0\xc9\x9c\x29\xa0\x8b\xa9\x4d\xa1\x1a\x3e\x59\xaa\x99\xa2\x36\xa9\x55\x28\x1e\xb1\xb2\x7f\xba\xf1\xcd\x21\x50\x3a\x16\x44\x82\x74\x6a\xa6\x70\x70\x91\x9f\xc4\x45\x42\xe0\xc6\xc2\x8b\xfa\xd4\xe5\x10\xbb\x44\x9d\x7e\xbb\xa7\xaf\x20\x26\x33\x53\x3e\x45\x17\x3d\x47\xd4\x86\x48\xb8\x04\xab\xb4\x7f\x3f\x71\x83\xe1\xd6\x04\xd5\xad\x7d\xd6\x1f\x7d\x06\xd8\x05\x37\x1f\xa1\x3e\xdd\xdc\xc6\x06\x7a\x0b\x79\xb4\x71\x74\xf1\x36\x40\x5e\x76\x7b\x6d\x5c\xbb\xf0\x99\x4e\x68\xab\x2e\x17\xd9\x88\x2a\xe1\xf3\xbd\x95\xc2\x2d\xb9\xbf\x52\x03\xae\xc3\xd7\xb5\xa5\x65\xa7\x69\xdf\x67\x17\x5a\x77\x8c\xcb\x13\x06\x14\x2b\x95\xa2\x17\xf6\x75\x46\x99\x14\x87\xcc\x97\x01\xc9\x8a\xf5\x2e\x72\xbb\x4f\x5f\x85\x32\x69\x0e\xaa\x4e\xb0\x9f\x06\xd7\xc8\x5b\x08\x74\xd8\x8d\xda\x61\xe9\x9c\xab\x6c\xb0\x1d\xdb\x24\xc5\x93\x9c\x8c\xb3\xc4\xed\xc5\x2e\x1e\xd4\x58\xb6\xf3\x7f\xe2\x27\xd1\x24\x8c\xdc\x04\x2a\x99\x94\xb9\xb1\xdb\x25\xed\x77\xb4\x6b\xeb\x9c\xf1\x99\x72\xa9\x6a\x6e\x3b\x3e\x73\xe0\xdc\xdc\xff\x15\x13\x40\xb7\xc8\xa7\x0f\x16\x6b\xc1\xb4\x12\x6e\x37\x9c\x29\xa7\xfd\x3d\x61\x7c\x61\x9c\xa4\x36\x57\x3b\xaf\x73\x2d\x3d\x7d\x11\x57\x0c\x50\xcf\xfb\xf7\xbc\x9a\x19\x50\x39\xe7\x7f\x67\xff\xef\xbf\x7f\xf7\xff\x02\x00\x00\xff\xff\xd1\x4b\xbf\x0d\x7d\xb7\x04\x00") func adminSwaggerJsonBytes() ([]byte, error) { return bindataRead( @@ -93,7 +93,7 @@ func adminSwaggerJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "admin.swagger.json", size: 309605, mode: os.FileMode(420), modTime: time.Unix(1562572800, 0)} + info := bindataFileInfo{name: "admin.swagger.json", size: 309117, mode: os.FileMode(420), modTime: time.Unix(1562572800, 0)} a := &asset{bytes: bytes, info: info} return a, nil } diff --git a/flyteidl/gen/pb-java/flyteidl/admin/Agent.java b/flyteidl/gen/pb-java/flyteidl/admin/Agent.java index 9e15ee6197..f394fb206a 100644 --- a/flyteidl/gen/pb-java/flyteidl/admin/Agent.java +++ b/flyteidl/gen/pb-java/flyteidl/admin/Agent.java @@ -6725,6 +6725,50 @@ public interface ResourceOrBuilder extends */ com.google.protobuf.ByteString getMessageBytes(); + + /** + *
+     * log information for the task execution.
+     * 
+ * + * repeated .flyteidl.core.TaskLog log_links = 4; + */ + java.util.List + getLogLinksList(); + /** + *
+     * log information for the task execution.
+     * 
+ * + * repeated .flyteidl.core.TaskLog log_links = 4; + */ + flyteidl.core.Execution.TaskLog getLogLinks(int index); + /** + *
+     * log information for the task execution.
+     * 
+ * + * repeated .flyteidl.core.TaskLog log_links = 4; + */ + int getLogLinksCount(); + /** + *
+     * log information for the task execution.
+     * 
+ * + * repeated .flyteidl.core.TaskLog log_links = 4; + */ + java.util.List + getLogLinksOrBuilderList(); + /** + *
+     * log information for the task execution.
+     * 
+ * + * repeated .flyteidl.core.TaskLog log_links = 4; + */ + flyteidl.core.Execution.TaskLogOrBuilder getLogLinksOrBuilder( + int index); } /** * Protobuf type {@code flyteidl.admin.Resource} @@ -6741,6 +6785,7 @@ private Resource(com.google.protobuf.GeneratedMessageV3.Builder builder) { private Resource() { state_ = 0; message_ = ""; + logLinks_ = java.util.Collections.emptyList(); } @java.lang.Override @@ -6792,6 +6837,15 @@ private Resource( message_ = s; break; } + case 34: { + if (!((mutable_bitField0_ & 0x00000008) != 0)) { + logLinks_ = new java.util.ArrayList(); + mutable_bitField0_ |= 0x00000008; + } + logLinks_.add( + input.readMessage(flyteidl.core.Execution.TaskLog.parser(), extensionRegistry)); + break; + } default: { if (!parseUnknownField( input, unknownFields, extensionRegistry, tag)) { @@ -6807,6 +6861,9 @@ private Resource( throw new com.google.protobuf.InvalidProtocolBufferException( e).setUnfinishedMessage(this); } finally { + if (((mutable_bitField0_ & 0x00000008) != 0)) { + logLinks_ = java.util.Collections.unmodifiableList(logLinks_); + } this.unknownFields = unknownFields.build(); makeExtensionsImmutable(); } @@ -6824,6 +6881,7 @@ private Resource( flyteidl.admin.Agent.Resource.class, flyteidl.admin.Agent.Resource.Builder.class); } + private int bitField0_; public static final int STATE_FIELD_NUMBER = 1; private int state_; /** @@ -6930,6 +6988,61 @@ public java.lang.String getMessage() { } } + public static final int LOG_LINKS_FIELD_NUMBER = 4; + private java.util.List logLinks_; + /** + *
+     * log information for the task execution.
+     * 
+ * + * repeated .flyteidl.core.TaskLog log_links = 4; + */ + public java.util.List getLogLinksList() { + return logLinks_; + } + /** + *
+     * log information for the task execution.
+     * 
+ * + * repeated .flyteidl.core.TaskLog log_links = 4; + */ + public java.util.List + getLogLinksOrBuilderList() { + return logLinks_; + } + /** + *
+     * log information for the task execution.
+     * 
+ * + * repeated .flyteidl.core.TaskLog log_links = 4; + */ + public int getLogLinksCount() { + return logLinks_.size(); + } + /** + *
+     * log information for the task execution.
+     * 
+ * + * repeated .flyteidl.core.TaskLog log_links = 4; + */ + public flyteidl.core.Execution.TaskLog getLogLinks(int index) { + return logLinks_.get(index); + } + /** + *
+     * log information for the task execution.
+     * 
+ * + * repeated .flyteidl.core.TaskLog log_links = 4; + */ + public flyteidl.core.Execution.TaskLogOrBuilder getLogLinksOrBuilder( + int index) { + return logLinks_.get(index); + } + private byte memoizedIsInitialized = -1; @java.lang.Override public final boolean isInitialized() { @@ -6953,6 +7066,9 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) if (!getMessageBytes().isEmpty()) { com.google.protobuf.GeneratedMessageV3.writeString(output, 3, message_); } + for (int i = 0; i < logLinks_.size(); i++) { + output.writeMessage(4, logLinks_.get(i)); + } unknownFields.writeTo(output); } @@ -6973,6 +7089,10 @@ public int getSerializedSize() { if (!getMessageBytes().isEmpty()) { size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, message_); } + for (int i = 0; i < logLinks_.size(); i++) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(4, logLinks_.get(i)); + } size += unknownFields.getSerializedSize(); memoizedSize = size; return size; @@ -6996,6 +7116,8 @@ public boolean equals(final java.lang.Object obj) { } if (!getMessage() .equals(other.getMessage())) return false; + if (!getLogLinksList() + .equals(other.getLogLinksList())) return false; if (!unknownFields.equals(other.unknownFields)) return false; return true; } @@ -7015,6 +7137,10 @@ public int hashCode() { } hash = (37 * hash) + MESSAGE_FIELD_NUMBER; hash = (53 * hash) + getMessage().hashCode(); + if (getLogLinksCount() > 0) { + hash = (37 * hash) + LOG_LINKS_FIELD_NUMBER; + hash = (53 * hash) + getLogLinksList().hashCode(); + } hash = (29 * hash) + unknownFields.hashCode(); memoizedHashCode = hash; return hash; @@ -7143,6 +7269,7 @@ private Builder( private void maybeForceBuilderInitialization() { if (com.google.protobuf.GeneratedMessageV3 .alwaysUseFieldBuilders) { + getLogLinksFieldBuilder(); } } @java.lang.Override @@ -7158,6 +7285,12 @@ public Builder clear() { } message_ = ""; + if (logLinksBuilder_ == null) { + logLinks_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000008); + } else { + logLinksBuilder_.clear(); + } return this; } @@ -7184,6 +7317,8 @@ public flyteidl.admin.Agent.Resource build() { @java.lang.Override public flyteidl.admin.Agent.Resource buildPartial() { flyteidl.admin.Agent.Resource result = new flyteidl.admin.Agent.Resource(this); + int from_bitField0_ = bitField0_; + int to_bitField0_ = 0; result.state_ = state_; if (outputsBuilder_ == null) { result.outputs_ = outputs_; @@ -7191,6 +7326,16 @@ public flyteidl.admin.Agent.Resource buildPartial() { result.outputs_ = outputsBuilder_.build(); } result.message_ = message_; + if (logLinksBuilder_ == null) { + if (((bitField0_ & 0x00000008) != 0)) { + logLinks_ = java.util.Collections.unmodifiableList(logLinks_); + bitField0_ = (bitField0_ & ~0x00000008); + } + result.logLinks_ = logLinks_; + } else { + result.logLinks_ = logLinksBuilder_.build(); + } + result.bitField0_ = to_bitField0_; onBuilt(); return result; } @@ -7249,6 +7394,32 @@ public Builder mergeFrom(flyteidl.admin.Agent.Resource other) { message_ = other.message_; onChanged(); } + if (logLinksBuilder_ == null) { + if (!other.logLinks_.isEmpty()) { + if (logLinks_.isEmpty()) { + logLinks_ = other.logLinks_; + bitField0_ = (bitField0_ & ~0x00000008); + } else { + ensureLogLinksIsMutable(); + logLinks_.addAll(other.logLinks_); + } + onChanged(); + } + } else { + if (!other.logLinks_.isEmpty()) { + if (logLinksBuilder_.isEmpty()) { + logLinksBuilder_.dispose(); + logLinksBuilder_ = null; + logLinks_ = other.logLinks_; + bitField0_ = (bitField0_ & ~0x00000008); + logLinksBuilder_ = + com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ? + getLogLinksFieldBuilder() : null; + } else { + logLinksBuilder_.addAllMessages(other.logLinks_); + } + } + } this.mergeUnknownFields(other.unknownFields); onChanged(); return this; @@ -7277,6 +7448,7 @@ public Builder mergeFrom( } return this; } + private int bitField0_; private int state_ = 0; /** @@ -7602,6 +7774,318 @@ public Builder setMessageBytes( onChanged(); return this; } + + private java.util.List logLinks_ = + java.util.Collections.emptyList(); + private void ensureLogLinksIsMutable() { + if (!((bitField0_ & 0x00000008) != 0)) { + logLinks_ = new java.util.ArrayList(logLinks_); + bitField0_ |= 0x00000008; + } + } + + private com.google.protobuf.RepeatedFieldBuilderV3< + flyteidl.core.Execution.TaskLog, flyteidl.core.Execution.TaskLog.Builder, flyteidl.core.Execution.TaskLogOrBuilder> logLinksBuilder_; + + /** + *
+       * log information for the task execution.
+       * 
+ * + * repeated .flyteidl.core.TaskLog log_links = 4; + */ + public java.util.List getLogLinksList() { + if (logLinksBuilder_ == null) { + return java.util.Collections.unmodifiableList(logLinks_); + } else { + return logLinksBuilder_.getMessageList(); + } + } + /** + *
+       * log information for the task execution.
+       * 
+ * + * repeated .flyteidl.core.TaskLog log_links = 4; + */ + public int getLogLinksCount() { + if (logLinksBuilder_ == null) { + return logLinks_.size(); + } else { + return logLinksBuilder_.getCount(); + } + } + /** + *
+       * log information for the task execution.
+       * 
+ * + * repeated .flyteidl.core.TaskLog log_links = 4; + */ + public flyteidl.core.Execution.TaskLog getLogLinks(int index) { + if (logLinksBuilder_ == null) { + return logLinks_.get(index); + } else { + return logLinksBuilder_.getMessage(index); + } + } + /** + *
+       * log information for the task execution.
+       * 
+ * + * repeated .flyteidl.core.TaskLog log_links = 4; + */ + public Builder setLogLinks( + int index, flyteidl.core.Execution.TaskLog value) { + if (logLinksBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureLogLinksIsMutable(); + logLinks_.set(index, value); + onChanged(); + } else { + logLinksBuilder_.setMessage(index, value); + } + return this; + } + /** + *
+       * log information for the task execution.
+       * 
+ * + * repeated .flyteidl.core.TaskLog log_links = 4; + */ + public Builder setLogLinks( + int index, flyteidl.core.Execution.TaskLog.Builder builderForValue) { + if (logLinksBuilder_ == null) { + ensureLogLinksIsMutable(); + logLinks_.set(index, builderForValue.build()); + onChanged(); + } else { + logLinksBuilder_.setMessage(index, builderForValue.build()); + } + return this; + } + /** + *
+       * log information for the task execution.
+       * 
+ * + * repeated .flyteidl.core.TaskLog log_links = 4; + */ + public Builder addLogLinks(flyteidl.core.Execution.TaskLog value) { + if (logLinksBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureLogLinksIsMutable(); + logLinks_.add(value); + onChanged(); + } else { + logLinksBuilder_.addMessage(value); + } + return this; + } + /** + *
+       * log information for the task execution.
+       * 
+ * + * repeated .flyteidl.core.TaskLog log_links = 4; + */ + public Builder addLogLinks( + int index, flyteidl.core.Execution.TaskLog value) { + if (logLinksBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureLogLinksIsMutable(); + logLinks_.add(index, value); + onChanged(); + } else { + logLinksBuilder_.addMessage(index, value); + } + return this; + } + /** + *
+       * log information for the task execution.
+       * 
+ * + * repeated .flyteidl.core.TaskLog log_links = 4; + */ + public Builder addLogLinks( + flyteidl.core.Execution.TaskLog.Builder builderForValue) { + if (logLinksBuilder_ == null) { + ensureLogLinksIsMutable(); + logLinks_.add(builderForValue.build()); + onChanged(); + } else { + logLinksBuilder_.addMessage(builderForValue.build()); + } + return this; + } + /** + *
+       * log information for the task execution.
+       * 
+ * + * repeated .flyteidl.core.TaskLog log_links = 4; + */ + public Builder addLogLinks( + int index, flyteidl.core.Execution.TaskLog.Builder builderForValue) { + if (logLinksBuilder_ == null) { + ensureLogLinksIsMutable(); + logLinks_.add(index, builderForValue.build()); + onChanged(); + } else { + logLinksBuilder_.addMessage(index, builderForValue.build()); + } + return this; + } + /** + *
+       * log information for the task execution.
+       * 
+ * + * repeated .flyteidl.core.TaskLog log_links = 4; + */ + public Builder addAllLogLinks( + java.lang.Iterable values) { + if (logLinksBuilder_ == null) { + ensureLogLinksIsMutable(); + com.google.protobuf.AbstractMessageLite.Builder.addAll( + values, logLinks_); + onChanged(); + } else { + logLinksBuilder_.addAllMessages(values); + } + return this; + } + /** + *
+       * log information for the task execution.
+       * 
+ * + * repeated .flyteidl.core.TaskLog log_links = 4; + */ + public Builder clearLogLinks() { + if (logLinksBuilder_ == null) { + logLinks_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000008); + onChanged(); + } else { + logLinksBuilder_.clear(); + } + return this; + } + /** + *
+       * log information for the task execution.
+       * 
+ * + * repeated .flyteidl.core.TaskLog log_links = 4; + */ + public Builder removeLogLinks(int index) { + if (logLinksBuilder_ == null) { + ensureLogLinksIsMutable(); + logLinks_.remove(index); + onChanged(); + } else { + logLinksBuilder_.remove(index); + } + return this; + } + /** + *
+       * log information for the task execution.
+       * 
+ * + * repeated .flyteidl.core.TaskLog log_links = 4; + */ + public flyteidl.core.Execution.TaskLog.Builder getLogLinksBuilder( + int index) { + return getLogLinksFieldBuilder().getBuilder(index); + } + /** + *
+       * log information for the task execution.
+       * 
+ * + * repeated .flyteidl.core.TaskLog log_links = 4; + */ + public flyteidl.core.Execution.TaskLogOrBuilder getLogLinksOrBuilder( + int index) { + if (logLinksBuilder_ == null) { + return logLinks_.get(index); } else { + return logLinksBuilder_.getMessageOrBuilder(index); + } + } + /** + *
+       * log information for the task execution.
+       * 
+ * + * repeated .flyteidl.core.TaskLog log_links = 4; + */ + public java.util.List + getLogLinksOrBuilderList() { + if (logLinksBuilder_ != null) { + return logLinksBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(logLinks_); + } + } + /** + *
+       * log information for the task execution.
+       * 
+ * + * repeated .flyteidl.core.TaskLog log_links = 4; + */ + public flyteidl.core.Execution.TaskLog.Builder addLogLinksBuilder() { + return getLogLinksFieldBuilder().addBuilder( + flyteidl.core.Execution.TaskLog.getDefaultInstance()); + } + /** + *
+       * log information for the task execution.
+       * 
+ * + * repeated .flyteidl.core.TaskLog log_links = 4; + */ + public flyteidl.core.Execution.TaskLog.Builder addLogLinksBuilder( + int index) { + return getLogLinksFieldBuilder().addBuilder( + index, flyteidl.core.Execution.TaskLog.getDefaultInstance()); + } + /** + *
+       * log information for the task execution.
+       * 
+ * + * repeated .flyteidl.core.TaskLog log_links = 4; + */ + public java.util.List + getLogLinksBuilderList() { + return getLogLinksFieldBuilder().getBuilderList(); + } + private com.google.protobuf.RepeatedFieldBuilderV3< + flyteidl.core.Execution.TaskLog, flyteidl.core.Execution.TaskLog.Builder, flyteidl.core.Execution.TaskLogOrBuilder> + getLogLinksFieldBuilder() { + if (logLinksBuilder_ == null) { + logLinksBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3< + flyteidl.core.Execution.TaskLog, flyteidl.core.Execution.TaskLog.Builder, flyteidl.core.Execution.TaskLogOrBuilder>( + logLinks_, + ((bitField0_ & 0x00000008) != 0), + getParentForChildren(), + isClean()); + logLinks_ = null; + } + return logLinksBuilder_; + } @java.lang.Override public final Builder setUnknownFields( final com.google.protobuf.UnknownFieldSet unknownFields) { @@ -8848,16 +9332,17 @@ public flyteidl.admin.Agent.DeleteTaskResponse getDefaultInstanceForType() { " \001(\t\022\025\n\rresource_meta\030\002 \001(\014\"h\n\017GetTaskRe" + "sponse\022*\n\010resource\030\001 \001(\0132\030.flyteidl.admi" + "n.Resource\022)\n\tlog_links\030\002 \003(\0132\026.flyteidl" + - ".core.TaskLog\"m\n\010Resource\022$\n\005state\030\001 \001(\016" + - "2\025.flyteidl.admin.State\022*\n\007outputs\030\002 \001(\013" + - "2\031.flyteidl.core.LiteralMap\022\017\n\007message\030\003" + - " \001(\t\"=\n\021DeleteTaskRequest\022\021\n\ttask_type\030\001" + - " \001(\t\022\025\n\rresource_meta\030\002 \001(\014\"\024\n\022DeleteTas" + - "kResponse*^\n\005State\022\025\n\021RETRYABLE_FAILURE\020" + - "\000\022\025\n\021PERMANENT_FAILURE\020\001\022\013\n\007PENDING\020\002\022\013\n" + - "\007RUNNING\020\003\022\r\n\tSUCCEEDED\020\004B=Z;github.com/" + - "flyteorg/flyte/flyteidl/gen/pb-go/flytei" + - "dl/adminb\006proto3" + ".core.TaskLog\"\230\001\n\010Resource\022$\n\005state\030\001 \001(" + + "\0162\025.flyteidl.admin.State\022*\n\007outputs\030\002 \001(" + + "\0132\031.flyteidl.core.LiteralMap\022\017\n\007message\030" + + "\003 \001(\t\022)\n\tlog_links\030\004 \003(\0132\026.flyteidl.core" + + ".TaskLog\"=\n\021DeleteTaskRequest\022\021\n\ttask_ty" + + "pe\030\001 \001(\t\022\025\n\rresource_meta\030\002 \001(\014\"\024\n\022Delet" + + "eTaskResponse*^\n\005State\022\025\n\021RETRYABLE_FAIL" + + "URE\020\000\022\025\n\021PERMANENT_FAILURE\020\001\022\013\n\007PENDING\020" + + "\002\022\013\n\007RUNNING\020\003\022\r\n\tSUCCEEDED\020\004B=Z;github." + + "com/flyteorg/flyte/flyteidl/gen/pb-go/fl" + + "yteidl/adminb\006proto3" }; com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner = new com.google.protobuf.Descriptors.FileDescriptor. InternalDescriptorAssigner() { @@ -8929,7 +9414,7 @@ public com.google.protobuf.ExtensionRegistry assignDescriptors( internal_static_flyteidl_admin_Resource_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( internal_static_flyteidl_admin_Resource_descriptor, - new java.lang.String[] { "State", "Outputs", "Message", }); + new java.lang.String[] { "State", "Outputs", "Message", "LogLinks", }); internal_static_flyteidl_admin_DeleteTaskRequest_descriptor = getDescriptor().getMessageTypes().get(6); internal_static_flyteidl_admin_DeleteTaskRequest_fieldAccessorTable = new diff --git a/flyteidl/gen/pb-java/flyteidl/core/Tasks.java b/flyteidl/gen/pb-java/flyteidl/core/Tasks.java index 6e152f5b1a..d4416668c6 100644 --- a/flyteidl/gen/pb-java/flyteidl/core/Tasks.java +++ b/flyteidl/gen/pb-java/flyteidl/core/Tasks.java @@ -4030,31 +4030,6 @@ public interface RuntimeMetadataOrBuilder extends */ com.google.protobuf.ByteString getFlavorBytes(); - - /** - *
-     *+optional It can be used to provide extra information for the plugin.
-     * 
- * - * .flyteidl.core.PluginMetadata plugin_metadata = 4; - */ - boolean hasPluginMetadata(); - /** - *
-     *+optional It can be used to provide extra information for the plugin.
-     * 
- * - * .flyteidl.core.PluginMetadata plugin_metadata = 4; - */ - flyteidl.core.Tasks.PluginMetadata getPluginMetadata(); - /** - *
-     *+optional It can be used to provide extra information for the plugin.
-     * 
- * - * .flyteidl.core.PluginMetadata plugin_metadata = 4; - */ - flyteidl.core.Tasks.PluginMetadataOrBuilder getPluginMetadataOrBuilder(); } /** *
@@ -4120,19 +4095,6 @@ private RuntimeMetadata(
               flavor_ = s;
               break;
             }
-            case 34: {
-              flyteidl.core.Tasks.PluginMetadata.Builder subBuilder = null;
-              if (pluginMetadata_ != null) {
-                subBuilder = pluginMetadata_.toBuilder();
-              }
-              pluginMetadata_ = input.readMessage(flyteidl.core.Tasks.PluginMetadata.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(pluginMetadata_);
-                pluginMetadata_ = subBuilder.buildPartial();
-              }
-
-              break;
-            }
             default: {
               if (!parseUnknownField(
                   input, unknownFields, extensionRegistry, tag)) {
@@ -4374,39 +4336,6 @@ public java.lang.String getFlavor() {
       }
     }
 
-    public static final int PLUGIN_METADATA_FIELD_NUMBER = 4;
-    private flyteidl.core.Tasks.PluginMetadata pluginMetadata_;
-    /**
-     * 
-     *+optional It can be used to provide extra information for the plugin.
-     * 
- * - * .flyteidl.core.PluginMetadata plugin_metadata = 4; - */ - public boolean hasPluginMetadata() { - return pluginMetadata_ != null; - } - /** - *
-     *+optional It can be used to provide extra information for the plugin.
-     * 
- * - * .flyteidl.core.PluginMetadata plugin_metadata = 4; - */ - public flyteidl.core.Tasks.PluginMetadata getPluginMetadata() { - return pluginMetadata_ == null ? flyteidl.core.Tasks.PluginMetadata.getDefaultInstance() : pluginMetadata_; - } - /** - *
-     *+optional It can be used to provide extra information for the plugin.
-     * 
- * - * .flyteidl.core.PluginMetadata plugin_metadata = 4; - */ - public flyteidl.core.Tasks.PluginMetadataOrBuilder getPluginMetadataOrBuilder() { - return getPluginMetadata(); - } - private byte memoizedIsInitialized = -1; @java.lang.Override public final boolean isInitialized() { @@ -4430,9 +4359,6 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) if (!getFlavorBytes().isEmpty()) { com.google.protobuf.GeneratedMessageV3.writeString(output, 3, flavor_); } - if (pluginMetadata_ != null) { - output.writeMessage(4, getPluginMetadata()); - } unknownFields.writeTo(output); } @@ -4452,10 +4378,6 @@ public int getSerializedSize() { if (!getFlavorBytes().isEmpty()) { size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, flavor_); } - if (pluginMetadata_ != null) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(4, getPluginMetadata()); - } size += unknownFields.getSerializedSize(); memoizedSize = size; return size; @@ -4476,11 +4398,6 @@ public boolean equals(final java.lang.Object obj) { .equals(other.getVersion())) return false; if (!getFlavor() .equals(other.getFlavor())) return false; - if (hasPluginMetadata() != other.hasPluginMetadata()) return false; - if (hasPluginMetadata()) { - if (!getPluginMetadata() - .equals(other.getPluginMetadata())) return false; - } if (!unknownFields.equals(other.unknownFields)) return false; return true; } @@ -4498,10 +4415,6 @@ public int hashCode() { hash = (53 * hash) + getVersion().hashCode(); hash = (37 * hash) + FLAVOR_FIELD_NUMBER; hash = (53 * hash) + getFlavor().hashCode(); - if (hasPluginMetadata()) { - hash = (37 * hash) + PLUGIN_METADATA_FIELD_NUMBER; - hash = (53 * hash) + getPluginMetadata().hashCode(); - } hash = (29 * hash) + unknownFields.hashCode(); memoizedHashCode = hash; return hash; @@ -4645,12 +4558,6 @@ public Builder clear() { flavor_ = ""; - if (pluginMetadataBuilder_ == null) { - pluginMetadata_ = null; - } else { - pluginMetadata_ = null; - pluginMetadataBuilder_ = null; - } return this; } @@ -4680,11 +4587,6 @@ public flyteidl.core.Tasks.RuntimeMetadata buildPartial() { result.type_ = type_; result.version_ = version_; result.flavor_ = flavor_; - if (pluginMetadataBuilder_ == null) { - result.pluginMetadata_ = pluginMetadata_; - } else { - result.pluginMetadata_ = pluginMetadataBuilder_.build(); - } onBuilt(); return result; } @@ -4744,9 +4646,6 @@ public Builder mergeFrom(flyteidl.core.Tasks.RuntimeMetadata other) { flavor_ = other.flavor_; onChanged(); } - if (other.hasPluginMetadata()) { - mergePluginMetadata(other.getPluginMetadata()); - } this.mergeUnknownFields(other.unknownFields); onChanged(); return this; @@ -4841,833 +4740,185 @@ public Builder clearType() { return this; } - private java.lang.Object version_ = ""; - /** - *
-       * Version of the runtime. All versions should be backward compatible. However, certain cases call for version
-       * checks to ensure tighter validation or setting expectations.
-       * 
- * - * string version = 2; - */ - public java.lang.String getVersion() { - java.lang.Object ref = version_; - if (!(ref instanceof java.lang.String)) { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - version_ = s; - return s; - } else { - return (java.lang.String) ref; - } - } - /** - *
-       * Version of the runtime. All versions should be backward compatible. However, certain cases call for version
-       * checks to ensure tighter validation or setting expectations.
-       * 
- * - * string version = 2; - */ - public com.google.protobuf.ByteString - getVersionBytes() { - java.lang.Object ref = version_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - version_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - /** - *
-       * Version of the runtime. All versions should be backward compatible. However, certain cases call for version
-       * checks to ensure tighter validation or setting expectations.
-       * 
- * - * string version = 2; - */ - public Builder setVersion( - java.lang.String value) { - if (value == null) { - throw new NullPointerException(); - } - - version_ = value; - onChanged(); - return this; - } - /** - *
-       * Version of the runtime. All versions should be backward compatible. However, certain cases call for version
-       * checks to ensure tighter validation or setting expectations.
-       * 
- * - * string version = 2; - */ - public Builder clearVersion() { - - version_ = getDefaultInstance().getVersion(); - onChanged(); - return this; - } - /** - *
-       * Version of the runtime. All versions should be backward compatible. However, certain cases call for version
-       * checks to ensure tighter validation or setting expectations.
-       * 
- * - * string version = 2; - */ - public Builder setVersionBytes( - com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - checkByteStringIsUtf8(value); - - version_ = value; - onChanged(); - return this; - } - - private java.lang.Object flavor_ = ""; - /** - *
-       *+optional It can be used to provide extra information about the runtime (e.g. python, golang... etc.).
-       * 
- * - * string flavor = 3; - */ - public java.lang.String getFlavor() { - java.lang.Object ref = flavor_; - if (!(ref instanceof java.lang.String)) { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - flavor_ = s; - return s; - } else { - return (java.lang.String) ref; - } - } - /** - *
-       *+optional It can be used to provide extra information about the runtime (e.g. python, golang... etc.).
-       * 
- * - * string flavor = 3; - */ - public com.google.protobuf.ByteString - getFlavorBytes() { - java.lang.Object ref = flavor_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - flavor_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - /** - *
-       *+optional It can be used to provide extra information about the runtime (e.g. python, golang... etc.).
-       * 
- * - * string flavor = 3; - */ - public Builder setFlavor( - java.lang.String value) { - if (value == null) { - throw new NullPointerException(); - } - - flavor_ = value; - onChanged(); - return this; - } - /** - *
-       *+optional It can be used to provide extra information about the runtime (e.g. python, golang... etc.).
-       * 
- * - * string flavor = 3; - */ - public Builder clearFlavor() { - - flavor_ = getDefaultInstance().getFlavor(); - onChanged(); - return this; - } - /** - *
-       *+optional It can be used to provide extra information about the runtime (e.g. python, golang... etc.).
-       * 
- * - * string flavor = 3; - */ - public Builder setFlavorBytes( - com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - checkByteStringIsUtf8(value); - - flavor_ = value; - onChanged(); - return this; - } - - private flyteidl.core.Tasks.PluginMetadata pluginMetadata_; - private com.google.protobuf.SingleFieldBuilderV3< - flyteidl.core.Tasks.PluginMetadata, flyteidl.core.Tasks.PluginMetadata.Builder, flyteidl.core.Tasks.PluginMetadataOrBuilder> pluginMetadataBuilder_; - /** - *
-       *+optional It can be used to provide extra information for the plugin.
-       * 
- * - * .flyteidl.core.PluginMetadata plugin_metadata = 4; - */ - public boolean hasPluginMetadata() { - return pluginMetadataBuilder_ != null || pluginMetadata_ != null; - } - /** - *
-       *+optional It can be used to provide extra information for the plugin.
-       * 
- * - * .flyteidl.core.PluginMetadata plugin_metadata = 4; - */ - public flyteidl.core.Tasks.PluginMetadata getPluginMetadata() { - if (pluginMetadataBuilder_ == null) { - return pluginMetadata_ == null ? flyteidl.core.Tasks.PluginMetadata.getDefaultInstance() : pluginMetadata_; - } else { - return pluginMetadataBuilder_.getMessage(); - } - } - /** - *
-       *+optional It can be used to provide extra information for the plugin.
-       * 
- * - * .flyteidl.core.PluginMetadata plugin_metadata = 4; - */ - public Builder setPluginMetadata(flyteidl.core.Tasks.PluginMetadata value) { - if (pluginMetadataBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - pluginMetadata_ = value; - onChanged(); - } else { - pluginMetadataBuilder_.setMessage(value); - } - - return this; - } - /** - *
-       *+optional It can be used to provide extra information for the plugin.
-       * 
- * - * .flyteidl.core.PluginMetadata plugin_metadata = 4; - */ - public Builder setPluginMetadata( - flyteidl.core.Tasks.PluginMetadata.Builder builderForValue) { - if (pluginMetadataBuilder_ == null) { - pluginMetadata_ = builderForValue.build(); - onChanged(); - } else { - pluginMetadataBuilder_.setMessage(builderForValue.build()); - } - - return this; - } - /** - *
-       *+optional It can be used to provide extra information for the plugin.
-       * 
- * - * .flyteidl.core.PluginMetadata plugin_metadata = 4; - */ - public Builder mergePluginMetadata(flyteidl.core.Tasks.PluginMetadata value) { - if (pluginMetadataBuilder_ == null) { - if (pluginMetadata_ != null) { - pluginMetadata_ = - flyteidl.core.Tasks.PluginMetadata.newBuilder(pluginMetadata_).mergeFrom(value).buildPartial(); - } else { - pluginMetadata_ = value; - } - onChanged(); - } else { - pluginMetadataBuilder_.mergeFrom(value); - } - - return this; - } - /** - *
-       *+optional It can be used to provide extra information for the plugin.
-       * 
- * - * .flyteidl.core.PluginMetadata plugin_metadata = 4; - */ - public Builder clearPluginMetadata() { - if (pluginMetadataBuilder_ == null) { - pluginMetadata_ = null; - onChanged(); - } else { - pluginMetadata_ = null; - pluginMetadataBuilder_ = null; - } - - return this; - } - /** - *
-       *+optional It can be used to provide extra information for the plugin.
-       * 
- * - * .flyteidl.core.PluginMetadata plugin_metadata = 4; - */ - public flyteidl.core.Tasks.PluginMetadata.Builder getPluginMetadataBuilder() { - - onChanged(); - return getPluginMetadataFieldBuilder().getBuilder(); - } - /** - *
-       *+optional It can be used to provide extra information for the plugin.
-       * 
- * - * .flyteidl.core.PluginMetadata plugin_metadata = 4; - */ - public flyteidl.core.Tasks.PluginMetadataOrBuilder getPluginMetadataOrBuilder() { - if (pluginMetadataBuilder_ != null) { - return pluginMetadataBuilder_.getMessageOrBuilder(); - } else { - return pluginMetadata_ == null ? - flyteidl.core.Tasks.PluginMetadata.getDefaultInstance() : pluginMetadata_; - } - } - /** - *
-       *+optional It can be used to provide extra information for the plugin.
-       * 
- * - * .flyteidl.core.PluginMetadata plugin_metadata = 4; - */ - private com.google.protobuf.SingleFieldBuilderV3< - flyteidl.core.Tasks.PluginMetadata, flyteidl.core.Tasks.PluginMetadata.Builder, flyteidl.core.Tasks.PluginMetadataOrBuilder> - getPluginMetadataFieldBuilder() { - if (pluginMetadataBuilder_ == null) { - pluginMetadataBuilder_ = new com.google.protobuf.SingleFieldBuilderV3< - flyteidl.core.Tasks.PluginMetadata, flyteidl.core.Tasks.PluginMetadata.Builder, flyteidl.core.Tasks.PluginMetadataOrBuilder>( - getPluginMetadata(), - getParentForChildren(), - isClean()); - pluginMetadata_ = null; - } - return pluginMetadataBuilder_; - } - @java.lang.Override - public final Builder setUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - - - // @@protoc_insertion_point(builder_scope:flyteidl.core.RuntimeMetadata) - } - - // @@protoc_insertion_point(class_scope:flyteidl.core.RuntimeMetadata) - private static final flyteidl.core.Tasks.RuntimeMetadata DEFAULT_INSTANCE; - static { - DEFAULT_INSTANCE = new flyteidl.core.Tasks.RuntimeMetadata(); - } - - public static flyteidl.core.Tasks.RuntimeMetadata getDefaultInstance() { - return DEFAULT_INSTANCE; - } - - private static final com.google.protobuf.Parser - PARSER = new com.google.protobuf.AbstractParser() { - @java.lang.Override - public RuntimeMetadata parsePartialFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return new RuntimeMetadata(input, extensionRegistry); - } - }; - - public static com.google.protobuf.Parser parser() { - return PARSER; - } - - @java.lang.Override - public com.google.protobuf.Parser getParserForType() { - return PARSER; - } - - @java.lang.Override - public flyteidl.core.Tasks.RuntimeMetadata getDefaultInstanceForType() { - return DEFAULT_INSTANCE; - } - - } - - public interface PluginMetadataOrBuilder extends - // @@protoc_insertion_point(interface_extends:flyteidl.core.PluginMetadata) - com.google.protobuf.MessageOrBuilder { - - /** - *
-     *+optional It can be used to decide use sync plugin or async plugin during runtime.
-     * 
- * - * bool is_sync_plugin = 1; - */ - boolean getIsSyncPlugin(); - } - /** - * Protobuf type {@code flyteidl.core.PluginMetadata} - */ - public static final class PluginMetadata extends - com.google.protobuf.GeneratedMessageV3 implements - // @@protoc_insertion_point(message_implements:flyteidl.core.PluginMetadata) - PluginMetadataOrBuilder { - private static final long serialVersionUID = 0L; - // Use PluginMetadata.newBuilder() to construct. - private PluginMetadata(com.google.protobuf.GeneratedMessageV3.Builder builder) { - super(builder); - } - private PluginMetadata() { - } - - @java.lang.Override - public final com.google.protobuf.UnknownFieldSet - getUnknownFields() { - return this.unknownFields; - } - private PluginMetadata( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - this(); - if (extensionRegistry == null) { - throw new java.lang.NullPointerException(); - } - int mutable_bitField0_ = 0; - com.google.protobuf.UnknownFieldSet.Builder unknownFields = - com.google.protobuf.UnknownFieldSet.newBuilder(); - try { - boolean done = false; - while (!done) { - int tag = input.readTag(); - switch (tag) { - case 0: - done = true; - break; - case 8: { - - isSyncPlugin_ = input.readBool(); - break; - } - default: { - if (!parseUnknownField( - input, unknownFields, extensionRegistry, tag)) { - done = true; - } - break; - } - } - } - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.setUnfinishedMessage(this); - } catch (java.io.IOException e) { - throw new com.google.protobuf.InvalidProtocolBufferException( - e).setUnfinishedMessage(this); - } finally { - this.unknownFields = unknownFields.build(); - makeExtensionsImmutable(); - } - } - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return flyteidl.core.Tasks.internal_static_flyteidl_core_PluginMetadata_descriptor; - } - - @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return flyteidl.core.Tasks.internal_static_flyteidl_core_PluginMetadata_fieldAccessorTable - .ensureFieldAccessorsInitialized( - flyteidl.core.Tasks.PluginMetadata.class, flyteidl.core.Tasks.PluginMetadata.Builder.class); - } - - public static final int IS_SYNC_PLUGIN_FIELD_NUMBER = 1; - private boolean isSyncPlugin_; - /** - *
-     *+optional It can be used to decide use sync plugin or async plugin during runtime.
-     * 
- * - * bool is_sync_plugin = 1; - */ - public boolean getIsSyncPlugin() { - return isSyncPlugin_; - } - - private byte memoizedIsInitialized = -1; - @java.lang.Override - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized == 1) return true; - if (isInitialized == 0) return false; - - memoizedIsInitialized = 1; - return true; - } - - @java.lang.Override - public void writeTo(com.google.protobuf.CodedOutputStream output) - throws java.io.IOException { - if (isSyncPlugin_ != false) { - output.writeBool(1, isSyncPlugin_); - } - unknownFields.writeTo(output); - } - - @java.lang.Override - public int getSerializedSize() { - int size = memoizedSize; - if (size != -1) return size; - - size = 0; - if (isSyncPlugin_ != false) { - size += com.google.protobuf.CodedOutputStream - .computeBoolSize(1, isSyncPlugin_); - } - size += unknownFields.getSerializedSize(); - memoizedSize = size; - return size; - } - - @java.lang.Override - public boolean equals(final java.lang.Object obj) { - if (obj == this) { - return true; - } - if (!(obj instanceof flyteidl.core.Tasks.PluginMetadata)) { - return super.equals(obj); - } - flyteidl.core.Tasks.PluginMetadata other = (flyteidl.core.Tasks.PluginMetadata) obj; - - if (getIsSyncPlugin() - != other.getIsSyncPlugin()) return false; - if (!unknownFields.equals(other.unknownFields)) return false; - return true; - } - - @java.lang.Override - public int hashCode() { - if (memoizedHashCode != 0) { - return memoizedHashCode; - } - int hash = 41; - hash = (19 * hash) + getDescriptor().hashCode(); - hash = (37 * hash) + IS_SYNC_PLUGIN_FIELD_NUMBER; - hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean( - getIsSyncPlugin()); - hash = (29 * hash) + unknownFields.hashCode(); - memoizedHashCode = hash; - return hash; - } - - public static flyteidl.core.Tasks.PluginMetadata parseFrom( - java.nio.ByteBuffer data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static flyteidl.core.Tasks.PluginMetadata parseFrom( - java.nio.ByteBuffer data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static flyteidl.core.Tasks.PluginMetadata parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static flyteidl.core.Tasks.PluginMetadata parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static flyteidl.core.Tasks.PluginMetadata parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static flyteidl.core.Tasks.PluginMetadata parseFrom( - byte[] data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static flyteidl.core.Tasks.PluginMetadata parseFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static flyteidl.core.Tasks.PluginMetadata parseFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - public static flyteidl.core.Tasks.PluginMetadata parseDelimitedFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input); - } - public static flyteidl.core.Tasks.PluginMetadata parseDelimitedFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input, extensionRegistry); - } - public static flyteidl.core.Tasks.PluginMetadata parseFrom( - com.google.protobuf.CodedInputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static flyteidl.core.Tasks.PluginMetadata parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - - @java.lang.Override - public Builder newBuilderForType() { return newBuilder(); } - public static Builder newBuilder() { - return DEFAULT_INSTANCE.toBuilder(); - } - public static Builder newBuilder(flyteidl.core.Tasks.PluginMetadata prototype) { - return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); - } - @java.lang.Override - public Builder toBuilder() { - return this == DEFAULT_INSTANCE - ? new Builder() : new Builder().mergeFrom(this); - } - - @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } - /** - * Protobuf type {@code flyteidl.core.PluginMetadata} - */ - public static final class Builder extends - com.google.protobuf.GeneratedMessageV3.Builder implements - // @@protoc_insertion_point(builder_implements:flyteidl.core.PluginMetadata) - flyteidl.core.Tasks.PluginMetadataOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return flyteidl.core.Tasks.internal_static_flyteidl_core_PluginMetadata_descriptor; - } - - @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return flyteidl.core.Tasks.internal_static_flyteidl_core_PluginMetadata_fieldAccessorTable - .ensureFieldAccessorsInitialized( - flyteidl.core.Tasks.PluginMetadata.class, flyteidl.core.Tasks.PluginMetadata.Builder.class); - } - - // Construct using flyteidl.core.Tasks.PluginMetadata.newBuilder() - private Builder() { - maybeForceBuilderInitialization(); - } - - private Builder( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - super(parent); - maybeForceBuilderInitialization(); - } - private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3 - .alwaysUseFieldBuilders) { - } - } - @java.lang.Override - public Builder clear() { - super.clear(); - isSyncPlugin_ = false; - - return this; - } - - @java.lang.Override - public com.google.protobuf.Descriptors.Descriptor - getDescriptorForType() { - return flyteidl.core.Tasks.internal_static_flyteidl_core_PluginMetadata_descriptor; - } - - @java.lang.Override - public flyteidl.core.Tasks.PluginMetadata getDefaultInstanceForType() { - return flyteidl.core.Tasks.PluginMetadata.getDefaultInstance(); - } - - @java.lang.Override - public flyteidl.core.Tasks.PluginMetadata build() { - flyteidl.core.Tasks.PluginMetadata result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); + private java.lang.Object version_ = ""; + /** + *
+       * Version of the runtime. All versions should be backward compatible. However, certain cases call for version
+       * checks to ensure tighter validation or setting expectations.
+       * 
+ * + * string version = 2; + */ + public java.lang.String getVersion() { + java.lang.Object ref = version_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + version_ = s; + return s; + } else { + return (java.lang.String) ref; } - return result; - } - - @java.lang.Override - public flyteidl.core.Tasks.PluginMetadata buildPartial() { - flyteidl.core.Tasks.PluginMetadata result = new flyteidl.core.Tasks.PluginMetadata(this); - result.isSyncPlugin_ = isSyncPlugin_; - onBuilt(); - return result; - } - - @java.lang.Override - public Builder clone() { - return super.clone(); - } - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, - java.lang.Object value) { - return super.setField(field, value); - } - @java.lang.Override - public Builder clearField( - com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - @java.lang.Override - public Builder clearOneof( - com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - java.lang.Object value) { - return super.addRepeatedField(field, value); } - @java.lang.Override - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof flyteidl.core.Tasks.PluginMetadata) { - return mergeFrom((flyteidl.core.Tasks.PluginMetadata)other); + /** + *
+       * Version of the runtime. All versions should be backward compatible. However, certain cases call for version
+       * checks to ensure tighter validation or setting expectations.
+       * 
+ * + * string version = 2; + */ + public com.google.protobuf.ByteString + getVersionBytes() { + java.lang.Object ref = version_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + version_ = b; + return b; } else { - super.mergeFrom(other); - return this; + return (com.google.protobuf.ByteString) ref; } } - - public Builder mergeFrom(flyteidl.core.Tasks.PluginMetadata other) { - if (other == flyteidl.core.Tasks.PluginMetadata.getDefaultInstance()) return this; - if (other.getIsSyncPlugin() != false) { - setIsSyncPlugin(other.getIsSyncPlugin()); - } - this.mergeUnknownFields(other.unknownFields); + /** + *
+       * Version of the runtime. All versions should be backward compatible. However, certain cases call for version
+       * checks to ensure tighter validation or setting expectations.
+       * 
+ * + * string version = 2; + */ + public Builder setVersion( + java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + + version_ = value; onChanged(); return this; } - - @java.lang.Override - public final boolean isInitialized() { - return true; + /** + *
+       * Version of the runtime. All versions should be backward compatible. However, certain cases call for version
+       * checks to ensure tighter validation or setting expectations.
+       * 
+ * + * string version = 2; + */ + public Builder clearVersion() { + + version_ = getDefaultInstance().getVersion(); + onChanged(); + return this; } - - @java.lang.Override - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - flyteidl.core.Tasks.PluginMetadata parsedMessage = null; - try { - parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - parsedMessage = (flyteidl.core.Tasks.PluginMetadata) e.getUnfinishedMessage(); - throw e.unwrapIOException(); - } finally { - if (parsedMessage != null) { - mergeFrom(parsedMessage); - } - } + /** + *
+       * Version of the runtime. All versions should be backward compatible. However, certain cases call for version
+       * checks to ensure tighter validation or setting expectations.
+       * 
+ * + * string version = 2; + */ + public Builder setVersionBytes( + com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + + version_ = value; + onChanged(); return this; } - private boolean isSyncPlugin_ ; + private java.lang.Object flavor_ = ""; + /** + *
+       *+optional It can be used to provide extra information about the runtime (e.g. python, golang... etc.).
+       * 
+ * + * string flavor = 3; + */ + public java.lang.String getFlavor() { + java.lang.Object ref = flavor_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + flavor_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + *
+       *+optional It can be used to provide extra information about the runtime (e.g. python, golang... etc.).
+       * 
+ * + * string flavor = 3; + */ + public com.google.protobuf.ByteString + getFlavorBytes() { + java.lang.Object ref = flavor_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + flavor_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } /** *
-       *+optional It can be used to decide use sync plugin or async plugin during runtime.
+       *+optional It can be used to provide extra information about the runtime (e.g. python, golang... etc.).
        * 
* - * bool is_sync_plugin = 1; + * string flavor = 3; */ - public boolean getIsSyncPlugin() { - return isSyncPlugin_; + public Builder setFlavor( + java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + + flavor_ = value; + onChanged(); + return this; } /** *
-       *+optional It can be used to decide use sync plugin or async plugin during runtime.
+       *+optional It can be used to provide extra information about the runtime (e.g. python, golang... etc.).
        * 
* - * bool is_sync_plugin = 1; + * string flavor = 3; */ - public Builder setIsSyncPlugin(boolean value) { + public Builder clearFlavor() { - isSyncPlugin_ = value; + flavor_ = getDefaultInstance().getFlavor(); onChanged(); return this; } /** *
-       *+optional It can be used to decide use sync plugin or async plugin during runtime.
+       *+optional It can be used to provide extra information about the runtime (e.g. python, golang... etc.).
        * 
* - * bool is_sync_plugin = 1; + * string flavor = 3; */ - public Builder clearIsSyncPlugin() { + public Builder setFlavorBytes( + com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); - isSyncPlugin_ = false; + flavor_ = value; onChanged(); return this; } @@ -5684,41 +4935,41 @@ public final Builder mergeUnknownFields( } - // @@protoc_insertion_point(builder_scope:flyteidl.core.PluginMetadata) + // @@protoc_insertion_point(builder_scope:flyteidl.core.RuntimeMetadata) } - // @@protoc_insertion_point(class_scope:flyteidl.core.PluginMetadata) - private static final flyteidl.core.Tasks.PluginMetadata DEFAULT_INSTANCE; + // @@protoc_insertion_point(class_scope:flyteidl.core.RuntimeMetadata) + private static final flyteidl.core.Tasks.RuntimeMetadata DEFAULT_INSTANCE; static { - DEFAULT_INSTANCE = new flyteidl.core.Tasks.PluginMetadata(); + DEFAULT_INSTANCE = new flyteidl.core.Tasks.RuntimeMetadata(); } - public static flyteidl.core.Tasks.PluginMetadata getDefaultInstance() { + public static flyteidl.core.Tasks.RuntimeMetadata getDefaultInstance() { return DEFAULT_INSTANCE; } - private static final com.google.protobuf.Parser - PARSER = new com.google.protobuf.AbstractParser() { + private static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { @java.lang.Override - public PluginMetadata parsePartialFrom( + public RuntimeMetadata parsePartialFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { - return new PluginMetadata(input, extensionRegistry); + return new RuntimeMetadata(input, extensionRegistry); } }; - public static com.google.protobuf.Parser parser() { + public static com.google.protobuf.Parser parser() { return PARSER; } @java.lang.Override - public com.google.protobuf.Parser getParserForType() { + public com.google.protobuf.Parser getParserForType() { return PARSER; } @java.lang.Override - public flyteidl.core.Tasks.PluginMetadata getDefaultInstanceForType() { + public flyteidl.core.Tasks.RuntimeMetadata getDefaultInstanceForType() { return DEFAULT_INSTANCE; } @@ -21293,11 +20544,6 @@ public flyteidl.core.Tasks.Sql getDefaultInstanceForType() { private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_flyteidl_core_RuntimeMetadata_fieldAccessorTable; - private static final com.google.protobuf.Descriptors.Descriptor - internal_static_flyteidl_core_PluginMetadata_descriptor; - private static final - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internal_static_flyteidl_core_PluginMetadata_fieldAccessorTable; private static final com.google.protobuf.Descriptors.Descriptor internal_static_flyteidl_core_TaskMetadata_descriptor; private static final @@ -21390,80 +20636,77 @@ public flyteidl.core.Tasks.Sql getDefaultInstanceForType() { "rtition_size\030\003 \001(\tH\000B\026\n\024partition_size_v" + "alue\"K\n\021ExtendedResources\0226\n\017gpu_acceler" + "ator\030\001 \001(\0132\035.flyteidl.core.GPUAccelerato" + - "r\"\315\001\n\017RuntimeMetadata\0228\n\004type\030\001 \001(\0162*.fl" + + "r\"\225\001\n\017RuntimeMetadata\0228\n\004type\030\001 \001(\0162*.fl" + "yteidl.core.RuntimeMetadata.RuntimeType\022" + - "\017\n\007version\030\002 \001(\t\022\016\n\006flavor\030\003 \001(\t\0226\n\017plug" + - "in_metadata\030\004 \001(\0132\035.flyteidl.core.Plugin" + - "Metadata\"\'\n\013RuntimeType\022\t\n\005OTHER\020\000\022\r\n\tFL" + - "YTE_SDK\020\001\"(\n\016PluginMetadata\022\026\n\016is_sync_p" + - "lugin\030\001 \001(\010\"\316\003\n\014TaskMetadata\022\024\n\014discover" + - "able\030\001 \001(\010\022/\n\007runtime\030\002 \001(\0132\036.flyteidl.c" + - "ore.RuntimeMetadata\022*\n\007timeout\030\004 \001(\0132\031.g" + - "oogle.protobuf.Duration\022-\n\007retries\030\005 \001(\013" + - "2\034.flyteidl.core.RetryStrategy\022\031\n\021discov" + - "ery_version\030\006 \001(\t\022 \n\030deprecated_error_me" + - "ssage\030\007 \001(\t\022\027\n\rinterruptible\030\010 \001(\010H\000\022\032\n\022" + - "cache_serializable\030\t \001(\010\022\026\n\016generates_de" + - "ck\030\n \001(\010\0223\n\004tags\030\013 \003(\0132%.flyteidl.core.T" + - "askMetadata.TagsEntry\022\031\n\021pod_template_na" + - "me\030\014 \001(\t\032+\n\tTagsEntry\022\013\n\003key\030\001 \001(\t\022\r\n\005va" + - "lue\030\002 \001(\t:\0028\001B\025\n\023interruptible_value\"\316\004\n" + - "\014TaskTemplate\022%\n\002id\030\001 \001(\0132\031.flyteidl.cor" + - "e.Identifier\022\014\n\004type\030\002 \001(\t\022-\n\010metadata\030\003" + - " \001(\0132\033.flyteidl.core.TaskMetadata\0220\n\tint" + - "erface\030\004 \001(\0132\035.flyteidl.core.TypedInterf" + - "ace\022\'\n\006custom\030\005 \001(\0132\027.google.protobuf.St" + - "ruct\022-\n\tcontainer\030\006 \001(\0132\030.flyteidl.core." + - "ContainerH\000\022(\n\007k8s_pod\030\021 \001(\0132\025.flyteidl." + - "core.K8sPodH\000\022!\n\003sql\030\022 \001(\0132\022.flyteidl.co" + - "re.SqlH\000\022\031\n\021task_type_version\030\007 \001(\005\0228\n\020s" + - "ecurity_context\030\010 \001(\0132\036.flyteidl.core.Se" + - "curityContext\022<\n\022extended_resources\030\t \001(" + - "\0132 .flyteidl.core.ExtendedResources\0227\n\006c" + - "onfig\030\020 \003(\0132\'.flyteidl.core.TaskTemplate" + - ".ConfigEntry\032-\n\013ConfigEntry\022\013\n\003key\030\001 \001(\t" + - "\022\r\n\005value\030\002 \001(\t:\0028\001B\010\n\006target\"\'\n\rContain" + - "erPort\022\026\n\016container_port\030\001 \001(\r\"\255\003\n\tConta" + - "iner\022\r\n\005image\030\001 \001(\t\022\017\n\007command\030\002 \003(\t\022\014\n\004" + - "args\030\003 \003(\t\022+\n\tresources\030\004 \001(\0132\030.flyteidl" + - ".core.Resources\022(\n\003env\030\005 \003(\0132\033.flyteidl." + - "core.KeyValuePair\022/\n\006config\030\006 \003(\0132\033.flyt" + - "eidl.core.KeyValuePairB\002\030\001\022+\n\005ports\030\007 \003(" + - "\0132\034.flyteidl.core.ContainerPort\0225\n\013data_" + - "config\030\t \001(\0132 .flyteidl.core.DataLoading" + - "Config\022;\n\014architecture\030\n \001(\0162%.flyteidl." + - "core.Container.Architecture\"I\n\014Architect" + - "ure\022\013\n\007UNKNOWN\020\000\022\t\n\005AMD64\020\001\022\t\n\005ARM64\020\002\022\n" + - "\n\006ARM_V6\020\003\022\n\n\006ARM_V7\020\004\"\233\002\n\nIOStrategy\022=\n" + - "\rdownload_mode\030\001 \001(\0162&.flyteidl.core.IOS" + - "trategy.DownloadMode\0229\n\013upload_mode\030\002 \001(" + - "\0162$.flyteidl.core.IOStrategy.UploadMode\"" + - "L\n\014DownloadMode\022\022\n\016DOWNLOAD_EAGER\020\000\022\023\n\017D" + - "OWNLOAD_STREAM\020\001\022\023\n\017DO_NOT_DOWNLOAD\020\002\"E\n" + - "\nUploadMode\022\022\n\016UPLOAD_ON_EXIT\020\000\022\020\n\014UPLOA" + - "D_EAGER\020\001\022\021\n\rDO_NOT_UPLOAD\020\002\"\363\001\n\021DataLoa" + - "dingConfig\022\017\n\007enabled\030\001 \001(\010\022\022\n\ninput_pat" + - "h\030\002 \001(\t\022\023\n\013output_path\030\003 \001(\t\022A\n\006format\030\004" + - " \001(\01621.flyteidl.core.DataLoadingConfig.L" + - "iteralMapFormat\022.\n\013io_strategy\030\005 \001(\0132\031.f" + - "lyteidl.core.IOStrategy\"1\n\020LiteralMapFor" + - "mat\022\010\n\004JSON\020\000\022\010\n\004YAML\020\001\022\t\n\005PROTO\020\002\"\236\001\n\006K" + - "8sPod\0222\n\010metadata\030\001 \001(\0132 .flyteidl.core." + - "K8sObjectMetadata\022)\n\010pod_spec\030\002 \001(\0132\027.go" + - "ogle.protobuf.Struct\0225\n\013data_config\030\003 \001(" + - "\0132 .flyteidl.core.DataLoadingConfig\"\374\001\n\021" + - "K8sObjectMetadata\022<\n\006labels\030\001 \003(\0132,.flyt" + - "eidl.core.K8sObjectMetadata.LabelsEntry\022" + - "F\n\013annotations\030\002 \003(\01321.flyteidl.core.K8s" + - "ObjectMetadata.AnnotationsEntry\032-\n\013Label" + - "sEntry\022\013\n\003key\030\001 \001(\t\022\r\n\005value\030\002 \001(\t:\0028\001\0322" + - "\n\020AnnotationsEntry\022\013\n\003key\030\001 \001(\t\022\r\n\005value" + - "\030\002 \001(\t:\0028\001\"~\n\003Sql\022\021\n\tstatement\030\001 \001(\t\022+\n\007" + - "dialect\030\002 \001(\0162\032.flyteidl.core.Sql.Dialec" + - "t\"7\n\007Dialect\022\r\n\tUNDEFINED\020\000\022\010\n\004ANSI\020\001\022\010\n" + - "\004HIVE\020\002\022\t\n\005OTHER\020\003B void; } - /** Represents an AgentService */ - class AgentService extends $protobuf.rpc.Service { + /** Represents an AsyncAgentService */ + class AsyncAgentService extends $protobuf.rpc.Service { /** - * Constructs a new AgentService service. + * Constructs a new AsyncAgentService service. * @param rpcImpl RPC implementation * @param [requestDelimited=false] Whether requests are length-delimited * @param [responseDelimited=false] Whether responses are length-delimited @@ -19728,20 +19676,20 @@ export namespace flyteidl { constructor(rpcImpl: $protobuf.RPCImpl, requestDelimited?: boolean, responseDelimited?: boolean); /** - * Creates new AgentService service using the specified rpc implementation. + * Creates new AsyncAgentService service using the specified rpc implementation. * @param rpcImpl RPC implementation * @param [requestDelimited=false] Whether requests are length-delimited * @param [responseDelimited=false] Whether responses are length-delimited * @returns RPC service. Useful where requests and/or responses are streamed. */ - public static create(rpcImpl: $protobuf.RPCImpl, requestDelimited?: boolean, responseDelimited?: boolean): AgentService; + public static create(rpcImpl: $protobuf.RPCImpl, requestDelimited?: boolean, responseDelimited?: boolean): AsyncAgentService; /** * Calls CreateTask. * @param request CreateTaskRequest message or plain object * @param callback Node-style callback called with the error, if any, and CreateTaskResponse */ - public createTask(request: flyteidl.admin.ICreateTaskRequest, callback: flyteidl.service.AgentService.CreateTaskCallback): void; + public createTask(request: flyteidl.admin.ICreateTaskRequest, callback: flyteidl.service.AsyncAgentService.CreateTaskCallback): void; /** * Calls CreateTask. @@ -19755,7 +19703,7 @@ export namespace flyteidl { * @param request GetTaskRequest message or plain object * @param callback Node-style callback called with the error, if any, and GetTaskResponse */ - public getTask(request: flyteidl.admin.IGetTaskRequest, callback: flyteidl.service.AgentService.GetTaskCallback): void; + public getTask(request: flyteidl.admin.IGetTaskRequest, callback: flyteidl.service.AsyncAgentService.GetTaskCallback): void; /** * Calls GetTask. @@ -19769,7 +19717,7 @@ export namespace flyteidl { * @param request DeleteTaskRequest message or plain object * @param callback Node-style callback called with the error, if any, and DeleteTaskResponse */ - public deleteTask(request: flyteidl.admin.IDeleteTaskRequest, callback: flyteidl.service.AgentService.DeleteTaskCallback): void; + public deleteTask(request: flyteidl.admin.IDeleteTaskRequest, callback: flyteidl.service.AsyncAgentService.DeleteTaskCallback): void; /** * Calls DeleteTask. @@ -19779,24 +19727,24 @@ export namespace flyteidl { public deleteTask(request: flyteidl.admin.IDeleteTaskRequest): Promise; } - namespace AgentService { + namespace AsyncAgentService { /** - * Callback as used by {@link flyteidl.service.AgentService#createTask}. + * Callback as used by {@link flyteidl.service.AsyncAgentService#createTask}. * @param error Error, if any * @param [response] CreateTaskResponse */ type CreateTaskCallback = (error: (Error|null), response?: flyteidl.admin.CreateTaskResponse) => void; /** - * Callback as used by {@link flyteidl.service.AgentService#getTask}. + * Callback as used by {@link flyteidl.service.AsyncAgentService#getTask}. * @param error Error, if any * @param [response] GetTaskResponse */ type GetTaskCallback = (error: (Error|null), response?: flyteidl.admin.GetTaskResponse) => void; /** - * Callback as used by {@link flyteidl.service.AgentService#deleteTask}. + * Callback as used by {@link flyteidl.service.AsyncAgentService#deleteTask}. * @param error Error, if any * @param [response] DeleteTaskResponse */ diff --git a/flyteidl/gen/pb-js/flyteidl.js b/flyteidl/gen/pb-js/flyteidl.js index 1eacf652ec..148c78c1ca 100644 --- a/flyteidl/gen/pb-js/flyteidl.js +++ b/flyteidl/gen/pb-js/flyteidl.js @@ -12614,7 +12614,6 @@ * @property {flyteidl.core.RuntimeMetadata.RuntimeType|null} [type] RuntimeMetadata type * @property {string|null} [version] RuntimeMetadata version * @property {string|null} [flavor] RuntimeMetadata flavor - * @property {flyteidl.core.IPluginMetadata|null} [pluginMetadata] RuntimeMetadata pluginMetadata */ /** @@ -12656,14 +12655,6 @@ */ RuntimeMetadata.prototype.flavor = ""; - /** - * RuntimeMetadata pluginMetadata. - * @member {flyteidl.core.IPluginMetadata|null|undefined} pluginMetadata - * @memberof flyteidl.core.RuntimeMetadata - * @instance - */ - RuntimeMetadata.prototype.pluginMetadata = null; - /** * Creates a new RuntimeMetadata instance using the specified properties. * @function create @@ -12694,8 +12685,6 @@ writer.uint32(/* id 2, wireType 2 =*/18).string(message.version); if (message.flavor != null && message.hasOwnProperty("flavor")) writer.uint32(/* id 3, wireType 2 =*/26).string(message.flavor); - if (message.pluginMetadata != null && message.hasOwnProperty("pluginMetadata")) - $root.flyteidl.core.PluginMetadata.encode(message.pluginMetadata, writer.uint32(/* id 4, wireType 2 =*/34).fork()).ldelim(); return writer; }; @@ -12726,9 +12715,6 @@ case 3: message.flavor = reader.string(); break; - case 4: - message.pluginMetadata = $root.flyteidl.core.PluginMetadata.decode(reader, reader.uint32()); - break; default: reader.skipType(tag & 7); break; @@ -12762,11 +12748,6 @@ if (message.flavor != null && message.hasOwnProperty("flavor")) if (!$util.isString(message.flavor)) return "flavor: string expected"; - if (message.pluginMetadata != null && message.hasOwnProperty("pluginMetadata")) { - var error = $root.flyteidl.core.PluginMetadata.verify(message.pluginMetadata); - if (error) - return "pluginMetadata." + error; - } return null; }; @@ -12787,116 +12768,6 @@ return RuntimeMetadata; })(); - core.PluginMetadata = (function() { - - /** - * Properties of a PluginMetadata. - * @memberof flyteidl.core - * @interface IPluginMetadata - * @property {boolean|null} [isSyncPlugin] PluginMetadata isSyncPlugin - */ - - /** - * Constructs a new PluginMetadata. - * @memberof flyteidl.core - * @classdesc Represents a PluginMetadata. - * @implements IPluginMetadata - * @constructor - * @param {flyteidl.core.IPluginMetadata=} [properties] Properties to set - */ - function PluginMetadata(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * PluginMetadata isSyncPlugin. - * @member {boolean} isSyncPlugin - * @memberof flyteidl.core.PluginMetadata - * @instance - */ - PluginMetadata.prototype.isSyncPlugin = false; - - /** - * Creates a new PluginMetadata instance using the specified properties. - * @function create - * @memberof flyteidl.core.PluginMetadata - * @static - * @param {flyteidl.core.IPluginMetadata=} [properties] Properties to set - * @returns {flyteidl.core.PluginMetadata} PluginMetadata instance - */ - PluginMetadata.create = function create(properties) { - return new PluginMetadata(properties); - }; - - /** - * Encodes the specified PluginMetadata message. Does not implicitly {@link flyteidl.core.PluginMetadata.verify|verify} messages. - * @function encode - * @memberof flyteidl.core.PluginMetadata - * @static - * @param {flyteidl.core.IPluginMetadata} message PluginMetadata message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - PluginMetadata.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.isSyncPlugin != null && message.hasOwnProperty("isSyncPlugin")) - writer.uint32(/* id 1, wireType 0 =*/8).bool(message.isSyncPlugin); - return writer; - }; - - /** - * Decodes a PluginMetadata message from the specified reader or buffer. - * @function decode - * @memberof flyteidl.core.PluginMetadata - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {flyteidl.core.PluginMetadata} PluginMetadata - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - PluginMetadata.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.flyteidl.core.PluginMetadata(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: - message.isSyncPlugin = reader.bool(); - break; - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Verifies a PluginMetadata message. - * @function verify - * @memberof flyteidl.core.PluginMetadata - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - PluginMetadata.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.isSyncPlugin != null && message.hasOwnProperty("isSyncPlugin")) - if (typeof message.isSyncPlugin !== "boolean") - return "isSyncPlugin: boolean expected"; - return null; - }; - - return PluginMetadata; - })(); - core.TaskMetadata = (function() { /** @@ -20213,6 +20084,7 @@ * @property {flyteidl.admin.State|null} [state] Resource state * @property {flyteidl.core.ILiteralMap|null} [outputs] Resource outputs * @property {string|null} [message] Resource message + * @property {Array.|null} [logLinks] Resource logLinks */ /** @@ -20224,6 +20096,7 @@ * @param {flyteidl.admin.IResource=} [properties] Properties to set */ function Resource(properties) { + this.logLinks = []; if (properties) for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) if (properties[keys[i]] != null) @@ -20254,6 +20127,14 @@ */ Resource.prototype.message = ""; + /** + * Resource logLinks. + * @member {Array.} logLinks + * @memberof flyteidl.admin.Resource + * @instance + */ + Resource.prototype.logLinks = $util.emptyArray; + /** * Creates a new Resource instance using the specified properties. * @function create @@ -20284,6 +20165,9 @@ $root.flyteidl.core.LiteralMap.encode(message.outputs, writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim(); if (message.message != null && message.hasOwnProperty("message")) writer.uint32(/* id 3, wireType 2 =*/26).string(message.message); + if (message.logLinks != null && message.logLinks.length) + for (var i = 0; i < message.logLinks.length; ++i) + $root.flyteidl.core.TaskLog.encode(message.logLinks[i], writer.uint32(/* id 4, wireType 2 =*/34).fork()).ldelim(); return writer; }; @@ -20314,6 +20198,11 @@ case 3: message.message = reader.string(); break; + case 4: + if (!(message.logLinks && message.logLinks.length)) + message.logLinks = []; + message.logLinks.push($root.flyteidl.core.TaskLog.decode(reader, reader.uint32())); + break; default: reader.skipType(tag & 7); break; @@ -20352,6 +20241,15 @@ if (message.message != null && message.hasOwnProperty("message")) if (!$util.isString(message.message)) return "message: string expected"; + if (message.logLinks != null && message.hasOwnProperty("logLinks")) { + if (!Array.isArray(message.logLinks)) + return "logLinks: array expected"; + for (var i = 0; i < message.logLinks.length; ++i) { + var error = $root.flyteidl.core.TaskLog.verify(message.logLinks[i]); + if (error) + return "logLinks." + error; + } + } return null; }; @@ -46212,41 +46110,41 @@ return AdminService; })(); - service.AgentService = (function() { + service.AsyncAgentService = (function() { /** - * Constructs a new AgentService service. + * Constructs a new AsyncAgentService service. * @memberof flyteidl.service - * @classdesc Represents an AgentService + * @classdesc Represents an AsyncAgentService * @extends $protobuf.rpc.Service * @constructor * @param {$protobuf.RPCImpl} rpcImpl RPC implementation * @param {boolean} [requestDelimited=false] Whether requests are length-delimited * @param {boolean} [responseDelimited=false] Whether responses are length-delimited */ - function AgentService(rpcImpl, requestDelimited, responseDelimited) { + function AsyncAgentService(rpcImpl, requestDelimited, responseDelimited) { $protobuf.rpc.Service.call(this, rpcImpl, requestDelimited, responseDelimited); } - (AgentService.prototype = Object.create($protobuf.rpc.Service.prototype)).constructor = AgentService; + (AsyncAgentService.prototype = Object.create($protobuf.rpc.Service.prototype)).constructor = AsyncAgentService; /** - * Creates new AgentService service using the specified rpc implementation. + * Creates new AsyncAgentService service using the specified rpc implementation. * @function create - * @memberof flyteidl.service.AgentService + * @memberof flyteidl.service.AsyncAgentService * @static * @param {$protobuf.RPCImpl} rpcImpl RPC implementation * @param {boolean} [requestDelimited=false] Whether requests are length-delimited * @param {boolean} [responseDelimited=false] Whether responses are length-delimited - * @returns {AgentService} RPC service. Useful where requests and/or responses are streamed. + * @returns {AsyncAgentService} RPC service. Useful where requests and/or responses are streamed. */ - AgentService.create = function create(rpcImpl, requestDelimited, responseDelimited) { + AsyncAgentService.create = function create(rpcImpl, requestDelimited, responseDelimited) { return new this(rpcImpl, requestDelimited, responseDelimited); }; /** - * Callback as used by {@link flyteidl.service.AgentService#createTask}. - * @memberof flyteidl.service.AgentService + * Callback as used by {@link flyteidl.service.AsyncAgentService#createTask}. + * @memberof flyteidl.service.AsyncAgentService * @typedef CreateTaskCallback * @type {function} * @param {Error|null} error Error, if any @@ -46256,21 +46154,21 @@ /** * Calls CreateTask. * @function createTask - * @memberof flyteidl.service.AgentService + * @memberof flyteidl.service.AsyncAgentService * @instance * @param {flyteidl.admin.ICreateTaskRequest} request CreateTaskRequest message or plain object - * @param {flyteidl.service.AgentService.CreateTaskCallback} callback Node-style callback called with the error, if any, and CreateTaskResponse + * @param {flyteidl.service.AsyncAgentService.CreateTaskCallback} callback Node-style callback called with the error, if any, and CreateTaskResponse * @returns {undefined} * @variation 1 */ - Object.defineProperty(AgentService.prototype.createTask = function createTask(request, callback) { + Object.defineProperty(AsyncAgentService.prototype.createTask = function createTask(request, callback) { return this.rpcCall(createTask, $root.flyteidl.admin.CreateTaskRequest, $root.flyteidl.admin.CreateTaskResponse, request, callback); }, "name", { value: "CreateTask" }); /** * Calls CreateTask. * @function createTask - * @memberof flyteidl.service.AgentService + * @memberof flyteidl.service.AsyncAgentService * @instance * @param {flyteidl.admin.ICreateTaskRequest} request CreateTaskRequest message or plain object * @returns {Promise} Promise @@ -46278,8 +46176,8 @@ */ /** - * Callback as used by {@link flyteidl.service.AgentService#getTask}. - * @memberof flyteidl.service.AgentService + * Callback as used by {@link flyteidl.service.AsyncAgentService#getTask}. + * @memberof flyteidl.service.AsyncAgentService * @typedef GetTaskCallback * @type {function} * @param {Error|null} error Error, if any @@ -46289,21 +46187,21 @@ /** * Calls GetTask. * @function getTask - * @memberof flyteidl.service.AgentService + * @memberof flyteidl.service.AsyncAgentService * @instance * @param {flyteidl.admin.IGetTaskRequest} request GetTaskRequest message or plain object - * @param {flyteidl.service.AgentService.GetTaskCallback} callback Node-style callback called with the error, if any, and GetTaskResponse + * @param {flyteidl.service.AsyncAgentService.GetTaskCallback} callback Node-style callback called with the error, if any, and GetTaskResponse * @returns {undefined} * @variation 1 */ - Object.defineProperty(AgentService.prototype.getTask = function getTask(request, callback) { + Object.defineProperty(AsyncAgentService.prototype.getTask = function getTask(request, callback) { return this.rpcCall(getTask, $root.flyteidl.admin.GetTaskRequest, $root.flyteidl.admin.GetTaskResponse, request, callback); }, "name", { value: "GetTask" }); /** * Calls GetTask. * @function getTask - * @memberof flyteidl.service.AgentService + * @memberof flyteidl.service.AsyncAgentService * @instance * @param {flyteidl.admin.IGetTaskRequest} request GetTaskRequest message or plain object * @returns {Promise} Promise @@ -46311,8 +46209,8 @@ */ /** - * Callback as used by {@link flyteidl.service.AgentService#deleteTask}. - * @memberof flyteidl.service.AgentService + * Callback as used by {@link flyteidl.service.AsyncAgentService#deleteTask}. + * @memberof flyteidl.service.AsyncAgentService * @typedef DeleteTaskCallback * @type {function} * @param {Error|null} error Error, if any @@ -46322,28 +46220,28 @@ /** * Calls DeleteTask. * @function deleteTask - * @memberof flyteidl.service.AgentService + * @memberof flyteidl.service.AsyncAgentService * @instance * @param {flyteidl.admin.IDeleteTaskRequest} request DeleteTaskRequest message or plain object - * @param {flyteidl.service.AgentService.DeleteTaskCallback} callback Node-style callback called with the error, if any, and DeleteTaskResponse + * @param {flyteidl.service.AsyncAgentService.DeleteTaskCallback} callback Node-style callback called with the error, if any, and DeleteTaskResponse * @returns {undefined} * @variation 1 */ - Object.defineProperty(AgentService.prototype.deleteTask = function deleteTask(request, callback) { + Object.defineProperty(AsyncAgentService.prototype.deleteTask = function deleteTask(request, callback) { return this.rpcCall(deleteTask, $root.flyteidl.admin.DeleteTaskRequest, $root.flyteidl.admin.DeleteTaskResponse, request, callback); }, "name", { value: "DeleteTask" }); /** * Calls DeleteTask. * @function deleteTask - * @memberof flyteidl.service.AgentService + * @memberof flyteidl.service.AsyncAgentService * @instance * @param {flyteidl.admin.IDeleteTaskRequest} request DeleteTaskRequest message or plain object * @returns {Promise} Promise * @variation 2 */ - return AgentService; + return AsyncAgentService; })(); service.OAuth2MetadataRequest = (function() { diff --git a/flyteidl/gen/pb_python/flyteidl/admin/agent_pb2.py b/flyteidl/gen/pb_python/flyteidl/admin/agent_pb2.py index 80586a1b9a..84b78b7de8 100644 --- a/flyteidl/gen/pb_python/flyteidl/admin/agent_pb2.py +++ b/flyteidl/gen/pb_python/flyteidl/admin/agent_pb2.py @@ -18,7 +18,7 @@ from flyteidl.core import execution_pb2 as flyteidl_dot_core_dot_execution__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1a\x66lyteidl/admin/agent.proto\x12\x0e\x66lyteidl.admin\x1a\x1c\x66lyteidl/core/literals.proto\x1a\x19\x66lyteidl/core/tasks.proto\x1a\x1d\x66lyteidl/core/interface.proto\x1a\x1e\x66lyteidl/core/identifier.proto\x1a\x1d\x66lyteidl/core/execution.proto\"\x98\x05\n\x15TaskExecutionMetadata\x12R\n\x11task_execution_id\x18\x01 \x01(\x0b\x32&.flyteidl.core.TaskExecutionIdentifierR\x0ftaskExecutionId\x12\x1c\n\tnamespace\x18\x02 \x01(\tR\tnamespace\x12I\n\x06labels\x18\x03 \x03(\x0b\x32\x31.flyteidl.admin.TaskExecutionMetadata.LabelsEntryR\x06labels\x12X\n\x0b\x61nnotations\x18\x04 \x03(\x0b\x32\x36.flyteidl.admin.TaskExecutionMetadata.AnnotationsEntryR\x0b\x61nnotations\x12.\n\x13k8s_service_account\x18\x05 \x01(\tR\x11k8sServiceAccount\x12t\n\x15\x65nvironment_variables\x18\x06 \x03(\x0b\x32?.flyteidl.admin.TaskExecutionMetadata.EnvironmentVariablesEntryR\x14\x65nvironmentVariables\x1a\x39\n\x0bLabelsEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x1a>\n\x10\x41nnotationsEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x1aG\n\x19\x45nvironmentVariablesEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\"\x83\x02\n\x11\x43reateTaskRequest\x12\x31\n\x06inputs\x18\x01 \x01(\x0b\x32\x19.flyteidl.core.LiteralMapR\x06inputs\x12\x37\n\x08template\x18\x02 \x01(\x0b\x32\x1b.flyteidl.core.TaskTemplateR\x08template\x12#\n\routput_prefix\x18\x03 \x01(\tR\x0coutputPrefix\x12]\n\x17task_execution_metadata\x18\x04 \x01(\x0b\x32%.flyteidl.admin.TaskExecutionMetadataR\x15taskExecutionMetadata\"\xaf\x01\n\x12\x43reateTaskResponse\x12%\n\rresource_meta\x18\x01 \x01(\x0cH\x00R\x0cresourceMeta\x12\x36\n\x08resource\x18\x02 \x01(\x0b\x32\x18.flyteidl.admin.ResourceH\x00R\x08resource\x12\x33\n\tlog_links\x18\x03 \x03(\x0b\x32\x16.flyteidl.core.TaskLogR\x08logLinksB\x05\n\x03res\"R\n\x0eGetTaskRequest\x12\x1b\n\ttask_type\x18\x01 \x01(\tR\x08taskType\x12#\n\rresource_meta\x18\x02 \x01(\x0cR\x0cresourceMeta\"|\n\x0fGetTaskResponse\x12\x34\n\x08resource\x18\x01 \x01(\x0b\x32\x18.flyteidl.admin.ResourceR\x08resource\x12\x33\n\tlog_links\x18\x02 \x03(\x0b\x32\x16.flyteidl.core.TaskLogR\x08logLinks\"\x86\x01\n\x08Resource\x12+\n\x05state\x18\x01 \x01(\x0e\x32\x15.flyteidl.admin.StateR\x05state\x12\x33\n\x07outputs\x18\x02 \x01(\x0b\x32\x19.flyteidl.core.LiteralMapR\x07outputs\x12\x18\n\x07message\x18\x03 \x01(\tR\x07message\"U\n\x11\x44\x65leteTaskRequest\x12\x1b\n\ttask_type\x18\x01 \x01(\tR\x08taskType\x12#\n\rresource_meta\x18\x02 \x01(\x0cR\x0cresourceMeta\"\x14\n\x12\x44\x65leteTaskResponse*^\n\x05State\x12\x15\n\x11RETRYABLE_FAILURE\x10\x00\x12\x15\n\x11PERMANENT_FAILURE\x10\x01\x12\x0b\n\x07PENDING\x10\x02\x12\x0b\n\x07RUNNING\x10\x03\x12\r\n\tSUCCEEDED\x10\x04\x42\xb6\x01\n\x12\x63om.flyteidl.adminB\nAgentProtoP\x01Z;github.com/flyteorg/flyte/flyteidl/gen/pb-go/flyteidl/admin\xa2\x02\x03\x46\x41X\xaa\x02\x0e\x46lyteidl.Admin\xca\x02\x0e\x46lyteidl\\Admin\xe2\x02\x1a\x46lyteidl\\Admin\\GPBMetadata\xea\x02\x0f\x46lyteidl::Adminb\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1a\x66lyteidl/admin/agent.proto\x12\x0e\x66lyteidl.admin\x1a\x1c\x66lyteidl/core/literals.proto\x1a\x19\x66lyteidl/core/tasks.proto\x1a\x1d\x66lyteidl/core/interface.proto\x1a\x1e\x66lyteidl/core/identifier.proto\x1a\x1d\x66lyteidl/core/execution.proto\"\x98\x05\n\x15TaskExecutionMetadata\x12R\n\x11task_execution_id\x18\x01 \x01(\x0b\x32&.flyteidl.core.TaskExecutionIdentifierR\x0ftaskExecutionId\x12\x1c\n\tnamespace\x18\x02 \x01(\tR\tnamespace\x12I\n\x06labels\x18\x03 \x03(\x0b\x32\x31.flyteidl.admin.TaskExecutionMetadata.LabelsEntryR\x06labels\x12X\n\x0b\x61nnotations\x18\x04 \x03(\x0b\x32\x36.flyteidl.admin.TaskExecutionMetadata.AnnotationsEntryR\x0b\x61nnotations\x12.\n\x13k8s_service_account\x18\x05 \x01(\tR\x11k8sServiceAccount\x12t\n\x15\x65nvironment_variables\x18\x06 \x03(\x0b\x32?.flyteidl.admin.TaskExecutionMetadata.EnvironmentVariablesEntryR\x14\x65nvironmentVariables\x1a\x39\n\x0bLabelsEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x1a>\n\x10\x41nnotationsEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x1aG\n\x19\x45nvironmentVariablesEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\"\x83\x02\n\x11\x43reateTaskRequest\x12\x31\n\x06inputs\x18\x01 \x01(\x0b\x32\x19.flyteidl.core.LiteralMapR\x06inputs\x12\x37\n\x08template\x18\x02 \x01(\x0b\x32\x1b.flyteidl.core.TaskTemplateR\x08template\x12#\n\routput_prefix\x18\x03 \x01(\tR\x0coutputPrefix\x12]\n\x17task_execution_metadata\x18\x04 \x01(\x0b\x32%.flyteidl.admin.TaskExecutionMetadataR\x15taskExecutionMetadata\"\xaf\x01\n\x12\x43reateTaskResponse\x12%\n\rresource_meta\x18\x01 \x01(\x0cH\x00R\x0cresourceMeta\x12\x36\n\x08resource\x18\x02 \x01(\x0b\x32\x18.flyteidl.admin.ResourceH\x00R\x08resource\x12\x33\n\tlog_links\x18\x03 \x03(\x0b\x32\x16.flyteidl.core.TaskLogR\x08logLinksB\x05\n\x03res\"R\n\x0eGetTaskRequest\x12\x1b\n\ttask_type\x18\x01 \x01(\tR\x08taskType\x12#\n\rresource_meta\x18\x02 \x01(\x0cR\x0cresourceMeta\"|\n\x0fGetTaskResponse\x12\x34\n\x08resource\x18\x01 \x01(\x0b\x32\x18.flyteidl.admin.ResourceR\x08resource\x12\x33\n\tlog_links\x18\x02 \x03(\x0b\x32\x16.flyteidl.core.TaskLogR\x08logLinks\"\xbb\x01\n\x08Resource\x12+\n\x05state\x18\x01 \x01(\x0e\x32\x15.flyteidl.admin.StateR\x05state\x12\x33\n\x07outputs\x18\x02 \x01(\x0b\x32\x19.flyteidl.core.LiteralMapR\x07outputs\x12\x18\n\x07message\x18\x03 \x01(\tR\x07message\x12\x33\n\tlog_links\x18\x04 \x03(\x0b\x32\x16.flyteidl.core.TaskLogR\x08logLinks\"U\n\x11\x44\x65leteTaskRequest\x12\x1b\n\ttask_type\x18\x01 \x01(\tR\x08taskType\x12#\n\rresource_meta\x18\x02 \x01(\x0cR\x0cresourceMeta\"\x14\n\x12\x44\x65leteTaskResponse*^\n\x05State\x12\x15\n\x11RETRYABLE_FAILURE\x10\x00\x12\x15\n\x11PERMANENT_FAILURE\x10\x01\x12\x0b\n\x07PENDING\x10\x02\x12\x0b\n\x07RUNNING\x10\x03\x12\r\n\tSUCCEEDED\x10\x04\x42\xb6\x01\n\x12\x63om.flyteidl.adminB\nAgentProtoP\x01Z;github.com/flyteorg/flyte/flyteidl/gen/pb-go/flyteidl/admin\xa2\x02\x03\x46\x41X\xaa\x02\x0e\x46lyteidl.Admin\xca\x02\x0e\x46lyteidl\\Admin\xe2\x02\x1a\x46lyteidl\\Admin\\GPBMetadata\xea\x02\x0f\x46lyteidl::Adminb\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -33,8 +33,8 @@ _TASKEXECUTIONMETADATA_ANNOTATIONSENTRY._serialized_options = b'8\001' _TASKEXECUTIONMETADATA_ENVIRONMENTVARIABLESENTRY._options = None _TASKEXECUTIONMETADATA_ENVIRONMENTVARIABLESENTRY._serialized_options = b'8\001' - _globals['_STATE']._serialized_start=1760 - _globals['_STATE']._serialized_end=1854 + _globals['_STATE']._serialized_start=1813 + _globals['_STATE']._serialized_end=1907 _globals['_TASKEXECUTIONMETADATA']._serialized_start=198 _globals['_TASKEXECUTIONMETADATA']._serialized_end=862 _globals['_TASKEXECUTIONMETADATA_LABELSENTRY']._serialized_start=668 @@ -52,9 +52,9 @@ _globals['_GETTASKRESPONSE']._serialized_start=1388 _globals['_GETTASKRESPONSE']._serialized_end=1512 _globals['_RESOURCE']._serialized_start=1515 - _globals['_RESOURCE']._serialized_end=1649 - _globals['_DELETETASKREQUEST']._serialized_start=1651 - _globals['_DELETETASKREQUEST']._serialized_end=1736 - _globals['_DELETETASKRESPONSE']._serialized_start=1738 - _globals['_DELETETASKRESPONSE']._serialized_end=1758 + _globals['_RESOURCE']._serialized_end=1702 + _globals['_DELETETASKREQUEST']._serialized_start=1704 + _globals['_DELETETASKREQUEST']._serialized_end=1789 + _globals['_DELETETASKRESPONSE']._serialized_start=1791 + _globals['_DELETETASKRESPONSE']._serialized_end=1811 # @@protoc_insertion_point(module_scope) diff --git a/flyteidl/gen/pb_python/flyteidl/admin/agent_pb2.pyi b/flyteidl/gen/pb_python/flyteidl/admin/agent_pb2.pyi index ee5625d62f..6a1f073120 100644 --- a/flyteidl/gen/pb_python/flyteidl/admin/agent_pb2.pyi +++ b/flyteidl/gen/pb_python/flyteidl/admin/agent_pb2.pyi @@ -100,14 +100,16 @@ class GetTaskResponse(_message.Message): def __init__(self, resource: _Optional[_Union[Resource, _Mapping]] = ..., log_links: _Optional[_Iterable[_Union[_execution_pb2.TaskLog, _Mapping]]] = ...) -> None: ... class Resource(_message.Message): - __slots__ = ["state", "outputs", "message"] + __slots__ = ["state", "outputs", "message", "log_links"] STATE_FIELD_NUMBER: _ClassVar[int] OUTPUTS_FIELD_NUMBER: _ClassVar[int] MESSAGE_FIELD_NUMBER: _ClassVar[int] + LOG_LINKS_FIELD_NUMBER: _ClassVar[int] state: State outputs: _literals_pb2.LiteralMap message: str - def __init__(self, state: _Optional[_Union[State, str]] = ..., outputs: _Optional[_Union[_literals_pb2.LiteralMap, _Mapping]] = ..., message: _Optional[str] = ...) -> None: ... + log_links: _containers.RepeatedCompositeFieldContainer[_execution_pb2.TaskLog] + def __init__(self, state: _Optional[_Union[State, str]] = ..., outputs: _Optional[_Union[_literals_pb2.LiteralMap, _Mapping]] = ..., message: _Optional[str] = ..., log_links: _Optional[_Iterable[_Union[_execution_pb2.TaskLog, _Mapping]]] = ...) -> None: ... class DeleteTaskRequest(_message.Message): __slots__ = ["task_type", "resource_meta"] diff --git a/flyteidl/gen/pb_python/flyteidl/core/tasks_pb2.py b/flyteidl/gen/pb_python/flyteidl/core/tasks_pb2.py index 11cb049849..ba28b4716f 100644 --- a/flyteidl/gen/pb_python/flyteidl/core/tasks_pb2.py +++ b/flyteidl/gen/pb_python/flyteidl/core/tasks_pb2.py @@ -19,7 +19,7 @@ from google.protobuf import struct_pb2 as google_dot_protobuf_dot_struct__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x19\x66lyteidl/core/tasks.proto\x12\rflyteidl.core\x1a\x1e\x66lyteidl/core/identifier.proto\x1a\x1d\x66lyteidl/core/interface.proto\x1a\x1c\x66lyteidl/core/literals.proto\x1a\x1c\x66lyteidl/core/security.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x1cgoogle/protobuf/struct.proto\"\xd0\x02\n\tResources\x12\x42\n\x08requests\x18\x01 \x03(\x0b\x32&.flyteidl.core.Resources.ResourceEntryR\x08requests\x12>\n\x06limits\x18\x02 \x03(\x0b\x32&.flyteidl.core.Resources.ResourceEntryR\x06limits\x1a`\n\rResourceEntry\x12\x39\n\x04name\x18\x01 \x01(\x0e\x32%.flyteidl.core.Resources.ResourceNameR\x04name\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value\"]\n\x0cResourceName\x12\x0b\n\x07UNKNOWN\x10\x00\x12\x07\n\x03\x43PU\x10\x01\x12\x07\n\x03GPU\x10\x02\x12\n\n\x06MEMORY\x10\x03\x12\x0b\n\x07STORAGE\x10\x04\x12\x15\n\x11\x45PHEMERAL_STORAGE\x10\x05\"\x91\x01\n\x0eGPUAccelerator\x12\x16\n\x06\x64\x65vice\x18\x01 \x01(\tR\x06\x64\x65vice\x12&\n\runpartitioned\x18\x02 \x01(\x08H\x00R\runpartitioned\x12\'\n\x0epartition_size\x18\x03 \x01(\tH\x00R\rpartitionSizeB\x16\n\x14partition_size_value\"[\n\x11\x45xtendedResources\x12\x46\n\x0fgpu_accelerator\x18\x01 \x01(\x0b\x32\x1d.flyteidl.core.GPUAcceleratorR\x0egpuAccelerator\"\xf4\x01\n\x0fRuntimeMetadata\x12>\n\x04type\x18\x01 \x01(\x0e\x32*.flyteidl.core.RuntimeMetadata.RuntimeTypeR\x04type\x12\x18\n\x07version\x18\x02 \x01(\tR\x07version\x12\x16\n\x06\x66lavor\x18\x03 \x01(\tR\x06\x66lavor\x12\x46\n\x0fplugin_metadata\x18\x04 \x01(\x0b\x32\x1d.flyteidl.core.PluginMetadataR\x0epluginMetadata\"\'\n\x0bRuntimeType\x12\t\n\x05OTHER\x10\x00\x12\r\n\tFLYTE_SDK\x10\x01\"6\n\x0ePluginMetadata\x12$\n\x0eis_sync_plugin\x18\x01 \x01(\x08R\x0cisSyncPlugin\"\xf5\x04\n\x0cTaskMetadata\x12\"\n\x0c\x64iscoverable\x18\x01 \x01(\x08R\x0c\x64iscoverable\x12\x38\n\x07runtime\x18\x02 \x01(\x0b\x32\x1e.flyteidl.core.RuntimeMetadataR\x07runtime\x12\x33\n\x07timeout\x18\x04 \x01(\x0b\x32\x19.google.protobuf.DurationR\x07timeout\x12\x36\n\x07retries\x18\x05 \x01(\x0b\x32\x1c.flyteidl.core.RetryStrategyR\x07retries\x12+\n\x11\x64iscovery_version\x18\x06 \x01(\tR\x10\x64iscoveryVersion\x12\x38\n\x18\x64\x65precated_error_message\x18\x07 \x01(\tR\x16\x64\x65precatedErrorMessage\x12&\n\rinterruptible\x18\x08 \x01(\x08H\x00R\rinterruptible\x12-\n\x12\x63\x61\x63he_serializable\x18\t \x01(\x08R\x11\x63\x61\x63heSerializable\x12%\n\x0egenerates_deck\x18\n \x01(\x08R\rgeneratesDeck\x12\x39\n\x04tags\x18\x0b \x03(\x0b\x32%.flyteidl.core.TaskMetadata.TagsEntryR\x04tags\x12*\n\x11pod_template_name\x18\x0c \x01(\tR\x0fpodTemplateName\x1a\x37\n\tTagsEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x42\x15\n\x13interruptible_value\"\xd6\x05\n\x0cTaskTemplate\x12)\n\x02id\x18\x01 \x01(\x0b\x32\x19.flyteidl.core.IdentifierR\x02id\x12\x12\n\x04type\x18\x02 \x01(\tR\x04type\x12\x37\n\x08metadata\x18\x03 \x01(\x0b\x32\x1b.flyteidl.core.TaskMetadataR\x08metadata\x12;\n\tinterface\x18\x04 \x01(\x0b\x32\x1d.flyteidl.core.TypedInterfaceR\tinterface\x12/\n\x06\x63ustom\x18\x05 \x01(\x0b\x32\x17.google.protobuf.StructR\x06\x63ustom\x12\x38\n\tcontainer\x18\x06 \x01(\x0b\x32\x18.flyteidl.core.ContainerH\x00R\tcontainer\x12\x30\n\x07k8s_pod\x18\x11 \x01(\x0b\x32\x15.flyteidl.core.K8sPodH\x00R\x06k8sPod\x12&\n\x03sql\x18\x12 \x01(\x0b\x32\x12.flyteidl.core.SqlH\x00R\x03sql\x12*\n\x11task_type_version\x18\x07 \x01(\x05R\x0ftaskTypeVersion\x12I\n\x10security_context\x18\x08 \x01(\x0b\x32\x1e.flyteidl.core.SecurityContextR\x0fsecurityContext\x12O\n\x12\x65xtended_resources\x18\t \x01(\x0b\x32 .flyteidl.core.ExtendedResourcesR\x11\x65xtendedResources\x12?\n\x06\x63onfig\x18\x10 \x03(\x0b\x32\'.flyteidl.core.TaskTemplate.ConfigEntryR\x06\x63onfig\x1a\x39\n\x0b\x43onfigEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x42\x08\n\x06target\"6\n\rContainerPort\x12%\n\x0e\x63ontainer_port\x18\x01 \x01(\rR\rcontainerPort\"\xfc\x03\n\tContainer\x12\x14\n\x05image\x18\x01 \x01(\tR\x05image\x12\x18\n\x07\x63ommand\x18\x02 \x03(\tR\x07\x63ommand\x12\x12\n\x04\x61rgs\x18\x03 \x03(\tR\x04\x61rgs\x12\x36\n\tresources\x18\x04 \x01(\x0b\x32\x18.flyteidl.core.ResourcesR\tresources\x12-\n\x03\x65nv\x18\x05 \x03(\x0b\x32\x1b.flyteidl.core.KeyValuePairR\x03\x65nv\x12\x37\n\x06\x63onfig\x18\x06 \x03(\x0b\x32\x1b.flyteidl.core.KeyValuePairB\x02\x18\x01R\x06\x63onfig\x12\x32\n\x05ports\x18\x07 \x03(\x0b\x32\x1c.flyteidl.core.ContainerPortR\x05ports\x12\x41\n\x0b\x64\x61ta_config\x18\t \x01(\x0b\x32 .flyteidl.core.DataLoadingConfigR\ndataConfig\x12I\n\x0c\x61rchitecture\x18\n \x01(\x0e\x32%.flyteidl.core.Container.ArchitectureR\x0c\x61rchitecture\"I\n\x0c\x41rchitecture\x12\x0b\n\x07UNKNOWN\x10\x00\x12\t\n\x05\x41MD64\x10\x01\x12\t\n\x05\x41RM64\x10\x02\x12\n\n\x06\x41RM_V6\x10\x03\x12\n\n\x06\x41RM_V7\x10\x04\"\xb5\x02\n\nIOStrategy\x12K\n\rdownload_mode\x18\x01 \x01(\x0e\x32&.flyteidl.core.IOStrategy.DownloadModeR\x0c\x64ownloadMode\x12\x45\n\x0bupload_mode\x18\x02 \x01(\x0e\x32$.flyteidl.core.IOStrategy.UploadModeR\nuploadMode\"L\n\x0c\x44ownloadMode\x12\x12\n\x0e\x44OWNLOAD_EAGER\x10\x00\x12\x13\n\x0f\x44OWNLOAD_STREAM\x10\x01\x12\x13\n\x0f\x44O_NOT_DOWNLOAD\x10\x02\"E\n\nUploadMode\x12\x12\n\x0eUPLOAD_ON_EXIT\x10\x00\x12\x10\n\x0cUPLOAD_EAGER\x10\x01\x12\x11\n\rDO_NOT_UPLOAD\x10\x02\"\xa7\x02\n\x11\x44\x61taLoadingConfig\x12\x18\n\x07\x65nabled\x18\x01 \x01(\x08R\x07\x65nabled\x12\x1d\n\ninput_path\x18\x02 \x01(\tR\tinputPath\x12\x1f\n\x0boutput_path\x18\x03 \x01(\tR\noutputPath\x12I\n\x06\x66ormat\x18\x04 \x01(\x0e\x32\x31.flyteidl.core.DataLoadingConfig.LiteralMapFormatR\x06\x66ormat\x12:\n\x0bio_strategy\x18\x05 \x01(\x0b\x32\x19.flyteidl.core.IOStrategyR\nioStrategy\"1\n\x10LiteralMapFormat\x12\x08\n\x04JSON\x10\x00\x12\x08\n\x04YAML\x10\x01\x12\t\n\x05PROTO\x10\x02\"\xbd\x01\n\x06K8sPod\x12<\n\x08metadata\x18\x01 \x01(\x0b\x32 .flyteidl.core.K8sObjectMetadataR\x08metadata\x12\x32\n\x08pod_spec\x18\x02 \x01(\x0b\x32\x17.google.protobuf.StructR\x07podSpec\x12\x41\n\x0b\x64\x61ta_config\x18\x03 \x01(\x0b\x32 .flyteidl.core.DataLoadingConfigR\ndataConfig\"\xa9\x02\n\x11K8sObjectMetadata\x12\x44\n\x06labels\x18\x01 \x03(\x0b\x32,.flyteidl.core.K8sObjectMetadata.LabelsEntryR\x06labels\x12S\n\x0b\x61nnotations\x18\x02 \x03(\x0b\x32\x31.flyteidl.core.K8sObjectMetadata.AnnotationsEntryR\x0b\x61nnotations\x1a\x39\n\x0bLabelsEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x1a>\n\x10\x41nnotationsEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\"\x92\x01\n\x03Sql\x12\x1c\n\tstatement\x18\x01 \x01(\tR\tstatement\x12\x34\n\x07\x64ialect\x18\x02 \x01(\x0e\x32\x1a.flyteidl.core.Sql.DialectR\x07\x64ialect\"7\n\x07\x44ialect\x12\r\n\tUNDEFINED\x10\x00\x12\x08\n\x04\x41NSI\x10\x01\x12\x08\n\x04HIVE\x10\x02\x12\t\n\x05OTHER\x10\x03\x42\xb0\x01\n\x11\x63om.flyteidl.coreB\nTasksProtoP\x01Z:github.com/flyteorg/flyte/flyteidl/gen/pb-go/flyteidl/core\xa2\x02\x03\x46\x43X\xaa\x02\rFlyteidl.Core\xca\x02\rFlyteidl\\Core\xe2\x02\x19\x46lyteidl\\Core\\GPBMetadata\xea\x02\x0e\x46lyteidl::Coreb\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x19\x66lyteidl/core/tasks.proto\x12\rflyteidl.core\x1a\x1e\x66lyteidl/core/identifier.proto\x1a\x1d\x66lyteidl/core/interface.proto\x1a\x1c\x66lyteidl/core/literals.proto\x1a\x1c\x66lyteidl/core/security.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x1cgoogle/protobuf/struct.proto\"\xd0\x02\n\tResources\x12\x42\n\x08requests\x18\x01 \x03(\x0b\x32&.flyteidl.core.Resources.ResourceEntryR\x08requests\x12>\n\x06limits\x18\x02 \x03(\x0b\x32&.flyteidl.core.Resources.ResourceEntryR\x06limits\x1a`\n\rResourceEntry\x12\x39\n\x04name\x18\x01 \x01(\x0e\x32%.flyteidl.core.Resources.ResourceNameR\x04name\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value\"]\n\x0cResourceName\x12\x0b\n\x07UNKNOWN\x10\x00\x12\x07\n\x03\x43PU\x10\x01\x12\x07\n\x03GPU\x10\x02\x12\n\n\x06MEMORY\x10\x03\x12\x0b\n\x07STORAGE\x10\x04\x12\x15\n\x11\x45PHEMERAL_STORAGE\x10\x05\"\x91\x01\n\x0eGPUAccelerator\x12\x16\n\x06\x64\x65vice\x18\x01 \x01(\tR\x06\x64\x65vice\x12&\n\runpartitioned\x18\x02 \x01(\x08H\x00R\runpartitioned\x12\'\n\x0epartition_size\x18\x03 \x01(\tH\x00R\rpartitionSizeB\x16\n\x14partition_size_value\"[\n\x11\x45xtendedResources\x12\x46\n\x0fgpu_accelerator\x18\x01 \x01(\x0b\x32\x1d.flyteidl.core.GPUAcceleratorR\x0egpuAccelerator\"\xac\x01\n\x0fRuntimeMetadata\x12>\n\x04type\x18\x01 \x01(\x0e\x32*.flyteidl.core.RuntimeMetadata.RuntimeTypeR\x04type\x12\x18\n\x07version\x18\x02 \x01(\tR\x07version\x12\x16\n\x06\x66lavor\x18\x03 \x01(\tR\x06\x66lavor\"\'\n\x0bRuntimeType\x12\t\n\x05OTHER\x10\x00\x12\r\n\tFLYTE_SDK\x10\x01\"\xf5\x04\n\x0cTaskMetadata\x12\"\n\x0c\x64iscoverable\x18\x01 \x01(\x08R\x0c\x64iscoverable\x12\x38\n\x07runtime\x18\x02 \x01(\x0b\x32\x1e.flyteidl.core.RuntimeMetadataR\x07runtime\x12\x33\n\x07timeout\x18\x04 \x01(\x0b\x32\x19.google.protobuf.DurationR\x07timeout\x12\x36\n\x07retries\x18\x05 \x01(\x0b\x32\x1c.flyteidl.core.RetryStrategyR\x07retries\x12+\n\x11\x64iscovery_version\x18\x06 \x01(\tR\x10\x64iscoveryVersion\x12\x38\n\x18\x64\x65precated_error_message\x18\x07 \x01(\tR\x16\x64\x65precatedErrorMessage\x12&\n\rinterruptible\x18\x08 \x01(\x08H\x00R\rinterruptible\x12-\n\x12\x63\x61\x63he_serializable\x18\t \x01(\x08R\x11\x63\x61\x63heSerializable\x12%\n\x0egenerates_deck\x18\n \x01(\x08R\rgeneratesDeck\x12\x39\n\x04tags\x18\x0b \x03(\x0b\x32%.flyteidl.core.TaskMetadata.TagsEntryR\x04tags\x12*\n\x11pod_template_name\x18\x0c \x01(\tR\x0fpodTemplateName\x1a\x37\n\tTagsEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x42\x15\n\x13interruptible_value\"\xd6\x05\n\x0cTaskTemplate\x12)\n\x02id\x18\x01 \x01(\x0b\x32\x19.flyteidl.core.IdentifierR\x02id\x12\x12\n\x04type\x18\x02 \x01(\tR\x04type\x12\x37\n\x08metadata\x18\x03 \x01(\x0b\x32\x1b.flyteidl.core.TaskMetadataR\x08metadata\x12;\n\tinterface\x18\x04 \x01(\x0b\x32\x1d.flyteidl.core.TypedInterfaceR\tinterface\x12/\n\x06\x63ustom\x18\x05 \x01(\x0b\x32\x17.google.protobuf.StructR\x06\x63ustom\x12\x38\n\tcontainer\x18\x06 \x01(\x0b\x32\x18.flyteidl.core.ContainerH\x00R\tcontainer\x12\x30\n\x07k8s_pod\x18\x11 \x01(\x0b\x32\x15.flyteidl.core.K8sPodH\x00R\x06k8sPod\x12&\n\x03sql\x18\x12 \x01(\x0b\x32\x12.flyteidl.core.SqlH\x00R\x03sql\x12*\n\x11task_type_version\x18\x07 \x01(\x05R\x0ftaskTypeVersion\x12I\n\x10security_context\x18\x08 \x01(\x0b\x32\x1e.flyteidl.core.SecurityContextR\x0fsecurityContext\x12O\n\x12\x65xtended_resources\x18\t \x01(\x0b\x32 .flyteidl.core.ExtendedResourcesR\x11\x65xtendedResources\x12?\n\x06\x63onfig\x18\x10 \x03(\x0b\x32\'.flyteidl.core.TaskTemplate.ConfigEntryR\x06\x63onfig\x1a\x39\n\x0b\x43onfigEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x42\x08\n\x06target\"6\n\rContainerPort\x12%\n\x0e\x63ontainer_port\x18\x01 \x01(\rR\rcontainerPort\"\xfc\x03\n\tContainer\x12\x14\n\x05image\x18\x01 \x01(\tR\x05image\x12\x18\n\x07\x63ommand\x18\x02 \x03(\tR\x07\x63ommand\x12\x12\n\x04\x61rgs\x18\x03 \x03(\tR\x04\x61rgs\x12\x36\n\tresources\x18\x04 \x01(\x0b\x32\x18.flyteidl.core.ResourcesR\tresources\x12-\n\x03\x65nv\x18\x05 \x03(\x0b\x32\x1b.flyteidl.core.KeyValuePairR\x03\x65nv\x12\x37\n\x06\x63onfig\x18\x06 \x03(\x0b\x32\x1b.flyteidl.core.KeyValuePairB\x02\x18\x01R\x06\x63onfig\x12\x32\n\x05ports\x18\x07 \x03(\x0b\x32\x1c.flyteidl.core.ContainerPortR\x05ports\x12\x41\n\x0b\x64\x61ta_config\x18\t \x01(\x0b\x32 .flyteidl.core.DataLoadingConfigR\ndataConfig\x12I\n\x0c\x61rchitecture\x18\n \x01(\x0e\x32%.flyteidl.core.Container.ArchitectureR\x0c\x61rchitecture\"I\n\x0c\x41rchitecture\x12\x0b\n\x07UNKNOWN\x10\x00\x12\t\n\x05\x41MD64\x10\x01\x12\t\n\x05\x41RM64\x10\x02\x12\n\n\x06\x41RM_V6\x10\x03\x12\n\n\x06\x41RM_V7\x10\x04\"\xb5\x02\n\nIOStrategy\x12K\n\rdownload_mode\x18\x01 \x01(\x0e\x32&.flyteidl.core.IOStrategy.DownloadModeR\x0c\x64ownloadMode\x12\x45\n\x0bupload_mode\x18\x02 \x01(\x0e\x32$.flyteidl.core.IOStrategy.UploadModeR\nuploadMode\"L\n\x0c\x44ownloadMode\x12\x12\n\x0e\x44OWNLOAD_EAGER\x10\x00\x12\x13\n\x0f\x44OWNLOAD_STREAM\x10\x01\x12\x13\n\x0f\x44O_NOT_DOWNLOAD\x10\x02\"E\n\nUploadMode\x12\x12\n\x0eUPLOAD_ON_EXIT\x10\x00\x12\x10\n\x0cUPLOAD_EAGER\x10\x01\x12\x11\n\rDO_NOT_UPLOAD\x10\x02\"\xa7\x02\n\x11\x44\x61taLoadingConfig\x12\x18\n\x07\x65nabled\x18\x01 \x01(\x08R\x07\x65nabled\x12\x1d\n\ninput_path\x18\x02 \x01(\tR\tinputPath\x12\x1f\n\x0boutput_path\x18\x03 \x01(\tR\noutputPath\x12I\n\x06\x66ormat\x18\x04 \x01(\x0e\x32\x31.flyteidl.core.DataLoadingConfig.LiteralMapFormatR\x06\x66ormat\x12:\n\x0bio_strategy\x18\x05 \x01(\x0b\x32\x19.flyteidl.core.IOStrategyR\nioStrategy\"1\n\x10LiteralMapFormat\x12\x08\n\x04JSON\x10\x00\x12\x08\n\x04YAML\x10\x01\x12\t\n\x05PROTO\x10\x02\"\xbd\x01\n\x06K8sPod\x12<\n\x08metadata\x18\x01 \x01(\x0b\x32 .flyteidl.core.K8sObjectMetadataR\x08metadata\x12\x32\n\x08pod_spec\x18\x02 \x01(\x0b\x32\x17.google.protobuf.StructR\x07podSpec\x12\x41\n\x0b\x64\x61ta_config\x18\x03 \x01(\x0b\x32 .flyteidl.core.DataLoadingConfigR\ndataConfig\"\xa9\x02\n\x11K8sObjectMetadata\x12\x44\n\x06labels\x18\x01 \x03(\x0b\x32,.flyteidl.core.K8sObjectMetadata.LabelsEntryR\x06labels\x12S\n\x0b\x61nnotations\x18\x02 \x03(\x0b\x32\x31.flyteidl.core.K8sObjectMetadata.AnnotationsEntryR\x0b\x61nnotations\x1a\x39\n\x0bLabelsEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x1a>\n\x10\x41nnotationsEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\"\x92\x01\n\x03Sql\x12\x1c\n\tstatement\x18\x01 \x01(\tR\tstatement\x12\x34\n\x07\x64ialect\x18\x02 \x01(\x0e\x32\x1a.flyteidl.core.Sql.DialectR\x07\x64ialect\"7\n\x07\x44ialect\x12\r\n\tUNDEFINED\x10\x00\x12\x08\n\x04\x41NSI\x10\x01\x12\x08\n\x04HIVE\x10\x02\x12\t\n\x05OTHER\x10\x03\x42\xb0\x01\n\x11\x63om.flyteidl.coreB\nTasksProtoP\x01Z:github.com/flyteorg/flyte/flyteidl/gen/pb-go/flyteidl/core\xa2\x02\x03\x46\x43X\xaa\x02\rFlyteidl.Core\xca\x02\rFlyteidl\\Core\xe2\x02\x19\x46lyteidl\\Core\\GPBMetadata\xea\x02\x0e\x46lyteidl::Coreb\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -49,45 +49,43 @@ _globals['_EXTENDEDRESOURCES']._serialized_start=716 _globals['_EXTENDEDRESOURCES']._serialized_end=807 _globals['_RUNTIMEMETADATA']._serialized_start=810 - _globals['_RUNTIMEMETADATA']._serialized_end=1054 - _globals['_RUNTIMEMETADATA_RUNTIMETYPE']._serialized_start=1015 - _globals['_RUNTIMEMETADATA_RUNTIMETYPE']._serialized_end=1054 - _globals['_PLUGINMETADATA']._serialized_start=1056 - _globals['_PLUGINMETADATA']._serialized_end=1110 - _globals['_TASKMETADATA']._serialized_start=1113 - _globals['_TASKMETADATA']._serialized_end=1742 - _globals['_TASKMETADATA_TAGSENTRY']._serialized_start=1664 - _globals['_TASKMETADATA_TAGSENTRY']._serialized_end=1719 - _globals['_TASKTEMPLATE']._serialized_start=1745 - _globals['_TASKTEMPLATE']._serialized_end=2471 - _globals['_TASKTEMPLATE_CONFIGENTRY']._serialized_start=2404 - _globals['_TASKTEMPLATE_CONFIGENTRY']._serialized_end=2461 - _globals['_CONTAINERPORT']._serialized_start=2473 - _globals['_CONTAINERPORT']._serialized_end=2527 - _globals['_CONTAINER']._serialized_start=2530 - _globals['_CONTAINER']._serialized_end=3038 - _globals['_CONTAINER_ARCHITECTURE']._serialized_start=2965 - _globals['_CONTAINER_ARCHITECTURE']._serialized_end=3038 - _globals['_IOSTRATEGY']._serialized_start=3041 - _globals['_IOSTRATEGY']._serialized_end=3350 - _globals['_IOSTRATEGY_DOWNLOADMODE']._serialized_start=3203 - _globals['_IOSTRATEGY_DOWNLOADMODE']._serialized_end=3279 - _globals['_IOSTRATEGY_UPLOADMODE']._serialized_start=3281 - _globals['_IOSTRATEGY_UPLOADMODE']._serialized_end=3350 - _globals['_DATALOADINGCONFIG']._serialized_start=3353 - _globals['_DATALOADINGCONFIG']._serialized_end=3648 - _globals['_DATALOADINGCONFIG_LITERALMAPFORMAT']._serialized_start=3599 - _globals['_DATALOADINGCONFIG_LITERALMAPFORMAT']._serialized_end=3648 - _globals['_K8SPOD']._serialized_start=3651 - _globals['_K8SPOD']._serialized_end=3840 - _globals['_K8SOBJECTMETADATA']._serialized_start=3843 - _globals['_K8SOBJECTMETADATA']._serialized_end=4140 - _globals['_K8SOBJECTMETADATA_LABELSENTRY']._serialized_start=4019 - _globals['_K8SOBJECTMETADATA_LABELSENTRY']._serialized_end=4076 - _globals['_K8SOBJECTMETADATA_ANNOTATIONSENTRY']._serialized_start=4078 - _globals['_K8SOBJECTMETADATA_ANNOTATIONSENTRY']._serialized_end=4140 - _globals['_SQL']._serialized_start=4143 - _globals['_SQL']._serialized_end=4289 - _globals['_SQL_DIALECT']._serialized_start=4234 - _globals['_SQL_DIALECT']._serialized_end=4289 + _globals['_RUNTIMEMETADATA']._serialized_end=982 + _globals['_RUNTIMEMETADATA_RUNTIMETYPE']._serialized_start=943 + _globals['_RUNTIMEMETADATA_RUNTIMETYPE']._serialized_end=982 + _globals['_TASKMETADATA']._serialized_start=985 + _globals['_TASKMETADATA']._serialized_end=1614 + _globals['_TASKMETADATA_TAGSENTRY']._serialized_start=1536 + _globals['_TASKMETADATA_TAGSENTRY']._serialized_end=1591 + _globals['_TASKTEMPLATE']._serialized_start=1617 + _globals['_TASKTEMPLATE']._serialized_end=2343 + _globals['_TASKTEMPLATE_CONFIGENTRY']._serialized_start=2276 + _globals['_TASKTEMPLATE_CONFIGENTRY']._serialized_end=2333 + _globals['_CONTAINERPORT']._serialized_start=2345 + _globals['_CONTAINERPORT']._serialized_end=2399 + _globals['_CONTAINER']._serialized_start=2402 + _globals['_CONTAINER']._serialized_end=2910 + _globals['_CONTAINER_ARCHITECTURE']._serialized_start=2837 + _globals['_CONTAINER_ARCHITECTURE']._serialized_end=2910 + _globals['_IOSTRATEGY']._serialized_start=2913 + _globals['_IOSTRATEGY']._serialized_end=3222 + _globals['_IOSTRATEGY_DOWNLOADMODE']._serialized_start=3075 + _globals['_IOSTRATEGY_DOWNLOADMODE']._serialized_end=3151 + _globals['_IOSTRATEGY_UPLOADMODE']._serialized_start=3153 + _globals['_IOSTRATEGY_UPLOADMODE']._serialized_end=3222 + _globals['_DATALOADINGCONFIG']._serialized_start=3225 + _globals['_DATALOADINGCONFIG']._serialized_end=3520 + _globals['_DATALOADINGCONFIG_LITERALMAPFORMAT']._serialized_start=3471 + _globals['_DATALOADINGCONFIG_LITERALMAPFORMAT']._serialized_end=3520 + _globals['_K8SPOD']._serialized_start=3523 + _globals['_K8SPOD']._serialized_end=3712 + _globals['_K8SOBJECTMETADATA']._serialized_start=3715 + _globals['_K8SOBJECTMETADATA']._serialized_end=4012 + _globals['_K8SOBJECTMETADATA_LABELSENTRY']._serialized_start=3891 + _globals['_K8SOBJECTMETADATA_LABELSENTRY']._serialized_end=3948 + _globals['_K8SOBJECTMETADATA_ANNOTATIONSENTRY']._serialized_start=3950 + _globals['_K8SOBJECTMETADATA_ANNOTATIONSENTRY']._serialized_end=4012 + _globals['_SQL']._serialized_start=4015 + _globals['_SQL']._serialized_end=4161 + _globals['_SQL_DIALECT']._serialized_start=4106 + _globals['_SQL_DIALECT']._serialized_end=4161 # @@protoc_insertion_point(module_scope) diff --git a/flyteidl/gen/pb_python/flyteidl/core/tasks_pb2.pyi b/flyteidl/gen/pb_python/flyteidl/core/tasks_pb2.pyi index 30fa5134da..0545239443 100644 --- a/flyteidl/gen/pb_python/flyteidl/core/tasks_pb2.pyi +++ b/flyteidl/gen/pb_python/flyteidl/core/tasks_pb2.pyi @@ -58,7 +58,7 @@ class ExtendedResources(_message.Message): def __init__(self, gpu_accelerator: _Optional[_Union[GPUAccelerator, _Mapping]] = ...) -> None: ... class RuntimeMetadata(_message.Message): - __slots__ = ["type", "version", "flavor", "plugin_metadata"] + __slots__ = ["type", "version", "flavor"] class RuntimeType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): __slots__ = [] OTHER: _ClassVar[RuntimeMetadata.RuntimeType] @@ -68,18 +68,10 @@ class RuntimeMetadata(_message.Message): TYPE_FIELD_NUMBER: _ClassVar[int] VERSION_FIELD_NUMBER: _ClassVar[int] FLAVOR_FIELD_NUMBER: _ClassVar[int] - PLUGIN_METADATA_FIELD_NUMBER: _ClassVar[int] type: RuntimeMetadata.RuntimeType version: str flavor: str - plugin_metadata: PluginMetadata - def __init__(self, type: _Optional[_Union[RuntimeMetadata.RuntimeType, str]] = ..., version: _Optional[str] = ..., flavor: _Optional[str] = ..., plugin_metadata: _Optional[_Union[PluginMetadata, _Mapping]] = ...) -> None: ... - -class PluginMetadata(_message.Message): - __slots__ = ["is_sync_plugin"] - IS_SYNC_PLUGIN_FIELD_NUMBER: _ClassVar[int] - is_sync_plugin: bool - def __init__(self, is_sync_plugin: bool = ...) -> None: ... + def __init__(self, type: _Optional[_Union[RuntimeMetadata.RuntimeType, str]] = ..., version: _Optional[str] = ..., flavor: _Optional[str] = ...) -> None: ... class TaskMetadata(_message.Message): __slots__ = ["discoverable", "runtime", "timeout", "retries", "discovery_version", "deprecated_error_message", "interruptible", "cache_serializable", "generates_deck", "tags", "pod_template_name"] diff --git a/flyteidl/gen/pb_python/flyteidl/service/agent_pb2.py b/flyteidl/gen/pb_python/flyteidl/service/agent_pb2.py index e79a585b22..8227bdc438 100644 --- a/flyteidl/gen/pb_python/flyteidl/service/agent_pb2.py +++ b/flyteidl/gen/pb_python/flyteidl/service/agent_pb2.py @@ -14,7 +14,7 @@ from flyteidl.admin import agent_pb2 as flyteidl_dot_admin_dot_agent__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1c\x66lyteidl/service/agent.proto\x12\x10\x66lyteidl.service\x1a\x1a\x66lyteidl/admin/agent.proto2\x8a\x02\n\x0c\x41gentService\x12U\n\nCreateTask\x12!.flyteidl.admin.CreateTaskRequest\x1a\".flyteidl.admin.CreateTaskResponse\"\x00\x12L\n\x07GetTask\x12\x1e.flyteidl.admin.GetTaskRequest\x1a\x1f.flyteidl.admin.GetTaskResponse\"\x00\x12U\n\nDeleteTask\x12!.flyteidl.admin.DeleteTaskRequest\x1a\".flyteidl.admin.DeleteTaskResponse\"\x00\x42\xc2\x01\n\x14\x63om.flyteidl.serviceB\nAgentProtoP\x01Z=github.com/flyteorg/flyte/flyteidl/gen/pb-go/flyteidl/service\xa2\x02\x03\x46SX\xaa\x02\x10\x46lyteidl.Service\xca\x02\x10\x46lyteidl\\Service\xe2\x02\x1c\x46lyteidl\\Service\\GPBMetadata\xea\x02\x11\x46lyteidl::Serviceb\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1c\x66lyteidl/service/agent.proto\x12\x10\x66lyteidl.service\x1a\x1a\x66lyteidl/admin/agent.proto2\x8f\x02\n\x11\x41syncAgentService\x12U\n\nCreateTask\x12!.flyteidl.admin.CreateTaskRequest\x1a\".flyteidl.admin.CreateTaskResponse\"\x00\x12L\n\x07GetTask\x12\x1e.flyteidl.admin.GetTaskRequest\x1a\x1f.flyteidl.admin.GetTaskResponse\"\x00\x12U\n\nDeleteTask\x12!.flyteidl.admin.DeleteTaskRequest\x1a\".flyteidl.admin.DeleteTaskResponse\"\x00\x42\xc2\x01\n\x14\x63om.flyteidl.serviceB\nAgentProtoP\x01Z=github.com/flyteorg/flyte/flyteidl/gen/pb-go/flyteidl/service\xa2\x02\x03\x46SX\xaa\x02\x10\x46lyteidl.Service\xca\x02\x10\x46lyteidl\\Service\xe2\x02\x1c\x46lyteidl\\Service\\GPBMetadata\xea\x02\x11\x46lyteidl::Serviceb\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -23,6 +23,6 @@ DESCRIPTOR._options = None DESCRIPTOR._serialized_options = b'\n\024com.flyteidl.serviceB\nAgentProtoP\001Z=github.com/flyteorg/flyte/flyteidl/gen/pb-go/flyteidl/service\242\002\003FSX\252\002\020Flyteidl.Service\312\002\020Flyteidl\\Service\342\002\034Flyteidl\\Service\\GPBMetadata\352\002\021Flyteidl::Service' - _globals['_AGENTSERVICE']._serialized_start=79 - _globals['_AGENTSERVICE']._serialized_end=345 + _globals['_ASYNCAGENTSERVICE']._serialized_start=79 + _globals['_ASYNCAGENTSERVICE']._serialized_end=350 # @@protoc_insertion_point(module_scope) diff --git a/flyteidl/gen/pb_python/flyteidl/service/agent_pb2_grpc.py b/flyteidl/gen/pb_python/flyteidl/service/agent_pb2_grpc.py index c9e0d9d0a1..e95380f467 100644 --- a/flyteidl/gen/pb_python/flyteidl/service/agent_pb2_grpc.py +++ b/flyteidl/gen/pb_python/flyteidl/service/agent_pb2_grpc.py @@ -5,7 +5,7 @@ from flyteidl.admin import agent_pb2 as flyteidl_dot_admin_dot_agent__pb2 -class AgentServiceStub(object): +class AsyncAgentServiceStub(object): """AgentService defines an RPC Service that allows propeller to send the request to the agent server. It can handle asynchronous tasks and synchronous tasks. Asynchronous tasks are for tasks running long, for example running query job. @@ -19,23 +19,23 @@ def __init__(self, channel): channel: A grpc.Channel. """ self.CreateTask = channel.unary_unary( - '/flyteidl.service.AgentService/CreateTask', + '/flyteidl.service.AsyncAgentService/CreateTask', request_serializer=flyteidl_dot_admin_dot_agent__pb2.CreateTaskRequest.SerializeToString, response_deserializer=flyteidl_dot_admin_dot_agent__pb2.CreateTaskResponse.FromString, ) self.GetTask = channel.unary_unary( - '/flyteidl.service.AgentService/GetTask', + '/flyteidl.service.AsyncAgentService/GetTask', request_serializer=flyteidl_dot_admin_dot_agent__pb2.GetTaskRequest.SerializeToString, response_deserializer=flyteidl_dot_admin_dot_agent__pb2.GetTaskResponse.FromString, ) self.DeleteTask = channel.unary_unary( - '/flyteidl.service.AgentService/DeleteTask', + '/flyteidl.service.AsyncAgentService/DeleteTask', request_serializer=flyteidl_dot_admin_dot_agent__pb2.DeleteTaskRequest.SerializeToString, response_deserializer=flyteidl_dot_admin_dot_agent__pb2.DeleteTaskResponse.FromString, ) -class AgentServiceServicer(object): +class AsyncAgentServiceServicer(object): """AgentService defines an RPC Service that allows propeller to send the request to the agent server. It can handle asynchronous tasks and synchronous tasks. Asynchronous tasks are for tasks running long, for example running query job. @@ -64,7 +64,7 @@ def DeleteTask(self, request, context): raise NotImplementedError('Method not implemented!') -def add_AgentServiceServicer_to_server(servicer, server): +def add_AsyncAgentServiceServicer_to_server(servicer, server): rpc_method_handlers = { 'CreateTask': grpc.unary_unary_rpc_method_handler( servicer.CreateTask, @@ -83,12 +83,12 @@ def add_AgentServiceServicer_to_server(servicer, server): ), } generic_handler = grpc.method_handlers_generic_handler( - 'flyteidl.service.AgentService', rpc_method_handlers) + 'flyteidl.service.AsyncAgentService', rpc_method_handlers) server.add_generic_rpc_handlers((generic_handler,)) # This class is part of an EXPERIMENTAL API. -class AgentService(object): +class AsyncAgentService(object): """AgentService defines an RPC Service that allows propeller to send the request to the agent server. It can handle asynchronous tasks and synchronous tasks. Asynchronous tasks are for tasks running long, for example running query job. @@ -106,7 +106,7 @@ def CreateTask(request, wait_for_ready=None, timeout=None, metadata=None): - return grpc.experimental.unary_unary(request, target, '/flyteidl.service.AgentService/CreateTask', + return grpc.experimental.unary_unary(request, target, '/flyteidl.service.AsyncAgentService/CreateTask', flyteidl_dot_admin_dot_agent__pb2.CreateTaskRequest.SerializeToString, flyteidl_dot_admin_dot_agent__pb2.CreateTaskResponse.FromString, options, channel_credentials, @@ -123,7 +123,7 @@ def GetTask(request, wait_for_ready=None, timeout=None, metadata=None): - return grpc.experimental.unary_unary(request, target, '/flyteidl.service.AgentService/GetTask', + return grpc.experimental.unary_unary(request, target, '/flyteidl.service.AsyncAgentService/GetTask', flyteidl_dot_admin_dot_agent__pb2.GetTaskRequest.SerializeToString, flyteidl_dot_admin_dot_agent__pb2.GetTaskResponse.FromString, options, channel_credentials, @@ -140,7 +140,7 @@ def DeleteTask(request, wait_for_ready=None, timeout=None, metadata=None): - return grpc.experimental.unary_unary(request, target, '/flyteidl.service.AgentService/DeleteTask', + return grpc.experimental.unary_unary(request, target, '/flyteidl.service.AsyncAgentService/DeleteTask', flyteidl_dot_admin_dot_agent__pb2.DeleteTaskRequest.SerializeToString, flyteidl_dot_admin_dot_agent__pb2.DeleteTaskResponse.FromString, options, channel_credentials, diff --git a/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/README.md b/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/README.md index 6efb0c01c2..e255b6e308 100644 --- a/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/README.md +++ b/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/README.md @@ -315,7 +315,6 @@ Class | Method | HTTP request | Description - [CoreOutputReference](docs/CoreOutputReference.md) - [CoreParameter](docs/CoreParameter.md) - [CoreParameterMap](docs/CoreParameterMap.md) - - [CorePluginMetadata](docs/CorePluginMetadata.md) - [CorePrimitive](docs/CorePrimitive.md) - [CorePromiseAttribute](docs/CorePromiseAttribute.md) - [CoreQualityOfService](docs/CoreQualityOfService.md) diff --git a/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/__init__.py b/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/__init__.py index f939a511bb..18f679a7f0 100644 --- a/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/__init__.py +++ b/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/__init__.py @@ -206,7 +206,6 @@ from flyteadmin.models.core_output_reference import CoreOutputReference from flyteadmin.models.core_parameter import CoreParameter from flyteadmin.models.core_parameter_map import CoreParameterMap -from flyteadmin.models.core_plugin_metadata import CorePluginMetadata from flyteadmin.models.core_primitive import CorePrimitive from flyteadmin.models.core_promise_attribute import CorePromiseAttribute from flyteadmin.models.core_quality_of_service import CoreQualityOfService diff --git a/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/__init__.py b/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/__init__.py index 0385a9da43..457a507c4f 100644 --- a/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/__init__.py +++ b/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/__init__.py @@ -199,7 +199,6 @@ from flyteadmin.models.core_output_reference import CoreOutputReference from flyteadmin.models.core_parameter import CoreParameter from flyteadmin.models.core_parameter_map import CoreParameterMap -from flyteadmin.models.core_plugin_metadata import CorePluginMetadata from flyteadmin.models.core_primitive import CorePrimitive from flyteadmin.models.core_promise_attribute import CorePromiseAttribute from flyteadmin.models.core_quality_of_service import CoreQualityOfService diff --git a/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/core_plugin_metadata.py b/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/core_plugin_metadata.py deleted file mode 100644 index e829e7d098..0000000000 --- a/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/core_plugin_metadata.py +++ /dev/null @@ -1,117 +0,0 @@ -# coding: utf-8 - -""" - flyteidl/service/admin.proto - - No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) # noqa: E501 - - OpenAPI spec version: version not set - - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - - -import pprint -import re # noqa: F401 - -import six - - -class CorePluginMetadata(object): - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = { - 'is_sync_plugin': 'bool' - } - - attribute_map = { - 'is_sync_plugin': 'is_sync_plugin' - } - - def __init__(self, is_sync_plugin=None): # noqa: E501 - """CorePluginMetadata - a model defined in Swagger""" # noqa: E501 - - self._is_sync_plugin = None - self.discriminator = None - - if is_sync_plugin is not None: - self.is_sync_plugin = is_sync_plugin - - @property - def is_sync_plugin(self): - """Gets the is_sync_plugin of this CorePluginMetadata. # noqa: E501 - - +optional It can be used to decide use sync plugin or async plugin during runtime. # noqa: E501 - - :return: The is_sync_plugin of this CorePluginMetadata. # noqa: E501 - :rtype: bool - """ - return self._is_sync_plugin - - @is_sync_plugin.setter - def is_sync_plugin(self, is_sync_plugin): - """Sets the is_sync_plugin of this CorePluginMetadata. - - +optional It can be used to decide use sync plugin or async plugin during runtime. # noqa: E501 - - :param is_sync_plugin: The is_sync_plugin of this CorePluginMetadata. # noqa: E501 - :type: bool - """ - - self._is_sync_plugin = is_sync_plugin - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list(map( - lambda x: x.to_dict() if hasattr(x, "to_dict") else x, - value - )) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict(map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") else item, - value.items() - )) - else: - result[attr] = value - if issubclass(CorePluginMetadata, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, CorePluginMetadata): - return False - - return self.__dict__ == other.__dict__ - - def __ne__(self, other): - """Returns true if both objects are not equal""" - return not self == other diff --git a/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/core_runtime_metadata.py b/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/core_runtime_metadata.py index 26f97e81ea..b14a330293 100644 --- a/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/core_runtime_metadata.py +++ b/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/core_runtime_metadata.py @@ -16,7 +16,6 @@ import six -from flyteadmin.models.core_plugin_metadata import CorePluginMetadata # noqa: F401,E501 from flyteadmin.models.runtime_metadata_runtime_type import RuntimeMetadataRuntimeType # noqa: F401,E501 @@ -36,24 +35,21 @@ class CoreRuntimeMetadata(object): swagger_types = { 'type': 'RuntimeMetadataRuntimeType', 'version': 'str', - 'flavor': 'str', - 'plugin_metadata': 'CorePluginMetadata' + 'flavor': 'str' } attribute_map = { 'type': 'type', 'version': 'version', - 'flavor': 'flavor', - 'plugin_metadata': 'plugin_metadata' + 'flavor': 'flavor' } - def __init__(self, type=None, version=None, flavor=None, plugin_metadata=None): # noqa: E501 + def __init__(self, type=None, version=None, flavor=None): # noqa: E501 """CoreRuntimeMetadata - a model defined in Swagger""" # noqa: E501 self._type = None self._version = None self._flavor = None - self._plugin_metadata = None self.discriminator = None if type is not None: @@ -62,8 +58,6 @@ def __init__(self, type=None, version=None, flavor=None, plugin_metadata=None): self.version = version if flavor is not None: self.flavor = flavor - if plugin_metadata is not None: - self.plugin_metadata = plugin_metadata @property def type(self): @@ -134,29 +128,6 @@ def flavor(self, flavor): self._flavor = flavor - @property - def plugin_metadata(self): - """Gets the plugin_metadata of this CoreRuntimeMetadata. # noqa: E501 - - +optional It can be used to provide extra information for the plugin. # noqa: E501 - - :return: The plugin_metadata of this CoreRuntimeMetadata. # noqa: E501 - :rtype: CorePluginMetadata - """ - return self._plugin_metadata - - @plugin_metadata.setter - def plugin_metadata(self, plugin_metadata): - """Sets the plugin_metadata of this CoreRuntimeMetadata. - - +optional It can be used to provide extra information for the plugin. # noqa: E501 - - :param plugin_metadata: The plugin_metadata of this CoreRuntimeMetadata. # noqa: E501 - :type: CorePluginMetadata - """ - - self._plugin_metadata = plugin_metadata - def to_dict(self): """Returns the model properties as a dict""" result = {} diff --git a/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/test/test_core_plugin_metadata.py b/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/test/test_core_plugin_metadata.py deleted file mode 100644 index 11d641cbad..0000000000 --- a/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/test/test_core_plugin_metadata.py +++ /dev/null @@ -1,40 +0,0 @@ -# coding: utf-8 - -""" - flyteidl/service/admin.proto - - No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) # noqa: E501 - - OpenAPI spec version: version not set - - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - - -from __future__ import absolute_import - -import unittest - -import flyteadmin -from flyteadmin.models.core_plugin_metadata import CorePluginMetadata # noqa: E501 -from flyteadmin.rest import ApiException - - -class TestCorePluginMetadata(unittest.TestCase): - """CorePluginMetadata unit test stubs""" - - def setUp(self): - pass - - def tearDown(self): - pass - - def testCorePluginMetadata(self): - """Test CorePluginMetadata""" - # FIXME: construct object with mandatory attributes with example values - # model = flyteadmin.models.core_plugin_metadata.CorePluginMetadata() # noqa: E501 - pass - - -if __name__ == '__main__': - unittest.main() diff --git a/flyteidl/gen/pb_rust/flyteidl.admin.rs b/flyteidl/gen/pb_rust/flyteidl.admin.rs index 26cadea990..f5deb2a547 100644 --- a/flyteidl/gen/pb_rust/flyteidl.admin.rs +++ b/flyteidl/gen/pb_rust/flyteidl.admin.rs @@ -101,6 +101,9 @@ pub struct Resource { /// A descriptive message for the current state. e.g. waiting for cluster. #[prost(string, tag="3")] pub message: ::prost::alloc::string::String, + /// log information for the task execution. + #[prost(message, repeated, tag="4")] + pub log_links: ::prost::alloc::vec::Vec, } /// A message used to delete a task. #[allow(clippy::derive_partial_eq_without_eq)] diff --git a/flyteidl/gen/pb_rust/flyteidl.core.rs b/flyteidl/gen/pb_rust/flyteidl.core.rs index b3aab26ac5..bc39cf1d9c 100644 --- a/flyteidl/gen/pb_rust/flyteidl.core.rs +++ b/flyteidl/gen/pb_rust/flyteidl.core.rs @@ -1067,9 +1067,6 @@ pub struct RuntimeMetadata { /// +optional It can be used to provide extra information about the runtime (e.g. python, golang... etc.). #[prost(string, tag="3")] pub flavor: ::prost::alloc::string::String, - /// +optional It can be used to provide extra information for the plugin. - #[prost(message, optional, tag="4")] - pub plugin_metadata: ::core::option::Option, } /// Nested message and enum types in `RuntimeMetadata`. pub mod runtime_metadata { @@ -1100,13 +1097,6 @@ pub mod runtime_metadata { } } } -#[allow(clippy::derive_partial_eq_without_eq)] -#[derive(Clone, PartialEq, ::prost::Message)] -pub struct PluginMetadata { - /// +optional It can be used to decide use sync plugin or async plugin during runtime. - #[prost(bool, tag="1")] - pub is_sync_plugin: bool, -} /// Task Metadata #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] diff --git a/flyteidl/protos/flyteidl/admin/agent.proto b/flyteidl/protos/flyteidl/admin/agent.proto index 6e86a2db02..222c031c5b 100644 --- a/flyteidl/protos/flyteidl/admin/agent.proto +++ b/flyteidl/protos/flyteidl/admin/agent.proto @@ -84,6 +84,8 @@ message Resource { core.LiteralMap outputs = 2; // A descriptive message for the current state. e.g. waiting for cluster. string message = 3; + // log information for the task execution. + repeated core.TaskLog log_links = 4; } // A message used to delete a task. diff --git a/flyteidl/protos/flyteidl/core/tasks.proto b/flyteidl/protos/flyteidl/core/tasks.proto index 2311a403a6..3d3f4b6abf 100644 --- a/flyteidl/protos/flyteidl/core/tasks.proto +++ b/flyteidl/protos/flyteidl/core/tasks.proto @@ -84,14 +84,6 @@ message RuntimeMetadata { //+optional It can be used to provide extra information about the runtime (e.g. python, golang... etc.). string flavor = 3; - - //+optional It can be used to provide extra information for the plugin. - PluginMetadata plugin_metadata = 4; -} - -message PluginMetadata { - //+optional It can be used to decide use sync plugin or async plugin during runtime. - bool is_sync_plugin = 1; } // Task Metadata diff --git a/flyteidl/protos/flyteidl/service/agent.proto b/flyteidl/protos/flyteidl/service/agent.proto index ee99732705..63b061dc3d 100644 --- a/flyteidl/protos/flyteidl/service/agent.proto +++ b/flyteidl/protos/flyteidl/service/agent.proto @@ -8,7 +8,7 @@ import "flyteidl/admin/agent.proto"; // It can handle asynchronous tasks and synchronous tasks. // Asynchronous tasks are for tasks running long, for example running query job. // Synchronous tasks are for tasks running quick, for example, you want to execute something really fast, or even retrieving some metadata from a backend service. -service AgentService { +service AsyncAgentService { // Send a task create request to the agent server. rpc CreateTask (flyteidl.admin.CreateTaskRequest) returns (flyteidl.admin.CreateTaskResponse){}; // Get job status. diff --git a/flyteplugins/go/tasks/pluginmachinery/internal/webapi/core.go b/flyteplugins/go/tasks/pluginmachinery/internal/webapi/core.go index 793b700196..40cbb39d85 100644 --- a/flyteplugins/go/tasks/pluginmachinery/internal/webapi/core.go +++ b/flyteplugins/go/tasks/pluginmachinery/internal/webapi/core.go @@ -8,7 +8,6 @@ import ( "k8s.io/utils/clock" - flyteIdlCore "github.com/flyteorg/flyte/flyteidl/gen/pb-go/flyteidl/core" "github.com/flyteorg/flyte/flyteplugins/go/tasks/errors" "github.com/flyteorg/flyte/flyteplugins/go/tasks/pluginmachinery/core" "github.com/flyteorg/flyte/flyteplugins/go/tasks/pluginmachinery/webapi" @@ -33,7 +32,7 @@ const ( type CorePlugin struct { id string - p webapi.Plugin + p webapi.AsyncPlugin cache cache.AutoRefresh tokenAllocator tokenAllocator metrics Metrics @@ -66,37 +65,7 @@ func (c CorePlugin) GetProperties() core.PluginProperties { return core.PluginProperties{} } -func (c CorePlugin) toSyncPlugin() (webapi.SyncPlugin, error) { - plugin, ok := c.p.(webapi.SyncPlugin) - if !ok { - return nil, fmt.Errorf("core plugin does not implement the sync plugin interface") - } - return plugin, nil -} - -func (c CorePlugin) toAsyncPlugin() (webapi.AsyncPlugin, error) { - plugin, ok := c.p.(webapi.AsyncPlugin) - if !ok { - return nil, fmt.Errorf("core plugin does not implement the async plugin interface") - } - return plugin, nil -} - -func (c CorePlugin) syncHandle(ctx context.Context, tCtx core.TaskExecutionContext) (core.Transition, error) { - plugin, err := c.toSyncPlugin() - if err != nil { - return core.UnknownTransition, err - } - - phaseInfo, err := plugin.Do(ctx, tCtx) - if err != nil { - return core.UnknownTransition, err - } - - return core.DoTransition(phaseInfo), nil -} - -func (c CorePlugin) asyncHandle(ctx context.Context, tCtx core.TaskExecutionContext) (core.Transition, error) { +func (c CorePlugin) Handle(ctx context.Context, tCtx core.TaskExecutionContext) (core.Transition, error) { incomingState, err := c.unmarshalState(ctx, tCtx.PluginStateReader()) if err != nil { return core.UnknownTransition, err @@ -105,7 +74,6 @@ func (c CorePlugin) asyncHandle(ctx context.Context, tCtx core.TaskExecutionCont var nextState *State var phaseInfo core.PhaseInfo - plugin, err := c.toAsyncPlugin() if err != nil { return core.UnknownTransition, err } @@ -113,14 +81,14 @@ func (c CorePlugin) asyncHandle(ctx context.Context, tCtx core.TaskExecutionCont switch incomingState.Phase { case PhaseNotStarted: if len(c.p.GetConfig().ResourceQuotas) > 0 { - nextState, phaseInfo, err = c.tokenAllocator.allocateToken(ctx, plugin, tCtx, &incomingState, c.metrics) + nextState, phaseInfo, err = c.tokenAllocator.allocateToken(ctx, c.p, tCtx, &incomingState, c.metrics) } else { - nextState, phaseInfo, err = launch(ctx, plugin, tCtx, c.cache, &incomingState) + nextState, phaseInfo, err = launch(ctx, c.p, tCtx, c.cache, &incomingState) } case PhaseAllocationTokenAcquired: - nextState, phaseInfo, err = launch(ctx, plugin, tCtx, c.cache, &incomingState) + nextState, phaseInfo, err = launch(ctx, c.p, tCtx, c.cache, &incomingState) case PhaseResourcesCreated: - nextState, phaseInfo, err = monitor(ctx, tCtx, plugin, c.cache, &incomingState) + nextState, phaseInfo, err = monitor(ctx, tCtx, c.p, c.cache, &incomingState) } if err != nil { @@ -134,44 +102,6 @@ func (c CorePlugin) asyncHandle(ctx context.Context, tCtx core.TaskExecutionCont return core.DoTransition(phaseInfo), nil } -func (c CorePlugin) useSyncPlugin(taskTemplate *flyteIdlCore.TaskTemplate) bool { - // Use the sync plugin to execute the task if the task template set is_sync_plugin as True. - // Assume the plugin is an async plugin by default. - // This helps maintain backward compatibility with existing implementations that - // expect an async plugin by default, thereby avoiding breaking changes. - metadata := taskTemplate.GetMetadata() - if metadata != nil { - runtime := metadata.GetRuntime() - if runtime != nil { - pluginMetadata := runtime.GetPluginMetadata() - if pluginMetadata != nil { - return pluginMetadata.GetIsSyncPlugin() - } - } - } - - return false -} - -func (c CorePlugin) Handle(ctx context.Context, tCtx core.TaskExecutionContext) (core.Transition, error) { - taskTemplate, err := tCtx.TaskReader().Read(ctx) - if err != nil { - return core.UnknownTransition, err - } - - var phase core.Transition - if c.useSyncPlugin(taskTemplate) { - phase, err = c.syncHandle(ctx, tCtx) - } else { - phase, err = c.asyncHandle(ctx, tCtx) - } - if err != nil { - logger.Errorf(ctx, "failed to run [%v] task with err: [%v]", taskTemplate.GetType(), err) - } - - return phase, err -} - func (c CorePlugin) Abort(ctx context.Context, tCtx core.TaskExecutionContext) error { incomingState, err := c.unmarshalState(ctx, tCtx.PluginStateReader()) if err != nil { @@ -180,12 +110,7 @@ func (c CorePlugin) Abort(ctx context.Context, tCtx core.TaskExecutionContext) e logger.Infof(ctx, "Attempting to abort resource [%v].", tCtx.TaskExecutionMetadata().GetTaskExecutionID().GetID()) - plugin, err := c.toAsyncPlugin() - if err != nil { - return err - } - - err = plugin.Delete(ctx, newPluginContext(incomingState.ResourceMeta, nil, "Aborted", tCtx)) + err = c.p.Delete(ctx, newPluginContext(incomingState.ResourceMeta, nil, "Aborted", tCtx)) if err != nil { logger.Errorf(ctx, "Failed to abort some resources [%v]. Error: %v", tCtx.TaskExecutionMetadata().GetTaskExecutionID().GetGeneratedName(), err) @@ -204,12 +129,7 @@ func (c CorePlugin) Finalize(ctx context.Context, tCtx core.TaskExecutionContext logger.Infof(ctx, "Attempting to finalize resource [%v].", tCtx.TaskExecutionMetadata().GetTaskExecutionID().GetGeneratedName()) - plugin, err := c.toAsyncPlugin() - if err != nil { - return err - } - - return c.tokenAllocator.releaseToken(ctx, plugin, tCtx, c.metrics) + return c.tokenAllocator.releaseToken(ctx, c.p, tCtx, c.metrics) } func validateRangeInt(fieldName string, min, max, provided int) error { diff --git a/flyteplugins/go/tasks/pluginmachinery/webapi/plugin.go b/flyteplugins/go/tasks/pluginmachinery/webapi/plugin.go index 7e0145f649..dcde2a5f2e 100644 --- a/flyteplugins/go/tasks/pluginmachinery/webapi/plugin.go +++ b/flyteplugins/go/tasks/pluginmachinery/webapi/plugin.go @@ -100,11 +100,6 @@ type StatusContext interface { type ResourceMeta = interface{} type Resource = interface{} -// A plugin interface for type casting in flyteplugins/go/tasks/pluginmachinery/internal/webapi/core.go -type Plugin interface { - GetConfig() PluginConfig -} - // AsyncPlugin defines the interface for plugins that call Async Web APIs. type AsyncPlugin interface { // GetConfig gets the loaded plugin config. This will be used to control the interactions with the remote service. diff --git a/flyteplugins/go/tasks/plugins/webapi/agent/plugin.go b/flyteplugins/go/tasks/plugins/webapi/agent/plugin.go index 2175449079..08762c2baa 100644 --- a/flyteplugins/go/tasks/plugins/webapi/agent/plugin.go +++ b/flyteplugins/go/tasks/plugins/webapi/agent/plugin.go @@ -27,7 +27,7 @@ import ( "github.com/flyteorg/flyte/flytestdlib/promutils" ) -type GetClientFunc func(ctx context.Context, agent *Agent, connectionCache map[*Agent]*grpc.ClientConn) (service.AgentServiceClient, error) +type GetClientFunc func(ctx context.Context, agent *Agent, connectionCache map[*Agent]*grpc.ClientConn) (service.AsyncAgentServiceClient, error) type Plugin struct { metricScope promutils.Scope @@ -61,66 +61,6 @@ func (p Plugin) ResourceRequirements(_ context.Context, _ webapi.TaskExecutionCo return "default", p.cfg.ResourceConstraints, nil } -type pluginContext struct { - webapi.TaskExecutionContext - resource webapi.Resource -} - -func (p pluginContext) Resource() webapi.Resource { - return p.resource -} - -func (p pluginContext) ResourceMeta() webapi.ResourceMeta { - return nil -} - -func (p Plugin) Do(ctx context.Context, taskCtx webapi.TaskExecutionContext) (phase core.PhaseInfo, err error) { - taskTemplate, err := taskCtx.TaskReader().Read(ctx) - if err != nil { - return core.PhaseInfoUndefined, err - } - - inputs, err := taskCtx.InputReader().Get(ctx) - if err != nil { - return core.PhaseInfoUndefined, err - } - - outputPrefix := taskCtx.OutputWriter().GetOutputPrefixPath().String() - - agent, err := getFinalAgent(taskTemplate.Type, p.cfg) - if err != nil { - return core.PhaseInfoUndefined, fmt.Errorf("failed to find agent agent with error: %v", err) - } - - client, err := p.getClient(ctx, agent, p.connectionCache) - if err != nil { - return core.PhaseInfoUndefined, fmt.Errorf("failed to connect to agent with error: %v", err) - } - - finalCtx, cancel := getFinalContext(ctx, "CreateTask", agent) - defer cancel() - - taskExecutionMetadata := buildTaskExecutionMetadata(taskCtx.TaskExecutionMetadata()) - res, err := client.CreateTask(finalCtx, &admin.CreateTaskRequest{Inputs: inputs, Template: taskTemplate, OutputPrefix: outputPrefix, TaskExecutionMetadata: &taskExecutionMetadata}) - if err != nil { - return core.PhaseInfoUndefined, err - } - - resource := res.GetResource() - if resource == nil { - return core.PhaseInfoUndefined, fmt.Errorf("agent sync task returned nil resource, please check the agent implementation") - } - - resourceWrapper := ResourceWrapper{ - State: resource.State, - Outputs: resource.Outputs, - Message: resource.Message, - LogLinks: res.LogLinks, - } - - return p.Status(ctx, pluginContext{TaskExecutionContext: taskCtx, resource: resourceWrapper}) -} - func (p Plugin) Create(ctx context.Context, taskCtx webapi.TaskExecutionContextReader) (webapi.ResourceMeta, webapi.Resource, error) { taskTemplate, err := taskCtx.TaskReader().Read(ctx) @@ -172,12 +112,21 @@ func (p Plugin) Create(ctx context.Context, taskCtx webapi.TaskExecutionContextR taskTemplate.GetContainer().Args = argTemplate } + resource := ResourceWrapper{State: admin.State_RUNNING} + + if res.GetResource() != nil { + resource.State = res.GetResource().State + resource.Outputs = res.GetResource().Outputs + resource.Message = res.GetResource().Message + resource.LogLinks = res.GetResource().LogLinks + } + return ResourceMetaWrapper{ OutputPrefix: outputPrefix, AgentResourceMeta: res.GetResourceMeta(), Token: "", TaskType: taskTemplate.Type, - }, ResourceWrapper{State: admin.State_RUNNING}, nil + }, resource, nil } func (p Plugin) Get(ctx context.Context, taskCtx webapi.GetContext) (latest webapi.Resource, err error) { @@ -334,13 +283,13 @@ func getGrpcConnection(ctx context.Context, agent *Agent, connectionCache map[*A return conn, nil } -func getClientFunc(ctx context.Context, agent *Agent, connectionCache map[*Agent]*grpc.ClientConn) (service.AgentServiceClient, error) { +func getClientFunc(ctx context.Context, agent *Agent, connectionCache map[*Agent]*grpc.ClientConn) (service.AsyncAgentServiceClient, error) { conn, err := getGrpcConnection(ctx, agent, connectionCache) if err != nil { return nil, err } - return service.NewAgentServiceClient(conn), nil + return service.NewAsyncAgentServiceClient(conn), nil } func buildTaskExecutionMetadata(taskExecutionMetadata core.TaskExecutionMetadata) admin.TaskExecutionMetadata { From 3042106ea291564281133af91e2d469a35165b94 Mon Sep 17 00:00:00 2001 From: Kevin Su Date: Mon, 18 Dec 2023 18:03:27 -0800 Subject: [PATCH 39/48] kevin update Signed-off-by: Kevin Su --- flyteidl/protos/flyteidl/service/agent.proto | 3 --- flyteplugins/go/tasks/pluginmachinery/internal/webapi/core.go | 4 ---- flyteplugins/go/tasks/pluginmachinery/webapi/plugin.go | 3 --- 3 files changed, 10 deletions(-) diff --git a/flyteidl/protos/flyteidl/service/agent.proto b/flyteidl/protos/flyteidl/service/agent.proto index 63b061dc3d..6d89bb532e 100644 --- a/flyteidl/protos/flyteidl/service/agent.proto +++ b/flyteidl/protos/flyteidl/service/agent.proto @@ -5,9 +5,6 @@ option go_package = "github.com/flyteorg/flyte/flyteidl/gen/pb-go/flyteidl/servi import "flyteidl/admin/agent.proto"; // AgentService defines an RPC Service that allows propeller to send the request to the agent server. -// It can handle asynchronous tasks and synchronous tasks. -// Asynchronous tasks are for tasks running long, for example running query job. -// Synchronous tasks are for tasks running quick, for example, you want to execute something really fast, or even retrieving some metadata from a backend service. service AsyncAgentService { // Send a task create request to the agent server. rpc CreateTask (flyteidl.admin.CreateTaskRequest) returns (flyteidl.admin.CreateTaskResponse){}; diff --git a/flyteplugins/go/tasks/pluginmachinery/internal/webapi/core.go b/flyteplugins/go/tasks/pluginmachinery/internal/webapi/core.go index 40cbb39d85..a23f985fc6 100644 --- a/flyteplugins/go/tasks/pluginmachinery/internal/webapi/core.go +++ b/flyteplugins/go/tasks/pluginmachinery/internal/webapi/core.go @@ -74,10 +74,6 @@ func (c CorePlugin) Handle(ctx context.Context, tCtx core.TaskExecutionContext) var nextState *State var phaseInfo core.PhaseInfo - if err != nil { - return core.UnknownTransition, err - } - switch incomingState.Phase { case PhaseNotStarted: if len(c.p.GetConfig().ResourceQuotas) > 0 { diff --git a/flyteplugins/go/tasks/pluginmachinery/webapi/plugin.go b/flyteplugins/go/tasks/pluginmachinery/webapi/plugin.go index dcde2a5f2e..37be2c1e40 100644 --- a/flyteplugins/go/tasks/pluginmachinery/webapi/plugin.go +++ b/flyteplugins/go/tasks/pluginmachinery/webapi/plugin.go @@ -20,9 +20,6 @@ import ( // A Lazy loading function, that will load the plugin. Plugins should be initialized in this method. It is guaranteed // that the plugin loader will be called before any Handle/Abort/Finalize functions are invoked -// Although the function returns an AsyncPlugin, it internally handles type casting to convert it to a SyncPlugin as needed. -// This approach is used in flyteplugins/go/tasks/pluginmachinery/internal/webapi/core.go. -// Ideally, changing the return type of the PluginLoader to a more generic 'Plugin' would be preferable. However, this change is currently not feasible without introducing breaking changes to existing plugins. Thus, the current implementation prioritizes compatibility with existing plugins. type PluginLoader func(ctx context.Context, iCtx PluginSetupContext) (AsyncPlugin, error) // PluginEntry is a structure that is used to indicate to the system a K8s plugin From 824b31d557d09b545516d9e214ebeeb0b1bbe390 Mon Sep 17 00:00:00 2001 From: Future Outlier Date: Tue, 19 Dec 2023 15:50:57 +0800 Subject: [PATCH 40/48] succeed Signed-off-by: Future Outlier --- .../internal/webapi/core_test.go | 108 ------------------ .../webapi/mocks/sync_plugin.go | 88 -------------- .../plugins/webapi/agent/integration_test.go | 6 +- .../tasks/plugins/webapi/agent/plugin_test.go | 19 +-- 4 files changed, 8 insertions(+), 213 deletions(-) delete mode 100644 flyteplugins/go/tasks/pluginmachinery/webapi/mocks/sync_plugin.go diff --git a/flyteplugins/go/tasks/pluginmachinery/internal/webapi/core_test.go b/flyteplugins/go/tasks/pluginmachinery/internal/webapi/core_test.go index 1bd2eacbe6..65d90a6c7e 100644 --- a/flyteplugins/go/tasks/pluginmachinery/internal/webapi/core_test.go +++ b/flyteplugins/go/tasks/pluginmachinery/internal/webapi/core_test.go @@ -2,61 +2,16 @@ package webapi import ( "context" - "encoding/json" - "sync/atomic" "testing" "time" "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/mock" - "k8s.io/apimachinery/pkg/util/rand" - flyteIdlCore "github.com/flyteorg/flyte/flyteidl/gen/pb-go/flyteidl/core" "github.com/flyteorg/flyte/flyteplugins/go/tasks/pluginmachinery/core" - "github.com/flyteorg/flyte/flyteplugins/go/tasks/pluginmachinery/core/mocks" - ioMocks "github.com/flyteorg/flyte/flyteplugins/go/tasks/pluginmachinery/io/mocks" "github.com/flyteorg/flyte/flyteplugins/go/tasks/pluginmachinery/webapi" - webapiMocks "github.com/flyteorg/flyte/flyteplugins/go/tasks/pluginmachinery/webapi/mocks" "github.com/flyteorg/flyte/flytestdlib/config" - "github.com/flyteorg/flyte/flytestdlib/storage" ) -func TestHandle(t *testing.T) { - ctx := context.TODO() - tCtx := getTaskContext(t) - taskReader := new(mocks.TaskReader) - taskInfo := &core.TaskInfo{} - - template := flyteIdlCore.TaskTemplate{ - Type: "api_task", - Metadata: &flyteIdlCore.TaskMetadata{ - Runtime: &flyteIdlCore.RuntimeMetadata{ - PluginMetadata: &flyteIdlCore.PluginMetadata{ - IsSyncPlugin: true, - }, - }, - }, - } - - taskReader.On("Read", mock.Anything).Return(&template, nil) - - tCtx.On("TaskReader").Return(taskReader) - - p := new(webapiMocks.SyncPlugin) - p.On("Do", ctx, tCtx).Return(core.PhaseInfoSuccess(taskInfo), nil) - - c := CorePlugin{ - id: "test", - p: p, - } - - transition, err := c.Handle(ctx, tCtx) - assert.NoError(t, err) - assert.NotNil(t, transition) - assert.Equal(t, core.PhaseInfoSuccess(taskInfo), transition.Info()) - assert.Equal(t, core.TransitionTypeEphemeral, transition.Type()) -} - func Test_validateConfig(t *testing.T) { t.Run("In range", func(t *testing.T) { cfg := webapi.PluginConfig{ @@ -138,66 +93,3 @@ func TestCreateRemotePlugin(t *testing.T) { DefaultForTaskTypes: []core.TaskType{"test-task"}, }) } - -func getTaskContext(t *testing.T) *mocks.TaskExecutionContext { - latestKnownState := atomic.Value{} - pluginStateReader := &mocks.PluginStateReader{} - pluginStateReader.OnGetMatch(mock.Anything).Return(0, nil).Run(func(args mock.Arguments) { - o := args.Get(0) - x, err := json.Marshal(latestKnownState.Load()) - assert.NoError(t, err) - assert.NoError(t, json.Unmarshal(x, &o)) - }) - pluginStateWriter := &mocks.PluginStateWriter{} - pluginStateWriter.OnPutMatch(mock.Anything, mock.Anything).Return(nil).Run(func(args mock.Arguments) { - latestKnownState.Store(args.Get(1)) - }) - - pluginStateWriter.OnReset().Return(nil).Run(func(args mock.Arguments) { - latestKnownState.Store(nil) - }) - - execID := rand.String(3) - tID := &mocks.TaskExecutionID{} - tID.OnGetGeneratedName().Return(execID + "-my-task-1") - tID.OnGetID().Return(flyteIdlCore.TaskExecutionIdentifier{ - TaskId: &flyteIdlCore.Identifier{ - ResourceType: flyteIdlCore.ResourceType_TASK, - Project: "a", - Domain: "d", - Name: "n", - Version: "abc", - }, - NodeExecutionId: &flyteIdlCore.NodeExecutionIdentifier{ - NodeId: "node1", - ExecutionId: &flyteIdlCore.WorkflowExecutionIdentifier{ - Project: "a", - Domain: "d", - Name: "exec", - }, - }, - RetryAttempt: 0, - }) - tMeta := &mocks.TaskExecutionMetadata{} - tMeta.OnGetTaskExecutionID().Return(tID) - resourceManager := &mocks.ResourceManager{} - resourceManager.OnAllocateResourceMatch(mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(core.AllocationStatusGranted, nil) - resourceManager.OnReleaseResourceMatch(mock.Anything, mock.Anything, mock.Anything).Return(nil) - - basePrefix := storage.DataReference("fake://bucket/prefix/" + execID) - outputWriter := &ioMocks.OutputWriter{} - outputWriter.OnGetRawOutputPrefix().Return("/sandbox/") - outputWriter.OnGetOutputPrefixPath().Return(basePrefix) - outputWriter.OnGetErrorPath().Return(basePrefix + "/error.pb") - outputWriter.OnGetOutputPath().Return(basePrefix + "/outputs.pb") - outputWriter.OnGetCheckpointPrefix().Return("/checkpoint") - outputWriter.OnGetPreviousCheckpointsPrefix().Return("/prev") - - tCtx := &mocks.TaskExecutionContext{} - tCtx.OnOutputWriter().Return(outputWriter) - tCtx.OnResourceManager().Return(resourceManager) - tCtx.OnPluginStateReader().Return(pluginStateReader) - tCtx.OnPluginStateWriter().Return(pluginStateWriter) - tCtx.OnTaskExecutionMetadata().Return(tMeta) - return tCtx -} diff --git a/flyteplugins/go/tasks/pluginmachinery/webapi/mocks/sync_plugin.go b/flyteplugins/go/tasks/pluginmachinery/webapi/mocks/sync_plugin.go deleted file mode 100644 index cfe5d38090..0000000000 --- a/flyteplugins/go/tasks/pluginmachinery/webapi/mocks/sync_plugin.go +++ /dev/null @@ -1,88 +0,0 @@ -// Code generated by mockery v1.0.1. DO NOT EDIT. - -package mocks - -import ( - context "context" - - core "github.com/flyteorg/flyte/flyteplugins/go/tasks/pluginmachinery/core" - mock "github.com/stretchr/testify/mock" - - webapi "github.com/flyteorg/flyte/flyteplugins/go/tasks/pluginmachinery/webapi" -) - -// SyncPlugin is an autogenerated mock type for the SyncPlugin type -type SyncPlugin struct { - mock.Mock -} - -type SyncPlugin_Do struct { - *mock.Call -} - -func (_m SyncPlugin_Do) Return(phase core.PhaseInfo, err error) *SyncPlugin_Do { - return &SyncPlugin_Do{Call: _m.Call.Return(phase, err)} -} - -func (_m *SyncPlugin) OnDo(ctx context.Context, tCtx webapi.TaskExecutionContext) *SyncPlugin_Do { - c_call := _m.On("Do", ctx, tCtx) - return &SyncPlugin_Do{Call: c_call} -} - -func (_m *SyncPlugin) OnDoMatch(matchers ...interface{}) *SyncPlugin_Do { - c_call := _m.On("Do", matchers...) - return &SyncPlugin_Do{Call: c_call} -} - -// Do provides a mock function with given fields: ctx, tCtx -func (_m *SyncPlugin) Do(ctx context.Context, tCtx webapi.TaskExecutionContext) (core.PhaseInfo, error) { - ret := _m.Called(ctx, tCtx) - - var r0 core.PhaseInfo - if rf, ok := ret.Get(0).(func(context.Context, webapi.TaskExecutionContext) core.PhaseInfo); ok { - r0 = rf(ctx, tCtx) - } else { - r0 = ret.Get(0).(core.PhaseInfo) - } - - var r1 error - if rf, ok := ret.Get(1).(func(context.Context, webapi.TaskExecutionContext) error); ok { - r1 = rf(ctx, tCtx) - } else { - r1 = ret.Error(1) - } - - return r0, r1 -} - -type SyncPlugin_GetConfig struct { - *mock.Call -} - -func (_m SyncPlugin_GetConfig) Return(_a0 webapi.PluginConfig) *SyncPlugin_GetConfig { - return &SyncPlugin_GetConfig{Call: _m.Call.Return(_a0)} -} - -func (_m *SyncPlugin) OnGetConfig() *SyncPlugin_GetConfig { - c_call := _m.On("GetConfig") - return &SyncPlugin_GetConfig{Call: c_call} -} - -func (_m *SyncPlugin) OnGetConfigMatch(matchers ...interface{}) *SyncPlugin_GetConfig { - c_call := _m.On("GetConfig", matchers...) - return &SyncPlugin_GetConfig{Call: c_call} -} - -// GetConfig provides a mock function with given fields: -func (_m *SyncPlugin) GetConfig() webapi.PluginConfig { - ret := _m.Called() - - var r0 webapi.PluginConfig - if rf, ok := ret.Get(0).(func() webapi.PluginConfig); ok { - r0 = rf() - } else { - r0 = ret.Get(0).(webapi.PluginConfig) - } - - return r0 -} diff --git a/flyteplugins/go/tasks/plugins/webapi/agent/integration_test.go b/flyteplugins/go/tasks/plugins/webapi/agent/integration_test.go index 6b60f95b03..9f561185ab 100644 --- a/flyteplugins/go/tasks/plugins/webapi/agent/integration_test.go +++ b/flyteplugins/go/tasks/plugins/webapi/agent/integration_test.go @@ -98,15 +98,15 @@ func (m *MockSyncTask) DeleteTask(_ context.Context, _ *admin.DeleteTaskRequest, return &admin.DeleteTaskResponse{}, nil } -func mockAsyncTaskClientFunc(_ context.Context, _ *Agent, _ map[*Agent]*grpc.ClientConn) (service.AgentServiceClient, error) { +func mockAsyncTaskClientFunc(_ context.Context, _ *Agent, _ map[*Agent]*grpc.ClientConn) (service.AsyncAgentServiceClient, error) { return &MockAsyncTask{}, nil } -func mockSyncTaskClientFunc(_ context.Context, _ *Agent, _ map[*Agent]*grpc.ClientConn) (service.AgentServiceClient, error) { +func mockSyncTaskClientFunc(_ context.Context, _ *Agent, _ map[*Agent]*grpc.ClientConn) (service.AsyncAgentServiceClient, error) { return &MockSyncTask{}, nil } -func mockGetBadAsyncClientFunc(_ context.Context, _ *Agent, _ map[*Agent]*grpc.ClientConn) (service.AgentServiceClient, error) { +func mockGetBadAsyncClientFunc(_ context.Context, _ *Agent, _ map[*Agent]*grpc.ClientConn) (service.AsyncAgentServiceClient, error) { return nil, fmt.Errorf("error") } diff --git a/flyteplugins/go/tasks/plugins/webapi/agent/plugin_test.go b/flyteplugins/go/tasks/plugins/webapi/agent/plugin_test.go index c64193dac5..bce4b3a020 100644 --- a/flyteplugins/go/tasks/plugins/webapi/agent/plugin_test.go +++ b/flyteplugins/go/tasks/plugins/webapi/agent/plugin_test.go @@ -5,8 +5,6 @@ import ( "testing" "time" - flyteidlcore "github.com/flyteorg/flyte/flyteidl/gen/pb-go/flyteidl/core" - "github.com/stretchr/testify/assert" "github.com/stretchr/testify/mock" "google.golang.org/grpc" @@ -30,13 +28,6 @@ func TestDo(t *testing.T) { template := flyteIdlCore.TaskTemplate{ Type: "api_task", - Metadata: &flyteIdlCore.TaskMetadata{ - Runtime: &flyteIdlCore.RuntimeMetadata{ - PluginMetadata: &flyteIdlCore.PluginMetadata{ - IsSyncPlugin: true, - }, - }, - }, } taskReader.On("Read", mock.Anything).Return(&template, nil) @@ -155,7 +146,7 @@ func TestPlugin(t *testing.T) { State: admin.State_PENDING, Outputs: nil, Message: "Waiting for cluster", - LogLinks: []*flyteidlcore.TaskLog{{Uri: "http://localhost:3000/log", Name: "Log Link"}}, + LogLinks: []*flyteIdlCore.TaskLog{{Uri: "http://localhost:3000/log", Name: "Log Link"}}, }) phase, err := plugin.Status(context.Background(), taskContext) @@ -170,7 +161,7 @@ func TestPlugin(t *testing.T) { State: admin.State_RUNNING, Outputs: nil, Message: "Job is running", - LogLinks: []*flyteidlcore.TaskLog{{Uri: "http://localhost:3000/log", Name: "Log Link"}}, + LogLinks: []*flyteIdlCore.TaskLog{{Uri: "http://localhost:3000/log", Name: "Log Link"}}, }) phase, err := plugin.Status(context.Background(), taskContext) @@ -184,7 +175,7 @@ func TestPlugin(t *testing.T) { State: admin.State_PERMANENT_FAILURE, Outputs: nil, Message: "", - LogLinks: []*flyteidlcore.TaskLog{{Uri: "http://localhost:3000/log", Name: "Log Link"}}, + LogLinks: []*flyteIdlCore.TaskLog{{Uri: "http://localhost:3000/log", Name: "Log Link"}}, }) phase, err := plugin.Status(context.Background(), taskContext) @@ -198,7 +189,7 @@ func TestPlugin(t *testing.T) { State: admin.State_RETRYABLE_FAILURE, Outputs: nil, Message: "", - LogLinks: []*flyteidlcore.TaskLog{{Uri: "http://localhost:3000/log", Name: "Log Link"}}, + LogLinks: []*flyteIdlCore.TaskLog{{Uri: "http://localhost:3000/log", Name: "Log Link"}}, }) phase, err := plugin.Status(context.Background(), taskContext) @@ -212,7 +203,7 @@ func TestPlugin(t *testing.T) { State: 5, Outputs: nil, Message: "", - LogLinks: []*flyteidlcore.TaskLog{{Uri: "http://localhost:3000/log", Name: "Log Link"}}, + LogLinks: []*flyteIdlCore.TaskLog{{Uri: "http://localhost:3000/log", Name: "Log Link"}}, }) phase, err := plugin.Status(context.Background(), taskContext) From 790b3d5a49bfdaa0d83fc78b5c13ba9dfa9f79aa Mon Sep 17 00:00:00 2001 From: Future Outlier Date: Wed, 20 Dec 2023 06:43:14 +0800 Subject: [PATCH 41/48] Changing file permissions Signed-off-by: Future Outlier --- flyteplugins/go/tasks/plugins/testing/config_flags.go | 0 flyteplugins/go/tasks/plugins/testing/config_flags_test.go | 0 2 files changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 flyteplugins/go/tasks/plugins/testing/config_flags.go mode change 100644 => 100755 flyteplugins/go/tasks/plugins/testing/config_flags_test.go diff --git a/flyteplugins/go/tasks/plugins/testing/config_flags.go b/flyteplugins/go/tasks/plugins/testing/config_flags.go old mode 100644 new mode 100755 diff --git a/flyteplugins/go/tasks/plugins/testing/config_flags_test.go b/flyteplugins/go/tasks/plugins/testing/config_flags_test.go old mode 100644 new mode 100755 From 5e9ca09c2ecb0583f9201aa5a8b7dc7f54c7d78b Mon Sep 17 00:00:00 2001 From: Future Outlier Date: Wed, 20 Dec 2023 07:23:54 +0800 Subject: [PATCH 42/48] change do task to sync task Signed-off-by: Future Outlier --- .../go/tasks/plugins/webapi/agent/plugin_test.go | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/flyteplugins/go/tasks/plugins/webapi/agent/plugin_test.go b/flyteplugins/go/tasks/plugins/webapi/agent/plugin_test.go index bce4b3a020..7f370251f1 100644 --- a/flyteplugins/go/tasks/plugins/webapi/agent/plugin_test.go +++ b/flyteplugins/go/tasks/plugins/webapi/agent/plugin_test.go @@ -17,12 +17,13 @@ import ( pluginCoreMocks "github.com/flyteorg/flyte/flyteplugins/go/tasks/pluginmachinery/core/mocks" ioMocks "github.com/flyteorg/flyte/flyteplugins/go/tasks/pluginmachinery/io/mocks" webapiPlugin "github.com/flyteorg/flyte/flyteplugins/go/tasks/pluginmachinery/webapi/mocks" + "github.com/flyteorg/flyte/flyteplugins/tests" "github.com/flyteorg/flyte/flytestdlib/config" "github.com/flyteorg/flyte/flytestdlib/promutils" "github.com/flyteorg/flyte/flytestdlib/storage" ) -func TestDo(t *testing.T) { +func TestSyncTask(t *testing.T) { tCtx := getTaskContext(t) taskReader := new(pluginCoreMocks.TaskReader) @@ -39,7 +40,6 @@ func TestDo(t *testing.T) { plugin, err := pluginEntry.LoadPlugin(context.TODO(), newFakeSetupContext("create_task_sync_test")) assert.NoError(t, err) - // Call the Do function by Flavor inputs, err := coreutils.MakeLiteralMap(map[string]interface{}{"x": 1}) assert.NoError(t, err) basePrefix := storage.DataReference("fake://bucket/prefix/") @@ -49,10 +49,8 @@ func TestDo(t *testing.T) { inputReader.OnGetMatch(mock.Anything).Return(inputs, nil) tCtx.OnInputReader().Return(inputReader) - phase, err := plugin.Handle(context.TODO(), tCtx) - - assert.Nil(t, err) - assert.Equal(t, pluginsCore.PhaseSuccess, phase.Info().Phase()) + phase := tests.RunPluginEndToEndTest(t, plugin, &template, inputs, nil, nil, nil) + assert.Equal(t, true, phase.Phase().IsSuccess()) } func TestPlugin(t *testing.T) { From 7504cdf1f41a0183da1921b169c1ffccbe3536f3 Mon Sep 17 00:00:00 2001 From: Future Outlier Date: Wed, 20 Dec 2023 11:30:47 +0800 Subject: [PATCH 43/48] improve annotation and log message Signed-off-by: Future Outlier --- flyteplugins/go/tasks/plugins/array/awsbatch/executor.go | 2 +- flyteplugins/go/tasks/plugins/array/k8s/management.go | 8 ++++---- flyteplugins/go/tasks/plugins/webapi/agent/plugin.go | 4 ++++ 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/flyteplugins/go/tasks/plugins/array/awsbatch/executor.go b/flyteplugins/go/tasks/plugins/array/awsbatch/executor.go index 6c7a858be8..1e98736129 100644 --- a/flyteplugins/go/tasks/plugins/array/awsbatch/executor.go +++ b/flyteplugins/go/tasks/plugins/array/awsbatch/executor.go @@ -78,7 +78,7 @@ func (e Executor) Handle(ctx context.Context, tCtx core.TaskExecutionContext) (c case arrayCore.PhaseAssembleFinalOutput: pluginState.State, err = array.AssembleFinalOutputs(ctx, e.outputAssembler, tCtx, arrayCore.PhaseSuccess, version+1, pluginState.State) - + case arrayCore.PhaseAbortSubTasks: fallthrough diff --git a/flyteplugins/go/tasks/plugins/array/k8s/management.go b/flyteplugins/go/tasks/plugins/array/k8s/management.go index 510f202e1a..d6abaaf74b 100644 --- a/flyteplugins/go/tasks/plugins/array/k8s/management.go +++ b/flyteplugins/go/tasks/plugins/array/k8s/management.go @@ -382,10 +382,10 @@ func TerminateSubTasks(ctx context.Context, tCtx core.TaskExecutionContext, kube messageCollector.Collect(childIdx, err.Error()) } else { externalResources = append(externalResources, &core.ExternalResource{ - ExternalID: stCtx.TaskExecutionMetadata().GetTaskExecutionID().GetGeneratedName(), - Index: uint32(originalIdx), - RetryAttempt: uint32(retryAttempt), - Phase: core.PhaseAborted, + ExternalID: stCtx.TaskExecutionMetadata().GetTaskExecutionID().GetGeneratedName(), + Index: uint32(originalIdx), + RetryAttempt: uint32(retryAttempt), + Phase: core.PhaseAborted, }) } } diff --git a/flyteplugins/go/tasks/plugins/webapi/agent/plugin.go b/flyteplugins/go/tasks/plugins/webapi/agent/plugin.go index 08762c2baa..f1a53ef5e0 100644 --- a/flyteplugins/go/tasks/plugins/webapi/agent/plugin.go +++ b/flyteplugins/go/tasks/plugins/webapi/agent/plugin.go @@ -114,11 +114,15 @@ func (p Plugin) Create(ctx context.Context, taskCtx webapi.TaskExecutionContextR resource := ResourceWrapper{State: admin.State_RUNNING} + // If the agent returned a resource, we assume this is a synchronous task. + // The state should be SUCCEEDED, PERMANENT_FAILURE or RETRYABLE_FAILURE. if res.GetResource() != nil { resource.State = res.GetResource().State resource.Outputs = res.GetResource().Outputs resource.Message = res.GetResource().Message resource.LogLinks = res.GetResource().LogLinks + } else { + logger.Infof(ctx, "Agent returned no resource, assuming this is an asynchronous task.") } return ResourceMetaWrapper{ From 9d7d4944aa4405bf24daf8cb13f182c75b1b0bf5 Mon Sep 17 00:00:00 2001 From: Future Outlier Date: Wed, 20 Dec 2023 11:34:34 +0800 Subject: [PATCH 44/48] log message Signed-off-by: Future Outlier --- flyteplugins/go/tasks/plugins/webapi/agent/plugin.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/flyteplugins/go/tasks/plugins/webapi/agent/plugin.go b/flyteplugins/go/tasks/plugins/webapi/agent/plugin.go index f1a53ef5e0..1a5c879ead 100644 --- a/flyteplugins/go/tasks/plugins/webapi/agent/plugin.go +++ b/flyteplugins/go/tasks/plugins/webapi/agent/plugin.go @@ -122,7 +122,7 @@ func (p Plugin) Create(ctx context.Context, taskCtx webapi.TaskExecutionContextR resource.Message = res.GetResource().Message resource.LogLinks = res.GetResource().LogLinks } else { - logger.Infof(ctx, "Agent returned no resource, assuming this is an asynchronous task.") + logger.Infof(ctx, "If this is a synchronous task, the agent should return a resource.") } return ResourceMetaWrapper{ From fc9a72827395992daa81977c69c8b886fa3d67a7 Mon Sep 17 00:00:00 2001 From: Future Outlier Date: Wed, 20 Dec 2023 12:11:00 +0800 Subject: [PATCH 45/48] improve annotation message Signed-off-by: Future Outlier --- flyteplugins/go/tasks/plugins/webapi/agent/plugin.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/flyteplugins/go/tasks/plugins/webapi/agent/plugin.go b/flyteplugins/go/tasks/plugins/webapi/agent/plugin.go index 1a5c879ead..7eeba19330 100644 --- a/flyteplugins/go/tasks/plugins/webapi/agent/plugin.go +++ b/flyteplugins/go/tasks/plugins/webapi/agent/plugin.go @@ -115,7 +115,7 @@ func (p Plugin) Create(ctx context.Context, taskCtx webapi.TaskExecutionContextR resource := ResourceWrapper{State: admin.State_RUNNING} // If the agent returned a resource, we assume this is a synchronous task. - // The state should be SUCCEEDED, PERMANENT_FAILURE or RETRYABLE_FAILURE. + // The state should be a terminal state, for example, SUCCEEDED, PERMANENT_FAILURE, or RETRYABLE_FAILURE. if res.GetResource() != nil { resource.State = res.GetResource().State resource.Outputs = res.GetResource().Outputs From daf575f637ef5c9f656ee8f07663d2fdc1fd615f Mon Sep 17 00:00:00 2001 From: Future Outlier Date: Wed, 20 Dec 2023 18:13:28 +0800 Subject: [PATCH 46/48] improve create task function in agent plugin Signed-off-by: Future Outlier --- .../go/admin/mocks/AsyncAgentServiceClient.go | 162 +++ .../go/admin/mocks/AsyncAgentServiceServer.go | 139 +++ .../gen/pb-cpp/flyteidl/admin/agent.pb.cc | 160 +-- flyteidl/gen/pb-cpp/flyteidl/admin/agent.pb.h | 40 - .../pb-cpp/flyteidl/service/agent.grpc.pb.h | 3 - flyteidl/gen/pb-go/flyteidl/admin/agent.pb.go | 131 ++- .../pb-go/flyteidl/admin/agent.pb.validate.go | 15 - .../pb-go/flyteidl/service/agent.swagger.json | 7 - .../flyteidl/admin/AgentOuterClass.java | 920 ++++++++++++++++-- flyteidl/gen/pb-js/flyteidl.d.ts | 6 - flyteidl/gen/pb-js/flyteidl.js | 27 - .../gen/pb_python/flyteidl/admin/agent_pb2.py | 48 +- .../pb_python/flyteidl/admin/agent_pb2.pyi | 6 +- .../flyteidl/service/agent_pb2_grpc.py | 7 +- flyteidl/gen/pb_rust/flyteidl.admin.rs | 3 - flyteidl/protos/flyteidl/admin/agent.proto | 2 - .../go/tasks/plugins/webapi/agent/plugin.go | 18 +- 17 files changed, 1282 insertions(+), 412 deletions(-) create mode 100644 flyteidl/clients/go/admin/mocks/AsyncAgentServiceClient.go create mode 100644 flyteidl/clients/go/admin/mocks/AsyncAgentServiceServer.go diff --git a/flyteidl/clients/go/admin/mocks/AsyncAgentServiceClient.go b/flyteidl/clients/go/admin/mocks/AsyncAgentServiceClient.go new file mode 100644 index 0000000000..4a2b2c25f3 --- /dev/null +++ b/flyteidl/clients/go/admin/mocks/AsyncAgentServiceClient.go @@ -0,0 +1,162 @@ +// Code generated by mockery v1.0.1. DO NOT EDIT. + +package mocks + +import ( + context "context" + + admin "github.com/flyteorg/flyte/flyteidl/gen/pb-go/flyteidl/admin" + + grpc "google.golang.org/grpc" + + mock "github.com/stretchr/testify/mock" +) + +// AsyncAgentServiceClient is an autogenerated mock type for the AsyncAgentServiceClient type +type AsyncAgentServiceClient struct { + mock.Mock +} + +type AsyncAgentServiceClient_CreateTask struct { + *mock.Call +} + +func (_m AsyncAgentServiceClient_CreateTask) Return(_a0 *admin.CreateTaskResponse, _a1 error) *AsyncAgentServiceClient_CreateTask { + return &AsyncAgentServiceClient_CreateTask{Call: _m.Call.Return(_a0, _a1)} +} + +func (_m *AsyncAgentServiceClient) OnCreateTask(ctx context.Context, in *admin.CreateTaskRequest, opts ...grpc.CallOption) *AsyncAgentServiceClient_CreateTask { + c_call := _m.On("CreateTask", ctx, in, opts) + return &AsyncAgentServiceClient_CreateTask{Call: c_call} +} + +func (_m *AsyncAgentServiceClient) OnCreateTaskMatch(matchers ...interface{}) *AsyncAgentServiceClient_CreateTask { + c_call := _m.On("CreateTask", matchers...) + return &AsyncAgentServiceClient_CreateTask{Call: c_call} +} + +// CreateTask provides a mock function with given fields: ctx, in, opts +func (_m *AsyncAgentServiceClient) CreateTask(ctx context.Context, in *admin.CreateTaskRequest, opts ...grpc.CallOption) (*admin.CreateTaskResponse, 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 *admin.CreateTaskResponse + if rf, ok := ret.Get(0).(func(context.Context, *admin.CreateTaskRequest, ...grpc.CallOption) *admin.CreateTaskResponse); ok { + r0 = rf(ctx, in, opts...) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*admin.CreateTaskResponse) + } + } + + var r1 error + if rf, ok := ret.Get(1).(func(context.Context, *admin.CreateTaskRequest, ...grpc.CallOption) error); ok { + r1 = rf(ctx, in, opts...) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +type AsyncAgentServiceClient_DeleteTask struct { + *mock.Call +} + +func (_m AsyncAgentServiceClient_DeleteTask) Return(_a0 *admin.DeleteTaskResponse, _a1 error) *AsyncAgentServiceClient_DeleteTask { + return &AsyncAgentServiceClient_DeleteTask{Call: _m.Call.Return(_a0, _a1)} +} + +func (_m *AsyncAgentServiceClient) OnDeleteTask(ctx context.Context, in *admin.DeleteTaskRequest, opts ...grpc.CallOption) *AsyncAgentServiceClient_DeleteTask { + c_call := _m.On("DeleteTask", ctx, in, opts) + return &AsyncAgentServiceClient_DeleteTask{Call: c_call} +} + +func (_m *AsyncAgentServiceClient) OnDeleteTaskMatch(matchers ...interface{}) *AsyncAgentServiceClient_DeleteTask { + c_call := _m.On("DeleteTask", matchers...) + return &AsyncAgentServiceClient_DeleteTask{Call: c_call} +} + +// DeleteTask provides a mock function with given fields: ctx, in, opts +func (_m *AsyncAgentServiceClient) DeleteTask(ctx context.Context, in *admin.DeleteTaskRequest, opts ...grpc.CallOption) (*admin.DeleteTaskResponse, 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 *admin.DeleteTaskResponse + if rf, ok := ret.Get(0).(func(context.Context, *admin.DeleteTaskRequest, ...grpc.CallOption) *admin.DeleteTaskResponse); ok { + r0 = rf(ctx, in, opts...) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*admin.DeleteTaskResponse) + } + } + + var r1 error + if rf, ok := ret.Get(1).(func(context.Context, *admin.DeleteTaskRequest, ...grpc.CallOption) error); ok { + r1 = rf(ctx, in, opts...) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +type AsyncAgentServiceClient_GetTask struct { + *mock.Call +} + +func (_m AsyncAgentServiceClient_GetTask) Return(_a0 *admin.GetTaskResponse, _a1 error) *AsyncAgentServiceClient_GetTask { + return &AsyncAgentServiceClient_GetTask{Call: _m.Call.Return(_a0, _a1)} +} + +func (_m *AsyncAgentServiceClient) OnGetTask(ctx context.Context, in *admin.GetTaskRequest, opts ...grpc.CallOption) *AsyncAgentServiceClient_GetTask { + c_call := _m.On("GetTask", ctx, in, opts) + return &AsyncAgentServiceClient_GetTask{Call: c_call} +} + +func (_m *AsyncAgentServiceClient) OnGetTaskMatch(matchers ...interface{}) *AsyncAgentServiceClient_GetTask { + c_call := _m.On("GetTask", matchers...) + return &AsyncAgentServiceClient_GetTask{Call: c_call} +} + +// GetTask provides a mock function with given fields: ctx, in, opts +func (_m *AsyncAgentServiceClient) GetTask(ctx context.Context, in *admin.GetTaskRequest, opts ...grpc.CallOption) (*admin.GetTaskResponse, 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 *admin.GetTaskResponse + if rf, ok := ret.Get(0).(func(context.Context, *admin.GetTaskRequest, ...grpc.CallOption) *admin.GetTaskResponse); ok { + r0 = rf(ctx, in, opts...) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*admin.GetTaskResponse) + } + } + + var r1 error + if rf, ok := ret.Get(1).(func(context.Context, *admin.GetTaskRequest, ...grpc.CallOption) error); ok { + r1 = rf(ctx, in, opts...) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} diff --git a/flyteidl/clients/go/admin/mocks/AsyncAgentServiceServer.go b/flyteidl/clients/go/admin/mocks/AsyncAgentServiceServer.go new file mode 100644 index 0000000000..722d6731ff --- /dev/null +++ b/flyteidl/clients/go/admin/mocks/AsyncAgentServiceServer.go @@ -0,0 +1,139 @@ +// Code generated by mockery v1.0.1. DO NOT EDIT. + +package mocks + +import ( + context "context" + + admin "github.com/flyteorg/flyte/flyteidl/gen/pb-go/flyteidl/admin" + + mock "github.com/stretchr/testify/mock" +) + +// AsyncAgentServiceServer is an autogenerated mock type for the AsyncAgentServiceServer type +type AsyncAgentServiceServer struct { + mock.Mock +} + +type AsyncAgentServiceServer_CreateTask struct { + *mock.Call +} + +func (_m AsyncAgentServiceServer_CreateTask) Return(_a0 *admin.CreateTaskResponse, _a1 error) *AsyncAgentServiceServer_CreateTask { + return &AsyncAgentServiceServer_CreateTask{Call: _m.Call.Return(_a0, _a1)} +} + +func (_m *AsyncAgentServiceServer) OnCreateTask(_a0 context.Context, _a1 *admin.CreateTaskRequest) *AsyncAgentServiceServer_CreateTask { + c_call := _m.On("CreateTask", _a0, _a1) + return &AsyncAgentServiceServer_CreateTask{Call: c_call} +} + +func (_m *AsyncAgentServiceServer) OnCreateTaskMatch(matchers ...interface{}) *AsyncAgentServiceServer_CreateTask { + c_call := _m.On("CreateTask", matchers...) + return &AsyncAgentServiceServer_CreateTask{Call: c_call} +} + +// CreateTask provides a mock function with given fields: _a0, _a1 +func (_m *AsyncAgentServiceServer) CreateTask(_a0 context.Context, _a1 *admin.CreateTaskRequest) (*admin.CreateTaskResponse, error) { + ret := _m.Called(_a0, _a1) + + var r0 *admin.CreateTaskResponse + if rf, ok := ret.Get(0).(func(context.Context, *admin.CreateTaskRequest) *admin.CreateTaskResponse); ok { + r0 = rf(_a0, _a1) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*admin.CreateTaskResponse) + } + } + + var r1 error + if rf, ok := ret.Get(1).(func(context.Context, *admin.CreateTaskRequest) error); ok { + r1 = rf(_a0, _a1) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +type AsyncAgentServiceServer_DeleteTask struct { + *mock.Call +} + +func (_m AsyncAgentServiceServer_DeleteTask) Return(_a0 *admin.DeleteTaskResponse, _a1 error) *AsyncAgentServiceServer_DeleteTask { + return &AsyncAgentServiceServer_DeleteTask{Call: _m.Call.Return(_a0, _a1)} +} + +func (_m *AsyncAgentServiceServer) OnDeleteTask(_a0 context.Context, _a1 *admin.DeleteTaskRequest) *AsyncAgentServiceServer_DeleteTask { + c_call := _m.On("DeleteTask", _a0, _a1) + return &AsyncAgentServiceServer_DeleteTask{Call: c_call} +} + +func (_m *AsyncAgentServiceServer) OnDeleteTaskMatch(matchers ...interface{}) *AsyncAgentServiceServer_DeleteTask { + c_call := _m.On("DeleteTask", matchers...) + return &AsyncAgentServiceServer_DeleteTask{Call: c_call} +} + +// DeleteTask provides a mock function with given fields: _a0, _a1 +func (_m *AsyncAgentServiceServer) DeleteTask(_a0 context.Context, _a1 *admin.DeleteTaskRequest) (*admin.DeleteTaskResponse, error) { + ret := _m.Called(_a0, _a1) + + var r0 *admin.DeleteTaskResponse + if rf, ok := ret.Get(0).(func(context.Context, *admin.DeleteTaskRequest) *admin.DeleteTaskResponse); ok { + r0 = rf(_a0, _a1) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*admin.DeleteTaskResponse) + } + } + + var r1 error + if rf, ok := ret.Get(1).(func(context.Context, *admin.DeleteTaskRequest) error); ok { + r1 = rf(_a0, _a1) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +type AsyncAgentServiceServer_GetTask struct { + *mock.Call +} + +func (_m AsyncAgentServiceServer_GetTask) Return(_a0 *admin.GetTaskResponse, _a1 error) *AsyncAgentServiceServer_GetTask { + return &AsyncAgentServiceServer_GetTask{Call: _m.Call.Return(_a0, _a1)} +} + +func (_m *AsyncAgentServiceServer) OnGetTask(_a0 context.Context, _a1 *admin.GetTaskRequest) *AsyncAgentServiceServer_GetTask { + c_call := _m.On("GetTask", _a0, _a1) + return &AsyncAgentServiceServer_GetTask{Call: c_call} +} + +func (_m *AsyncAgentServiceServer) OnGetTaskMatch(matchers ...interface{}) *AsyncAgentServiceServer_GetTask { + c_call := _m.On("GetTask", matchers...) + return &AsyncAgentServiceServer_GetTask{Call: c_call} +} + +// GetTask provides a mock function with given fields: _a0, _a1 +func (_m *AsyncAgentServiceServer) GetTask(_a0 context.Context, _a1 *admin.GetTaskRequest) (*admin.GetTaskResponse, error) { + ret := _m.Called(_a0, _a1) + + var r0 *admin.GetTaskResponse + if rf, ok := ret.Get(0).(func(context.Context, *admin.GetTaskRequest) *admin.GetTaskResponse); ok { + r0 = rf(_a0, _a1) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*admin.GetTaskResponse) + } + } + + var r1 error + if rf, ok := ret.Get(1).(func(context.Context, *admin.GetTaskRequest) error); ok { + r1 = rf(_a0, _a1) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} diff --git a/flyteidl/gen/pb-cpp/flyteidl/admin/agent.pb.cc b/flyteidl/gen/pb-cpp/flyteidl/admin/agent.pb.cc index 19a3767d56..490636e25c 100644 --- a/flyteidl/gen/pb-cpp/flyteidl/admin/agent.pb.cc +++ b/flyteidl/gen/pb-cpp/flyteidl/admin/agent.pb.cc @@ -181,10 +181,9 @@ static void InitDefaultsCreateTaskResponse_flyteidl_2fadmin_2fagent_2eproto() { ::flyteidl::admin::CreateTaskResponse::InitAsDefaultInstance(); } -::google::protobuf::internal::SCCInfo<2> scc_info_CreateTaskResponse_flyteidl_2fadmin_2fagent_2eproto = - {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 2, InitDefaultsCreateTaskResponse_flyteidl_2fadmin_2fagent_2eproto}, { - &scc_info_Resource_flyteidl_2fadmin_2fagent_2eproto.base, - &scc_info_TaskLog_flyteidl_2fcore_2fexecution_2eproto.base,}}; +::google::protobuf::internal::SCCInfo<1> scc_info_CreateTaskResponse_flyteidl_2fadmin_2fagent_2eproto = + {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 1, InitDefaultsCreateTaskResponse_flyteidl_2fadmin_2fagent_2eproto}, { + &scc_info_Resource_flyteidl_2fadmin_2fagent_2eproto.base,}}; static void InitDefaultsGetTaskRequest_flyteidl_2fadmin_2fagent_2eproto() { GOOGLE_PROTOBUF_VERIFY_VERSION; @@ -410,7 +409,6 @@ const ::google::protobuf::uint32 TableStruct_flyteidl_2fadmin_2fagent_2eproto::o ~0u, // no _weak_field_map_ offsetof(::flyteidl::admin::CreateTaskResponseDefaultTypeInternal, resource_meta_), offsetof(::flyteidl::admin::CreateTaskResponseDefaultTypeInternal, resource_), - PROTOBUF_FIELD_OFFSET(::flyteidl::admin::CreateTaskResponse, log_links_), PROTOBUF_FIELD_OFFSET(::flyteidl::admin::CreateTaskResponse, res_), ~0u, // no _has_bits_ PROTOBUF_FIELD_OFFSET(::flyteidl::admin::GetTaskRequest, _internal_metadata_), @@ -485,16 +483,16 @@ static const ::google::protobuf::internal::MigrationSchema schemas[] PROTOBUF_SE { 27, -1, sizeof(::flyteidl::admin::TaskExecutionMetadata)}, { 38, -1, sizeof(::flyteidl::admin::CreateTaskRequest)}, { 47, -1, sizeof(::flyteidl::admin::CreateTaskResponse)}, - { 56, -1, sizeof(::flyteidl::admin::GetTaskRequest)}, - { 63, -1, sizeof(::flyteidl::admin::GetTaskResponse)}, - { 70, -1, sizeof(::flyteidl::admin::Resource)}, - { 79, -1, sizeof(::flyteidl::admin::DeleteTaskRequest)}, - { 86, -1, sizeof(::flyteidl::admin::DeleteTaskResponse)}, - { 87, -1, sizeof(::flyteidl::admin::Agent)}, - { 94, -1, sizeof(::flyteidl::admin::GetAgentRequest)}, - { 100, -1, sizeof(::flyteidl::admin::GetAgentResponse)}, - { 106, -1, sizeof(::flyteidl::admin::ListAgentsRequest)}, - { 111, -1, sizeof(::flyteidl::admin::ListAgentsResponse)}, + { 55, -1, sizeof(::flyteidl::admin::GetTaskRequest)}, + { 62, -1, sizeof(::flyteidl::admin::GetTaskResponse)}, + { 69, -1, sizeof(::flyteidl::admin::Resource)}, + { 78, -1, sizeof(::flyteidl::admin::DeleteTaskRequest)}, + { 85, -1, sizeof(::flyteidl::admin::DeleteTaskResponse)}, + { 90, -1, sizeof(::flyteidl::admin::Agent)}, + { 97, -1, sizeof(::flyteidl::admin::GetAgentRequest)}, + { 103, -1, sizeof(::flyteidl::admin::GetAgentResponse)}, + { 109, -1, sizeof(::flyteidl::admin::ListAgentsRequest)}, + { 114, -1, sizeof(::flyteidl::admin::ListAgentsResponse)}, }; static ::google::protobuf::Message const * const file_default_instances[] = { @@ -546,52 +544,35 @@ const char descriptor_table_protodef_flyteidl_2fadmin_2fagent_2eproto[] = "p\022-\n\010template\030\002 \001(\0132\033.flyteidl.core.Task" "Template\022\025\n\routput_prefix\030\003 \001(\t\022F\n\027task_" "execution_metadata\030\004 \001(\0132%.flyteidl.admi" - "n.TaskExecutionMetadata\"+\n\022CreateTaskRes" - "ponse\022\025\n\rresource_meta\030\001 \001(\014\":\n\016GetTaskR" - "equest\022\021\n\ttask_type\030\001 \001(\t\022\025\n\rresource_me" - "ta\030\002 \001(\014\"h\n\017GetTaskResponse\022*\n\010resource\030" - "\001 \001(\0132\030.flyteidl.admin.Resource\022)\n\tlog_l" - "inks\030\002 \003(\0132\026.flyteidl.core.TaskLog\"m\n\010Re" - "source\022$\n\005state\030\001 \001(\0162\025.flyteidl.admin.S" - "tate\022*\n\007outputs\030\002 \001(\0132\031.flyteidl.core.Li" - "teralMap\022\017\n\007message\030\003 \001(\t\"=\n\021DeleteTaskR" - "equest\022\021\n\ttask_type\030\001 \001(\t\022\025\n\rresource_me" - "ta\030\002 \001(\014\"\024\n\022DeleteTaskResponse\"3\n\005Agent\022" - "\014\n\004name\030\001 \001(\t\022\034\n\024supported_task_types\030\002 " - "\003(\t\"\037\n\017GetAgentRequest\022\014\n\004name\030\001 \001(\t\"8\n\020" - "GetAgentResponse\022$\n\005agent\030\001 \001(\0132\025.flytei" - "dl.admin.Agent\"\023\n\021ListAgentsRequest\";\n\022L" - "istAgentsResponse\022%\n\006agents\030\001 \003(\0132\025.flyt" - "eidl.admin.Agent*^\n\005State\022\025\n\021RETRYABLE_F" - "AILURE\020\000\022\025\n\021PERMANENT_FAILURE\020\001\022\013\n\007PENDI" - "NG\020\002\022\013\n\007RUNNING\020\003\022\r\n\tSUCCEEDED\020\004B=Z;gith" - "ub.com/flyteorg/flyte/flyteidl/gen/pb-go" - "/flyteidl/adminb\006proto3" - "n.TaskExecutionMetadata\"\215\001\n\022CreateTaskRe" - "sponse\022\027\n\rresource_meta\030\001 \001(\014H\000\022,\n\010resou" - "rce\030\002 \001(\0132\030.flyteidl.admin.ResourceH\000\022)\n" - "\tlog_links\030\003 \003(\0132\026.flyteidl.core.TaskLog" - "B\005\n\003res\":\n\016GetTaskRequest\022\021\n\ttask_type\030\001" - " \001(\t\022\025\n\rresource_meta\030\002 \001(\014\"h\n\017GetTaskRe" - "sponse\022*\n\010resource\030\001 \001(\0132\030.flyteidl.admi" - "n.Resource\022)\n\tlog_links\030\002 \003(\0132\026.flyteidl" - ".core.TaskLog\"\230\001\n\010Resource\022$\n\005state\030\001 \001(" - "\0162\025.flyteidl.admin.State\022*\n\007outputs\030\002 \001(" - "\0132\031.flyteidl.core.LiteralMap\022\017\n\007message\030" - "\003 \001(\t\022)\n\tlog_links\030\004 \003(\0132\026.flyteidl.core" - ".TaskLog\"=\n\021DeleteTaskRequest\022\021\n\ttask_ty" - "pe\030\001 \001(\t\022\025\n\rresource_meta\030\002 \001(\014\"\024\n\022Delet" - "eTaskResponse*^\n\005State\022\025\n\021RETRYABLE_FAIL" - "URE\020\000\022\025\n\021PERMANENT_FAILURE\020\001\022\013\n\007PENDING\020" - "\002\022\013\n\007RUNNING\020\003\022\r\n\tSUCCEEDED\020\004B=Z;github." - "com/flyteorg/flyte/flyteidl/gen/pb-go/fl" - "yteidl/adminb\006proto3" + "n.TaskExecutionMetadata\"b\n\022CreateTaskRes" + "ponse\022\027\n\rresource_meta\030\001 \001(\014H\000\022,\n\010resour" + "ce\030\002 \001(\0132\030.flyteidl.admin.ResourceH\000B\005\n\003" + "res\":\n\016GetTaskRequest\022\021\n\ttask_type\030\001 \001(\t" + "\022\025\n\rresource_meta\030\002 \001(\014\"h\n\017GetTaskRespon" + "se\022*\n\010resource\030\001 \001(\0132\030.flyteidl.admin.Re" + "source\022)\n\tlog_links\030\002 \003(\0132\026.flyteidl.cor" + "e.TaskLog\"\230\001\n\010Resource\022$\n\005state\030\001 \001(\0162\025." + "flyteidl.admin.State\022*\n\007outputs\030\002 \001(\0132\031." + "flyteidl.core.LiteralMap\022\017\n\007message\030\003 \001(" + "\t\022)\n\tlog_links\030\004 \003(\0132\026.flyteidl.core.Tas" + "kLog\"=\n\021DeleteTaskRequest\022\021\n\ttask_type\030\001" + " \001(\t\022\025\n\rresource_meta\030\002 \001(\014\"\024\n\022DeleteTas" + "kResponse\"3\n\005Agent\022\014\n\004name\030\001 \001(\t\022\034\n\024supp" + "orted_task_types\030\002 \003(\t\"\037\n\017GetAgentReques" + "t\022\014\n\004name\030\001 \001(\t\"8\n\020GetAgentResponse\022$\n\005a" + "gent\030\001 \001(\0132\025.flyteidl.admin.Agent\"\023\n\021Lis" + "tAgentsRequest\";\n\022ListAgentsResponse\022%\n\006" + "agents\030\001 \003(\0132\025.flyteidl.admin.Agent*^\n\005S" + "tate\022\025\n\021RETRYABLE_FAILURE\020\000\022\025\n\021PERMANENT" + "_FAILURE\020\001\022\013\n\007PENDING\020\002\022\013\n\007RUNNING\020\003\022\r\n\t" + "SUCCEEDED\020\004B=Z;github.com/flyteorg/flyte" + "/flyteidl/gen/pb-go/flyteidl/adminb\006prot" + "o3" ; ::google::protobuf::internal::DescriptorTable descriptor_table_flyteidl_2fadmin_2fagent_2eproto = { false, InitDefaults_flyteidl_2fadmin_2fagent_2eproto, descriptor_table_protodef_flyteidl_2fadmin_2fagent_2eproto, - "flyteidl/admin/agent.proto", &assign_descriptors_table_flyteidl_2fadmin_2fagent_2eproto, 1660, - "flyteidl/admin/agent.proto", &assign_descriptors_table_flyteidl_2fadmin_2fagent_2eproto, 1743, + "flyteidl/admin/agent.proto", &assign_descriptors_table_flyteidl_2fadmin_2fagent_2eproto, 1842, }; void AddDescriptors_flyteidl_2fadmin_2fagent_2eproto() { @@ -2221,13 +2202,9 @@ void CreateTaskResponse::set_allocated_resource(::flyteidl::admin::Resource* res } // @@protoc_insertion_point(field_set_allocated:flyteidl.admin.CreateTaskResponse.resource) } -void CreateTaskResponse::clear_log_links() { - log_links_.Clear(); -} #if !defined(_MSC_VER) || _MSC_VER >= 1900 const int CreateTaskResponse::kResourceMetaFieldNumber; const int CreateTaskResponse::kResourceFieldNumber; -const int CreateTaskResponse::kLogLinksFieldNumber; #endif // !defined(_MSC_VER) || _MSC_VER >= 1900 CreateTaskResponse::CreateTaskResponse() @@ -2237,8 +2214,7 @@ CreateTaskResponse::CreateTaskResponse() } CreateTaskResponse::CreateTaskResponse(const CreateTaskResponse& from) : ::google::protobuf::Message(), - _internal_metadata_(nullptr), - log_links_(from.log_links_) { + _internal_metadata_(nullptr) { _internal_metadata_.MergeFrom(from._internal_metadata_); clear_has_res(); switch (from.res_case()) { @@ -2308,7 +2284,6 @@ void CreateTaskResponse::Clear() { // Prevent compiler warnings about cached_has_bits being unused (void) cached_has_bits; - log_links_.Clear(); clear_res(); _internal_metadata_.Clear(); } @@ -2354,22 +2329,6 @@ const char* CreateTaskResponse::_InternalParse(const char* begin, const char* en {parser_till_end, object}, ptr - size, ptr)); break; } - // repeated .flyteidl.core.TaskLog log_links = 3; - case 3: { - if (static_cast<::google::protobuf::uint8>(tag) != 26) goto handle_unusual; - do { - ptr = ::google::protobuf::io::ReadSize(ptr, &size); - GOOGLE_PROTOBUF_PARSER_ASSERT(ptr); - parser_till_end = ::flyteidl::core::TaskLog::_InternalParse; - object = msg->add_log_links(); - if (size > end - ptr) goto len_delim_till_end; - ptr += size; - GOOGLE_PROTOBUF_PARSER_ASSERT(ctx->ParseExactRange( - {parser_till_end, object}, ptr - size, ptr)); - if (ptr >= end) break; - } while ((::google::protobuf::io::UnalignedLoad<::google::protobuf::uint64>(ptr) & 255) == 26 && (ptr += 1)); - break; - } default: { handle_unusual: if ((tag & 7) == 4 || tag == 0) { @@ -2426,17 +2385,6 @@ bool CreateTaskResponse::MergePartialFromCodedStream( break; } - // repeated .flyteidl.core.TaskLog log_links = 3; - case 3: { - if (static_cast< ::google::protobuf::uint8>(tag) == (26 & 0xFF)) { - DO_(::google::protobuf::internal::WireFormatLite::ReadMessage( - input, add_log_links())); - } else { - goto handle_unusual; - } - break; - } - default: { handle_unusual: if (tag == 0) { @@ -2476,15 +2424,6 @@ void CreateTaskResponse::SerializeWithCachedSizes( 2, HasBitSetters::resource(this), output); } - // repeated .flyteidl.core.TaskLog log_links = 3; - for (unsigned int i = 0, - n = static_cast(this->log_links_size()); i < n; i++) { - ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray( - 3, - this->log_links(static_cast(i)), - output); - } - if (_internal_metadata_.have_unknown_fields()) { ::google::protobuf::internal::WireFormat::SerializeUnknownFields( _internal_metadata_.unknown_fields(), output); @@ -2512,14 +2451,6 @@ ::google::protobuf::uint8* CreateTaskResponse::InternalSerializeWithCachedSizesT 2, HasBitSetters::resource(this), target); } - // repeated .flyteidl.core.TaskLog log_links = 3; - for (unsigned int i = 0, - n = static_cast(this->log_links_size()); i < n; i++) { - target = ::google::protobuf::internal::WireFormatLite:: - InternalWriteMessageToArray( - 3, this->log_links(static_cast(i)), target); - } - if (_internal_metadata_.have_unknown_fields()) { target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray( _internal_metadata_.unknown_fields(), target); @@ -2541,17 +2472,6 @@ size_t CreateTaskResponse::ByteSizeLong() const { // Prevent compiler warnings about cached_has_bits being unused (void) cached_has_bits; - // repeated .flyteidl.core.TaskLog log_links = 3; - { - unsigned int count = static_cast(this->log_links_size()); - total_size += 1UL * count; - for (unsigned int i = 0; i < count; i++) { - total_size += - ::google::protobuf::internal::WireFormatLite::MessageSize( - this->log_links(static_cast(i))); - } - } - switch (res_case()) { // bytes resource_meta = 1; case kResourceMeta: { @@ -2598,7 +2518,6 @@ void CreateTaskResponse::MergeFrom(const CreateTaskResponse& from) { ::google::protobuf::uint32 cached_has_bits = 0; (void) cached_has_bits; - log_links_.MergeFrom(from.log_links_); switch (from.res_case()) { case kResourceMeta: { set_resource_meta(from.resource_meta()); @@ -2639,7 +2558,6 @@ void CreateTaskResponse::Swap(CreateTaskResponse* other) { void CreateTaskResponse::InternalSwap(CreateTaskResponse* other) { using std::swap; _internal_metadata_.Swap(&other->_internal_metadata_); - CastToBase(&log_links_)->InternalSwap(CastToBase(&other->log_links_)); swap(res_, other->res_); swap(_oneof_case_[0], other->_oneof_case_[0]); } diff --git a/flyteidl/gen/pb-cpp/flyteidl/admin/agent.pb.h b/flyteidl/gen/pb-cpp/flyteidl/admin/agent.pb.h index 6d436a6cb4..86aeccc4b2 100644 --- a/flyteidl/gen/pb-cpp/flyteidl/admin/agent.pb.h +++ b/flyteidl/gen/pb-cpp/flyteidl/admin/agent.pb.h @@ -672,18 +672,6 @@ class CreateTaskResponse final : // accessors ------------------------------------------------------- - // repeated .flyteidl.core.TaskLog log_links = 3; - int log_links_size() const; - void clear_log_links(); - static const int kLogLinksFieldNumber = 3; - ::flyteidl::core::TaskLog* mutable_log_links(int index); - ::google::protobuf::RepeatedPtrField< ::flyteidl::core::TaskLog >* - mutable_log_links(); - const ::flyteidl::core::TaskLog& log_links(int index) const; - ::flyteidl::core::TaskLog* add_log_links(); - const ::google::protobuf::RepeatedPtrField< ::flyteidl::core::TaskLog >& - log_links() const; - // bytes resource_meta = 1; private: bool has_resource_meta() const; @@ -722,7 +710,6 @@ class CreateTaskResponse final : inline void clear_has_res(); ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_; - ::google::protobuf::RepeatedPtrField< ::flyteidl::core::TaskLog > log_links_; union ResUnion { ResUnion() {} ::google::protobuf::internal::ArenaStringPtr resource_meta_; @@ -2544,33 +2531,6 @@ inline ::flyteidl::admin::Resource* CreateTaskResponse::mutable_resource() { return res_.resource_; } -// repeated .flyteidl.core.TaskLog log_links = 3; -inline int CreateTaskResponse::log_links_size() const { - return log_links_.size(); -} -inline ::flyteidl::core::TaskLog* CreateTaskResponse::mutable_log_links(int index) { - // @@protoc_insertion_point(field_mutable:flyteidl.admin.CreateTaskResponse.log_links) - return log_links_.Mutable(index); -} -inline ::google::protobuf::RepeatedPtrField< ::flyteidl::core::TaskLog >* -CreateTaskResponse::mutable_log_links() { - // @@protoc_insertion_point(field_mutable_list:flyteidl.admin.CreateTaskResponse.log_links) - return &log_links_; -} -inline const ::flyteidl::core::TaskLog& CreateTaskResponse::log_links(int index) const { - // @@protoc_insertion_point(field_get:flyteidl.admin.CreateTaskResponse.log_links) - return log_links_.Get(index); -} -inline ::flyteidl::core::TaskLog* CreateTaskResponse::add_log_links() { - // @@protoc_insertion_point(field_add:flyteidl.admin.CreateTaskResponse.log_links) - return log_links_.Add(); -} -inline const ::google::protobuf::RepeatedPtrField< ::flyteidl::core::TaskLog >& -CreateTaskResponse::log_links() const { - // @@protoc_insertion_point(field_list:flyteidl.admin.CreateTaskResponse.log_links) - return log_links_; -} - inline bool CreateTaskResponse::has_res() const { return res_case() != RES_NOT_SET; } diff --git a/flyteidl/gen/pb-cpp/flyteidl/service/agent.grpc.pb.h b/flyteidl/gen/pb-cpp/flyteidl/service/agent.grpc.pb.h index c55e2276f3..e1cb5da223 100644 --- a/flyteidl/gen/pb-cpp/flyteidl/service/agent.grpc.pb.h +++ b/flyteidl/gen/pb-cpp/flyteidl/service/agent.grpc.pb.h @@ -41,9 +41,6 @@ namespace flyteidl { namespace service { // AsyncAgentService defines an RPC Service that allows propeller to send the request to the agent server. -// It can handle asynchronous tasks and synchronous tasks. -// Asynchronous tasks are for tasks running long, for example running query job. -// Synchronous tasks are for tasks running quick, for example, you want to execute something really fast, or even retrieving some metadata from a backend service. class AsyncAgentService final { public: static constexpr char const* service_full_name() { diff --git a/flyteidl/gen/pb-go/flyteidl/admin/agent.pb.go b/flyteidl/gen/pb-go/flyteidl/admin/agent.pb.go index a316ff3523..2e255f5c88 100644 --- a/flyteidl/gen/pb-go/flyteidl/admin/agent.pb.go +++ b/flyteidl/gen/pb-go/flyteidl/admin/agent.pb.go @@ -220,12 +220,10 @@ type CreateTaskResponse struct { // Types that are valid to be assigned to Res: // *CreateTaskResponse_ResourceMeta // *CreateTaskResponse_Resource - Res isCreateTaskResponse_Res `protobuf_oneof:"res"` - // log information for the task execution. - LogLinks []*core.TaskLog `protobuf:"bytes,3,rep,name=log_links,json=logLinks,proto3" json:"log_links,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Res isCreateTaskResponse_Res `protobuf_oneof:"res"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *CreateTaskResponse) Reset() { *m = CreateTaskResponse{} } @@ -290,13 +288,6 @@ func (m *CreateTaskResponse) GetResource() *Resource { return nil } -func (m *CreateTaskResponse) GetLogLinks() []*core.TaskLog { - if m != nil { - return m.LogLinks - } - return nil -} - // XXX_OneofWrappers is for the internal use of the proto package. func (*CreateTaskResponse) XXX_OneofWrappers() []interface{} { return []interface{}{ @@ -781,60 +772,62 @@ func init() { func init() { proto.RegisterFile("flyteidl/admin/agent.proto", fileDescriptor_c434e52bb0028071) } var fileDescriptor_c434e52bb0028071 = []byte{ - // 869 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x56, 0xf1, 0x6f, 0xdb, 0x44, - 0x14, 0x26, 0x49, 0xd3, 0x26, 0x2f, 0x5d, 0x97, 0xdc, 0x1a, 0x70, 0xb3, 0x81, 0x2a, 0xa3, 0xa1, - 0x8a, 0x69, 0x0e, 0x6b, 0x11, 0x74, 0x20, 0x98, 0xb2, 0xd6, 0x54, 0x95, 0xd2, 0xa8, 0xba, 0xa6, - 0x08, 0x90, 0xc0, 0xba, 0x38, 0xaf, 0xc6, 0x8a, 0x63, 0x1b, 0xdf, 0xb9, 0x5a, 0x24, 0x7e, 0x43, - 0xe2, 0x6f, 0xe0, 0xcf, 0x45, 0xbe, 0x3b, 0xbb, 0x49, 0xf0, 0x50, 0xa7, 0xfd, 0x66, 0xbf, 0xef, - 0xbb, 0xef, 0x7d, 0x7e, 0xdf, 0x5d, 0x2e, 0xd0, 0xbb, 0x09, 0x16, 0x02, 0xfd, 0x69, 0xd0, 0x67, - 0xd3, 0xb9, 0x1f, 0xf6, 0x99, 0x87, 0xa1, 0xb0, 0xe2, 0x24, 0x12, 0x11, 0xd9, 0xc9, 0x31, 0x4b, - 0x62, 0xbd, 0x27, 0x05, 0xd7, 0x8d, 0x12, 0xec, 0x07, 0xbe, 0xc0, 0x84, 0x05, 0x5c, 0xb1, 0x7b, - 0x7b, 0xab, 0xa8, 0x60, 0x7c, 0x96, 0x43, 0x1f, 0xaf, 0x42, 0x7e, 0x28, 0x30, 0xb9, 0x61, 0x2e, - 0x6a, 0xf8, 0x93, 0x35, 0x78, 0x8a, 0xa1, 0xf0, 0x6f, 0x7c, 0x4c, 0xca, 0x97, 0xe3, 0x1b, 0x74, - 0x53, 0xe1, 0x47, 0xa1, 0x82, 0xcd, 0x7f, 0xea, 0xd0, 0x1d, 0x33, 0x3e, 0xb3, 0xf3, 0xfa, 0x05, - 0x0a, 0x36, 0x65, 0x82, 0x11, 0x0a, 0x9d, 0xcc, 0x86, 0x53, 0xac, 0x70, 0xfc, 0xa9, 0x51, 0xd9, - 0xaf, 0x1c, 0xb4, 0x0e, 0x3f, 0xb3, 0x8a, 0x8f, 0xcb, 0x44, 0xad, 0x15, 0x81, 0xf3, 0xc2, 0x01, - 0x7d, 0x28, 0x56, 0x01, 0xf2, 0x04, 0x9a, 0x21, 0x9b, 0x23, 0x8f, 0x99, 0x8b, 0x46, 0x75, 0xbf, - 0x72, 0xd0, 0xa4, 0x77, 0x05, 0x72, 0x0e, 0x9b, 0x01, 0x9b, 0x60, 0xc0, 0x8d, 0xda, 0x7e, 0xed, - 0xa0, 0x75, 0xf8, 0xc2, 0x5a, 0x9d, 0xa1, 0x55, 0x6a, 0xd4, 0x1a, 0xca, 0x35, 0x76, 0x28, 0x92, - 0x05, 0xd5, 0x02, 0xe4, 0x27, 0x68, 0xb1, 0x30, 0x8c, 0x04, 0xcb, 0x98, 0xdc, 0xd8, 0x90, 0x7a, - 0x5f, 0xdd, 0x4f, 0x6f, 0x70, 0xb7, 0x50, 0x89, 0x2e, 0x4b, 0x11, 0x0b, 0x1e, 0xcd, 0x8e, 0xb9, - 0xc3, 0x31, 0xb9, 0xf5, 0x5d, 0x74, 0x98, 0xeb, 0x46, 0x69, 0x28, 0x8c, 0xba, 0xfc, 0x98, 0xce, - 0xec, 0x98, 0x5f, 0x29, 0x64, 0xa0, 0x00, 0x22, 0xa0, 0x8b, 0xe1, 0xad, 0x9f, 0x44, 0xe1, 0x1c, - 0x43, 0xe1, 0xdc, 0xb2, 0xc4, 0x67, 0x93, 0x00, 0xb9, 0xb1, 0x29, 0x3d, 0xbd, 0xba, 0x9f, 0x27, - 0xfb, 0x4e, 0xe2, 0xc7, 0x5c, 0x41, 0x99, 0xdb, 0xc5, 0x12, 0xa8, 0xf7, 0x12, 0x5a, 0x4b, 0x63, - 0x21, 0x6d, 0xa8, 0xcd, 0x70, 0x21, 0xd3, 0x6b, 0xd2, 0xec, 0x91, 0xec, 0x42, 0xfd, 0x96, 0x05, - 0x69, 0x9e, 0x82, 0x7a, 0xf9, 0xa6, 0x7a, 0x5c, 0xe9, 0x7d, 0x0f, 0xed, 0xf5, 0x09, 0xbc, 0xd3, - 0xfa, 0x33, 0xd8, 0x7b, 0xab, 0xdb, 0x77, 0x11, 0x32, 0xff, 0xaa, 0x42, 0xe7, 0x24, 0x41, 0x26, - 0x30, 0x9b, 0x09, 0xc5, 0x3f, 0x52, 0xe4, 0x82, 0xbc, 0x80, 0x4d, 0x3f, 0x8c, 0x53, 0xc1, 0xf5, - 0x5e, 0xdc, 0x5b, 0xdb, 0x8b, 0x43, 0x75, 0xb0, 0x2e, 0x58, 0x4c, 0x35, 0x91, 0x7c, 0x0d, 0x0d, - 0x81, 0xf3, 0x38, 0x60, 0x42, 0x75, 0x69, 0x1d, 0x3e, 0x2e, 0xd9, 0xc0, 0x63, 0x4d, 0xa1, 0x05, - 0x99, 0x7c, 0x0a, 0x0f, 0xa2, 0x54, 0xc4, 0xa9, 0x70, 0xe2, 0x04, 0x6f, 0xfc, 0x37, 0x46, 0x4d, - 0x7a, 0xdc, 0x56, 0xc5, 0x4b, 0x59, 0x23, 0xbf, 0xc2, 0x47, 0x6b, 0xe7, 0x64, 0xae, 0x53, 0x33, - 0x36, 0x64, 0xb3, 0xa7, 0xf7, 0x8a, 0x98, 0x76, 0x45, 0x59, 0xd9, 0x7c, 0x09, 0x64, 0x79, 0x08, - 0x3c, 0x8e, 0x42, 0x2e, 0x9d, 0x25, 0xc8, 0xa3, 0x34, 0x71, 0x51, 0xb6, 0x93, 0xc3, 0xd8, 0xa6, - 0xdb, 0x79, 0x31, 0x5b, 0x6e, 0x52, 0xd8, 0x39, 0x43, 0xb1, 0x3c, 0xbc, 0xc7, 0xd0, 0x94, 0x5e, - 0xc5, 0x22, 0x46, 0x1d, 0x42, 0x23, 0x2b, 0x8c, 0x17, 0x71, 0x89, 0x66, 0xb5, 0x44, 0xf3, 0x4f, - 0x78, 0x58, 0x68, 0x6a, 0x2f, 0x5f, 0x42, 0x23, 0xa7, 0xe8, 0x4c, 0x8c, 0xf5, 0x2f, 0xa6, 0x1a, - 0xa7, 0x05, 0x93, 0x1c, 0x41, 0x33, 0x88, 0x3c, 0x27, 0xf0, 0xc3, 0x19, 0x37, 0xaa, 0xf2, 0x2c, - 0x7c, 0x58, 0x92, 0xca, 0x30, 0xf2, 0x68, 0x23, 0x88, 0xbc, 0x61, 0xc6, 0x33, 0xff, 0xae, 0x40, - 0x23, 0xd7, 0x22, 0xcf, 0xa0, 0xce, 0x45, 0x96, 0x69, 0xd6, 0x74, 0xe7, 0xb0, 0xbb, 0xde, 0xf4, - 0x2a, 0x03, 0xa9, 0xe2, 0x90, 0x23, 0xd8, 0x52, 0xa9, 0x71, 0xbd, 0x05, 0xfe, 0x67, 0xdf, 0xe4, - 0x4c, 0x62, 0xc0, 0xd6, 0x1c, 0x39, 0x67, 0x1e, 0xea, 0xe4, 0xf3, 0x57, 0xf3, 0x1a, 0x3a, 0xa7, - 0x18, 0xe0, 0xea, 0xd6, 0x7c, 0xff, 0xe9, 0xee, 0x02, 0x59, 0x96, 0x55, 0x03, 0x36, 0x2f, 0xa0, - 0x3e, 0xc8, 0x6e, 0x16, 0x42, 0x60, 0x23, 0xfb, 0xb5, 0xd4, 0xda, 0xf2, 0x99, 0x7c, 0x01, 0xbb, - 0x3c, 0x8d, 0xe3, 0x28, 0x11, 0x38, 0x75, 0x8a, 0xf6, 0x6a, 0xa4, 0x4d, 0x4a, 0x0a, 0x6c, 0xac, - 0x8d, 0x70, 0xf3, 0xa9, 0x8c, 0x50, 0x2a, 0xe6, 0xce, 0x4b, 0x84, 0xcd, 0x57, 0xd0, 0xbe, 0xa3, - 0xe9, 0xa8, 0x9f, 0x41, 0x5d, 0xde, 0x71, 0x3a, 0xe7, 0xff, 0x8c, 0x5c, 0xb1, 0x15, 0xc7, 0x7c, - 0x04, 0x9d, 0xa1, 0xcf, 0x95, 0x02, 0xd7, 0x9d, 0xcc, 0x13, 0x20, 0xcb, 0x45, 0xad, 0xfb, 0x1c, - 0x36, 0xe5, 0x9a, 0xec, 0x50, 0xd7, 0xde, 0x2e, 0xac, 0x49, 0x9f, 0xff, 0x06, 0x75, 0x19, 0x2e, - 0xe9, 0x42, 0x87, 0xda, 0x63, 0xfa, 0xf3, 0xe0, 0xf5, 0xd0, 0x76, 0x7e, 0x18, 0x9c, 0x0f, 0xaf, - 0xa9, 0xdd, 0xfe, 0x20, 0x2b, 0x5f, 0xda, 0xf4, 0x62, 0x30, 0xb2, 0x47, 0xe3, 0xa2, 0x5c, 0x21, - 0x2d, 0xd8, 0xba, 0xb4, 0x47, 0xa7, 0xe7, 0xa3, 0xb3, 0x76, 0x35, 0x7b, 0xa1, 0xd7, 0xa3, 0x51, - 0xf6, 0x52, 0x23, 0x0f, 0xa0, 0x79, 0x75, 0x7d, 0x72, 0x62, 0xdb, 0xa7, 0xf6, 0x69, 0x7b, 0xe3, - 0xf5, 0x77, 0xbf, 0x7c, 0xeb, 0xf9, 0xe2, 0xf7, 0x74, 0x62, 0xb9, 0xd1, 0xbc, 0x2f, 0xad, 0x44, - 0x89, 0xa7, 0x1e, 0xfa, 0xc5, 0x7d, 0xea, 0x61, 0xd8, 0x8f, 0x27, 0xcf, 0xbd, 0xa8, 0xbf, 0xfa, - 0x37, 0x60, 0xb2, 0x29, 0xaf, 0xd6, 0xa3, 0x7f, 0x03, 0x00, 0x00, 0xff, 0xff, 0x81, 0xa7, 0x12, - 0x0e, 0x1f, 0x08, 0x00, 0x00, + // 901 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x56, 0x7f, 0x6f, 0xe3, 0x44, + 0x10, 0x6d, 0x7e, 0x36, 0x99, 0xb4, 0xbd, 0x64, 0xaf, 0x01, 0x37, 0x77, 0xa0, 0xca, 0xa8, 0xa8, + 0xe2, 0x74, 0x09, 0xd7, 0xa2, 0xa3, 0x80, 0xe0, 0x94, 0xb6, 0xa6, 0x57, 0x29, 0x8d, 0xaa, 0x6d, + 0x8a, 0x00, 0x09, 0xa2, 0x4d, 0x32, 0x35, 0x56, 0x1c, 0xdb, 0x78, 0xd7, 0xd5, 0x05, 0xf1, 0x1f, + 0x5f, 0x82, 0xef, 0xc2, 0x97, 0x43, 0xde, 0x5d, 0x3b, 0x71, 0xc8, 0x9d, 0x7a, 0xe2, 0x3f, 0xef, + 0xbc, 0xb7, 0x6f, 0xde, 0xce, 0xcc, 0x66, 0x03, 0xad, 0x3b, 0x77, 0x2e, 0xd0, 0x99, 0xb8, 0x1d, + 0x36, 0x99, 0x39, 0x5e, 0x87, 0xd9, 0xe8, 0x89, 0x76, 0x10, 0xfa, 0xc2, 0x27, 0x3b, 0x09, 0xd6, + 0x96, 0x58, 0xeb, 0x69, 0xca, 0x1d, 0xfb, 0x21, 0x76, 0x5c, 0x47, 0x60, 0xc8, 0x5c, 0xae, 0xd8, + 0xad, 0xbd, 0x2c, 0x2a, 0x18, 0x9f, 0x26, 0xd0, 0x47, 0x59, 0xc8, 0xf1, 0x04, 0x86, 0x77, 0x6c, + 0x8c, 0x1a, 0xfe, 0x78, 0x05, 0x9e, 0xa0, 0x27, 0x9c, 0x3b, 0x07, 0xc3, 0xf5, 0xdb, 0xf1, 0x0d, + 0x8e, 0x23, 0xe1, 0xf8, 0x9e, 0x82, 0xcd, 0xbf, 0x4b, 0xd0, 0x1c, 0x30, 0x3e, 0xb5, 0x92, 0xf8, + 0x15, 0x0a, 0x36, 0x61, 0x82, 0x11, 0x0a, 0x8d, 0xd8, 0xc6, 0x30, 0xdd, 0x31, 0x74, 0x26, 0x46, + 0x6e, 0x3f, 0x77, 0x58, 0x3b, 0xfa, 0xb4, 0x9d, 0x1e, 0x2e, 0x16, 0x6d, 0x67, 0x04, 0x2e, 0x53, + 0x07, 0xf4, 0x91, 0xc8, 0x02, 0xe4, 0x29, 0x54, 0x3d, 0x36, 0x43, 0x1e, 0xb0, 0x31, 0x1a, 0xf9, + 0xfd, 0xdc, 0x61, 0x95, 0x2e, 0x02, 0xe4, 0x12, 0xca, 0x2e, 0x1b, 0xa1, 0xcb, 0x8d, 0xc2, 0x7e, + 0xe1, 0xb0, 0x76, 0xf4, 0xa2, 0x9d, 0xad, 0x61, 0x7b, 0xad, 0xd1, 0x76, 0x4f, 0xee, 0xb1, 0x3c, + 0x11, 0xce, 0xa9, 0x16, 0x20, 0x3f, 0x42, 0x8d, 0x79, 0x9e, 0x2f, 0x58, 0xcc, 0xe4, 0x46, 0x51, + 0xea, 0xbd, 0x7c, 0x98, 0x5e, 0x77, 0xb1, 0x51, 0x89, 0x2e, 0x4b, 0x91, 0x36, 0x3c, 0x9e, 0x9e, + 0xf0, 0x21, 0xc7, 0xf0, 0xde, 0x19, 0xe3, 0x90, 0x8d, 0xc7, 0x7e, 0xe4, 0x09, 0xa3, 0x24, 0x0f, + 0xd3, 0x98, 0x9e, 0xf0, 0x1b, 0x85, 0x74, 0x15, 0x40, 0x04, 0x34, 0xd1, 0xbb, 0x77, 0x42, 0xdf, + 0x9b, 0xa1, 0x27, 0x86, 0xf7, 0x2c, 0x74, 0xd8, 0xc8, 0x45, 0x6e, 0x94, 0xa5, 0xa7, 0x57, 0x0f, + 0xf3, 0x64, 0x2d, 0x24, 0x7e, 0x48, 0x14, 0x94, 0xb9, 0x5d, 0x5c, 0x03, 0xb5, 0xbe, 0x82, 0xda, + 0x52, 0x59, 0x48, 0x1d, 0x0a, 0x53, 0x9c, 0xcb, 0xee, 0x55, 0x69, 0xfc, 0x49, 0x76, 0xa1, 0x74, + 0xcf, 0xdc, 0x28, 0xe9, 0x82, 0x5a, 0x7c, 0x9d, 0x3f, 0xc9, 0xb5, 0xbe, 0x83, 0xfa, 0x6a, 0x05, + 0xde, 0x6b, 0xff, 0x05, 0xec, 0xbd, 0xd5, 0xed, 0xfb, 0x08, 0x99, 0x7f, 0xe5, 0xa1, 0x71, 0x16, + 0x22, 0x13, 0x18, 0xd7, 0x84, 0xe2, 0xef, 0x11, 0x72, 0x41, 0x5e, 0x40, 0xd9, 0xf1, 0x82, 0x48, + 0x70, 0x3d, 0x8b, 0x7b, 0x2b, 0xb3, 0xd8, 0x53, 0x17, 0xeb, 0x8a, 0x05, 0x54, 0x13, 0xc9, 0x97, + 0x50, 0x11, 0x38, 0x0b, 0x5c, 0x26, 0x54, 0x96, 0xda, 0xd1, 0x93, 0x35, 0x03, 0x3c, 0xd0, 0x14, + 0x9a, 0x92, 0xc9, 0x27, 0xb0, 0xed, 0x47, 0x22, 0x88, 0xc4, 0x30, 0x08, 0xf1, 0xce, 0x79, 0x63, + 0x14, 0xa4, 0xc7, 0x2d, 0x15, 0xbc, 0x96, 0x31, 0xf2, 0x0b, 0x7c, 0xb8, 0x72, 0x4f, 0x66, 0xba, + 0x6b, 0x46, 0x51, 0x26, 0x3b, 0x78, 0x50, 0x8b, 0x69, 0x53, 0xac, 0x0b, 0x9b, 0x7f, 0x00, 0x59, + 0x2e, 0x02, 0x0f, 0x7c, 0x8f, 0x23, 0x39, 0x80, 0xed, 0x10, 0xb9, 0x1f, 0x85, 0x63, 0x94, 0xe9, + 0x64, 0x31, 0xb6, 0x5e, 0x6f, 0xd0, 0xad, 0x24, 0x1c, 0x0b, 0x90, 0x97, 0x50, 0x49, 0xd6, 0xfa, + 0xe4, 0xc6, 0xaa, 0x19, 0xaa, 0xf1, 0xd7, 0x1b, 0x34, 0xe5, 0x9e, 0x96, 0xa0, 0x10, 0x22, 0x37, + 0x29, 0xec, 0x5c, 0xa0, 0x58, 0xae, 0xfe, 0x13, 0xa8, 0xca, 0xc3, 0x8a, 0x79, 0x80, 0xba, 0x8b, + 0x95, 0x38, 0x30, 0x98, 0x07, 0xb2, 0x5c, 0x59, 0x53, 0x71, 0xca, 0xad, 0xac, 0x25, 0xf3, 0x4f, + 0x78, 0x94, 0x6a, 0xea, 0xc3, 0x7c, 0xb1, 0xe4, 0x32, 0xf7, 0x6e, 0x97, 0x0b, 0x8f, 0xe4, 0x18, + 0xaa, 0xae, 0x6f, 0x0f, 0x5d, 0xc7, 0x9b, 0x72, 0x23, 0x2f, 0x2f, 0xd3, 0x07, 0x6b, 0xda, 0xda, + 0xf3, 0x6d, 0x5a, 0x71, 0x7d, 0xbb, 0x17, 0xf3, 0xcc, 0x7f, 0x72, 0x50, 0x49, 0xb4, 0xc8, 0x33, + 0x28, 0x71, 0x11, 0x0f, 0x45, 0x9c, 0x74, 0xe7, 0xa8, 0xb9, 0x9a, 0xf4, 0x26, 0x06, 0xa9, 0xe2, + 0x90, 0x63, 0xd8, 0x54, 0x6d, 0xe7, 0xba, 0x92, 0xef, 0x18, 0xbc, 0x84, 0x49, 0x0c, 0xd8, 0x9c, + 0x21, 0xe7, 0xcc, 0x46, 0x3d, 0x3a, 0xc9, 0x32, 0xeb, 0xbe, 0xf8, 0x40, 0xf7, 0xb7, 0xd0, 0x38, + 0x47, 0x17, 0xb3, 0x17, 0xe2, 0xff, 0xb7, 0x64, 0x17, 0xc8, 0xb2, 0xac, 0xea, 0x8a, 0x79, 0x05, + 0xa5, 0x6e, 0xfc, 0x9e, 0x11, 0x02, 0xc5, 0xf8, 0x37, 0x5a, 0x6b, 0xcb, 0x6f, 0xf2, 0x39, 0xec, + 0xf2, 0x28, 0x08, 0xfc, 0x50, 0xe0, 0x64, 0x98, 0xa6, 0x57, 0x7d, 0xa8, 0x52, 0x92, 0x62, 0x03, + 0x6d, 0x84, 0x9b, 0x07, 0xb2, 0xef, 0x52, 0x31, 0x71, 0xbe, 0x46, 0xd8, 0x7c, 0x05, 0xf5, 0x05, + 0x4d, 0xcf, 0xc7, 0x33, 0x28, 0xc9, 0x97, 0x55, 0x0f, 0xc7, 0x7f, 0xfa, 0xa4, 0xd8, 0x8a, 0x63, + 0x3e, 0x86, 0x46, 0xcf, 0xe1, 0x4a, 0x81, 0xeb, 0x4c, 0xe6, 0x19, 0x90, 0xe5, 0xa0, 0xd6, 0x7d, + 0x0e, 0x65, 0xb9, 0x27, 0xfe, 0x29, 0x29, 0xbc, 0x5d, 0x58, 0x93, 0x3e, 0xfb, 0x15, 0x4a, 0x72, + 0x22, 0x48, 0x13, 0x1a, 0xd4, 0x1a, 0xd0, 0x9f, 0xba, 0xa7, 0x3d, 0x6b, 0xf8, 0x7d, 0xf7, 0xb2, + 0x77, 0x4b, 0xad, 0xfa, 0x46, 0x1c, 0xbe, 0xb6, 0xe8, 0x55, 0xb7, 0x6f, 0xf5, 0x07, 0x69, 0x38, + 0x47, 0x6a, 0xb0, 0x79, 0x6d, 0xf5, 0xcf, 0x2f, 0xfb, 0x17, 0xf5, 0x7c, 0xbc, 0xa0, 0xb7, 0xfd, + 0x7e, 0xbc, 0x28, 0x90, 0x6d, 0xa8, 0xde, 0xdc, 0x9e, 0x9d, 0x59, 0xd6, 0xb9, 0x75, 0x5e, 0x2f, + 0x9e, 0x7e, 0xfb, 0xf3, 0x37, 0xb6, 0x23, 0x7e, 0x8b, 0x46, 0xed, 0xb1, 0x3f, 0xeb, 0x48, 0x2b, + 0x7e, 0x68, 0xab, 0x8f, 0x4e, 0xfa, 0x8a, 0xdb, 0xe8, 0x75, 0x82, 0xd1, 0x73, 0xdb, 0xef, 0x64, + 0xff, 0x7c, 0x8c, 0xca, 0xf2, 0x41, 0x3f, 0xfe, 0x37, 0x00, 0x00, 0xff, 0xff, 0x3c, 0x11, 0x18, + 0x7d, 0x95, 0x08, 0x00, 0x00, } diff --git a/flyteidl/gen/pb-go/flyteidl/admin/agent.pb.validate.go b/flyteidl/gen/pb-go/flyteidl/admin/agent.pb.validate.go index 81ef0fc904..8bdff082f3 100644 --- a/flyteidl/gen/pb-go/flyteidl/admin/agent.pb.validate.go +++ b/flyteidl/gen/pb-go/flyteidl/admin/agent.pb.validate.go @@ -230,21 +230,6 @@ func (m *CreateTaskResponse) Validate() error { return nil } - for idx, item := range m.GetLogLinks() { - _, _ = idx, item - - if v, ok := interface{}(item).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return CreateTaskResponseValidationError{ - field: fmt.Sprintf("LogLinks[%v]", idx), - reason: "embedded message failed validation", - cause: err, - } - } - } - - } - switch m.Res.(type) { case *CreateTaskResponse_ResourceMeta: diff --git a/flyteidl/gen/pb-go/flyteidl/service/agent.swagger.json b/flyteidl/gen/pb-go/flyteidl/service/agent.swagger.json index 31e7ebf640..623a3ecd94 100644 --- a/flyteidl/gen/pb-go/flyteidl/service/agent.swagger.json +++ b/flyteidl/gen/pb-go/flyteidl/service/agent.swagger.json @@ -242,13 +242,6 @@ }, "resource": { "$ref": "#/definitions/adminResource" - }, - "log_links": { - "type": "array", - "items": { - "$ref": "#/definitions/coreTaskLog" - }, - "description": "log information for the task execution." } }, "description": "Represents a create response structure." diff --git a/flyteidl/gen/pb-java/flyteidl/admin/AgentOuterClass.java b/flyteidl/gen/pb-java/flyteidl/admin/AgentOuterClass.java index a6fa424d2a..f71d1743ff 100644 --- a/flyteidl/gen/pb-java/flyteidl/admin/AgentOuterClass.java +++ b/flyteidl/gen/pb-java/flyteidl/admin/AgentOuterClass.java @@ -3615,13 +3615,24 @@ public interface CreateTaskResponseOrBuilder extends com.google.protobuf.MessageOrBuilder { /** - *
-     * Metadata is created by the agent. It could be a string (jobId) or a dict (more complex metadata).
-     * 
- * * bytes resource_meta = 1; */ com.google.protobuf.ByteString getResourceMeta(); + + /** + * .flyteidl.admin.Resource resource = 2; + */ + boolean hasResource(); + /** + * .flyteidl.admin.Resource resource = 2; + */ + flyteidl.admin.AgentOuterClass.Resource getResource(); + /** + * .flyteidl.admin.Resource resource = 2; + */ + flyteidl.admin.AgentOuterClass.ResourceOrBuilder getResourceOrBuilder(); + + public flyteidl.admin.AgentOuterClass.CreateTaskResponse.ResCase getResCase(); } /** *
@@ -3640,7 +3651,6 @@ private CreateTaskResponse(com.google.protobuf.GeneratedMessageV3.Builder bui
       super(builder);
     }
     private CreateTaskResponse() {
-      resourceMeta_ = com.google.protobuf.ByteString.EMPTY;
     }
 
     @java.lang.Override
@@ -3668,8 +3678,22 @@ private CreateTaskResponse(
               done = true;
               break;
             case 10: {
-
-              resourceMeta_ = input.readBytes();
+              resCase_ = 1;
+              res_ = input.readBytes();
+              break;
+            }
+            case 18: {
+              flyteidl.admin.AgentOuterClass.Resource.Builder subBuilder = null;
+              if (resCase_ == 2) {
+                subBuilder = ((flyteidl.admin.AgentOuterClass.Resource) res_).toBuilder();
+              }
+              res_ =
+                  input.readMessage(flyteidl.admin.AgentOuterClass.Resource.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom((flyteidl.admin.AgentOuterClass.Resource) res_);
+                res_ = subBuilder.buildPartial();
+              }
+              resCase_ = 2;
               break;
             }
             default: {
@@ -3704,17 +3728,79 @@ private CreateTaskResponse(
               flyteidl.admin.AgentOuterClass.CreateTaskResponse.class, flyteidl.admin.AgentOuterClass.CreateTaskResponse.Builder.class);
     }
 
+    private int resCase_ = 0;
+    private java.lang.Object res_;
+    public enum ResCase
+        implements com.google.protobuf.Internal.EnumLite {
+      RESOURCE_META(1),
+      RESOURCE(2),
+      RES_NOT_SET(0);
+      private final int value;
+      private ResCase(int value) {
+        this.value = value;
+      }
+      /**
+       * @deprecated Use {@link #forNumber(int)} instead.
+       */
+      @java.lang.Deprecated
+      public static ResCase valueOf(int value) {
+        return forNumber(value);
+      }
+
+      public static ResCase forNumber(int value) {
+        switch (value) {
+          case 1: return RESOURCE_META;
+          case 2: return RESOURCE;
+          case 0: return RES_NOT_SET;
+          default: return null;
+        }
+      }
+      public int getNumber() {
+        return this.value;
+      }
+    };
+
+    public ResCase
+    getResCase() {
+      return ResCase.forNumber(
+          resCase_);
+    }
+
     public static final int RESOURCE_META_FIELD_NUMBER = 1;
-    private com.google.protobuf.ByteString resourceMeta_;
     /**
-     * 
-     * Metadata is created by the agent. It could be a string (jobId) or a dict (more complex metadata).
-     * 
- * * bytes resource_meta = 1; */ public com.google.protobuf.ByteString getResourceMeta() { - return resourceMeta_; + if (resCase_ == 1) { + return (com.google.protobuf.ByteString) res_; + } + return com.google.protobuf.ByteString.EMPTY; + } + + public static final int RESOURCE_FIELD_NUMBER = 2; + /** + * .flyteidl.admin.Resource resource = 2; + */ + public boolean hasResource() { + return resCase_ == 2; + } + /** + * .flyteidl.admin.Resource resource = 2; + */ + public flyteidl.admin.AgentOuterClass.Resource getResource() { + if (resCase_ == 2) { + return (flyteidl.admin.AgentOuterClass.Resource) res_; + } + return flyteidl.admin.AgentOuterClass.Resource.getDefaultInstance(); + } + /** + * .flyteidl.admin.Resource resource = 2; + */ + public flyteidl.admin.AgentOuterClass.ResourceOrBuilder getResourceOrBuilder() { + if (resCase_ == 2) { + return (flyteidl.admin.AgentOuterClass.Resource) res_; + } + return flyteidl.admin.AgentOuterClass.Resource.getDefaultInstance(); } private byte memoizedIsInitialized = -1; @@ -3731,8 +3817,12 @@ public final boolean isInitialized() { @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (!resourceMeta_.isEmpty()) { - output.writeBytes(1, resourceMeta_); + if (resCase_ == 1) { + output.writeBytes( + 1, (com.google.protobuf.ByteString) res_); + } + if (resCase_ == 2) { + output.writeMessage(2, (flyteidl.admin.AgentOuterClass.Resource) res_); } unknownFields.writeTo(output); } @@ -3743,9 +3833,14 @@ public int getSerializedSize() { if (size != -1) return size; size = 0; - if (!resourceMeta_.isEmpty()) { + if (resCase_ == 1) { + size += com.google.protobuf.CodedOutputStream + .computeBytesSize( + 1, (com.google.protobuf.ByteString) res_); + } + if (resCase_ == 2) { size += com.google.protobuf.CodedOutputStream - .computeBytesSize(1, resourceMeta_); + .computeMessageSize(2, (flyteidl.admin.AgentOuterClass.Resource) res_); } size += unknownFields.getSerializedSize(); memoizedSize = size; @@ -3762,8 +3857,19 @@ public boolean equals(final java.lang.Object obj) { } flyteidl.admin.AgentOuterClass.CreateTaskResponse other = (flyteidl.admin.AgentOuterClass.CreateTaskResponse) obj; - if (!getResourceMeta() - .equals(other.getResourceMeta())) return false; + if (!getResCase().equals(other.getResCase())) return false; + switch (resCase_) { + case 1: + if (!getResourceMeta() + .equals(other.getResourceMeta())) return false; + break; + case 2: + if (!getResource() + .equals(other.getResource())) return false; + break; + case 0: + default: + } if (!unknownFields.equals(other.unknownFields)) return false; return true; } @@ -3775,8 +3881,18 @@ public int hashCode() { } int hash = 41; hash = (19 * hash) + getDescriptor().hashCode(); - hash = (37 * hash) + RESOURCE_META_FIELD_NUMBER; - hash = (53 * hash) + getResourceMeta().hashCode(); + switch (resCase_) { + case 1: + hash = (37 * hash) + RESOURCE_META_FIELD_NUMBER; + hash = (53 * hash) + getResourceMeta().hashCode(); + break; + case 2: + hash = (37 * hash) + RESOURCE_FIELD_NUMBER; + hash = (53 * hash) + getResource().hashCode(); + break; + case 0: + default: + } hash = (29 * hash) + unknownFields.hashCode(); memoizedHashCode = hash; return hash; @@ -3914,8 +4030,8 @@ private void maybeForceBuilderInitialization() { @java.lang.Override public Builder clear() { super.clear(); - resourceMeta_ = com.google.protobuf.ByteString.EMPTY; - + resCase_ = 0; + res_ = null; return this; } @@ -3942,7 +4058,17 @@ public flyteidl.admin.AgentOuterClass.CreateTaskResponse build() { @java.lang.Override public flyteidl.admin.AgentOuterClass.CreateTaskResponse buildPartial() { flyteidl.admin.AgentOuterClass.CreateTaskResponse result = new flyteidl.admin.AgentOuterClass.CreateTaskResponse(this); - result.resourceMeta_ = resourceMeta_; + if (resCase_ == 1) { + result.res_ = res_; + } + if (resCase_ == 2) { + if (resourceBuilder_ == null) { + result.res_ = res_; + } else { + result.res_ = resourceBuilder_.build(); + } + } + result.resCase_ = resCase_; onBuilt(); return result; } @@ -3991,8 +4117,18 @@ public Builder mergeFrom(com.google.protobuf.Message other) { public Builder mergeFrom(flyteidl.admin.AgentOuterClass.CreateTaskResponse other) { if (other == flyteidl.admin.AgentOuterClass.CreateTaskResponse.getDefaultInstance()) return this; - if (other.getResourceMeta() != com.google.protobuf.ByteString.EMPTY) { - setResourceMeta(other.getResourceMeta()); + switch (other.getResCase()) { + case RESOURCE_META: { + setResourceMeta(other.getResourceMeta()); + break; + } + case RESOURCE: { + mergeResource(other.getResource()); + break; + } + case RES_NOT_SET: { + break; + } } this.mergeUnknownFields(other.unknownFields); onChanged(); @@ -4022,47 +4158,190 @@ public Builder mergeFrom( } return this; } + private int resCase_ = 0; + private java.lang.Object res_; + public ResCase + getResCase() { + return ResCase.forNumber( + resCase_); + } + + public Builder clearRes() { + resCase_ = 0; + res_ = null; + onChanged(); + return this; + } + - private com.google.protobuf.ByteString resourceMeta_ = com.google.protobuf.ByteString.EMPTY; /** - *
-       * Metadata is created by the agent. It could be a string (jobId) or a dict (more complex metadata).
-       * 
- * * bytes resource_meta = 1; */ public com.google.protobuf.ByteString getResourceMeta() { - return resourceMeta_; + if (resCase_ == 1) { + return (com.google.protobuf.ByteString) res_; + } + return com.google.protobuf.ByteString.EMPTY; } /** - *
-       * Metadata is created by the agent. It could be a string (jobId) or a dict (more complex metadata).
-       * 
- * * bytes resource_meta = 1; */ public Builder setResourceMeta(com.google.protobuf.ByteString value) { if (value == null) { throw new NullPointerException(); } - - resourceMeta_ = value; + resCase_ = 1; + res_ = value; onChanged(); return this; } /** - *
-       * Metadata is created by the agent. It could be a string (jobId) or a dict (more complex metadata).
-       * 
- * * bytes resource_meta = 1; */ public Builder clearResourceMeta() { - - resourceMeta_ = getDefaultInstance().getResourceMeta(); - onChanged(); + if (resCase_ == 1) { + resCase_ = 0; + res_ = null; + onChanged(); + } + return this; + } + + private com.google.protobuf.SingleFieldBuilderV3< + flyteidl.admin.AgentOuterClass.Resource, flyteidl.admin.AgentOuterClass.Resource.Builder, flyteidl.admin.AgentOuterClass.ResourceOrBuilder> resourceBuilder_; + /** + * .flyteidl.admin.Resource resource = 2; + */ + public boolean hasResource() { + return resCase_ == 2; + } + /** + * .flyteidl.admin.Resource resource = 2; + */ + public flyteidl.admin.AgentOuterClass.Resource getResource() { + if (resourceBuilder_ == null) { + if (resCase_ == 2) { + return (flyteidl.admin.AgentOuterClass.Resource) res_; + } + return flyteidl.admin.AgentOuterClass.Resource.getDefaultInstance(); + } else { + if (resCase_ == 2) { + return resourceBuilder_.getMessage(); + } + return flyteidl.admin.AgentOuterClass.Resource.getDefaultInstance(); + } + } + /** + * .flyteidl.admin.Resource resource = 2; + */ + public Builder setResource(flyteidl.admin.AgentOuterClass.Resource value) { + if (resourceBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + res_ = value; + onChanged(); + } else { + resourceBuilder_.setMessage(value); + } + resCase_ = 2; + return this; + } + /** + * .flyteidl.admin.Resource resource = 2; + */ + public Builder setResource( + flyteidl.admin.AgentOuterClass.Resource.Builder builderForValue) { + if (resourceBuilder_ == null) { + res_ = builderForValue.build(); + onChanged(); + } else { + resourceBuilder_.setMessage(builderForValue.build()); + } + resCase_ = 2; + return this; + } + /** + * .flyteidl.admin.Resource resource = 2; + */ + public Builder mergeResource(flyteidl.admin.AgentOuterClass.Resource value) { + if (resourceBuilder_ == null) { + if (resCase_ == 2 && + res_ != flyteidl.admin.AgentOuterClass.Resource.getDefaultInstance()) { + res_ = flyteidl.admin.AgentOuterClass.Resource.newBuilder((flyteidl.admin.AgentOuterClass.Resource) res_) + .mergeFrom(value).buildPartial(); + } else { + res_ = value; + } + onChanged(); + } else { + if (resCase_ == 2) { + resourceBuilder_.mergeFrom(value); + } + resourceBuilder_.setMessage(value); + } + resCase_ = 2; + return this; + } + /** + * .flyteidl.admin.Resource resource = 2; + */ + public Builder clearResource() { + if (resourceBuilder_ == null) { + if (resCase_ == 2) { + resCase_ = 0; + res_ = null; + onChanged(); + } + } else { + if (resCase_ == 2) { + resCase_ = 0; + res_ = null; + } + resourceBuilder_.clear(); + } return this; } + /** + * .flyteidl.admin.Resource resource = 2; + */ + public flyteidl.admin.AgentOuterClass.Resource.Builder getResourceBuilder() { + return getResourceFieldBuilder().getBuilder(); + } + /** + * .flyteidl.admin.Resource resource = 2; + */ + public flyteidl.admin.AgentOuterClass.ResourceOrBuilder getResourceOrBuilder() { + if ((resCase_ == 2) && (resourceBuilder_ != null)) { + return resourceBuilder_.getMessageOrBuilder(); + } else { + if (resCase_ == 2) { + return (flyteidl.admin.AgentOuterClass.Resource) res_; + } + return flyteidl.admin.AgentOuterClass.Resource.getDefaultInstance(); + } + } + /** + * .flyteidl.admin.Resource resource = 2; + */ + private com.google.protobuf.SingleFieldBuilderV3< + flyteidl.admin.AgentOuterClass.Resource, flyteidl.admin.AgentOuterClass.Resource.Builder, flyteidl.admin.AgentOuterClass.ResourceOrBuilder> + getResourceFieldBuilder() { + if (resourceBuilder_ == null) { + if (!(resCase_ == 2)) { + res_ = flyteidl.admin.AgentOuterClass.Resource.getDefaultInstance(); + } + resourceBuilder_ = new com.google.protobuf.SingleFieldBuilderV3< + flyteidl.admin.AgentOuterClass.Resource, flyteidl.admin.AgentOuterClass.Resource.Builder, flyteidl.admin.AgentOuterClass.ResourceOrBuilder>( + (flyteidl.admin.AgentOuterClass.Resource) res_, + getParentForChildren(), + isClean()); + res_ = null; + } + resCase_ = 2; + onChanged();; + return resourceBuilder_; + } @java.lang.Override public final Builder setUnknownFields( final com.google.protobuf.UnknownFieldSet unknownFields) { @@ -5962,6 +6241,50 @@ public interface ResourceOrBuilder extends */ com.google.protobuf.ByteString getMessageBytes(); + + /** + *
+     * log information for the task execution.
+     * 
+ * + * repeated .flyteidl.core.TaskLog log_links = 4; + */ + java.util.List + getLogLinksList(); + /** + *
+     * log information for the task execution.
+     * 
+ * + * repeated .flyteidl.core.TaskLog log_links = 4; + */ + flyteidl.core.Execution.TaskLog getLogLinks(int index); + /** + *
+     * log information for the task execution.
+     * 
+ * + * repeated .flyteidl.core.TaskLog log_links = 4; + */ + int getLogLinksCount(); + /** + *
+     * log information for the task execution.
+     * 
+ * + * repeated .flyteidl.core.TaskLog log_links = 4; + */ + java.util.List + getLogLinksOrBuilderList(); + /** + *
+     * log information for the task execution.
+     * 
+ * + * repeated .flyteidl.core.TaskLog log_links = 4; + */ + flyteidl.core.Execution.TaskLogOrBuilder getLogLinksOrBuilder( + int index); } /** * Protobuf type {@code flyteidl.admin.Resource} @@ -5978,6 +6301,7 @@ private Resource(com.google.protobuf.GeneratedMessageV3.Builder builder) { private Resource() { state_ = 0; message_ = ""; + logLinks_ = java.util.Collections.emptyList(); } @java.lang.Override @@ -6029,6 +6353,15 @@ private Resource( message_ = s; break; } + case 34: { + if (!((mutable_bitField0_ & 0x00000008) != 0)) { + logLinks_ = new java.util.ArrayList(); + mutable_bitField0_ |= 0x00000008; + } + logLinks_.add( + input.readMessage(flyteidl.core.Execution.TaskLog.parser(), extensionRegistry)); + break; + } default: { if (!parseUnknownField( input, unknownFields, extensionRegistry, tag)) { @@ -6044,6 +6377,9 @@ private Resource( throw new com.google.protobuf.InvalidProtocolBufferException( e).setUnfinishedMessage(this); } finally { + if (((mutable_bitField0_ & 0x00000008) != 0)) { + logLinks_ = java.util.Collections.unmodifiableList(logLinks_); + } this.unknownFields = unknownFields.build(); makeExtensionsImmutable(); } @@ -6061,6 +6397,7 @@ private Resource( flyteidl.admin.AgentOuterClass.Resource.class, flyteidl.admin.AgentOuterClass.Resource.Builder.class); } + private int bitField0_; public static final int STATE_FIELD_NUMBER = 1; private int state_; /** @@ -6167,15 +6504,70 @@ public java.lang.String getMessage() { } } - private byte memoizedIsInitialized = -1; - @java.lang.Override - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized == 1) return true; - if (isInitialized == 0) return false; - - memoizedIsInitialized = 1; - return true; + public static final int LOG_LINKS_FIELD_NUMBER = 4; + private java.util.List logLinks_; + /** + *
+     * log information for the task execution.
+     * 
+ * + * repeated .flyteidl.core.TaskLog log_links = 4; + */ + public java.util.List getLogLinksList() { + return logLinks_; + } + /** + *
+     * log information for the task execution.
+     * 
+ * + * repeated .flyteidl.core.TaskLog log_links = 4; + */ + public java.util.List + getLogLinksOrBuilderList() { + return logLinks_; + } + /** + *
+     * log information for the task execution.
+     * 
+ * + * repeated .flyteidl.core.TaskLog log_links = 4; + */ + public int getLogLinksCount() { + return logLinks_.size(); + } + /** + *
+     * log information for the task execution.
+     * 
+ * + * repeated .flyteidl.core.TaskLog log_links = 4; + */ + public flyteidl.core.Execution.TaskLog getLogLinks(int index) { + return logLinks_.get(index); + } + /** + *
+     * log information for the task execution.
+     * 
+ * + * repeated .flyteidl.core.TaskLog log_links = 4; + */ + public flyteidl.core.Execution.TaskLogOrBuilder getLogLinksOrBuilder( + int index) { + return logLinks_.get(index); + } + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; } @java.lang.Override @@ -6190,6 +6582,9 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) if (!getMessageBytes().isEmpty()) { com.google.protobuf.GeneratedMessageV3.writeString(output, 3, message_); } + for (int i = 0; i < logLinks_.size(); i++) { + output.writeMessage(4, logLinks_.get(i)); + } unknownFields.writeTo(output); } @@ -6210,6 +6605,10 @@ public int getSerializedSize() { if (!getMessageBytes().isEmpty()) { size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, message_); } + for (int i = 0; i < logLinks_.size(); i++) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(4, logLinks_.get(i)); + } size += unknownFields.getSerializedSize(); memoizedSize = size; return size; @@ -6233,6 +6632,8 @@ public boolean equals(final java.lang.Object obj) { } if (!getMessage() .equals(other.getMessage())) return false; + if (!getLogLinksList() + .equals(other.getLogLinksList())) return false; if (!unknownFields.equals(other.unknownFields)) return false; return true; } @@ -6252,6 +6653,10 @@ public int hashCode() { } hash = (37 * hash) + MESSAGE_FIELD_NUMBER; hash = (53 * hash) + getMessage().hashCode(); + if (getLogLinksCount() > 0) { + hash = (37 * hash) + LOG_LINKS_FIELD_NUMBER; + hash = (53 * hash) + getLogLinksList().hashCode(); + } hash = (29 * hash) + unknownFields.hashCode(); memoizedHashCode = hash; return hash; @@ -6380,6 +6785,7 @@ private Builder( private void maybeForceBuilderInitialization() { if (com.google.protobuf.GeneratedMessageV3 .alwaysUseFieldBuilders) { + getLogLinksFieldBuilder(); } } @java.lang.Override @@ -6395,6 +6801,12 @@ public Builder clear() { } message_ = ""; + if (logLinksBuilder_ == null) { + logLinks_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000008); + } else { + logLinksBuilder_.clear(); + } return this; } @@ -6421,6 +6833,8 @@ public flyteidl.admin.AgentOuterClass.Resource build() { @java.lang.Override public flyteidl.admin.AgentOuterClass.Resource buildPartial() { flyteidl.admin.AgentOuterClass.Resource result = new flyteidl.admin.AgentOuterClass.Resource(this); + int from_bitField0_ = bitField0_; + int to_bitField0_ = 0; result.state_ = state_; if (outputsBuilder_ == null) { result.outputs_ = outputs_; @@ -6428,6 +6842,16 @@ public flyteidl.admin.AgentOuterClass.Resource buildPartial() { result.outputs_ = outputsBuilder_.build(); } result.message_ = message_; + if (logLinksBuilder_ == null) { + if (((bitField0_ & 0x00000008) != 0)) { + logLinks_ = java.util.Collections.unmodifiableList(logLinks_); + bitField0_ = (bitField0_ & ~0x00000008); + } + result.logLinks_ = logLinks_; + } else { + result.logLinks_ = logLinksBuilder_.build(); + } + result.bitField0_ = to_bitField0_; onBuilt(); return result; } @@ -6486,6 +6910,32 @@ public Builder mergeFrom(flyteidl.admin.AgentOuterClass.Resource other) { message_ = other.message_; onChanged(); } + if (logLinksBuilder_ == null) { + if (!other.logLinks_.isEmpty()) { + if (logLinks_.isEmpty()) { + logLinks_ = other.logLinks_; + bitField0_ = (bitField0_ & ~0x00000008); + } else { + ensureLogLinksIsMutable(); + logLinks_.addAll(other.logLinks_); + } + onChanged(); + } + } else { + if (!other.logLinks_.isEmpty()) { + if (logLinksBuilder_.isEmpty()) { + logLinksBuilder_.dispose(); + logLinksBuilder_ = null; + logLinks_ = other.logLinks_; + bitField0_ = (bitField0_ & ~0x00000008); + logLinksBuilder_ = + com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ? + getLogLinksFieldBuilder() : null; + } else { + logLinksBuilder_.addAllMessages(other.logLinks_); + } + } + } this.mergeUnknownFields(other.unknownFields); onChanged(); return this; @@ -6514,6 +6964,7 @@ public Builder mergeFrom( } return this; } + private int bitField0_; private int state_ = 0; /** @@ -6839,6 +7290,318 @@ public Builder setMessageBytes( onChanged(); return this; } + + private java.util.List logLinks_ = + java.util.Collections.emptyList(); + private void ensureLogLinksIsMutable() { + if (!((bitField0_ & 0x00000008) != 0)) { + logLinks_ = new java.util.ArrayList(logLinks_); + bitField0_ |= 0x00000008; + } + } + + private com.google.protobuf.RepeatedFieldBuilderV3< + flyteidl.core.Execution.TaskLog, flyteidl.core.Execution.TaskLog.Builder, flyteidl.core.Execution.TaskLogOrBuilder> logLinksBuilder_; + + /** + *
+       * log information for the task execution.
+       * 
+ * + * repeated .flyteidl.core.TaskLog log_links = 4; + */ + public java.util.List getLogLinksList() { + if (logLinksBuilder_ == null) { + return java.util.Collections.unmodifiableList(logLinks_); + } else { + return logLinksBuilder_.getMessageList(); + } + } + /** + *
+       * log information for the task execution.
+       * 
+ * + * repeated .flyteidl.core.TaskLog log_links = 4; + */ + public int getLogLinksCount() { + if (logLinksBuilder_ == null) { + return logLinks_.size(); + } else { + return logLinksBuilder_.getCount(); + } + } + /** + *
+       * log information for the task execution.
+       * 
+ * + * repeated .flyteidl.core.TaskLog log_links = 4; + */ + public flyteidl.core.Execution.TaskLog getLogLinks(int index) { + if (logLinksBuilder_ == null) { + return logLinks_.get(index); + } else { + return logLinksBuilder_.getMessage(index); + } + } + /** + *
+       * log information for the task execution.
+       * 
+ * + * repeated .flyteidl.core.TaskLog log_links = 4; + */ + public Builder setLogLinks( + int index, flyteidl.core.Execution.TaskLog value) { + if (logLinksBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureLogLinksIsMutable(); + logLinks_.set(index, value); + onChanged(); + } else { + logLinksBuilder_.setMessage(index, value); + } + return this; + } + /** + *
+       * log information for the task execution.
+       * 
+ * + * repeated .flyteidl.core.TaskLog log_links = 4; + */ + public Builder setLogLinks( + int index, flyteidl.core.Execution.TaskLog.Builder builderForValue) { + if (logLinksBuilder_ == null) { + ensureLogLinksIsMutable(); + logLinks_.set(index, builderForValue.build()); + onChanged(); + } else { + logLinksBuilder_.setMessage(index, builderForValue.build()); + } + return this; + } + /** + *
+       * log information for the task execution.
+       * 
+ * + * repeated .flyteidl.core.TaskLog log_links = 4; + */ + public Builder addLogLinks(flyteidl.core.Execution.TaskLog value) { + if (logLinksBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureLogLinksIsMutable(); + logLinks_.add(value); + onChanged(); + } else { + logLinksBuilder_.addMessage(value); + } + return this; + } + /** + *
+       * log information for the task execution.
+       * 
+ * + * repeated .flyteidl.core.TaskLog log_links = 4; + */ + public Builder addLogLinks( + int index, flyteidl.core.Execution.TaskLog value) { + if (logLinksBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureLogLinksIsMutable(); + logLinks_.add(index, value); + onChanged(); + } else { + logLinksBuilder_.addMessage(index, value); + } + return this; + } + /** + *
+       * log information for the task execution.
+       * 
+ * + * repeated .flyteidl.core.TaskLog log_links = 4; + */ + public Builder addLogLinks( + flyteidl.core.Execution.TaskLog.Builder builderForValue) { + if (logLinksBuilder_ == null) { + ensureLogLinksIsMutable(); + logLinks_.add(builderForValue.build()); + onChanged(); + } else { + logLinksBuilder_.addMessage(builderForValue.build()); + } + return this; + } + /** + *
+       * log information for the task execution.
+       * 
+ * + * repeated .flyteidl.core.TaskLog log_links = 4; + */ + public Builder addLogLinks( + int index, flyteidl.core.Execution.TaskLog.Builder builderForValue) { + if (logLinksBuilder_ == null) { + ensureLogLinksIsMutable(); + logLinks_.add(index, builderForValue.build()); + onChanged(); + } else { + logLinksBuilder_.addMessage(index, builderForValue.build()); + } + return this; + } + /** + *
+       * log information for the task execution.
+       * 
+ * + * repeated .flyteidl.core.TaskLog log_links = 4; + */ + public Builder addAllLogLinks( + java.lang.Iterable values) { + if (logLinksBuilder_ == null) { + ensureLogLinksIsMutable(); + com.google.protobuf.AbstractMessageLite.Builder.addAll( + values, logLinks_); + onChanged(); + } else { + logLinksBuilder_.addAllMessages(values); + } + return this; + } + /** + *
+       * log information for the task execution.
+       * 
+ * + * repeated .flyteidl.core.TaskLog log_links = 4; + */ + public Builder clearLogLinks() { + if (logLinksBuilder_ == null) { + logLinks_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000008); + onChanged(); + } else { + logLinksBuilder_.clear(); + } + return this; + } + /** + *
+       * log information for the task execution.
+       * 
+ * + * repeated .flyteidl.core.TaskLog log_links = 4; + */ + public Builder removeLogLinks(int index) { + if (logLinksBuilder_ == null) { + ensureLogLinksIsMutable(); + logLinks_.remove(index); + onChanged(); + } else { + logLinksBuilder_.remove(index); + } + return this; + } + /** + *
+       * log information for the task execution.
+       * 
+ * + * repeated .flyteidl.core.TaskLog log_links = 4; + */ + public flyteidl.core.Execution.TaskLog.Builder getLogLinksBuilder( + int index) { + return getLogLinksFieldBuilder().getBuilder(index); + } + /** + *
+       * log information for the task execution.
+       * 
+ * + * repeated .flyteidl.core.TaskLog log_links = 4; + */ + public flyteidl.core.Execution.TaskLogOrBuilder getLogLinksOrBuilder( + int index) { + if (logLinksBuilder_ == null) { + return logLinks_.get(index); } else { + return logLinksBuilder_.getMessageOrBuilder(index); + } + } + /** + *
+       * log information for the task execution.
+       * 
+ * + * repeated .flyteidl.core.TaskLog log_links = 4; + */ + public java.util.List + getLogLinksOrBuilderList() { + if (logLinksBuilder_ != null) { + return logLinksBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(logLinks_); + } + } + /** + *
+       * log information for the task execution.
+       * 
+ * + * repeated .flyteidl.core.TaskLog log_links = 4; + */ + public flyteidl.core.Execution.TaskLog.Builder addLogLinksBuilder() { + return getLogLinksFieldBuilder().addBuilder( + flyteidl.core.Execution.TaskLog.getDefaultInstance()); + } + /** + *
+       * log information for the task execution.
+       * 
+ * + * repeated .flyteidl.core.TaskLog log_links = 4; + */ + public flyteidl.core.Execution.TaskLog.Builder addLogLinksBuilder( + int index) { + return getLogLinksFieldBuilder().addBuilder( + index, flyteidl.core.Execution.TaskLog.getDefaultInstance()); + } + /** + *
+       * log information for the task execution.
+       * 
+ * + * repeated .flyteidl.core.TaskLog log_links = 4; + */ + public java.util.List + getLogLinksBuilderList() { + return getLogLinksFieldBuilder().getBuilderList(); + } + private com.google.protobuf.RepeatedFieldBuilderV3< + flyteidl.core.Execution.TaskLog, flyteidl.core.Execution.TaskLog.Builder, flyteidl.core.Execution.TaskLogOrBuilder> + getLogLinksFieldBuilder() { + if (logLinksBuilder_ == null) { + logLinksBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3< + flyteidl.core.Execution.TaskLog, flyteidl.core.Execution.TaskLog.Builder, flyteidl.core.Execution.TaskLogOrBuilder>( + logLinks_, + ((bitField0_ & 0x00000008) != 0), + getParentForChildren(), + isClean()); + logLinks_ = null; + } + return logLinksBuilder_; + } @java.lang.Override public final Builder setUnknownFields( final com.google.protobuf.UnknownFieldSet unknownFields) { @@ -11372,27 +12135,30 @@ public flyteidl.admin.AgentOuterClass.ListAgentsResponse getDefaultInstanceForTy "p\022-\n\010template\030\002 \001(\0132\033.flyteidl.core.Task" + "Template\022\025\n\routput_prefix\030\003 \001(\t\022F\n\027task_" + "execution_metadata\030\004 \001(\0132%.flyteidl.admi" + - "n.TaskExecutionMetadata\"+\n\022CreateTaskRes" + - "ponse\022\025\n\rresource_meta\030\001 \001(\014\":\n\016GetTaskR" + - "equest\022\021\n\ttask_type\030\001 \001(\t\022\025\n\rresource_me" + - "ta\030\002 \001(\014\"h\n\017GetTaskResponse\022*\n\010resource\030" + - "\001 \001(\0132\030.flyteidl.admin.Resource\022)\n\tlog_l" + - "inks\030\002 \003(\0132\026.flyteidl.core.TaskLog\"m\n\010Re" + - "source\022$\n\005state\030\001 \001(\0162\025.flyteidl.admin.S" + - "tate\022*\n\007outputs\030\002 \001(\0132\031.flyteidl.core.Li" + - "teralMap\022\017\n\007message\030\003 \001(\t\"=\n\021DeleteTaskR" + - "equest\022\021\n\ttask_type\030\001 \001(\t\022\025\n\rresource_me" + - "ta\030\002 \001(\014\"\024\n\022DeleteTaskResponse\"3\n\005Agent\022" + - "\014\n\004name\030\001 \001(\t\022\034\n\024supported_task_types\030\002 " + - "\003(\t\"\037\n\017GetAgentRequest\022\014\n\004name\030\001 \001(\t\"8\n\020" + - "GetAgentResponse\022$\n\005agent\030\001 \001(\0132\025.flytei" + - "dl.admin.Agent\"\023\n\021ListAgentsRequest\";\n\022L" + - "istAgentsResponse\022%\n\006agents\030\001 \003(\0132\025.flyt" + - "eidl.admin.Agent*^\n\005State\022\025\n\021RETRYABLE_F" + - "AILURE\020\000\022\025\n\021PERMANENT_FAILURE\020\001\022\013\n\007PENDI" + - "NG\020\002\022\013\n\007RUNNING\020\003\022\r\n\tSUCCEEDED\020\004B=Z;gith" + - "ub.com/flyteorg/flyte/flyteidl/gen/pb-go" + - "/flyteidl/adminb\006proto3" + "n.TaskExecutionMetadata\"b\n\022CreateTaskRes" + + "ponse\022\027\n\rresource_meta\030\001 \001(\014H\000\022,\n\010resour" + + "ce\030\002 \001(\0132\030.flyteidl.admin.ResourceH\000B\005\n\003" + + "res\":\n\016GetTaskRequest\022\021\n\ttask_type\030\001 \001(\t" + + "\022\025\n\rresource_meta\030\002 \001(\014\"h\n\017GetTaskRespon" + + "se\022*\n\010resource\030\001 \001(\0132\030.flyteidl.admin.Re" + + "source\022)\n\tlog_links\030\002 \003(\0132\026.flyteidl.cor" + + "e.TaskLog\"\230\001\n\010Resource\022$\n\005state\030\001 \001(\0162\025." + + "flyteidl.admin.State\022*\n\007outputs\030\002 \001(\0132\031." + + "flyteidl.core.LiteralMap\022\017\n\007message\030\003 \001(" + + "\t\022)\n\tlog_links\030\004 \003(\0132\026.flyteidl.core.Tas" + + "kLog\"=\n\021DeleteTaskRequest\022\021\n\ttask_type\030\001" + + " \001(\t\022\025\n\rresource_meta\030\002 \001(\014\"\024\n\022DeleteTas" + + "kResponse\"3\n\005Agent\022\014\n\004name\030\001 \001(\t\022\034\n\024supp" + + "orted_task_types\030\002 \003(\t\"\037\n\017GetAgentReques" + + "t\022\014\n\004name\030\001 \001(\t\"8\n\020GetAgentResponse\022$\n\005a" + + "gent\030\001 \001(\0132\025.flyteidl.admin.Agent\"\023\n\021Lis" + + "tAgentsRequest\";\n\022ListAgentsResponse\022%\n\006" + + "agents\030\001 \003(\0132\025.flyteidl.admin.Agent*^\n\005S" + + "tate\022\025\n\021RETRYABLE_FAILURE\020\000\022\025\n\021PERMANENT" + + "_FAILURE\020\001\022\013\n\007PENDING\020\002\022\013\n\007RUNNING\020\003\022\r\n\t" + + "SUCCEEDED\020\004B=Z;github.com/flyteorg/flyte" + + "/flyteidl/gen/pb-go/flyteidl/adminb\006prot" + + "o3" }; com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner = new com.google.protobuf.Descriptors.FileDescriptor. InternalDescriptorAssigner() { @@ -11446,7 +12212,7 @@ public com.google.protobuf.ExtensionRegistry assignDescriptors( internal_static_flyteidl_admin_CreateTaskResponse_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( internal_static_flyteidl_admin_CreateTaskResponse_descriptor, - new java.lang.String[] { "ResourceMeta", }); + new java.lang.String[] { "ResourceMeta", "Resource", "Res", }); internal_static_flyteidl_admin_GetTaskRequest_descriptor = getDescriptor().getMessageTypes().get(3); internal_static_flyteidl_admin_GetTaskRequest_fieldAccessorTable = new @@ -11464,7 +12230,7 @@ public com.google.protobuf.ExtensionRegistry assignDescriptors( internal_static_flyteidl_admin_Resource_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( internal_static_flyteidl_admin_Resource_descriptor, - new java.lang.String[] { "State", "Outputs", "Message", }); + new java.lang.String[] { "State", "Outputs", "Message", "LogLinks", }); internal_static_flyteidl_admin_DeleteTaskRequest_descriptor = getDescriptor().getMessageTypes().get(6); internal_static_flyteidl_admin_DeleteTaskRequest_fieldAccessorTable = new diff --git a/flyteidl/gen/pb-js/flyteidl.d.ts b/flyteidl/gen/pb-js/flyteidl.d.ts index 5159e2e876..9570d8dc7b 100644 --- a/flyteidl/gen/pb-js/flyteidl.d.ts +++ b/flyteidl/gen/pb-js/flyteidl.d.ts @@ -8031,9 +8031,6 @@ export namespace flyteidl { /** CreateTaskResponse resource */ resource?: (flyteidl.admin.IResource|null); - - /** CreateTaskResponse logLinks */ - logLinks?: (flyteidl.core.ITaskLog[]|null); } /** Represents a CreateTaskResponse. */ @@ -8051,9 +8048,6 @@ export namespace flyteidl { /** CreateTaskResponse resource. */ public resource?: (flyteidl.admin.IResource|null); - /** CreateTaskResponse logLinks. */ - public logLinks: flyteidl.core.ITaskLog[]; - /** CreateTaskResponse res. */ public res?: ("resourceMeta"|"resource"); diff --git a/flyteidl/gen/pb-js/flyteidl.js b/flyteidl/gen/pb-js/flyteidl.js index 24356e5776..ff88e85cd1 100644 --- a/flyteidl/gen/pb-js/flyteidl.js +++ b/flyteidl/gen/pb-js/flyteidl.js @@ -19664,7 +19664,6 @@ * @interface ICreateTaskResponse * @property {Uint8Array|null} [resourceMeta] CreateTaskResponse resourceMeta * @property {flyteidl.admin.IResource|null} [resource] CreateTaskResponse resource - * @property {Array.|null} [logLinks] CreateTaskResponse logLinks */ /** @@ -19676,7 +19675,6 @@ * @param {flyteidl.admin.ICreateTaskResponse=} [properties] Properties to set */ function CreateTaskResponse(properties) { - this.logLinks = []; if (properties) for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) if (properties[keys[i]] != null) @@ -19699,14 +19697,6 @@ */ CreateTaskResponse.prototype.resource = null; - /** - * CreateTaskResponse logLinks. - * @member {Array.} logLinks - * @memberof flyteidl.admin.CreateTaskResponse - * @instance - */ - CreateTaskResponse.prototype.logLinks = $util.emptyArray; - // OneOf field names bound to virtual getters and setters var $oneOfFields; @@ -19749,9 +19739,6 @@ writer.uint32(/* id 1, wireType 2 =*/10).bytes(message.resourceMeta); if (message.resource != null && message.hasOwnProperty("resource")) $root.flyteidl.admin.Resource.encode(message.resource, writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim(); - if (message.logLinks != null && message.logLinks.length) - for (var i = 0; i < message.logLinks.length; ++i) - $root.flyteidl.core.TaskLog.encode(message.logLinks[i], writer.uint32(/* id 3, wireType 2 =*/26).fork()).ldelim(); return writer; }; @@ -19779,11 +19766,6 @@ case 2: message.resource = $root.flyteidl.admin.Resource.decode(reader, reader.uint32()); break; - case 3: - if (!(message.logLinks && message.logLinks.length)) - message.logLinks = []; - message.logLinks.push($root.flyteidl.core.TaskLog.decode(reader, reader.uint32())); - break; default: reader.skipType(tag & 7); break; @@ -19819,15 +19801,6 @@ return "resource." + error; } } - if (message.logLinks != null && message.hasOwnProperty("logLinks")) { - if (!Array.isArray(message.logLinks)) - return "logLinks: array expected"; - for (var i = 0; i < message.logLinks.length; ++i) { - var error = $root.flyteidl.core.TaskLog.verify(message.logLinks[i]); - if (error) - return "logLinks." + error; - } - } return null; }; diff --git a/flyteidl/gen/pb_python/flyteidl/admin/agent_pb2.py b/flyteidl/gen/pb_python/flyteidl/admin/agent_pb2.py index 2f975ec4b5..5d515cb0c4 100644 --- a/flyteidl/gen/pb_python/flyteidl/admin/agent_pb2.py +++ b/flyteidl/gen/pb_python/flyteidl/admin/agent_pb2.py @@ -18,7 +18,7 @@ from flyteidl.core import execution_pb2 as flyteidl_dot_core_dot_execution__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1a\x66lyteidl/admin/agent.proto\x12\x0e\x66lyteidl.admin\x1a\x1c\x66lyteidl/core/literals.proto\x1a\x19\x66lyteidl/core/tasks.proto\x1a\x1d\x66lyteidl/core/interface.proto\x1a\x1e\x66lyteidl/core/identifier.proto\x1a\x1d\x66lyteidl/core/execution.proto\"\x98\x05\n\x15TaskExecutionMetadata\x12R\n\x11task_execution_id\x18\x01 \x01(\x0b\x32&.flyteidl.core.TaskExecutionIdentifierR\x0ftaskExecutionId\x12\x1c\n\tnamespace\x18\x02 \x01(\tR\tnamespace\x12I\n\x06labels\x18\x03 \x03(\x0b\x32\x31.flyteidl.admin.TaskExecutionMetadata.LabelsEntryR\x06labels\x12X\n\x0b\x61nnotations\x18\x04 \x03(\x0b\x32\x36.flyteidl.admin.TaskExecutionMetadata.AnnotationsEntryR\x0b\x61nnotations\x12.\n\x13k8s_service_account\x18\x05 \x01(\tR\x11k8sServiceAccount\x12t\n\x15\x65nvironment_variables\x18\x06 \x03(\x0b\x32?.flyteidl.admin.TaskExecutionMetadata.EnvironmentVariablesEntryR\x14\x65nvironmentVariables\x1a\x39\n\x0bLabelsEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x1a>\n\x10\x41nnotationsEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x1aG\n\x19\x45nvironmentVariablesEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\"\x83\x02\n\x11\x43reateTaskRequest\x12\x31\n\x06inputs\x18\x01 \x01(\x0b\x32\x19.flyteidl.core.LiteralMapR\x06inputs\x12\x37\n\x08template\x18\x02 \x01(\x0b\x32\x1b.flyteidl.core.TaskTemplateR\x08template\x12#\n\routput_prefix\x18\x03 \x01(\tR\x0coutputPrefix\x12]\n\x17task_execution_metadata\x18\x04 \x01(\x0b\x32%.flyteidl.admin.TaskExecutionMetadataR\x15taskExecutionMetadata\"\xaf\x01\n\x12\x43reateTaskResponse\x12%\n\rresource_meta\x18\x01 \x01(\x0cH\x00R\x0cresourceMeta\x12\x36\n\x08resource\x18\x02 \x01(\x0b\x32\x18.flyteidl.admin.ResourceH\x00R\x08resource\x12\x33\n\tlog_links\x18\x03 \x03(\x0b\x32\x16.flyteidl.core.TaskLogR\x08logLinksB\x05\n\x03res\"R\n\x0eGetTaskRequest\x12\x1b\n\ttask_type\x18\x01 \x01(\tR\x08taskType\x12#\n\rresource_meta\x18\x02 \x01(\x0cR\x0cresourceMeta\"|\n\x0fGetTaskResponse\x12\x34\n\x08resource\x18\x01 \x01(\x0b\x32\x18.flyteidl.admin.ResourceR\x08resource\x12\x33\n\tlog_links\x18\x02 \x03(\x0b\x32\x16.flyteidl.core.TaskLogR\x08logLinks\"\xbb\x01\n\x08Resource\x12+\n\x05state\x18\x01 \x01(\x0e\x32\x15.flyteidl.admin.StateR\x05state\x12\x33\n\x07outputs\x18\x02 \x01(\x0b\x32\x19.flyteidl.core.LiteralMapR\x07outputs\x12\x18\n\x07message\x18\x03 \x01(\tR\x07message\x12\x33\n\tlog_links\x18\x04 \x03(\x0b\x32\x16.flyteidl.core.TaskLogR\x08logLinks\"U\n\x11\x44\x65leteTaskRequest\x12\x1b\n\ttask_type\x18\x01 \x01(\tR\x08taskType\x12#\n\rresource_meta\x18\x02 \x01(\x0cR\x0cresourceMeta\"\x14\n\x12\x44\x65leteTaskResponse\"M\n\x05\x41gent\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\x12\x30\n\x14supported_task_types\x18\x02 \x03(\tR\x12supportedTaskTypes\"%\n\x0fGetAgentRequest\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\"?\n\x10GetAgentResponse\x12+\n\x05\x61gent\x18\x01 \x01(\x0b\x32\x15.flyteidl.admin.AgentR\x05\x61gent\"\x13\n\x11ListAgentsRequest\"C\n\x12ListAgentsResponse\x12-\n\x06\x61gents\x18\x01 \x03(\x0b\x32\x15.flyteidl.admin.AgentR\x06\x61gents*^\n\x05State\x12\x15\n\x11RETRYABLE_FAILURE\x10\x00\x12\x15\n\x11PERMANENT_FAILURE\x10\x01\x12\x0b\n\x07PENDING\x10\x02\x12\x0b\n\x07RUNNING\x10\x03\x12\r\n\tSUCCEEDED\x10\x04\x42\xb6\x01\n\x12\x63om.flyteidl.adminB\nAgentProtoP\x01Z;github.com/flyteorg/flyte/flyteidl/gen/pb-go/flyteidl/admin\xa2\x02\x03\x46\x41X\xaa\x02\x0e\x46lyteidl.Admin\xca\x02\x0e\x46lyteidl\\Admin\xe2\x02\x1a\x46lyteidl\\Admin\\GPBMetadata\xea\x02\x0f\x46lyteidl::Adminb\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1a\x66lyteidl/admin/agent.proto\x12\x0e\x66lyteidl.admin\x1a\x1c\x66lyteidl/core/literals.proto\x1a\x19\x66lyteidl/core/tasks.proto\x1a\x1d\x66lyteidl/core/interface.proto\x1a\x1e\x66lyteidl/core/identifier.proto\x1a\x1d\x66lyteidl/core/execution.proto\"\x98\x05\n\x15TaskExecutionMetadata\x12R\n\x11task_execution_id\x18\x01 \x01(\x0b\x32&.flyteidl.core.TaskExecutionIdentifierR\x0ftaskExecutionId\x12\x1c\n\tnamespace\x18\x02 \x01(\tR\tnamespace\x12I\n\x06labels\x18\x03 \x03(\x0b\x32\x31.flyteidl.admin.TaskExecutionMetadata.LabelsEntryR\x06labels\x12X\n\x0b\x61nnotations\x18\x04 \x03(\x0b\x32\x36.flyteidl.admin.TaskExecutionMetadata.AnnotationsEntryR\x0b\x61nnotations\x12.\n\x13k8s_service_account\x18\x05 \x01(\tR\x11k8sServiceAccount\x12t\n\x15\x65nvironment_variables\x18\x06 \x03(\x0b\x32?.flyteidl.admin.TaskExecutionMetadata.EnvironmentVariablesEntryR\x14\x65nvironmentVariables\x1a\x39\n\x0bLabelsEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x1a>\n\x10\x41nnotationsEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x1aG\n\x19\x45nvironmentVariablesEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\"\x83\x02\n\x11\x43reateTaskRequest\x12\x31\n\x06inputs\x18\x01 \x01(\x0b\x32\x19.flyteidl.core.LiteralMapR\x06inputs\x12\x37\n\x08template\x18\x02 \x01(\x0b\x32\x1b.flyteidl.core.TaskTemplateR\x08template\x12#\n\routput_prefix\x18\x03 \x01(\tR\x0coutputPrefix\x12]\n\x17task_execution_metadata\x18\x04 \x01(\x0b\x32%.flyteidl.admin.TaskExecutionMetadataR\x15taskExecutionMetadata\"z\n\x12\x43reateTaskResponse\x12%\n\rresource_meta\x18\x01 \x01(\x0cH\x00R\x0cresourceMeta\x12\x36\n\x08resource\x18\x02 \x01(\x0b\x32\x18.flyteidl.admin.ResourceH\x00R\x08resourceB\x05\n\x03res\"R\n\x0eGetTaskRequest\x12\x1b\n\ttask_type\x18\x01 \x01(\tR\x08taskType\x12#\n\rresource_meta\x18\x02 \x01(\x0cR\x0cresourceMeta\"|\n\x0fGetTaskResponse\x12\x34\n\x08resource\x18\x01 \x01(\x0b\x32\x18.flyteidl.admin.ResourceR\x08resource\x12\x33\n\tlog_links\x18\x02 \x03(\x0b\x32\x16.flyteidl.core.TaskLogR\x08logLinks\"\xbb\x01\n\x08Resource\x12+\n\x05state\x18\x01 \x01(\x0e\x32\x15.flyteidl.admin.StateR\x05state\x12\x33\n\x07outputs\x18\x02 \x01(\x0b\x32\x19.flyteidl.core.LiteralMapR\x07outputs\x12\x18\n\x07message\x18\x03 \x01(\tR\x07message\x12\x33\n\tlog_links\x18\x04 \x03(\x0b\x32\x16.flyteidl.core.TaskLogR\x08logLinks\"U\n\x11\x44\x65leteTaskRequest\x12\x1b\n\ttask_type\x18\x01 \x01(\tR\x08taskType\x12#\n\rresource_meta\x18\x02 \x01(\x0cR\x0cresourceMeta\"\x14\n\x12\x44\x65leteTaskResponse\"M\n\x05\x41gent\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\x12\x30\n\x14supported_task_types\x18\x02 \x03(\tR\x12supportedTaskTypes\"%\n\x0fGetAgentRequest\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\"?\n\x10GetAgentResponse\x12+\n\x05\x61gent\x18\x01 \x01(\x0b\x32\x15.flyteidl.admin.AgentR\x05\x61gent\"\x13\n\x11ListAgentsRequest\"C\n\x12ListAgentsResponse\x12-\n\x06\x61gents\x18\x01 \x03(\x0b\x32\x15.flyteidl.admin.AgentR\x06\x61gents*^\n\x05State\x12\x15\n\x11RETRYABLE_FAILURE\x10\x00\x12\x15\n\x11PERMANENT_FAILURE\x10\x01\x12\x0b\n\x07PENDING\x10\x02\x12\x0b\n\x07RUNNING\x10\x03\x12\r\n\tSUCCEEDED\x10\x04\x42\xb6\x01\n\x12\x63om.flyteidl.adminB\nAgentProtoP\x01Z;github.com/flyteorg/flyte/flyteidl/gen/pb-go/flyteidl/admin\xa2\x02\x03\x46\x41X\xaa\x02\x0e\x46lyteidl.Admin\xca\x02\x0e\x46lyteidl\\Admin\xe2\x02\x1a\x46lyteidl\\Admin\\GPBMetadata\xea\x02\x0f\x46lyteidl::Adminb\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -33,8 +33,8 @@ _TASKEXECUTIONMETADATA_ANNOTATIONSENTRY._serialized_options = b'8\001' _TASKEXECUTIONMETADATA_ENVIRONMENTVARIABLESENTRY._options = None _TASKEXECUTIONMETADATA_ENVIRONMENTVARIABLESENTRY._serialized_options = b'8\001' - _globals['_STATE']._serialized_start=1914 - _globals['_STATE']._serialized_end=2008 + _globals['_STATE']._serialized_start=2032 + _globals['_STATE']._serialized_end=2126 _globals['_TASKEXECUTIONMETADATA']._serialized_start=198 _globals['_TASKEXECUTIONMETADATA']._serialized_end=862 _globals['_TASKEXECUTIONMETADATA_LABELSENTRY']._serialized_start=668 @@ -46,25 +46,25 @@ _globals['_CREATETASKREQUEST']._serialized_start=865 _globals['_CREATETASKREQUEST']._serialized_end=1124 _globals['_CREATETASKRESPONSE']._serialized_start=1126 - _globals['_CREATETASKRESPONSE']._serialized_end=1183 - _globals['_GETTASKREQUEST']._serialized_start=1185 - _globals['_GETTASKREQUEST']._serialized_end=1267 - _globals['_GETTASKRESPONSE']._serialized_start=1269 - _globals['_GETTASKRESPONSE']._serialized_end=1393 - _globals['_RESOURCE']._serialized_start=1396 - _globals['_RESOURCE']._serialized_end=1530 - _globals['_DELETETASKREQUEST']._serialized_start=1532 - _globals['_DELETETASKREQUEST']._serialized_end=1617 - _globals['_DELETETASKRESPONSE']._serialized_start=1619 - _globals['_DELETETASKRESPONSE']._serialized_end=1639 - _globals['_AGENT']._serialized_start=1641 - _globals['_AGENT']._serialized_end=1718 - _globals['_GETAGENTREQUEST']._serialized_start=1720 - _globals['_GETAGENTREQUEST']._serialized_end=1757 - _globals['_GETAGENTRESPONSE']._serialized_start=1759 - _globals['_GETAGENTRESPONSE']._serialized_end=1822 - _globals['_LISTAGENTSREQUEST']._serialized_start=1824 - _globals['_LISTAGENTSREQUEST']._serialized_end=1843 - _globals['_LISTAGENTSRESPONSE']._serialized_start=1845 - _globals['_LISTAGENTSRESPONSE']._serialized_end=1912 + _globals['_CREATETASKRESPONSE']._serialized_end=1248 + _globals['_GETTASKREQUEST']._serialized_start=1250 + _globals['_GETTASKREQUEST']._serialized_end=1332 + _globals['_GETTASKRESPONSE']._serialized_start=1334 + _globals['_GETTASKRESPONSE']._serialized_end=1458 + _globals['_RESOURCE']._serialized_start=1461 + _globals['_RESOURCE']._serialized_end=1648 + _globals['_DELETETASKREQUEST']._serialized_start=1650 + _globals['_DELETETASKREQUEST']._serialized_end=1735 + _globals['_DELETETASKRESPONSE']._serialized_start=1737 + _globals['_DELETETASKRESPONSE']._serialized_end=1757 + _globals['_AGENT']._serialized_start=1759 + _globals['_AGENT']._serialized_end=1836 + _globals['_GETAGENTREQUEST']._serialized_start=1838 + _globals['_GETAGENTREQUEST']._serialized_end=1875 + _globals['_GETAGENTRESPONSE']._serialized_start=1877 + _globals['_GETAGENTRESPONSE']._serialized_end=1940 + _globals['_LISTAGENTSREQUEST']._serialized_start=1942 + _globals['_LISTAGENTSREQUEST']._serialized_end=1961 + _globals['_LISTAGENTSRESPONSE']._serialized_start=1963 + _globals['_LISTAGENTSRESPONSE']._serialized_end=2030 # @@protoc_insertion_point(module_scope) diff --git a/flyteidl/gen/pb_python/flyteidl/admin/agent_pb2.pyi b/flyteidl/gen/pb_python/flyteidl/admin/agent_pb2.pyi index 54744639e5..3b80e41b58 100644 --- a/flyteidl/gen/pb_python/flyteidl/admin/agent_pb2.pyi +++ b/flyteidl/gen/pb_python/flyteidl/admin/agent_pb2.pyi @@ -74,14 +74,12 @@ class CreateTaskRequest(_message.Message): def __init__(self, inputs: _Optional[_Union[_literals_pb2.LiteralMap, _Mapping]] = ..., template: _Optional[_Union[_tasks_pb2.TaskTemplate, _Mapping]] = ..., output_prefix: _Optional[str] = ..., task_execution_metadata: _Optional[_Union[TaskExecutionMetadata, _Mapping]] = ...) -> None: ... class CreateTaskResponse(_message.Message): - __slots__ = ["resource_meta", "resource", "log_links"] + __slots__ = ["resource_meta", "resource"] RESOURCE_META_FIELD_NUMBER: _ClassVar[int] RESOURCE_FIELD_NUMBER: _ClassVar[int] - LOG_LINKS_FIELD_NUMBER: _ClassVar[int] resource_meta: bytes resource: Resource - log_links: _containers.RepeatedCompositeFieldContainer[_execution_pb2.TaskLog] - def __init__(self, resource_meta: _Optional[bytes] = ..., resource: _Optional[_Union[Resource, _Mapping]] = ..., log_links: _Optional[_Iterable[_Union[_execution_pb2.TaskLog, _Mapping]]] = ...) -> None: ... + def __init__(self, resource_meta: _Optional[bytes] = ..., resource: _Optional[_Union[Resource, _Mapping]] = ...) -> None: ... class GetTaskRequest(_message.Message): __slots__ = ["task_type", "resource_meta"] diff --git a/flyteidl/gen/pb_python/flyteidl/service/agent_pb2_grpc.py b/flyteidl/gen/pb_python/flyteidl/service/agent_pb2_grpc.py index a6b843d324..94f75b1682 100644 --- a/flyteidl/gen/pb_python/flyteidl/service/agent_pb2_grpc.py +++ b/flyteidl/gen/pb_python/flyteidl/service/agent_pb2_grpc.py @@ -7,9 +7,6 @@ class AsyncAgentServiceStub(object): """AsyncAgentService defines an RPC Service that allows propeller to send the request to the agent server. - It can handle asynchronous tasks and synchronous tasks. - Asynchronous tasks are for tasks running long, for example running query job. - Synchronous tasks are for tasks running quick, for example, you want to execute something really fast, or even retrieving some metadata from a backend service. """ def __init__(self, channel): @@ -36,7 +33,7 @@ def __init__(self, channel): class AsyncAgentServiceServicer(object): - """AgentService defines an RPC Service that allows propeller to send the request to the agent server. + """AsyncAgentService defines an RPC Service that allows propeller to send the request to the agent server. """ def CreateTask(self, request, context): @@ -86,7 +83,7 @@ def add_AsyncAgentServiceServicer_to_server(servicer, server): # This class is part of an EXPERIMENTAL API. class AsyncAgentService(object): - """AgentService defines an RPC Service that allows propeller to send the request to the agent server. + """AsyncAgentService defines an RPC Service that allows propeller to send the request to the agent server. """ @staticmethod diff --git a/flyteidl/gen/pb_rust/flyteidl.admin.rs b/flyteidl/gen/pb_rust/flyteidl.admin.rs index 969ee4b87d..692a1ee5e7 100644 --- a/flyteidl/gen/pb_rust/flyteidl.admin.rs +++ b/flyteidl/gen/pb_rust/flyteidl.admin.rs @@ -45,9 +45,6 @@ pub struct CreateTaskRequest { #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct CreateTaskResponse { - /// log information for the task execution. - #[prost(message, repeated, tag="3")] - pub log_links: ::prost::alloc::vec::Vec, /// Metadata is created by the agent. It could be a string (jobId) or a dict (more complex metadata). /// Resource is for synchronous task execution. #[prost(oneof="create_task_response::Res", tags="1, 2")] diff --git a/flyteidl/protos/flyteidl/admin/agent.proto b/flyteidl/protos/flyteidl/admin/agent.proto index c4c9cb1807..778fcc99d0 100644 --- a/flyteidl/protos/flyteidl/admin/agent.proto +++ b/flyteidl/protos/flyteidl/admin/agent.proto @@ -56,8 +56,6 @@ message CreateTaskResponse { bytes resource_meta = 1; Resource resource = 2; } - // log information for the task execution. - repeated core.TaskLog log_links = 3; } // A message used to fetch a job resource from flyte agent server. diff --git a/flyteplugins/go/tasks/plugins/webapi/agent/plugin.go b/flyteplugins/go/tasks/plugins/webapi/agent/plugin.go index 5d56619a75..54b0d91a92 100644 --- a/flyteplugins/go/tasks/plugins/webapi/agent/plugin.go +++ b/flyteplugins/go/tasks/plugins/webapi/agent/plugin.go @@ -115,25 +115,25 @@ func (p Plugin) Create(ctx context.Context, taskCtx webapi.TaskExecutionContextR taskTemplate.GetContainer().Args = argTemplate } - resource := ResourceWrapper{State: admin.State_RUNNING} - // If the agent returned a resource, we assume this is a synchronous task. // The state should be a terminal state, for example, SUCCEEDED, PERMANENT_FAILURE, or RETRYABLE_FAILURE. if res.GetResource() != nil { - resource.State = res.GetResource().State - resource.Outputs = res.GetResource().Outputs - resource.Message = res.GetResource().Message - resource.LogLinks = res.GetResource().LogLinks - } else { - logger.Infof(ctx, "If this is a synchronous task, the agent should return a resource.") + logger.Infof(ctx, "Agent is executing a synchronous task.") + return nil, + ResourceWrapper{ + State: res.GetResource().State, + Outputs: res.GetResource().Outputs, + Message: res.GetResource().Message, + }, nil } + logger.Infof(ctx, "Agent is executing an asynchronous task.") return ResourceMetaWrapper{ OutputPrefix: outputPrefix, AgentResourceMeta: res.GetResourceMeta(), Token: "", TaskType: taskTemplate.Type, - }, resource, nil + }, nil, nil } func (p Plugin) Get(ctx context.Context, taskCtx webapi.GetContext) (latest webapi.Resource, err error) { From 832d44f5ca5b406895b336ac8e613c56e96c741f Mon Sep 17 00:00:00 2001 From: Kevin Su Date: Wed, 20 Dec 2023 11:13:29 -0800 Subject: [PATCH 47/48] Add log link Signed-off-by: Kevin Su --- flyteplugins/go/tasks/plugins/webapi/agent/plugin.go | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/flyteplugins/go/tasks/plugins/webapi/agent/plugin.go b/flyteplugins/go/tasks/plugins/webapi/agent/plugin.go index 54b0d91a92..73a98782bc 100644 --- a/flyteplugins/go/tasks/plugins/webapi/agent/plugin.go +++ b/flyteplugins/go/tasks/plugins/webapi/agent/plugin.go @@ -121,9 +121,10 @@ func (p Plugin) Create(ctx context.Context, taskCtx webapi.TaskExecutionContextR logger.Infof(ctx, "Agent is executing a synchronous task.") return nil, ResourceWrapper{ - State: res.GetResource().State, - Outputs: res.GetResource().Outputs, - Message: res.GetResource().Message, + State: res.GetResource().State, + Outputs: res.GetResource().Outputs, + Message: res.GetResource().Message, + LogLinks: res.GetResource().LogLinks, }, nil } From b719ac623122b544e58195bba77c2ec9bfd2345d Mon Sep 17 00:00:00 2001 From: Future Outlier Date: Thu, 21 Dec 2023 06:28:35 +0800 Subject: [PATCH 48/48] add Message and LogLinks in SyncTask Signed-off-by: Future Outlier --- flyteplugins/go/tasks/plugins/webapi/agent/integration_test.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/flyteplugins/go/tasks/plugins/webapi/agent/integration_test.go b/flyteplugins/go/tasks/plugins/webapi/agent/integration_test.go index 36df28529e..827af0d907 100644 --- a/flyteplugins/go/tasks/plugins/webapi/agent/integration_test.go +++ b/flyteplugins/go/tasks/plugins/webapi/agent/integration_test.go @@ -77,6 +77,8 @@ func (m *MockSyncTask) CreateTask(_ context.Context, createTaskRequest *admin.Cr Outputs: &flyteIdlCore.LiteralMap{ Literals: map[string]*flyteIdlCore.Literal{}, }, + Message: "Sync task finished", + LogLinks: []*flyteIdlCore.TaskLog{{Uri: "http://localhost:3000/log", Name: "Log Link"}}, }, }, }, nil