From 0f05a92ce68ec8ae5b65aa4db746300aba5121ca Mon Sep 17 00:00:00 2001 From: Markus Lehtonen Date: Fri, 16 Jun 2023 11:08:59 +0300 Subject: [PATCH 1/7] cri-api: add rpc for querying runtime configuration This patch adds a new rpc to the runtime service to query CRI runtime configuration options. For now, it only contains one field for getting the cgroup driver (systemd or cgroupfs) to be used. --- .../cri-api/pkg/apis/runtime/v1/api.pb.go | 1384 ++++++++++++----- .../cri-api/pkg/apis/runtime/v1/api.proto | 23 + 2 files changed, 994 insertions(+), 413 deletions(-) diff --git a/staging/src/k8s.io/cri-api/pkg/apis/runtime/v1/api.pb.go b/staging/src/k8s.io/cri-api/pkg/apis/runtime/v1/api.pb.go index 295d456d65f..0474af99b34 100644 --- a/staging/src/k8s.io/cri-api/pkg/apis/runtime/v1/api.pb.go +++ b/staging/src/k8s.io/cri-api/pkg/apis/runtime/v1/api.pb.go @@ -271,6 +271,31 @@ func (MetricType) EnumDescriptor() ([]byte, []int) { return fileDescriptor_00212fb1f9d3bf1c, []int{6} } +type CgroupDriver int32 + +const ( + CgroupDriver_SYSTEMD CgroupDriver = 0 + CgroupDriver_CGROUPFS CgroupDriver = 1 +) + +var CgroupDriver_name = map[int32]string{ + 0: "SYSTEMD", + 1: "CGROUPFS", +} + +var CgroupDriver_value = map[string]int32{ + "SYSTEMD": 0, + "CGROUPFS": 1, +} + +func (x CgroupDriver) String() string { + return proto.EnumName(CgroupDriver_name, int32(x)) +} + +func (CgroupDriver) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_00212fb1f9d3bf1c, []int{7} +} + // Available profile types. type SecurityProfile_ProfileType int32 @@ -9560,6 +9585,137 @@ func (m *Metric) GetValue() *UInt64Value { return nil } +type RuntimeConfigRequest struct { + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *RuntimeConfigRequest) Reset() { *m = RuntimeConfigRequest{} } +func (*RuntimeConfigRequest) ProtoMessage() {} +func (*RuntimeConfigRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_00212fb1f9d3bf1c, []int{143} +} +func (m *RuntimeConfigRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *RuntimeConfigRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_RuntimeConfigRequest.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *RuntimeConfigRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_RuntimeConfigRequest.Merge(m, src) +} +func (m *RuntimeConfigRequest) XXX_Size() int { + return m.Size() +} +func (m *RuntimeConfigRequest) XXX_DiscardUnknown() { + xxx_messageInfo_RuntimeConfigRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_RuntimeConfigRequest proto.InternalMessageInfo + +type RuntimeConfigResponse struct { + // Configuration information for Linux-based runtimes. This field contains + // global runtime configuration options that are not specific to runtime + // handlers. + Linux *LinuxRuntimeConfiguration `protobuf:"bytes,1,opt,name=linux,proto3" json:"linux,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *RuntimeConfigResponse) Reset() { *m = RuntimeConfigResponse{} } +func (*RuntimeConfigResponse) ProtoMessage() {} +func (*RuntimeConfigResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_00212fb1f9d3bf1c, []int{144} +} +func (m *RuntimeConfigResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *RuntimeConfigResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_RuntimeConfigResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *RuntimeConfigResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_RuntimeConfigResponse.Merge(m, src) +} +func (m *RuntimeConfigResponse) XXX_Size() int { + return m.Size() +} +func (m *RuntimeConfigResponse) XXX_DiscardUnknown() { + xxx_messageInfo_RuntimeConfigResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_RuntimeConfigResponse proto.InternalMessageInfo + +func (m *RuntimeConfigResponse) GetLinux() *LinuxRuntimeConfiguration { + if m != nil { + return m.Linux + } + return nil +} + +type LinuxRuntimeConfiguration struct { + // Cgroup driver to use + CgroupDriver CgroupDriver `protobuf:"varint,1,opt,name=cgroup_driver,json=cgroupDriver,proto3,enum=runtime.v1.CgroupDriver" json:"cgroup_driver,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *LinuxRuntimeConfiguration) Reset() { *m = LinuxRuntimeConfiguration{} } +func (*LinuxRuntimeConfiguration) ProtoMessage() {} +func (*LinuxRuntimeConfiguration) Descriptor() ([]byte, []int) { + return fileDescriptor_00212fb1f9d3bf1c, []int{145} +} +func (m *LinuxRuntimeConfiguration) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *LinuxRuntimeConfiguration) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_LinuxRuntimeConfiguration.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *LinuxRuntimeConfiguration) XXX_Merge(src proto.Message) { + xxx_messageInfo_LinuxRuntimeConfiguration.Merge(m, src) +} +func (m *LinuxRuntimeConfiguration) XXX_Size() int { + return m.Size() +} +func (m *LinuxRuntimeConfiguration) XXX_DiscardUnknown() { + xxx_messageInfo_LinuxRuntimeConfiguration.DiscardUnknown(m) +} + +var xxx_messageInfo_LinuxRuntimeConfiguration proto.InternalMessageInfo + +func (m *LinuxRuntimeConfiguration) GetCgroupDriver() CgroupDriver { + if m != nil { + return m.CgroupDriver + } + return CgroupDriver_SYSTEMD +} + func init() { proto.RegisterEnum("runtime.v1.Protocol", Protocol_name, Protocol_value) proto.RegisterEnum("runtime.v1.MountPropagation", MountPropagation_name, MountPropagation_value) @@ -9568,6 +9724,7 @@ func init() { proto.RegisterEnum("runtime.v1.ContainerState", ContainerState_name, ContainerState_value) proto.RegisterEnum("runtime.v1.ContainerEventType", ContainerEventType_name, ContainerEventType_value) proto.RegisterEnum("runtime.v1.MetricType", MetricType_name, MetricType_value) + proto.RegisterEnum("runtime.v1.CgroupDriver", CgroupDriver_name, CgroupDriver_value) proto.RegisterEnum("runtime.v1.SecurityProfile_ProfileType", SecurityProfile_ProfileType_name, SecurityProfile_ProfileType_value) proto.RegisterType((*VersionRequest)(nil), "runtime.v1.VersionRequest") proto.RegisterType((*VersionResponse)(nil), "runtime.v1.VersionResponse") @@ -9740,426 +9897,435 @@ func init() { proto.RegisterType((*PodSandboxMetrics)(nil), "runtime.v1.PodSandboxMetrics") proto.RegisterType((*ContainerMetrics)(nil), "runtime.v1.ContainerMetrics") proto.RegisterType((*Metric)(nil), "runtime.v1.Metric") + proto.RegisterType((*RuntimeConfigRequest)(nil), "runtime.v1.RuntimeConfigRequest") + proto.RegisterType((*RuntimeConfigResponse)(nil), "runtime.v1.RuntimeConfigResponse") + proto.RegisterType((*LinuxRuntimeConfiguration)(nil), "runtime.v1.LinuxRuntimeConfiguration") } func init() { proto.RegisterFile("api.proto", fileDescriptor_00212fb1f9d3bf1c) } var fileDescriptor_00212fb1f9d3bf1c = []byte{ - // 6616 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x7d, 0x4d, 0x6c, 0x1c, 0xc9, - 0x75, 0x30, 0x7b, 0x66, 0x48, 0xce, 0xbc, 0xe1, 0x90, 0xc3, 0x12, 0x45, 0x52, 0x43, 0x89, 0x92, - 0x7a, 0xff, 0xf4, 0xb3, 0xfa, 0x59, 0xad, 0x76, 0x57, 0x92, 0xb5, 0xbb, 0x1a, 0x91, 0x5c, 0x69, - 0xd6, 0x12, 0x39, 0x6e, 0x92, 0xb2, 0xd7, 0xfe, 0xe0, 0xfe, 0x5a, 0xd3, 0xc5, 0x61, 0xaf, 0x66, - 0xba, 0xdb, 0xdd, 0x3d, 0x92, 0xe8, 0x53, 0x8e, 0x89, 0x4f, 0x06, 0x12, 0xc7, 0x80, 0x11, 0x24, - 0xc8, 0x21, 0x3f, 0xb7, 0x04, 0x01, 0x12, 0x38, 0x08, 0x92, 0x00, 0x46, 0x62, 0x38, 0x01, 0x02, - 0xe4, 0x90, 0x00, 0x3e, 0x24, 0x88, 0xbd, 0x09, 0x10, 0x20, 0x87, 0x5c, 0xe2, 0x43, 0x6e, 0x0e, - 0xea, 0xaf, 0xbb, 0xab, 0x7f, 0x66, 0x86, 0xdc, 0xf5, 0xee, 0xfa, 0xc4, 0xe9, 0x57, 0xef, 0xbd, - 0x7a, 0xf5, 0xea, 0xd5, 0xab, 0x57, 0x55, 0xaf, 0x8a, 0x50, 0x31, 0x5c, 0xeb, 0xb2, 0xeb, 0x39, - 0x81, 0x83, 0xc0, 0x1b, 0xd8, 0x81, 0xd5, 0xc7, 0x97, 0x9f, 0xbe, 0xd6, 0xb8, 0xd4, 0xb5, 0x82, - 0xfd, 0xc1, 0xe3, 0xcb, 0x1d, 0xa7, 0x7f, 0xa5, 0xeb, 0x74, 0x9d, 0x2b, 0x14, 0xe5, 0xf1, 0x60, - 0x8f, 0x7e, 0xd1, 0x0f, 0xfa, 0x8b, 0x91, 0xaa, 0x17, 0x60, 0xf6, 0x11, 0xf6, 0x7c, 0xcb, 0xb1, - 0x35, 0xfc, 0x8d, 0x01, 0xf6, 0x03, 0xb4, 0x0c, 0xd3, 0x4f, 0x19, 0x64, 0x59, 0x39, 0xa3, 0x9c, - 0xab, 0x68, 0xe2, 0x53, 0xfd, 0x03, 0x05, 0xe6, 0x42, 0x64, 0xdf, 0x75, 0x6c, 0x1f, 0xe7, 0x63, - 0xa3, 0xb3, 0x30, 0xc3, 0xc5, 0xd2, 0x6d, 0xa3, 0x8f, 0x97, 0x0b, 0xb4, 0xb8, 0xca, 0x61, 0x9b, - 0x46, 0x1f, 0xa3, 0x57, 0x60, 0x4e, 0xa0, 0x08, 0x26, 0x45, 0x8a, 0x35, 0xcb, 0xc1, 0xbc, 0x36, - 0x74, 0x19, 0x8e, 0x09, 0x44, 0xc3, 0xb5, 0x42, 0xe4, 0x12, 0x45, 0x9e, 0xe7, 0x45, 0x4d, 0xd7, - 0xe2, 0xf8, 0xea, 0xd7, 0xa0, 0xb2, 0xbe, 0xb9, 0xbd, 0xe6, 0xd8, 0x7b, 0x56, 0x97, 0x88, 0xe8, - 0x63, 0x8f, 0xd0, 0x2c, 0x2b, 0x67, 0x8a, 0x44, 0x44, 0xfe, 0x89, 0x1a, 0x50, 0xf6, 0xb1, 0xe1, - 0x75, 0xf6, 0xb1, 0xbf, 0x5c, 0xa0, 0x45, 0xe1, 0x37, 0xa1, 0x72, 0xdc, 0xc0, 0x72, 0x6c, 0x7f, - 0xb9, 0xc8, 0xa8, 0xf8, 0xa7, 0xfa, 0x5b, 0x0a, 0x54, 0xdb, 0x8e, 0x17, 0x3c, 0x34, 0x5c, 0xd7, - 0xb2, 0xbb, 0xe8, 0x2a, 0x94, 0xa9, 0x2e, 0x3b, 0x4e, 0x8f, 0xea, 0x60, 0xf6, 0xda, 0xc2, 0xe5, - 0xa8, 0x43, 0x2e, 0xb7, 0x79, 0x99, 0x16, 0x62, 0xa1, 0x97, 0x60, 0xb6, 0xe3, 0xd8, 0x81, 0x61, - 0xd9, 0xd8, 0xd3, 0x5d, 0xc7, 0x0b, 0xa8, 0x72, 0x26, 0xb5, 0x5a, 0x08, 0x25, 0xfc, 0xd1, 0x0a, - 0x54, 0xf6, 0x1d, 0x3f, 0x60, 0x18, 0x45, 0x8a, 0x51, 0x26, 0x00, 0x5a, 0xb8, 0x04, 0xd3, 0xb4, - 0xd0, 0x72, 0xb9, 0x1a, 0xa6, 0xc8, 0x67, 0xcb, 0x55, 0x7f, 0x50, 0x80, 0xc9, 0x87, 0xce, 0xc0, - 0x0e, 0x12, 0xd5, 0x18, 0xc1, 0x3e, 0xef, 0xa2, 0x58, 0x35, 0x46, 0xb0, 0x1f, 0x55, 0x43, 0x30, - 0x58, 0x2f, 0xb1, 0x6a, 0x48, 0x61, 0x03, 0xca, 0x1e, 0x36, 0x4c, 0xc7, 0xee, 0x1d, 0x50, 0x11, - 0xca, 0x5a, 0xf8, 0x4d, 0xba, 0xcf, 0xc7, 0x3d, 0xcb, 0x1e, 0x3c, 0xd7, 0x3d, 0xdc, 0x33, 0x1e, - 0xe3, 0x1e, 0x15, 0xa5, 0xac, 0xcd, 0x72, 0xb0, 0xc6, 0xa0, 0xe8, 0x1d, 0xa8, 0xba, 0x9e, 0xe3, - 0x1a, 0x5d, 0x83, 0x68, 0x70, 0x79, 0x92, 0x2a, 0xe9, 0x64, 0x5c, 0x49, 0x54, 0xe0, 0x76, 0x84, - 0xa3, 0xc5, 0x09, 0xd0, 0x5b, 0x50, 0x1d, 0x58, 0x26, 0xd7, 0xb7, 0xbf, 0x3c, 0x75, 0xa6, 0x78, - 0xae, 0x7a, 0xed, 0x78, 0x9c, 0xbe, 0xb5, 0xce, 0x4b, 0xb5, 0x38, 0x26, 0x21, 0xec, 0xc6, 0x08, - 0xa7, 0x87, 0x12, 0xc6, 0x30, 0x55, 0x1d, 0x2a, 0x61, 0x49, 0xa4, 0x6a, 0x93, 0x2a, 0xb0, 0xc6, - 0x55, 0x6d, 0x12, 0x13, 0x8f, 0x14, 0x6c, 0x99, 0x54, 0x79, 0x35, 0xad, 0x1a, 0xc2, 0x5a, 0x26, - 0x5a, 0x84, 0xa9, 0x1e, 0xb6, 0xbb, 0xc1, 0x3e, 0xd5, 0x5e, 0x4d, 0xe3, 0x5f, 0xea, 0x6f, 0x28, - 0x50, 0xdb, 0xf5, 0xb1, 0x47, 0xc6, 0x81, 0xef, 0x1a, 0x1d, 0x8c, 0x2e, 0x41, 0xa9, 0xef, 0x98, - 0x98, 0x9b, 0xd0, 0x89, 0xb8, 0x90, 0x21, 0xd2, 0x43, 0xc7, 0xc4, 0x1a, 0x45, 0x43, 0xe7, 0xa1, - 0x34, 0xb0, 0x4c, 0x66, 0xb7, 0xb9, 0x6d, 0xa2, 0x28, 0x04, 0xb5, 0x4b, 0x50, 0x8b, 0x43, 0x51, - 0x09, 0x8a, 0xfa, 0x73, 0x05, 0xe6, 0xc2, 0xda, 0xb6, 0xa8, 0xc1, 0xa3, 0xd7, 0x61, 0xda, 0xc6, - 0xc1, 0x33, 0xc7, 0x7b, 0x32, 0x5a, 0x36, 0x81, 0x89, 0x2e, 0x42, 0xd1, 0xe5, 0x1a, 0x19, 0x4a, - 0x40, 0xb0, 0x08, 0xb2, 0xe5, 0x76, 0xa8, 0x86, 0x86, 0x23, 0x5b, 0x6e, 0x87, 0x98, 0x6b, 0x60, - 0x78, 0x5d, 0x4c, 0xfb, 0x83, 0x99, 0x7e, 0x99, 0x01, 0x5a, 0x26, 0xba, 0x03, 0xb3, 0x03, 0x1f, - 0x7b, 0xb6, 0xaf, 0x8b, 0xc1, 0x4b, 0x8c, 0xad, 0x2a, 0x33, 0x95, 0xf4, 0xae, 0xd5, 0x18, 0xc1, - 0x16, 0x1f, 0xdd, 0x2a, 0x40, 0xcb, 0x0e, 0xde, 0xbc, 0xfe, 0xc8, 0xe8, 0x0d, 0x30, 0x5a, 0x80, - 0xc9, 0xa7, 0xe4, 0x07, 0x6d, 0x79, 0x51, 0x63, 0x1f, 0xea, 0x5f, 0x96, 0x60, 0xe5, 0x01, 0x31, - 0xf0, 0x6d, 0xc3, 0x36, 0x1f, 0x3b, 0xcf, 0xb7, 0x71, 0x67, 0xe0, 0x59, 0xc1, 0xc1, 0x9a, 0x63, - 0x07, 0xf8, 0x79, 0x80, 0xee, 0xc3, 0xbc, 0x2d, 0xf8, 0x87, 0x82, 0x28, 0x54, 0x90, 0x95, 0xcc, - 0xd6, 0xb1, 0xca, 0xb5, 0xba, 0x2d, 0x03, 0x7c, 0x74, 0x37, 0x1a, 0x62, 0x82, 0x4f, 0x21, 0xdd, - 0xa0, 0xed, 0x0d, 0x2a, 0x0d, 0xe7, 0x22, 0x46, 0x9f, 0xe0, 0xf1, 0x26, 0x10, 0xa7, 0xab, 0x1b, - 0xbe, 0x4e, 0x5a, 0x4a, 0xb5, 0x5c, 0xbd, 0xb6, 0x28, 0x59, 0x41, 0xd8, 0x60, 0xad, 0xe2, 0x0d, - 0xec, 0xa6, 0x4f, 0x34, 0x84, 0x6e, 0x50, 0x07, 0x4e, 0xe8, 0xba, 0x9e, 0x33, 0x70, 0x97, 0xcb, - 0x43, 0x09, 0x81, 0x12, 0xde, 0x23, 0x98, 0xd4, 0xaf, 0x73, 0x27, 0xa1, 0x7b, 0x8e, 0x13, 0xec, - 0xf9, 0xc2, 0x31, 0x08, 0xb0, 0x46, 0xa1, 0xe8, 0x0a, 0x1c, 0xf3, 0x07, 0xae, 0xdb, 0xc3, 0x7d, - 0x6c, 0x07, 0x46, 0x8f, 0x55, 0x44, 0xfa, 0xac, 0x78, 0xae, 0xa8, 0xa1, 0x78, 0x11, 0x65, 0xec, - 0xa3, 0x55, 0x00, 0xd7, 0xb3, 0x9e, 0x5a, 0x3d, 0xdc, 0xc5, 0xe6, 0xf2, 0x14, 0x65, 0x1a, 0x83, - 0xa0, 0x37, 0x88, 0xaf, 0xef, 0x74, 0x9c, 0xbe, 0xbb, 0x5c, 0x49, 0xeb, 0x5b, 0xf4, 0x53, 0xdb, - 0x73, 0xf6, 0xac, 0x1e, 0xd6, 0x04, 0x2e, 0x7a, 0x0b, 0xca, 0x86, 0xeb, 0x1a, 0x5e, 0xdf, 0xf1, - 0x96, 0x61, 0x34, 0x5d, 0x88, 0x8c, 0xae, 0xc3, 0x02, 0xe7, 0xa1, 0xbb, 0xac, 0x90, 0xb9, 0xd1, - 0x69, 0x62, 0x97, 0x77, 0x0b, 0xcb, 0x8a, 0x86, 0x78, 0x39, 0xa7, 0x25, 0x4e, 0x55, 0xfd, 0x1b, - 0x05, 0xe6, 0x12, 0x3c, 0xd1, 0xfb, 0x30, 0x23, 0x38, 0x04, 0x07, 0xae, 0x70, 0x03, 0xaf, 0x0c, - 0x11, 0xe3, 0x32, 0xff, 0xbb, 0x73, 0xe0, 0x62, 0xea, 0x2f, 0xc5, 0x07, 0x7a, 0x01, 0x6a, 0x3d, - 0xa7, 0x63, 0xf4, 0xa8, 0xd7, 0xf2, 0xf0, 0x1e, 0xf7, 0xea, 0x33, 0x21, 0x50, 0xc3, 0x7b, 0xea, - 0x1d, 0xa8, 0xc6, 0x18, 0x20, 0x04, 0xb3, 0x1a, 0xab, 0x6a, 0x1d, 0xef, 0x19, 0x83, 0x5e, 0x50, - 0x9f, 0x40, 0xb3, 0x00, 0xbb, 0x76, 0x87, 0xcc, 0xa2, 0x36, 0x36, 0xeb, 0x0a, 0xaa, 0x41, 0xe5, - 0x81, 0x60, 0x51, 0x2f, 0xa8, 0xdf, 0x2b, 0xc2, 0x71, 0x6a, 0x78, 0x6d, 0xc7, 0xe4, 0x23, 0x81, - 0x4f, 0xb9, 0x2f, 0x40, 0xad, 0x43, 0xfb, 0x52, 0x77, 0x0d, 0x0f, 0xdb, 0x01, 0x9f, 0x78, 0x66, - 0x18, 0xb0, 0x4d, 0x61, 0x48, 0x83, 0xba, 0xcf, 0x5b, 0xa4, 0x77, 0xd8, 0xc8, 0xe1, 0xc6, 0x2d, - 0xb5, 0x7a, 0xc8, 0x40, 0xd3, 0xe6, 0xfc, 0xd4, 0xc8, 0x9b, 0xf6, 0x0f, 0xfc, 0x4e, 0xd0, 0x13, - 0xde, 0xee, 0x72, 0x8a, 0x55, 0x52, 0xd8, 0xcb, 0xdb, 0x8c, 0x60, 0xc3, 0x0e, 0xbc, 0x03, 0x4d, - 0x90, 0xa3, 0x77, 0xa1, 0xec, 0x3c, 0xc5, 0xde, 0x3e, 0x36, 0x98, 0x97, 0xa9, 0x5e, 0x7b, 0x21, - 0xc5, 0x6a, 0x4d, 0x38, 0x7a, 0x0d, 0xfb, 0xce, 0xc0, 0xeb, 0x60, 0x5f, 0x0b, 0x89, 0x50, 0x13, - 0x2a, 0x9e, 0x00, 0x73, 0x2f, 0x34, 0x16, 0x87, 0x88, 0xaa, 0x71, 0x0b, 0x66, 0xe2, 0xc2, 0xa1, - 0x3a, 0x14, 0x9f, 0xe0, 0x03, 0xae, 0x4c, 0xf2, 0x33, 0xf2, 0x4f, 0xac, 0x87, 0xd9, 0xc7, 0xad, - 0xc2, 0x0d, 0x45, 0xf5, 0x00, 0x45, 0x2d, 0x7d, 0x88, 0x03, 0xc3, 0x34, 0x02, 0x03, 0x21, 0x28, - 0xd1, 0x60, 0x8c, 0xb1, 0xa0, 0xbf, 0x09, 0xd7, 0x01, 0x77, 0xd5, 0x15, 0x8d, 0xfc, 0x44, 0x27, - 0xa1, 0x12, 0x7a, 0x22, 0x1e, 0x91, 0x45, 0x00, 0x12, 0x19, 0x19, 0x41, 0x80, 0xfb, 0x6e, 0x40, - 0x15, 0x53, 0xd3, 0xc4, 0xa7, 0xfa, 0x6b, 0x93, 0x50, 0x4f, 0xd9, 0xc2, 0x2d, 0x28, 0xf7, 0x79, - 0xf5, 0xdc, 0x07, 0xae, 0x4a, 0xe1, 0x51, 0x4a, 0x48, 0x2d, 0xc4, 0x27, 0xd1, 0x07, 0xb1, 0xb5, - 0x58, 0xfc, 0x18, 0x7e, 0x33, 0x23, 0xef, 0xea, 0xa6, 0xe5, 0xe1, 0x4e, 0xe0, 0x78, 0x07, 0x5c, - 0xd0, 0x99, 0x9e, 0xd3, 0x5d, 0x17, 0x30, 0x74, 0x1d, 0xc0, 0xb4, 0x7d, 0x9d, 0xda, 0x70, 0x97, - 0xf7, 0xa3, 0x34, 0x01, 0x86, 0x61, 0xa2, 0x56, 0x31, 0x6d, 0x9f, 0x8b, 0x7c, 0x1b, 0x6a, 0x24, - 0xe6, 0xd2, 0xfb, 0x22, 0x70, 0x98, 0xa4, 0xb6, 0xb4, 0x24, 0xcb, 0x1d, 0x46, 0x80, 0xda, 0x8c, - 0x1b, 0x7d, 0xf8, 0xe8, 0x0e, 0x4c, 0xd1, 0xb0, 0x47, 0x04, 0x2a, 0xe7, 0xb2, 0x9b, 0xcb, 0xad, - 0xef, 0x01, 0x45, 0x65, 0xc6, 0xc7, 0xe9, 0xd0, 0x16, 0x54, 0x0d, 0xdb, 0x76, 0x02, 0x83, 0x79, - 0x7c, 0x16, 0xb6, 0x5c, 0x1a, 0xca, 0xa6, 0x19, 0xe1, 0x33, 0x5e, 0x71, 0x0e, 0xe8, 0x2d, 0x98, - 0xa4, 0x53, 0x02, 0xf7, 0xe1, 0x67, 0x47, 0x0e, 0x0a, 0x8d, 0xe1, 0xa3, 0xb7, 0x61, 0xfa, 0x99, - 0x65, 0x9b, 0xce, 0x33, 0x9f, 0xfb, 0x53, 0xc9, 0x84, 0xbf, 0xcc, 0x8a, 0x52, 0xc4, 0x82, 0xa6, - 0x71, 0x13, 0xaa, 0xb1, 0xf6, 0x1d, 0xc6, 0x7e, 0x1b, 0xef, 0x40, 0x3d, 0xd9, 0xa6, 0x43, 0xd9, - 0xff, 0x00, 0x16, 0xb4, 0x81, 0x1d, 0x89, 0x26, 0x96, 0x37, 0xd7, 0x61, 0x8a, 0x5b, 0x03, 0x33, - 0xc6, 0x93, 0xc3, 0xd4, 0xaa, 0x71, 0xdc, 0xf8, 0x4a, 0x65, 0xdf, 0xb0, 0xcd, 0x1e, 0xf6, 0x78, - 0x8d, 0x62, 0xa5, 0x72, 0x9f, 0x41, 0xd5, 0xb7, 0xe1, 0x78, 0xa2, 0x5a, 0xbe, 0x50, 0x7a, 0x11, - 0x66, 0x5d, 0xc7, 0xd4, 0x7d, 0x06, 0x16, 0xb1, 0x64, 0x85, 0xd8, 0x8e, 0xc0, 0x6d, 0x99, 0x84, - 0x7c, 0x3b, 0x70, 0xdc, 0xb4, 0xd8, 0xe3, 0x91, 0x2f, 0xc3, 0x62, 0x92, 0x9c, 0x55, 0xaf, 0xbe, - 0x0b, 0x4b, 0x1a, 0xee, 0x3b, 0x4f, 0xf1, 0x51, 0x59, 0x37, 0x60, 0x39, 0xcd, 0x80, 0x33, 0xff, - 0x00, 0x96, 0x22, 0xe8, 0x76, 0x60, 0x04, 0x03, 0xff, 0x50, 0xcc, 0xf9, 0x2a, 0xf2, 0xb1, 0xe3, - 0xb3, 0x8e, 0x2c, 0x6b, 0xe2, 0x53, 0x5d, 0x82, 0xc9, 0xb6, 0x63, 0xb6, 0xda, 0x68, 0x16, 0x0a, - 0x96, 0xcb, 0x89, 0x0b, 0x96, 0xab, 0x76, 0xe2, 0x75, 0x6e, 0xb2, 0xa8, 0x93, 0x55, 0x9d, 0x44, - 0x45, 0x37, 0x60, 0xd6, 0x30, 0x4d, 0x8b, 0x18, 0x92, 0xd1, 0xd3, 0x2d, 0x57, 0x04, 0xcd, 0xf3, - 0x89, 0xae, 0x6f, 0xb5, 0xb5, 0x5a, 0x84, 0xd8, 0x72, 0x7d, 0xf5, 0x2e, 0x54, 0xa2, 0x00, 0xfd, - 0x8d, 0x68, 0x45, 0x58, 0x18, 0x1d, 0xcb, 0x85, 0xcb, 0xc5, 0xcd, 0xd4, 0x24, 0xc9, 0xc5, 0x7c, - 0x03, 0x20, 0x74, 0xaa, 0x22, 0x3c, 0x3c, 0x9e, 0xc9, 0x52, 0x8b, 0x21, 0xaa, 0xff, 0x56, 0x8a, - 0x3b, 0xd9, 0x58, 0x93, 0xcd, 0xb0, 0xc9, 0xa6, 0xe4, 0x74, 0x0b, 0x87, 0x74, 0xba, 0xaf, 0xc1, - 0xa4, 0x1f, 0x18, 0x01, 0xe6, 0xf1, 0xf8, 0x4a, 0x36, 0x21, 0xa9, 0x18, 0x6b, 0x0c, 0x13, 0x9d, - 0x02, 0xe8, 0x78, 0xd8, 0x08, 0xb0, 0xa9, 0x1b, 0x6c, 0x56, 0x28, 0x6a, 0x15, 0x0e, 0x69, 0x06, - 0xc4, 0x8b, 0x88, 0x15, 0x44, 0xc6, 0x44, 0x98, 0xd3, 0x8d, 0xd1, 0x5a, 0x22, 0xf4, 0x5e, 0x53, - 0x23, 0xbd, 0x17, 0x27, 0xe5, 0xde, 0x2b, 0xf2, 0xc4, 0xd3, 0xc3, 0x3c, 0x31, 0x23, 0x1a, 0xc7, - 0x13, 0x97, 0x87, 0x79, 0x62, 0xce, 0x66, 0xb8, 0x27, 0xce, 0x70, 0x24, 0x95, 0x2c, 0x47, 0xf2, - 0x59, 0xba, 0xce, 0x3f, 0x2f, 0xc0, 0x72, 0x7a, 0x3c, 0x73, 0x3f, 0x76, 0x1d, 0xa6, 0x7c, 0x0a, - 0x19, 0xee, 0x3f, 0x39, 0x15, 0xc7, 0x45, 0x77, 0xa1, 0x64, 0xd9, 0x7b, 0x0e, 0x1f, 0x78, 0x97, - 0x87, 0xd2, 0xf0, 0x9a, 0x2e, 0xb7, 0xec, 0x3d, 0x87, 0x69, 0x90, 0xd2, 0xa2, 0x07, 0x70, 0x2c, - 0x5c, 0x59, 0xfb, 0x3a, 0x63, 0x8c, 0x45, 0x9c, 0x27, 0x59, 0x69, 0x18, 0x55, 0x71, 0x8e, 0x28, - 0xa2, 0xdb, 0xe6, 0x64, 0x24, 0xc6, 0x21, 0xe8, 0x7e, 0x60, 0xf4, 0x5d, 0x61, 0xb1, 0x21, 0xa0, - 0xf1, 0x16, 0x54, 0xc2, 0xea, 0x0f, 0xa5, 0xbb, 0x16, 0x2c, 0x24, 0xc6, 0x08, 0x5b, 0x48, 0x86, - 0x83, 0x4a, 0x19, 0x77, 0x50, 0xa9, 0x3f, 0x53, 0xe2, 0x03, 0xfd, 0x3d, 0xab, 0x17, 0x60, 0x2f, - 0x35, 0xd0, 0xdf, 0x14, 0x7c, 0xd9, 0x28, 0x3f, 0x33, 0x84, 0x2f, 0x5b, 0xa7, 0xf1, 0x11, 0xfb, - 0x08, 0x66, 0xa9, 0x89, 0xeb, 0x3e, 0xee, 0xd1, 0x58, 0x89, 0xeb, 0xf1, 0x4a, 0x36, 0x03, 0x56, - 0x3b, 0x1b, 0x22, 0xdb, 0x9c, 0x82, 0xf5, 0x4d, 0xad, 0x17, 0x87, 0x35, 0xee, 0x00, 0x4a, 0x23, - 0x1d, 0x4a, 0x83, 0x0f, 0x89, 0xbf, 0xf4, 0x83, 0xcc, 0x99, 0x7b, 0x8f, 0x8a, 0x31, 0xdc, 0xf2, - 0x98, 0xa8, 0x1a, 0xc7, 0x55, 0xff, 0xb9, 0x08, 0x10, 0x15, 0x7e, 0xce, 0x1d, 0xe5, 0xad, 0xd0, - 0x61, 0xb1, 0x88, 0x53, 0xcd, 0x66, 0x99, 0xe9, 0xaa, 0x5a, 0xb2, 0xab, 0x62, 0xb1, 0xe7, 0x2b, - 0x39, 0x0c, 0x0e, 0xed, 0xa4, 0xa6, 0x3f, 0x6f, 0x4e, 0xea, 0x3d, 0x58, 0x4c, 0x9a, 0x09, 0xf7, - 0x50, 0xaf, 0xc2, 0xa4, 0x15, 0xe0, 0x3e, 0xdb, 0xed, 0x4d, 0x6c, 0x58, 0xc4, 0xd0, 0x19, 0x92, - 0xfa, 0x0e, 0x2c, 0xca, 0x7d, 0x75, 0xb8, 0xd0, 0x45, 0x7d, 0x90, 0x8c, 0x7d, 0x22, 0x57, 0xc9, - 0xed, 0x23, 0x73, 0xeb, 0x27, 0x49, 0xc3, 0x30, 0xd5, 0x1f, 0x2a, 0x70, 0x3c, 0x51, 0x94, 0x33, - 0xf0, 0xbf, 0x96, 0x1a, 0xc0, 0xcc, 0xb7, 0x5e, 0x1f, 0x52, 0xcb, 0xa7, 0x38, 0x8a, 0xbf, 0x0c, - 0x0d, 0xb9, 0x7b, 0x24, 0xd5, 0xde, 0x4c, 0x0c, 0xe5, 0xb3, 0x23, 0x85, 0x0e, 0xc7, 0x73, 0x1b, - 0x56, 0x32, 0x19, 0xa7, 0x75, 0x5e, 0x1c, 0x53, 0xe7, 0xff, 0x5b, 0x88, 0xfb, 0xec, 0x66, 0x10, - 0x78, 0xd6, 0xe3, 0x41, 0x80, 0x3f, 0xd9, 0xa0, 0x6a, 0x3d, 0x1c, 0xd9, 0xcc, 0xcf, 0xbe, 0x9a, - 0x4d, 0x19, 0xd5, 0x9e, 0x39, 0xc6, 0xb7, 0xe5, 0x31, 0x5e, 0xa2, 0xac, 0x5e, 0x1b, 0xc9, 0x6a, - 0xe8, 0x68, 0xff, 0x2c, 0x07, 0xf1, 0xdf, 0x29, 0x30, 0x97, 0xe8, 0x15, 0x74, 0x07, 0xc0, 0x08, - 0x45, 0xe7, 0xf6, 0x71, 0x66, 0x54, 0x13, 0xb5, 0x18, 0x0d, 0x99, 0x13, 0x59, 0xbc, 0x98, 0x31, - 0x27, 0x66, 0xc4, 0x8b, 0x61, 0xb8, 0x78, 0x3b, 0x5a, 0xec, 0xb2, 0x4d, 0x52, 0x75, 0xe8, 0x62, - 0x97, 0xd1, 0x0a, 0x12, 0xf5, 0xd7, 0x0b, 0xb0, 0x90, 0xc5, 0x1d, 0xbd, 0x0c, 0xc5, 0x8e, 0x3b, - 0xe0, 0x2d, 0x91, 0x8e, 0x86, 0xd6, 0xdc, 0xc1, 0xae, 0x6f, 0x74, 0xb1, 0x46, 0x10, 0xd0, 0x15, - 0x98, 0xea, 0xe3, 0xbe, 0xe3, 0x1d, 0x70, 0xb9, 0xa5, 0xed, 0x86, 0x87, 0xb4, 0x84, 0x61, 0x73, - 0x34, 0x74, 0x2d, 0x0a, 0xab, 0x99, 0xbc, 0xcb, 0xd2, 0xea, 0x81, 0x15, 0x31, 0x92, 0x30, 0x96, - 0xbe, 0x06, 0xd3, 0xae, 0xe7, 0x74, 0xb0, 0xef, 0xf3, 0xdd, 0x90, 0xe5, 0xc4, 0x59, 0x15, 0x29, - 0xe2, 0x34, 0x1c, 0x11, 0xdd, 0x02, 0x88, 0x02, 0x28, 0x3e, 0x33, 0x35, 0x72, 0xe3, 0x2d, 0x5f, - 0x8b, 0x61, 0xab, 0xdf, 0x2f, 0xc0, 0x62, 0xb6, 0xe6, 0xd0, 0xa5, 0xb8, 0x5e, 0x56, 0x32, 0x54, - 0x2d, 0xab, 0xe7, 0xcd, 0x84, 0x7a, 0x56, 0x33, 0x28, 0xb2, 0xb4, 0x74, 0x33, 0xa9, 0xa5, 0xd3, - 0x19, 0x84, 0xd9, 0xca, 0xba, 0x99, 0x54, 0x56, 0x16, 0x69, 0xb6, 0xce, 0x9a, 0x19, 0x3a, 0x3b, - 0x9b, 0xd5, 0xc6, 0x7c, 0xd5, 0xfd, 0xb5, 0x02, 0x33, 0x71, 0xb9, 0xe4, 0x90, 0x55, 0x49, 0x84, - 0xac, 0x68, 0x13, 0xe6, 0x4d, 0xb6, 0x73, 0xab, 0x5b, 0x76, 0x80, 0xbd, 0x3d, 0xa3, 0x23, 0xa2, - 0xc2, 0xb3, 0x19, 0x76, 0xd1, 0x12, 0x38, 0x4c, 0xf0, 0x3a, 0xa7, 0x0d, 0xc1, 0xa4, 0x05, 0x21, - 0x1f, 0xe1, 0xb5, 0xc6, 0x60, 0x14, 0x23, 0x52, 0xff, 0x49, 0x81, 0x63, 0x19, 0x0a, 0x1e, 0xd1, - 0x90, 0xdd, 0xfc, 0x86, 0x9c, 0xcb, 0xef, 0xba, 0x91, 0xed, 0xb9, 0x9f, 0xd1, 0x9e, 0xf1, 0xf9, - 0xc5, 0x9b, 0xf5, 0x73, 0x05, 0x8e, 0x67, 0x62, 0x65, 0x6e, 0xaf, 0x5e, 0x83, 0xb2, 0xf7, 0x5c, - 0x7f, 0x7c, 0x10, 0x60, 0x3f, 0x6b, 0x60, 0xef, 0xc6, 0xce, 0x50, 0xa6, 0xbd, 0xe7, 0x77, 0x09, - 0x1e, 0xba, 0x0e, 0x15, 0xef, 0xb9, 0x8e, 0x3d, 0xcf, 0xf1, 0x84, 0x2f, 0xca, 0x25, 0x2a, 0x7b, - 0xcf, 0x37, 0x28, 0x22, 0xa9, 0x29, 0x10, 0x35, 0x95, 0x46, 0xd4, 0x14, 0x44, 0x35, 0x05, 0x61, - 0x4d, 0x93, 0x23, 0x6a, 0x0a, 0x78, 0x4d, 0xea, 0x1f, 0x16, 0xe0, 0xe4, 0x30, 0x75, 0x7d, 0x62, - 0x8a, 0xd8, 0x00, 0xe4, 0x3d, 0xd7, 0x5d, 0xa3, 0xf3, 0x04, 0x07, 0xbe, 0x6e, 0x7a, 0x8e, 0xeb, - 0x62, 0x73, 0x94, 0x46, 0xea, 0xde, 0xf3, 0x36, 0xa3, 0x58, 0x67, 0x04, 0x47, 0xd2, 0xcc, 0x06, - 0xa0, 0x20, 0x5d, 0xf5, 0x08, 0x15, 0xd5, 0x83, 0x44, 0xd5, 0xea, 0x87, 0x30, 0x13, 0xf7, 0x10, - 0x23, 0x6c, 0xff, 0x36, 0xd4, 0xb8, 0x07, 0xd1, 0x3b, 0xce, 0xc0, 0x0e, 0x46, 0x29, 0x6a, 0x86, - 0x63, 0xaf, 0x11, 0x64, 0xf5, 0x1b, 0xe1, 0x70, 0xfb, 0xd4, 0xaa, 0xfc, 0x57, 0x05, 0x2a, 0xad, - 0xbe, 0xd1, 0xc5, 0xdb, 0x2e, 0xee, 0x90, 0x99, 0xde, 0x22, 0x1f, 0xbc, 0xdf, 0xd9, 0x07, 0xba, - 0x2f, 0x47, 0x2d, 0x2c, 0x4e, 0x7d, 0x59, 0x3a, 0x47, 0x14, 0x1c, 0x46, 0x2c, 0x4c, 0xae, 0xc2, - 0xc2, 0xc0, 0xc7, 0x9e, 0xee, 0xbb, 0xb8, 0x63, 0xed, 0x59, 0xd8, 0xd4, 0x59, 0x75, 0x88, 0x56, - 0x87, 0x48, 0xd9, 0xb6, 0x28, 0xa2, 0x3c, 0x3f, 0x76, 0x84, 0x72, 0x0d, 0xca, 0x5f, 0xc4, 0x07, - 0x6c, 0x0d, 0x3f, 0x26, 0x9d, 0xfa, 0x9d, 0x12, 0x2c, 0xe5, 0x9c, 0xee, 0xd0, 0x05, 0xa0, 0x3b, - 0xd0, 0x5d, 0xec, 0x59, 0x8e, 0x29, 0x3a, 0xa3, 0xe3, 0x0e, 0xda, 0x14, 0x80, 0x56, 0x80, 0x7c, - 0xe8, 0xdf, 0x18, 0x38, 0x3c, 0xc6, 0x2c, 0x6a, 0xe5, 0x8e, 0x3b, 0xf8, 0x12, 0xf9, 0x16, 0xb4, - 0xfe, 0xbe, 0xe1, 0x61, 0xe6, 0x16, 0x18, 0xed, 0x36, 0x05, 0xa0, 0xd7, 0xe0, 0x38, 0x9b, 0xf2, - 0xf4, 0x9e, 0xd5, 0xb7, 0x88, 0xf3, 0x8c, 0x59, 0x7c, 0x51, 0x43, 0xac, 0xf0, 0x01, 0x29, 0x6b, - 0xd9, 0xcc, 0xc6, 0x55, 0xa8, 0x39, 0x4e, 0x5f, 0xf7, 0x3b, 0x8e, 0x87, 0x75, 0xc3, 0xfc, 0x90, - 0x9a, 0x77, 0x51, 0xab, 0x3a, 0x4e, 0x7f, 0x9b, 0xc0, 0x9a, 0xe6, 0x87, 0xe8, 0x34, 0x54, 0x3b, - 0xee, 0xc0, 0xc7, 0x81, 0x4e, 0xfe, 0xd0, 0x3d, 0xb8, 0x8a, 0x06, 0x0c, 0xb4, 0xe6, 0x0e, 0xfc, - 0x18, 0x42, 0x9f, 0xac, 0xba, 0xa6, 0xe3, 0x08, 0x0f, 0x71, 0x9f, 0x1e, 0x62, 0xef, 0x0f, 0xba, - 0xd8, 0x35, 0xba, 0x98, 0x89, 0x26, 0x36, 0xd2, 0xa4, 0x43, 0xec, 0xfb, 0x1c, 0x85, 0x0a, 0xa8, - 0xcd, 0xee, 0xc7, 0x3f, 0x7d, 0xf4, 0x3e, 0x4c, 0x0f, 0x6c, 0xda, 0xaf, 0xcb, 0x15, 0x4a, 0x7b, - 0x75, 0x8c, 0xb3, 0xb4, 0xcb, 0xbb, 0x8c, 0x84, 0x1f, 0xed, 0x71, 0x06, 0xe8, 0x16, 0x34, 0xb8, - 0xa2, 0xfc, 0x67, 0x86, 0x9b, 0xd4, 0x16, 0x50, 0x15, 0x2c, 0x32, 0x8c, 0xed, 0x67, 0x86, 0x1b, - 0xd7, 0x58, 0xe3, 0x16, 0xcc, 0xc4, 0x99, 0x1e, 0xca, 0x96, 0xee, 0x42, 0x4d, 0x6a, 0x24, 0xe9, - 0x6d, 0xaa, 0x14, 0xdf, 0xfa, 0xa6, 0x18, 0x32, 0x65, 0x02, 0xd8, 0xb6, 0xbe, 0x49, 0x53, 0x0f, + // 6720 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x7d, 0x5b, 0x6c, 0x1c, 0xc9, + 0x75, 0x28, 0x7b, 0x66, 0x48, 0xce, 0x9c, 0xe1, 0x0c, 0x87, 0x25, 0x8a, 0xa4, 0x46, 0xef, 0xde, + 0x97, 0xa4, 0x5d, 0x3d, 0x56, 0xfb, 0x92, 0xe4, 0x7d, 0x68, 0x44, 0x72, 0xb5, 0xb3, 0x96, 0xc8, + 0x71, 0x0f, 0x29, 0x7b, 0xd7, 0x17, 0xee, 0xdb, 0x9a, 0x2e, 0x0e, 0x7b, 0x35, 0xd3, 0xdd, 0xee, + 0xee, 0x91, 0x44, 0x7f, 0xdd, 0xcf, 0x7b, 0xfd, 0x65, 0xe0, 0xc6, 0x31, 0x60, 0x04, 0x09, 0xf2, + 0x11, 0x24, 0x7f, 0x09, 0x02, 0x24, 0x70, 0x10, 0x24, 0x01, 0x8c, 0xc4, 0x70, 0x02, 0x04, 0xc8, + 0x47, 0x02, 0xf8, 0x23, 0x41, 0xec, 0x4d, 0x80, 0x00, 0xf9, 0xc8, 0x4f, 0xfc, 0x91, 0xaf, 0x38, + 0xa8, 0x57, 0x77, 0x57, 0x3f, 0x66, 0x86, 0xdc, 0xf5, 0xee, 0xfa, 0x8b, 0xd3, 0xa7, 0xce, 0x39, + 0x75, 0xea, 0xd4, 0xa9, 0x53, 0xa7, 0xaa, 0x4e, 0x15, 0xa1, 0x62, 0xb8, 0xd6, 0x15, 0xd7, 0x73, + 0x02, 0x07, 0x81, 0x37, 0xb2, 0x03, 0x6b, 0x88, 0xaf, 0x3c, 0x7e, 0xb9, 0x79, 0xb9, 0x6f, 0x05, + 0xfb, 0xa3, 0x87, 0x57, 0x7a, 0xce, 0xf0, 0x6a, 0xdf, 0xe9, 0x3b, 0x57, 0x29, 0xca, 0xc3, 0xd1, + 0x1e, 0xfd, 0xa2, 0x1f, 0xf4, 0x17, 0x23, 0x55, 0x2f, 0x41, 0xfd, 0x01, 0xf6, 0x7c, 0xcb, 0xb1, + 0x35, 0xfc, 0xcd, 0x11, 0xf6, 0x03, 0xb4, 0x06, 0xf3, 0x8f, 0x19, 0x64, 0x4d, 0x39, 0xa7, 0x5c, + 0xa8, 0x68, 0xe2, 0x53, 0xfd, 0x5d, 0x05, 0x16, 0x43, 0x64, 0xdf, 0x75, 0x6c, 0x1f, 0xe7, 0x63, + 0xa3, 0xf3, 0xb0, 0xc0, 0xc5, 0xd2, 0x6d, 0x63, 0x88, 0xd7, 0x0a, 0xb4, 0xb8, 0xca, 0x61, 0x5b, + 0xc6, 0x10, 0xa3, 0x17, 0x60, 0x51, 0xa0, 0x08, 0x26, 0x45, 0x8a, 0x55, 0xe7, 0x60, 0x5e, 0x1b, + 0xba, 0x02, 0xc7, 0x04, 0xa2, 0xe1, 0x5a, 0x21, 0x72, 0x89, 0x22, 0x2f, 0xf1, 0xa2, 0x96, 0x6b, + 0x71, 0x7c, 0xf5, 0xeb, 0x50, 0xd9, 0xd8, 0xea, 0xae, 0x3b, 0xf6, 0x9e, 0xd5, 0x27, 0x22, 0xfa, + 0xd8, 0x23, 0x34, 0x6b, 0xca, 0xb9, 0x22, 0x11, 0x91, 0x7f, 0xa2, 0x26, 0x94, 0x7d, 0x6c, 0x78, + 0xbd, 0x7d, 0xec, 0xaf, 0x15, 0x68, 0x51, 0xf8, 0x4d, 0xa8, 0x1c, 0x37, 0xb0, 0x1c, 0xdb, 0x5f, + 0x2b, 0x32, 0x2a, 0xfe, 0xa9, 0xfe, 0x86, 0x02, 0xd5, 0x8e, 0xe3, 0x05, 0xf7, 0x0d, 0xd7, 0xb5, + 0xec, 0x3e, 0xba, 0x06, 0x65, 0xaa, 0xcb, 0x9e, 0x33, 0xa0, 0x3a, 0xa8, 0x5f, 0x5f, 0xbe, 0x12, + 0x75, 0xc8, 0x95, 0x0e, 0x2f, 0xd3, 0x42, 0x2c, 0xf4, 0x1c, 0xd4, 0x7b, 0x8e, 0x1d, 0x18, 0x96, + 0x8d, 0x3d, 0xdd, 0x75, 0xbc, 0x80, 0x2a, 0x67, 0x56, 0xab, 0x85, 0x50, 0xc2, 0x1f, 0x9d, 0x84, + 0xca, 0xbe, 0xe3, 0x07, 0x0c, 0xa3, 0x48, 0x31, 0xca, 0x04, 0x40, 0x0b, 0x57, 0x61, 0x9e, 0x16, + 0x5a, 0x2e, 0x57, 0xc3, 0x1c, 0xf9, 0x6c, 0xbb, 0xea, 0x0f, 0x0b, 0x30, 0x7b, 0xdf, 0x19, 0xd9, + 0x41, 0xa2, 0x1a, 0x23, 0xd8, 0xe7, 0x5d, 0x14, 0xab, 0xc6, 0x08, 0xf6, 0xa3, 0x6a, 0x08, 0x06, + 0xeb, 0x25, 0x56, 0x0d, 0x29, 0x6c, 0x42, 0xd9, 0xc3, 0x86, 0xe9, 0xd8, 0x83, 0x03, 0x2a, 0x42, + 0x59, 0x0b, 0xbf, 0x49, 0xf7, 0xf9, 0x78, 0x60, 0xd9, 0xa3, 0xa7, 0xba, 0x87, 0x07, 0xc6, 0x43, + 0x3c, 0xa0, 0xa2, 0x94, 0xb5, 0x3a, 0x07, 0x6b, 0x0c, 0x8a, 0xde, 0x86, 0xaa, 0xeb, 0x39, 0xae, + 0xd1, 0x37, 0x88, 0x06, 0xd7, 0x66, 0xa9, 0x92, 0x4e, 0xc5, 0x95, 0x44, 0x05, 0xee, 0x44, 0x38, + 0x5a, 0x9c, 0x00, 0xbd, 0x01, 0xd5, 0x91, 0x65, 0x72, 0x7d, 0xfb, 0x6b, 0x73, 0xe7, 0x8a, 0x17, + 0xaa, 0xd7, 0x8f, 0xc7, 0xe9, 0xdb, 0x1b, 0xbc, 0x54, 0x8b, 0x63, 0x12, 0xc2, 0x7e, 0x8c, 0x70, + 0x7e, 0x2c, 0x61, 0x0c, 0x53, 0xd5, 0xa1, 0x12, 0x96, 0x44, 0xaa, 0x36, 0xa9, 0x02, 0x6b, 0x5c, + 0xd5, 0x26, 0x31, 0xf1, 0x48, 0xc1, 0x96, 0x49, 0x95, 0x57, 0xd3, 0xaa, 0x21, 0xac, 0x6d, 0xa2, + 0x15, 0x98, 0x1b, 0x60, 0xbb, 0x1f, 0xec, 0x53, 0xed, 0xd5, 0x34, 0xfe, 0xa5, 0xfe, 0x9a, 0x02, + 0xb5, 0x5d, 0x1f, 0x7b, 0x64, 0x1c, 0xf8, 0xae, 0xd1, 0xc3, 0xe8, 0x32, 0x94, 0x86, 0x8e, 0x89, + 0xb9, 0x09, 0x9d, 0x88, 0x0b, 0x19, 0x22, 0xdd, 0x77, 0x4c, 0xac, 0x51, 0x34, 0x74, 0x11, 0x4a, + 0x23, 0xcb, 0x64, 0x76, 0x9b, 0xdb, 0x26, 0x8a, 0x42, 0x50, 0xfb, 0x04, 0xb5, 0x38, 0x16, 0x95, + 0xa0, 0xa8, 0xbf, 0x50, 0x60, 0x31, 0xac, 0x6d, 0x9b, 0x1a, 0x3c, 0x7a, 0x05, 0xe6, 0x6d, 0x1c, + 0x3c, 0x71, 0xbc, 0x47, 0x93, 0x65, 0x13, 0x98, 0xe8, 0x45, 0x28, 0xba, 0x5c, 0x23, 0x63, 0x09, + 0x08, 0x16, 0x41, 0xb6, 0xdc, 0x1e, 0xd5, 0xd0, 0x78, 0x64, 0xcb, 0xed, 0x11, 0x73, 0x0d, 0x0c, + 0xaf, 0x8f, 0x69, 0x7f, 0x30, 0xd3, 0x2f, 0x33, 0x40, 0xdb, 0x44, 0xb7, 0xa1, 0x3e, 0xf2, 0xb1, + 0x67, 0xfb, 0xba, 0x18, 0xbc, 0xc4, 0xd8, 0xaa, 0x32, 0x53, 0x49, 0xef, 0x5a, 0x8d, 0x11, 0x6c, + 0xf3, 0xd1, 0xad, 0x02, 0xb4, 0xed, 0xe0, 0xf5, 0x57, 0x1f, 0x18, 0x83, 0x11, 0x46, 0xcb, 0x30, + 0xfb, 0x98, 0xfc, 0xa0, 0x2d, 0x2f, 0x6a, 0xec, 0x43, 0xfd, 0xb3, 0x12, 0x9c, 0xbc, 0x47, 0x0c, + 0xbc, 0x6b, 0xd8, 0xe6, 0x43, 0xe7, 0x69, 0x17, 0xf7, 0x46, 0x9e, 0x15, 0x1c, 0xac, 0x3b, 0x76, + 0x80, 0x9f, 0x06, 0xe8, 0x3d, 0x58, 0xb2, 0x05, 0xff, 0x50, 0x10, 0x85, 0x0a, 0x72, 0x32, 0xb3, + 0x75, 0xac, 0x72, 0xad, 0x61, 0xcb, 0x00, 0x1f, 0xdd, 0x89, 0x86, 0x98, 0xe0, 0x53, 0x48, 0x37, + 0xa8, 0xbb, 0x49, 0xa5, 0xe1, 0x5c, 0xc4, 0xe8, 0x13, 0x3c, 0x5e, 0x07, 0xe2, 0x74, 0x75, 0xc3, + 0xd7, 0x49, 0x4b, 0xa9, 0x96, 0xab, 0xd7, 0x57, 0x24, 0x2b, 0x08, 0x1b, 0xac, 0x55, 0xbc, 0x91, + 0xdd, 0xf2, 0x89, 0x86, 0xd0, 0x0d, 0xea, 0xc0, 0x09, 0x5d, 0xdf, 0x73, 0x46, 0xee, 0x5a, 0x79, + 0x2c, 0x21, 0x50, 0xc2, 0xbb, 0x04, 0x93, 0xfa, 0x75, 0xee, 0x24, 0x74, 0xcf, 0x71, 0x82, 0x3d, + 0x5f, 0x38, 0x06, 0x01, 0xd6, 0x28, 0x14, 0x5d, 0x85, 0x63, 0xfe, 0xc8, 0x75, 0x07, 0x78, 0x88, + 0xed, 0xc0, 0x18, 0xb0, 0x8a, 0x48, 0x9f, 0x15, 0x2f, 0x14, 0x35, 0x14, 0x2f, 0xa2, 0x8c, 0x7d, + 0x74, 0x06, 0xc0, 0xf5, 0xac, 0xc7, 0xd6, 0x00, 0xf7, 0xb1, 0xb9, 0x36, 0x47, 0x99, 0xc6, 0x20, + 0xe8, 0x35, 0xe2, 0xeb, 0x7b, 0x3d, 0x67, 0xe8, 0xae, 0x55, 0xd2, 0xfa, 0x16, 0xfd, 0xd4, 0xf1, + 0x9c, 0x3d, 0x6b, 0x80, 0x35, 0x81, 0x8b, 0xde, 0x80, 0xb2, 0xe1, 0xba, 0x86, 0x37, 0x74, 0xbc, + 0x35, 0x98, 0x4c, 0x17, 0x22, 0xa3, 0x57, 0x61, 0x99, 0xf3, 0xd0, 0x5d, 0x56, 0xc8, 0xdc, 0xe8, + 0x3c, 0xb1, 0xcb, 0x3b, 0x85, 0x35, 0x45, 0x43, 0xbc, 0x9c, 0xd3, 0x12, 0xa7, 0xaa, 0xfe, 0xa5, + 0x02, 0x8b, 0x09, 0x9e, 0xe8, 0x7d, 0x58, 0x10, 0x1c, 0x82, 0x03, 0x57, 0xb8, 0x81, 0x17, 0xc6, + 0x88, 0x71, 0x85, 0xff, 0xdd, 0x39, 0x70, 0x31, 0xf5, 0x97, 0xe2, 0x03, 0x3d, 0x03, 0xb5, 0x81, + 0xd3, 0x33, 0x06, 0xd4, 0x6b, 0x79, 0x78, 0x8f, 0x7b, 0xf5, 0x85, 0x10, 0xa8, 0xe1, 0x3d, 0xf5, + 0x36, 0x54, 0x63, 0x0c, 0x10, 0x82, 0xba, 0xc6, 0xaa, 0xda, 0xc0, 0x7b, 0xc6, 0x68, 0x10, 0x34, + 0x66, 0x50, 0x1d, 0x60, 0xd7, 0xee, 0x91, 0x59, 0xd4, 0xc6, 0x66, 0x43, 0x41, 0x35, 0xa8, 0xdc, + 0x13, 0x2c, 0x1a, 0x05, 0xf5, 0xfb, 0x45, 0x38, 0x4e, 0x0d, 0xaf, 0xe3, 0x98, 0x7c, 0x24, 0xf0, + 0x29, 0xf7, 0x19, 0xa8, 0xf5, 0x68, 0x5f, 0xea, 0xae, 0xe1, 0x61, 0x3b, 0xe0, 0x13, 0xcf, 0x02, + 0x03, 0x76, 0x28, 0x0c, 0x69, 0xd0, 0xf0, 0x79, 0x8b, 0xf4, 0x1e, 0x1b, 0x39, 0xdc, 0xb8, 0xa5, + 0x56, 0x8f, 0x19, 0x68, 0xda, 0xa2, 0x9f, 0x1a, 0x79, 0xf3, 0xfe, 0x81, 0xdf, 0x0b, 0x06, 0xc2, + 0xdb, 0x5d, 0x49, 0xb1, 0x4a, 0x0a, 0x7b, 0xa5, 0xcb, 0x08, 0x36, 0xed, 0xc0, 0x3b, 0xd0, 0x04, + 0x39, 0x7a, 0x07, 0xca, 0xce, 0x63, 0xec, 0xed, 0x63, 0x83, 0x79, 0x99, 0xea, 0xf5, 0x67, 0x52, + 0xac, 0xd6, 0x85, 0xa3, 0xd7, 0xb0, 0xef, 0x8c, 0xbc, 0x1e, 0xf6, 0xb5, 0x90, 0x08, 0xb5, 0xa0, + 0xe2, 0x09, 0x30, 0xf7, 0x42, 0x53, 0x71, 0x88, 0xa8, 0x9a, 0xb7, 0x60, 0x21, 0x2e, 0x1c, 0x6a, + 0x40, 0xf1, 0x11, 0x3e, 0xe0, 0xca, 0x24, 0x3f, 0x23, 0xff, 0xc4, 0x7a, 0x98, 0x7d, 0xdc, 0x2a, + 0xdc, 0x50, 0x54, 0x0f, 0x50, 0xd4, 0xd2, 0xfb, 0x38, 0x30, 0x4c, 0x23, 0x30, 0x10, 0x82, 0x12, + 0x0d, 0xc6, 0x18, 0x0b, 0xfa, 0x9b, 0x70, 0x1d, 0x71, 0x57, 0x5d, 0xd1, 0xc8, 0x4f, 0x74, 0x0a, + 0x2a, 0xa1, 0x27, 0xe2, 0x11, 0x59, 0x04, 0x20, 0x91, 0x91, 0x11, 0x04, 0x78, 0xe8, 0x06, 0x54, + 0x31, 0x35, 0x4d, 0x7c, 0xaa, 0xff, 0x6f, 0x16, 0x1a, 0x29, 0x5b, 0xb8, 0x05, 0xe5, 0x21, 0xaf, + 0x9e, 0xfb, 0xc0, 0x33, 0x52, 0x78, 0x94, 0x12, 0x52, 0x0b, 0xf1, 0x49, 0xf4, 0x41, 0x6c, 0x2d, + 0x16, 0x3f, 0x86, 0xdf, 0xcc, 0xc8, 0xfb, 0xba, 0x69, 0x79, 0xb8, 0x17, 0x38, 0xde, 0x01, 0x17, + 0x74, 0x61, 0xe0, 0xf4, 0x37, 0x04, 0x0c, 0xbd, 0x0a, 0x60, 0xda, 0xbe, 0x4e, 0x6d, 0xb8, 0xcf, + 0xfb, 0x51, 0x9a, 0x00, 0xc3, 0x30, 0x51, 0xab, 0x98, 0xb6, 0xcf, 0x45, 0x7e, 0x13, 0x6a, 0x24, + 0xe6, 0xd2, 0x87, 0x22, 0x70, 0x98, 0xa5, 0xb6, 0xb4, 0x2a, 0xcb, 0x1d, 0x46, 0x80, 0xda, 0x82, + 0x1b, 0x7d, 0xf8, 0xe8, 0x36, 0xcc, 0xd1, 0xb0, 0x47, 0x04, 0x2a, 0x17, 0xb2, 0x9b, 0xcb, 0xad, + 0xef, 0x1e, 0x45, 0x65, 0xc6, 0xc7, 0xe9, 0xd0, 0x36, 0x54, 0x0d, 0xdb, 0x76, 0x02, 0x83, 0x79, + 0x7c, 0x16, 0xb6, 0x5c, 0x1e, 0xcb, 0xa6, 0x15, 0xe1, 0x33, 0x5e, 0x71, 0x0e, 0xe8, 0x0d, 0x98, + 0xa5, 0x53, 0x02, 0xf7, 0xe1, 0xe7, 0x27, 0x0e, 0x0a, 0x8d, 0xe1, 0xa3, 0xb7, 0x60, 0xfe, 0x89, + 0x65, 0x9b, 0xce, 0x13, 0x9f, 0xfb, 0x53, 0xc9, 0x84, 0xbf, 0xca, 0x8a, 0x52, 0xc4, 0x82, 0xa6, + 0x79, 0x13, 0xaa, 0xb1, 0xf6, 0x1d, 0xc6, 0x7e, 0x9b, 0x6f, 0x43, 0x23, 0xd9, 0xa6, 0x43, 0xd9, + 0xff, 0x08, 0x96, 0xb5, 0x91, 0x1d, 0x89, 0x26, 0x96, 0x37, 0xaf, 0xc2, 0x1c, 0xb7, 0x06, 0x66, + 0x8c, 0xa7, 0xc6, 0xa9, 0x55, 0xe3, 0xb8, 0xf1, 0x95, 0xca, 0xbe, 0x61, 0x9b, 0x03, 0xec, 0xf1, + 0x1a, 0xc5, 0x4a, 0xe5, 0x3d, 0x06, 0x55, 0xdf, 0x82, 0xe3, 0x89, 0x6a, 0xf9, 0x42, 0xe9, 0x59, + 0xa8, 0xbb, 0x8e, 0xa9, 0xfb, 0x0c, 0x2c, 0x62, 0xc9, 0x0a, 0xb1, 0x1d, 0x81, 0xdb, 0x36, 0x09, + 0x79, 0x37, 0x70, 0xdc, 0xb4, 0xd8, 0xd3, 0x91, 0xaf, 0xc1, 0x4a, 0x92, 0x9c, 0x55, 0xaf, 0xbe, + 0x03, 0xab, 0x1a, 0x1e, 0x3a, 0x8f, 0xf1, 0x51, 0x59, 0x37, 0x61, 0x2d, 0xcd, 0x80, 0x33, 0xff, + 0x00, 0x56, 0x23, 0x68, 0x37, 0x30, 0x82, 0x91, 0x7f, 0x28, 0xe6, 0x7c, 0x15, 0xf9, 0xd0, 0xf1, + 0x59, 0x47, 0x96, 0x35, 0xf1, 0xa9, 0xae, 0xc2, 0x6c, 0xc7, 0x31, 0xdb, 0x1d, 0x54, 0x87, 0x82, + 0xe5, 0x72, 0xe2, 0x82, 0xe5, 0xaa, 0xbd, 0x78, 0x9d, 0x5b, 0x2c, 0xea, 0x64, 0x55, 0x27, 0x51, + 0xd1, 0x0d, 0xa8, 0x1b, 0xa6, 0x69, 0x11, 0x43, 0x32, 0x06, 0xba, 0xe5, 0x8a, 0xa0, 0x79, 0x29, + 0xd1, 0xf5, 0xed, 0x8e, 0x56, 0x8b, 0x10, 0xdb, 0xae, 0xaf, 0xde, 0x81, 0x4a, 0x14, 0xa0, 0xbf, + 0x16, 0xad, 0x08, 0x0b, 0x93, 0x63, 0xb9, 0x70, 0xb9, 0xb8, 0x95, 0x9a, 0x24, 0xb9, 0x98, 0xaf, + 0x01, 0x84, 0x4e, 0x55, 0x84, 0x87, 0xc7, 0x33, 0x59, 0x6a, 0x31, 0x44, 0xf5, 0x9f, 0x4b, 0x71, + 0x27, 0x1b, 0x6b, 0xb2, 0x19, 0x36, 0xd9, 0x94, 0x9c, 0x6e, 0xe1, 0x90, 0x4e, 0xf7, 0x65, 0x98, + 0xf5, 0x03, 0x23, 0xc0, 0x3c, 0x1e, 0x3f, 0x99, 0x4d, 0x48, 0x2a, 0xc6, 0x1a, 0xc3, 0x44, 0xa7, + 0x01, 0x7a, 0x1e, 0x36, 0x02, 0x6c, 0xea, 0x06, 0x9b, 0x15, 0x8a, 0x5a, 0x85, 0x43, 0x5a, 0x01, + 0xf1, 0x22, 0x62, 0x05, 0x91, 0x31, 0x11, 0xe6, 0x74, 0x63, 0xb4, 0x96, 0x08, 0xbd, 0xd7, 0xdc, + 0x44, 0xef, 0xc5, 0x49, 0xb9, 0xf7, 0x8a, 0x3c, 0xf1, 0xfc, 0x38, 0x4f, 0xcc, 0x88, 0xa6, 0xf1, + 0xc4, 0xe5, 0x71, 0x9e, 0x98, 0xb3, 0x19, 0xef, 0x89, 0x33, 0x1c, 0x49, 0x25, 0xcb, 0x91, 0x7c, + 0x9e, 0xae, 0xf3, 0x4f, 0x0a, 0xb0, 0x96, 0x1e, 0xcf, 0xdc, 0x8f, 0xbd, 0x0a, 0x73, 0x3e, 0x85, + 0x8c, 0xf7, 0x9f, 0x9c, 0x8a, 0xe3, 0xa2, 0x3b, 0x50, 0xb2, 0xec, 0x3d, 0x87, 0x0f, 0xbc, 0x2b, + 0x63, 0x69, 0x78, 0x4d, 0x57, 0xda, 0xf6, 0x9e, 0xc3, 0x34, 0x48, 0x69, 0xd1, 0x3d, 0x38, 0x16, + 0xae, 0xac, 0x7d, 0x9d, 0x31, 0xc6, 0x22, 0xce, 0x93, 0xac, 0x34, 0x8c, 0xaa, 0x38, 0x47, 0x14, + 0xd1, 0x75, 0x39, 0x19, 0x89, 0x71, 0x08, 0xba, 0x1f, 0x18, 0x43, 0x57, 0x58, 0x6c, 0x08, 0x68, + 0xbe, 0x01, 0x95, 0xb0, 0xfa, 0x43, 0xe9, 0xae, 0x0d, 0xcb, 0x89, 0x31, 0xc2, 0x16, 0x92, 0xe1, + 0xa0, 0x52, 0xa6, 0x1d, 0x54, 0xea, 0xcf, 0x95, 0xf8, 0x40, 0x7f, 0xd7, 0x1a, 0x04, 0xd8, 0x4b, + 0x0d, 0xf4, 0xd7, 0x05, 0x5f, 0x36, 0xca, 0xcf, 0x8d, 0xe1, 0xcb, 0xd6, 0x69, 0x7c, 0xc4, 0x3e, + 0x80, 0x3a, 0x35, 0x71, 0xdd, 0xc7, 0x03, 0x1a, 0x2b, 0x71, 0x3d, 0x5e, 0xcd, 0x66, 0xc0, 0x6a, + 0x67, 0x43, 0xa4, 0xcb, 0x29, 0x58, 0xdf, 0xd4, 0x06, 0x71, 0x58, 0xf3, 0x36, 0xa0, 0x34, 0xd2, + 0xa1, 0x34, 0x78, 0x9f, 0xf8, 0x4b, 0x3f, 0xc8, 0x9c, 0xb9, 0xf7, 0xa8, 0x18, 0xe3, 0x2d, 0x8f, + 0x89, 0xaa, 0x71, 0x5c, 0xf5, 0x1f, 0x8a, 0x00, 0x51, 0xe1, 0x17, 0xdc, 0x51, 0xde, 0x0a, 0x1d, + 0x16, 0x8b, 0x38, 0xd5, 0x6c, 0x96, 0x99, 0xae, 0xaa, 0x2d, 0xbb, 0x2a, 0x16, 0x7b, 0xbe, 0x90, + 0xc3, 0xe0, 0xd0, 0x4e, 0x6a, 0xfe, 0x8b, 0xe6, 0xa4, 0xde, 0x85, 0x95, 0xa4, 0x99, 0x70, 0x0f, + 0xf5, 0x12, 0xcc, 0x5a, 0x01, 0x1e, 0xb2, 0xdd, 0xde, 0xc4, 0x86, 0x45, 0x0c, 0x9d, 0x21, 0xa9, + 0x6f, 0xc3, 0x8a, 0xdc, 0x57, 0x87, 0x0b, 0x5d, 0xd4, 0x7b, 0xc9, 0xd8, 0x27, 0x72, 0x95, 0xdc, + 0x3e, 0x32, 0xb7, 0x7e, 0x92, 0x34, 0x0c, 0x53, 0xfd, 0x91, 0x02, 0xc7, 0x13, 0x45, 0x39, 0x03, + 0xff, 0xeb, 0xa9, 0x01, 0xcc, 0x7c, 0xeb, 0xab, 0x63, 0x6a, 0xf9, 0x0c, 0x47, 0xf1, 0x57, 0xa1, + 0x29, 0x77, 0x8f, 0xa4, 0xda, 0x9b, 0x89, 0xa1, 0x7c, 0x7e, 0xa2, 0xd0, 0xe1, 0x78, 0xee, 0xc0, + 0xc9, 0x4c, 0xc6, 0x69, 0x9d, 0x17, 0xa7, 0xd4, 0xf9, 0x7f, 0x15, 0xe2, 0x3e, 0xbb, 0x15, 0x04, + 0x9e, 0xf5, 0x70, 0x14, 0xe0, 0x4f, 0x37, 0xa8, 0xda, 0x08, 0x47, 0x36, 0xf3, 0xb3, 0x2f, 0x65, + 0x53, 0x46, 0xb5, 0x67, 0x8e, 0xf1, 0xae, 0x3c, 0xc6, 0x4b, 0x94, 0xd5, 0xcb, 0x13, 0x59, 0x8d, + 0x1d, 0xed, 0x9f, 0xe7, 0x20, 0xfe, 0x6b, 0x05, 0x16, 0x13, 0xbd, 0x82, 0x6e, 0x03, 0x18, 0xa1, + 0xe8, 0xdc, 0x3e, 0xce, 0x4d, 0x6a, 0xa2, 0x16, 0xa3, 0x21, 0x73, 0x22, 0x8b, 0x17, 0x33, 0xe6, + 0xc4, 0x8c, 0x78, 0x31, 0x0c, 0x17, 0xdf, 0x8c, 0x16, 0xbb, 0x6c, 0x93, 0x54, 0x1d, 0xbb, 0xd8, + 0x65, 0xb4, 0x82, 0x44, 0xfd, 0xff, 0x05, 0x58, 0xce, 0xe2, 0x8e, 0x9e, 0x87, 0x62, 0xcf, 0x1d, + 0xf1, 0x96, 0x48, 0x47, 0x43, 0xeb, 0xee, 0x68, 0xd7, 0x37, 0xfa, 0x58, 0x23, 0x08, 0xe8, 0x2a, + 0xcc, 0x0d, 0xf1, 0xd0, 0xf1, 0x0e, 0xb8, 0xdc, 0xd2, 0x76, 0xc3, 0x7d, 0x5a, 0xc2, 0xb0, 0x39, + 0x1a, 0xba, 0x1e, 0x85, 0xd5, 0x4c, 0xde, 0x35, 0x69, 0xf5, 0xc0, 0x8a, 0x18, 0x49, 0x18, 0x4b, + 0x5f, 0x87, 0x79, 0xd7, 0x73, 0x7a, 0xd8, 0xf7, 0xf9, 0x6e, 0xc8, 0x5a, 0xe2, 0xac, 0x8a, 0x14, + 0x71, 0x1a, 0x8e, 0x88, 0x6e, 0x01, 0x44, 0x01, 0x14, 0x9f, 0x99, 0x9a, 0xb9, 0xf1, 0x96, 0xaf, + 0xc5, 0xb0, 0xd5, 0x1f, 0x14, 0x60, 0x25, 0x5b, 0x73, 0xe8, 0x72, 0x5c, 0x2f, 0x27, 0x33, 0x54, + 0x2d, 0xab, 0xe7, 0xf5, 0x84, 0x7a, 0xce, 0x64, 0x50, 0x64, 0x69, 0xe9, 0x66, 0x52, 0x4b, 0x67, + 0x33, 0x08, 0xb3, 0x95, 0x75, 0x33, 0xa9, 0xac, 0x2c, 0xd2, 0x6c, 0x9d, 0xb5, 0x32, 0x74, 0x76, + 0x3e, 0xab, 0x8d, 0xf9, 0xaa, 0xfb, 0x0b, 0x05, 0x16, 0xe2, 0x72, 0xc9, 0x21, 0xab, 0x92, 0x08, + 0x59, 0xd1, 0x16, 0x2c, 0x99, 0x6c, 0xe7, 0x56, 0xb7, 0xec, 0x00, 0x7b, 0x7b, 0x46, 0x4f, 0x44, + 0x85, 0xe7, 0x33, 0xec, 0xa2, 0x2d, 0x70, 0x98, 0xe0, 0x0d, 0x4e, 0x1b, 0x82, 0x49, 0x0b, 0x42, + 0x3e, 0xc2, 0x6b, 0x4d, 0xc1, 0x28, 0x46, 0xa4, 0xfe, 0xbd, 0x02, 0xc7, 0x32, 0x14, 0x3c, 0xa1, + 0x21, 0xbb, 0xf9, 0x0d, 0xb9, 0x90, 0xdf, 0x75, 0x13, 0xdb, 0xf3, 0x5e, 0x46, 0x7b, 0xa6, 0xe7, + 0x17, 0x6f, 0xd6, 0x2f, 0x14, 0x38, 0x9e, 0x89, 0x95, 0xb9, 0xbd, 0x7a, 0x1d, 0xca, 0xde, 0x53, + 0xfd, 0xe1, 0x41, 0x80, 0xfd, 0xac, 0x81, 0xbd, 0x1b, 0x3b, 0x43, 0x99, 0xf7, 0x9e, 0xde, 0x21, + 0x78, 0xe8, 0x55, 0xa8, 0x78, 0x4f, 0x75, 0xec, 0x79, 0x8e, 0x27, 0x7c, 0x51, 0x2e, 0x51, 0xd9, + 0x7b, 0xba, 0x49, 0x11, 0x49, 0x4d, 0x81, 0xa8, 0xa9, 0x34, 0xa1, 0xa6, 0x20, 0xaa, 0x29, 0x08, + 0x6b, 0x9a, 0x9d, 0x50, 0x53, 0xc0, 0x6b, 0x52, 0x7f, 0xaf, 0x00, 0xa7, 0xc6, 0xa9, 0xeb, 0x53, + 0x53, 0xc4, 0x26, 0x20, 0xef, 0xa9, 0xee, 0x1a, 0xbd, 0x47, 0x38, 0xf0, 0x75, 0xd3, 0x73, 0x5c, + 0x17, 0x9b, 0x93, 0x34, 0xd2, 0xf0, 0x9e, 0x76, 0x18, 0xc5, 0x06, 0x23, 0x38, 0x92, 0x66, 0x36, + 0x01, 0x05, 0xe9, 0xaa, 0x27, 0xa8, 0xa8, 0x11, 0x24, 0xaa, 0x56, 0x3f, 0x82, 0x85, 0xb8, 0x87, + 0x98, 0x60, 0xfb, 0x6f, 0x42, 0x8d, 0x7b, 0x10, 0xbd, 0xe7, 0x8c, 0xec, 0x60, 0x92, 0xa2, 0x16, + 0x38, 0xf6, 0x3a, 0x41, 0x56, 0xbf, 0x19, 0x0e, 0xb7, 0xcf, 0xac, 0xca, 0x7f, 0x52, 0xa0, 0xd2, + 0x1e, 0x1a, 0x7d, 0xdc, 0x75, 0x71, 0x8f, 0xcc, 0xf4, 0x16, 0xf9, 0xe0, 0xfd, 0xce, 0x3e, 0xd0, + 0x7b, 0x72, 0xd4, 0xc2, 0xe2, 0xd4, 0xe7, 0xa5, 0x73, 0x44, 0xc1, 0x61, 0xc2, 0xc2, 0xe4, 0x1a, + 0x2c, 0x8f, 0x7c, 0xec, 0xe9, 0xbe, 0x8b, 0x7b, 0xd6, 0x9e, 0x85, 0x4d, 0x9d, 0x55, 0x87, 0x68, + 0x75, 0x88, 0x94, 0x75, 0x45, 0x11, 0xe5, 0xf9, 0x89, 0x23, 0x94, 0xeb, 0x50, 0xfe, 0x32, 0x3e, + 0x60, 0x6b, 0xf8, 0x29, 0xe9, 0xd4, 0xef, 0x96, 0x60, 0x35, 0xe7, 0x74, 0x87, 0x2e, 0x00, 0xdd, + 0x91, 0xee, 0x62, 0xcf, 0x72, 0x4c, 0xd1, 0x19, 0x3d, 0x77, 0xd4, 0xa1, 0x00, 0x74, 0x12, 0xc8, + 0x87, 0xfe, 0xcd, 0x91, 0xc3, 0x63, 0xcc, 0xa2, 0x56, 0xee, 0xb9, 0xa3, 0xaf, 0x90, 0x6f, 0x41, + 0xeb, 0xef, 0x1b, 0x1e, 0x66, 0x6e, 0x81, 0xd1, 0x76, 0x29, 0x00, 0xbd, 0x0c, 0xc7, 0xd9, 0x94, + 0xa7, 0x0f, 0xac, 0xa1, 0x45, 0x9c, 0x67, 0xcc, 0xe2, 0x8b, 0x1a, 0x62, 0x85, 0xf7, 0x48, 0x59, + 0xdb, 0x66, 0x36, 0xae, 0x42, 0xcd, 0x71, 0x86, 0xba, 0xdf, 0x73, 0x3c, 0xac, 0x1b, 0xe6, 0x47, + 0xd4, 0xbc, 0x8b, 0x5a, 0xd5, 0x71, 0x86, 0x5d, 0x02, 0x6b, 0x99, 0x1f, 0xa1, 0xb3, 0x50, 0xed, + 0xb9, 0x23, 0x1f, 0x07, 0x3a, 0xf9, 0x43, 0xf7, 0xe0, 0x2a, 0x1a, 0x30, 0xd0, 0xba, 0x3b, 0xf2, + 0x63, 0x08, 0x43, 0xb2, 0xea, 0x9a, 0x8f, 0x23, 0xdc, 0xc7, 0x43, 0x7a, 0x88, 0xbd, 0x3f, 0xea, + 0x63, 0xd7, 0xe8, 0x63, 0x26, 0x9a, 0xd8, 0x48, 0x93, 0x0e, 0xb1, 0xdf, 0xe3, 0x28, 0x54, 0x40, + 0xad, 0xbe, 0x1f, 0xff, 0xf4, 0xd1, 0xfb, 0x30, 0x3f, 0xb2, 0x69, 0xbf, 0xae, 0x55, 0x28, 0xed, + 0xb5, 0x29, 0xce, 0xd2, 0xae, 0xec, 0x32, 0x12, 0x7e, 0xb4, 0xc7, 0x19, 0xa0, 0x5b, 0xd0, 0xe4, + 0x8a, 0xf2, 0x9f, 0x18, 0x6e, 0x52, 0x5b, 0x40, 0x55, 0xb0, 0xc2, 0x30, 0xba, 0x4f, 0x0c, 0x37, + 0xae, 0xb1, 0xe6, 0x2d, 0x58, 0x88, 0x33, 0x3d, 0x94, 0x2d, 0xdd, 0x81, 0x9a, 0xd4, 0x48, 0xd2, + 0xdb, 0x54, 0x29, 0xbe, 0xf5, 0x2d, 0x31, 0x64, 0xca, 0x04, 0xd0, 0xb5, 0xbe, 0x45, 0x53, 0x0f, 0xa8, 0x64, 0x94, 0x4f, 0x49, 0x63, 0x1f, 0xaa, 0x01, 0x35, 0xe9, 0xb4, 0x9f, 0x78, 0x5a, 0x7a, - 0xac, 0xcf, 0x3d, 0x2d, 0xf9, 0x4d, 0x60, 0x9e, 0xd3, 0x13, 0x12, 0xd0, 0xdf, 0x04, 0x46, 0xcf, - 0x95, 0xd9, 0x29, 0x19, 0xfd, 0x4d, 0xab, 0xc0, 0x4f, 0x79, 0xda, 0x4e, 0x45, 0x63, 0x1f, 0xea, - 0x6f, 0x2b, 0x00, 0x6b, 0x86, 0x6b, 0x3c, 0xb6, 0x7a, 0x56, 0x70, 0x80, 0xce, 0x43, 0xdd, 0x30, - 0x4d, 0xbd, 0x23, 0x20, 0x16, 0x16, 0x79, 0x54, 0x73, 0x86, 0x69, 0xae, 0xc5, 0xc0, 0xe8, 0x22, - 0xcc, 0x13, 0x3f, 0x29, 0xe3, 0xb2, 0xc4, 0xaa, 0x3a, 0x29, 0x90, 0x90, 0x6f, 0xc0, 0x32, 0xe1, - 0x6b, 0xf4, 0x1f, 0x5b, 0xd8, 0x0e, 0x64, 0x1a, 0x96, 0x71, 0xb5, 0x68, 0x98, 0x66, 0x93, 0x15, - 0xc7, 0x29, 0xd5, 0xbf, 0x9a, 0x82, 0x53, 0x72, 0x8f, 0x27, 0x13, 0x30, 0x6e, 0xc1, 0x4c, 0x42, - 0xde, 0x54, 0xea, 0x42, 0xd4, 0x42, 0x4d, 0xc2, 0x4d, 0xa4, 0x18, 0x14, 0x52, 0x29, 0x06, 0x99, - 0xc9, 0x1d, 0xc5, 0x4f, 0x28, 0xb9, 0xa3, 0xf4, 0x31, 0x93, 0x3b, 0x26, 0x8f, 0x9a, 0xdc, 0x31, - 0x33, 0x76, 0x72, 0xc7, 0xcb, 0x74, 0x73, 0x48, 0xd4, 0x48, 0x67, 0x79, 0xe6, 0x13, 0x6a, 0x21, - 0x77, 0x5b, 0x24, 0xf7, 0x25, 0x92, 0x40, 0xa6, 0x0f, 0x93, 0x04, 0x52, 0xce, 0x4d, 0x02, 0x39, - 0x03, 0x33, 0xb6, 0xa3, 0xdb, 0xf8, 0x99, 0x4e, 0xba, 0xc5, 0x5f, 0xae, 0xb2, 0x3e, 0xb2, 0x9d, - 0x4d, 0xfc, 0xac, 0x4d, 0x20, 0xe8, 0x2c, 0xcc, 0xf4, 0x0d, 0xff, 0x09, 0x36, 0x69, 0x36, 0x86, - 0xbf, 0x5c, 0xa3, 0xf6, 0x54, 0x65, 0xb0, 0x36, 0x01, 0xa1, 0x97, 0x20, 0x94, 0x83, 0x23, 0xcd, - 0x52, 0xa4, 0x9a, 0x80, 0x32, 0xb4, 0x58, 0x42, 0xc9, 0xdc, 0x11, 0x13, 0x4a, 0xea, 0x87, 0x49, - 0x28, 0xb9, 0x04, 0x75, 0xf1, 0x5b, 0x64, 0x94, 0xb0, 0x03, 0x02, 0x9a, 0x4c, 0x32, 0x27, 0xca, - 0x44, 0xd6, 0x48, 0x5e, 0xfe, 0x09, 0x0c, 0xcd, 0x3f, 0xf9, 0x23, 0x85, 0x2f, 0x55, 0xc3, 0x01, - 0xc4, 0x0f, 0xbe, 0xa5, 0x9c, 0x05, 0xe5, 0x28, 0x39, 0x0b, 0x68, 0x27, 0x37, 0xab, 0xe3, 0x7c, - 0x3e, 0xa7, 0x51, 0x79, 0x1d, 0xea, 0xc3, 0x70, 0x15, 0xf9, 0x49, 0x64, 0xa7, 0xa9, 0xff, 0xa1, - 0xc0, 0x29, 0xce, 0x2f, 0x27, 0x85, 0x2b, 0xc3, 0xca, 0x95, 0x1c, 0x2b, 0xef, 0x78, 0xd8, 0xc4, - 0x76, 0x60, 0x19, 0x3d, 0x1a, 0x97, 0x88, 0x83, 0xe1, 0x08, 0x4c, 0x43, 0xa3, 0xb3, 0x30, 0xc3, - 0xb2, 0x2c, 0xf9, 0x82, 0x92, 0x25, 0x53, 0x56, 0x69, 0xa2, 0x25, 0x5f, 0x33, 0x6e, 0x65, 0x79, - 0x96, 0x52, 0xee, 0x4e, 0xc4, 0x48, 0x07, 0xa3, 0x3a, 0xb0, 0x94, 0x73, 0x44, 0x9f, 0xd9, 0x4d, - 0x4a, 0xba, 0x9b, 0x86, 0x2a, 0x29, 0xdd, 0x4d, 0xdf, 0x51, 0xe0, 0x74, 0x6a, 0x61, 0xfb, 0xd9, - 0x6b, 0x56, 0xfd, 0x53, 0x25, 0xb4, 0x9f, 0xa4, 0xc9, 0xaf, 0xa5, 0x4d, 0xfe, 0xa5, 0x61, 0xeb, - 0xf4, 0x4c, 0xa3, 0x7f, 0x94, 0x6b, 0xf4, 0x17, 0x87, 0xae, 0xf9, 0x47, 0xe9, 0xf3, 0x5f, 0x14, - 0x38, 0x91, 0x2b, 0x40, 0x22, 0x1e, 0x54, 0x92, 0xf1, 0x20, 0x8f, 0x25, 0xa3, 0xa0, 0x9e, 0xc5, - 0x92, 0x34, 0x6e, 0xe7, 0x41, 0x9b, 0xde, 0x37, 0x9e, 0x5b, 0xfd, 0x41, 0x9f, 0x07, 0x93, 0x84, - 0xdd, 0x43, 0x06, 0x39, 0x4a, 0x34, 0x79, 0x05, 0x16, 0x98, 0xa3, 0xa7, 0x01, 0x4d, 0x44, 0xc1, - 0x82, 0xca, 0x79, 0x56, 0x46, 0x62, 0x1b, 0x4e, 0xa0, 0x36, 0x61, 0x3e, 0x6c, 0xd6, 0xd0, 0x14, - 0xa5, 0x58, 0xca, 0x51, 0x41, 0x4e, 0x39, 0xb2, 0x61, 0x6a, 0x1d, 0x3f, 0xb5, 0x3a, 0xf8, 0x13, - 0xc9, 0x76, 0x3e, 0x03, 0x55, 0x17, 0x7b, 0x7d, 0xcb, 0xf7, 0xc3, 0x59, 0xbd, 0xa2, 0xc5, 0x41, - 0xea, 0x69, 0xa8, 0xac, 0xad, 0xb7, 0x78, 0x95, 0x19, 0xa2, 0xaa, 0xff, 0x39, 0x05, 0x73, 0x49, - 0x1b, 0xbb, 0x99, 0x4a, 0x81, 0x3a, 0x95, 0xb9, 0x7d, 0x96, 0xb1, 0x6f, 0x7c, 0x51, 0xac, 0xa8, - 0x0a, 0xe9, 0xfc, 0x80, 0x70, 0xd5, 0x24, 0x16, 0x5a, 0xcb, 0x30, 0xdd, 0x71, 0xfa, 0x7d, 0xc3, - 0x36, 0x45, 0xce, 0x3a, 0xff, 0x24, 0x92, 0x1a, 0x5e, 0x97, 0xed, 0x18, 0x57, 0x34, 0xfa, 0x9b, - 0x98, 0x00, 0x71, 0x86, 0x96, 0x4d, 0x93, 0xa8, 0x68, 0x2f, 0x55, 0x34, 0xe0, 0xa0, 0x75, 0xcb, - 0x43, 0xe7, 0xa0, 0x84, 0xed, 0xa7, 0xe2, 0x28, 0x49, 0xda, 0xb9, 0x14, 0x6b, 0x22, 0x8d, 0x62, - 0xa0, 0xf3, 0x30, 0xd5, 0x27, 0x66, 0x25, 0x0e, 0xda, 0xe7, 0x53, 0xb9, 0xdd, 0x1a, 0x47, 0x40, - 0xaf, 0xc2, 0xb4, 0x49, 0xb5, 0x27, 0x16, 0x01, 0x48, 0x4a, 0xc7, 0xa2, 0x45, 0x9a, 0x40, 0x41, - 0xef, 0x86, 0xdb, 0xe6, 0x95, 0xf4, 0x79, 0x56, 0x42, 0xcd, 0x99, 0x3b, 0xe6, 0x9b, 0xf2, 0xda, - 0x13, 0xd2, 0x9b, 0xef, 0x49, 0x2e, 0xc3, 0x57, 0xa0, 0x27, 0xa0, 0xdc, 0x73, 0xba, 0xcc, 0x7a, - 0xaa, 0xec, 0xc2, 0x43, 0xcf, 0xe9, 0x52, 0xe3, 0x59, 0x80, 0x49, 0x3f, 0x30, 0x2d, 0x9b, 0xc6, - 0x52, 0x65, 0x8d, 0x7d, 0x90, 0x41, 0x4a, 0x7f, 0xe8, 0x8e, 0xdd, 0xc1, 0xcb, 0x35, 0x5a, 0x54, - 0xa1, 0x90, 0x2d, 0xbb, 0x43, 0xd7, 0x94, 0x41, 0x70, 0xb0, 0x3c, 0x4b, 0xe1, 0xe4, 0x67, 0xb4, - 0x7b, 0x3d, 0x97, 0xb3, 0x7b, 0x9d, 0x10, 0x38, 0x63, 0xf7, 0xba, 0x9e, 0x3b, 0x67, 0x24, 0x69, - 0x05, 0x09, 0x89, 0x23, 0xd7, 0xd6, 0x5b, 0xba, 0xe8, 0x9a, 0xf9, 0x74, 0xaa, 0x78, 0x68, 0xf6, - 0x1a, 0x84, 0x3f, 0x3f, 0xd3, 0xc3, 0x83, 0xef, 0x2b, 0xb0, 0xb8, 0x46, 0x8f, 0x4e, 0x63, 0xbe, - 0xf1, 0x30, 0x59, 0x47, 0xaf, 0x87, 0xa9, 0x60, 0x19, 0xf9, 0x3c, 0x49, 0x4d, 0x89, 0x4c, 0xb0, - 0x35, 0x98, 0x15, 0x6c, 0x39, 0x71, 0x71, 0x8c, 0x3c, 0xb2, 0x9a, 0x1f, 0xff, 0x54, 0x6f, 0xc3, - 0x52, 0x4a, 0x72, 0x7e, 0x80, 0x95, 0xbc, 0x53, 0xc0, 0x04, 0x8f, 0xdf, 0x29, 0x50, 0x6f, 0xc1, - 0xf1, 0xed, 0xc0, 0xf0, 0x82, 0x54, 0xb3, 0xc7, 0xa0, 0xa5, 0x19, 0x62, 0x32, 0x2d, 0x4f, 0xe2, - 0xda, 0x86, 0x85, 0xed, 0xc0, 0x71, 0x8f, 0xc0, 0x94, 0xf8, 0x1d, 0xd2, 0x72, 0x67, 0x20, 0xe6, - 0x19, 0xf1, 0xa9, 0x2e, 0xb1, 0x7c, 0xb6, 0x74, 0x6d, 0x5f, 0x80, 0x45, 0x96, 0x4e, 0x76, 0x94, - 0x46, 0x9c, 0x10, 0xc9, 0x6c, 0x69, 0xbe, 0xf7, 0xe0, 0x98, 0xb4, 0xa5, 0xce, 0xd3, 0x2f, 0xae, - 0xca, 0xe9, 0x17, 0xf9, 0xa7, 0x17, 0x61, 0xf6, 0xc5, 0x77, 0x0b, 0x31, 0x3f, 0x9e, 0x73, 0x06, - 0xfb, 0x86, 0x9c, 0x7c, 0x71, 0x3a, 0x9f, 0xab, 0x94, 0x7b, 0x91, 0xb6, 0xce, 0x62, 0x86, 0x75, - 0xee, 0xa6, 0x0e, 0x78, 0x4b, 0xe9, 0xe4, 0x99, 0x84, 0x84, 0x9f, 0xca, 0xd1, 0xee, 0x03, 0x96, - 0xa0, 0x11, 0x56, 0x1d, 0x9e, 0xea, 0xbe, 0x9e, 0x38, 0xd5, 0x5d, 0x19, 0x22, 0x69, 0x78, 0x9e, - 0xfb, 0xdd, 0x12, 0x54, 0xc2, 0xb2, 0x94, 0x86, 0xd3, 0xaa, 0x2a, 0x64, 0xa8, 0x2a, 0x3e, 0xbf, - 0x16, 0x8f, 0x38, 0xbf, 0x96, 0xc6, 0x98, 0x5f, 0x57, 0xa0, 0x42, 0x7f, 0xd0, 0x9c, 0x7a, 0x36, - 0x5f, 0x96, 0x29, 0x40, 0xc3, 0x7b, 0x91, 0x89, 0x4d, 0x8d, 0x69, 0x62, 0x89, 0x64, 0x90, 0xe9, + 0xac, 0xcf, 0x3d, 0x2d, 0xf9, 0x4d, 0x60, 0x9e, 0x33, 0x10, 0x12, 0xd0, 0xdf, 0x04, 0x46, 0xcf, + 0x95, 0xd9, 0x29, 0x19, 0xfd, 0x4d, 0xab, 0xc0, 0x8f, 0x79, 0xda, 0x4e, 0x45, 0x63, 0x1f, 0xea, + 0x6f, 0x2a, 0x00, 0xeb, 0x86, 0x6b, 0x3c, 0xb4, 0x06, 0x56, 0x70, 0x80, 0x2e, 0x42, 0xc3, 0x30, + 0x4d, 0xbd, 0x27, 0x20, 0x16, 0x16, 0x79, 0x54, 0x8b, 0x86, 0x69, 0xae, 0xc7, 0xc0, 0xe8, 0x45, + 0x58, 0x22, 0x7e, 0x52, 0xc6, 0x65, 0x89, 0x55, 0x0d, 0x52, 0x20, 0x21, 0xdf, 0x80, 0x35, 0xc2, + 0xd7, 0x18, 0x3e, 0xb4, 0xb0, 0x1d, 0xc8, 0x34, 0x2c, 0xe3, 0x6a, 0xc5, 0x30, 0xcd, 0x16, 0x2b, + 0x8e, 0x53, 0xaa, 0x7f, 0x3e, 0x07, 0xa7, 0xe5, 0x1e, 0x4f, 0x26, 0x60, 0xdc, 0x82, 0x85, 0x84, + 0xbc, 0xa9, 0xd4, 0x85, 0xa8, 0x85, 0x9a, 0x84, 0x9b, 0x48, 0x31, 0x28, 0xa4, 0x52, 0x0c, 0x32, + 0x93, 0x3b, 0x8a, 0x9f, 0x52, 0x72, 0x47, 0xe9, 0x13, 0x26, 0x77, 0xcc, 0x1e, 0x35, 0xb9, 0x63, + 0x61, 0xea, 0xe4, 0x8e, 0xe7, 0xe9, 0xe6, 0x90, 0xa8, 0x91, 0xce, 0xf2, 0xcc, 0x27, 0xd4, 0x42, + 0xee, 0xb6, 0x48, 0xee, 0x4b, 0x24, 0x81, 0xcc, 0x1f, 0x26, 0x09, 0xa4, 0x9c, 0x9b, 0x04, 0x72, + 0x0e, 0x16, 0x6c, 0x47, 0xb7, 0xf1, 0x13, 0x9d, 0x74, 0x8b, 0xbf, 0x56, 0x65, 0x7d, 0x64, 0x3b, + 0x5b, 0xf8, 0x49, 0x87, 0x40, 0xd0, 0x79, 0x58, 0x18, 0x1a, 0xfe, 0x23, 0x6c, 0xd2, 0x6c, 0x0c, + 0x7f, 0xad, 0x46, 0xed, 0xa9, 0xca, 0x60, 0x1d, 0x02, 0x42, 0xcf, 0x41, 0x28, 0x07, 0x47, 0xaa, + 0x53, 0xa4, 0x9a, 0x80, 0x32, 0xb4, 0x58, 0x42, 0xc9, 0xe2, 0x11, 0x13, 0x4a, 0x1a, 0x87, 0x49, + 0x28, 0xb9, 0x0c, 0x0d, 0xf1, 0x5b, 0x64, 0x94, 0xb0, 0x03, 0x02, 0x9a, 0x4c, 0xb2, 0x28, 0xca, + 0x44, 0xd6, 0x48, 0x5e, 0xfe, 0x09, 0x8c, 0xcd, 0x3f, 0xf9, 0x7d, 0x85, 0x2f, 0x55, 0xc3, 0x01, + 0xc4, 0x0f, 0xbe, 0xa5, 0x9c, 0x05, 0xe5, 0x28, 0x39, 0x0b, 0x68, 0x27, 0x37, 0xab, 0xe3, 0x62, + 0x3e, 0xa7, 0x49, 0x79, 0x1d, 0xea, 0xfd, 0x70, 0x15, 0xf9, 0x69, 0x64, 0xa7, 0xa9, 0xff, 0xaa, + 0xc0, 0x69, 0xce, 0x2f, 0x27, 0x85, 0x2b, 0xc3, 0xca, 0x95, 0x1c, 0x2b, 0xef, 0x79, 0xd8, 0xc4, + 0x76, 0x60, 0x19, 0x03, 0x1a, 0x97, 0x88, 0x83, 0xe1, 0x08, 0x4c, 0x43, 0xa3, 0xf3, 0xb0, 0xc0, + 0xb2, 0x2c, 0xf9, 0x82, 0x92, 0x25, 0x53, 0x56, 0x69, 0xa2, 0x25, 0x5f, 0x33, 0x6e, 0x67, 0x79, + 0x96, 0x52, 0xee, 0x4e, 0xc4, 0x44, 0x07, 0xa3, 0x3a, 0xb0, 0x9a, 0x73, 0x44, 0x9f, 0xd9, 0x4d, + 0x4a, 0xba, 0x9b, 0xc6, 0x2a, 0x29, 0xdd, 0x4d, 0xdf, 0x55, 0xe0, 0x6c, 0x6a, 0x61, 0xfb, 0xf9, + 0x6b, 0x56, 0xfd, 0x23, 0x25, 0xb4, 0x9f, 0xa4, 0xc9, 0xaf, 0xa7, 0x4d, 0xfe, 0xb9, 0x71, 0xeb, + 0xf4, 0x4c, 0xa3, 0x7f, 0x90, 0x6b, 0xf4, 0x2f, 0x8e, 0x5d, 0xf3, 0x4f, 0xd2, 0xe7, 0x3f, 0x2a, + 0x70, 0x22, 0x57, 0x80, 0x44, 0x3c, 0xa8, 0x24, 0xe3, 0x41, 0x1e, 0x4b, 0x46, 0x41, 0x3d, 0x8b, + 0x25, 0x69, 0xdc, 0xce, 0x83, 0x36, 0x7d, 0x68, 0x3c, 0xb5, 0x86, 0xa3, 0x21, 0x0f, 0x26, 0x09, + 0xbb, 0xfb, 0x0c, 0x72, 0x94, 0x68, 0xf2, 0x2a, 0x2c, 0x33, 0x47, 0x4f, 0x03, 0x9a, 0x88, 0x82, + 0x05, 0x95, 0x4b, 0xac, 0x8c, 0xc4, 0x36, 0x9c, 0x40, 0x6d, 0xc1, 0x52, 0xd8, 0xac, 0xb1, 0x29, + 0x4a, 0xb1, 0x94, 0xa3, 0x82, 0x9c, 0x72, 0x64, 0xc3, 0xdc, 0x06, 0x7e, 0x6c, 0xf5, 0xf0, 0xa7, + 0x92, 0xed, 0x7c, 0x0e, 0xaa, 0x2e, 0xf6, 0x86, 0x96, 0xef, 0x87, 0xb3, 0x7a, 0x45, 0x8b, 0x83, + 0xd4, 0xb3, 0x50, 0x59, 0xdf, 0x68, 0xf3, 0x2a, 0x33, 0x44, 0x55, 0xff, 0x6d, 0x0e, 0x16, 0x93, + 0x36, 0x76, 0x33, 0x95, 0x02, 0x75, 0x3a, 0x73, 0xfb, 0x2c, 0x63, 0xdf, 0xf8, 0x45, 0xb1, 0xa2, + 0x2a, 0xa4, 0xf3, 0x03, 0xc2, 0x55, 0x93, 0x58, 0x68, 0xad, 0xc1, 0x7c, 0xcf, 0x19, 0x0e, 0x0d, + 0xdb, 0x14, 0x39, 0xeb, 0xfc, 0x93, 0x48, 0x6a, 0x78, 0x7d, 0xb6, 0x63, 0x5c, 0xd1, 0xe8, 0x6f, + 0x62, 0x02, 0xc4, 0x19, 0x5a, 0x36, 0x4d, 0xa2, 0xa2, 0xbd, 0x54, 0xd1, 0x80, 0x83, 0x36, 0x2c, + 0x0f, 0x5d, 0x80, 0x12, 0xb6, 0x1f, 0x8b, 0xa3, 0x24, 0x69, 0xe7, 0x52, 0xac, 0x89, 0x34, 0x8a, + 0x81, 0x2e, 0xc2, 0xdc, 0x90, 0x98, 0x95, 0x38, 0x68, 0x5f, 0x4a, 0xe5, 0x76, 0x6b, 0x1c, 0x01, + 0xbd, 0x04, 0xf3, 0x26, 0xd5, 0x9e, 0x58, 0x04, 0x20, 0x29, 0x1d, 0x8b, 0x16, 0x69, 0x02, 0x05, + 0xbd, 0x13, 0x6e, 0x9b, 0x57, 0xd2, 0xe7, 0x59, 0x09, 0x35, 0x67, 0xee, 0x98, 0x6f, 0xc9, 0x6b, + 0x4f, 0x48, 0x6f, 0xbe, 0x27, 0xb9, 0x8c, 0x5f, 0x81, 0x9e, 0x80, 0xf2, 0xc0, 0xe9, 0x33, 0xeb, + 0xa9, 0xb2, 0x0b, 0x0f, 0x03, 0xa7, 0x4f, 0x8d, 0x67, 0x19, 0x66, 0xfd, 0xc0, 0xb4, 0x6c, 0x1a, + 0x4b, 0x95, 0x35, 0xf6, 0x41, 0x06, 0x29, 0xfd, 0xa1, 0x3b, 0x76, 0x0f, 0xaf, 0xd5, 0x68, 0x51, + 0x85, 0x42, 0xb6, 0xed, 0x1e, 0x5d, 0x53, 0x06, 0xc1, 0xc1, 0x5a, 0x9d, 0xc2, 0xc9, 0xcf, 0x68, + 0xf7, 0x7a, 0x31, 0x67, 0xf7, 0x3a, 0x21, 0x70, 0xc6, 0xee, 0x75, 0x23, 0x77, 0xce, 0x48, 0xd2, + 0x0a, 0x12, 0x12, 0x47, 0xae, 0x6f, 0xb4, 0x75, 0xd1, 0x35, 0x4b, 0xe9, 0x54, 0xf1, 0xd0, 0xec, + 0x35, 0x08, 0x7f, 0x7e, 0xae, 0x87, 0x07, 0x3f, 0x50, 0x60, 0x65, 0x9d, 0x1e, 0x9d, 0xc6, 0x7c, + 0xe3, 0x61, 0xb2, 0x8e, 0x5e, 0x09, 0x53, 0xc1, 0x32, 0xf2, 0x79, 0x92, 0x9a, 0x12, 0x99, 0x60, + 0xeb, 0x50, 0x17, 0x6c, 0x39, 0x71, 0x71, 0x8a, 0x3c, 0xb2, 0x9a, 0x1f, 0xff, 0x54, 0xdf, 0x84, + 0xd5, 0x94, 0xe4, 0xfc, 0x00, 0x2b, 0x79, 0xa7, 0x80, 0x09, 0x1e, 0xbf, 0x53, 0xa0, 0xde, 0x82, + 0xe3, 0xdd, 0xc0, 0xf0, 0x82, 0x54, 0xb3, 0xa7, 0xa0, 0xa5, 0x19, 0x62, 0x32, 0x2d, 0x4f, 0xe2, + 0xea, 0xc2, 0x72, 0x37, 0x70, 0xdc, 0x23, 0x30, 0x25, 0x7e, 0x87, 0xb4, 0xdc, 0x19, 0x89, 0x79, + 0x46, 0x7c, 0xaa, 0xab, 0x2c, 0x9f, 0x2d, 0x5d, 0xdb, 0x97, 0x60, 0x85, 0xa5, 0x93, 0x1d, 0xa5, + 0x11, 0x27, 0x44, 0x32, 0x5b, 0x9a, 0xef, 0x5d, 0x38, 0x26, 0x6d, 0xa9, 0xf3, 0xf4, 0x8b, 0x6b, + 0x72, 0xfa, 0x45, 0xfe, 0xe9, 0x45, 0x98, 0x7d, 0xf1, 0xbd, 0x42, 0xcc, 0x8f, 0xe7, 0x9c, 0xc1, + 0xbe, 0x26, 0x27, 0x5f, 0x9c, 0xcd, 0xe7, 0x2a, 0xe5, 0x5e, 0xa4, 0xad, 0xb3, 0x98, 0x61, 0x9d, + 0xbb, 0xa9, 0x03, 0xde, 0x52, 0x3a, 0x79, 0x26, 0x21, 0xe1, 0x67, 0x72, 0xb4, 0x7b, 0x8f, 0x25, + 0x68, 0x84, 0x55, 0x87, 0xa7, 0xba, 0xaf, 0x24, 0x4e, 0x75, 0x4f, 0x8e, 0x91, 0x34, 0x3c, 0xcf, + 0xfd, 0x5e, 0x09, 0x2a, 0x61, 0x59, 0x4a, 0xc3, 0x69, 0x55, 0x15, 0x32, 0x54, 0x15, 0x9f, 0x5f, + 0x8b, 0x47, 0x9c, 0x5f, 0x4b, 0x53, 0xcc, 0xaf, 0x27, 0xa1, 0x42, 0x7f, 0xd0, 0x9c, 0x7a, 0x36, + 0x5f, 0x96, 0x29, 0x40, 0xc3, 0x7b, 0x91, 0x89, 0xcd, 0x4d, 0x69, 0x62, 0x89, 0x64, 0x90, 0xf9, 0x64, 0x32, 0xc8, 0xcd, 0x70, 0xee, 0x2b, 0xa7, 0x0f, 0x5f, 0x42, 0x8e, 0x99, 0xb3, 0x5e, 0x62, - 0xc7, 0xb5, 0x92, 0xde, 0x71, 0x8d, 0xe8, 0x3f, 0xb7, 0x87, 0xc3, 0x5b, 0x2c, 0xc3, 0x23, 0x6e, - 0x67, 0xdc, 0x47, 0xbe, 0x21, 0x1d, 0xae, 0x29, 0x19, 0x73, 0x55, 0xe8, 0x17, 0xe2, 0x07, 0x6a, - 0xbb, 0xb0, 0x98, 0xcc, 0x0c, 0x3b, 0x94, 0x8f, 0xcb, 0x49, 0x51, 0xfd, 0xcd, 0x78, 0xc4, 0x97, - 0x93, 0x8f, 0x79, 0x33, 0x95, 0x3a, 0x30, 0xb6, 0x85, 0x5e, 0x95, 0xb3, 0x8c, 0x0e, 0x6d, 0x57, - 0xa9, 0x24, 0x23, 0x1a, 0x91, 0x18, 0x1e, 0x2f, 0x66, 0xc1, 0x79, 0x85, 0x43, 0x9a, 0x74, 0x65, - 0xb0, 0x67, 0xd9, 0x96, 0xbf, 0xcf, 0xca, 0xa7, 0xd8, 0xca, 0x40, 0x80, 0x9a, 0x74, 0xd7, 0x12, - 0x3f, 0xb7, 0x02, 0xbd, 0xe3, 0x98, 0x98, 0x5a, 0xed, 0xa4, 0x56, 0x26, 0x80, 0x35, 0xc7, 0xc4, - 0xd1, 0x78, 0x2a, 0x1f, 0x76, 0x3c, 0x55, 0x12, 0xe3, 0x69, 0x11, 0xa6, 0x3c, 0x6c, 0xf8, 0x8e, - 0xcd, 0x36, 0x33, 0x34, 0xfe, 0x45, 0x3a, 0xa2, 0x8f, 0x7d, 0x9f, 0xd4, 0xc1, 0x03, 0x30, 0xfe, - 0x19, 0x0b, 0x16, 0x67, 0x86, 0x04, 0x8b, 0x43, 0xb2, 0x3d, 0x13, 0xc1, 0x62, 0x6d, 0x48, 0xb0, - 0x38, 0x56, 0xb2, 0x67, 0x14, 0x16, 0xcf, 0x8e, 0x0a, 0x8b, 0xe3, 0x71, 0xe5, 0x9c, 0x1c, 0x57, - 0xde, 0x8e, 0xaf, 0x50, 0xeb, 0xe9, 0xb3, 0xef, 0xe1, 0x77, 0x48, 0x3e, 0xc3, 0x01, 0xfc, 0xf7, - 0x0a, 0x2c, 0xa5, 0x06, 0x1c, 0x1f, 0xc2, 0xaf, 0x27, 0xd2, 0x48, 0x87, 0xe6, 0x6f, 0x8a, 0x2c, - 0xd2, 0xa6, 0x94, 0x45, 0x7a, 0x69, 0x18, 0x49, 0x4e, 0x12, 0xe9, 0xd1, 0x13, 0x3b, 0xbf, 0xad, - 0x00, 0xca, 0x58, 0x83, 0xdf, 0x14, 0xd1, 0xfa, 0x21, 0x76, 0xcb, 0x78, 0xc0, 0xfe, 0x6e, 0x14, - 0xb0, 0x17, 0x0e, 0xb3, 0xef, 0x10, 0x66, 0x9c, 0xfc, 0xa4, 0x00, 0xa7, 0x77, 0x5d, 0x33, 0x11, - 0x46, 0x72, 0xac, 0xf1, 0x3d, 0xdb, 0x4d, 0x39, 0x5d, 0xe6, 0x88, 0x4d, 0x28, 0x1e, 0xa5, 0x09, - 0xe8, 0xeb, 0x59, 0x09, 0x4d, 0xb7, 0xa5, 0xa3, 0xc7, 0xe1, 0x0d, 0x1c, 0x31, 0x7d, 0x7d, 0x5c, - 0x13, 0x56, 0xe1, 0x4c, 0xbe, 0x00, 0x3c, 0xe4, 0xfc, 0xff, 0x30, 0xb7, 0xf1, 0x1c, 0x77, 0xb6, - 0x0f, 0xec, 0xce, 0x21, 0xb4, 0x5e, 0x87, 0x62, 0xa7, 0x6f, 0xf2, 0xd3, 0x11, 0xf2, 0x33, 0x1e, - 0x45, 0x17, 0xe5, 0x28, 0x5a, 0x87, 0x7a, 0x54, 0x03, 0x1f, 0x40, 0x8b, 0x64, 0x00, 0x99, 0x04, - 0x99, 0x30, 0x9f, 0xd1, 0xf8, 0x17, 0x87, 0x63, 0x8f, 0x5d, 0x50, 0x61, 0x70, 0xec, 0x79, 0xb2, - 0xd7, 0x2e, 0xca, 0x5e, 0x5b, 0xfd, 0x9e, 0x02, 0x55, 0x52, 0xc3, 0xc7, 0x92, 0x9f, 0x2f, 0x65, - 0x8b, 0xd1, 0x52, 0x36, 0x5c, 0x11, 0x97, 0xe2, 0x2b, 0xe2, 0x48, 0xf2, 0x49, 0x0a, 0x4e, 0x4b, - 0x3e, 0x15, 0xc2, 0xb1, 0xe7, 0xa9, 0x67, 0x60, 0x86, 0xc9, 0xc6, 0x5b, 0x5e, 0x87, 0xe2, 0xc0, - 0xeb, 0x89, 0xfe, 0x1b, 0x78, 0x3d, 0xf5, 0x5b, 0x0a, 0xd4, 0x9a, 0x41, 0x60, 0x74, 0xf6, 0x0f, - 0xd1, 0x80, 0x50, 0xb8, 0x42, 0x5c, 0xb8, 0x74, 0x23, 0x22, 0x71, 0x4b, 0x39, 0xe2, 0x4e, 0x4a, - 0xe2, 0xaa, 0x30, 0x2b, 0x64, 0xc9, 0x15, 0x78, 0x13, 0x50, 0xdb, 0xf1, 0x82, 0xf7, 0x1c, 0xef, - 0x99, 0xe1, 0x99, 0x87, 0x5b, 0xb5, 0x22, 0x28, 0xf1, 0x27, 0x03, 0x8a, 0xe7, 0x26, 0x35, 0xfa, - 0x5b, 0x7d, 0x05, 0x8e, 0x49, 0xfc, 0x72, 0x2b, 0xbe, 0x05, 0x55, 0x3a, 0x0b, 0xf3, 0x05, 0xcd, - 0xc5, 0xf8, 0x79, 0xfd, 0x88, 0xd9, 0x5a, 0x5d, 0x87, 0x79, 0x12, 0x8f, 0x51, 0x78, 0xe8, 0x5f, - 0xae, 0x24, 0x62, 0xfe, 0xa5, 0x14, 0x8b, 0x44, 0xbc, 0xff, 0x33, 0x05, 0x26, 0x29, 0x3c, 0x15, - 0x23, 0xad, 0x90, 0x79, 0xce, 0x75, 0xf4, 0xc0, 0xe8, 0x86, 0xcf, 0x31, 0x10, 0xc0, 0x8e, 0xd1, - 0xa5, 0x27, 0x3a, 0xb4, 0xd0, 0xb4, 0xba, 0xd8, 0x0f, 0xc4, 0x09, 0x61, 0x95, 0xc0, 0xd6, 0x19, - 0x88, 0x28, 0x86, 0x1e, 0xa4, 0x96, 0xe8, 0x79, 0x29, 0xfd, 0x8d, 0xce, 0xb1, 0xbb, 0x8d, 0xc3, - 0x8f, 0xc5, 0xe8, 0x9d, 0xc7, 0x06, 0x94, 0x13, 0xe7, 0x59, 0xe1, 0x37, 0x3a, 0x0f, 0x25, 0xba, - 0xff, 0x3c, 0x3d, 0x4c, 0x4b, 0x14, 0x85, 0x58, 0x85, 0x6b, 0xd9, 0x36, 0x36, 0x69, 0x00, 0x54, - 0xd6, 0xf8, 0x97, 0xfa, 0x2e, 0xa0, 0xb8, 0xf2, 0x78, 0x07, 0x9d, 0x87, 0x29, 0xaa, 0x5b, 0x11, - 0xc4, 0xce, 0xa7, 0x58, 0x6b, 0x1c, 0x41, 0xfd, 0x1a, 0x20, 0x56, 0x97, 0x14, 0xb8, 0x1e, 0xa6, - 0x03, 0x87, 0x84, 0xb0, 0x7f, 0xa6, 0xc0, 0x31, 0x89, 0x3b, 0x97, 0xef, 0x15, 0x99, 0x7d, 0x86, - 0x78, 0x9c, 0xf5, 0xdb, 0xd2, 0xcc, 0x7c, 0x3e, 0x2d, 0xc6, 0x2f, 0x68, 0x56, 0xfe, 0x07, 0x05, - 0xa0, 0x39, 0x08, 0xf6, 0xf9, 0x46, 0x6b, 0xbc, 0x13, 0x95, 0x44, 0x27, 0x36, 0xa0, 0xec, 0x1a, - 0xbe, 0xff, 0xcc, 0xf1, 0xc4, 0x22, 0x32, 0xfc, 0xa6, 0xdb, 0xa3, 0x03, 0xfe, 0x46, 0x43, 0x45, - 0xa3, 0xbf, 0xd1, 0x4b, 0x30, 0xcb, 0xde, 0x09, 0xd1, 0x0d, 0xd3, 0xf4, 0x44, 0x0e, 0x60, 0x45, - 0xab, 0x31, 0x68, 0x93, 0x01, 0x09, 0x9a, 0x45, 0x4f, 0x23, 0x82, 0x03, 0x3d, 0x70, 0x9e, 0x60, - 0x9b, 0x2f, 0x0c, 0x6b, 0x02, 0xba, 0x43, 0x80, 0xec, 0xb8, 0xb1, 0x6b, 0xf9, 0x81, 0x27, 0xd0, - 0xc4, 0xa1, 0x29, 0x87, 0x52, 0x34, 0xf5, 0x8f, 0x15, 0xa8, 0xb7, 0x07, 0xbd, 0x1e, 0x53, 0xee, - 0x51, 0x3a, 0xf9, 0x02, 0x6f, 0x4a, 0x21, 0x6d, 0xf2, 0x91, 0xa2, 0x78, 0x13, 0x3f, 0x91, 0xbd, - 0xac, 0xab, 0x30, 0x1f, 0x93, 0x98, 0x1b, 0x8e, 0x14, 0xd9, 0x2b, 0x72, 0x64, 0xaf, 0x36, 0x01, - 0xb1, 0xed, 0x9b, 0x23, 0xb7, 0x52, 0x3d, 0x0e, 0xc7, 0x24, 0x16, 0x7c, 0x2a, 0xbe, 0x00, 0x35, - 0x9e, 0x8f, 0xc6, 0x0d, 0xe2, 0x04, 0x94, 0x89, 0x4b, 0xed, 0x58, 0xa6, 0xc8, 0x90, 0x98, 0x76, - 0x1d, 0x73, 0xcd, 0x32, 0x3d, 0xf5, 0x4b, 0x50, 0xe3, 0x17, 0xde, 0x39, 0xee, 0x1d, 0x98, 0xe5, - 0xe7, 0x83, 0xba, 0x74, 0x43, 0xf4, 0x44, 0x46, 0xd2, 0xa3, 0x50, 0x85, 0x1d, 0xff, 0x54, 0xbf, - 0x0e, 0x0d, 0x16, 0x2d, 0x48, 0x8c, 0x45, 0x03, 0xef, 0x80, 0xb8, 0x3e, 0x31, 0x84, 0xbf, 0x4c, - 0x59, 0xf3, 0xe2, 0x9f, 0xea, 0x29, 0x58, 0xc9, 0xe4, 0xcf, 0x5b, 0xef, 0x42, 0x3d, 0x2a, 0x60, - 0xd7, 0x18, 0xc3, 0xb4, 0x0f, 0x25, 0x96, 0xf6, 0xb1, 0x18, 0xc6, 0xde, 0x05, 0x31, 0x73, 0xd1, - 0xf0, 0x3a, 0x5a, 0x71, 0x15, 0xf3, 0x56, 0x5c, 0x25, 0x69, 0xc5, 0xa5, 0x3e, 0x0c, 0x75, 0xc8, - 0xd7, 0xbd, 0xb7, 0xe9, 0xca, 0x9c, 0xd5, 0x2d, 0x9c, 0xda, 0xc9, 0xec, 0xf6, 0x31, 0x24, 0x2d, - 0x86, 0xaf, 0x9e, 0x87, 0x9a, 0xec, 0xde, 0x62, 0x1e, 0x4b, 0x49, 0x79, 0xac, 0xd9, 0x84, 0xb3, - 0x7a, 0x2d, 0xb1, 0xa4, 0xc8, 0xd2, 0x6b, 0x62, 0x41, 0x71, 0x43, 0x72, 0x5b, 0x2f, 0x4a, 0x47, - 0xf4, 0xbf, 0x20, 0x8f, 0xb5, 0xc0, 0xfd, 0xf8, 0x7b, 0x3e, 0xa1, 0xe7, 0x0d, 0x55, 0x5f, 0x80, - 0xea, 0x6e, 0xde, 0xb3, 0x23, 0x25, 0x91, 0x57, 0xf6, 0x26, 0x2c, 0xbc, 0x67, 0xf5, 0xb0, 0x7f, - 0xe0, 0x07, 0xb8, 0xdf, 0xa2, 0xee, 0x65, 0xcf, 0xc2, 0x1e, 0x5a, 0x05, 0xa0, 0xab, 0x48, 0xd7, - 0xb1, 0xc2, 0xa7, 0x16, 0x62, 0x10, 0xf5, 0xc7, 0x0a, 0xcc, 0x45, 0x84, 0xe3, 0xe4, 0x04, 0xbe, - 0x01, 0x93, 0x7b, 0xbe, 0xd8, 0x6d, 0x4b, 0x9c, 0x41, 0x64, 0x89, 0xa0, 0x95, 0xf6, 0xfc, 0x96, - 0x89, 0xde, 0x04, 0x18, 0xf8, 0xd8, 0xe4, 0xc7, 0x7e, 0x23, 0xb2, 0x34, 0x2b, 0x04, 0x95, 0x1d, - 0x1c, 0xde, 0x80, 0xaa, 0x65, 0x3b, 0x26, 0xa6, 0x47, 0xc2, 0xe6, 0xa8, 0x0c, 0x4d, 0x60, 0xb8, - 0xbb, 0x3e, 0x36, 0xd5, 0xdf, 0x8b, 0x0e, 0x76, 0x3f, 0xcf, 0x2d, 0x54, 0x75, 0x3e, 0xbf, 0x8a, - 0x5e, 0xe7, 0x26, 0x7b, 0x1f, 0xe6, 0x99, 0x9b, 0xdc, 0x0b, 0xab, 0xcc, 0xbc, 0xb9, 0x92, 0x68, - 0x9b, 0x56, 0xb7, 0x78, 0x64, 0x25, 0x88, 0xd4, 0x5b, 0x70, 0x3c, 0x91, 0x4a, 0x3e, 0xfe, 0x76, - 0xfa, 0xfb, 0x89, 0x7d, 0xb1, 0x68, 0x48, 0x5d, 0x95, 0x6f, 0x30, 0x0d, 0x4b, 0xfa, 0xe7, 0x97, - 0x69, 0x76, 0xe1, 0x84, 0xb4, 0x69, 0x27, 0xc9, 0x72, 0x23, 0x11, 0x2c, 0x9e, 0xc9, 0xe7, 0x97, - 0x88, 0x1a, 0xff, 0x4b, 0x81, 0x85, 0x2c, 0x84, 0x23, 0x6e, 0x18, 0x7f, 0x35, 0xe7, 0xf6, 0xe3, - 0xeb, 0xa3, 0x04, 0xfa, 0x54, 0x36, 0xd8, 0x37, 0xd9, 0xdd, 0xa9, 0xd1, 0x7d, 0x52, 0x1c, 0xaf, - 0x4f, 0x7e, 0x56, 0x88, 0x1d, 0x8a, 0x0c, 0xb9, 0xdf, 0xf4, 0x31, 0x36, 0x29, 0xd7, 0x12, 0xd7, - 0x9b, 0x2e, 0x66, 0x12, 0x8e, 0xb8, 0xdd, 0xa4, 0x65, 0x6d, 0x06, 0x5c, 0x1d, 0xc5, 0xe9, 0x73, - 0xbb, 0x7f, 0xfd, 0xdf, 0x0a, 0xcc, 0xca, 0x1d, 0x82, 0xde, 0xcd, 0xb8, 0xdb, 0x74, 0x7a, 0x44, - 0x03, 0xa5, 0xab, 0x4d, 0xfc, 0x2e, 0x51, 0x61, 0xfc, 0xbb, 0x44, 0xc5, 0xf1, 0xee, 0x12, 0xdd, - 0x85, 0xd9, 0x67, 0x9e, 0x15, 0x18, 0x8f, 0x7b, 0x58, 0xef, 0x19, 0x07, 0xd8, 0xe3, 0x5e, 0x78, - 0xa8, 0x1b, 0xaa, 0x09, 0x92, 0x07, 0x84, 0x42, 0xfd, 0x56, 0x01, 0x8e, 0x67, 0x5e, 0x6b, 0xf9, - 0xf8, 0xed, 0xbe, 0x14, 0x6f, 0xf7, 0x61, 0xee, 0x0a, 0x15, 0x0f, 0x75, 0x57, 0xa8, 0x95, 0xa3, - 0x85, 0xac, 0xa3, 0xf4, 0x11, 0xca, 0xf8, 0x0b, 0x05, 0xca, 0x42, 0xa8, 0x91, 0x37, 0x77, 0x96, - 0x06, 0x04, 0x4d, 0xa7, 0x69, 0xd8, 0xb6, 0x61, 0x3b, 0xba, 0x8f, 0x49, 0x58, 0x34, 0xf2, 0x9e, - 0xc4, 0x02, 0xa5, 0x5b, 0x73, 0x3c, 0xbc, 0x69, 0xd8, 0xce, 0x36, 0x23, 0x42, 0x4d, 0xa8, 0x33, - 0x7e, 0x94, 0x15, 0x61, 0x3a, 0x72, 0xaa, 0x9a, 0xa5, 0x04, 0x84, 0x09, 0x61, 0xe6, 0xab, 0x3f, - 0x50, 0x60, 0x2e, 0xa1, 0xd9, 0x5f, 0xbe, 0x46, 0xfc, 0x6e, 0x11, 0xaa, 0xb1, 0x5e, 0x1e, 0xd1, - 0x80, 0x35, 0x98, 0x17, 0xe9, 0x30, 0x3e, 0x0e, 0xc6, 0xbb, 0xa7, 0x32, 0xc7, 0x29, 0xb6, 0x71, - 0xc0, 0x22, 0x99, 0x3b, 0x30, 0x67, 0x3c, 0x35, 0xac, 0x1e, 0xb5, 0xa0, 0xb1, 0x82, 0x84, 0xd9, - 0x10, 0x3f, 0x8c, 0x85, 0x58, 0xbb, 0xc7, 0xba, 0xad, 0x02, 0x14, 0x37, 0xba, 0x34, 0xe4, 0xfb, - 0xb1, 0x9c, 0xab, 0xa1, 0x97, 0x86, 0x7c, 0x3f, 0xac, 0x8f, 0xe6, 0xa0, 0xd3, 0xdb, 0x52, 0x3e, - 0x7f, 0x62, 0x23, 0xbf, 0x3e, 0x82, 0xfb, 0x1e, 0x45, 0x25, 0x0a, 0xeb, 0x1b, 0x1f, 0x3a, 0x9e, - 0x1e, 0xa7, 0x9f, 0x1e, 0xa1, 0x30, 0x4a, 0xd1, 0x0e, 0x99, 0xa8, 0xff, 0xa3, 0x00, 0x4a, 0x0f, - 0xc8, 0x5f, 0x9a, 0xae, 0x8a, 0x37, 0xbd, 0x34, 0xb6, 0xea, 0xd4, 0x77, 0xe0, 0x84, 0x86, 0x1d, - 0x17, 0xdb, 0xa1, 0xdf, 0x7b, 0xe0, 0x74, 0x0f, 0x11, 0xb1, 0x9d, 0x84, 0x46, 0x16, 0x3d, 0x5f, - 0x07, 0x0e, 0xa0, 0xb1, 0xb6, 0x8f, 0x3b, 0x4f, 0x68, 0xf4, 0x7f, 0x94, 0x7c, 0x8e, 0x06, 0x94, - 0x7b, 0x4e, 0x87, 0x3d, 0xd6, 0xc9, 0xb7, 0x4a, 0xc4, 0xf7, 0x90, 0x5d, 0xea, 0x53, 0xb0, 0x92, - 0x59, 0x2d, 0x97, 0x0a, 0x41, 0xfd, 0x1e, 0x0e, 0x36, 0x9e, 0x62, 0x3b, 0x0c, 0x08, 0xd5, 0x1f, - 0x16, 0x62, 0xa1, 0x27, 0x2d, 0x3a, 0x44, 0x1e, 0x0c, 0x6a, 0xc3, 0x42, 0x84, 0x82, 0x09, 0x35, - 0x7b, 0x3a, 0x8f, 0x3d, 0x3a, 0x99, 0x7d, 0x46, 0x46, 0x2b, 0xa1, 0x2f, 0xe6, 0x45, 0x8f, 0x82, - 0x84, 0xb0, 0xc4, 0xc9, 0x69, 0x31, 0x79, 0x72, 0xfa, 0x3e, 0xa0, 0x78, 0x70, 0xc9, 0x57, 0x9b, - 0xa5, 0x31, 0xde, 0x41, 0xa9, 0xbb, 0xc9, 0x17, 0x7b, 0x72, 0x5e, 0x33, 0x99, 0x3c, 0xd2, 0x6b, - 0x26, 0xea, 0x2a, 0x9c, 0x24, 0x21, 0xe3, 0x43, 0x1c, 0x78, 0x56, 0x67, 0x1d, 0xfb, 0x1d, 0xcf, - 0x72, 0x03, 0x27, 0x4c, 0xcd, 0x50, 0x75, 0x38, 0x95, 0x53, 0xce, 0xd5, 0xfd, 0x0e, 0x54, 0xcd, - 0x08, 0x9c, 0xb5, 0x72, 0x4f, 0xd2, 0x6a, 0x71, 0x02, 0xf5, 0x03, 0xa8, 0x27, 0x11, 0x32, 0x33, - 0x39, 0x11, 0x94, 0xf6, 0x71, 0xcf, 0x15, 0x57, 0x53, 0xc8, 0x6f, 0xa2, 0x75, 0x16, 0x8d, 0x3f, - 0xc1, 0x07, 0x62, 0x67, 0xb7, 0x42, 0x21, 0x5f, 0xc4, 0x07, 0x61, 0xdb, 0xa4, 0xeb, 0xf5, 0x9e, - 0xd5, 0x49, 0xb6, 0x2d, 0xa3, 0x3c, 0x6a, 0x1b, 0xe9, 0xb6, 0x3e, 0x03, 0xf3, 0xb6, 0x9d, 0xca, - 0xbd, 0xba, 0x4f, 0x69, 0xc1, 0x75, 0x4c, 0xfe, 0x5b, 0xfd, 0x13, 0x05, 0xe6, 0x53, 0x18, 0x63, - 0xee, 0xd6, 0xbf, 0x0a, 0xd3, 0xa2, 0xde, 0x42, 0x3a, 0xdd, 0x91, 0xf1, 0xd2, 0x04, 0x0a, 0x6a, - 0xc1, 0x7c, 0x64, 0xd1, 0x82, 0xae, 0x98, 0xee, 0x8b, 0x78, 0x28, 0x4e, 0xc5, 0xad, 0x77, 0x12, - 0x10, 0xb5, 0x03, 0xf5, 0x24, 0xd6, 0x38, 0x63, 0xea, 0x50, 0xf2, 0xaa, 0x7f, 0xab, 0xc0, 0x14, - 0x83, 0x65, 0x76, 0xb6, 0xe4, 0xc5, 0x0b, 0x49, 0x2f, 0xfe, 0x16, 0x54, 0x19, 0x1f, 0x3d, 0xbc, - 0x98, 0x34, 0x2b, 0x6f, 0x58, 0x32, 0xd6, 0x74, 0xb4, 0x42, 0x3f, 0xfc, 0x4d, 0x9a, 0xc1, 0xec, - 0x85, 0xc6, 0xda, 0x22, 0xa9, 0xb5, 0x4a, 0x61, 0xd4, 0xd7, 0x92, 0x78, 0x91, 0x47, 0xe5, 0x23, - 0xe6, 0x41, 0x86, 0x75, 0xe1, 0x65, 0x28, 0x8b, 0x67, 0x9a, 0xd1, 0x34, 0x14, 0x77, 0xd6, 0xda, - 0xf5, 0x09, 0xf2, 0x63, 0x77, 0xbd, 0x5d, 0x57, 0x50, 0x19, 0x4a, 0xdb, 0x6b, 0x3b, 0xed, 0x7a, - 0xe1, 0x42, 0x1f, 0xea, 0xc9, 0x97, 0x8a, 0xd1, 0x12, 0x1c, 0x6b, 0x6b, 0x5b, 0xed, 0xe6, 0xbd, - 0xe6, 0x4e, 0x6b, 0x6b, 0x53, 0x6f, 0x6b, 0xad, 0x47, 0xcd, 0x9d, 0x8d, 0xfa, 0x04, 0x3a, 0x0b, - 0xa7, 0xe2, 0x05, 0xf7, 0xb7, 0xb6, 0x77, 0xf4, 0x9d, 0x2d, 0x7d, 0x6d, 0x6b, 0x73, 0xa7, 0xd9, - 0xda, 0xdc, 0xd0, 0xea, 0x0a, 0x3a, 0x05, 0x27, 0xe2, 0x28, 0x77, 0x5b, 0xeb, 0x2d, 0x6d, 0x63, - 0x8d, 0xfc, 0x6e, 0x3e, 0xa8, 0x17, 0x2e, 0xbc, 0x0d, 0x35, 0xe9, 0x02, 0x03, 0x11, 0xa9, 0xbd, - 0xb5, 0x5e, 0x9f, 0x40, 0x35, 0xa8, 0xc4, 0xf9, 0x94, 0xa1, 0xb4, 0xb9, 0xb5, 0xbe, 0x51, 0x2f, - 0x20, 0x80, 0xa9, 0x9d, 0xa6, 0x76, 0x6f, 0x63, 0xa7, 0x5e, 0xbc, 0x70, 0x2b, 0xf9, 0xb8, 0x02, - 0x46, 0xf3, 0x50, 0xdb, 0x6e, 0x6e, 0xae, 0xdf, 0xdd, 0xfa, 0x8a, 0xae, 0x6d, 0x34, 0xd7, 0x3f, - 0xa8, 0x4f, 0xa0, 0x05, 0xa8, 0x0b, 0xd0, 0xe6, 0xd6, 0x0e, 0x83, 0x2a, 0x17, 0x9e, 0x24, 0xd6, - 0x2e, 0x18, 0x1d, 0x87, 0xf9, 0xb0, 0x4a, 0x7d, 0x4d, 0xdb, 0x68, 0xee, 0x6c, 0x10, 0x49, 0x24, - 0xb0, 0xb6, 0xbb, 0xb9, 0xd9, 0xda, 0xbc, 0x57, 0x57, 0x08, 0xd7, 0x08, 0xbc, 0xf1, 0x95, 0x16, - 0x41, 0x2e, 0xc8, 0xc8, 0xbb, 0x9b, 0x5f, 0xdc, 0xdc, 0xfa, 0xf2, 0x66, 0xbd, 0x78, 0xe1, 0x57, - 0xe3, 0x67, 0xeb, 0x91, 0x37, 0x5e, 0x81, 0xa5, 0x54, 0x8d, 0xfa, 0xc6, 0xa3, 0x8d, 0xcd, 0x9d, - 0xfa, 0x84, 0x5c, 0xb8, 0xbd, 0xd3, 0xd4, 0xa2, 0x42, 0x25, 0x59, 0xb8, 0xd5, 0x6e, 0x87, 0x85, - 0x05, 0xb9, 0x70, 0x7d, 0xe3, 0xc1, 0x46, 0x44, 0x59, 0xbc, 0xf0, 0x22, 0x40, 0x64, 0x75, 0xa8, - 0x0a, 0xd3, 0x6b, 0x5b, 0xbb, 0x9b, 0x3b, 0x1b, 0x5a, 0x7d, 0x02, 0x55, 0x60, 0xf2, 0x5e, 0x73, - 0xf7, 0xde, 0x46, 0x5d, 0xb9, 0xf6, 0xfb, 0x0b, 0xe1, 0x6b, 0xa9, 0xdb, 0xd8, 0xa3, 0xb9, 0xe0, - 0xeb, 0x30, 0x2d, 0x5e, 0x2b, 0x97, 0x96, 0xe4, 0xf2, 0xeb, 0xea, 0x8d, 0x95, 0xcc, 0x32, 0x3e, - 0x45, 0x4e, 0xa0, 0x47, 0x74, 0x43, 0x35, 0xf6, 0x5e, 0xd1, 0x99, 0xc4, 0x26, 0x66, 0xea, 0x59, - 0xa4, 0xc6, 0xd9, 0x21, 0x18, 0x21, 0xdf, 0x0f, 0x60, 0x56, 0x7e, 0x18, 0x10, 0x9d, 0x95, 0x37, - 0x3b, 0x33, 0xde, 0x1c, 0x6c, 0xa8, 0xc3, 0x50, 0x42, 0xd6, 0x3a, 0xd4, 0x93, 0x0f, 0x03, 0x22, - 0x29, 0x87, 0x20, 0xe7, 0xdd, 0xc1, 0xc6, 0x8b, 0xc3, 0x91, 0xe2, 0x15, 0xa4, 0xde, 0xbb, 0x7b, - 0x61, 0xf8, 0x0b, 0x62, 0x19, 0x15, 0xe4, 0x3d, 0x33, 0xc6, 0x94, 0x23, 0x4f, 0x20, 0x28, 0xf1, - 0xc4, 0x5c, 0xc6, 0x6b, 0x54, 0xb2, 0x72, 0xb2, 0x5f, 0x22, 0x52, 0x27, 0xd0, 0xff, 0x83, 0xb9, - 0x44, 0xa2, 0x2f, 0x92, 0x08, 0xb3, 0xf3, 0x97, 0x1b, 0x2f, 0x0c, 0xc5, 0x91, 0x7b, 0x35, 0x9e, - 0xcc, 0x9b, 0xec, 0xd5, 0x8c, 0x24, 0xe1, 0x64, 0xaf, 0x66, 0xe6, 0x02, 0x53, 0x43, 0x94, 0x12, - 0x77, 0x65, 0x43, 0xcc, 0x4a, 0x14, 0x6e, 0x9c, 0x1d, 0x82, 0x11, 0x57, 0x48, 0x22, 0x75, 0x57, - 0x56, 0x48, 0x76, 0x52, 0x70, 0xe3, 0x85, 0xa1, 0x38, 0xc9, 0x9e, 0x8c, 0x52, 0x06, 0xd3, 0x3d, - 0x99, 0x4a, 0x5b, 0x4d, 0xf7, 0x64, 0x3a, 0xe3, 0x90, 0xf7, 0x64, 0x22, 0xc9, 0x4f, 0x1d, 0x9a, - 0x80, 0x94, 0xd5, 0x93, 0xd9, 0x49, 0x4a, 0xea, 0x04, 0x7a, 0x06, 0xcb, 0x79, 0x79, 0x26, 0xe8, - 0xe2, 0x21, 0xd2, 0x61, 0x1a, 0xaf, 0x8e, 0x87, 0x1c, 0x56, 0x8c, 0x01, 0xa5, 0x57, 0x12, 0xe8, - 0x25, 0x59, 0xdd, 0x39, 0x2b, 0x95, 0xc6, 0xcb, 0xa3, 0xd0, 0xc2, 0x6a, 0xee, 0x41, 0x59, 0x64, - 0xb0, 0x20, 0xc9, 0x05, 0x26, 0x32, 0x67, 0x1a, 0x27, 0xb3, 0x0b, 0x43, 0x46, 0x5f, 0x80, 0x12, - 0x81, 0xa2, 0xa5, 0x24, 0x9e, 0x60, 0xb0, 0x9c, 0x2e, 0x08, 0x89, 0x9b, 0x30, 0xc5, 0x52, 0x33, - 0x90, 0x74, 0x36, 0x24, 0xa5, 0x8e, 0x34, 0x1a, 0x59, 0x45, 0x21, 0x8b, 0x36, 0xfb, 0xdf, 0x0f, - 0x3c, 0xd3, 0x02, 0xad, 0x26, 0x9f, 0x04, 0x96, 0x53, 0x3a, 0x1a, 0xa7, 0x73, 0xcb, 0xe3, 0x36, - 0x9b, 0xd8, 0x2d, 0x3b, 0x3b, 0x64, 0x4b, 0x37, 0xcb, 0x66, 0xb3, 0x37, 0x8a, 0x59, 0xe7, 0xa6, - 0x37, 0x92, 0xe5, 0xce, 0xcd, 0xdd, 0xac, 0x97, 0x3b, 0x37, 0x7f, 0x3f, 0x9a, 0x0d, 0x8d, 0xe4, - 0xdb, 0x3e, 0xea, 0xb0, 0x77, 0xb7, 0xb2, 0x86, 0x46, 0xce, 0x7b, 0x5e, 0xea, 0x04, 0xda, 0x87, - 0x63, 0x19, 0x0f, 0x7e, 0xa1, 0x97, 0xf3, 0xfd, 0xaf, 0x54, 0xcb, 0x2b, 0x23, 0xf1, 0xe2, 0x35, - 0x65, 0x1c, 0xaf, 0xca, 0x35, 0xe5, 0x9f, 0xef, 0xca, 0x35, 0x0d, 0x3b, 0xa7, 0xa5, 0x86, 0xc8, - 0x7d, 0xc8, 0x89, 0xac, 0x33, 0xc7, 0x0c, 0x43, 0x4c, 0x79, 0x8c, 0x7d, 0x38, 0x96, 0xb1, 0xda, - 0x96, 0x85, 0xcd, 0xdf, 0x05, 0x90, 0x85, 0x1d, 0xb6, 0x6c, 0x9f, 0x40, 0x5f, 0x05, 0x74, 0x0f, - 0x07, 0x72, 0x7c, 0xe6, 0x23, 0x69, 0xa0, 0x26, 0x17, 0xf6, 0x39, 0xf6, 0x29, 0xad, 0xf0, 0xd5, - 0x89, 0xab, 0x0a, 0xb2, 0xd9, 0x5d, 0x82, 0xd4, 0xba, 0x14, 0x9d, 0x4b, 0x76, 0x5b, 0xde, 0xd2, - 0xb6, 0x71, 0x7e, 0x0c, 0xcc, 0xb0, 0x2d, 0x76, 0xf2, 0x71, 0x49, 0xb1, 0x34, 0x3a, 0x97, 0x6f, - 0x26, 0xf2, 0x72, 0x33, 0x5d, 0x5f, 0xee, 0xc2, 0x53, 0x9d, 0xb8, 0xf6, 0x3b, 0x45, 0x98, 0x61, - 0xc9, 0x0b, 0x3c, 0x4c, 0x7c, 0x08, 0x10, 0xe5, 0x01, 0xa1, 0x53, 0x49, 0x5e, 0x52, 0x72, 0x55, - 0x63, 0x35, 0xaf, 0x38, 0xee, 0x8e, 0x62, 0xf9, 0x35, 0xb2, 0x3b, 0x4a, 0xa7, 0x0b, 0xc9, 0xee, - 0x28, 0x23, 0x31, 0x47, 0x9d, 0x40, 0xef, 0x43, 0x25, 0x4c, 0xe7, 0x90, 0x3b, 0x39, 0x99, 0x97, - 0xd2, 0x38, 0x95, 0x53, 0x1a, 0x97, 0x2e, 0x96, 0xa5, 0x21, 0x4b, 0x97, 0xce, 0x00, 0x91, 0xa5, - 0xcb, 0x4a, 0xef, 0x88, 0xda, 0xcb, 0xce, 0x51, 0x33, 0xda, 0x2b, 0x1d, 0xab, 0x67, 0xb4, 0x57, - 0x3e, 0x80, 0x55, 0x27, 0xee, 0xde, 0xf9, 0xd1, 0x4f, 0x57, 0x95, 0x1f, 0xff, 0x74, 0x75, 0xe2, - 0x57, 0x3e, 0x5a, 0x55, 0x7e, 0xf4, 0xd1, 0xaa, 0xf2, 0x8f, 0x1f, 0xad, 0x2a, 0x3f, 0xf9, 0x68, - 0x55, 0xf9, 0xf6, 0xbf, 0xaf, 0x4e, 0x7c, 0x55, 0x7d, 0x72, 0xc3, 0xbf, 0x6c, 0x39, 0x57, 0x3a, - 0x9e, 0x75, 0xc9, 0x70, 0xad, 0x2b, 0xee, 0x93, 0xee, 0x15, 0xc3, 0xb5, 0xfc, 0x2b, 0x9c, 0xef, - 0x95, 0xa7, 0xaf, 0x3d, 0x9e, 0xa2, 0xff, 0xd7, 0xe7, 0xf5, 0xff, 0x0b, 0x00, 0x00, 0xff, 0xff, - 0x03, 0x38, 0xaf, 0xe9, 0x91, 0x69, 0x00, 0x00, + 0xc7, 0xb5, 0x92, 0xde, 0x71, 0x8d, 0xe8, 0xbf, 0xb0, 0x87, 0xc3, 0xdb, 0x2c, 0xc3, 0x23, 0x6e, + 0x67, 0xdc, 0x47, 0xbe, 0x26, 0x1d, 0xae, 0x29, 0x19, 0x73, 0x55, 0xe8, 0x17, 0xe2, 0x07, 0x6a, + 0xbb, 0xb0, 0x92, 0xcc, 0x0c, 0x3b, 0x94, 0x8f, 0xcb, 0x49, 0x51, 0xfd, 0xf5, 0x78, 0xc4, 0x97, + 0x93, 0x8f, 0x79, 0x33, 0x95, 0x3a, 0x30, 0xb5, 0x85, 0x5e, 0x93, 0xb3, 0x8c, 0x0e, 0x6d, 0x57, + 0xa9, 0x24, 0x23, 0x1a, 0x91, 0x18, 0x1e, 0x2f, 0x66, 0xc1, 0x79, 0x85, 0x43, 0x5a, 0x74, 0x65, + 0xb0, 0x67, 0xd9, 0x96, 0xbf, 0xcf, 0xca, 0xe7, 0xd8, 0xca, 0x40, 0x80, 0x5a, 0x74, 0xd7, 0x12, + 0x3f, 0xb5, 0x02, 0xbd, 0xe7, 0x98, 0x98, 0x5a, 0xed, 0xac, 0x56, 0x26, 0x80, 0x75, 0xc7, 0xc4, + 0xd1, 0x78, 0x2a, 0x1f, 0x76, 0x3c, 0x55, 0x12, 0xe3, 0x69, 0x05, 0xe6, 0x3c, 0x6c, 0xf8, 0x8e, + 0xcd, 0x36, 0x33, 0x34, 0xfe, 0x45, 0x3a, 0x62, 0x88, 0x7d, 0x9f, 0xd4, 0xc1, 0x03, 0x30, 0xfe, + 0x19, 0x0b, 0x16, 0x17, 0xc6, 0x04, 0x8b, 0x63, 0xb2, 0x3d, 0x13, 0xc1, 0x62, 0x6d, 0x4c, 0xb0, + 0x38, 0x55, 0xb2, 0x67, 0x14, 0x16, 0xd7, 0x27, 0x85, 0xc5, 0xf1, 0xb8, 0x72, 0x51, 0x8e, 0x2b, + 0xdf, 0x8c, 0xaf, 0x50, 0x1b, 0xe9, 0xb3, 0xef, 0xf1, 0x77, 0x48, 0x3e, 0xc7, 0x01, 0xfc, 0x37, + 0x0a, 0xac, 0xa6, 0x06, 0x1c, 0x1f, 0xc2, 0xaf, 0x24, 0xd2, 0x48, 0xc7, 0xe6, 0x6f, 0x8a, 0x2c, + 0xd2, 0x96, 0x94, 0x45, 0x7a, 0x79, 0x1c, 0x49, 0x4e, 0x12, 0xe9, 0xd1, 0x13, 0x3b, 0xbf, 0xa3, + 0x00, 0xca, 0x58, 0x83, 0xdf, 0x14, 0xd1, 0xfa, 0x21, 0x76, 0xcb, 0x78, 0xc0, 0xfe, 0x4e, 0x14, + 0xb0, 0x17, 0x0e, 0xb3, 0xef, 0x10, 0x66, 0x9c, 0xfc, 0xb4, 0x00, 0x67, 0x77, 0x5d, 0x33, 0x11, + 0x46, 0x72, 0xac, 0xe9, 0x3d, 0xdb, 0x4d, 0x39, 0x5d, 0xe6, 0x88, 0x4d, 0x28, 0x1e, 0xa5, 0x09, + 0xe8, 0x1b, 0x59, 0x09, 0x4d, 0x6f, 0x4a, 0x47, 0x8f, 0xe3, 0x1b, 0x38, 0x61, 0xfa, 0xfa, 0xa4, + 0x26, 0xac, 0xc2, 0xb9, 0x7c, 0x01, 0x78, 0xc8, 0xf9, 0xbf, 0x61, 0x71, 0xf3, 0x29, 0xee, 0x75, + 0x0f, 0xec, 0xde, 0x21, 0xb4, 0xde, 0x80, 0x62, 0x6f, 0x68, 0xf2, 0xd3, 0x11, 0xf2, 0x33, 0x1e, + 0x45, 0x17, 0xe5, 0x28, 0x5a, 0x87, 0x46, 0x54, 0x03, 0x1f, 0x40, 0x2b, 0x64, 0x00, 0x99, 0x04, + 0x99, 0x30, 0x5f, 0xd0, 0xf8, 0x17, 0x87, 0x63, 0x8f, 0x5d, 0x50, 0x61, 0x70, 0xec, 0x79, 0xb2, + 0xd7, 0x2e, 0xca, 0x5e, 0x5b, 0xfd, 0xbe, 0x02, 0x55, 0x52, 0xc3, 0x27, 0x92, 0x9f, 0x2f, 0x65, + 0x8b, 0xd1, 0x52, 0x36, 0x5c, 0x11, 0x97, 0xe2, 0x2b, 0xe2, 0x48, 0xf2, 0x59, 0x0a, 0x4e, 0x4b, + 0x3e, 0x17, 0xc2, 0xb1, 0xe7, 0xa9, 0xe7, 0x60, 0x81, 0xc9, 0xc6, 0x5b, 0xde, 0x80, 0xe2, 0xc8, + 0x1b, 0x88, 0xfe, 0x1b, 0x79, 0x03, 0xf5, 0xdb, 0x0a, 0xd4, 0x5a, 0x41, 0x60, 0xf4, 0xf6, 0x0f, + 0xd1, 0x80, 0x50, 0xb8, 0x42, 0x5c, 0xb8, 0x74, 0x23, 0x22, 0x71, 0x4b, 0x39, 0xe2, 0xce, 0x4a, + 0xe2, 0xaa, 0x50, 0x17, 0xb2, 0xe4, 0x0a, 0xbc, 0x05, 0xa8, 0xe3, 0x78, 0xc1, 0xbb, 0x8e, 0xf7, + 0xc4, 0xf0, 0xcc, 0xc3, 0xad, 0x5a, 0x11, 0x94, 0xf8, 0x93, 0x01, 0xc5, 0x0b, 0xb3, 0x1a, 0xfd, + 0xad, 0xbe, 0x00, 0xc7, 0x24, 0x7e, 0xb9, 0x15, 0xdf, 0x82, 0x2a, 0x9d, 0x85, 0xf9, 0x82, 0xe6, + 0xc5, 0xf8, 0x79, 0xfd, 0x84, 0xd9, 0x5a, 0xdd, 0x80, 0x25, 0x12, 0x8f, 0x51, 0x78, 0xe8, 0x5f, + 0xae, 0x26, 0x62, 0xfe, 0xd5, 0x14, 0x8b, 0x44, 0xbc, 0xff, 0x73, 0x05, 0x66, 0x29, 0x3c, 0x15, + 0x23, 0x9d, 0x24, 0xf3, 0x9c, 0xeb, 0xe8, 0x81, 0xd1, 0x0f, 0x9f, 0x63, 0x20, 0x80, 0x1d, 0xa3, + 0x4f, 0x4f, 0x74, 0x68, 0xa1, 0x69, 0xf5, 0xb1, 0x1f, 0x88, 0x13, 0xc2, 0x2a, 0x81, 0x6d, 0x30, + 0x10, 0x51, 0x0c, 0x3d, 0x48, 0x2d, 0xd1, 0xf3, 0x52, 0xfa, 0x1b, 0x5d, 0x60, 0x77, 0x1b, 0xc7, + 0x1f, 0x8b, 0xd1, 0x3b, 0x8f, 0x4d, 0x28, 0x27, 0xce, 0xb3, 0xc2, 0x6f, 0x74, 0x11, 0x4a, 0x74, + 0xff, 0x79, 0x7e, 0x9c, 0x96, 0x28, 0x0a, 0xb1, 0x0a, 0xd7, 0xb2, 0x6d, 0x6c, 0xd2, 0x00, 0xa8, + 0xac, 0xf1, 0x2f, 0xf5, 0x1d, 0x40, 0x71, 0xe5, 0xf1, 0x0e, 0xba, 0x08, 0x73, 0x54, 0xb7, 0x22, + 0x88, 0x5d, 0x4a, 0xb1, 0xd6, 0x38, 0x82, 0xfa, 0x75, 0x40, 0xac, 0x2e, 0x29, 0x70, 0x3d, 0x4c, + 0x07, 0x8e, 0x09, 0x61, 0xff, 0x58, 0x81, 0x63, 0x12, 0x77, 0x2e, 0xdf, 0x0b, 0x32, 0xfb, 0x0c, + 0xf1, 0x38, 0xeb, 0xb7, 0xa4, 0x99, 0xf9, 0x62, 0x5a, 0x8c, 0x5f, 0xd2, 0xac, 0xfc, 0xb7, 0x0a, + 0x40, 0x6b, 0x14, 0xec, 0xf3, 0x8d, 0xd6, 0x78, 0x27, 0x2a, 0x89, 0x4e, 0x6c, 0x42, 0xd9, 0x35, + 0x7c, 0xff, 0x89, 0xe3, 0x89, 0x45, 0x64, 0xf8, 0x4d, 0xb7, 0x47, 0x47, 0xfc, 0x8d, 0x86, 0x8a, + 0x46, 0x7f, 0xa3, 0xe7, 0xa0, 0xce, 0xde, 0x09, 0xd1, 0x0d, 0xd3, 0xf4, 0x44, 0x0e, 0x60, 0x45, + 0xab, 0x31, 0x68, 0x8b, 0x01, 0x09, 0x9a, 0x45, 0x4f, 0x23, 0x82, 0x03, 0x3d, 0x70, 0x1e, 0x61, + 0x9b, 0x2f, 0x0c, 0x6b, 0x02, 0xba, 0x43, 0x80, 0xec, 0xb8, 0xb1, 0x6f, 0xf9, 0x81, 0x27, 0xd0, + 0xc4, 0xa1, 0x29, 0x87, 0x52, 0x34, 0xf5, 0x0f, 0x14, 0x68, 0x74, 0x46, 0x83, 0x01, 0x53, 0xee, + 0x51, 0x3a, 0xf9, 0x12, 0x6f, 0x4a, 0x21, 0x6d, 0xf2, 0x91, 0xa2, 0x78, 0x13, 0x3f, 0x95, 0xbd, + 0xac, 0x6b, 0xb0, 0x14, 0x93, 0x98, 0x1b, 0x8e, 0x14, 0xd9, 0x2b, 0x72, 0x64, 0xaf, 0xb6, 0x00, + 0xb1, 0xed, 0x9b, 0x23, 0xb7, 0x52, 0x3d, 0x0e, 0xc7, 0x24, 0x16, 0x7c, 0x2a, 0xbe, 0x04, 0x35, + 0x9e, 0x8f, 0xc6, 0x0d, 0xe2, 0x04, 0x94, 0x89, 0x4b, 0xed, 0x59, 0xa6, 0xc8, 0x90, 0x98, 0x77, + 0x1d, 0x73, 0xdd, 0x32, 0x3d, 0xf5, 0x2b, 0x50, 0xe3, 0x17, 0xde, 0x39, 0xee, 0x6d, 0xa8, 0xf3, + 0xf3, 0x41, 0x5d, 0xba, 0x21, 0x7a, 0x22, 0x23, 0xe9, 0x51, 0xa8, 0xc2, 0x8e, 0x7f, 0xaa, 0xdf, + 0x80, 0x26, 0x8b, 0x16, 0x24, 0xc6, 0xa2, 0x81, 0xb7, 0x41, 0x5c, 0x9f, 0x18, 0xc3, 0x5f, 0xa6, + 0xac, 0x79, 0xf1, 0x4f, 0xf5, 0x34, 0x9c, 0xcc, 0xe4, 0xcf, 0x5b, 0xef, 0x42, 0x23, 0x2a, 0x60, + 0xd7, 0x18, 0xc3, 0xb4, 0x0f, 0x25, 0x96, 0xf6, 0xb1, 0x12, 0xc6, 0xde, 0x05, 0x31, 0x73, 0xd1, + 0xf0, 0x3a, 0x5a, 0x71, 0x15, 0xf3, 0x56, 0x5c, 0x25, 0x69, 0xc5, 0xa5, 0xde, 0x0f, 0x75, 0xc8, + 0xd7, 0xbd, 0x6f, 0xd2, 0x95, 0x39, 0xab, 0x5b, 0x38, 0xb5, 0x53, 0xd9, 0xed, 0x63, 0x48, 0x5a, + 0x0c, 0x5f, 0xbd, 0x08, 0x35, 0xd9, 0xbd, 0xc5, 0x3c, 0x96, 0x92, 0xf2, 0x58, 0xf5, 0x84, 0xb3, + 0x7a, 0x39, 0xb1, 0xa4, 0xc8, 0xd2, 0x6b, 0x62, 0x41, 0x71, 0x43, 0x72, 0x5b, 0xcf, 0x4a, 0x47, + 0xf4, 0xbf, 0x24, 0x8f, 0xb5, 0xcc, 0xfd, 0xf8, 0xbb, 0x3e, 0xa1, 0xe7, 0x0d, 0x55, 0x9f, 0x81, + 0xea, 0x6e, 0xde, 0xb3, 0x23, 0x25, 0x91, 0x57, 0xf6, 0x3a, 0x2c, 0xbf, 0x6b, 0x0d, 0xb0, 0x7f, + 0xe0, 0x07, 0x78, 0xd8, 0xa6, 0xee, 0x65, 0xcf, 0xc2, 0x1e, 0x3a, 0x03, 0x40, 0x57, 0x91, 0xae, + 0x63, 0x85, 0x4f, 0x2d, 0xc4, 0x20, 0xea, 0x4f, 0x14, 0x58, 0x8c, 0x08, 0xa7, 0xc9, 0x09, 0x7c, + 0x0d, 0x66, 0xf7, 0x7c, 0xb1, 0xdb, 0x96, 0x38, 0x83, 0xc8, 0x12, 0x41, 0x2b, 0xed, 0xf9, 0x6d, + 0x13, 0xbd, 0x0e, 0x30, 0xf2, 0xb1, 0xc9, 0x8f, 0xfd, 0x26, 0x64, 0x69, 0x56, 0x08, 0x2a, 0x3b, + 0x38, 0xbc, 0x01, 0x55, 0xcb, 0x76, 0x4c, 0x4c, 0x8f, 0x84, 0xcd, 0x49, 0x19, 0x9a, 0xc0, 0x70, + 0x77, 0x7d, 0x6c, 0xaa, 0xbf, 0x13, 0x1d, 0xec, 0x7e, 0x91, 0x5b, 0xa8, 0xea, 0x7c, 0x7e, 0x15, + 0xbd, 0xce, 0x4d, 0xf6, 0x3d, 0x58, 0x62, 0x6e, 0x72, 0x2f, 0xac, 0x32, 0xf3, 0xe6, 0x4a, 0xa2, + 0x6d, 0x5a, 0xc3, 0xe2, 0x91, 0x95, 0x20, 0x52, 0x6f, 0xc1, 0xf1, 0x44, 0x2a, 0xf9, 0xf4, 0xdb, + 0xe9, 0xef, 0x27, 0xf6, 0xc5, 0xa2, 0x21, 0x75, 0x4d, 0xbe, 0xc1, 0x34, 0x2e, 0xe9, 0x9f, 0x5f, + 0xa6, 0xd9, 0x85, 0x13, 0xd2, 0xa6, 0x9d, 0x24, 0xcb, 0x8d, 0x44, 0xb0, 0x78, 0x2e, 0x9f, 0x5f, + 0x22, 0x6a, 0xfc, 0x77, 0x05, 0x96, 0xb3, 0x10, 0x8e, 0xb8, 0x61, 0xfc, 0x61, 0xce, 0xed, 0xc7, + 0x57, 0x26, 0x09, 0xf4, 0x99, 0x6c, 0xb0, 0x6f, 0xb1, 0xbb, 0x53, 0x93, 0xfb, 0xa4, 0x38, 0x5d, + 0x9f, 0xfc, 0xbc, 0x10, 0x3b, 0x14, 0x19, 0x73, 0xbf, 0xe9, 0x13, 0x6c, 0x52, 0xae, 0x27, 0xae, + 0x37, 0xbd, 0x98, 0x49, 0x38, 0xe1, 0x76, 0x93, 0x96, 0xb5, 0x19, 0x70, 0x6d, 0x12, 0xa7, 0x2f, + 0xec, 0xfe, 0xf5, 0x7f, 0x28, 0x50, 0x97, 0x3b, 0x04, 0xbd, 0x93, 0x71, 0xb7, 0xe9, 0xec, 0x84, + 0x06, 0x4a, 0x57, 0x9b, 0xf8, 0x5d, 0xa2, 0xc2, 0xf4, 0x77, 0x89, 0x8a, 0xd3, 0xdd, 0x25, 0xba, + 0x03, 0xf5, 0x27, 0x9e, 0x15, 0x18, 0x0f, 0x07, 0x58, 0x1f, 0x18, 0x07, 0xd8, 0xe3, 0x5e, 0x78, + 0xac, 0x1b, 0xaa, 0x09, 0x92, 0x7b, 0x84, 0x42, 0xfd, 0x76, 0x01, 0x8e, 0x67, 0x5e, 0x6b, 0xf9, + 0xe4, 0xed, 0xbe, 0x1c, 0x6f, 0xf7, 0x61, 0xee, 0x0a, 0x15, 0x0f, 0x75, 0x57, 0xa8, 0x9d, 0xa3, + 0x85, 0xac, 0xa3, 0xf4, 0x09, 0xca, 0xf8, 0x53, 0x05, 0xca, 0x42, 0xa8, 0x89, 0x37, 0x77, 0x56, + 0x47, 0x04, 0x4d, 0xa7, 0x69, 0xd8, 0xb6, 0x61, 0x3b, 0xba, 0x8f, 0x49, 0x58, 0x34, 0xf1, 0x9e, + 0xc4, 0x32, 0xa5, 0x5b, 0x77, 0x3c, 0xbc, 0x65, 0xd8, 0x4e, 0x97, 0x11, 0xa1, 0x16, 0x34, 0x18, + 0x3f, 0xca, 0x8a, 0x30, 0x9d, 0x38, 0x55, 0xd5, 0x29, 0x01, 0x61, 0x42, 0x98, 0xf9, 0xea, 0x0f, + 0x15, 0x58, 0x4c, 0x68, 0xf6, 0x57, 0xaf, 0x11, 0xbf, 0x5d, 0x84, 0x6a, 0xac, 0x97, 0x27, 0x34, + 0x60, 0x1d, 0x96, 0x44, 0x3a, 0x8c, 0x8f, 0x83, 0xe9, 0xee, 0xa9, 0x2c, 0x72, 0x8a, 0x2e, 0x0e, + 0x58, 0x24, 0x73, 0x1b, 0x16, 0x8d, 0xc7, 0x86, 0x35, 0xa0, 0x16, 0x34, 0x55, 0x90, 0x50, 0x0f, + 0xf1, 0xc3, 0x58, 0x88, 0xb5, 0x7b, 0xaa, 0xdb, 0x2a, 0x40, 0x71, 0xa3, 0x4b, 0x43, 0xbe, 0x1f, + 0xcb, 0xb9, 0x1a, 0x7b, 0x69, 0xc8, 0xf7, 0xc3, 0xfa, 0x68, 0x0e, 0x3a, 0xbd, 0x2d, 0xe5, 0xf3, + 0x27, 0x36, 0xf2, 0xeb, 0x23, 0xb8, 0xef, 0x52, 0x54, 0xa2, 0xb0, 0xa1, 0xf1, 0x91, 0xe3, 0xe9, + 0x71, 0xfa, 0xf9, 0x09, 0x0a, 0xa3, 0x14, 0x9d, 0x90, 0x89, 0xfa, 0x9f, 0x0a, 0xa0, 0xf4, 0x80, + 0xfc, 0x95, 0xe9, 0xaa, 0x78, 0xd3, 0x4b, 0x53, 0xab, 0x4e, 0x7d, 0x1b, 0x4e, 0x68, 0xd8, 0x71, + 0xb1, 0x1d, 0xfa, 0xbd, 0x7b, 0x4e, 0xff, 0x10, 0x11, 0xdb, 0x29, 0x68, 0x66, 0xd1, 0xf3, 0x75, + 0xe0, 0x08, 0x9a, 0xeb, 0xfb, 0xb8, 0xf7, 0x88, 0x46, 0xff, 0x47, 0xc9, 0xe7, 0x68, 0x42, 0x79, + 0xe0, 0xf4, 0xd8, 0x63, 0x9d, 0x7c, 0xab, 0x44, 0x7c, 0x8f, 0xd9, 0xa5, 0x3e, 0x0d, 0x27, 0x33, + 0xab, 0xe5, 0x52, 0x21, 0x68, 0xdc, 0xc5, 0xc1, 0xe6, 0x63, 0x6c, 0x87, 0x01, 0xa1, 0xfa, 0xa3, + 0x42, 0x2c, 0xf4, 0xa4, 0x45, 0x87, 0xc8, 0x83, 0x41, 0x1d, 0x58, 0x8e, 0x50, 0x30, 0xa1, 0x66, + 0x4f, 0xe7, 0xb1, 0x47, 0x27, 0xb3, 0xcf, 0xc8, 0x68, 0x25, 0xf4, 0xc5, 0xbc, 0xe8, 0x51, 0x90, + 0x10, 0x96, 0x38, 0x39, 0x2d, 0x26, 0x4f, 0x4e, 0xdf, 0x07, 0x14, 0x0f, 0x2e, 0xf9, 0x6a, 0xb3, + 0x34, 0xc5, 0x3b, 0x28, 0x0d, 0x37, 0xf9, 0x62, 0x4f, 0xce, 0x6b, 0x26, 0xb3, 0x47, 0x7a, 0xcd, + 0x44, 0x3d, 0x03, 0xa7, 0x48, 0xc8, 0x78, 0x1f, 0x07, 0x9e, 0xd5, 0xdb, 0xc0, 0x7e, 0xcf, 0xb3, + 0xdc, 0xc0, 0x09, 0x53, 0x33, 0x54, 0x1d, 0x4e, 0xe7, 0x94, 0x73, 0x75, 0xbf, 0x0d, 0x55, 0x33, + 0x02, 0x67, 0xad, 0xdc, 0x93, 0xb4, 0x5a, 0x9c, 0x40, 0xfd, 0x00, 0x1a, 0x49, 0x84, 0xcc, 0x4c, + 0x4e, 0x04, 0xa5, 0x7d, 0x3c, 0x70, 0xc5, 0xd5, 0x14, 0xf2, 0x9b, 0x68, 0x9d, 0x45, 0xe3, 0x8f, + 0xf0, 0x81, 0xd8, 0xd9, 0xad, 0x50, 0xc8, 0x97, 0xf1, 0x41, 0xd8, 0x36, 0xe9, 0x7a, 0xbd, 0x67, + 0xf5, 0x92, 0x6d, 0xcb, 0x28, 0x8f, 0xda, 0x46, 0xba, 0x6d, 0xc8, 0xc0, 0xbc, 0x6d, 0xa7, 0x73, + 0xaf, 0xee, 0x53, 0x5a, 0x70, 0x1d, 0x93, 0xff, 0x56, 0xff, 0x50, 0x81, 0xa5, 0x14, 0xc6, 0x94, + 0xbb, 0xf5, 0x2f, 0xc1, 0xbc, 0xa8, 0xb7, 0x90, 0x4e, 0x77, 0x64, 0xbc, 0x34, 0x81, 0x82, 0xda, + 0xb0, 0x14, 0x59, 0xb4, 0xa0, 0x2b, 0xa6, 0xfb, 0x22, 0x1e, 0x8a, 0x53, 0x71, 0x1b, 0xbd, 0x04, + 0x44, 0xed, 0x41, 0x23, 0x89, 0x35, 0xcd, 0x98, 0x3a, 0x94, 0xbc, 0xea, 0x5f, 0x29, 0x30, 0xc7, + 0x60, 0x99, 0x9d, 0x2d, 0x79, 0xf1, 0x42, 0xd2, 0x8b, 0xbf, 0x01, 0x55, 0xc6, 0x47, 0x0f, 0x2f, + 0x26, 0xd5, 0xe5, 0x0d, 0x4b, 0xc6, 0x9a, 0x8e, 0x56, 0x18, 0x86, 0xbf, 0x49, 0x33, 0x98, 0xbd, + 0xd0, 0x58, 0x5b, 0x24, 0xb5, 0x56, 0x29, 0x8c, 0xfa, 0x5a, 0x12, 0x2f, 0xf2, 0xa8, 0x7c, 0xc2, + 0x3c, 0xc8, 0x77, 0x56, 0x56, 0xe8, 0x63, 0x71, 0xa9, 0x2d, 0x3b, 0x75, 0x87, 0xbe, 0xe6, 0x96, + 0xde, 0x6a, 0x43, 0x5f, 0x92, 0x8f, 0x7d, 0x9f, 0x4b, 0x9d, 0x99, 0x4a, 0x64, 0x23, 0x8f, 0x3d, + 0x6a, 0xcc, 0x68, 0xd4, 0x0f, 0xc9, 0x1a, 0x39, 0x07, 0x07, 0xbd, 0x15, 0x3e, 0x9d, 0x69, 0x7a, + 0xd6, 0x63, 0xbe, 0x54, 0xae, 0xcb, 0xd7, 0xf4, 0xd7, 0x29, 0xc2, 0x06, 0x2d, 0x17, 0x8f, 0x6a, + 0xb2, 0xaf, 0x4b, 0xcf, 0x43, 0x59, 0x3c, 0x38, 0x8d, 0xe6, 0xa1, 0xb8, 0xb3, 0xde, 0x69, 0xcc, + 0x90, 0x1f, 0xbb, 0x1b, 0x9d, 0x86, 0x82, 0xca, 0x50, 0xea, 0xae, 0xef, 0x74, 0x1a, 0x85, 0x4b, + 0x43, 0x68, 0x24, 0xdf, 0x5c, 0x46, 0xab, 0x70, 0xac, 0xa3, 0x6d, 0x77, 0x5a, 0x77, 0x5b, 0x3b, + 0xed, 0xed, 0x2d, 0xbd, 0xa3, 0xb5, 0x1f, 0xb4, 0x76, 0x36, 0x1b, 0x33, 0xe8, 0x3c, 0x9c, 0x8e, + 0x17, 0xbc, 0xb7, 0xdd, 0xdd, 0xd1, 0x77, 0xb6, 0xf5, 0xf5, 0xed, 0xad, 0x9d, 0x56, 0x7b, 0x6b, + 0x53, 0x6b, 0x28, 0xe8, 0x34, 0x9c, 0x88, 0xa3, 0xdc, 0x69, 0x6f, 0xb4, 0xb5, 0xcd, 0x75, 0xf2, + 0xbb, 0x75, 0xaf, 0x51, 0xb8, 0xf4, 0x16, 0xd4, 0xa4, 0xab, 0x18, 0x44, 0xa4, 0xce, 0xf6, 0x46, + 0x63, 0x06, 0xd5, 0xa0, 0x12, 0xe7, 0x53, 0x86, 0xd2, 0xd6, 0xf6, 0xc6, 0x66, 0xa3, 0x80, 0x00, + 0xe6, 0x76, 0x5a, 0xda, 0xdd, 0xcd, 0x9d, 0x46, 0xf1, 0xd2, 0xad, 0xe4, 0x33, 0x11, 0x18, 0x2d, + 0x41, 0xad, 0xdb, 0xda, 0xda, 0xb8, 0xb3, 0xfd, 0x35, 0x5d, 0xdb, 0x6c, 0x6d, 0x7c, 0xd0, 0x98, + 0x41, 0xcb, 0xd0, 0x10, 0xa0, 0xad, 0xed, 0x1d, 0x06, 0x55, 0x2e, 0x3d, 0x4a, 0xac, 0xc2, 0x30, + 0x3a, 0x0e, 0x4b, 0x61, 0x95, 0xfa, 0xba, 0xb6, 0xd9, 0xda, 0xd9, 0x24, 0x92, 0x48, 0x60, 0x6d, + 0x77, 0x6b, 0xab, 0xbd, 0x75, 0xb7, 0xa1, 0x10, 0xae, 0x11, 0x78, 0xf3, 0x6b, 0x6d, 0x82, 0x5c, + 0x90, 0x91, 0x77, 0xb7, 0xbe, 0xbc, 0xb5, 0xfd, 0xd5, 0xad, 0x46, 0xf1, 0xd2, 0xff, 0x8d, 0x67, + 0x09, 0x44, 0xf3, 0xca, 0x49, 0x58, 0x4d, 0xd5, 0xa8, 0x6f, 0x3e, 0xd8, 0xdc, 0xda, 0x69, 0xcc, + 0xc8, 0x85, 0xdd, 0x9d, 0x96, 0x16, 0x15, 0x2a, 0xc9, 0xc2, 0xed, 0x4e, 0x27, 0x2c, 0x2c, 0xc8, + 0x85, 0x1b, 0x9b, 0xf7, 0x36, 0x23, 0xca, 0xe2, 0xa5, 0x67, 0x01, 0xa2, 0xf1, 0x83, 0xaa, 0x30, + 0xbf, 0xbe, 0xbd, 0xbb, 0xb5, 0xb3, 0xa9, 0x35, 0x66, 0x50, 0x05, 0x66, 0xef, 0xb6, 0x76, 0xef, + 0x6e, 0x36, 0x94, 0x4b, 0x17, 0x61, 0x21, 0x6e, 0x4d, 0x04, 0xaf, 0xfb, 0x41, 0x77, 0x67, 0xf3, + 0x3e, 0xd1, 0xc8, 0x02, 0x94, 0xd7, 0xef, 0x6a, 0xdb, 0xbb, 0x9d, 0x77, 0xbb, 0x0d, 0xe5, 0xfa, + 0x7f, 0x2f, 0x87, 0x4f, 0xc4, 0x76, 0xb1, 0x47, 0x13, 0xe0, 0x37, 0x60, 0x5e, 0x3c, 0xd1, 0x2e, + 0xed, 0x43, 0xc8, 0x4f, 0xca, 0x37, 0x4f, 0x66, 0x96, 0xf1, 0xb8, 0x60, 0x06, 0x3d, 0xa0, 0xbb, + 0xc8, 0xb1, 0x47, 0x9a, 0xce, 0x25, 0x76, 0x6e, 0x53, 0x6f, 0x41, 0x35, 0xcf, 0x8f, 0xc1, 0x08, + 0xf9, 0x7e, 0x00, 0x75, 0xf9, 0x35, 0x44, 0x74, 0x5e, 0xde, 0xe1, 0xcd, 0x78, 0x68, 0xb1, 0xa9, + 0x8e, 0x43, 0x09, 0x59, 0xeb, 0xd0, 0x48, 0xbe, 0x86, 0x88, 0xa4, 0xc4, 0x89, 0x9c, 0xc7, 0x16, + 0x9b, 0xcf, 0x8e, 0x47, 0x8a, 0x57, 0x90, 0x7a, 0xe4, 0xef, 0x99, 0xf1, 0xcf, 0xa6, 0x65, 0x54, + 0x90, 0xf7, 0xb6, 0x1a, 0x53, 0x8e, 0x3c, 0x6b, 0xa2, 0xc4, 0xbb, 0x7a, 0x19, 0x4f, 0x70, 0xc9, + 0xca, 0xc9, 0x7e, 0x7e, 0x49, 0x9d, 0x41, 0xff, 0x0b, 0x16, 0x13, 0xd9, 0xcd, 0x48, 0x22, 0xcc, + 0x4e, 0xda, 0x6e, 0x3e, 0x33, 0x16, 0x47, 0xee, 0xd5, 0x78, 0x06, 0x73, 0xb2, 0x57, 0x33, 0x32, + 0xa3, 0x93, 0xbd, 0x9a, 0x99, 0x00, 0x4d, 0x0d, 0x51, 0xca, 0x56, 0x96, 0x0d, 0x31, 0x2b, 0x3b, + 0xba, 0x79, 0x7e, 0x0c, 0x46, 0x5c, 0x21, 0x89, 0x7c, 0x65, 0x59, 0x21, 0xd9, 0x99, 0xd0, 0xcd, + 0x67, 0xc6, 0xe2, 0x24, 0x7b, 0x32, 0xca, 0x93, 0x4c, 0xf7, 0x64, 0x2a, 0x57, 0x37, 0xdd, 0x93, + 0xe9, 0x34, 0x4b, 0xde, 0x93, 0x89, 0xcc, 0x46, 0x75, 0x6c, 0xd6, 0x55, 0x56, 0x4f, 0x66, 0x67, + 0x66, 0xa9, 0x33, 0xe8, 0x09, 0xac, 0xe5, 0x25, 0xd7, 0xa0, 0x17, 0x0f, 0x91, 0x03, 0xd4, 0x7c, + 0x69, 0x3a, 0xe4, 0xb0, 0x62, 0x0c, 0x28, 0xbd, 0x7c, 0x42, 0xcf, 0xc9, 0xea, 0xce, 0x59, 0x9e, + 0x35, 0x9f, 0x9f, 0x84, 0x16, 0x56, 0x73, 0x17, 0xca, 0x22, 0x6d, 0x07, 0x49, 0x2e, 0x30, 0x91, + 0x2e, 0xd4, 0x3c, 0x95, 0x5d, 0x18, 0x32, 0xfa, 0x12, 0x94, 0x08, 0x14, 0xad, 0x26, 0xf1, 0x04, + 0x83, 0xb5, 0x74, 0x41, 0x48, 0xdc, 0x82, 0x39, 0x96, 0x8f, 0x82, 0xa4, 0x03, 0x31, 0x29, 0x5f, + 0xa6, 0xd9, 0xcc, 0x2a, 0x0a, 0x59, 0x74, 0xd8, 0x3f, 0xbc, 0xe0, 0xe9, 0x25, 0xe8, 0x4c, 0xf2, + 0x1d, 0x64, 0x39, 0x8f, 0xa5, 0x79, 0x36, 0xb7, 0x3c, 0x6e, 0xb3, 0x89, 0x2d, 0xc2, 0xf3, 0x63, + 0xf6, 0xb1, 0xb3, 0x6c, 0x36, 0x7b, 0x77, 0x9c, 0x75, 0x6e, 0x7a, 0xf7, 0x1c, 0x3d, 0x97, 0x6b, + 0xef, 0x52, 0x15, 0xcf, 0x4f, 0x42, 0x8b, 0x0f, 0x8d, 0xe4, 0x83, 0x46, 0xea, 0xb8, 0xc7, 0xc6, + 0xb2, 0x86, 0x46, 0xce, 0x23, 0x66, 0xea, 0x0c, 0xda, 0x87, 0x63, 0x19, 0xaf, 0x9c, 0xa1, 0xe7, + 0xf3, 0xfd, 0xaf, 0x54, 0xcb, 0x0b, 0x13, 0xf1, 0xe2, 0x35, 0x65, 0x9c, 0x29, 0xcb, 0x35, 0xe5, + 0x1f, 0x6a, 0xcb, 0x35, 0x8d, 0x3b, 0x9c, 0xa6, 0x86, 0xc8, 0x7d, 0xc8, 0x89, 0xac, 0x83, 0xd6, + 0x0c, 0x43, 0x4c, 0x79, 0x8c, 0x7d, 0x38, 0x96, 0xb1, 0xc5, 0x20, 0x0b, 0x9b, 0xbf, 0xf5, 0x21, + 0x0b, 0x3b, 0x6e, 0xaf, 0x62, 0x06, 0x7d, 0x08, 0xe8, 0x2e, 0x0e, 0xe4, 0x50, 0xce, 0x47, 0xd2, + 0x40, 0x4d, 0xee, 0x66, 0xe4, 0xd8, 0xa7, 0xb4, 0xad, 0xa1, 0xce, 0x5c, 0x53, 0x90, 0xcd, 0x2e, + 0x50, 0xa4, 0x16, 0xe3, 0xe8, 0x42, 0xb2, 0xdb, 0xf2, 0xd6, 0xf3, 0xcd, 0x8b, 0x53, 0x60, 0x86, + 0x6d, 0xb1, 0x93, 0x2f, 0x6a, 0x8a, 0xf5, 0xe0, 0x85, 0x7c, 0x33, 0x91, 0xd7, 0xd8, 0xe9, 0xfa, + 0x72, 0x57, 0xdb, 0x61, 0x3c, 0x17, 0x33, 0xa6, 0x73, 0xf9, 0x19, 0x0e, 0x39, 0xf1, 0x5c, 0x96, + 0x01, 0x5d, 0xff, 0xad, 0x22, 0x2c, 0xb0, 0x4c, 0x10, 0x1e, 0x7e, 0xde, 0x07, 0x88, 0x92, 0xaa, + 0xd0, 0xe9, 0xa4, 0x8c, 0x52, 0xa6, 0x5a, 0xf3, 0x4c, 0x5e, 0x71, 0xdc, 0xcd, 0xc5, 0x92, 0x95, + 0x64, 0x37, 0x97, 0xce, 0xbd, 0x92, 0xdd, 0x5c, 0x46, 0x96, 0x93, 0x3a, 0x83, 0xde, 0x87, 0x4a, + 0x98, 0x1b, 0x23, 0x1b, 0x4f, 0x32, 0xc9, 0xa7, 0x79, 0x3a, 0xa7, 0x34, 0x2e, 0x5d, 0x2c, 0xe5, + 0x45, 0x96, 0x2e, 0x9d, 0x4e, 0x23, 0x4b, 0x97, 0x95, 0x2b, 0x13, 0xb5, 0x97, 0x1d, 0x4a, 0x67, + 0xb4, 0x57, 0xca, 0x51, 0xc8, 0x68, 0xaf, 0x7c, 0x9a, 0xad, 0xce, 0xdc, 0xb9, 0xfd, 0xe3, 0x9f, + 0x9d, 0x51, 0x7e, 0xf2, 0xb3, 0x33, 0x33, 0xff, 0xe7, 0xe3, 0x33, 0xca, 0x8f, 0x3f, 0x3e, 0xa3, + 0xfc, 0xdd, 0xc7, 0x67, 0x94, 0x9f, 0x7e, 0x7c, 0x46, 0xf9, 0xce, 0xbf, 0x9c, 0x99, 0xf9, 0x50, + 0x7d, 0x74, 0xc3, 0xbf, 0x62, 0x39, 0x57, 0x7b, 0x9e, 0x75, 0xd9, 0x70, 0xad, 0xab, 0xee, 0xa3, + 0xfe, 0x55, 0xc3, 0xb5, 0xfc, 0xab, 0x9c, 0xef, 0xd5, 0xc7, 0x2f, 0x3f, 0x9c, 0xa3, 0xff, 0x24, + 0xe9, 0x95, 0xff, 0x09, 0x00, 0x00, 0xff, 0xff, 0xfb, 0x10, 0xa2, 0xce, 0xde, 0x6a, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -10262,6 +10428,8 @@ type RuntimeServiceClient interface { ListMetricDescriptors(ctx context.Context, in *ListMetricDescriptorsRequest, opts ...grpc.CallOption) (*ListMetricDescriptorsResponse, error) // ListPodSandboxMetrics gets pod sandbox metrics from CRI Runtime ListPodSandboxMetrics(ctx context.Context, in *ListPodSandboxMetricsRequest, opts ...grpc.CallOption) (*ListPodSandboxMetricsResponse, error) + // RuntimeConfig returns configuration information of the runtime. + RuntimeConfig(ctx context.Context, in *RuntimeConfigRequest, opts ...grpc.CallOption) (*RuntimeConfigResponse, error) } type runtimeServiceClient struct { @@ -10547,6 +10715,15 @@ func (c *runtimeServiceClient) ListPodSandboxMetrics(ctx context.Context, in *Li return out, nil } +func (c *runtimeServiceClient) RuntimeConfig(ctx context.Context, in *RuntimeConfigRequest, opts ...grpc.CallOption) (*RuntimeConfigResponse, error) { + out := new(RuntimeConfigResponse) + err := c.cc.Invoke(ctx, "/runtime.v1.RuntimeService/RuntimeConfig", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // RuntimeServiceServer is the server API for RuntimeService service. type RuntimeServiceServer interface { // Version returns the runtime name, runtime version, and runtime API version. @@ -10637,6 +10814,8 @@ type RuntimeServiceServer interface { ListMetricDescriptors(context.Context, *ListMetricDescriptorsRequest) (*ListMetricDescriptorsResponse, error) // ListPodSandboxMetrics gets pod sandbox metrics from CRI Runtime ListPodSandboxMetrics(context.Context, *ListPodSandboxMetricsRequest) (*ListPodSandboxMetricsResponse, error) + // RuntimeConfig returns configuration information of the runtime. + RuntimeConfig(context.Context, *RuntimeConfigRequest) (*RuntimeConfigResponse, error) } // UnimplementedRuntimeServiceServer can be embedded to have forward compatible implementations. @@ -10727,6 +10906,9 @@ func (*UnimplementedRuntimeServiceServer) ListMetricDescriptors(ctx context.Cont func (*UnimplementedRuntimeServiceServer) ListPodSandboxMetrics(ctx context.Context, req *ListPodSandboxMetricsRequest) (*ListPodSandboxMetricsResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method ListPodSandboxMetrics not implemented") } +func (*UnimplementedRuntimeServiceServer) RuntimeConfig(ctx context.Context, req *RuntimeConfigRequest) (*RuntimeConfigResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method RuntimeConfig not implemented") +} func RegisterRuntimeServiceServer(s *grpc.Server, srv RuntimeServiceServer) { s.RegisterService(&_RuntimeService_serviceDesc, srv) @@ -11239,6 +11421,24 @@ func _RuntimeService_ListPodSandboxMetrics_Handler(srv interface{}, ctx context. return interceptor(ctx, in, info, handler) } +func _RuntimeService_RuntimeConfig_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(RuntimeConfigRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(RuntimeServiceServer).RuntimeConfig(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/runtime.v1.RuntimeService/RuntimeConfig", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(RuntimeServiceServer).RuntimeConfig(ctx, req.(*RuntimeConfigRequest)) + } + return interceptor(ctx, in, info, handler) +} + var _RuntimeService_serviceDesc = grpc.ServiceDesc{ ServiceName: "runtime.v1.RuntimeService", HandlerType: (*RuntimeServiceServer)(nil), @@ -11351,6 +11551,10 @@ var _RuntimeService_serviceDesc = grpc.ServiceDesc{ MethodName: "ListPodSandboxMetrics", Handler: _RuntimeService_ListPodSandboxMetrics_Handler, }, + { + MethodName: "RuntimeConfig", + Handler: _RuntimeService_RuntimeConfig_Handler, + }, }, Streams: []grpc.StreamDesc{ { @@ -18902,6 +19106,92 @@ func (m *Metric) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } +func (m *RuntimeConfigRequest) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *RuntimeConfigRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *RuntimeConfigRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *RuntimeConfigResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *RuntimeConfigResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *RuntimeConfigResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Linux != nil { + { + size, err := m.Linux.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintApi(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *LinuxRuntimeConfiguration) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *LinuxRuntimeConfiguration) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *LinuxRuntimeConfiguration) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.CgroupDriver != 0 { + i = encodeVarintApi(dAtA, i, uint64(m.CgroupDriver)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + func encodeVarintApi(dAtA []byte, offset int, v uint64) int { offset -= sovApi(v) base := offset @@ -21933,6 +22223,40 @@ func (m *Metric) Size() (n int) { return n } +func (m *RuntimeConfigRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *RuntimeConfigResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Linux != nil { + l = m.Linux.Size() + n += 1 + l + sovApi(uint64(l)) + } + return n +} + +func (m *LinuxRuntimeConfiguration) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.CgroupDriver != 0 { + n += 1 + sovApi(uint64(m.CgroupDriver)) + } + return n +} + func sovApi(x uint64) (n int) { return (math_bits.Len64(x|1) + 6) / 7 } @@ -24058,6 +24382,35 @@ func (this *Metric) String() string { }, "") return s } +func (this *RuntimeConfigRequest) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&RuntimeConfigRequest{`, + `}`, + }, "") + return s +} +func (this *RuntimeConfigResponse) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&RuntimeConfigResponse{`, + `Linux:` + strings.Replace(this.Linux.String(), "LinuxRuntimeConfiguration", "LinuxRuntimeConfiguration", 1) + `,`, + `}`, + }, "") + return s +} +func (this *LinuxRuntimeConfiguration) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&LinuxRuntimeConfiguration{`, + `CgroupDriver:` + fmt.Sprintf("%v", this.CgroupDriver) + `,`, + `}`, + }, "") + return s +} func valueToStringApi(v interface{}) string { rv := reflect.ValueOf(v) if rv.IsNil() { @@ -46318,6 +46671,211 @@ func (m *Metric) Unmarshal(dAtA []byte) error { } return nil } +func (m *RuntimeConfigRequest) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: RuntimeConfigRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: RuntimeConfigRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipApi(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthApi + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *RuntimeConfigResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: RuntimeConfigResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: RuntimeConfigResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Linux", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthApi + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthApi + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Linux == nil { + m.Linux = &LinuxRuntimeConfiguration{} + } + if err := m.Linux.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipApi(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthApi + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *LinuxRuntimeConfiguration) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: LinuxRuntimeConfiguration: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: LinuxRuntimeConfiguration: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field CgroupDriver", wireType) + } + m.CgroupDriver = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.CgroupDriver |= CgroupDriver(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipApi(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthApi + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func skipApi(dAtA []byte) (n int, err error) { l := len(dAtA) iNdEx := 0 diff --git a/staging/src/k8s.io/cri-api/pkg/apis/runtime/v1/api.proto b/staging/src/k8s.io/cri-api/pkg/apis/runtime/v1/api.proto index 71702112151..eaa8c88e141 100644 --- a/staging/src/k8s.io/cri-api/pkg/apis/runtime/v1/api.proto +++ b/staging/src/k8s.io/cri-api/pkg/apis/runtime/v1/api.proto @@ -131,6 +131,9 @@ service RuntimeService { // ListPodSandboxMetrics gets pod sandbox metrics from CRI Runtime rpc ListPodSandboxMetrics(ListPodSandboxMetricsRequest) returns (ListPodSandboxMetricsResponse) {} + + // RuntimeConfig returns configuration information of the runtime. + rpc RuntimeConfig(RuntimeConfigRequest) returns (RuntimeConfigResponse) {} } // ImageService defines the public APIs for managing images. @@ -1804,3 +1807,23 @@ enum MetricType { COUNTER = 0; GAUGE = 1; } + +message RuntimeConfigRequest {} + +message RuntimeConfigResponse { + // Configuration information for Linux-based runtimes. This field contains + // global runtime configuration options that are not specific to runtime + // handlers. + LinuxRuntimeConfiguration linux = 1; +} + +message LinuxRuntimeConfiguration { + // Cgroup driver to use + CgroupDriver cgroup_driver = 1; +} + +enum CgroupDriver { + SYSTEMD = 0; + CGROUPFS = 1; +} + From d2d5e2e27dc4d85e81e0983f4e34069971f8cf69 Mon Sep 17 00:00:00 2001 From: Markus Lehtonen Date: Fri, 16 Jun 2023 14:14:13 +0300 Subject: [PATCH 2/7] Add CRI fake runtimes for RuntimeConfig rpc Also update the CRI RuntimeService inteface to include the new RuntimeConfig rpc. --- pkg/kubelet/cri/remote/fake/fake_runtime.go | 10 +++++++ pkg/kubelet/cri/remote/remote_runtime.go | 15 ++++++++++ .../kuberuntime/instrumented_services.go | 9 ++++++ .../src/k8s.io/cri-api/pkg/apis/services.go | 2 ++ .../pkg/apis/testing/fake_runtime_service.go | 30 ++++++++++++++----- 5 files changed, 58 insertions(+), 8 deletions(-) diff --git a/pkg/kubelet/cri/remote/fake/fake_runtime.go b/pkg/kubelet/cri/remote/fake/fake_runtime.go index b1480a56703..f49fc0066a4 100644 --- a/pkg/kubelet/cri/remote/fake/fake_runtime.go +++ b/pkg/kubelet/cri/remote/fake/fake_runtime.go @@ -356,3 +356,13 @@ func (f *RemoteRuntime) ListPodSandboxMetrics(ctx context.Context, req *kubeapi. return &kubeapi.ListPodSandboxMetricsResponse{PodMetrics: podMetrics}, nil } + +// RuntimeConfig returns the configuration information of the runtime. +func (f *RemoteRuntime) RuntimeConfig(ctx context.Context, req *kubeapi.RuntimeConfigRequest) (*kubeapi.RuntimeConfigResponse, error) { + resp, err := f.RuntimeService.RuntimeConfig(ctx) + if err != nil { + return nil, err + } + + return resp, nil +} diff --git a/pkg/kubelet/cri/remote/remote_runtime.go b/pkg/kubelet/cri/remote/remote_runtime.go index 22b1f34b224..64571069376 100644 --- a/pkg/kubelet/cri/remote/remote_runtime.go +++ b/pkg/kubelet/cri/remote/remote_runtime.go @@ -865,3 +865,18 @@ func (r *remoteRuntimeService) ListPodSandboxMetrics(ctx context.Context) ([]*ru return resp.GetPodMetrics(), nil } + +// RuntimeConfig returns the configuration information of the runtime. +func (r *remoteRuntimeService) RuntimeConfig(ctx context.Context) (*runtimeapi.RuntimeConfigResponse, error) { + ctx, cancel := context.WithTimeout(ctx, r.timeout) + defer cancel() + + resp, err := r.runtimeClient.RuntimeConfig(ctx, &runtimeapi.RuntimeConfigRequest{}) + if err != nil { + klog.ErrorS(err, "RuntimeConfig from runtime service failed") + return nil, err + } + klog.V(10).InfoS("[RemoteRuntimeService] RuntimeConfigResponse", "linuxConfig", resp.GetLinux()) + + return resp, nil +} diff --git a/pkg/kubelet/kuberuntime/instrumented_services.go b/pkg/kubelet/kuberuntime/instrumented_services.go index a83565a9c96..cfa633a9983 100644 --- a/pkg/kubelet/kuberuntime/instrumented_services.go +++ b/pkg/kubelet/kuberuntime/instrumented_services.go @@ -361,3 +361,12 @@ func (in instrumentedRuntimeService) ListPodSandboxMetrics(ctx context.Context) recordError(operation, err) return out, err } + +func (in instrumentedRuntimeService) RuntimeConfig(ctx context.Context) (*runtimeapi.RuntimeConfigResponse, error) { + const operation = "runtime_config" + defer recordOperation(operation, time.Now()) + + out, err := in.service.RuntimeConfig(ctx) + recordError(operation, err) + return out, err +} diff --git a/staging/src/k8s.io/cri-api/pkg/apis/services.go b/staging/src/k8s.io/cri-api/pkg/apis/services.go index a3a7e7ed876..b21b11ba24c 100644 --- a/staging/src/k8s.io/cri-api/pkg/apis/services.go +++ b/staging/src/k8s.io/cri-api/pkg/apis/services.go @@ -115,6 +115,8 @@ type RuntimeService interface { UpdateRuntimeConfig(ctx context.Context, runtimeConfig *runtimeapi.RuntimeConfig) error // Status returns the status of the runtime. Status(ctx context.Context, verbose bool) (*runtimeapi.StatusResponse, error) + // RuntimeConfig returns the configuration information of the runtime. + RuntimeConfig(ctx context.Context) (*runtimeapi.RuntimeConfigResponse, error) } // ImageManagerService interface should be implemented by a container image diff --git a/staging/src/k8s.io/cri-api/pkg/apis/testing/fake_runtime_service.go b/staging/src/k8s.io/cri-api/pkg/apis/testing/fake_runtime_service.go index 33cf8438dbb..332aa71d52a 100644 --- a/staging/src/k8s.io/cri-api/pkg/apis/testing/fake_runtime_service.go +++ b/staging/src/k8s.io/cri-api/pkg/apis/testing/fake_runtime_service.go @@ -64,14 +64,15 @@ type FakeRuntimeService struct { Called []string Errors map[string][]error - FakeStatus *runtimeapi.RuntimeStatus - Containers map[string]*FakeContainer - Sandboxes map[string]*FakePodSandbox - FakeContainerStats map[string]*runtimeapi.ContainerStats - FakePodSandboxStats map[string]*runtimeapi.PodSandboxStats - FakePodSandboxMetrics map[string]*runtimeapi.PodSandboxMetrics - FakeMetricDescriptors map[string]*runtimeapi.MetricDescriptor - FakeContainerMetrics map[string]*runtimeapi.ContainerMetrics + FakeStatus *runtimeapi.RuntimeStatus + Containers map[string]*FakeContainer + Sandboxes map[string]*FakePodSandbox + FakeContainerStats map[string]*runtimeapi.ContainerStats + FakePodSandboxStats map[string]*runtimeapi.PodSandboxStats + FakePodSandboxMetrics map[string]*runtimeapi.PodSandboxMetrics + FakeMetricDescriptors map[string]*runtimeapi.MetricDescriptor + FakeContainerMetrics map[string]*runtimeapi.ContainerMetrics + FakeLinuxConfiguration *runtimeapi.LinuxRuntimeConfiguration ErrorOnSandboxCreate bool } @@ -780,3 +781,16 @@ func (r *FakeRuntimeService) ListPodSandboxMetrics(_ context.Context) ([]*runtim return result, nil } + +// RuntimeConfig returns runtime configuration of the FakeRuntimeService. +func (r *FakeRuntimeService) RuntimeConfig(_ context.Context) (*runtimeapi.RuntimeConfigResponse, error) { + r.Lock() + defer r.Unlock() + + r.Called = append(r.Called, "RuntimeConfig") + if err := r.popError("RuntimeConfig"); err != nil { + return nil, err + } + + return &runtimeapi.RuntimeConfigResponse{Linux: r.FakeLinuxConfiguration}, nil +} From 37330a13924fcdf0d666974e0cda178a8a1800c1 Mon Sep 17 00:00:00 2001 From: Markus Lehtonen Date: Fri, 16 Jun 2023 11:32:36 +0300 Subject: [PATCH 3/7] Add KubeletCgroupDriverFromCRI feature gate --- pkg/features/kube_features.go | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/pkg/features/kube_features.go b/pkg/features/kube_features.go index 75d640c2e44..0c787641fc5 100644 --- a/pkg/features/kube_features.go +++ b/pkg/features/kube_features.go @@ -416,6 +416,17 @@ const ( // yet. JobTrackingWithFinalizers featuregate.Feature = "JobTrackingWithFinalizers" + // owner: @marquiz + // kep: http://kep.k8s.io/4033 + // alpha: v1.28 + // + // Enable detection of the kubelet cgroup driver configuration option from + // the CRI. The CRI runtime also needs to support this feature in which + // case the kubelet will ignore the cgroupDriver (--cgroup-driver) + // configuration option. If runtime doesn't support it, the kubelet will + // fallback to using it's cgroupDriver option. + KubeletCgroupDriverFromCRI featuregate.Feature = "KubeletCgroupDriverFromCRI" + // owner: @AkihiroSuda // alpha: v1.22 // @@ -1007,6 +1018,8 @@ var defaultKubernetesFeatureGates = map[featuregate.Feature]featuregate.FeatureS JobTrackingWithFinalizers: {Default: true, PreRelease: featuregate.GA, LockToDefault: true}, // remove in 1.28 + KubeletCgroupDriverFromCRI: {Default: false, PreRelease: featuregate.Alpha}, + KubeletInUserNamespace: {Default: false, PreRelease: featuregate.Alpha}, KubeletPodResources: {Default: true, PreRelease: featuregate.GA, LockToDefault: true}, // GA in 1.28, remove in 1.30 From fd434003f3f86727b75fe75e286090b3eaa69935 Mon Sep 17 00:00:00 2001 From: Markus Lehtonen Date: Fri, 16 Jun 2023 11:41:30 +0300 Subject: [PATCH 4/7] kubelet: initialization of runtime service earlier in the startup This patch refactors the kubelet startup code to initialize the runtime service earlier in the startup sequence. We want this to be able to query the cgroup driver setting from the CRI befure initializing the cgroup manager. --- cmd/kubelet/app/server.go | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/cmd/kubelet/app/server.go b/cmd/kubelet/app/server.go index 0cdc710e7f4..8fa32e2cce6 100644 --- a/cmd/kubelet/app/server.go +++ b/cmd/kubelet/app/server.go @@ -625,6 +625,10 @@ func run(ctx context.Context, s *options.KubeletServer, kubeDeps *kubelet.Depend runAuthenticatorCAReload(ctx.Done()) } + if err := kubelet.PreInitRuntimeService(&s.KubeletConfiguration, kubeDeps); err != nil { + return err + } + var cgroupRoots []string nodeAllocatableRoot := cm.NodeAllocatableRoot(s.CgroupRoot, s.CgroupsPerQOS, s.CgroupDriver) cgroupRoots = append(cgroupRoots, nodeAllocatableRoot) @@ -775,11 +779,6 @@ func run(ctx context.Context, s *options.KubeletServer, kubeDeps *kubelet.Depend klog.InfoS("Failed to ApplyOOMScoreAdj", "err", err) } - err = kubelet.PreInitRuntimeService(&s.KubeletConfiguration, kubeDeps) - if err != nil { - return err - } - if err := RunKubelet(s, kubeDeps, s.RunOnce); err != nil { return err } From d7797fbc616155cbb7156d1f0a9fc4d4a9d83450 Mon Sep 17 00:00:00 2001 From: Markus Lehtonen Date: Fri, 16 Jun 2023 12:06:04 +0300 Subject: [PATCH 5/7] kubelet: get cgroup driver config from CRI This patch modifies kubelet to get the cgroup driver setting from the CRI runtime using the newly added RuntimeConfig rpc. The new code path only takes place if the KubeletCgroupDriverFromCRI feature gate is enabled. If the runtime returns a not-implemented error kubelet falls back to using the cgroupDriver configuration option, with a log message instructing the user to upgrade to w newer container runtime. Other rpc errors cause kubelet to exit as is the case if the runtime returns an unknown cgroup driver. --- cmd/kubelet/app/server.go | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/cmd/kubelet/app/server.go b/cmd/kubelet/app/server.go index 8fa32e2cce6..55769ec3b4c 100644 --- a/cmd/kubelet/app/server.go +++ b/cmd/kubelet/app/server.go @@ -35,6 +35,8 @@ import ( "github.com/coreos/go-systemd/v22/daemon" "github.com/spf13/cobra" "github.com/spf13/pflag" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" "k8s.io/klog/v2" "k8s.io/mount-utils" @@ -76,6 +78,7 @@ import ( "k8s.io/component-base/version" "k8s.io/component-base/version/verflag" nodeutil "k8s.io/component-helpers/node/util" + runtimeapi "k8s.io/cri-api/pkg/apis/runtime/v1" kubeletconfigv1beta1 "k8s.io/kubelet/config/v1beta1" "k8s.io/kubernetes/cmd/kubelet/app/options" "k8s.io/kubernetes/pkg/api/legacyscheme" @@ -629,6 +632,13 @@ func run(ctx context.Context, s *options.KubeletServer, kubeDeps *kubelet.Depend return err } + // Get cgroup driver setting from CRI + if utilfeature.DefaultFeatureGate.Enabled(features.KubeletCgroupDriverFromCRI) { + if err := getCgroupDriverFromCRI(ctx, s, kubeDeps); err != nil { + return err + } + } + var cgroupRoots []string nodeAllocatableRoot := cm.NodeAllocatableRoot(s.CgroupRoot, s.CgroupsPerQOS, s.CgroupDriver) cgroupRoots = append(cgroupRoots, nodeAllocatableRoot) @@ -1281,3 +1291,28 @@ func newTracerProvider(s *options.KubeletServer) (oteltrace.TracerProvider, erro } return tp, nil } + +func getCgroupDriverFromCRI(ctx context.Context, s *options.KubeletServer, kubeDeps *kubelet.Dependencies) error { + klog.V(4).InfoS("Getting CRI runtime configuration information") + runtimeConfig, err := kubeDeps.RemoteRuntimeService.RuntimeConfig(ctx) + if err != nil { + s, ok := status.FromError(err) + if !ok || s.Code() != codes.Unimplemented { + return err + } + // CRI implementation doesn't support RuntimeConfig, fallback + klog.InfoS("CRI implementation should be updated to support RuntimeConfig when KubeletCgroupDriverFromCRI feature gate has been enabled. Falling back to using cgroupDriver from kubelet config.") + return nil + } + + switch d := runtimeConfig.GetLinux().GetCgroupDriver(); d { + case runtimeapi.CgroupDriver_SYSTEMD: + s.CgroupDriver = "systemd" + case runtimeapi.CgroupDriver_CGROUPFS: + s.CgroupDriver = "cgroupfs" + default: + return fmt.Errorf("runtime returned an unknown cgroup driver %d", d) + } + klog.InfoS("Using cgroup driver setting received from the CRI runtime", "cgroupDriver", s.CgroupDriver) + return nil +} From d0952686f68f4b90b117185899fbdb23ff106c60 Mon Sep 17 00:00:00 2001 From: Peter Hunt Date: Mon, 26 Jun 2023 16:15:10 -0400 Subject: [PATCH 6/7] CRI: add cavieats about cgroup driver field Signed-off-by: Peter Hunt --- .../cri-api/pkg/apis/runtime/v1/api.pb.go | 18 ++++++++++++++++++ .../cri-api/pkg/apis/runtime/v1/api.proto | 12 ++++++++++++ 2 files changed, 30 insertions(+) diff --git a/staging/src/k8s.io/cri-api/pkg/apis/runtime/v1/api.pb.go b/staging/src/k8s.io/cri-api/pkg/apis/runtime/v1/api.pb.go index 0474af99b34..a727e771c66 100644 --- a/staging/src/k8s.io/cri-api/pkg/apis/runtime/v1/api.pb.go +++ b/staging/src/k8s.io/cri-api/pkg/apis/runtime/v1/api.pb.go @@ -9672,6 +9672,12 @@ func (m *RuntimeConfigResponse) GetLinux() *LinuxRuntimeConfiguration { type LinuxRuntimeConfiguration struct { // Cgroup driver to use + // Note: this field should not change for the lifecycle of the Kubelet, + // or while there are running containers. + // The Kubelet will not re-request this after startup, and will construct the cgroup + // hierarchy assuming it is static. + // If the runtime wishes to change this value, it must be accompanied by removal of + // all pods, and a restart of the Kubelet. The easiest way to do this is with a full node reboot. CgroupDriver CgroupDriver `protobuf:"varint,1,opt,name=cgroup_driver,json=cgroupDriver,proto3,enum=runtime.v1.CgroupDriver" json:"cgroup_driver,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_sizecache int32 `json:"-"` @@ -10429,6 +10435,12 @@ type RuntimeServiceClient interface { // ListPodSandboxMetrics gets pod sandbox metrics from CRI Runtime ListPodSandboxMetrics(ctx context.Context, in *ListPodSandboxMetricsRequest, opts ...grpc.CallOption) (*ListPodSandboxMetricsResponse, error) // RuntimeConfig returns configuration information of the runtime. + // A couple of notes: + // - The RuntimeConfigRequest object is not to be confused with the contents of UpdateRuntimeConfigRequest. + // The former is for having runtime tell Kubelet what to do, the latter vice versa. + // - It is the expectation of the Kubelet that these fields are static for the lifecycle of the Kubelet. + // The Kubelet will not re-request the RuntimeConfiguration after startup, and CRI implementations should + // avoid updating them without a full node reboot. RuntimeConfig(ctx context.Context, in *RuntimeConfigRequest, opts ...grpc.CallOption) (*RuntimeConfigResponse, error) } @@ -10815,6 +10827,12 @@ type RuntimeServiceServer interface { // ListPodSandboxMetrics gets pod sandbox metrics from CRI Runtime ListPodSandboxMetrics(context.Context, *ListPodSandboxMetricsRequest) (*ListPodSandboxMetricsResponse, error) // RuntimeConfig returns configuration information of the runtime. + // A couple of notes: + // - The RuntimeConfigRequest object is not to be confused with the contents of UpdateRuntimeConfigRequest. + // The former is for having runtime tell Kubelet what to do, the latter vice versa. + // - It is the expectation of the Kubelet that these fields are static for the lifecycle of the Kubelet. + // The Kubelet will not re-request the RuntimeConfiguration after startup, and CRI implementations should + // avoid updating them without a full node reboot. RuntimeConfig(context.Context, *RuntimeConfigRequest) (*RuntimeConfigResponse, error) } diff --git a/staging/src/k8s.io/cri-api/pkg/apis/runtime/v1/api.proto b/staging/src/k8s.io/cri-api/pkg/apis/runtime/v1/api.proto index eaa8c88e141..b9cea03f7d9 100644 --- a/staging/src/k8s.io/cri-api/pkg/apis/runtime/v1/api.proto +++ b/staging/src/k8s.io/cri-api/pkg/apis/runtime/v1/api.proto @@ -133,6 +133,12 @@ service RuntimeService { rpc ListPodSandboxMetrics(ListPodSandboxMetricsRequest) returns (ListPodSandboxMetricsResponse) {} // RuntimeConfig returns configuration information of the runtime. + // A couple of notes: + // - The RuntimeConfigRequest object is not to be confused with the contents of UpdateRuntimeConfigRequest. + // The former is for having runtime tell Kubelet what to do, the latter vice versa. + // - It is the expectation of the Kubelet that these fields are static for the lifecycle of the Kubelet. + // The Kubelet will not re-request the RuntimeConfiguration after startup, and CRI implementations should + // avoid updating them without a full node reboot. rpc RuntimeConfig(RuntimeConfigRequest) returns (RuntimeConfigResponse) {} } @@ -1819,6 +1825,12 @@ message RuntimeConfigResponse { message LinuxRuntimeConfiguration { // Cgroup driver to use + // Note: this field should not change for the lifecycle of the Kubelet, + // or while there are running containers. + // The Kubelet will not re-request this after startup, and will construct the cgroup + // hierarchy assuming it is static. + // If the runtime wishes to change this value, it must be accompanied by removal of + // all pods, and a restart of the Kubelet. The easiest way to do this is with a full node reboot. CgroupDriver cgroup_driver = 1; } From bfa62e0009aea8be681f68a71e3b2d59cee057dc Mon Sep 17 00:00:00 2001 From: Peter Hunt Date: Tue, 11 Jul 2023 13:09:37 -0400 Subject: [PATCH 7/7] kubelet: retry RuntimeConfig call and prep for nil values from GetLinux Signed-off-by: Peter Hunt --- cmd/kubelet/app/server.go | 39 +++++++++++++++++++++++++++++++-------- 1 file changed, 31 insertions(+), 8 deletions(-) diff --git a/cmd/kubelet/app/server.go b/cmd/kubelet/app/server.go index 55769ec3b4c..64dbb4cd969 100644 --- a/cmd/kubelet/app/server.go +++ b/cmd/kubelet/app/server.go @@ -1294,18 +1294,41 @@ func newTracerProvider(s *options.KubeletServer) (oteltrace.TracerProvider, erro func getCgroupDriverFromCRI(ctx context.Context, s *options.KubeletServer, kubeDeps *kubelet.Dependencies) error { klog.V(4).InfoS("Getting CRI runtime configuration information") - runtimeConfig, err := kubeDeps.RemoteRuntimeService.RuntimeConfig(ctx) - if err != nil { - s, ok := status.FromError(err) - if !ok || s.Code() != codes.Unimplemented { - return err + + var ( + runtimeConfig *runtimeapi.RuntimeConfigResponse + err error + ) + // Retry a couple of times, hoping that any errors are transient. + // Fail quickly on known, non transient errors. + for i := 0; i < 3; i++ { + runtimeConfig, err = kubeDeps.RemoteRuntimeService.RuntimeConfig(ctx) + if err != nil { + s, ok := status.FromError(err) + if !ok || s.Code() != codes.Unimplemented { + // We could introduce a backoff delay or jitter, but this is largely catching cases + // where the runtime is still starting up and we request too early. + // Give it a little more time. + time.Sleep(time.Second * 2) + continue + } + // CRI implementation doesn't support RuntimeConfig, fallback + klog.InfoS("CRI implementation should be updated to support RuntimeConfig when KubeletCgroupDriverFromCRI feature gate has been enabled. Falling back to using cgroupDriver from kubelet config.") + return nil } - // CRI implementation doesn't support RuntimeConfig, fallback - klog.InfoS("CRI implementation should be updated to support RuntimeConfig when KubeletCgroupDriverFromCRI feature gate has been enabled. Falling back to using cgroupDriver from kubelet config.") + } + if err != nil { + return err + } + + // Calling GetLinux().GetCgroupDriver() won't segfault, but it will always default to systemd + // which is not intended by the fields not being populated + linuxConfig := runtimeConfig.GetLinux() + if linuxConfig == nil { return nil } - switch d := runtimeConfig.GetLinux().GetCgroupDriver(); d { + switch d := linuxConfig.GetCgroupDriver(); d { case runtimeapi.CgroupDriver_SYSTEMD: s.CgroupDriver = "systemd" case runtimeapi.CgroupDriver_CGROUPFS: