luoyangwei преди 1 година
родител
ревизия
f6c2e91202

+ 195 - 195
api/user/v2/alarm_clock.pb.go

@@ -2,7 +2,7 @@
 // versions:
 // 	protoc-gen-go v1.34.2
 // 	protoc        v4.25.3
-// source: api/user/v2/alarm_clock.proto
+// source: user/v2/alarm_clock.proto
 
 package v2
 
@@ -34,7 +34,7 @@ type GetWristwatchAlarmClockRequest struct {
 func (x *GetWristwatchAlarmClockRequest) Reset() {
 	*x = GetWristwatchAlarmClockRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_api_user_v2_alarm_clock_proto_msgTypes[0]
+		mi := &file_user_v2_alarm_clock_proto_msgTypes[0]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -47,7 +47,7 @@ func (x *GetWristwatchAlarmClockRequest) String() string {
 func (*GetWristwatchAlarmClockRequest) ProtoMessage() {}
 
 func (x *GetWristwatchAlarmClockRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_api_user_v2_alarm_clock_proto_msgTypes[0]
+	mi := &file_user_v2_alarm_clock_proto_msgTypes[0]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -60,7 +60,7 @@ func (x *GetWristwatchAlarmClockRequest) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use GetWristwatchAlarmClockRequest.ProtoReflect.Descriptor instead.
 func (*GetWristwatchAlarmClockRequest) Descriptor() ([]byte, []int) {
-	return file_api_user_v2_alarm_clock_proto_rawDescGZIP(), []int{0}
+	return file_user_v2_alarm_clock_proto_rawDescGZIP(), []int{0}
 }
 
 func (x *GetWristwatchAlarmClockRequest) GetTicket() string {
@@ -82,7 +82,7 @@ type GetWristwatchAlarmClockResponse struct {
 func (x *GetWristwatchAlarmClockResponse) Reset() {
 	*x = GetWristwatchAlarmClockResponse{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_api_user_v2_alarm_clock_proto_msgTypes[1]
+		mi := &file_user_v2_alarm_clock_proto_msgTypes[1]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -95,7 +95,7 @@ func (x *GetWristwatchAlarmClockResponse) String() string {
 func (*GetWristwatchAlarmClockResponse) ProtoMessage() {}
 
 func (x *GetWristwatchAlarmClockResponse) ProtoReflect() protoreflect.Message {
-	mi := &file_api_user_v2_alarm_clock_proto_msgTypes[1]
+	mi := &file_user_v2_alarm_clock_proto_msgTypes[1]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -108,7 +108,7 @@ func (x *GetWristwatchAlarmClockResponse) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use GetWristwatchAlarmClockResponse.ProtoReflect.Descriptor instead.
 func (*GetWristwatchAlarmClockResponse) Descriptor() ([]byte, []int) {
-	return file_api_user_v2_alarm_clock_proto_rawDescGZIP(), []int{1}
+	return file_user_v2_alarm_clock_proto_rawDescGZIP(), []int{1}
 }
 
 func (x *GetWristwatchAlarmClockResponse) GetAlarmClocks() []*GetWristwatchAlarmClockResponse_AlarmClock {
@@ -130,7 +130,7 @@ type GetAlarmClockRequest struct {
 func (x *GetAlarmClockRequest) Reset() {
 	*x = GetAlarmClockRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_api_user_v2_alarm_clock_proto_msgTypes[2]
+		mi := &file_user_v2_alarm_clock_proto_msgTypes[2]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -143,7 +143,7 @@ func (x *GetAlarmClockRequest) String() string {
 func (*GetAlarmClockRequest) ProtoMessage() {}
 
 func (x *GetAlarmClockRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_api_user_v2_alarm_clock_proto_msgTypes[2]
+	mi := &file_user_v2_alarm_clock_proto_msgTypes[2]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -156,7 +156,7 @@ func (x *GetAlarmClockRequest) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use GetAlarmClockRequest.ProtoReflect.Descriptor instead.
 func (*GetAlarmClockRequest) Descriptor() ([]byte, []int) {
-	return file_api_user_v2_alarm_clock_proto_rawDescGZIP(), []int{2}
+	return file_user_v2_alarm_clock_proto_rawDescGZIP(), []int{2}
 }
 
 func (x *GetAlarmClockRequest) GetCid() string {
@@ -178,7 +178,7 @@ type GetAlarmClockResponse struct {
 func (x *GetAlarmClockResponse) Reset() {
 	*x = GetAlarmClockResponse{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_api_user_v2_alarm_clock_proto_msgTypes[3]
+		mi := &file_user_v2_alarm_clock_proto_msgTypes[3]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -191,7 +191,7 @@ func (x *GetAlarmClockResponse) String() string {
 func (*GetAlarmClockResponse) ProtoMessage() {}
 
 func (x *GetAlarmClockResponse) ProtoReflect() protoreflect.Message {
-	mi := &file_api_user_v2_alarm_clock_proto_msgTypes[3]
+	mi := &file_user_v2_alarm_clock_proto_msgTypes[3]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -204,7 +204,7 @@ func (x *GetAlarmClockResponse) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use GetAlarmClockResponse.ProtoReflect.Descriptor instead.
 func (*GetAlarmClockResponse) Descriptor() ([]byte, []int) {
-	return file_api_user_v2_alarm_clock_proto_rawDescGZIP(), []int{3}
+	return file_user_v2_alarm_clock_proto_rawDescGZIP(), []int{3}
 }
 
 func (x *GetAlarmClockResponse) GetAlarmClocks() []*GetAlarmClockResponse_AlarmClock {
@@ -237,7 +237,7 @@ type CreateAlarmClockRequest struct {
 func (x *CreateAlarmClockRequest) Reset() {
 	*x = CreateAlarmClockRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_api_user_v2_alarm_clock_proto_msgTypes[4]
+		mi := &file_user_v2_alarm_clock_proto_msgTypes[4]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -250,7 +250,7 @@ func (x *CreateAlarmClockRequest) String() string {
 func (*CreateAlarmClockRequest) ProtoMessage() {}
 
 func (x *CreateAlarmClockRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_api_user_v2_alarm_clock_proto_msgTypes[4]
+	mi := &file_user_v2_alarm_clock_proto_msgTypes[4]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -263,7 +263,7 @@ func (x *CreateAlarmClockRequest) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use CreateAlarmClockRequest.ProtoReflect.Descriptor instead.
 func (*CreateAlarmClockRequest) Descriptor() ([]byte, []int) {
-	return file_api_user_v2_alarm_clock_proto_rawDescGZIP(), []int{4}
+	return file_user_v2_alarm_clock_proto_rawDescGZIP(), []int{4}
 }
 
 func (x *CreateAlarmClockRequest) GetCid() string {
@@ -318,7 +318,7 @@ type CreateAlarmClockResponse struct {
 func (x *CreateAlarmClockResponse) Reset() {
 	*x = CreateAlarmClockResponse{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_api_user_v2_alarm_clock_proto_msgTypes[5]
+		mi := &file_user_v2_alarm_clock_proto_msgTypes[5]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -331,7 +331,7 @@ func (x *CreateAlarmClockResponse) String() string {
 func (*CreateAlarmClockResponse) ProtoMessage() {}
 
 func (x *CreateAlarmClockResponse) ProtoReflect() protoreflect.Message {
-	mi := &file_api_user_v2_alarm_clock_proto_msgTypes[5]
+	mi := &file_user_v2_alarm_clock_proto_msgTypes[5]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -344,7 +344,7 @@ func (x *CreateAlarmClockResponse) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use CreateAlarmClockResponse.ProtoReflect.Descriptor instead.
 func (*CreateAlarmClockResponse) Descriptor() ([]byte, []int) {
-	return file_api_user_v2_alarm_clock_proto_rawDescGZIP(), []int{5}
+	return file_user_v2_alarm_clock_proto_rawDescGZIP(), []int{5}
 }
 
 // 修改闹钟 Request
@@ -372,7 +372,7 @@ type UpdateAlarmClockRequest struct {
 func (x *UpdateAlarmClockRequest) Reset() {
 	*x = UpdateAlarmClockRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_api_user_v2_alarm_clock_proto_msgTypes[6]
+		mi := &file_user_v2_alarm_clock_proto_msgTypes[6]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -385,7 +385,7 @@ func (x *UpdateAlarmClockRequest) String() string {
 func (*UpdateAlarmClockRequest) ProtoMessage() {}
 
 func (x *UpdateAlarmClockRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_api_user_v2_alarm_clock_proto_msgTypes[6]
+	mi := &file_user_v2_alarm_clock_proto_msgTypes[6]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -398,7 +398,7 @@ func (x *UpdateAlarmClockRequest) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use UpdateAlarmClockRequest.ProtoReflect.Descriptor instead.
 func (*UpdateAlarmClockRequest) Descriptor() ([]byte, []int) {
-	return file_api_user_v2_alarm_clock_proto_rawDescGZIP(), []int{6}
+	return file_user_v2_alarm_clock_proto_rawDescGZIP(), []int{6}
 }
 
 func (x *UpdateAlarmClockRequest) GetCid() string {
@@ -460,7 +460,7 @@ type UpdateAlarmClockResponse struct {
 func (x *UpdateAlarmClockResponse) Reset() {
 	*x = UpdateAlarmClockResponse{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_api_user_v2_alarm_clock_proto_msgTypes[7]
+		mi := &file_user_v2_alarm_clock_proto_msgTypes[7]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -473,7 +473,7 @@ func (x *UpdateAlarmClockResponse) String() string {
 func (*UpdateAlarmClockResponse) ProtoMessage() {}
 
 func (x *UpdateAlarmClockResponse) ProtoReflect() protoreflect.Message {
-	mi := &file_api_user_v2_alarm_clock_proto_msgTypes[7]
+	mi := &file_user_v2_alarm_clock_proto_msgTypes[7]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -486,7 +486,7 @@ func (x *UpdateAlarmClockResponse) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use UpdateAlarmClockResponse.ProtoReflect.Descriptor instead.
 func (*UpdateAlarmClockResponse) Descriptor() ([]byte, []int) {
-	return file_api_user_v2_alarm_clock_proto_rawDescGZIP(), []int{7}
+	return file_user_v2_alarm_clock_proto_rawDescGZIP(), []int{7}
 }
 
 // 删除闹钟 Request
@@ -502,7 +502,7 @@ type DeleteAlarmClockRequest struct {
 func (x *DeleteAlarmClockRequest) Reset() {
 	*x = DeleteAlarmClockRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_api_user_v2_alarm_clock_proto_msgTypes[8]
+		mi := &file_user_v2_alarm_clock_proto_msgTypes[8]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -515,7 +515,7 @@ func (x *DeleteAlarmClockRequest) String() string {
 func (*DeleteAlarmClockRequest) ProtoMessage() {}
 
 func (x *DeleteAlarmClockRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_api_user_v2_alarm_clock_proto_msgTypes[8]
+	mi := &file_user_v2_alarm_clock_proto_msgTypes[8]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -528,7 +528,7 @@ func (x *DeleteAlarmClockRequest) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use DeleteAlarmClockRequest.ProtoReflect.Descriptor instead.
 func (*DeleteAlarmClockRequest) Descriptor() ([]byte, []int) {
-	return file_api_user_v2_alarm_clock_proto_rawDescGZIP(), []int{8}
+	return file_user_v2_alarm_clock_proto_rawDescGZIP(), []int{8}
 }
 
 func (x *DeleteAlarmClockRequest) GetId() int64 {
@@ -548,7 +548,7 @@ type DeleteAlarmClockResponse struct {
 func (x *DeleteAlarmClockResponse) Reset() {
 	*x = DeleteAlarmClockResponse{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_api_user_v2_alarm_clock_proto_msgTypes[9]
+		mi := &file_user_v2_alarm_clock_proto_msgTypes[9]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -561,7 +561,7 @@ func (x *DeleteAlarmClockResponse) String() string {
 func (*DeleteAlarmClockResponse) ProtoMessage() {}
 
 func (x *DeleteAlarmClockResponse) ProtoReflect() protoreflect.Message {
-	mi := &file_api_user_v2_alarm_clock_proto_msgTypes[9]
+	mi := &file_user_v2_alarm_clock_proto_msgTypes[9]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -574,7 +574,7 @@ func (x *DeleteAlarmClockResponse) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use DeleteAlarmClockResponse.ProtoReflect.Descriptor instead.
 func (*DeleteAlarmClockResponse) Descriptor() ([]byte, []int) {
-	return file_api_user_v2_alarm_clock_proto_rawDescGZIP(), []int{9}
+	return file_user_v2_alarm_clock_proto_rawDescGZIP(), []int{9}
 }
 
 type GetWristwatchAlarmClockResponse_AlarmClock struct {
@@ -594,7 +594,7 @@ type GetWristwatchAlarmClockResponse_AlarmClock struct {
 func (x *GetWristwatchAlarmClockResponse_AlarmClock) Reset() {
 	*x = GetWristwatchAlarmClockResponse_AlarmClock{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_api_user_v2_alarm_clock_proto_msgTypes[10]
+		mi := &file_user_v2_alarm_clock_proto_msgTypes[10]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -607,7 +607,7 @@ func (x *GetWristwatchAlarmClockResponse_AlarmClock) String() string {
 func (*GetWristwatchAlarmClockResponse_AlarmClock) ProtoMessage() {}
 
 func (x *GetWristwatchAlarmClockResponse_AlarmClock) ProtoReflect() protoreflect.Message {
-	mi := &file_api_user_v2_alarm_clock_proto_msgTypes[10]
+	mi := &file_user_v2_alarm_clock_proto_msgTypes[10]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -620,7 +620,7 @@ func (x *GetWristwatchAlarmClockResponse_AlarmClock) ProtoReflect() protoreflect
 
 // Deprecated: Use GetWristwatchAlarmClockResponse_AlarmClock.ProtoReflect.Descriptor instead.
 func (*GetWristwatchAlarmClockResponse_AlarmClock) Descriptor() ([]byte, []int) {
-	return file_api_user_v2_alarm_clock_proto_rawDescGZIP(), []int{1, 0}
+	return file_user_v2_alarm_clock_proto_rawDescGZIP(), []int{1, 0}
 }
 
 func (x *GetWristwatchAlarmClockResponse_AlarmClock) GetCid() string {
@@ -689,7 +689,7 @@ type GetAlarmClockResponse_AlarmClock struct {
 func (x *GetAlarmClockResponse_AlarmClock) Reset() {
 	*x = GetAlarmClockResponse_AlarmClock{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_api_user_v2_alarm_clock_proto_msgTypes[11]
+		mi := &file_user_v2_alarm_clock_proto_msgTypes[11]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -702,7 +702,7 @@ func (x *GetAlarmClockResponse_AlarmClock) String() string {
 func (*GetAlarmClockResponse_AlarmClock) ProtoMessage() {}
 
 func (x *GetAlarmClockResponse_AlarmClock) ProtoReflect() protoreflect.Message {
-	mi := &file_api_user_v2_alarm_clock_proto_msgTypes[11]
+	mi := &file_user_v2_alarm_clock_proto_msgTypes[11]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -715,7 +715,7 @@ func (x *GetAlarmClockResponse_AlarmClock) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use GetAlarmClockResponse_AlarmClock.ProtoReflect.Descriptor instead.
 func (*GetAlarmClockResponse_AlarmClock) Descriptor() ([]byte, []int) {
-	return file_api_user_v2_alarm_clock_proto_rawDescGZIP(), []int{3, 0}
+	return file_user_v2_alarm_clock_proto_rawDescGZIP(), []int{3, 0}
 }
 
 func (x *GetAlarmClockResponse_AlarmClock) GetCid() string {
@@ -767,159 +767,159 @@ func (x *GetAlarmClockResponse_AlarmClock) GetStatus() bool {
 	return false
 }
 
-var File_api_user_v2_alarm_clock_proto protoreflect.FileDescriptor
+var File_user_v2_alarm_clock_proto protoreflect.FileDescriptor
 
-var file_api_user_v2_alarm_clock_proto_rawDesc = []byte{
-	0x0a, 0x1d, 0x61, 0x70, 0x69, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x2f, 0x76, 0x32, 0x2f, 0x61, 0x6c,
-	0x61, 0x72, 0x6d, 0x5f, 0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12,
-	0x0b, 0x61, 0x70, 0x69, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x1a, 0x1c, 0x67, 0x6f,
-	0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74,
-	0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x17, 0x76, 0x61, 0x6c, 0x69,
-	0x64, 0x61, 0x74, 0x65, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x70, 0x72,
-	0x6f, 0x74, 0x6f, 0x22, 0x41, 0x0a, 0x1e, 0x47, 0x65, 0x74, 0x57, 0x72, 0x69, 0x73, 0x74, 0x77,
+var file_user_v2_alarm_clock_proto_rawDesc = []byte{
+	0x0a, 0x19, 0x75, 0x73, 0x65, 0x72, 0x2f, 0x76, 0x32, 0x2f, 0x61, 0x6c, 0x61, 0x72, 0x6d, 0x5f,
+	0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0b, 0x61, 0x70, 0x69,
+	0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
+	0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73,
+	0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x17, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65,
+	0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22,
+	0x41, 0x0a, 0x1e, 0x47, 0x65, 0x74, 0x57, 0x72, 0x69, 0x73, 0x74, 0x77, 0x61, 0x74, 0x63, 0x68,
+	0x41, 0x6c, 0x61, 0x72, 0x6d, 0x43, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
+	0x74, 0x12, 0x1f, 0x0a, 0x06, 0x74, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28,
+	0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x06, 0x74, 0x69, 0x63, 0x6b,
+	0x65, 0x74, 0x22, 0xa5, 0x02, 0x0a, 0x1f, 0x47, 0x65, 0x74, 0x57, 0x72, 0x69, 0x73, 0x74, 0x77,
 	0x61, 0x74, 0x63, 0x68, 0x41, 0x6c, 0x61, 0x72, 0x6d, 0x43, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65,
-	0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x06, 0x74, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x18,
-	0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x06,
-	0x74, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x22, 0xa5, 0x02, 0x0a, 0x1f, 0x47, 0x65, 0x74, 0x57, 0x72,
-	0x69, 0x73, 0x74, 0x77, 0x61, 0x74, 0x63, 0x68, 0x41, 0x6c, 0x61, 0x72, 0x6d, 0x43, 0x6c, 0x6f,
-	0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x59, 0x0a, 0x0b, 0x61, 0x6c,
-	0x61, 0x72, 0x6d, 0x43, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32,
-	0x37, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65,
-	0x74, 0x57, 0x72, 0x69, 0x73, 0x74, 0x77, 0x61, 0x74, 0x63, 0x68, 0x41, 0x6c, 0x61, 0x72, 0x6d,
-	0x43, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x41, 0x6c,
-	0x61, 0x72, 0x6d, 0x43, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x0b, 0x61, 0x6c, 0x61, 0x72, 0x6d, 0x43,
-	0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x1a, 0xa6, 0x01, 0x0a, 0x0a, 0x41, 0x6c, 0x61, 0x72, 0x6d, 0x43,
-	0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x10, 0x0a, 0x03, 0x63, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28,
-	0x09, 0x52, 0x03, 0x63, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x18,
-	0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x12, 0x18, 0x0a, 0x07,
-	0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72,
-	0x65, 0x70, 0x65, 0x61, 0x74, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x04,
-	0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x6f, 0x6e,
-	0x63, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x6f, 0x6e,
-	0x63, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01,
-	0x28, 0x03, 0x52, 0x02, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73,
-	0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x34,
-	0x0a, 0x14, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x61, 0x72, 0x6d, 0x43, 0x6c, 0x6f, 0x63, 0x6b, 0x52,
-	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x03, 0x63, 0x69, 0x64, 0x18, 0x01, 0x20,
-	0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, 0x10, 0x01, 0xb0, 0x01, 0x01, 0x52,
-	0x03, 0x63, 0x69, 0x64, 0x22, 0x91, 0x02, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x61, 0x72,
-	0x6d, 0x43, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4f,
-	0x0a, 0x0b, 0x61, 0x6c, 0x61, 0x72, 0x6d, 0x43, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x18, 0x01, 0x20,
-	0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76,
-	0x32, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x61, 0x72, 0x6d, 0x43, 0x6c, 0x6f, 0x63, 0x6b, 0x52,
-	0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x41, 0x6c, 0x61, 0x72, 0x6d, 0x43, 0x6c, 0x6f,
-	0x63, 0x6b, 0x52, 0x0b, 0x61, 0x6c, 0x61, 0x72, 0x6d, 0x43, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x1a,
-	0xa6, 0x01, 0x0a, 0x0a, 0x41, 0x6c, 0x61, 0x72, 0x6d, 0x43, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x10,
-	0x0a, 0x03, 0x63, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x63, 0x69, 0x64,
-	0x12, 0x14, 0x0a, 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52,
-	0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74,
-	0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x73,
-	0x12, 0x12, 0x0a, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04,
-	0x74, 0x69, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x6f, 0x6e, 0x63, 0x65, 0x54, 0x69, 0x6d, 0x65,
-	0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x6f, 0x6e, 0x63, 0x65, 0x54, 0x69, 0x6d, 0x65,
-	0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x69, 0x64,
-	0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08,
-	0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0xaf, 0x01, 0x0a, 0x17, 0x43, 0x72, 0x65,
-	0x61, 0x74, 0x65, 0x41, 0x6c, 0x61, 0x72, 0x6d, 0x43, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71,
-	0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x03, 0x63, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28,
-	0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, 0x10, 0x01, 0xb0, 0x01, 0x01, 0x52, 0x03, 0x63,
+	0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x59, 0x0a, 0x0b, 0x61, 0x6c, 0x61, 0x72, 0x6d, 0x43,
+	0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x61, 0x70,
+	0x69, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x72, 0x69,
+	0x73, 0x74, 0x77, 0x61, 0x74, 0x63, 0x68, 0x41, 0x6c, 0x61, 0x72, 0x6d, 0x43, 0x6c, 0x6f, 0x63,
+	0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x41, 0x6c, 0x61, 0x72, 0x6d, 0x43,
+	0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x0b, 0x61, 0x6c, 0x61, 0x72, 0x6d, 0x43, 0x6c, 0x6f, 0x63, 0x6b,
+	0x73, 0x1a, 0xa6, 0x01, 0x0a, 0x0a, 0x41, 0x6c, 0x61, 0x72, 0x6d, 0x43, 0x6c, 0x6f, 0x63, 0x6b,
+	0x12, 0x10, 0x0a, 0x03, 0x63, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x63,
 	0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28,
 	0x09, 0x52, 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x70, 0x65,
 	0x61, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x70, 0x65, 0x61,
 	0x74, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09,
 	0x52, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x6f, 0x6e, 0x63, 0x65, 0x54, 0x69,
 	0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x6f, 0x6e, 0x63, 0x65, 0x54, 0x69,
-	0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x06, 0x20, 0x01,
-	0x28, 0x08, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x1a, 0x0a, 0x18, 0x43, 0x72,
-	0x65, 0x61, 0x74, 0x65, 0x41, 0x6c, 0x61, 0x72, 0x6d, 0x43, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65,
-	0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xc8, 0x01, 0x0a, 0x17, 0x55, 0x70, 0x64, 0x61, 0x74,
-	0x65, 0x41, 0x6c, 0x61, 0x72, 0x6d, 0x43, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65,
+	0x6d, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x02,
+	0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x07, 0x20, 0x01,
+	0x28, 0x08, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x34, 0x0a, 0x14, 0x47, 0x65,
+	0x74, 0x41, 0x6c, 0x61, 0x72, 0x6d, 0x43, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65,
 	0x73, 0x74, 0x12, 0x1c, 0x0a, 0x03, 0x63, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42,
 	0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, 0x10, 0x01, 0xb0, 0x01, 0x01, 0x52, 0x03, 0x63, 0x69, 0x64,
-	0x12, 0x14, 0x0a, 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52,
-	0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74,
-	0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x73,
-	0x12, 0x12, 0x0a, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04,
-	0x74, 0x69, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x6f, 0x6e, 0x63, 0x65, 0x54, 0x69, 0x6d, 0x65,
-	0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x6f, 0x6e, 0x63, 0x65, 0x54, 0x69, 0x6d, 0x65,
-	0x12, 0x17, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x42, 0x07, 0xfa, 0x42,
-	0x04, 0x22, 0x02, 0x20, 0x01, 0x52, 0x02, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61,
-	0x74, 0x75, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75,
-	0x73, 0x22, 0x1a, 0x0a, 0x18, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x6c, 0x61, 0x72, 0x6d,
-	0x43, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x32, 0x0a,
-	0x17, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x6c, 0x61, 0x72, 0x6d, 0x43, 0x6c, 0x6f, 0x63,
-	0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x17, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x06,
-	0x20, 0x01, 0x28, 0x03, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x22, 0x02, 0x20, 0x01, 0x52, 0x02, 0x69,
-	0x64, 0x22, 0x1a, 0x0a, 0x18, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x6c, 0x61, 0x72, 0x6d,
-	0x43, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0x82, 0x06,
-	0x0a, 0x0a, 0x41, 0x6c, 0x61, 0x72, 0x6d, 0x43, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0xae, 0x01, 0x0a,
-	0x17, 0x47, 0x65, 0x74, 0x57, 0x72, 0x69, 0x73, 0x74, 0x77, 0x61, 0x74, 0x63, 0x68, 0x41, 0x6c,
-	0x61, 0x72, 0x6d, 0x43, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x2b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x75,
-	0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x72, 0x69, 0x73, 0x74, 0x77,
-	0x61, 0x74, 0x63, 0x68, 0x41, 0x6c, 0x61, 0x72, 0x6d, 0x43, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65,
-	0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x75, 0x73, 0x65, 0x72,
-	0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x72, 0x69, 0x73, 0x74, 0x77, 0x61, 0x74, 0x63,
-	0x68, 0x41, 0x6c, 0x61, 0x72, 0x6d, 0x43, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f,
-	0x6e, 0x73, 0x65, 0x22, 0x38, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x32, 0x12, 0x30, 0x2f, 0x61, 0x70,
-	0x69, 0x73, 0x2f, 0x76, 0x32, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x63, 0x74, 0x78, 0x2f, 0x75, 0x73,
-	0x65, 0x72, 0x2f, 0x77, 0x72, 0x69, 0x73, 0x74, 0x77, 0x61, 0x74, 0x63, 0x68, 0x2f, 0x61, 0x6c,
-	0x61, 0x72, 0x6d, 0x2d, 0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x2f, 0x67, 0x65, 0x74, 0x12, 0x88, 0x01,
-	0x0a, 0x0d, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x61, 0x72, 0x6d, 0x43, 0x6c, 0x6f, 0x63, 0x6b, 0x12,
-	0x21, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65,
-	0x74, 0x41, 0x6c, 0x61, 0x72, 0x6d, 0x43, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65,
-	0x73, 0x74, 0x1a, 0x22, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32,
-	0x2e, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x61, 0x72, 0x6d, 0x43, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65,
-	0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x30, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2a, 0x12, 0x28,
-	0x2f, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x76, 0x32, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x63, 0x74, 0x78,
-	0x2f, 0x75, 0x73, 0x65, 0x72, 0x2f, 0x61, 0x6c, 0x61, 0x72, 0x6d, 0x2d, 0x63, 0x6c, 0x6f, 0x63,
-	0x6b, 0x2f, 0x67, 0x65, 0x74, 0x61, 0x6c, 0x6c, 0x12, 0x94, 0x01, 0x0a, 0x10, 0x43, 0x72, 0x65,
-	0x61, 0x74, 0x65, 0x41, 0x6c, 0x61, 0x72, 0x6d, 0x43, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x24, 0x2e,
-	0x61, 0x70, 0x69, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x72, 0x65, 0x61,
-	0x74, 0x65, 0x41, 0x6c, 0x61, 0x72, 0x6d, 0x43, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75,
-	0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76,
-	0x32, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x6c, 0x61, 0x72, 0x6d, 0x43, 0x6c, 0x6f,
-	0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x33, 0x82, 0xd3, 0xe4, 0x93,
-	0x02, 0x2d, 0x3a, 0x01, 0x2a, 0x22, 0x28, 0x2f, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x76, 0x32, 0x2f,
-	0x75, 0x73, 0x65, 0x72, 0x63, 0x74, 0x78, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x2f, 0x61, 0x6c, 0x61,
-	0x72, 0x6d, 0x2d, 0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x2f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12,
-	0x94, 0x01, 0x0a, 0x10, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x6c, 0x61, 0x72, 0x6d, 0x43,
-	0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x24, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e,
-	0x76, 0x32, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x6c, 0x61, 0x72, 0x6d, 0x43, 0x6c,
-	0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x61, 0x70, 0x69,
-	0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41,
-	0x6c, 0x61, 0x72, 0x6d, 0x43, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
-	0x65, 0x22, 0x33, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2d, 0x3a, 0x01, 0x2a, 0x22, 0x28, 0x2f, 0x61,
-	0x70, 0x69, 0x73, 0x2f, 0x76, 0x32, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x63, 0x74, 0x78, 0x2f, 0x75,
-	0x73, 0x65, 0x72, 0x2f, 0x61, 0x6c, 0x61, 0x72, 0x6d, 0x2d, 0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x2f,
-	0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x89, 0x01, 0x0a, 0x10, 0x44, 0x65, 0x6c, 0x65, 0x74,
-	0x65, 0x41, 0x6c, 0x61, 0x72, 0x6d, 0x43, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x24, 0x2e, 0x61, 0x70,
-	0x69, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65,
+	0x22, 0x91, 0x02, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x61, 0x72, 0x6d, 0x43, 0x6c, 0x6f,
+	0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4f, 0x0a, 0x0b, 0x61, 0x6c,
+	0x61, 0x72, 0x6d, 0x43, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32,
+	0x2d, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65,
+	0x74, 0x41, 0x6c, 0x61, 0x72, 0x6d, 0x43, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f,
+	0x6e, 0x73, 0x65, 0x2e, 0x41, 0x6c, 0x61, 0x72, 0x6d, 0x43, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x0b,
+	0x61, 0x6c, 0x61, 0x72, 0x6d, 0x43, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x1a, 0xa6, 0x01, 0x0a, 0x0a,
+	0x41, 0x6c, 0x61, 0x72, 0x6d, 0x43, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x10, 0x0a, 0x03, 0x63, 0x69,
+	0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x63, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05,
+	0x6c, 0x61, 0x62, 0x65, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6c, 0x61, 0x62,
+	0x65, 0x6c, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x73, 0x18, 0x03, 0x20,
+	0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x73, 0x12, 0x12, 0x0a, 0x04,
+	0x74, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x69, 0x6d, 0x65,
+	0x12, 0x1a, 0x0a, 0x08, 0x6f, 0x6e, 0x63, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01,
+	0x28, 0x03, 0x52, 0x08, 0x6f, 0x6e, 0x63, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x0e, 0x0a, 0x02,
+	0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06,
+	0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x73, 0x74,
+	0x61, 0x74, 0x75, 0x73, 0x22, 0xaf, 0x01, 0x0a, 0x17, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41,
+	0x6c, 0x61, 0x72, 0x6d, 0x43, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+	0x12, 0x1c, 0x0a, 0x03, 0x63, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa,
+	0x42, 0x07, 0x72, 0x05, 0x10, 0x01, 0xb0, 0x01, 0x01, 0x52, 0x03, 0x63, 0x69, 0x64, 0x12, 0x14,
+	0x0a, 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6c,
+	0x61, 0x62, 0x65, 0x6c, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x73, 0x18,
+	0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x73, 0x12, 0x12,
+	0x0a, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x69,
+	0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x6f, 0x6e, 0x63, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x05,
+	0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x6f, 0x6e, 0x63, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x16,
+	0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06,
+	0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x1a, 0x0a, 0x18, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65,
+	0x41, 0x6c, 0x61, 0x72, 0x6d, 0x43, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
+	0x73, 0x65, 0x22, 0xc8, 0x01, 0x0a, 0x17, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x6c, 0x61,
+	0x72, 0x6d, 0x43, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c,
+	0x0a, 0x03, 0x63, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07,
+	0x72, 0x05, 0x10, 0x01, 0xb0, 0x01, 0x01, 0x52, 0x03, 0x63, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05,
+	0x6c, 0x61, 0x62, 0x65, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6c, 0x61, 0x62,
+	0x65, 0x6c, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x73, 0x18, 0x03, 0x20,
+	0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x73, 0x12, 0x12, 0x0a, 0x04,
+	0x74, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x69, 0x6d, 0x65,
+	0x12, 0x1a, 0x0a, 0x08, 0x6f, 0x6e, 0x63, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01,
+	0x28, 0x03, 0x52, 0x08, 0x6f, 0x6e, 0x63, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x17, 0x0a, 0x02,
+	0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x22, 0x02, 0x20,
+	0x01, 0x52, 0x02, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18,
+	0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x1a, 0x0a,
+	0x18, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x6c, 0x61, 0x72, 0x6d, 0x43, 0x6c, 0x6f, 0x63,
+	0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x32, 0x0a, 0x17, 0x44, 0x65, 0x6c,
+	0x65, 0x74, 0x65, 0x41, 0x6c, 0x61, 0x72, 0x6d, 0x43, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71,
+	0x75, 0x65, 0x73, 0x74, 0x12, 0x17, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03,
+	0x42, 0x07, 0xfa, 0x42, 0x04, 0x22, 0x02, 0x20, 0x01, 0x52, 0x02, 0x69, 0x64, 0x22, 0x1a, 0x0a,
+	0x18, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x6c, 0x61, 0x72, 0x6d, 0x43, 0x6c, 0x6f, 0x63,
+	0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0x82, 0x06, 0x0a, 0x0a, 0x41, 0x6c,
+	0x61, 0x72, 0x6d, 0x43, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0xae, 0x01, 0x0a, 0x17, 0x47, 0x65, 0x74,
+	0x57, 0x72, 0x69, 0x73, 0x74, 0x77, 0x61, 0x74, 0x63, 0x68, 0x41, 0x6c, 0x61, 0x72, 0x6d, 0x43,
+	0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x2b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e,
+	0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x72, 0x69, 0x73, 0x74, 0x77, 0x61, 0x74, 0x63, 0x68,
 	0x41, 0x6c, 0x61, 0x72, 0x6d, 0x43, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
-	0x74, 0x1a, 0x25, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e,
-	0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x6c, 0x61, 0x72, 0x6d, 0x43, 0x6c, 0x6f, 0x63, 0x6b,
-	0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x28, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x22,
-	0x12, 0x20, 0x2f, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x76, 0x32, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x2f,
-	0x61, 0x6c, 0x61, 0x72, 0x6d, 0x2d, 0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x2f, 0x64, 0x65, 0x6c, 0x65,
-	0x74, 0x65, 0x42, 0x30, 0x0a, 0x0b, 0x61, 0x70, 0x69, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76,
-	0x32, 0x50, 0x01, 0x5a, 0x1f, 0x73, 0x69, 0x6b, 0x65, 0x79, 0x2f, 0x77, 0x33, 0x30, 0x33, 0x61,
-	0x2f, 0x68, 0x74, 0x74, 0x70, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x2f, 0x76,
-	0x32, 0x3b, 0x76, 0x32, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+	0x74, 0x1a, 0x2c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e,
+	0x47, 0x65, 0x74, 0x57, 0x72, 0x69, 0x73, 0x74, 0x77, 0x61, 0x74, 0x63, 0x68, 0x41, 0x6c, 0x61,
+	0x72, 0x6d, 0x43, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22,
+	0x38, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x32, 0x12, 0x30, 0x2f, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x76,
+	0x32, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x63, 0x74, 0x78, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x2f, 0x77,
+	0x72, 0x69, 0x73, 0x74, 0x77, 0x61, 0x74, 0x63, 0x68, 0x2f, 0x61, 0x6c, 0x61, 0x72, 0x6d, 0x2d,
+	0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x2f, 0x67, 0x65, 0x74, 0x12, 0x88, 0x01, 0x0a, 0x0d, 0x47, 0x65,
+	0x74, 0x41, 0x6c, 0x61, 0x72, 0x6d, 0x43, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x21, 0x2e, 0x61, 0x70,
+	0x69, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x61,
+	0x72, 0x6d, 0x43, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22,
+	0x2e, 0x61, 0x70, 0x69, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74,
+	0x41, 0x6c, 0x61, 0x72, 0x6d, 0x43, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
+	0x73, 0x65, 0x22, 0x30, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2a, 0x12, 0x28, 0x2f, 0x61, 0x70, 0x69,
+	0x73, 0x2f, 0x76, 0x32, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x63, 0x74, 0x78, 0x2f, 0x75, 0x73, 0x65,
+	0x72, 0x2f, 0x61, 0x6c, 0x61, 0x72, 0x6d, 0x2d, 0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x2f, 0x67, 0x65,
+	0x74, 0x61, 0x6c, 0x6c, 0x12, 0x94, 0x01, 0x0a, 0x10, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41,
+	0x6c, 0x61, 0x72, 0x6d, 0x43, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x24, 0x2e, 0x61, 0x70, 0x69, 0x2e,
+	0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x6c,
+	0x61, 0x72, 0x6d, 0x43, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
+	0x25, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x72,
+	0x65, 0x61, 0x74, 0x65, 0x41, 0x6c, 0x61, 0x72, 0x6d, 0x43, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65,
+	0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x33, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2d, 0x3a, 0x01,
+	0x2a, 0x22, 0x28, 0x2f, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x76, 0x32, 0x2f, 0x75, 0x73, 0x65, 0x72,
+	0x63, 0x74, 0x78, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x2f, 0x61, 0x6c, 0x61, 0x72, 0x6d, 0x2d, 0x63,
+	0x6c, 0x6f, 0x63, 0x6b, 0x2f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x94, 0x01, 0x0a, 0x10,
+	0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x6c, 0x61, 0x72, 0x6d, 0x43, 0x6c, 0x6f, 0x63, 0x6b,
+	0x12, 0x24, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x55,
+	0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x6c, 0x61, 0x72, 0x6d, 0x43, 0x6c, 0x6f, 0x63, 0x6b, 0x52,
+	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x75, 0x73, 0x65,
+	0x72, 0x2e, 0x76, 0x32, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x6c, 0x61, 0x72, 0x6d,
+	0x43, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x33, 0x82,
+	0xd3, 0xe4, 0x93, 0x02, 0x2d, 0x3a, 0x01, 0x2a, 0x22, 0x28, 0x2f, 0x61, 0x70, 0x69, 0x73, 0x2f,
+	0x76, 0x32, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x63, 0x74, 0x78, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x2f,
+	0x61, 0x6c, 0x61, 0x72, 0x6d, 0x2d, 0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x2f, 0x75, 0x70, 0x64, 0x61,
+	0x74, 0x65, 0x12, 0x89, 0x01, 0x0a, 0x10, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x6c, 0x61,
+	0x72, 0x6d, 0x43, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x24, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x75, 0x73,
+	0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x6c, 0x61, 0x72,
+	0x6d, 0x43, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e,
+	0x61, 0x70, 0x69, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, 0x6c, 0x65,
+	0x74, 0x65, 0x41, 0x6c, 0x61, 0x72, 0x6d, 0x43, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70,
+	0x6f, 0x6e, 0x73, 0x65, 0x22, 0x28, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x22, 0x12, 0x20, 0x2f, 0x61,
+	0x70, 0x69, 0x73, 0x2f, 0x76, 0x32, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x2f, 0x61, 0x6c, 0x61, 0x72,
+	0x6d, 0x2d, 0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x2f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x42, 0x30,
+	0x0a, 0x0b, 0x61, 0x70, 0x69, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x50, 0x01, 0x5a,
+	0x1f, 0x73, 0x69, 0x6b, 0x65, 0x79, 0x2f, 0x77, 0x33, 0x30, 0x33, 0x61, 0x2f, 0x68, 0x74, 0x74,
+	0x70, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x2f, 0x76, 0x32, 0x3b, 0x76, 0x32,
+	0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
 }
 
 var (
-	file_api_user_v2_alarm_clock_proto_rawDescOnce sync.Once
-	file_api_user_v2_alarm_clock_proto_rawDescData = file_api_user_v2_alarm_clock_proto_rawDesc
+	file_user_v2_alarm_clock_proto_rawDescOnce sync.Once
+	file_user_v2_alarm_clock_proto_rawDescData = file_user_v2_alarm_clock_proto_rawDesc
 )
 
-func file_api_user_v2_alarm_clock_proto_rawDescGZIP() []byte {
-	file_api_user_v2_alarm_clock_proto_rawDescOnce.Do(func() {
-		file_api_user_v2_alarm_clock_proto_rawDescData = protoimpl.X.CompressGZIP(file_api_user_v2_alarm_clock_proto_rawDescData)
+func file_user_v2_alarm_clock_proto_rawDescGZIP() []byte {
+	file_user_v2_alarm_clock_proto_rawDescOnce.Do(func() {
+		file_user_v2_alarm_clock_proto_rawDescData = protoimpl.X.CompressGZIP(file_user_v2_alarm_clock_proto_rawDescData)
 	})
-	return file_api_user_v2_alarm_clock_proto_rawDescData
+	return file_user_v2_alarm_clock_proto_rawDescData
 }
 
-var file_api_user_v2_alarm_clock_proto_msgTypes = make([]protoimpl.MessageInfo, 12)
-var file_api_user_v2_alarm_clock_proto_goTypes = []any{
+var file_user_v2_alarm_clock_proto_msgTypes = make([]protoimpl.MessageInfo, 12)
+var file_user_v2_alarm_clock_proto_goTypes = []any{
 	(*GetWristwatchAlarmClockRequest)(nil),             // 0: api.user.v2.GetWristwatchAlarmClockRequest
 	(*GetWristwatchAlarmClockResponse)(nil),            // 1: api.user.v2.GetWristwatchAlarmClockResponse
 	(*GetAlarmClockRequest)(nil),                       // 2: api.user.v2.GetAlarmClockRequest
@@ -933,7 +933,7 @@ var file_api_user_v2_alarm_clock_proto_goTypes = []any{
 	(*GetWristwatchAlarmClockResponse_AlarmClock)(nil), // 10: api.user.v2.GetWristwatchAlarmClockResponse.AlarmClock
 	(*GetAlarmClockResponse_AlarmClock)(nil),           // 11: api.user.v2.GetAlarmClockResponse.AlarmClock
 }
-var file_api_user_v2_alarm_clock_proto_depIdxs = []int32{
+var file_user_v2_alarm_clock_proto_depIdxs = []int32{
 	10, // 0: api.user.v2.GetWristwatchAlarmClockResponse.alarmClocks:type_name -> api.user.v2.GetWristwatchAlarmClockResponse.AlarmClock
 	11, // 1: api.user.v2.GetAlarmClockResponse.alarmClocks:type_name -> api.user.v2.GetAlarmClockResponse.AlarmClock
 	0,  // 2: api.user.v2.AlarmClock.GetWristwatchAlarmClock:input_type -> api.user.v2.GetWristwatchAlarmClockRequest
@@ -953,13 +953,13 @@ var file_api_user_v2_alarm_clock_proto_depIdxs = []int32{
 	0,  // [0:2] is the sub-list for field type_name
 }
 
-func init() { file_api_user_v2_alarm_clock_proto_init() }
-func file_api_user_v2_alarm_clock_proto_init() {
-	if File_api_user_v2_alarm_clock_proto != nil {
+func init() { file_user_v2_alarm_clock_proto_init() }
+func file_user_v2_alarm_clock_proto_init() {
+	if File_user_v2_alarm_clock_proto != nil {
 		return
 	}
 	if !protoimpl.UnsafeEnabled {
-		file_api_user_v2_alarm_clock_proto_msgTypes[0].Exporter = func(v any, i int) any {
+		file_user_v2_alarm_clock_proto_msgTypes[0].Exporter = func(v any, i int) any {
 			switch v := v.(*GetWristwatchAlarmClockRequest); i {
 			case 0:
 				return &v.state
@@ -971,7 +971,7 @@ func file_api_user_v2_alarm_clock_proto_init() {
 				return nil
 			}
 		}
-		file_api_user_v2_alarm_clock_proto_msgTypes[1].Exporter = func(v any, i int) any {
+		file_user_v2_alarm_clock_proto_msgTypes[1].Exporter = func(v any, i int) any {
 			switch v := v.(*GetWristwatchAlarmClockResponse); i {
 			case 0:
 				return &v.state
@@ -983,7 +983,7 @@ func file_api_user_v2_alarm_clock_proto_init() {
 				return nil
 			}
 		}
-		file_api_user_v2_alarm_clock_proto_msgTypes[2].Exporter = func(v any, i int) any {
+		file_user_v2_alarm_clock_proto_msgTypes[2].Exporter = func(v any, i int) any {
 			switch v := v.(*GetAlarmClockRequest); i {
 			case 0:
 				return &v.state
@@ -995,7 +995,7 @@ func file_api_user_v2_alarm_clock_proto_init() {
 				return nil
 			}
 		}
-		file_api_user_v2_alarm_clock_proto_msgTypes[3].Exporter = func(v any, i int) any {
+		file_user_v2_alarm_clock_proto_msgTypes[3].Exporter = func(v any, i int) any {
 			switch v := v.(*GetAlarmClockResponse); i {
 			case 0:
 				return &v.state
@@ -1007,7 +1007,7 @@ func file_api_user_v2_alarm_clock_proto_init() {
 				return nil
 			}
 		}
-		file_api_user_v2_alarm_clock_proto_msgTypes[4].Exporter = func(v any, i int) any {
+		file_user_v2_alarm_clock_proto_msgTypes[4].Exporter = func(v any, i int) any {
 			switch v := v.(*CreateAlarmClockRequest); i {
 			case 0:
 				return &v.state
@@ -1019,7 +1019,7 @@ func file_api_user_v2_alarm_clock_proto_init() {
 				return nil
 			}
 		}
-		file_api_user_v2_alarm_clock_proto_msgTypes[5].Exporter = func(v any, i int) any {
+		file_user_v2_alarm_clock_proto_msgTypes[5].Exporter = func(v any, i int) any {
 			switch v := v.(*CreateAlarmClockResponse); i {
 			case 0:
 				return &v.state
@@ -1031,7 +1031,7 @@ func file_api_user_v2_alarm_clock_proto_init() {
 				return nil
 			}
 		}
-		file_api_user_v2_alarm_clock_proto_msgTypes[6].Exporter = func(v any, i int) any {
+		file_user_v2_alarm_clock_proto_msgTypes[6].Exporter = func(v any, i int) any {
 			switch v := v.(*UpdateAlarmClockRequest); i {
 			case 0:
 				return &v.state
@@ -1043,7 +1043,7 @@ func file_api_user_v2_alarm_clock_proto_init() {
 				return nil
 			}
 		}
-		file_api_user_v2_alarm_clock_proto_msgTypes[7].Exporter = func(v any, i int) any {
+		file_user_v2_alarm_clock_proto_msgTypes[7].Exporter = func(v any, i int) any {
 			switch v := v.(*UpdateAlarmClockResponse); i {
 			case 0:
 				return &v.state
@@ -1055,7 +1055,7 @@ func file_api_user_v2_alarm_clock_proto_init() {
 				return nil
 			}
 		}
-		file_api_user_v2_alarm_clock_proto_msgTypes[8].Exporter = func(v any, i int) any {
+		file_user_v2_alarm_clock_proto_msgTypes[8].Exporter = func(v any, i int) any {
 			switch v := v.(*DeleteAlarmClockRequest); i {
 			case 0:
 				return &v.state
@@ -1067,7 +1067,7 @@ func file_api_user_v2_alarm_clock_proto_init() {
 				return nil
 			}
 		}
-		file_api_user_v2_alarm_clock_proto_msgTypes[9].Exporter = func(v any, i int) any {
+		file_user_v2_alarm_clock_proto_msgTypes[9].Exporter = func(v any, i int) any {
 			switch v := v.(*DeleteAlarmClockResponse); i {
 			case 0:
 				return &v.state
@@ -1079,7 +1079,7 @@ func file_api_user_v2_alarm_clock_proto_init() {
 				return nil
 			}
 		}
-		file_api_user_v2_alarm_clock_proto_msgTypes[10].Exporter = func(v any, i int) any {
+		file_user_v2_alarm_clock_proto_msgTypes[10].Exporter = func(v any, i int) any {
 			switch v := v.(*GetWristwatchAlarmClockResponse_AlarmClock); i {
 			case 0:
 				return &v.state
@@ -1091,7 +1091,7 @@ func file_api_user_v2_alarm_clock_proto_init() {
 				return nil
 			}
 		}
-		file_api_user_v2_alarm_clock_proto_msgTypes[11].Exporter = func(v any, i int) any {
+		file_user_v2_alarm_clock_proto_msgTypes[11].Exporter = func(v any, i int) any {
 			switch v := v.(*GetAlarmClockResponse_AlarmClock); i {
 			case 0:
 				return &v.state
@@ -1108,18 +1108,18 @@ func file_api_user_v2_alarm_clock_proto_init() {
 	out := protoimpl.TypeBuilder{
 		File: protoimpl.DescBuilder{
 			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
-			RawDescriptor: file_api_user_v2_alarm_clock_proto_rawDesc,
+			RawDescriptor: file_user_v2_alarm_clock_proto_rawDesc,
 			NumEnums:      0,
 			NumMessages:   12,
 			NumExtensions: 0,
 			NumServices:   1,
 		},
-		GoTypes:           file_api_user_v2_alarm_clock_proto_goTypes,
-		DependencyIndexes: file_api_user_v2_alarm_clock_proto_depIdxs,
-		MessageInfos:      file_api_user_v2_alarm_clock_proto_msgTypes,
+		GoTypes:           file_user_v2_alarm_clock_proto_goTypes,
+		DependencyIndexes: file_user_v2_alarm_clock_proto_depIdxs,
+		MessageInfos:      file_user_v2_alarm_clock_proto_msgTypes,
 	}.Build()
-	File_api_user_v2_alarm_clock_proto = out.File
-	file_api_user_v2_alarm_clock_proto_rawDesc = nil
-	file_api_user_v2_alarm_clock_proto_goTypes = nil
-	file_api_user_v2_alarm_clock_proto_depIdxs = nil
+	File_user_v2_alarm_clock_proto = out.File
+	file_user_v2_alarm_clock_proto_rawDesc = nil
+	file_user_v2_alarm_clock_proto_goTypes = nil
+	file_user_v2_alarm_clock_proto_depIdxs = nil
 }

+ 237 - 232
api/user/v2/child.pb.go

@@ -2,7 +2,7 @@
 // versions:
 // 	protoc-gen-go v1.34.2
 // 	protoc        v4.25.3
-// source: api/user/v2/child.proto
+// source: user/v2/child.proto
 
 package v2
 
@@ -58,11 +58,11 @@ func (x Gender) String() string {
 }
 
 func (Gender) Descriptor() protoreflect.EnumDescriptor {
-	return file_api_user_v2_child_proto_enumTypes[0].Descriptor()
+	return file_user_v2_child_proto_enumTypes[0].Descriptor()
 }
 
 func (Gender) Type() protoreflect.EnumType {
-	return &file_api_user_v2_child_proto_enumTypes[0]
+	return &file_user_v2_child_proto_enumTypes[0]
 }
 
 func (x Gender) Number() protoreflect.EnumNumber {
@@ -71,7 +71,7 @@ func (x Gender) Number() protoreflect.EnumNumber {
 
 // Deprecated: Use Gender.Descriptor instead.
 func (Gender) EnumDescriptor() ([]byte, []int) {
-	return file_api_user_v2_child_proto_rawDescGZIP(), []int{0}
+	return file_user_v2_child_proto_rawDescGZIP(), []int{0}
 }
 
 type GetChildResponse_Location_PointType int32
@@ -118,11 +118,11 @@ func (x GetChildResponse_Location_PointType) String() string {
 }
 
 func (GetChildResponse_Location_PointType) Descriptor() protoreflect.EnumDescriptor {
-	return file_api_user_v2_child_proto_enumTypes[1].Descriptor()
+	return file_user_v2_child_proto_enumTypes[1].Descriptor()
 }
 
 func (GetChildResponse_Location_PointType) Type() protoreflect.EnumType {
-	return &file_api_user_v2_child_proto_enumTypes[1]
+	return &file_user_v2_child_proto_enumTypes[1]
 }
 
 func (x GetChildResponse_Location_PointType) Number() protoreflect.EnumNumber {
@@ -131,7 +131,7 @@ func (x GetChildResponse_Location_PointType) Number() protoreflect.EnumNumber {
 
 // Deprecated: Use GetChildResponse_Location_PointType.Descriptor instead.
 func (GetChildResponse_Location_PointType) EnumDescriptor() ([]byte, []int) {
-	return file_api_user_v2_child_proto_rawDescGZIP(), []int{1, 2, 0}
+	return file_user_v2_child_proto_rawDescGZIP(), []int{1, 2, 0}
 }
 
 type GetChildRequest struct {
@@ -143,7 +143,7 @@ type GetChildRequest struct {
 func (x *GetChildRequest) Reset() {
 	*x = GetChildRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_api_user_v2_child_proto_msgTypes[0]
+		mi := &file_user_v2_child_proto_msgTypes[0]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -156,7 +156,7 @@ func (x *GetChildRequest) String() string {
 func (*GetChildRequest) ProtoMessage() {}
 
 func (x *GetChildRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_api_user_v2_child_proto_msgTypes[0]
+	mi := &file_user_v2_child_proto_msgTypes[0]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -169,7 +169,7 @@ func (x *GetChildRequest) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use GetChildRequest.ProtoReflect.Descriptor instead.
 func (*GetChildRequest) Descriptor() ([]byte, []int) {
-	return file_api_user_v2_child_proto_rawDescGZIP(), []int{0}
+	return file_user_v2_child_proto_rawDescGZIP(), []int{0}
 }
 
 type GetChildResponse struct {
@@ -183,7 +183,7 @@ type GetChildResponse struct {
 func (x *GetChildResponse) Reset() {
 	*x = GetChildResponse{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_api_user_v2_child_proto_msgTypes[1]
+		mi := &file_user_v2_child_proto_msgTypes[1]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -196,7 +196,7 @@ func (x *GetChildResponse) String() string {
 func (*GetChildResponse) ProtoMessage() {}
 
 func (x *GetChildResponse) ProtoReflect() protoreflect.Message {
-	mi := &file_api_user_v2_child_proto_msgTypes[1]
+	mi := &file_user_v2_child_proto_msgTypes[1]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -209,7 +209,7 @@ func (x *GetChildResponse) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use GetChildResponse.ProtoReflect.Descriptor instead.
 func (*GetChildResponse) Descriptor() ([]byte, []int) {
-	return file_api_user_v2_child_proto_rawDescGZIP(), []int{1}
+	return file_user_v2_child_proto_rawDescGZIP(), []int{1}
 }
 
 func (x *GetChildResponse) GetChildList() []*GetChildResponse_Child {
@@ -231,9 +231,9 @@ type CreateChildRequest struct {
 	// 小孩电话区号
 	AreaCode string `protobuf:"bytes,3,opt,name=areaCode,proto3" json:"areaCode,omitempty"`
 	// 小孩头像
-	Avatar string `protobuf:"bytes,4,opt,name=avatar,proto3" json:"avatar,omitempty"`
+	Avatar *string `protobuf:"bytes,4,opt,name=avatar,proto3,oneof" json:"avatar,omitempty"`
 	// 小孩生日
-	Birthday string `protobuf:"bytes,5,opt,name=birthday,proto3" json:"birthday,omitempty"`
+	Birthday *string `protobuf:"bytes,5,opt,name=birthday,proto3,oneof" json:"birthday,omitempty"`
 	// 小孩对自己的称谓
 	Appellation string `protobuf:"bytes,6,opt,name=appellation,proto3" json:"appellation,omitempty"`
 	// 小孩性别
@@ -247,7 +247,7 @@ type CreateChildRequest struct {
 func (x *CreateChildRequest) Reset() {
 	*x = CreateChildRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_api_user_v2_child_proto_msgTypes[2]
+		mi := &file_user_v2_child_proto_msgTypes[2]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -260,7 +260,7 @@ func (x *CreateChildRequest) String() string {
 func (*CreateChildRequest) ProtoMessage() {}
 
 func (x *CreateChildRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_api_user_v2_child_proto_msgTypes[2]
+	mi := &file_user_v2_child_proto_msgTypes[2]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -273,7 +273,7 @@ func (x *CreateChildRequest) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use CreateChildRequest.ProtoReflect.Descriptor instead.
 func (*CreateChildRequest) Descriptor() ([]byte, []int) {
-	return file_api_user_v2_child_proto_rawDescGZIP(), []int{2}
+	return file_user_v2_child_proto_rawDescGZIP(), []int{2}
 }
 
 func (x *CreateChildRequest) GetName() string {
@@ -298,15 +298,15 @@ func (x *CreateChildRequest) GetAreaCode() string {
 }
 
 func (x *CreateChildRequest) GetAvatar() string {
-	if x != nil {
-		return x.Avatar
+	if x != nil && x.Avatar != nil {
+		return *x.Avatar
 	}
 	return ""
 }
 
 func (x *CreateChildRequest) GetBirthday() string {
-	if x != nil {
-		return x.Birthday
+	if x != nil && x.Birthday != nil {
+		return *x.Birthday
 	}
 	return ""
 }
@@ -350,7 +350,7 @@ type CreateChildResponse struct {
 func (x *CreateChildResponse) Reset() {
 	*x = CreateChildResponse{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_api_user_v2_child_proto_msgTypes[3]
+		mi := &file_user_v2_child_proto_msgTypes[3]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -363,7 +363,7 @@ func (x *CreateChildResponse) String() string {
 func (*CreateChildResponse) ProtoMessage() {}
 
 func (x *CreateChildResponse) ProtoReflect() protoreflect.Message {
-	mi := &file_api_user_v2_child_proto_msgTypes[3]
+	mi := &file_user_v2_child_proto_msgTypes[3]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -376,7 +376,7 @@ func (x *CreateChildResponse) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use CreateChildResponse.ProtoReflect.Descriptor instead.
 func (*CreateChildResponse) Descriptor() ([]byte, []int) {
-	return file_api_user_v2_child_proto_rawDescGZIP(), []int{3}
+	return file_user_v2_child_proto_rawDescGZIP(), []int{3}
 }
 
 func (x *CreateChildResponse) GetCid() string {
@@ -416,7 +416,7 @@ type UpdateChildRequest struct {
 func (x *UpdateChildRequest) Reset() {
 	*x = UpdateChildRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_api_user_v2_child_proto_msgTypes[4]
+		mi := &file_user_v2_child_proto_msgTypes[4]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -429,7 +429,7 @@ func (x *UpdateChildRequest) String() string {
 func (*UpdateChildRequest) ProtoMessage() {}
 
 func (x *UpdateChildRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_api_user_v2_child_proto_msgTypes[4]
+	mi := &file_user_v2_child_proto_msgTypes[4]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -442,7 +442,7 @@ func (x *UpdateChildRequest) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use UpdateChildRequest.ProtoReflect.Descriptor instead.
 func (*UpdateChildRequest) Descriptor() ([]byte, []int) {
-	return file_api_user_v2_child_proto_rawDescGZIP(), []int{4}
+	return file_user_v2_child_proto_rawDescGZIP(), []int{4}
 }
 
 func (x *UpdateChildRequest) GetName() string {
@@ -524,7 +524,7 @@ type UpdateChildResponse struct {
 func (x *UpdateChildResponse) Reset() {
 	*x = UpdateChildResponse{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_api_user_v2_child_proto_msgTypes[5]
+		mi := &file_user_v2_child_proto_msgTypes[5]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -537,7 +537,7 @@ func (x *UpdateChildResponse) String() string {
 func (*UpdateChildResponse) ProtoMessage() {}
 
 func (x *UpdateChildResponse) ProtoReflect() protoreflect.Message {
-	mi := &file_api_user_v2_child_proto_msgTypes[5]
+	mi := &file_user_v2_child_proto_msgTypes[5]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -550,7 +550,7 @@ func (x *UpdateChildResponse) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use UpdateChildResponse.ProtoReflect.Descriptor instead.
 func (*UpdateChildResponse) Descriptor() ([]byte, []int) {
-	return file_api_user_v2_child_proto_rawDescGZIP(), []int{5}
+	return file_user_v2_child_proto_rawDescGZIP(), []int{5}
 }
 
 type DeleteChildRequest struct {
@@ -564,7 +564,7 @@ type DeleteChildRequest struct {
 func (x *DeleteChildRequest) Reset() {
 	*x = DeleteChildRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_api_user_v2_child_proto_msgTypes[6]
+		mi := &file_user_v2_child_proto_msgTypes[6]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -577,7 +577,7 @@ func (x *DeleteChildRequest) String() string {
 func (*DeleteChildRequest) ProtoMessage() {}
 
 func (x *DeleteChildRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_api_user_v2_child_proto_msgTypes[6]
+	mi := &file_user_v2_child_proto_msgTypes[6]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -590,7 +590,7 @@ func (x *DeleteChildRequest) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use DeleteChildRequest.ProtoReflect.Descriptor instead.
 func (*DeleteChildRequest) Descriptor() ([]byte, []int) {
-	return file_api_user_v2_child_proto_rawDescGZIP(), []int{6}
+	return file_user_v2_child_proto_rawDescGZIP(), []int{6}
 }
 
 func (x *DeleteChildRequest) GetCid() string {
@@ -609,7 +609,7 @@ type DeleteChildResponse struct {
 func (x *DeleteChildResponse) Reset() {
 	*x = DeleteChildResponse{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_api_user_v2_child_proto_msgTypes[7]
+		mi := &file_user_v2_child_proto_msgTypes[7]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -622,7 +622,7 @@ func (x *DeleteChildResponse) String() string {
 func (*DeleteChildResponse) ProtoMessage() {}
 
 func (x *DeleteChildResponse) ProtoReflect() protoreflect.Message {
-	mi := &file_api_user_v2_child_proto_msgTypes[7]
+	mi := &file_user_v2_child_proto_msgTypes[7]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -635,7 +635,7 @@ func (x *DeleteChildResponse) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use DeleteChildResponse.ProtoReflect.Descriptor instead.
 func (*DeleteChildResponse) Descriptor() ([]byte, []int) {
-	return file_api_user_v2_child_proto_rawDescGZIP(), []int{7}
+	return file_user_v2_child_proto_rawDescGZIP(), []int{7}
 }
 
 type GetChildResponse_Child struct {
@@ -644,10 +644,10 @@ type GetChildResponse_Child struct {
 	unknownFields protoimpl.UnknownFields
 
 	// 小孩ID
-	Cid       string `protobuf:"bytes,1,opt,name=cid,proto3" json:"cid,omitempty"`
-	StepCount int32  `protobuf:"varint,2,opt,name=stepCount,proto3" json:"stepCount,omitempty"`
-	Name      string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"`
-	Avatar    string `protobuf:"bytes,4,opt,name=avatar,proto3" json:"avatar,omitempty"`
+	Cid       string  `protobuf:"bytes,1,opt,name=cid,proto3" json:"cid,omitempty"`
+	StepCount int32   `protobuf:"varint,2,opt,name=stepCount,proto3" json:"stepCount,omitempty"`
+	Name      string  `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"`
+	Avatar    *string `protobuf:"bytes,4,opt,name=avatar,proto3,oneof" json:"avatar,omitempty"`
 	// 绑定的设备
 	Device *GetChildResponse_Device `protobuf:"bytes,5,opt,name=device,proto3" json:"device,omitempty"`
 	// 最后一次位置
@@ -657,7 +657,7 @@ type GetChildResponse_Child struct {
 func (x *GetChildResponse_Child) Reset() {
 	*x = GetChildResponse_Child{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_api_user_v2_child_proto_msgTypes[8]
+		mi := &file_user_v2_child_proto_msgTypes[8]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -670,7 +670,7 @@ func (x *GetChildResponse_Child) String() string {
 func (*GetChildResponse_Child) ProtoMessage() {}
 
 func (x *GetChildResponse_Child) ProtoReflect() protoreflect.Message {
-	mi := &file_api_user_v2_child_proto_msgTypes[8]
+	mi := &file_user_v2_child_proto_msgTypes[8]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -683,7 +683,7 @@ func (x *GetChildResponse_Child) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use GetChildResponse_Child.ProtoReflect.Descriptor instead.
 func (*GetChildResponse_Child) Descriptor() ([]byte, []int) {
-	return file_api_user_v2_child_proto_rawDescGZIP(), []int{1, 0}
+	return file_user_v2_child_proto_rawDescGZIP(), []int{1, 0}
 }
 
 func (x *GetChildResponse_Child) GetCid() string {
@@ -708,8 +708,8 @@ func (x *GetChildResponse_Child) GetName() string {
 }
 
 func (x *GetChildResponse_Child) GetAvatar() string {
-	if x != nil {
-		return x.Avatar
+	if x != nil && x.Avatar != nil {
+		return *x.Avatar
 	}
 	return ""
 }
@@ -743,7 +743,7 @@ type GetChildResponse_Device struct {
 func (x *GetChildResponse_Device) Reset() {
 	*x = GetChildResponse_Device{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_api_user_v2_child_proto_msgTypes[9]
+		mi := &file_user_v2_child_proto_msgTypes[9]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -756,7 +756,7 @@ func (x *GetChildResponse_Device) String() string {
 func (*GetChildResponse_Device) ProtoMessage() {}
 
 func (x *GetChildResponse_Device) ProtoReflect() protoreflect.Message {
-	mi := &file_api_user_v2_child_proto_msgTypes[9]
+	mi := &file_user_v2_child_proto_msgTypes[9]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -769,7 +769,7 @@ func (x *GetChildResponse_Device) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use GetChildResponse_Device.ProtoReflect.Descriptor instead.
 func (*GetChildResponse_Device) Descriptor() ([]byte, []int) {
-	return file_api_user_v2_child_proto_rawDescGZIP(), []int{1, 1}
+	return file_user_v2_child_proto_rawDescGZIP(), []int{1, 1}
 }
 
 func (x *GetChildResponse_Device) GetDid() int64 {
@@ -822,7 +822,7 @@ type GetChildResponse_Location struct {
 func (x *GetChildResponse_Location) Reset() {
 	*x = GetChildResponse_Location{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_api_user_v2_child_proto_msgTypes[10]
+		mi := &file_user_v2_child_proto_msgTypes[10]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -835,7 +835,7 @@ func (x *GetChildResponse_Location) String() string {
 func (*GetChildResponse_Location) ProtoMessage() {}
 
 func (x *GetChildResponse_Location) ProtoReflect() protoreflect.Message {
-	mi := &file_api_user_v2_child_proto_msgTypes[10]
+	mi := &file_user_v2_child_proto_msgTypes[10]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -848,7 +848,7 @@ func (x *GetChildResponse_Location) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use GetChildResponse_Location.ProtoReflect.Descriptor instead.
 func (*GetChildResponse_Location) Descriptor() ([]byte, []int) {
-	return file_api_user_v2_child_proto_rawDescGZIP(), []int{1, 2}
+	return file_user_v2_child_proto_rawDescGZIP(), []int{1, 2}
 }
 
 func (x *GetChildResponse_Location) GetLatitude() string {
@@ -886,173 +886,176 @@ func (x *GetChildResponse_Location) GetPointType() GetChildResponse_Location_Poi
 	return GetChildResponse_Location_UNKNOWN
 }
 
-var File_api_user_v2_child_proto protoreflect.FileDescriptor
-
-var file_api_user_v2_child_proto_rawDesc = []byte{
-	0x0a, 0x17, 0x61, 0x70, 0x69, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x2f, 0x76, 0x32, 0x2f, 0x63, 0x68,
-	0x69, 0x6c, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0b, 0x61, 0x70, 0x69, 0x2e, 0x75,
-	0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61,
-	0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70,
-	0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x17, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2f, 0x76,
-	0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x11, 0x0a,
-	0x0f, 0x47, 0x65, 0x74, 0x43, 0x68, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
-	0x22, 0xdc, 0x05, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x43, 0x68, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x73,
-	0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x41, 0x0a, 0x09, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x4c, 0x69,
-	0x73, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x75,
-	0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x68, 0x69, 0x6c, 0x64, 0x52,
-	0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x43, 0x68, 0x69, 0x6c, 0x64, 0x52, 0x09, 0x63,
-	0x68, 0x69, 0x6c, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x1a, 0xed, 0x01, 0x0a, 0x05, 0x43, 0x68, 0x69,
-	0x6c, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x63, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
-	0x03, 0x63, 0x69, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x74, 0x65, 0x70, 0x43, 0x6f, 0x75, 0x6e,
-	0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x73, 0x74, 0x65, 0x70, 0x43, 0x6f, 0x75,
-	0x6e, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09,
-	0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72,
-	0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x12, 0x3c,
-	0x0a, 0x06, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24,
-	0x2e, 0x61, 0x70, 0x69, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74,
-	0x43, 0x68, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x44, 0x65,
-	0x76, 0x69, 0x63, 0x65, 0x52, 0x06, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x12, 0x4a, 0x0a, 0x0c,
-	0x6c, 0x61, 0x73, 0x74, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01,
-	0x28, 0x0b, 0x32, 0x26, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32,
-	0x2e, 0x47, 0x65, 0x74, 0x43, 0x68, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
-	0x65, 0x2e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0c, 0x6c, 0x61, 0x73, 0x74,
-	0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x82, 0x01, 0x0a, 0x06, 0x44, 0x65, 0x76,
-	0x69, 0x63, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x64, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03,
-	0x52, 0x03, 0x64, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x62, 0x61, 0x74, 0x74, 0x65, 0x72, 0x79,
-	0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x62, 0x61, 0x74, 0x74, 0x65, 0x72, 0x79, 0x12,
-	0x16, 0x0a, 0x06, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52,
-	0x06, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61,
-	0x6c, 0x4d, 0x61, 0x78, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e,
-	0x61, 0x6c, 0x4d, 0x61, 0x78, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x18,
-	0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x1a, 0x8f, 0x02,
-	0x0a, 0x08, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x61,
-	0x74, 0x69, 0x74, 0x75, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6c, 0x61,
-	0x74, 0x69, 0x74, 0x75, 0x64, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6c, 0x6f, 0x6e, 0x67, 0x69, 0x74,
-	0x75, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6c, 0x6f, 0x6e, 0x67, 0x69,
-	0x74, 0x75, 0x64, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e,
-	0x54, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x70, 0x6f, 0x73, 0x69,
-	0x74, 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x61, 0x64, 0x69,
-	0x75, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x72, 0x61, 0x64, 0x69, 0x75, 0x73,
-	0x12, 0x4e, 0x0a, 0x09, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20,
-	0x01, 0x28, 0x0e, 0x32, 0x30, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76,
+var File_user_v2_child_proto protoreflect.FileDescriptor
+
+var file_user_v2_child_proto_rawDesc = []byte{
+	0x0a, 0x13, 0x75, 0x73, 0x65, 0x72, 0x2f, 0x76, 0x32, 0x2f, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x2e,
+	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0b, 0x61, 0x70, 0x69, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e,
+	0x76, 0x32, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61,
+	0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+	0x1a, 0x17, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64,
+	0x61, 0x74, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x11, 0x0a, 0x0f, 0x47, 0x65, 0x74,
+	0x43, 0x68, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0xec, 0x05, 0x0a,
+	0x10, 0x47, 0x65, 0x74, 0x43, 0x68, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
+	0x65, 0x12, 0x41, 0x0a, 0x09, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x01,
+	0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e,
+	0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x68, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f,
+	0x6e, 0x73, 0x65, 0x2e, 0x43, 0x68, 0x69, 0x6c, 0x64, 0x52, 0x09, 0x63, 0x68, 0x69, 0x6c, 0x64,
+	0x4c, 0x69, 0x73, 0x74, 0x1a, 0xfd, 0x01, 0x0a, 0x05, 0x43, 0x68, 0x69, 0x6c, 0x64, 0x12, 0x10,
+	0x0a, 0x03, 0x63, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x63, 0x69, 0x64,
+	0x12, 0x1c, 0x0a, 0x09, 0x73, 0x74, 0x65, 0x70, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20,
+	0x01, 0x28, 0x05, 0x52, 0x09, 0x73, 0x74, 0x65, 0x70, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x12,
+	0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61,
+	0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x06, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x18, 0x04, 0x20, 0x01,
+	0x28, 0x09, 0x48, 0x00, 0x52, 0x06, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x88, 0x01, 0x01, 0x12,
+	0x3c, 0x0a, 0x06, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32,
+	0x24, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65,
+	0x74, 0x43, 0x68, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x44,
+	0x65, 0x76, 0x69, 0x63, 0x65, 0x52, 0x06, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x12, 0x4a, 0x0a,
+	0x0c, 0x6c, 0x61, 0x73, 0x74, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20,
+	0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76,
 	0x32, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x68, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
-	0x73, 0x65, 0x2e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x50, 0x6f, 0x69, 0x6e,
-	0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x09, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65,
-	0x22, 0x3d, 0x0a, 0x09, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0b, 0x0a,
-	0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x47, 0x50,
-	0x53, 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, 0x57, 0x49, 0x46, 0x49, 0x10, 0x02, 0x12, 0x08, 0x0a,
-	0x04, 0x43, 0x45, 0x4c, 0x4c, 0x10, 0x03, 0x12, 0x06, 0x0a, 0x02, 0x49, 0x50, 0x10, 0x04, 0x22,
-	0xec, 0x02, 0x0a, 0x12, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x68, 0x69, 0x6c, 0x64, 0x52,
-	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01,
-	0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x04, 0x6e,
-	0x61, 0x6d, 0x65, 0x12, 0x36, 0x0a, 0x0b, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x4e, 0x75, 0x6d, 0x62,
-	0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x14, 0xfa, 0x42, 0x11, 0x72, 0x0f, 0x32,
-	0x0d, 0x5e, 0x31, 0x5b, 0x33, 0x2d, 0x39, 0x5d, 0x5c, 0x64, 0x7b, 0x39, 0x7d, 0x24, 0x52, 0x0b,
-	0x70, 0x68, 0x6f, 0x6e, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x23, 0x0a, 0x08, 0x61,
-	0x72, 0x65, 0x61, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa,
-	0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x08, 0x61, 0x72, 0x65, 0x61, 0x43, 0x6f, 0x64, 0x65,
-	0x12, 0x16, 0x0a, 0x06, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09,
-	0x52, 0x06, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x12, 0x1a, 0x0a, 0x08, 0x62, 0x69, 0x72, 0x74,
-	0x68, 0x64, 0x61, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x62, 0x69, 0x72, 0x74,
-	0x68, 0x64, 0x61, 0x79, 0x12, 0x29, 0x0a, 0x0b, 0x61, 0x70, 0x70, 0x65, 0x6c, 0x6c, 0x61, 0x74,
-	0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02,
-	0x10, 0x01, 0x52, 0x0b, 0x61, 0x70, 0x70, 0x65, 0x6c, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12,
-	0x35, 0x0a, 0x06, 0x67, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32,
-	0x13, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65,
-	0x6e, 0x64, 0x65, 0x72, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x82, 0x01, 0x02, 0x10, 0x01, 0x52, 0x06,
-	0x67, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x12, 0x22, 0x0a, 0x06, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74,
-	0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x1a, 0x05, 0x18, 0xc8, 0x01,
-	0x28, 0x64, 0x52, 0x06, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x22, 0x0a, 0x06, 0x68, 0x65,
-	0x69, 0x67, 0x68, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x1a,
-	0x05, 0x18, 0xc8, 0x01, 0x28, 0x64, 0x52, 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0x27,
-	0x0a, 0x13, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x68, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x73,
-	0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x63, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01,
-	0x28, 0x09, 0x52, 0x03, 0x63, 0x69, 0x64, 0x22, 0xfe, 0x02, 0x0a, 0x12, 0x55, 0x70, 0x64, 0x61,
-	0x74, 0x65, 0x43, 0x68, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b,
-	0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42,
-	0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x36, 0x0a, 0x0b, 0x70,
-	0x68, 0x6f, 0x6e, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
-	0x42, 0x14, 0xfa, 0x42, 0x11, 0x72, 0x0f, 0x32, 0x0d, 0x5e, 0x31, 0x5b, 0x33, 0x2d, 0x39, 0x5d,
-	0x5c, 0x64, 0x7b, 0x39, 0x7d, 0x24, 0x52, 0x0b, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x4e, 0x75, 0x6d,
-	0x62, 0x65, 0x72, 0x12, 0x23, 0x0a, 0x08, 0x61, 0x72, 0x65, 0x61, 0x43, 0x6f, 0x64, 0x65, 0x18,
-	0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x08,
-	0x61, 0x72, 0x65, 0x61, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x76, 0x61, 0x74,
-	0x61, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72,
-	0x12, 0x1a, 0x0a, 0x08, 0x62, 0x69, 0x72, 0x74, 0x68, 0x64, 0x61, 0x79, 0x18, 0x05, 0x20, 0x01,
-	0x28, 0x09, 0x52, 0x08, 0x62, 0x69, 0x72, 0x74, 0x68, 0x64, 0x61, 0x79, 0x12, 0x29, 0x0a, 0x0b,
-	0x61, 0x70, 0x70, 0x65, 0x6c, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28,
-	0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x0b, 0x61, 0x70, 0x70, 0x65,
-	0x6c, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x35, 0x0a, 0x06, 0x67, 0x65, 0x6e, 0x64, 0x65,
-	0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x13, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x75, 0x73,
-	0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x42, 0x08, 0xfa, 0x42,
-	0x05, 0x82, 0x01, 0x02, 0x10, 0x01, 0x52, 0x06, 0x67, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x12, 0x22,
-	0x0a, 0x06, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x42, 0x0a,
-	0xfa, 0x42, 0x07, 0x1a, 0x05, 0x18, 0xc8, 0x01, 0x28, 0x64, 0x52, 0x06, 0x77, 0x65, 0x69, 0x67,
-	0x68, 0x74, 0x12, 0x22, 0x0a, 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x09, 0x20, 0x01,
-	0x28, 0x05, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x1a, 0x05, 0x18, 0xc8, 0x01, 0x28, 0x64, 0x52, 0x06,
-	0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x63, 0x69, 0x64, 0x18, 0x0a, 0x20,
-	0x01, 0x28, 0x09, 0x52, 0x03, 0x63, 0x69, 0x64, 0x22, 0x15, 0x0a, 0x13, 0x55, 0x70, 0x64, 0x61,
-	0x74, 0x65, 0x43, 0x68, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22,
-	0x2f, 0x0a, 0x12, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x68, 0x69, 0x6c, 0x64, 0x52, 0x65,
-	0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x03, 0x63, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01,
-	0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x03, 0x63, 0x69, 0x64,
-	0x22, 0x15, 0x0a, 0x13, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x68, 0x69, 0x6c, 0x64, 0x52,
-	0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2a, 0x29, 0x0a, 0x06, 0x47, 0x65, 0x6e, 0x64, 0x65,
-	0x72, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x07,
-	0x0a, 0x03, 0x4d, 0x41, 0x4e, 0x10, 0x02, 0x12, 0x09, 0x0a, 0x05, 0x57, 0x4f, 0x4d, 0x41, 0x4e,
-	0x10, 0x03, 0x32, 0xf9, 0x03, 0x0a, 0x05, 0x43, 0x68, 0x69, 0x6c, 0x64, 0x12, 0x70, 0x0a, 0x08,
-	0x47, 0x65, 0x74, 0x43, 0x68, 0x69, 0x6c, 0x64, 0x12, 0x1c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x75,
-	0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x68, 0x69, 0x6c, 0x64, 0x52,
-	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x75, 0x73, 0x65,
-	0x72, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x68, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x73,
-	0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x27, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x21, 0x12, 0x1f, 0x2f,
-	0x61, 0x70, 0x69, 0x73, 0x2f, 0x76, 0x32, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x63, 0x74, 0x78, 0x2f,
-	0x75, 0x73, 0x65, 0x72, 0x2f, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x2f, 0x67, 0x65, 0x74, 0x12, 0x7f,
-	0x0a, 0x0b, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x68, 0x69, 0x6c, 0x64, 0x12, 0x1f, 0x2e,
-	0x61, 0x70, 0x69, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x72, 0x65, 0x61,
-	0x74, 0x65, 0x43, 0x68, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20,
-	0x2e, 0x61, 0x70, 0x69, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x72, 0x65,
-	0x61, 0x74, 0x65, 0x43, 0x68, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
-	0x22, 0x2d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x27, 0x3a, 0x01, 0x2a, 0x22, 0x22, 0x2f, 0x61, 0x70,
+	0x73, 0x65, 0x2e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0c, 0x6c, 0x61, 0x73,
+	0x74, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x61, 0x76,
+	0x61, 0x74, 0x61, 0x72, 0x1a, 0x82, 0x01, 0x0a, 0x06, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x12,
+	0x10, 0x0a, 0x03, 0x64, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x64, 0x69,
+	0x64, 0x12, 0x18, 0x0a, 0x07, 0x62, 0x61, 0x74, 0x74, 0x65, 0x72, 0x79, 0x18, 0x02, 0x20, 0x01,
+	0x28, 0x05, 0x52, 0x07, 0x62, 0x61, 0x74, 0x74, 0x65, 0x72, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x73,
+	0x69, 0x67, 0x6e, 0x61, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x73, 0x69, 0x67,
+	0x6e, 0x61, 0x6c, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x4d, 0x61, 0x78,
+	0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x4d, 0x61,
+	0x78, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28,
+	0x09, 0x52, 0x06, 0x74, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x1a, 0x8f, 0x02, 0x0a, 0x08, 0x4c, 0x6f,
+	0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x61, 0x74, 0x69, 0x74, 0x75,
+	0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6c, 0x61, 0x74, 0x69, 0x74, 0x75,
+	0x64, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6c, 0x6f, 0x6e, 0x67, 0x69, 0x74, 0x75, 0x64, 0x65, 0x18,
+	0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6c, 0x6f, 0x6e, 0x67, 0x69, 0x74, 0x75, 0x64, 0x65,
+	0x12, 0x22, 0x0a, 0x0c, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x6d, 0x65,
+	0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e,
+	0x54, 0x69, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x61, 0x64, 0x69, 0x75, 0x73, 0x18, 0x04,
+	0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x72, 0x61, 0x64, 0x69, 0x75, 0x73, 0x12, 0x4e, 0x0a, 0x09,
+	0x70, 0x6f, 0x69, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32,
+	0x30, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65,
+	0x74, 0x43, 0x68, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x4c,
+	0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x54, 0x79, 0x70,
+	0x65, 0x52, 0x09, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x22, 0x3d, 0x0a, 0x09,
+	0x50, 0x6f, 0x69, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b,
+	0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x47, 0x50, 0x53, 0x10, 0x01, 0x12,
+	0x08, 0x0a, 0x04, 0x57, 0x49, 0x46, 0x49, 0x10, 0x02, 0x12, 0x08, 0x0a, 0x04, 0x43, 0x45, 0x4c,
+	0x4c, 0x10, 0x03, 0x12, 0x06, 0x0a, 0x02, 0x49, 0x50, 0x10, 0x04, 0x22, 0x8e, 0x03, 0x0a, 0x12,
+	0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x68, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65,
+	0x73, 0x74, 0x12, 0x1b, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
+	0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12,
+	0x36, 0x0a, 0x0b, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x02,
+	0x20, 0x01, 0x28, 0x09, 0x42, 0x14, 0xfa, 0x42, 0x11, 0x72, 0x0f, 0x32, 0x0d, 0x5e, 0x31, 0x5b,
+	0x33, 0x2d, 0x39, 0x5d, 0x5c, 0x64, 0x7b, 0x39, 0x7d, 0x24, 0x52, 0x0b, 0x70, 0x68, 0x6f, 0x6e,
+	0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x23, 0x0a, 0x08, 0x61, 0x72, 0x65, 0x61, 0x43,
+	0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02,
+	0x10, 0x01, 0x52, 0x08, 0x61, 0x72, 0x65, 0x61, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x1b, 0x0a, 0x06,
+	0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x06,
+	0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x88, 0x01, 0x01, 0x12, 0x1f, 0x0a, 0x08, 0x62, 0x69, 0x72,
+	0x74, 0x68, 0x64, 0x61, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x08, 0x62,
+	0x69, 0x72, 0x74, 0x68, 0x64, 0x61, 0x79, 0x88, 0x01, 0x01, 0x12, 0x29, 0x0a, 0x0b, 0x61, 0x70,
+	0x70, 0x65, 0x6c, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x42,
+	0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x0b, 0x61, 0x70, 0x70, 0x65, 0x6c, 0x6c,
+	0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x35, 0x0a, 0x06, 0x67, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x18,
+	0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x13, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x75, 0x73, 0x65, 0x72,
+	0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x82,
+	0x01, 0x02, 0x10, 0x01, 0x52, 0x06, 0x67, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x12, 0x22, 0x0a, 0x06,
+	0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x42, 0x0a, 0xfa, 0x42,
+	0x07, 0x1a, 0x05, 0x18, 0xc8, 0x01, 0x28, 0x64, 0x52, 0x06, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74,
+	0x12, 0x22, 0x0a, 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05,
+	0x42, 0x0a, 0xfa, 0x42, 0x07, 0x1a, 0x05, 0x18, 0xc8, 0x01, 0x28, 0x64, 0x52, 0x06, 0x68, 0x65,
+	0x69, 0x67, 0x68, 0x74, 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x42,
+	0x0b, 0x0a, 0x09, 0x5f, 0x62, 0x69, 0x72, 0x74, 0x68, 0x64, 0x61, 0x79, 0x22, 0x27, 0x0a, 0x13,
+	0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x68, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f,
+	0x6e, 0x73, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x63, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
+	0x52, 0x03, 0x63, 0x69, 0x64, 0x22, 0xfe, 0x02, 0x0a, 0x12, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65,
+	0x43, 0x68, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x04,
+	0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72,
+	0x02, 0x10, 0x01, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x36, 0x0a, 0x0b, 0x70, 0x68, 0x6f,
+	0x6e, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x14,
+	0xfa, 0x42, 0x11, 0x72, 0x0f, 0x32, 0x0d, 0x5e, 0x31, 0x5b, 0x33, 0x2d, 0x39, 0x5d, 0x5c, 0x64,
+	0x7b, 0x39, 0x7d, 0x24, 0x52, 0x0b, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65,
+	0x72, 0x12, 0x23, 0x0a, 0x08, 0x61, 0x72, 0x65, 0x61, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20,
+	0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x08, 0x61, 0x72,
+	0x65, 0x61, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72,
+	0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x12, 0x1a,
+	0x0a, 0x08, 0x62, 0x69, 0x72, 0x74, 0x68, 0x64, 0x61, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09,
+	0x52, 0x08, 0x62, 0x69, 0x72, 0x74, 0x68, 0x64, 0x61, 0x79, 0x12, 0x29, 0x0a, 0x0b, 0x61, 0x70,
+	0x70, 0x65, 0x6c, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x42,
+	0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x0b, 0x61, 0x70, 0x70, 0x65, 0x6c, 0x6c,
+	0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x35, 0x0a, 0x06, 0x67, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x18,
+	0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x13, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x75, 0x73, 0x65, 0x72,
+	0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x82,
+	0x01, 0x02, 0x10, 0x01, 0x52, 0x06, 0x67, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x12, 0x22, 0x0a, 0x06,
+	0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x42, 0x0a, 0xfa, 0x42,
+	0x07, 0x1a, 0x05, 0x18, 0xc8, 0x01, 0x28, 0x64, 0x52, 0x06, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74,
+	0x12, 0x22, 0x0a, 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05,
+	0x42, 0x0a, 0xfa, 0x42, 0x07, 0x1a, 0x05, 0x18, 0xc8, 0x01, 0x28, 0x64, 0x52, 0x06, 0x68, 0x65,
+	0x69, 0x67, 0x68, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x63, 0x69, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28,
+	0x09, 0x52, 0x03, 0x63, 0x69, 0x64, 0x22, 0x15, 0x0a, 0x13, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65,
+	0x43, 0x68, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2f, 0x0a,
+	0x12, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x68, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x71, 0x75,
+	0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x03, 0x63, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
+	0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x03, 0x63, 0x69, 0x64, 0x22, 0x15,
+	0x0a, 0x13, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x68, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x73,
+	0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2a, 0x29, 0x0a, 0x06, 0x47, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x12,
+	0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03,
+	0x4d, 0x41, 0x4e, 0x10, 0x02, 0x12, 0x09, 0x0a, 0x05, 0x57, 0x4f, 0x4d, 0x41, 0x4e, 0x10, 0x03,
+	0x32, 0xf9, 0x03, 0x0a, 0x05, 0x43, 0x68, 0x69, 0x6c, 0x64, 0x12, 0x70, 0x0a, 0x08, 0x47, 0x65,
+	0x74, 0x43, 0x68, 0x69, 0x6c, 0x64, 0x12, 0x1c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x75, 0x73, 0x65,
+	0x72, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x68, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x71,
+	0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e,
+	0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x68, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f,
+	0x6e, 0x73, 0x65, 0x22, 0x27, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x21, 0x12, 0x1f, 0x2f, 0x61, 0x70,
 	0x69, 0x73, 0x2f, 0x76, 0x32, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x63, 0x74, 0x78, 0x2f, 0x75, 0x73,
-	0x65, 0x72, 0x2f, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x2f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12,
-	0x7f, 0x0a, 0x0b, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x68, 0x69, 0x6c, 0x64, 0x12, 0x1f,
-	0x2e, 0x61, 0x70, 0x69, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x55, 0x70, 0x64,
-	0x61, 0x74, 0x65, 0x43, 0x68, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
-	0x20, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x55, 0x70,
-	0x64, 0x61, 0x74, 0x65, 0x43, 0x68, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
-	0x65, 0x22, 0x2d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x27, 0x3a, 0x01, 0x2a, 0x22, 0x22, 0x2f, 0x61,
-	0x70, 0x69, 0x73, 0x2f, 0x76, 0x32, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x63, 0x74, 0x78, 0x2f, 0x75,
-	0x73, 0x65, 0x72, 0x2f, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x2f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65,
-	0x12, 0x7c, 0x0a, 0x0b, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x68, 0x69, 0x6c, 0x64, 0x12,
-	0x1f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65,
-	0x6c, 0x65, 0x74, 0x65, 0x43, 0x68, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
-	0x1a, 0x20, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x44,
-	0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x68, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
-	0x73, 0x65, 0x22, 0x2a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x24, 0x12, 0x22, 0x2f, 0x61, 0x70, 0x69,
+	0x65, 0x72, 0x2f, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x2f, 0x67, 0x65, 0x74, 0x12, 0x7f, 0x0a, 0x0b,
+	0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x68, 0x69, 0x6c, 0x64, 0x12, 0x1f, 0x2e, 0x61, 0x70,
+	0x69, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65,
+	0x43, 0x68, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x61,
+	0x70, 0x69, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74,
+	0x65, 0x43, 0x68, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2d,
+	0x82, 0xd3, 0xe4, 0x93, 0x02, 0x27, 0x3a, 0x01, 0x2a, 0x22, 0x22, 0x2f, 0x61, 0x70, 0x69, 0x73,
+	0x2f, 0x76, 0x32, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x63, 0x74, 0x78, 0x2f, 0x75, 0x73, 0x65, 0x72,
+	0x2f, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x2f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x7f, 0x0a,
+	0x0b, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x68, 0x69, 0x6c, 0x64, 0x12, 0x1f, 0x2e, 0x61,
+	0x70, 0x69, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74,
+	0x65, 0x43, 0x68, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e,
+	0x61, 0x70, 0x69, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x55, 0x70, 0x64, 0x61,
+	0x74, 0x65, 0x43, 0x68, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22,
+	0x2d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x27, 0x3a, 0x01, 0x2a, 0x22, 0x22, 0x2f, 0x61, 0x70, 0x69,
 	0x73, 0x2f, 0x76, 0x32, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x63, 0x74, 0x78, 0x2f, 0x75, 0x73, 0x65,
-	0x72, 0x2f, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x2f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x42, 0x30,
-	0x0a, 0x0b, 0x61, 0x70, 0x69, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x50, 0x01, 0x5a,
-	0x1f, 0x73, 0x69, 0x6b, 0x65, 0x79, 0x2f, 0x77, 0x33, 0x30, 0x33, 0x61, 0x2f, 0x68, 0x74, 0x74,
-	0x70, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x2f, 0x76, 0x32, 0x3b, 0x76, 0x32,
-	0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+	0x72, 0x2f, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x2f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x7c,
+	0x0a, 0x0b, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x68, 0x69, 0x6c, 0x64, 0x12, 0x1f, 0x2e,
+	0x61, 0x70, 0x69, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, 0x6c, 0x65,
+	0x74, 0x65, 0x43, 0x68, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20,
+	0x2e, 0x61, 0x70, 0x69, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, 0x6c,
+	0x65, 0x74, 0x65, 0x43, 0x68, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
+	0x22, 0x2a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x24, 0x12, 0x22, 0x2f, 0x61, 0x70, 0x69, 0x73, 0x2f,
+	0x76, 0x32, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x63, 0x74, 0x78, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x2f,
+	0x63, 0x68, 0x69, 0x6c, 0x64, 0x2f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x42, 0x30, 0x0a, 0x0b,
+	0x61, 0x70, 0x69, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x50, 0x01, 0x5a, 0x1f, 0x73,
+	0x69, 0x6b, 0x65, 0x79, 0x2f, 0x77, 0x33, 0x30, 0x33, 0x61, 0x2f, 0x68, 0x74, 0x74, 0x70, 0x2f,
+	0x61, 0x70, 0x69, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x2f, 0x76, 0x32, 0x3b, 0x76, 0x32, 0x62, 0x06,
+	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
 }
 
 var (
-	file_api_user_v2_child_proto_rawDescOnce sync.Once
-	file_api_user_v2_child_proto_rawDescData = file_api_user_v2_child_proto_rawDesc
+	file_user_v2_child_proto_rawDescOnce sync.Once
+	file_user_v2_child_proto_rawDescData = file_user_v2_child_proto_rawDesc
 )
 
-func file_api_user_v2_child_proto_rawDescGZIP() []byte {
-	file_api_user_v2_child_proto_rawDescOnce.Do(func() {
-		file_api_user_v2_child_proto_rawDescData = protoimpl.X.CompressGZIP(file_api_user_v2_child_proto_rawDescData)
+func file_user_v2_child_proto_rawDescGZIP() []byte {
+	file_user_v2_child_proto_rawDescOnce.Do(func() {
+		file_user_v2_child_proto_rawDescData = protoimpl.X.CompressGZIP(file_user_v2_child_proto_rawDescData)
 	})
-	return file_api_user_v2_child_proto_rawDescData
+	return file_user_v2_child_proto_rawDescData
 }
 
-var file_api_user_v2_child_proto_enumTypes = make([]protoimpl.EnumInfo, 2)
-var file_api_user_v2_child_proto_msgTypes = make([]protoimpl.MessageInfo, 11)
-var file_api_user_v2_child_proto_goTypes = []any{
+var file_user_v2_child_proto_enumTypes = make([]protoimpl.EnumInfo, 2)
+var file_user_v2_child_proto_msgTypes = make([]protoimpl.MessageInfo, 11)
+var file_user_v2_child_proto_goTypes = []any{
 	(Gender)(0),                              // 0: api.user.v2.Gender
 	(GetChildResponse_Location_PointType)(0), // 1: api.user.v2.GetChildResponse.Location.PointType
 	(*GetChildRequest)(nil),                  // 2: api.user.v2.GetChildRequest
@@ -1067,7 +1070,7 @@ var file_api_user_v2_child_proto_goTypes = []any{
 	(*GetChildResponse_Device)(nil),          // 11: api.user.v2.GetChildResponse.Device
 	(*GetChildResponse_Location)(nil),        // 12: api.user.v2.GetChildResponse.Location
 }
-var file_api_user_v2_child_proto_depIdxs = []int32{
+var file_user_v2_child_proto_depIdxs = []int32{
 	10, // 0: api.user.v2.GetChildResponse.childList:type_name -> api.user.v2.GetChildResponse.Child
 	0,  // 1: api.user.v2.CreateChildRequest.gender:type_name -> api.user.v2.Gender
 	0,  // 2: api.user.v2.UpdateChildRequest.gender:type_name -> api.user.v2.Gender
@@ -1089,13 +1092,13 @@ var file_api_user_v2_child_proto_depIdxs = []int32{
 	0,  // [0:6] is the sub-list for field type_name
 }
 
-func init() { file_api_user_v2_child_proto_init() }
-func file_api_user_v2_child_proto_init() {
-	if File_api_user_v2_child_proto != nil {
+func init() { file_user_v2_child_proto_init() }
+func file_user_v2_child_proto_init() {
+	if File_user_v2_child_proto != nil {
 		return
 	}
 	if !protoimpl.UnsafeEnabled {
-		file_api_user_v2_child_proto_msgTypes[0].Exporter = func(v any, i int) any {
+		file_user_v2_child_proto_msgTypes[0].Exporter = func(v any, i int) any {
 			switch v := v.(*GetChildRequest); i {
 			case 0:
 				return &v.state
@@ -1107,7 +1110,7 @@ func file_api_user_v2_child_proto_init() {
 				return nil
 			}
 		}
-		file_api_user_v2_child_proto_msgTypes[1].Exporter = func(v any, i int) any {
+		file_user_v2_child_proto_msgTypes[1].Exporter = func(v any, i int) any {
 			switch v := v.(*GetChildResponse); i {
 			case 0:
 				return &v.state
@@ -1119,7 +1122,7 @@ func file_api_user_v2_child_proto_init() {
 				return nil
 			}
 		}
-		file_api_user_v2_child_proto_msgTypes[2].Exporter = func(v any, i int) any {
+		file_user_v2_child_proto_msgTypes[2].Exporter = func(v any, i int) any {
 			switch v := v.(*CreateChildRequest); i {
 			case 0:
 				return &v.state
@@ -1131,7 +1134,7 @@ func file_api_user_v2_child_proto_init() {
 				return nil
 			}
 		}
-		file_api_user_v2_child_proto_msgTypes[3].Exporter = func(v any, i int) any {
+		file_user_v2_child_proto_msgTypes[3].Exporter = func(v any, i int) any {
 			switch v := v.(*CreateChildResponse); i {
 			case 0:
 				return &v.state
@@ -1143,7 +1146,7 @@ func file_api_user_v2_child_proto_init() {
 				return nil
 			}
 		}
-		file_api_user_v2_child_proto_msgTypes[4].Exporter = func(v any, i int) any {
+		file_user_v2_child_proto_msgTypes[4].Exporter = func(v any, i int) any {
 			switch v := v.(*UpdateChildRequest); i {
 			case 0:
 				return &v.state
@@ -1155,7 +1158,7 @@ func file_api_user_v2_child_proto_init() {
 				return nil
 			}
 		}
-		file_api_user_v2_child_proto_msgTypes[5].Exporter = func(v any, i int) any {
+		file_user_v2_child_proto_msgTypes[5].Exporter = func(v any, i int) any {
 			switch v := v.(*UpdateChildResponse); i {
 			case 0:
 				return &v.state
@@ -1167,7 +1170,7 @@ func file_api_user_v2_child_proto_init() {
 				return nil
 			}
 		}
-		file_api_user_v2_child_proto_msgTypes[6].Exporter = func(v any, i int) any {
+		file_user_v2_child_proto_msgTypes[6].Exporter = func(v any, i int) any {
 			switch v := v.(*DeleteChildRequest); i {
 			case 0:
 				return &v.state
@@ -1179,7 +1182,7 @@ func file_api_user_v2_child_proto_init() {
 				return nil
 			}
 		}
-		file_api_user_v2_child_proto_msgTypes[7].Exporter = func(v any, i int) any {
+		file_user_v2_child_proto_msgTypes[7].Exporter = func(v any, i int) any {
 			switch v := v.(*DeleteChildResponse); i {
 			case 0:
 				return &v.state
@@ -1191,7 +1194,7 @@ func file_api_user_v2_child_proto_init() {
 				return nil
 			}
 		}
-		file_api_user_v2_child_proto_msgTypes[8].Exporter = func(v any, i int) any {
+		file_user_v2_child_proto_msgTypes[8].Exporter = func(v any, i int) any {
 			switch v := v.(*GetChildResponse_Child); i {
 			case 0:
 				return &v.state
@@ -1203,7 +1206,7 @@ func file_api_user_v2_child_proto_init() {
 				return nil
 			}
 		}
-		file_api_user_v2_child_proto_msgTypes[9].Exporter = func(v any, i int) any {
+		file_user_v2_child_proto_msgTypes[9].Exporter = func(v any, i int) any {
 			switch v := v.(*GetChildResponse_Device); i {
 			case 0:
 				return &v.state
@@ -1215,7 +1218,7 @@ func file_api_user_v2_child_proto_init() {
 				return nil
 			}
 		}
-		file_api_user_v2_child_proto_msgTypes[10].Exporter = func(v any, i int) any {
+		file_user_v2_child_proto_msgTypes[10].Exporter = func(v any, i int) any {
 			switch v := v.(*GetChildResponse_Location); i {
 			case 0:
 				return &v.state
@@ -1228,23 +1231,25 @@ func file_api_user_v2_child_proto_init() {
 			}
 		}
 	}
+	file_user_v2_child_proto_msgTypes[2].OneofWrappers = []any{}
+	file_user_v2_child_proto_msgTypes[8].OneofWrappers = []any{}
 	type x struct{}
 	out := protoimpl.TypeBuilder{
 		File: protoimpl.DescBuilder{
 			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
-			RawDescriptor: file_api_user_v2_child_proto_rawDesc,
+			RawDescriptor: file_user_v2_child_proto_rawDesc,
 			NumEnums:      2,
 			NumMessages:   11,
 			NumExtensions: 0,
 			NumServices:   1,
 		},
-		GoTypes:           file_api_user_v2_child_proto_goTypes,
-		DependencyIndexes: file_api_user_v2_child_proto_depIdxs,
-		EnumInfos:         file_api_user_v2_child_proto_enumTypes,
-		MessageInfos:      file_api_user_v2_child_proto_msgTypes,
+		GoTypes:           file_user_v2_child_proto_goTypes,
+		DependencyIndexes: file_user_v2_child_proto_depIdxs,
+		EnumInfos:         file_user_v2_child_proto_enumTypes,
+		MessageInfos:      file_user_v2_child_proto_msgTypes,
 	}.Build()
-	File_api_user_v2_child_proto = out.File
-	file_api_user_v2_child_proto_rawDesc = nil
-	file_api_user_v2_child_proto_goTypes = nil
-	file_api_user_v2_child_proto_depIdxs = nil
+	File_user_v2_child_proto = out.File
+	file_user_v2_child_proto_rawDesc = nil
+	file_user_v2_child_proto_goTypes = nil
+	file_user_v2_child_proto_depIdxs = nil
 }

+ 3 - 3
api/user/v2/child.proto

@@ -59,7 +59,7 @@ message GetChildResponse {
         string cid = 1;
         int32 stepCount = 2;
         string name = 3;
-        string avatar = 4;
+        optional string avatar = 4;
         // 绑定的设备
         Device device = 5;
         // 最后一次位置
@@ -104,9 +104,9 @@ message CreateChildRequest {
     // 小孩电话区号
     string areaCode = 3 [(validate.rules).string = {min_len: 1}];
     // 小孩头像
-    string avatar = 4;
+    optional string avatar = 4;
     // 小孩生日
-    string birthday = 5;
+    optional string birthday = 5;
     // 小孩对自己的称谓
     string appellation = 6 [(validate.rules).string = {min_len:1}];
     // 小孩性别

Файловите разлики са ограничени, защото са твърде много
+ 299 - 299
api/user/v2/contacts.pb.go


+ 133 - 134
api/user/v2/device.pb.go

@@ -2,7 +2,7 @@
 // versions:
 // 	protoc-gen-go v1.34.2
 // 	protoc        v4.25.3
-// source: api/user/v2/device.proto
+// source: user/v2/device.proto
 
 package v2
 
@@ -34,7 +34,7 @@ type DeviceBindingRequest struct {
 func (x *DeviceBindingRequest) Reset() {
 	*x = DeviceBindingRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_api_user_v2_device_proto_msgTypes[0]
+		mi := &file_user_v2_device_proto_msgTypes[0]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -47,7 +47,7 @@ func (x *DeviceBindingRequest) String() string {
 func (*DeviceBindingRequest) ProtoMessage() {}
 
 func (x *DeviceBindingRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_api_user_v2_device_proto_msgTypes[0]
+	mi := &file_user_v2_device_proto_msgTypes[0]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -60,7 +60,7 @@ func (x *DeviceBindingRequest) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use DeviceBindingRequest.ProtoReflect.Descriptor instead.
 func (*DeviceBindingRequest) Descriptor() ([]byte, []int) {
-	return file_api_user_v2_device_proto_rawDescGZIP(), []int{0}
+	return file_user_v2_device_proto_rawDescGZIP(), []int{0}
 }
 
 func (x *DeviceBindingRequest) GetTicket() string {
@@ -92,7 +92,7 @@ type DeviceBindingResponse struct {
 func (x *DeviceBindingResponse) Reset() {
 	*x = DeviceBindingResponse{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_api_user_v2_device_proto_msgTypes[1]
+		mi := &file_user_v2_device_proto_msgTypes[1]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -105,7 +105,7 @@ func (x *DeviceBindingResponse) String() string {
 func (*DeviceBindingResponse) ProtoMessage() {}
 
 func (x *DeviceBindingResponse) ProtoReflect() protoreflect.Message {
-	mi := &file_api_user_v2_device_proto_msgTypes[1]
+	mi := &file_user_v2_device_proto_msgTypes[1]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -118,7 +118,7 @@ func (x *DeviceBindingResponse) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use DeviceBindingResponse.ProtoReflect.Descriptor instead.
 func (*DeviceBindingResponse) Descriptor() ([]byte, []int) {
-	return file_api_user_v2_device_proto_rawDescGZIP(), []int{1}
+	return file_user_v2_device_proto_rawDescGZIP(), []int{1}
 }
 
 func (x *DeviceBindingResponse) GetIsBind() bool {
@@ -169,7 +169,7 @@ type DeviceBindRequest struct {
 func (x *DeviceBindRequest) Reset() {
 	*x = DeviceBindRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_api_user_v2_device_proto_msgTypes[2]
+		mi := &file_user_v2_device_proto_msgTypes[2]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -182,7 +182,7 @@ func (x *DeviceBindRequest) String() string {
 func (*DeviceBindRequest) ProtoMessage() {}
 
 func (x *DeviceBindRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_api_user_v2_device_proto_msgTypes[2]
+	mi := &file_user_v2_device_proto_msgTypes[2]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -195,7 +195,7 @@ func (x *DeviceBindRequest) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use DeviceBindRequest.ProtoReflect.Descriptor instead.
 func (*DeviceBindRequest) Descriptor() ([]byte, []int) {
-	return file_api_user_v2_device_proto_rawDescGZIP(), []int{2}
+	return file_user_v2_device_proto_rawDescGZIP(), []int{2}
 }
 
 func (x *DeviceBindRequest) GetCid() string {
@@ -222,7 +222,7 @@ type DeviceBindResponse struct {
 func (x *DeviceBindResponse) Reset() {
 	*x = DeviceBindResponse{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_api_user_v2_device_proto_msgTypes[3]
+		mi := &file_user_v2_device_proto_msgTypes[3]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -235,7 +235,7 @@ func (x *DeviceBindResponse) String() string {
 func (*DeviceBindResponse) ProtoMessage() {}
 
 func (x *DeviceBindResponse) ProtoReflect() protoreflect.Message {
-	mi := &file_api_user_v2_device_proto_msgTypes[3]
+	mi := &file_user_v2_device_proto_msgTypes[3]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -248,7 +248,7 @@ func (x *DeviceBindResponse) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use DeviceBindResponse.ProtoReflect.Descriptor instead.
 func (*DeviceBindResponse) Descriptor() ([]byte, []int) {
-	return file_api_user_v2_device_proto_rawDescGZIP(), []int{3}
+	return file_user_v2_device_proto_rawDescGZIP(), []int{3}
 }
 
 // 解绑设备
@@ -264,7 +264,7 @@ type DeviceUnbindRequest struct {
 func (x *DeviceUnbindRequest) Reset() {
 	*x = DeviceUnbindRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_api_user_v2_device_proto_msgTypes[4]
+		mi := &file_user_v2_device_proto_msgTypes[4]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -277,7 +277,7 @@ func (x *DeviceUnbindRequest) String() string {
 func (*DeviceUnbindRequest) ProtoMessage() {}
 
 func (x *DeviceUnbindRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_api_user_v2_device_proto_msgTypes[4]
+	mi := &file_user_v2_device_proto_msgTypes[4]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -290,7 +290,7 @@ func (x *DeviceUnbindRequest) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use DeviceUnbindRequest.ProtoReflect.Descriptor instead.
 func (*DeviceUnbindRequest) Descriptor() ([]byte, []int) {
-	return file_api_user_v2_device_proto_rawDescGZIP(), []int{4}
+	return file_user_v2_device_proto_rawDescGZIP(), []int{4}
 }
 
 func (x *DeviceUnbindRequest) GetCid() string {
@@ -317,7 +317,7 @@ type DeviceUnbindResponse struct {
 func (x *DeviceUnbindResponse) Reset() {
 	*x = DeviceUnbindResponse{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_api_user_v2_device_proto_msgTypes[5]
+		mi := &file_user_v2_device_proto_msgTypes[5]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -330,7 +330,7 @@ func (x *DeviceUnbindResponse) String() string {
 func (*DeviceUnbindResponse) ProtoMessage() {}
 
 func (x *DeviceUnbindResponse) ProtoReflect() protoreflect.Message {
-	mi := &file_api_user_v2_device_proto_msgTypes[5]
+	mi := &file_user_v2_device_proto_msgTypes[5]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -343,7 +343,7 @@ func (x *DeviceUnbindResponse) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use DeviceUnbindResponse.ProtoReflect.Descriptor instead.
 func (*DeviceUnbindResponse) Descriptor() ([]byte, []int) {
-	return file_api_user_v2_device_proto_rawDescGZIP(), []int{5}
+	return file_user_v2_device_proto_rawDescGZIP(), []int{5}
 }
 
 type DeviceExchangeRequest struct {
@@ -357,7 +357,7 @@ type DeviceExchangeRequest struct {
 func (x *DeviceExchangeRequest) Reset() {
 	*x = DeviceExchangeRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_api_user_v2_device_proto_msgTypes[6]
+		mi := &file_user_v2_device_proto_msgTypes[6]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -370,7 +370,7 @@ func (x *DeviceExchangeRequest) String() string {
 func (*DeviceExchangeRequest) ProtoMessage() {}
 
 func (x *DeviceExchangeRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_api_user_v2_device_proto_msgTypes[6]
+	mi := &file_user_v2_device_proto_msgTypes[6]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -383,7 +383,7 @@ func (x *DeviceExchangeRequest) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use DeviceExchangeRequest.ProtoReflect.Descriptor instead.
 func (*DeviceExchangeRequest) Descriptor() ([]byte, []int) {
-	return file_api_user_v2_device_proto_rawDescGZIP(), []int{6}
+	return file_user_v2_device_proto_rawDescGZIP(), []int{6}
 }
 
 func (x *DeviceExchangeRequest) GetHc() string {
@@ -410,7 +410,7 @@ type DeviceExchangeResponse struct {
 func (x *DeviceExchangeResponse) Reset() {
 	*x = DeviceExchangeResponse{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_api_user_v2_device_proto_msgTypes[7]
+		mi := &file_user_v2_device_proto_msgTypes[7]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -423,7 +423,7 @@ func (x *DeviceExchangeResponse) String() string {
 func (*DeviceExchangeResponse) ProtoMessage() {}
 
 func (x *DeviceExchangeResponse) ProtoReflect() protoreflect.Message {
-	mi := &file_api_user_v2_device_proto_msgTypes[7]
+	mi := &file_user_v2_device_proto_msgTypes[7]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -436,7 +436,7 @@ func (x *DeviceExchangeResponse) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use DeviceExchangeResponse.ProtoReflect.Descriptor instead.
 func (*DeviceExchangeResponse) Descriptor() ([]byte, []int) {
-	return file_api_user_v2_device_proto_rawDescGZIP(), []int{7}
+	return file_user_v2_device_proto_rawDescGZIP(), []int{7}
 }
 
 func (x *DeviceExchangeResponse) GetTicket() string {
@@ -467,108 +467,107 @@ func (x *DeviceExchangeResponse) GetActivationTime() int64 {
 	return 0
 }
 
-var File_api_user_v2_device_proto protoreflect.FileDescriptor
-
-var file_api_user_v2_device_proto_rawDesc = []byte{
-	0x0a, 0x18, 0x61, 0x70, 0x69, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x2f, 0x76, 0x32, 0x2f, 0x64, 0x65,
-	0x76, 0x69, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0b, 0x61, 0x70, 0x69, 0x2e,
-	0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f,
-	0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e,
-	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x17, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2f,
-	0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x37,
-	0x0a, 0x14, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52,
-	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x06, 0x74, 0x69, 0x63, 0x6b, 0x65, 0x74,
-	0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52,
-	0x06, 0x74, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x22, 0x87, 0x01, 0x0a, 0x15, 0x44, 0x65, 0x76, 0x69,
-	0x63, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
-	0x65, 0x12, 0x16, 0x0a, 0x06, 0x69, 0x73, 0x42, 0x69, 0x6e, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28,
-	0x08, 0x52, 0x06, 0x69, 0x73, 0x42, 0x69, 0x6e, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x63, 0x69, 0x64,
-	0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x63, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x74,
-	0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65,
-	0x6e, 0x12, 0x16, 0x0a, 0x06, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28,
-	0x05, 0x52, 0x06, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x68, 0x65, 0x69,
-	0x67, 0x68, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x68, 0x65, 0x69, 0x67, 0x68,
-	0x74, 0x22, 0x52, 0x0a, 0x11, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x52,
-	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x03, 0x63, 0x69, 0x64, 0x18, 0x01, 0x20,
-	0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, 0x10, 0x01, 0xb0, 0x01, 0x01, 0x52,
-	0x03, 0x63, 0x69, 0x64, 0x12, 0x1f, 0x0a, 0x06, 0x74, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x18, 0x02,
-	0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x06, 0x74,
-	0x69, 0x63, 0x6b, 0x65, 0x74, 0x22, 0x14, 0x0a, 0x12, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x42,
-	0x69, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x54, 0x0a, 0x13, 0x44,
-	0x65, 0x76, 0x69, 0x63, 0x65, 0x55, 0x6e, 0x62, 0x69, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65,
+var File_user_v2_device_proto protoreflect.FileDescriptor
+
+var file_user_v2_device_proto_rawDesc = []byte{
+	0x0a, 0x14, 0x75, 0x73, 0x65, 0x72, 0x2f, 0x76, 0x32, 0x2f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65,
+	0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0b, 0x61, 0x70, 0x69, 0x2e, 0x75, 0x73, 0x65, 0x72,
+	0x2e, 0x76, 0x32, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f,
+	0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74,
+	0x6f, 0x1a, 0x17, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2f, 0x76, 0x61, 0x6c, 0x69,
+	0x64, 0x61, 0x74, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x37, 0x0a, 0x14, 0x44, 0x65,
+	0x76, 0x69, 0x63, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65,
+	0x73, 0x74, 0x12, 0x1f, 0x0a, 0x06, 0x74, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01,
+	0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x06, 0x74, 0x69, 0x63,
+	0x6b, 0x65, 0x74, 0x22, 0x87, 0x01, 0x0a, 0x15, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x42, 0x69,
+	0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a,
+	0x06, 0x69, 0x73, 0x42, 0x69, 0x6e, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x69,
+	0x73, 0x42, 0x69, 0x6e, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x63, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01,
+	0x28, 0x09, 0x52, 0x03, 0x63, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e,
+	0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x16, 0x0a,
+	0x06, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x77,
+	0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18,
+	0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0x52, 0x0a,
+	0x11, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65,
 	0x73, 0x74, 0x12, 0x1c, 0x0a, 0x03, 0x63, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42,
 	0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, 0x10, 0x01, 0xb0, 0x01, 0x01, 0x52, 0x03, 0x63, 0x69, 0x64,
 	0x12, 0x1f, 0x0a, 0x06, 0x74, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
 	0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x06, 0x74, 0x69, 0x63, 0x6b, 0x65,
-	0x74, 0x22, 0x16, 0x0a, 0x14, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x55, 0x6e, 0x62, 0x69, 0x6e,
-	0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x30, 0x0a, 0x15, 0x44, 0x65, 0x76,
-	0x69, 0x63, 0x65, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65,
-	0x73, 0x74, 0x12, 0x17, 0x0a, 0x02, 0x68, 0x63, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07,
-	0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x02, 0x68, 0x63, 0x22, 0x80, 0x01, 0x0a, 0x16,
-	0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x65,
-	0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x69, 0x63, 0x6b, 0x65, 0x74,
-	0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x16,
-	0x0a, 0x06, 0x61, 0x73, 0x65, 0x4b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06,
-	0x61, 0x73, 0x65, 0x4b, 0x65, 0x79, 0x12, 0x0e, 0x0a, 0x02, 0x68, 0x63, 0x18, 0x03, 0x20, 0x01,
-	0x28, 0x09, 0x52, 0x02, 0x68, 0x63, 0x12, 0x26, 0x0a, 0x0e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61,
-	0x74, 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e,
-	0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x32, 0xb6,
-	0x04, 0x0a, 0x06, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x12, 0x8a, 0x01, 0x0a, 0x0d, 0x44, 0x65,
-	0x76, 0x69, 0x63, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x21, 0x2e, 0x61, 0x70,
-	0x69, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65,
-	0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22,
-	0x2e, 0x61, 0x70, 0x69, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, 0x76,
-	0x69, 0x63, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
-	0x73, 0x65, 0x22, 0x32, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2c, 0x12, 0x2a, 0x2f, 0x61, 0x70, 0x69,
-	0x73, 0x2f, 0x76, 0x32, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x63, 0x74, 0x78, 0x2f, 0x75, 0x73, 0x65,
-	0x72, 0x2f, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x2f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x62,
-	0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x81, 0x01, 0x0a, 0x0a, 0x44, 0x65, 0x76, 0x69, 0x63,
-	0x65, 0x42, 0x69, 0x6e, 0x64, 0x12, 0x1e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x75, 0x73, 0x65, 0x72,
-	0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x52, 0x65,
-	0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x75, 0x73, 0x65, 0x72,
-	0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x52, 0x65,
-	0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x32, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2c, 0x3a, 0x01,
-	0x2a, 0x22, 0x27, 0x2f, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x76, 0x32, 0x2f, 0x75, 0x73, 0x65, 0x72,
-	0x63, 0x74, 0x78, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x2f, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x2f, 0x64,
-	0x65, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x62, 0x69, 0x6e, 0x64, 0x12, 0x89, 0x01, 0x0a, 0x0c, 0x44,
-	0x65, 0x76, 0x69, 0x63, 0x65, 0x55, 0x6e, 0x62, 0x69, 0x6e, 0x64, 0x12, 0x20, 0x2e, 0x61, 0x70,
-	0x69, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65,
-	0x55, 0x6e, 0x62, 0x69, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e,
-	0x61, 0x70, 0x69, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, 0x76, 0x69,
-	0x63, 0x65, 0x55, 0x6e, 0x62, 0x69, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
-	0x22, 0x34, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2e, 0x3a, 0x01, 0x2a, 0x22, 0x29, 0x2f, 0x61, 0x70,
-	0x69, 0x73, 0x2f, 0x76, 0x32, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x63, 0x74, 0x78, 0x2f, 0x75, 0x73,
-	0x65, 0x72, 0x2f, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x2f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2f,
-	0x75, 0x6e, 0x62, 0x69, 0x6e, 0x64, 0x12, 0x8e, 0x01, 0x0a, 0x0e, 0x44, 0x65, 0x76, 0x69, 0x63,
-	0x65, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x22, 0x2e, 0x61, 0x70, 0x69, 0x2e,
-	0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x45, 0x78,
-	0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e,
-	0x61, 0x70, 0x69, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, 0x76, 0x69,
+	0x74, 0x22, 0x14, 0x0a, 0x12, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x52,
+	0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x54, 0x0a, 0x13, 0x44, 0x65, 0x76, 0x69, 0x63,
+	0x65, 0x55, 0x6e, 0x62, 0x69, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c,
+	0x0a, 0x03, 0x63, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07,
+	0x72, 0x05, 0x10, 0x01, 0xb0, 0x01, 0x01, 0x52, 0x03, 0x63, 0x69, 0x64, 0x12, 0x1f, 0x0a, 0x06,
+	0x74, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42,
+	0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x06, 0x74, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x22, 0x16, 0x0a,
+	0x14, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x55, 0x6e, 0x62, 0x69, 0x6e, 0x64, 0x52, 0x65, 0x73,
+	0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x30, 0x0a, 0x15, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x45,
+	0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x17,
+	0x0a, 0x02, 0x68, 0x63, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72,
+	0x02, 0x10, 0x01, 0x52, 0x02, 0x68, 0x63, 0x22, 0x80, 0x01, 0x0a, 0x16, 0x44, 0x65, 0x76, 0x69,
 	0x63, 0x65, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
-	0x73, 0x65, 0x22, 0x33, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2d, 0x12, 0x2b, 0x2f, 0x61, 0x70, 0x69,
-	0x73, 0x2f, 0x76, 0x32, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x63, 0x74, 0x78, 0x2f, 0x75, 0x73, 0x65,
-	0x72, 0x2f, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x2f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x65,
-	0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x42, 0x30, 0x0a, 0x0b, 0x61, 0x70, 0x69, 0x2e, 0x75,
-	0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x50, 0x01, 0x5a, 0x1f, 0x73, 0x69, 0x6b, 0x65, 0x79, 0x2f,
-	0x77, 0x33, 0x30, 0x33, 0x61, 0x2f, 0x68, 0x74, 0x74, 0x70, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x75,
-	0x73, 0x65, 0x72, 0x2f, 0x76, 0x32, 0x3b, 0x76, 0x32, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f,
-	0x33,
+	0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01,
+	0x28, 0x09, 0x52, 0x06, 0x74, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x73,
+	0x65, 0x4b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x61, 0x73, 0x65, 0x4b,
+	0x65, 0x79, 0x12, 0x0e, 0x0a, 0x02, 0x68, 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02,
+	0x68, 0x63, 0x12, 0x26, 0x0a, 0x0e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+	0x54, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x61, 0x63, 0x74, 0x69,
+	0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x32, 0xb6, 0x04, 0x0a, 0x06, 0x44,
+	0x65, 0x76, 0x69, 0x63, 0x65, 0x12, 0x8a, 0x01, 0x0a, 0x0d, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65,
+	0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x21, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x75, 0x73,
+	0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x42, 0x69, 0x6e, 0x64,
+	0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x61, 0x70, 0x69,
+	0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x42,
+	0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x32,
+	0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2c, 0x12, 0x2a, 0x2f, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x76, 0x32,
+	0x2f, 0x75, 0x73, 0x65, 0x72, 0x63, 0x74, 0x78, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x2f, 0x63, 0x68,
+	0x69, 0x6c, 0x64, 0x2f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x62, 0x69, 0x6e, 0x64, 0x69,
+	0x6e, 0x67, 0x12, 0x81, 0x01, 0x0a, 0x0a, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x42, 0x69, 0x6e,
+	0x64, 0x12, 0x1e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e,
+	0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
+	0x74, 0x1a, 0x1f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e,
+	0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
+	0x73, 0x65, 0x22, 0x32, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2c, 0x3a, 0x01, 0x2a, 0x22, 0x27, 0x2f,
+	0x61, 0x70, 0x69, 0x73, 0x2f, 0x76, 0x32, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x63, 0x74, 0x78, 0x2f,
+	0x75, 0x73, 0x65, 0x72, 0x2f, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x2f, 0x64, 0x65, 0x76, 0x69, 0x63,
+	0x65, 0x2f, 0x62, 0x69, 0x6e, 0x64, 0x12, 0x89, 0x01, 0x0a, 0x0c, 0x44, 0x65, 0x76, 0x69, 0x63,
+	0x65, 0x55, 0x6e, 0x62, 0x69, 0x6e, 0x64, 0x12, 0x20, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x75, 0x73,
+	0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x55, 0x6e, 0x62, 0x69,
+	0x6e, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x61, 0x70, 0x69, 0x2e,
+	0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x55, 0x6e,
+	0x62, 0x69, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x34, 0x82, 0xd3,
+	0xe4, 0x93, 0x02, 0x2e, 0x3a, 0x01, 0x2a, 0x22, 0x29, 0x2f, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x76,
+	0x32, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x63, 0x74, 0x78, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x2f, 0x63,
+	0x68, 0x69, 0x6c, 0x64, 0x2f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x75, 0x6e, 0x62, 0x69,
+	0x6e, 0x64, 0x12, 0x8e, 0x01, 0x0a, 0x0e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x45, 0x78, 0x63,
+	0x68, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x22, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x75, 0x73, 0x65, 0x72,
+	0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e,
+	0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x61, 0x70, 0x69, 0x2e,
+	0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x45, 0x78,
+	0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x33,
+	0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2d, 0x12, 0x2b, 0x2f, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x76, 0x32,
+	0x2f, 0x75, 0x73, 0x65, 0x72, 0x63, 0x74, 0x78, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x2f, 0x63, 0x68,
+	0x69, 0x6c, 0x64, 0x2f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x65, 0x78, 0x63, 0x68, 0x61,
+	0x6e, 0x67, 0x65, 0x42, 0x30, 0x0a, 0x0b, 0x61, 0x70, 0x69, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e,
+	0x76, 0x32, 0x50, 0x01, 0x5a, 0x1f, 0x73, 0x69, 0x6b, 0x65, 0x79, 0x2f, 0x77, 0x33, 0x30, 0x33,
+	0x61, 0x2f, 0x68, 0x74, 0x74, 0x70, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x2f,
+	0x76, 0x32, 0x3b, 0x76, 0x32, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
 }
 
 var (
-	file_api_user_v2_device_proto_rawDescOnce sync.Once
-	file_api_user_v2_device_proto_rawDescData = file_api_user_v2_device_proto_rawDesc
+	file_user_v2_device_proto_rawDescOnce sync.Once
+	file_user_v2_device_proto_rawDescData = file_user_v2_device_proto_rawDesc
 )
 
-func file_api_user_v2_device_proto_rawDescGZIP() []byte {
-	file_api_user_v2_device_proto_rawDescOnce.Do(func() {
-		file_api_user_v2_device_proto_rawDescData = protoimpl.X.CompressGZIP(file_api_user_v2_device_proto_rawDescData)
+func file_user_v2_device_proto_rawDescGZIP() []byte {
+	file_user_v2_device_proto_rawDescOnce.Do(func() {
+		file_user_v2_device_proto_rawDescData = protoimpl.X.CompressGZIP(file_user_v2_device_proto_rawDescData)
 	})
-	return file_api_user_v2_device_proto_rawDescData
+	return file_user_v2_device_proto_rawDescData
 }
 
-var file_api_user_v2_device_proto_msgTypes = make([]protoimpl.MessageInfo, 8)
-var file_api_user_v2_device_proto_goTypes = []any{
+var file_user_v2_device_proto_msgTypes = make([]protoimpl.MessageInfo, 8)
+var file_user_v2_device_proto_goTypes = []any{
 	(*DeviceBindingRequest)(nil),   // 0: api.user.v2.DeviceBindingRequest
 	(*DeviceBindingResponse)(nil),  // 1: api.user.v2.DeviceBindingResponse
 	(*DeviceBindRequest)(nil),      // 2: api.user.v2.DeviceBindRequest
@@ -578,7 +577,7 @@ var file_api_user_v2_device_proto_goTypes = []any{
 	(*DeviceExchangeRequest)(nil),  // 6: api.user.v2.DeviceExchangeRequest
 	(*DeviceExchangeResponse)(nil), // 7: api.user.v2.DeviceExchangeResponse
 }
-var file_api_user_v2_device_proto_depIdxs = []int32{
+var file_user_v2_device_proto_depIdxs = []int32{
 	0, // 0: api.user.v2.Device.DeviceBinding:input_type -> api.user.v2.DeviceBindingRequest
 	2, // 1: api.user.v2.Device.DeviceBind:input_type -> api.user.v2.DeviceBindRequest
 	4, // 2: api.user.v2.Device.DeviceUnbind:input_type -> api.user.v2.DeviceUnbindRequest
@@ -594,13 +593,13 @@ var file_api_user_v2_device_proto_depIdxs = []int32{
 	0, // [0:0] is the sub-list for field type_name
 }
 
-func init() { file_api_user_v2_device_proto_init() }
-func file_api_user_v2_device_proto_init() {
-	if File_api_user_v2_device_proto != nil {
+func init() { file_user_v2_device_proto_init() }
+func file_user_v2_device_proto_init() {
+	if File_user_v2_device_proto != nil {
 		return
 	}
 	if !protoimpl.UnsafeEnabled {
-		file_api_user_v2_device_proto_msgTypes[0].Exporter = func(v any, i int) any {
+		file_user_v2_device_proto_msgTypes[0].Exporter = func(v any, i int) any {
 			switch v := v.(*DeviceBindingRequest); i {
 			case 0:
 				return &v.state
@@ -612,7 +611,7 @@ func file_api_user_v2_device_proto_init() {
 				return nil
 			}
 		}
-		file_api_user_v2_device_proto_msgTypes[1].Exporter = func(v any, i int) any {
+		file_user_v2_device_proto_msgTypes[1].Exporter = func(v any, i int) any {
 			switch v := v.(*DeviceBindingResponse); i {
 			case 0:
 				return &v.state
@@ -624,7 +623,7 @@ func file_api_user_v2_device_proto_init() {
 				return nil
 			}
 		}
-		file_api_user_v2_device_proto_msgTypes[2].Exporter = func(v any, i int) any {
+		file_user_v2_device_proto_msgTypes[2].Exporter = func(v any, i int) any {
 			switch v := v.(*DeviceBindRequest); i {
 			case 0:
 				return &v.state
@@ -636,7 +635,7 @@ func file_api_user_v2_device_proto_init() {
 				return nil
 			}
 		}
-		file_api_user_v2_device_proto_msgTypes[3].Exporter = func(v any, i int) any {
+		file_user_v2_device_proto_msgTypes[3].Exporter = func(v any, i int) any {
 			switch v := v.(*DeviceBindResponse); i {
 			case 0:
 				return &v.state
@@ -648,7 +647,7 @@ func file_api_user_v2_device_proto_init() {
 				return nil
 			}
 		}
-		file_api_user_v2_device_proto_msgTypes[4].Exporter = func(v any, i int) any {
+		file_user_v2_device_proto_msgTypes[4].Exporter = func(v any, i int) any {
 			switch v := v.(*DeviceUnbindRequest); i {
 			case 0:
 				return &v.state
@@ -660,7 +659,7 @@ func file_api_user_v2_device_proto_init() {
 				return nil
 			}
 		}
-		file_api_user_v2_device_proto_msgTypes[5].Exporter = func(v any, i int) any {
+		file_user_v2_device_proto_msgTypes[5].Exporter = func(v any, i int) any {
 			switch v := v.(*DeviceUnbindResponse); i {
 			case 0:
 				return &v.state
@@ -672,7 +671,7 @@ func file_api_user_v2_device_proto_init() {
 				return nil
 			}
 		}
-		file_api_user_v2_device_proto_msgTypes[6].Exporter = func(v any, i int) any {
+		file_user_v2_device_proto_msgTypes[6].Exporter = func(v any, i int) any {
 			switch v := v.(*DeviceExchangeRequest); i {
 			case 0:
 				return &v.state
@@ -684,7 +683,7 @@ func file_api_user_v2_device_proto_init() {
 				return nil
 			}
 		}
-		file_api_user_v2_device_proto_msgTypes[7].Exporter = func(v any, i int) any {
+		file_user_v2_device_proto_msgTypes[7].Exporter = func(v any, i int) any {
 			switch v := v.(*DeviceExchangeResponse); i {
 			case 0:
 				return &v.state
@@ -701,18 +700,18 @@ func file_api_user_v2_device_proto_init() {
 	out := protoimpl.TypeBuilder{
 		File: protoimpl.DescBuilder{
 			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
-			RawDescriptor: file_api_user_v2_device_proto_rawDesc,
+			RawDescriptor: file_user_v2_device_proto_rawDesc,
 			NumEnums:      0,
 			NumMessages:   8,
 			NumExtensions: 0,
 			NumServices:   1,
 		},
-		GoTypes:           file_api_user_v2_device_proto_goTypes,
-		DependencyIndexes: file_api_user_v2_device_proto_depIdxs,
-		MessageInfos:      file_api_user_v2_device_proto_msgTypes,
+		GoTypes:           file_user_v2_device_proto_goTypes,
+		DependencyIndexes: file_user_v2_device_proto_depIdxs,
+		MessageInfos:      file_user_v2_device_proto_msgTypes,
 	}.Build()
-	File_api_user_v2_device_proto = out.File
-	file_api_user_v2_device_proto_rawDesc = nil
-	file_api_user_v2_device_proto_goTypes = nil
-	file_api_user_v2_device_proto_depIdxs = nil
+	File_user_v2_device_proto = out.File
+	file_user_v2_device_proto_rawDesc = nil
+	file_user_v2_device_proto_goTypes = nil
+	file_user_v2_device_proto_depIdxs = nil
 }

+ 116 - 116
api/user/v2/device_config.pb.go

@@ -2,7 +2,7 @@
 // versions:
 // 	protoc-gen-go v1.34.2
 // 	protoc        v4.25.3
-// source: api/user/v2/device_config.proto
+// source: user/v2/device_config.proto
 
 package v2
 
@@ -29,7 +29,7 @@ type CreateDeviceConfigRequest struct {
 func (x *CreateDeviceConfigRequest) Reset() {
 	*x = CreateDeviceConfigRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_api_user_v2_device_config_proto_msgTypes[0]
+		mi := &file_user_v2_device_config_proto_msgTypes[0]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -42,7 +42,7 @@ func (x *CreateDeviceConfigRequest) String() string {
 func (*CreateDeviceConfigRequest) ProtoMessage() {}
 
 func (x *CreateDeviceConfigRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_api_user_v2_device_config_proto_msgTypes[0]
+	mi := &file_user_v2_device_config_proto_msgTypes[0]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -55,7 +55,7 @@ func (x *CreateDeviceConfigRequest) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use CreateDeviceConfigRequest.ProtoReflect.Descriptor instead.
 func (*CreateDeviceConfigRequest) Descriptor() ([]byte, []int) {
-	return file_api_user_v2_device_config_proto_rawDescGZIP(), []int{0}
+	return file_user_v2_device_config_proto_rawDescGZIP(), []int{0}
 }
 
 type CreateDeviceConfigReply struct {
@@ -67,7 +67,7 @@ type CreateDeviceConfigReply struct {
 func (x *CreateDeviceConfigReply) Reset() {
 	*x = CreateDeviceConfigReply{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_api_user_v2_device_config_proto_msgTypes[1]
+		mi := &file_user_v2_device_config_proto_msgTypes[1]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -80,7 +80,7 @@ func (x *CreateDeviceConfigReply) String() string {
 func (*CreateDeviceConfigReply) ProtoMessage() {}
 
 func (x *CreateDeviceConfigReply) ProtoReflect() protoreflect.Message {
-	mi := &file_api_user_v2_device_config_proto_msgTypes[1]
+	mi := &file_user_v2_device_config_proto_msgTypes[1]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -93,7 +93,7 @@ func (x *CreateDeviceConfigReply) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use CreateDeviceConfigReply.ProtoReflect.Descriptor instead.
 func (*CreateDeviceConfigReply) Descriptor() ([]byte, []int) {
-	return file_api_user_v2_device_config_proto_rawDescGZIP(), []int{1}
+	return file_user_v2_device_config_proto_rawDescGZIP(), []int{1}
 }
 
 type UpdateDeviceConfigRequest struct {
@@ -105,7 +105,7 @@ type UpdateDeviceConfigRequest struct {
 func (x *UpdateDeviceConfigRequest) Reset() {
 	*x = UpdateDeviceConfigRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_api_user_v2_device_config_proto_msgTypes[2]
+		mi := &file_user_v2_device_config_proto_msgTypes[2]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -118,7 +118,7 @@ func (x *UpdateDeviceConfigRequest) String() string {
 func (*UpdateDeviceConfigRequest) ProtoMessage() {}
 
 func (x *UpdateDeviceConfigRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_api_user_v2_device_config_proto_msgTypes[2]
+	mi := &file_user_v2_device_config_proto_msgTypes[2]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -131,7 +131,7 @@ func (x *UpdateDeviceConfigRequest) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use UpdateDeviceConfigRequest.ProtoReflect.Descriptor instead.
 func (*UpdateDeviceConfigRequest) Descriptor() ([]byte, []int) {
-	return file_api_user_v2_device_config_proto_rawDescGZIP(), []int{2}
+	return file_user_v2_device_config_proto_rawDescGZIP(), []int{2}
 }
 
 type UpdateDeviceConfigReply struct {
@@ -143,7 +143,7 @@ type UpdateDeviceConfigReply struct {
 func (x *UpdateDeviceConfigReply) Reset() {
 	*x = UpdateDeviceConfigReply{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_api_user_v2_device_config_proto_msgTypes[3]
+		mi := &file_user_v2_device_config_proto_msgTypes[3]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -156,7 +156,7 @@ func (x *UpdateDeviceConfigReply) String() string {
 func (*UpdateDeviceConfigReply) ProtoMessage() {}
 
 func (x *UpdateDeviceConfigReply) ProtoReflect() protoreflect.Message {
-	mi := &file_api_user_v2_device_config_proto_msgTypes[3]
+	mi := &file_user_v2_device_config_proto_msgTypes[3]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -169,7 +169,7 @@ func (x *UpdateDeviceConfigReply) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use UpdateDeviceConfigReply.ProtoReflect.Descriptor instead.
 func (*UpdateDeviceConfigReply) Descriptor() ([]byte, []int) {
-	return file_api_user_v2_device_config_proto_rawDescGZIP(), []int{3}
+	return file_user_v2_device_config_proto_rawDescGZIP(), []int{3}
 }
 
 type DeleteDeviceConfigRequest struct {
@@ -181,7 +181,7 @@ type DeleteDeviceConfigRequest struct {
 func (x *DeleteDeviceConfigRequest) Reset() {
 	*x = DeleteDeviceConfigRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_api_user_v2_device_config_proto_msgTypes[4]
+		mi := &file_user_v2_device_config_proto_msgTypes[4]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -194,7 +194,7 @@ func (x *DeleteDeviceConfigRequest) String() string {
 func (*DeleteDeviceConfigRequest) ProtoMessage() {}
 
 func (x *DeleteDeviceConfigRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_api_user_v2_device_config_proto_msgTypes[4]
+	mi := &file_user_v2_device_config_proto_msgTypes[4]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -207,7 +207,7 @@ func (x *DeleteDeviceConfigRequest) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use DeleteDeviceConfigRequest.ProtoReflect.Descriptor instead.
 func (*DeleteDeviceConfigRequest) Descriptor() ([]byte, []int) {
-	return file_api_user_v2_device_config_proto_rawDescGZIP(), []int{4}
+	return file_user_v2_device_config_proto_rawDescGZIP(), []int{4}
 }
 
 type DeleteDeviceConfigReply struct {
@@ -219,7 +219,7 @@ type DeleteDeviceConfigReply struct {
 func (x *DeleteDeviceConfigReply) Reset() {
 	*x = DeleteDeviceConfigReply{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_api_user_v2_device_config_proto_msgTypes[5]
+		mi := &file_user_v2_device_config_proto_msgTypes[5]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -232,7 +232,7 @@ func (x *DeleteDeviceConfigReply) String() string {
 func (*DeleteDeviceConfigReply) ProtoMessage() {}
 
 func (x *DeleteDeviceConfigReply) ProtoReflect() protoreflect.Message {
-	mi := &file_api_user_v2_device_config_proto_msgTypes[5]
+	mi := &file_user_v2_device_config_proto_msgTypes[5]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -245,7 +245,7 @@ func (x *DeleteDeviceConfigReply) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use DeleteDeviceConfigReply.ProtoReflect.Descriptor instead.
 func (*DeleteDeviceConfigReply) Descriptor() ([]byte, []int) {
-	return file_api_user_v2_device_config_proto_rawDescGZIP(), []int{5}
+	return file_user_v2_device_config_proto_rawDescGZIP(), []int{5}
 }
 
 type GetDeviceConfigRequest struct {
@@ -257,7 +257,7 @@ type GetDeviceConfigRequest struct {
 func (x *GetDeviceConfigRequest) Reset() {
 	*x = GetDeviceConfigRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_api_user_v2_device_config_proto_msgTypes[6]
+		mi := &file_user_v2_device_config_proto_msgTypes[6]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -270,7 +270,7 @@ func (x *GetDeviceConfigRequest) String() string {
 func (*GetDeviceConfigRequest) ProtoMessage() {}
 
 func (x *GetDeviceConfigRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_api_user_v2_device_config_proto_msgTypes[6]
+	mi := &file_user_v2_device_config_proto_msgTypes[6]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -283,7 +283,7 @@ func (x *GetDeviceConfigRequest) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use GetDeviceConfigRequest.ProtoReflect.Descriptor instead.
 func (*GetDeviceConfigRequest) Descriptor() ([]byte, []int) {
-	return file_api_user_v2_device_config_proto_rawDescGZIP(), []int{6}
+	return file_user_v2_device_config_proto_rawDescGZIP(), []int{6}
 }
 
 type GetDeviceConfigReply struct {
@@ -295,7 +295,7 @@ type GetDeviceConfigReply struct {
 func (x *GetDeviceConfigReply) Reset() {
 	*x = GetDeviceConfigReply{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_api_user_v2_device_config_proto_msgTypes[7]
+		mi := &file_user_v2_device_config_proto_msgTypes[7]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -308,7 +308,7 @@ func (x *GetDeviceConfigReply) String() string {
 func (*GetDeviceConfigReply) ProtoMessage() {}
 
 func (x *GetDeviceConfigReply) ProtoReflect() protoreflect.Message {
-	mi := &file_api_user_v2_device_config_proto_msgTypes[7]
+	mi := &file_user_v2_device_config_proto_msgTypes[7]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -321,7 +321,7 @@ func (x *GetDeviceConfigReply) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use GetDeviceConfigReply.ProtoReflect.Descriptor instead.
 func (*GetDeviceConfigReply) Descriptor() ([]byte, []int) {
-	return file_api_user_v2_device_config_proto_rawDescGZIP(), []int{7}
+	return file_user_v2_device_config_proto_rawDescGZIP(), []int{7}
 }
 
 type ListDeviceConfigRequest struct {
@@ -333,7 +333,7 @@ type ListDeviceConfigRequest struct {
 func (x *ListDeviceConfigRequest) Reset() {
 	*x = ListDeviceConfigRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_api_user_v2_device_config_proto_msgTypes[8]
+		mi := &file_user_v2_device_config_proto_msgTypes[8]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -346,7 +346,7 @@ func (x *ListDeviceConfigRequest) String() string {
 func (*ListDeviceConfigRequest) ProtoMessage() {}
 
 func (x *ListDeviceConfigRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_api_user_v2_device_config_proto_msgTypes[8]
+	mi := &file_user_v2_device_config_proto_msgTypes[8]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -359,7 +359,7 @@ func (x *ListDeviceConfigRequest) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use ListDeviceConfigRequest.ProtoReflect.Descriptor instead.
 func (*ListDeviceConfigRequest) Descriptor() ([]byte, []int) {
-	return file_api_user_v2_device_config_proto_rawDescGZIP(), []int{8}
+	return file_user_v2_device_config_proto_rawDescGZIP(), []int{8}
 }
 
 type ListDeviceConfigReply struct {
@@ -371,7 +371,7 @@ type ListDeviceConfigReply struct {
 func (x *ListDeviceConfigReply) Reset() {
 	*x = ListDeviceConfigReply{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_api_user_v2_device_config_proto_msgTypes[9]
+		mi := &file_user_v2_device_config_proto_msgTypes[9]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -384,7 +384,7 @@ func (x *ListDeviceConfigReply) String() string {
 func (*ListDeviceConfigReply) ProtoMessage() {}
 
 func (x *ListDeviceConfigReply) ProtoReflect() protoreflect.Message {
-	mi := &file_api_user_v2_device_config_proto_msgTypes[9]
+	mi := &file_user_v2_device_config_proto_msgTypes[9]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -397,83 +397,83 @@ func (x *ListDeviceConfigReply) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use ListDeviceConfigReply.ProtoReflect.Descriptor instead.
 func (*ListDeviceConfigReply) Descriptor() ([]byte, []int) {
-	return file_api_user_v2_device_config_proto_rawDescGZIP(), []int{9}
-}
-
-var File_api_user_v2_device_config_proto protoreflect.FileDescriptor
-
-var file_api_user_v2_device_config_proto_rawDesc = []byte{
-	0x0a, 0x1f, 0x61, 0x70, 0x69, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x2f, 0x76, 0x32, 0x2f, 0x64, 0x65,
-	0x76, 0x69, 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74,
-	0x6f, 0x12, 0x0b, 0x61, 0x70, 0x69, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x22, 0x1b,
-	0x0a, 0x19, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x43, 0x6f,
-	0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x19, 0x0a, 0x17, 0x43,
-	0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69,
-	0x67, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x1b, 0x0a, 0x19, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65,
-	0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75,
-	0x65, 0x73, 0x74, 0x22, 0x19, 0x0a, 0x17, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x44, 0x65, 0x76,
-	0x69, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x1b,
-	0x0a, 0x19, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x43, 0x6f,
-	0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x19, 0x0a, 0x17, 0x44,
-	0x65, 0x6c, 0x65, 0x74, 0x65, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69,
-	0x67, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x18, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x44, 0x65, 0x76,
-	0x69, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
-	0x22, 0x16, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x43, 0x6f, 0x6e,
-	0x66, 0x69, 0x67, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x19, 0x0a, 0x17, 0x4c, 0x69, 0x73, 0x74,
-	0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75,
-	0x65, 0x73, 0x74, 0x22, 0x17, 0x0a, 0x15, 0x4c, 0x69, 0x73, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63,
-	0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x32, 0xf3, 0x03, 0x0a,
-	0x0c, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x62, 0x0a,
-	0x12, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x43, 0x6f, 0x6e,
+	return file_user_v2_device_config_proto_rawDescGZIP(), []int{9}
+}
+
+var File_user_v2_device_config_proto protoreflect.FileDescriptor
+
+var file_user_v2_device_config_proto_rawDesc = []byte{
+	0x0a, 0x1b, 0x75, 0x73, 0x65, 0x72, 0x2f, 0x76, 0x32, 0x2f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65,
+	0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0b, 0x61,
+	0x70, 0x69, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x22, 0x1b, 0x0a, 0x19, 0x43, 0x72,
+	0x65, 0x61, 0x74, 0x65, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67,
+	0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x19, 0x0a, 0x17, 0x43, 0x72, 0x65, 0x61, 0x74,
+	0x65, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x70,
+	0x6c, 0x79, 0x22, 0x1b, 0x0a, 0x19, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x44, 0x65, 0x76, 0x69,
+	0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22,
+	0x19, 0x0a, 0x17, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x43,
+	0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x1b, 0x0a, 0x19, 0x44, 0x65,
+	0x6c, 0x65, 0x74, 0x65, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67,
+	0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x19, 0x0a, 0x17, 0x44, 0x65, 0x6c, 0x65, 0x74,
+	0x65, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x70,
+	0x6c, 0x79, 0x22, 0x18, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x43,
+	0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x16, 0x0a, 0x14,
+	0x47, 0x65, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52,
+	0x65, 0x70, 0x6c, 0x79, 0x22, 0x19, 0x0a, 0x17, 0x4c, 0x69, 0x73, 0x74, 0x44, 0x65, 0x76, 0x69,
+	0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22,
+	0x17, 0x0a, 0x15, 0x4c, 0x69, 0x73, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x43, 0x6f, 0x6e,
+	0x66, 0x69, 0x67, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x32, 0xf3, 0x03, 0x0a, 0x0c, 0x44, 0x65, 0x76,
+	0x69, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x62, 0x0a, 0x12, 0x43, 0x72, 0x65,
+	0x61, 0x74, 0x65, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12,
+	0x26, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x72,
+	0x65, 0x61, 0x74, 0x65, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67,
+	0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x75, 0x73,
+	0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x65, 0x76, 0x69,
+	0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x62, 0x0a,
+	0x12, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x43, 0x6f, 0x6e,
 	0x66, 0x69, 0x67, 0x12, 0x26, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76,
-	0x32, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x43, 0x6f,
+	0x32, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x43, 0x6f,
 	0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x61, 0x70,
-	0x69, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65,
+	0x69, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65,
 	0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x70, 0x6c,
-	0x79, 0x12, 0x62, 0x0a, 0x12, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x44, 0x65, 0x76, 0x69, 0x63,
+	0x79, 0x12, 0x62, 0x0a, 0x12, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x44, 0x65, 0x76, 0x69, 0x63,
 	0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x26, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x75, 0x73,
-	0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x44, 0x65, 0x76, 0x69,
+	0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x44, 0x65, 0x76, 0x69,
 	0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
-	0x24, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x55, 0x70,
-	0x64, 0x61, 0x74, 0x65, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67,
-	0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x62, 0x0a, 0x12, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x44,
-	0x65, 0x76, 0x69, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x26, 0x2e, 0x61, 0x70,
-	0x69, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65,
-	0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75,
-	0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76,
-	0x32, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x43, 0x6f,
-	0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x59, 0x0a, 0x0f, 0x47, 0x65, 0x74,
-	0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x23, 0x2e, 0x61,
-	0x70, 0x69, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65,
-	0x76, 0x69, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
-	0x74, 0x1a, 0x21, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e,
-	0x47, 0x65, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52,
-	0x65, 0x70, 0x6c, 0x79, 0x12, 0x5c, 0x0a, 0x10, 0x4c, 0x69, 0x73, 0x74, 0x44, 0x65, 0x76, 0x69,
-	0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x24, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x75,
-	0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63,
-	0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22,
-	0x2e, 0x61, 0x70, 0x69, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x4c, 0x69, 0x73,
-	0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x70,
-	0x6c, 0x79, 0x42, 0x30, 0x0a, 0x0b, 0x61, 0x70, 0x69, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76,
-	0x32, 0x50, 0x01, 0x5a, 0x1f, 0x73, 0x69, 0x6b, 0x65, 0x79, 0x2f, 0x77, 0x33, 0x30, 0x33, 0x61,
-	0x2f, 0x68, 0x74, 0x74, 0x70, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x2f, 0x76,
-	0x32, 0x3b, 0x76, 0x32, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+	0x24, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65,
+	0x6c, 0x65, 0x74, 0x65, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67,
+	0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x59, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x44, 0x65, 0x76, 0x69,
+	0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x23, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x75,
+	0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65,
+	0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e,
+	0x61, 0x70, 0x69, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44,
+	0x65, 0x76, 0x69, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x70, 0x6c, 0x79,
+	0x12, 0x5c, 0x0a, 0x10, 0x4c, 0x69, 0x73, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x43, 0x6f,
+	0x6e, 0x66, 0x69, 0x67, 0x12, 0x24, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e,
+	0x76, 0x32, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x43, 0x6f, 0x6e,
+	0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x61, 0x70, 0x69,
+	0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x44, 0x65, 0x76,
+	0x69, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x42, 0x30,
+	0x0a, 0x0b, 0x61, 0x70, 0x69, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x50, 0x01, 0x5a,
+	0x1f, 0x73, 0x69, 0x6b, 0x65, 0x79, 0x2f, 0x77, 0x33, 0x30, 0x33, 0x61, 0x2f, 0x68, 0x74, 0x74,
+	0x70, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x2f, 0x76, 0x32, 0x3b, 0x76, 0x32,
+	0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
 }
 
 var (
-	file_api_user_v2_device_config_proto_rawDescOnce sync.Once
-	file_api_user_v2_device_config_proto_rawDescData = file_api_user_v2_device_config_proto_rawDesc
+	file_user_v2_device_config_proto_rawDescOnce sync.Once
+	file_user_v2_device_config_proto_rawDescData = file_user_v2_device_config_proto_rawDesc
 )
 
-func file_api_user_v2_device_config_proto_rawDescGZIP() []byte {
-	file_api_user_v2_device_config_proto_rawDescOnce.Do(func() {
-		file_api_user_v2_device_config_proto_rawDescData = protoimpl.X.CompressGZIP(file_api_user_v2_device_config_proto_rawDescData)
+func file_user_v2_device_config_proto_rawDescGZIP() []byte {
+	file_user_v2_device_config_proto_rawDescOnce.Do(func() {
+		file_user_v2_device_config_proto_rawDescData = protoimpl.X.CompressGZIP(file_user_v2_device_config_proto_rawDescData)
 	})
-	return file_api_user_v2_device_config_proto_rawDescData
+	return file_user_v2_device_config_proto_rawDescData
 }
 
-var file_api_user_v2_device_config_proto_msgTypes = make([]protoimpl.MessageInfo, 10)
-var file_api_user_v2_device_config_proto_goTypes = []any{
+var file_user_v2_device_config_proto_msgTypes = make([]protoimpl.MessageInfo, 10)
+var file_user_v2_device_config_proto_goTypes = []any{
 	(*CreateDeviceConfigRequest)(nil), // 0: api.user.v2.CreateDeviceConfigRequest
 	(*CreateDeviceConfigReply)(nil),   // 1: api.user.v2.CreateDeviceConfigReply
 	(*UpdateDeviceConfigRequest)(nil), // 2: api.user.v2.UpdateDeviceConfigRequest
@@ -485,7 +485,7 @@ var file_api_user_v2_device_config_proto_goTypes = []any{
 	(*ListDeviceConfigRequest)(nil),   // 8: api.user.v2.ListDeviceConfigRequest
 	(*ListDeviceConfigReply)(nil),     // 9: api.user.v2.ListDeviceConfigReply
 }
-var file_api_user_v2_device_config_proto_depIdxs = []int32{
+var file_user_v2_device_config_proto_depIdxs = []int32{
 	0, // 0: api.user.v2.DeviceConfig.CreateDeviceConfig:input_type -> api.user.v2.CreateDeviceConfigRequest
 	2, // 1: api.user.v2.DeviceConfig.UpdateDeviceConfig:input_type -> api.user.v2.UpdateDeviceConfigRequest
 	4, // 2: api.user.v2.DeviceConfig.DeleteDeviceConfig:input_type -> api.user.v2.DeleteDeviceConfigRequest
@@ -503,13 +503,13 @@ var file_api_user_v2_device_config_proto_depIdxs = []int32{
 	0, // [0:0] is the sub-list for field type_name
 }
 
-func init() { file_api_user_v2_device_config_proto_init() }
-func file_api_user_v2_device_config_proto_init() {
-	if File_api_user_v2_device_config_proto != nil {
+func init() { file_user_v2_device_config_proto_init() }
+func file_user_v2_device_config_proto_init() {
+	if File_user_v2_device_config_proto != nil {
 		return
 	}
 	if !protoimpl.UnsafeEnabled {
-		file_api_user_v2_device_config_proto_msgTypes[0].Exporter = func(v any, i int) any {
+		file_user_v2_device_config_proto_msgTypes[0].Exporter = func(v any, i int) any {
 			switch v := v.(*CreateDeviceConfigRequest); i {
 			case 0:
 				return &v.state
@@ -521,7 +521,7 @@ func file_api_user_v2_device_config_proto_init() {
 				return nil
 			}
 		}
-		file_api_user_v2_device_config_proto_msgTypes[1].Exporter = func(v any, i int) any {
+		file_user_v2_device_config_proto_msgTypes[1].Exporter = func(v any, i int) any {
 			switch v := v.(*CreateDeviceConfigReply); i {
 			case 0:
 				return &v.state
@@ -533,7 +533,7 @@ func file_api_user_v2_device_config_proto_init() {
 				return nil
 			}
 		}
-		file_api_user_v2_device_config_proto_msgTypes[2].Exporter = func(v any, i int) any {
+		file_user_v2_device_config_proto_msgTypes[2].Exporter = func(v any, i int) any {
 			switch v := v.(*UpdateDeviceConfigRequest); i {
 			case 0:
 				return &v.state
@@ -545,7 +545,7 @@ func file_api_user_v2_device_config_proto_init() {
 				return nil
 			}
 		}
-		file_api_user_v2_device_config_proto_msgTypes[3].Exporter = func(v any, i int) any {
+		file_user_v2_device_config_proto_msgTypes[3].Exporter = func(v any, i int) any {
 			switch v := v.(*UpdateDeviceConfigReply); i {
 			case 0:
 				return &v.state
@@ -557,7 +557,7 @@ func file_api_user_v2_device_config_proto_init() {
 				return nil
 			}
 		}
-		file_api_user_v2_device_config_proto_msgTypes[4].Exporter = func(v any, i int) any {
+		file_user_v2_device_config_proto_msgTypes[4].Exporter = func(v any, i int) any {
 			switch v := v.(*DeleteDeviceConfigRequest); i {
 			case 0:
 				return &v.state
@@ -569,7 +569,7 @@ func file_api_user_v2_device_config_proto_init() {
 				return nil
 			}
 		}
-		file_api_user_v2_device_config_proto_msgTypes[5].Exporter = func(v any, i int) any {
+		file_user_v2_device_config_proto_msgTypes[5].Exporter = func(v any, i int) any {
 			switch v := v.(*DeleteDeviceConfigReply); i {
 			case 0:
 				return &v.state
@@ -581,7 +581,7 @@ func file_api_user_v2_device_config_proto_init() {
 				return nil
 			}
 		}
-		file_api_user_v2_device_config_proto_msgTypes[6].Exporter = func(v any, i int) any {
+		file_user_v2_device_config_proto_msgTypes[6].Exporter = func(v any, i int) any {
 			switch v := v.(*GetDeviceConfigRequest); i {
 			case 0:
 				return &v.state
@@ -593,7 +593,7 @@ func file_api_user_v2_device_config_proto_init() {
 				return nil
 			}
 		}
-		file_api_user_v2_device_config_proto_msgTypes[7].Exporter = func(v any, i int) any {
+		file_user_v2_device_config_proto_msgTypes[7].Exporter = func(v any, i int) any {
 			switch v := v.(*GetDeviceConfigReply); i {
 			case 0:
 				return &v.state
@@ -605,7 +605,7 @@ func file_api_user_v2_device_config_proto_init() {
 				return nil
 			}
 		}
-		file_api_user_v2_device_config_proto_msgTypes[8].Exporter = func(v any, i int) any {
+		file_user_v2_device_config_proto_msgTypes[8].Exporter = func(v any, i int) any {
 			switch v := v.(*ListDeviceConfigRequest); i {
 			case 0:
 				return &v.state
@@ -617,7 +617,7 @@ func file_api_user_v2_device_config_proto_init() {
 				return nil
 			}
 		}
-		file_api_user_v2_device_config_proto_msgTypes[9].Exporter = func(v any, i int) any {
+		file_user_v2_device_config_proto_msgTypes[9].Exporter = func(v any, i int) any {
 			switch v := v.(*ListDeviceConfigReply); i {
 			case 0:
 				return &v.state
@@ -634,18 +634,18 @@ func file_api_user_v2_device_config_proto_init() {
 	out := protoimpl.TypeBuilder{
 		File: protoimpl.DescBuilder{
 			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
-			RawDescriptor: file_api_user_v2_device_config_proto_rawDesc,
+			RawDescriptor: file_user_v2_device_config_proto_rawDesc,
 			NumEnums:      0,
 			NumMessages:   10,
 			NumExtensions: 0,
 			NumServices:   1,
 		},
-		GoTypes:           file_api_user_v2_device_config_proto_goTypes,
-		DependencyIndexes: file_api_user_v2_device_config_proto_depIdxs,
-		MessageInfos:      file_api_user_v2_device_config_proto_msgTypes,
+		GoTypes:           file_user_v2_device_config_proto_goTypes,
+		DependencyIndexes: file_user_v2_device_config_proto_depIdxs,
+		MessageInfos:      file_user_v2_device_config_proto_msgTypes,
 	}.Build()
-	File_api_user_v2_device_config_proto = out.File
-	file_api_user_v2_device_config_proto_rawDesc = nil
-	file_api_user_v2_device_config_proto_goTypes = nil
-	file_api_user_v2_device_config_proto_depIdxs = nil
+	File_user_v2_device_config_proto = out.File
+	file_user_v2_device_config_proto_rawDesc = nil
+	file_user_v2_device_config_proto_goTypes = nil
+	file_user_v2_device_config_proto_depIdxs = nil
 }

+ 51 - 51
api/user/v2/error_reason.pb.go

@@ -2,7 +2,7 @@
 // versions:
 // 	protoc-gen-go v1.34.2
 // 	protoc        v4.25.3
-// source: api/user/v2/error_reason.proto
+// source: user/v2/error_reason.proto
 
 package v2
 
@@ -70,11 +70,11 @@ func (x ErrorReason) String() string {
 }
 
 func (ErrorReason) Descriptor() protoreflect.EnumDescriptor {
-	return file_api_user_v2_error_reason_proto_enumTypes[0].Descriptor()
+	return file_user_v2_error_reason_proto_enumTypes[0].Descriptor()
 }
 
 func (ErrorReason) Type() protoreflect.EnumType {
-	return &file_api_user_v2_error_reason_proto_enumTypes[0]
+	return &file_user_v2_error_reason_proto_enumTypes[0]
 }
 
 func (x ErrorReason) Number() protoreflect.EnumNumber {
@@ -83,55 +83,55 @@ func (x ErrorReason) Number() protoreflect.EnumNumber {
 
 // Deprecated: Use ErrorReason.Descriptor instead.
 func (ErrorReason) EnumDescriptor() ([]byte, []int) {
-	return file_api_user_v2_error_reason_proto_rawDescGZIP(), []int{0}
+	return file_user_v2_error_reason_proto_rawDescGZIP(), []int{0}
 }
 
-var File_api_user_v2_error_reason_proto protoreflect.FileDescriptor
-
-var file_api_user_v2_error_reason_proto_rawDesc = []byte{
-	0x0a, 0x1e, 0x61, 0x70, 0x69, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x72,
-	0x72, 0x6f, 0x72, 0x5f, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
-	0x12, 0x0b, 0x61, 0x70, 0x69, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x1a, 0x13, 0x65,
-	0x72, 0x72, 0x6f, 0x72, 0x73, 0x2f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x2e, 0x70, 0x72, 0x6f,
-	0x74, 0x6f, 0x2a, 0xfa, 0x01, 0x0a, 0x0b, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x61, 0x73,
-	0x6f, 0x6e, 0x12, 0x2c, 0x0a, 0x22, 0x55, 0x53, 0x45, 0x52, 0x5f, 0x49, 0x4e, 0x43, 0x4f, 0x52,
-	0x52, 0x45, 0x43, 0x54, 0x5f, 0x41, 0x43, 0x43, 0x4f, 0x55, 0x4e, 0x54, 0x5f, 0x4f, 0x52, 0x5f,
-	0x50, 0x41, 0x53, 0x53, 0x57, 0x4f, 0x52, 0x44, 0x10, 0x00, 0x1a, 0x04, 0xa8, 0x45, 0x91, 0x03,
-	0x12, 0x29, 0x0a, 0x1f, 0x55, 0x53, 0x45, 0x52, 0x5f, 0x50, 0x48, 0x4f, 0x4e, 0x45, 0x5f, 0x4e,
-	0x55, 0x4d, 0x42, 0x45, 0x52, 0x5f, 0x48, 0x41, 0x53, 0x5f, 0x42, 0x45, 0x45, 0x4e, 0x5f, 0x55,
-	0x53, 0x45, 0x44, 0x10, 0x01, 0x1a, 0x04, 0xa8, 0x45, 0x90, 0x03, 0x12, 0x20, 0x0a, 0x16, 0x55,
-	0x53, 0x45, 0x52, 0x5f, 0x49, 0x4e, 0x43, 0x4f, 0x52, 0x52, 0x45, 0x43, 0x54, 0x5f, 0x43, 0x41,
-	0x50, 0x54, 0x43, 0x48, 0x41, 0x10, 0x02, 0x1a, 0x04, 0xa8, 0x45, 0x90, 0x03, 0x12, 0x1c, 0x0a,
-	0x12, 0x43, 0x4f, 0x4e, 0x54, 0x41, 0x43, 0x54, 0x53, 0x5f, 0x4e, 0x4f, 0x5f, 0x50, 0x45, 0x52,
-	0x53, 0x4f, 0x4e, 0x10, 0x03, 0x1a, 0x04, 0xa8, 0x45, 0x90, 0x03, 0x12, 0x22, 0x0a, 0x18, 0x43,
-	0x4f, 0x4e, 0x54, 0x41, 0x43, 0x54, 0x53, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x49, 0x4e, 0x49, 0x54,
-	0x49, 0x41, 0x4c, 0x49, 0x5a, 0x45, 0x44, 0x10, 0x04, 0x1a, 0x04, 0xa8, 0x45, 0x90, 0x03, 0x12,
-	0x28, 0x0a, 0x1e, 0x43, 0x4f, 0x4e, 0x54, 0x41, 0x43, 0x54, 0x53, 0x5f, 0x50, 0x45, 0x52, 0x53,
-	0x4f, 0x4e, 0x5f, 0x41, 0x4c, 0x52, 0x45, 0x41, 0x44, 0x59, 0x5f, 0x45, 0x58, 0x49, 0x53, 0x54,
-	0x53, 0x10, 0x05, 0x1a, 0x04, 0xa8, 0x45, 0x90, 0x03, 0x1a, 0x04, 0xa0, 0x45, 0xf4, 0x03, 0x42,
-	0x30, 0x0a, 0x0b, 0x61, 0x70, 0x69, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x50, 0x01,
-	0x5a, 0x1f, 0x73, 0x69, 0x6b, 0x65, 0x79, 0x2f, 0x77, 0x33, 0x30, 0x33, 0x61, 0x2f, 0x68, 0x74,
-	0x74, 0x70, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x2f, 0x76, 0x32, 0x3b, 0x76,
-	0x32, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+var File_user_v2_error_reason_proto protoreflect.FileDescriptor
+
+var file_user_v2_error_reason_proto_rawDesc = []byte{
+	0x0a, 0x1a, 0x75, 0x73, 0x65, 0x72, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x5f,
+	0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0b, 0x61, 0x70,
+	0x69, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x1a, 0x13, 0x65, 0x72, 0x72, 0x6f, 0x72,
+	0x73, 0x2f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2a, 0xfa,
+	0x01, 0x0a, 0x0b, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x2c,
+	0x0a, 0x22, 0x55, 0x53, 0x45, 0x52, 0x5f, 0x49, 0x4e, 0x43, 0x4f, 0x52, 0x52, 0x45, 0x43, 0x54,
+	0x5f, 0x41, 0x43, 0x43, 0x4f, 0x55, 0x4e, 0x54, 0x5f, 0x4f, 0x52, 0x5f, 0x50, 0x41, 0x53, 0x53,
+	0x57, 0x4f, 0x52, 0x44, 0x10, 0x00, 0x1a, 0x04, 0xa8, 0x45, 0x91, 0x03, 0x12, 0x29, 0x0a, 0x1f,
+	0x55, 0x53, 0x45, 0x52, 0x5f, 0x50, 0x48, 0x4f, 0x4e, 0x45, 0x5f, 0x4e, 0x55, 0x4d, 0x42, 0x45,
+	0x52, 0x5f, 0x48, 0x41, 0x53, 0x5f, 0x42, 0x45, 0x45, 0x4e, 0x5f, 0x55, 0x53, 0x45, 0x44, 0x10,
+	0x01, 0x1a, 0x04, 0xa8, 0x45, 0x90, 0x03, 0x12, 0x20, 0x0a, 0x16, 0x55, 0x53, 0x45, 0x52, 0x5f,
+	0x49, 0x4e, 0x43, 0x4f, 0x52, 0x52, 0x45, 0x43, 0x54, 0x5f, 0x43, 0x41, 0x50, 0x54, 0x43, 0x48,
+	0x41, 0x10, 0x02, 0x1a, 0x04, 0xa8, 0x45, 0x90, 0x03, 0x12, 0x1c, 0x0a, 0x12, 0x43, 0x4f, 0x4e,
+	0x54, 0x41, 0x43, 0x54, 0x53, 0x5f, 0x4e, 0x4f, 0x5f, 0x50, 0x45, 0x52, 0x53, 0x4f, 0x4e, 0x10,
+	0x03, 0x1a, 0x04, 0xa8, 0x45, 0x90, 0x03, 0x12, 0x22, 0x0a, 0x18, 0x43, 0x4f, 0x4e, 0x54, 0x41,
+	0x43, 0x54, 0x53, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x49, 0x4e, 0x49, 0x54, 0x49, 0x41, 0x4c, 0x49,
+	0x5a, 0x45, 0x44, 0x10, 0x04, 0x1a, 0x04, 0xa8, 0x45, 0x90, 0x03, 0x12, 0x28, 0x0a, 0x1e, 0x43,
+	0x4f, 0x4e, 0x54, 0x41, 0x43, 0x54, 0x53, 0x5f, 0x50, 0x45, 0x52, 0x53, 0x4f, 0x4e, 0x5f, 0x41,
+	0x4c, 0x52, 0x45, 0x41, 0x44, 0x59, 0x5f, 0x45, 0x58, 0x49, 0x53, 0x54, 0x53, 0x10, 0x05, 0x1a,
+	0x04, 0xa8, 0x45, 0x90, 0x03, 0x1a, 0x04, 0xa0, 0x45, 0xf4, 0x03, 0x42, 0x30, 0x0a, 0x0b, 0x61,
+	0x70, 0x69, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x50, 0x01, 0x5a, 0x1f, 0x73, 0x69,
+	0x6b, 0x65, 0x79, 0x2f, 0x77, 0x33, 0x30, 0x33, 0x61, 0x2f, 0x68, 0x74, 0x74, 0x70, 0x2f, 0x61,
+	0x70, 0x69, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x2f, 0x76, 0x32, 0x3b, 0x76, 0x32, 0x62, 0x06, 0x70,
+	0x72, 0x6f, 0x74, 0x6f, 0x33,
 }
 
 var (
-	file_api_user_v2_error_reason_proto_rawDescOnce sync.Once
-	file_api_user_v2_error_reason_proto_rawDescData = file_api_user_v2_error_reason_proto_rawDesc
+	file_user_v2_error_reason_proto_rawDescOnce sync.Once
+	file_user_v2_error_reason_proto_rawDescData = file_user_v2_error_reason_proto_rawDesc
 )
 
-func file_api_user_v2_error_reason_proto_rawDescGZIP() []byte {
-	file_api_user_v2_error_reason_proto_rawDescOnce.Do(func() {
-		file_api_user_v2_error_reason_proto_rawDescData = protoimpl.X.CompressGZIP(file_api_user_v2_error_reason_proto_rawDescData)
+func file_user_v2_error_reason_proto_rawDescGZIP() []byte {
+	file_user_v2_error_reason_proto_rawDescOnce.Do(func() {
+		file_user_v2_error_reason_proto_rawDescData = protoimpl.X.CompressGZIP(file_user_v2_error_reason_proto_rawDescData)
 	})
-	return file_api_user_v2_error_reason_proto_rawDescData
+	return file_user_v2_error_reason_proto_rawDescData
 }
 
-var file_api_user_v2_error_reason_proto_enumTypes = make([]protoimpl.EnumInfo, 1)
-var file_api_user_v2_error_reason_proto_goTypes = []any{
+var file_user_v2_error_reason_proto_enumTypes = make([]protoimpl.EnumInfo, 1)
+var file_user_v2_error_reason_proto_goTypes = []any{
 	(ErrorReason)(0), // 0: api.user.v2.ErrorReason
 }
-var file_api_user_v2_error_reason_proto_depIdxs = []int32{
+var file_user_v2_error_reason_proto_depIdxs = []int32{
 	0, // [0:0] is the sub-list for method output_type
 	0, // [0:0] is the sub-list for method input_type
 	0, // [0:0] is the sub-list for extension type_name
@@ -139,27 +139,27 @@ var file_api_user_v2_error_reason_proto_depIdxs = []int32{
 	0, // [0:0] is the sub-list for field type_name
 }
 
-func init() { file_api_user_v2_error_reason_proto_init() }
-func file_api_user_v2_error_reason_proto_init() {
-	if File_api_user_v2_error_reason_proto != nil {
+func init() { file_user_v2_error_reason_proto_init() }
+func file_user_v2_error_reason_proto_init() {
+	if File_user_v2_error_reason_proto != nil {
 		return
 	}
 	type x struct{}
 	out := protoimpl.TypeBuilder{
 		File: protoimpl.DescBuilder{
 			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
-			RawDescriptor: file_api_user_v2_error_reason_proto_rawDesc,
+			RawDescriptor: file_user_v2_error_reason_proto_rawDesc,
 			NumEnums:      1,
 			NumMessages:   0,
 			NumExtensions: 0,
 			NumServices:   0,
 		},
-		GoTypes:           file_api_user_v2_error_reason_proto_goTypes,
-		DependencyIndexes: file_api_user_v2_error_reason_proto_depIdxs,
-		EnumInfos:         file_api_user_v2_error_reason_proto_enumTypes,
+		GoTypes:           file_user_v2_error_reason_proto_goTypes,
+		DependencyIndexes: file_user_v2_error_reason_proto_depIdxs,
+		EnumInfos:         file_user_v2_error_reason_proto_enumTypes,
 	}.Build()
-	File_api_user_v2_error_reason_proto = out.File
-	file_api_user_v2_error_reason_proto_rawDesc = nil
-	file_api_user_v2_error_reason_proto_goTypes = nil
-	file_api_user_v2_error_reason_proto_depIdxs = nil
+	File_user_v2_error_reason_proto = out.File
+	file_user_v2_error_reason_proto_rawDesc = nil
+	file_user_v2_error_reason_proto_goTypes = nil
+	file_user_v2_error_reason_proto_depIdxs = nil
 }

+ 212 - 212
api/user/v2/school_disable.pb.go

@@ -2,7 +2,7 @@
 // versions:
 // 	protoc-gen-go v1.34.2
 // 	protoc        v4.25.3
-// source: api/user/v2/school_disable.proto
+// source: user/v2/school_disable.proto
 
 package v2
 
@@ -34,7 +34,7 @@ type GetWristwatchSchoolDisableRequest struct {
 func (x *GetWristwatchSchoolDisableRequest) Reset() {
 	*x = GetWristwatchSchoolDisableRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_api_user_v2_school_disable_proto_msgTypes[0]
+		mi := &file_user_v2_school_disable_proto_msgTypes[0]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -47,7 +47,7 @@ func (x *GetWristwatchSchoolDisableRequest) String() string {
 func (*GetWristwatchSchoolDisableRequest) ProtoMessage() {}
 
 func (x *GetWristwatchSchoolDisableRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_api_user_v2_school_disable_proto_msgTypes[0]
+	mi := &file_user_v2_school_disable_proto_msgTypes[0]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -60,7 +60,7 @@ func (x *GetWristwatchSchoolDisableRequest) ProtoReflect() protoreflect.Message
 
 // Deprecated: Use GetWristwatchSchoolDisableRequest.ProtoReflect.Descriptor instead.
 func (*GetWristwatchSchoolDisableRequest) Descriptor() ([]byte, []int) {
-	return file_api_user_v2_school_disable_proto_rawDescGZIP(), []int{0}
+	return file_user_v2_school_disable_proto_rawDescGZIP(), []int{0}
 }
 
 func (x *GetWristwatchSchoolDisableRequest) GetTicket() string {
@@ -82,7 +82,7 @@ type GetWristwatchSchoolDisableResponse struct {
 func (x *GetWristwatchSchoolDisableResponse) Reset() {
 	*x = GetWristwatchSchoolDisableResponse{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_api_user_v2_school_disable_proto_msgTypes[1]
+		mi := &file_user_v2_school_disable_proto_msgTypes[1]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -95,7 +95,7 @@ func (x *GetWristwatchSchoolDisableResponse) String() string {
 func (*GetWristwatchSchoolDisableResponse) ProtoMessage() {}
 
 func (x *GetWristwatchSchoolDisableResponse) ProtoReflect() protoreflect.Message {
-	mi := &file_api_user_v2_school_disable_proto_msgTypes[1]
+	mi := &file_user_v2_school_disable_proto_msgTypes[1]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -108,7 +108,7 @@ func (x *GetWristwatchSchoolDisableResponse) ProtoReflect() protoreflect.Message
 
 // Deprecated: Use GetWristwatchSchoolDisableResponse.ProtoReflect.Descriptor instead.
 func (*GetWristwatchSchoolDisableResponse) Descriptor() ([]byte, []int) {
-	return file_api_user_v2_school_disable_proto_rawDescGZIP(), []int{1}
+	return file_user_v2_school_disable_proto_rawDescGZIP(), []int{1}
 }
 
 func (x *GetWristwatchSchoolDisableResponse) GetSchoolDisables() []*GetWristwatchSchoolDisableResponse_SchoolDisable {
@@ -130,7 +130,7 @@ type GetSchoolDisableRequest struct {
 func (x *GetSchoolDisableRequest) Reset() {
 	*x = GetSchoolDisableRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_api_user_v2_school_disable_proto_msgTypes[2]
+		mi := &file_user_v2_school_disable_proto_msgTypes[2]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -143,7 +143,7 @@ func (x *GetSchoolDisableRequest) String() string {
 func (*GetSchoolDisableRequest) ProtoMessage() {}
 
 func (x *GetSchoolDisableRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_api_user_v2_school_disable_proto_msgTypes[2]
+	mi := &file_user_v2_school_disable_proto_msgTypes[2]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -156,7 +156,7 @@ func (x *GetSchoolDisableRequest) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use GetSchoolDisableRequest.ProtoReflect.Descriptor instead.
 func (*GetSchoolDisableRequest) Descriptor() ([]byte, []int) {
-	return file_api_user_v2_school_disable_proto_rawDescGZIP(), []int{2}
+	return file_user_v2_school_disable_proto_rawDescGZIP(), []int{2}
 }
 
 func (x *GetSchoolDisableRequest) GetCid() string {
@@ -178,7 +178,7 @@ type GetSchoolDisableResponse struct {
 func (x *GetSchoolDisableResponse) Reset() {
 	*x = GetSchoolDisableResponse{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_api_user_v2_school_disable_proto_msgTypes[3]
+		mi := &file_user_v2_school_disable_proto_msgTypes[3]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -191,7 +191,7 @@ func (x *GetSchoolDisableResponse) String() string {
 func (*GetSchoolDisableResponse) ProtoMessage() {}
 
 func (x *GetSchoolDisableResponse) ProtoReflect() protoreflect.Message {
-	mi := &file_api_user_v2_school_disable_proto_msgTypes[3]
+	mi := &file_user_v2_school_disable_proto_msgTypes[3]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -204,7 +204,7 @@ func (x *GetSchoolDisableResponse) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use GetSchoolDisableResponse.ProtoReflect.Descriptor instead.
 func (*GetSchoolDisableResponse) Descriptor() ([]byte, []int) {
-	return file_api_user_v2_school_disable_proto_rawDescGZIP(), []int{3}
+	return file_user_v2_school_disable_proto_rawDescGZIP(), []int{3}
 }
 
 func (x *GetSchoolDisableResponse) GetSchoolDisables() []*GetSchoolDisableResponse_SchoolDisable {
@@ -230,7 +230,7 @@ type CreateSchoolDisableRequest struct {
 func (x *CreateSchoolDisableRequest) Reset() {
 	*x = CreateSchoolDisableRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_api_user_v2_school_disable_proto_msgTypes[4]
+		mi := &file_user_v2_school_disable_proto_msgTypes[4]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -243,7 +243,7 @@ func (x *CreateSchoolDisableRequest) String() string {
 func (*CreateSchoolDisableRequest) ProtoMessage() {}
 
 func (x *CreateSchoolDisableRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_api_user_v2_school_disable_proto_msgTypes[4]
+	mi := &file_user_v2_school_disable_proto_msgTypes[4]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -256,7 +256,7 @@ func (x *CreateSchoolDisableRequest) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use CreateSchoolDisableRequest.ProtoReflect.Descriptor instead.
 func (*CreateSchoolDisableRequest) Descriptor() ([]byte, []int) {
-	return file_api_user_v2_school_disable_proto_rawDescGZIP(), []int{4}
+	return file_user_v2_school_disable_proto_rawDescGZIP(), []int{4}
 }
 
 func (x *CreateSchoolDisableRequest) GetCid() string {
@@ -306,7 +306,7 @@ type CreateSchoolDisableResponse struct {
 func (x *CreateSchoolDisableResponse) Reset() {
 	*x = CreateSchoolDisableResponse{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_api_user_v2_school_disable_proto_msgTypes[5]
+		mi := &file_user_v2_school_disable_proto_msgTypes[5]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -319,7 +319,7 @@ func (x *CreateSchoolDisableResponse) String() string {
 func (*CreateSchoolDisableResponse) ProtoMessage() {}
 
 func (x *CreateSchoolDisableResponse) ProtoReflect() protoreflect.Message {
-	mi := &file_api_user_v2_school_disable_proto_msgTypes[5]
+	mi := &file_user_v2_school_disable_proto_msgTypes[5]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -332,7 +332,7 @@ func (x *CreateSchoolDisableResponse) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use CreateSchoolDisableResponse.ProtoReflect.Descriptor instead.
 func (*CreateSchoolDisableResponse) Descriptor() ([]byte, []int) {
-	return file_api_user_v2_school_disable_proto_rawDescGZIP(), []int{5}
+	return file_user_v2_school_disable_proto_rawDescGZIP(), []int{5}
 }
 
 func (x *CreateSchoolDisableResponse) GetId() int64 {
@@ -359,7 +359,7 @@ type UpdateSchoolDisableRequest struct {
 func (x *UpdateSchoolDisableRequest) Reset() {
 	*x = UpdateSchoolDisableRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_api_user_v2_school_disable_proto_msgTypes[6]
+		mi := &file_user_v2_school_disable_proto_msgTypes[6]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -372,7 +372,7 @@ func (x *UpdateSchoolDisableRequest) String() string {
 func (*UpdateSchoolDisableRequest) ProtoMessage() {}
 
 func (x *UpdateSchoolDisableRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_api_user_v2_school_disable_proto_msgTypes[6]
+	mi := &file_user_v2_school_disable_proto_msgTypes[6]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -385,7 +385,7 @@ func (x *UpdateSchoolDisableRequest) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use UpdateSchoolDisableRequest.ProtoReflect.Descriptor instead.
 func (*UpdateSchoolDisableRequest) Descriptor() ([]byte, []int) {
-	return file_api_user_v2_school_disable_proto_rawDescGZIP(), []int{6}
+	return file_user_v2_school_disable_proto_rawDescGZIP(), []int{6}
 }
 
 func (x *UpdateSchoolDisableRequest) GetId() int64 {
@@ -440,7 +440,7 @@ type UpdateSchoolDisableResponse struct {
 func (x *UpdateSchoolDisableResponse) Reset() {
 	*x = UpdateSchoolDisableResponse{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_api_user_v2_school_disable_proto_msgTypes[7]
+		mi := &file_user_v2_school_disable_proto_msgTypes[7]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -453,7 +453,7 @@ func (x *UpdateSchoolDisableResponse) String() string {
 func (*UpdateSchoolDisableResponse) ProtoMessage() {}
 
 func (x *UpdateSchoolDisableResponse) ProtoReflect() protoreflect.Message {
-	mi := &file_api_user_v2_school_disable_proto_msgTypes[7]
+	mi := &file_user_v2_school_disable_proto_msgTypes[7]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -466,7 +466,7 @@ func (x *UpdateSchoolDisableResponse) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use UpdateSchoolDisableResponse.ProtoReflect.Descriptor instead.
 func (*UpdateSchoolDisableResponse) Descriptor() ([]byte, []int) {
-	return file_api_user_v2_school_disable_proto_rawDescGZIP(), []int{7}
+	return file_user_v2_school_disable_proto_rawDescGZIP(), []int{7}
 }
 
 // 删除上课禁用 Request
@@ -481,7 +481,7 @@ type DeleteSchoolDisableRequest struct {
 func (x *DeleteSchoolDisableRequest) Reset() {
 	*x = DeleteSchoolDisableRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_api_user_v2_school_disable_proto_msgTypes[8]
+		mi := &file_user_v2_school_disable_proto_msgTypes[8]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -494,7 +494,7 @@ func (x *DeleteSchoolDisableRequest) String() string {
 func (*DeleteSchoolDisableRequest) ProtoMessage() {}
 
 func (x *DeleteSchoolDisableRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_api_user_v2_school_disable_proto_msgTypes[8]
+	mi := &file_user_v2_school_disable_proto_msgTypes[8]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -507,7 +507,7 @@ func (x *DeleteSchoolDisableRequest) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use DeleteSchoolDisableRequest.ProtoReflect.Descriptor instead.
 func (*DeleteSchoolDisableRequest) Descriptor() ([]byte, []int) {
-	return file_api_user_v2_school_disable_proto_rawDescGZIP(), []int{8}
+	return file_user_v2_school_disable_proto_rawDescGZIP(), []int{8}
 }
 
 func (x *DeleteSchoolDisableRequest) GetId() int64 {
@@ -527,7 +527,7 @@ type DeleteSchoolDisableResponse struct {
 func (x *DeleteSchoolDisableResponse) Reset() {
 	*x = DeleteSchoolDisableResponse{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_api_user_v2_school_disable_proto_msgTypes[9]
+		mi := &file_user_v2_school_disable_proto_msgTypes[9]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -540,7 +540,7 @@ func (x *DeleteSchoolDisableResponse) String() string {
 func (*DeleteSchoolDisableResponse) ProtoMessage() {}
 
 func (x *DeleteSchoolDisableResponse) ProtoReflect() protoreflect.Message {
-	mi := &file_api_user_v2_school_disable_proto_msgTypes[9]
+	mi := &file_user_v2_school_disable_proto_msgTypes[9]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -553,7 +553,7 @@ func (x *DeleteSchoolDisableResponse) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use DeleteSchoolDisableResponse.ProtoReflect.Descriptor instead.
 func (*DeleteSchoolDisableResponse) Descriptor() ([]byte, []int) {
-	return file_api_user_v2_school_disable_proto_rawDescGZIP(), []int{9}
+	return file_user_v2_school_disable_proto_rawDescGZIP(), []int{9}
 }
 
 type GetWristwatchSchoolDisableResponse_SchoolDisable struct {
@@ -572,7 +572,7 @@ type GetWristwatchSchoolDisableResponse_SchoolDisable struct {
 func (x *GetWristwatchSchoolDisableResponse_SchoolDisable) Reset() {
 	*x = GetWristwatchSchoolDisableResponse_SchoolDisable{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_api_user_v2_school_disable_proto_msgTypes[10]
+		mi := &file_user_v2_school_disable_proto_msgTypes[10]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -585,7 +585,7 @@ func (x *GetWristwatchSchoolDisableResponse_SchoolDisable) String() string {
 func (*GetWristwatchSchoolDisableResponse_SchoolDisable) ProtoMessage() {}
 
 func (x *GetWristwatchSchoolDisableResponse_SchoolDisable) ProtoReflect() protoreflect.Message {
-	mi := &file_api_user_v2_school_disable_proto_msgTypes[10]
+	mi := &file_user_v2_school_disable_proto_msgTypes[10]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -598,7 +598,7 @@ func (x *GetWristwatchSchoolDisableResponse_SchoolDisable) ProtoReflect() protor
 
 // Deprecated: Use GetWristwatchSchoolDisableResponse_SchoolDisable.ProtoReflect.Descriptor instead.
 func (*GetWristwatchSchoolDisableResponse_SchoolDisable) Descriptor() ([]byte, []int) {
-	return file_api_user_v2_school_disable_proto_rawDescGZIP(), []int{1, 0}
+	return file_user_v2_school_disable_proto_rawDescGZIP(), []int{1, 0}
 }
 
 func (x *GetWristwatchSchoolDisableResponse_SchoolDisable) GetCid() string {
@@ -659,7 +659,7 @@ type GetSchoolDisableResponse_SchoolDisable struct {
 func (x *GetSchoolDisableResponse_SchoolDisable) Reset() {
 	*x = GetSchoolDisableResponse_SchoolDisable{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_api_user_v2_school_disable_proto_msgTypes[11]
+		mi := &file_user_v2_school_disable_proto_msgTypes[11]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -672,7 +672,7 @@ func (x *GetSchoolDisableResponse_SchoolDisable) String() string {
 func (*GetSchoolDisableResponse_SchoolDisable) ProtoMessage() {}
 
 func (x *GetSchoolDisableResponse_SchoolDisable) ProtoReflect() protoreflect.Message {
-	mi := &file_api_user_v2_school_disable_proto_msgTypes[11]
+	mi := &file_user_v2_school_disable_proto_msgTypes[11]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -685,7 +685,7 @@ func (x *GetSchoolDisableResponse_SchoolDisable) ProtoReflect() protoreflect.Mes
 
 // Deprecated: Use GetSchoolDisableResponse_SchoolDisable.ProtoReflect.Descriptor instead.
 func (*GetSchoolDisableResponse_SchoolDisable) Descriptor() ([]byte, []int) {
-	return file_api_user_v2_school_disable_proto_rawDescGZIP(), []int{3, 0}
+	return file_user_v2_school_disable_proto_rawDescGZIP(), []int{3, 0}
 }
 
 func (x *GetSchoolDisableResponse_SchoolDisable) GetCid() string {
@@ -730,169 +730,169 @@ func (x *GetSchoolDisableResponse_SchoolDisable) GetId() int64 {
 	return 0
 }
 
-var File_api_user_v2_school_disable_proto protoreflect.FileDescriptor
-
-var file_api_user_v2_school_disable_proto_rawDesc = []byte{
-	0x0a, 0x20, 0x61, 0x70, 0x69, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x2f, 0x76, 0x32, 0x2f, 0x73, 0x63,
-	0x68, 0x6f, 0x6f, 0x6c, 0x5f, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f,
-	0x74, 0x6f, 0x12, 0x0b, 0x61, 0x70, 0x69, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x1a,
-	0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f,
-	0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x17, 0x76,
-	0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65,
-	0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x44, 0x0a, 0x21, 0x47, 0x65, 0x74, 0x57, 0x72, 0x69,
-	0x73, 0x74, 0x77, 0x61, 0x74, 0x63, 0x68, 0x53, 0x63, 0x68, 0x6f, 0x6f, 0x6c, 0x44, 0x69, 0x73,
-	0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x06, 0x74,
-	0x69, 0x63, 0x6b, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04,
-	0x72, 0x02, 0x10, 0x01, 0x52, 0x06, 0x74, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x22, 0xa9, 0x02, 0x0a,
-	0x22, 0x47, 0x65, 0x74, 0x57, 0x72, 0x69, 0x73, 0x74, 0x77, 0x61, 0x74, 0x63, 0x68, 0x53, 0x63,
-	0x68, 0x6f, 0x6f, 0x6c, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f,
-	0x6e, 0x73, 0x65, 0x12, 0x65, 0x0a, 0x0e, 0x73, 0x63, 0x68, 0x6f, 0x6f, 0x6c, 0x44, 0x69, 0x73,
-	0x61, 0x62, 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x61, 0x70,
-	0x69, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x72, 0x69,
-	0x73, 0x74, 0x77, 0x61, 0x74, 0x63, 0x68, 0x53, 0x63, 0x68, 0x6f, 0x6f, 0x6c, 0x44, 0x69, 0x73,
-	0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x53, 0x63, 0x68,
-	0x6f, 0x6f, 0x6c, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x0e, 0x73, 0x63, 0x68, 0x6f,
-	0x6f, 0x6c, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x1a, 0x9b, 0x01, 0x0a, 0x0d, 0x53,
-	0x63, 0x68, 0x6f, 0x6f, 0x6c, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x10, 0x0a, 0x03,
-	0x63, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x63, 0x69, 0x64, 0x12, 0x18,
-	0x0a, 0x07, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52,
-	0x07, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x74, 0x61, 0x72,
-	0x74, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x74, 0x61,
-	0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d,
-	0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65,
-	0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08,
-	0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x06,
-	0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x69, 0x64, 0x22, 0x37, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x53,
-	0x63, 0x68, 0x6f, 0x6f, 0x6c, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75,
-	0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x03, 0x63, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
-	0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, 0x10, 0x01, 0xb0, 0x01, 0x01, 0x52, 0x03, 0x63, 0x69,
-	0x64, 0x22, 0x95, 0x02, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x53, 0x63, 0x68, 0x6f, 0x6f, 0x6c, 0x44,
-	0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5b,
-	0x0a, 0x0e, 0x73, 0x63, 0x68, 0x6f, 0x6f, 0x6c, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x73,
-	0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x75, 0x73, 0x65,
-	0x72, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x63, 0x68, 0x6f, 0x6f, 0x6c, 0x44, 0x69,
-	0x73, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x53, 0x63,
-	0x68, 0x6f, 0x6f, 0x6c, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x0e, 0x73, 0x63, 0x68,
-	0x6f, 0x6f, 0x6c, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x1a, 0x9b, 0x01, 0x0a, 0x0d,
-	0x53, 0x63, 0x68, 0x6f, 0x6f, 0x6c, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x10, 0x0a,
-	0x03, 0x63, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x63, 0x69, 0x64, 0x12,
-	0x18, 0x0a, 0x07, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
-	0x52, 0x07, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x74, 0x61,
-	0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x74,
-	0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x64, 0x54, 0x69,
-	0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d,
-	0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28,
-	0x08, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18,
-	0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x69, 0x64, 0x22, 0xb4, 0x01, 0x0a, 0x1a, 0x43, 0x72,
-	0x65, 0x61, 0x74, 0x65, 0x53, 0x63, 0x68, 0x6f, 0x6f, 0x6c, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c,
-	0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x03, 0x63, 0x69, 0x64, 0x18,
-	0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0xb0, 0x01, 0x01, 0x52,
-	0x03, 0x63, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x73, 0x18,
-	0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x73, 0x12, 0x25,
-	0x0a, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28,
-	0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72,
-	0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x21, 0x0a, 0x07, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65,
-	0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52,
-	0x07, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74,
-	0x75, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73,
-	0x22, 0x36, 0x0a, 0x1b, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x63, 0x68, 0x6f, 0x6f, 0x6c,
+var File_user_v2_school_disable_proto protoreflect.FileDescriptor
+
+var file_user_v2_school_disable_proto_rawDesc = []byte{
+	0x0a, 0x1c, 0x75, 0x73, 0x65, 0x72, 0x2f, 0x76, 0x32, 0x2f, 0x73, 0x63, 0x68, 0x6f, 0x6f, 0x6c,
+	0x5f, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0b,
+	0x61, 0x70, 0x69, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x1a, 0x1c, 0x67, 0x6f, 0x6f,
+	0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69,
+	0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x17, 0x76, 0x61, 0x6c, 0x69, 0x64,
+	0x61, 0x74, 0x65, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x70, 0x72, 0x6f,
+	0x74, 0x6f, 0x22, 0x44, 0x0a, 0x21, 0x47, 0x65, 0x74, 0x57, 0x72, 0x69, 0x73, 0x74, 0x77, 0x61,
+	0x74, 0x63, 0x68, 0x53, 0x63, 0x68, 0x6f, 0x6f, 0x6c, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65,
+	0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x06, 0x74, 0x69, 0x63, 0x6b, 0x65,
+	0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01,
+	0x52, 0x06, 0x74, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x22, 0xa9, 0x02, 0x0a, 0x22, 0x47, 0x65, 0x74,
+	0x57, 0x72, 0x69, 0x73, 0x74, 0x77, 0x61, 0x74, 0x63, 0x68, 0x53, 0x63, 0x68, 0x6f, 0x6f, 0x6c,
 	0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12,
-	0x17, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x42, 0x07, 0xfa, 0x42, 0x04,
-	0x22, 0x02, 0x20, 0x00, 0x52, 0x02, 0x69, 0x64, 0x22, 0xcf, 0x01, 0x0a, 0x1a, 0x55, 0x70, 0x64,
-	0x61, 0x74, 0x65, 0x53, 0x63, 0x68, 0x6f, 0x6f, 0x6c, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65,
-	0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x17, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20,
-	0x01, 0x28, 0x03, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x22, 0x02, 0x20, 0x00, 0x52, 0x02, 0x69, 0x64,
-	0x12, 0x1c, 0x0a, 0x03, 0x63, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa,
-	0x42, 0x07, 0x72, 0x05, 0x10, 0x01, 0xb0, 0x01, 0x01, 0x52, 0x03, 0x63, 0x69, 0x64, 0x12, 0x18,
-	0x0a, 0x07, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52,
-	0x07, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x73, 0x12, 0x25, 0x0a, 0x09, 0x73, 0x74, 0x61, 0x72,
-	0x74, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04,
-	0x72, 0x02, 0x10, 0x01, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12,
-	0x21, 0x0a, 0x07, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09,
-	0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x07, 0x65, 0x6e, 0x64, 0x54, 0x69,
-	0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x06, 0x20, 0x01,
-	0x28, 0x08, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x1d, 0x0a, 0x1b, 0x55, 0x70,
-	0x64, 0x61, 0x74, 0x65, 0x53, 0x63, 0x68, 0x6f, 0x6f, 0x6c, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c,
-	0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x35, 0x0a, 0x1a, 0x44, 0x65, 0x6c,
-	0x65, 0x74, 0x65, 0x53, 0x63, 0x68, 0x6f, 0x6f, 0x6c, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65,
-	0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x17, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20,
-	0x01, 0x28, 0x03, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x22, 0x02, 0x20, 0x00, 0x52, 0x02, 0x69, 0x64,
-	0x22, 0x1d, 0x0a, 0x1b, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x63, 0x68, 0x6f, 0x6f, 0x6c,
-	0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32,
-	0xe4, 0x06, 0x0a, 0x0d, 0x53, 0x63, 0x68, 0x6f, 0x6f, 0x6c, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c,
-	0x65, 0x12, 0xc0, 0x01, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x57, 0x72, 0x69, 0x73, 0x74, 0x77, 0x61,
+	0x65, 0x0a, 0x0e, 0x73, 0x63, 0x68, 0x6f, 0x6f, 0x6c, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65,
+	0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x75, 0x73,
+	0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x72, 0x69, 0x73, 0x74, 0x77, 0x61,
 	0x74, 0x63, 0x68, 0x53, 0x63, 0x68, 0x6f, 0x6f, 0x6c, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65,
-	0x12, 0x2e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x47,
-	0x65, 0x74, 0x57, 0x72, 0x69, 0x73, 0x74, 0x77, 0x61, 0x74, 0x63, 0x68, 0x53, 0x63, 0x68, 0x6f,
-	0x6f, 0x6c, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
-	0x1a, 0x2f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x47,
-	0x65, 0x74, 0x57, 0x72, 0x69, 0x73, 0x74, 0x77, 0x61, 0x74, 0x63, 0x68, 0x53, 0x63, 0x68, 0x6f,
-	0x6f, 0x6c, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
-	0x65, 0x22, 0x41, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3b, 0x12, 0x39, 0x2f, 0x61, 0x70, 0x69, 0x73,
+	0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x53, 0x63, 0x68, 0x6f, 0x6f, 0x6c, 0x44,
+	0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x0e, 0x73, 0x63, 0x68, 0x6f, 0x6f, 0x6c, 0x44, 0x69,
+	0x73, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x1a, 0x9b, 0x01, 0x0a, 0x0d, 0x53, 0x63, 0x68, 0x6f, 0x6f,
+	0x6c, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x63, 0x69, 0x64, 0x18,
+	0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x63, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65,
+	0x70, 0x65, 0x61, 0x74, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x70,
+	0x65, 0x61, 0x74, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d,
+	0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69,
+	0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20,
+	0x01, 0x28, 0x09, 0x52, 0x07, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06,
+	0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x73, 0x74,
+	0x61, 0x74, 0x75, 0x73, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03,
+	0x52, 0x02, 0x69, 0x64, 0x22, 0x37, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x53, 0x63, 0x68, 0x6f, 0x6f,
+	0x6c, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12,
+	0x1c, 0x0a, 0x03, 0x63, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42,
+	0x07, 0x72, 0x05, 0x10, 0x01, 0xb0, 0x01, 0x01, 0x52, 0x03, 0x63, 0x69, 0x64, 0x22, 0x95, 0x02,
+	0x0a, 0x18, 0x47, 0x65, 0x74, 0x53, 0x63, 0x68, 0x6f, 0x6f, 0x6c, 0x44, 0x69, 0x73, 0x61, 0x62,
+	0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5b, 0x0a, 0x0e, 0x73, 0x63,
+	0x68, 0x6f, 0x6f, 0x6c, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03,
+	0x28, 0x0b, 0x32, 0x33, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32,
+	0x2e, 0x47, 0x65, 0x74, 0x53, 0x63, 0x68, 0x6f, 0x6f, 0x6c, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c,
+	0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x53, 0x63, 0x68, 0x6f, 0x6f, 0x6c,
+	0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x0e, 0x73, 0x63, 0x68, 0x6f, 0x6f, 0x6c, 0x44,
+	0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x1a, 0x9b, 0x01, 0x0a, 0x0d, 0x53, 0x63, 0x68, 0x6f,
+	0x6f, 0x6c, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x63, 0x69, 0x64,
+	0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x63, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x72,
+	0x65, 0x70, 0x65, 0x61, 0x74, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65,
+	0x70, 0x65, 0x61, 0x74, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69,
+	0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54,
+	0x69, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x04,
+	0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x16, 0x0a,
+	0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x73,
+	0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28,
+	0x03, 0x52, 0x02, 0x69, 0x64, 0x22, 0xb4, 0x01, 0x0a, 0x1a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65,
+	0x53, 0x63, 0x68, 0x6f, 0x6f, 0x6c, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x71,
+	0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x03, 0x63, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28,
+	0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0xb0, 0x01, 0x01, 0x52, 0x03, 0x63, 0x69, 0x64,
+	0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28,
+	0x09, 0x52, 0x07, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x73, 0x12, 0x25, 0x0a, 0x09, 0x73, 0x74,
+	0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa,
+	0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d,
+	0x65, 0x12, 0x21, 0x0a, 0x07, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01,
+	0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x07, 0x65, 0x6e, 0x64,
+	0x54, 0x69, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x05,
+	0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x36, 0x0a, 0x1b,
+	0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x63, 0x68, 0x6f, 0x6f, 0x6c, 0x44, 0x69, 0x73, 0x61,
+	0x62, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x17, 0x0a, 0x02, 0x69,
+	0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x22, 0x02, 0x20, 0x00,
+	0x52, 0x02, 0x69, 0x64, 0x22, 0xcf, 0x01, 0x0a, 0x1a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53,
+	0x63, 0x68, 0x6f, 0x6f, 0x6c, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75,
+	0x65, 0x73, 0x74, 0x12, 0x17, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x42,
+	0x07, 0xfa, 0x42, 0x04, 0x22, 0x02, 0x20, 0x00, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1c, 0x0a, 0x03,
+	0x63, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05,
+	0x10, 0x01, 0xb0, 0x01, 0x01, 0x52, 0x03, 0x63, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65,
+	0x70, 0x65, 0x61, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x70,
+	0x65, 0x61, 0x74, 0x73, 0x12, 0x25, 0x0a, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d,
+	0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01,
+	0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x21, 0x0a, 0x07, 0x65,
+	0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42,
+	0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x07, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x16,
+	0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06,
+	0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x1d, 0x0a, 0x1b, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65,
+	0x53, 0x63, 0x68, 0x6f, 0x6f, 0x6c, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x73,
+	0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x35, 0x0a, 0x1a, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53,
+	0x63, 0x68, 0x6f, 0x6f, 0x6c, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75,
+	0x65, 0x73, 0x74, 0x12, 0x17, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x42,
+	0x07, 0xfa, 0x42, 0x04, 0x22, 0x02, 0x20, 0x00, 0x52, 0x02, 0x69, 0x64, 0x22, 0x1d, 0x0a, 0x1b,
+	0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x63, 0x68, 0x6f, 0x6f, 0x6c, 0x44, 0x69, 0x73, 0x61,
+	0x62, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0xe4, 0x06, 0x0a, 0x0d,
+	0x53, 0x63, 0x68, 0x6f, 0x6f, 0x6c, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x12, 0xc0, 0x01,
+	0x0a, 0x1a, 0x47, 0x65, 0x74, 0x57, 0x72, 0x69, 0x73, 0x74, 0x77, 0x61, 0x74, 0x63, 0x68, 0x53,
+	0x63, 0x68, 0x6f, 0x6f, 0x6c, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x2e, 0x2e, 0x61,
+	0x70, 0x69, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x72,
+	0x69, 0x73, 0x74, 0x77, 0x61, 0x74, 0x63, 0x68, 0x53, 0x63, 0x68, 0x6f, 0x6f, 0x6c, 0x44, 0x69,
+	0x73, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x61,
+	0x70, 0x69, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x72,
+	0x69, 0x73, 0x74, 0x77, 0x61, 0x74, 0x63, 0x68, 0x53, 0x63, 0x68, 0x6f, 0x6f, 0x6c, 0x44, 0x69,
+	0x73, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x41, 0x82,
+	0xd3, 0xe4, 0x93, 0x02, 0x3b, 0x12, 0x39, 0x2f, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x76, 0x32, 0x2f,
+	0x75, 0x73, 0x65, 0x72, 0x63, 0x74, 0x78, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x2f, 0x63, 0x68, 0x69,
+	0x6c, 0x64, 0x2f, 0x73, 0x63, 0x68, 0x6f, 0x6f, 0x6c, 0x2d, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c,
+	0x65, 0x2f, 0x77, 0x72, 0x69, 0x73, 0x74, 0x77, 0x61, 0x74, 0x63, 0x68, 0x2f, 0x67, 0x65, 0x74,
+	0x12, 0x97, 0x01, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x53, 0x63, 0x68, 0x6f, 0x6f, 0x6c, 0x44, 0x69,
+	0x73, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x24, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x75, 0x73, 0x65, 0x72,
+	0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x63, 0x68, 0x6f, 0x6f, 0x6c, 0x44, 0x69, 0x73,
+	0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x61, 0x70,
+	0x69, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x63, 0x68,
+	0x6f, 0x6f, 0x6c, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
+	0x73, 0x65, 0x22, 0x36, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x30, 0x12, 0x2e, 0x2f, 0x61, 0x70, 0x69,
+	0x73, 0x2f, 0x76, 0x32, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x63, 0x74, 0x78, 0x2f, 0x75, 0x73, 0x65,
+	0x72, 0x2f, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x2f, 0x73, 0x63, 0x68, 0x6f, 0x6f, 0x6c, 0x2d, 0x64,
+	0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x2f, 0x67, 0x65, 0x74, 0x12, 0xa6, 0x01, 0x0a, 0x13, 0x43,
+	0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x63, 0x68, 0x6f, 0x6f, 0x6c, 0x44, 0x69, 0x73, 0x61, 0x62,
+	0x6c, 0x65, 0x12, 0x27, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32,
+	0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x63, 0x68, 0x6f, 0x6f, 0x6c, 0x44, 0x69, 0x73,
+	0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x61, 0x70,
+	0x69, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65,
+	0x53, 0x63, 0x68, 0x6f, 0x6f, 0x6c, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x73,
+	0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x36, 0x3a, 0x01, 0x2a,
+	0x22, 0x31, 0x2f, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x76, 0x32, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x63,
+	0x74, 0x78, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x2f, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x2f, 0x73, 0x63,
+	0x68, 0x6f, 0x6f, 0x6c, 0x2d, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x2f, 0x63, 0x72, 0x65,
+	0x61, 0x74, 0x65, 0x12, 0xa6, 0x01, 0x0a, 0x13, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x63,
+	0x68, 0x6f, 0x6f, 0x6c, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x27, 0x2e, 0x61, 0x70,
+	0x69, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65,
+	0x53, 0x63, 0x68, 0x6f, 0x6f, 0x6c, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x71,
+	0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e,
+	0x76, 0x32, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x63, 0x68, 0x6f, 0x6f, 0x6c, 0x44,
+	0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3c,
+	0x82, 0xd3, 0xe4, 0x93, 0x02, 0x36, 0x3a, 0x01, 0x2a, 0x22, 0x31, 0x2f, 0x61, 0x70, 0x69, 0x73,
 	0x2f, 0x76, 0x32, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x63, 0x74, 0x78, 0x2f, 0x75, 0x73, 0x65, 0x72,
 	0x2f, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x2f, 0x73, 0x63, 0x68, 0x6f, 0x6f, 0x6c, 0x2d, 0x64, 0x69,
-	0x73, 0x61, 0x62, 0x6c, 0x65, 0x2f, 0x77, 0x72, 0x69, 0x73, 0x74, 0x77, 0x61, 0x74, 0x63, 0x68,
-	0x2f, 0x67, 0x65, 0x74, 0x12, 0x97, 0x01, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x53, 0x63, 0x68, 0x6f,
-	0x6f, 0x6c, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x24, 0x2e, 0x61, 0x70, 0x69, 0x2e,
-	0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x63, 0x68, 0x6f, 0x6f,
-	0x6c, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
-	0x25, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65,
-	0x74, 0x53, 0x63, 0x68, 0x6f, 0x6f, 0x6c, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65,
-	0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x36, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x30, 0x12, 0x2e,
-	0x2f, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x76, 0x32, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x63, 0x74, 0x78,
-	0x2f, 0x75, 0x73, 0x65, 0x72, 0x2f, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x2f, 0x73, 0x63, 0x68, 0x6f,
-	0x6f, 0x6c, 0x2d, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x2f, 0x67, 0x65, 0x74, 0x12, 0xa6,
-	0x01, 0x0a, 0x13, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x63, 0x68, 0x6f, 0x6f, 0x6c, 0x44,
-	0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x27, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x75, 0x73, 0x65,
-	0x72, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x63, 0x68, 0x6f, 0x6f,
-	0x6c, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
-	0x28, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x72,
-	0x65, 0x61, 0x74, 0x65, 0x53, 0x63, 0x68, 0x6f, 0x6f, 0x6c, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c,
-	0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3c, 0x82, 0xd3, 0xe4, 0x93, 0x02,
-	0x36, 0x3a, 0x01, 0x2a, 0x22, 0x31, 0x2f, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x76, 0x32, 0x2f, 0x75,
-	0x73, 0x65, 0x72, 0x63, 0x74, 0x78, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x2f, 0x63, 0x68, 0x69, 0x6c,
-	0x64, 0x2f, 0x73, 0x63, 0x68, 0x6f, 0x6f, 0x6c, 0x2d, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65,
-	0x2f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0xa6, 0x01, 0x0a, 0x13, 0x55, 0x70, 0x64, 0x61,
-	0x74, 0x65, 0x53, 0x63, 0x68, 0x6f, 0x6f, 0x6c, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x12,
-	0x27, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x55, 0x70,
-	0x64, 0x61, 0x74, 0x65, 0x53, 0x63, 0x68, 0x6f, 0x6f, 0x6c, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c,
-	0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x75,
-	0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x63, 0x68,
-	0x6f, 0x6f, 0x6c, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
-	0x73, 0x65, 0x22, 0x3c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x36, 0x3a, 0x01, 0x2a, 0x22, 0x31, 0x2f,
-	0x61, 0x70, 0x69, 0x73, 0x2f, 0x76, 0x32, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x63, 0x74, 0x78, 0x2f,
-	0x75, 0x73, 0x65, 0x72, 0x2f, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x2f, 0x73, 0x63, 0x68, 0x6f, 0x6f,
-	0x6c, 0x2d, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x2f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65,
-	0x12, 0xa3, 0x01, 0x0a, 0x13, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x63, 0x68, 0x6f, 0x6f,
-	0x6c, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x27, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x75,
-	0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x63, 0x68,
-	0x6f, 0x6f, 0x6c, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
-	0x74, 0x1a, 0x28, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e,
-	0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x63, 0x68, 0x6f, 0x6f, 0x6c, 0x44, 0x69, 0x73, 0x61,
-	0x62, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x39, 0x82, 0xd3, 0xe4,
-	0x93, 0x02, 0x33, 0x12, 0x31, 0x2f, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x76, 0x32, 0x2f, 0x75, 0x73,
-	0x65, 0x72, 0x63, 0x74, 0x78, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x2f, 0x63, 0x68, 0x69, 0x6c, 0x64,
-	0x2f, 0x73, 0x63, 0x68, 0x6f, 0x6f, 0x6c, 0x2d, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x2f,
-	0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x42, 0x30, 0x0a, 0x0b, 0x61, 0x70, 0x69, 0x2e, 0x75, 0x73,
-	0x65, 0x72, 0x2e, 0x76, 0x32, 0x50, 0x01, 0x5a, 0x1f, 0x73, 0x69, 0x6b, 0x65, 0x79, 0x2f, 0x77,
-	0x33, 0x30, 0x33, 0x61, 0x2f, 0x68, 0x74, 0x74, 0x70, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x75, 0x73,
-	0x65, 0x72, 0x2f, 0x76, 0x32, 0x3b, 0x76, 0x32, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+	0x73, 0x61, 0x62, 0x6c, 0x65, 0x2f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0xa3, 0x01, 0x0a,
+	0x13, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x63, 0x68, 0x6f, 0x6f, 0x6c, 0x44, 0x69, 0x73,
+	0x61, 0x62, 0x6c, 0x65, 0x12, 0x27, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e,
+	0x76, 0x32, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x63, 0x68, 0x6f, 0x6f, 0x6c, 0x44,
+	0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e,
+	0x61, 0x70, 0x69, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, 0x6c, 0x65,
+	0x74, 0x65, 0x53, 0x63, 0x68, 0x6f, 0x6f, 0x6c, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x52,
+	0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x39, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x33, 0x12,
+	0x31, 0x2f, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x76, 0x32, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x63, 0x74,
+	0x78, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x2f, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x2f, 0x73, 0x63, 0x68,
+	0x6f, 0x6f, 0x6c, 0x2d, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x2f, 0x64, 0x65, 0x6c, 0x65,
+	0x74, 0x65, 0x42, 0x30, 0x0a, 0x0b, 0x61, 0x70, 0x69, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76,
+	0x32, 0x50, 0x01, 0x5a, 0x1f, 0x73, 0x69, 0x6b, 0x65, 0x79, 0x2f, 0x77, 0x33, 0x30, 0x33, 0x61,
+	0x2f, 0x68, 0x74, 0x74, 0x70, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x2f, 0x76,
+	0x32, 0x3b, 0x76, 0x32, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
 }
 
 var (
-	file_api_user_v2_school_disable_proto_rawDescOnce sync.Once
-	file_api_user_v2_school_disable_proto_rawDescData = file_api_user_v2_school_disable_proto_rawDesc
+	file_user_v2_school_disable_proto_rawDescOnce sync.Once
+	file_user_v2_school_disable_proto_rawDescData = file_user_v2_school_disable_proto_rawDesc
 )
 
-func file_api_user_v2_school_disable_proto_rawDescGZIP() []byte {
-	file_api_user_v2_school_disable_proto_rawDescOnce.Do(func() {
-		file_api_user_v2_school_disable_proto_rawDescData = protoimpl.X.CompressGZIP(file_api_user_v2_school_disable_proto_rawDescData)
+func file_user_v2_school_disable_proto_rawDescGZIP() []byte {
+	file_user_v2_school_disable_proto_rawDescOnce.Do(func() {
+		file_user_v2_school_disable_proto_rawDescData = protoimpl.X.CompressGZIP(file_user_v2_school_disable_proto_rawDescData)
 	})
-	return file_api_user_v2_school_disable_proto_rawDescData
+	return file_user_v2_school_disable_proto_rawDescData
 }
 
-var file_api_user_v2_school_disable_proto_msgTypes = make([]protoimpl.MessageInfo, 12)
-var file_api_user_v2_school_disable_proto_goTypes = []any{
+var file_user_v2_school_disable_proto_msgTypes = make([]protoimpl.MessageInfo, 12)
+var file_user_v2_school_disable_proto_goTypes = []any{
 	(*GetWristwatchSchoolDisableRequest)(nil),                // 0: api.user.v2.GetWristwatchSchoolDisableRequest
 	(*GetWristwatchSchoolDisableResponse)(nil),               // 1: api.user.v2.GetWristwatchSchoolDisableResponse
 	(*GetSchoolDisableRequest)(nil),                          // 2: api.user.v2.GetSchoolDisableRequest
@@ -906,7 +906,7 @@ var file_api_user_v2_school_disable_proto_goTypes = []any{
 	(*GetWristwatchSchoolDisableResponse_SchoolDisable)(nil), // 10: api.user.v2.GetWristwatchSchoolDisableResponse.SchoolDisable
 	(*GetSchoolDisableResponse_SchoolDisable)(nil),           // 11: api.user.v2.GetSchoolDisableResponse.SchoolDisable
 }
-var file_api_user_v2_school_disable_proto_depIdxs = []int32{
+var file_user_v2_school_disable_proto_depIdxs = []int32{
 	10, // 0: api.user.v2.GetWristwatchSchoolDisableResponse.schoolDisables:type_name -> api.user.v2.GetWristwatchSchoolDisableResponse.SchoolDisable
 	11, // 1: api.user.v2.GetSchoolDisableResponse.schoolDisables:type_name -> api.user.v2.GetSchoolDisableResponse.SchoolDisable
 	0,  // 2: api.user.v2.SchoolDisable.GetWristwatchSchoolDisable:input_type -> api.user.v2.GetWristwatchSchoolDisableRequest
@@ -926,13 +926,13 @@ var file_api_user_v2_school_disable_proto_depIdxs = []int32{
 	0,  // [0:2] is the sub-list for field type_name
 }
 
-func init() { file_api_user_v2_school_disable_proto_init() }
-func file_api_user_v2_school_disable_proto_init() {
-	if File_api_user_v2_school_disable_proto != nil {
+func init() { file_user_v2_school_disable_proto_init() }
+func file_user_v2_school_disable_proto_init() {
+	if File_user_v2_school_disable_proto != nil {
 		return
 	}
 	if !protoimpl.UnsafeEnabled {
-		file_api_user_v2_school_disable_proto_msgTypes[0].Exporter = func(v any, i int) any {
+		file_user_v2_school_disable_proto_msgTypes[0].Exporter = func(v any, i int) any {
 			switch v := v.(*GetWristwatchSchoolDisableRequest); i {
 			case 0:
 				return &v.state
@@ -944,7 +944,7 @@ func file_api_user_v2_school_disable_proto_init() {
 				return nil
 			}
 		}
-		file_api_user_v2_school_disable_proto_msgTypes[1].Exporter = func(v any, i int) any {
+		file_user_v2_school_disable_proto_msgTypes[1].Exporter = func(v any, i int) any {
 			switch v := v.(*GetWristwatchSchoolDisableResponse); i {
 			case 0:
 				return &v.state
@@ -956,7 +956,7 @@ func file_api_user_v2_school_disable_proto_init() {
 				return nil
 			}
 		}
-		file_api_user_v2_school_disable_proto_msgTypes[2].Exporter = func(v any, i int) any {
+		file_user_v2_school_disable_proto_msgTypes[2].Exporter = func(v any, i int) any {
 			switch v := v.(*GetSchoolDisableRequest); i {
 			case 0:
 				return &v.state
@@ -968,7 +968,7 @@ func file_api_user_v2_school_disable_proto_init() {
 				return nil
 			}
 		}
-		file_api_user_v2_school_disable_proto_msgTypes[3].Exporter = func(v any, i int) any {
+		file_user_v2_school_disable_proto_msgTypes[3].Exporter = func(v any, i int) any {
 			switch v := v.(*GetSchoolDisableResponse); i {
 			case 0:
 				return &v.state
@@ -980,7 +980,7 @@ func file_api_user_v2_school_disable_proto_init() {
 				return nil
 			}
 		}
-		file_api_user_v2_school_disable_proto_msgTypes[4].Exporter = func(v any, i int) any {
+		file_user_v2_school_disable_proto_msgTypes[4].Exporter = func(v any, i int) any {
 			switch v := v.(*CreateSchoolDisableRequest); i {
 			case 0:
 				return &v.state
@@ -992,7 +992,7 @@ func file_api_user_v2_school_disable_proto_init() {
 				return nil
 			}
 		}
-		file_api_user_v2_school_disable_proto_msgTypes[5].Exporter = func(v any, i int) any {
+		file_user_v2_school_disable_proto_msgTypes[5].Exporter = func(v any, i int) any {
 			switch v := v.(*CreateSchoolDisableResponse); i {
 			case 0:
 				return &v.state
@@ -1004,7 +1004,7 @@ func file_api_user_v2_school_disable_proto_init() {
 				return nil
 			}
 		}
-		file_api_user_v2_school_disable_proto_msgTypes[6].Exporter = func(v any, i int) any {
+		file_user_v2_school_disable_proto_msgTypes[6].Exporter = func(v any, i int) any {
 			switch v := v.(*UpdateSchoolDisableRequest); i {
 			case 0:
 				return &v.state
@@ -1016,7 +1016,7 @@ func file_api_user_v2_school_disable_proto_init() {
 				return nil
 			}
 		}
-		file_api_user_v2_school_disable_proto_msgTypes[7].Exporter = func(v any, i int) any {
+		file_user_v2_school_disable_proto_msgTypes[7].Exporter = func(v any, i int) any {
 			switch v := v.(*UpdateSchoolDisableResponse); i {
 			case 0:
 				return &v.state
@@ -1028,7 +1028,7 @@ func file_api_user_v2_school_disable_proto_init() {
 				return nil
 			}
 		}
-		file_api_user_v2_school_disable_proto_msgTypes[8].Exporter = func(v any, i int) any {
+		file_user_v2_school_disable_proto_msgTypes[8].Exporter = func(v any, i int) any {
 			switch v := v.(*DeleteSchoolDisableRequest); i {
 			case 0:
 				return &v.state
@@ -1040,7 +1040,7 @@ func file_api_user_v2_school_disable_proto_init() {
 				return nil
 			}
 		}
-		file_api_user_v2_school_disable_proto_msgTypes[9].Exporter = func(v any, i int) any {
+		file_user_v2_school_disable_proto_msgTypes[9].Exporter = func(v any, i int) any {
 			switch v := v.(*DeleteSchoolDisableResponse); i {
 			case 0:
 				return &v.state
@@ -1052,7 +1052,7 @@ func file_api_user_v2_school_disable_proto_init() {
 				return nil
 			}
 		}
-		file_api_user_v2_school_disable_proto_msgTypes[10].Exporter = func(v any, i int) any {
+		file_user_v2_school_disable_proto_msgTypes[10].Exporter = func(v any, i int) any {
 			switch v := v.(*GetWristwatchSchoolDisableResponse_SchoolDisable); i {
 			case 0:
 				return &v.state
@@ -1064,7 +1064,7 @@ func file_api_user_v2_school_disable_proto_init() {
 				return nil
 			}
 		}
-		file_api_user_v2_school_disable_proto_msgTypes[11].Exporter = func(v any, i int) any {
+		file_user_v2_school_disable_proto_msgTypes[11].Exporter = func(v any, i int) any {
 			switch v := v.(*GetSchoolDisableResponse_SchoolDisable); i {
 			case 0:
 				return &v.state
@@ -1081,18 +1081,18 @@ func file_api_user_v2_school_disable_proto_init() {
 	out := protoimpl.TypeBuilder{
 		File: protoimpl.DescBuilder{
 			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
-			RawDescriptor: file_api_user_v2_school_disable_proto_rawDesc,
+			RawDescriptor: file_user_v2_school_disable_proto_rawDesc,
 			NumEnums:      0,
 			NumMessages:   12,
 			NumExtensions: 0,
 			NumServices:   1,
 		},
-		GoTypes:           file_api_user_v2_school_disable_proto_goTypes,
-		DependencyIndexes: file_api_user_v2_school_disable_proto_depIdxs,
-		MessageInfos:      file_api_user_v2_school_disable_proto_msgTypes,
+		GoTypes:           file_user_v2_school_disable_proto_goTypes,
+		DependencyIndexes: file_user_v2_school_disable_proto_depIdxs,
+		MessageInfos:      file_user_v2_school_disable_proto_msgTypes,
 	}.Build()
-	File_api_user_v2_school_disable_proto = out.File
-	file_api_user_v2_school_disable_proto_rawDesc = nil
-	file_api_user_v2_school_disable_proto_goTypes = nil
-	file_api_user_v2_school_disable_proto_depIdxs = nil
+	File_user_v2_school_disable_proto = out.File
+	file_user_v2_school_disable_proto_rawDesc = nil
+	file_user_v2_school_disable_proto_goTypes = nil
+	file_user_v2_school_disable_proto_depIdxs = nil
 }

+ 245 - 245
api/user/v2/user.pb.go

@@ -2,7 +2,7 @@
 // versions:
 // 	protoc-gen-go v1.34.2
 // 	protoc        v4.25.3
-// source: api/user/v2/user.proto
+// source: user/v2/user.proto
 
 package v2
 
@@ -66,11 +66,11 @@ func (x SignInResponse_Location_PointType) String() string {
 }
 
 func (SignInResponse_Location_PointType) Descriptor() protoreflect.EnumDescriptor {
-	return file_api_user_v2_user_proto_enumTypes[0].Descriptor()
+	return file_user_v2_user_proto_enumTypes[0].Descriptor()
 }
 
 func (SignInResponse_Location_PointType) Type() protoreflect.EnumType {
-	return &file_api_user_v2_user_proto_enumTypes[0]
+	return &file_user_v2_user_proto_enumTypes[0]
 }
 
 func (x SignInResponse_Location_PointType) Number() protoreflect.EnumNumber {
@@ -79,7 +79,7 @@ func (x SignInResponse_Location_PointType) Number() protoreflect.EnumNumber {
 
 // Deprecated: Use SignInResponse_Location_PointType.Descriptor instead.
 func (SignInResponse_Location_PointType) EnumDescriptor() ([]byte, []int) {
-	return file_api_user_v2_user_proto_rawDescGZIP(), []int{7, 1, 0}
+	return file_user_v2_user_proto_rawDescGZIP(), []int{7, 1, 0}
 }
 
 // 重设密码 Request
@@ -97,7 +97,7 @@ type ResetPasswordRequest struct {
 func (x *ResetPasswordRequest) Reset() {
 	*x = ResetPasswordRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_api_user_v2_user_proto_msgTypes[0]
+		mi := &file_user_v2_user_proto_msgTypes[0]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -110,7 +110,7 @@ func (x *ResetPasswordRequest) String() string {
 func (*ResetPasswordRequest) ProtoMessage() {}
 
 func (x *ResetPasswordRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_api_user_v2_user_proto_msgTypes[0]
+	mi := &file_user_v2_user_proto_msgTypes[0]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -123,7 +123,7 @@ func (x *ResetPasswordRequest) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use ResetPasswordRequest.ProtoReflect.Descriptor instead.
 func (*ResetPasswordRequest) Descriptor() ([]byte, []int) {
-	return file_api_user_v2_user_proto_rawDescGZIP(), []int{0}
+	return file_user_v2_user_proto_rawDescGZIP(), []int{0}
 }
 
 func (x *ResetPasswordRequest) GetOldPassword() string {
@@ -150,7 +150,7 @@ type ResetPasswordResponse struct {
 func (x *ResetPasswordResponse) Reset() {
 	*x = ResetPasswordResponse{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_api_user_v2_user_proto_msgTypes[1]
+		mi := &file_user_v2_user_proto_msgTypes[1]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -163,7 +163,7 @@ func (x *ResetPasswordResponse) String() string {
 func (*ResetPasswordResponse) ProtoMessage() {}
 
 func (x *ResetPasswordResponse) ProtoReflect() protoreflect.Message {
-	mi := &file_api_user_v2_user_proto_msgTypes[1]
+	mi := &file_user_v2_user_proto_msgTypes[1]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -176,7 +176,7 @@ func (x *ResetPasswordResponse) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use ResetPasswordResponse.ProtoReflect.Descriptor instead.
 func (*ResetPasswordResponse) Descriptor() ([]byte, []int) {
-	return file_api_user_v2_user_proto_rawDescGZIP(), []int{1}
+	return file_user_v2_user_proto_rawDescGZIP(), []int{1}
 }
 
 // 找回密码 Request
@@ -194,7 +194,7 @@ type RetrievePasswordRequest struct {
 func (x *RetrievePasswordRequest) Reset() {
 	*x = RetrievePasswordRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_api_user_v2_user_proto_msgTypes[2]
+		mi := &file_user_v2_user_proto_msgTypes[2]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -207,7 +207,7 @@ func (x *RetrievePasswordRequest) String() string {
 func (*RetrievePasswordRequest) ProtoMessage() {}
 
 func (x *RetrievePasswordRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_api_user_v2_user_proto_msgTypes[2]
+	mi := &file_user_v2_user_proto_msgTypes[2]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -220,7 +220,7 @@ func (x *RetrievePasswordRequest) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use RetrievePasswordRequest.ProtoReflect.Descriptor instead.
 func (*RetrievePasswordRequest) Descriptor() ([]byte, []int) {
-	return file_api_user_v2_user_proto_rawDescGZIP(), []int{2}
+	return file_user_v2_user_proto_rawDescGZIP(), []int{2}
 }
 
 func (x *RetrievePasswordRequest) GetEmail() string {
@@ -247,7 +247,7 @@ type RetrievePasswordResponse struct {
 func (x *RetrievePasswordResponse) Reset() {
 	*x = RetrievePasswordResponse{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_api_user_v2_user_proto_msgTypes[3]
+		mi := &file_user_v2_user_proto_msgTypes[3]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -260,7 +260,7 @@ func (x *RetrievePasswordResponse) String() string {
 func (*RetrievePasswordResponse) ProtoMessage() {}
 
 func (x *RetrievePasswordResponse) ProtoReflect() protoreflect.Message {
-	mi := &file_api_user_v2_user_proto_msgTypes[3]
+	mi := &file_user_v2_user_proto_msgTypes[3]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -273,7 +273,7 @@ func (x *RetrievePasswordResponse) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use RetrievePasswordResponse.ProtoReflect.Descriptor instead.
 func (*RetrievePasswordResponse) Descriptor() ([]byte, []int) {
-	return file_api_user_v2_user_proto_rawDescGZIP(), []int{3}
+	return file_user_v2_user_proto_rawDescGZIP(), []int{3}
 }
 
 // 注销账号 Request
@@ -289,7 +289,7 @@ type UnregisterRequest struct {
 func (x *UnregisterRequest) Reset() {
 	*x = UnregisterRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_api_user_v2_user_proto_msgTypes[4]
+		mi := &file_user_v2_user_proto_msgTypes[4]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -302,7 +302,7 @@ func (x *UnregisterRequest) String() string {
 func (*UnregisterRequest) ProtoMessage() {}
 
 func (x *UnregisterRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_api_user_v2_user_proto_msgTypes[4]
+	mi := &file_user_v2_user_proto_msgTypes[4]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -315,7 +315,7 @@ func (x *UnregisterRequest) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use UnregisterRequest.ProtoReflect.Descriptor instead.
 func (*UnregisterRequest) Descriptor() ([]byte, []int) {
-	return file_api_user_v2_user_proto_rawDescGZIP(), []int{4}
+	return file_user_v2_user_proto_rawDescGZIP(), []int{4}
 }
 
 func (x *UnregisterRequest) GetPassword() string {
@@ -335,7 +335,7 @@ type UnregisterResponse struct {
 func (x *UnregisterResponse) Reset() {
 	*x = UnregisterResponse{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_api_user_v2_user_proto_msgTypes[5]
+		mi := &file_user_v2_user_proto_msgTypes[5]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -348,7 +348,7 @@ func (x *UnregisterResponse) String() string {
 func (*UnregisterResponse) ProtoMessage() {}
 
 func (x *UnregisterResponse) ProtoReflect() protoreflect.Message {
-	mi := &file_api_user_v2_user_proto_msgTypes[5]
+	mi := &file_user_v2_user_proto_msgTypes[5]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -361,7 +361,7 @@ func (x *UnregisterResponse) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use UnregisterResponse.ProtoReflect.Descriptor instead.
 func (*UnregisterResponse) Descriptor() ([]byte, []int) {
-	return file_api_user_v2_user_proto_rawDescGZIP(), []int{5}
+	return file_user_v2_user_proto_rawDescGZIP(), []int{5}
 }
 
 // 登录 Request
@@ -385,7 +385,7 @@ type SignInRequest struct {
 func (x *SignInRequest) Reset() {
 	*x = SignInRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_api_user_v2_user_proto_msgTypes[6]
+		mi := &file_user_v2_user_proto_msgTypes[6]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -398,7 +398,7 @@ func (x *SignInRequest) String() string {
 func (*SignInRequest) ProtoMessage() {}
 
 func (x *SignInRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_api_user_v2_user_proto_msgTypes[6]
+	mi := &file_user_v2_user_proto_msgTypes[6]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -411,7 +411,7 @@ func (x *SignInRequest) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use SignInRequest.ProtoReflect.Descriptor instead.
 func (*SignInRequest) Descriptor() ([]byte, []int) {
-	return file_api_user_v2_user_proto_rawDescGZIP(), []int{6}
+	return file_user_v2_user_proto_rawDescGZIP(), []int{6}
 }
 
 func (x *SignInRequest) GetPhone() string {
@@ -466,7 +466,7 @@ type SignInResponse struct {
 func (x *SignInResponse) Reset() {
 	*x = SignInResponse{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_api_user_v2_user_proto_msgTypes[7]
+		mi := &file_user_v2_user_proto_msgTypes[7]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -479,7 +479,7 @@ func (x *SignInResponse) String() string {
 func (*SignInResponse) ProtoMessage() {}
 
 func (x *SignInResponse) ProtoReflect() protoreflect.Message {
-	mi := &file_api_user_v2_user_proto_msgTypes[7]
+	mi := &file_user_v2_user_proto_msgTypes[7]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -492,7 +492,7 @@ func (x *SignInResponse) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use SignInResponse.ProtoReflect.Descriptor instead.
 func (*SignInResponse) Descriptor() ([]byte, []int) {
-	return file_api_user_v2_user_proto_rawDescGZIP(), []int{7}
+	return file_user_v2_user_proto_rawDescGZIP(), []int{7}
 }
 
 func (x *SignInResponse) GetToken() string {
@@ -536,7 +536,7 @@ type SignUpRequest struct {
 func (x *SignUpRequest) Reset() {
 	*x = SignUpRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_api_user_v2_user_proto_msgTypes[8]
+		mi := &file_user_v2_user_proto_msgTypes[8]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -549,7 +549,7 @@ func (x *SignUpRequest) String() string {
 func (*SignUpRequest) ProtoMessage() {}
 
 func (x *SignUpRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_api_user_v2_user_proto_msgTypes[8]
+	mi := &file_user_v2_user_proto_msgTypes[8]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -562,7 +562,7 @@ func (x *SignUpRequest) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use SignUpRequest.ProtoReflect.Descriptor instead.
 func (*SignUpRequest) Descriptor() ([]byte, []int) {
-	return file_api_user_v2_user_proto_rawDescGZIP(), []int{8}
+	return file_user_v2_user_proto_rawDescGZIP(), []int{8}
 }
 
 func (x *SignUpRequest) GetPhone() string {
@@ -609,7 +609,7 @@ type SignUpResponse struct {
 func (x *SignUpResponse) Reset() {
 	*x = SignUpResponse{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_api_user_v2_user_proto_msgTypes[9]
+		mi := &file_user_v2_user_proto_msgTypes[9]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -622,7 +622,7 @@ func (x *SignUpResponse) String() string {
 func (*SignUpResponse) ProtoMessage() {}
 
 func (x *SignUpResponse) ProtoReflect() protoreflect.Message {
-	mi := &file_api_user_v2_user_proto_msgTypes[9]
+	mi := &file_user_v2_user_proto_msgTypes[9]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -635,7 +635,7 @@ func (x *SignUpResponse) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use SignUpResponse.ProtoReflect.Descriptor instead.
 func (*SignUpResponse) Descriptor() ([]byte, []int) {
-	return file_api_user_v2_user_proto_rawDescGZIP(), []int{9}
+	return file_user_v2_user_proto_rawDescGZIP(), []int{9}
 }
 
 type SMSCodeRequest struct {
@@ -652,7 +652,7 @@ type SMSCodeRequest struct {
 func (x *SMSCodeRequest) Reset() {
 	*x = SMSCodeRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_api_user_v2_user_proto_msgTypes[10]
+		mi := &file_user_v2_user_proto_msgTypes[10]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -665,7 +665,7 @@ func (x *SMSCodeRequest) String() string {
 func (*SMSCodeRequest) ProtoMessage() {}
 
 func (x *SMSCodeRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_api_user_v2_user_proto_msgTypes[10]
+	mi := &file_user_v2_user_proto_msgTypes[10]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -678,7 +678,7 @@ func (x *SMSCodeRequest) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use SMSCodeRequest.ProtoReflect.Descriptor instead.
 func (*SMSCodeRequest) Descriptor() ([]byte, []int) {
-	return file_api_user_v2_user_proto_rawDescGZIP(), []int{10}
+	return file_user_v2_user_proto_rawDescGZIP(), []int{10}
 }
 
 func (x *SMSCodeRequest) GetPhone() string {
@@ -704,7 +704,7 @@ type SMSCodeResponse struct {
 func (x *SMSCodeResponse) Reset() {
 	*x = SMSCodeResponse{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_api_user_v2_user_proto_msgTypes[11]
+		mi := &file_user_v2_user_proto_msgTypes[11]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -717,7 +717,7 @@ func (x *SMSCodeResponse) String() string {
 func (*SMSCodeResponse) ProtoMessage() {}
 
 func (x *SMSCodeResponse) ProtoReflect() protoreflect.Message {
-	mi := &file_api_user_v2_user_proto_msgTypes[11]
+	mi := &file_user_v2_user_proto_msgTypes[11]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -730,7 +730,7 @@ func (x *SMSCodeResponse) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use SMSCodeResponse.ProtoReflect.Descriptor instead.
 func (*SMSCodeResponse) Descriptor() ([]byte, []int) {
-	return file_api_user_v2_user_proto_rawDescGZIP(), []int{11}
+	return file_user_v2_user_proto_rawDescGZIP(), []int{11}
 }
 
 type SignInResponse_Device struct {
@@ -748,7 +748,7 @@ type SignInResponse_Device struct {
 func (x *SignInResponse_Device) Reset() {
 	*x = SignInResponse_Device{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_api_user_v2_user_proto_msgTypes[12]
+		mi := &file_user_v2_user_proto_msgTypes[12]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -761,7 +761,7 @@ func (x *SignInResponse_Device) String() string {
 func (*SignInResponse_Device) ProtoMessage() {}
 
 func (x *SignInResponse_Device) ProtoReflect() protoreflect.Message {
-	mi := &file_api_user_v2_user_proto_msgTypes[12]
+	mi := &file_user_v2_user_proto_msgTypes[12]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -774,7 +774,7 @@ func (x *SignInResponse_Device) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use SignInResponse_Device.ProtoReflect.Descriptor instead.
 func (*SignInResponse_Device) Descriptor() ([]byte, []int) {
-	return file_api_user_v2_user_proto_rawDescGZIP(), []int{7, 0}
+	return file_user_v2_user_proto_rawDescGZIP(), []int{7, 0}
 }
 
 func (x *SignInResponse_Device) GetDid() int64 {
@@ -827,7 +827,7 @@ type SignInResponse_Location struct {
 func (x *SignInResponse_Location) Reset() {
 	*x = SignInResponse_Location{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_api_user_v2_user_proto_msgTypes[13]
+		mi := &file_user_v2_user_proto_msgTypes[13]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -840,7 +840,7 @@ func (x *SignInResponse_Location) String() string {
 func (*SignInResponse_Location) ProtoMessage() {}
 
 func (x *SignInResponse_Location) ProtoReflect() protoreflect.Message {
-	mi := &file_api_user_v2_user_proto_msgTypes[13]
+	mi := &file_user_v2_user_proto_msgTypes[13]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -853,7 +853,7 @@ func (x *SignInResponse_Location) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use SignInResponse_Location.ProtoReflect.Descriptor instead.
 func (*SignInResponse_Location) Descriptor() ([]byte, []int) {
-	return file_api_user_v2_user_proto_rawDescGZIP(), []int{7, 1}
+	return file_user_v2_user_proto_rawDescGZIP(), []int{7, 1}
 }
 
 func (x *SignInResponse_Location) GetLatitude() string {
@@ -910,7 +910,7 @@ type SignInResponse_Child struct {
 func (x *SignInResponse_Child) Reset() {
 	*x = SignInResponse_Child{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_api_user_v2_user_proto_msgTypes[14]
+		mi := &file_user_v2_user_proto_msgTypes[14]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -923,7 +923,7 @@ func (x *SignInResponse_Child) String() string {
 func (*SignInResponse_Child) ProtoMessage() {}
 
 func (x *SignInResponse_Child) ProtoReflect() protoreflect.Message {
-	mi := &file_api_user_v2_user_proto_msgTypes[14]
+	mi := &file_user_v2_user_proto_msgTypes[14]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -936,7 +936,7 @@ func (x *SignInResponse_Child) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use SignInResponse_Child.ProtoReflect.Descriptor instead.
 func (*SignInResponse_Child) Descriptor() ([]byte, []int) {
-	return file_api_user_v2_user_proto_rawDescGZIP(), []int{7, 2}
+	return file_user_v2_user_proto_rawDescGZIP(), []int{7, 2}
 }
 
 func (x *SignInResponse_Child) GetCid() string {
@@ -981,186 +981,186 @@ func (x *SignInResponse_Child) GetLastLocation() *SignInResponse_Location {
 	return nil
 }
 
-var File_api_user_v2_user_proto protoreflect.FileDescriptor
-
-var file_api_user_v2_user_proto_rawDesc = []byte{
-	0x0a, 0x16, 0x61, 0x70, 0x69, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x2f, 0x76, 0x32, 0x2f, 0x75, 0x73,
-	0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0b, 0x61, 0x70, 0x69, 0x2e, 0x75, 0x73,
-	0x65, 0x72, 0x2e, 0x76, 0x32, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70,
-	0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72,
-	0x6f, 0x74, 0x6f, 0x1a, 0x17, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2f, 0x76, 0x61,
-	0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x6c, 0x0a, 0x14,
-	0x52, 0x65, 0x73, 0x65, 0x74, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x52, 0x65, 0x71,
-	0x75, 0x65, 0x73, 0x74, 0x12, 0x29, 0x0a, 0x0b, 0x6f, 0x6c, 0x64, 0x50, 0x61, 0x73, 0x73, 0x77,
-	0x6f, 0x72, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02,
-	0x10, 0x01, 0x52, 0x0b, 0x6f, 0x6c, 0x64, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12,
-	0x29, 0x0a, 0x0b, 0x6e, 0x65, 0x77, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x02,
-	0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x0b, 0x6e,
-	0x65, 0x77, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x22, 0x17, 0x0a, 0x15, 0x52, 0x65,
-	0x73, 0x65, 0x74, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f,
-	0x6e, 0x73, 0x65, 0x22, 0x5f, 0x0a, 0x17, 0x52, 0x65, 0x74, 0x72, 0x69, 0x65, 0x76, 0x65, 0x50,
-	0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f,
-	0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x09, 0xfa,
-	0x42, 0x06, 0x72, 0x04, 0x10, 0x01, 0x60, 0x01, 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x12,
-	0x23, 0x0a, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28,
+var File_user_v2_user_proto protoreflect.FileDescriptor
+
+var file_user_v2_user_proto_rawDesc = []byte{
+	0x0a, 0x12, 0x75, 0x73, 0x65, 0x72, 0x2f, 0x76, 0x32, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x70,
+	0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0b, 0x61, 0x70, 0x69, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76,
+	0x32, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e,
+	0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a,
+	0x17, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61,
+	0x74, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x6c, 0x0a, 0x14, 0x52, 0x65, 0x73, 0x65,
+	0x74, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+	0x12, 0x29, 0x0a, 0x0b, 0x6f, 0x6c, 0x64, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18,
+	0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x0b,
+	0x6f, 0x6c, 0x64, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x29, 0x0a, 0x0b, 0x6e,
+	0x65, 0x77, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
+	0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x0b, 0x6e, 0x65, 0x77, 0x50, 0x61,
+	0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x22, 0x17, 0x0a, 0x15, 0x52, 0x65, 0x73, 0x65, 0x74, 0x50,
+	0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22,
+	0x5f, 0x0a, 0x17, 0x52, 0x65, 0x74, 0x72, 0x69, 0x65, 0x76, 0x65, 0x50, 0x61, 0x73, 0x73, 0x77,
+	0x6f, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x05, 0x65, 0x6d,
+	0x61, 0x69, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x09, 0xfa, 0x42, 0x06, 0x72, 0x04,
+	0x10, 0x01, 0x60, 0x01, 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x23, 0x0a, 0x08, 0x70,
+	0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa,
+	0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64,
+	0x22, 0x1a, 0x0a, 0x18, 0x52, 0x65, 0x74, 0x72, 0x69, 0x65, 0x76, 0x65, 0x50, 0x61, 0x73, 0x73,
+	0x77, 0x6f, 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x38, 0x0a, 0x11,
+	0x55, 0x6e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
+	0x74, 0x12, 0x23, 0x0a, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x01, 0x20,
+	0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x08, 0x70, 0x61,
+	0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x22, 0x14, 0x0a, 0x12, 0x55, 0x6e, 0x72, 0x65, 0x67, 0x69,
+	0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xc9, 0x01, 0x0a,
+	0x0d, 0x53, 0x69, 0x67, 0x6e, 0x49, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2a,
+	0x0a, 0x05, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x14, 0xfa,
+	0x42, 0x11, 0x72, 0x0f, 0x32, 0x0d, 0x5e, 0x31, 0x5b, 0x33, 0x2d, 0x39, 0x5d, 0x5c, 0x64, 0x7b,
+	0x39, 0x7d, 0x24, 0x52, 0x05, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x12, 0x23, 0x0a, 0x08, 0x61, 0x72,
+	0x65, 0x61, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42,
+	0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x08, 0x61, 0x72, 0x65, 0x61, 0x43, 0x6f, 0x64, 0x65, 0x12,
+	0x23, 0x0a, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28,
 	0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x08, 0x70, 0x61, 0x73, 0x73,
-	0x77, 0x6f, 0x72, 0x64, 0x22, 0x1a, 0x0a, 0x18, 0x52, 0x65, 0x74, 0x72, 0x69, 0x65, 0x76, 0x65,
-	0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
-	0x22, 0x38, 0x0a, 0x11, 0x55, 0x6e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65,
-	0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x23, 0x0a, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72,
-	0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01,
-	0x52, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x22, 0x14, 0x0a, 0x12, 0x55, 0x6e,
-	0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
-	0x22, 0xc9, 0x01, 0x0a, 0x0d, 0x53, 0x69, 0x67, 0x6e, 0x49, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65,
-	0x73, 0x74, 0x12, 0x2a, 0x0a, 0x05, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28,
-	0x09, 0x42, 0x14, 0xfa, 0x42, 0x11, 0x72, 0x0f, 0x32, 0x0d, 0x5e, 0x31, 0x5b, 0x33, 0x2d, 0x39,
-	0x5d, 0x5c, 0x64, 0x7b, 0x39, 0x7d, 0x24, 0x52, 0x05, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x12, 0x23,
-	0x0a, 0x08, 0x61, 0x72, 0x65, 0x61, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
-	0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x08, 0x61, 0x72, 0x65, 0x61, 0x43,
-	0x6f, 0x64, 0x65, 0x12, 0x23, 0x0a, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18,
-	0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x08,
-	0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x1f, 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69,
-	0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x09, 0xfa, 0x42, 0x06, 0x72, 0x04, 0x10, 0x01,
-	0x60, 0x01, 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x21, 0x0a, 0x07, 0x63, 0x61, 0x70,
-	0x74, 0x63, 0x68, 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72,
-	0x02, 0x10, 0x04, 0x52, 0x07, 0x63, 0x61, 0x70, 0x74, 0x63, 0x68, 0x61, 0x22, 0xfa, 0x05, 0x0a,
-	0x0e, 0x53, 0x69, 0x67, 0x6e, 0x49, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12,
-	0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05,
-	0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01,
-	0x28, 0x09, 0x52, 0x03, 0x75, 0x69, 0x64, 0x12, 0x3f, 0x0a, 0x09, 0x63, 0x68, 0x69, 0x6c, 0x64,
-	0x4c, 0x69, 0x73, 0x74, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x61, 0x70, 0x69,
-	0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x49, 0x6e, 0x52,
-	0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x43, 0x68, 0x69, 0x6c, 0x64, 0x52, 0x09, 0x63,
-	0x68, 0x69, 0x6c, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x1a, 0x82, 0x01, 0x0a, 0x06, 0x44, 0x65, 0x76,
-	0x69, 0x63, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x64, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03,
-	0x52, 0x03, 0x64, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x62, 0x61, 0x74, 0x74, 0x65, 0x72, 0x79,
-	0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x62, 0x61, 0x74, 0x74, 0x65, 0x72, 0x79, 0x12,
-	0x16, 0x0a, 0x06, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52,
-	0x06, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61,
-	0x6c, 0x4d, 0x61, 0x78, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e,
-	0x61, 0x6c, 0x4d, 0x61, 0x78, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x18,
-	0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x1a, 0x8d, 0x02,
-	0x0a, 0x08, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x61,
-	0x74, 0x69, 0x74, 0x75, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6c, 0x61,
-	0x74, 0x69, 0x74, 0x75, 0x64, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6c, 0x6f, 0x6e, 0x67, 0x69, 0x74,
-	0x75, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6c, 0x6f, 0x6e, 0x67, 0x69,
-	0x74, 0x75, 0x64, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e,
-	0x54, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x70, 0x6f, 0x73, 0x69,
-	0x74, 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x61, 0x64, 0x69,
-	0x75, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x72, 0x61, 0x64, 0x69, 0x75, 0x73,
-	0x12, 0x4c, 0x0a, 0x09, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20,
-	0x01, 0x28, 0x0e, 0x32, 0x2e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76,
-	0x32, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x49, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
-	0x2e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x54,
-	0x79, 0x70, 0x65, 0x52, 0x09, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x22, 0x3d,
-	0x0a, 0x09, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55,
-	0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x47, 0x50, 0x53, 0x10,
-	0x01, 0x12, 0x08, 0x0a, 0x04, 0x57, 0x49, 0x46, 0x49, 0x10, 0x02, 0x12, 0x08, 0x0a, 0x04, 0x43,
-	0x45, 0x4c, 0x4c, 0x10, 0x03, 0x12, 0x06, 0x0a, 0x02, 0x49, 0x50, 0x10, 0x04, 0x1a, 0xe9, 0x01,
-	0x0a, 0x05, 0x43, 0x68, 0x69, 0x6c, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x63, 0x69, 0x64, 0x18, 0x01,
-	0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x63, 0x69, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x74, 0x65,
-	0x70, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x73, 0x74,
-	0x65, 0x70, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18,
-	0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x61,
-	0x76, 0x61, 0x74, 0x61, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x61, 0x76, 0x61,
-	0x74, 0x61, 0x72, 0x12, 0x3a, 0x0a, 0x06, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x18, 0x05, 0x20,
-	0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76,
-	0x32, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x49, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
-	0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x52, 0x06, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x12,
-	0x48, 0x0a, 0x0c, 0x6c, 0x61, 0x73, 0x74, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18,
-	0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x75, 0x73, 0x65, 0x72,
-	0x2e, 0x76, 0x32, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x49, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
-	0x73, 0x65, 0x2e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0c, 0x6c, 0x61, 0x73,
-	0x74, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xc9, 0x01, 0x0a, 0x0d, 0x53, 0x69,
-	0x67, 0x6e, 0x55, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2a, 0x0a, 0x05, 0x70,
-	0x68, 0x6f, 0x6e, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x14, 0xfa, 0x42, 0x11, 0x72,
-	0x0f, 0x32, 0x0d, 0x5e, 0x31, 0x5b, 0x33, 0x2d, 0x39, 0x5d, 0x5c, 0x64, 0x7b, 0x39, 0x7d, 0x24,
-	0x52, 0x05, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x12, 0x23, 0x0a, 0x08, 0x61, 0x72, 0x65, 0x61, 0x43,
-	0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02,
-	0x10, 0x01, 0x52, 0x08, 0x61, 0x72, 0x65, 0x61, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x23, 0x0a, 0x08,
-	0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07,
-	0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72,
-	0x64, 0x12, 0x1f, 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09,
-	0x42, 0x09, 0xfa, 0x42, 0x06, 0x72, 0x04, 0x10, 0x01, 0x60, 0x01, 0x52, 0x05, 0x65, 0x6d, 0x61,
-	0x69, 0x6c, 0x12, 0x21, 0x0a, 0x07, 0x63, 0x61, 0x70, 0x74, 0x63, 0x68, 0x61, 0x18, 0x05, 0x20,
-	0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x04, 0x52, 0x07, 0x63, 0x61,
-	0x70, 0x74, 0x63, 0x68, 0x61, 0x22, 0x10, 0x0a, 0x0e, 0x53, 0x69, 0x67, 0x6e, 0x55, 0x70, 0x52,
-	0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x61, 0x0a, 0x0e, 0x53, 0x4d, 0x53, 0x43, 0x6f,
-	0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2a, 0x0a, 0x05, 0x70, 0x68, 0x6f,
-	0x6e, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x14, 0xfa, 0x42, 0x11, 0x72, 0x0f, 0x32,
-	0x0d, 0x5e, 0x31, 0x5b, 0x33, 0x2d, 0x39, 0x5d, 0x5c, 0x64, 0x7b, 0x39, 0x7d, 0x24, 0x52, 0x05,
-	0x70, 0x68, 0x6f, 0x6e, 0x65, 0x12, 0x23, 0x0a, 0x08, 0x61, 0x72, 0x65, 0x61, 0x43, 0x6f, 0x64,
-	0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01,
-	0x52, 0x08, 0x61, 0x72, 0x65, 0x61, 0x43, 0x6f, 0x64, 0x65, 0x22, 0x11, 0x0a, 0x0f, 0x53, 0x4d,
-	0x53, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0xed, 0x05,
-	0x0a, 0x04, 0x55, 0x73, 0x65, 0x72, 0x12, 0x6b, 0x0a, 0x06, 0x53, 0x69, 0x67, 0x6e, 0x49, 0x6e,
-	0x12, 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x53,
-	0x69, 0x67, 0x6e, 0x49, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x61,
+	0x77, 0x6f, 0x72, 0x64, 0x12, 0x1f, 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x04, 0x20,
+	0x01, 0x28, 0x09, 0x42, 0x09, 0xfa, 0x42, 0x06, 0x72, 0x04, 0x10, 0x01, 0x60, 0x01, 0x52, 0x05,
+	0x65, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x21, 0x0a, 0x07, 0x63, 0x61, 0x70, 0x74, 0x63, 0x68, 0x61,
+	0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x04, 0x52,
+	0x07, 0x63, 0x61, 0x70, 0x74, 0x63, 0x68, 0x61, 0x22, 0xfa, 0x05, 0x0a, 0x0e, 0x53, 0x69, 0x67,
+	0x6e, 0x49, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x74,
+	0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65,
+	0x6e, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03,
+	0x75, 0x69, 0x64, 0x12, 0x3f, 0x0a, 0x09, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x4c, 0x69, 0x73, 0x74,
+	0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x75, 0x73, 0x65,
+	0x72, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x49, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f,
+	0x6e, 0x73, 0x65, 0x2e, 0x43, 0x68, 0x69, 0x6c, 0x64, 0x52, 0x09, 0x63, 0x68, 0x69, 0x6c, 0x64,
+	0x4c, 0x69, 0x73, 0x74, 0x1a, 0x82, 0x01, 0x0a, 0x06, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x12,
+	0x10, 0x0a, 0x03, 0x64, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x64, 0x69,
+	0x64, 0x12, 0x18, 0x0a, 0x07, 0x62, 0x61, 0x74, 0x74, 0x65, 0x72, 0x79, 0x18, 0x02, 0x20, 0x01,
+	0x28, 0x05, 0x52, 0x07, 0x62, 0x61, 0x74, 0x74, 0x65, 0x72, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x73,
+	0x69, 0x67, 0x6e, 0x61, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x73, 0x69, 0x67,
+	0x6e, 0x61, 0x6c, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x4d, 0x61, 0x78,
+	0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x4d, 0x61,
+	0x78, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28,
+	0x09, 0x52, 0x06, 0x74, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x1a, 0x8d, 0x02, 0x0a, 0x08, 0x4c, 0x6f,
+	0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x61, 0x74, 0x69, 0x74, 0x75,
+	0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6c, 0x61, 0x74, 0x69, 0x74, 0x75,
+	0x64, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6c, 0x6f, 0x6e, 0x67, 0x69, 0x74, 0x75, 0x64, 0x65, 0x18,
+	0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6c, 0x6f, 0x6e, 0x67, 0x69, 0x74, 0x75, 0x64, 0x65,
+	0x12, 0x22, 0x0a, 0x0c, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x6d, 0x65,
+	0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e,
+	0x54, 0x69, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x61, 0x64, 0x69, 0x75, 0x73, 0x18, 0x04,
+	0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x72, 0x61, 0x64, 0x69, 0x75, 0x73, 0x12, 0x4c, 0x0a, 0x09,
+	0x70, 0x6f, 0x69, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32,
+	0x2e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x69,
+	0x67, 0x6e, 0x49, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x4c, 0x6f, 0x63,
+	0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52,
+	0x09, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x22, 0x3d, 0x0a, 0x09, 0x50, 0x6f,
+	0x69, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f,
+	0x57, 0x4e, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x47, 0x50, 0x53, 0x10, 0x01, 0x12, 0x08, 0x0a,
+	0x04, 0x57, 0x49, 0x46, 0x49, 0x10, 0x02, 0x12, 0x08, 0x0a, 0x04, 0x43, 0x45, 0x4c, 0x4c, 0x10,
+	0x03, 0x12, 0x06, 0x0a, 0x02, 0x49, 0x50, 0x10, 0x04, 0x1a, 0xe9, 0x01, 0x0a, 0x05, 0x43, 0x68,
+	0x69, 0x6c, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x63, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
+	0x52, 0x03, 0x63, 0x69, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x74, 0x65, 0x70, 0x43, 0x6f, 0x75,
+	0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x73, 0x74, 0x65, 0x70, 0x43, 0x6f,
+	0x75, 0x6e, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28,
+	0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x76, 0x61, 0x74, 0x61,
+	0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x12,
+	0x3a, 0x0a, 0x06, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32,
+	0x22, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x69,
+	0x67, 0x6e, 0x49, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x44, 0x65, 0x76,
+	0x69, 0x63, 0x65, 0x52, 0x06, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x12, 0x48, 0x0a, 0x0c, 0x6c,
+	0x61, 0x73, 0x74, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28,
+	0x0b, 0x32, 0x24, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e,
+	0x53, 0x69, 0x67, 0x6e, 0x49, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x4c,
+	0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0c, 0x6c, 0x61, 0x73, 0x74, 0x4c, 0x6f, 0x63,
+	0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xc9, 0x01, 0x0a, 0x0d, 0x53, 0x69, 0x67, 0x6e, 0x55, 0x70,
+	0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2a, 0x0a, 0x05, 0x70, 0x68, 0x6f, 0x6e, 0x65,
+	0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x14, 0xfa, 0x42, 0x11, 0x72, 0x0f, 0x32, 0x0d, 0x5e,
+	0x31, 0x5b, 0x33, 0x2d, 0x39, 0x5d, 0x5c, 0x64, 0x7b, 0x39, 0x7d, 0x24, 0x52, 0x05, 0x70, 0x68,
+	0x6f, 0x6e, 0x65, 0x12, 0x23, 0x0a, 0x08, 0x61, 0x72, 0x65, 0x61, 0x43, 0x6f, 0x64, 0x65, 0x18,
+	0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x08,
+	0x61, 0x72, 0x65, 0x61, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x23, 0x0a, 0x08, 0x70, 0x61, 0x73, 0x73,
+	0x77, 0x6f, 0x72, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72,
+	0x02, 0x10, 0x01, 0x52, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x1f, 0x0a,
+	0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x09, 0xfa, 0x42,
+	0x06, 0x72, 0x04, 0x10, 0x01, 0x60, 0x01, 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x21,
+	0x0a, 0x07, 0x63, 0x61, 0x70, 0x74, 0x63, 0x68, 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x42,
+	0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x04, 0x52, 0x07, 0x63, 0x61, 0x70, 0x74, 0x63, 0x68,
+	0x61, 0x22, 0x10, 0x0a, 0x0e, 0x53, 0x69, 0x67, 0x6e, 0x55, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f,
+	0x6e, 0x73, 0x65, 0x22, 0x61, 0x0a, 0x0e, 0x53, 0x4d, 0x53, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65,
+	0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2a, 0x0a, 0x05, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x18, 0x01,
+	0x20, 0x01, 0x28, 0x09, 0x42, 0x14, 0xfa, 0x42, 0x11, 0x72, 0x0f, 0x32, 0x0d, 0x5e, 0x31, 0x5b,
+	0x33, 0x2d, 0x39, 0x5d, 0x5c, 0x64, 0x7b, 0x39, 0x7d, 0x24, 0x52, 0x05, 0x70, 0x68, 0x6f, 0x6e,
+	0x65, 0x12, 0x23, 0x0a, 0x08, 0x61, 0x72, 0x65, 0x61, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20,
+	0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x08, 0x61, 0x72,
+	0x65, 0x61, 0x43, 0x6f, 0x64, 0x65, 0x22, 0x11, 0x0a, 0x0f, 0x53, 0x4d, 0x53, 0x43, 0x6f, 0x64,
+	0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0xed, 0x05, 0x0a, 0x04, 0x55, 0x73,
+	0x65, 0x72, 0x12, 0x6b, 0x0a, 0x06, 0x53, 0x69, 0x67, 0x6e, 0x49, 0x6e, 0x12, 0x1a, 0x2e, 0x61,
 	0x70, 0x69, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x49,
-	0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x28, 0x82, 0xd3, 0xe4, 0x93, 0x02,
-	0x22, 0x3a, 0x01, 0x2a, 0x22, 0x1d, 0x2f, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x76, 0x32, 0x2f, 0x75,
-	0x73, 0x65, 0x72, 0x63, 0x74, 0x78, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x2f, 0x73, 0x69, 0x67, 0x6e,
-	0x2d, 0x69, 0x6e, 0x12, 0x6b, 0x0a, 0x06, 0x53, 0x69, 0x67, 0x6e, 0x55, 0x70, 0x12, 0x1a, 0x2e,
-	0x61, 0x70, 0x69, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x69, 0x67, 0x6e,
-	0x55, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x61, 0x70, 0x69, 0x2e,
+	0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x75,
+	0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x49, 0x6e, 0x52, 0x65, 0x73,
+	0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x28, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x22, 0x3a, 0x01, 0x2a,
+	0x22, 0x1d, 0x2f, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x76, 0x32, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x63,
+	0x74, 0x78, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x2f, 0x73, 0x69, 0x67, 0x6e, 0x2d, 0x69, 0x6e, 0x12,
+	0x6b, 0x0a, 0x06, 0x53, 0x69, 0x67, 0x6e, 0x55, 0x70, 0x12, 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x2e,
 	0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x55, 0x70, 0x52, 0x65,
-	0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x28, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x22, 0x3a, 0x01,
-	0x2a, 0x22, 0x1d, 0x2f, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x76, 0x32, 0x2f, 0x75, 0x73, 0x65, 0x72,
-	0x63, 0x74, 0x78, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x2f, 0x73, 0x69, 0x67, 0x6e, 0x2d, 0x75, 0x70,
-	0x12, 0x7a, 0x0a, 0x0a, 0x55, 0x6e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x12, 0x1e,
-	0x2e, 0x61, 0x70, 0x69, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x55, 0x6e, 0x72,
-	0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f,
-	0x2e, 0x61, 0x70, 0x69, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x55, 0x6e, 0x72,
-	0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22,
-	0x2b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x25, 0x3a, 0x01, 0x2a, 0x22, 0x20, 0x2f, 0x61, 0x70, 0x69,
-	0x73, 0x2f, 0x76, 0x32, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x63, 0x74, 0x78, 0x2f, 0x75, 0x73, 0x65,
-	0x72, 0x2f, 0x75, 0x6e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x12, 0x87, 0x01, 0x0a,
-	0x0d, 0x52, 0x65, 0x73, 0x65, 0x74, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x21,
-	0x2e, 0x61, 0x70, 0x69, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73,
-	0x65, 0x74, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
-	0x74, 0x1a, 0x22, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e,
-	0x52, 0x65, 0x73, 0x65, 0x74, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x52, 0x65, 0x73,
-	0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x29, 0x3a, 0x01, 0x2a,
-	0x22, 0x24, 0x2f, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x76, 0x32, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x63,
-	0x74, 0x78, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x2f, 0x72, 0x65, 0x73, 0x65, 0x74, 0x2d, 0x70, 0x61,
-	0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x93, 0x01, 0x0a, 0x10, 0x52, 0x65, 0x74, 0x72, 0x69,
-	0x65, 0x76, 0x65, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x24, 0x2e, 0x61, 0x70,
-	0x69, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x74, 0x72, 0x69, 0x65,
-	0x76, 0x65, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
-	0x74, 0x1a, 0x25, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e,
-	0x52, 0x65, 0x74, 0x72, 0x69, 0x65, 0x76, 0x65, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64,
-	0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x32, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2c,
-	0x3a, 0x01, 0x2a, 0x22, 0x27, 0x2f, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x76, 0x32, 0x2f, 0x75, 0x73,
-	0x65, 0x72, 0x63, 0x74, 0x78, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x2f, 0x72, 0x65, 0x74, 0x72, 0x69,
-	0x65, 0x76, 0x65, 0x2d, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x6f, 0x0a, 0x07,
-	0x53, 0x4d, 0x53, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x1b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x75, 0x73,
-	0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x4d, 0x53, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71,
-	0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e,
-	0x76, 0x32, 0x2e, 0x53, 0x4d, 0x53, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
-	0x73, 0x65, 0x22, 0x29, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x23, 0x3a, 0x01, 0x2a, 0x22, 0x1e, 0x2f,
+	0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x75, 0x73, 0x65, 0x72,
+	0x2e, 0x76, 0x32, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x55, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
+	0x73, 0x65, 0x22, 0x28, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x22, 0x3a, 0x01, 0x2a, 0x22, 0x1d, 0x2f,
 	0x61, 0x70, 0x69, 0x73, 0x2f, 0x76, 0x32, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x63, 0x74, 0x78, 0x2f,
-	0x75, 0x73, 0x65, 0x72, 0x2f, 0x73, 0x6d, 0x73, 0x2d, 0x63, 0x6f, 0x64, 0x65, 0x42, 0x30, 0x0a,
-	0x0b, 0x61, 0x70, 0x69, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x50, 0x01, 0x5a, 0x1f,
-	0x73, 0x69, 0x6b, 0x65, 0x79, 0x2f, 0x77, 0x33, 0x30, 0x33, 0x61, 0x2f, 0x68, 0x74, 0x74, 0x70,
-	0x2f, 0x61, 0x70, 0x69, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x2f, 0x76, 0x32, 0x3b, 0x76, 0x32, 0x62,
-	0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+	0x75, 0x73, 0x65, 0x72, 0x2f, 0x73, 0x69, 0x67, 0x6e, 0x2d, 0x75, 0x70, 0x12, 0x7a, 0x0a, 0x0a,
+	0x55, 0x6e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x12, 0x1e, 0x2e, 0x61, 0x70, 0x69,
+	0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x55, 0x6e, 0x72, 0x65, 0x67, 0x69, 0x73,
+	0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x61, 0x70, 0x69,
+	0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x55, 0x6e, 0x72, 0x65, 0x67, 0x69, 0x73,
+	0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2b, 0x82, 0xd3, 0xe4,
+	0x93, 0x02, 0x25, 0x3a, 0x01, 0x2a, 0x22, 0x20, 0x2f, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x76, 0x32,
+	0x2f, 0x75, 0x73, 0x65, 0x72, 0x63, 0x74, 0x78, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x2f, 0x75, 0x6e,
+	0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x12, 0x87, 0x01, 0x0a, 0x0d, 0x52, 0x65, 0x73,
+	0x65, 0x74, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x21, 0x2e, 0x61, 0x70, 0x69,
+	0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x65, 0x74, 0x50, 0x61,
+	0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e,
+	0x61, 0x70, 0x69, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x65,
+	0x74, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
+	0x65, 0x22, 0x2f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x29, 0x3a, 0x01, 0x2a, 0x22, 0x24, 0x2f, 0x61,
+	0x70, 0x69, 0x73, 0x2f, 0x76, 0x32, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x63, 0x74, 0x78, 0x2f, 0x75,
+	0x73, 0x65, 0x72, 0x2f, 0x72, 0x65, 0x73, 0x65, 0x74, 0x2d, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f,
+	0x72, 0x64, 0x12, 0x93, 0x01, 0x0a, 0x10, 0x52, 0x65, 0x74, 0x72, 0x69, 0x65, 0x76, 0x65, 0x50,
+	0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x24, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x75, 0x73,
+	0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x74, 0x72, 0x69, 0x65, 0x76, 0x65, 0x50, 0x61,
+	0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e,
+	0x61, 0x70, 0x69, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x74, 0x72,
+	0x69, 0x65, 0x76, 0x65, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x52, 0x65, 0x73, 0x70,
+	0x6f, 0x6e, 0x73, 0x65, 0x22, 0x32, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2c, 0x3a, 0x01, 0x2a, 0x22,
+	0x27, 0x2f, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x76, 0x32, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x63, 0x74,
+	0x78, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x2f, 0x72, 0x65, 0x74, 0x72, 0x69, 0x65, 0x76, 0x65, 0x2d,
+	0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x6f, 0x0a, 0x07, 0x53, 0x4d, 0x53, 0x43,
+	0x6f, 0x64, 0x65, 0x12, 0x1b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76,
+	0x32, 0x2e, 0x53, 0x4d, 0x53, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+	0x1a, 0x1c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x53,
+	0x4d, 0x53, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x29,
+	0x82, 0xd3, 0xe4, 0x93, 0x02, 0x23, 0x3a, 0x01, 0x2a, 0x22, 0x1e, 0x2f, 0x61, 0x70, 0x69, 0x73,
+	0x2f, 0x76, 0x32, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x63, 0x74, 0x78, 0x2f, 0x75, 0x73, 0x65, 0x72,
+	0x2f, 0x73, 0x6d, 0x73, 0x2d, 0x63, 0x6f, 0x64, 0x65, 0x42, 0x30, 0x0a, 0x0b, 0x61, 0x70, 0x69,
+	0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x50, 0x01, 0x5a, 0x1f, 0x73, 0x69, 0x6b, 0x65,
+	0x79, 0x2f, 0x77, 0x33, 0x30, 0x33, 0x61, 0x2f, 0x68, 0x74, 0x74, 0x70, 0x2f, 0x61, 0x70, 0x69,
+	0x2f, 0x75, 0x73, 0x65, 0x72, 0x2f, 0x76, 0x32, 0x3b, 0x76, 0x32, 0x62, 0x06, 0x70, 0x72, 0x6f,
+	0x74, 0x6f, 0x33,
 }
 
 var (
-	file_api_user_v2_user_proto_rawDescOnce sync.Once
-	file_api_user_v2_user_proto_rawDescData = file_api_user_v2_user_proto_rawDesc
+	file_user_v2_user_proto_rawDescOnce sync.Once
+	file_user_v2_user_proto_rawDescData = file_user_v2_user_proto_rawDesc
 )
 
-func file_api_user_v2_user_proto_rawDescGZIP() []byte {
-	file_api_user_v2_user_proto_rawDescOnce.Do(func() {
-		file_api_user_v2_user_proto_rawDescData = protoimpl.X.CompressGZIP(file_api_user_v2_user_proto_rawDescData)
+func file_user_v2_user_proto_rawDescGZIP() []byte {
+	file_user_v2_user_proto_rawDescOnce.Do(func() {
+		file_user_v2_user_proto_rawDescData = protoimpl.X.CompressGZIP(file_user_v2_user_proto_rawDescData)
 	})
-	return file_api_user_v2_user_proto_rawDescData
+	return file_user_v2_user_proto_rawDescData
 }
 
-var file_api_user_v2_user_proto_enumTypes = make([]protoimpl.EnumInfo, 1)
-var file_api_user_v2_user_proto_msgTypes = make([]protoimpl.MessageInfo, 15)
-var file_api_user_v2_user_proto_goTypes = []any{
+var file_user_v2_user_proto_enumTypes = make([]protoimpl.EnumInfo, 1)
+var file_user_v2_user_proto_msgTypes = make([]protoimpl.MessageInfo, 15)
+var file_user_v2_user_proto_goTypes = []any{
 	(SignInResponse_Location_PointType)(0), // 0: api.user.v2.SignInResponse.Location.PointType
 	(*ResetPasswordRequest)(nil),           // 1: api.user.v2.ResetPasswordRequest
 	(*ResetPasswordResponse)(nil),          // 2: api.user.v2.ResetPasswordResponse
@@ -1178,7 +1178,7 @@ var file_api_user_v2_user_proto_goTypes = []any{
 	(*SignInResponse_Location)(nil),        // 14: api.user.v2.SignInResponse.Location
 	(*SignInResponse_Child)(nil),           // 15: api.user.v2.SignInResponse.Child
 }
-var file_api_user_v2_user_proto_depIdxs = []int32{
+var file_user_v2_user_proto_depIdxs = []int32{
 	15, // 0: api.user.v2.SignInResponse.childList:type_name -> api.user.v2.SignInResponse.Child
 	0,  // 1: api.user.v2.SignInResponse.Location.pointType:type_name -> api.user.v2.SignInResponse.Location.PointType
 	13, // 2: api.user.v2.SignInResponse.Child.device:type_name -> api.user.v2.SignInResponse.Device
@@ -1202,13 +1202,13 @@ var file_api_user_v2_user_proto_depIdxs = []int32{
 	0,  // [0:4] is the sub-list for field type_name
 }
 
-func init() { file_api_user_v2_user_proto_init() }
-func file_api_user_v2_user_proto_init() {
-	if File_api_user_v2_user_proto != nil {
+func init() { file_user_v2_user_proto_init() }
+func file_user_v2_user_proto_init() {
+	if File_user_v2_user_proto != nil {
 		return
 	}
 	if !protoimpl.UnsafeEnabled {
-		file_api_user_v2_user_proto_msgTypes[0].Exporter = func(v any, i int) any {
+		file_user_v2_user_proto_msgTypes[0].Exporter = func(v any, i int) any {
 			switch v := v.(*ResetPasswordRequest); i {
 			case 0:
 				return &v.state
@@ -1220,7 +1220,7 @@ func file_api_user_v2_user_proto_init() {
 				return nil
 			}
 		}
-		file_api_user_v2_user_proto_msgTypes[1].Exporter = func(v any, i int) any {
+		file_user_v2_user_proto_msgTypes[1].Exporter = func(v any, i int) any {
 			switch v := v.(*ResetPasswordResponse); i {
 			case 0:
 				return &v.state
@@ -1232,7 +1232,7 @@ func file_api_user_v2_user_proto_init() {
 				return nil
 			}
 		}
-		file_api_user_v2_user_proto_msgTypes[2].Exporter = func(v any, i int) any {
+		file_user_v2_user_proto_msgTypes[2].Exporter = func(v any, i int) any {
 			switch v := v.(*RetrievePasswordRequest); i {
 			case 0:
 				return &v.state
@@ -1244,7 +1244,7 @@ func file_api_user_v2_user_proto_init() {
 				return nil
 			}
 		}
-		file_api_user_v2_user_proto_msgTypes[3].Exporter = func(v any, i int) any {
+		file_user_v2_user_proto_msgTypes[3].Exporter = func(v any, i int) any {
 			switch v := v.(*RetrievePasswordResponse); i {
 			case 0:
 				return &v.state
@@ -1256,7 +1256,7 @@ func file_api_user_v2_user_proto_init() {
 				return nil
 			}
 		}
-		file_api_user_v2_user_proto_msgTypes[4].Exporter = func(v any, i int) any {
+		file_user_v2_user_proto_msgTypes[4].Exporter = func(v any, i int) any {
 			switch v := v.(*UnregisterRequest); i {
 			case 0:
 				return &v.state
@@ -1268,7 +1268,7 @@ func file_api_user_v2_user_proto_init() {
 				return nil
 			}
 		}
-		file_api_user_v2_user_proto_msgTypes[5].Exporter = func(v any, i int) any {
+		file_user_v2_user_proto_msgTypes[5].Exporter = func(v any, i int) any {
 			switch v := v.(*UnregisterResponse); i {
 			case 0:
 				return &v.state
@@ -1280,7 +1280,7 @@ func file_api_user_v2_user_proto_init() {
 				return nil
 			}
 		}
-		file_api_user_v2_user_proto_msgTypes[6].Exporter = func(v any, i int) any {
+		file_user_v2_user_proto_msgTypes[6].Exporter = func(v any, i int) any {
 			switch v := v.(*SignInRequest); i {
 			case 0:
 				return &v.state
@@ -1292,7 +1292,7 @@ func file_api_user_v2_user_proto_init() {
 				return nil
 			}
 		}
-		file_api_user_v2_user_proto_msgTypes[7].Exporter = func(v any, i int) any {
+		file_user_v2_user_proto_msgTypes[7].Exporter = func(v any, i int) any {
 			switch v := v.(*SignInResponse); i {
 			case 0:
 				return &v.state
@@ -1304,7 +1304,7 @@ func file_api_user_v2_user_proto_init() {
 				return nil
 			}
 		}
-		file_api_user_v2_user_proto_msgTypes[8].Exporter = func(v any, i int) any {
+		file_user_v2_user_proto_msgTypes[8].Exporter = func(v any, i int) any {
 			switch v := v.(*SignUpRequest); i {
 			case 0:
 				return &v.state
@@ -1316,7 +1316,7 @@ func file_api_user_v2_user_proto_init() {
 				return nil
 			}
 		}
-		file_api_user_v2_user_proto_msgTypes[9].Exporter = func(v any, i int) any {
+		file_user_v2_user_proto_msgTypes[9].Exporter = func(v any, i int) any {
 			switch v := v.(*SignUpResponse); i {
 			case 0:
 				return &v.state
@@ -1328,7 +1328,7 @@ func file_api_user_v2_user_proto_init() {
 				return nil
 			}
 		}
-		file_api_user_v2_user_proto_msgTypes[10].Exporter = func(v any, i int) any {
+		file_user_v2_user_proto_msgTypes[10].Exporter = func(v any, i int) any {
 			switch v := v.(*SMSCodeRequest); i {
 			case 0:
 				return &v.state
@@ -1340,7 +1340,7 @@ func file_api_user_v2_user_proto_init() {
 				return nil
 			}
 		}
-		file_api_user_v2_user_proto_msgTypes[11].Exporter = func(v any, i int) any {
+		file_user_v2_user_proto_msgTypes[11].Exporter = func(v any, i int) any {
 			switch v := v.(*SMSCodeResponse); i {
 			case 0:
 				return &v.state
@@ -1352,7 +1352,7 @@ func file_api_user_v2_user_proto_init() {
 				return nil
 			}
 		}
-		file_api_user_v2_user_proto_msgTypes[12].Exporter = func(v any, i int) any {
+		file_user_v2_user_proto_msgTypes[12].Exporter = func(v any, i int) any {
 			switch v := v.(*SignInResponse_Device); i {
 			case 0:
 				return &v.state
@@ -1364,7 +1364,7 @@ func file_api_user_v2_user_proto_init() {
 				return nil
 			}
 		}
-		file_api_user_v2_user_proto_msgTypes[13].Exporter = func(v any, i int) any {
+		file_user_v2_user_proto_msgTypes[13].Exporter = func(v any, i int) any {
 			switch v := v.(*SignInResponse_Location); i {
 			case 0:
 				return &v.state
@@ -1376,7 +1376,7 @@ func file_api_user_v2_user_proto_init() {
 				return nil
 			}
 		}
-		file_api_user_v2_user_proto_msgTypes[14].Exporter = func(v any, i int) any {
+		file_user_v2_user_proto_msgTypes[14].Exporter = func(v any, i int) any {
 			switch v := v.(*SignInResponse_Child); i {
 			case 0:
 				return &v.state
@@ -1393,19 +1393,19 @@ func file_api_user_v2_user_proto_init() {
 	out := protoimpl.TypeBuilder{
 		File: protoimpl.DescBuilder{
 			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
-			RawDescriptor: file_api_user_v2_user_proto_rawDesc,
+			RawDescriptor: file_user_v2_user_proto_rawDesc,
 			NumEnums:      1,
 			NumMessages:   15,
 			NumExtensions: 0,
 			NumServices:   1,
 		},
-		GoTypes:           file_api_user_v2_user_proto_goTypes,
-		DependencyIndexes: file_api_user_v2_user_proto_depIdxs,
-		EnumInfos:         file_api_user_v2_user_proto_enumTypes,
-		MessageInfos:      file_api_user_v2_user_proto_msgTypes,
+		GoTypes:           file_user_v2_user_proto_goTypes,
+		DependencyIndexes: file_user_v2_user_proto_depIdxs,
+		EnumInfos:         file_user_v2_user_proto_enumTypes,
+		MessageInfos:      file_user_v2_user_proto_msgTypes,
 	}.Build()
-	File_api_user_v2_user_proto = out.File
-	file_api_user_v2_user_proto_rawDesc = nil
-	file_api_user_v2_user_proto_goTypes = nil
-	file_api_user_v2_user_proto_depIdxs = nil
+	File_user_v2_user_proto = out.File
+	file_user_v2_user_proto_rawDesc = nil
+	file_user_v2_user_proto_goTypes = nil
+	file_user_v2_user_proto_depIdxs = nil
 }

+ 1 - 1
configs

@@ -1 +1 @@
-Subproject commit ee3e81bcd35cfb48dc4d4f7ad4872f2454846dc0
+Subproject commit c29df25e93c24569049deb8b51cfcf52b9f5cbd1

+ 3 - 0
go.mod

@@ -47,6 +47,7 @@ require (
 	github.com/gogo/protobuf v1.3.2 // indirect
 	github.com/golang/snappy v0.0.4 // indirect
 	github.com/google/go-cmp v0.6.0 // indirect
+	github.com/google/subcommands v1.2.0 // indirect
 	github.com/gorilla/mux v1.8.1 // indirect
 	github.com/hashicorp/hcl/v2 v2.13.0 // indirect
 	github.com/klauspost/compress v1.17.2 // indirect
@@ -54,6 +55,7 @@ require (
 	github.com/montanaflynn/stats v0.7.1 // indirect
 	github.com/nats-io/nkeys v0.4.7 // indirect
 	github.com/nats-io/nuid v1.0.1 // indirect
+	github.com/pmezard/go-difflib v1.0.0 // indirect
 	github.com/xdg-go/pbkdf2 v1.0.0 // indirect
 	github.com/xdg-go/scram v1.1.2 // indirect
 	github.com/xdg-go/stringprep v1.0.4 // indirect
@@ -71,6 +73,7 @@ require (
 	golang.org/x/sync v0.8.0 // indirect
 	golang.org/x/sys v0.25.0 // indirect
 	golang.org/x/text v0.18.0 // indirect
+	golang.org/x/tools v0.24.0 // indirect
 	google.golang.org/genproto/googleapis/rpc v0.0.0-20240924160255-9d4c2d233b61 // indirect
 	gopkg.in/yaml.v3 v3.0.1 // indirect
 )

+ 11 - 0
go.sum

@@ -76,6 +76,7 @@ github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5a
 github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
 github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
 github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
+github.com/google/subcommands v1.2.0 h1:vWQspBTo2nEqTUFita5/KeEWlUL8kQObDFbub/EN9oE=
 github.com/google/subcommands v1.2.0/go.mod h1:ZjhPrFU+Olkh9WazFPsl27BQ4UPiG37m3yTrtFlrHVk=
 github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
 github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
@@ -100,6 +101,8 @@ github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
 github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
 github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc=
 github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw=
+github.com/mattn/go-runewidth v0.0.9 h1:Lm995f3rfxdpd6TSmuVCHVb/QhupuXlYr8sCI/QdE+0=
+github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI=
 github.com/mattn/go-sqlite3 v1.14.16 h1:yOQRA0RpS5PFz/oikGwBEqvAWhWg5ufRz4ETLjwpU1Y=
 github.com/mattn/go-sqlite3 v1.14.16/go.mod h1:2eHXhiwb8IkHr+BDWZGa96P6+rkvnG63S2DGjv9HUNg=
 github.com/mitchellh/go-wordwrap v0.0.0-20150314170334-ad45545899c7 h1:DpOJ2HYzCv8LZP15IdmG+YdwD2luVPHITV96TkirNBM=
@@ -112,6 +115,8 @@ github.com/nats-io/nkeys v0.4.7 h1:RwNJbbIdYCoClSDNY7QVKZlyb/wfT6ugvFCiKy6vDvI=
 github.com/nats-io/nkeys v0.4.7/go.mod h1:kqXRgRDPlGy7nGaEDMuYzmiJCIAAWDK0IMBtDmGD0nc=
 github.com/nats-io/nuid v1.0.1 h1:5iA8DT8V7q8WK2EScv2padNa/rTESc1KdnPw4TC2paw=
 github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c=
+github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec=
+github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY=
 github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 h1:GFCKgmp0tecUJ0sJuv4pzYCqS9+RGSn52M3FUwPs+uo=
 github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10/go.mod h1:t/avpk3KcrXxUnYOhZhMXJlSEyie6gQbtLq5NM3loB8=
 github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
@@ -128,6 +133,10 @@ github.com/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDN
 github.com/rogpeppe/go-internal v1.11.0/go.mod h1:ddIwULY96R17DhadqLgMfk9H9tvdUzkipdSkR5nkCZA=
 github.com/sergi/go-diff v1.0.0 h1:Kpca3qRNrduNnOQeazBd0ysaKrUJiIuISHxogkT9RPQ=
 github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo=
+github.com/spf13/cobra v1.7.0 h1:hyqWnYt1ZQShIddO5kBpj3vu05/++x6tJ6dg8EC572I=
+github.com/spf13/cobra v1.7.0/go.mod h1:uLxZILRyS/50WlhOIKD7W6V5bgeIt+4sICxh6uRMrb0=
+github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
+github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
 github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
 github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
 github.com/vmihailenco/msgpack/v4 v4.3.12/go.mod h1:gborTTJjAo/GWTqqRjrLCn9pgNN+NXzzngzBKDPIqw4=
@@ -248,6 +257,8 @@ golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc
 golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
 golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58=
 golang.org/x/tools v0.17.0/go.mod h1:xsh6VxdV005rRVaS6SSAf9oiAqljS7UZUacMZ8Bnsps=
+golang.org/x/tools v0.24.0 h1:J1shsA93PJUEVaUSaay7UXAyE8aimq3GW0pjlolpa24=
+golang.org/x/tools v0.24.0/go.mod h1:YhNqVBIfWHdzvTLs0d8LCuMhkKUgSUKldakyV7W/WDQ=
 golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=

+ 27 - 0
internal/biz/auth.go

@@ -0,0 +1,27 @@
+package biz
+
+import (
+	"context"
+	"github.com/go-kratos/kratos/v2/middleware/auth/jwt"
+	jwt2 "github.com/golang-jwt/jwt/v5"
+	"github.com/google/uuid"
+)
+
+// getIdByContext returns the ID from the context.
+func getIdByContext(ctx context.Context) string {
+	token, ok := jwt.FromContext(ctx)
+	if ok {
+		mapClaims := token.(*jwt2.MapClaims)
+		id := (*mapClaims)["id"].(string)
+		return id
+	}
+	panic("get id from context failed")
+}
+
+func newUUID() uuid.UUID {
+	id, err := uuid.NewV7()
+	if err != nil {
+		panic("new uuid failed")
+	}
+	return id
+}

+ 7 - 0
internal/biz/biz.go

@@ -4,3 +4,10 @@ import "github.com/google/wire"
 
 // ProviderSet is biz providers.
 var ProviderSet = wire.NewSet(NewUserUsecase, NewChildUsecase)
+
+// ====================
+// 	   共用类型定义
+// ====================
+
+// Gender 性别
+type Gender = int8

+ 137 - 9
internal/biz/child.go

@@ -1,20 +1,148 @@
 package biz
 
-import "sikey/w303a/http/pkg/zaplog"
+import (
+	"context"
+	"go.uber.org/zap"
+	"google.golang.org/grpc/codes"
+	"google.golang.org/grpc/status"
+	pb "sikey/w303a/http/api/user/v2"
+	"sikey/w303a/http/internal/data/ent"
+	"sikey/w303a/http/pkg/zaplog"
+	"time"
+)
 
-type Child struct {
-	ID string
+const (
+	MinHeight int32 = 150 // MinHeight 最小身高,当添加小孩时未设置身高体重时使用到
+	MinWeight int32 = 150 // MinWeight 最小体重,当添加小孩时未设置身高体重时使用到
+)
+
+var (
+	GenderDefault Gender = 0 // GenderDefault 默认值
+	GenderMan     Gender = 2 // GenderMan 男
+	GenderWoman   Gender = 3 // GenderWoman 女
+)
+
+type (
+	Child struct {
+		ID       string  // 小孩 ID
+		Name     string  // 小孩名称
+		Avatar   *string // 头像
+		Height   int32   // 身高
+		Weight   int32   // 体重
+		Birthday *string // 生日
+		Gender   Gender  // 性别
+
+		PhoneNumber *PhoneNumber // 手机号信息
+		Refs        []*ChildRef  // 关联的小孩信息
+
+		IsBlockUnknownCalls bool      // 是否拦截陌生电话
+		IsTotalFence        bool      // 是否开启围栏
+		CreatedAt           time.Time // 创建时间
+	}
+
+	ChildRepo interface {
+		// FindByPhoneNumber finds a Child by the phone number.
+		FindByPhoneNumber(ctx context.Context, phoneNumber *PhoneNumber) (*Child, error)
+
+		// FindByChildID finds a Child by the child ID.
+		FindByChildID(ctx context.Context, cid string) (*Child, error)
+
+		// FindByUserID finds a Child by the user ID.
+		FindByUserID(ctx context.Context, uid string) ([]*Child, error)
+
+		// Create creates a new child.
+		Create(ctx context.Context, child *Child) error
+
+		// Update updates the child.
+		Update(ctx context.Context, child *Child) error
+
+		// Delete deletes the child.
+		Delete(ctx context.Context, cid string) error
+	}
+
+	ChildUsecase struct {
+		log *zaplog.Logger
+
+		childRepo ChildRepo
+	}
+)
+
+func NewChildUsecase(log *zaplog.Logger, childRepo ChildRepo) *ChildUsecase {
+	return &ChildUsecase{log: log, childRepo: childRepo}
 }
 
-type ChildRepo interface {
+// GetChild gets the child list.
+func (uc *ChildUsecase) GetChild(ctx context.Context, req *pb.GetChildRequest) (*pb.GetChildResponse, error) {
+	childs, err := uc.childRepo.FindByUserID(ctx, getIdByContext(ctx))
+	if err != nil {
+		if ent.IsNotFound(err) {
+			return &pb.GetChildResponse{
+				ChildList: make([]*pb.GetChildResponse_Child, 0),
+			}, nil
+		}
+		return nil, err
+	}
+
+	var childList []*pb.GetChildResponse_Child
+	for _, child := range childs {
+		respChild := &pb.GetChildResponse_Child{
+			Cid:    child.ID,
+			Name:   child.Name,
+			Avatar: child.Avatar,
+		}
+
+		// TODO 查询设备信息,和设备最后一次定位的傻乎乎
+
+		childList = append(childList, respChild)
+	}
+
+	return &pb.GetChildResponse{ChildList: childList}, nil
 }
 
-type ChildUsecase struct {
-	log *zaplog.Logger
+// CreateChild creates a new child.
+func (uc *ChildUsecase) CreateChild(ctx context.Context, req *pb.CreateChildRequest) (resp *pb.CreateChildResponse, err error) {
+	var (
+		userId      = getIdByContext(ctx)
+		childId     = newUUID().String()
+		phoneNumber = NewPhoneNumber(req.PhoneNumber, req.AreaCode)
+	)
+
+	_, err = uc.childRepo.FindByPhoneNumber(ctx, phoneNumber)
+	if err != nil {
+		if !ent.IsNotFound(err) { // 手机号已经使用
+			return &pb.CreateChildResponse{}, ErrUserPhoneNumberHasBeenUsed
+		}
+	}
 
-	childRepo ChildRepo
+	if err = uc.childRepo.Create(ctx, &Child{
+		ID:          childId,
+		Name:        req.Name,
+		Avatar:      req.Avatar,
+		Height:      req.Height,
+		Weight:      req.Weight,
+		Birthday:    req.Birthday,
+		Gender:      Gender(req.Gender),
+		PhoneNumber: phoneNumber,
+		Refs:        []*ChildRef{newChildRef(userId, childId)},
+	}); err != nil {
+		return &pb.CreateChildResponse{}, err
+	}
+
+	uc.log.Info("创建小孩",
+		zap.String("userId", userId),
+		zap.String("childId", childId),
+		zap.String("childName", req.Name),
+		zap.String("phoneNumber", phoneNumber.String()))
+
+	return &pb.CreateChildResponse{Cid: childId}, nil
 }
 
-func NewChildUsecase(log *zaplog.Logger, childRepo ChildRepo) *ChildUsecase {
-	return &ChildUsecase{log: log, childRepo: childRepo}
+// UpdateChild updates the child.
+func (uc *ChildUsecase) UpdateChild(context.Context, *pb.UpdateChildRequest) (*pb.UpdateChildResponse, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method UpdateChild not implemented")
+}
+
+// DeleteChild deletes the child.
+func (uc *ChildUsecase) DeleteChild(context.Context, *pb.DeleteChildRequest) (*pb.DeleteChildResponse, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method DeleteChild not implemented")
 }

+ 9 - 0
internal/biz/child_ref.go

@@ -0,0 +1,9 @@
+package biz
+
+type ChildRef struct {
+	UserID, ChildID string
+}
+
+func newChildRef(userId, childId string) *ChildRef {
+	return &ChildRef{userId, childId}
+}

+ 31 - 0
internal/biz/error_code.go

@@ -0,0 +1,31 @@
+package biz
+
+import (
+	"github.com/go-kratos/kratos/v2/errors"
+	pb "sikey/w303a/http/api/user/v2"
+)
+
+// 在proto中自定义的错误码
+// BadRequest这个方法固定返回 http的400 Code!
+// Notice 但是这些code都http错误码的含义,如果业务中有更多错误情况的话,建议自定义一个专门返回业务错误的错误码!
+
+var (
+
+	// ErrUserIncorrectAccountOrPassword 用户账号或密码不正确
+	ErrUserIncorrectAccountOrPassword = errors.New(400, pb.ErrorReason_USER_INCORRECT_ACCOUNT_OR_PASSWORD.String(), "用户账号或密码不正确")
+
+	// ErrUserPhoneNumberHasBeenUsed 手机号已被使用
+	ErrUserPhoneNumberHasBeenUsed = errors.New(400, pb.ErrorReason_USER_PHONE_NUMBER_HAS_BEEN_USED.String(), "手机号已被使用")
+
+	// ErrUserIncorrectCaptcha 验证码已被使用
+	ErrUserIncorrectCaptcha = errors.New(400, pb.ErrorReason_USER_INCORRECT_CAPTCHA.String(), "验证码已被使用")
+
+	// ErrContactsNoPerson 通讯录没有成员
+	ErrContactsNoPerson = errors.New(400, pb.ErrorReason_CONTACTS_NO_PERSON.String(), "通讯录没有成员")
+
+	// ErrContactsNotInitialized 通讯录未初始化
+	ErrContactsNotInitialized = errors.New(400, pb.ErrorReason_CONTACTS_NOT_INITIALIZED.String(), "通讯录未初始化")
+
+	// ErrContactsPersonAlreadyExists 通讯录中已存在该成员
+	ErrContactsPersonAlreadyExists = errors.New(400, pb.ErrorReason_CONTACTS_PERSON_ALREADY_EXISTS.String(), "通讯录中已存在该成员")
+)

+ 23 - 0
internal/biz/phone_number.go

@@ -0,0 +1,23 @@
+package biz
+
+import "fmt"
+
+type PhoneNumber struct {
+	Phone    string
+	AreaCode string
+}
+
+func NewPhoneNumber(phone, areaCode string) *PhoneNumber {
+	return &PhoneNumber{
+		Phone:    phone,
+		AreaCode: areaCode,
+	}
+}
+
+func (p PhoneNumber) String() string {
+	return fmt.Sprintf("%s %s", p.AreaCode, p.Phone)
+}
+
+func (p PhoneNumber) Eq(p2 *PhoneNumber) bool {
+	return p.Phone == p2.Phone && p.AreaCode == p2.AreaCode
+}

+ 72 - 0
internal/data/child.go

@@ -0,0 +1,72 @@
+package data
+
+import (
+	"context"
+	"sikey/w303a/http/internal/biz"
+	"sikey/w303a/http/internal/data/ent/child"
+)
+
+var _ biz.ChildRepo = (*childRepo)(nil)
+
+type childRepo struct {
+	data *Data
+}
+
+func (repo *childRepo) FindByPhoneNumber(ctx context.Context, phoneNumber *biz.PhoneNumber) (*biz.Child, error) {
+	mod, err := repo.data.db.Child.Query().
+		Where(child.PhoneNumber(phoneNumber.Phone), child.AreaCode(phoneNumber.AreaCode)).
+		WithChildRefs().
+		Only(ctx)
+	if err != nil {
+		return nil, err
+	}
+
+	var refs []*biz.ChildRef
+	for _, refMod := range mod.Edges.ChildRefs {
+		refs = append(refs, &biz.ChildRef{
+			UserID:  refMod.UserID.String(),
+			ChildID: refMod.ChildID.String(),
+		})
+	}
+
+	return &biz.Child{
+		ID:          mod.ID.String(),
+		Name:        mod.ChildName,
+		Avatar:      mod.Avatar,
+		Height:      mod.Height,
+		Weight:      mod.Weight,
+		Birthday:    mod.Birthday,
+		Gender:      mod.Gender,
+		PhoneNumber: biz.NewPhoneNumber(mod.PhoneNumber, mod.AreaCode),
+		Refs:        refs,
+	}, nil
+}
+
+func (repo *childRepo) FindByChildID(ctx context.Context, cid string) (*biz.Child, error) {
+	//TODO implement me
+	panic("implement me")
+}
+
+func (repo *childRepo) FindByUserID(ctx context.Context, uid string) ([]*biz.Child, error) {
+	//TODO implement me
+	panic("implement me")
+}
+
+func (repo *childRepo) Create(ctx context.Context, child *biz.Child) error {
+	//TODO implement me
+	panic("implement me")
+}
+
+func (repo *childRepo) Update(ctx context.Context, child *biz.Child) error {
+	//TODO implement me
+	panic("implement me")
+}
+
+func (repo *childRepo) Delete(ctx context.Context, cid string) error {
+	//TODO implement me
+	panic("implement me")
+}
+
+func NewChildRepo(data *Data) biz.ChildRepo {
+	return &childRepo{data: data}
+}

+ 14 - 8
internal/data/ent/child.go

@@ -32,7 +32,7 @@ type Child struct {
 	// 国际码
 	AreaCode string `json:"area_code,omitempty"`
 	// 头像地址
-	Avatar string `json:"avatar,omitempty"`
+	Avatar *string `json:"avatar,omitempty"`
 	// 性别 2: 男 3: 女
 	Gender int8 `json:"gender,omitempty"`
 	// 身高 单位: cm
@@ -40,7 +40,7 @@ type Child struct {
 	// 体重 单位:g
 	Weight int32 `json:"weight,omitempty"`
 	// 生日
-	Birthday string `json:"birthday,omitempty"`
+	Birthday *string `json:"birthday,omitempty"`
 	// 是否拒接陌生人
 	IsEnableBlockUnknownCall bool `json:"is_enable_block_unknown_call,omitempty"`
 	// 是否开启围栏
@@ -168,7 +168,8 @@ func (c *Child) assignValues(columns []string, values []any) error {
 			if value, ok := values[i].(*sql.NullString); !ok {
 				return fmt.Errorf("unexpected type %T for field avatar", values[i])
 			} else if value.Valid {
-				c.Avatar = value.String
+				c.Avatar = new(string)
+				*c.Avatar = value.String
 			}
 		case child.FieldGender:
 			if value, ok := values[i].(*sql.NullInt64); !ok {
@@ -192,7 +193,8 @@ func (c *Child) assignValues(columns []string, values []any) error {
 			if value, ok := values[i].(*sql.NullString); !ok {
 				return fmt.Errorf("unexpected type %T for field birthday", values[i])
 			} else if value.Valid {
-				c.Birthday = value.String
+				c.Birthday = new(string)
+				*c.Birthday = value.String
 			}
 		case child.FieldIsEnableBlockUnknownCall:
 			if value, ok := values[i].(*sql.NullBool); !ok {
@@ -277,8 +279,10 @@ func (c *Child) String() string {
 	builder.WriteString("area_code=")
 	builder.WriteString(c.AreaCode)
 	builder.WriteString(", ")
-	builder.WriteString("avatar=")
-	builder.WriteString(c.Avatar)
+	if v := c.Avatar; v != nil {
+		builder.WriteString("avatar=")
+		builder.WriteString(*v)
+	}
 	builder.WriteString(", ")
 	builder.WriteString("gender=")
 	builder.WriteString(fmt.Sprintf("%v", c.Gender))
@@ -289,8 +293,10 @@ func (c *Child) String() string {
 	builder.WriteString("weight=")
 	builder.WriteString(fmt.Sprintf("%v", c.Weight))
 	builder.WriteString(", ")
-	builder.WriteString("birthday=")
-	builder.WriteString(c.Birthday)
+	if v := c.Birthday; v != nil {
+		builder.WriteString("birthday=")
+		builder.WriteString(*v)
+	}
 	builder.WriteString(", ")
 	builder.WriteString("is_enable_block_unknown_call=")
 	builder.WriteString(fmt.Sprintf("%v", c.IsEnableBlockUnknownCall))

+ 2 - 2
internal/data/ent/child_create.go

@@ -455,7 +455,7 @@ func (cc *ChildCreate) createSpec() (*Child, *sqlgraph.CreateSpec) {
 	}
 	if value, ok := cc.mutation.Avatar(); ok {
 		_spec.SetField(child.FieldAvatar, field.TypeString, value)
-		_node.Avatar = value
+		_node.Avatar = &value
 	}
 	if value, ok := cc.mutation.Gender(); ok {
 		_spec.SetField(child.FieldGender, field.TypeInt8, value)
@@ -471,7 +471,7 @@ func (cc *ChildCreate) createSpec() (*Child, *sqlgraph.CreateSpec) {
 	}
 	if value, ok := cc.mutation.Birthday(); ok {
 		_spec.SetField(child.FieldBirthday, field.TypeString, value)
-		_node.Birthday = value
+		_node.Birthday = &value
 	}
 	if value, ok := cc.mutation.IsEnableBlockUnknownCall(); ok {
 		_spec.SetField(child.FieldIsEnableBlockUnknownCall, field.TypeBool, value)

+ 2 - 2
internal/data/ent/mutation.go

@@ -431,7 +431,7 @@ func (m *ChildMutation) Avatar() (r string, exists bool) {
 // OldAvatar returns the old "avatar" field's value of the Child entity.
 // If the Child object wasn't provided to the builder, the object is fetched from the database.
 // An error is returned if the mutation operation is not UpdateOne, or the database query fails.
-func (m *ChildMutation) OldAvatar(ctx context.Context) (v string, err error) {
+func (m *ChildMutation) OldAvatar(ctx context.Context) (v *string, err error) {
 	if !m.op.Is(OpUpdateOne) {
 		return v, errors.New("OldAvatar is only allowed on UpdateOne operations")
 	}
@@ -648,7 +648,7 @@ func (m *ChildMutation) Birthday() (r string, exists bool) {
 // OldBirthday returns the old "birthday" field's value of the Child entity.
 // If the Child object wasn't provided to the builder, the object is fetched from the database.
 // An error is returned if the mutation operation is not UpdateOne, or the database query fails.
-func (m *ChildMutation) OldBirthday(ctx context.Context) (v string, err error) {
+func (m *ChildMutation) OldBirthday(ctx context.Context) (v *string, err error) {
 	if !m.op.Is(OpUpdateOne) {
 		return v, errors.New("OldBirthday is only allowed on UpdateOne operations")
 	}

+ 2 - 0
internal/data/ent/schema/child.go

@@ -44,6 +44,7 @@ func (Child) Fields() []ent.Field {
 		field.String("avatar").
 			MaxLen(512).
 			Optional().
+			Nillable().
 			Comment("头像地址"),
 
 		field.Int8("gender").
@@ -65,6 +66,7 @@ func (Child) Fields() []ent.Field {
 		field.String("birthday").
 			MaxLen(32).
 			Optional().
+			Nillable().
 			Comment("生日"),
 
 		field.Bool("is_enable_block_unknown_call").

+ 12 - 6
internal/service/child.go

@@ -2,27 +2,33 @@ package service
 
 import (
 	"context"
+	"sikey/w303a/http/internal/biz"
 
 	pb "sikey/w303a/http/api/user/v2"
 )
 
 type ChildService struct {
 	pb.UnimplementedChildServer
+
+	childUsecase *biz.ChildUsecase
 }
 
-func NewChildService() *ChildService {
-	return &ChildService{}
+func NewChildService(childUsecase *biz.ChildUsecase) *ChildService {
+	return &ChildService{childUsecase: childUsecase}
 }
 
 func (s *ChildService) GetChild(ctx context.Context, req *pb.GetChildRequest) (*pb.GetChildResponse, error) {
-	return &pb.GetChildResponse{}, nil
+	return s.childUsecase.GetChild(ctx, req)
 }
+
 func (s *ChildService) CreateChild(ctx context.Context, req *pb.CreateChildRequest) (*pb.CreateChildResponse, error) {
-	return &pb.CreateChildResponse{}, nil
+	return s.childUsecase.CreateChild(ctx, req)
 }
+
 func (s *ChildService) UpdateChild(ctx context.Context, req *pb.UpdateChildRequest) (*pb.UpdateChildResponse, error) {
-	return &pb.UpdateChildResponse{}, nil
+	return s.childUsecase.UpdateChild(ctx, req)
 }
+
 func (s *ChildService) DeleteChild(ctx context.Context, req *pb.DeleteChildRequest) (*pb.DeleteChildResponse, error) {
-	return &pb.DeleteChildResponse{}, nil
+	return s.childUsecase.DeleteChild(ctx, req)
 }

+ 1 - 1
internal/service/service.go

@@ -3,4 +3,4 @@ package service
 import "github.com/google/wire"
 
 // ProviderSet is service providers.
-var ProviderSet = wire.NewSet(NewUserService)
+var ProviderSet = wire.NewSet(NewUserService, NewChildService)

Някои файлове не бяха показани, защото твърде много файлове са промени