diff --git a/internal/api/manage/management_chat.go b/internal/api/manage/management_chat.go index d18dfc451..a2254a70a 100644 --- a/internal/api/manage/management_chat.go +++ b/internal/api/manage/management_chat.go @@ -138,12 +138,6 @@ func ManagementSendMsg(c *gin.Context) { data = VideoElem{} case constant.File: data = FileElem{} - //case constant.AtText: - // data = AtElem{} - //case constant.Merger: - // data = - //case constant.Card: - //case constant.Location: case constant.Custom: data = CustomElem{} case constant.Revoke: @@ -161,16 +155,16 @@ func ManagementSendMsg(c *gin.Context) { //case constant.Typing: //case constant.Quote: default: - c.JSON(http.StatusBadRequest, gin.H{"errCode": 404, "errMsg": "contentType err"}) + c.JSON(http.StatusOK, gin.H{"errCode": 404, "errMsg": "contentType err"}) log.Error(c.PostForm("operationID"), "contentType err", c.PostForm("content")) return } if err := mapstructure.WeakDecode(params.Content, &data); err != nil { - c.JSON(http.StatusBadRequest, gin.H{"errCode": 401, "errMsg": err.Error()}) + c.JSON(http.StatusOK, gin.H{"errCode": 401, "errMsg": err.Error()}) log.Error(c.PostForm("operationID"), "content to Data struct err", err.Error()) return } else if err := validate.Struct(data); err != nil { - c.JSON(http.StatusBadRequest, gin.H{"errCode": 403, "errMsg": err.Error()}) + c.JSON(http.StatusOK, gin.H{"errCode": 403, "errMsg": err.Error()}) log.Error(c.PostForm("operationID"), "data args validate err", err.Error()) return } @@ -178,12 +172,13 @@ func ManagementSendMsg(c *gin.Context) { token := c.Request.Header.Get("token") claims, err := token_verify.ParseToken(token, params.OperationID) if err != nil { - log.NewError(params.OperationID, "parse token failed", err.Error()) - c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": "parse token failed", "sendTime": 0, "MsgID": ""}) + log.NewError(params.OperationID, "parse token failed", err.Error(), token) + c.JSON(http.StatusOK, gin.H{"errCode": 400, "errMsg": "parse token failed", "sendTime": 0, "MsgID": ""}) return } if !utils.IsContain(claims.UID, config.Config.Manager.AppManagerUid) { - c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": "not authorized", "sendTime": 0, "MsgID": ""}) + log.NewError(params.OperationID, "not authorized", token) + c.JSON(http.StatusOK, gin.H{"errCode": 400, "errMsg": "not authorized", "sendTime": 0, "MsgID": ""}) return } @@ -191,13 +186,13 @@ func ManagementSendMsg(c *gin.Context) { case constant.SingleChatType: if len(params.RecvID) == 0 { log.NewError(params.OperationID, "recvID is a null string") - c.JSON(http.StatusBadRequest, gin.H{"errCode": 405, "errMsg": "recvID is a null string", "sendTime": 0, "MsgID": ""}) + c.JSON(http.StatusOK, gin.H{"errCode": 405, "errMsg": "recvID is a null string", "sendTime": 0, "MsgID": ""}) return } case constant.GroupChatType, constant.SuperGroupChatType: if len(params.GroupID) == 0 { log.NewError(params.OperationID, "groupID is a null string") - c.JSON(http.StatusBadRequest, gin.H{"errCode": 405, "errMsg": "groupID is a null string", "sendTime": 0, "MsgID": ""}) + c.JSON(http.StatusOK, gin.H{"errCode": 405, "errMsg": "groupID is a null string", "sendTime": 0, "MsgID": ""}) return } diff --git a/internal/cron_task/clear_msg.go b/internal/cron_task/clear_msg.go index 078eee136..1db1c0b6c 100644 --- a/internal/cron_task/clear_msg.go +++ b/internal/cron_task/clear_msg.go @@ -10,22 +10,23 @@ import ( goRedis "github.com/go-redis/redis/v8" "github.com/golang/protobuf/proto" "math" + "strconv" + "strings" ) const oldestList = 0 const newestList = -1 func ResetUserGroupMinSeq(operationID, groupID string, userIDList []string) error { - var delMsgIDList [][2]interface{} - minSeq, err := deleteMongoMsg(operationID, groupID, oldestList, &delMsgIDList) + var delStruct delMsgRecursionStruct + minSeq, err := deleteMongoMsg(operationID, groupID, oldestList, &delStruct) if err != nil { log.NewError(operationID, utils.GetSelfFuncName(), groupID, "deleteMongoMsg failed") - return utils.Wrap(err, "") } if minSeq == 0 { return nil } - log.NewDebug(operationID, utils.GetSelfFuncName(), "delMsgIDList:", delMsgIDList, "minSeq", minSeq) + log.NewDebug(operationID, utils.GetSelfFuncName(), "delMsgIDList:", delStruct, "minSeq", minSeq) for _, userID := range userIDList { userMinSeq, err := db.DB.GetGroupUserMinSeq(groupID, userID) if err != nil && err != goRedis.Nil { @@ -45,26 +46,23 @@ func ResetUserGroupMinSeq(operationID, groupID string, userIDList []string) erro } func DeleteMongoMsgAndResetRedisSeq(operationID, userID string) error { - var delMsgIDList [][2]interface{} - minSeq, err := deleteMongoMsg(operationID, userID, oldestList, &delMsgIDList) + var delStruct delMsgRecursionStruct + minSeq, err := deleteMongoMsg(operationID, userID, oldestList, &delStruct) if err != nil { return utils.Wrap(err, "") } if minSeq == 0 { return nil } - log.NewDebug(operationID, utils.GetSelfFuncName(), "delMsgIDMap: ", delMsgIDList, "minSeq", minSeq) + log.NewDebug(operationID, utils.GetSelfFuncName(), "delMsgIDMap: ", delStruct, "minSeq", minSeq) err = db.DB.SetUserMinSeq(userID, minSeq) - return err + return utils.Wrap(err, "") } -func delMongoMsgs(operationID string, delMsgIDList *[][2]interface{}) error { - if len(*delMsgIDList) > 0 { - var IDList []string - for _, v := range *delMsgIDList { - IDList = append(IDList, v[0].(string)) - } - err := db.DB.DelMongoMsgs(IDList) +// del list +func delMongoMsgsPhysical(uidList []string) error { + if len(uidList) > 0 { + err := db.DB.DelMongoMsgs(uidList) if err != nil { return utils.Wrap(err, "DelMongoMsgs failed") } @@ -72,75 +70,106 @@ func delMongoMsgs(operationID string, delMsgIDList *[][2]interface{}) error { return nil } +type delMsgRecursionStruct struct { + minSeq uint32 + delUidList []string +} + +func (d *delMsgRecursionStruct) getSetMinSeq() uint32 { + return d.minSeq +} + +// index 0....19(del) 20...69 +// seq 70 +// set minSeq 21 // recursion -func deleteMongoMsg(operationID string, ID string, index int64, delMsgIDList *[][2]interface{}) (uint32, error) { - // 从最旧的列表开始找 +func deleteMongoMsg(operationID string, ID string, index int64, delStruct *delMsgRecursionStruct) (uint32, error) { + // find from oldest list msgs, err := db.DB.GetUserMsgListByIndex(ID, index) if err != nil || msgs.UID == "" { if err != nil { - log.NewError(operationID, utils.GetSelfFuncName(), "GetUserMsgListByIndex failed", err.Error(), index, ID) + if err == db.ErrMsgListNotExist { + log.NewInfo(operationID, utils.GetSelfFuncName(), "ID:", ID, "index:", index, err.Error()) + } else { + log.NewError(operationID, utils.GetSelfFuncName(), "GetUserMsgListByIndex failed", err.Error(), index, ID) + } } - return getDelMaxSeqByIDList(*delMsgIDList), delMongoMsgs(operationID, delMsgIDList) + // 获取报错,或者获取不到了,物理删除并且返回seq + err = delMongoMsgsPhysical(delStruct.delUidList) + if err != nil { + return 0, err + } + return delStruct.getSetMinSeq(), nil } + log.NewDebug(operationID, "ID:", ID, "index:", index, "uid:", msgs.UID, "len:", len(msgs.Msg)) if len(msgs.Msg) > db.GetSingleGocMsgNum() { log.NewWarn(operationID, utils.GetSelfFuncName(), "msgs too large", len(msgs.Msg), msgs.UID) } - log.NewDebug(operationID, utils.GetSelfFuncName(), "get msgs: ", msgs.UID) for i, msg := range msgs.Msg { - // 找到列表中不需要删除的消息了 - if utils.GetCurrentTimestampByMill() < msg.SendTime+int64(config.Config.Mongo.DBRetainChatRecords)*24*60*60*1000 { - if err := delMongoMsgs(operationID, delMsgIDList); err != nil { + // 找到列表中不需要删除的消息了, 表示为递归到最后一个块 + if utils.GetCurrentTimestampByMill() < msg.SendTime+(int64(config.Config.Mongo.DBRetainChatRecords)*24*60*60*1000) { + log.NewDebug(operationID, ID, "find uid", msgs.UID) + // 删除块失败 递归结束 返回0 + if err := delMongoMsgsPhysical(delStruct.delUidList); err != nil { return 0, err } - minSeq := getDelMaxSeqByIDList(*delMsgIDList) + // unMarshall失败 块删除成功 设置为最小seq + msgPb := &server_api_params.MsgData{} + if err = proto.Unmarshal(msg.Msg, msgPb); err != nil { + return delStruct.getSetMinSeq(), utils.Wrap(err, "") + } + // 如果不是块中第一个,就把前面比他早插入的全部设置空 seq字段除外。 if i > 0 { - msgPb := &server_api_params.MsgData{} - err = proto.Unmarshal(msg.Msg, msgPb) + err = db.DB.ReplaceMsgToBlankByIndex(msgs.UID, i-1) if err != nil { - log.NewError(operationID, utils.GetSelfFuncName(), err.Error(), ID, index) - } else { - err = db.DB.ReplaceMsgToBlankByIndex(msgs.UID, i-1) - if err != nil { - log.NewError(operationID, utils.GetSelfFuncName(), err.Error(), msgs.UID, i) - return minSeq, nil - } - minSeq = msgPb.Seq + log.NewError(operationID, utils.GetSelfFuncName(), err.Error(), msgs.UID, i) + return delStruct.getSetMinSeq(), utils.Wrap(err, "") } } - return minSeq, nil + // 递归结束 + return msgPb.Seq, nil } } - if len(msgs.Msg) > 0 { - msgPb := &server_api_params.MsgData{} - err = proto.Unmarshal(msgs.Msg[len(msgs.Msg)-1].Msg, msgPb) - if err != nil { - log.NewError(operationID, utils.GetSelfFuncName(), err.Error(), len(msgs.Msg)-1, msgs.UID) - return 0, utils.Wrap(err, "proto.Unmarshal failed") - } - *delMsgIDList = append(*delMsgIDList, [2]interface{}{msgs.UID, msgPb.Seq}) - } - // 没有找到 代表需要全部删除掉 继续递归查找下一个比较旧的列表 - seq, err := deleteMongoMsg(operationID, utils.GetSelfFuncName(), index+1, delMsgIDList) + // 该列表中消息全部为老消息并且列表满了, 加入删除列表继续递归 + lastMsgPb := &server_api_params.MsgData{} + err = proto.Unmarshal(msgs.Msg[len(msgs.Msg)-1].Msg, lastMsgPb) if err != nil { - return 0, utils.Wrap(err, "deleteMongoMsg failed") + log.NewError(operationID, utils.GetSelfFuncName(), err.Error(), len(msgs.Msg)-1, msgs.UID) + return 0, utils.Wrap(err, "proto.Unmarshal failed") + } + delStruct.minSeq = lastMsgPb.Seq + if msgListIsFull(msgs) { + delStruct.delUidList = append(delStruct.delUidList, msgs.UID) + } + log.NewDebug(operationID, ID, "continue", delStruct) + // 继续递归 index+1 + seq, err := deleteMongoMsg(operationID, ID, index+1, delStruct) + if err != nil { + return seq, utils.Wrap(err, "deleteMongoMsg failed") } return seq, nil } -func getDelMaxSeqByIDList(delMsgIDList [][2]interface{}) uint32 { - if len(delMsgIDList) == 0 { - return 0 +func msgListIsFull(chat *db.UserChat) bool { + index, _ := strconv.Atoi(strings.Split(chat.UID, ":")[1]) + if index == 0 { + if len(chat.Msg) >= 4999 { + return true + } } - return delMsgIDList[len(delMsgIDList)-1][1].(uint32) + if len(chat.Msg) >= 5000 { + return true + } + return false } func checkMaxSeqWithMongo(operationID, ID string, diffusionType int) error { - var maxSeq uint64 + var seqRedis uint64 var err error if diffusionType == constant.WriteDiffusion { - maxSeq, err = db.DB.GetUserMaxSeq(ID) + seqRedis, err = db.DB.GetUserMaxSeq(ID) } else { - maxSeq, err = db.DB.GetGroupMaxSeq(ID) + seqRedis, err = db.DB.GetGroupMaxSeq(ID) } if err != nil { if err == goRedis.Nil { @@ -152,13 +181,20 @@ func checkMaxSeqWithMongo(operationID, ID string, diffusionType int) error { if err != nil { return utils.Wrap(err, "GetNewestMsg failed") } + if msg == nil { + return nil + } + var seqMongo uint32 msgPb := &server_api_params.MsgData{} err = proto.Unmarshal(msg.Msg, msgPb) if err != nil { return utils.Wrap(err, "") } - if math.Abs(float64(msgPb.Seq-uint32(maxSeq))) > 10 { - log.NewWarn(operationID, utils.GetSelfFuncName(), maxSeq, msgPb.Seq, "redis maxSeq is different with msg.Seq") + seqMongo = msgPb.Seq + if math.Abs(float64(seqMongo-uint32(seqRedis))) > 10 { + log.NewWarn(operationID, utils.GetSelfFuncName(), seqMongo, seqRedis, "redis maxSeq is different with msg.Seq > 10", ID, diffusionType) + } else { + log.NewInfo(operationID, utils.GetSelfFuncName(), diffusionType, ID, "seq and msg OK", seqMongo, seqRedis) } return nil } diff --git a/internal/cron_task/clear_msg_test.go b/internal/cron_task/clear_msg_test.go new file mode 100644 index 000000000..b1621c26d --- /dev/null +++ b/internal/cron_task/clear_msg_test.go @@ -0,0 +1,34 @@ +package cronTask + +import ( + "Open_IM/pkg/common/constant" + "Open_IM/pkg/common/log" + "Open_IM/pkg/utils" + "testing" +) + +func TestDeleteMongoMsgAndResetRedisSeq(t *testing.T) { + operationID := getCronTaskOperationID() + testUserIDList := []string{"test_del_id1", "test_del_id2", "test_del_id3", "test_del_id4", "test_del_id5"} + for _, userID := range testUserIDList { + operationID = userID + "-" + operationID + if err := DeleteMongoMsgAndResetRedisSeq(operationID, userID); err != nil { + t.Error("checkMaxSeqWithMongo failed", userID) + } + if err := checkMaxSeqWithMongo(operationID, userID, constant.WriteDiffusion); err != nil { + t.Error("checkMaxSeqWithMongo failed", userID) + } + } + + testWorkingGroupIDList := []string{"test_del_id1", "test_del_id2", "test_del_id3", "test_del_id4", "test_del_id5"} + for _, groupID := range testWorkingGroupIDList { + operationID = groupID + "-" + operationID + log.NewDebug(operationID, utils.GetSelfFuncName(), "groupID:", groupID, "userIDList:", testUserIDList) + if err := ResetUserGroupMinSeq(operationID, groupID, testUserIDList); err != nil { + t.Error("checkMaxSeqWithMongo failed", groupID) + } + if err := checkMaxSeqWithMongo(operationID, groupID, constant.ReadDiffusion); err != nil { + t.Error("checkMaxSeqWithMongo failed", groupID) + } + } +} diff --git a/internal/cron_task/cron_task.go b/internal/cron_task/cron_task.go index 59a06fef1..b493b1f37 100644 --- a/internal/cron_task/cron_task.go +++ b/internal/cron_task/cron_task.go @@ -16,29 +16,33 @@ const cronTaskOperationID = "cronTaskOperationID-" func StartCronTask() { log.NewPrivateLog("cron") - log.NewInfo(utils.OperationIDGenerator(), "start cron task") + log.NewInfo(utils.OperationIDGenerator(), "start cron task", "cron config", config.Config.Mongo.ChatRecordsClearTime) c := cron.New() - fmt.Println("config", config.Config.Mongo.ChatRecordsClearTime) + fmt.Println("cron config", config.Config.Mongo.ChatRecordsClearTime) _, err := c.AddFunc(config.Config.Mongo.ChatRecordsClearTime, func() { + // user msg clear operationID := getCronTaskOperationID() log.NewInfo(operationID, "====================== start del cron task ======================") userIDList, err := im_mysql_model.SelectAllUserID() if err == nil { log.NewDebug(operationID, utils.GetSelfFuncName(), "userIDList: ", userIDList) + userIDList = []string{"4158779020"} for _, userID := range userIDList { if err := DeleteMongoMsgAndResetRedisSeq(operationID, userID); err != nil { log.NewError(operationID, utils.GetSelfFuncName(), err.Error(), userID) } - if err := checkMaxSeqWithMongo(operationID, userID, constant.WriteDiffusion); err != nil { - log.NewError(operationID, utils.GetSelfFuncName(), userID, err) - } + //if err := checkMaxSeqWithMongo(operationID, userID, constant.WriteDiffusion); err != nil { + // log.NewError(operationID, utils.GetSelfFuncName(), userID, err) + //} } } else { log.NewError(operationID, utils.GetSelfFuncName(), err.Error()) } - + return + // working group msg clear workingGroupIDList, err := im_mysql_model.GetGroupIDListByGroupType(constant.WorkingGroup) if err == nil { + log.NewDebug(operationID, utils.GetSelfFuncName(), "workingGroupIDList: ", workingGroupIDList) for _, groupID := range workingGroupIDList { userIDList, err = rocksCache.GetGroupMemberIDListFromCache(groupID) if err != nil { @@ -49,26 +53,25 @@ func StartCronTask() { if err := ResetUserGroupMinSeq(operationID, groupID, userIDList); err != nil { log.NewError(operationID, utils.GetSelfFuncName(), err.Error(), groupID, userIDList) } - if err := checkMaxSeqWithMongo(operationID, groupID, constant.ReadDiffusion); err != nil { - log.NewError(operationID, utils.GetSelfFuncName(), groupID, err) - } + //if err := checkMaxSeqWithMongo(operationID, groupID, constant.ReadDiffusion); err != nil { + // log.NewError(operationID, utils.GetSelfFuncName(), groupID, err) + //} } } else { log.NewError(operationID, utils.GetSelfFuncName(), err.Error()) - return } log.NewInfo(operationID, "====================== start del cron finished ======================") }) if err != nil { - fmt.Println("start cron failed", err.Error()) + fmt.Println("start cron failed", err.Error(), config.Config.Mongo.ChatRecordsClearTime) panic(err) } c.Start() fmt.Println("start cron task success") for { - time.Sleep(time.Second) + time.Sleep(10 * time.Second) } } diff --git a/internal/msg_gateway/gate/logic.go b/internal/msg_gateway/gate/logic.go index 7b77840a7..90ef3ce63 100644 --- a/internal/msg_gateway/gate/logic.go +++ b/internal/msg_gateway/gate/logic.go @@ -8,6 +8,7 @@ import ( promePkg "Open_IM/pkg/common/prometheus" "Open_IM/pkg/grpc-etcdv3/getcdv3" pbChat "Open_IM/pkg/proto/msg" + push "Open_IM/pkg/proto/push" pbRtc "Open_IM/pkg/proto/rtc" sdk_ws "Open_IM/pkg/proto/sdk_ws" "Open_IM/pkg/utils" @@ -58,7 +59,7 @@ func (ws *WServer) msgParse(conn *UserConn, binaryMsg []byte) { promePkg.PromeInc(promePkg.PullMsgBySeqListTotalCounter) case constant.WsLogoutMsg: log.NewInfo(m.OperationID, "conn.Close()", m.SendID, m.MsgIncr, m.ReqIdentifier) - // conn.Close() + ws.userLogoutReq(conn, &m) default: log.Error(m.OperationID, "ReqIdentifier failed ", m.SendID, m.MsgIncr, m.ReqIdentifier) } @@ -157,7 +158,6 @@ func (ws *WServer) pullMsgBySeqListReq(conn *UserConn, m *Req) { ws.pullMsgBySeqListResp(conn, m, nReply) } } - func (ws *WServer) pullMsgBySeqListResp(conn *UserConn, m *Req, pb *sdk_ws.PullMessageBySeqListResp) { log.NewInfo(m.OperationID, "pullMsgBySeqListResp come here ", pb.String()) c, _ := proto.Marshal(pb) @@ -173,7 +173,40 @@ func (ws *WServer) pullMsgBySeqListResp(conn *UserConn, m *Req, pb *sdk_ws.PullM len(mReply.Data)) ws.sendMsg(conn, mReply) } +func (ws *WServer) userLogoutReq(conn *UserConn, m *Req) { + log.NewInfo(m.OperationID, "Ws call success to userLogoutReq start", m.SendID, m.ReqIdentifier, m.MsgIncr, string(m.Data)) + rpcReq := push.DelUserPushTokenReq{} + rpcReq.UserID = m.SendID + rpcReq.OperationID = m.OperationID + grpcConn := getcdv3.GetDefaultConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImPushName, m.OperationID) + if grpcConn == nil { + errMsg := rpcReq.OperationID + "getcdv3.GetDefaultConn == nil" + log.NewError(rpcReq.OperationID, errMsg) + ws.userLogoutResp(conn, m) + return + } + msgClient := push.NewPushMsgServiceClient(grpcConn) + reply, err := msgClient.DelUserPushToken(context.Background(), &rpcReq) + if err != nil { + log.NewError(rpcReq.OperationID, "DelUserPushToken err", err.Error()) + ws.userLogoutResp(conn, m) + } else { + log.NewInfo(rpcReq.OperationID, "rpc call success to DelUserPushToken", reply.String()) + ws.userLogoutResp(conn, m) + } + ws.userLogoutResp(conn, m) + +} +func (ws *WServer) userLogoutResp(conn *UserConn, m *Req) { + mReply := Resp{ + ReqIdentifier: m.ReqIdentifier, + MsgIncr: m.MsgIncr, + OperationID: m.OperationID, + } + ws.sendMsg(conn, mReply) + _ = conn.Close() +} func (ws *WServer) sendMsgReq(conn *UserConn, m *Req) { sendMsgAllCountLock.Lock() sendMsgAllCount++ @@ -233,6 +266,7 @@ func (ws *WServer) sendMsgResp(conn *UserConn, m *Req, pb *pbChat.SendMsgResp) { Data: b, } ws.sendMsg(conn, mReply) + } func (ws *WServer) sendSignalMsgReq(conn *UserConn, m *Req) { diff --git a/internal/msg_gateway/gate/ws_server.go b/internal/msg_gateway/gate/ws_server.go index 240db5923..eb101f2ff 100644 --- a/internal/msg_gateway/gate/ws_server.go +++ b/internal/msg_gateway/gate/ws_server.go @@ -29,6 +29,7 @@ import ( type UserConn struct { *websocket.Conn w *sync.Mutex + platformID int32 PushedMaxSeq uint32 } type WServer struct { @@ -74,7 +75,7 @@ func (ws *WServer) wsHandler(w http.ResponseWriter, r *http.Request) { log.Error(operationID, "upgrade http conn err", err.Error(), query) return } else { - newConn := &UserConn{conn, new(sync.Mutex), 0} + newConn := &UserConn{conn, new(sync.Mutex), utils.StringToInt32(query["platformID"][0]), 0} userCount++ ws.addUserConn(query["sendID"][0], utils.StringToInt(query["platformID"][0]), newConn, query["token"][0], operationID) go ws.readMsg(newConn) diff --git a/internal/push/logic/push_rpc_server.go b/internal/push/logic/push_rpc_server.go index e48906c00..b2ac3570c 100644 --- a/internal/push/logic/push_rpc_server.go +++ b/internal/push/logic/push_rpc_server.go @@ -3,6 +3,7 @@ package logic import ( "Open_IM/pkg/common/config" "Open_IM/pkg/common/constant" + "Open_IM/pkg/common/db" "Open_IM/pkg/common/log" promePkg "Open_IM/pkg/common/prometheus" "Open_IM/pkg/grpc-etcdv3/getcdv3" @@ -10,7 +11,6 @@ import ( "Open_IM/pkg/utils" "context" "net" - "strconv" "strings" @@ -91,3 +91,15 @@ func (r *RPCServer) PushMsg(_ context.Context, pbData *pbPush.PushMsgReq) (*pbPu }, nil } + +func (r *RPCServer) DelUserPushToken(c context.Context, req *pbPush.DelUserPushTokenReq) (*pbPush.DelUserPushTokenResp, error) { + var resp pbPush.DelUserPushTokenResp + err := db.DB.DelFcmToken(req.UserID, int(req.PlatformID)) + if err != nil { + errMsg := req.OperationID + " " + "SetFcmToken failed " + err.Error() + log.NewError(req.OperationID, errMsg) + resp.ErrCode = 500 + resp.ErrMsg = errMsg + } + return &resp, nil +} diff --git a/internal/rpc/auth/auth.go b/internal/rpc/auth/auth.go index dfa7f47cc..5e929fd4e 100644 --- a/internal/rpc/auth/auth.go +++ b/internal/rpc/auth/auth.go @@ -28,8 +28,13 @@ func (rpc *rpcAuth) UserRegister(_ context.Context, req *pbAuth.UserRegisterReq) log.NewInfo(req.OperationID, utils.GetSelfFuncName(), " rpc args ", req.String()) var user db.User utils.CopyStructFields(&user, req.UserInfo) - if req.UserInfo.Birth != 0 { - user.Birth = utils.UnixSecondToTime(int64(req.UserInfo.Birth)) + if req.UserInfo.BirthStr != "" { + time, err := utils.TimeStringToTime(req.UserInfo.BirthStr) + if err != nil { + log.NewError(req.OperationID, "TimeStringToTime failed ", err.Error(), req.UserInfo.BirthStr) + return &pbAuth.UserRegisterResp{CommonResp: &pbAuth.CommonResp{ErrCode: constant.ErrArgs.ErrCode, ErrMsg: "TimeStringToTime failed:" + err.Error()}}, nil + } + user.Birth = time } log.Debug(req.OperationID, "copy ", user, req.UserInfo) err := imdb.UserRegister(user) diff --git a/internal/rpc/msg/pull_message.go b/internal/rpc/msg/pull_message.go index 1a99a14e6..83f2275f2 100644 --- a/internal/rpc/msg/pull_message.go +++ b/internal/rpc/msg/pull_message.go @@ -61,9 +61,9 @@ func (rpc *rpcChat) PullMessageBySeqList(_ context.Context, in *open_im_sdk.Pull msgList, err1 := commonDB.DB.GetMsgBySeqListMongo2(in.UserID, failedSeqList, in.OperationID) if err1 != nil { promePkg.PromeAdd(promePkg.MsgPullFromMongoFailedCounter, len(failedSeqList)) - log.Error(in.OperationID, "PullMessageBySeqList data error", in.String(), err.Error()) + log.Error(in.OperationID, "PullMessageBySeqList data error", in.String(), err1.Error()) resp.ErrCode = 201 - resp.ErrMsg = err.Error() + resp.ErrMsg = err1.Error() return resp, nil } else { promePkg.PromeAdd(promePkg.MsgPullFromMongoSuccessCounter, len(msgList)) @@ -88,9 +88,9 @@ func (rpc *rpcChat) PullMessageBySeqList(_ context.Context, in *open_im_sdk.Pull msgList, err1 := commonDB.DB.GetSuperGroupMsgBySeqListMongo(k, failedSeqList, in.OperationID) if err1 != nil { promePkg.PromeAdd(promePkg.MsgPullFromMongoFailedCounter, len(failedSeqList)) - log.Error(in.OperationID, "PullMessageBySeqList data error", in.String(), err.Error()) + log.Error(in.OperationID, "PullMessageBySeqList data error", in.String(), err1.Error()) resp.ErrCode = 201 - resp.ErrMsg = err.Error() + resp.ErrMsg = err1.Error() return resp, nil } else { promePkg.PromeAdd(promePkg.MsgPullFromMongoSuccessCounter, len(msgList)) diff --git a/internal/rpc/user/user.go b/internal/rpc/user/user.go index 80bf1ca89..27db600ec 100644 --- a/internal/rpc/user/user.go +++ b/internal/rpc/user/user.go @@ -125,7 +125,6 @@ func syncPeerUserConversation(conversation *pbConversation.Conversation, operati func (s *userServer) GetUserInfo(ctx context.Context, req *pbUser.GetUserInfoReq) (*pbUser.GetUserInfoResp, error) { log.NewInfo(req.OperationID, "GetUserInfo args ", req.String()) - var userInfoList []*sdkws.UserInfo if len(req.UserIDList) > 0 { for _, userID := range req.UserIDList { @@ -136,7 +135,7 @@ func (s *userServer) GetUserInfo(ctx context.Context, req *pbUser.GetUserInfoReq continue } utils.CopyStructFields(&userInfo, user) - userInfo.Birth = uint32(user.Birth.Unix()) + userInfo.BirthStr = utils.TimeToString(user.Birth) userInfoList = append(userInfoList, &userInfo) } } else { @@ -411,8 +410,14 @@ func (s *userServer) UpdateUserInfo(ctx context.Context, req *pbUser.UpdateUserI } var user db.User utils.CopyStructFields(&user, req.UserInfo) - if req.UserInfo.Birth != 0 { - user.Birth = utils.UnixSecondToTime(int64(req.UserInfo.Birth)) + + if req.UserInfo.BirthStr != "" { + time, err := utils.TimeStringToTime(req.UserInfo.BirthStr) + if err != nil { + log.NewError(req.OperationID, "TimeStringToTime failed ", err.Error(), req.UserInfo.BirthStr) + return &pbUser.UpdateUserInfoResp{CommonResp: &pbUser.CommonResp{ErrCode: constant.ErrArgs.ErrCode, ErrMsg: "TimeStringToTime failed:" + err.Error()}}, nil + } + user.Birth = time } err := imdb.UpdateUserInfo(user) @@ -600,7 +605,7 @@ func (s *userServer) GetUsers(ctx context.Context, req *pbUser.GetUsersReq) (*pb var user sdkws.UserInfo utils.CopyStructFields(&user, userDB) user.CreateTime = uint32(userDB.CreateTime.Unix()) - user.Birth = uint32(userDB.Birth.Unix()) + user.BirthStr = utils.TimeToString(userDB.Birth) resp.UserList = append(resp.UserList, &pbUser.CmsUser{User: &user}) } @@ -628,7 +633,7 @@ func (s *userServer) GetUsers(ctx context.Context, req *pbUser.GetUsersReq) (*pb func (s *userServer) AddUser(ctx context.Context, req *pbUser.AddUserReq) (*pbUser.AddUserResp, error) { log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "req: ", req.String()) resp := &pbUser.AddUserResp{CommonResp: &pbUser.CommonResp{}} - err := imdb.AddUser(req.UserInfo.UserID, req.UserInfo.PhoneNumber, req.UserInfo.Nickname, req.UserInfo.Email, req.UserInfo.Gender, req.UserInfo.FaceURL, req.UserInfo.Birth) + err := imdb.AddUser(req.UserInfo.UserID, req.UserInfo.PhoneNumber, req.UserInfo.Nickname, req.UserInfo.Email, req.UserInfo.Gender, req.UserInfo.FaceURL, req.UserInfo.BirthStr) if err != nil { log.NewError(req.OperationID, utils.GetSelfFuncName(), "AddUser", err.Error(), req.String()) resp.CommonResp.ErrCode = constant.ErrDB.ErrCode diff --git a/pkg/base_info/public_struct.go b/pkg/base_info/public_struct.go index b3b918b45..ba7195d62 100644 --- a/pkg/base_info/public_struct.go +++ b/pkg/base_info/public_struct.go @@ -17,6 +17,7 @@ type ApiUserInfo struct { CreateTime int64 `json:"createTime"` LoginLimit int32 `json:"loginLimit" binding:"omitempty"` Ex string `json:"ex" binding:"omitempty,max=1024"` + BirthStr string `json:"birthStr" binding:"omitempty"` } //type Conversation struct { diff --git a/pkg/common/db/RedisModel.go b/pkg/common/db/RedisModel.go index d36202367..a0eab5c30 100644 --- a/pkg/common/db/RedisModel.go +++ b/pkg/common/db/RedisModel.go @@ -410,15 +410,19 @@ func (d *DataBases) GetSendMsgStatus(operationID string) (int, error) { return status, err } -func (d *DataBases) SetFcmToken(account string, platformid int, fcmToken string, expireTime int64) (err error) { - key := FcmToken + account + ":" + strconv.Itoa(platformid) +func (d *DataBases) SetFcmToken(account string, platformID int, fcmToken string, expireTime int64) (err error) { + key := FcmToken + account + ":" + strconv.Itoa(platformID) return d.RDB.Set(context.Background(), key, fcmToken, time.Duration(expireTime)*time.Second).Err() } -func (d *DataBases) GetFcmToken(account string, platformid int) (string, error) { - key := FcmToken + account + ":" + strconv.Itoa(platformid) +func (d *DataBases) GetFcmToken(account string, platformID int) (string, error) { + key := FcmToken + account + ":" + strconv.Itoa(platformID) return d.RDB.Get(context.Background(), key).Result() } +func (d *DataBases) DelFcmToken(account string, platformID int) error { + key := FcmToken + account + ":" + strconv.Itoa(platformID) + return d.RDB.Del(context.Background(), key).Err() +} func (d *DataBases) IncrUserBadgeUnreadCountSum(uid string) (int, error) { key := userBadgeUnreadCountSum + uid seq, err := d.RDB.Incr(context.Background(), key).Result() diff --git a/pkg/common/db/model.go b/pkg/common/db/model.go index 54d9c5726..5cdd83bb0 100644 --- a/pkg/common/db/model.go +++ b/pkg/common/db/model.go @@ -125,23 +125,6 @@ func init() { fmt.Println("createMongoIndex success") DB.mongoClient = mongoClient - // redis pool init - //DB.redisPool = &redis.Pool{ - // MaxIdle: config.Config.Redis.DBMaxIdle, - // MaxActive: config.Config.Redis.DBMaxActive, - // IdleTimeout: time.Duration(config.Config.Redis.DBIdleTimeout) * time.Second, - // Dial: func() (redis.Conn, error) { - // return redis.Dial( - // "tcp", - // config.Config.Redis.DBAddress, - // redis.DialReadTimeout(time.Duration(1000)*time.Millisecond), - // redis.DialWriteTimeout(time.Duration(1000)*time.Millisecond), - // redis.DialConnectTimeout(time.Duration(1000)*time.Millisecond), - // redis.DialDatabase(0), - // redis.DialPassword(config.Config.Redis.DBPassWord), - // ) - // }, - //} ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) defer cancel() if config.Config.Redis.EnableCluster { diff --git a/pkg/common/db/mongoModel.go b/pkg/common/db/mongoModel.go index 1e4d7b01d..88805b902 100644 --- a/pkg/common/db/mongoModel.go +++ b/pkg/common/db/mongoModel.go @@ -12,6 +12,7 @@ import ( "fmt" "github.com/go-redis/redis/v8" "github.com/gogo/protobuf/sortkeys" + "go.mongodb.org/mongo-driver/bson/primitive" "go.mongodb.org/mongo-driver/mongo" "go.mongodb.org/mongo-driver/mongo/options" "math/rand" @@ -55,6 +56,8 @@ type GroupMember_x struct { UIDList []string } +var ErrMsgListNotExist = errors.New("user not have msg in mongoDB") + func (d *DataBases) GetMinSeqFromMongo(uid string) (MinSeq uint32, err error) { return 1, nil //var i, NB uint32 @@ -265,18 +268,19 @@ func (d *DataBases) GetUserMsgListByIndex(ID string, index int64) (*UserChat, er regex := fmt.Sprintf("^%s", ID) findOpts := options.Find().SetLimit(1).SetSkip(index).SetSort(bson.M{"uid": 1}) var msgs []UserChat - cursor, err := c.Find(ctx, bson.M{"uid": bson.M{"$regex": regex}}, findOpts) - if err != nil { - return nil, err - } - err = cursor.Decode(&msgs) + //primitive.Regex{Pattern: regex} + cursor, err := c.Find(ctx, bson.M{"uid": primitive.Regex{Pattern: regex}}, findOpts) if err != nil { return nil, utils.Wrap(err, "") } + err = cursor.All(context.Background(), &msgs) + if err != nil { + return nil, utils.Wrap(err, fmt.Sprintf("cursor is %s", cursor.Current.String())) + } if len(msgs) > 0 { - return &msgs[0], err + return &msgs[0], nil } else { - return nil, errors.New("get msg list failed") + return nil, ErrMsgListNotExist } } @@ -297,11 +301,20 @@ func (d *DataBases) ReplaceMsgToBlankByIndex(suffixID string, index int) error { } for i, msg := range userChat.Msg { if i <= index { - msg.Msg = nil + msgPb := &open_im_sdk.MsgData{} + if err = proto.Unmarshal(msg.Msg, msgPb); err != nil { + continue + } + newMsgPb := &open_im_sdk.MsgData{Seq: msgPb.Seq} + bytes, err := proto.Marshal(newMsgPb) + if err != nil { + continue + } + msg.Msg = bytes msg.SendTime = 0 } } - _, err = c.UpdateOne(ctx, bson.M{"uid": suffixID}, userChat) + _, err = c.UpdateOne(ctx, bson.M{"uid": suffixID}, bson.M{"$set": bson.M{"msg": userChat.Msg}}) return err } @@ -315,17 +328,17 @@ func (d *DataBases) GetNewestMsg(ID string) (msg *MsgInfo, err error) { if err != nil { return nil, err } - err = cursor.Decode(&userChats) + err = cursor.All(ctx, &userChats) if err != nil { return nil, utils.Wrap(err, "") } if len(userChats) > 0 { if len(userChats[0].Msg) > 0 { - return &userChats[0].Msg[len(userChats[0].Msg)], nil + return &userChats[0].Msg[len(userChats[0].Msg)-1], nil } return nil, errors.New("len(userChats[0].Msg) < 0") } - return nil, errors.New("len(userChats) < 0") + return nil, nil } func (d *DataBases) GetMsgBySeqListMongo2(uid string, seqList []uint32, operationID string) (seqMsg []*open_im_sdk.MsgData, err error) { diff --git a/pkg/common/db/mysql_model/im_mysql_model/user_model.go b/pkg/common/db/mysql_model/im_mysql_model/user_model.go index 8cb6803a7..37dcf4034 100644 --- a/pkg/common/db/mysql_model/im_mysql_model/user_model.go +++ b/pkg/common/db/mysql_model/im_mysql_model/user_model.go @@ -7,7 +7,6 @@ import ( "Open_IM/pkg/utils" "errors" "fmt" - "strconv" "time" ) @@ -116,10 +115,10 @@ func GetUsers(showNumber, pageNumber int32) ([]db.User, error) { return users, err } -func AddUser(userID string, phoneNumber string, name string, email string, gender int32, faceURL string, birth uint32) error { - _birth, _err := time.ParseInLocation("2006-01-02", strconv.Itoa(int(birth)), time.Local) - if _err != nil { - _birth = time.Now() +func AddUser(userID string, phoneNumber string, name string, email string, gender int32, faceURL string, birth string) error { + _birth, err := utils.TimeStringToTime(birth) + if err != nil { + return err } user := db.User{ UserID: userID, diff --git a/pkg/common/log/file_line_hk.go b/pkg/common/log/file_line_hk.go index fd6047a2f..1a609d9be 100644 --- a/pkg/common/log/file_line_hk.go +++ b/pkg/common/log/file_line_hk.go @@ -39,35 +39,3 @@ func (f *fileHook) Fire(entry *logrus.Entry) error { entry.Data["FilePath"] = s return nil } - -//func findCaller(skip int) string { -// file := "" -// line := 0 -// for i := 0; i < 10; i++ { -// file, line = getCaller(skip + i) -// if !strings.HasPrefix(file, "log") { -// break -// } -// } -// return fmt.Sprintf("%s:%d", file, line) -//} -// -//func getCaller(skip int) (string, int) { -// _, file, line, ok := runtime.Caller(skip) -// -// if !ok { -// return "", 0 -// } -// fmt.Println("skip:", skip, "file:", file, "line", line) -// n := 0 -// for i := len(file) - 1; i > 0; i-- { -// if file[i] == '/' { -// n++ -// if n >= 2 { -// file = file[i+1:] -// break -// } -// } -// } -// return file, line -//} diff --git a/pkg/common/token_verify/jwt_token_test.go b/pkg/common/token_verify/jwt_token_test.go new file mode 100644 index 000000000..64d64f263 --- /dev/null +++ b/pkg/common/token_verify/jwt_token_test.go @@ -0,0 +1,12 @@ +package token_verify + +import ( + "github.com/stretchr/testify/assert" + "testing" +) + +func Test_ParseToken(t *testing.T) { + token := "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJVSUQiOiJvcGVuSU1BZG1pbiIsIlBsYXRmb3JtIjoiQVBhZCIsImV4cCI6MTY3NDYxNTA2MSwibmJmIjoxNjY2ODM4NzYxLCJpYXQiOjE2NjY4MzkwNjF9.l8RiIu6pR4ItwDOpNIDYA9LBzIcpk8r8n6NRtXjqOp8" + _, err := GetClaimFromToken(token) + assert.Nil(t, err) +} diff --git a/pkg/common/utils/utils.go b/pkg/common/utils/utils.go index e437203ce..00c86c454 100644 --- a/pkg/common/utils/utils.go +++ b/pkg/common/utils/utils.go @@ -146,14 +146,15 @@ func GroupRequestDBCopyOpenIM(dst *open_im_sdk.GroupRequest, src *db.GroupReques func UserOpenIMCopyDB(dst *db.User, src *open_im_sdk.UserInfo) { utils.CopyStructFields(dst, src) - dst.Birth = utils.UnixSecondToTime(int64(src.Birth)) + dst.Birth, _ = utils.TimeStringToTime(src.BirthStr) dst.CreateTime = utils.UnixSecondToTime(int64(src.CreateTime)) } func UserDBCopyOpenIM(dst *open_im_sdk.UserInfo, src *db.User) { utils.CopyStructFields(dst, src) dst.CreateTime = uint32(src.CreateTime.Unix()) - dst.Birth = uint32(src.Birth.Unix()) + //dst.Birth = uint32(src.Birth.Unix()) + dst.BirthStr = utils.TimeToString(src.Birth) } func UserDBCopyOpenIMPublicUser(dst *open_im_sdk.PublicUserInfo, src *db.User) { diff --git a/pkg/proto/push/push.pb.go b/pkg/proto/push/push.pb.go index 56faaad6f..1c4d10593 100644 --- a/pkg/proto/push/push.pb.go +++ b/pkg/proto/push/push.pb.go @@ -1,291 +1,274 @@ // Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.27.1 -// protoc v3.15.5 // source: push/push.proto -package pbPush +package pbPush // import "Open_IM/pkg/proto/push" + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import sdk_ws "Open_IM/pkg/proto/sdk_ws" import ( - sdk_ws "Open_IM/pkg/proto/sdk_ws" - context "context" + context "golang.org/x/net/context" grpc "google.golang.org/grpc" - codes "google.golang.org/grpc/codes" - status "google.golang.org/grpc/status" - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - reflect "reflect" - sync "sync" ) -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package type PushMsgReq struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - OperationID string `protobuf:"bytes,1,opt,name=operationID,proto3" json:"operationID,omitempty"` - MsgData *sdk_ws.MsgData `protobuf:"bytes,2,opt,name=msgData,proto3" json:"msgData,omitempty"` - PushToUserID string `protobuf:"bytes,3,opt,name=pushToUserID,proto3" json:"pushToUserID,omitempty"` + OperationID string `protobuf:"bytes,1,opt,name=operationID" json:"operationID,omitempty"` + MsgData *sdk_ws.MsgData `protobuf:"bytes,2,opt,name=msgData" json:"msgData,omitempty"` + PushToUserID string `protobuf:"bytes,3,opt,name=pushToUserID" json:"pushToUserID,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } -func (x *PushMsgReq) Reset() { - *x = PushMsgReq{} - if protoimpl.UnsafeEnabled { - mi := &file_push_push_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PushMsgReq) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PushMsgReq) ProtoMessage() {} - -func (x *PushMsgReq) ProtoReflect() protoreflect.Message { - mi := &file_push_push_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use PushMsgReq.ProtoReflect.Descriptor instead. +func (m *PushMsgReq) Reset() { *m = PushMsgReq{} } +func (m *PushMsgReq) String() string { return proto.CompactTextString(m) } +func (*PushMsgReq) ProtoMessage() {} func (*PushMsgReq) Descriptor() ([]byte, []int) { - return file_push_push_proto_rawDescGZIP(), []int{0} + return fileDescriptor_push_17f752d1b1c8edd5, []int{0} +} +func (m *PushMsgReq) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_PushMsgReq.Unmarshal(m, b) +} +func (m *PushMsgReq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_PushMsgReq.Marshal(b, m, deterministic) +} +func (dst *PushMsgReq) XXX_Merge(src proto.Message) { + xxx_messageInfo_PushMsgReq.Merge(dst, src) +} +func (m *PushMsgReq) XXX_Size() int { + return xxx_messageInfo_PushMsgReq.Size(m) +} +func (m *PushMsgReq) XXX_DiscardUnknown() { + xxx_messageInfo_PushMsgReq.DiscardUnknown(m) } -func (x *PushMsgReq) GetOperationID() string { - if x != nil { - return x.OperationID +var xxx_messageInfo_PushMsgReq proto.InternalMessageInfo + +func (m *PushMsgReq) GetOperationID() string { + if m != nil { + return m.OperationID } return "" } -func (x *PushMsgReq) GetMsgData() *sdk_ws.MsgData { - if x != nil { - return x.MsgData +func (m *PushMsgReq) GetMsgData() *sdk_ws.MsgData { + if m != nil { + return m.MsgData } return nil } -func (x *PushMsgReq) GetPushToUserID() string { - if x != nil { - return x.PushToUserID +func (m *PushMsgReq) GetPushToUserID() string { + if m != nil { + return m.PushToUserID } return "" } type PushMsgResp struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - ResultCode int32 `protobuf:"varint,1,opt,name=ResultCode,proto3" json:"ResultCode,omitempty"` + ResultCode int32 `protobuf:"varint,1,opt,name=ResultCode" json:"ResultCode,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } -func (x *PushMsgResp) Reset() { - *x = PushMsgResp{} - if protoimpl.UnsafeEnabled { - mi := &file_push_push_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PushMsgResp) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PushMsgResp) ProtoMessage() {} - -func (x *PushMsgResp) ProtoReflect() protoreflect.Message { - mi := &file_push_push_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use PushMsgResp.ProtoReflect.Descriptor instead. +func (m *PushMsgResp) Reset() { *m = PushMsgResp{} } +func (m *PushMsgResp) String() string { return proto.CompactTextString(m) } +func (*PushMsgResp) ProtoMessage() {} func (*PushMsgResp) Descriptor() ([]byte, []int) { - return file_push_push_proto_rawDescGZIP(), []int{1} + return fileDescriptor_push_17f752d1b1c8edd5, []int{1} +} +func (m *PushMsgResp) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_PushMsgResp.Unmarshal(m, b) +} +func (m *PushMsgResp) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_PushMsgResp.Marshal(b, m, deterministic) +} +func (dst *PushMsgResp) XXX_Merge(src proto.Message) { + xxx_messageInfo_PushMsgResp.Merge(dst, src) +} +func (m *PushMsgResp) XXX_Size() int { + return xxx_messageInfo_PushMsgResp.Size(m) +} +func (m *PushMsgResp) XXX_DiscardUnknown() { + xxx_messageInfo_PushMsgResp.DiscardUnknown(m) } -func (x *PushMsgResp) GetResultCode() int32 { - if x != nil { - return x.ResultCode +var xxx_messageInfo_PushMsgResp proto.InternalMessageInfo + +func (m *PushMsgResp) GetResultCode() int32 { + if m != nil { + return m.ResultCode } return 0 } -var File_push_push_proto protoreflect.FileDescriptor - -var file_push_push_proto_rawDesc = []byte{ - 0x0a, 0x0f, 0x70, 0x75, 0x73, 0x68, 0x2f, 0x70, 0x75, 0x73, 0x68, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x12, 0x04, 0x70, 0x75, 0x73, 0x68, 0x1a, 0x28, 0x4f, 0x70, 0x65, 0x6e, 0x2d, 0x49, 0x4d, - 0x2d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2f, 0x73, 0x64, 0x6b, 0x5f, 0x77, 0x73, 0x2f, 0x77, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x22, 0x88, 0x01, 0x0a, 0x0a, 0x50, 0x75, 0x73, 0x68, 0x4d, 0x73, 0x67, 0x52, 0x65, 0x71, - 0x12, 0x20, 0x0a, 0x0b, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x49, 0x44, 0x12, 0x34, 0x0a, 0x07, 0x6d, 0x73, 0x67, 0x44, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x61, 0x70, 0x69, - 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2e, 0x4d, 0x73, 0x67, 0x44, 0x61, 0x74, 0x61, 0x52, - 0x07, 0x6d, 0x73, 0x67, 0x44, 0x61, 0x74, 0x61, 0x12, 0x22, 0x0a, 0x0c, 0x70, 0x75, 0x73, 0x68, - 0x54, 0x6f, 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, - 0x70, 0x75, 0x73, 0x68, 0x54, 0x6f, 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x22, 0x2d, 0x0a, 0x0b, - 0x50, 0x75, 0x73, 0x68, 0x4d, 0x73, 0x67, 0x52, 0x65, 0x73, 0x70, 0x12, 0x1e, 0x0a, 0x0a, 0x52, - 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x0a, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x32, 0x40, 0x0a, 0x0e, 0x50, - 0x75, 0x73, 0x68, 0x4d, 0x73, 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x2e, 0x0a, - 0x07, 0x50, 0x75, 0x73, 0x68, 0x4d, 0x73, 0x67, 0x12, 0x10, 0x2e, 0x70, 0x75, 0x73, 0x68, 0x2e, - 0x50, 0x75, 0x73, 0x68, 0x4d, 0x73, 0x67, 0x52, 0x65, 0x71, 0x1a, 0x11, 0x2e, 0x70, 0x75, 0x73, - 0x68, 0x2e, 0x50, 0x75, 0x73, 0x68, 0x4d, 0x73, 0x67, 0x52, 0x65, 0x73, 0x70, 0x42, 0x1f, 0x5a, - 0x1d, 0x4f, 0x70, 0x65, 0x6e, 0x5f, 0x49, 0x4d, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x2f, 0x70, 0x75, 0x73, 0x68, 0x3b, 0x70, 0x62, 0x50, 0x75, 0x73, 0x68, 0x62, 0x06, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +type DelUserPushTokenReq struct { + OperationID string `protobuf:"bytes,1,opt,name=operationID" json:"operationID,omitempty"` + UserID string `protobuf:"bytes,2,opt,name=userID" json:"userID,omitempty"` + PlatformID int32 `protobuf:"varint,3,opt,name=platformID" json:"platformID,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } -var ( - file_push_push_proto_rawDescOnce sync.Once - file_push_push_proto_rawDescData = file_push_push_proto_rawDesc -) - -func file_push_push_proto_rawDescGZIP() []byte { - file_push_push_proto_rawDescOnce.Do(func() { - file_push_push_proto_rawDescData = protoimpl.X.CompressGZIP(file_push_push_proto_rawDescData) - }) - return file_push_push_proto_rawDescData +func (m *DelUserPushTokenReq) Reset() { *m = DelUserPushTokenReq{} } +func (m *DelUserPushTokenReq) String() string { return proto.CompactTextString(m) } +func (*DelUserPushTokenReq) ProtoMessage() {} +func (*DelUserPushTokenReq) Descriptor() ([]byte, []int) { + return fileDescriptor_push_17f752d1b1c8edd5, []int{2} +} +func (m *DelUserPushTokenReq) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_DelUserPushTokenReq.Unmarshal(m, b) +} +func (m *DelUserPushTokenReq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_DelUserPushTokenReq.Marshal(b, m, deterministic) +} +func (dst *DelUserPushTokenReq) XXX_Merge(src proto.Message) { + xxx_messageInfo_DelUserPushTokenReq.Merge(dst, src) +} +func (m *DelUserPushTokenReq) XXX_Size() int { + return xxx_messageInfo_DelUserPushTokenReq.Size(m) +} +func (m *DelUserPushTokenReq) XXX_DiscardUnknown() { + xxx_messageInfo_DelUserPushTokenReq.DiscardUnknown(m) } -var file_push_push_proto_msgTypes = make([]protoimpl.MessageInfo, 2) -var file_push_push_proto_goTypes = []interface{}{ - (*PushMsgReq)(nil), // 0: push.PushMsgReq - (*PushMsgResp)(nil), // 1: push.PushMsgResp - (*sdk_ws.MsgData)(nil), // 2: server_api_params.MsgData -} -var file_push_push_proto_depIdxs = []int32{ - 2, // 0: push.PushMsgReq.msgData:type_name -> server_api_params.MsgData - 0, // 1: push.PushMsgService.PushMsg:input_type -> push.PushMsgReq - 1, // 2: push.PushMsgService.PushMsg:output_type -> push.PushMsgResp - 2, // [2:3] is the sub-list for method output_type - 1, // [1:2] is the sub-list for method input_type - 1, // [1:1] is the sub-list for extension type_name - 1, // [1:1] is the sub-list for extension extendee - 0, // [0:1] is the sub-list for field type_name -} +var xxx_messageInfo_DelUserPushTokenReq proto.InternalMessageInfo -func init() { file_push_push_proto_init() } -func file_push_push_proto_init() { - if File_push_push_proto != nil { - return +func (m *DelUserPushTokenReq) GetOperationID() string { + if m != nil { + return m.OperationID } - if !protoimpl.UnsafeEnabled { - file_push_push_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PushMsgReq); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_push_push_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PushMsgResp); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } + return "" +} + +func (m *DelUserPushTokenReq) GetUserID() string { + if m != nil { + return m.UserID } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_push_push_proto_rawDesc, - NumEnums: 0, - NumMessages: 2, - NumExtensions: 0, - NumServices: 1, - }, - GoTypes: file_push_push_proto_goTypes, - DependencyIndexes: file_push_push_proto_depIdxs, - MessageInfos: file_push_push_proto_msgTypes, - }.Build() - File_push_push_proto = out.File - file_push_push_proto_rawDesc = nil - file_push_push_proto_goTypes = nil - file_push_push_proto_depIdxs = nil + return "" +} + +func (m *DelUserPushTokenReq) GetPlatformID() int32 { + if m != nil { + return m.PlatformID + } + return 0 +} + +type DelUserPushTokenResp struct { + ErrCode int32 `protobuf:"varint,1,opt,name=errCode" json:"errCode,omitempty"` + ErrMsg string `protobuf:"bytes,2,opt,name=errMsg" json:"errMsg,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *DelUserPushTokenResp) Reset() { *m = DelUserPushTokenResp{} } +func (m *DelUserPushTokenResp) String() string { return proto.CompactTextString(m) } +func (*DelUserPushTokenResp) ProtoMessage() {} +func (*DelUserPushTokenResp) Descriptor() ([]byte, []int) { + return fileDescriptor_push_17f752d1b1c8edd5, []int{3} +} +func (m *DelUserPushTokenResp) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_DelUserPushTokenResp.Unmarshal(m, b) +} +func (m *DelUserPushTokenResp) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_DelUserPushTokenResp.Marshal(b, m, deterministic) +} +func (dst *DelUserPushTokenResp) XXX_Merge(src proto.Message) { + xxx_messageInfo_DelUserPushTokenResp.Merge(dst, src) +} +func (m *DelUserPushTokenResp) XXX_Size() int { + return xxx_messageInfo_DelUserPushTokenResp.Size(m) +} +func (m *DelUserPushTokenResp) XXX_DiscardUnknown() { + xxx_messageInfo_DelUserPushTokenResp.DiscardUnknown(m) +} + +var xxx_messageInfo_DelUserPushTokenResp proto.InternalMessageInfo + +func (m *DelUserPushTokenResp) GetErrCode() int32 { + if m != nil { + return m.ErrCode + } + return 0 +} + +func (m *DelUserPushTokenResp) GetErrMsg() string { + if m != nil { + return m.ErrMsg + } + return "" +} + +func init() { + proto.RegisterType((*PushMsgReq)(nil), "push.PushMsgReq") + proto.RegisterType((*PushMsgResp)(nil), "push.PushMsgResp") + proto.RegisterType((*DelUserPushTokenReq)(nil), "push.DelUserPushTokenReq") + proto.RegisterType((*DelUserPushTokenResp)(nil), "push.DelUserPushTokenResp") } // Reference imports to suppress errors if they are not otherwise used. var _ context.Context -var _ grpc.ClientConnInterface +var _ grpc.ClientConn // This is a compile-time assertion to ensure that this generated file // is compatible with the grpc package it is being compiled against. -const _ = grpc.SupportPackageIsVersion6 +const _ = grpc.SupportPackageIsVersion4 + +// Client API for PushMsgService service -// PushMsgServiceClient is the client API for PushMsgService service. -// -// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. type PushMsgServiceClient interface { PushMsg(ctx context.Context, in *PushMsgReq, opts ...grpc.CallOption) (*PushMsgResp, error) + DelUserPushToken(ctx context.Context, in *DelUserPushTokenReq, opts ...grpc.CallOption) (*DelUserPushTokenResp, error) } type pushMsgServiceClient struct { - cc grpc.ClientConnInterface + cc *grpc.ClientConn } -func NewPushMsgServiceClient(cc grpc.ClientConnInterface) PushMsgServiceClient { +func NewPushMsgServiceClient(cc *grpc.ClientConn) PushMsgServiceClient { return &pushMsgServiceClient{cc} } func (c *pushMsgServiceClient) PushMsg(ctx context.Context, in *PushMsgReq, opts ...grpc.CallOption) (*PushMsgResp, error) { out := new(PushMsgResp) - err := c.cc.Invoke(ctx, "/push.PushMsgService/PushMsg", in, out, opts...) + err := grpc.Invoke(ctx, "/push.PushMsgService/PushMsg", in, out, c.cc, opts...) if err != nil { return nil, err } return out, nil } -// PushMsgServiceServer is the server API for PushMsgService service. +func (c *pushMsgServiceClient) DelUserPushToken(ctx context.Context, in *DelUserPushTokenReq, opts ...grpc.CallOption) (*DelUserPushTokenResp, error) { + out := new(DelUserPushTokenResp) + err := grpc.Invoke(ctx, "/push.PushMsgService/DelUserPushToken", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// Server API for PushMsgService service + type PushMsgServiceServer interface { PushMsg(context.Context, *PushMsgReq) (*PushMsgResp, error) -} - -// UnimplementedPushMsgServiceServer can be embedded to have forward compatible implementations. -type UnimplementedPushMsgServiceServer struct { -} - -func (*UnimplementedPushMsgServiceServer) PushMsg(context.Context, *PushMsgReq) (*PushMsgResp, error) { - return nil, status.Errorf(codes.Unimplemented, "method PushMsg not implemented") + DelUserPushToken(context.Context, *DelUserPushTokenReq) (*DelUserPushTokenResp, error) } func RegisterPushMsgServiceServer(s *grpc.Server, srv PushMsgServiceServer) { @@ -310,6 +293,24 @@ func _PushMsgService_PushMsg_Handler(srv interface{}, ctx context.Context, dec f return interceptor(ctx, in, info, handler) } +func _PushMsgService_DelUserPushToken_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DelUserPushTokenReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(PushMsgServiceServer).DelUserPushToken(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/push.PushMsgService/DelUserPushToken", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(PushMsgServiceServer).DelUserPushToken(ctx, req.(*DelUserPushTokenReq)) + } + return interceptor(ctx, in, info, handler) +} + var _PushMsgService_serviceDesc = grpc.ServiceDesc{ ServiceName: "push.PushMsgService", HandlerType: (*PushMsgServiceServer)(nil), @@ -318,7 +319,39 @@ var _PushMsgService_serviceDesc = grpc.ServiceDesc{ MethodName: "PushMsg", Handler: _PushMsgService_PushMsg_Handler, }, + { + MethodName: "DelUserPushToken", + Handler: _PushMsgService_DelUserPushToken_Handler, + }, }, Streams: []grpc.StreamDesc{}, Metadata: "push/push.proto", } + +func init() { proto.RegisterFile("push/push.proto", fileDescriptor_push_17f752d1b1c8edd5) } + +var fileDescriptor_push_17f752d1b1c8edd5 = []byte{ + // 342 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x52, 0x4f, 0x4b, 0xfb, 0x40, + 0x10, 0x25, 0xfd, 0xfd, 0xda, 0xe2, 0x54, 0xb4, 0xae, 0x22, 0x31, 0xa0, 0x96, 0x9c, 0x7a, 0x69, + 0x02, 0xd5, 0x9b, 0x37, 0xcd, 0xc1, 0x1c, 0x82, 0x25, 0xea, 0xc5, 0x4b, 0xd8, 0xda, 0x35, 0x2d, + 0xfd, 0xb3, 0xe3, 0x4e, 0x62, 0xbf, 0x82, 0xe0, 0x97, 0x96, 0xdd, 0x24, 0x1a, 0xab, 0x82, 0x97, + 0x65, 0xe7, 0xcd, 0xdb, 0x79, 0x6f, 0x76, 0x06, 0x76, 0x31, 0xa7, 0xa9, 0xaf, 0x0f, 0x0f, 0x95, + 0xcc, 0x24, 0xfb, 0xaf, 0xef, 0x4e, 0xff, 0x06, 0xc5, 0x6a, 0x10, 0x46, 0x83, 0x5b, 0xa1, 0x5e, + 0x84, 0xf2, 0x71, 0x9e, 0xfa, 0x26, 0xef, 0xd3, 0x64, 0x9e, 0xac, 0xc9, 0x5f, 0x53, 0xc1, 0x77, + 0x5f, 0x2d, 0x80, 0x51, 0x4e, 0xd3, 0x88, 0xd2, 0x58, 0x3c, 0xb3, 0x1e, 0x74, 0x24, 0x0a, 0xc5, + 0xb3, 0x99, 0x5c, 0x85, 0x81, 0x6d, 0xf5, 0xac, 0xfe, 0x56, 0x5c, 0x87, 0xd8, 0x39, 0xb4, 0x97, + 0x94, 0x06, 0x3c, 0xe3, 0x76, 0xa3, 0x67, 0xf5, 0x3b, 0x43, 0xc7, 0x23, 0x23, 0x92, 0x70, 0x9c, + 0x25, 0xc8, 0x15, 0x5f, 0x92, 0x17, 0x15, 0x8c, 0xb8, 0xa2, 0x32, 0x17, 0xb6, 0xb5, 0xb1, 0x3b, + 0x79, 0x4f, 0x42, 0x85, 0x81, 0xfd, 0xcf, 0x14, 0xfe, 0x82, 0xb9, 0x03, 0xe8, 0x7c, 0x38, 0x21, + 0x64, 0x27, 0x00, 0xb1, 0xa0, 0x7c, 0x91, 0x5d, 0xc9, 0x89, 0x30, 0x4e, 0x9a, 0x71, 0x0d, 0x71, + 0x25, 0xec, 0x07, 0x62, 0xa1, 0xdf, 0x8e, 0x4c, 0x95, 0xb9, 0x58, 0xfd, 0xad, 0x83, 0x43, 0x68, + 0xe5, 0x85, 0x8b, 0x86, 0x49, 0x96, 0x91, 0x16, 0xc4, 0x05, 0xcf, 0x9e, 0xa4, 0x5a, 0x96, 0x0e, + 0x9b, 0x71, 0x0d, 0x71, 0xaf, 0xe1, 0xe0, 0xbb, 0x20, 0x21, 0xb3, 0xa1, 0x2d, 0x94, 0xaa, 0xb9, + 0xac, 0x42, 0xad, 0x24, 0x94, 0x8a, 0x28, 0xad, 0x94, 0x8a, 0x68, 0xf8, 0x66, 0xc1, 0x4e, 0xd9, + 0xaa, 0x1e, 0xd0, 0xec, 0x51, 0x30, 0x0f, 0xda, 0x25, 0xc2, 0xba, 0x9e, 0x99, 0xe7, 0xe7, 0x54, + 0x9c, 0xbd, 0x0d, 0x84, 0x90, 0x85, 0xd0, 0xdd, 0x34, 0xc3, 0x8e, 0x0a, 0xda, 0x0f, 0xbf, 0xe2, + 0x38, 0xbf, 0xa5, 0x08, 0x2f, 0x4f, 0x1f, 0x8e, 0xf5, 0xba, 0x24, 0x61, 0x54, 0xdb, 0x13, 0x4d, + 0xbf, 0xc0, 0xb1, 0x66, 0x8e, 0x5b, 0x06, 0x3a, 0x7b, 0x0f, 0x00, 0x00, 0xff, 0xff, 0xd6, 0x44, + 0x0e, 0xd2, 0x6d, 0x02, 0x00, 0x00, +} diff --git a/pkg/proto/push/push.proto b/pkg/proto/push/push.proto index ce46692df..d9f864510 100644 --- a/pkg/proto/push/push.proto +++ b/pkg/proto/push/push.proto @@ -11,6 +11,16 @@ message PushMsgReq { message PushMsgResp{ int32 ResultCode = 1; } +message DelUserPushTokenReq{ + string operationID = 1; + string userID =2; + int32 platformID = 3; +} +message DelUserPushTokenResp{ + int32 errCode = 1; + string errMsg = 2; +} + //message InternalPushMsgReq{ // int32 ReqIdentifier = 1; // string Token = 2; @@ -33,6 +43,7 @@ message PushMsgResp{ service PushMsgService { rpc PushMsg(PushMsgReq) returns(PushMsgResp); + rpc DelUserPushToken(DelUserPushTokenReq) returns(DelUserPushTokenResp); // rpc InternalPushMsg(InternalPushMsgReq)returns(PushMsgResp); } diff --git a/pkg/proto/sdk_ws/ws.pb.go b/pkg/proto/sdk_ws/ws.pb.go index 5cb5d1a81..4303f5d56 100644 --- a/pkg/proto/sdk_ws/ws.pb.go +++ b/pkg/proto/sdk_ws/ws.pb.go @@ -46,7 +46,7 @@ func (m *GroupInfo) Reset() { *m = GroupInfo{} } func (m *GroupInfo) String() string { return proto.CompactTextString(m) } func (*GroupInfo) ProtoMessage() {} func (*GroupInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e432db7a8e0b4bb9, []int{0} + return fileDescriptor_ws_a86e2552dd17ddaa, []int{0} } func (m *GroupInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupInfo.Unmarshal(m, b) @@ -204,7 +204,7 @@ func (m *GroupInfoForSet) Reset() { *m = GroupInfoForSet{} } func (m *GroupInfoForSet) String() string { return proto.CompactTextString(m) } func (*GroupInfoForSet) ProtoMessage() {} func (*GroupInfoForSet) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e432db7a8e0b4bb9, []int{1} + return fileDescriptor_ws_a86e2552dd17ddaa, []int{1} } func (m *GroupInfoForSet) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupInfoForSet.Unmarshal(m, b) @@ -309,7 +309,7 @@ func (m *GroupMemberFullInfo) Reset() { *m = GroupMemberFullInfo{} } func (m *GroupMemberFullInfo) String() string { return proto.CompactTextString(m) } func (*GroupMemberFullInfo) ProtoMessage() {} func (*GroupMemberFullInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e432db7a8e0b4bb9, []int{2} + return fileDescriptor_ws_a86e2552dd17ddaa, []int{2} } func (m *GroupMemberFullInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupMemberFullInfo.Unmarshal(m, b) @@ -428,7 +428,7 @@ func (m *PublicUserInfo) Reset() { *m = PublicUserInfo{} } func (m *PublicUserInfo) String() string { return proto.CompactTextString(m) } func (*PublicUserInfo) ProtoMessage() {} func (*PublicUserInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e432db7a8e0b4bb9, []int{3} + return fileDescriptor_ws_a86e2552dd17ddaa, []int{3} } func (m *PublicUserInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_PublicUserInfo.Unmarshal(m, b) @@ -495,6 +495,7 @@ type UserInfo struct { CreateTime uint32 `protobuf:"varint,9,opt,name=createTime" json:"createTime,omitempty"` AppMangerLevel int32 `protobuf:"varint,10,opt,name=appMangerLevel" json:"appMangerLevel,omitempty"` GlobalRecvMsgOpt int32 `protobuf:"varint,11,opt,name=globalRecvMsgOpt" json:"globalRecvMsgOpt,omitempty"` + BirthStr string `protobuf:"bytes,12,opt,name=birthStr" json:"birthStr,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -504,7 +505,7 @@ func (m *UserInfo) Reset() { *m = UserInfo{} } func (m *UserInfo) String() string { return proto.CompactTextString(m) } func (*UserInfo) ProtoMessage() {} func (*UserInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e432db7a8e0b4bb9, []int{4} + return fileDescriptor_ws_a86e2552dd17ddaa, []int{4} } func (m *UserInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UserInfo.Unmarshal(m, b) @@ -601,6 +602,13 @@ func (m *UserInfo) GetGlobalRecvMsgOpt() int32 { return 0 } +func (m *UserInfo) GetBirthStr() string { + if m != nil { + return m.BirthStr + } + return "" +} + type FriendInfo struct { OwnerUserID string `protobuf:"bytes,1,opt,name=ownerUserID" json:"ownerUserID,omitempty"` Remark string `protobuf:"bytes,2,opt,name=remark" json:"remark,omitempty"` @@ -618,7 +626,7 @@ func (m *FriendInfo) Reset() { *m = FriendInfo{} } func (m *FriendInfo) String() string { return proto.CompactTextString(m) } func (*FriendInfo) ProtoMessage() {} func (*FriendInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e432db7a8e0b4bb9, []int{5} + return fileDescriptor_ws_a86e2552dd17ddaa, []int{5} } func (m *FriendInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendInfo.Unmarshal(m, b) @@ -703,7 +711,7 @@ func (m *BlackInfo) Reset() { *m = BlackInfo{} } func (m *BlackInfo) String() string { return proto.CompactTextString(m) } func (*BlackInfo) ProtoMessage() {} func (*BlackInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e432db7a8e0b4bb9, []int{6} + return fileDescriptor_ws_a86e2552dd17ddaa, []int{6} } func (m *BlackInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BlackInfo.Unmarshal(m, b) @@ -786,7 +794,7 @@ func (m *GroupRequest) Reset() { *m = GroupRequest{} } func (m *GroupRequest) String() string { return proto.CompactTextString(m) } func (*GroupRequest) ProtoMessage() {} func (*GroupRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e432db7a8e0b4bb9, []int{7} + return fileDescriptor_ws_a86e2552dd17ddaa, []int{7} } func (m *GroupRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupRequest.Unmarshal(m, b) @@ -908,7 +916,7 @@ func (m *FriendRequest) Reset() { *m = FriendRequest{} } func (m *FriendRequest) String() string { return proto.CompactTextString(m) } func (*FriendRequest) ProtoMessage() {} func (*FriendRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e432db7a8e0b4bb9, []int{8} + return fileDescriptor_ws_a86e2552dd17ddaa, []int{8} } func (m *FriendRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendRequest.Unmarshal(m, b) @@ -1053,7 +1061,7 @@ func (m *Department) Reset() { *m = Department{} } func (m *Department) String() string { return proto.CompactTextString(m) } func (*Department) ProtoMessage() {} func (*Department) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e432db7a8e0b4bb9, []int{9} + return fileDescriptor_ws_a86e2552dd17ddaa, []int{9} } func (m *Department) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Department.Unmarshal(m, b) @@ -1155,6 +1163,7 @@ type OrganizationUser struct { Email string `protobuf:"bytes,9,opt,name=email" json:"email,omitempty"` CreateTime uint32 `protobuf:"varint,10,opt,name=createTime" json:"createTime,omitempty"` Ex string `protobuf:"bytes,11,opt,name=ex" json:"ex,omitempty"` + BirthStr string `protobuf:"bytes,12,opt,name=birthStr" json:"birthStr,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -1164,7 +1173,7 @@ func (m *OrganizationUser) Reset() { *m = OrganizationUser{} } func (m *OrganizationUser) String() string { return proto.CompactTextString(m) } func (*OrganizationUser) ProtoMessage() {} func (*OrganizationUser) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e432db7a8e0b4bb9, []int{10} + return fileDescriptor_ws_a86e2552dd17ddaa, []int{10} } func (m *OrganizationUser) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OrganizationUser.Unmarshal(m, b) @@ -1261,6 +1270,13 @@ func (m *OrganizationUser) GetEx() string { return "" } +func (m *OrganizationUser) GetBirthStr() string { + if m != nil { + return m.BirthStr + } + return "" +} + type DepartmentMember struct { UserID string `protobuf:"bytes,1,opt,name=userID" json:"userID,omitempty"` DepartmentID string `protobuf:"bytes,2,opt,name=departmentID" json:"departmentID,omitempty"` @@ -1278,7 +1294,7 @@ func (m *DepartmentMember) Reset() { *m = DepartmentMember{} } func (m *DepartmentMember) String() string { return proto.CompactTextString(m) } func (*DepartmentMember) ProtoMessage() {} func (*DepartmentMember) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e432db7a8e0b4bb9, []int{11} + return fileDescriptor_ws_a86e2552dd17ddaa, []int{11} } func (m *DepartmentMember) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DepartmentMember.Unmarshal(m, b) @@ -1359,7 +1375,7 @@ func (m *UserDepartmentMember) Reset() { *m = UserDepartmentMember{} } func (m *UserDepartmentMember) String() string { return proto.CompactTextString(m) } func (*UserDepartmentMember) ProtoMessage() {} func (*UserDepartmentMember) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e432db7a8e0b4bb9, []int{12} + return fileDescriptor_ws_a86e2552dd17ddaa, []int{12} } func (m *UserDepartmentMember) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UserDepartmentMember.Unmarshal(m, b) @@ -1405,7 +1421,7 @@ func (m *UserInDepartment) Reset() { *m = UserInDepartment{} } func (m *UserInDepartment) String() string { return proto.CompactTextString(m) } func (*UserInDepartment) ProtoMessage() {} func (*UserInDepartment) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e432db7a8e0b4bb9, []int{13} + return fileDescriptor_ws_a86e2552dd17ddaa, []int{13} } func (m *UserInDepartment) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UserInDepartment.Unmarshal(m, b) @@ -1454,7 +1470,7 @@ func (m *PullMessageBySeqListReq) Reset() { *m = PullMessageBySeqListReq func (m *PullMessageBySeqListReq) String() string { return proto.CompactTextString(m) } func (*PullMessageBySeqListReq) ProtoMessage() {} func (*PullMessageBySeqListReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e432db7a8e0b4bb9, []int{14} + return fileDescriptor_ws_a86e2552dd17ddaa, []int{14} } func (m *PullMessageBySeqListReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_PullMessageBySeqListReq.Unmarshal(m, b) @@ -1513,7 +1529,7 @@ func (m *SeqList) Reset() { *m = SeqList{} } func (m *SeqList) String() string { return proto.CompactTextString(m) } func (*SeqList) ProtoMessage() {} func (*SeqList) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e432db7a8e0b4bb9, []int{15} + return fileDescriptor_ws_a86e2552dd17ddaa, []int{15} } func (m *SeqList) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SeqList.Unmarshal(m, b) @@ -1551,7 +1567,7 @@ func (m *MsgDataList) Reset() { *m = MsgDataList{} } func (m *MsgDataList) String() string { return proto.CompactTextString(m) } func (*MsgDataList) ProtoMessage() {} func (*MsgDataList) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e432db7a8e0b4bb9, []int{16} + return fileDescriptor_ws_a86e2552dd17ddaa, []int{16} } func (m *MsgDataList) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MsgDataList.Unmarshal(m, b) @@ -1592,7 +1608,7 @@ func (m *PullMessageBySeqListResp) Reset() { *m = PullMessageBySeqListRe func (m *PullMessageBySeqListResp) String() string { return proto.CompactTextString(m) } func (*PullMessageBySeqListResp) ProtoMessage() {} func (*PullMessageBySeqListResp) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e432db7a8e0b4bb9, []int{17} + return fileDescriptor_ws_a86e2552dd17ddaa, []int{17} } func (m *PullMessageBySeqListResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_PullMessageBySeqListResp.Unmarshal(m, b) @@ -1653,7 +1669,7 @@ func (m *GetMaxAndMinSeqReq) Reset() { *m = GetMaxAndMinSeqReq{} } func (m *GetMaxAndMinSeqReq) String() string { return proto.CompactTextString(m) } func (*GetMaxAndMinSeqReq) ProtoMessage() {} func (*GetMaxAndMinSeqReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e432db7a8e0b4bb9, []int{18} + return fileDescriptor_ws_a86e2552dd17ddaa, []int{18} } func (m *GetMaxAndMinSeqReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetMaxAndMinSeqReq.Unmarshal(m, b) @@ -1706,7 +1722,7 @@ func (m *MaxAndMinSeq) Reset() { *m = MaxAndMinSeq{} } func (m *MaxAndMinSeq) String() string { return proto.CompactTextString(m) } func (*MaxAndMinSeq) ProtoMessage() {} func (*MaxAndMinSeq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e432db7a8e0b4bb9, []int{19} + return fileDescriptor_ws_a86e2552dd17ddaa, []int{19} } func (m *MaxAndMinSeq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MaxAndMinSeq.Unmarshal(m, b) @@ -1755,7 +1771,7 @@ func (m *GetMaxAndMinSeqResp) Reset() { *m = GetMaxAndMinSeqResp{} } func (m *GetMaxAndMinSeqResp) String() string { return proto.CompactTextString(m) } func (*GetMaxAndMinSeqResp) ProtoMessage() {} func (*GetMaxAndMinSeqResp) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e432db7a8e0b4bb9, []int{20} + return fileDescriptor_ws_a86e2552dd17ddaa, []int{20} } func (m *GetMaxAndMinSeqResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetMaxAndMinSeqResp.Unmarshal(m, b) @@ -1823,7 +1839,7 @@ func (m *UserSendMsgResp) Reset() { *m = UserSendMsgResp{} } func (m *UserSendMsgResp) String() string { return proto.CompactTextString(m) } func (*UserSendMsgResp) ProtoMessage() {} func (*UserSendMsgResp) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e432db7a8e0b4bb9, []int{21} + return fileDescriptor_ws_a86e2552dd17ddaa, []int{21} } func (m *UserSendMsgResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UserSendMsgResp.Unmarshal(m, b) @@ -1896,7 +1912,7 @@ func (m *MsgData) Reset() { *m = MsgData{} } func (m *MsgData) String() string { return proto.CompactTextString(m) } func (*MsgData) ProtoMessage() {} func (*MsgData) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e432db7a8e0b4bb9, []int{22} + return fileDescriptor_ws_a86e2552dd17ddaa, []int{22} } func (m *MsgData) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MsgData.Unmarshal(m, b) @@ -2085,7 +2101,7 @@ func (m *OfflinePushInfo) Reset() { *m = OfflinePushInfo{} } func (m *OfflinePushInfo) String() string { return proto.CompactTextString(m) } func (*OfflinePushInfo) ProtoMessage() {} func (*OfflinePushInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e432db7a8e0b4bb9, []int{23} + return fileDescriptor_ws_a86e2552dd17ddaa, []int{23} } func (m *OfflinePushInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OfflinePushInfo.Unmarshal(m, b) @@ -2153,7 +2169,7 @@ func (m *TipsComm) Reset() { *m = TipsComm{} } func (m *TipsComm) String() string { return proto.CompactTextString(m) } func (*TipsComm) ProtoMessage() {} func (*TipsComm) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e432db7a8e0b4bb9, []int{24} + return fileDescriptor_ws_a86e2552dd17ddaa, []int{24} } func (m *TipsComm) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_TipsComm.Unmarshal(m, b) @@ -2210,7 +2226,7 @@ func (m *GroupCreatedTips) Reset() { *m = GroupCreatedTips{} } func (m *GroupCreatedTips) String() string { return proto.CompactTextString(m) } func (*GroupCreatedTips) ProtoMessage() {} func (*GroupCreatedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e432db7a8e0b4bb9, []int{25} + return fileDescriptor_ws_a86e2552dd17ddaa, []int{25} } func (m *GroupCreatedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupCreatedTips.Unmarshal(m, b) @@ -2279,7 +2295,7 @@ func (m *GroupInfoSetTips) Reset() { *m = GroupInfoSetTips{} } func (m *GroupInfoSetTips) String() string { return proto.CompactTextString(m) } func (*GroupInfoSetTips) ProtoMessage() {} func (*GroupInfoSetTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e432db7a8e0b4bb9, []int{26} + return fileDescriptor_ws_a86e2552dd17ddaa, []int{26} } func (m *GroupInfoSetTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupInfoSetTips.Unmarshal(m, b) @@ -2334,7 +2350,7 @@ func (m *JoinGroupApplicationTips) Reset() { *m = JoinGroupApplicationTi func (m *JoinGroupApplicationTips) String() string { return proto.CompactTextString(m) } func (*JoinGroupApplicationTips) ProtoMessage() {} func (*JoinGroupApplicationTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e432db7a8e0b4bb9, []int{27} + return fileDescriptor_ws_a86e2552dd17ddaa, []int{27} } func (m *JoinGroupApplicationTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_JoinGroupApplicationTips.Unmarshal(m, b) @@ -2390,7 +2406,7 @@ func (m *MemberQuitTips) Reset() { *m = MemberQuitTips{} } func (m *MemberQuitTips) String() string { return proto.CompactTextString(m) } func (*MemberQuitTips) ProtoMessage() {} func (*MemberQuitTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e432db7a8e0b4bb9, []int{28} + return fileDescriptor_ws_a86e2552dd17ddaa, []int{28} } func (m *MemberQuitTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MemberQuitTips.Unmarshal(m, b) @@ -2445,7 +2461,7 @@ func (m *GroupApplicationAcceptedTips) Reset() { *m = GroupApplicationAc func (m *GroupApplicationAcceptedTips) String() string { return proto.CompactTextString(m) } func (*GroupApplicationAcceptedTips) ProtoMessage() {} func (*GroupApplicationAcceptedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e432db7a8e0b4bb9, []int{29} + return fileDescriptor_ws_a86e2552dd17ddaa, []int{29} } func (m *GroupApplicationAcceptedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupApplicationAcceptedTips.Unmarshal(m, b) @@ -2500,7 +2516,7 @@ func (m *GroupApplicationRejectedTips) Reset() { *m = GroupApplicationRe func (m *GroupApplicationRejectedTips) String() string { return proto.CompactTextString(m) } func (*GroupApplicationRejectedTips) ProtoMessage() {} func (*GroupApplicationRejectedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e432db7a8e0b4bb9, []int{30} + return fileDescriptor_ws_a86e2552dd17ddaa, []int{30} } func (m *GroupApplicationRejectedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupApplicationRejectedTips.Unmarshal(m, b) @@ -2556,7 +2572,7 @@ func (m *GroupOwnerTransferredTips) Reset() { *m = GroupOwnerTransferred func (m *GroupOwnerTransferredTips) String() string { return proto.CompactTextString(m) } func (*GroupOwnerTransferredTips) ProtoMessage() {} func (*GroupOwnerTransferredTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e432db7a8e0b4bb9, []int{31} + return fileDescriptor_ws_a86e2552dd17ddaa, []int{31} } func (m *GroupOwnerTransferredTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupOwnerTransferredTips.Unmarshal(m, b) @@ -2619,7 +2635,7 @@ func (m *MemberKickedTips) Reset() { *m = MemberKickedTips{} } func (m *MemberKickedTips) String() string { return proto.CompactTextString(m) } func (*MemberKickedTips) ProtoMessage() {} func (*MemberKickedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e432db7a8e0b4bb9, []int{32} + return fileDescriptor_ws_a86e2552dd17ddaa, []int{32} } func (m *MemberKickedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MemberKickedTips.Unmarshal(m, b) @@ -2682,7 +2698,7 @@ func (m *MemberInvitedTips) Reset() { *m = MemberInvitedTips{} } func (m *MemberInvitedTips) String() string { return proto.CompactTextString(m) } func (*MemberInvitedTips) ProtoMessage() {} func (*MemberInvitedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e432db7a8e0b4bb9, []int{33} + return fileDescriptor_ws_a86e2552dd17ddaa, []int{33} } func (m *MemberInvitedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MemberInvitedTips.Unmarshal(m, b) @@ -2744,7 +2760,7 @@ func (m *MemberEnterTips) Reset() { *m = MemberEnterTips{} } func (m *MemberEnterTips) String() string { return proto.CompactTextString(m) } func (*MemberEnterTips) ProtoMessage() {} func (*MemberEnterTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e432db7a8e0b4bb9, []int{34} + return fileDescriptor_ws_a86e2552dd17ddaa, []int{34} } func (m *MemberEnterTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MemberEnterTips.Unmarshal(m, b) @@ -2798,7 +2814,7 @@ func (m *GroupDismissedTips) Reset() { *m = GroupDismissedTips{} } func (m *GroupDismissedTips) String() string { return proto.CompactTextString(m) } func (*GroupDismissedTips) ProtoMessage() {} func (*GroupDismissedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e432db7a8e0b4bb9, []int{35} + return fileDescriptor_ws_a86e2552dd17ddaa, []int{35} } func (m *GroupDismissedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupDismissedTips.Unmarshal(m, b) @@ -2854,7 +2870,7 @@ func (m *GroupMemberMutedTips) Reset() { *m = GroupMemberMutedTips{} } func (m *GroupMemberMutedTips) String() string { return proto.CompactTextString(m) } func (*GroupMemberMutedTips) ProtoMessage() {} func (*GroupMemberMutedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e432db7a8e0b4bb9, []int{36} + return fileDescriptor_ws_a86e2552dd17ddaa, []int{36} } func (m *GroupMemberMutedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupMemberMutedTips.Unmarshal(m, b) @@ -2923,7 +2939,7 @@ func (m *GroupMemberCancelMutedTips) Reset() { *m = GroupMemberCancelMut func (m *GroupMemberCancelMutedTips) String() string { return proto.CompactTextString(m) } func (*GroupMemberCancelMutedTips) ProtoMessage() {} func (*GroupMemberCancelMutedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e432db7a8e0b4bb9, []int{37} + return fileDescriptor_ws_a86e2552dd17ddaa, []int{37} } func (m *GroupMemberCancelMutedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupMemberCancelMutedTips.Unmarshal(m, b) @@ -2984,7 +3000,7 @@ func (m *GroupMutedTips) Reset() { *m = GroupMutedTips{} } func (m *GroupMutedTips) String() string { return proto.CompactTextString(m) } func (*GroupMutedTips) ProtoMessage() {} func (*GroupMutedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e432db7a8e0b4bb9, []int{38} + return fileDescriptor_ws_a86e2552dd17ddaa, []int{38} } func (m *GroupMutedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupMutedTips.Unmarshal(m, b) @@ -3038,7 +3054,7 @@ func (m *GroupCancelMutedTips) Reset() { *m = GroupCancelMutedTips{} } func (m *GroupCancelMutedTips) String() string { return proto.CompactTextString(m) } func (*GroupCancelMutedTips) ProtoMessage() {} func (*GroupCancelMutedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e432db7a8e0b4bb9, []int{39} + return fileDescriptor_ws_a86e2552dd17ddaa, []int{39} } func (m *GroupCancelMutedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupCancelMutedTips.Unmarshal(m, b) @@ -3093,7 +3109,7 @@ func (m *GroupMemberInfoSetTips) Reset() { *m = GroupMemberInfoSetTips{} func (m *GroupMemberInfoSetTips) String() string { return proto.CompactTextString(m) } func (*GroupMemberInfoSetTips) ProtoMessage() {} func (*GroupMemberInfoSetTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e432db7a8e0b4bb9, []int{40} + return fileDescriptor_ws_a86e2552dd17ddaa, []int{40} } func (m *GroupMemberInfoSetTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupMemberInfoSetTips.Unmarshal(m, b) @@ -3153,7 +3169,7 @@ func (m *OrganizationChangedTips) Reset() { *m = OrganizationChangedTips func (m *OrganizationChangedTips) String() string { return proto.CompactTextString(m) } func (*OrganizationChangedTips) ProtoMessage() {} func (*OrganizationChangedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e432db7a8e0b4bb9, []int{41} + return fileDescriptor_ws_a86e2552dd17ddaa, []int{41} } func (m *OrganizationChangedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OrganizationChangedTips.Unmarshal(m, b) @@ -3200,7 +3216,7 @@ func (m *FriendApplication) Reset() { *m = FriendApplication{} } func (m *FriendApplication) String() string { return proto.CompactTextString(m) } func (*FriendApplication) ProtoMessage() {} func (*FriendApplication) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e432db7a8e0b4bb9, []int{42} + return fileDescriptor_ws_a86e2552dd17ddaa, []int{42} } func (m *FriendApplication) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendApplication.Unmarshal(m, b) @@ -3253,7 +3269,7 @@ func (m *FromToUserID) Reset() { *m = FromToUserID{} } func (m *FromToUserID) String() string { return proto.CompactTextString(m) } func (*FromToUserID) ProtoMessage() {} func (*FromToUserID) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e432db7a8e0b4bb9, []int{43} + return fileDescriptor_ws_a86e2552dd17ddaa, []int{43} } func (m *FromToUserID) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FromToUserID.Unmarshal(m, b) @@ -3299,7 +3315,7 @@ func (m *FriendApplicationTips) Reset() { *m = FriendApplicationTips{} } func (m *FriendApplicationTips) String() string { return proto.CompactTextString(m) } func (*FriendApplicationTips) ProtoMessage() {} func (*FriendApplicationTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e432db7a8e0b4bb9, []int{44} + return fileDescriptor_ws_a86e2552dd17ddaa, []int{44} } func (m *FriendApplicationTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendApplicationTips.Unmarshal(m, b) @@ -3339,7 +3355,7 @@ func (m *FriendApplicationApprovedTips) Reset() { *m = FriendApplication func (m *FriendApplicationApprovedTips) String() string { return proto.CompactTextString(m) } func (*FriendApplicationApprovedTips) ProtoMessage() {} func (*FriendApplicationApprovedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e432db7a8e0b4bb9, []int{45} + return fileDescriptor_ws_a86e2552dd17ddaa, []int{45} } func (m *FriendApplicationApprovedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendApplicationApprovedTips.Unmarshal(m, b) @@ -3386,7 +3402,7 @@ func (m *FriendApplicationRejectedTips) Reset() { *m = FriendApplication func (m *FriendApplicationRejectedTips) String() string { return proto.CompactTextString(m) } func (*FriendApplicationRejectedTips) ProtoMessage() {} func (*FriendApplicationRejectedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e432db7a8e0b4bb9, []int{46} + return fileDescriptor_ws_a86e2552dd17ddaa, []int{46} } func (m *FriendApplicationRejectedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendApplicationRejectedTips.Unmarshal(m, b) @@ -3434,7 +3450,7 @@ func (m *FriendAddedTips) Reset() { *m = FriendAddedTips{} } func (m *FriendAddedTips) String() string { return proto.CompactTextString(m) } func (*FriendAddedTips) ProtoMessage() {} func (*FriendAddedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e432db7a8e0b4bb9, []int{47} + return fileDescriptor_ws_a86e2552dd17ddaa, []int{47} } func (m *FriendAddedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendAddedTips.Unmarshal(m, b) @@ -3487,7 +3503,7 @@ func (m *FriendDeletedTips) Reset() { *m = FriendDeletedTips{} } func (m *FriendDeletedTips) String() string { return proto.CompactTextString(m) } func (*FriendDeletedTips) ProtoMessage() {} func (*FriendDeletedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e432db7a8e0b4bb9, []int{48} + return fileDescriptor_ws_a86e2552dd17ddaa, []int{48} } func (m *FriendDeletedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendDeletedTips.Unmarshal(m, b) @@ -3525,7 +3541,7 @@ func (m *BlackAddedTips) Reset() { *m = BlackAddedTips{} } func (m *BlackAddedTips) String() string { return proto.CompactTextString(m) } func (*BlackAddedTips) ProtoMessage() {} func (*BlackAddedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e432db7a8e0b4bb9, []int{49} + return fileDescriptor_ws_a86e2552dd17ddaa, []int{49} } func (m *BlackAddedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BlackAddedTips.Unmarshal(m, b) @@ -3563,7 +3579,7 @@ func (m *BlackDeletedTips) Reset() { *m = BlackDeletedTips{} } func (m *BlackDeletedTips) String() string { return proto.CompactTextString(m) } func (*BlackDeletedTips) ProtoMessage() {} func (*BlackDeletedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e432db7a8e0b4bb9, []int{50} + return fileDescriptor_ws_a86e2552dd17ddaa, []int{50} } func (m *BlackDeletedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BlackDeletedTips.Unmarshal(m, b) @@ -3601,7 +3617,7 @@ func (m *FriendInfoChangedTips) Reset() { *m = FriendInfoChangedTips{} } func (m *FriendInfoChangedTips) String() string { return proto.CompactTextString(m) } func (*FriendInfoChangedTips) ProtoMessage() {} func (*FriendInfoChangedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e432db7a8e0b4bb9, []int{51} + return fileDescriptor_ws_a86e2552dd17ddaa, []int{51} } func (m *FriendInfoChangedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendInfoChangedTips.Unmarshal(m, b) @@ -3640,7 +3656,7 @@ func (m *UserInfoUpdatedTips) Reset() { *m = UserInfoUpdatedTips{} } func (m *UserInfoUpdatedTips) String() string { return proto.CompactTextString(m) } func (*UserInfoUpdatedTips) ProtoMessage() {} func (*UserInfoUpdatedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e432db7a8e0b4bb9, []int{52} + return fileDescriptor_ws_a86e2552dd17ddaa, []int{52} } func (m *UserInfoUpdatedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UserInfoUpdatedTips.Unmarshal(m, b) @@ -3681,7 +3697,7 @@ func (m *ConversationUpdateTips) Reset() { *m = ConversationUpdateTips{} func (m *ConversationUpdateTips) String() string { return proto.CompactTextString(m) } func (*ConversationUpdateTips) ProtoMessage() {} func (*ConversationUpdateTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e432db7a8e0b4bb9, []int{53} + return fileDescriptor_ws_a86e2552dd17ddaa, []int{53} } func (m *ConversationUpdateTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ConversationUpdateTips.Unmarshal(m, b) @@ -3735,7 +3751,7 @@ func (m *ConversationSetPrivateTips) Reset() { *m = ConversationSetPriva func (m *ConversationSetPrivateTips) String() string { return proto.CompactTextString(m) } func (*ConversationSetPrivateTips) ProtoMessage() {} func (*ConversationSetPrivateTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e432db7a8e0b4bb9, []int{54} + return fileDescriptor_ws_a86e2552dd17ddaa, []int{54} } func (m *ConversationSetPrivateTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ConversationSetPrivateTips.Unmarshal(m, b) @@ -3790,7 +3806,7 @@ func (m *DeleteMessageTips) Reset() { *m = DeleteMessageTips{} } func (m *DeleteMessageTips) String() string { return proto.CompactTextString(m) } func (*DeleteMessageTips) ProtoMessage() {} func (*DeleteMessageTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e432db7a8e0b4bb9, []int{55} + return fileDescriptor_ws_a86e2552dd17ddaa, []int{55} } func (m *DeleteMessageTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DeleteMessageTips.Unmarshal(m, b) @@ -3844,7 +3860,7 @@ func (m *RequestPagination) Reset() { *m = RequestPagination{} } func (m *RequestPagination) String() string { return proto.CompactTextString(m) } func (*RequestPagination) ProtoMessage() {} func (*RequestPagination) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e432db7a8e0b4bb9, []int{56} + return fileDescriptor_ws_a86e2552dd17ddaa, []int{56} } func (m *RequestPagination) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_RequestPagination.Unmarshal(m, b) @@ -3890,7 +3906,7 @@ func (m *ResponsePagination) Reset() { *m = ResponsePagination{} } func (m *ResponsePagination) String() string { return proto.CompactTextString(m) } func (*ResponsePagination) ProtoMessage() {} func (*ResponsePagination) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e432db7a8e0b4bb9, []int{57} + return fileDescriptor_ws_a86e2552dd17ddaa, []int{57} } func (m *ResponsePagination) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ResponsePagination.Unmarshal(m, b) @@ -3947,7 +3963,7 @@ func (m *SignalReq) Reset() { *m = SignalReq{} } func (m *SignalReq) String() string { return proto.CompactTextString(m) } func (*SignalReq) ProtoMessage() {} func (*SignalReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e432db7a8e0b4bb9, []int{58} + return fileDescriptor_ws_a86e2552dd17ddaa, []int{58} } func (m *SignalReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalReq.Unmarshal(m, b) @@ -4336,7 +4352,7 @@ func (m *SignalResp) Reset() { *m = SignalResp{} } func (m *SignalResp) String() string { return proto.CompactTextString(m) } func (*SignalResp) ProtoMessage() {} func (*SignalResp) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e432db7a8e0b4bb9, []int{59} + return fileDescriptor_ws_a86e2552dd17ddaa, []int{59} } func (m *SignalResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalResp.Unmarshal(m, b) @@ -4666,7 +4682,7 @@ func (m *InvitationInfo) Reset() { *m = InvitationInfo{} } func (m *InvitationInfo) String() string { return proto.CompactTextString(m) } func (*InvitationInfo) ProtoMessage() {} func (*InvitationInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e432db7a8e0b4bb9, []int{60} + return fileDescriptor_ws_a86e2552dd17ddaa, []int{60} } func (m *InvitationInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_InvitationInfo.Unmarshal(m, b) @@ -4776,7 +4792,7 @@ func (m *ParticipantMetaData) Reset() { *m = ParticipantMetaData{} } func (m *ParticipantMetaData) String() string { return proto.CompactTextString(m) } func (*ParticipantMetaData) ProtoMessage() {} func (*ParticipantMetaData) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e432db7a8e0b4bb9, []int{61} + return fileDescriptor_ws_a86e2552dd17ddaa, []int{61} } func (m *ParticipantMetaData) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ParticipantMetaData.Unmarshal(m, b) @@ -4831,7 +4847,7 @@ func (m *SignalInviteReq) Reset() { *m = SignalInviteReq{} } func (m *SignalInviteReq) String() string { return proto.CompactTextString(m) } func (*SignalInviteReq) ProtoMessage() {} func (*SignalInviteReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e432db7a8e0b4bb9, []int{62} + return fileDescriptor_ws_a86e2552dd17ddaa, []int{62} } func (m *SignalInviteReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalInviteReq.Unmarshal(m, b) @@ -4893,7 +4909,7 @@ func (m *SignalInviteReply) Reset() { *m = SignalInviteReply{} } func (m *SignalInviteReply) String() string { return proto.CompactTextString(m) } func (*SignalInviteReply) ProtoMessage() {} func (*SignalInviteReply) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e432db7a8e0b4bb9, []int{63} + return fileDescriptor_ws_a86e2552dd17ddaa, []int{63} } func (m *SignalInviteReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalInviteReply.Unmarshal(m, b) @@ -4955,7 +4971,7 @@ func (m *SignalInviteInGroupReq) Reset() { *m = SignalInviteInGroupReq{} func (m *SignalInviteInGroupReq) String() string { return proto.CompactTextString(m) } func (*SignalInviteInGroupReq) ProtoMessage() {} func (*SignalInviteInGroupReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e432db7a8e0b4bb9, []int{64} + return fileDescriptor_ws_a86e2552dd17ddaa, []int{64} } func (m *SignalInviteInGroupReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalInviteInGroupReq.Unmarshal(m, b) @@ -5017,7 +5033,7 @@ func (m *SignalInviteInGroupReply) Reset() { *m = SignalInviteInGroupRep func (m *SignalInviteInGroupReply) String() string { return proto.CompactTextString(m) } func (*SignalInviteInGroupReply) ProtoMessage() {} func (*SignalInviteInGroupReply) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e432db7a8e0b4bb9, []int{65} + return fileDescriptor_ws_a86e2552dd17ddaa, []int{65} } func (m *SignalInviteInGroupReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalInviteInGroupReply.Unmarshal(m, b) @@ -5079,7 +5095,7 @@ func (m *SignalCancelReq) Reset() { *m = SignalCancelReq{} } func (m *SignalCancelReq) String() string { return proto.CompactTextString(m) } func (*SignalCancelReq) ProtoMessage() {} func (*SignalCancelReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e432db7a8e0b4bb9, []int{66} + return fileDescriptor_ws_a86e2552dd17ddaa, []int{66} } func (m *SignalCancelReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalCancelReq.Unmarshal(m, b) @@ -5137,7 +5153,7 @@ func (m *SignalCancelReply) Reset() { *m = SignalCancelReply{} } func (m *SignalCancelReply) String() string { return proto.CompactTextString(m) } func (*SignalCancelReply) ProtoMessage() {} func (*SignalCancelReply) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e432db7a8e0b4bb9, []int{67} + return fileDescriptor_ws_a86e2552dd17ddaa, []int{67} } func (m *SignalCancelReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalCancelReply.Unmarshal(m, b) @@ -5172,7 +5188,7 @@ func (m *SignalAcceptReq) Reset() { *m = SignalAcceptReq{} } func (m *SignalAcceptReq) String() string { return proto.CompactTextString(m) } func (*SignalAcceptReq) ProtoMessage() {} func (*SignalAcceptReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e432db7a8e0b4bb9, []int{68} + return fileDescriptor_ws_a86e2552dd17ddaa, []int{68} } func (m *SignalAcceptReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalAcceptReq.Unmarshal(m, b) @@ -5240,7 +5256,7 @@ func (m *SignalAcceptReply) Reset() { *m = SignalAcceptReply{} } func (m *SignalAcceptReply) String() string { return proto.CompactTextString(m) } func (*SignalAcceptReply) ProtoMessage() {} func (*SignalAcceptReply) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e432db7a8e0b4bb9, []int{69} + return fileDescriptor_ws_a86e2552dd17ddaa, []int{69} } func (m *SignalAcceptReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalAcceptReply.Unmarshal(m, b) @@ -5294,7 +5310,7 @@ func (m *SignalHungUpReq) Reset() { *m = SignalHungUpReq{} } func (m *SignalHungUpReq) String() string { return proto.CompactTextString(m) } func (*SignalHungUpReq) ProtoMessage() {} func (*SignalHungUpReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e432db7a8e0b4bb9, []int{70} + return fileDescriptor_ws_a86e2552dd17ddaa, []int{70} } func (m *SignalHungUpReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalHungUpReq.Unmarshal(m, b) @@ -5345,7 +5361,7 @@ func (m *SignalHungUpReply) Reset() { *m = SignalHungUpReply{} } func (m *SignalHungUpReply) String() string { return proto.CompactTextString(m) } func (*SignalHungUpReply) ProtoMessage() {} func (*SignalHungUpReply) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e432db7a8e0b4bb9, []int{71} + return fileDescriptor_ws_a86e2552dd17ddaa, []int{71} } func (m *SignalHungUpReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalHungUpReply.Unmarshal(m, b) @@ -5380,7 +5396,7 @@ func (m *SignalRejectReq) Reset() { *m = SignalRejectReq{} } func (m *SignalRejectReq) String() string { return proto.CompactTextString(m) } func (*SignalRejectReq) ProtoMessage() {} func (*SignalRejectReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e432db7a8e0b4bb9, []int{72} + return fileDescriptor_ws_a86e2552dd17ddaa, []int{72} } func (m *SignalRejectReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalRejectReq.Unmarshal(m, b) @@ -5445,7 +5461,7 @@ func (m *SignalRejectReply) Reset() { *m = SignalRejectReply{} } func (m *SignalRejectReply) String() string { return proto.CompactTextString(m) } func (*SignalRejectReply) ProtoMessage() {} func (*SignalRejectReply) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e432db7a8e0b4bb9, []int{73} + return fileDescriptor_ws_a86e2552dd17ddaa, []int{73} } func (m *SignalRejectReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalRejectReply.Unmarshal(m, b) @@ -5478,7 +5494,7 @@ func (m *SignalGetRoomByGroupIDReq) Reset() { *m = SignalGetRoomByGroupI func (m *SignalGetRoomByGroupIDReq) String() string { return proto.CompactTextString(m) } func (*SignalGetRoomByGroupIDReq) ProtoMessage() {} func (*SignalGetRoomByGroupIDReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e432db7a8e0b4bb9, []int{74} + return fileDescriptor_ws_a86e2552dd17ddaa, []int{74} } func (m *SignalGetRoomByGroupIDReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalGetRoomByGroupIDReq.Unmarshal(m, b) @@ -5532,7 +5548,7 @@ func (m *SignalGetRoomByGroupIDReply) Reset() { *m = SignalGetRoomByGrou func (m *SignalGetRoomByGroupIDReply) String() string { return proto.CompactTextString(m) } func (*SignalGetRoomByGroupIDReply) ProtoMessage() {} func (*SignalGetRoomByGroupIDReply) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e432db7a8e0b4bb9, []int{75} + return fileDescriptor_ws_a86e2552dd17ddaa, []int{75} } func (m *SignalGetRoomByGroupIDReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalGetRoomByGroupIDReply.Unmarshal(m, b) @@ -5586,7 +5602,7 @@ func (m *SignalOnRoomParticipantConnectedReq) Reset() { *m = SignalOnRoo func (m *SignalOnRoomParticipantConnectedReq) String() string { return proto.CompactTextString(m) } func (*SignalOnRoomParticipantConnectedReq) ProtoMessage() {} func (*SignalOnRoomParticipantConnectedReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e432db7a8e0b4bb9, []int{76} + return fileDescriptor_ws_a86e2552dd17ddaa, []int{76} } func (m *SignalOnRoomParticipantConnectedReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalOnRoomParticipantConnectedReq.Unmarshal(m, b) @@ -5642,7 +5658,7 @@ func (m *SignalOnRoomParticipantDisconnectedReq) Reset() { func (m *SignalOnRoomParticipantDisconnectedReq) String() string { return proto.CompactTextString(m) } func (*SignalOnRoomParticipantDisconnectedReq) ProtoMessage() {} func (*SignalOnRoomParticipantDisconnectedReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e432db7a8e0b4bb9, []int{77} + return fileDescriptor_ws_a86e2552dd17ddaa, []int{77} } func (m *SignalOnRoomParticipantDisconnectedReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalOnRoomParticipantDisconnectedReq.Unmarshal(m, b) @@ -5697,7 +5713,7 @@ func (m *SignalGetTokenByRoomIDReq) Reset() { *m = SignalGetTokenByRoomI func (m *SignalGetTokenByRoomIDReq) String() string { return proto.CompactTextString(m) } func (*SignalGetTokenByRoomIDReq) ProtoMessage() {} func (*SignalGetTokenByRoomIDReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e432db7a8e0b4bb9, []int{78} + return fileDescriptor_ws_a86e2552dd17ddaa, []int{78} } func (m *SignalGetTokenByRoomIDReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalGetTokenByRoomIDReq.Unmarshal(m, b) @@ -5757,7 +5773,7 @@ func (m *SignalGetTokenByRoomIDReply) Reset() { *m = SignalGetTokenByRoo func (m *SignalGetTokenByRoomIDReply) String() string { return proto.CompactTextString(m) } func (*SignalGetTokenByRoomIDReply) ProtoMessage() {} func (*SignalGetTokenByRoomIDReply) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e432db7a8e0b4bb9, []int{79} + return fileDescriptor_ws_a86e2552dd17ddaa, []int{79} } func (m *SignalGetTokenByRoomIDReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalGetTokenByRoomIDReply.Unmarshal(m, b) @@ -5805,7 +5821,7 @@ func (m *DelMsgListReq) Reset() { *m = DelMsgListReq{} } func (m *DelMsgListReq) String() string { return proto.CompactTextString(m) } func (*DelMsgListReq) ProtoMessage() {} func (*DelMsgListReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e432db7a8e0b4bb9, []int{80} + return fileDescriptor_ws_a86e2552dd17ddaa, []int{80} } func (m *DelMsgListReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DelMsgListReq.Unmarshal(m, b) @@ -5865,7 +5881,7 @@ func (m *DelMsgListResp) Reset() { *m = DelMsgListResp{} } func (m *DelMsgListResp) String() string { return proto.CompactTextString(m) } func (*DelMsgListResp) ProtoMessage() {} func (*DelMsgListResp) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_e432db7a8e0b4bb9, []int{81} + return fileDescriptor_ws_a86e2552dd17ddaa, []int{81} } func (m *DelMsgListResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DelMsgListResp.Unmarshal(m, b) @@ -5988,247 +6004,248 @@ func init() { proto.RegisterType((*DelMsgListResp)(nil), "server_api_params.DelMsgListResp") } -func init() { proto.RegisterFile("sdk_ws/ws.proto", fileDescriptor_ws_e432db7a8e0b4bb9) } +func init() { proto.RegisterFile("sdk_ws/ws.proto", fileDescriptor_ws_a86e2552dd17ddaa) } -var fileDescriptor_ws_e432db7a8e0b4bb9 = []byte{ - // 3820 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x3c, 0xdd, 0x6f, 0x1c, 0x57, - 0xf5, 0x9d, 0x59, 0xef, 0xda, 0x7b, 0xd6, 0x1f, 0xeb, 0x49, 0xe2, 0x6e, 0xdd, 0x34, 0x3f, 0xff, - 0xa6, 0x51, 0x7e, 0xfd, 0x85, 0xd4, 0x41, 0xe9, 0x87, 0xe8, 0x57, 0x50, 0x6c, 0x37, 0x8e, 0xdb, - 0x6c, 0xec, 0xce, 0x26, 0x2d, 0x6a, 0x2b, 0x85, 0xf1, 0xce, 0xf5, 0x7a, 0xea, 0xd9, 0x99, 0xf1, - 0x7c, 0x38, 0x31, 0x0f, 0x20, 0x01, 0x02, 0x24, 0x1e, 0x90, 0x10, 0x1f, 0x12, 0xbc, 0xf1, 0x82, - 0x40, 0xa8, 0x42, 0x08, 0x10, 0x12, 0x08, 0xa1, 0x8a, 0x37, 0x90, 0xe0, 0x9d, 0x07, 0x04, 0x4f, - 0x3c, 0xf0, 0x0f, 0x20, 0x21, 0x15, 0xdd, 0x7b, 0xee, 0xcc, 0xdc, 0x3b, 0x33, 0xfb, 0x11, 0xcb, - 0x6a, 0x52, 0x85, 0x37, 0x9f, 0x33, 0xf7, 0x9c, 0x7b, 0x3e, 0xef, 0x39, 0xf7, 0x63, 0x0d, 0x73, - 0xa1, 0xb5, 0x77, 0xfb, 0x4e, 0x78, 0xf1, 0x4e, 0xb8, 0xec, 0x07, 0x5e, 0xe4, 0x69, 0xf3, 0x21, - 0x09, 0x0e, 0x48, 0x70, 0xdb, 0xf4, 0xed, 0xdb, 0xbe, 0x19, 0x98, 0xfd, 0x70, 0x71, 0x79, 0xd3, - 0x27, 0xee, 0xd3, 0x1b, 0xed, 0xa7, 0x3b, 0xec, 0xd3, 0x45, 0x7f, 0xaf, 0x77, 0x91, 0x0d, 0xbe, - 0x98, 0x10, 0x07, 0xa6, 0xef, 0x93, 0x80, 0xb3, 0xd0, 0xff, 0x3a, 0x01, 0xf5, 0xf5, 0xc0, 0x8b, - 0xfd, 0x0d, 0x77, 0xc7, 0xd3, 0x5a, 0x30, 0xd9, 0x63, 0xc0, 0x5a, 0x4b, 0x59, 0x52, 0x9e, 0xaa, - 0x1b, 0x09, 0xa8, 0x9d, 0x86, 0x3a, 0xfb, 0xf3, 0x86, 0xd9, 0x27, 0x2d, 0x95, 0x7d, 0xcb, 0x10, - 0x9a, 0x0e, 0xd3, 0xae, 0x17, 0xd9, 0x3b, 0x76, 0xd7, 0x8c, 0x6c, 0xcf, 0x6d, 0x55, 0xd8, 0x00, - 0x09, 0x47, 0xc7, 0xd8, 0x6e, 0x14, 0x78, 0x56, 0xdc, 0x65, 0x63, 0x26, 0x70, 0x8c, 0x88, 0xa3, - 0xf3, 0xef, 0x98, 0x5d, 0x72, 0xcb, 0xb8, 0xde, 0xaa, 0xe2, 0xfc, 0x1c, 0xd4, 0x96, 0xa0, 0xe1, - 0xdd, 0x71, 0x49, 0x70, 0x2b, 0x24, 0xc1, 0xc6, 0x5a, 0xab, 0xc6, 0xbe, 0x8a, 0x28, 0xed, 0x0c, - 0x40, 0x37, 0x20, 0x66, 0x44, 0x6e, 0xda, 0x7d, 0xd2, 0x9a, 0x5c, 0x52, 0x9e, 0x9a, 0x31, 0x04, - 0x0c, 0xe5, 0xd0, 0x27, 0xfd, 0x6d, 0x12, 0xac, 0x7a, 0xb1, 0x1b, 0xb5, 0xa6, 0xd8, 0x00, 0x11, - 0xa5, 0xcd, 0x82, 0x4a, 0xee, 0xb6, 0xea, 0x8c, 0xb5, 0x4a, 0xee, 0x6a, 0x0b, 0x50, 0x0b, 0x23, - 0x33, 0x8a, 0xc3, 0x16, 0x2c, 0x29, 0x4f, 0x55, 0x0d, 0x0e, 0x69, 0x67, 0x61, 0x86, 0xf1, 0xf5, - 0x12, 0x69, 0x1a, 0x8c, 0x44, 0x46, 0xa6, 0x16, 0xbb, 0x79, 0xe8, 0x93, 0xd6, 0x34, 0x63, 0x90, - 0x21, 0xb4, 0xf3, 0xd0, 0x74, 0x09, 0xb1, 0xde, 0x24, 0x41, 0x66, 0xb5, 0x19, 0x36, 0xa8, 0x80, - 0xd7, 0xce, 0xc1, 0xac, 0xe3, 0x79, 0x7b, 0x6d, 0x26, 0x2a, 0xf5, 0x53, 0x6b, 0x96, 0x8d, 0xcc, - 0x61, 0xb5, 0x0b, 0x30, 0x6f, 0xfa, 0xbe, 0x73, 0x88, 0xa8, 0xab, 0x81, 0x4d, 0x5c, 0xab, 0x35, - 0xc7, 0x86, 0x16, 0x3f, 0x68, 0xcf, 0xc3, 0x82, 0xe8, 0x9f, 0x5b, 0xbe, 0x95, 0xd8, 0xae, 0xc9, - 0x4c, 0x33, 0xe0, 0xab, 0xb6, 0x0c, 0x9a, 0xf4, 0x05, 0x4d, 0x30, 0xcf, 0x4c, 0x50, 0xf2, 0x45, - 0xff, 0x56, 0x05, 0xe6, 0xd2, 0x08, 0xbb, 0xea, 0x05, 0x1d, 0x12, 0x3d, 0xc0, 0x71, 0x86, 0x31, - 0x50, 0x4b, 0x63, 0x60, 0xbd, 0xc4, 0x4f, 0x34, 0xb6, 0x1a, 0x97, 0x1e, 0x5f, 0xee, 0x79, 0x5e, - 0xcf, 0x21, 0x98, 0x48, 0xdb, 0xf1, 0xce, 0xf2, 0x86, 0x1b, 0x3d, 0x73, 0xe9, 0x4d, 0xd3, 0x89, - 0x49, 0x89, 0x13, 0x57, 0x0b, 0x4e, 0x9c, 0x1a, 0xcd, 0x26, 0xef, 0xe1, 0x8d, 0x32, 0x0f, 0xd7, - 0x47, 0xf3, 0x29, 0x52, 0xe9, 0x1f, 0xaa, 0x70, 0x82, 0xb9, 0x85, 0x63, 0x63, 0xc7, 0x19, 0xb1, - 0x04, 0x2c, 0x40, 0x2d, 0x46, 0x67, 0xa3, 0x5f, 0x38, 0x44, 0x5d, 0x16, 0x78, 0x0e, 0xb9, 0x4e, - 0x0e, 0x88, 0xc3, 0x3c, 0x52, 0x35, 0x32, 0x84, 0xb6, 0x08, 0x53, 0xef, 0x79, 0xb6, 0xcb, 0x02, - 0x6b, 0x82, 0x7d, 0x4c, 0x61, 0xfa, 0xcd, 0xb5, 0xbb, 0x7b, 0x2e, 0xf5, 0x35, 0xfa, 0x21, 0x85, - 0x45, 0x17, 0xd5, 0x64, 0x17, 0x9d, 0x83, 0x59, 0xd3, 0xf7, 0xdb, 0xa6, 0xdb, 0x23, 0x01, 0x4e, - 0x3a, 0x89, 0xe9, 0x20, 0x63, 0xe9, 0x82, 0x40, 0x67, 0xea, 0x78, 0x71, 0xd0, 0x25, 0xcc, 0xda, - 0x55, 0x43, 0xc0, 0x50, 0x3e, 0x9e, 0x4f, 0x02, 0x21, 0x8f, 0x31, 0xf5, 0x73, 0x58, 0x1e, 0x12, - 0x90, 0x86, 0x04, 0x5d, 0x48, 0xe2, 0x88, 0xbc, 0xea, 0x5a, 0x4c, 0xa9, 0x06, 0x5f, 0x48, 0x32, - 0x14, 0x5d, 0x20, 0x6c, 0xf7, 0xc0, 0x8e, 0xd2, 0xe5, 0x6a, 0x1a, 0x17, 0x08, 0x09, 0xa9, 0x7f, - 0x45, 0x81, 0xd9, 0xad, 0x78, 0xdb, 0xb1, 0xbb, 0x0c, 0x41, 0x8d, 0x9f, 0x99, 0x58, 0x91, 0x4c, - 0x2c, 0x1a, 0x4a, 0x1d, 0x6c, 0xa8, 0x8a, 0x6c, 0xa8, 0x05, 0xa8, 0xf5, 0x88, 0x6b, 0x91, 0x80, - 0x1b, 0x9e, 0x43, 0x5c, 0xa1, 0x6a, 0xa2, 0x90, 0xfe, 0x81, 0x0a, 0x53, 0x1f, 0xb1, 0x08, 0x4b, - 0xd0, 0xf0, 0x77, 0x3d, 0x97, 0xdc, 0x88, 0x69, 0xf0, 0x71, 0x59, 0x44, 0x94, 0x76, 0x12, 0xaa, - 0xdb, 0x76, 0x10, 0xed, 0x32, 0xef, 0xcf, 0x18, 0x08, 0x50, 0x2c, 0xe9, 0x9b, 0x36, 0xba, 0xbc, - 0x6e, 0x20, 0xc0, 0x15, 0x9a, 0x4a, 0x3d, 0x24, 0x97, 0x82, 0x7a, 0xa1, 0x14, 0x14, 0x23, 0x08, - 0x4a, 0x23, 0xe8, 0x3c, 0x34, 0x7b, 0x8e, 0xb7, 0x6d, 0x3a, 0x06, 0xe9, 0x1e, 0xb4, 0xc3, 0xde, - 0xa6, 0x1f, 0x31, 0x77, 0x57, 0x8d, 0x02, 0x5e, 0xff, 0x97, 0x02, 0x80, 0xa9, 0xc5, 0xcc, 0x98, - 0xab, 0x57, 0x4a, 0xb1, 0x5e, 0x2d, 0x40, 0x2d, 0x20, 0x7d, 0x33, 0xd8, 0x4b, 0xd2, 0x09, 0xa1, - 0x9c, 0xf0, 0x95, 0x82, 0xf0, 0x2f, 0x01, 0xec, 0xb0, 0x79, 0x28, 0x1f, 0x66, 0x56, 0x9a, 0xfc, - 0x85, 0x4e, 0x60, 0x39, 0xf1, 0xa8, 0x21, 0x0c, 0xa7, 0xb9, 0x6a, 0x5a, 0x16, 0x4f, 0x89, 0x2a, - 0xe6, 0x6a, 0x8a, 0x28, 0xc9, 0x88, 0xda, 0x90, 0x8c, 0x98, 0x4c, 0x03, 0xe8, 0x9f, 0x0a, 0xd4, - 0x57, 0x1c, 0xb3, 0xbb, 0x37, 0xa6, 0xea, 0xb2, 0x8a, 0x6a, 0x41, 0xc5, 0x75, 0x98, 0xd9, 0xa6, - 0xec, 0x12, 0x15, 0x98, 0x15, 0x1a, 0x97, 0xfe, 0xb7, 0x44, 0x4b, 0x39, 0x81, 0x0c, 0x99, 0x4e, - 0x56, 0x77, 0x62, 0xb4, 0xba, 0xd5, 0x21, 0xea, 0xa6, 0x35, 0x41, 0xff, 0x6e, 0x05, 0xa6, 0xd9, - 0xd2, 0x69, 0x90, 0xfd, 0x98, 0x84, 0x91, 0xf6, 0x0a, 0x4c, 0xc5, 0x89, 0xa8, 0xca, 0xb8, 0xa2, - 0xa6, 0x24, 0xda, 0x8b, 0xbc, 0xe6, 0x31, 0x7a, 0x95, 0xd1, 0x9f, 0x2e, 0xa1, 0x4f, 0x8b, 0xa8, - 0x91, 0x0d, 0xa7, 0xd5, 0x6e, 0xd7, 0x74, 0x2d, 0x87, 0x18, 0x24, 0x8c, 0x9d, 0x88, 0xaf, 0xbf, - 0x12, 0x0e, 0x23, 0x6d, 0xbf, 0x1d, 0xf6, 0x78, 0x2d, 0xe4, 0x10, 0xb5, 0x0e, 0x8e, 0xa3, 0x9f, - 0x50, 0xf5, 0x0c, 0x41, 0x93, 0x3a, 0x20, 0xfb, 0xcc, 0x43, 0x98, 0x82, 0x09, 0x98, 0xcd, 0xc9, - 0xad, 0x86, 0x81, 0x20, 0xe1, 0xa8, 0x8b, 0x11, 0x66, 0x0c, 0xb0, 0xd9, 0x12, 0x30, 0x85, 0x5e, - 0x4b, 0x5e, 0xac, 0xa1, 0xb0, 0x58, 0x17, 0x96, 0xd4, 0x46, 0xd9, 0x92, 0xfa, 0x97, 0x0a, 0xcc, - 0x60, 0x12, 0x26, 0xae, 0x39, 0x43, 0xb3, 0xc5, 0xeb, 0x4b, 0xb1, 0x28, 0x60, 0xa8, 0x2e, 0x14, - 0xba, 0x21, 0x2f, 0x6d, 0x12, 0x8e, 0x06, 0x34, 0x85, 0xaf, 0x4a, 0x4b, 0x9c, 0x88, 0x4a, 0x66, - 0x59, 0x17, 0x97, 0x3a, 0x01, 0x43, 0x17, 0xcf, 0xc8, 0x93, 0x62, 0x2c, 0x85, 0x29, 0x6d, 0xe4, - 0xa5, 0xf3, 0x63, 0x94, 0x09, 0x18, 0xea, 0xa5, 0xc8, 0x4b, 0xe6, 0x46, 0x53, 0x67, 0x08, 0xe4, - 0xcc, 0xe7, 0xc5, 0x12, 0x97, 0xc2, 0x85, 0xd8, 0xa8, 0x0f, 0x8d, 0x0d, 0x90, 0x62, 0x43, 0x4e, - 0xd1, 0x46, 0x21, 0x45, 0xcf, 0xc2, 0x0c, 0xf2, 0xc9, 0x95, 0x38, 0x09, 0x29, 0x47, 0xd8, 0x4c, - 0x3e, 0xc2, 0xe4, 0x18, 0x99, 0x1d, 0x10, 0x23, 0x73, 0x69, 0xde, 0xfd, 0x4c, 0x05, 0x58, 0x23, - 0xbe, 0x19, 0x44, 0x7d, 0xe2, 0x46, 0x54, 0x3d, 0x2b, 0x85, 0x52, 0xe7, 0x4a, 0x38, 0xb1, 0x32, - 0xa9, 0x72, 0x65, 0xd2, 0x60, 0x82, 0x19, 0x1c, 0xbd, 0xc9, 0xfe, 0xa6, 0xc6, 0xf4, 0xcd, 0x00, - 0xb9, 0x61, 0xaa, 0xa4, 0x30, 0xad, 0x3c, 0x5e, 0x60, 0xf1, 0x5a, 0x55, 0x35, 0x10, 0xa0, 0x4b, - 0x48, 0x36, 0x1f, 0xeb, 0xf4, 0x6b, 0x58, 0x49, 0x64, 0xec, 0xc8, 0xcd, 0xc9, 0x79, 0x68, 0x86, - 0xf1, 0x76, 0xa6, 0xdc, 0x8d, 0xb8, 0xcf, 0x93, 0xa6, 0x80, 0xa7, 0x46, 0xc5, 0x5d, 0x0b, 0x1d, - 0x84, 0xc5, 0x2d, 0x43, 0xe4, 0xbb, 0x15, 0xfd, 0x27, 0x2a, 0x34, 0x37, 0x83, 0x9e, 0xe9, 0xda, - 0x9f, 0x4b, 0xbb, 0xf2, 0x23, 0x15, 0xf9, 0x25, 0x68, 0x10, 0xb7, 0xe7, 0xd8, 0xe1, 0xee, 0x8d, - 0xcc, 0x6e, 0x22, 0x4a, 0x34, 0xf6, 0xc4, 0xa0, 0x36, 0xa0, 0x2a, 0xb5, 0x01, 0x0b, 0x50, 0xeb, - 0x7b, 0xdb, 0xb6, 0x93, 0xc4, 0x3d, 0x87, 0x58, 0xcc, 0x13, 0x87, 0xb0, 0x7e, 0x20, 0x8d, 0xf9, - 0x04, 0x91, 0xb5, 0x06, 0x53, 0xa5, 0xad, 0x41, 0x5d, 0x6c, 0x0d, 0x64, 0xc3, 0x43, 0xc1, 0xf0, - 0x68, 0xae, 0x46, 0x6a, 0xae, 0xdf, 0x29, 0xd0, 0xcc, 0xcc, 0x8d, 0xbd, 0xf1, 0x40, 0x73, 0xe5, - 0x23, 0x50, 0x2d, 0x89, 0xc0, 0x34, 0x6e, 0x2a, 0x62, 0xdc, 0xd0, 0x48, 0xf3, 0x42, 0x5b, 0xd8, - 0xa0, 0xa4, 0x30, 0x9d, 0xcd, 0x21, 0xa6, 0x60, 0x2c, 0x84, 0x84, 0xed, 0x68, 0x4d, 0xda, 0x8e, - 0xe6, 0xab, 0xf1, 0xaf, 0x14, 0x38, 0x49, 0xbd, 0x5c, 0x50, 0x63, 0x13, 0x9a, 0x5e, 0x2e, 0x12, - 0x78, 0xb9, 0x7a, 0xb2, 0xa4, 0xdc, 0xe4, 0x83, 0xc6, 0x28, 0x10, 0x53, 0x86, 0x56, 0x6e, 0x12, - 0x5e, 0xbf, 0xca, 0x18, 0xe6, 0xe5, 0x31, 0x0a, 0xc4, 0xfa, 0x6f, 0x14, 0x68, 0x62, 0x81, 0x14, - 0xf2, 0xfc, 0xd8, 0xc5, 0x7e, 0x0b, 0x4e, 0xe6, 0x67, 0xbe, 0x6e, 0x87, 0x51, 0x4b, 0x5d, 0xaa, - 0x8c, 0x2b, 0x7a, 0x29, 0x03, 0x9a, 0x6b, 0x8f, 0x6e, 0xc5, 0x8e, 0xd3, 0x26, 0x61, 0x68, 0xf6, - 0xc8, 0xca, 0x61, 0x87, 0xec, 0xd3, 0x0f, 0x06, 0xd9, 0x1f, 0x18, 0x43, 0xb4, 0x5b, 0x62, 0xed, - 0x86, 0xed, 0xb9, 0x69, 0x08, 0x89, 0x28, 0x9a, 0x56, 0x21, 0xf2, 0x69, 0x55, 0x96, 0x2a, 0xb4, - 0x10, 0x73, 0x50, 0xfb, 0x2c, 0x4c, 0xb3, 0x4e, 0x80, 0x4f, 0xd3, 0x9a, 0x60, 0x0a, 0xbc, 0x5c, - 0xda, 0x7b, 0x94, 0x4a, 0x85, 0x3d, 0x05, 0x87, 0x5f, 0x75, 0xa3, 0xe0, 0xd0, 0x90, 0x38, 0x2e, - 0xbe, 0x03, 0xf3, 0x85, 0x21, 0x5a, 0x13, 0x2a, 0x7b, 0xe4, 0x90, 0xeb, 0x41, 0xff, 0xd4, 0x3e, - 0x09, 0xd5, 0x03, 0xba, 0xd1, 0xe4, 0xde, 0x5f, 0x2c, 0x91, 0x80, 0xcb, 0x6c, 0xe0, 0xc0, 0x17, - 0xd5, 0x4f, 0x29, 0xfa, 0x93, 0xa9, 0x62, 0xa2, 0x8e, 0x8a, 0xa4, 0xa3, 0xfe, 0x3a, 0x34, 0xda, - 0x61, 0x6f, 0xcd, 0x8c, 0x4c, 0x36, 0xf0, 0x65, 0x68, 0xf4, 0x33, 0x90, 0x0d, 0x2e, 0x9f, 0x8f, - 0x13, 0x19, 0xe2, 0x70, 0xfd, 0xcf, 0x2a, 0xb4, 0xca, 0x4d, 0x11, 0xfa, 0x54, 0x06, 0x12, 0x04, - 0xab, 0x9e, 0x45, 0x98, 0x6a, 0x55, 0x23, 0x01, 0xa9, 0xef, 0x48, 0x10, 0xd0, 0x1a, 0xc6, 0x5b, - 0x75, 0x84, 0xb4, 0x65, 0x98, 0x70, 0x12, 0xb7, 0x0c, 0x97, 0x82, 0x8d, 0xd3, 0xfa, 0xd0, 0x64, - 0xd6, 0x15, 0x14, 0xe2, 0x3e, 0xbb, 0x32, 0xb6, 0xcf, 0x42, 0x1f, 0x9d, 0x26, 0xf0, 0x40, 0xc7, - 0x15, 0x58, 0x2f, 0x76, 0xe1, 0x54, 0xe9, 0xd0, 0x12, 0x07, 0x3e, 0x2b, 0x3b, 0xf0, 0xcc, 0x60, - 0x55, 0xf2, 0x4e, 0xf4, 0x41, 0x5b, 0x27, 0x51, 0xdb, 0xbc, 0x7b, 0xc5, 0xb5, 0xda, 0xb6, 0xdb, - 0x21, 0xfb, 0x34, 0xda, 0x97, 0xa0, 0xc1, 0x8f, 0x0d, 0x52, 0x37, 0xd5, 0x0d, 0x11, 0x35, 0xf0, - 0x34, 0x21, 0x97, 0x0f, 0x95, 0x42, 0x3e, 0xe8, 0x97, 0x61, 0x5a, 0x9c, 0x8e, 0x15, 0x11, 0xf3, - 0x6e, 0x87, 0xec, 0x33, 0x85, 0x66, 0x0c, 0x0e, 0x31, 0x3c, 0x1b, 0xc1, 0x77, 0x18, 0x1c, 0xd2, - 0xff, 0xa0, 0xc2, 0x89, 0x82, 0xc8, 0xa1, 0x7f, 0xaf, 0x7c, 0xc4, 0x78, 0xa9, 0x0c, 0x8a, 0x97, - 0x09, 0x29, 0x5e, 0xf6, 0x60, 0x1e, 0x9d, 0x24, 0x4c, 0xdd, 0xaa, 0xb2, 0x00, 0x78, 0xa5, 0xac, - 0xe1, 0x2f, 0x0a, 0xc9, 0x7d, 0x2f, 0x60, 0xd1, 0xf9, 0x45, 0xbe, 0x8b, 0x04, 0x16, 0xca, 0x07, - 0x97, 0xb8, 0xff, 0x39, 0xd9, 0xfd, 0xff, 0x53, 0xe6, 0x7e, 0x51, 0x12, 0xc1, 0xff, 0xfb, 0x30, - 0x47, 0x17, 0xd5, 0x0e, 0x71, 0xad, 0x76, 0xd8, 0x63, 0x86, 0x5c, 0x82, 0x06, 0xd2, 0xb7, 0xc3, - 0x5e, 0xb6, 0x01, 0x14, 0x50, 0x74, 0x44, 0xd7, 0xb1, 0xe9, 0xe2, 0xc9, 0x46, 0xf0, 0x45, 0x4f, - 0x40, 0xd1, 0x02, 0x19, 0x12, 0x7e, 0xc2, 0x42, 0xad, 0x5b, 0x31, 0x52, 0x58, 0xff, 0x65, 0x0d, - 0x26, 0x79, 0x34, 0xb2, 0xa2, 0x48, 0xf7, 0xdc, 0xe9, 0xb2, 0x8a, 0x10, 0xf6, 0xb5, 0xdd, 0x83, - 0x2c, 0xbc, 0x10, 0x12, 0x8f, 0xb7, 0x2a, 0xf2, 0xf1, 0x56, 0x4e, 0xa6, 0x89, 0xa2, 0x4c, 0x39, - 0xbd, 0xaa, 0x45, 0xbd, 0x68, 0x1b, 0xc7, 0x3a, 0x9b, 0x2d, 0xc7, 0x8c, 0x76, 0xbc, 0xa0, 0xcf, - 0xb7, 0xd0, 0x55, 0xa3, 0x80, 0xa7, 0xad, 0x23, 0xe2, 0xd2, 0xde, 0x1f, 0x4b, 0x78, 0x0e, 0x4b, - 0x3b, 0x6d, 0xc4, 0x24, 0x7b, 0x00, 0x3c, 0xe7, 0x90, 0x91, 0x28, 0x5b, 0x18, 0xda, 0x9e, 0xcb, - 0xba, 0x50, 0x6c, 0xf5, 0x45, 0x14, 0xd5, 0xbc, 0x1f, 0xf6, 0xae, 0x06, 0x5e, 0x9f, 0x6f, 0xaf, - 0x12, 0x90, 0x69, 0xee, 0xb9, 0x51, 0xd2, 0xc1, 0xe2, 0x09, 0x87, 0x88, 0xa2, 0xb4, 0x1c, 0x64, - 0x7d, 0xfe, 0xb4, 0x91, 0x80, 0x34, 0x96, 0x42, 0xb2, 0xcf, 0x9b, 0x77, 0xfa, 0xa7, 0xe4, 0xb9, - 0x39, 0xd9, 0x73, 0xb9, 0x6e, 0xac, 0xc9, 0xbe, 0x8a, 0xdd, 0x58, 0xd6, 0xe2, 0xcc, 0x4b, 0x2d, - 0xce, 0x15, 0x98, 0xf4, 0x7c, 0x9a, 0xfe, 0x61, 0x4b, 0x63, 0xe9, 0xf2, 0x7f, 0x83, 0x17, 0xa8, - 0xe5, 0x4d, 0x1c, 0x89, 0x89, 0x91, 0xd0, 0x69, 0xd7, 0x61, 0xce, 0xdb, 0xd9, 0x71, 0x6c, 0x97, - 0x6c, 0xc5, 0xe1, 0x2e, 0xdb, 0x6a, 0x9f, 0x60, 0xc1, 0xae, 0x97, 0x35, 0x11, 0xf2, 0x48, 0x23, - 0x4f, 0x4a, 0x3b, 0x3f, 0x33, 0xc2, 0x4d, 0x0e, 0x5b, 0xe0, 0x4e, 0xb2, 0x05, 0x4e, 0xc2, 0xb1, - 0x73, 0x42, 0x61, 0xa1, 0x3f, 0xc5, 0x0c, 0x27, 0xa2, 0x90, 0x4b, 0x64, 0x76, 0x77, 0x09, 0x3b, - 0x34, 0x6a, 0x2d, 0x60, 0xff, 0x28, 0xe2, 0x78, 0x77, 0xf7, 0x68, 0xd2, 0xdd, 0x2d, 0xbe, 0x08, - 0xd3, 0xa2, 0x82, 0x25, 0xc9, 0x7c, 0x52, 0x4c, 0xe6, 0x29, 0x31, 0x57, 0xbf, 0xad, 0xc0, 0x5c, - 0x4e, 0x35, 0x3a, 0x3a, 0xb2, 0x23, 0x87, 0x70, 0x0e, 0x08, 0xd0, 0xdd, 0x91, 0x45, 0xc2, 0x2e, - 0x4f, 0x1e, 0xf6, 0x37, 0x97, 0xa4, 0x92, 0x6e, 0xd9, 0x75, 0x98, 0xb6, 0x37, 0x3b, 0x94, 0x51, - 0xc7, 0x8b, 0x5d, 0x2b, 0x3d, 0x68, 0x17, 0x70, 0x6c, 0xdb, 0xbe, 0xd9, 0x59, 0x31, 0xad, 0x1e, - 0xc1, 0x6b, 0x97, 0x2a, 0x93, 0x49, 0x46, 0xea, 0x16, 0x4c, 0xdd, 0xb4, 0xfd, 0x70, 0xd5, 0xeb, - 0xf7, 0x69, 0x08, 0x58, 0x24, 0xa2, 0x7d, 0xbc, 0xc2, 0x0c, 0xc6, 0x21, 0x6a, 0x4d, 0x8b, 0xec, - 0x98, 0xb1, 0x13, 0xd1, 0xa1, 0xc9, 0x92, 0x21, 0xa0, 0xd8, 0x11, 0x42, 0xe8, 0xb9, 0x6b, 0x48, - 0x8d, 0x72, 0x0a, 0x18, 0xfd, 0xf7, 0x2a, 0x34, 0xd9, 0x8a, 0xb8, 0xca, 0x02, 0xce, 0x62, 0x44, - 0x97, 0xa0, 0xca, 0x16, 0x00, 0xde, 0x51, 0x0e, 0x3f, 0x77, 0xc1, 0xa1, 0xda, 0x65, 0xa8, 0x79, - 0x3e, 0x6b, 0x43, 0x71, 0xb9, 0x3c, 0x37, 0x88, 0x48, 0x3e, 0x5a, 0x37, 0x38, 0x95, 0x76, 0x15, - 0xa0, 0x9f, 0x75, 0x9d, 0xd8, 0x3c, 0x8c, 0xcb, 0x43, 0xa0, 0xa4, 0xc6, 0x4d, 0xeb, 0x62, 0x7a, - 0xbe, 0x5e, 0x31, 0x64, 0xa4, 0x76, 0x03, 0x66, 0x99, 0xd8, 0x9b, 0xc9, 0x01, 0x1c, 0xf3, 0xc1, - 0xf8, 0x33, 0xe6, 0xa8, 0xf5, 0x1f, 0x28, 0xdc, 0x8c, 0xf4, 0x6b, 0x87, 0xa0, 0xed, 0x33, 0x93, - 0x28, 0x47, 0x32, 0xc9, 0x22, 0x4c, 0xf5, 0x63, 0xe1, 0x3c, 0xb0, 0x62, 0xa4, 0x70, 0xe6, 0xa2, - 0xca, 0xd8, 0x2e, 0xd2, 0x7f, 0xa8, 0x40, 0xeb, 0x35, 0xcf, 0x76, 0xd9, 0x87, 0x2b, 0xbe, 0xef, - 0xf0, 0x6b, 0x98, 0x23, 0xfb, 0xfc, 0xd3, 0x50, 0x37, 0x91, 0x8d, 0x1b, 0x71, 0xb7, 0x8f, 0x71, - 0xc6, 0x97, 0xd1, 0x08, 0x07, 0x2d, 0x15, 0xf1, 0xa0, 0x45, 0x7f, 0x5f, 0x81, 0x59, 0x34, 0xca, - 0x1b, 0xb1, 0x1d, 0x1d, 0x59, 0xbe, 0x15, 0x98, 0xda, 0x8f, 0xed, 0xe8, 0x08, 0x51, 0x99, 0xd2, - 0x15, 0xe3, 0xa9, 0x52, 0x12, 0x4f, 0xfa, 0x4f, 0x15, 0x38, 0x9d, 0x37, 0xeb, 0x95, 0x6e, 0x97, - 0xf8, 0xf7, 0x33, 0xa5, 0xa4, 0x83, 0xa6, 0x89, 0xdc, 0x41, 0x53, 0xa9, 0xc8, 0x06, 0x79, 0x8f, - 0x74, 0x1f, 0x5c, 0x91, 0xbf, 0xa4, 0xc2, 0x63, 0xeb, 0x69, 0xe2, 0xdd, 0x0c, 0x4c, 0x37, 0xdc, - 0x21, 0x41, 0x70, 0x1f, 0xe5, 0xbd, 0x0e, 0x33, 0x2e, 0xb9, 0x93, 0xc9, 0xc4, 0xd3, 0x71, 0x5c, - 0x36, 0x32, 0xf1, 0x78, 0x6b, 0x97, 0xfe, 0x6f, 0x05, 0x9a, 0xc8, 0xe7, 0x75, 0xbb, 0xbb, 0x77, - 0x1f, 0x95, 0xbf, 0x01, 0xb3, 0x7b, 0x4c, 0x02, 0x0a, 0x1d, 0x61, 0xd9, 0xce, 0x51, 0x8f, 0xa9, - 0xfe, 0x87, 0x0a, 0xcc, 0x27, 0xb7, 0xbf, 0x07, 0xf6, 0xfd, 0x0c, 0xd6, 0x2d, 0x98, 0xc3, 0x93, - 0xf6, 0xa3, 0x1a, 0x20, 0x4f, 0x3e, 0xa6, 0x05, 0x7e, 0xa1, 0xc0, 0x1c, 0x72, 0x7a, 0xd5, 0x8d, - 0x48, 0x70, 0x64, 0xfd, 0xaf, 0x41, 0x83, 0xb8, 0x51, 0x60, 0xba, 0x47, 0x59, 0x21, 0x45, 0xd2, - 0x31, 0x17, 0xc9, 0xf7, 0x15, 0xd0, 0x18, 0xab, 0x35, 0x3b, 0xec, 0xdb, 0x61, 0x78, 0x1f, 0x5d, - 0x37, 0x9e, 0xc0, 0xdf, 0x53, 0xe1, 0xa4, 0xc0, 0xa5, 0x1d, 0x47, 0x0f, 0xba, 0xc8, 0xda, 0x1a, - 0xd4, 0x69, 0x8f, 0x20, 0xde, 0x83, 0x8e, 0x3b, 0x51, 0x46, 0x48, 0xbb, 0x58, 0x06, 0x74, 0x48, - 0xd7, 0x73, 0xad, 0x90, 0x35, 0x47, 0x33, 0x86, 0x84, 0xa3, 0xcb, 0xd0, 0xa2, 0xc0, 0x66, 0xd5, - 0x74, 0xbb, 0xc4, 0x79, 0x68, 0x4c, 0xa4, 0xff, 0x58, 0x81, 0x59, 0x1c, 0xf2, 0xe0, 0xab, 0x4c, - 0x6b, 0x3d, 0x06, 0xf2, 0xc7, 0xc6, 0x4b, 0x34, 0xbc, 0x16, 0x04, 0x2e, 0x62, 0x5f, 0xfd, 0xe0, +var fileDescriptor_ws_a86e2552dd17ddaa = []byte{ + // 3837 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x3c, 0x5b, 0x6f, 0x1d, 0x57, + 0xd5, 0x9d, 0x39, 0x3e, 0xc7, 0x3e, 0xeb, 0xf8, 0x72, 0x3c, 0x49, 0xdc, 0x53, 0x37, 0xcd, 0xe7, + 0x6f, 0x1a, 0xe5, 0xeb, 0x97, 0x2f, 0x75, 0x3e, 0xa5, 0x17, 0xd1, 0x5b, 0x50, 0x6c, 0x37, 0x8e, + 0xdb, 0x9c, 0xd8, 0x9d, 0x93, 0xb4, 0xa8, 0xad, 0x14, 0xc6, 0x67, 0xb6, 0x8f, 0xa7, 0x9e, 0x33, + 0x33, 0x9e, 0x8b, 0x13, 0xf3, 0x00, 0x12, 0x20, 0x40, 0xe2, 0x01, 0x09, 0x71, 0x91, 0xe0, 0x8d, + 0x17, 0x04, 0x42, 0x15, 0x42, 0x80, 0x90, 0x40, 0x08, 0x21, 0x1e, 0x90, 0x40, 0x82, 0x77, 0x24, + 0x10, 0x3c, 0xf1, 0xc0, 0x1f, 0x40, 0x42, 0x2a, 0xda, 0x7b, 0xed, 0x99, 0xd9, 0x7b, 0x66, 0xce, + 0x25, 0x96, 0xd5, 0xa4, 0x0a, 0x6f, 0x5e, 0x6b, 0xf6, 0x5a, 0x7b, 0xdd, 0xf7, 0xda, 0x97, 0x63, + 0x98, 0x0b, 0xad, 0xbd, 0xdb, 0x77, 0xc2, 0x8b, 0x77, 0xc2, 0x65, 0x3f, 0xf0, 0x22, 0x4f, 0x9b, + 0x0f, 0x49, 0x70, 0x40, 0x82, 0xdb, 0xa6, 0x6f, 0xdf, 0xf6, 0xcd, 0xc0, 0xec, 0x87, 0x8b, 0xcb, + 0x9b, 0x3e, 0x71, 0x9f, 0xde, 0x68, 0x3f, 0xdd, 0x61, 0x9f, 0x2e, 0xfa, 0x7b, 0xbd, 0x8b, 0x6c, + 0xf0, 0xc5, 0x84, 0x38, 0x30, 0x7d, 0x9f, 0x04, 0x9c, 0x85, 0xfe, 0x97, 0x09, 0xa8, 0xaf, 0x07, + 0x5e, 0xec, 0x6f, 0xb8, 0x3b, 0x9e, 0xd6, 0x82, 0xc9, 0x1e, 0x03, 0xd6, 0x5a, 0xca, 0x92, 0xf2, + 0x54, 0xdd, 0x48, 0x40, 0xed, 0x34, 0xd4, 0xd9, 0x9f, 0x37, 0xcc, 0x3e, 0x69, 0xa9, 0xec, 0x5b, + 0x86, 0xd0, 0x74, 0x98, 0x76, 0xbd, 0xc8, 0xde, 0xb1, 0xbb, 0x66, 0x64, 0x7b, 0x6e, 0xab, 0xc2, + 0x06, 0x48, 0x38, 0x3a, 0xc6, 0x76, 0xa3, 0xc0, 0xb3, 0xe2, 0x2e, 0x1b, 0x33, 0x81, 0x63, 0x44, + 0x1c, 0x9d, 0x7f, 0xc7, 0xec, 0x92, 0x5b, 0xc6, 0xf5, 0x56, 0x15, 0xe7, 0xe7, 0xa0, 0xb6, 0x04, + 0x0d, 0xef, 0x8e, 0x4b, 0x82, 0x5b, 0x21, 0x09, 0x36, 0xd6, 0x5a, 0x35, 0xf6, 0x55, 0x44, 0x69, + 0x67, 0x00, 0xba, 0x01, 0x31, 0x23, 0x72, 0xd3, 0xee, 0x93, 0xd6, 0xe4, 0x92, 0xf2, 0xd4, 0x8c, + 0x21, 0x60, 0x28, 0x87, 0x3e, 0xe9, 0x6f, 0x93, 0x60, 0xd5, 0x8b, 0xdd, 0xa8, 0x35, 0xc5, 0x06, + 0x88, 0x28, 0x6d, 0x16, 0x54, 0x72, 0xb7, 0x55, 0x67, 0xac, 0x55, 0x72, 0x57, 0x5b, 0x80, 0x5a, + 0x18, 0x99, 0x51, 0x1c, 0xb6, 0x60, 0x49, 0x79, 0xaa, 0x6a, 0x70, 0x48, 0x3b, 0x0b, 0x33, 0x8c, + 0xaf, 0x97, 0x48, 0xd3, 0x60, 0x24, 0x32, 0x32, 0xb5, 0xd8, 0xcd, 0x43, 0x9f, 0xb4, 0xa6, 0x19, + 0x83, 0x0c, 0xa1, 0x9d, 0x87, 0xa6, 0x4b, 0x88, 0xf5, 0x26, 0x09, 0x32, 0xab, 0xcd, 0xb0, 0x41, + 0x05, 0xbc, 0x76, 0x0e, 0x66, 0x1d, 0xcf, 0xdb, 0x6b, 0x33, 0x51, 0xa9, 0x9f, 0x5a, 0xb3, 0x6c, + 0x64, 0x0e, 0xab, 0x5d, 0x80, 0x79, 0xd3, 0xf7, 0x9d, 0x43, 0x44, 0x5d, 0x0d, 0x6c, 0xe2, 0x5a, + 0xad, 0x39, 0x36, 0xb4, 0xf8, 0x41, 0x7b, 0x1e, 0x16, 0x44, 0xff, 0xdc, 0xf2, 0xad, 0xc4, 0x76, + 0x4d, 0x66, 0x9a, 0x01, 0x5f, 0xb5, 0x65, 0xd0, 0xa4, 0x2f, 0x68, 0x82, 0x79, 0x66, 0x82, 0x92, + 0x2f, 0xfa, 0xd7, 0x2a, 0x30, 0x97, 0x46, 0xd8, 0x55, 0x2f, 0xe8, 0x90, 0xe8, 0x01, 0x8e, 0x33, + 0x8c, 0x81, 0x5a, 0x1a, 0x03, 0xeb, 0x25, 0x7e, 0xa2, 0xb1, 0xd5, 0xb8, 0xf4, 0xf8, 0x72, 0xcf, + 0xf3, 0x7a, 0x0e, 0xc1, 0x44, 0xda, 0x8e, 0x77, 0x96, 0x37, 0xdc, 0xe8, 0x99, 0x4b, 0x6f, 0x9a, + 0x4e, 0x4c, 0x4a, 0x9c, 0xb8, 0x5a, 0x70, 0xe2, 0xd4, 0x68, 0x36, 0x79, 0x0f, 0x6f, 0x94, 0x79, + 0xb8, 0x3e, 0x9a, 0x4f, 0x91, 0x4a, 0xff, 0x40, 0x85, 0x13, 0xcc, 0x2d, 0x1c, 0x1b, 0x3b, 0xce, + 0x88, 0x12, 0xb0, 0x00, 0xb5, 0x18, 0x9d, 0x8d, 0x7e, 0xe1, 0x10, 0x75, 0x59, 0xe0, 0x39, 0xe4, + 0x3a, 0x39, 0x20, 0x0e, 0xf3, 0x48, 0xd5, 0xc8, 0x10, 0xda, 0x22, 0x4c, 0xbd, 0xe7, 0xd9, 0x2e, + 0x0b, 0xac, 0x09, 0xf6, 0x31, 0x85, 0xe9, 0x37, 0xd7, 0xee, 0xee, 0xb9, 0xd4, 0xd7, 0xe8, 0x87, + 0x14, 0x16, 0x5d, 0x54, 0x93, 0x5d, 0x74, 0x0e, 0x66, 0x4d, 0xdf, 0x6f, 0x9b, 0x6e, 0x8f, 0x04, + 0x38, 0xe9, 0x24, 0xa6, 0x83, 0x8c, 0xa5, 0x05, 0x81, 0xce, 0xd4, 0xf1, 0xe2, 0xa0, 0x4b, 0x98, + 0xb5, 0xab, 0x86, 0x80, 0xa1, 0x7c, 0x3c, 0x9f, 0x04, 0x42, 0x1e, 0x63, 0xea, 0xe7, 0xb0, 0x3c, + 0x24, 0x20, 0x0d, 0x09, 0x5a, 0x48, 0xe2, 0x88, 0xbc, 0xea, 0x5a, 0x4c, 0xa9, 0x06, 0x2f, 0x24, + 0x19, 0x8a, 0x16, 0x08, 0xdb, 0x3d, 0xb0, 0xa3, 0xb4, 0x5c, 0x4d, 0x63, 0x81, 0x90, 0x90, 0xfa, + 0x17, 0x14, 0x98, 0xdd, 0x8a, 0xb7, 0x1d, 0xbb, 0xcb, 0x10, 0xd4, 0xf8, 0x99, 0x89, 0x15, 0xc9, + 0xc4, 0xa2, 0xa1, 0xd4, 0xc1, 0x86, 0xaa, 0xc8, 0x86, 0x5a, 0x80, 0x5a, 0x8f, 0xb8, 0x16, 0x09, + 0xb8, 0xe1, 0x39, 0xc4, 0x15, 0xaa, 0x26, 0x0a, 0xe9, 0x7f, 0x56, 0x61, 0xea, 0x43, 0x16, 0x61, + 0x09, 0x1a, 0xfe, 0xae, 0xe7, 0x92, 0x1b, 0x31, 0x0d, 0x3e, 0x2e, 0x8b, 0x88, 0xd2, 0x4e, 0x42, + 0x75, 0xdb, 0x0e, 0xa2, 0x5d, 0xe6, 0xfd, 0x19, 0x03, 0x01, 0x8a, 0x25, 0x7d, 0xd3, 0x46, 0x97, + 0xd7, 0x0d, 0x04, 0xb8, 0x42, 0x53, 0xa9, 0x87, 0xe4, 0xa5, 0xa0, 0x5e, 0x58, 0x0a, 0x8a, 0x11, + 0x04, 0xa5, 0x11, 0x74, 0x1e, 0x9a, 0x3d, 0xc7, 0xdb, 0x36, 0x1d, 0x83, 0x74, 0x0f, 0xda, 0x61, + 0x6f, 0xd3, 0x8f, 0x98, 0xbb, 0xab, 0x46, 0x01, 0x4f, 0xed, 0xc3, 0x44, 0xec, 0x44, 0x01, 0x77, + 0x77, 0x0a, 0xeb, 0xff, 0x54, 0x00, 0x30, 0xed, 0x98, 0x89, 0x73, 0x6b, 0x99, 0x52, 0x5c, 0xcb, + 0x16, 0xa0, 0x16, 0x90, 0xbe, 0x19, 0xec, 0x25, 0xa9, 0x86, 0x50, 0x4e, 0xb1, 0x4a, 0x41, 0xb1, + 0x97, 0x00, 0x76, 0xd8, 0x3c, 0x94, 0x0f, 0x33, 0x39, 0x2d, 0x0c, 0x85, 0x2e, 0x61, 0x39, 0xf1, + 0xb6, 0x21, 0x0c, 0xa7, 0x79, 0x6c, 0x5a, 0x16, 0x4f, 0x97, 0x2a, 0xe6, 0x71, 0x8a, 0x28, 0xc9, + 0x96, 0xda, 0x90, 0x6c, 0x99, 0x4c, 0x83, 0xeb, 0x1f, 0x0a, 0xd4, 0x57, 0x1c, 0xb3, 0xbb, 0x37, + 0xa6, 0xea, 0xb2, 0x8a, 0x6a, 0x41, 0xc5, 0x75, 0x98, 0xd9, 0xa6, 0xec, 0x12, 0x15, 0x98, 0x15, + 0x1a, 0x97, 0xfe, 0xbb, 0x44, 0x4b, 0x39, 0xb9, 0x0c, 0x99, 0x4e, 0x56, 0x77, 0x62, 0xb4, 0xba, + 0xd5, 0x21, 0xea, 0xa6, 0xeb, 0x85, 0xfe, 0xcd, 0x0a, 0x4c, 0xb3, 0xb2, 0x6a, 0x90, 0xfd, 0x98, + 0x84, 0x91, 0xf6, 0x0a, 0x4c, 0xc5, 0x89, 0xa8, 0xca, 0xb8, 0xa2, 0xa6, 0x24, 0xda, 0x8b, 0x7c, + 0x3d, 0x64, 0xf4, 0x2a, 0xa3, 0x3f, 0x5d, 0x42, 0x9f, 0x2e, 0xb0, 0x46, 0x36, 0x9c, 0xae, 0x84, + 0xbb, 0xa6, 0x6b, 0x39, 0xc4, 0x20, 0x61, 0xec, 0x44, 0xbc, 0x36, 0x4b, 0x38, 0x8c, 0xb4, 0xfd, + 0x76, 0xd8, 0xe3, 0xeb, 0x24, 0x87, 0xa8, 0x75, 0x70, 0x1c, 0xfd, 0x84, 0xaa, 0x67, 0x08, 0x9a, + 0xf0, 0x01, 0xd9, 0x67, 0x1e, 0xc2, 0xf4, 0x4c, 0xc0, 0x6c, 0x4e, 0x6e, 0x35, 0x0c, 0x04, 0x09, + 0x47, 0x5d, 0x8c, 0x30, 0x63, 0x80, 0x8d, 0x98, 0x80, 0x29, 0xf4, 0x61, 0x72, 0x21, 0x87, 0x42, + 0x21, 0x2f, 0x94, 0xdb, 0x46, 0x59, 0xb9, 0xfd, 0x53, 0x05, 0x66, 0x30, 0x09, 0x13, 0xd7, 0x9c, + 0xa1, 0xd9, 0xe2, 0xf5, 0xa5, 0x58, 0x14, 0x30, 0x54, 0x17, 0x0a, 0xdd, 0x90, 0xcb, 0x9e, 0x84, + 0xa3, 0x01, 0x4d, 0xe1, 0xab, 0x52, 0xf9, 0x13, 0x51, 0xc9, 0x2c, 0xeb, 0x62, 0x19, 0x14, 0x30, + 0xb4, 0x70, 0x44, 0x9e, 0x14, 0x63, 0x29, 0x4c, 0x69, 0x23, 0x2f, 0x9d, 0x1f, 0xa3, 0x4c, 0xc0, + 0x50, 0x2f, 0x45, 0x5e, 0x32, 0x37, 0x9a, 0x3a, 0x43, 0x20, 0x67, 0x3e, 0x2f, 0x2e, 0x7f, 0x29, + 0x5c, 0x88, 0x8d, 0xfa, 0xd0, 0xd8, 0x00, 0x29, 0x36, 0xe4, 0x14, 0x6d, 0x14, 0x52, 0xf4, 0x2c, + 0xcc, 0x20, 0x9f, 0xdc, 0xf2, 0x27, 0x21, 0xe5, 0x08, 0x9b, 0xc9, 0x47, 0x98, 0x1c, 0x23, 0xb3, + 0x03, 0x62, 0x64, 0x2e, 0xcd, 0xbb, 0x1f, 0xa9, 0x00, 0x6b, 0xc4, 0x37, 0x83, 0xa8, 0x4f, 0xdc, + 0x88, 0xaa, 0x67, 0xa5, 0x50, 0xea, 0x5c, 0x09, 0x27, 0xae, 0x5a, 0xaa, 0xbc, 0x6a, 0x69, 0x30, + 0xc1, 0x0c, 0x8e, 0xde, 0x64, 0x7f, 0x53, 0x63, 0xfa, 0x66, 0x80, 0xdc, 0x30, 0x55, 0x52, 0x98, + 0xae, 0x4a, 0x5e, 0x60, 0xf1, 0x75, 0xac, 0x6a, 0x20, 0x40, 0x4b, 0x48, 0x36, 0x1f, 0xdb, 0x05, + 0xd4, 0x70, 0x95, 0x91, 0xb1, 0x23, 0x37, 0x2e, 0xe7, 0xa1, 0x19, 0xc6, 0xdb, 0x99, 0x72, 0x37, + 0xe2, 0x3e, 0x4f, 0x9a, 0x02, 0x9e, 0x1a, 0x15, 0x77, 0x34, 0x74, 0x10, 0x2e, 0x7c, 0x19, 0x22, + 0xdf, 0xc9, 0xe8, 0xbf, 0x55, 0xa1, 0xb9, 0x19, 0xf4, 0x4c, 0xd7, 0xfe, 0x54, 0xda, 0xb1, 0x1f, + 0xa9, 0x01, 0x58, 0x82, 0x06, 0x71, 0x7b, 0x8e, 0x1d, 0xee, 0xde, 0xc8, 0xec, 0x26, 0xa2, 0x44, + 0x63, 0x4f, 0x0c, 0x6a, 0x11, 0xaa, 0x52, 0x8b, 0xb0, 0x00, 0xb5, 0xbe, 0xb7, 0x6d, 0x3b, 0x49, + 0xdc, 0x73, 0x88, 0xc5, 0x3c, 0x71, 0x08, 0xeb, 0x15, 0xd2, 0x98, 0x4f, 0x10, 0x59, 0xdb, 0x30, + 0x55, 0xda, 0x36, 0xd4, 0xc5, 0xb6, 0x41, 0x36, 0x3c, 0x14, 0x0c, 0x8f, 0xe6, 0x6a, 0xa4, 0x75, + 0x68, 0xd8, 0x12, 0xff, 0x2b, 0x05, 0x9a, 0x99, 0x2b, 0xb0, 0xa7, 0x1e, 0x68, 0xca, 0x7c, 0x74, + 0xaa, 0x25, 0xd1, 0x99, 0xc6, 0x54, 0x45, 0x8c, 0x29, 0x1a, 0x85, 0x5e, 0x68, 0x0b, 0x1b, 0x9b, + 0x14, 0xa6, 0xb3, 0x39, 0xc4, 0x14, 0x0c, 0x89, 0x90, 0xb0, 0x8d, 0xad, 0x49, 0xdb, 0xd8, 0xfc, + 0x4a, 0xfd, 0x33, 0x05, 0x4e, 0xd2, 0x08, 0x28, 0xa8, 0xb1, 0x09, 0x4d, 0x2f, 0x17, 0x25, 0x7c, + 0x29, 0x7b, 0xb2, 0x64, 0x29, 0xca, 0x07, 0x94, 0x51, 0x20, 0xa6, 0x0c, 0xad, 0xdc, 0x24, 0x7c, + 0x6d, 0x2b, 0x63, 0x98, 0x97, 0xc7, 0x28, 0x10, 0xeb, 0xbf, 0x50, 0xa0, 0x89, 0x8b, 0xa7, 0x50, + 0x03, 0x8e, 0x5d, 0xec, 0xb7, 0xe0, 0x64, 0x7e, 0xe6, 0xeb, 0x76, 0x18, 0xb5, 0xd4, 0xa5, 0xca, + 0xb8, 0xa2, 0x97, 0x32, 0xd0, 0x7f, 0xa0, 0xc2, 0xa3, 0x5b, 0xb1, 0xe3, 0xb4, 0x49, 0x18, 0x9a, + 0x3d, 0xb2, 0x72, 0xd8, 0x21, 0xfb, 0xf4, 0x83, 0x41, 0xf6, 0x07, 0xc6, 0x10, 0xed, 0xa4, 0x58, + 0x2b, 0x62, 0x7b, 0x6e, 0x1a, 0x42, 0x22, 0x8a, 0xa6, 0x5c, 0x88, 0x7c, 0x5a, 0x95, 0xa5, 0x0a, + 0x5d, 0xa4, 0x39, 0xa8, 0x7d, 0x12, 0xa6, 0x59, 0x97, 0xc0, 0xa7, 0x69, 0x4d, 0x30, 0x05, 0x5e, + 0x2e, 0xed, 0x4b, 0x4a, 0xa5, 0xc2, 0x7e, 0x83, 0xc3, 0xaf, 0xba, 0x51, 0x70, 0x68, 0x48, 0x1c, + 0x17, 0xdf, 0x81, 0xf9, 0xc2, 0x10, 0xad, 0x09, 0x95, 0x3d, 0x72, 0xc8, 0xf5, 0xa0, 0x7f, 0x6a, + 0xff, 0x0f, 0xd5, 0x03, 0xba, 0x41, 0xe5, 0xde, 0x5f, 0x2c, 0x91, 0x80, 0xcb, 0x6c, 0xe0, 0xc0, + 0x17, 0xd5, 0x8f, 0x29, 0xfa, 0x93, 0xa9, 0x62, 0xa2, 0x8e, 0x8a, 0xa4, 0xa3, 0xfe, 0x3a, 0x34, + 0xda, 0x61, 0x6f, 0xcd, 0x8c, 0x4c, 0x36, 0xf0, 0x65, 0x68, 0xf4, 0x33, 0x90, 0x0d, 0x2e, 0x9f, + 0x8f, 0x13, 0x19, 0xe2, 0x70, 0xfd, 0x8f, 0x2a, 0xb4, 0xca, 0x4d, 0x11, 0xfa, 0x54, 0x06, 0x12, + 0x04, 0xab, 0x9e, 0x45, 0x98, 0x6a, 0x55, 0x23, 0x01, 0xa9, 0xef, 0x48, 0x10, 0xd0, 0xf5, 0x8d, + 0xb7, 0xf1, 0x08, 0x69, 0xcb, 0x30, 0xe1, 0x24, 0x6e, 0x19, 0x2e, 0x05, 0x1b, 0xa7, 0xf5, 0xa1, + 0xc9, 0xac, 0x2b, 0x28, 0xc4, 0x7d, 0x76, 0x65, 0x6c, 0x9f, 0x85, 0x3e, 0x3a, 0x4d, 0xe0, 0x81, + 0x8e, 0x2b, 0xb0, 0x5e, 0xec, 0xc2, 0xa9, 0xd2, 0xa1, 0x25, 0x0e, 0x7c, 0x56, 0x76, 0xe0, 0x99, + 0xc1, 0xaa, 0xe4, 0x9d, 0xe8, 0x83, 0xb6, 0x4e, 0xa2, 0xb6, 0x79, 0xf7, 0x8a, 0x6b, 0xb5, 0x6d, + 0xb7, 0x43, 0xf6, 0x69, 0xb4, 0x2f, 0x41, 0x83, 0x1f, 0x37, 0xa4, 0x6e, 0xaa, 0x1b, 0x22, 0x6a, + 0xe0, 0x29, 0x44, 0x2e, 0x1f, 0x2a, 0x85, 0x7c, 0xd0, 0x2f, 0xc3, 0xb4, 0x38, 0x1d, 0x5b, 0x60, + 0xcc, 0xbb, 0x1d, 0xb2, 0xcf, 0x14, 0x9a, 0x31, 0x38, 0xc4, 0xf0, 0x6c, 0x04, 0xdf, 0x7d, 0x70, + 0x48, 0xff, 0x9d, 0x0a, 0x27, 0x0a, 0x22, 0x87, 0xfe, 0xbd, 0xf2, 0x11, 0xe3, 0xa5, 0x32, 0x28, + 0x5e, 0x26, 0xa4, 0x78, 0xd9, 0x83, 0x79, 0x74, 0x92, 0x30, 0x75, 0xab, 0xca, 0x02, 0xe0, 0x95, + 0xb2, 0xcd, 0x40, 0x51, 0x48, 0xee, 0x7b, 0x01, 0x8b, 0xce, 0x2f, 0xf2, 0x5d, 0x24, 0xb0, 0x50, + 0x3e, 0xb8, 0xc4, 0xfd, 0xcf, 0xc9, 0xee, 0xff, 0xaf, 0x32, 0xf7, 0x8b, 0x92, 0x08, 0xfe, 0xdf, + 0x87, 0x39, 0x5a, 0x54, 0x3b, 0xc4, 0xb5, 0xda, 0x61, 0x8f, 0x19, 0x72, 0x09, 0x1a, 0x48, 0xdf, + 0x0e, 0x7b, 0xd9, 0xe6, 0x50, 0x40, 0xd1, 0x11, 0x5d, 0xc7, 0xa6, 0xc5, 0x93, 0x8d, 0xe0, 0x45, + 0x4f, 0x40, 0xd1, 0x05, 0x32, 0x24, 0xfc, 0x64, 0x86, 0x5a, 0xb7, 0x62, 0xa4, 0xb0, 0xfe, 0xd3, + 0x1a, 0x4c, 0xf2, 0x68, 0x64, 0x8b, 0x22, 0xdd, 0x8f, 0xa7, 0x65, 0x15, 0x21, 0xec, 0x79, 0xbb, + 0x07, 0x59, 0x78, 0x21, 0x24, 0x1e, 0x8b, 0x55, 0xe4, 0x63, 0xb1, 0x9c, 0x4c, 0x13, 0x45, 0x99, + 0x72, 0x7a, 0x55, 0x8b, 0x7a, 0xd1, 0x16, 0x8f, 0x75, 0x3d, 0x5b, 0x8e, 0x19, 0xed, 0x78, 0x41, + 0x9f, 0x6f, 0xaf, 0xab, 0x46, 0x01, 0x4f, 0xdb, 0x4a, 0xc4, 0xa5, 0xfb, 0x02, 0x5c, 0xc2, 0x73, + 0x58, 0xda, 0x85, 0x23, 0x26, 0xd9, 0x1f, 0xe0, 0xf9, 0x88, 0x8c, 0x44, 0xd9, 0xc2, 0xd0, 0xf6, + 0x5c, 0xd6, 0xa1, 0xe2, 0x36, 0x40, 0x44, 0x51, 0xcd, 0xfb, 0x61, 0xef, 0x6a, 0xe0, 0xf5, 0xf9, + 0xd6, 0x2b, 0x01, 0x99, 0xe6, 0x9e, 0x1b, 0x25, 0xdd, 0x2d, 0x9e, 0x8c, 0x88, 0x28, 0x4a, 0xcb, + 0x41, 0xd6, 0x30, 0x4d, 0x1b, 0x09, 0x48, 0x63, 0x29, 0x24, 0xfb, 0xbc, 0xb1, 0xa7, 0x7f, 0x4a, + 0x9e, 0x9b, 0x93, 0x3d, 0x97, 0xeb, 0xd4, 0x9a, 0xec, 0xab, 0xd8, 0xa9, 0x65, 0x2d, 0xce, 0xbc, + 0xd4, 0xe2, 0x5c, 0x81, 0x49, 0xcf, 0xa7, 0xe9, 0x1f, 0xb6, 0x34, 0x96, 0x2e, 0xff, 0x33, 0xb8, + 0x40, 0x2d, 0x6f, 0xe2, 0x48, 0x4c, 0x8c, 0x84, 0x4e, 0xbb, 0x0e, 0x73, 0xde, 0xce, 0x8e, 0x63, + 0xbb, 0x64, 0x2b, 0x0e, 0x77, 0xd9, 0x36, 0xfc, 0x04, 0x0b, 0x76, 0xbd, 0xac, 0x89, 0x90, 0x47, + 0x1a, 0x79, 0x52, 0xda, 0xf9, 0x99, 0x11, 0x6e, 0x80, 0x58, 0x81, 0x3b, 0xc9, 0x0a, 0x9c, 0x84, + 0x63, 0xe7, 0x8b, 0x42, 0xa1, 0x3f, 0xc5, 0x0c, 0x27, 0xa2, 0x90, 0x4b, 0x64, 0x76, 0x77, 0x09, + 0x3b, 0x50, 0x6a, 0x2d, 0x60, 0xff, 0x28, 0xe2, 0x78, 0x77, 0xf7, 0x68, 0xd2, 0xdd, 0x2d, 0xbe, + 0x08, 0xd3, 0xa2, 0x82, 0x25, 0xc9, 0x7c, 0x52, 0x4c, 0xe6, 0x29, 0x31, 0x57, 0xbf, 0xae, 0xc0, + 0x5c, 0x4e, 0x35, 0x3a, 0x3a, 0xb2, 0x23, 0x87, 0x70, 0x0e, 0x08, 0xd0, 0x9d, 0x93, 0x45, 0xc2, + 0x2e, 0x4f, 0x1e, 0xf6, 0x37, 0x97, 0xa4, 0x92, 0xb6, 0xd1, 0x3a, 0x4c, 0xdb, 0x9b, 0x1d, 0xca, + 0xa8, 0xe3, 0xc5, 0xae, 0x95, 0x1e, 0xd0, 0x0b, 0x38, 0xb6, 0xa5, 0xdf, 0xec, 0xac, 0x98, 0x56, + 0x8f, 0xe0, 0x75, 0x4d, 0x95, 0xc9, 0x24, 0x23, 0x75, 0x0b, 0xa6, 0x6e, 0xda, 0x7e, 0xb8, 0xea, + 0xf5, 0xfb, 0x34, 0x04, 0x2c, 0x12, 0xd1, 0x1e, 0x5f, 0x61, 0x06, 0xe3, 0x10, 0xb5, 0xa6, 0x45, + 0x76, 0xcc, 0xd8, 0x89, 0xe8, 0xd0, 0xa4, 0x64, 0x08, 0x28, 0x76, 0xbc, 0x10, 0x7a, 0xee, 0x1a, + 0x52, 0xa3, 0x9c, 0x02, 0x46, 0xff, 0x8d, 0x0a, 0x4d, 0x56, 0x11, 0x57, 0x59, 0xc0, 0x59, 0x8c, + 0xe8, 0x12, 0x54, 0x59, 0x01, 0xe0, 0x1d, 0xe5, 0xf0, 0x33, 0x19, 0x1c, 0xaa, 0x5d, 0x86, 0x9a, + 0xe7, 0xb3, 0x36, 0x14, 0xcb, 0xe5, 0xb9, 0x41, 0x44, 0xf2, 0x91, 0xbc, 0xc1, 0xa9, 0xb4, 0xab, + 0x00, 0xfd, 0xac, 0xeb, 0xc4, 0xe6, 0x61, 0x5c, 0x1e, 0x02, 0x25, 0x35, 0x6e, 0xba, 0x2e, 0xa6, + 0xe7, 0xf2, 0x15, 0x43, 0x46, 0x6a, 0x37, 0x60, 0x96, 0x89, 0xbd, 0x99, 0x1c, 0xce, 0x31, 0x1f, + 0x8c, 0x3f, 0x63, 0x8e, 0x5a, 0xff, 0x8e, 0xc2, 0xcd, 0x48, 0xbf, 0x76, 0x08, 0xda, 0x3e, 0x33, + 0x89, 0x72, 0x24, 0x93, 0x2c, 0xc2, 0x54, 0x3f, 0x16, 0xce, 0x0a, 0x2b, 0x46, 0x0a, 0x67, 0x2e, + 0xaa, 0x8c, 0xed, 0x22, 0xfd, 0xbb, 0x0a, 0xb4, 0x5e, 0xf3, 0x6c, 0x97, 0x7d, 0xb8, 0xe2, 0xfb, + 0x0e, 0xbf, 0xbe, 0x39, 0xb2, 0xcf, 0x3f, 0x0e, 0x75, 0x13, 0xd9, 0xb8, 0x11, 0x77, 0xfb, 0x18, + 0xe7, 0x7f, 0x19, 0x8d, 0x70, 0x08, 0x53, 0x11, 0x0f, 0x61, 0xf4, 0xf7, 0x15, 0x98, 0x45, 0xa3, + 0xbc, 0x11, 0xdb, 0xd1, 0x91, 0xe5, 0x5b, 0x81, 0xa9, 0xfd, 0xd8, 0x8e, 0x8e, 0x10, 0x95, 0x29, + 0x5d, 0x31, 0x9e, 0x2a, 0x25, 0xf1, 0xa4, 0xff, 0x50, 0x81, 0xd3, 0x79, 0xb3, 0x5e, 0xe9, 0x76, + 0x89, 0x7f, 0x3f, 0x53, 0x4a, 0x3a, 0x84, 0x9a, 0xc8, 0x1d, 0x42, 0x95, 0x8a, 0x6c, 0x90, 0xf7, + 0x48, 0xf7, 0xc1, 0x15, 0xf9, 0x73, 0x2a, 0x3c, 0xb6, 0x9e, 0x26, 0xde, 0xcd, 0xc0, 0x74, 0xc3, + 0x1d, 0x12, 0x04, 0xf7, 0x51, 0xde, 0xeb, 0x30, 0xe3, 0x92, 0x3b, 0x99, 0x4c, 0x3c, 0x1d, 0xc7, + 0x65, 0x23, 0x13, 0x8f, 0x57, 0xbb, 0xf4, 0x7f, 0x29, 0xd0, 0x44, 0x3e, 0xaf, 0xdb, 0xdd, 0xbd, + 0xfb, 0xa8, 0xfc, 0x0d, 0x98, 0xdd, 0x63, 0x12, 0x50, 0xe8, 0x08, 0x65, 0x3b, 0x47, 0x3d, 0xa6, + 0xfa, 0x1f, 0x28, 0x30, 0x9f, 0xdc, 0x1a, 0x1f, 0xd8, 0xf7, 0x33, 0x58, 0xb7, 0x60, 0x0e, 0x4f, + 0xe1, 0x8f, 0x6a, 0x80, 0x3c, 0xf9, 0x98, 0x16, 0xf8, 0x89, 0x02, 0x73, 0xc8, 0xe9, 0x55, 0x37, + 0x22, 0xc1, 0x91, 0xf5, 0xbf, 0x06, 0x0d, 0xe2, 0x46, 0x81, 0xe9, 0x1e, 0xa5, 0x42, 0x8a, 0xa4, + 0x63, 0x16, 0xc9, 0xf7, 0x15, 0xd0, 0x18, 0xab, 0x35, 0x3b, 0xec, 0xdb, 0x61, 0x78, 0x1f, 0x5d, + 0x37, 0x9e, 0xc0, 0xdf, 0x52, 0xe1, 0xa4, 0xc0, 0xa5, 0x1d, 0x47, 0x0f, 0xba, 0xc8, 0xda, 0x1a, + 0xd4, 0x69, 0x8f, 0x20, 0xde, 0x91, 0x8e, 0x3b, 0x51, 0x46, 0x48, 0xbb, 0x58, 0x06, 0x74, 0x48, + 0xd7, 0x73, 0xad, 0x90, 0x35, 0x47, 0x33, 0x86, 0x84, 0xa3, 0x65, 0x68, 0x51, 0x60, 0xb3, 0x6a, + 0xba, 0x5d, 0xe2, 0x3c, 0x34, 0x26, 0xd2, 0xbf, 0xaf, 0xc0, 0x2c, 0x0e, 0x79, 0xf0, 0x55, 0xa6, + 0x6b, 0x3d, 0x06, 0xf2, 0x47, 0xc6, 0x4b, 0x34, 0xbc, 0x16, 0x04, 0x2e, 0x62, 0x5f, 0xfd, 0xe0, 0x86, 0xd6, 0x35, 0x68, 0x74, 0x77, 0x4d, 0xb7, 0x77, 0xa4, 0xe0, 0x12, 0x49, 0xf5, 0x08, 0x1e, - 0x15, 0x0f, 0xed, 0x57, 0xf1, 0x13, 0x53, 0xff, 0x99, 0x9c, 0x2a, 0x43, 0xdf, 0x39, 0xdc, 0x9b, - 0xd1, 0xf7, 0x60, 0x1e, 0x6f, 0x8a, 0x85, 0x9e, 0x50, 0x6b, 0xc1, 0xa4, 0x69, 0xe1, 0xd1, 0x85, - 0xc2, 0x88, 0x12, 0x50, 0x7e, 0x49, 0xc0, 0xdf, 0xa5, 0x65, 0x2f, 0x09, 0xce, 0x00, 0x98, 0x96, + 0x15, 0x0f, 0xed, 0x57, 0xf1, 0x13, 0x53, 0xff, 0x99, 0x9c, 0x2a, 0x43, 0xdf, 0x40, 0xdc, 0x9b, + 0xd1, 0xf7, 0x60, 0x1e, 0x6f, 0x91, 0x85, 0x9e, 0x50, 0x6b, 0xc1, 0xa4, 0x69, 0xe1, 0xd1, 0x85, + 0xc2, 0x88, 0x12, 0x50, 0x7e, 0x65, 0xc0, 0xdf, 0xb3, 0x65, 0xaf, 0x0c, 0xce, 0x00, 0x98, 0x96, 0xf5, 0x96, 0x17, 0x58, 0xb6, 0x9b, 0x34, 0xf8, 0x02, 0x46, 0x7f, 0x0d, 0xa6, 0xaf, 0x06, 0x5e, - 0xff, 0xa6, 0x70, 0xe7, 0x3b, 0xf4, 0x56, 0x5a, 0xbc, 0x2f, 0x56, 0xe5, 0xfb, 0x62, 0xfd, 0x5d, - 0x38, 0x55, 0x10, 0x9c, 0x19, 0x6b, 0x15, 0xaf, 0xb2, 0x93, 0x49, 0x78, 0xc8, 0x94, 0x9d, 0xe5, - 0x89, 0xb2, 0x18, 0x12, 0x91, 0xfe, 0x45, 0x05, 0x9e, 0x28, 0xb0, 0xbf, 0xe2, 0xfb, 0x81, 0x77, + 0xff, 0xa6, 0x70, 0x1f, 0x3c, 0xf4, 0xc6, 0x5a, 0xbc, 0x4b, 0x56, 0xe5, 0xbb, 0x64, 0xfd, 0x5d, + 0x38, 0x55, 0x10, 0x9c, 0x19, 0x6b, 0x15, 0xaf, 0xb9, 0x93, 0x49, 0x78, 0xc8, 0x94, 0x9d, 0xe5, + 0x89, 0xb2, 0x18, 0x12, 0x91, 0xfe, 0x59, 0x05, 0x9e, 0x28, 0xb0, 0xbf, 0xe2, 0xfb, 0x81, 0x77, 0xc0, 0x7d, 0x72, 0x1c, 0xd3, 0xc8, 0xcd, 0xaf, 0x9a, 0x6f, 0x7e, 0x4b, 0x85, 0x90, 0x1a, 0xf6, - 0x8f, 0x40, 0x88, 0x1f, 0x29, 0x30, 0xc7, 0x85, 0xb0, 0x2c, 0x3e, 0xed, 0x73, 0x50, 0xc3, 0xc7, - 0x34, 0x7c, 0xc2, 0x27, 0x4a, 0x27, 0x4c, 0x1e, 0x01, 0x19, 0x7c, 0x70, 0x31, 0x22, 0xd5, 0xb2, - 0x8c, 0x7a, 0x21, 0x0d, 0xf6, 0xb1, 0x9f, 0xbb, 0x70, 0x02, 0xfd, 0x33, 0x49, 0x30, 0xaf, 0x11, - 0x87, 0x1c, 0xa7, 0x8d, 0xf4, 0x5b, 0x30, 0xcb, 0x5e, 0xf6, 0x64, 0x36, 0x38, 0x16, 0xb6, 0x6f, - 0x41, 0x93, 0xb1, 0x3d, 0x76, 0x79, 0xd3, 0xec, 0xa0, 0xf6, 0x11, 0x97, 0x92, 0x63, 0xe1, 0xfe, - 0x34, 0x9c, 0x48, 0x6c, 0x8f, 0x2f, 0x62, 0x91, 0xf7, 0x80, 0xbb, 0x3d, 0xfd, 0x3b, 0x0a, 0x2c, - 0xac, 0x7a, 0xee, 0x01, 0x09, 0x42, 0xe9, 0x15, 0x2d, 0x92, 0x48, 0xd9, 0xcf, 0x21, 0x6d, 0x19, - 0xb4, 0xae, 0x40, 0xc1, 0x8f, 0x17, 0x55, 0x76, 0xbc, 0x58, 0xf2, 0x45, 0x7b, 0x16, 0x4e, 0xc5, - 0x8c, 0xeb, 0x2d, 0x37, 0x20, 0xa6, 0xc5, 0xce, 0xd3, 0x84, 0x45, 0xaf, 0xfc, 0xa3, 0xfe, 0x1e, - 0x2c, 0x8a, 0x72, 0x75, 0x48, 0xb4, 0x15, 0xd8, 0x07, 0x82, 0x6c, 0xfc, 0xec, 0x5c, 0x91, 0xce, - 0xce, 0xb3, 0xb3, 0x76, 0x55, 0x3a, 0x6b, 0x3f, 0x0d, 0x75, 0x3b, 0xe4, 0x0c, 0xd8, 0xbc, 0x53, - 0x46, 0x86, 0xd0, 0x4d, 0x98, 0x47, 0x2f, 0xf3, 0xbb, 0x2c, 0x36, 0xc5, 0x22, 0x4c, 0x61, 0xe8, - 0xa6, 0x93, 0xa4, 0xf0, 0xc0, 0x9b, 0xa1, 0x81, 0xf7, 0xa0, 0x7a, 0x07, 0xe6, 0xf9, 0x7b, 0x9f, - 0x2d, 0xb3, 0x67, 0xbb, 0xb8, 0x96, 0x9f, 0x01, 0xf0, 0xcd, 0x5e, 0xf2, 0xc2, 0x10, 0x6f, 0xf4, - 0x04, 0x0c, 0xfd, 0x1e, 0xee, 0x7a, 0x77, 0xf8, 0x77, 0x15, 0xbf, 0x67, 0x18, 0xfd, 0x4d, 0xd0, - 0x0c, 0x12, 0xfa, 0x9e, 0x1b, 0x12, 0x81, 0xeb, 0x12, 0x34, 0x56, 0xe3, 0x20, 0x20, 0x2e, 0x9d, - 0x2a, 0x79, 0x42, 0x27, 0xa2, 0x28, 0xdf, 0x4e, 0xc6, 0x17, 0x4f, 0xff, 0x05, 0x8c, 0xfe, 0xb7, - 0x1a, 0xd4, 0x3b, 0x76, 0xcf, 0x35, 0x1d, 0x83, 0xec, 0x6b, 0x2f, 0x43, 0x0d, 0x77, 0x46, 0x3c, - 0x20, 0xcb, 0x4e, 0xa3, 0x71, 0x34, 0x6e, 0x01, 0x0d, 0xb2, 0x7f, 0xed, 0x11, 0x83, 0xd3, 0x68, - 0x6f, 0x24, 0xaf, 0xa2, 0x36, 0xf0, 0xa4, 0x8b, 0x97, 0xc9, 0xff, 0x1f, 0xc1, 0x84, 0x8f, 0x46, - 0x5e, 0x32, 0x07, 0x2a, 0x50, 0x97, 0x75, 0x4e, 0x7c, 0x15, 0x1a, 0x2c, 0x10, 0x36, 0x58, 0x5c, - 0x20, 0xa4, 0xa1, 0xd4, 0x26, 0x3b, 0x0b, 0xe2, 0x0d, 0xc1, 0x60, 0x6a, 0x3c, 0x32, 0xe2, 0xd4, - 0x48, 0x43, 0xa9, 0x77, 0x63, 0xb7, 0x77, 0xcb, 0xe7, 0x47, 0x94, 0x83, 0xa9, 0xaf, 0xb1, 0x61, - 0x9c, 0x1a, 0x69, 0x28, 0x75, 0xc0, 0x6a, 0x04, 0x33, 0xfa, 0x30, 0x6a, 0x2c, 0x25, 0x9c, 0x1a, - 0x69, 0xb4, 0xb7, 0xa1, 0xd9, 0x23, 0x91, 0xe1, 0x79, 0xfd, 0x95, 0xc3, 0x75, 0x7e, 0x43, 0x84, - 0x0f, 0xbd, 0x2f, 0x0c, 0xe4, 0xb3, 0x9e, 0x23, 0x40, 0x8e, 0x05, 0x3e, 0xda, 0xe7, 0xe1, 0x09, - 0xcf, 0xa5, 0xa8, 0x2d, 0x33, 0x88, 0xec, 0xae, 0xed, 0x9b, 0x6e, 0xb4, 0xea, 0xb9, 0x2e, 0xab, - 0x67, 0x06, 0xd9, 0xe7, 0x4f, 0xc1, 0x9f, 0x1f, 0x38, 0xd1, 0xe6, 0x30, 0xea, 0x6b, 0x8f, 0x18, - 0xc3, 0xd9, 0x6b, 0x5f, 0x55, 0x60, 0xa9, 0x30, 0x62, 0xcd, 0x0e, 0xbb, 0xa2, 0x0c, 0xf8, 0x8c, + 0x0f, 0x41, 0x88, 0xef, 0x29, 0x30, 0xc7, 0x85, 0xb0, 0x2c, 0x3e, 0xed, 0x73, 0x50, 0xc3, 0x87, + 0x36, 0x7c, 0xc2, 0x27, 0x4a, 0x27, 0x4c, 0x1e, 0x08, 0x19, 0x7c, 0x70, 0x31, 0x22, 0xd5, 0xb2, + 0x8c, 0x7a, 0x21, 0x0d, 0xf6, 0xb1, 0x9f, 0xc2, 0x70, 0x02, 0xfd, 0x13, 0x49, 0x30, 0xaf, 0x11, + 0x87, 0x1c, 0xa7, 0x8d, 0xf4, 0x5b, 0x30, 0xcb, 0x5e, 0xfd, 0x64, 0x36, 0x38, 0x16, 0xb6, 0x6f, + 0x41, 0x93, 0xb1, 0x3d, 0x76, 0x79, 0xd3, 0xec, 0xa0, 0xf6, 0x11, 0x4b, 0xc9, 0xb1, 0x70, 0x7f, + 0x1a, 0x4e, 0x24, 0xb6, 0xc7, 0x97, 0xb4, 0xc8, 0x7b, 0xc0, 0xdd, 0x9e, 0xfe, 0x0d, 0x05, 0x16, + 0x56, 0x3d, 0xf7, 0x80, 0x04, 0xa1, 0xf4, 0xfa, 0x16, 0x49, 0xa4, 0xec, 0xe7, 0x90, 0xb6, 0x0c, + 0x5a, 0x57, 0xa0, 0xe0, 0xc7, 0x8b, 0x2a, 0x3b, 0x5e, 0x2c, 0xf9, 0xa2, 0x3d, 0x0b, 0xa7, 0x62, + 0xc6, 0xf5, 0x96, 0x1b, 0x10, 0xd3, 0x62, 0xe7, 0x69, 0x42, 0xd1, 0x2b, 0xff, 0xa8, 0xbf, 0x07, + 0x8b, 0xa2, 0x5c, 0x1d, 0x12, 0x6d, 0x05, 0xf6, 0x81, 0x20, 0x1b, 0x3f, 0x3b, 0x57, 0xa4, 0xb3, + 0xf3, 0xec, 0xac, 0x5d, 0x95, 0xce, 0xda, 0x4f, 0x43, 0xdd, 0x0e, 0x39, 0x03, 0x36, 0xef, 0x94, + 0x91, 0x21, 0x74, 0x13, 0xe6, 0xd1, 0xcb, 0xfc, 0x2e, 0x8b, 0x4d, 0xb1, 0x08, 0x53, 0x18, 0xba, + 0xe9, 0x24, 0x29, 0x3c, 0xf0, 0x66, 0x68, 0xe0, 0x3d, 0xa8, 0xde, 0x81, 0x79, 0xfe, 0x16, 0x68, + 0xcb, 0xec, 0xd9, 0x2e, 0xd6, 0xf2, 0x33, 0x00, 0xbe, 0xd9, 0x4b, 0x5e, 0x26, 0xe2, 0x8d, 0x9e, + 0x80, 0xa1, 0xdf, 0xc3, 0x5d, 0xef, 0x0e, 0xff, 0xae, 0xe2, 0xf7, 0x0c, 0xa3, 0xbf, 0x09, 0x9a, + 0x41, 0x42, 0xdf, 0x73, 0x43, 0x22, 0x70, 0x5d, 0x82, 0xc6, 0x6a, 0x1c, 0x04, 0xc4, 0xa5, 0x53, + 0x25, 0xcf, 0xeb, 0x44, 0x14, 0xe5, 0xdb, 0xc9, 0xf8, 0xe2, 0xe9, 0xbf, 0x80, 0xd1, 0xff, 0x5a, + 0x83, 0x7a, 0xc7, 0xee, 0xb9, 0xa6, 0x63, 0x90, 0x7d, 0xed, 0x65, 0xa8, 0xe1, 0xce, 0x88, 0x07, + 0x64, 0xd9, 0x69, 0x34, 0x8e, 0xc6, 0x2d, 0xa0, 0x41, 0xf6, 0xaf, 0x3d, 0x62, 0x70, 0x1a, 0xed, + 0x8d, 0xe4, 0xc5, 0xd4, 0x06, 0x9e, 0x74, 0xf1, 0x65, 0xf2, 0x7f, 0x47, 0x30, 0xe1, 0xa3, 0x91, + 0x97, 0xcc, 0x81, 0x0a, 0xd4, 0x65, 0x9d, 0x13, 0xaf, 0x42, 0x83, 0x05, 0xc2, 0x06, 0x8b, 0x0b, + 0x84, 0x34, 0x94, 0xda, 0x64, 0x67, 0x41, 0xbc, 0x21, 0x18, 0x4c, 0x8d, 0x47, 0x46, 0x9c, 0x1a, + 0x69, 0x28, 0xf5, 0x6e, 0xec, 0xf6, 0x6e, 0xf9, 0xfc, 0x88, 0x72, 0x30, 0xf5, 0x35, 0x36, 0x8c, + 0x53, 0x23, 0x0d, 0xa5, 0x0e, 0xd8, 0x1a, 0xc1, 0x8c, 0x3e, 0x8c, 0x1a, 0x97, 0x12, 0x4e, 0x8d, + 0x34, 0xda, 0xdb, 0xd0, 0xec, 0x91, 0xc8, 0xf0, 0xbc, 0xfe, 0xca, 0xe1, 0x3a, 0xbf, 0x21, 0xc2, + 0x07, 0xe2, 0x17, 0x06, 0xf2, 0x59, 0xcf, 0x11, 0x20, 0xc7, 0x02, 0x1f, 0xed, 0xd3, 0xf0, 0x84, + 0xe7, 0x52, 0xd4, 0x96, 0x19, 0x44, 0x76, 0xd7, 0xf6, 0x4d, 0x37, 0x5a, 0xf5, 0x5c, 0x97, 0xad, + 0x67, 0x06, 0xd9, 0xe7, 0x4f, 0xc8, 0x9f, 0x1f, 0x38, 0xd1, 0xe6, 0x30, 0xea, 0x6b, 0x8f, 0x18, + 0xc3, 0xd9, 0x6b, 0x5f, 0x54, 0x60, 0xa9, 0x30, 0x62, 0xcd, 0x0e, 0xbb, 0xa2, 0x0c, 0xf8, 0xfc, 0xfc, 0x85, 0xf1, 0x65, 0xc8, 0x31, 0xb8, 0xf6, 0x88, 0x31, 0x72, 0x12, 0x6e, 0xe5, 0x9b, 0xde, 0x1e, 0x71, 0x57, 0x0e, 0xe9, 0xd8, 0x8d, 0x35, 0x76, 0x1b, 0x35, 0xc2, 0xca, 0x12, 0x41, 0x66, - 0x65, 0x09, 0xbd, 0x52, 0x87, 0x49, 0xdf, 0x3c, 0x74, 0x3c, 0xd3, 0xd2, 0xff, 0x31, 0x01, 0x90, + 0x65, 0x09, 0xbd, 0x52, 0x87, 0x49, 0xdf, 0x3c, 0x74, 0x3c, 0xd3, 0xd2, 0xff, 0x3e, 0x01, 0x90, 0xb8, 0x3a, 0x64, 0x1d, 0xb1, 0x94, 0x64, 0x67, 0x47, 0x26, 0x99, 0xef, 0x1c, 0x0a, 0x69, 0xd6, - 0x29, 0x4f, 0xb3, 0x4f, 0x8c, 0x9b, 0x66, 0xc8, 0x2d, 0x97, 0x68, 0x97, 0x73, 0x89, 0x76, 0x76, - 0x64, 0xa2, 0x71, 0xa1, 0x78, 0xaa, 0x5d, 0xce, 0xa5, 0xda, 0xd9, 0x91, 0xa9, 0xc6, 0xe9, 0x79, - 0xb2, 0x5d, 0xce, 0x25, 0xdb, 0xd9, 0x91, 0xc9, 0xc6, 0xe9, 0x79, 0xba, 0x5d, 0xce, 0xa5, 0xdb, - 0xd9, 0x91, 0xe9, 0xc6, 0xe9, 0x79, 0xc2, 0xbd, 0x3b, 0x30, 0xe1, 0x96, 0xef, 0x21, 0xe1, 0x90, - 0x67, 0x31, 0xe5, 0xde, 0x2d, 0x09, 0xb4, 0xa9, 0xd1, 0xdc, 0x73, 0x81, 0x96, 0x71, 0x1f, 0x18, - 0x6a, 0x5f, 0xae, 0xc0, 0x2c, 0x73, 0x37, 0x56, 0x65, 0x77, 0xc7, 0x2b, 0xbe, 0x55, 0x55, 0x4a, - 0xde, 0xaa, 0x6a, 0x17, 0x60, 0x1e, 0x11, 0x44, 0xb8, 0x47, 0xc4, 0x42, 0x5f, 0xfc, 0xc0, 0x6e, - 0x4e, 0xe3, 0x30, 0xf2, 0xfa, 0x6b, 0x66, 0x64, 0x26, 0x3b, 0x8c, 0x0c, 0x23, 0xde, 0x6b, 0x4f, - 0x14, 0x7e, 0xb6, 0x11, 0xa0, 0xfe, 0x55, 0x5e, 0xcd, 0x19, 0x44, 0x29, 0x22, 0xbb, 0x4f, 0xbc, - 0x38, 0xe2, 0x45, 0x2a, 0x01, 0xf1, 0x81, 0xa1, 0x65, 0x9b, 0xec, 0x36, 0x98, 0xbf, 0xbe, 0x4b, - 0x11, 0xac, 0xae, 0x66, 0xb7, 0xdb, 0xfc, 0x67, 0x15, 0x19, 0x66, 0x8c, 0x9b, 0x68, 0xf6, 0x0b, - 0x1d, 0x3b, 0xb2, 0xc5, 0x57, 0x79, 0x55, 0x43, 0xc2, 0xd1, 0x3e, 0x68, 0x3b, 0x0e, 0x0f, 0xaf, - 0xdb, 0xae, 0x68, 0x9e, 0x06, 0xf6, 0x41, 0xc5, 0x2f, 0xfa, 0xdf, 0x15, 0x38, 0x21, 0xac, 0x3b, - 0x6d, 0x12, 0x99, 0xcc, 0x2e, 0xd2, 0xdb, 0x6a, 0xe5, 0xde, 0xde, 0x56, 0x6f, 0xc1, 0x5c, 0x4f, - 0xde, 0x96, 0xdf, 0xe3, 0x8e, 0x3a, 0x4f, 0x2e, 0x3d, 0x14, 0xaf, 0xdc, 0xf3, 0x43, 0x71, 0xfd, - 0x6b, 0x2a, 0xcc, 0xe5, 0x9a, 0x81, 0xa1, 0x9d, 0xd4, 0x15, 0x00, 0x3b, 0x0d, 0xcd, 0x21, 0xb7, - 0x56, 0x72, 0xfc, 0x1a, 0x02, 0x51, 0xd9, 0xb5, 0x79, 0xe5, 0xe8, 0xd7, 0xe6, 0xd7, 0xa0, 0xe1, - 0x67, 0x4e, 0x1a, 0x72, 0x68, 0x50, 0xe2, 0x4a, 0x43, 0x24, 0xd5, 0xbf, 0xae, 0xc0, 0x7c, 0x61, - 0xc9, 0x66, 0x97, 0xd9, 0x34, 0x51, 0xd3, 0xcb, 0x6c, 0x0a, 0x08, 0x19, 0xa0, 0xe6, 0x33, 0xc0, - 0xb1, 0x0f, 0xc4, 0x9f, 0xad, 0x70, 0x70, 0x40, 0xf4, 0x4d, 0x0c, 0x8c, 0xbe, 0x6f, 0xa8, 0xb0, - 0x50, 0xde, 0x60, 0x3d, 0xac, 0xfe, 0xf9, 0xa6, 0x02, 0xad, 0x41, 0xb5, 0xf0, 0xbe, 0xb9, 0x29, - 0xcb, 0x9f, 0xb4, 0x77, 0x7d, 0x58, 0xfd, 0x73, 0x22, 0x49, 0x1f, 0xa1, 0xb9, 0xd0, 0x7f, 0x9e, - 0xda, 0x27, 0xed, 0xce, 0x1f, 0x52, 0xfb, 0x68, 0xe7, 0xa1, 0x89, 0x6a, 0x0a, 0x2f, 0xb9, 0x70, - 0xb3, 0x57, 0xc0, 0xeb, 0xef, 0x24, 0xb6, 0x14, 0x1a, 0xad, 0xe3, 0x8a, 0x71, 0xfd, 0xb7, 0x4a, - 0xe2, 0x93, 0x74, 0xcf, 0xf3, 0xb1, 0xf2, 0x49, 0x16, 0x69, 0x42, 0x1b, 0x29, 0x44, 0x5a, 0xba, - 0x17, 0xfb, 0x6f, 0xa4, 0x8d, 0x8e, 0xb4, 0xd4, 0x96, 0x42, 0x4b, 0xad, 0x7f, 0x5f, 0x81, 0xc7, - 0x06, 0xee, 0x47, 0x87, 0x5a, 0x55, 0x68, 0x1a, 0x55, 0xb9, 0x69, 0xcc, 0xa9, 0x57, 0x39, 0xfa, - 0x42, 0xf3, 0x81, 0x02, 0x8f, 0x0f, 0x69, 0xde, 0x73, 0x9e, 0x55, 0x8e, 0xe2, 0xd9, 0x9c, 0xb0, - 0xea, 0xc0, 0x8b, 0xe9, 0x91, 0xbe, 0xc8, 0xd2, 0xb3, 0x22, 0xa6, 0xa7, 0xfe, 0x47, 0x05, 0x9e, - 0x1c, 0x63, 0x27, 0xfe, 0x60, 0x29, 0x33, 0xf0, 0xa9, 0xab, 0xfe, 0x27, 0x05, 0xce, 0x8d, 0xb7, - 0xa9, 0xff, 0xb8, 0x68, 0xf4, 0x6b, 0x31, 0x07, 0xf2, 0xa7, 0x05, 0x82, 0x5b, 0x15, 0x69, 0xd5, - 0x15, 0x73, 0x43, 0xcd, 0xe5, 0xc6, 0xb1, 0x65, 0x40, 0xfe, 0x45, 0xfb, 0x44, 0xf1, 0x45, 0x7b, - 0x5b, 0x48, 0x91, 0xe2, 0x0e, 0x74, 0x40, 0x29, 0x11, 0x4a, 0x86, 0x2a, 0x97, 0x8c, 0x2f, 0xc0, - 0xcc, 0x1a, 0x71, 0xda, 0x61, 0x2f, 0xf9, 0xed, 0xc9, 0xb1, 0x9e, 0xb6, 0x8e, 0xa1, 0xcf, 0x0a, - 0xcc, 0x8a, 0x02, 0x1c, 0xe5, 0xb7, 0x15, 0x2b, 0x17, 0xde, 0x3e, 0xbf, 0xe9, 0x13, 0xf7, 0xf6, - 0x46, 0xbb, 0xf0, 0x3f, 0x4c, 0x5e, 0x2a, 0x38, 0x61, 0xbb, 0xc6, 0xbe, 0x3f, 0xf3, 0x9f, 0x00, - 0x00, 0x00, 0xff, 0xff, 0xc4, 0x78, 0x1e, 0x6c, 0x23, 0x45, 0x00, 0x00, + 0x29, 0x4f, 0xb3, 0xff, 0x1b, 0x37, 0xcd, 0x90, 0x5b, 0x2e, 0xd1, 0x2e, 0xe7, 0x12, 0xed, 0xec, + 0xc8, 0x44, 0xe3, 0x42, 0xf1, 0x54, 0xbb, 0x9c, 0x4b, 0xb5, 0xb3, 0x23, 0x53, 0x8d, 0xd3, 0xf3, + 0x64, 0xbb, 0x9c, 0x4b, 0xb6, 0xb3, 0x23, 0x93, 0x8d, 0xd3, 0xf3, 0x74, 0xbb, 0x9c, 0x4b, 0xb7, + 0xb3, 0x23, 0xd3, 0x8d, 0xd3, 0xf3, 0x84, 0x7b, 0x77, 0x60, 0xc2, 0x2d, 0xdf, 0x43, 0xc2, 0x21, + 0xcf, 0x62, 0xca, 0xbd, 0x5b, 0x12, 0x68, 0x53, 0xa3, 0xb9, 0xe7, 0x02, 0x2d, 0xe3, 0x3e, 0x30, + 0xd4, 0x3e, 0x5f, 0x81, 0x59, 0xe6, 0x6e, 0x5c, 0x95, 0xdd, 0x1d, 0xaf, 0xf8, 0x8e, 0x55, 0x29, + 0x79, 0xc7, 0xaa, 0x5d, 0x80, 0x79, 0x44, 0x10, 0xe1, 0x1e, 0x11, 0x17, 0xfa, 0xe2, 0x07, 0x76, + 0x73, 0x1a, 0x87, 0x91, 0xd7, 0x5f, 0x33, 0x23, 0x33, 0xd9, 0x61, 0x64, 0x18, 0xf1, 0x5e, 0x7b, + 0xa2, 0xf0, 0x73, 0x8f, 0x00, 0xf5, 0xaf, 0xf2, 0xd5, 0x9c, 0x41, 0x94, 0x22, 0xb2, 0xfb, 0xc4, + 0x8b, 0x23, 0xbe, 0x48, 0x25, 0x20, 0x3e, 0x3e, 0xb4, 0x6c, 0x93, 0xdd, 0x06, 0xf3, 0x97, 0x79, + 0x29, 0x82, 0xad, 0xab, 0xd9, 0xed, 0x36, 0xff, 0x39, 0x46, 0x86, 0x19, 0xe3, 0x26, 0x9a, 0xfd, + 0xb2, 0xc7, 0x8e, 0x6c, 0xf1, 0xc5, 0x5e, 0xd5, 0x90, 0x70, 0xb4, 0x0f, 0xda, 0x8e, 0xc3, 0xc3, + 0xeb, 0xb6, 0x2b, 0x9a, 0xa7, 0x81, 0x7d, 0x50, 0xf1, 0x8b, 0xfe, 0x37, 0x05, 0x4e, 0x08, 0x75, + 0xa7, 0x4d, 0x22, 0x93, 0xd9, 0x45, 0x7a, 0x77, 0xad, 0xdc, 0xdb, 0xbb, 0xeb, 0x2d, 0x98, 0xeb, + 0xc9, 0xdb, 0xf2, 0x7b, 0xdc, 0x51, 0xe7, 0xc9, 0xa5, 0x47, 0xe4, 0x95, 0x7b, 0x7e, 0x44, 0xae, + 0x7f, 0x49, 0x85, 0xb9, 0x5c, 0x33, 0x30, 0xb4, 0x93, 0xba, 0x02, 0x60, 0xa7, 0xa1, 0x39, 0xe4, + 0xd6, 0x4a, 0x8e, 0x5f, 0x43, 0x20, 0x2a, 0xbb, 0x36, 0xaf, 0x1c, 0xfd, 0xda, 0xfc, 0x1a, 0x34, + 0xfc, 0xcc, 0x49, 0x43, 0x0e, 0x0d, 0x4a, 0x5c, 0x69, 0x88, 0xa4, 0xfa, 0x97, 0x15, 0x98, 0x2f, + 0x94, 0x6c, 0x76, 0x99, 0x4d, 0x13, 0x35, 0xbd, 0xcc, 0xa6, 0x80, 0x90, 0x01, 0x6a, 0x3e, 0x03, + 0x1c, 0xfb, 0x40, 0xfc, 0xb9, 0x0b, 0x07, 0x07, 0x44, 0xdf, 0xc4, 0xc0, 0xe8, 0xfb, 0x8a, 0x0a, + 0x0b, 0xe5, 0x0d, 0xd6, 0xc3, 0xea, 0x9f, 0xaf, 0x2a, 0xd0, 0x1a, 0xb4, 0x16, 0xde, 0x37, 0x37, + 0x65, 0xf9, 0x93, 0xf6, 0xae, 0x0f, 0xab, 0x7f, 0x4e, 0x24, 0xe9, 0x23, 0x34, 0x17, 0xfa, 0x8f, + 0x53, 0xfb, 0xa4, 0xdd, 0xf9, 0x43, 0x6a, 0x1f, 0xed, 0x3c, 0x34, 0x51, 0x4d, 0xe1, 0x25, 0x17, + 0x6e, 0xf6, 0x0a, 0x78, 0xfd, 0x9d, 0xc4, 0x96, 0x42, 0xa3, 0x75, 0x5c, 0x31, 0xae, 0xff, 0x52, + 0x49, 0x7c, 0x92, 0xee, 0x79, 0x3e, 0x52, 0x3e, 0xc9, 0x22, 0x4d, 0x68, 0x23, 0x85, 0x48, 0x4b, + 0xf7, 0x62, 0xff, 0x89, 0xb4, 0xd1, 0x91, 0x96, 0xda, 0x52, 0x68, 0xa9, 0xf5, 0x6f, 0x2b, 0xf0, + 0xd8, 0xc0, 0xfd, 0xe8, 0x50, 0xab, 0x0a, 0x4d, 0xa3, 0x2a, 0x37, 0x8d, 0x39, 0xf5, 0x2a, 0x47, + 0x2f, 0x34, 0xbf, 0x56, 0xe0, 0xf1, 0x21, 0xcd, 0x7b, 0xce, 0xb3, 0xca, 0x51, 0x3c, 0x9b, 0x13, + 0x56, 0x1d, 0x78, 0x31, 0x3d, 0xd2, 0x17, 0x59, 0x7a, 0x56, 0xc4, 0xf4, 0xd4, 0x7f, 0xaf, 0xc0, + 0x93, 0x63, 0xec, 0xc4, 0x1f, 0x2c, 0x65, 0x06, 0x3e, 0x75, 0xd5, 0xff, 0xa0, 0xc0, 0xb9, 0xf1, + 0x36, 0xf5, 0x1f, 0x15, 0x8d, 0x7e, 0x2e, 0xe6, 0x40, 0xfe, 0xb4, 0x40, 0x70, 0xab, 0x22, 0x55, + 0x5d, 0x31, 0x37, 0xd4, 0x5c, 0x6e, 0x1c, 0x5b, 0x06, 0xe4, 0x5f, 0xb4, 0x4f, 0x14, 0x5f, 0xb4, + 0xb7, 0x85, 0x14, 0x29, 0xee, 0x40, 0x07, 0x2c, 0x25, 0xc2, 0x92, 0xa1, 0xca, 0x4b, 0xc6, 0x67, + 0x60, 0x66, 0x8d, 0x38, 0xed, 0xb0, 0x97, 0xfc, 0xf6, 0xe4, 0x58, 0x4f, 0x5b, 0xc7, 0xd0, 0x67, + 0x05, 0x66, 0x45, 0x01, 0x8e, 0xf2, 0xdb, 0x8a, 0x95, 0x0b, 0x6f, 0x9f, 0xdf, 0xf4, 0x89, 0x7b, + 0x7b, 0xa3, 0x5d, 0xf8, 0xdf, 0x27, 0x2f, 0x15, 0x9c, 0xb0, 0x5d, 0x63, 0xdf, 0x9f, 0xf9, 0x77, + 0x00, 0x00, 0x00, 0xff, 0xff, 0x1a, 0xb6, 0x74, 0x2a, 0x5b, 0x45, 0x00, 0x00, } diff --git a/pkg/proto/sdk_ws/ws.proto b/pkg/proto/sdk_ws/ws.proto index 76f133356..95d17fa6b 100644 --- a/pkg/proto/sdk_ws/ws.proto +++ b/pkg/proto/sdk_ws/ws.proto @@ -75,6 +75,7 @@ message UserInfo{ uint32 createTime = 9; int32 appMangerLevel = 10; int32 globalRecvMsgOpt = 11; + string birthStr = 12; } message FriendInfo{ @@ -157,6 +158,7 @@ message OrganizationUser { string email = 9; uint32 createTime = 10; string ex = 11; + string birthStr = 12; } message DepartmentMember { diff --git a/pkg/utils/time_format.go b/pkg/utils/time_format.go index c8f6e21fa..db1d3ac82 100644 --- a/pkg/utils/time_format.go +++ b/pkg/utils/time_format.go @@ -83,3 +83,7 @@ func TimeStringToTime(timeString string) (time.Time, error) { t, err := time.Parse("2006-01-02", timeString) return t, err } + +func TimeToString(t time.Time) string { + return t.Format("2006-01-02") +}