Add version for subscribed channel (#20585)

Signed-off-by: yah01 <yang.cen@zilliz.com>

Signed-off-by: yah01 <yang.cen@zilliz.com>
pull/20593/head
yah01 2022-11-15 13:21:07 +08:00 committed by GitHub
parent 480a2b8632
commit 2d806788fb
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
11 changed files with 302 additions and 278 deletions

View File

@ -193,8 +193,10 @@ message WatchDmChannelsRequest {
LoadMetaInfo load_meta = 8;
int64 replicaID = 9;
map<int64, data.SegmentInfo> segment_infos = 10;
// Deprecated
// for node down load balance, need to remove offline node in time after every watchDmChannel finish.
int64 offlineNodeID = 11;
int64 version = 12;
}
message UnsubDmChannelRequest {

View File

@ -1254,8 +1254,10 @@ type WatchDmChannelsRequest struct {
LoadMeta *LoadMetaInfo `protobuf:"bytes,8,opt,name=load_meta,json=loadMeta,proto3" json:"load_meta,omitempty"`
ReplicaID int64 `protobuf:"varint,9,opt,name=replicaID,proto3" json:"replicaID,omitempty"`
SegmentInfos map[int64]*datapb.SegmentInfo `protobuf:"bytes,10,rep,name=segment_infos,json=segmentInfos,proto3" json:"segment_infos,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
// Deprecated
// for node down load balance, need to remove offline node in time after every watchDmChannel finish.
OfflineNodeID int64 `protobuf:"varint,11,opt,name=offlineNodeID,proto3" json:"offlineNodeID,omitempty"`
Version int64 `protobuf:"varint,12,opt,name=version,proto3" json:"version,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
@ -1363,6 +1365,13 @@ func (m *WatchDmChannelsRequest) GetOfflineNodeID() int64 {
return 0
}
func (m *WatchDmChannelsRequest) GetVersion() int64 {
if m != nil {
return m.Version
}
return 0
}
type UnsubDmChannelRequest struct {
Base *commonpb.MsgBase `protobuf:"bytes,1,opt,name=base,proto3" json:"base,omitempty"`
NodeID int64 `protobuf:"varint,2,opt,name=nodeID,proto3" json:"nodeID,omitempty"`
@ -3725,68 +3734,68 @@ func init() {
func init() { proto.RegisterFile("query_coord.proto", fileDescriptor_aab7cc9a69ed26e8) }
var fileDescriptor_aab7cc9a69ed26e8 = []byte{
// 3730 bytes of a gzipped FileDescriptorProto
// 3736 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x3b, 0x49, 0x6c, 0x24, 0x59,
0x56, 0x15, 0xb9, 0xd8, 0x99, 0x2f, 0x17, 0x87, 0xbf, 0xab, 0x5c, 0x39, 0x39, 0xd5, 0xd5, 0xee,
0xa8, 0xae, 0x6e, 0xe3, 0x9e, 0xb6, 0x7b, 0x5c, 0x33, 0x4d, 0x0d, 0x33, 0xa3, 0xa1, 0xca, 0x9e,
0x72, 0x9b, 0xee, 0xf2, 0x98, 0xc8, 0xaa, 0x02, 0xb5, 0x9a, 0xc9, 0x89, 0xcc, 0xf8, 0x99, 0x0e,
0x55, 0x2c, 0x59, 0x11, 0x91, 0xae, 0x76, 0x73, 0xe5, 0x32, 0x23, 0x40, 0x82, 0x03, 0x27, 0xc4,
0x09, 0x24, 0x90, 0xa6, 0x11, 0x07, 0xb8, 0x71, 0x40, 0xe2, 0xc0, 0x0d, 0x71, 0xe3, 0xc8, 0x15,
0x09, 0x24, 0x24, 0xa4, 0x39, 0x70, 0x40, 0x42, 0x7f, 0x8b, 0xf5, 0x87, 0x33, 0xca, 0xee, 0xea,
0x05, 0xcd, 0x2d, 0xe3, 0xfd, 0xe5, 0xbd, 0xff, 0xf6, 0xf7, 0xfe, 0x4f, 0x58, 0x7d, 0x36, 0xc7,
0xfe, 0xd9, 0x70, 0xec, 0x79, 0xbe, 0xb9, 0x3d, 0xf3, 0xbd, 0xd0, 0x43, 0xc8, 0xb1, 0xec, 0xd3,
0x79, 0xc0, 0xbe, 0xb6, 0xe9, 0x78, 0xbf, 0x3d, 0xf6, 0x1c, 0xc7, 0x73, 0x19, 0xac, 0xdf, 0x4e,
0xce, 0xe8, 0x77, 0x2d, 0x37, 0xc4, 0xbe, 0x6b, 0xd8, 0x62, 0x34, 0x18, 0x9f, 0x60, 0xc7, 0xe0,
0x5f, 0xaa, 0x69, 0x84, 0x46, 0x72, 0x7f, 0xed, 0xf7, 0x14, 0x58, 0x1f, 0x9c, 0x78, 0xcf, 0xf7,
0x3c, 0xdb, 0xc6, 0xe3, 0xd0, 0xf2, 0xdc, 0x40, 0xc7, 0xcf, 0xe6, 0x38, 0x08, 0xd1, 0x3b, 0x50,
0x1b, 0x19, 0x01, 0xee, 0x29, 0x1b, 0xca, 0x66, 0x6b, 0xf7, 0xc6, 0x76, 0x8a, 0x12, 0x4e, 0xc2,
0xc3, 0x60, 0x7a, 0xdf, 0x08, 0xb0, 0x4e, 0x67, 0x22, 0x04, 0x35, 0x73, 0x74, 0xb8, 0xdf, 0xab,
0x6c, 0x28, 0x9b, 0x55, 0x9d, 0xfe, 0x46, 0xaf, 0x43, 0x67, 0x1c, 0xed, 0x7d, 0xb8, 0x1f, 0xf4,
0xaa, 0x1b, 0xd5, 0xcd, 0xaa, 0x9e, 0x06, 0x6a, 0xff, 0xa6, 0xc0, 0xf5, 0x1c, 0x19, 0xc1, 0xcc,
0x73, 0x03, 0x8c, 0xee, 0xc0, 0x52, 0x10, 0x1a, 0xe1, 0x3c, 0xe0, 0x94, 0x7c, 0x5d, 0x4a, 0xc9,
0x80, 0x4e, 0xd1, 0xf9, 0xd4, 0x3c, 0xda, 0x8a, 0x04, 0x2d, 0xfa, 0x26, 0x5c, 0xb5, 0xdc, 0x87,
0xd8, 0xf1, 0xfc, 0xb3, 0xe1, 0x0c, 0xfb, 0x63, 0xec, 0x86, 0xc6, 0x14, 0x0b, 0x1a, 0xd7, 0xc4,
0xd8, 0x71, 0x3c, 0x84, 0xde, 0x85, 0xeb, 0x4c, 0x4a, 0x01, 0xf6, 0x4f, 0xad, 0x31, 0x1e, 0x1a,
0xa7, 0x86, 0x65, 0x1b, 0x23, 0x1b, 0xf7, 0x6a, 0x1b, 0xd5, 0xcd, 0x86, 0x7e, 0x8d, 0x0e, 0x0f,
0xd8, 0xe8, 0x3d, 0x31, 0xa8, 0xfd, 0x85, 0x02, 0xd7, 0xc8, 0x09, 0x8f, 0x0d, 0x3f, 0xb4, 0x5e,
0x02, 0x9f, 0x35, 0x68, 0x27, 0xcf, 0xd6, 0xab, 0xd2, 0xb1, 0x14, 0x8c, 0xcc, 0x99, 0x09, 0xf4,
0x84, 0x27, 0x35, 0x7a, 0xcc, 0x14, 0x4c, 0xfb, 0x73, 0xae, 0x10, 0x49, 0x3a, 0x2f, 0x23, 0x88,
0x2c, 0xce, 0x4a, 0x1e, 0xe7, 0x05, 0xc4, 0xa0, 0xfd, 0xac, 0x0a, 0xd7, 0x3e, 0xf0, 0x0c, 0x33,
0x56, 0x98, 0xcf, 0x9f, 0x9d, 0xdf, 0x87, 0x25, 0x66, 0x5d, 0xbd, 0x1a, 0xc5, 0x75, 0x3b, 0x8d,
0x8b, 0x5b, 0x5e, 0x4c, 0xe1, 0x80, 0x02, 0x74, 0xbe, 0x08, 0xdd, 0x86, 0xae, 0x8f, 0x67, 0xb6,
0x35, 0x36, 0x86, 0xee, 0xdc, 0x19, 0x61, 0xbf, 0x57, 0xdf, 0x50, 0x36, 0xeb, 0x7a, 0x87, 0x43,
0x8f, 0x28, 0x10, 0xfd, 0x04, 0x3a, 0x13, 0x0b, 0xdb, 0xe6, 0xd0, 0x72, 0x4d, 0xfc, 0xf1, 0xe1,
0x7e, 0x6f, 0x69, 0xa3, 0xba, 0xd9, 0xda, 0xfd, 0xee, 0x76, 0xde, 0x33, 0x6c, 0x4b, 0x39, 0xb2,
0xfd, 0x80, 0x2c, 0x3f, 0x64, 0xab, 0x7f, 0xe8, 0x86, 0xfe, 0x99, 0xde, 0x9e, 0x24, 0x40, 0xfd,
0x1f, 0xc0, 0x6a, 0x6e, 0x0a, 0x52, 0xa1, 0xfa, 0x14, 0x9f, 0x51, 0x2e, 0x56, 0x75, 0xf2, 0x13,
0x5d, 0x85, 0xfa, 0xa9, 0x61, 0xcf, 0x31, 0xe7, 0x13, 0xfb, 0xf8, 0xb5, 0xca, 0x5d, 0x45, 0xfb,
0x53, 0x05, 0x7a, 0x3a, 0xb6, 0xb1, 0x11, 0xe0, 0x2f, 0x52, 0x1e, 0xeb, 0xb0, 0xe4, 0x7a, 0x26,
0x3e, 0xdc, 0xa7, 0xf2, 0xa8, 0xea, 0xfc, 0x4b, 0xfb, 0x1f, 0x05, 0xae, 0x1e, 0xe0, 0x90, 0x28,
0xa6, 0x15, 0x84, 0xd6, 0x38, 0xb2, 0xbc, 0xef, 0x43, 0xd5, 0xc7, 0xcf, 0x38, 0x65, 0x6f, 0xa5,
0x29, 0x8b, 0xfc, 0xa8, 0x6c, 0xa5, 0x4e, 0xd6, 0xa1, 0xd7, 0xa0, 0x6d, 0x3a, 0xf6, 0x70, 0x7c,
0x62, 0xb8, 0x2e, 0xb6, 0x99, 0x6a, 0x37, 0xf5, 0x96, 0xe9, 0xd8, 0x7b, 0x1c, 0x84, 0x6e, 0x02,
0x04, 0x78, 0xea, 0x60, 0x37, 0x8c, 0x5d, 0x5f, 0x02, 0x82, 0xb6, 0x60, 0x75, 0xe2, 0x7b, 0xce,
0x30, 0x38, 0x31, 0x7c, 0x73, 0x68, 0x63, 0xc3, 0xc4, 0x3e, 0xa5, 0xbe, 0xa1, 0xaf, 0x90, 0x81,
0x01, 0x81, 0x7f, 0x40, 0xc1, 0xe8, 0x0e, 0xd4, 0x83, 0xb1, 0x37, 0xc3, 0x54, 0x4d, 0xba, 0xbb,
0xaf, 0xc8, 0x14, 0x60, 0xdf, 0x08, 0x8d, 0x01, 0x99, 0xa4, 0xb3, 0xb9, 0xda, 0x5f, 0x73, 0x3b,
0xf9, 0x92, 0xbb, 0x9d, 0x84, 0x2d, 0xd5, 0x3f, 0x1b, 0x5b, 0x5a, 0x2a, 0x65, 0x4b, 0xcb, 0xe7,
0xdb, 0x52, 0x8e, 0x6b, 0x2f, 0xdf, 0x96, 0xfe, 0x21, 0xb6, 0xa5, 0x2f, 0xbb, 0xcc, 0x62, 0x7b,
0xab, 0xa7, 0xec, 0xed, 0xaf, 0x14, 0xf8, 0xda, 0x01, 0x0e, 0x23, 0xf2, 0x89, 0xf9, 0xe0, 0x2f,
0x69, 0xb8, 0xfb, 0x54, 0x81, 0xbe, 0x8c, 0xd6, 0xcb, 0x84, 0xbc, 0x0f, 0x61, 0x3d, 0xc2, 0x31,
0x34, 0x71, 0x30, 0xf6, 0xad, 0x19, 0x15, 0x23, 0xf5, 0x10, 0xad, 0xdd, 0x5b, 0x32, 0x75, 0xcb,
0x52, 0x70, 0x2d, 0xda, 0x62, 0x3f, 0xb1, 0x83, 0xf6, 0x07, 0x0a, 0x5c, 0x23, 0x1e, 0x89, 0xbb,
0x10, 0x77, 0xe2, 0x5d, 0x9c, 0xaf, 0x69, 0xe7, 0x54, 0xc9, 0x39, 0xa7, 0x12, 0x3c, 0xa6, 0xf9,
0x63, 0x96, 0x9e, 0xcb, 0xf0, 0xee, 0xdb, 0x50, 0xb7, 0xdc, 0x89, 0x27, 0x58, 0xf5, 0xaa, 0x8c,
0x55, 0x49, 0x64, 0x6c, 0xb6, 0xe6, 0x32, 0x2a, 0x62, 0x6f, 0x79, 0x09, 0x75, 0xcb, 0x1e, 0xbb,
0x22, 0x39, 0xf6, 0xef, 0x2b, 0x70, 0x3d, 0x87, 0xf0, 0x32, 0xe7, 0xfe, 0x1e, 0x2c, 0xd1, 0x18,
0x20, 0x0e, 0xfe, 0xba, 0xf4, 0xe0, 0x09, 0x74, 0x1f, 0x58, 0x41, 0xa8, 0xf3, 0x35, 0x9a, 0x07,
0x6a, 0x76, 0x8c, 0x44, 0x27, 0x1e, 0x99, 0x86, 0xae, 0xe1, 0x30, 0x06, 0x34, 0xf5, 0x16, 0x87,
0x1d, 0x19, 0x0e, 0x46, 0x5f, 0x83, 0x06, 0x31, 0xd9, 0xa1, 0x65, 0x0a, 0xf1, 0x2f, 0x53, 0x13,
0x36, 0x03, 0xf4, 0x0a, 0x00, 0x1d, 0x32, 0x4c, 0xd3, 0x67, 0x81, 0xab, 0xa9, 0x37, 0x09, 0xe4,
0x1e, 0x01, 0x68, 0x7f, 0xa4, 0x40, 0x9b, 0x38, 0xc8, 0x87, 0x38, 0x34, 0x88, 0x1c, 0xd0, 0x77,
0xa0, 0x69, 0x7b, 0x86, 0x39, 0x0c, 0xcf, 0x66, 0x0c, 0x55, 0x37, 0xcb, 0xeb, 0xd8, 0xab, 0x3e,
0x3a, 0x9b, 0x61, 0xbd, 0x61, 0xf3, 0x5f, 0x65, 0xf8, 0x9d, 0x33, 0xe5, 0xaa, 0xc4, 0x94, 0x7f,
0x5e, 0x87, 0xf5, 0xdf, 0x32, 0xc2, 0xf1, 0xc9, 0xbe, 0x23, 0xe2, 0xef, 0xc5, 0x95, 0x20, 0xf6,
0x09, 0x24, 0x90, 0x68, 0xc4, 0x01, 0x6e, 0x1c, 0x90, 0x90, 0xe0, 0x86, 0xb8, 0x71, 0xe4, 0x8a,
0x04, 0x12, 0x12, 0xd2, 0x1c, 0x38, 0x20, 0xa1, 0xbf, 0xc5, 0xfa, 0xc3, 0x19, 0x65, 0x77, 0xf5,
0x82, 0xe6, 0x96, 0xf1, 0xfe, 0xf2, 0xde, 0x7f, 0xfb, 0x7b, 0xff, 0x27, 0xac, 0x3e, 0x9b, 0x63,
0xff, 0x6c, 0x38, 0xf6, 0x3c, 0xdf, 0xdc, 0x9e, 0xf9, 0x5e, 0xe8, 0x21, 0xe4, 0x58, 0xf6, 0xe9,
0x3c, 0x60, 0x5f, 0xdb, 0x74, 0xbc, 0xdf, 0x1e, 0x7b, 0x8e, 0xe3, 0xb9, 0x0c, 0xd6, 0x6f, 0x27,
0x67, 0xf4, 0xbb, 0x96, 0x1b, 0x62, 0xdf, 0x35, 0x6c, 0x31, 0x1a, 0x8c, 0x4f, 0xb0, 0x63, 0xf0,
0x2f, 0xd5, 0x34, 0x42, 0x23, 0xb9, 0xbf, 0xf6, 0x3b, 0x0a, 0xac, 0x0f, 0x4e, 0xbc, 0xe7, 0x7b,
0x9e, 0x6d, 0xe3, 0x71, 0x68, 0x79, 0x6e, 0xa0, 0xe3, 0x67, 0x73, 0x1c, 0x84, 0xe8, 0x1d, 0xa8,
0x8d, 0x8c, 0x00, 0xf7, 0x94, 0x0d, 0x65, 0xb3, 0xb5, 0x7b, 0x63, 0x3b, 0x45, 0x09, 0x27, 0xe1,
0x61, 0x30, 0xbd, 0x6f, 0x04, 0x58, 0xa7, 0x33, 0x11, 0x82, 0x9a, 0x39, 0x3a, 0xdc, 0xef, 0x55,
0x36, 0x94, 0xcd, 0xaa, 0x4e, 0x7f, 0xa3, 0xd7, 0xa1, 0x33, 0x8e, 0xf6, 0x3e, 0xdc, 0x0f, 0x7a,
0xd5, 0x8d, 0xea, 0x66, 0x55, 0x4f, 0x03, 0xb5, 0x7f, 0x53, 0xe0, 0x7a, 0x8e, 0x8c, 0x60, 0xe6,
0xb9, 0x01, 0x46, 0x77, 0x60, 0x29, 0x08, 0x8d, 0x70, 0x1e, 0x70, 0x4a, 0xbe, 0x2e, 0xa5, 0x64,
0x40, 0xa7, 0xe8, 0x7c, 0x6a, 0x1e, 0x6d, 0x45, 0x82, 0x16, 0x7d, 0x13, 0xae, 0x5a, 0xee, 0x43,
0xec, 0x78, 0xfe, 0xd9, 0x70, 0x86, 0xfd, 0x31, 0x76, 0x43, 0x63, 0x8a, 0x05, 0x8d, 0x6b, 0x62,
0xec, 0x38, 0x1e, 0x42, 0xef, 0xc2, 0x75, 0x26, 0xa5, 0x00, 0xfb, 0xa7, 0xd6, 0x18, 0x0f, 0x8d,
0x53, 0xc3, 0xb2, 0x8d, 0x91, 0x8d, 0x7b, 0xb5, 0x8d, 0xea, 0x66, 0x43, 0xbf, 0x46, 0x87, 0x07,
0x6c, 0xf4, 0x9e, 0x18, 0xd4, 0xfe, 0x4c, 0x81, 0x6b, 0xe4, 0x84, 0xc7, 0x86, 0x1f, 0x5a, 0x2f,
0x81, 0xcf, 0x1a, 0xb4, 0x93, 0x67, 0xeb, 0x55, 0xe9, 0x58, 0x0a, 0x46, 0xe6, 0xcc, 0x04, 0x7a,
0xc2, 0x93, 0x1a, 0x3d, 0x66, 0x0a, 0xa6, 0xfd, 0x29, 0x57, 0x88, 0x24, 0x9d, 0x97, 0x11, 0x44,
0x16, 0x67, 0x25, 0x8f, 0xf3, 0x02, 0x62, 0xd0, 0x7e, 0x56, 0x85, 0x6b, 0x1f, 0x78, 0x86, 0x19,
0x2b, 0xcc, 0xe7, 0xcf, 0xce, 0xef, 0xc3, 0x12, 0xb3, 0xae, 0x5e, 0x8d, 0xe2, 0xba, 0x9d, 0xc6,
0xc5, 0x2d, 0x2f, 0xa6, 0x70, 0x40, 0x01, 0x3a, 0x5f, 0x84, 0x6e, 0x43, 0xd7, 0xc7, 0x33, 0xdb,
0x1a, 0x1b, 0x43, 0x77, 0xee, 0x8c, 0xb0, 0xdf, 0xab, 0x6f, 0x28, 0x9b, 0x75, 0xbd, 0xc3, 0xa1,
0x47, 0x14, 0x88, 0x7e, 0x02, 0x9d, 0x89, 0x85, 0x6d, 0x73, 0x68, 0xb9, 0x26, 0xfe, 0xf8, 0x70,
0xbf, 0xb7, 0xb4, 0x51, 0xdd, 0x6c, 0xed, 0x7e, 0x77, 0x3b, 0xef, 0x19, 0xb6, 0xa5, 0x1c, 0xd9,
0x7e, 0x40, 0x96, 0x1f, 0xb2, 0xd5, 0x3f, 0x74, 0x43, 0xff, 0x4c, 0x6f, 0x4f, 0x12, 0xa0, 0xfe,
0x0f, 0x60, 0x35, 0x37, 0x05, 0xa9, 0x50, 0x7d, 0x8a, 0xcf, 0x28, 0x17, 0xab, 0x3a, 0xf9, 0x89,
0xae, 0x42, 0xfd, 0xd4, 0xb0, 0xe7, 0x98, 0xf3, 0x89, 0x7d, 0xfc, 0x4a, 0xe5, 0xae, 0xa2, 0xfd,
0xb1, 0x02, 0x3d, 0x1d, 0xdb, 0xd8, 0x08, 0xf0, 0x17, 0x29, 0x8f, 0x75, 0x58, 0x72, 0x3d, 0x13,
0x1f, 0xee, 0x53, 0x79, 0x54, 0x75, 0xfe, 0xa5, 0xfd, 0x8f, 0x02, 0x57, 0x0f, 0x70, 0x48, 0x14,
0xd3, 0x0a, 0x42, 0x6b, 0x1c, 0x59, 0xde, 0xf7, 0xa1, 0xea, 0xe3, 0x67, 0x9c, 0xb2, 0xb7, 0xd2,
0x94, 0x45, 0x7e, 0x54, 0xb6, 0x52, 0x27, 0xeb, 0xd0, 0x6b, 0xd0, 0x36, 0x1d, 0x7b, 0x38, 0x3e,
0x31, 0x5c, 0x17, 0xdb, 0x4c, 0xb5, 0x9b, 0x7a, 0xcb, 0x74, 0xec, 0x3d, 0x0e, 0x42, 0x37, 0x01,
0x02, 0x3c, 0x75, 0xb0, 0x1b, 0xc6, 0xae, 0x2f, 0x01, 0x41, 0x5b, 0xb0, 0x3a, 0xf1, 0x3d, 0x67,
0x18, 0x9c, 0x18, 0xbe, 0x39, 0xb4, 0xb1, 0x61, 0x62, 0x9f, 0x52, 0xdf, 0xd0, 0x57, 0xc8, 0xc0,
0x80, 0xc0, 0x3f, 0xa0, 0x60, 0x74, 0x07, 0xea, 0xc1, 0xd8, 0x9b, 0x61, 0xaa, 0x26, 0xdd, 0xdd,
0x57, 0x64, 0x0a, 0xb0, 0x6f, 0x84, 0xc6, 0x80, 0x4c, 0xd2, 0xd9, 0x5c, 0xed, 0xaf, 0xb8, 0x9d,
0x7c, 0xc9, 0xdd, 0x4e, 0xc2, 0x96, 0xea, 0x9f, 0x8d, 0x2d, 0x2d, 0x95, 0xb2, 0xa5, 0xe5, 0xf3,
0x6d, 0x29, 0xc7, 0xb5, 0x97, 0x6f, 0x4b, 0x7f, 0x1f, 0xdb, 0xd2, 0x97, 0x5d, 0x66, 0xb1, 0xbd,
0xd5, 0x53, 0xf6, 0xf6, 0x17, 0x0a, 0x7c, 0xed, 0x00, 0x87, 0x11, 0xf9, 0xc4, 0x7c, 0xf0, 0x97,
0x34, 0xdc, 0x7d, 0xaa, 0x40, 0x5f, 0x46, 0xeb, 0x65, 0x42, 0xde, 0x87, 0xb0, 0x1e, 0xe1, 0x18,
0x9a, 0x38, 0x18, 0xfb, 0xd6, 0x8c, 0x8a, 0x91, 0x7a, 0x88, 0xd6, 0xee, 0x2d, 0x99, 0xba, 0x65,
0x29, 0xb8, 0x16, 0x6d, 0xb1, 0x9f, 0xd8, 0x41, 0xfb, 0x3d, 0x05, 0xae, 0x11, 0x8f, 0xc4, 0x5d,
0x88, 0x3b, 0xf1, 0x2e, 0xce, 0xd7, 0xb4, 0x73, 0xaa, 0xe4, 0x9c, 0x53, 0x09, 0x1e, 0xd3, 0xfc,
0x31, 0x4b, 0xcf, 0x65, 0x78, 0xf7, 0x6d, 0xa8, 0x5b, 0xee, 0xc4, 0x13, 0xac, 0x7a, 0x55, 0xc6,
0xaa, 0x24, 0x32, 0x36, 0x5b, 0x73, 0x19, 0x15, 0xb1, 0xb7, 0xbc, 0x84, 0xba, 0x65, 0x8f, 0x5d,
0x91, 0x1c, 0xfb, 0x77, 0x15, 0xb8, 0x9e, 0x43, 0x78, 0x99, 0x73, 0x7f, 0x0f, 0x96, 0x68, 0x0c,
0x10, 0x07, 0x7f, 0x5d, 0x7a, 0xf0, 0x04, 0xba, 0x0f, 0xac, 0x20, 0xd4, 0xf9, 0x1a, 0xcd, 0x03,
0x35, 0x3b, 0x46, 0xa2, 0x13, 0x8f, 0x4c, 0x43, 0xd7, 0x70, 0x18, 0x03, 0x9a, 0x7a, 0x8b, 0xc3,
0x8e, 0x0c, 0x07, 0xa3, 0xaf, 0x41, 0x83, 0x98, 0xec, 0xd0, 0x32, 0x85, 0xf8, 0x97, 0xa9, 0x09,
0x9b, 0x01, 0x7a, 0x05, 0x80, 0x0e, 0x19, 0xa6, 0xe9, 0xb3, 0xc0, 0xd5, 0xd4, 0x9b, 0x04, 0x72,
0x8f, 0x00, 0xb4, 0x3f, 0x50, 0xa0, 0x4d, 0x1c, 0xe4, 0x43, 0x1c, 0x1a, 0x44, 0x0e, 0xe8, 0x3b,
0xd0, 0xb4, 0x3d, 0xc3, 0x1c, 0x86, 0x67, 0x33, 0x86, 0xaa, 0x9b, 0xe5, 0x75, 0xec, 0x55, 0x1f,
0x9d, 0xcd, 0xb0, 0xde, 0xb0, 0xf9, 0xaf, 0x32, 0xfc, 0xce, 0x99, 0x72, 0x55, 0x62, 0xca, 0xff,
0x58, 0x87, 0xf5, 0xdf, 0x30, 0xc2, 0xf1, 0xc9, 0xbe, 0x23, 0xe2, 0xef, 0xc5, 0x95, 0x20, 0xf6,
0x6d, 0x95, 0xa4, 0x6f, 0xfb, 0xcc, 0x7c, 0x67, 0xa4, 0xe7, 0x75, 0x99, 0x9e, 0x93, 0x32, 0x6d,
0xfb, 0x09, 0x17, 0x55, 0x42, 0xcf, 0x13, 0x61, 0x72, 0xe9, 0x22, 0x61, 0x72, 0x0f, 0x3a, 0xf8,
0xe3, 0xb1, 0x3d, 0x27, 0x32, 0xa7, 0xd8, 0x59, 0xfc, 0xbb, 0x29, 0xc1, 0x9e, 0x34, 0xb2, 0x36,
@ -3794,172 +3803,172 @@ var fileDescriptor_aab7cc9a69ed26e8 = []byte{
0x0b, 0xfd, 0x60, 0xe2, 0x26, 0x5f, 0xe8, 0x06, 0x34, 0x79, 0x50, 0x3e, 0xdc, 0xef, 0x35, 0x29,
0xfb, 0x62, 0x00, 0x32, 0xa0, 0xc3, 0x3d, 0x10, 0xa7, 0x10, 0x28, 0x85, 0xdf, 0x93, 0x21, 0x90,
0x0b, 0x3b, 0x49, 0x79, 0xc0, 0x43, 0x74, 0x90, 0x00, 0x91, 0xd2, 0xd0, 0x9b, 0x4c, 0x6c, 0xcb,
0xc5, 0x47, 0x4c, 0xc2, 0x2d, 0x4a, 0x44, 0x1a, 0xd8, 0x1f, 0xc2, 0x6a, 0x6e, 0x23, 0x49, 0x20,
0xff, 0x56, 0x32, 0x90, 0x2f, 0xe6, 0x64, 0x22, 0xd0, 0xff, 0xa5, 0x02, 0xd7, 0x1e, 0xbb, 0xc1,
0x7c, 0x14, 0x9d, 0xe0, 0x8b, 0xd1, 0xd6, 0xac, 0x9f, 0xa8, 0xe5, 0xfc, 0x84, 0xf6, 0xd3, 0x3a,
0xac, 0xf0, 0x53, 0x10, 0xa1, 0x52, 0x83, 0xbf, 0x01, 0xcd, 0x28, 0x54, 0x70, 0x86, 0xc4, 0x00,
0xb4, 0x01, 0xad, 0x84, 0xba, 0x73, 0xaa, 0x92, 0xa0, 0x52, 0xa4, 0x89, 0xc0, 0x5f, 0x4b, 0x04,
0xfe, 0x57, 0x00, 0x26, 0xf6, 0x3c, 0x38, 0x19, 0x86, 0x96, 0x83, 0x79, 0xe2, 0xd1, 0xa4, 0x90,
0x47, 0x96, 0x83, 0xd1, 0x3d, 0x68, 0x8f, 0x2c, 0xd7, 0xf6, 0xa6, 0xc3, 0x99, 0x11, 0x9e, 0x04,
0xbc, 0x58, 0x92, 0x89, 0x85, 0xa6, 0x69, 0xf7, 0xe9, 0x5c, 0xbd, 0xc5, 0xd6, 0x1c, 0x93, 0x25,
0xe8, 0x26, 0xb4, 0xdc, 0xb9, 0x33, 0xf4, 0x26, 0x43, 0xdf, 0x7b, 0x4e, 0x4c, 0x84, 0xa2, 0x70,
0xe7, 0xce, 0x8f, 0x26, 0xba, 0xf7, 0x9c, 0xb8, 0xea, 0x26, 0x71, 0xda, 0x81, 0xed, 0x4d, 0x83,
0x5e, 0xa3, 0xd4, 0xfe, 0xf1, 0x02, 0xb2, 0xda, 0xc4, 0x76, 0x68, 0xd0, 0xd5, 0xcd, 0x72, 0xab,
0xa3, 0x05, 0xe8, 0x0d, 0xe8, 0x8e, 0x3d, 0x67, 0x66, 0x50, 0x0e, 0x3d, 0xf0, 0x3d, 0x87, 0xda,
0x47, 0x55, 0xcf, 0x40, 0xd1, 0x1e, 0xb4, 0x68, 0x8a, 0xcb, 0x8d, 0xa8, 0x45, 0xf1, 0x68, 0x32,
0x23, 0x4a, 0x64, 0xab, 0x44, 0x41, 0xc1, 0x12, 0x3f, 0x03, 0xa2, 0x19, 0xc2, 0x16, 0x03, 0xeb,
0x13, 0xdc, 0x6b, 0x33, 0x29, 0x72, 0xd8, 0xc0, 0xfa, 0x04, 0x93, 0xbc, 0xdb, 0x72, 0x03, 0xec,
0x87, 0xa2, 0x0a, 0xea, 0x75, 0xa8, 0xfa, 0x74, 0x18, 0x94, 0x2b, 0x36, 0x3a, 0x84, 0x6e, 0x10,
0x1a, 0x7e, 0x38, 0x9c, 0x79, 0x01, 0x55, 0x80, 0x5e, 0x97, 0xea, 0xb6, 0x56, 0x50, 0x73, 0x3d,
0x0c, 0xa6, 0xc7, 0x7c, 0xa6, 0xde, 0xa1, 0x2b, 0xc5, 0xa7, 0xf6, 0x5f, 0x15, 0xe8, 0xa6, 0x69,
0x46, 0x3d, 0x58, 0x66, 0x39, 0xb8, 0x50, 0x44, 0xf1, 0x49, 0x4e, 0x80, 0x5d, 0x63, 0x64, 0x63,
0x96, 0xf0, 0x53, 0x3d, 0x6c, 0xe8, 0x2d, 0x06, 0xa3, 0x1b, 0x10, 0x7d, 0x62, 0x9c, 0xa2, 0xca,
0x5f, 0xa5, 0xd4, 0x37, 0x29, 0x84, 0x86, 0xc8, 0x1e, 0x2c, 0x8b, 0x5a, 0x81, 0x69, 0xa1, 0xf8,
0x24, 0x23, 0xa3, 0xb9, 0x45, 0xb1, 0x32, 0x2d, 0x14, 0x9f, 0x68, 0x1f, 0xda, 0x6c, 0xcb, 0x99,
0xe1, 0x1b, 0x8e, 0xd0, 0xc1, 0xd7, 0xa4, 0x76, 0xfc, 0x3e, 0x3e, 0x7b, 0x42, 0x5c, 0xc2, 0xb1,
0x61, 0xf9, 0x3a, 0x93, 0xd9, 0x31, 0x5d, 0x85, 0x36, 0x41, 0x65, 0xbb, 0x4c, 0x2c, 0x1b, 0x73,
0x6d, 0x5e, 0xa6, 0x71, 0xb8, 0x4b, 0xe1, 0x0f, 0x2c, 0x1b, 0x33, 0x85, 0x8d, 0x8e, 0x40, 0xa5,
0xd4, 0x60, 0xfa, 0x4a, 0x21, 0x54, 0x46, 0xb7, 0xa0, 0xc3, 0x86, 0x4f, 0xb1, 0x1f, 0x10, 0xde,
0x33, 0xa7, 0xcb, 0x68, 0x7c, 0xc2, 0x60, 0x34, 0x15, 0x98, 0x3b, 0x4c, 0xe3, 0x81, 0x1d, 0xc7,
0x9d, 0x3b, 0x44, 0xdf, 0xb5, 0x3f, 0xae, 0xc1, 0x1a, 0x31, 0x7b, 0xee, 0x01, 0x2e, 0x11, 0x54,
0x5f, 0x01, 0x30, 0x83, 0x70, 0x98, 0x72, 0x55, 0x4d, 0x33, 0x08, 0x99, 0xcb, 0x45, 0xdf, 0x11,
0x31, 0xb1, 0x5a, 0x9c, 0x26, 0x67, 0xdc, 0x50, 0x3e, 0x2e, 0x5e, 0xa8, 0x15, 0x73, 0x0b, 0x3a,
0x81, 0x37, 0xf7, 0xc7, 0x78, 0x98, 0x2a, 0x68, 0xda, 0x0c, 0x78, 0x24, 0x77, 0xa6, 0x4b, 0xd2,
0x96, 0x50, 0x22, 0x36, 0x2e, 0x5f, 0x2e, 0x36, 0x36, 0xb2, 0xb1, 0xf1, 0x7d, 0x58, 0xa1, 0x9e,
0x20, 0xb2, 0x22, 0xe1, 0x40, 0xca, 0x98, 0x51, 0x97, 0x2e, 0x15, 0x9f, 0x01, 0x51, 0x5f, 0xa1,
0x0f, 0x5c, 0xde, 0xfc, 0x93, 0x30, 0xc3, 0xc5, 0xd8, 0x1c, 0x86, 0xbe, 0xe1, 0x06, 0x13, 0xec,
0xd3, 0xf8, 0xd8, 0xd0, 0xdb, 0x04, 0xf8, 0x88, 0xc3, 0xb4, 0x7f, 0xae, 0xc0, 0x3a, 0x2f, 0x53,
0x2f, 0xaf, 0x17, 0x45, 0xe1, 0x4b, 0xf8, 0xff, 0xea, 0x39, 0x85, 0x5f, 0xad, 0x44, 0x02, 0x56,
0x97, 0x24, 0x60, 0xe9, 0xe2, 0x67, 0x29, 0x57, 0xfc, 0x44, 0xdd, 0x96, 0xe5, 0xf2, 0xdd, 0x16,
0x52, 0xd6, 0xd3, 0x8c, 0x9c, 0xca, 0xae, 0xa9, 0xb3, 0x8f, 0x72, 0x0c, 0xfd, 0x0f, 0x05, 0x3a,
0x03, 0x6c, 0xf8, 0xe3, 0x13, 0xc1, 0xc7, 0x77, 0x93, 0xdd, 0xa9, 0xd7, 0x0b, 0x44, 0x9c, 0x5a,
0xf2, 0xd5, 0x69, 0x4b, 0xfd, 0xa7, 0x02, 0xed, 0xdf, 0x24, 0x43, 0xe2, 0xb0, 0x77, 0x93, 0x87,
0x7d, 0xa3, 0xe0, 0xb0, 0x3a, 0x0e, 0x7d, 0x0b, 0x9f, 0xe2, 0xaf, 0xdc, 0x71, 0xff, 0x49, 0x81,
0xfe, 0xe0, 0xcc, 0x1d, 0xeb, 0xcc, 0x96, 0x2f, 0x6f, 0x31, 0xb7, 0xa0, 0x73, 0x9a, 0xca, 0xda,
0x2a, 0x54, 0xe1, 0xda, 0xa7, 0xc9, 0xf2, 0x4e, 0x07, 0x55, 0x34, 0xc5, 0xf8, 0x61, 0x85, 0x6b,
0x7d, 0x53, 0x46, 0x75, 0x86, 0x38, 0xea, 0x9a, 0x56, 0xfc, 0x34, 0x50, 0xfb, 0x43, 0x05, 0xd6,
0x24, 0x13, 0xd1, 0x75, 0x58, 0xe6, 0xa5, 0x24, 0x8f, 0xc1, 0xcc, 0x86, 0x4d, 0x22, 0x9e, 0xb8,
0x19, 0x62, 0x99, 0xf9, 0x54, 0xd0, 0x44, 0xaf, 0x42, 0x2b, 0xca, 0xf9, 0xcd, 0x9c, 0x7c, 0xcc,
0x00, 0xf5, 0xa1, 0xc1, 0x9d, 0x93, 0x28, 0xa6, 0xa2, 0x6f, 0xed, 0xef, 0x15, 0x58, 0x7f, 0xcf,
0x70, 0x4d, 0x6f, 0x32, 0xb9, 0x3c, 0x5b, 0xf7, 0x20, 0x55, 0x2a, 0x94, 0x6d, 0x42, 0xa4, 0xeb,
0x8b, 0xb7, 0x60, 0xd5, 0x67, 0x9e, 0xd1, 0x4c, 0xf3, 0xbd, 0xaa, 0xab, 0x62, 0x20, 0xe2, 0xe7,
0xcf, 0x2b, 0x80, 0x48, 0x30, 0xb8, 0x6f, 0xd8, 0x86, 0x3b, 0xc6, 0x17, 0x27, 0xfd, 0x36, 0x74,
0x53, 0x21, 0x2c, 0xba, 0xf1, 0x4a, 0xc6, 0xb0, 0x00, 0xbd, 0x0f, 0xdd, 0x11, 0x43, 0x35, 0xf4,
0xb1, 0x11, 0x78, 0x2e, 0x75, 0xae, 0x5d, 0x79, 0xbf, 0xe1, 0x91, 0x6f, 0x4d, 0xa7, 0xd8, 0xdf,
0xf3, 0x5c, 0x93, 0xe7, 0x62, 0x23, 0x41, 0x26, 0x59, 0x4a, 0x04, 0x17, 0xc7, 0x73, 0x21, 0x1a,
0x88, 0x02, 0x3a, 0x65, 0x45, 0x80, 0x0d, 0x3b, 0x66, 0x44, 0xec, 0x8d, 0x55, 0x36, 0x30, 0x28,
0x6e, 0x37, 0x49, 0xe2, 0xab, 0xf6, 0xb7, 0x0a, 0xa0, 0xa8, 0x5e, 0xa2, 0xf5, 0x1f, 0xd5, 0xbe,
0xec, 0x52, 0x45, 0x12, 0x14, 0x6e, 0x40, 0xd3, 0x14, 0x2b, 0xb9, 0xb9, 0xc4, 0x00, 0xea, 0xa3,
0x29, 0xd1, 0x43, 0x12, 0x8c, 0xb1, 0x29, 0xea, 0x11, 0x06, 0xfc, 0x80, 0xc2, 0xd2, 0xe1, 0xb9,
0x96, 0x0d, 0xcf, 0xc9, 0x6e, 0x4a, 0x3d, 0xd5, 0x4d, 0xd1, 0x3e, 0xad, 0x80, 0x4a, 0xdd, 0xdd,
0x5e, 0x5c, 0xd2, 0x97, 0x22, 0xfa, 0x16, 0x74, 0xf8, 0x9d, 0x70, 0x8a, 0xf0, 0xf6, 0xb3, 0xc4,
0x66, 0xe8, 0x1d, 0xb8, 0xca, 0x26, 0xf9, 0x38, 0x98, 0xdb, 0x71, 0x2a, 0xce, 0x92, 0x59, 0xf4,
0x8c, 0xf9, 0x59, 0x32, 0x24, 0x56, 0x3c, 0x86, 0xf5, 0xa9, 0xed, 0x8d, 0x0c, 0x7b, 0x98, 0x16,
0x0f, 0x93, 0x61, 0x09, 0x8d, 0xbf, 0xca, 0x96, 0x0f, 0x92, 0x32, 0x0c, 0xd0, 0x01, 0x29, 0xde,
0xf1, 0xd3, 0x38, 0xcb, 0xaf, 0x97, 0xce, 0xf2, 0xdb, 0x64, 0x61, 0x94, 0xe4, 0xff, 0x99, 0x02,
0x2b, 0x99, 0x86, 0x68, 0xb6, 0xa4, 0x54, 0xf2, 0x25, 0xe5, 0x5d, 0xa8, 0x93, 0x3a, 0x8b, 0x39,
0xc3, 0xae, 0xbc, 0xdc, 0x49, 0xef, 0xaa, 0xb3, 0x05, 0x68, 0x07, 0xd6, 0x24, 0x17, 0x90, 0x5c,
0x07, 0x50, 0xfe, 0xfe, 0x51, 0xfb, 0x45, 0x0d, 0x5a, 0x09, 0x7e, 0x2c, 0xa8, 0x86, 0xcb, 0x74,
0xb8, 0x32, 0xc7, 0xab, 0xe6, 0x8f, 0x57, 0x70, 0xbd, 0x45, 0xf4, 0xce, 0xc1, 0x0e, 0x4b, 0xfe,
0x79, 0x25, 0xe2, 0x60, 0x87, 0xa6, 0xfe, 0xc9, 0xac, 0x7e, 0x29, 0x95, 0xd5, 0x67, 0xea, 0x9e,
0xe5, 0x73, 0xea, 0x9e, 0x46, 0xba, 0xee, 0x49, 0xd9, 0x51, 0x33, 0x6b, 0x47, 0x65, 0x0b, 0xd4,
0x77, 0x60, 0x6d, 0xec, 0x63, 0x23, 0xc4, 0xe6, 0xfd, 0xb3, 0xbd, 0x68, 0x88, 0x67, 0x46, 0xb2,
0x21, 0xf4, 0x20, 0xee, 0x0c, 0x31, 0x29, 0xb7, 0xa9, 0x94, 0xe5, 0x65, 0x15, 0x97, 0x0d, 0x13,
0xb2, 0x70, 0xcf, 0xf4, 0x2b, 0x5b, 0x1a, 0x77, 0x2e, 0x54, 0x1a, 0xbf, 0x0a, 0x2d, 0x11, 0x5a,
0x89, 0xb9, 0x77, 0x99, 0xe7, 0x13, 0xbe, 0xc0, 0x0c, 0x52, 0xce, 0x60, 0x25, 0xdd, 0x5a, 0xcd,
0x16, 0xa5, 0x6a, 0xbe, 0x28, 0xbd, 0x0e, 0xcb, 0x56, 0x30, 0x9c, 0x18, 0x4f, 0x71, 0x6f, 0x95,
0x8e, 0x2e, 0x59, 0xc1, 0x03, 0xe3, 0x29, 0xd6, 0xfe, 0xa5, 0x0a, 0xdd, 0xb8, 0x8a, 0x29, 0xed,
0x46, 0xca, 0x5c, 0xc2, 0x1f, 0x81, 0x1a, 0x07, 0x6a, 0xca, 0xe1, 0x73, 0x0b, 0xb1, 0xec, 0x7d,
0xc5, 0xca, 0x2c, 0x63, 0xaf, 0xa9, 0x8e, 0x70, 0xed, 0x85, 0x3a, 0xc2, 0x97, 0xbc, 0x0c, 0xbc,
0x03, 0xd7, 0xa2, 0x00, 0x9c, 0x3a, 0x36, 0xcb, 0xf2, 0xaf, 0x8a, 0xc1, 0xe3, 0xe4, 0xf1, 0x0b,
0x5c, 0xc0, 0x72, 0x91, 0x0b, 0xc8, 0xaa, 0x40, 0x23, 0xa7, 0x02, 0xf9, 0x3b, 0xc9, 0xa6, 0xe4,
0x4e, 0x52, 0x7b, 0x0c, 0x6b, 0xb4, 0x0d, 0x18, 0x8c, 0x7d, 0x6b, 0x84, 0xa3, 0x9c, 0xb5, 0x8c,
0x58, 0xfb, 0xd0, 0xc8, 0xa4, 0xbd, 0xd1, 0xb7, 0xf6, 0x33, 0x05, 0xd6, 0xf3, 0xfb, 0x52, 0x8d,
0x89, 0x1d, 0x89, 0x92, 0x72, 0x24, 0xbf, 0x0d, 0x6b, 0xf1, 0xf6, 0xe9, 0x84, 0xba, 0x20, 0x65,
0x94, 0x10, 0xae, 0xa3, 0x78, 0x0f, 0x01, 0xd3, 0x7e, 0xa1, 0x44, 0xdd, 0x54, 0x02, 0x9b, 0xd2,
0x4e, 0x32, 0x09, 0x6e, 0x9e, 0x6b, 0x5b, 0x6e, 0x54, 0x75, 0xf3, 0x33, 0x32, 0x20, 0xaf, 0xba,
0xdf, 0x83, 0x15, 0x3e, 0x29, 0x8a, 0x51, 0x25, 0xb3, 0xb2, 0x2e, 0x5b, 0x17, 0x45, 0xa7, 0xdb,
0xd0, 0xe5, 0x2d, 0x5e, 0x81, 0xaf, 0x2a, 0x69, 0xfc, 0xa2, 0xdf, 0x00, 0x55, 0x4c, 0x7b, 0xd1,
0xa8, 0xb8, 0xc2, 0x17, 0x46, 0xd9, 0xdd, 0x4f, 0x15, 0xe8, 0xa5, 0x63, 0x64, 0xe2, 0xf8, 0x2f,
0x9e, 0xe3, 0x7d, 0x37, 0x7d, 0x39, 0x76, 0xfb, 0x1c, 0x7a, 0x62, 0x3c, 0xe2, 0x8a, 0xec, 0x88,
0x5e, 0x74, 0x92, 0xd2, 0x64, 0xdf, 0x0a, 0x42, 0xdf, 0x1a, 0xcd, 0x2f, 0xf5, 0x4a, 0x43, 0xfb,
0xbb, 0x0a, 0x7c, 0x5d, 0xba, 0xe1, 0x65, 0xae, 0xc1, 0x8a, 0x3a, 0x01, 0xf7, 0xa1, 0x91, 0x29,
0x61, 0xde, 0x38, 0xe7, 0xf0, 0xbc, 0xa9, 0xc5, 0x9a, 0x2b, 0x62, 0x1d, 0xd9, 0x23, 0xd2, 0xe9,
0x5a, 0xf1, 0x1e, 0x5c, 0x69, 0x53, 0x7b, 0x88, 0x75, 0xe8, 0x1e, 0xb4, 0x59, 0x79, 0x38, 0x3c,
0xb5, 0xf0, 0x73, 0x71, 0x7b, 0x73, 0x53, 0xea, 0xd7, 0xe8, 0xbc, 0x27, 0x16, 0x7e, 0xae, 0xb7,
0xec, 0xe8, 0x77, 0xa0, 0xfd, 0x77, 0x15, 0x20, 0x1e, 0x23, 0xb5, 0x69, 0x6c, 0x30, 0xdc, 0x02,
0x12, 0x10, 0x12, 0x88, 0xd3, 0xb9, 0x9f, 0xf8, 0x44, 0x7a, 0xdc, 0x9e, 0x35, 0xad, 0x20, 0xe4,
0x7c, 0xd9, 0x39, 0x9f, 0x16, 0xc1, 0x22, 0x22, 0x32, 0x76, 0x39, 0x22, 0x6a, 0x2f, 0x02, 0x41,
0x6f, 0x03, 0x9a, 0xfa, 0xde, 0x73, 0xcb, 0x9d, 0x26, 0x33, 0x76, 0x96, 0xd8, 0xaf, 0xf2, 0x91,
0x44, 0xca, 0xfe, 0x63, 0x50, 0x33, 0xd3, 0x05, 0x4b, 0xee, 0x2c, 0x20, 0xe3, 0x20, 0xb5, 0x17,
0xbf, 0xa7, 0x59, 0x49, 0x63, 0x08, 0xfa, 0x43, 0x50, 0xb3, 0xf4, 0x4a, 0xee, 0x60, 0xbe, 0x9d,
0xbe, 0x83, 0x39, 0xcf, 0x4c, 0xc9, 0x36, 0x89, 0x4b, 0x98, 0xfe, 0x04, 0xae, 0xca, 0x28, 0x91,
0x20, 0xb9, 0x9b, 0x46, 0x52, 0x26, 0xa7, 0x4d, 0x5c, 0xf6, 0xfc, 0x20, 0x4a, 0x17, 0x29, 0x9b,
0x8b, 0x3c, 0x70, 0xa2, 0x29, 0x57, 0x49, 0x35, 0xe5, 0xb4, 0x3f, 0x51, 0x00, 0xe5, 0xb5, 0x1b,
0x75, 0xa1, 0x12, 0x6d, 0x52, 0x39, 0xdc, 0xcf, 0x68, 0x53, 0x25, 0xa7, 0x4d, 0x37, 0xa0, 0x19,
0x45, 0x44, 0xee, 0xfe, 0x62, 0x40, 0x52, 0xd7, 0x6a, 0x69, 0x5d, 0x4b, 0x10, 0x56, 0x4f, 0x13,
0x76, 0x02, 0x28, 0x6f, 0x31, 0xc9, 0x9d, 0x94, 0xf4, 0x4e, 0x8b, 0x28, 0x4c, 0x60, 0xaa, 0xa6,
0x31, 0xfd, 0x7b, 0x05, 0x50, 0x1c, 0xf3, 0xa3, 0x8b, 0xa8, 0x32, 0x81, 0x72, 0x07, 0xd6, 0xf2,
0x19, 0x81, 0x48, 0x83, 0x50, 0x2e, 0x1f, 0x90, 0xc5, 0xee, 0xaa, 0xec, 0x3d, 0xd1, 0xbb, 0x91,
0x8f, 0x63, 0x09, 0xce, 0xcd, 0xa2, 0x04, 0x27, 0xe3, 0xe6, 0x7e, 0x27, 0xfb, 0x0e, 0x89, 0x19,
0xcd, 0x5d, 0xa9, 0x3f, 0xca, 0x1d, 0xf9, 0xe5, 0x3f, 0x42, 0xfa, 0xd7, 0x0a, 0xac, 0x46, 0xdc,
0x78, 0x21, 0x4e, 0x2f, 0xbe, 0xf8, 0x7b, 0xc9, 0xac, 0xfd, 0x48, 0xce, 0xda, 0x5f, 0x3d, 0x37,
0x87, 0xfd, 0xfc, 0x38, 0x3b, 0x80, 0x65, 0xde, 0x3e, 0xcb, 0xd9, 0x6e, 0x99, 0x2a, 0xf1, 0x2a,
0xd4, 0x89, 0xab, 0x10, 0xfd, 0x24, 0xf6, 0xa1, 0xfd, 0x8d, 0x02, 0x30, 0x38, 0x73, 0xc7, 0xf7,
0x98, 0x09, 0xbd, 0x03, 0xb5, 0x45, 0xcf, 0x30, 0xc8, 0x6c, 0x9a, 0x74, 0xd3, 0x99, 0x25, 0xa4,
0x96, 0x2a, 0x70, 0xab, 0xd9, 0x02, 0xb7, 0xa8, 0x34, 0x2d, 0x76, 0x1b, 0xff, 0xa8, 0xc0, 0x75,
0x42, 0xc4, 0x67, 0x92, 0x8b, 0x94, 0x62, 0x5d, 0xc2, 0x25, 0x55, 0xd3, 0x2e, 0xe9, 0x2e, 0x2c,
0xb3, 0x1a, 0x53, 0xe4, 0x05, 0x37, 0x8b, 0x58, 0xc6, 0x18, 0xac, 0x8b, 0xe9, 0x5b, 0xbf, 0x0e,
0xcd, 0xa8, 0xd7, 0x8b, 0x5a, 0xb0, 0xfc, 0xd8, 0x7d, 0xdf, 0xf5, 0x9e, 0xbb, 0xea, 0x15, 0xb4,
0x0c, 0xd5, 0x7b, 0xb6, 0xad, 0x2a, 0xa8, 0x03, 0xcd, 0x41, 0xe8, 0x63, 0xc3, 0xb1, 0xdc, 0xa9,
0x5a, 0x41, 0x5d, 0x80, 0xf7, 0xac, 0x20, 0xf4, 0x7c, 0x6b, 0x6c, 0xd8, 0x6a, 0x75, 0xeb, 0x13,
0xe8, 0xa6, 0x2b, 0x29, 0xd4, 0x86, 0xc6, 0x91, 0x17, 0xfe, 0xf0, 0x63, 0x2b, 0x08, 0xd5, 0x2b,
0x64, 0xfe, 0x91, 0x17, 0x1e, 0xfb, 0x38, 0xc0, 0x6e, 0xa8, 0x2a, 0x08, 0x60, 0xe9, 0x47, 0xee,
0xbe, 0x15, 0x3c, 0x55, 0x2b, 0x68, 0x8d, 0x37, 0x49, 0x0c, 0xfb, 0x90, 0x97, 0x27, 0x6a, 0x95,
0x2c, 0x8f, 0xbe, 0x6a, 0x48, 0x85, 0x76, 0x34, 0xe5, 0xe0, 0xf8, 0xb1, 0x5a, 0x47, 0x4d, 0xa8,
0xb3, 0x9f, 0x4b, 0x5b, 0x26, 0xa8, 0xd9, 0x0e, 0x1f, 0xd9, 0x93, 0x1d, 0x22, 0x02, 0xa9, 0x57,
0xc8, 0xc9, 0x78, 0x8b, 0x55, 0x55, 0xd0, 0x0a, 0xb4, 0x12, 0x0d, 0x4b, 0xb5, 0x42, 0x00, 0x07,
0xfe, 0x6c, 0xcc, 0xa5, 0xc7, 0x48, 0x20, 0xb9, 0xf4, 0x3e, 0xe1, 0x44, 0x6d, 0xeb, 0x3e, 0x34,
0x44, 0x89, 0x47, 0xa6, 0x72, 0x16, 0x91, 0x4f, 0xf5, 0x0a, 0x5a, 0x85, 0x4e, 0xea, 0x9d, 0xa5,
0xaa, 0x20, 0x04, 0xdd, 0xf4, 0x33, 0x66, 0xb5, 0xb2, 0xb5, 0x0b, 0x10, 0x9b, 0x3a, 0x21, 0xe7,
0xd0, 0x3d, 0x35, 0x6c, 0xcb, 0x64, 0xb4, 0x91, 0x21, 0xc2, 0x5d, 0xca, 0x1d, 0xd6, 0xaa, 0x53,
0x2b, 0x5b, 0xaf, 0x42, 0x43, 0x68, 0x39, 0x81, 0xeb, 0xd8, 0xf1, 0x4e, 0x31, 0x93, 0xcc, 0x00,
0x87, 0xaa, 0xb2, 0xfb, 0xbf, 0x1d, 0x00, 0xd6, 0x94, 0xf3, 0x3c, 0xdf, 0x44, 0x36, 0xa0, 0x03,
0x1c, 0xee, 0x79, 0xce, 0xcc, 0x73, 0x45, 0xb3, 0x20, 0x40, 0xdb, 0x69, 0x55, 0xe0, 0x1f, 0xf9,
0x89, 0xfc, 0xf4, 0xfd, 0xd7, 0xa5, 0xf3, 0x33, 0x93, 0xb5, 0x2b, 0xc8, 0xa1, 0xd8, 0x1e, 0x59,
0x0e, 0x7e, 0x64, 0x8d, 0x9f, 0x46, 0x9d, 0xbc, 0xe2, 0x37, 0xc8, 0x99, 0xa9, 0x02, 0xdf, 0x2d,
0x29, 0xbe, 0x41, 0xe8, 0x5b, 0xee, 0x54, 0xa4, 0xe2, 0xda, 0x15, 0xf4, 0x2c, 0xf3, 0x02, 0x5a,
0x20, 0xdc, 0x2d, 0xf3, 0xe8, 0xf9, 0x62, 0x28, 0x6d, 0x58, 0xc9, 0xfc, 0xa3, 0x03, 0x6d, 0xc9,
0x1f, 0xb5, 0xc9, 0xfe, 0x7d, 0xd2, 0x7f, 0xab, 0xd4, 0xdc, 0x08, 0x9b, 0x05, 0xdd, 0xf4, 0xbf,
0x16, 0xd0, 0xaf, 0x14, 0x6d, 0x90, 0x7b, 0x56, 0xdb, 0xdf, 0x2a, 0x33, 0x35, 0x42, 0xf5, 0x21,
0x53, 0xd0, 0x45, 0xa8, 0xa4, 0xef, 0x87, 0xfb, 0xe7, 0x55, 0x41, 0xda, 0x15, 0xf4, 0x13, 0x58,
0xcd, 0x3d, 0xfe, 0x45, 0xdf, 0x90, 0xdf, 0xd6, 0xc8, 0xdf, 0x08, 0x2f, 0xc2, 0xf0, 0x61, 0xd6,
0xbc, 0x8a, 0xa9, 0xcf, 0xbd, 0xe5, 0x2f, 0x4f, 0x7d, 0x62, 0xfb, 0xf3, 0xa8, 0x7f, 0x61, 0x0c,
0x73, 0x6a, 0x36, 0xd9, 0xd6, 0xf0, 0xdb, 0x32, 0x14, 0x85, 0x2f, 0x90, 0xfb, 0xdb, 0x65, 0xa7,
0x27, 0xb5, 0x2b, 0xfd, 0xc8, 0x55, 0xce, 0x34, 0xe9, 0xc3, 0x5c, 0xb9, 0x76, 0xc9, 0xdf, 0xcc,
0x6a, 0x57, 0xd0, 0xa3, 0x94, 0x7b, 0x45, 0x6f, 0x14, 0x09, 0x27, 0x7d, 0x61, 0xb4, 0x88, 0x6f,
0xbf, 0x0b, 0x88, 0xd9, 0x8e, 0x3b, 0xb1, 0xa6, 0x73, 0xdf, 0x60, 0x8a, 0x55, 0xe4, 0x6e, 0xf2,
0x53, 0x05, 0x9a, 0x6f, 0xbe, 0xc0, 0x8a, 0xe8, 0x48, 0x43, 0x80, 0x03, 0x1c, 0x3e, 0xc4, 0xa1,
0x6f, 0x8d, 0x83, 0xec, 0x89, 0x62, 0x8f, 0xca, 0x27, 0x08, 0x54, 0x6f, 0x2e, 0x9c, 0x17, 0x21,
0x18, 0x41, 0xeb, 0x00, 0x87, 0x3c, 0xaf, 0x0a, 0x50, 0xe1, 0x4a, 0x31, 0x43, 0xa0, 0xd8, 0x5c,
0x3c, 0x31, 0xe9, 0xce, 0x32, 0x0f, 0x7e, 0x51, 0xa1, 0x60, 0xf3, 0xcf, 0x90, 0xe5, 0xee, 0xac,
0xe0, 0x05, 0x31, 0x3b, 0xd1, 0xde, 0x09, 0x1e, 0x3f, 0x7d, 0x0f, 0x1b, 0x76, 0x78, 0x52, 0x70,
0xa2, 0xc4, 0x8c, 0xf3, 0x4f, 0x94, 0x9a, 0x28, 0x70, 0xec, 0x7e, 0xda, 0x85, 0x26, 0x8d, 0x7f,
0x24, 0x58, 0xff, 0x32, 0xfc, 0x7d, 0xc6, 0xe1, 0xef, 0x23, 0x58, 0xc9, 0xbc, 0x4f, 0x95, 0xeb,
0x8b, 0xfc, 0x11, 0x6b, 0x09, 0x2f, 0x9e, 0x7e, 0x3b, 0x2a, 0x77, 0x48, 0xd2, 0xf7, 0xa5, 0x8b,
0xf6, 0x7e, 0xc2, 0x9e, 0x76, 0x47, 0x7d, 0xd3, 0x37, 0x0b, 0x2b, 0xaf, 0xf4, 0x7d, 0xfb, 0x17,
0x1f, 0x1d, 0x5e, 0x7e, 0xf4, 0xfc, 0x08, 0x56, 0x32, 0xaf, 0x9e, 0xe4, 0x52, 0x95, 0x3f, 0x8d,
0x5a, 0xb4, 0xfb, 0xe7, 0x18, 0x66, 0x4c, 0x58, 0x93, 0x3c, 0x48, 0x41, 0xdb, 0x45, 0x95, 0x8f,
0xfc, 0xe5, 0xca, 0xe2, 0x03, 0x75, 0x52, 0xa6, 0x84, 0x36, 0x8b, 0x88, 0xcc, 0xfe, 0xc3, 0xae,
0xff, 0x8d, 0x72, 0x7f, 0xc7, 0x8b, 0x0e, 0x34, 0x80, 0x25, 0xf6, 0x16, 0x0a, 0xbd, 0x26, 0xef,
0xff, 0x25, 0xde, 0x49, 0xf5, 0x17, 0xbd, 0xa6, 0x0a, 0xe6, 0x76, 0x18, 0xd0, 0x4d, 0xeb, 0xd4,
0x43, 0x22, 0xe9, 0x23, 0xbe, 0xe4, 0x03, 0xa6, 0xfe, 0xe2, 0x37, 0x4b, 0x62, 0xd3, 0xff, 0xdf,
0xb1, 0xf8, 0x63, 0x58, 0x93, 0xdc, 0x0a, 0xa0, 0xa2, 0x9c, 0xab, 0xe0, 0x3e, 0xa2, 0xbf, 0x53,
0x7a, 0x7e, 0x84, 0xf9, 0xc7, 0xa0, 0x66, 0x3b, 0x0a, 0xe8, 0xad, 0x22, 0x7d, 0x96, 0xe1, 0x3c,
0x5f, 0x99, 0xef, 0x7f, 0xeb, 0xc3, 0xdd, 0xa9, 0x15, 0x9e, 0xcc, 0x47, 0x64, 0x64, 0x87, 0x4d,
0x7d, 0xdb, 0xf2, 0xf8, 0xaf, 0x1d, 0xc1, 0xff, 0x1d, 0xba, 0x7a, 0x87, 0xa2, 0x9a, 0x8d, 0x46,
0x4b, 0xf4, 0xf3, 0xce, 0xff, 0x05, 0x00, 0x00, 0xff, 0xff, 0x10, 0x87, 0xa4, 0x30, 0xdc, 0x3f,
0x00, 0x00,
0xc5, 0x47, 0x4c, 0xc2, 0x2d, 0x4a, 0x44, 0x1a, 0x88, 0x7a, 0xb0, 0x7c, 0x8a, 0xfd, 0xc0, 0xf2,
0xdc, 0x5e, 0x9b, 0x8e, 0x8b, 0xcf, 0xfe, 0x10, 0x56, 0x73, 0x28, 0x24, 0x21, 0xfe, 0x5b, 0xc9,
0x10, 0xbf, 0x98, 0xc7, 0x89, 0x14, 0xe0, 0xcf, 0x15, 0xb8, 0xf6, 0xd8, 0x0d, 0xe6, 0xa3, 0xe8,
0x6c, 0x5f, 0x8c, 0x1e, 0x67, 0x3d, 0x48, 0x2d, 0xe7, 0x41, 0xb4, 0x9f, 0xd6, 0x61, 0x85, 0x9f,
0x82, 0x88, 0x9b, 0xba, 0x82, 0x1b, 0xd0, 0x8c, 0x82, 0x08, 0x67, 0x48, 0x0c, 0x40, 0x1b, 0xd0,
0x4a, 0x18, 0x02, 0xa7, 0x2a, 0x09, 0x2a, 0x45, 0x9a, 0x48, 0x09, 0x6a, 0x89, 0x94, 0xe0, 0x15,
0x80, 0x89, 0x3d, 0x0f, 0x4e, 0x86, 0xa1, 0xe5, 0x60, 0x9e, 0x92, 0x34, 0x29, 0xe4, 0x91, 0xe5,
0x60, 0x74, 0x0f, 0xda, 0x23, 0xcb, 0xb5, 0xbd, 0xe9, 0x70, 0x66, 0x84, 0x27, 0x01, 0x2f, 0xa3,
0x64, 0x62, 0xa1, 0x09, 0xdc, 0x7d, 0x3a, 0x57, 0x6f, 0xb1, 0x35, 0xc7, 0x64, 0x09, 0xba, 0x09,
0x2d, 0x77, 0xee, 0x0c, 0xbd, 0xc9, 0xd0, 0xf7, 0x9e, 0x13, 0xe3, 0xa1, 0x28, 0xdc, 0xb9, 0xf3,
0xa3, 0x89, 0xee, 0x3d, 0x27, 0x4e, 0xbc, 0x49, 0xdc, 0x79, 0x60, 0x7b, 0xd3, 0xa0, 0xd7, 0x28,
0xb5, 0x7f, 0xbc, 0x80, 0xac, 0x36, 0xb1, 0x1d, 0x1a, 0x74, 0x75, 0xb3, 0xdc, 0xea, 0x68, 0x01,
0x7a, 0x03, 0xba, 0x63, 0xcf, 0x99, 0x19, 0x94, 0x43, 0x0f, 0x7c, 0xcf, 0xa1, 0x96, 0x53, 0xd5,
0x33, 0x50, 0xb4, 0x07, 0x2d, 0x9a, 0xfc, 0x72, 0xf3, 0x6a, 0x51, 0x3c, 0x9a, 0xcc, 0xbc, 0x12,
0x79, 0x2c, 0x51, 0x50, 0xb0, 0xc4, 0xcf, 0x80, 0x68, 0x86, 0xb0, 0xd2, 0xc0, 0xfa, 0x04, 0x73,
0x0b, 0x69, 0x71, 0xd8, 0xc0, 0xfa, 0x04, 0x93, 0x8c, 0xdc, 0x72, 0x03, 0xec, 0x87, 0xa2, 0x3e,
0xea, 0x75, 0xa8, 0xfa, 0x74, 0x18, 0x94, 0x2b, 0x36, 0x3a, 0x84, 0x6e, 0x10, 0x1a, 0x7e, 0x38,
0x9c, 0x79, 0x01, 0x55, 0x80, 0x5e, 0x97, 0xea, 0xb6, 0x56, 0x50, 0x8d, 0x3d, 0x0c, 0xa6, 0xc7,
0x7c, 0xa6, 0xde, 0xa1, 0x2b, 0xc5, 0xa7, 0xf6, 0x5f, 0x15, 0xe8, 0xa6, 0x69, 0x26, 0x46, 0xcc,
0xb2, 0x73, 0xa1, 0x88, 0xe2, 0x93, 0x9c, 0x00, 0xbb, 0xc6, 0xc8, 0xc6, 0xac, 0x14, 0xa0, 0x7a,
0xd8, 0xd0, 0x5b, 0x0c, 0x46, 0x37, 0x20, 0xfa, 0xc4, 0x38, 0x45, 0x95, 0xbf, 0x4a, 0xa9, 0x6f,
0x52, 0x08, 0x0d, 0x9e, 0x3d, 0x58, 0x16, 0x55, 0x04, 0xd3, 0x42, 0xf1, 0x49, 0x46, 0x46, 0x73,
0x8b, 0x62, 0x65, 0x5a, 0x28, 0x3e, 0xd1, 0x3e, 0xb4, 0xd9, 0x96, 0x33, 0xc3, 0x37, 0x1c, 0xa1,
0x83, 0xaf, 0x49, 0xed, 0xf8, 0x7d, 0x7c, 0xf6, 0x84, 0xb8, 0x84, 0x63, 0xc3, 0xf2, 0x75, 0x26,
0xb3, 0x63, 0xba, 0x0a, 0x6d, 0x82, 0xca, 0x76, 0x99, 0x58, 0x36, 0xe6, 0xda, 0xbc, 0x4c, 0x23,
0x74, 0x97, 0xc2, 0x1f, 0x58, 0x36, 0x66, 0x0a, 0x1b, 0x1d, 0x81, 0x4a, 0xa9, 0xc1, 0xf4, 0x95,
0x42, 0xa8, 0x8c, 0x6e, 0x41, 0x87, 0x0d, 0x0b, 0x4f, 0xc7, 0xdc, 0x31, 0xa3, 0xf1, 0x09, 0x83,
0xd1, 0x24, 0x61, 0xee, 0x30, 0x8d, 0x07, 0x76, 0x1c, 0x77, 0xee, 0x10, 0x7d, 0xd7, 0xfe, 0xb0,
0x06, 0x6b, 0xc4, 0xec, 0xb9, 0x07, 0xb8, 0x44, 0xb8, 0x7d, 0x05, 0xc0, 0x0c, 0xc2, 0x61, 0xca,
0x55, 0x35, 0xcd, 0x20, 0xe4, 0xce, 0xf8, 0x3b, 0x22, 0x5a, 0x56, 0x8b, 0x13, 0xe8, 0x8c, 0x1b,
0xca, 0x47, 0xcc, 0x0b, 0x35, 0x69, 0x6e, 0x41, 0x27, 0xf0, 0xe6, 0xfe, 0x18, 0x0f, 0x53, 0xa5,
0x4e, 0x9b, 0x01, 0x8f, 0xe4, 0xce, 0x74, 0x49, 0xda, 0x2c, 0x4a, 0x44, 0xcd, 0xe5, 0xcb, 0x45,
0xcd, 0x46, 0x36, 0x6a, 0xbe, 0x0f, 0x2b, 0xd4, 0x13, 0x44, 0x56, 0x24, 0x1c, 0x48, 0x19, 0x33,
0xea, 0xd2, 0xa5, 0xe2, 0x33, 0x48, 0x46, 0x3e, 0x48, 0x45, 0x3e, 0xc2, 0x0c, 0x17, 0x63, 0x73,
0x18, 0xfa, 0x86, 0x1b, 0x4c, 0xb0, 0x4f, 0x23, 0x67, 0x43, 0x6f, 0x13, 0xe0, 0x23, 0x0e, 0xd3,
0xfe, 0xb9, 0x02, 0xeb, 0xbc, 0x80, 0xbd, 0xbc, 0x5e, 0x14, 0x85, 0x2f, 0xe1, 0xff, 0xab, 0xe7,
0x94, 0x84, 0xb5, 0x12, 0xa9, 0x59, 0x5d, 0x92, 0x9a, 0xa5, 0xcb, 0xa2, 0xa5, 0x5c, 0x59, 0x14,
0xf5, 0x61, 0x96, 0xcb, 0xf7, 0x61, 0x48, 0xc1, 0x4f, 0x73, 0x75, 0x2a, 0xbb, 0xa6, 0xce, 0x3e,
0xca, 0x31, 0xf4, 0x3f, 0x14, 0xe8, 0x0c, 0xb0, 0xe1, 0x8f, 0x4f, 0x04, 0x1f, 0xdf, 0x4d, 0xf6,
0xad, 0x5e, 0x2f, 0x10, 0x71, 0x6a, 0xc9, 0x57, 0xa7, 0x61, 0xf5, 0x9f, 0x0a, 0xb4, 0x7f, 0x9d,
0x0c, 0x89, 0xc3, 0xde, 0x4d, 0x1e, 0xf6, 0x8d, 0x82, 0xc3, 0xea, 0x38, 0xf4, 0x2d, 0x7c, 0x8a,
0xbf, 0x72, 0xc7, 0xfd, 0x27, 0x05, 0xfa, 0x83, 0x33, 0x77, 0xac, 0x33, 0x5b, 0xbe, 0xbc, 0xc5,
0xdc, 0x82, 0xce, 0x69, 0x2a, 0x6b, 0xab, 0x50, 0x85, 0x6b, 0x9f, 0x26, 0x0b, 0x3f, 0x1d, 0x54,
0xd1, 0x2e, 0xe3, 0x87, 0x15, 0xae, 0xf5, 0x4d, 0x19, 0xd5, 0x19, 0xe2, 0xa8, 0x6b, 0x5a, 0xf1,
0xd3, 0x40, 0xed, 0xf7, 0x15, 0x58, 0x93, 0x4c, 0x44, 0xd7, 0x61, 0x99, 0x17, 0x99, 0x3c, 0x06,
0x33, 0x1b, 0x36, 0x89, 0x78, 0xe2, 0x36, 0x89, 0x65, 0xe6, 0x53, 0x41, 0x13, 0xbd, 0x0a, 0xad,
0xa8, 0x1a, 0x30, 0x73, 0xf2, 0x31, 0x03, 0xd4, 0x87, 0x06, 0x77, 0x4e, 0xa2, 0xcc, 0x8a, 0xbe,
0xb5, 0xbf, 0x53, 0x60, 0xfd, 0x3d, 0xc3, 0x35, 0xbd, 0xc9, 0xe4, 0xf2, 0x6c, 0xdd, 0x83, 0x54,
0x11, 0x51, 0xb6, 0x3d, 0x91, 0xae, 0x3c, 0xde, 0x82, 0x55, 0x9f, 0x79, 0x46, 0x33, 0xcd, 0xf7,
0xaa, 0xae, 0x8a, 0x81, 0x88, 0x9f, 0x7f, 0x59, 0x01, 0x44, 0x82, 0xc1, 0x7d, 0xc3, 0x36, 0xdc,
0x31, 0xbe, 0x38, 0xe9, 0xb7, 0xa1, 0x9b, 0x0a, 0x61, 0xd1, 0x5d, 0x58, 0x32, 0x86, 0x05, 0xe8,
0x7d, 0xe8, 0x8e, 0x18, 0xaa, 0xa1, 0x8f, 0x8d, 0xc0, 0x73, 0xa9, 0x73, 0xed, 0xca, 0x3b, 0x11,
0x8f, 0x7c, 0x6b, 0x3a, 0xc5, 0xfe, 0x9e, 0xe7, 0x9a, 0x3c, 0x17, 0x1b, 0x09, 0x32, 0xc9, 0x52,
0x22, 0xb8, 0x38, 0x9e, 0x0b, 0xd1, 0x40, 0x14, 0xd0, 0x29, 0x2b, 0x02, 0x6c, 0xd8, 0x31, 0x23,
0x62, 0x6f, 0xac, 0xb2, 0x81, 0x41, 0x71, 0x23, 0x4a, 0x12, 0x5f, 0xb5, 0xbf, 0x51, 0x00, 0x45,
0xf5, 0x12, 0xad, 0x0c, 0xa9, 0xf6, 0x65, 0x97, 0x2a, 0x92, 0xa0, 0x70, 0x03, 0x9a, 0xa6, 0x58,
0xc9, 0xcd, 0x25, 0x06, 0x50, 0x1f, 0x4d, 0x89, 0x1e, 0x92, 0x60, 0x8c, 0x4d, 0x51, 0x8f, 0x30,
0xe0, 0x07, 0x14, 0x96, 0x0e, 0xcf, 0xb5, 0x6c, 0x78, 0x4e, 0xf6, 0x59, 0xea, 0xa9, 0x3e, 0x8b,
0xf6, 0x69, 0x05, 0x54, 0xea, 0xee, 0xf6, 0xe2, 0x62, 0xbf, 0x14, 0xd1, 0xb7, 0xa0, 0xc3, 0x6f,
0x8b, 0x53, 0x84, 0xb7, 0x9f, 0x25, 0x36, 0x43, 0xef, 0xc0, 0x55, 0x36, 0xc9, 0xc7, 0xc1, 0xdc,
0x8e, 0x53, 0x71, 0x96, 0xcc, 0xa2, 0x67, 0xcc, 0xcf, 0x92, 0x21, 0xb1, 0xe2, 0x31, 0xac, 0x4f,
0x6d, 0x6f, 0x64, 0xd8, 0xc3, 0xb4, 0x78, 0x98, 0x0c, 0x4b, 0x68, 0xfc, 0x55, 0xb6, 0x7c, 0x90,
0x94, 0x61, 0x80, 0x0e, 0x48, 0x59, 0x8f, 0x9f, 0xc6, 0x59, 0x7e, 0xbd, 0x74, 0x96, 0xdf, 0x26,
0x0b, 0xa3, 0x24, 0xff, 0x4f, 0x14, 0x58, 0xc9, 0xb4, 0x4a, 0xb3, 0x25, 0xa5, 0x92, 0x2f, 0x29,
0xef, 0x42, 0x9d, 0xd4, 0x59, 0xcc, 0x19, 0x76, 0xe5, 0xe5, 0x4e, 0x7a, 0x57, 0x9d, 0x2d, 0x40,
0x3b, 0xb0, 0x26, 0xb9, 0x9a, 0xe4, 0x3a, 0x80, 0xf2, 0x37, 0x93, 0xda, 0xcf, 0x6b, 0xd0, 0x4a,
0xf0, 0x63, 0x41, 0x35, 0x5c, 0xa6, 0xf7, 0x95, 0x39, 0x5e, 0x35, 0x7f, 0xbc, 0x82, 0x8b, 0x2f,
0xa2, 0x77, 0x0e, 0x76, 0x58, 0xf2, 0xcf, 0x2b, 0x11, 0x07, 0x3b, 0x34, 0xf5, 0x4f, 0x66, 0xf5,
0x4b, 0xa9, 0xac, 0x3e, 0x53, 0xf7, 0x2c, 0x9f, 0x53, 0xf7, 0x34, 0xd2, 0x75, 0x4f, 0xca, 0x8e,
0x9a, 0x59, 0x3b, 0x2a, 0x5b, 0xa0, 0xbe, 0x03, 0x6b, 0x63, 0x1f, 0x1b, 0x21, 0x36, 0xef, 0x9f,
0xed, 0x45, 0x43, 0x3c, 0x33, 0x92, 0x0d, 0xa1, 0x07, 0x71, 0xcf, 0x88, 0x49, 0xb9, 0x4d, 0xa5,
0x2c, 0x2f, 0xab, 0xb8, 0x6c, 0x98, 0x90, 0x85, 0x7b, 0xa6, 0x5f, 0xd9, 0xd2, 0xb8, 0x73, 0xa1,
0xd2, 0xf8, 0x55, 0x68, 0x89, 0xd0, 0x4a, 0xcc, 0xbd, 0xcb, 0x3c, 0x9f, 0xf0, 0x05, 0x66, 0x90,
0x72, 0x06, 0x2b, 0xe9, 0xa6, 0x6b, 0xb6, 0x28, 0x55, 0xf3, 0x45, 0xe9, 0x75, 0x58, 0xb6, 0x82,
0xe1, 0xc4, 0x78, 0x8a, 0x7b, 0xab, 0x74, 0x74, 0xc9, 0x0a, 0x1e, 0x18, 0x4f, 0xb1, 0xf6, 0x2f,
0x55, 0xe8, 0xc6, 0x55, 0x4c, 0x69, 0x37, 0x52, 0xe6, 0x7a, 0xfe, 0x08, 0xd4, 0x38, 0x50, 0x53,
0x0e, 0x9f, 0x5b, 0x88, 0x65, 0x6f, 0x32, 0x56, 0x66, 0x19, 0x7b, 0x4d, 0xf5, 0x8a, 0x6b, 0x2f,
0xd4, 0x2b, 0xbe, 0xe4, 0x35, 0xe1, 0x1d, 0xb8, 0x16, 0x05, 0xe0, 0xd4, 0xb1, 0x59, 0x96, 0x7f,
0x55, 0x0c, 0x1e, 0x27, 0x8f, 0x5f, 0xe0, 0x02, 0x96, 0x8b, 0x5c, 0x40, 0x56, 0x05, 0x1a, 0x39,
0x15, 0xc8, 0xdf, 0x56, 0x36, 0x25, 0xb7, 0x95, 0xda, 0x63, 0x58, 0xa3, 0x6d, 0xc0, 0x60, 0xec,
0x5b, 0x23, 0x1c, 0xe5, 0xac, 0x65, 0xc4, 0xda, 0x87, 0x46, 0x26, 0xed, 0x8d, 0xbe, 0xb5, 0x9f,
0x29, 0xb0, 0x9e, 0xdf, 0x97, 0x6a, 0x4c, 0xec, 0x48, 0x94, 0x94, 0x23, 0xf9, 0x4d, 0x58, 0x8b,
0xb7, 0x4f, 0x27, 0xd4, 0x05, 0x29, 0xa3, 0x84, 0x70, 0x1d, 0xc5, 0x7b, 0x08, 0x98, 0xf6, 0x73,
0x25, 0xea, 0xa6, 0x12, 0xd8, 0x94, 0xf6, 0x98, 0x49, 0x70, 0xf3, 0x5c, 0xdb, 0x72, 0xa3, 0xaa,
0x9b, 0x9f, 0x91, 0x01, 0x79, 0xd5, 0xfd, 0x1e, 0xac, 0xf0, 0x49, 0x51, 0x8c, 0x2a, 0x99, 0x95,
0x75, 0xd9, 0xba, 0x28, 0x3a, 0xdd, 0x86, 0x2e, 0x6f, 0xfe, 0x0a, 0x7c, 0x55, 0x59, 0x4b, 0xf8,
0xd7, 0x40, 0x15, 0xd3, 0x5e, 0x34, 0x2a, 0xae, 0xf0, 0x85, 0x51, 0x76, 0xf7, 0x53, 0x05, 0x7a,
0xe9, 0x18, 0x99, 0x38, 0xfe, 0x8b, 0xe7, 0x78, 0xdf, 0x4d, 0x5f, 0x9b, 0xdd, 0x3e, 0x87, 0x9e,
0x18, 0x8f, 0xb8, 0x3c, 0x3b, 0xa2, 0x57, 0xa0, 0xa4, 0x34, 0xd9, 0xb7, 0x82, 0xd0, 0xb7, 0x46,
0xf3, 0x4b, 0xbd, 0xdf, 0xd0, 0xfe, 0xb6, 0x02, 0x5f, 0x97, 0x6e, 0x78, 0x99, 0x0b, 0xb2, 0xa2,
0x4e, 0xc0, 0x7d, 0x68, 0x64, 0x4a, 0x98, 0x37, 0xce, 0x39, 0x3c, 0x6f, 0x6a, 0xb1, 0xe6, 0x8a,
0x58, 0x47, 0xf6, 0x88, 0x74, 0xba, 0x56, 0xbc, 0x07, 0x57, 0xda, 0xd4, 0x1e, 0x62, 0x1d, 0xba,
0x07, 0x6d, 0x56, 0x1e, 0x0e, 0x4f, 0x2d, 0xfc, 0x5c, 0xdc, 0xeb, 0xdc, 0x94, 0xfa, 0x35, 0x3a,
0xef, 0x89, 0x85, 0x9f, 0xeb, 0x2d, 0x3b, 0xfa, 0x1d, 0x68, 0xff, 0x5d, 0x05, 0x88, 0xc7, 0x48,
0x6d, 0x1a, 0x1b, 0x0c, 0xb7, 0x80, 0x04, 0x84, 0x04, 0xe2, 0x74, 0xee, 0x27, 0x3e, 0x91, 0x1e,
0xb7, 0x67, 0x4d, 0x2b, 0x08, 0x39, 0x5f, 0x76, 0xce, 0xa7, 0x45, 0xb0, 0x88, 0x88, 0x8c, 0x5d,
0x9b, 0x88, 0xda, 0x8b, 0x40, 0xd0, 0xdb, 0x80, 0xa6, 0xbe, 0xf7, 0xdc, 0x72, 0xa7, 0xc9, 0x8c,
0x9d, 0x25, 0xf6, 0xab, 0x7c, 0x24, 0x91, 0xb2, 0xff, 0x18, 0xd4, 0xcc, 0x74, 0xc1, 0x92, 0x3b,
0x0b, 0xc8, 0x38, 0x48, 0xed, 0xc5, 0x6f, 0x70, 0x56, 0xd2, 0x18, 0x82, 0xfe, 0x10, 0xd4, 0x2c,
0xbd, 0x92, 0x3b, 0x98, 0x6f, 0xa7, 0xef, 0x60, 0xce, 0x33, 0x53, 0xb2, 0x4d, 0xe2, 0x12, 0xa6,
0x3f, 0x81, 0xab, 0x32, 0x4a, 0x24, 0x48, 0xee, 0xa6, 0x91, 0x94, 0xc9, 0x69, 0x13, 0x97, 0x3d,
0x3f, 0x88, 0xd2, 0x45, 0xca, 0xe6, 0x22, 0x0f, 0x9c, 0x68, 0xca, 0x55, 0x52, 0x4d, 0x39, 0xed,
0x8f, 0x14, 0x40, 0x79, 0xed, 0x46, 0x5d, 0xa8, 0x44, 0x9b, 0x54, 0x0e, 0xf7, 0x33, 0xda, 0x54,
0xc9, 0x69, 0xd3, 0x0d, 0x68, 0x46, 0x11, 0x91, 0xbb, 0xbf, 0x18, 0x90, 0xd4, 0xb5, 0x5a, 0x5a,
0xd7, 0x12, 0x84, 0xd5, 0xd3, 0x84, 0x9d, 0x00, 0xca, 0x5b, 0x4c, 0x72, 0x27, 0x25, 0xbd, 0xd3,
0x22, 0x0a, 0x13, 0x98, 0xaa, 0x69, 0x4c, 0xff, 0x5e, 0x01, 0x14, 0xc7, 0xfc, 0xe8, 0x22, 0xaa,
0x4c, 0xa0, 0xdc, 0x81, 0xb5, 0x7c, 0x46, 0x20, 0xd2, 0x20, 0x94, 0xcb, 0x07, 0x64, 0xb1, 0xbb,
0x2a, 0x7b, 0x69, 0xf4, 0x6e, 0xe4, 0xe3, 0x58, 0x82, 0x73, 0xb3, 0x28, 0xc1, 0xc9, 0xb8, 0xb9,
0xdf, 0xca, 0xbe, 0x50, 0x62, 0x46, 0x73, 0x57, 0xea, 0x8f, 0x72, 0x47, 0x7e, 0xf9, 0xcf, 0x93,
0xfe, 0xb5, 0x02, 0xab, 0x11, 0x37, 0x5e, 0x88, 0xd3, 0x8b, 0x2f, 0xfe, 0x5e, 0x32, 0x6b, 0x3f,
0x92, 0xb3, 0xf6, 0x97, 0xcf, 0xcd, 0x61, 0x3f, 0x3f, 0xce, 0x0e, 0x60, 0x99, 0xb7, 0xcf, 0x72,
0xb6, 0x5b, 0xa6, 0x4a, 0xbc, 0x0a, 0x75, 0xe2, 0x2a, 0x44, 0x3f, 0x89, 0x7d, 0x68, 0x7f, 0xad,
0x00, 0x0c, 0xce, 0xdc, 0xf1, 0x3d, 0x66, 0x42, 0xef, 0x40, 0x6d, 0xd1, 0x03, 0x0d, 0x32, 0x9b,
0x26, 0xdd, 0x74, 0x66, 0x09, 0xa9, 0xa5, 0x0a, 0xdc, 0x6a, 0xb6, 0xc0, 0x2d, 0x2a, 0x4d, 0x8b,
0xdd, 0xc6, 0x3f, 0x28, 0x70, 0x9d, 0x10, 0xf1, 0x99, 0xe4, 0x22, 0xa5, 0x58, 0x97, 0x70, 0x49,
0xd5, 0xb4, 0x4b, 0xba, 0x0b, 0xcb, 0xac, 0xc6, 0x14, 0x79, 0xc1, 0xcd, 0x22, 0x96, 0x31, 0x06,
0xeb, 0x62, 0xfa, 0xd6, 0xaf, 0x42, 0x33, 0xea, 0xf5, 0xa2, 0x16, 0x2c, 0x3f, 0x76, 0xdf, 0x77,
0xbd, 0xe7, 0xae, 0x7a, 0x05, 0x2d, 0x43, 0xf5, 0x9e, 0x6d, 0xab, 0x0a, 0xea, 0x40, 0x73, 0x10,
0xfa, 0xd8, 0x70, 0x2c, 0x77, 0xaa, 0x56, 0x50, 0x17, 0xe0, 0x3d, 0x2b, 0x08, 0x3d, 0xdf, 0x1a,
0x1b, 0xb6, 0x5a, 0xdd, 0xfa, 0x04, 0xba, 0xe9, 0x4a, 0x0a, 0xb5, 0xa1, 0x71, 0xe4, 0x85, 0x3f,
0xfc, 0xd8, 0x0a, 0x42, 0xf5, 0x0a, 0x99, 0x7f, 0xe4, 0x85, 0xc7, 0x3e, 0x0e, 0xb0, 0x1b, 0xaa,
0x0a, 0x02, 0x58, 0xfa, 0x91, 0xbb, 0x6f, 0x05, 0x4f, 0xd5, 0x0a, 0x5a, 0xe3, 0x4d, 0x12, 0xc3,
0x3e, 0xe4, 0xe5, 0x89, 0x5a, 0x25, 0xcb, 0xa3, 0xaf, 0x1a, 0x52, 0xa1, 0x1d, 0x4d, 0x39, 0x38,
0x7e, 0xac, 0xd6, 0x51, 0x13, 0xea, 0xec, 0xe7, 0xd2, 0x96, 0x09, 0x6a, 0xb6, 0xc3, 0x47, 0xf6,
0x64, 0x87, 0x88, 0x40, 0xea, 0x15, 0x72, 0x32, 0xde, 0x62, 0x55, 0x15, 0xb4, 0x02, 0xad, 0x44,
0xc3, 0x52, 0xad, 0x10, 0xc0, 0x81, 0x3f, 0x1b, 0x73, 0xe9, 0x31, 0x12, 0x48, 0x2e, 0xbd, 0x4f,
0x38, 0x51, 0xdb, 0xba, 0x0f, 0x0d, 0x51, 0xe2, 0x91, 0xa9, 0x9c, 0x45, 0xe4, 0x53, 0xbd, 0x82,
0x56, 0xa1, 0x93, 0x7a, 0x81, 0xa9, 0x2a, 0x08, 0x41, 0x37, 0xfd, 0xc0, 0x59, 0xad, 0x6c, 0xed,
0x02, 0xc4, 0xa6, 0x4e, 0xc8, 0x39, 0x74, 0x4f, 0x0d, 0xdb, 0x32, 0x19, 0x6d, 0x64, 0x88, 0x70,
0x97, 0x72, 0x87, 0xb5, 0xea, 0xd4, 0xca, 0xd6, 0xab, 0xd0, 0x10, 0x5a, 0x4e, 0xe0, 0x3a, 0x76,
0xbc, 0x53, 0xcc, 0x24, 0x33, 0xc0, 0xa1, 0xaa, 0xec, 0xfe, 0x6f, 0x07, 0x80, 0x35, 0xe5, 0x3c,
0xcf, 0x37, 0x91, 0x0d, 0xe8, 0x00, 0x87, 0x7b, 0x9e, 0x33, 0xf3, 0x5c, 0xd1, 0x2c, 0x08, 0xd0,
0x76, 0x5a, 0x15, 0xf8, 0x47, 0x7e, 0x22, 0x3f, 0x7d, 0xff, 0x75, 0xe9, 0xfc, 0xcc, 0x64, 0xed,
0x0a, 0x72, 0x28, 0xb6, 0x47, 0x96, 0x83, 0x1f, 0x59, 0xe3, 0xa7, 0x51, 0x27, 0xaf, 0xf8, 0x75,
0x72, 0x66, 0xaa, 0xc0, 0x77, 0x4b, 0x8a, 0x6f, 0x10, 0xfa, 0x96, 0x3b, 0x15, 0xa9, 0xb8, 0x76,
0x05, 0x3d, 0xcb, 0xbc, 0x8d, 0x16, 0x08, 0x77, 0xcb, 0x3c, 0x87, 0xbe, 0x18, 0x4a, 0x1b, 0x56,
0x32, 0xff, 0xf5, 0x40, 0x5b, 0xf2, 0xe7, 0x6e, 0xb2, 0xff, 0xa5, 0xf4, 0xdf, 0x2a, 0x35, 0x37,
0xc2, 0x66, 0x41, 0x37, 0xfd, 0x7f, 0x06, 0xf4, 0x4b, 0x45, 0x1b, 0xe4, 0x1e, 0xdc, 0xf6, 0xb7,
0xca, 0x4c, 0x8d, 0x50, 0x7d, 0xc8, 0x14, 0x74, 0x11, 0x2a, 0xe9, 0xcb, 0xe2, 0xfe, 0x79, 0x55,
0x90, 0x76, 0x05, 0xfd, 0x04, 0x56, 0x73, 0xcf, 0x82, 0xd1, 0x37, 0xe4, 0xb7, 0x35, 0xf2, 0xd7,
0xc3, 0x8b, 0x30, 0x7c, 0x98, 0x35, 0xaf, 0x62, 0xea, 0x73, 0xaf, 0xfc, 0xcb, 0x53, 0x9f, 0xd8,
0xfe, 0x3c, 0xea, 0x5f, 0x18, 0xc3, 0x9c, 0x9a, 0x4d, 0xb6, 0x35, 0xfc, 0xb6, 0x0c, 0x45, 0xe1,
0xdb, 0xe4, 0xfe, 0x76, 0xd9, 0xe9, 0x49, 0xed, 0x4a, 0x3f, 0x7f, 0x95, 0x33, 0x4d, 0xfa, 0x64,
0x57, 0xae, 0x5d, 0xf2, 0xd7, 0xb4, 0xda, 0x15, 0xf4, 0x28, 0xe5, 0x5e, 0xd1, 0x1b, 0x45, 0xc2,
0x49, 0x5f, 0x18, 0x2d, 0xe2, 0xdb, 0x6f, 0x03, 0x62, 0xb6, 0xe3, 0x4e, 0xac, 0xe9, 0xdc, 0x37,
0x98, 0x62, 0x15, 0xb9, 0x9b, 0xfc, 0x54, 0x81, 0xe6, 0x9b, 0x2f, 0xb0, 0x22, 0x3a, 0xd2, 0x10,
0xe0, 0x00, 0x87, 0x0f, 0x71, 0xe8, 0x5b, 0xe3, 0x20, 0x7b, 0xa2, 0xd8, 0xa3, 0xf2, 0x09, 0x02,
0xd5, 0x9b, 0x0b, 0xe7, 0x45, 0x08, 0x46, 0xd0, 0x3a, 0xc0, 0x21, 0xcf, 0xab, 0x02, 0x54, 0xb8,
0x52, 0xcc, 0x10, 0x28, 0x36, 0x17, 0x4f, 0x4c, 0xba, 0xb3, 0xcc, 0x53, 0x60, 0x54, 0x28, 0xd8,
0xfc, 0x03, 0x65, 0xb9, 0x3b, 0x2b, 0x78, 0x5b, 0xcc, 0x4e, 0xb4, 0x77, 0x82, 0xc7, 0x4f, 0xdf,
0xc3, 0x86, 0x1d, 0x9e, 0x14, 0x9c, 0x28, 0x31, 0xe3, 0xfc, 0x13, 0xa5, 0x26, 0x0a, 0x1c, 0xbb,
0x9f, 0x76, 0xa1, 0x49, 0xe3, 0x1f, 0x09, 0xd6, 0xbf, 0x08, 0x7f, 0x9f, 0x71, 0xf8, 0xfb, 0x08,
0x56, 0x32, 0x2f, 0x57, 0xe5, 0xfa, 0x22, 0x7f, 0xde, 0x5a, 0xc2, 0x8b, 0xa7, 0xdf, 0x8e, 0xca,
0x1d, 0x92, 0xf4, 0x7d, 0xe9, 0xa2, 0xbd, 0x9f, 0xb0, 0x47, 0xdf, 0x51, 0xdf, 0xf4, 0xcd, 0xc2,
0xca, 0x2b, 0x7d, 0xdf, 0xfe, 0xc5, 0x47, 0x87, 0x97, 0x1f, 0x3d, 0x3f, 0x82, 0x95, 0xcc, 0xab,
0x27, 0xb9, 0x54, 0xe5, 0x4f, 0xa3, 0x16, 0xed, 0xfe, 0x39, 0x86, 0x19, 0x13, 0xd6, 0x24, 0x0f,
0x52, 0xd0, 0x76, 0x51, 0xe5, 0x23, 0x7f, 0xb9, 0xb2, 0xf8, 0x40, 0x9d, 0x94, 0x29, 0xa1, 0xcd,
0x22, 0x22, 0xb3, 0xff, 0xbd, 0xeb, 0x7f, 0xa3, 0xdc, 0x1f, 0xf5, 0xa2, 0x03, 0x0d, 0x60, 0x89,
0xbd, 0x85, 0x42, 0xaf, 0xc9, 0xfb, 0x7f, 0x89, 0x77, 0x52, 0xfd, 0x45, 0xaf, 0xa9, 0x82, 0xb9,
0x1d, 0x06, 0x74, 0xd3, 0x3a, 0xf5, 0x90, 0x48, 0xfa, 0x88, 0x2f, 0xf9, 0x80, 0xa9, 0xbf, 0xf8,
0xcd, 0x92, 0xd8, 0xf4, 0xff, 0x77, 0x2c, 0xfe, 0x18, 0xd6, 0x24, 0xb7, 0x02, 0xa8, 0x28, 0xe7,
0x2a, 0xb8, 0x8f, 0xe8, 0xef, 0x94, 0x9e, 0x1f, 0x61, 0xfe, 0x31, 0xa8, 0xd9, 0x8e, 0x02, 0x7a,
0xab, 0x48, 0x9f, 0x65, 0x38, 0xcf, 0x57, 0xe6, 0xfb, 0xdf, 0xfa, 0x70, 0x77, 0x6a, 0x85, 0x27,
0xf3, 0x11, 0x19, 0xd9, 0x61, 0x53, 0xdf, 0xb6, 0x3c, 0xfe, 0x6b, 0x47, 0xf0, 0x7f, 0x87, 0xae,
0xde, 0xa1, 0xa8, 0x66, 0xa3, 0xd1, 0x12, 0xfd, 0xbc, 0xf3, 0x7f, 0x01, 0x00, 0x00, 0xff, 0xff,
0x37, 0x34, 0x97, 0xee, 0xf6, 0x3f, 0x00, 0x00,
}
// Reference imports to suppress errors if they are not otherwise used.

View File

@ -143,6 +143,7 @@ func packSubDmChannelRequest(
Schema: schema,
LoadMeta: loadMeta,
ReplicaID: task.ReplicaID(),
Version: time.Now().UnixNano(),
}
}

View File

@ -608,7 +608,7 @@ func TestImpl_Search(t *testing.T) {
require.NoError(t, err)
node.queryShardService.addQueryShard(defaultCollectionID, defaultDMLChannel, defaultReplicaID)
node.ShardClusterService.addShardCluster(defaultCollectionID, defaultReplicaID, defaultDMLChannel)
node.ShardClusterService.addShardCluster(defaultCollectionID, defaultReplicaID, defaultDMLChannel, defaultVersion)
// shard cluster not synced
_, err = node.Search(ctx, &queryPb.SearchRequest{
Req: req,
@ -642,7 +642,7 @@ func TestImpl_searchWithDmlChannel(t *testing.T) {
require.NoError(t, err)
node.queryShardService.addQueryShard(defaultCollectionID, defaultDMLChannel, defaultReplicaID)
node.ShardClusterService.addShardCluster(defaultCollectionID, defaultReplicaID, defaultDMLChannel)
node.ShardClusterService.addShardCluster(defaultCollectionID, defaultReplicaID, defaultDMLChannel, defaultVersion)
sc, ok := node.ShardClusterService.getShardCluster(defaultDMLChannel)
assert.True(t, ok)
sc.SetupFirstVersion()
@ -718,7 +718,7 @@ func TestImpl_Query(t *testing.T) {
require.NoError(t, err)
node.queryShardService.addQueryShard(defaultCollectionID, defaultDMLChannel, defaultReplicaID)
node.ShardClusterService.addShardCluster(defaultCollectionID, defaultReplicaID, defaultDMLChannel)
node.ShardClusterService.addShardCluster(defaultCollectionID, defaultReplicaID, defaultDMLChannel, defaultVersion)
// shard cluster not synced
_, err = node.Query(ctx, &queryPb.QueryRequest{
Req: req,
@ -753,7 +753,7 @@ func TestImpl_queryWithDmlChannel(t *testing.T) {
require.NoError(t, err)
node.queryShardService.addQueryShard(defaultCollectionID, defaultDMLChannel, defaultReplicaID)
node.ShardClusterService.addShardCluster(defaultCollectionID, defaultReplicaID, defaultDMLChannel)
node.ShardClusterService.addShardCluster(defaultCollectionID, defaultReplicaID, defaultDMLChannel, defaultVersion)
sc, ok := node.ShardClusterService.getShardCluster(defaultDMLChannel)
assert.True(t, ok)
sc.SetupFirstVersion()
@ -819,7 +819,7 @@ func TestImpl_SyncReplicaSegments(t *testing.T) {
defer node.Stop()
assert.NoError(t, err)
node.ShardClusterService.addShardCluster(defaultCollectionID, defaultReplicaID, defaultDMLChannel)
node.ShardClusterService.addShardCluster(defaultCollectionID, defaultReplicaID, defaultDMLChannel, defaultVersion)
cs, ok := node.ShardClusterService.getShardCluster(defaultDMLChannel)
require.True(t, ok)
cs.SetupFirstVersion()
@ -921,7 +921,7 @@ func TestSyncDistribution(t *testing.T) {
defer node.Stop()
assert.NoError(t, err)
node.ShardClusterService.addShardCluster(defaultCollectionID, defaultReplicaID, defaultDMLChannel)
node.ShardClusterService.addShardCluster(defaultCollectionID, defaultReplicaID, defaultDMLChannel, defaultVersion)
cs, ok := node.ShardClusterService.getShardCluster(defaultDMLChannel)
require.True(t, ok)
cs.SetupFirstVersion()

View File

@ -75,6 +75,7 @@ const (
defaultDMLChannel = "query-node-unittest-DML-0"
defaultDeltaChannel = "query-node-unittest-delta-channel-0"
defaultSubName = "query-node-unittest-sub-name-0"
defaultVersion = 1
defaultLocalStorage = "/tmp/milvus_test/querynode"

View File

@ -45,7 +45,7 @@ func genSimpleQueryShard(ctx context.Context) (*queryShard, error) {
return nil, err
}
shardCluster := NewShardCluster(defaultCollectionID, defaultReplicaID, defaultDMLChannel,
shardCluster := NewShardCluster(defaultCollectionID, defaultReplicaID, defaultDMLChannel, defaultVersion,
&mockNodeDetector{}, &mockSegmentDetector{}, buildMockQueryNode)
shardClusterService := &ShardClusterService{
clusters: sync.Map{},
@ -81,7 +81,7 @@ func TestNewQueryShard_IllegalCases(t *testing.T) {
remoteCM, err := genRemoteChunkManager(ctx)
require.NoError(t, err)
shardCluster := NewShardCluster(defaultCollectionID, defaultReplicaID, defaultDMLChannel,
shardCluster := NewShardCluster(defaultCollectionID, defaultReplicaID, defaultDMLChannel, defaultVersion,
&mockNodeDetector{}, &mockSegmentDetector{}, buildMockQueryNode)
shardClusterService := &ShardClusterService{
clusters: sync.Map{},

View File

@ -157,7 +157,7 @@ type ShardCluster struct {
}
// NewShardCluster create a ShardCluster with provided information.
func NewShardCluster(collectionID int64, replicaID int64, vchannelName string,
func NewShardCluster(collectionID int64, replicaID int64, vchannelName string, version int64,
nodeDetector ShardNodeDetector, segmentDetector ShardSegmentDetector, nodeBuilder ShardNodeBuilder) *ShardCluster {
sc := &ShardCluster{
state: atomic.NewInt32(int32(unavailable)),
@ -165,6 +165,7 @@ func NewShardCluster(collectionID int64, replicaID int64, vchannelName string,
collectionID: collectionID,
replicaID: replicaID,
vchannelName: vchannelName,
version: version,
segmentDetector: segmentDetector,
nodeDetector: nodeDetector,

View File

@ -50,7 +50,7 @@ func newShardClusterService(client *clientv3.Client, session *sessionutil.Sessio
}
// addShardCluster adds shardCluster into service.
func (s *ShardClusterService) addShardCluster(collectionID, replicaID int64, vchannelName string) {
func (s *ShardClusterService) addShardCluster(collectionID, replicaID int64, vchannelName string, version int64) {
nodeDetector := NewEtcdShardNodeDetector(s.client, path.Join(Params.EtcdCfg.MetaRootPath, ReplicaMetaPrefix),
func() (map[int64]string, error) {
result := make(map[int64]string)
@ -66,7 +66,7 @@ func (s *ShardClusterService) addShardCluster(collectionID, replicaID int64, vch
segmentDetector := NewEtcdShardSegmentDetector(s.client, path.Join(Params.EtcdCfg.MetaRootPath, util.SegmentMetaPrefix, strconv.FormatInt(collectionID, 10)))
cs := NewShardCluster(collectionID, replicaID, vchannelName, nodeDetector, segmentDetector,
cs := NewShardCluster(collectionID, replicaID, vchannelName, version, nodeDetector, segmentDetector,
func(nodeID int64, addr string) shardQueryNode {
if nodeID == s.session.ServerID {
// wrap node itself

View File

@ -19,7 +19,7 @@ func TestShardClusterService(t *testing.T) {
clusterService := newShardClusterService(client, session, nil)
assert.NotPanics(t, func() {
clusterService.addShardCluster(defaultCollectionID, defaultReplicaID, defaultDMLChannel)
clusterService.addShardCluster(defaultCollectionID, defaultReplicaID, defaultDMLChannel, defaultVersion)
})
shardCluster, ok := clusterService.getShardCluster(defaultDMLChannel)
@ -51,7 +51,7 @@ func TestShardClusterService_SyncReplicaSegments(t *testing.T) {
})
t.Run("sync initailizing shard cluster", func(t *testing.T) {
clusterService.addShardCluster(defaultCollectionID, defaultReplicaID, defaultDMLChannel)
clusterService.addShardCluster(defaultCollectionID, defaultReplicaID, defaultDMLChannel, defaultVersion)
sc, ok := clusterService.getShardCluster(defaultDMLChannel)
require.True(t, ok)
@ -72,7 +72,7 @@ func TestShardClusterService_SyncReplicaSegments(t *testing.T) {
})
t.Run("sync shard cluster", func(t *testing.T) {
clusterService.addShardCluster(defaultCollectionID, defaultReplicaID, defaultDMLChannel)
clusterService.addShardCluster(defaultCollectionID, defaultReplicaID, defaultDMLChannel, defaultVersion)
sc, ok := clusterService.getShardCluster(defaultDMLChannel)
require.True(t, ok)
@ -107,7 +107,7 @@ func TestShardClusterService_close(t *testing.T) {
clusterService := newShardClusterService(client, session, nil)
t.Run("close ok", func(t *testing.T) {
clusterService.addShardCluster(defaultCollectionID, defaultReplicaID, defaultDMLChannel)
clusterService.addShardCluster(defaultCollectionID, defaultReplicaID, defaultDMLChannel, defaultVersion)
cnt := 0
clusterService.clusters.Range(func(key, value any) bool {

View File

@ -125,9 +125,10 @@ func TestShardCluster_Create(t *testing.T) {
collectionID := int64(1)
vchannelName := "dml_1_1_v0"
replicaID := int64(0)
version := int64(1)
t.Run("empty shard cluster", func(t *testing.T) {
sc := NewShardCluster(collectionID, replicaID, vchannelName,
sc := NewShardCluster(collectionID, replicaID, vchannelName, version,
&mockNodeDetector{}, &mockSegmentDetector{}, buildMockQueryNode)
assert.NotPanics(t, func() { sc.Close() })
// close twice
@ -146,7 +147,7 @@ func TestShardCluster_Create(t *testing.T) {
nodeAddr: "addr_2",
},
}
sc := NewShardCluster(collectionID, replicaID, vchannelName,
sc := NewShardCluster(collectionID, replicaID, vchannelName, version,
&mockNodeDetector{
initNodes: nodeEvent,
}, &mockSegmentDetector{}, buildMockQueryNode)
@ -193,7 +194,7 @@ func TestShardCluster_Create(t *testing.T) {
state: segmentStateOffline,
},
}
sc := NewShardCluster(collectionID, replicaID, vchannelName,
sc := NewShardCluster(collectionID, replicaID, vchannelName, version,
&mockNodeDetector{
initNodes: nodeEvents,
}, &mockSegmentDetector{
@ -223,6 +224,7 @@ func TestShardCluster_nodeEvent(t *testing.T) {
collectionID := int64(1)
vchannelName := "dml_1_1_v0"
replicaID := int64(0)
version := int64(1)
t.Run("only nodes", func(t *testing.T) {
nodeEvents := []nodeEvent{
@ -236,7 +238,7 @@ func TestShardCluster_nodeEvent(t *testing.T) {
},
}
evtCh := make(chan nodeEvent, 10)
sc := NewShardCluster(collectionID, replicaID, vchannelName,
sc := NewShardCluster(collectionID, replicaID, vchannelName, version,
&mockNodeDetector{
initNodes: nodeEvents,
evtCh: evtCh,
@ -320,7 +322,7 @@ func TestShardCluster_nodeEvent(t *testing.T) {
}
evtCh := make(chan nodeEvent, 10)
sc := NewShardCluster(collectionID, replicaID, vchannelName,
sc := NewShardCluster(collectionID, replicaID, vchannelName, version,
&mockNodeDetector{
initNodes: nodeEvents,
evtCh: evtCh,
@ -374,6 +376,7 @@ func TestShardCluster_segmentEvent(t *testing.T) {
collectionID := int64(1)
vchannelName := "dml_1_1_v0"
replicaID := int64(0)
version := int64(1)
t.Run("from loading", func(t *testing.T) {
nodeEvents := []nodeEvent{
@ -410,7 +413,7 @@ func TestShardCluster_segmentEvent(t *testing.T) {
}
evtCh := make(chan segmentEvent, 10)
sc := NewShardCluster(collectionID, replicaID, vchannelName,
sc := NewShardCluster(collectionID, replicaID, vchannelName, version,
&mockNodeDetector{
initNodes: nodeEvents,
}, &mockSegmentDetector{
@ -502,7 +505,7 @@ func TestShardCluster_segmentEvent(t *testing.T) {
}
evtCh := make(chan segmentEvent, 10)
sc := NewShardCluster(collectionID, replicaID, vchannelName,
sc := NewShardCluster(collectionID, replicaID, vchannelName, version,
&mockNodeDetector{initNodes: nodeEvents}, &mockSegmentDetector{
initSegments: segmentEvents,
evtCh: evtCh,
@ -594,7 +597,7 @@ func TestShardCluster_segmentEvent(t *testing.T) {
}
evtCh := make(chan segmentEvent, 10)
sc := NewShardCluster(collectionID, replicaID, vchannelName,
sc := NewShardCluster(collectionID, replicaID, vchannelName, version,
&mockNodeDetector{initNodes: nodeEvents}, &mockSegmentDetector{
initSegments: segmentEvents,
evtCh: evtCh,
@ -669,7 +672,7 @@ func TestShardCluster_segmentEvent(t *testing.T) {
}
evtCh := make(chan segmentEvent, 10)
sc := NewShardCluster(collectionID, replicaID, vchannelName,
sc := NewShardCluster(collectionID, replicaID, vchannelName, version,
&mockNodeDetector{initNodes: nodeEvents}, &mockSegmentDetector{
initSegments: segmentEvents,
evtCh: evtCh,
@ -750,7 +753,7 @@ func TestShardCluster_segmentEvent(t *testing.T) {
}
evtCh := make(chan segmentEvent, 10)
sc := NewShardCluster(collectionID, replicaID, vchannelName,
sc := NewShardCluster(collectionID, replicaID, vchannelName, version,
&mockNodeDetector{initNodes: nodeEvents}, &mockSegmentDetector{
initSegments: segmentEvents,
evtCh: evtCh,
@ -823,7 +826,7 @@ func TestShardCluster_segmentEvent(t *testing.T) {
}
evtCh := make(chan segmentEvent, 10)
sc := NewShardCluster(collectionID, replicaID, vchannelName,
sc := NewShardCluster(collectionID, replicaID, vchannelName, version,
&mockNodeDetector{initNodes: nodeEvents}, &mockSegmentDetector{
initSegments: segmentEvents,
evtCh: evtCh,
@ -865,6 +868,7 @@ func TestShardCluster_SyncSegments(t *testing.T) {
collectionID := int64(1)
vchannelName := "dml_1_1_v0"
replicaID := int64(0)
version := int64(1)
t.Run("sync new segments", func(t *testing.T) {
nodeEvents := []nodeEvent{
@ -885,7 +889,7 @@ func TestShardCluster_SyncSegments(t *testing.T) {
segmentEvents := []segmentEvent{}
evtCh := make(chan segmentEvent, 10)
sc := NewShardCluster(collectionID, replicaID, vchannelName,
sc := NewShardCluster(collectionID, replicaID, vchannelName, version,
&mockNodeDetector{initNodes: nodeEvents}, &mockSegmentDetector{
initSegments: segmentEvents,
evtCh: evtCh,
@ -960,7 +964,7 @@ func TestShardCluster_SyncSegments(t *testing.T) {
}
evtCh := make(chan segmentEvent, 10)
sc := NewShardCluster(collectionID, replicaID, vchannelName,
sc := NewShardCluster(collectionID, replicaID, vchannelName, version,
&mockNodeDetector{initNodes: nodeEvents}, &mockSegmentDetector{
initSegments: segmentEvents,
evtCh: evtCh,
@ -1005,7 +1009,7 @@ func TestShardCluster_SyncSegments(t *testing.T) {
segmentEvents := []segmentEvent{}
evtCh := make(chan segmentEvent, 10)
sc := NewShardCluster(collectionID, replicaID, vchannelName,
sc := NewShardCluster(collectionID, replicaID, vchannelName, version,
&mockNodeDetector{initNodes: nodeEvents}, &mockSegmentDetector{
initSegments: segmentEvents,
evtCh: evtCh,
@ -1052,6 +1056,7 @@ func TestShardCluster_Search(t *testing.T) {
collectionID := int64(1)
vchannelName := "dml_1_1_v0"
replicaID := int64(0)
version := int64(1)
ctx := context.Background()
t.Run("search unavailable cluster", func(t *testing.T) {
@ -1088,7 +1093,7 @@ func TestShardCluster_Search(t *testing.T) {
},
}
sc := NewShardCluster(collectionID, replicaID, vchannelName,
sc := NewShardCluster(collectionID, replicaID, vchannelName, version,
&mockNodeDetector{initNodes: nodeEvents}, &mockSegmentDetector{
initSegments: segmentEvents,
}, buildMockQueryNode)
@ -1103,7 +1108,7 @@ func TestShardCluster_Search(t *testing.T) {
})
t.Run("search wrong channel", func(t *testing.T) {
sc := NewShardCluster(collectionID, replicaID, vchannelName,
sc := NewShardCluster(collectionID, replicaID, vchannelName, version,
&mockNodeDetector{}, &mockSegmentDetector{}, buildMockQueryNode)
defer sc.Close()
@ -1144,7 +1149,7 @@ func TestShardCluster_Search(t *testing.T) {
},
}
sc := NewShardCluster(collectionID, replicaID, vchannelName,
sc := NewShardCluster(collectionID, replicaID, vchannelName, version,
&mockNodeDetector{
initNodes: nodeEvents,
}, &mockSegmentDetector{
@ -1195,7 +1200,7 @@ func TestShardCluster_Search(t *testing.T) {
},
}
sc := NewShardCluster(collectionID, replicaID, vchannelName,
sc := NewShardCluster(collectionID, replicaID, vchannelName, version,
&mockNodeDetector{
initNodes: nodeEvents,
}, &mockSegmentDetector{
@ -1245,7 +1250,7 @@ func TestShardCluster_Search(t *testing.T) {
},
}
sc := NewShardCluster(collectionID, replicaID, vchannelName,
sc := NewShardCluster(collectionID, replicaID, vchannelName, version,
&mockNodeDetector{
initNodes: nodeEvents,
}, &mockSegmentDetector{
@ -1297,7 +1302,7 @@ func TestShardCluster_Search(t *testing.T) {
},
}
sc := NewShardCluster(collectionID, replicaID, vchannelName,
sc := NewShardCluster(collectionID, replicaID, vchannelName, version,
&mockNodeDetector{
initNodes: nodeEvents,
}, &mockSegmentDetector{
@ -1330,6 +1335,7 @@ func TestShardCluster_Query(t *testing.T) {
collectionID := int64(1)
vchannelName := "dml_1_1_v0"
replicaID := int64(0)
version := int64(1)
ctx := context.Background()
t.Run("query unavailable cluster", func(t *testing.T) {
@ -1366,7 +1372,7 @@ func TestShardCluster_Query(t *testing.T) {
},
}
sc := NewShardCluster(collectionID, replicaID, vchannelName,
sc := NewShardCluster(collectionID, replicaID, vchannelName, version,
&mockNodeDetector{initNodes: nodeEvents}, &mockSegmentDetector{
initSegments: segmentEvents,
}, buildMockQueryNode)
@ -1384,7 +1390,7 @@ func TestShardCluster_Query(t *testing.T) {
assert.Error(t, err)
})
t.Run("query wrong channel", func(t *testing.T) {
sc := NewShardCluster(collectionID, replicaID, vchannelName,
sc := NewShardCluster(collectionID, replicaID, vchannelName, version,
&mockNodeDetector{}, &mockSegmentDetector{}, buildMockQueryNode)
defer sc.Close()
@ -1426,7 +1432,7 @@ func TestShardCluster_Query(t *testing.T) {
},
}
sc := NewShardCluster(collectionID, replicaID, vchannelName,
sc := NewShardCluster(collectionID, replicaID, vchannelName, version,
&mockNodeDetector{
initNodes: nodeEvents,
}, &mockSegmentDetector{
@ -1476,7 +1482,7 @@ func TestShardCluster_Query(t *testing.T) {
},
}
sc := NewShardCluster(collectionID, replicaID, vchannelName,
sc := NewShardCluster(collectionID, replicaID, vchannelName, version,
&mockNodeDetector{
initNodes: nodeEvents,
}, &mockSegmentDetector{
@ -1526,7 +1532,7 @@ func TestShardCluster_Query(t *testing.T) {
},
}
sc := NewShardCluster(collectionID, replicaID, vchannelName,
sc := NewShardCluster(collectionID, replicaID, vchannelName, version,
&mockNodeDetector{
initNodes: nodeEvents,
}, &mockSegmentDetector{
@ -1578,7 +1584,7 @@ func TestShardCluster_Query(t *testing.T) {
},
}
sc := NewShardCluster(collectionID, replicaID, vchannelName,
sc := NewShardCluster(collectionID, replicaID, vchannelName, version,
&mockNodeDetector{
initNodes: nodeEvents,
}, &mockSegmentDetector{
@ -1613,6 +1619,7 @@ func TestShardCluster_GetStatistics(t *testing.T) {
collectionID := int64(1)
vchannelName := "dml_1_1_v0"
replicaID := int64(0)
version := int64(1)
ctx := context.Background()
t.Run("get statistics on unavailable cluster", func(t *testing.T) {
@ -1649,7 +1656,7 @@ func TestShardCluster_GetStatistics(t *testing.T) {
},
}
sc := NewShardCluster(collectionID, replicaID, vchannelName,
sc := NewShardCluster(collectionID, replicaID, vchannelName, version,
&mockNodeDetector{initNodes: nodeEvents}, &mockSegmentDetector{
initSegments: segmentEvents,
}, buildMockQueryNode)
@ -1664,7 +1671,7 @@ func TestShardCluster_GetStatistics(t *testing.T) {
})
t.Run("get statistics on wrong channel", func(t *testing.T) {
sc := NewShardCluster(collectionID, replicaID, vchannelName,
sc := NewShardCluster(collectionID, replicaID, vchannelName, version,
&mockNodeDetector{}, &mockSegmentDetector{}, buildMockQueryNode)
defer sc.Close()
@ -1705,7 +1712,7 @@ func TestShardCluster_GetStatistics(t *testing.T) {
},
}
sc := NewShardCluster(collectionID, replicaID, vchannelName,
sc := NewShardCluster(collectionID, replicaID, vchannelName, version,
&mockNodeDetector{
initNodes: nodeEvents,
}, &mockSegmentDetector{
@ -1756,7 +1763,7 @@ func TestShardCluster_GetStatistics(t *testing.T) {
},
}
sc := NewShardCluster(collectionID, replicaID, vchannelName,
sc := NewShardCluster(collectionID, replicaID, vchannelName, version,
&mockNodeDetector{
initNodes: nodeEvents,
}, &mockSegmentDetector{
@ -1806,7 +1813,7 @@ func TestShardCluster_GetStatistics(t *testing.T) {
},
}
sc := NewShardCluster(collectionID, replicaID, vchannelName,
sc := NewShardCluster(collectionID, replicaID, vchannelName, version,
&mockNodeDetector{
initNodes: nodeEvents,
}, &mockSegmentDetector{
@ -1859,7 +1866,7 @@ func TestShardCluster_GetStatistics(t *testing.T) {
},
}
sc := NewShardCluster(collectionID, replicaID, vchannelName,
sc := NewShardCluster(collectionID, replicaID, vchannelName, version,
&mockNodeDetector{
initNodes: nodeEvents,
}, &mockSegmentDetector{
@ -1891,9 +1898,10 @@ func TestShardCluster_Version(t *testing.T) {
collectionID := int64(1)
vchannelName := "dml_1_1_v0"
replicaID := int64(0)
version := int64(1)
// ctx := context.Background()
t.Run("alloc with non-serviceable", func(t *testing.T) {
sc := NewShardCluster(collectionID, replicaID, vchannelName,
sc := NewShardCluster(collectionID, replicaID, vchannelName, version,
&mockNodeDetector{}, &mockSegmentDetector{}, buildMockQueryNode)
defer sc.Close()
@ -1925,7 +1933,7 @@ func TestShardCluster_Version(t *testing.T) {
state: segmentStateLoaded,
},
}
sc := NewShardCluster(collectionID, replicaID, vchannelName,
sc := NewShardCluster(collectionID, replicaID, vchannelName, version,
&mockNodeDetector{
initNodes: nodeEvents,
}, &mockSegmentDetector{
@ -1973,7 +1981,7 @@ func TestShardCluster_Version(t *testing.T) {
},
}
evtCh := make(chan segmentEvent, 10)
sc := NewShardCluster(collectionID, replicaID, vchannelName,
sc := NewShardCluster(collectionID, replicaID, vchannelName, version,
&mockNodeDetector{
initNodes: nodeEvents,
}, &mockSegmentDetector{
@ -2027,16 +2035,18 @@ type ShardClusterSuite struct {
otherVchannelName string
replicaID int64
version int64
sc *ShardCluster
}
func (suite *ShardClusterSuite) SetupSuite() {
suite.collectionID = int64(1)
suite.otherCollectionID = int64(2)
suite.collectionID = 1
suite.otherCollectionID = 2
suite.vchannelName = "dml_1_1_v0"
suite.otherVchannelName = "dml_1_2_v0"
suite.replicaID = int64(0)
suite.replicaID = 0
suite.version = 1
}
func (suite *ShardClusterSuite) SetupTest() {
@ -2064,7 +2074,7 @@ func (suite *ShardClusterSuite) SetupTest() {
state: segmentStateLoaded,
},
}
suite.sc = NewShardCluster(suite.collectionID, suite.replicaID, suite.vchannelName,
suite.sc = NewShardCluster(suite.collectionID, suite.replicaID, suite.vchannelName, suite.version,
&mockNodeDetector{
initNodes: nodeEvents,
}, &mockSegmentDetector{

View File

@ -97,7 +97,7 @@ func (w *watchDmChannelsTask) Execute(ctx context.Context) (err error) {
//add shard cluster
for _, vchannel := range vChannels {
w.node.ShardClusterService.addShardCluster(w.req.GetCollectionID(), w.req.GetReplicaID(), vchannel)
w.node.ShardClusterService.addShardCluster(w.req.GetCollectionID(), w.req.GetReplicaID(), vchannel, w.req.GetVersion())
}
defer func() {