mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-08-14 06:15:45 +00:00
Merge pull request #35839 from Random-Liu/add-cri-runtime-status
Automatic merge from submit-queue CRI: Add Status into CRI. For https://github.com/kubernetes/kubernetes/issues/35701. Fixes https://github.com/kubernetes/kubernetes/issues/35701. This PR added a `Status` call in CRI, and the `RuntimeStatus` is defined as following: ``` protobuf message RuntimeCondition { // Type of runtime condition. optional string type = 1; // Status of the condition, one of true/false. optional bool status = 2; // Brief reason for the condition's last transition. optional string reason = 3; // Human readable message indicating details about last transition. optional string message = 4; } message RuntimeStatus { // Conditions is an array of current observed runtime conditions. repeated RuntimeCondition conditions = 1; } ``` Currently, only `conditions` is included in `RuntimeStatus`, and the definition is almost the same with `NodeCondition` and `PodCondition` in K8s api. @yujuhong @feiskyer @bprashanth If this makes sense, I'll send a follow up PR to let dockershim return `RuntimeStatus` and let kubelet make use of it. @yifan-gu @euank Does this make sense to rkt? /cc @kubernetes/sig-node
This commit is contained in:
commit
8371a778f6
@ -81,6 +81,8 @@ type RuntimeService interface {
|
|||||||
|
|
||||||
// UpdateRuntimeConfig updates runtime configuration if specified
|
// UpdateRuntimeConfig updates runtime configuration if specified
|
||||||
UpdateRuntimeConfig(runtimeConfig *runtimeApi.RuntimeConfig) error
|
UpdateRuntimeConfig(runtimeConfig *runtimeApi.RuntimeConfig) error
|
||||||
|
// Status returns the status of the runtime.
|
||||||
|
Status() (*runtimeApi.RuntimeStatus, error)
|
||||||
}
|
}
|
||||||
|
|
||||||
// ImageManagerService interface should be implemented by a container image
|
// ImageManagerService interface should be implemented by a container image
|
||||||
|
@ -50,6 +50,7 @@ type FakeRuntimeService struct {
|
|||||||
|
|
||||||
Called []string
|
Called []string
|
||||||
|
|
||||||
|
FakeStatus *runtimeApi.RuntimeStatus
|
||||||
Containers map[string]*FakeContainer
|
Containers map[string]*FakeContainer
|
||||||
Sandboxes map[string]*FakePodSandbox
|
Sandboxes map[string]*FakePodSandbox
|
||||||
}
|
}
|
||||||
@ -109,6 +110,15 @@ func (r *FakeRuntimeService) Version(apiVersion string) (*runtimeApi.VersionResp
|
|||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (r *FakeRuntimeService) Status() (*runtimeApi.RuntimeStatus, error) {
|
||||||
|
r.Lock()
|
||||||
|
defer r.Unlock()
|
||||||
|
|
||||||
|
r.Called = append(r.Called, "Status")
|
||||||
|
|
||||||
|
return r.FakeStatus, nil
|
||||||
|
}
|
||||||
|
|
||||||
func (r *FakeRuntimeService) RunPodSandbox(config *runtimeApi.PodSandboxConfig) (string, error) {
|
func (r *FakeRuntimeService) RunPodSandbox(config *runtimeApi.PodSandboxConfig) (string, error) {
|
||||||
r.Lock()
|
r.Lock()
|
||||||
defer r.Unlock()
|
defer r.Unlock()
|
||||||
|
@ -12,7 +12,10 @@ load(
|
|||||||
|
|
||||||
go_library(
|
go_library(
|
||||||
name = "go_default_library",
|
name = "go_default_library",
|
||||||
srcs = ["api.pb.go"],
|
srcs = [
|
||||||
|
"api.pb.go",
|
||||||
|
"constants.go",
|
||||||
|
],
|
||||||
tags = ["automanaged"],
|
tags = ["automanaged"],
|
||||||
deps = [
|
deps = [
|
||||||
"//vendor:github.com/gogo/protobuf/proto",
|
"//vendor:github.com/gogo/protobuf/proto",
|
||||||
|
@ -98,6 +98,10 @@ It has these top-level messages:
|
|||||||
RuntimeConfig
|
RuntimeConfig
|
||||||
UpdateRuntimeConfigRequest
|
UpdateRuntimeConfigRequest
|
||||||
UpdateRuntimeConfigResponse
|
UpdateRuntimeConfigResponse
|
||||||
|
RuntimeCondition
|
||||||
|
RuntimeStatus
|
||||||
|
StatusRequest
|
||||||
|
StatusResponse
|
||||||
*/
|
*/
|
||||||
package runtime
|
package runtime
|
||||||
|
|
||||||
@ -2653,6 +2657,110 @@ func (m *UpdateRuntimeConfigResponse) String() string { return proto.
|
|||||||
func (*UpdateRuntimeConfigResponse) ProtoMessage() {}
|
func (*UpdateRuntimeConfigResponse) ProtoMessage() {}
|
||||||
func (*UpdateRuntimeConfigResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{72} }
|
func (*UpdateRuntimeConfigResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{72} }
|
||||||
|
|
||||||
|
// RuntimeCondition contains condition information for the runtime.
|
||||||
|
// There are 2 kinds of runtime conditions:
|
||||||
|
// 1. Required condtitions: Conditions are required for kubelet to work
|
||||||
|
// properly. If any required condition is unmet, the node will be not ready.
|
||||||
|
// The required conditions include:
|
||||||
|
// * RuntimeReady: RuntimeReady means the runtime is up and ready to accept
|
||||||
|
// basic containers e.g. container only needs host network.
|
||||||
|
// * NetworkReady: NetworkReady means the runtime network is up and ready to
|
||||||
|
// accept containers which require container network.
|
||||||
|
// 2. Optional conditions: Conditions are informative to the user, but kubelet
|
||||||
|
// will not rely on. Since condition type is an arbitrary string, all conditions
|
||||||
|
// not required are optional. These conditions will be exposed to users to help
|
||||||
|
// them understand the status of the system.
|
||||||
|
type RuntimeCondition struct {
|
||||||
|
// Type of runtime condition.
|
||||||
|
Type *string `protobuf:"bytes,1,opt,name=type" json:"type,omitempty"`
|
||||||
|
// Status of the condition, one of true/false.
|
||||||
|
Status *bool `protobuf:"varint,2,opt,name=status" json:"status,omitempty"`
|
||||||
|
// Reason is brief reason for the condition's last transition.
|
||||||
|
Reason *string `protobuf:"bytes,3,opt,name=reason" json:"reason,omitempty"`
|
||||||
|
// Message is human readable message indicating details about last transition.
|
||||||
|
Message *string `protobuf:"bytes,4,opt,name=message" json:"message,omitempty"`
|
||||||
|
XXX_unrecognized []byte `json:"-"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *RuntimeCondition) Reset() { *m = RuntimeCondition{} }
|
||||||
|
func (m *RuntimeCondition) String() string { return proto.CompactTextString(m) }
|
||||||
|
func (*RuntimeCondition) ProtoMessage() {}
|
||||||
|
func (*RuntimeCondition) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{73} }
|
||||||
|
|
||||||
|
func (m *RuntimeCondition) GetType() string {
|
||||||
|
if m != nil && m.Type != nil {
|
||||||
|
return *m.Type
|
||||||
|
}
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *RuntimeCondition) GetStatus() bool {
|
||||||
|
if m != nil && m.Status != nil {
|
||||||
|
return *m.Status
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *RuntimeCondition) GetReason() string {
|
||||||
|
if m != nil && m.Reason != nil {
|
||||||
|
return *m.Reason
|
||||||
|
}
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *RuntimeCondition) GetMessage() string {
|
||||||
|
if m != nil && m.Message != nil {
|
||||||
|
return *m.Message
|
||||||
|
}
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
|
// RuntimeStatus is information about the current status of the runtime.
|
||||||
|
type RuntimeStatus struct {
|
||||||
|
// Conditions is an array of current observed runtime conditions.
|
||||||
|
Conditions []*RuntimeCondition `protobuf:"bytes,1,rep,name=conditions" json:"conditions,omitempty"`
|
||||||
|
XXX_unrecognized []byte `json:"-"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *RuntimeStatus) Reset() { *m = RuntimeStatus{} }
|
||||||
|
func (m *RuntimeStatus) String() string { return proto.CompactTextString(m) }
|
||||||
|
func (*RuntimeStatus) ProtoMessage() {}
|
||||||
|
func (*RuntimeStatus) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{74} }
|
||||||
|
|
||||||
|
func (m *RuntimeStatus) GetConditions() []*RuntimeCondition {
|
||||||
|
if m != nil {
|
||||||
|
return m.Conditions
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
type StatusRequest struct {
|
||||||
|
XXX_unrecognized []byte `json:"-"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *StatusRequest) Reset() { *m = StatusRequest{} }
|
||||||
|
func (m *StatusRequest) String() string { return proto.CompactTextString(m) }
|
||||||
|
func (*StatusRequest) ProtoMessage() {}
|
||||||
|
func (*StatusRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{75} }
|
||||||
|
|
||||||
|
type StatusResponse struct {
|
||||||
|
// The status of the Runtime.
|
||||||
|
Status *RuntimeStatus `protobuf:"bytes,1,opt,name=status" json:"status,omitempty"`
|
||||||
|
XXX_unrecognized []byte `json:"-"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *StatusResponse) Reset() { *m = StatusResponse{} }
|
||||||
|
func (m *StatusResponse) String() string { return proto.CompactTextString(m) }
|
||||||
|
func (*StatusResponse) ProtoMessage() {}
|
||||||
|
func (*StatusResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{76} }
|
||||||
|
|
||||||
|
func (m *StatusResponse) GetStatus() *RuntimeStatus {
|
||||||
|
if m != nil {
|
||||||
|
return m.Status
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
proto.RegisterType((*VersionRequest)(nil), "runtime.VersionRequest")
|
proto.RegisterType((*VersionRequest)(nil), "runtime.VersionRequest")
|
||||||
proto.RegisterType((*VersionResponse)(nil), "runtime.VersionResponse")
|
proto.RegisterType((*VersionResponse)(nil), "runtime.VersionResponse")
|
||||||
@ -2727,6 +2835,10 @@ func init() {
|
|||||||
proto.RegisterType((*RuntimeConfig)(nil), "runtime.RuntimeConfig")
|
proto.RegisterType((*RuntimeConfig)(nil), "runtime.RuntimeConfig")
|
||||||
proto.RegisterType((*UpdateRuntimeConfigRequest)(nil), "runtime.UpdateRuntimeConfigRequest")
|
proto.RegisterType((*UpdateRuntimeConfigRequest)(nil), "runtime.UpdateRuntimeConfigRequest")
|
||||||
proto.RegisterType((*UpdateRuntimeConfigResponse)(nil), "runtime.UpdateRuntimeConfigResponse")
|
proto.RegisterType((*UpdateRuntimeConfigResponse)(nil), "runtime.UpdateRuntimeConfigResponse")
|
||||||
|
proto.RegisterType((*RuntimeCondition)(nil), "runtime.RuntimeCondition")
|
||||||
|
proto.RegisterType((*RuntimeStatus)(nil), "runtime.RuntimeStatus")
|
||||||
|
proto.RegisterType((*StatusRequest)(nil), "runtime.StatusRequest")
|
||||||
|
proto.RegisterType((*StatusResponse)(nil), "runtime.StatusResponse")
|
||||||
proto.RegisterEnum("runtime.Protocol", Protocol_name, Protocol_value)
|
proto.RegisterEnum("runtime.Protocol", Protocol_name, Protocol_value)
|
||||||
proto.RegisterEnum("runtime.PodSandboxState", PodSandboxState_name, PodSandboxState_value)
|
proto.RegisterEnum("runtime.PodSandboxState", PodSandboxState_name, PodSandboxState_value)
|
||||||
proto.RegisterEnum("runtime.ContainerState", ContainerState_name, ContainerState_value)
|
proto.RegisterEnum("runtime.ContainerState", ContainerState_name, ContainerState_value)
|
||||||
@ -2794,6 +2906,8 @@ type RuntimeServiceClient interface {
|
|||||||
PortForward(ctx context.Context, in *PortForwardRequest, opts ...grpc.CallOption) (*PortForwardResponse, error)
|
PortForward(ctx context.Context, in *PortForwardRequest, opts ...grpc.CallOption) (*PortForwardResponse, error)
|
||||||
// UpdateRuntimeConfig updates the runtime configuration based on request
|
// UpdateRuntimeConfig updates the runtime configuration based on request
|
||||||
UpdateRuntimeConfig(ctx context.Context, in *UpdateRuntimeConfigRequest, opts ...grpc.CallOption) (*UpdateRuntimeConfigResponse, error)
|
UpdateRuntimeConfig(ctx context.Context, in *UpdateRuntimeConfigRequest, opts ...grpc.CallOption) (*UpdateRuntimeConfigResponse, error)
|
||||||
|
// Status returns the status of the runtime.
|
||||||
|
Status(ctx context.Context, in *StatusRequest, opts ...grpc.CallOption) (*StatusResponse, error)
|
||||||
}
|
}
|
||||||
|
|
||||||
type runtimeServiceClient struct {
|
type runtimeServiceClient struct {
|
||||||
@ -2957,6 +3071,15 @@ func (c *runtimeServiceClient) UpdateRuntimeConfig(ctx context.Context, in *Upda
|
|||||||
return out, nil
|
return out, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *runtimeServiceClient) Status(ctx context.Context, in *StatusRequest, opts ...grpc.CallOption) (*StatusResponse, error) {
|
||||||
|
out := new(StatusResponse)
|
||||||
|
err := grpc.Invoke(ctx, "/runtime.RuntimeService/Status", in, out, c.cc, opts...)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return out, nil
|
||||||
|
}
|
||||||
|
|
||||||
// Server API for RuntimeService service
|
// Server API for RuntimeService service
|
||||||
|
|
||||||
type RuntimeServiceServer interface {
|
type RuntimeServiceServer interface {
|
||||||
@ -3011,6 +3134,8 @@ type RuntimeServiceServer interface {
|
|||||||
PortForward(context.Context, *PortForwardRequest) (*PortForwardResponse, error)
|
PortForward(context.Context, *PortForwardRequest) (*PortForwardResponse, error)
|
||||||
// UpdateRuntimeConfig updates the runtime configuration based on request
|
// UpdateRuntimeConfig updates the runtime configuration based on request
|
||||||
UpdateRuntimeConfig(context.Context, *UpdateRuntimeConfigRequest) (*UpdateRuntimeConfigResponse, error)
|
UpdateRuntimeConfig(context.Context, *UpdateRuntimeConfigRequest) (*UpdateRuntimeConfigResponse, error)
|
||||||
|
// Status returns the status of the runtime.
|
||||||
|
Status(context.Context, *StatusRequest) (*StatusResponse, error)
|
||||||
}
|
}
|
||||||
|
|
||||||
func RegisterRuntimeServiceServer(s *grpc.Server, srv RuntimeServiceServer) {
|
func RegisterRuntimeServiceServer(s *grpc.Server, srv RuntimeServiceServer) {
|
||||||
@ -3323,6 +3448,24 @@ func _RuntimeService_UpdateRuntimeConfig_Handler(srv interface{}, ctx context.Co
|
|||||||
return interceptor(ctx, in, info, handler)
|
return interceptor(ctx, in, info, handler)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func _RuntimeService_Status_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
|
||||||
|
in := new(StatusRequest)
|
||||||
|
if err := dec(in); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
if interceptor == nil {
|
||||||
|
return srv.(RuntimeServiceServer).Status(ctx, in)
|
||||||
|
}
|
||||||
|
info := &grpc.UnaryServerInfo{
|
||||||
|
Server: srv,
|
||||||
|
FullMethod: "/runtime.RuntimeService/Status",
|
||||||
|
}
|
||||||
|
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
|
||||||
|
return srv.(RuntimeServiceServer).Status(ctx, req.(*StatusRequest))
|
||||||
|
}
|
||||||
|
return interceptor(ctx, in, info, handler)
|
||||||
|
}
|
||||||
|
|
||||||
var _RuntimeService_serviceDesc = grpc.ServiceDesc{
|
var _RuntimeService_serviceDesc = grpc.ServiceDesc{
|
||||||
ServiceName: "runtime.RuntimeService",
|
ServiceName: "runtime.RuntimeService",
|
||||||
HandlerType: (*RuntimeServiceServer)(nil),
|
HandlerType: (*RuntimeServiceServer)(nil),
|
||||||
@ -3395,6 +3538,10 @@ var _RuntimeService_serviceDesc = grpc.ServiceDesc{
|
|||||||
MethodName: "UpdateRuntimeConfig",
|
MethodName: "UpdateRuntimeConfig",
|
||||||
Handler: _RuntimeService_UpdateRuntimeConfig_Handler,
|
Handler: _RuntimeService_UpdateRuntimeConfig_Handler,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
MethodName: "Status",
|
||||||
|
Handler: _RuntimeService_Status_Handler,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
Streams: []grpc.StreamDesc{},
|
Streams: []grpc.StreamDesc{},
|
||||||
Metadata: fileDescriptorApi,
|
Metadata: fileDescriptorApi,
|
||||||
@ -3578,204 +3725,209 @@ var _ImageService_serviceDesc = grpc.ServiceDesc{
|
|||||||
}
|
}
|
||||||
|
|
||||||
var fileDescriptorApi = []byte{
|
var fileDescriptorApi = []byte{
|
||||||
// 3179 bytes of a gzipped FileDescriptorProto
|
// 3262 bytes of a gzipped FileDescriptorProto
|
||||||
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xcc, 0x3a, 0x4d, 0x73, 0x1b, 0xc7,
|
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xcc, 0x3a, 0x4d, 0x73, 0x1b, 0xc7,
|
||||||
0xb1, 0x04, 0x40, 0x82, 0x40, 0x83, 0x00, 0xc1, 0x21, 0x45, 0x42, 0xa0, 0x25, 0x51, 0x6b, 0xcb,
|
0xb1, 0x04, 0x40, 0x82, 0x40, 0x83, 0x00, 0xc1, 0x11, 0x45, 0x42, 0xa0, 0x25, 0x51, 0x6b, 0xcb,
|
||||||
0x96, 0x64, 0x5b, 0x65, 0xf1, 0xbd, 0x67, 0x3d, 0xcb, 0x96, 0x6c, 0x98, 0xa4, 0xfd, 0x68, 0x49,
|
0x96, 0x64, 0x9b, 0x65, 0xf1, 0xbd, 0x67, 0x3d, 0xcb, 0x96, 0x6c, 0x98, 0xa4, 0xfd, 0x68, 0x49,
|
||||||
0x10, 0xdf, 0x40, 0x72, 0xec, 0xf2, 0x61, 0xb3, 0xc2, 0x8e, 0xc0, 0x95, 0x80, 0xdd, 0xf5, 0xec,
|
0x10, 0xdf, 0x40, 0x72, 0xec, 0xf2, 0x61, 0xb3, 0xc2, 0x8e, 0xc0, 0x95, 0x80, 0xdd, 0xf5, 0xec,
|
||||||
0x80, 0x16, 0x73, 0xcd, 0x25, 0x87, 0x1c, 0x72, 0xcd, 0x2d, 0x95, 0x4a, 0x95, 0x0f, 0xb9, 0xa5,
|
0x82, 0x16, 0x73, 0xcd, 0x25, 0x87, 0x1c, 0x72, 0xcd, 0x2d, 0x95, 0x4a, 0x95, 0xab, 0x92, 0x5b,
|
||||||
0x2a, 0x55, 0xf9, 0x0f, 0xa9, 0xfc, 0x90, 0x1c, 0x72, 0xcf, 0x31, 0x35, 0x1f, 0x3b, 0x3b, 0xfb,
|
0xaa, 0x52, 0x95, 0xff, 0x90, 0xca, 0x0f, 0xc9, 0x3f, 0xc8, 0x31, 0x35, 0x9f, 0x3b, 0xfb, 0x01,
|
||||||
0x01, 0x9a, 0x94, 0x53, 0xb1, 0x6e, 0x3b, 0x3d, 0xdd, 0x3d, 0x3d, 0xdd, 0x3d, 0x3d, 0xdd, 0x3d,
|
0x9a, 0x94, 0x53, 0xb1, 0x6e, 0x3b, 0x3d, 0xdd, 0x3d, 0x3d, 0xdd, 0x3d, 0x3d, 0xdd, 0x3d, 0x0b,
|
||||||
0x0b, 0x75, 0x27, 0xf4, 0x6e, 0x84, 0x34, 0x60, 0x01, 0x5a, 0xa4, 0x53, 0x9f, 0x79, 0x13, 0x62,
|
0x75, 0x27, 0xf4, 0xb6, 0x42, 0x1a, 0xc4, 0x01, 0x5a, 0xa4, 0x53, 0x3f, 0xf6, 0x26, 0xc4, 0xba,
|
||||||
0x5d, 0x87, 0xd6, 0x97, 0x84, 0x46, 0x5e, 0xe0, 0x63, 0xf2, 0xed, 0x94, 0x44, 0x0c, 0x75, 0x60,
|
0x01, 0xad, 0x2f, 0x09, 0x8d, 0xbc, 0xc0, 0xc7, 0xe4, 0xdb, 0x29, 0x89, 0x62, 0xd4, 0x81, 0xc5,
|
||||||
0xf1, 0x48, 0x42, 0x3a, 0xa5, 0xad, 0xd2, 0xd5, 0x3a, 0x8e, 0x87, 0xd6, 0xf7, 0x25, 0x58, 0xd6,
|
0x23, 0x01, 0xe9, 0x94, 0x36, 0x4b, 0xd7, 0xea, 0x58, 0x0d, 0xad, 0xef, 0x4b, 0xb0, 0xac, 0x91,
|
||||||
0xc8, 0x51, 0x18, 0xf8, 0x11, 0x99, 0x8d, 0x8d, 0x2e, 0xc3, 0x92, 0x5a, 0xc4, 0xf6, 0x9d, 0x09,
|
0xa3, 0x30, 0xf0, 0x23, 0x32, 0x1b, 0x1b, 0x5d, 0x81, 0x25, 0xb9, 0x88, 0xed, 0x3b, 0x13, 0xd2,
|
||||||
0xe9, 0x94, 0xc5, 0x74, 0x43, 0xc1, 0xfa, 0xce, 0x84, 0xa0, 0xb7, 0x60, 0x39, 0x46, 0x89, 0x99,
|
0x29, 0xf3, 0xe9, 0x86, 0x84, 0xf5, 0x9d, 0x09, 0x41, 0x6f, 0xc1, 0xb2, 0x42, 0x51, 0x4c, 0x2a,
|
||||||
0x54, 0x04, 0x56, 0x4b, 0x81, 0xd5, 0x6a, 0xe8, 0x06, 0xac, 0xc6, 0x88, 0x4e, 0xe8, 0x69, 0xe4,
|
0x1c, 0xab, 0x25, 0xc1, 0x72, 0x35, 0xb4, 0x05, 0xe7, 0x14, 0xa2, 0x13, 0x7a, 0x1a, 0x79, 0x9e,
|
||||||
0x79, 0x81, 0xbc, 0xa2, 0xa6, 0x7a, 0xa1, 0xa7, 0xf0, 0xad, 0x6f, 0xa0, 0xbe, 0xdb, 0x1f, 0xec,
|
0x23, 0xaf, 0xc8, 0xa9, 0x5e, 0xe8, 0x49, 0x7c, 0xeb, 0x1b, 0xa8, 0xef, 0xf6, 0x07, 0x3b, 0x81,
|
||||||
0x04, 0xfe, 0x53, 0x6f, 0xc4, 0x45, 0x8c, 0x08, 0xe5, 0x34, 0x9d, 0xd2, 0x56, 0x85, 0x8b, 0xa8,
|
0xff, 0xd4, 0x1b, 0x31, 0x11, 0x23, 0x42, 0x19, 0x4d, 0xa7, 0xb4, 0x59, 0x61, 0x22, 0xca, 0x21,
|
||||||
0x86, 0xa8, 0x0b, 0xb5, 0x88, 0x38, 0x74, 0x78, 0x48, 0xa2, 0x4e, 0x59, 0x4c, 0xe9, 0x31, 0xa7,
|
0xea, 0x42, 0x2d, 0x22, 0x0e, 0x1d, 0x1e, 0x92, 0xa8, 0x53, 0xe6, 0x53, 0x7a, 0xcc, 0xa8, 0x82,
|
||||||
0x0a, 0x42, 0xe6, 0x05, 0x7e, 0xd4, 0xa9, 0x48, 0x2a, 0x35, 0xb4, 0x7e, 0x5b, 0x82, 0xc6, 0x41,
|
0x30, 0xf6, 0x02, 0x3f, 0xea, 0x54, 0x04, 0x95, 0x1c, 0x5a, 0xbf, 0x2d, 0x41, 0xe3, 0x20, 0xa0,
|
||||||
0x40, 0xd9, 0x03, 0x27, 0x0c, 0x3d, 0x7f, 0x84, 0xde, 0x85, 0x9a, 0x50, 0xea, 0x30, 0x18, 0x0b,
|
0xf1, 0x03, 0x27, 0x0c, 0x3d, 0x7f, 0x84, 0xde, 0x85, 0x1a, 0x57, 0xea, 0x30, 0x18, 0x73, 0x1d,
|
||||||
0x1d, 0xb4, 0xb6, 0x57, 0x6e, 0x28, 0x91, 0x6e, 0x1c, 0xa8, 0x09, 0xac, 0x51, 0xd0, 0x15, 0x68,
|
0xb4, 0xb6, 0x57, 0xb6, 0xa4, 0x48, 0x5b, 0x07, 0x72, 0x02, 0x6b, 0x14, 0x74, 0x15, 0x5a, 0xc3,
|
||||||
0x0d, 0x03, 0x9f, 0x39, 0x9e, 0x4f, 0xa8, 0x1d, 0x06, 0x94, 0x09, 0xcd, 0x2c, 0xe0, 0xa6, 0x86,
|
0xc0, 0x8f, 0x1d, 0xcf, 0x27, 0xd4, 0x0e, 0x03, 0x1a, 0x73, 0xcd, 0x2c, 0xe0, 0xa6, 0x86, 0x32,
|
||||||
0x72, 0xe6, 0x68, 0x13, 0xea, 0x87, 0x41, 0xc4, 0x24, 0x46, 0x45, 0x60, 0xd4, 0x38, 0x40, 0x4c,
|
0xe6, 0x68, 0x03, 0xea, 0x87, 0x41, 0x14, 0x0b, 0x8c, 0x0a, 0xc7, 0xa8, 0x31, 0x00, 0x9f, 0x5c,
|
||||||
0x6e, 0xc0, 0xa2, 0x98, 0xf4, 0x42, 0xa5, 0x83, 0x2a, 0x1f, 0xee, 0x87, 0xd6, 0x6f, 0x4a, 0xb0,
|
0x87, 0x45, 0x3e, 0xe9, 0x85, 0x52, 0x07, 0x55, 0x36, 0xdc, 0x0f, 0xad, 0xdf, 0x94, 0x60, 0xe1,
|
||||||
0xf0, 0x20, 0x98, 0xfa, 0x2c, 0xb3, 0x8c, 0xc3, 0x0e, 0x95, 0x7d, 0x8c, 0x65, 0x1c, 0x76, 0x98,
|
0x41, 0x30, 0xf5, 0xe3, 0xcc, 0x32, 0x4e, 0x7c, 0x28, 0xed, 0x63, 0x2c, 0xe3, 0xc4, 0x87, 0xc9,
|
||||||
0x2c, 0xc3, 0x31, 0xa4, 0x89, 0xe4, 0x32, 0x7c, 0xb2, 0x0b, 0x35, 0x4a, 0x1c, 0x37, 0xf0, 0xc7,
|
0x32, 0x0c, 0x43, 0x98, 0x48, 0x2c, 0xc3, 0x26, 0xbb, 0x50, 0xa3, 0xc4, 0x71, 0x03, 0x7f, 0x7c,
|
||||||
0xc7, 0x42, 0x84, 0x1a, 0xd6, 0x63, 0x6e, 0xbb, 0x88, 0x8c, 0x3d, 0x7f, 0xfa, 0xc2, 0xa6, 0x64,
|
0xcc, 0x45, 0xa8, 0x61, 0x3d, 0x66, 0xb6, 0x8b, 0xc8, 0xd8, 0xf3, 0xa7, 0x2f, 0x6c, 0x4a, 0xc6,
|
||||||
0xec, 0x3c, 0x21, 0x63, 0x21, 0x4a, 0x0d, 0xb7, 0x14, 0x18, 0x4b, 0xa8, 0xf5, 0x0c, 0x96, 0xb9,
|
0xce, 0x13, 0x32, 0xe6, 0xa2, 0xd4, 0x70, 0x4b, 0x82, 0xb1, 0x80, 0x5a, 0xcf, 0x60, 0x99, 0x19,
|
||||||
0xb1, 0xa3, 0xd0, 0x19, 0x92, 0x87, 0x42, 0x85, 0xdc, 0x35, 0xc4, 0xa2, 0x3e, 0x61, 0xdf, 0x05,
|
0x3b, 0x0a, 0x9d, 0x21, 0x79, 0xc8, 0x55, 0xc8, 0x5c, 0x83, 0x2f, 0xea, 0x93, 0xf8, 0xbb, 0x80,
|
||||||
0xf4, 0xb9, 0x90, 0xac, 0x86, 0x1b, 0x1c, 0xd6, 0x97, 0x20, 0x74, 0x1e, 0x6a, 0x52, 0x2e, 0xcf,
|
0x3e, 0xe7, 0x92, 0xd5, 0x70, 0x83, 0xc1, 0xfa, 0x02, 0x84, 0x2e, 0x40, 0x4d, 0xc8, 0xe5, 0xb9,
|
||||||
0x15, 0x62, 0xd5, 0xb0, 0xd8, 0xf1, 0x81, 0xe7, 0xea, 0x29, 0x2f, 0x1c, 0x2a, 0xa9, 0x16, 0xe5,
|
0x5c, 0xac, 0x1a, 0xe6, 0x3b, 0x3e, 0xf0, 0x5c, 0x3d, 0xe5, 0x85, 0x43, 0x29, 0xd5, 0xa2, 0xd8,
|
||||||
0xee, 0x87, 0xd6, 0x2f, 0x4b, 0x70, 0xee, 0x3e, 0x5f, 0xfc, 0x20, 0x70, 0x07, 0x8e, 0xef, 0x3e,
|
0xfd, 0xd0, 0xfa, 0x65, 0x09, 0xce, 0xdf, 0x67, 0x8b, 0x1f, 0x04, 0xee, 0xc0, 0xf1, 0xdd, 0x27,
|
||||||
0x09, 0x5e, 0x28, 0x27, 0x78, 0x1d, 0x9a, 0xc3, 0x11, 0x0d, 0xa6, 0xa1, 0x1d, 0x3a, 0x94, 0xf8,
|
0xc1, 0x0b, 0xe9, 0x04, 0xaf, 0x43, 0x73, 0x38, 0xa2, 0xc1, 0x34, 0xb4, 0x43, 0x87, 0x12, 0x3f,
|
||||||
0x4c, 0x69, 0x63, 0x49, 0x02, 0x0f, 0x04, 0x0c, 0xed, 0xc1, 0x8a, 0x1f, 0x8b, 0x6a, 0xc7, 0xd6,
|
0x96, 0xda, 0x58, 0x12, 0xc0, 0x03, 0x0e, 0x43, 0x7b, 0xb0, 0xe2, 0x2b, 0x51, 0x6d, 0x65, 0x7d,
|
||||||
0xe7, 0xab, 0x37, 0xb6, 0x3b, 0xda, 0xa4, 0x99, 0xcd, 0xe0, 0xb6, 0x9f, 0x06, 0x44, 0x16, 0x05,
|
0xb6, 0x7a, 0x63, 0xbb, 0xa3, 0x4d, 0x9a, 0xd9, 0x0c, 0x6e, 0xfb, 0x69, 0x40, 0x64, 0x51, 0x40,
|
||||||
0x94, 0xac, 0xff, 0x80, 0x30, 0xc7, 0x75, 0x98, 0x83, 0x10, 0xcc, 0x8b, 0x73, 0x20, 0x17, 0x16,
|
0xc9, 0xfa, 0x0f, 0x48, 0xec, 0xb8, 0x4e, 0xec, 0x20, 0x04, 0xf3, 0xfc, 0x1c, 0x88, 0x85, 0xf9,
|
||||||
0xdf, 0xa8, 0x0d, 0x95, 0xa9, 0xda, 0x60, 0x1d, 0xf3, 0x4f, 0xf4, 0x1a, 0xd4, 0x35, 0x3f, 0x75,
|
0x37, 0x6a, 0x43, 0x65, 0x2a, 0x37, 0x58, 0xc7, 0xec, 0x13, 0xbd, 0x06, 0x75, 0xcd, 0x4f, 0x1e,
|
||||||
0x18, 0x12, 0x00, 0x77, 0x4a, 0x87, 0x31, 0x32, 0x09, 0x99, 0x50, 0x76, 0x13, 0xc7, 0x43, 0xeb,
|
0x86, 0x04, 0xc0, 0x9c, 0xd2, 0x89, 0x63, 0x32, 0x09, 0x63, 0xae, 0xec, 0x26, 0x56, 0x43, 0xeb,
|
||||||
0x2f, 0xf3, 0xd0, 0xce, 0x6d, 0xfa, 0x16, 0xd4, 0x26, 0x6a, 0x79, 0xb1, 0x6c, 0x63, 0x7b, 0x33,
|
0xaf, 0xf3, 0xd0, 0xce, 0x6d, 0xfa, 0x16, 0xd4, 0x26, 0x72, 0x79, 0xbe, 0x6c, 0x63, 0x7b, 0x23,
|
||||||
0xf1, 0xcc, 0x9c, 0x84, 0x58, 0x23, 0x73, 0xc3, 0x73, 0x95, 0x1a, 0xe7, 0x56, 0x8f, 0xb9, 0x26,
|
0xf1, 0xcc, 0x9c, 0x84, 0x58, 0x23, 0x33, 0xc3, 0x33, 0x95, 0x1a, 0xe7, 0x56, 0x8f, 0x99, 0x26,
|
||||||
0xc7, 0xc1, 0xc8, 0x76, 0x3d, 0x4a, 0x86, 0x2c, 0xa0, 0xc7, 0x4a, 0xca, 0xa5, 0x71, 0x30, 0xda,
|
0xc7, 0xc1, 0xc8, 0x76, 0x3d, 0x4a, 0x86, 0x71, 0x40, 0x8f, 0xa5, 0x94, 0x4b, 0xe3, 0x60, 0xb4,
|
||||||
0x8d, 0x61, 0xe8, 0x26, 0x80, 0xeb, 0x47, 0xf6, 0x50, 0xc8, 0x21, 0x64, 0x6d, 0x6c, 0x23, 0xbd,
|
0xab, 0x60, 0xe8, 0x26, 0x80, 0xeb, 0x47, 0xf6, 0x90, 0xcb, 0xc1, 0x65, 0x6d, 0x6c, 0x23, 0xbd,
|
||||||
0xb6, 0x3e, 0x9b, 0xb8, 0xee, 0xfa, 0x91, 0x12, 0xf6, 0x03, 0x68, 0x72, 0x5f, 0xb7, 0x27, 0xf2,
|
0xb6, 0x3e, 0x9b, 0xb8, 0xee, 0xfa, 0x91, 0x14, 0xf6, 0x03, 0x68, 0x32, 0x5f, 0xb7, 0x27, 0xe2,
|
||||||
0x58, 0x45, 0x9d, 0x85, 0xad, 0xca, 0xd5, 0xc6, 0xf6, 0x9a, 0x21, 0xb1, 0x3e, 0x73, 0x78, 0x29,
|
0x58, 0x45, 0x9d, 0x85, 0xcd, 0xca, 0xb5, 0xc6, 0xf6, 0xaa, 0x21, 0xb1, 0x3e, 0x73, 0x78, 0x29,
|
||||||
0x4c, 0x06, 0x11, 0xba, 0x03, 0x55, 0xe1, 0x6b, 0x51, 0xa7, 0x2a, 0x68, 0xae, 0x14, 0xec, 0x52,
|
0x4c, 0x06, 0x11, 0xba, 0x03, 0x55, 0xee, 0x6b, 0x51, 0xa7, 0xca, 0x69, 0xae, 0x16, 0xec, 0x52,
|
||||||
0xae, 0x72, 0xe3, 0xbe, 0xc0, 0xdb, 0xf3, 0x19, 0x3d, 0xc6, 0x8a, 0x08, 0xdd, 0x87, 0x86, 0xe3,
|
0xac, 0xb2, 0x75, 0x9f, 0xe3, 0xed, 0xf9, 0x31, 0x3d, 0xc6, 0x92, 0x08, 0xdd, 0x87, 0x86, 0xe3,
|
||||||
0xfb, 0x01, 0x73, 0xa4, 0xc1, 0x17, 0x05, 0x8f, 0xeb, 0xb3, 0x79, 0xf4, 0x12, 0x64, 0xc9, 0xc8,
|
0xfb, 0x41, 0xec, 0x08, 0x83, 0x2f, 0x72, 0x1e, 0x37, 0x66, 0xf3, 0xe8, 0x25, 0xc8, 0x82, 0x91,
|
||||||
0x24, 0x47, 0xff, 0x0d, 0x0b, 0xc2, 0xff, 0x3b, 0x35, 0xb1, 0xeb, 0x8b, 0x9a, 0x4f, 0xa1, 0x63,
|
0x49, 0x8e, 0xfe, 0x1b, 0x16, 0xb8, 0xff, 0x77, 0x6a, 0x7c, 0xd7, 0x97, 0x34, 0x9f, 0x42, 0xc7,
|
||||||
0x62, 0x89, 0xdc, 0xfd, 0x00, 0x1a, 0x86, 0x68, 0xdc, 0x31, 0x9e, 0x93, 0x63, 0xe5, 0x2b, 0xfc,
|
0xc4, 0x02, 0xb9, 0xfb, 0x01, 0x34, 0x0c, 0xd1, 0x98, 0x63, 0x3c, 0x27, 0xc7, 0xd2, 0x57, 0xd8,
|
||||||
0x13, 0xad, 0xc1, 0xc2, 0x91, 0x33, 0x9e, 0xc6, 0xf6, 0x90, 0x83, 0xdb, 0xe5, 0xff, 0x2d, 0x75,
|
0x27, 0x5a, 0x85, 0x85, 0x23, 0x67, 0x3c, 0x55, 0xf6, 0x10, 0x83, 0xdb, 0xe5, 0xff, 0x2d, 0x75,
|
||||||
0xef, 0x42, 0x3b, 0x2b, 0xd1, 0x59, 0xe8, 0xad, 0x7d, 0x58, 0xc3, 0x53, 0x3f, 0x11, 0x2c, 0xbe,
|
0xef, 0x42, 0x3b, 0x2b, 0xd1, 0x59, 0xe8, 0xad, 0x7d, 0x58, 0xc5, 0x53, 0x3f, 0x11, 0x4c, 0x5d,
|
||||||
0x08, 0x6e, 0x42, 0x55, 0xd9, 0x4f, 0xfa, 0xce, 0xf9, 0x99, 0x1a, 0xc1, 0x0a, 0xd1, 0xba, 0x03,
|
0x04, 0x37, 0xa1, 0x2a, 0xed, 0x27, 0x7c, 0xe7, 0xc2, 0x4c, 0x8d, 0x60, 0x89, 0x68, 0xdd, 0x81,
|
||||||
0xe7, 0x32, 0xac, 0xd4, 0x35, 0xf1, 0x06, 0xb4, 0xc2, 0xc0, 0xb5, 0x23, 0x09, 0xb6, 0x3d, 0x37,
|
0xf3, 0x19, 0x56, 0xf2, 0x9a, 0x78, 0x03, 0x5a, 0x61, 0xe0, 0xda, 0x91, 0x00, 0xdb, 0x9e, 0xab,
|
||||||
0x3e, 0x7f, 0xa1, 0xc6, 0xdd, 0x77, 0x39, 0xf9, 0x80, 0x05, 0x61, 0x5e, 0x94, 0xd3, 0x91, 0x77,
|
0xce, 0x5f, 0xa8, 0x71, 0xf7, 0x5d, 0x46, 0x3e, 0x88, 0x83, 0x30, 0x2f, 0xca, 0xe9, 0xc8, 0x3b,
|
||||||
0x60, 0x3d, 0x4b, 0x2e, 0x97, 0xb7, 0x3e, 0x86, 0x0d, 0x4c, 0x26, 0xc1, 0x11, 0x79, 0x59, 0xd6,
|
0xb0, 0x96, 0x25, 0x17, 0xcb, 0x5b, 0x1f, 0xc3, 0x3a, 0x26, 0x93, 0xe0, 0x88, 0xbc, 0x2c, 0xeb,
|
||||||
0x5d, 0xe8, 0xe4, 0x19, 0x24, 0xcc, 0x13, 0xe8, 0x80, 0x39, 0x6c, 0x1a, 0x9d, 0x8d, 0xf9, 0x35,
|
0x2e, 0x74, 0xf2, 0x0c, 0x12, 0xe6, 0x09, 0x74, 0x10, 0x3b, 0xf1, 0x34, 0x3a, 0x1b, 0xf3, 0xeb,
|
||||||
0x93, 0x81, 0x0a, 0x80, 0x92, 0x0f, 0x6a, 0x41, 0xd9, 0x0b, 0x15, 0x51, 0xd9, 0x0b, 0xad, 0xaf,
|
0x26, 0x03, 0x19, 0x00, 0x05, 0x1f, 0xd4, 0x82, 0xb2, 0x17, 0x4a, 0xa2, 0xb2, 0x17, 0x5a, 0x5f,
|
||||||
0xa1, 0xde, 0x37, 0xa3, 0x81, 0x19, 0x41, 0xeb, 0x38, 0x1e, 0xa2, 0xed, 0xe4, 0xf2, 0xfa, 0xa1,
|
0x43, 0xbd, 0x6f, 0x46, 0x03, 0x33, 0x82, 0xd6, 0xb1, 0x1a, 0xa2, 0xed, 0xe4, 0xf2, 0xfa, 0xa1,
|
||||||
0xf0, 0xa5, 0xaf, 0xb5, 0x7b, 0xb9, 0xd0, 0xa9, 0x64, 0xd8, 0x06, 0xd0, 0x11, 0x28, 0x52, 0xbe,
|
0xf0, 0xa5, 0xaf, 0xb5, 0x7b, 0xb9, 0xd0, 0x29, 0x65, 0xd8, 0x06, 0xd0, 0x11, 0x28, 0x92, 0xbe,
|
||||||
0x80, 0xf2, 0xfc, 0xb0, 0x81, 0x65, 0xfd, 0x21, 0x15, 0x8e, 0x8c, 0xcd, 0xb8, 0x7a, 0x33, 0x6e,
|
0x80, 0xf2, 0xfc, 0xb0, 0x81, 0x65, 0xfd, 0x21, 0x15, 0x8e, 0x8c, 0xcd, 0xb8, 0x7a, 0x33, 0x6e,
|
||||||
0x2a, 0x3c, 0x95, 0xcf, 0x12, 0x9e, 0x6e, 0xc0, 0x42, 0xc4, 0x1c, 0x26, 0x03, 0x64, 0xcb, 0xd8,
|
0x2a, 0x3c, 0x95, 0xcf, 0x12, 0x9e, 0xb6, 0x60, 0x21, 0x8a, 0x9d, 0x58, 0x04, 0xc8, 0x96, 0xb1,
|
||||||
0x5c, 0x7a, 0x49, 0x82, 0x25, 0x1a, 0xba, 0x00, 0x30, 0xa4, 0xc4, 0x61, 0xc4, 0xb5, 0x1d, 0x19,
|
0xb9, 0xf4, 0x92, 0x04, 0x0b, 0x34, 0x74, 0x11, 0x60, 0x48, 0x89, 0x13, 0x13, 0xd7, 0x76, 0x44,
|
||||||
0x39, 0x2b, 0xb8, 0xae, 0x20, 0x3d, 0x86, 0x6e, 0x27, 0x7a, 0x5c, 0x10, 0x62, 0x6c, 0x15, 0x30,
|
0xe4, 0xac, 0xe0, 0xba, 0x84, 0xf4, 0x62, 0x74, 0x3b, 0xd1, 0xe3, 0x02, 0x17, 0x63, 0xb3, 0x80,
|
||||||
0x4c, 0xd9, 0x25, 0xd1, 0xb4, 0x3e, 0xed, 0xd5, 0x93, 0x4f, 0xbb, 0xa2, 0x93, 0xc8, 0x46, 0xc0,
|
0x61, 0xca, 0x2e, 0x89, 0xa6, 0xf5, 0x69, 0xaf, 0x9e, 0x7c, 0xda, 0x25, 0x9d, 0x40, 0x36, 0x02,
|
||||||
0x5a, 0x9c, 0x19, 0xb0, 0x24, 0xc5, 0x69, 0x02, 0x56, 0x6d, 0x66, 0xc0, 0x52, 0x3c, 0x4e, 0x0c,
|
0xd6, 0xe2, 0xcc, 0x80, 0x25, 0x28, 0x4e, 0x13, 0xb0, 0x6a, 0x33, 0x03, 0x96, 0xe4, 0x71, 0x62,
|
||||||
0x58, 0x3f, 0x65, 0xe8, 0x79, 0x00, 0x9d, 0xfc, 0xd1, 0x51, 0x21, 0xe3, 0x26, 0x54, 0x23, 0x01,
|
0xc0, 0xfa, 0x29, 0x43, 0xcf, 0x03, 0xe8, 0xe4, 0x8f, 0x8e, 0x0c, 0x19, 0x37, 0xa1, 0x1a, 0x71,
|
||||||
0x39, 0x21, 0xfc, 0x28, 0x12, 0x85, 0x68, 0xfd, 0xbd, 0x64, 0x7a, 0xdd, 0x67, 0xde, 0x98, 0x11,
|
0xc8, 0x09, 0xe1, 0x47, 0x92, 0x48, 0x44, 0xeb, 0x1f, 0x25, 0xd3, 0xeb, 0x3e, 0xf3, 0xc6, 0x31,
|
||||||
0x9a, 0xf3, 0x3a, 0xed, 0x3c, 0xe5, 0xd3, 0x39, 0xcf, 0x00, 0x5a, 0x42, 0xed, 0x76, 0x44, 0xc6,
|
0xa1, 0x39, 0xaf, 0xd3, 0xce, 0x53, 0x3e, 0x9d, 0xf3, 0x0c, 0xa0, 0xc5, 0xd5, 0x6e, 0x47, 0x64,
|
||||||
0xe2, 0x76, 0x13, 0xf9, 0x60, 0x63, 0xfb, 0x9d, 0x02, 0x42, 0xb9, 0xa4, 0xb4, 0xd9, 0x40, 0xa1,
|
0xcc, 0x6f, 0x37, 0x9e, 0x0f, 0x36, 0xb6, 0xdf, 0x29, 0x20, 0x14, 0x4b, 0x0a, 0x9b, 0x0d, 0x24,
|
||||||
0x4b, 0x8d, 0x37, 0xc7, 0x26, 0xac, 0xfb, 0x09, 0xa0, 0x3c, 0xd2, 0x99, 0x54, 0xf7, 0x05, 0x3f,
|
0xba, 0xd0, 0x78, 0x73, 0x6c, 0xc2, 0xba, 0x9f, 0x00, 0xca, 0x23, 0x9d, 0x49, 0x75, 0x5f, 0xb0,
|
||||||
0xae, 0x3c, 0x1d, 0x2c, 0x08, 0xdb, 0x4f, 0x85, 0x18, 0x27, 0xe8, 0x4d, 0xca, 0x89, 0x15, 0xa2,
|
0xe3, 0xca, 0xd2, 0xc1, 0x82, 0xb0, 0xfd, 0x94, 0x8b, 0x71, 0x82, 0xde, 0x84, 0x9c, 0x58, 0x22,
|
||||||
0xf5, 0xbb, 0x0a, 0x40, 0x32, 0xf9, 0xca, 0x9e, 0xd3, 0x5b, 0xfa, 0xd4, 0xc8, 0xd4, 0xe0, 0x52,
|
0x5a, 0xbf, 0xab, 0x00, 0x24, 0x93, 0xaf, 0xec, 0x39, 0xbd, 0xa5, 0x4f, 0x8d, 0x48, 0x0d, 0x2e,
|
||||||
0x01, 0xbf, 0xc2, 0xf3, 0xf2, 0x59, 0xfa, 0xbc, 0xc8, 0x24, 0xe1, 0x8d, 0x22, 0xea, 0x57, 0xf6,
|
0x17, 0xf0, 0x2b, 0x3c, 0x2f, 0x9f, 0xa5, 0xcf, 0x8b, 0x48, 0x12, 0xde, 0x28, 0xa2, 0x7e, 0x65,
|
||||||
0xa4, 0xec, 0xc0, 0x7a, 0xd6, 0xdc, 0xea, 0x9c, 0x5c, 0x83, 0x05, 0x8f, 0x91, 0x89, 0x2c, 0x6e,
|
0x4f, 0xca, 0x0e, 0xac, 0x65, 0xcd, 0x2d, 0xcf, 0xc9, 0x75, 0x58, 0xf0, 0x62, 0x32, 0x11, 0xc5,
|
||||||
0x1a, 0xdb, 0xab, 0x05, 0xdb, 0xc2, 0x12, 0xc3, 0xba, 0x0c, 0xf5, 0xfd, 0x89, 0x33, 0x22, 0x83,
|
0x4d, 0x63, 0xfb, 0x5c, 0xc1, 0xb6, 0xb0, 0xc0, 0xb0, 0xae, 0x40, 0x7d, 0x7f, 0xe2, 0x8c, 0xc8,
|
||||||
0x90, 0x0c, 0xf9, 0x5a, 0x1e, 0x1f, 0xa8, 0xf5, 0xe5, 0xc0, 0xda, 0x86, 0xda, 0x3d, 0x72, 0xfc,
|
0x20, 0x24, 0x43, 0xb6, 0x96, 0xc7, 0x06, 0x72, 0x7d, 0x31, 0xb0, 0xb6, 0xa1, 0x76, 0x8f, 0x1c,
|
||||||
0x25, 0x5f, 0xf7, 0xb4, 0xf2, 0x59, 0x7f, 0x2d, 0xc1, 0x86, 0x08, 0x77, 0x3b, 0x71, 0x69, 0x81,
|
0x7f, 0xc9, 0xd6, 0x3d, 0xad, 0x7c, 0xd6, 0xdf, 0x4a, 0xb0, 0xce, 0xc3, 0xdd, 0x8e, 0x2a, 0x2d,
|
||||||
0x49, 0x14, 0x4c, 0xe9, 0x90, 0x44, 0xc2, 0xa4, 0xe1, 0xd4, 0x0e, 0x09, 0xf5, 0x02, 0xe9, 0x53,
|
0x30, 0x89, 0x82, 0x29, 0x1d, 0x92, 0x88, 0x9b, 0x34, 0x9c, 0xda, 0x21, 0xa1, 0x5e, 0x20, 0x7c,
|
||||||
0xdc, 0xa4, 0xe1, 0xf4, 0x40, 0x00, 0x78, 0xf9, 0xc1, 0xa7, 0xbf, 0x9d, 0x06, 0xca, 0xb7, 0x2a,
|
0x8a, 0x99, 0x34, 0x9c, 0x1e, 0x70, 0x00, 0x2b, 0x3f, 0xd8, 0xf4, 0xb7, 0xd3, 0x40, 0xfa, 0x56,
|
||||||
0xb8, 0x36, 0x0c, 0xa7, 0xff, 0xcf, 0xc7, 0x31, 0x6d, 0x74, 0xe8, 0x50, 0x12, 0x09, 0x1f, 0x92,
|
0x05, 0xd7, 0x86, 0xe1, 0xf4, 0xff, 0xd9, 0x58, 0xd1, 0x46, 0x87, 0x0e, 0x25, 0x11, 0xf7, 0x21,
|
||||||
0xb4, 0x03, 0x01, 0x40, 0x37, 0xe1, 0xdc, 0x84, 0x4c, 0x02, 0x7a, 0x6c, 0x8f, 0xbd, 0x89, 0xc7,
|
0x41, 0x3b, 0xe0, 0x00, 0x74, 0x13, 0xce, 0x4f, 0xc8, 0x24, 0xa0, 0xc7, 0xf6, 0xd8, 0x9b, 0x78,
|
||||||
0x6c, 0xcf, 0xb7, 0x9f, 0x1c, 0x33, 0x12, 0x29, 0xc7, 0x41, 0x72, 0xf2, 0x3e, 0x9f, 0xdb, 0xf7,
|
0xb1, 0xed, 0xf9, 0xf6, 0x93, 0xe3, 0x98, 0x44, 0xd2, 0x71, 0x90, 0x98, 0xbc, 0xcf, 0xe6, 0xf6,
|
||||||
0x3f, 0xe5, 0x33, 0xc8, 0x82, 0x66, 0x10, 0x4c, 0xec, 0x68, 0x18, 0x50, 0x62, 0x3b, 0xee, 0x33,
|
0xfd, 0x4f, 0xd9, 0x0c, 0xb2, 0xa0, 0x19, 0x04, 0x13, 0x3b, 0x1a, 0x06, 0x94, 0xd8, 0x8e, 0xfb,
|
||||||
0x11, 0xef, 0x2b, 0xb8, 0x11, 0x04, 0x93, 0x01, 0x87, 0xf5, 0xdc, 0x67, 0x96, 0x03, 0xcd, 0xc1,
|
0x8c, 0xc7, 0xfb, 0x0a, 0x6e, 0x04, 0xc1, 0x64, 0xc0, 0x60, 0x3d, 0xf7, 0x99, 0xe5, 0x40, 0x73,
|
||||||
0x9e, 0xd8, 0x8e, 0xaa, 0x56, 0x10, 0xcc, 0x4f, 0x23, 0x75, 0x9c, 0xea, 0x58, 0x7c, 0x73, 0x18,
|
0xb0, 0xc7, 0xb7, 0x23, 0xab, 0x15, 0x04, 0xf3, 0xd3, 0x48, 0x1e, 0xa7, 0x3a, 0xe6, 0xdf, 0x0c,
|
||||||
0x0d, 0xc6, 0xb1, 0x1e, 0xc4, 0x37, 0x87, 0xb1, 0xe3, 0x30, 0xce, 0xda, 0xc5, 0x37, 0x57, 0xd8,
|
0x46, 0x83, 0xb1, 0xd2, 0x03, 0xff, 0x66, 0xb0, 0xf8, 0x38, 0x54, 0x59, 0x3b, 0xff, 0x66, 0x0a,
|
||||||
0x98, 0x1c, 0xa9, 0xda, 0xa8, 0x8e, 0xe5, 0xc0, 0x72, 0x01, 0x76, 0x9c, 0xd0, 0x79, 0xe2, 0x8d,
|
0x1b, 0x93, 0x23, 0x59, 0x1b, 0xd5, 0xb1, 0x18, 0x58, 0x2e, 0xc0, 0x8e, 0x13, 0x3a, 0x4f, 0xbc,
|
||||||
0x3d, 0x76, 0x8c, 0xae, 0x41, 0xdb, 0x71, 0x5d, 0x7b, 0x18, 0x43, 0x3c, 0x12, 0x17, 0xaa, 0xcb,
|
0xb1, 0x17, 0x1f, 0xa3, 0xeb, 0xd0, 0x76, 0x5c, 0xd7, 0x1e, 0x2a, 0x88, 0x47, 0x54, 0xa1, 0xba,
|
||||||
0x8e, 0xeb, 0xee, 0x18, 0x60, 0xf4, 0x36, 0xac, 0xb8, 0x34, 0x08, 0xd3, 0xb8, 0xb2, 0x72, 0x6d,
|
0xec, 0xb8, 0xee, 0x8e, 0x01, 0x46, 0x6f, 0xc3, 0x8a, 0x4b, 0x83, 0x30, 0x8d, 0x2b, 0x2a, 0xd7,
|
||||||
0xf3, 0x09, 0x13, 0xd9, 0xfa, 0x67, 0x09, 0xd6, 0xd2, 0x66, 0x51, 0x99, 0xf6, 0x5d, 0xa8, 0xd3,
|
0x36, 0x9b, 0x30, 0x91, 0xad, 0x7f, 0x96, 0x60, 0x35, 0x6d, 0x16, 0x99, 0x69, 0xdf, 0x85, 0x3a,
|
||||||
0xd8, 0x40, 0x2a, 0x48, 0x6c, 0xa5, 0xef, 0xad, 0xbc, 0x21, 0x71, 0x42, 0x82, 0x6e, 0xc1, 0x52,
|
0x55, 0x06, 0x92, 0x41, 0x62, 0x33, 0x7d, 0x6f, 0xe5, 0x0d, 0x89, 0x13, 0x12, 0x74, 0x0b, 0x96,
|
||||||
0x46, 0x80, 0x52, 0xca, 0xf1, 0x92, 0xbd, 0xe1, 0x14, 0x22, 0xfa, 0x38, 0xa9, 0x19, 0x93, 0xda,
|
0x32, 0x02, 0x94, 0x52, 0x8e, 0x97, 0xec, 0x0d, 0xa7, 0x10, 0xd1, 0xc7, 0x49, 0xcd, 0x98, 0xd4,
|
||||||
0x9a, 0xd3, 0xae, 0x6b, 0xda, 0x94, 0xea, 0x75, 0x2d, 0xa9, 0x2a, 0x2b, 0xf4, 0xa6, 0x32, 0x45,
|
0xd6, 0x8c, 0x76, 0x4d, 0xd3, 0xa6, 0x54, 0xaf, 0x6b, 0x49, 0x59, 0x59, 0xa1, 0x37, 0xa5, 0x29,
|
||||||
0xb6, 0xa0, 0x10, 0x34, 0x8f, 0x23, 0x42, 0xa5, 0x79, 0xac, 0xaf, 0xa0, 0xae, 0x41, 0x71, 0x91,
|
0xb2, 0x05, 0x05, 0xa7, 0x79, 0x1c, 0x11, 0x2a, 0xcc, 0x63, 0x7d, 0x05, 0x75, 0x0d, 0x52, 0x45,
|
||||||
0x25, 0x7d, 0x4f, 0x14, 0x59, 0x6d, 0xa8, 0x8c, 0x54, 0xd9, 0x55, 0xc1, 0xfc, 0x93, 0x57, 0xb3,
|
0x96, 0xf0, 0x3d, 0x5e, 0x64, 0xb5, 0xa1, 0x32, 0x92, 0x65, 0x57, 0x05, 0xb3, 0x4f, 0x56, 0xcd,
|
||||||
0x8e, 0xeb, 0x7a, 0x7c, 0x15, 0x67, 0x6c, 0x8f, 0x3c, 0x57, 0x56, 0xfd, 0x15, 0xdc, 0x4a, 0xc0,
|
0x3a, 0xae, 0xeb, 0xb1, 0x55, 0x9c, 0xb1, 0x3d, 0xf2, 0x5c, 0x51, 0xf5, 0x57, 0x70, 0x2b, 0x01,
|
||||||
0x9f, 0x7b, 0x6e, 0x64, 0xf5, 0x60, 0x45, 0x2b, 0xe7, 0xc4, 0xd2, 0xce, 0x28, 0xd5, 0xca, 0xe9,
|
0x7f, 0xee, 0xb9, 0x91, 0xd5, 0x83, 0x15, 0xad, 0x9c, 0x13, 0x4b, 0x3b, 0xa3, 0x54, 0x2b, 0xa7,
|
||||||
0x52, 0xcd, 0x87, 0xea, 0x2e, 0x39, 0xf2, 0x86, 0xe4, 0xdf, 0x52, 0xa3, 0x6f, 0x41, 0x23, 0x24,
|
0x4b, 0x35, 0x1f, 0xaa, 0xbb, 0xe4, 0xc8, 0x1b, 0x92, 0x7f, 0x4b, 0x8d, 0xbe, 0x09, 0x8d, 0x90,
|
||||||
0x74, 0xe2, 0x45, 0x91, 0xd6, 0x67, 0x1d, 0x9b, 0x20, 0xeb, 0xf7, 0x55, 0x58, 0xce, 0xba, 0xc0,
|
0xd0, 0x89, 0x17, 0x45, 0x5a, 0x9f, 0x75, 0x6c, 0x82, 0xac, 0xdf, 0x57, 0x61, 0x39, 0xeb, 0x02,
|
||||||
0xfb, 0xb9, 0xca, 0xb0, 0x9b, 0x98, 0x2f, 0xbb, 0x3f, 0x23, 0xa2, 0x5f, 0x8d, 0x83, 0x46, 0x39,
|
0xef, 0xe7, 0x2a, 0xc3, 0x6e, 0x62, 0xbe, 0xec, 0xfe, 0x8c, 0x88, 0x7e, 0x4d, 0x05, 0x8d, 0x72,
|
||||||
0x63, 0x01, 0x1d, 0x57, 0x54, 0x20, 0xe1, 0xfb, 0x1f, 0x06, 0x93, 0x89, 0xe3, 0xbb, 0x71, 0xff,
|
0xc6, 0x02, 0x3a, 0xae, 0xc8, 0x40, 0xc2, 0xf6, 0x3f, 0x0c, 0x26, 0x13, 0xc7, 0x77, 0x55, 0xff,
|
||||||
0x44, 0x0d, 0xb9, 0xb6, 0x1c, 0x3a, 0xe2, 0xc7, 0x94, 0x83, 0xc5, 0x37, 0xba, 0x04, 0x0d, 0x9e,
|
0x44, 0x0e, 0x99, 0xb6, 0x1c, 0x3a, 0x62, 0xc7, 0x94, 0x81, 0xf9, 0x37, 0xba, 0x0c, 0x0d, 0x96,
|
||||||
0x4e, 0x79, 0xbe, 0x28, 0x2c, 0xc5, 0xb1, 0xac, 0x63, 0x50, 0xa0, 0x5d, 0x8f, 0xa2, 0x2b, 0x30,
|
0x4e, 0x79, 0x3e, 0x2f, 0x2c, 0xf9, 0xb1, 0xac, 0x63, 0x90, 0xa0, 0x5d, 0x8f, 0xa2, 0xab, 0x30,
|
||||||
0x4f, 0xfc, 0xa3, 0x38, 0x76, 0x27, 0x0d, 0x96, 0x38, 0x58, 0x61, 0x31, 0x8d, 0xde, 0x84, 0xea,
|
0x4f, 0xfc, 0x23, 0x15, 0xbb, 0x93, 0x06, 0x8b, 0x0a, 0x56, 0x98, 0x4f, 0xa3, 0x37, 0xa1, 0x3a,
|
||||||
0x24, 0x98, 0xfa, 0x2c, 0x4e, 0xac, 0x5a, 0x1a, 0x51, 0x74, 0x45, 0xb0, 0x9a, 0x45, 0xd7, 0x60,
|
0x09, 0xa6, 0x7e, 0xac, 0x12, 0xab, 0x96, 0x46, 0xe4, 0x5d, 0x11, 0x2c, 0x67, 0xd1, 0x75, 0x58,
|
||||||
0xd1, 0x15, 0x36, 0x88, 0xb3, 0xa7, 0xe5, 0xa4, 0x38, 0x15, 0x70, 0x1c, 0xcf, 0xa3, 0x8f, 0xf4,
|
0x74, 0xb9, 0x0d, 0x54, 0xf6, 0xb4, 0x9c, 0x14, 0xa7, 0x1c, 0x8e, 0xd5, 0x3c, 0xfa, 0x48, 0xdf,
|
||||||
0xad, 0x53, 0xcf, 0xdc, 0x1b, 0x19, 0xa5, 0x16, 0x5e, 0x3d, 0xf7, 0xd2, 0x57, 0x0f, 0x08, 0x16,
|
0x3a, 0xf5, 0xcc, 0xbd, 0x91, 0x51, 0x6a, 0xe1, 0xd5, 0x73, 0x2f, 0x7d, 0xf5, 0x00, 0x67, 0x71,
|
||||||
0xd7, 0x66, 0xb2, 0x38, 0xb9, 0xb4, 0xbc, 0x08, 0x10, 0x52, 0xef, 0xc8, 0x1b, 0x93, 0x11, 0x71,
|
0x7d, 0x26, 0x8b, 0x93, 0x4b, 0xcb, 0x4b, 0x00, 0x21, 0xf5, 0x8e, 0xbc, 0x31, 0x19, 0x11, 0xb7,
|
||||||
0x3b, 0x0d, 0xd1, 0xfb, 0x30, 0x20, 0xa2, 0x9f, 0xa6, 0xfa, 0x33, 0x36, 0x0d, 0x02, 0xf6, 0x34,
|
0xd3, 0xe0, 0xbd, 0x0f, 0x03, 0xc2, 0xfb, 0x69, 0xb2, 0x3f, 0x63, 0xd3, 0x20, 0x88, 0x9f, 0x46,
|
||||||
0xea, 0x2c, 0xc9, 0x9e, 0x4c, 0x0c, 0xc6, 0x02, 0x8a, 0xce, 0x43, 0x8d, 0xd7, 0xf0, 0xc2, 0xa1,
|
0x9d, 0x25, 0xd1, 0x93, 0x51, 0x60, 0xcc, 0xa1, 0xe8, 0x02, 0xd4, 0x58, 0x0d, 0xcf, 0x1d, 0xaa,
|
||||||
0x9a, 0xb2, 0x74, 0x18, 0x07, 0x23, 0xe1, 0x4f, 0x6b, 0xfc, 0xce, 0x76, 0x3d, 0xbf, 0xd3, 0x12,
|
0x29, 0x4a, 0x87, 0x71, 0x30, 0xe2, 0xfe, 0xb4, 0xca, 0xee, 0x6c, 0xd7, 0xf3, 0x3b, 0x2d, 0x4e,
|
||||||
0x94, 0x72, 0xc0, 0x43, 0xb1, 0xf8, 0xb0, 0x03, 0x7f, 0x48, 0x3a, 0xcb, 0x62, 0xaa, 0x2e, 0x20,
|
0x29, 0x06, 0x2c, 0x14, 0xf3, 0x0f, 0x3b, 0xf0, 0x87, 0xa4, 0xb3, 0xcc, 0xa7, 0xea, 0x1c, 0xf2,
|
||||||
0x0f, 0xfd, 0xa1, 0xb8, 0x29, 0x18, 0x3b, 0xee, 0xb4, 0x05, 0x9c, 0x7f, 0xa2, 0xff, 0x8a, 0xf3,
|
0xd0, 0x1f, 0xf2, 0x9b, 0x22, 0x8e, 0x8f, 0x3b, 0x6d, 0x0e, 0x67, 0x9f, 0xe8, 0xbf, 0x54, 0x5e,
|
||||||
0xe2, 0x15, 0xe1, 0x28, 0x17, 0x66, 0xc4, 0x97, 0x57, 0xa6, 0x08, 0xfe, 0x53, 0x09, 0xd6, 0x77,
|
0xbc, 0xc2, 0x1d, 0xe5, 0xe2, 0x8c, 0xf8, 0xf2, 0xca, 0x14, 0xc1, 0x7f, 0x2e, 0xc1, 0xda, 0x0e,
|
||||||
0x44, 0xa6, 0x61, 0xc4, 0xbe, 0x33, 0x14, 0x71, 0xe8, 0x3d, 0x5d, 0x2d, 0x67, 0x2b, 0xae, 0xec,
|
0xcf, 0x34, 0x8c, 0xd8, 0x77, 0x86, 0x22, 0x0e, 0xbd, 0xa7, 0xab, 0xe5, 0x6c, 0xc5, 0x95, 0xdd,
|
||||||
0x66, 0x15, 0x1e, 0xfa, 0x04, 0x5a, 0x31, 0x4f, 0x45, 0x59, 0xf9, 0xa1, 0x3a, 0xbb, 0x19, 0x99,
|
0xac, 0xc4, 0x43, 0x9f, 0x40, 0x4b, 0xf1, 0x94, 0x94, 0x95, 0x1f, 0xaa, 0xb3, 0x9b, 0x91, 0x39,
|
||||||
0x43, 0xeb, 0x23, 0xd8, 0xc8, 0xc9, 0xac, 0xb2, 0x82, 0xcb, 0xb0, 0x94, 0x84, 0x16, 0x2d, 0x72,
|
0xb4, 0x3e, 0x82, 0xf5, 0x9c, 0xcc, 0x32, 0x2b, 0xb8, 0x02, 0x4b, 0x49, 0x68, 0xd1, 0x22, 0x37,
|
||||||
0x43, 0xc3, 0xf6, 0x5d, 0xeb, 0x36, 0xaf, 0xb6, 0x1d, 0xca, 0x72, 0x1b, 0x3e, 0x05, 0xad, 0x28,
|
0x34, 0x6c, 0xdf, 0xb5, 0x6e, 0xb3, 0x6a, 0xdb, 0xa1, 0x71, 0x6e, 0xc3, 0xa7, 0xa0, 0xe5, 0xa5,
|
||||||
0xb5, 0xd3, 0xb4, 0xaa, 0x1a, 0x1e, 0xc0, 0x1a, 0x2f, 0xc2, 0x5f, 0x82, 0x29, 0x0f, 0x19, 0x7c,
|
0x76, 0x9a, 0x56, 0x56, 0xc3, 0x03, 0x58, 0x65, 0x45, 0xf8, 0x4b, 0x30, 0x65, 0x21, 0x83, 0x6d,
|
||||||
0xdb, 0xc1, 0x94, 0xa9, 0xd0, 0x1c, 0x0f, 0xad, 0x0d, 0xd9, 0x18, 0xc8, 0xaf, 0xf6, 0x21, 0xac,
|
0x3b, 0x98, 0xc6, 0x32, 0x34, 0xab, 0xa1, 0xb5, 0x2e, 0x1a, 0x03, 0xf9, 0xd5, 0x3e, 0x84, 0x35,
|
||||||
0xcb, 0xba, 0xfc, 0x65, 0x36, 0x71, 0x3e, 0xee, 0x0a, 0xe4, 0xf9, 0xfe, 0xba, 0x6c, 0xc4, 0xcc,
|
0x51, 0x97, 0xbf, 0xcc, 0x26, 0x2e, 0xa8, 0xae, 0x40, 0x9e, 0xef, 0xaf, 0xcb, 0x46, 0xcc, 0x9c,
|
||||||
0x19, 0x85, 0xc4, 0xbb, 0xe9, 0x42, 0x62, 0x23, 0x6f, 0xf0, 0x54, 0x72, 0x9b, 0x77, 0xa3, 0x4a,
|
0x51, 0x48, 0xbc, 0x9b, 0x2e, 0x24, 0xd6, 0xf3, 0x06, 0x4f, 0x25, 0xb7, 0x79, 0x37, 0xaa, 0x14,
|
||||||
0x81, 0x1b, 0xe1, 0x5c, 0xb5, 0x31, 0x2f, 0x42, 0xc6, 0xdb, 0x79, 0xee, 0xff, 0xc1, 0x62, 0x63,
|
0xb8, 0x11, 0xce, 0x55, 0x1b, 0xf3, 0x3c, 0x64, 0xbc, 0x9d, 0xe7, 0xfe, 0x1f, 0x2c, 0x36, 0xf6,
|
||||||
0x5f, 0x16, 0x1b, 0x7a, 0x69, 0xdd, 0xe0, 0x78, 0x2f, 0x53, 0x6c, 0x74, 0x66, 0x89, 0xa9, 0x6b,
|
0x45, 0xb1, 0xa1, 0x97, 0xd6, 0x0d, 0x8e, 0xf7, 0x32, 0xc5, 0x46, 0x67, 0x96, 0x98, 0xba, 0xd6,
|
||||||
0x8d, 0x5f, 0xcd, 0x43, 0x5d, 0xcf, 0xe5, 0x74, 0x9a, 0x57, 0x52, 0xb9, 0x40, 0x49, 0xe6, 0xed,
|
0xf8, 0xd5, 0x3c, 0xd4, 0xf5, 0x5c, 0x4e, 0xa7, 0x79, 0x25, 0x95, 0x0b, 0x94, 0x64, 0xde, 0x5e,
|
||||||
0x55, 0x79, 0x99, 0xdb, 0x6b, 0xfe, 0x87, 0x6e, 0xaf, 0x4d, 0xa8, 0x8b, 0x0f, 0x9b, 0x92, 0xa7,
|
0x95, 0x97, 0xb9, 0xbd, 0xe6, 0x7f, 0xe8, 0xf6, 0xda, 0x80, 0x3a, 0xff, 0xb0, 0x29, 0x79, 0x2a,
|
||||||
0xea, 0x36, 0xaa, 0x09, 0x00, 0x26, 0x4f, 0x13, 0xc3, 0x57, 0x4f, 0x65, 0xf8, 0x74, 0x55, 0xb3,
|
0x6f, 0xa3, 0x1a, 0x07, 0x60, 0xf2, 0x34, 0x31, 0x7c, 0xf5, 0x54, 0x86, 0x4f, 0x57, 0x35, 0x8b,
|
||||||
0x98, 0xad, 0x6a, 0xde, 0xd7, 0xf7, 0x8b, 0xbc, 0x89, 0x2e, 0xe6, 0xd9, 0x15, 0xde, 0x2c, 0x7b,
|
0xd9, 0xaa, 0xe6, 0x7d, 0x7d, 0xbf, 0x88, 0x9b, 0xe8, 0x52, 0x9e, 0x5d, 0xe1, 0xcd, 0xb2, 0x97,
|
||||||
0xe9, 0x9b, 0x45, 0x5e, 0x4e, 0xaf, 0x17, 0x10, 0xbf, 0xb2, 0x35, 0xcd, 0x7d, 0x59, 0xd3, 0x98,
|
0xbe, 0x59, 0xc4, 0xe5, 0xf4, 0x7a, 0x01, 0xf1, 0x2b, 0x5b, 0xd3, 0xdc, 0x17, 0x35, 0x8d, 0xe9,
|
||||||
0x5e, 0xa5, 0xa2, 0xd7, 0x36, 0x80, 0x3e, 0xa8, 0x71, 0x61, 0x83, 0xf2, 0x5b, 0xc3, 0x06, 0x16,
|
0x55, 0x32, 0x7a, 0x6d, 0x03, 0xe8, 0x83, 0xaa, 0x0a, 0x1b, 0x94, 0xdf, 0x1a, 0x36, 0xb0, 0x58,
|
||||||
0x0f, 0x05, 0x29, 0xfd, 0x27, 0x5d, 0xb8, 0x53, 0x84, 0x82, 0x3f, 0x2e, 0x18, 0xe7, 0x7d, 0x46,
|
0x28, 0x48, 0xe9, 0x3f, 0xe9, 0xc2, 0x9d, 0x22, 0x14, 0xfc, 0x69, 0xc1, 0x38, 0xef, 0x33, 0xda,
|
||||||
0xbb, 0xea, 0xfd, 0x5c, 0x19, 0x7c, 0x3a, 0xaf, 0x7b, 0x37, 0x5d, 0x05, 0x9f, 0xcd, 0x5d, 0x72,
|
0x55, 0xef, 0xe7, 0xca, 0xe0, 0xd3, 0x79, 0xdd, 0xbb, 0xe9, 0x2a, 0xf8, 0x6c, 0xee, 0x92, 0x2b,
|
||||||
0x45, 0xb0, 0xb8, 0x89, 0x1d, 0xaa, 0xa6, 0x65, 0xfd, 0x52, 0x57, 0x90, 0x1e, 0xe3, 0x89, 0xd4,
|
0x82, 0xf9, 0x4d, 0xec, 0x50, 0x39, 0x2d, 0xea, 0x97, 0xba, 0x84, 0xf4, 0x62, 0x96, 0x48, 0x3d,
|
||||||
0x53, 0xcf, 0xf7, 0xa2, 0x43, 0x39, 0x5f, 0x15, 0xf3, 0x10, 0x83, 0x7a, 0xe2, 0x5d, 0x89, 0xbc,
|
0xf5, 0x7c, 0x2f, 0x3a, 0x14, 0xf3, 0x55, 0x3e, 0x0f, 0x0a, 0xd4, 0xe3, 0xef, 0x4a, 0xe4, 0x85,
|
||||||
0xf0, 0x98, 0x3d, 0x0c, 0x5c, 0x22, 0x9c, 0x71, 0x01, 0xd7, 0x38, 0x60, 0x27, 0x70, 0x49, 0x72,
|
0x17, 0xdb, 0xc3, 0xc0, 0x25, 0xdc, 0x19, 0x17, 0x70, 0x8d, 0x01, 0x76, 0x02, 0x97, 0x24, 0x07,
|
||||||
0x40, 0x6a, 0x67, 0x3a, 0x20, 0xf5, 0xcc, 0x01, 0x59, 0x87, 0x2a, 0x25, 0x4e, 0x14, 0xf8, 0x1d,
|
0xa4, 0x76, 0xa6, 0x03, 0x52, 0xcf, 0x1c, 0x90, 0x35, 0xa8, 0x52, 0xe2, 0x44, 0x81, 0xdf, 0x01,
|
||||||
0x90, 0xaf, 0x53, 0x72, 0xc4, 0x03, 0xfc, 0x84, 0x44, 0x11, 0x5f, 0xa0, 0x21, 0xb3, 0x0e, 0x35,
|
0xf1, 0x3a, 0x25, 0x46, 0x2c, 0xc0, 0x4f, 0x48, 0x14, 0xb1, 0x05, 0x1a, 0x22, 0xeb, 0x90, 0x43,
|
||||||
0x34, 0x92, 0xac, 0xa5, 0x59, 0x49, 0xd6, 0x09, 0xfd, 0xb0, 0x4c, 0x92, 0xd5, 0x9c, 0x95, 0x64,
|
0x23, 0xc9, 0x5a, 0x9a, 0x95, 0x64, 0x9d, 0xd0, 0x0f, 0xcb, 0x24, 0x59, 0xcd, 0x59, 0x49, 0xd6,
|
||||||
0x9d, 0xa6, 0x1d, 0x66, 0xa4, 0x90, 0xad, 0x93, 0x52, 0xc8, 0x9f, 0xf2, 0xe0, 0xdc, 0x83, 0x8d,
|
0x69, 0xda, 0x61, 0x46, 0x0a, 0xd9, 0x3a, 0x29, 0x85, 0xfc, 0x29, 0x0f, 0xce, 0x3d, 0x58, 0xcf,
|
||||||
0x9c, 0xab, 0xab, 0x93, 0xf3, 0x5e, 0xa6, 0x6b, 0xd6, 0x99, 0xa5, 0x05, 0xdd, 0x34, 0xfb, 0x39,
|
0xb9, 0xba, 0x3c, 0x39, 0xef, 0x65, 0xba, 0x66, 0x9d, 0x59, 0x5a, 0xd0, 0x4d, 0xb3, 0x9f, 0xc3,
|
||||||
0x2c, 0xef, 0xbd, 0x20, 0xc3, 0xc1, 0xb1, 0x3f, 0x3c, 0xc3, 0x5d, 0xdd, 0x86, 0xca, 0x70, 0xe2,
|
0xf2, 0xde, 0x0b, 0x32, 0x1c, 0x1c, 0xfb, 0xc3, 0x33, 0xdc, 0xd5, 0x6d, 0xa8, 0x0c, 0x27, 0xae,
|
||||||
0xaa, 0xda, 0x93, 0x7f, 0x9a, 0xb7, 0x77, 0x25, 0x7d, 0x7b, 0xdb, 0xd0, 0x4e, 0x56, 0x50, 0x72,
|
0xac, 0x3d, 0xd9, 0xa7, 0x79, 0x7b, 0x57, 0xd2, 0xb7, 0xb7, 0x0d, 0xed, 0x64, 0x05, 0x29, 0xe7,
|
||||||
0xae, 0x73, 0x39, 0x5d, 0x8e, 0xcc, 0x99, 0x2f, 0x61, 0x35, 0x52, 0x70, 0x42, 0xa9, 0xd8, 0xb5,
|
0x1a, 0x93, 0xd3, 0x65, 0xc8, 0x8c, 0xf9, 0x12, 0x96, 0x23, 0x09, 0x27, 0x94, 0xf2, 0x5d, 0x0b,
|
||||||
0x84, 0x13, 0x4a, 0xd3, 0x6e, 0x5b, 0x49, 0xbb, 0xad, 0xf5, 0x0c, 0x1a, 0x7c, 0x81, 0x1f, 0x25,
|
0x38, 0xa1, 0x34, 0xed, 0xb6, 0x95, 0xb4, 0xdb, 0x5a, 0xcf, 0xa0, 0xc1, 0x16, 0xf8, 0x51, 0xe2,
|
||||||
0xbe, 0x4a, 0x61, 0x2b, 0x49, 0x0a, 0xab, 0x33, 0xe1, 0x79, 0x23, 0x13, 0xb6, 0xb6, 0x60, 0x49,
|
0xcb, 0x14, 0xb6, 0x92, 0xa4, 0xb0, 0x3a, 0x13, 0x9e, 0x37, 0x32, 0x61, 0x6b, 0x13, 0x96, 0xc4,
|
||||||
0xae, 0xa5, 0x36, 0xc2, 0xab, 0x4b, 0x3a, 0x8e, 0xed, 0x36, 0xa5, 0x63, 0xeb, 0xff, 0xa0, 0xd9,
|
0x5a, 0x72, 0x23, 0xac, 0xba, 0xa4, 0x63, 0x65, 0xb7, 0x29, 0x1d, 0x5b, 0xff, 0x07, 0xcd, 0x5e,
|
||||||
0x63, 0xcc, 0x19, 0x1e, 0x9e, 0x41, 0x1e, 0xbd, 0x56, 0xd9, 0x5c, 0xcb, 0x82, 0x56, 0xcc, 0x69,
|
0x1c, 0x3b, 0xc3, 0xc3, 0x33, 0xc8, 0xa3, 0xd7, 0x2a, 0x9b, 0x6b, 0x59, 0xd0, 0x52, 0x9c, 0x66,
|
||||||
0xe6, 0x6a, 0x7d, 0x40, 0x07, 0x01, 0x65, 0x9f, 0x05, 0xf4, 0x3b, 0x87, 0xba, 0x67, 0xcb, 0x59,
|
0xae, 0xd6, 0x07, 0x74, 0x10, 0xd0, 0xf8, 0xb3, 0x80, 0x7e, 0xe7, 0x50, 0xf7, 0x6c, 0x39, 0x2b,
|
||||||
0x11, 0xcc, 0xab, 0x07, 0xe8, 0xca, 0xd5, 0x05, 0x2c, 0xbe, 0xad, 0xb7, 0x60, 0x35, 0xc5, 0x6f,
|
0x82, 0x79, 0xf9, 0x00, 0x5d, 0xb9, 0xb6, 0x80, 0xf9, 0xb7, 0xf5, 0x16, 0x9c, 0x4b, 0xf1, 0x9b,
|
||||||
0xe6, 0xc2, 0xb7, 0xa0, 0x21, 0xa2, 0x82, 0xca, 0x8e, 0xae, 0x9a, 0xed, 0xa4, 0x93, 0x42, 0x07,
|
0xb9, 0xf0, 0x2d, 0x68, 0xf0, 0xa8, 0x20, 0xb3, 0xa3, 0x6b, 0x66, 0x3b, 0xe9, 0xa4, 0xd0, 0xc1,
|
||||||
0x2f, 0xa1, 0x79, 0xd8, 0x17, 0x70, 0x1d, 0xa3, 0xdf, 0xc9, 0x24, 0x12, 0x6b, 0x69, 0xfa, 0x4c,
|
0x4a, 0x68, 0x16, 0xf6, 0x39, 0x5c, 0xc7, 0xe8, 0x77, 0x32, 0x89, 0xc4, 0x6a, 0x9a, 0x3e, 0x93,
|
||||||
0x12, 0xf1, 0x1c, 0x16, 0x04, 0x38, 0x17, 0xa3, 0x37, 0xa1, 0x4e, 0x49, 0x18, 0xd8, 0xcc, 0x19,
|
0x44, 0x3c, 0x87, 0x05, 0x0e, 0xce, 0xc5, 0xe8, 0x0d, 0xa8, 0x53, 0x12, 0x06, 0x76, 0xec, 0x8c,
|
||||||
0xe9, 0x27, 0x7d, 0x0e, 0x78, 0xe4, 0x8c, 0x22, 0xf1, 0x47, 0x02, 0x9f, 0x74, 0xbd, 0x11, 0x89,
|
0xf4, 0x93, 0x3e, 0x03, 0x3c, 0x72, 0x46, 0x11, 0xff, 0x23, 0x81, 0x4d, 0xba, 0xde, 0x88, 0x44,
|
||||||
0x58, 0xfc, 0xae, 0xdf, 0xe0, 0xb0, 0x5d, 0x09, 0xe2, 0x1a, 0x89, 0xbc, 0x5f, 0xc8, 0x04, 0x61,
|
0xb1, 0x7a, 0xd7, 0x6f, 0x30, 0xd8, 0xae, 0x00, 0x31, 0x8d, 0x44, 0xde, 0x2f, 0x44, 0x82, 0x30,
|
||||||
0x1e, 0x8b, 0x6f, 0xeb, 0x23, 0x40, 0xa6, 0xbc, 0x4a, 0x21, 0x6f, 0x42, 0x55, 0x6c, 0x27, 0xbe,
|
0x8f, 0xf9, 0xb7, 0xf5, 0x11, 0x20, 0x53, 0x5e, 0xa9, 0x90, 0x37, 0xa1, 0xca, 0xb7, 0xa3, 0xae,
|
||||||
0x9e, 0x5a, 0x69, 0x81, 0xb1, 0x9a, 0xb5, 0xee, 0x02, 0x92, 0x1a, 0x48, 0x5d, 0x49, 0xa7, 0xd7,
|
0xa7, 0x56, 0x5a, 0x60, 0x2c, 0x67, 0xad, 0xbb, 0x80, 0x84, 0x06, 0x52, 0x57, 0xd2, 0xe9, 0xb5,
|
||||||
0xd6, 0x87, 0xb0, 0x9a, 0xa2, 0xd7, 0x0f, 0x6a, 0x29, 0x06, 0xd9, 0xd5, 0x15, 0xf1, 0xdf, 0x4a,
|
0xf5, 0x21, 0x9c, 0x4b, 0xd1, 0xeb, 0x07, 0xb5, 0x14, 0x83, 0xec, 0xea, 0x92, 0xf8, 0xef, 0x25,
|
||||||
0x00, 0xbd, 0x29, 0x3b, 0x54, 0x55, 0x7f, 0x17, 0x6a, 0xd3, 0x88, 0x50, 0xa3, 0x57, 0xa1, 0xc7,
|
0x80, 0xde, 0x34, 0x3e, 0x94, 0x55, 0x7f, 0x17, 0x6a, 0xd3, 0x88, 0x50, 0xa3, 0x57, 0xa1, 0xc7,
|
||||||
0x7c, 0x2e, 0x74, 0xa2, 0xe8, 0xbb, 0x80, 0xc6, 0x39, 0x97, 0x1e, 0x8b, 0x8a, 0x7d, 0xca, 0x0e,
|
0x6c, 0x2e, 0x74, 0xa2, 0xe8, 0xbb, 0x80, 0xaa, 0x9c, 0x4b, 0x8f, 0x79, 0xc5, 0x3e, 0x8d, 0x0f,
|
||||||
0xe3, 0xce, 0x16, 0xff, 0x46, 0x57, 0xa0, 0x25, 0x7f, 0xa3, 0xb0, 0x1d, 0xd7, 0xa5, 0x24, 0x8a,
|
0x55, 0x67, 0x8b, 0x7d, 0xa3, 0xab, 0xd0, 0x12, 0xbf, 0x51, 0xd8, 0x8e, 0xeb, 0x52, 0x12, 0x45,
|
||||||
0x54, 0x8b, 0xab, 0x29, 0xa1, 0x3d, 0x09, 0xe4, 0x68, 0x9e, 0x4b, 0x7c, 0xe6, 0xb1, 0x63, 0x9b,
|
0xb2, 0xc5, 0xd5, 0x14, 0xd0, 0x9e, 0x00, 0x32, 0x34, 0xcf, 0x25, 0x7e, 0xec, 0xc5, 0xc7, 0x76,
|
||||||
0x05, 0xcf, 0x89, 0xaf, 0xb2, 0xa9, 0x66, 0x0c, 0x7d, 0xc4, 0x81, 0x1c, 0x8d, 0x92, 0x91, 0x17,
|
0x1c, 0x3c, 0x27, 0xbe, 0xcc, 0xa6, 0x9a, 0x0a, 0xfa, 0x88, 0x01, 0x19, 0x1a, 0x25, 0x23, 0x2f,
|
||||||
0x31, 0x1a, 0xa3, 0x55, 0x25, 0x5a, 0x0c, 0x15, 0x68, 0xd6, 0xf7, 0x25, 0x68, 0x1f, 0x4c, 0xc7,
|
0x8a, 0xa9, 0x42, 0xab, 0x0a, 0x34, 0x05, 0xe5, 0x68, 0xd6, 0xf7, 0x25, 0x68, 0x1f, 0x4c, 0xc7,
|
||||||
0x63, 0xb9, 0xc9, 0xb3, 0xea, 0x12, 0xbd, 0xa5, 0xf6, 0x91, 0x6d, 0x58, 0x25, 0x2a, 0x52, 0x9b,
|
0x63, 0xb1, 0xc9, 0xb3, 0xea, 0x12, 0xbd, 0x25, 0xf7, 0x91, 0x6d, 0x58, 0x25, 0x2a, 0x92, 0x9b,
|
||||||
0xfb, 0xf1, 0xa5, 0xd9, 0x2a, 0xac, 0x18, 0x82, 0xaa, 0xaa, 0xe2, 0x2e, 0x20, 0x59, 0x70, 0xbc,
|
0xfb, 0xf1, 0xa5, 0xd9, 0x39, 0x58, 0x31, 0x04, 0x95, 0x55, 0xc5, 0x5d, 0x40, 0xa2, 0xe0, 0x78,
|
||||||
0x9c, 0xfc, 0xd6, 0x39, 0x58, 0x4d, 0xd1, 0x2b, 0xb6, 0xd7, 0xa1, 0xa9, 0x5e, 0xa7, 0x94, 0x9d,
|
0x39, 0xf9, 0xad, 0xf3, 0x70, 0x2e, 0x45, 0x2f, 0xd9, 0xde, 0x80, 0xa6, 0x7c, 0x9d, 0x92, 0x76,
|
||||||
0xcf, 0x43, 0x8d, 0x9f, 0xfe, 0xa1, 0xe7, 0xc6, 0x5d, 0xcb, 0xc5, 0x30, 0x70, 0x77, 0x3c, 0x97,
|
0xbe, 0x00, 0x35, 0x76, 0xfa, 0x87, 0x9e, 0xab, 0xba, 0x96, 0x8b, 0x61, 0xe0, 0xee, 0x78, 0x2e,
|
||||||
0x5a, 0x7d, 0x68, 0x62, 0xc9, 0x5e, 0xe1, 0xde, 0x81, 0x96, 0x7a, 0xcb, 0xb2, 0x53, 0xaf, 0xbd,
|
0xb5, 0xfa, 0xd0, 0xc4, 0x82, 0xbd, 0xc4, 0xbd, 0x03, 0x2d, 0xf9, 0x96, 0x65, 0xa7, 0x5e, 0x7b,
|
||||||
0x49, 0x4b, 0x2e, 0xc5, 0x1b, 0x37, 0x7d, 0x73, 0x68, 0x7d, 0x03, 0xdd, 0xc7, 0xa1, 0xcb, 0xd3,
|
0x93, 0x96, 0x5c, 0x8a, 0x37, 0x6e, 0xfa, 0xe6, 0xd0, 0xfa, 0x06, 0xba, 0x8f, 0x43, 0x97, 0xa5,
|
||||||
0x17, 0x93, 0x6b, 0xbc, 0xb5, 0x3b, 0x10, 0xff, 0xc9, 0x33, 0x8b, 0x79, 0x9a, 0xac, 0x49, 0xcd,
|
0x2f, 0x26, 0x57, 0xb5, 0xb5, 0x3b, 0xa0, 0xfe, 0xe4, 0x99, 0xc5, 0x3c, 0x4d, 0xd6, 0xa4, 0xe6,
|
||||||
0xa1, 0x75, 0x01, 0x36, 0x0b, 0x99, 0xcb, 0x7d, 0x5f, 0x7f, 0x0d, 0x6a, 0xf1, 0xff, 0x35, 0x68,
|
0xd0, 0xba, 0x08, 0x1b, 0x85, 0xcc, 0xe5, 0xbe, 0x43, 0x68, 0x27, 0x13, 0xa2, 0x4b, 0xa7, 0x9b,
|
||||||
0x11, 0x2a, 0x8f, 0x76, 0x0e, 0xda, 0x73, 0xfc, 0xe3, 0xf1, 0xee, 0x41, 0xbb, 0x74, 0xfd, 0x36,
|
0xb0, 0x25, 0xa3, 0x09, 0xbb, 0xa6, 0xef, 0x44, 0x11, 0x5d, 0xe5, 0xc8, 0x48, 0x53, 0x2a, 0xb3,
|
||||||
0x2c, 0x67, 0x9e, 0x19, 0xd0, 0x0a, 0x34, 0x07, 0xbd, 0xfe, 0xee, 0xa7, 0x0f, 0xbf, 0xb2, 0xf1,
|
0xd2, 0x94, 0xf9, 0x54, 0x9a, 0x62, 0x7d, 0xa1, 0xb5, 0x27, 0x73, 0xc4, 0x0f, 0x78, 0xa2, 0x2a,
|
||||||
0x5e, 0x6f, 0xf7, 0xeb, 0xf6, 0x1c, 0x5a, 0x83, 0x76, 0x0c, 0xea, 0x3f, 0x7c, 0x24, 0xa1, 0xa5,
|
0xd6, 0x56, 0x91, 0xe0, 0x42, 0xc1, 0xe6, 0x04, 0x06, 0x36, 0x90, 0xad, 0x65, 0x68, 0xa6, 0x62,
|
||||||
0xeb, 0xcf, 0xa1, 0x95, 0x4e, 0xce, 0xd0, 0x39, 0x58, 0xd9, 0x79, 0xd8, 0x7f, 0xd4, 0xdb, 0xef,
|
0x82, 0xf5, 0x09, 0xb4, 0x32, 0x87, 0x7c, 0x2b, 0x73, 0x99, 0xe7, 0xd4, 0x96, 0xbe, 0xca, 0x6f,
|
||||||
0xef, 0x61, 0x7b, 0x07, 0xef, 0xf5, 0x1e, 0xed, 0xed, 0xb6, 0xe7, 0xd2, 0x60, 0xfc, 0xb8, 0xdf,
|
0xbc, 0x06, 0x35, 0xf5, 0xc3, 0x11, 0x5a, 0x84, 0xca, 0xa3, 0x9d, 0x83, 0xf6, 0x1c, 0xfb, 0x78,
|
||||||
0xdf, 0xef, 0x7f, 0xde, 0x2e, 0x71, 0xae, 0x09, 0x78, 0xef, 0xab, 0x7d, 0x8e, 0x5c, 0x4e, 0x23,
|
0xbc, 0x7b, 0xd0, 0x2e, 0xdd, 0xb8, 0x0d, 0xcb, 0x99, 0x77, 0x17, 0xb4, 0x02, 0xcd, 0x41, 0xaf,
|
||||||
0x3f, 0xee, 0xdf, 0xeb, 0x3f, 0xfc, 0x59, 0xbf, 0x5d, 0xd9, 0xfe, 0x07, 0x40, 0x4b, 0x6d, 0x70,
|
0xbf, 0xfb, 0xe9, 0xc3, 0xaf, 0x6c, 0xbc, 0xd7, 0xdb, 0xfd, 0xba, 0x3d, 0x87, 0x56, 0xa1, 0xad,
|
||||||
0x40, 0xa8, 0x68, 0x0c, 0xde, 0x85, 0xc5, 0xf8, 0xd7, 0xa7, 0x24, 0x5d, 0x4c, 0xff, 0xa7, 0xd5,
|
0x40, 0xfd, 0x87, 0x8f, 0x04, 0xb4, 0x74, 0xe3, 0x39, 0xb4, 0xd2, 0xd9, 0x2a, 0x3a, 0x0f, 0x2b,
|
||||||
0xed, 0xe4, 0x27, 0x94, 0x3f, 0xcc, 0xa1, 0x03, 0x61, 0x65, 0xe3, 0x49, 0xe7, 0x82, 0xa9, 0xf0,
|
0x3b, 0x0f, 0xfb, 0x8f, 0x7a, 0xfb, 0xfd, 0x3d, 0x6c, 0xef, 0xe0, 0xbd, 0xde, 0xa3, 0xbd, 0xdd,
|
||||||
0xdc, 0x9b, 0x51, 0xf7, 0xe2, 0xac, 0x69, 0xcd, 0x71, 0x00, 0xad, 0xf4, 0xdb, 0x3a, 0x4a, 0x68,
|
0xf6, 0x5c, 0x1a, 0x8c, 0x1f, 0xf7, 0xfb, 0xfb, 0xfd, 0xcf, 0xdb, 0x25, 0xc6, 0x35, 0x01, 0xef,
|
||||||
0x0a, 0xdf, 0xec, 0xbb, 0x97, 0x66, 0xce, 0x6b, 0xa6, 0x5f, 0x43, 0x3b, 0xfb, 0xaa, 0x8e, 0x92,
|
0x7d, 0xb5, 0xcf, 0x90, 0xcb, 0x69, 0xe4, 0xc7, 0xfd, 0x7b, 0xfd, 0x87, 0x3f, 0xeb, 0xb7, 0x2b,
|
||||||
0x4e, 0xf4, 0x8c, 0x17, 0xfb, 0xee, 0xe5, 0x13, 0x30, 0x4c, 0xd6, 0xb9, 0xf7, 0xe7, 0xad, 0xd9,
|
0xdb, 0x7f, 0x6c, 0x40, 0x4b, 0x6d, 0x90, 0x50, 0xde, 0x29, 0xbd, 0x0b, 0x8b, 0xea, 0x5f, 0xb0,
|
||||||
0x2f, 0x88, 0x39, 0xd6, 0xb3, 0x9e, 0x25, 0xa5, 0x2a, 0xd2, 0x4f, 0x31, 0xc8, 0x7c, 0xf5, 0x2d,
|
0x24, 0x7f, 0x4e, 0xff, 0xb8, 0xd6, 0xed, 0xe4, 0x27, 0xa4, 0xa3, 0xcc, 0xa1, 0x03, 0x6e, 0x38,
|
||||||
0x78, 0x92, 0x33, 0x54, 0x51, 0xfc, 0x86, 0x63, 0xcd, 0xa1, 0x2f, 0x61, 0x39, 0xd3, 0xca, 0x41,
|
0xe3, 0x8d, 0xeb, 0xa2, 0xa9, 0xca, 0xdc, 0x23, 0x5a, 0xf7, 0xd2, 0xac, 0x69, 0xcd, 0x71, 0xc0,
|
||||||
0x09, 0x55, 0x71, 0x63, 0xaa, 0xbb, 0x35, 0x1b, 0x21, 0x6d, 0x37, 0xb3, 0x51, 0x93, 0xb2, 0x5b,
|
0xac, 0x65, 0xfe, 0x6c, 0x80, 0x12, 0x9a, 0xc2, 0x9f, 0x18, 0xba, 0x97, 0x67, 0xce, 0x6b, 0xa6,
|
||||||
0x41, 0xf7, 0x27, 0x65, 0xb7, 0xc2, 0x0e, 0x8f, 0x70, 0xaf, 0x54, 0x3b, 0xc6, 0x70, 0xaf, 0xa2,
|
0x5f, 0x43, 0x3b, 0xfb, 0x9b, 0x01, 0x4a, 0x5a, 0xf3, 0x33, 0x7e, 0x61, 0xe8, 0x5e, 0x39, 0x01,
|
||||||
0xde, 0x4f, 0xf7, 0xe2, 0xac, 0x69, 0x73, 0xfb, 0x99, 0x56, 0x8c, 0xb1, 0xfd, 0xe2, 0x0e, 0x4f,
|
0xc3, 0x64, 0x9d, 0x7b, 0x90, 0xdf, 0x9c, 0xfd, 0xa4, 0x9a, 0x63, 0x3d, 0xeb, 0x9d, 0x56, 0xa8,
|
||||||
0x77, 0x6b, 0x36, 0x42, 0xd6, 0x56, 0x49, 0x89, 0x99, 0xb1, 0x55, 0xae, 0xa3, 0x91, 0xb1, 0x55,
|
0x22, 0xfd, 0x36, 0x85, 0xcc, 0x67, 0xf0, 0x82, 0x37, 0x4a, 0x43, 0x15, 0xc5, 0x8f, 0x5a, 0xd6,
|
||||||
0xbe, 0x36, 0x55, 0xb6, 0xca, 0xd4, 0x8a, 0x97, 0x66, 0xa6, 0xd9, 0x79, 0x5b, 0x15, 0x67, 0xee,
|
0x1c, 0xfa, 0x12, 0x96, 0x33, 0xbd, 0x2d, 0x94, 0x50, 0x15, 0x77, 0xea, 0xba, 0x9b, 0xb3, 0x11,
|
||||||
0xd6, 0x1c, 0xea, 0x41, 0x2d, 0xce, 0x93, 0x51, 0x72, 0xba, 0x33, 0xc9, 0x79, 0xf7, 0x7c, 0xc1,
|
0xd2, 0x76, 0x33, 0x3b, 0x57, 0x29, 0xbb, 0x15, 0xb4, 0xc3, 0x52, 0x76, 0x2b, 0x6c, 0x79, 0x71,
|
||||||
0x8c, 0x66, 0xf1, 0x3f, 0x30, 0xcf, 0xa1, 0x68, 0x2d, 0x85, 0x14, 0x93, 0x9e, 0xcb, 0x40, 0x35,
|
0xf7, 0x4a, 0xf5, 0xa7, 0x0c, 0xf7, 0x2a, 0x6a, 0x86, 0x75, 0x2f, 0xcd, 0x9a, 0x36, 0xb7, 0x9f,
|
||||||
0xd9, 0x87, 0x50, 0x95, 0x89, 0x26, 0x4a, 0x22, 0x73, 0x2a, 0x87, 0xed, 0x6e, 0xe4, 0xe0, 0x9a,
|
0xe9, 0x4d, 0x19, 0xdb, 0x2f, 0x6e, 0x79, 0x75, 0x37, 0x67, 0x23, 0x64, 0x6d, 0x95, 0xd4, 0xdc,
|
||||||
0xf8, 0x0b, 0xf9, 0x3b, 0xa4, 0xca, 0x18, 0xd1, 0x66, 0xea, 0x87, 0xad, 0x74, 0x5e, 0xda, 0x7d,
|
0x19, 0x5b, 0xe5, 0x5a, 0x3c, 0x19, 0x5b, 0xe5, 0x8b, 0x75, 0x69, 0xab, 0x4c, 0xf1, 0x7c, 0x79,
|
||||||
0xad, 0x78, 0x52, 0xf3, 0x7a, 0x02, 0xab, 0x05, 0x11, 0x1f, 0x25, 0x6d, 0x8d, 0xd9, 0x97, 0x4d,
|
0x66, 0xdd, 0x91, 0xb7, 0x55, 0x71, 0x29, 0x63, 0xcd, 0xa1, 0x1e, 0xd4, 0x54, 0xe1, 0x80, 0x92,
|
||||||
0xf7, 0x8d, 0x93, 0x91, 0xe2, 0x35, 0xb6, 0xff, 0x5c, 0x86, 0x25, 0x79, 0xb5, 0xaa, 0x68, 0xfb,
|
0xd3, 0x9d, 0xa9, 0x56, 0xba, 0x17, 0x0a, 0x66, 0x34, 0x8b, 0xff, 0x81, 0x79, 0x06, 0x45, 0xab,
|
||||||
0x39, 0x40, 0x92, 0xe0, 0xa1, 0x6e, 0xca, 0x01, 0x52, 0x59, 0x6a, 0x77, 0xb3, 0x70, 0xce, 0xd4,
|
0x29, 0x24, 0x45, 0x7a, 0x3e, 0x03, 0xd5, 0x64, 0x1f, 0x42, 0x55, 0x64, 0xde, 0x28, 0x89, 0xb9,
|
||||||
0x84, 0x91, 0xab, 0x19, 0x9a, 0xc8, 0x67, 0x80, 0x86, 0x26, 0x0a, 0xd2, 0x3b, 0x6b, 0x0e, 0xed,
|
0xa9, 0xa4, 0xbe, 0xbb, 0x9e, 0x83, 0x6b, 0xe2, 0x2f, 0xc4, 0xff, 0xa1, 0x32, 0x85, 0x46, 0x1b,
|
||||||
0x42, 0x5d, 0x27, 0x10, 0xc8, 0xc8, 0x3b, 0x32, 0xd9, 0x4f, 0xb7, 0x5b, 0x34, 0x65, 0x4a, 0x64,
|
0xa9, 0x3f, 0xd8, 0xd2, 0x89, 0x7a, 0xf7, 0xb5, 0xe2, 0x49, 0xcd, 0xeb, 0x09, 0x9c, 0x2b, 0xb8,
|
||||||
0x64, 0x0c, 0x86, 0x44, 0xf9, 0x3c, 0xc4, 0x90, 0xa8, 0x28, 0xc9, 0x98, 0xfb, 0x57, 0x00, 0x00,
|
0x02, 0x51, 0xd2, 0xe7, 0x99, 0x7d, 0xfb, 0x76, 0xdf, 0x38, 0x19, 0xc9, 0xdc, 0xac, 0xb4, 0xda,
|
||||||
0x00, 0xff, 0xff, 0xc4, 0xce, 0xc1, 0x50, 0x3f, 0x2c, 0x00, 0x00,
|
0x9a, 0xe9, 0xea, 0x86, 0xb1, 0xd6, 0x73, 0x70, 0x45, 0xbc, 0xfd, 0x97, 0x32, 0x2c, 0x89, 0x44,
|
||||||
|
0x45, 0x86, 0xea, 0xcf, 0x01, 0x92, 0x74, 0x19, 0x75, 0x53, 0xde, 0x93, 0xca, 0xf9, 0xbb, 0x1b,
|
||||||
|
0x85, 0x73, 0xa6, 0x1a, 0x8d, 0xcc, 0xd7, 0x50, 0x63, 0x3e, 0x9f, 0x36, 0xd4, 0x58, 0x90, 0x2c,
|
||||||
|
0x5b, 0x73, 0x68, 0x17, 0xea, 0x3a, 0x1d, 0x43, 0x46, 0x16, 0x97, 0xc9, 0x25, 0xbb, 0xdd, 0xa2,
|
||||||
|
0x29, 0x53, 0x22, 0x23, 0xff, 0x32, 0x24, 0xca, 0x67, 0x75, 0x86, 0x44, 0x45, 0x29, 0xdb, 0xdc,
|
||||||
|
0xbf, 0x02, 0x00, 0x00, 0xff, 0xff, 0x1d, 0x33, 0x75, 0xd6, 0x8d, 0x2d, 0x00, 0x00,
|
||||||
}
|
}
|
||||||
|
@ -60,6 +60,9 @@ service RuntimeService {
|
|||||||
|
|
||||||
// UpdateRuntimeConfig updates the runtime configuration based on request
|
// UpdateRuntimeConfig updates the runtime configuration based on request
|
||||||
rpc UpdateRuntimeConfig(UpdateRuntimeConfigRequest) returns (UpdateRuntimeConfigResponse) {}
|
rpc UpdateRuntimeConfig(UpdateRuntimeConfigRequest) returns (UpdateRuntimeConfigResponse) {}
|
||||||
|
|
||||||
|
// Status returns the status of the runtime.
|
||||||
|
rpc Status(StatusRequest) returns (StatusResponse) {}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Image service defines the public APIs for managing images
|
// Image service defines the public APIs for managing images
|
||||||
@ -796,3 +799,40 @@ message UpdateRuntimeConfigRequest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
message UpdateRuntimeConfigResponse {}
|
message UpdateRuntimeConfigResponse {}
|
||||||
|
|
||||||
|
// RuntimeCondition contains condition information for the runtime.
|
||||||
|
// There are 2 kinds of runtime conditions:
|
||||||
|
// 1. Required condtitions: Conditions are required for kubelet to work
|
||||||
|
// properly. If any required condition is unmet, the node will be not ready.
|
||||||
|
// The required conditions include:
|
||||||
|
// * RuntimeReady: RuntimeReady means the runtime is up and ready to accept
|
||||||
|
// basic containers e.g. container only needs host network.
|
||||||
|
// * NetworkReady: NetworkReady means the runtime network is up and ready to
|
||||||
|
// accept containers which require container network.
|
||||||
|
// 2. Optional conditions: Conditions are informative to the user, but kubelet
|
||||||
|
// will not rely on. Since condition type is an arbitrary string, all conditions
|
||||||
|
// not required are optional. These conditions will be exposed to users to help
|
||||||
|
// them understand the status of the system.
|
||||||
|
message RuntimeCondition {
|
||||||
|
// Type of runtime condition.
|
||||||
|
optional string type = 1;
|
||||||
|
// Status of the condition, one of true/false.
|
||||||
|
optional bool status = 2;
|
||||||
|
// Reason is brief reason for the condition's last transition.
|
||||||
|
optional string reason = 3;
|
||||||
|
// Message is human readable message indicating details about last transition.
|
||||||
|
optional string message = 4;
|
||||||
|
}
|
||||||
|
|
||||||
|
// RuntimeStatus is information about the current status of the runtime.
|
||||||
|
message RuntimeStatus {
|
||||||
|
// Conditions is an array of current observed runtime conditions.
|
||||||
|
repeated RuntimeCondition conditions = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
message StatusRequest {}
|
||||||
|
|
||||||
|
message StatusResponse {
|
||||||
|
// The status of the Runtime.
|
||||||
|
optional RuntimeStatus status = 1;
|
||||||
|
}
|
||||||
|
27
pkg/kubelet/api/v1alpha1/runtime/constants.go
Normal file
27
pkg/kubelet/api/v1alpha1/runtime/constants.go
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2016 The Kubernetes Authors.
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package runtime
|
||||||
|
|
||||||
|
// This file contains all constants defined in CRI.
|
||||||
|
|
||||||
|
// Required runtime condition type.
|
||||||
|
const (
|
||||||
|
// RuntimeReady means the runtime is up and ready to accept basic containers.
|
||||||
|
RuntimeReady = "RuntimeReady"
|
||||||
|
// NetworkReady means the runtime network is up and ready to accept containers which require network.
|
||||||
|
NetworkReady = "NetworkReady"
|
||||||
|
)
|
@ -70,8 +70,9 @@ type Runtime interface {
|
|||||||
// This may be different from the runtime engine's version.
|
// This may be different from the runtime engine's version.
|
||||||
// TODO(random-liu): We should fold this into Version()
|
// TODO(random-liu): We should fold this into Version()
|
||||||
APIVersion() (Version, error)
|
APIVersion() (Version, error)
|
||||||
// Status returns error if the runtime is unhealthy; nil otherwise.
|
// Status returns the status of the runtime. An error is returned if the Status
|
||||||
Status() error
|
// function itself fails, nil otherwise.
|
||||||
|
Status() (*RuntimeStatus, error)
|
||||||
// GetPods returns a list of containers grouped by pods. The boolean parameter
|
// GetPods returns a list of containers grouped by pods. The boolean parameter
|
||||||
// specifies whether the runtime returns all containers including those already
|
// specifies whether the runtime returns all containers including those already
|
||||||
// exited and dead containers (used for garbage collection).
|
// exited and dead containers (used for garbage collection).
|
||||||
@ -446,6 +447,59 @@ type VolumeInfo struct {
|
|||||||
|
|
||||||
type VolumeMap map[string]VolumeInfo
|
type VolumeMap map[string]VolumeInfo
|
||||||
|
|
||||||
|
// RuntimeConditionType is the types of required runtime conditions.
|
||||||
|
type RuntimeConditionType string
|
||||||
|
|
||||||
|
const (
|
||||||
|
// RuntimeReady means the runtime is up and ready to accept basic containers.
|
||||||
|
RuntimeReady RuntimeConditionType = "RuntimeReady"
|
||||||
|
// NetworkReady means the runtime network is up and ready to accept containers which require network.
|
||||||
|
NetworkReady RuntimeConditionType = "NetworkReady"
|
||||||
|
)
|
||||||
|
|
||||||
|
// RuntimeStatus contains the status of the runtime.
|
||||||
|
type RuntimeStatus struct {
|
||||||
|
// Conditions is an array of current observed runtime conditions.
|
||||||
|
Conditions []RuntimeCondition
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetRuntimeCondition gets a specified runtime condition from the runtime status.
|
||||||
|
func (r *RuntimeStatus) GetRuntimeCondition(t RuntimeConditionType) *RuntimeCondition {
|
||||||
|
for i := range r.Conditions {
|
||||||
|
c := &r.Conditions[i]
|
||||||
|
if c.Type == t {
|
||||||
|
return c
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// String formats the runtime status into human readable string.
|
||||||
|
func (s *RuntimeStatus) String() string {
|
||||||
|
var ss []string
|
||||||
|
for _, c := range s.Conditions {
|
||||||
|
ss = append(ss, c.String())
|
||||||
|
}
|
||||||
|
return fmt.Sprintf("Runtime Conditions: %s", strings.Join(ss, ", "))
|
||||||
|
}
|
||||||
|
|
||||||
|
// RuntimeCondition contains condition information for the runtime.
|
||||||
|
type RuntimeCondition struct {
|
||||||
|
// Type of runtime condition.
|
||||||
|
Type RuntimeConditionType
|
||||||
|
// Status of the condition, one of true/false.
|
||||||
|
Status bool
|
||||||
|
// Reason is brief reason for the condition's last transition.
|
||||||
|
Reason string
|
||||||
|
// Message is human readable message indicating details about last transition.
|
||||||
|
Message string
|
||||||
|
}
|
||||||
|
|
||||||
|
// String formats the runtime condition into human readable string.
|
||||||
|
func (c *RuntimeCondition) String() string {
|
||||||
|
return fmt.Sprintf("%s=%t reason:%s message:%s", c.Type, c.Status, c.Reason, c.Message)
|
||||||
|
}
|
||||||
|
|
||||||
type Pods []*Pod
|
type Pods []*Pod
|
||||||
|
|
||||||
// FindPodByID finds and returns a pod in the pod list by UID. It will return an empty pod
|
// FindPodByID finds and returns a pod in the pod list by UID. It will return an empty pod
|
||||||
|
@ -50,6 +50,7 @@ type FakeRuntime struct {
|
|||||||
KilledPods []string
|
KilledPods []string
|
||||||
StartedContainers []string
|
StartedContainers []string
|
||||||
KilledContainers []string
|
KilledContainers []string
|
||||||
|
RuntimeStatus *RuntimeStatus
|
||||||
VersionInfo string
|
VersionInfo string
|
||||||
APIVersionInfo string
|
APIVersionInfo string
|
||||||
RuntimeType string
|
RuntimeType string
|
||||||
@ -137,6 +138,7 @@ func (f *FakeRuntime) ClearCalls() {
|
|||||||
f.KilledPods = []string{}
|
f.KilledPods = []string{}
|
||||||
f.StartedContainers = []string{}
|
f.StartedContainers = []string{}
|
||||||
f.KilledContainers = []string{}
|
f.KilledContainers = []string{}
|
||||||
|
f.RuntimeStatus = nil
|
||||||
f.VersionInfo = ""
|
f.VersionInfo = ""
|
||||||
f.RuntimeType = ""
|
f.RuntimeType = ""
|
||||||
f.Err = nil
|
f.Err = nil
|
||||||
@ -207,12 +209,12 @@ func (f *FakeRuntime) APIVersion() (Version, error) {
|
|||||||
return &FakeVersion{Version: f.APIVersionInfo}, f.Err
|
return &FakeVersion{Version: f.APIVersionInfo}, f.Err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f *FakeRuntime) Status() error {
|
func (f *FakeRuntime) Status() (*RuntimeStatus, error) {
|
||||||
f.Lock()
|
f.Lock()
|
||||||
defer f.Unlock()
|
defer f.Unlock()
|
||||||
|
|
||||||
f.CalledFunctions = append(f.CalledFunctions, "Status")
|
f.CalledFunctions = append(f.CalledFunctions, "Status")
|
||||||
return f.StatusErr
|
return f.RuntimeStatus, f.StatusErr
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f *FakeRuntime) GetPods(all bool) ([]*Pod, error) {
|
func (f *FakeRuntime) GetPods(all bool) ([]*Pod, error) {
|
||||||
|
@ -54,9 +54,9 @@ func (r *Mock) APIVersion() (Version, error) {
|
|||||||
return args.Get(0).(Version), args.Error(1)
|
return args.Get(0).(Version), args.Error(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *Mock) Status() error {
|
func (r *Mock) Status() (*RuntimeStatus, error) {
|
||||||
args := r.Called()
|
args := r.Called()
|
||||||
return args.Error(0)
|
return args.Get(0).(*RuntimeStatus), args.Error(0)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *Mock) GetPods(all bool) ([]*Pod, error) {
|
func (r *Mock) GetPods(all bool) ([]*Pod, error) {
|
||||||
|
@ -49,6 +49,7 @@ go_library(
|
|||||||
"//vendor:github.com/docker/engine-api/types/versions",
|
"//vendor:github.com/docker/engine-api/types/versions",
|
||||||
"//vendor:github.com/docker/go-connections/nat",
|
"//vendor:github.com/docker/go-connections/nat",
|
||||||
"//vendor:github.com/golang/glog",
|
"//vendor:github.com/golang/glog",
|
||||||
|
"//vendor:github.com/golang/protobuf/proto",
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -21,6 +21,8 @@ import (
|
|||||||
"io"
|
"io"
|
||||||
|
|
||||||
"github.com/golang/glog"
|
"github.com/golang/glog"
|
||||||
|
"github.com/golang/protobuf/proto"
|
||||||
|
|
||||||
"k8s.io/kubernetes/pkg/apis/componentconfig"
|
"k8s.io/kubernetes/pkg/apis/componentconfig"
|
||||||
internalApi "k8s.io/kubernetes/pkg/kubelet/api"
|
internalApi "k8s.io/kubernetes/pkg/kubelet/api"
|
||||||
runtimeApi "k8s.io/kubernetes/pkg/kubelet/api/v1alpha1/runtime"
|
runtimeApi "k8s.io/kubernetes/pkg/kubelet/api/v1alpha1/runtime"
|
||||||
@ -58,7 +60,7 @@ const (
|
|||||||
sandboxIDLabelKey = "io.kubernetes.sandbox.id"
|
sandboxIDLabelKey = "io.kubernetes.sandbox.id"
|
||||||
)
|
)
|
||||||
|
|
||||||
// NetworkPluginArgs is the subset of kubelet runtime args we pass
|
// NetworkPluginSettings is the subset of kubelet runtime args we pass
|
||||||
// to the container runtime shim so it can probe for network plugins.
|
// to the container runtime shim so it can probe for network plugins.
|
||||||
// In the future we will feed these directly to a standalone container
|
// In the future we will feed these directly to a standalone container
|
||||||
// runtime process.
|
// runtime process.
|
||||||
@ -222,3 +224,28 @@ type dockerNetworkHost struct {
|
|||||||
func (ds *dockerService) Start() error {
|
func (ds *dockerService) Start() error {
|
||||||
return ds.containerManager.Start()
|
return ds.containerManager.Start()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Status returns the status of the runtime.
|
||||||
|
// TODO(random-liu): Set network condition accordingly here.
|
||||||
|
func (ds *dockerService) Status() (*runtimeApi.RuntimeStatus, error) {
|
||||||
|
runtimeReady := &runtimeApi.RuntimeCondition{
|
||||||
|
Type: proto.String(runtimeApi.RuntimeReady),
|
||||||
|
Status: proto.Bool(true),
|
||||||
|
}
|
||||||
|
networkReady := &runtimeApi.RuntimeCondition{
|
||||||
|
Type: proto.String(runtimeApi.NetworkReady),
|
||||||
|
Status: proto.Bool(true),
|
||||||
|
}
|
||||||
|
conditions := []*runtimeApi.RuntimeCondition{runtimeReady, networkReady}
|
||||||
|
if _, err := ds.client.Version(); err != nil {
|
||||||
|
runtimeReady.Status = proto.Bool(false)
|
||||||
|
runtimeReady.Reason = proto.String("DockerDaemonNotReady")
|
||||||
|
runtimeReady.Message = proto.String(fmt.Sprintf("docker: failed to get docker version: %v", err))
|
||||||
|
}
|
||||||
|
if err := ds.networkPlugin.Status(); err != nil {
|
||||||
|
networkReady.Status = proto.Bool(false)
|
||||||
|
networkReady.Reason = proto.String("NetworkPluginNotReady")
|
||||||
|
networkReady.Message = proto.String(fmt.Sprintf("docker: network plugin is not ready: %v", err))
|
||||||
|
}
|
||||||
|
return &runtimeApi.RuntimeStatus{Conditions: conditions}, nil
|
||||||
|
}
|
||||||
|
@ -17,10 +17,14 @@ limitations under the License.
|
|||||||
package dockershim
|
package dockershim
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/golang/mock/gomock"
|
"errors"
|
||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"github.com/golang/mock/gomock"
|
||||||
|
"github.com/stretchr/testify/assert"
|
||||||
|
|
||||||
|
runtimeApi "k8s.io/kubernetes/pkg/kubelet/api/v1alpha1/runtime"
|
||||||
containertest "k8s.io/kubernetes/pkg/kubelet/container/testing"
|
containertest "k8s.io/kubernetes/pkg/kubelet/container/testing"
|
||||||
"k8s.io/kubernetes/pkg/kubelet/dockertools"
|
"k8s.io/kubernetes/pkg/kubelet/dockertools"
|
||||||
"k8s.io/kubernetes/pkg/kubelet/network"
|
"k8s.io/kubernetes/pkg/kubelet/network"
|
||||||
@ -39,3 +43,49 @@ func newTestDockerService() (*dockerService, *dockertools.FakeDockerClient, *clo
|
|||||||
c := dockertools.NewFakeDockerClientWithClock(fakeClock)
|
c := dockertools.NewFakeDockerClientWithClock(fakeClock)
|
||||||
return &dockerService{client: c, os: &containertest.FakeOS{}, networkPlugin: &network.NoopNetworkPlugin{}}, c, fakeClock
|
return &dockerService{client: c, os: &containertest.FakeOS{}, networkPlugin: &network.NoopNetworkPlugin{}}, c, fakeClock
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TestStatus tests the runtime status logic.
|
||||||
|
func TestStatus(t *testing.T) {
|
||||||
|
ds, fDocker, _ := newTestDockerService()
|
||||||
|
|
||||||
|
assertStatus := func(expected map[string]bool, status *runtimeApi.RuntimeStatus) {
|
||||||
|
conditions := status.GetConditions()
|
||||||
|
assert.Equal(t, len(expected), len(conditions))
|
||||||
|
for k, v := range expected {
|
||||||
|
for _, c := range conditions {
|
||||||
|
if k == c.GetType() {
|
||||||
|
assert.Equal(t, v, c.GetStatus())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Should report ready status if version returns no error.
|
||||||
|
status, err := ds.Status()
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assertStatus(map[string]bool{
|
||||||
|
runtimeApi.RuntimeReady: true,
|
||||||
|
runtimeApi.NetworkReady: true,
|
||||||
|
}, status)
|
||||||
|
|
||||||
|
// Should not report ready status if version returns error.
|
||||||
|
fDocker.InjectError("version", errors.New("test error"))
|
||||||
|
status, err = ds.Status()
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assertStatus(map[string]bool{
|
||||||
|
runtimeApi.RuntimeReady: false,
|
||||||
|
runtimeApi.NetworkReady: true,
|
||||||
|
}, status)
|
||||||
|
|
||||||
|
// Should not report ready status is network plugin returns error.
|
||||||
|
mockPlugin := newTestNetworkPlugin(t)
|
||||||
|
ds.networkPlugin = mockPlugin
|
||||||
|
defer mockPlugin.Finish()
|
||||||
|
mockPlugin.EXPECT().Status().Return(errors.New("network error"))
|
||||||
|
status, err = ds.Status()
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assertStatus(map[string]bool{
|
||||||
|
runtimeApi.RuntimeReady: true,
|
||||||
|
runtimeApi.NetworkReady: false,
|
||||||
|
}, status)
|
||||||
|
}
|
||||||
|
@ -51,6 +51,14 @@ func (d *dockerService) Version(ctx context.Context, r *runtimeApi.VersionReques
|
|||||||
return d.runtimeService.Version(r.GetVersion())
|
return d.runtimeService.Version(r.GetVersion())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (d *dockerService) Status(ctx context.Context, r *runtimeApi.StatusRequest) (*runtimeApi.StatusResponse, error) {
|
||||||
|
status, err := d.runtimeService.Status()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return &runtimeApi.StatusResponse{Status: status}, nil
|
||||||
|
}
|
||||||
|
|
||||||
func (d *dockerService) RunPodSandbox(ctx context.Context, r *runtimeApi.RunPodSandboxRequest) (*runtimeApi.RunPodSandboxResponse, error) {
|
func (d *dockerService) RunPodSandbox(ctx context.Context, r *runtimeApi.RunPodSandboxRequest) (*runtimeApi.RunPodSandboxResponse, error) {
|
||||||
podSandboxId, err := d.runtimeService.RunPodSandbox(r.GetConfig())
|
podSandboxId, err := d.runtimeService.RunPodSandbox(r.GetConfig())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -1105,8 +1105,8 @@ func (dm *DockerManager) APIVersion() (kubecontainer.Version, error) {
|
|||||||
// Now we do this by checking whether:
|
// Now we do this by checking whether:
|
||||||
// 1) `docker version` works
|
// 1) `docker version` works
|
||||||
// 2) docker version is compatible with minimum requirement
|
// 2) docker version is compatible with minimum requirement
|
||||||
func (dm *DockerManager) Status() error {
|
func (dm *DockerManager) Status() (*kubecontainer.RuntimeStatus, error) {
|
||||||
return dm.checkVersionCompatibility()
|
return nil, dm.checkVersionCompatibility()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (dm *DockerManager) checkVersionCompatibility() error {
|
func (dm *DockerManager) checkVersionCompatibility() error {
|
||||||
|
@ -1999,10 +1999,40 @@ func (kl *Kubelet) PLEGHealthCheck() (bool, error) {
|
|||||||
// and returns an error if the status check fails. If the status check is OK,
|
// and returns an error if the status check fails. If the status check is OK,
|
||||||
// update the container runtime uptime in the kubelet runtimeState.
|
// update the container runtime uptime in the kubelet runtimeState.
|
||||||
func (kl *Kubelet) updateRuntimeUp() {
|
func (kl *Kubelet) updateRuntimeUp() {
|
||||||
if err := kl.containerRuntime.Status(); err != nil {
|
s, err := kl.containerRuntime.Status()
|
||||||
|
if err != nil {
|
||||||
glog.Errorf("Container runtime sanity check failed: %v", err)
|
glog.Errorf("Container runtime sanity check failed: %v", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
// Only check specific conditions when runtime integration type is cri,
|
||||||
|
// because the old integration doesn't populate any runtime condition.
|
||||||
|
if kl.kubeletConfiguration.ExperimentalRuntimeIntegrationType == "cri" {
|
||||||
|
if s == nil {
|
||||||
|
glog.Errorf("Container runtime status is nil")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
// Periodically log the whole runtime status for debugging.
|
||||||
|
// TODO(random-liu): Consider to send node event when optional
|
||||||
|
// condition is unmet.
|
||||||
|
glog.V(4).Infof("Container runtime status: %v", s)
|
||||||
|
networkReady := s.GetRuntimeCondition(kubecontainer.NetworkReady)
|
||||||
|
if networkReady == nil || !networkReady.Status {
|
||||||
|
glog.Errorf("Container runtime network not ready: %v", networkReady)
|
||||||
|
kl.runtimeState.setNetworkState(fmt.Errorf("runtime network not ready: %v", networkReady))
|
||||||
|
} else {
|
||||||
|
// Set nil if the containe runtime network is ready.
|
||||||
|
kl.runtimeState.setNetworkState(nil)
|
||||||
|
}
|
||||||
|
// TODO(random-liu): Add runtime error in runtimeState, and update it
|
||||||
|
// when runtime is not ready, so that the information in RuntimeReady
|
||||||
|
// condition will be propagated to NodeReady condition.
|
||||||
|
runtimeReady := s.GetRuntimeCondition(kubecontainer.RuntimeReady)
|
||||||
|
// If RuntimeReady is not set or is false, report an error.
|
||||||
|
if runtimeReady == nil || !runtimeReady.Status {
|
||||||
|
glog.Errorf("Container runtime not ready: %v", runtimeReady)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
kl.oneTimeInitializer.Do(kl.initializeRuntimeDependentModules)
|
kl.oneTimeInitializer.Do(kl.initializeRuntimeDependentModules)
|
||||||
kl.runtimeState.setRuntimeSync(kl.clock.Now())
|
kl.runtimeState.setRuntimeSync(kl.clock.Now())
|
||||||
}
|
}
|
||||||
|
@ -191,19 +191,11 @@ func (kl *Kubelet) cleanupBandwidthLimits(allPods []*api.Pod) error {
|
|||||||
|
|
||||||
// syncNetworkStatus updates the network state
|
// syncNetworkStatus updates the network state
|
||||||
func (kl *Kubelet) syncNetworkStatus() {
|
func (kl *Kubelet) syncNetworkStatus() {
|
||||||
// TODO(#35701): cri shim handles network plugin but we currently
|
// For cri integration, network state will be updated in updateRuntimeUp,
|
||||||
// don't have a cri status hook, so network plugin status isn't
|
// we'll get runtime network status through cri directly.
|
||||||
// reported if --experimental-runtime-integration=cri. This isn't
|
// TODO: Remove this once we completely switch to cri integration.
|
||||||
// too bad, because kubenet is the only network plugin that
|
|
||||||
// implements status(), and it just checks for plugin binaries
|
|
||||||
// on the filesystem.
|
|
||||||
if kl.networkPlugin != nil {
|
if kl.networkPlugin != nil {
|
||||||
kl.runtimeState.setNetworkState(kl.networkPlugin.Status())
|
kl.runtimeState.setNetworkState(kl.networkPlugin.Status())
|
||||||
} else if kl.runtimeState.podCIDR() != "" {
|
|
||||||
// Don't mark the node ready till we've successfully executed
|
|
||||||
// the first UpdatePodCIDR call through cri. See comment above
|
|
||||||
// setPodCIDR call.
|
|
||||||
kl.runtimeState.setNetworkState(nil)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -231,9 +223,6 @@ func (kl *Kubelet) updatePodCIDR(cidr string) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// We need to be careful about setting podCIDR. Till #35839 lands we're
|
|
||||||
// using it to indicate network plugin status for cri shims. See comment
|
|
||||||
// in syncNetworkStatus.
|
|
||||||
glog.Infof("Setting Pod CIDR: %v -> %v", podCIDR, cidr)
|
glog.Infof("Setting Pod CIDR: %v -> %v", podCIDR, cidr)
|
||||||
kl.runtimeState.setPodCIDR(cidr)
|
kl.runtimeState.setPodCIDR(cidr)
|
||||||
}
|
}
|
||||||
|
@ -762,7 +762,7 @@ func TestUpdateNodeStatusWithRuntimeStateError(t *testing.T) {
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
checkNodeStatus := func(status api.ConditionStatus, reason, message string) {
|
checkNodeStatus := func(status api.ConditionStatus, reason string) {
|
||||||
kubeClient.ClearActions()
|
kubeClient.ClearActions()
|
||||||
if err := kubelet.updateNodeStatus(); err != nil {
|
if err := kubelet.updateNodeStatus(); err != nil {
|
||||||
t.Errorf("unexpected error: %v", err)
|
t.Errorf("unexpected error: %v", err)
|
||||||
@ -795,11 +795,14 @@ func TestUpdateNodeStatusWithRuntimeStateError(t *testing.T) {
|
|||||||
if updatedNode.Status.Conditions[lastIndex].Type != api.NodeReady {
|
if updatedNode.Status.Conditions[lastIndex].Type != api.NodeReady {
|
||||||
t.Errorf("unexpected node condition order. NodeReady should be last.")
|
t.Errorf("unexpected node condition order. NodeReady should be last.")
|
||||||
}
|
}
|
||||||
|
if updatedNode.Status.Conditions[lastIndex].Message == "" {
|
||||||
|
t.Errorf("unexpected empty condition message")
|
||||||
|
}
|
||||||
|
updatedNode.Status.Conditions[lastIndex].Message = ""
|
||||||
expectedNode.Status.Conditions[lastIndex] = api.NodeCondition{
|
expectedNode.Status.Conditions[lastIndex] = api.NodeCondition{
|
||||||
Type: api.NodeReady,
|
Type: api.NodeReady,
|
||||||
Status: status,
|
Status: status,
|
||||||
Reason: reason,
|
Reason: reason,
|
||||||
Message: message,
|
|
||||||
LastHeartbeatTime: unversioned.Time{},
|
LastHeartbeatTime: unversioned.Time{},
|
||||||
LastTransitionTime: unversioned.Time{},
|
LastTransitionTime: unversioned.Time{},
|
||||||
}
|
}
|
||||||
@ -808,23 +811,21 @@ func TestUpdateNodeStatusWithRuntimeStateError(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
readyMessage := "kubelet is posting ready status"
|
// TODO(random-liu): Refactor the unit test to be table driven test.
|
||||||
downMessage := "container runtime is down"
|
|
||||||
|
|
||||||
// Should report kubelet not ready if the runtime check is out of date
|
// Should report kubelet not ready if the runtime check is out of date
|
||||||
clock.SetTime(time.Now().Add(-maxWaitForContainerRuntime))
|
clock.SetTime(time.Now().Add(-maxWaitForContainerRuntime))
|
||||||
kubelet.updateRuntimeUp()
|
kubelet.updateRuntimeUp()
|
||||||
checkNodeStatus(api.ConditionFalse, "KubeletNotReady", downMessage)
|
checkNodeStatus(api.ConditionFalse, "KubeletNotReady")
|
||||||
|
|
||||||
// Should report kubelet ready if the runtime check is updated
|
// Should report kubelet ready if the runtime check is updated
|
||||||
clock.SetTime(time.Now())
|
clock.SetTime(time.Now())
|
||||||
kubelet.updateRuntimeUp()
|
kubelet.updateRuntimeUp()
|
||||||
checkNodeStatus(api.ConditionTrue, "KubeletReady", readyMessage)
|
checkNodeStatus(api.ConditionTrue, "KubeletReady")
|
||||||
|
|
||||||
// Should report kubelet not ready if the runtime check is out of date
|
// Should report kubelet not ready if the runtime check is out of date
|
||||||
clock.SetTime(time.Now().Add(-maxWaitForContainerRuntime))
|
clock.SetTime(time.Now().Add(-maxWaitForContainerRuntime))
|
||||||
kubelet.updateRuntimeUp()
|
kubelet.updateRuntimeUp()
|
||||||
checkNodeStatus(api.ConditionFalse, "KubeletNotReady", downMessage)
|
checkNodeStatus(api.ConditionFalse, "KubeletNotReady")
|
||||||
|
|
||||||
// Should report kubelet not ready if the runtime check failed
|
// Should report kubelet not ready if the runtime check failed
|
||||||
fakeRuntime := testKubelet.fakeRuntime
|
fakeRuntime := testKubelet.fakeRuntime
|
||||||
@ -832,7 +833,51 @@ func TestUpdateNodeStatusWithRuntimeStateError(t *testing.T) {
|
|||||||
fakeRuntime.StatusErr = fmt.Errorf("injected runtime status error")
|
fakeRuntime.StatusErr = fmt.Errorf("injected runtime status error")
|
||||||
clock.SetTime(time.Now())
|
clock.SetTime(time.Now())
|
||||||
kubelet.updateRuntimeUp()
|
kubelet.updateRuntimeUp()
|
||||||
checkNodeStatus(api.ConditionFalse, "KubeletNotReady", downMessage)
|
checkNodeStatus(api.ConditionFalse, "KubeletNotReady")
|
||||||
|
|
||||||
|
// Test cri integration.
|
||||||
|
kubelet.kubeletConfiguration.ExperimentalRuntimeIntegrationType = "cri"
|
||||||
|
fakeRuntime.StatusErr = nil
|
||||||
|
|
||||||
|
// Should report node not ready if runtime status is nil.
|
||||||
|
fakeRuntime.RuntimeStatus = nil
|
||||||
|
kubelet.updateRuntimeUp()
|
||||||
|
checkNodeStatus(api.ConditionFalse, "KubeletNotReady")
|
||||||
|
|
||||||
|
// Should report node not ready if runtime status is empty.
|
||||||
|
fakeRuntime.RuntimeStatus = &kubecontainer.RuntimeStatus{}
|
||||||
|
kubelet.updateRuntimeUp()
|
||||||
|
checkNodeStatus(api.ConditionFalse, "KubeletNotReady")
|
||||||
|
|
||||||
|
// Should report node not ready if RuntimeReady is false.
|
||||||
|
fakeRuntime.RuntimeStatus = &kubecontainer.RuntimeStatus{
|
||||||
|
Conditions: []kubecontainer.RuntimeCondition{
|
||||||
|
{Type: kubecontainer.RuntimeReady, Status: false},
|
||||||
|
{Type: kubecontainer.NetworkReady, Status: true},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
kubelet.updateRuntimeUp()
|
||||||
|
checkNodeStatus(api.ConditionFalse, "KubeletNotReady")
|
||||||
|
|
||||||
|
// Should report node ready if RuntimeReady is true.
|
||||||
|
fakeRuntime.RuntimeStatus = &kubecontainer.RuntimeStatus{
|
||||||
|
Conditions: []kubecontainer.RuntimeCondition{
|
||||||
|
{Type: kubecontainer.RuntimeReady, Status: true},
|
||||||
|
{Type: kubecontainer.NetworkReady, Status: true},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
kubelet.updateRuntimeUp()
|
||||||
|
checkNodeStatus(api.ConditionTrue, "KubeletReady")
|
||||||
|
|
||||||
|
// Should report node not ready if NetworkReady is false.
|
||||||
|
fakeRuntime.RuntimeStatus = &kubecontainer.RuntimeStatus{
|
||||||
|
Conditions: []kubecontainer.RuntimeCondition{
|
||||||
|
{Type: kubecontainer.RuntimeReady, Status: true},
|
||||||
|
{Type: kubecontainer.NetworkReady, Status: false},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
kubelet.updateRuntimeUp()
|
||||||
|
checkNodeStatus(api.ConditionFalse, "KubeletNotReady")
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestUpdateNodeStatusError(t *testing.T) {
|
func TestUpdateNodeStatusError(t *testing.T) {
|
||||||
|
@ -216,3 +216,17 @@ func buildFullContainerLogsPath(podUID types.UID, containerName string, restartC
|
|||||||
func buildPodLogsDirectory(podUID types.UID) string {
|
func buildPodLogsDirectory(podUID types.UID) string {
|
||||||
return filepath.Join(podLogsRootDirectory, string(podUID))
|
return filepath.Join(podLogsRootDirectory, string(podUID))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// toKubeRuntimeStatus converts the runtimeApi.RuntimeStatus to kubecontainer.RuntimeStatus.
|
||||||
|
func toKubeRuntimeStatus(status *runtimeApi.RuntimeStatus) *kubecontainer.RuntimeStatus {
|
||||||
|
conditions := []kubecontainer.RuntimeCondition{}
|
||||||
|
for _, c := range status.GetConditions() {
|
||||||
|
conditions = append(conditions, kubecontainer.RuntimeCondition{
|
||||||
|
Type: kubecontainer.RuntimeConditionType(c.GetType()),
|
||||||
|
Status: c.GetStatus(),
|
||||||
|
Reason: c.GetReason(),
|
||||||
|
Message: c.GetMessage(),
|
||||||
|
})
|
||||||
|
}
|
||||||
|
return &kubecontainer.RuntimeStatus{Conditions: conditions}
|
||||||
|
}
|
||||||
|
@ -68,6 +68,15 @@ func (in instrumentedRuntimeService) Version(apiVersion string) (*runtimeApi.Ver
|
|||||||
return out, err
|
return out, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (in instrumentedRuntimeService) Status() (*runtimeApi.RuntimeStatus, error) {
|
||||||
|
const operation = "status"
|
||||||
|
defer recordOperation(operation, time.Now())
|
||||||
|
|
||||||
|
out, err := in.service.Status()
|
||||||
|
recordError(operation, err)
|
||||||
|
return out, err
|
||||||
|
}
|
||||||
|
|
||||||
func (in instrumentedRuntimeService) CreateContainer(podSandboxID string, config *runtimeApi.ContainerConfig, sandboxConfig *runtimeApi.PodSandboxConfig) (string, error) {
|
func (in instrumentedRuntimeService) CreateContainer(podSandboxID string, config *runtimeApi.ContainerConfig, sandboxConfig *runtimeApi.PodSandboxConfig) (string, error) {
|
||||||
const operation = "create_container"
|
const operation = "create_container"
|
||||||
defer recordOperation(operation, time.Now())
|
defer recordOperation(operation, time.Now())
|
||||||
|
@ -268,15 +268,14 @@ func (m *kubeGenericRuntimeManager) APIVersion() (kubecontainer.Version, error)
|
|||||||
return newRuntimeVersion(typedVersion.GetRuntimeApiVersion())
|
return newRuntimeVersion(typedVersion.GetRuntimeApiVersion())
|
||||||
}
|
}
|
||||||
|
|
||||||
// Status returns error if the runtime is unhealthy; nil otherwise.
|
// Status returns the status of the runtime. An error is returned if the Status
|
||||||
func (m *kubeGenericRuntimeManager) Status() error {
|
// function itself fails, nil otherwise.
|
||||||
_, err := m.runtimeService.Version(kubeRuntimeAPIVersion)
|
func (m *kubeGenericRuntimeManager) Status() (*kubecontainer.RuntimeStatus, error) {
|
||||||
|
status, err := m.runtimeService.Status()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
glog.Errorf("Checkout remote runtime status failed: %v", err)
|
return nil, err
|
||||||
return err
|
|
||||||
}
|
}
|
||||||
|
return toKubeRuntimeStatus(status), nil
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetPods returns a list of containers grouped by pods. The boolean parameter
|
// GetPods returns a list of containers grouped by pods. The boolean parameter
|
||||||
|
@ -339,3 +339,17 @@ func (r *RemoteRuntimeService) UpdateRuntimeConfig(runtimeConfig *runtimeApi.Run
|
|||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Status returns the status of the runtime.
|
||||||
|
func (r *RemoteRuntimeService) Status() (*runtimeApi.RuntimeStatus, error) {
|
||||||
|
ctx, cancel := getContextWithTimeout(r.timeout)
|
||||||
|
defer cancel()
|
||||||
|
|
||||||
|
resp, err := r.runtimeClient.Status(ctx, &runtimeApi.StatusRequest{})
|
||||||
|
if err != nil {
|
||||||
|
glog.Errorf("Status from runtime service failed: %v", err)
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return resp.Status, nil
|
||||||
|
}
|
||||||
|
@ -1701,8 +1701,8 @@ func (r *Runtime) APIVersion() (kubecontainer.Version, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Status returns error if rkt is unhealthy, nil otherwise.
|
// Status returns error if rkt is unhealthy, nil otherwise.
|
||||||
func (r *Runtime) Status() error {
|
func (r *Runtime) Status() (*kubecontainer.RuntimeStatus, error) {
|
||||||
return r.checkVersion(minimumRktBinVersion, minimumRktApiVersion, minimumSystemdVersion)
|
return nil, r.checkVersion(minimumRktBinVersion, minimumRktApiVersion, minimumSystemdVersion)
|
||||||
}
|
}
|
||||||
|
|
||||||
// SyncPod syncs the running pod to match the specified desired pod.
|
// SyncPod syncs the running pod to match the specified desired pod.
|
||||||
|
Loading…
Reference in New Issue
Block a user