diff --git a/README.md b/README.md index 0d0871a..58c67d2 100644 --- a/README.md +++ b/README.md @@ -17,4 +17,7 @@ HUSKY=0 pnpm bootstrap pnpm dev +# tokenizer +docker build -t tokenizer:1.0.0 . + ``` \ No newline at end of file diff --git a/ai-chat-service/Dockerfile b/ai-chat-service/Dockerfile new file mode 100644 index 0000000..5bda655 --- /dev/null +++ b/ai-chat-service/Dockerfile @@ -0,0 +1,18 @@ +# 编译阶段 +FROM quay.io/0voice/golang:1.20 as stage0 +RUN go env -w GOPROXY=https://proxy.golang.com.cn,https://goproxy.cn,direct +ADD ./ /src/ai-chat-service +WORKDIR /src/ai-chat-service +RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o ai-chat-service ./chat-server + +FROM quay.io/0voice/alpine:3.18 as stage1 +ADD ./grpc_health_probe-linux-amd64 /usr/bin/grpc_health_probe +RUN chmod +x /usr/bin/grpc_health_probe +MAINTAINER nick +WORKDIR /app/ +ADD ./dev.config.yaml /app/config.yaml +COPY --from=stage0 /src/ai-chat-service/ai-chat-service ./ +# 指定入口程序 +ENTRYPOINT ["./ai-chat-service"] +# 指定容器的启动命令或者入口程序的参数 +CMD ["--config=config.yaml"] diff --git a/ai-chat-service/chat-server/chat-context/chat_context.go b/ai-chat-service/chat-server/chat-context/chat_context.go new file mode 100644 index 0000000..8b47270 --- /dev/null +++ b/ai-chat-service/chat-server/chat-context/chat_context.go @@ -0,0 +1,20 @@ +package chat_context + +import "github.com/sashabaranov/go-openai" + +type ChatMessage struct { + //当前记录ID + ID string `json:"id,omitempty"` + //上一条记录ID + PID string `json:"pid,omitempty"` + //消息内容 + Message openai.ChatCompletionMessage `json:"message"` + //该消息tokens数 + Tokens int `json:"tokens,omitempty"` +} + +type ContextCache interface { + Get(key string) (*ChatMessage, error) + Set(key string, value *ChatMessage, ttl int) error + Close() +} diff --git a/ai-chat-service/chat-server/chat-context/redis.go b/ai-chat-service/chat-server/chat-context/redis.go new file mode 100644 index 0000000..15afdcd --- /dev/null +++ b/ai-chat-service/chat-server/chat-context/redis.go @@ -0,0 +1,50 @@ +package chat_context + +import ( + predis "ai-chat-service/pkg/db/redis" + "context" + "encoding/json" + "github.com/redis/go-redis/v9" + "time" +) + +type redisCache struct { + redisClient *redis.Client +} + +func NewRedisCache() ContextCache { + pool := predis.GetPool() + return &redisCache{ + redisClient: pool.Get(), + } +} +func getRedisKey(key string) string { + return predis.GetKey(key) +} + +func (c *redisCache) Get(key string) (*ChatMessage, error) { + key = getRedisKey(key) + str, err := c.redisClient.Get(context.Background(), key).Result() + if err == redis.Nil { + return nil, nil + } + if err != nil { + return nil, err + } + value := &ChatMessage{} + err = json.Unmarshal([]byte(str), value) + return value, err +} +func (c *redisCache) Set(key string, value *ChatMessage, ttl int) error { + key = getRedisKey(key) + bytes, err := json.Marshal(value) + if err != nil { + return err + } + str := string(bytes) + return c.redisClient.SetEx(context.Background(), key, str, time.Duration(ttl)*time.Second).Err() +} +func (c *redisCache) Close() { + pool := predis.GetPool() + pool.Put(c.redisClient) +} diff --git a/ai-chat-service/chat-server/data/chat_records.go b/ai-chat-service/chat-server/data/chat_records.go new file mode 100644 index 0000000..70daa0a --- /dev/null +++ b/ai-chat-service/chat-server/data/chat_records.go @@ -0,0 +1,54 @@ +package data + +import ( + "database/sql" + "strings" +) + +type IChatRecordsData interface { + Add(record *ChatRecord) error + GetById(id int64) (record *ChatRecord, err error) +} + +type ChatRecord struct { + ID int64 `json:"id"` + UserMsg string `json:"user_msg"` + UserMsgTokens int `json:"user_msg_tokens"` + UserMsgKeywords []string `json:"user_msg_keywords"` + AIMsg string `json:"ai_msg"` + AIMsgTokens int `json:"ai_msg_tokens"` + ReqTokens int `json:"req_tokens"` + CreateAt int64 `json:"create_at"` +} + +type chatRecordsData struct { + db *sql.DB +} + +func NewChatRecordsData(db *sql.DB) IChatRecordsData { + return &chatRecordsData{ + db: db, + } +} + +func (data *chatRecordsData) Add(cr *ChatRecord) (err error) { + sqlStr := "insert into chat_records(user_msg,user_msg_tokens,user_msg_keywords,ai_msg,ai_msg_tokens,req_tokens,create_at)values(?,?,?,?,?,?,?)" + res, err := data.db.Exec(sqlStr, cr.UserMsg, cr.UserMsgTokens, strings.Join(cr.UserMsgKeywords, ","), cr.AIMsg, cr.AIMsgTokens, cr.ReqTokens, cr.CreateAt) + if err != nil { + return + } + cr.ID, _ = res.LastInsertId() + return +} +func (data *chatRecordsData) GetById(id int64) (cr *ChatRecord, err error) { + sqlStr := "select id,user_msg,user_msg_tokens,user_msg_keywords,ai_msg,ai_msg_tokens,req_tokens,create_at from chat_records where id = ?" + row := data.db.QueryRow(sqlStr, id) + cr = &ChatRecord{} + var keywords string + err = row.Scan(&cr.ID, &cr.UserMsg, &cr.UserMsgTokens, &keywords, &cr.AIMsg, &cr.AIMsgTokens, &cr.ReqTokens, &cr.CreateAt) + if err != nil { + return nil, err + } + cr.UserMsgKeywords = strings.Split(keywords, ",") + return cr, err +} diff --git a/ai-chat-service/chat-server/main.go b/ai-chat-service/chat-server/main.go new file mode 100644 index 0000000..6dcea98 --- /dev/null +++ b/ai-chat-service/chat-server/main.go @@ -0,0 +1,78 @@ +package main + +import ( + "ai-chat-service/chat-server/data" + metrics_app "ai-chat-service/chat-server/metrics-app" + metrics_bus "ai-chat-service/chat-server/metrics-bus" + "ai-chat-service/chat-server/server" + vector_data "ai-chat-service/chat-server/vector-data" + "ai-chat-service/interceptor" + "ai-chat-service/pkg/config" + "ai-chat-service/pkg/db/mysql" + "ai-chat-service/pkg/db/redis" + "ai-chat-service/pkg/db/vector" + "ai-chat-service/pkg/log" + "ai-chat-service/proto" + "flag" + "fmt" + "github.com/prometheus/client_golang/prometheus" + "github.com/prometheus/client_golang/prometheus/collectors" + "github.com/prometheus/client_golang/prometheus/promhttp" + "google.golang.org/grpc" + "google.golang.org/grpc/health" + "google.golang.org/grpc/health/grpc_health_v1" + "net/http" + + "net" +) + +var ( + configFile = flag.String("config", "dev.config.yaml", "") +) + +func main() { + flag.Parse() + registry := prometheus.NewRegistry() + registry.MustRegister(collectors.NewGoCollector(), collectors.NewProcessCollector(collectors.ProcessCollectorOpts{})) + busMetrics := metrics_bus.NewBusMetrics(registry) + + http.Handle("/metrics", promhttp.HandlerFor(registry, promhttp.HandlerOpts{})) + go http.ListenAndServe(":8080", nil) + + //初始化配置文件 + config.InitConfig(*configFile) + cnf := config.GetConfig() + //初始化日志 + log.SetLevel(cnf.Log.Level) + log.SetOutput(log.GetRotateWriter(cnf.Log.LogPath)) + log.SetPrintCaller(true) + + logger := log.NewLogger() + logger.SetLevel(cnf.Log.Level) + logger.SetOutput(log.GetRotateWriter(cnf.Log.LogPath)) + logger.SetPrintCaller(true) + + // 初始化Mysql + mysql.InitMysql(cnf) + // 初始化redis + redis.InitRedisPool(cnf) + // 初始化向量数据库 + vector.InitDB(cnf) + + recordsData := data.NewChatRecordsData(mysql.GetDB()) + + lis, err := net.Listen("tcp", fmt.Sprintf("%s:%d", cnf.Server.IP, cnf.Server.Port)) + if err != nil { + log.Fatal(err) + } + s := grpc.NewServer(grpc.UnaryInterceptor(interceptor.UnaryAuthInterceptor), grpc.StreamInterceptor(metrics_app.NewStreamMiddleware(registry).WrapHandler())) + service := server.NewChatService(recordsData, vector_data.NewChatRecordsData(cnf, vector.GetVdb()), cnf, logger, busMetrics) + proto.RegisterChatServer(s, service) + + healthCheckSrv := health.NewServer() + grpc_health_v1.RegisterHealthServer(s, healthCheckSrv) + + if err = s.Serve(lis); err != nil { + log.Fatal(err) + } +} diff --git a/ai-chat-service/chat-server/metrics-app/metrics_app.go b/ai-chat-service/chat-server/metrics-app/metrics_app.go new file mode 100644 index 0000000..c9671f8 --- /dev/null +++ b/ai-chat-service/chat-server/metrics-app/metrics_app.go @@ -0,0 +1,82 @@ +package metrics_app + +import ( + "github.com/prometheus/client_golang/prometheus" + "google.golang.org/grpc" + "runtime" + "time" +) + +type StreamMiddleware interface { + WrapHandler() grpc.StreamServerInterceptor +} +type streamMiddleware struct { + registry *prometheus.Registry + handlerCounter *prometheus.CounterVec + handlerDuration *prometheus.SummaryVec + handlerAtHour *prometheus.HistogramVec +} + +const ( + NAMESPACE = "ai_chat" + SUBSYSTEM = "chat_service" +) + +func NewStreamMiddleware(registry *prometheus.Registry) StreamMiddleware { + counter := prometheus.NewCounterVec(prometheus.CounterOpts{ + Namespace: NAMESPACE, + Subsystem: SUBSYSTEM, + Name: "requests_total", + ConstLabels: map[string]string{"app": "ai_chat"}, + Help: "用于累计请求次数", + }, []string{"full_method"}) + gauge := prometheus.NewGaugeFunc(prometheus.GaugeOpts{ + Namespace: NAMESPACE, + Subsystem: SUBSYSTEM, + Name: "curr_num_goroutine", + ConstLabels: map[string]string{"app": "ai_chat"}, + Help: "当前存在的goroutine数量", + }, func() float64 { + return float64(runtime.NumGoroutine()) + }) + histogram := prometheus.NewHistogramVec(prometheus.HistogramOpts{ + Namespace: NAMESPACE, + Subsystem: SUBSYSTEM, + Name: "request_hour", + ConstLabels: map[string]string{"app": "ai_chat"}, + Help: "http请求发生在一天之中的哪个小时", + Buckets: []float64{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23}, + }, []string{"full_method"}) + summary := prometheus.NewSummaryVec(prometheus.SummaryOpts{ + Namespace: NAMESPACE, + Subsystem: SUBSYSTEM, + Name: "request_duration_ms", + ConstLabels: map[string]string{"app": "ai_chat"}, + Help: "请求时长分布", + Objectives: map[float64]float64{0.1: 0.01, 0.5: 0.01, 0.9: 0.01, 0.99: 0.01}, + }, []string{"full_method"}) + registry.MustRegister(counter, gauge, histogram, summary) + return &streamMiddleware{ + registry: registry, + handlerCounter: counter, + handlerDuration: summary, + handlerAtHour: histogram, + } +} + +func (s *streamMiddleware) WrapHandler() grpc.StreamServerInterceptor { + return func(srv any, ss grpc.ServerStream, info *grpc.StreamServerInfo, handler grpc.StreamHandler) error { + label := map[string]string{ + "full_method": info.FullMethod, + } + s.handlerCounter.With(label).Inc() + hour := time.Now().Hour() + s.handlerAtHour.With(label).Observe(float64(hour)) + start := time.Now() + defer func() { + s.handlerDuration.With(label).Observe(float64(time.Since(start).Milliseconds())) + }() + err := handler(srv, ss) + return err + } +} diff --git a/ai-chat-service/chat-server/metrics-bus/metrics_bus.go b/ai-chat-service/chat-server/metrics-bus/metrics_bus.go new file mode 100644 index 0000000..711a899 --- /dev/null +++ b/ai-chat-service/chat-server/metrics-bus/metrics_bus.go @@ -0,0 +1,53 @@ +package metrics_bus + +import "github.com/prometheus/client_golang/prometheus" + +type BusMetrics struct { + QuestionsTotalCounter prometheus.Counter + KeywordsQuestionsTotalCounter prometheus.Counter + SensitiveQuestionsTotalCounter prometheus.Counter + ErrQuestionsTotalCounter prometheus.Counter +} + +const ( + NAMESPACE = "ai_chat" + SUBSYSTEM = "chat_service" +) + +func NewBusMetrics(registry *prometheus.Registry) *BusMetrics { + questionsTotalCounter := prometheus.NewCounter(prometheus.CounterOpts{ + Namespace: NAMESPACE, + Subsystem: SUBSYSTEM, + Name: "questions_total", + ConstLabels: map[string]string{"app": "ai_chat"}, + Help: "记录用户提交问题的总数,仅包含记录到DB的问题数量", + }) + keywordsQuestionsTotalCounter := prometheus.NewCounter(prometheus.CounterOpts{ + Namespace: NAMESPACE, + Subsystem: SUBSYSTEM, + Name: "keywords_questions_total", + ConstLabels: map[string]string{"app": "ai_chat"}, + Help: "记录用户提交的包含关键词的问题总数", + }) + sensitiveQuestionsTotalCounter := prometheus.NewCounter(prometheus.CounterOpts{ + Namespace: NAMESPACE, + Subsystem: SUBSYSTEM, + Name: "sensitive_questions_total", + ConstLabels: map[string]string{"app": "ai_chat"}, + Help: "记录用户提交的触发敏感词的问题总数", + }) + errQuestionsTotalCounter := prometheus.NewCounter(prometheus.CounterOpts{ + Namespace: NAMESPACE, + Subsystem: SUBSYSTEM, + Name: "err_questions_total", + ConstLabels: map[string]string{"app": "ai_chat"}, + Help: "记录用户提交问题时报错的总数", + }) + registry.MustRegister(questionsTotalCounter, keywordsQuestionsTotalCounter, sensitiveQuestionsTotalCounter, errQuestionsTotalCounter) + return &BusMetrics{ + QuestionsTotalCounter: questionsTotalCounter, + KeywordsQuestionsTotalCounter: keywordsQuestionsTotalCounter, + SensitiveQuestionsTotalCounter: sensitiveQuestionsTotalCounter, + ErrQuestionsTotalCounter: errQuestionsTotalCounter, + } +} diff --git a/ai-chat-service/chat-server/server/app.go b/ai-chat-service/chat-server/server/app.go new file mode 100644 index 0000000..81a9112 --- /dev/null +++ b/ai-chat-service/chat-server/server/app.go @@ -0,0 +1,293 @@ +package server + +import ( + chat_context "ai-chat-service/chat-server/chat-context" + "ai-chat-service/pkg/config" + "ai-chat-service/pkg/log" + "ai-chat-service/pkg/zerror" + "ai-chat-service/proto" + "ai-chat-service/services" + keywords_filter "ai-chat-service/services/keywords-filter" + keywords_proto "ai-chat-service/services/keywords-filter/proto" + "ai-chat-service/services/tokenizer" + "context" + "github.com/google/uuid" + "github.com/sashabaranov/go-openai" + "time" +) + +const ChatPrimedTokens = 2 + +type openaiConf struct { + ApiKey string + BaseUrl string + Model string + MaxTokens int + Temperature float32 + TopP float32 + PresencePenalty float32 + FrequencyPenalty float32 + BotDesc string + ContextTTL int + ContextLen int + MinResponseTokens int +} +type app struct { + openaiConf *openaiConf + log log.ILogger + // TODO 内容上下文对象 + contextCache chat_context.ContextCache +} + +func (s *chatService) newApp(in *proto.ChatCompletionRequest, contextCache chat_context.ContextCache) *app { + conf := &openaiConf{ + ApiKey: s.config.Chat.ApiKey, + BaseUrl: s.config.Chat.BaseUrl, + Model: s.config.Chat.Model, + MaxTokens: s.config.Chat.MaxTokens, + Temperature: s.config.Chat.Temperature, + TopP: s.config.Chat.TopP, + PresencePenalty: s.config.Chat.PresencePenalty, + FrequencyPenalty: s.config.Chat.FrequencyPenalty, + BotDesc: s.config.Chat.BotDesc, + ContextTTL: s.config.Chat.ContextTTL, + ContextLen: s.config.Chat.ContextLen, + MinResponseTokens: s.config.Chat.MinResponseTokens, + } + if in.ChatParam != nil { + if in.ChatParam.Model != "" { + conf.Model = in.ChatParam.Model + } + if in.ChatParam.TopP != 0 { + conf.TopP = in.ChatParam.TopP + } + if in.ChatParam.FrequencyPenalty != 0 { + conf.FrequencyPenalty = in.ChatParam.FrequencyPenalty + } + if in.ChatParam.PresencePenalty != 0 { + conf.PresencePenalty = in.ChatParam.PresencePenalty + } + if in.ChatParam.Temperature != 0 { + conf.Temperature = in.ChatParam.Temperature + } + if in.ChatParam.BotDesc != "" { + conf.BotDesc = in.ChatParam.BotDesc + } + if in.ChatParam.MaxTokens != 0 { + conf.MaxTokens = int(in.ChatParam.MaxTokens) + } + if in.ChatParam.ContextTTL != 0 { + conf.ContextTTL = int(in.ChatParam.ContextTTL) + } + if in.ChatParam.ContextLen != 0 { + conf.ContextLen = int(in.ChatParam.ContextLen) + } + if in.ChatParam.MinResponseTokens != 0 { + conf.MinResponseTokens = int(in.ChatParam.MinResponseTokens) + } + } + return &app{ + openaiConf: conf, + log: s.log, + contextCache: contextCache, + } +} +func (a *app) getOpenaiClient() *openai.Client { + accessToken := a.openaiConf.ApiKey + config := openai.DefaultConfig(accessToken) + config.BaseURL = a.openaiConf.BaseUrl + client := openai.NewClientWithConfig(config) + return client +} +func (a *app) buildChatCompletionRequest(in *proto.ChatCompletionRequest, stream bool) (req openai.ChatCompletionRequest, tokens, currTokens int, currMessage openai.ChatCompletionMessage, err error) { + //当前消息 + currMessage = openai.ChatCompletionMessage{ + Role: openai.ChatMessageRoleUser, + Content: in.Message, + } + req = openai.ChatCompletionRequest{ + Model: a.openaiConf.Model, + Messages: []openai.ChatCompletionMessage{ + currMessage, + }, + MaxTokens: a.openaiConf.MinResponseTokens, + Temperature: a.openaiConf.Temperature, + TopP: a.openaiConf.TopP, + PresencePenalty: a.openaiConf.PresencePenalty, + FrequencyPenalty: a.openaiConf.FrequencyPenalty, + Stream: stream, + } + contextList := make([]*chat_context.ChatMessage, 0) + if in.EnableContext { + //从缓存中获取上下文信息 + contextList = a.getContext(in.Pid) + } + //重构req.Messages + tokens, currTokens, req.Messages, err = a.rebuildMessages(contextList, currMessage) + if err != nil { + a.log.Error(err) + return + } + req.MaxTokens = a.openaiConf.MaxTokens - tokens + return +} +func (a *app) rebuildMessages(contextList []*chat_context.ChatMessage, currMessage openai.ChatCompletionMessage) (tokens, currTokens int, messages []openai.ChatCompletionMessage, err error) { + var sysMessage openai.ChatCompletionMessage + botTokens := 0 + if a.openaiConf.BotDesc != "" { + sysMessage = openai.ChatCompletionMessage{ + Role: openai.ChatMessageRoleSystem, + Content: a.openaiConf.BotDesc, + } + botTokens, err = tokenizer.GetTokens(&sysMessage, a.openaiConf.Model) + if err != nil { + a.log.Error(err) + return + } + } + messages = []openai.ChatCompletionMessage{currMessage} + currTokens, err = tokenizer.GetTokens(&currMessage, a.openaiConf.Model) + if err != nil { + a.log.Error(err) + return + } + if currTokens > a.openaiConf.MaxTokens-a.openaiConf.MinResponseTokens-botTokens-ChatPrimedTokens { + err = zerror.NewByMsg("请求消息超限") + a.log.Error(err) + return + } + tokens = currTokens + botTokens + ChatPrimedTokens + if contextList != nil { + for _, item := range contextList { + if tokens+item.Tokens+ChatPrimedTokens > a.openaiConf.MaxTokens-a.openaiConf.MinResponseTokens { + break + } + messages = append(messages, item.Message) + tokens += item.Tokens + ChatPrimedTokens + } + } + for i, j := 0, len(messages)-1; i < j; i, j = i+1, j-1 { + messages[i], messages[j] = messages[j], messages[i] + } + if botTokens > 0 { + messages = append([]openai.ChatCompletionMessage{sysMessage}, messages...) + } + return +} +func (a *app) buildChatCompletionResponse(msg string) *proto.ChatCompletionResponse { + res := &proto.ChatCompletionResponse{ + Id: uuid.New().String(), + Object: "chat.completion", + Created: time.Now().Unix(), + Model: a.openaiConf.Model, + Choices: []*proto.ChatCompletionChoice{ + { + Message: &proto.ChatCompletionMessage{ + Role: openai.ChatMessageRoleAssistant, + Content: msg, + }, + FinishReason: "stop", + }, + }, + Usage: &proto.Usage{ + PromptTokens: 0, + CompletionTokens: 0, + TotalTokens: 0, + }, + } + return res +} + +func (a *app) buildChatCompletionStreamResponse(id, delta, finishReason string) *proto.ChatCompletionStreamResponse { + res := &proto.ChatCompletionStreamResponse{ + Id: id, + Object: "chat.completion.chunk", + Created: time.Now().Unix(), + Model: a.openaiConf.Model, + Choices: []*proto.ChatCompletionStreamChoice{ + { + Index: 0, + Delta: &proto.ChatCompletionStreamChoiceDelta{ + Content: delta, + Role: openai.ChatMessageRoleAssistant, + }, + FinishReason: finishReason, + }, + }, + } + return res +} + +func (a *app) buildChatCompletionStreamResponseList(id, msg string) []*proto.ChatCompletionStreamResponse { + list := make([]*proto.ChatCompletionStreamResponse, 0) + for _, delta := range msg { + list = append(list, a.buildChatCompletionStreamResponse(id, string(delta), "")) + } + return list +} + +func (a *app) getContext(id string) []*chat_context.ChatMessage { + maxLen := a.openaiConf.ContextLen + list := make([]*chat_context.ChatMessage, 0, maxLen) + key := id + for i := 0; i < maxLen; i++ { + value, err := a.contextCache.Get(key) + if err != nil { + a.log.Error(err) + return nil + } + if value == nil { + break + } + list = append(list, value) + key = value.PID + } + return list +} +func (a *app) saveContext(value *chat_context.ChatMessage) error { + err := a.contextCache.Set(value.ID, value, a.openaiConf.ContextTTL) + if err != nil { + a.log.Error(err) + return err + } + return nil +} +func (a *app) keywords(in *proto.ChatCompletionRequest) []string { + pool := keywords_filter.GetKeywordsClientPool() + conn := pool.Get() + defer pool.Put(conn) + accessToken := config.GetConfig().DependOn.Keywords.AccessToken + client := keywords_proto.NewFilterClient(conn) + ctx := services.AppendBearerTokenToContext(context.Background(), accessToken) + req := &keywords_proto.FilterReq{ + Text: in.Message, + } + res, err := client.FindAll(ctx, req) + if err != nil { + a.log.Error(err) + return []string{} + } + return res.Keywords + +} +func (a *app) sensitive(in *proto.ChatCompletionRequest) (ok bool, msg string, err error) { + pool := keywords_filter.GetSensitiveClientPool() + conn := pool.Get() + defer pool.Put(conn) + accessToken := config.GetConfig().DependOn.Sensitive.AccessToken + client := keywords_proto.NewFilterClient(conn) + ctx := services.AppendBearerTokenToContext(context.Background(), accessToken) + req := &keywords_proto.FilterReq{ + Text: in.Message, + } + res, err := client.Validate(ctx, req) + if err != nil { + a.log.Error(err) + return false, "", err + } + ok = res.Ok + if !ok { + msg = "触发到了知识盲区,请换个问题再问" + } + return +} diff --git a/ai-chat-service/chat-server/server/server.go b/ai-chat-service/chat-server/server/server.go new file mode 100644 index 0000000..84be41e --- /dev/null +++ b/ai-chat-service/chat-server/server/server.go @@ -0,0 +1,352 @@ +package server + +import ( + chat_context "ai-chat-service/chat-server/chat-context" + "ai-chat-service/chat-server/data" + metrics_bus "ai-chat-service/chat-server/metrics-bus" + vector_data "ai-chat-service/chat-server/vector-data" + "ai-chat-service/pkg/config" + "ai-chat-service/pkg/log" + "ai-chat-service/proto" + "ai-chat-service/services/tokenizer" + "context" + "encoding/json" + "github.com/golang/protobuf/jsonpb" + "github.com/google/uuid" + "github.com/sashabaranov/go-openai" + "io" + "strconv" + "strings" + "time" +) + +type chatService struct { + proto.UnimplementedChatServer + config *config.Config + log log.ILogger + data data.IChatRecordsData + vectorData vector_data.IChatRecordsData + busMetrics *metrics_bus.BusMetrics +} + +func NewChatService(data data.IChatRecordsData, vectorData vector_data.IChatRecordsData, config *config.Config, log log.ILogger, busMetrics *metrics_bus.BusMetrics) proto.ChatServer { + return &chatService{ + config: config, + log: log, + data: data, + vectorData: vectorData, + busMetrics: busMetrics, + } +} + +func (s *chatService) ChatCompletion(ctx context.Context, in *proto.ChatCompletionRequest) (*proto.ChatCompletionResponse, error) { + redisContextCache := chat_context.NewRedisCache() + defer redisContextCache.Close() + + app := s.newApp(in, redisContextCache) + //敏感词过滤 + ok, msg, err := app.sensitive(in) + if err != nil { + s.log.Error(err) + return nil, err + } + if !ok { + res := app.buildChatCompletionResponse(msg) + return res, nil + } + + //关键词提取 + keywords := app.keywords(in) + if len(keywords) > 0 { + idStr, score, err := s.vectorData.QueryData(context.Background(), map[string][]string{"keywords": {strings.Join(keywords, ",")}}) + if err != nil { + s.log.Error(err) + } else if score > 0.99 { + id, err := strconv.ParseInt(idStr, 10, 64) + if err != nil { + s.log.Error(err) + } else { + record, err := s.data.GetById(id) + if err != nil { + s.log.Error(err) + } else { + res := app.buildChatCompletionResponse(record.AIMsg) + return res, nil + } + } + } + } + + client := app.getOpenaiClient() + req, tokens, currTokens, currMessage, err := app.buildChatCompletionRequest(in, false) + resp, err := client.CreateChatCompletion(ctx, req) + if err != nil { + s.log.Error(err) + return nil, err + } + res := &proto.ChatCompletionResponse{} + bytes, err := json.Marshal(resp) + if err != nil { + s.log.Error(err) + return nil, err + } + err = jsonpb.UnmarshalString(string(bytes), res) + if err != nil { + s.log.Error(err) + return nil, err + } + go func() { + reqContext := &chat_context.ChatMessage{ + ID: in.Id, + PID: in.Pid, + Message: currMessage, + Tokens: currTokens, + } + err := app.saveContext(reqContext) + if err != nil { + s.log.Error(err) + return + } + resContext := &chat_context.ChatMessage{ + ID: resp.ID, + PID: reqContext.ID, + Message: resp.Choices[0].Message, + Tokens: resp.Usage.CompletionTokens, + } + err = app.saveContext(resContext) + if err != nil { + s.log.Error(err) + return + } + }() + go func() { + records := &data.ChatRecord{ + UserMsg: in.Message, + UserMsgTokens: currTokens, + UserMsgKeywords: keywords, + AIMsg: resp.Choices[0].Message.Content, + AIMsgTokens: resp.Usage.CompletionTokens, + ReqTokens: tokens, + CreateAt: time.Now().Unix(), + } + err := s.data.Add(records) + if err != nil { + s.log.Error(err) + return + } + //保存到向量数据库 + if len(keywords) > 0 { + list := []*vector_data.ChatRecord{ + { + ID: strconv.FormatInt(records.ID, 10), + KVs: map[string]string{ + "keywords": strings.Join(keywords, ","), + }, + }, + } + err = s.vectorData.UpsertData(context.Background(), list) + if err != nil { + s.log.Error(err) + return + } + } + }() + return res, err +} +func (s *chatService) ChatCompletionStream(in *proto.ChatCompletionRequest, stream proto.Chat_ChatCompletionStreamServer) error { + redisContextCache := chat_context.NewRedisCache() + defer redisContextCache.Close() + + app := s.newApp(in, redisContextCache) + //敏感词过滤 + ok, msg, err := app.sensitive(in) + if err != nil { + s.busMetrics.ErrQuestionsTotalCounter.Inc() + s.log.Error(err) + return err + } + if !ok { + s.busMetrics.SensitiveQuestionsTotalCounter.Inc() + resId := uuid.New().String() + startRes := app.buildChatCompletionStreamResponse(resId, "", "") + endRes := app.buildChatCompletionStreamResponse(resId, "", "stop") + err = stream.Send(startRes) + if err != nil { + s.log.Error(err) + return err + } + resList := app.buildChatCompletionStreamResponseList(resId, msg) + for _, res := range resList { + err = stream.Send(res) + if err != nil { + s.log.Error(err) + return err + } + } + err = stream.Send(endRes) + if err != nil { + s.log.Error(err) + return err + } + return nil + } + + //关键词提取 + keywords := app.keywords(in) + + if len(keywords) > 0 { + s.busMetrics.KeywordsQuestionsTotalCounter.Inc() + idStr, score, err := s.vectorData.QueryData(context.Background(), map[string][]string{"keywords": {strings.Join(keywords, ",")}}) + if err != nil { + s.log.Error(err) + } else if score > 0.99 { + id, err := strconv.ParseInt(idStr, 10, 64) + if err != nil { + s.log.Error(err) + } else { + record, err := s.data.GetById(id) + if err != nil { + s.log.Error(err) + } else { + resId := uuid.New().String() + startRes := app.buildChatCompletionStreamResponse(resId, "", "") + endRes := app.buildChatCompletionStreamResponse(resId, "", "stop") + err = stream.Send(startRes) + if err != nil { + s.log.Error(err) + return err + } + resList := app.buildChatCompletionStreamResponseList(resId, record.AIMsg) + for _, res := range resList { + err = stream.Send(res) + if err != nil { + s.log.Error(err) + return err + } + } + err = stream.Send(endRes) + if err != nil { + s.log.Error(err) + return err + } + return nil + } + } + } + } + + client := app.getOpenaiClient() + req, tokens, currTokens, currMessage, err := app.buildChatCompletionRequest(in, false) + chatStream, err := client.CreateChatCompletionStream(stream.Context(), req) + if err != nil { + s.busMetrics.ErrQuestionsTotalCounter.Inc() + s.log.Error(err) + return err + } + defer chatStream.Close() + completionContent := "" + resultID := "" + for { + resp, err := chatStream.Recv() + if err != nil && err != io.EOF { + s.log.Error(err) + return err + } + if err == io.EOF { + break + } + if resultID == "" { + resultID = resp.ID + } + completionContent += resp.Choices[0].Delta.Content + res := &proto.ChatCompletionStreamResponse{} + bytes, err := json.Marshal(resp) + if err != nil { + s.log.Error(err) + return err + } + err = jsonpb.UnmarshalString(string(bytes), res) + if err != nil { + s.log.Error(err) + return err + } + err = stream.Send(res) + if err != nil { + s.log.Error(err) + return err + } + } + resultMessage := openai.ChatCompletionMessage{ + Role: openai.ChatMessageRoleAssistant, + Content: completionContent, + } + model := s.config.Chat.Model + if in.ChatParam != nil && in.ChatParam.Model != "" { + model = in.ChatParam.Model + } + resultTokens, err := tokenizer.GetTokens(&resultMessage, model) + if err != nil { + s.busMetrics.ErrQuestionsTotalCounter.Inc() + s.log.Error(err) + return err + } + + go func() { + reqContext := &chat_context.ChatMessage{ + ID: in.Id, + PID: in.Pid, + Message: currMessage, + Tokens: currTokens, + } + err := app.saveContext(reqContext) + if err != nil { + s.log.Error(err) + return + } + resContext := &chat_context.ChatMessage{ + ID: resultID, + PID: reqContext.ID, + Message: resultMessage, + Tokens: resultTokens, + } + err = app.saveContext(resContext) + if err != nil { + s.log.Error(err) + return + } + }() + go func() { + s.busMetrics.QuestionsTotalCounter.Inc() + records := &data.ChatRecord{ + UserMsg: in.Message, + UserMsgTokens: currTokens, + UserMsgKeywords: keywords, + AIMsg: completionContent, + AIMsgTokens: resultTokens, + ReqTokens: tokens, + CreateAt: time.Now().Unix(), + } + err := s.data.Add(records) + if err != nil { + s.log.Error(err) + return + } + //保存到向量数据库 + if len(keywords) > 0 { + list := []*vector_data.ChatRecord{ + { + ID: strconv.FormatInt(records.ID, 10), + KVs: map[string]string{ + "keywords": strings.Join(keywords, ","), + }, + }, + } + err = s.vectorData.UpsertData(context.Background(), list) + if err != nil { + s.log.Error(err) + return + } + } + }() + return nil +} diff --git a/ai-chat-service/chat-server/vector-data/chat_records.go b/ai-chat-service/chat-server/vector-data/chat_records.go new file mode 100644 index 0000000..2d92274 --- /dev/null +++ b/ai-chat-service/chat-server/vector-data/chat_records.go @@ -0,0 +1,69 @@ +package vector_data + +import ( + "ai-chat-service/pkg/config" + "context" + "github.com/tencent/vectordatabase-sdk-go/tcvectordb" +) + +const CHAT_RECORDS = "chat_records" + +type ChatRecord struct { + ID string + KVs map[string]string +} +type IChatRecordsData interface { + UpsertData(ctx context.Context, list []*ChatRecord) error + QueryData(ctx context.Context, text map[string][]string) (id string, score float32, err error) +} + +type chatRecordsData struct { + config *config.Config + vectorDB *tcvectordb.Client +} + +func NewChatRecordsData(config *config.Config, vectorDB *tcvectordb.Client) IChatRecordsData { + return &chatRecordsData{ + config: config, + vectorDB: vectorDB, + } +} +func (data *chatRecordsData) UpsertData(ctx context.Context, list []*ChatRecord) error { + database := data.config.VectorDB.Database + collection := CHAT_RECORDS + coll := data.vectorDB.Database(database).Collection(collection) + documentList := make([]tcvectordb.Document, 0, len(list)) + for _, l := range list { + doc := tcvectordb.Document{ + Id: l.ID, + } + doc.Fields = make(map[string]tcvectordb.Field, len(l.KVs)) + for k, v := range l.KVs { + doc.Fields[k] = tcvectordb.Field{Val: v} + } + documentList = append(documentList, doc) + } + _, err := coll.Upsert(ctx, documentList) + if err != nil { + return err + } + return nil +} +func (data *chatRecordsData) QueryData(ctx context.Context, text map[string][]string) (id string, score float32, err error) { + database := data.config.VectorDB.Database + collection := CHAT_RECORDS + coll := data.vectorDB.Database(database).Collection(collection) + result, err := coll.SearchByText(ctx, text, &tcvectordb.SearchDocumentParams{ + Params: &tcvectordb.SearchDocParams{Ef: 100}, + Limit: 1, + }) + if err != nil { + return "", 0, err + } + if len(result.Documents) > 0 && len(result.Documents[0]) > 0 { + doc := result.Documents[0][0] + return doc.Id, doc.Score, nil + + } + return "", 0, nil +} diff --git a/ai-chat-service/dev.config.yaml b/ai-chat-service/dev.config.yaml new file mode 100644 index 0000000..59fa902 --- /dev/null +++ b/ai-chat-service/dev.config.yaml @@ -0,0 +1,72 @@ +server: + ip: 0.0.0.0 + port: 50055 + accessToken: "me256487ang1chubdpdialoud22sev1ozhoguumyqca" +log: + # panic,fatal,error,warn,warning,info,debug,trace + level: "info" + logPath: "runtime/logs/app.log" +chat: + # openai key + api_key: "i0jey84SdkFdw5u43780yjr3h7se8nth0yi295nr94ksDngKprEh" + # openai 接口地址 + base_url: "http://localhost:8084/v1" + # 使用的训练模型 + model: "gpt-3.5-turbo" + # 单次请求的上下文总长度,包括:请求消息+响应消息 + max_tokens: 4096 + # 表示语言模型输出的随机性和创造性 + # 取值范围 0 ~ 1,值越大随机性越高 + temperature: 0.8 + # 用于生成文本时控制选词的随机程度 + # 即下一个预测单词考虑的概率范围 + # 取值范围0 ~ 1 + top_p: 0.9 + # 存在惩罚,用于生成文本时控制重复使用单词的程度 + # 取值范围 0 ~ 1 ,0表示不惩罚,1表示禁止重复 + presence_penalty: 0.8 + # 用于控制模型生成回复时重复单词出现的频率 + # 取值范围 0~1,值越大表示回复时会更注重避免使用已经出现的单词 + frequency_penalty: 0.5 + # AI助手特征描述 + bot_desc: "你是一个AI助手,我需要你模拟一名资深的软件工程师来回答我的问题" + # 单次请求,保留的响应tokens数量 + min_response_tokens: 2048 + # 上下文缓存时长,单位s + context_ttl: 1800 + # 上下文消息条数 + context_len: 4 +redis: + host: "192.168.239.161" + port: 6379 + pwd: "123456" +mysql: + dsn: "root:123456@tcp(192.168.239.161:3306)/ai_chat?collation=utf8mb4_unicode_ci&charset=utf8mb4" + maxLifeTime: 3600 + maxOpenConn: 10 + maxIdleConn: 10 +dependOn: + sensitive: + address: "localhost:50053" + accessToken: "ang1chubdev1ozhome256487d22sapguuv1ozhom" + keywords: + address: "localhost:50054" + accessToken: "ang1chubdev1ozhome256487d22sapguuv1ozhom" + tokenizer: + address: "http://192.168.239.161:3002" +vectorDB: + # 访问地址 + url: "http://lb-4u4r1fk4-1ys6gv3rpmdan420.clb.ap-guangzhou.tencentclb.com:60000" + # 用户名 + username: "root" + # 密码 + pwd: "YaUfVueWZJ20e4ghyLlBT8Dou5OapwpFTUq50oft" + database: "ai-chat" + # 请求超时时长s + timeout: 5 + # 最大空闲连接数 + maxIdleConnPerHost: 2 + # 读一致性: strongConsistency(强一致性),eventualConsistency(最终一致性) + readConsistency: "eventualConsistency" + # 空闲连接超时时长s + idleConnTimeout: 60 \ No newline at end of file diff --git a/ai-chat-service/go.mod b/ai-chat-service/go.mod new file mode 100644 index 0000000..48698d9 --- /dev/null +++ b/ai-chat-service/go.mod @@ -0,0 +1,56 @@ +module ai-chat-service + +go 1.20 + +require ( + github.com/go-sql-driver/mysql v1.8.1 + github.com/golang/protobuf v1.5.4 + github.com/google/uuid v1.6.0 + github.com/prometheus/client_golang v1.20.4 + github.com/redis/go-redis/v9 v9.6.1 + github.com/sashabaranov/go-openai v1.9.4 + github.com/sirupsen/logrus v1.9.3 + github.com/spf13/viper v1.19.0 + github.com/tencent/vectordatabase-sdk-go v1.3.5 + google.golang.org/grpc v1.65.0 + google.golang.org/protobuf v1.34.2 + gopkg.in/natefinch/lumberjack.v2 v2.2.1 +) + +require ( + filippo.io/edwards25519 v1.1.0 // indirect + github.com/beorn7/perks v1.0.1 // indirect + github.com/cespare/xxhash/v2 v2.3.0 // indirect + github.com/clbanning/mxj v1.8.4 // indirect + github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect + github.com/fsnotify/fsnotify v1.7.0 // indirect + github.com/google/go-querystring v1.0.0 // indirect + github.com/hashicorp/hcl v1.0.0 // indirect + github.com/klauspost/compress v1.17.9 // indirect + github.com/magiconair/properties v1.8.7 // indirect + github.com/mitchellh/mapstructure v1.5.0 // indirect + github.com/mozillazg/go-httpheader v0.2.1 // indirect + github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect + github.com/pelletier/go-toml/v2 v2.2.2 // indirect + github.com/pkg/errors v0.9.1 // indirect + github.com/prometheus/client_model v0.6.1 // indirect + github.com/prometheus/common v0.55.0 // indirect + github.com/prometheus/procfs v0.15.1 // indirect + github.com/sagikazarmark/locafero v0.4.0 // indirect + github.com/sagikazarmark/slog-shim v0.1.0 // indirect + github.com/sourcegraph/conc v0.3.0 // indirect + github.com/spf13/afero v1.11.0 // indirect + github.com/spf13/cast v1.6.0 // indirect + github.com/spf13/pflag v1.0.5 // indirect + github.com/subosito/gotenv v1.6.0 // indirect + github.com/tencentyun/cos-go-sdk-v5 v0.7.54 // indirect + go.uber.org/atomic v1.9.0 // indirect + go.uber.org/multierr v1.9.0 // indirect + golang.org/x/exp v0.0.0-20231006140011-7918f672742d // indirect + golang.org/x/net v0.26.0 // indirect + golang.org/x/sys v0.22.0 // indirect + golang.org/x/text v0.16.0 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20240604185151-ef581f913117 // indirect + gopkg.in/ini.v1 v1.67.0 // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect +) diff --git a/ai-chat-service/go.sum b/ai-chat-service/go.sum new file mode 100644 index 0000000..34c31d6 --- /dev/null +++ b/ai-chat-service/go.sum @@ -0,0 +1,2740 @@ +cel.dev/expr v0.15.0/go.mod h1:TRSuuV7DlVCE/uwv5QbAiW/v8l5O8C4eEPHeu7gf7Sg= +cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= +cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= +cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= +cloud.google.com/go v0.44.3/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= +cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= +cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= +cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= +cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4= +cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M= +cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= +cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= +cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= +cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= +cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= +cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI= +cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk= +cloud.google.com/go v0.75.0/go.mod h1:VGuuCn7PG0dwsd5XPVm2Mm3wlh3EL55/79EKB6hlPTY= +cloud.google.com/go v0.78.0/go.mod h1:QjdrLG0uq+YwhjoVOLsS1t7TW8fs36kLs4XO5R5ECHg= +cloud.google.com/go v0.79.0/go.mod h1:3bzgcEeQlzbuEAYu4mrWhKqWjmpprinYgKJLgKHnbb8= +cloud.google.com/go v0.81.0/go.mod h1:mk/AM35KwGk/Nm2YSeZbxXdrNK3KZOYHmLkOqC2V6E0= +cloud.google.com/go v0.83.0/go.mod h1:Z7MJUsANfY0pYPdw0lbnivPx4/vhy/e2FEkSkF7vAVY= +cloud.google.com/go v0.84.0/go.mod h1:RazrYuxIK6Kb7YrzzhPoLmCVzl7Sup4NrbKPg8KHSUM= +cloud.google.com/go v0.87.0/go.mod h1:TpDYlFy7vuLzZMMZ+B6iRiELaY7z/gJPaqbMx6mlWcY= +cloud.google.com/go v0.90.0/go.mod h1:kRX0mNRHe0e2rC6oNakvwQqzyDmg57xJ+SZU1eT2aDQ= +cloud.google.com/go v0.93.3/go.mod h1:8utlLll2EF5XMAV15woO4lSbWQlk8rer9aLOfLh7+YI= +cloud.google.com/go v0.94.1/go.mod h1:qAlAugsXlC+JWO+Bke5vCtc9ONxjQT3drlTTnAplMW4= +cloud.google.com/go v0.97.0/go.mod h1:GF7l59pYBVlXQIBLx3a761cZ41F9bBH3JUlihCt2Udc= +cloud.google.com/go v0.99.0/go.mod h1:w0Xx2nLzqWJPuozYQX+hFfCSI8WioryfRDzkoI/Y2ZA= +cloud.google.com/go v0.100.1/go.mod h1:fs4QogzfH5n2pBXBP9vRiU+eCny7lD2vmFZy79Iuw1U= +cloud.google.com/go v0.100.2/go.mod h1:4Xra9TjzAeYHrl5+oeLlzbM2k3mjVhZh4UqTZ//w99A= +cloud.google.com/go v0.102.0/go.mod h1:oWcCzKlqJ5zgHQt9YsaeTY9KzIvjyy0ArmiBUgpQ+nc= +cloud.google.com/go v0.102.1/go.mod h1:XZ77E9qnTEnrgEOvr4xzfdX5TRo7fB4T2F4O6+34hIU= +cloud.google.com/go v0.104.0/go.mod h1:OO6xxXdJyvuJPcEPBLN9BJPD+jep5G1+2U5B5gkRYtA= +cloud.google.com/go v0.105.0/go.mod h1:PrLgOJNe5nfE9UMxKxgXj4mD3voiP+YQ6gdt6KMFOKM= +cloud.google.com/go v0.107.0/go.mod h1:wpc2eNrD7hXUTy8EKS10jkxpZBjASrORK7goS+3YX2I= +cloud.google.com/go v0.110.0/go.mod h1:SJnCLqQ0FCFGSZMUNUf84MV3Aia54kn7pi8st7tMzaY= +cloud.google.com/go v0.110.2/go.mod h1:k04UEeEtb6ZBRTv3dZz4CeJC3jKGxyhl0sAiVVquxiw= +cloud.google.com/go v0.110.4/go.mod h1:+EYjdK8e5RME/VY/qLCAtuyALQ9q67dvuum8i+H5xsI= +cloud.google.com/go v0.110.6/go.mod h1:+EYjdK8e5RME/VY/qLCAtuyALQ9q67dvuum8i+H5xsI= +cloud.google.com/go v0.110.7/go.mod h1:+EYjdK8e5RME/VY/qLCAtuyALQ9q67dvuum8i+H5xsI= +cloud.google.com/go v0.110.8/go.mod h1:Iz8AkXJf1qmxC3Oxoep8R1T36w8B92yU29PcBhHO5fk= +cloud.google.com/go v0.110.9/go.mod h1:rpxevX/0Lqvlbc88b7Sc1SPNdyK1riNBTUU6JXhYNpM= +cloud.google.com/go v0.110.10/go.mod h1:v1OoFqYxiBkUrruItNM3eT4lLByNjxmJSV/xDKJNnic= +cloud.google.com/go v0.111.0/go.mod h1:0mibmpKP1TyOOFYQY5izo0LnT+ecvOQ0Sg3OdmMiNRU= +cloud.google.com/go v0.112.0/go.mod h1:3jEEVwZ/MHU4djK5t5RHuKOA/GbLddgTdVubX1qnPD4= +cloud.google.com/go v0.112.1/go.mod h1:+Vbu+Y1UU+I1rjmzeMOb/8RfkKJK2Gyxi1X6jJCZLo4= +cloud.google.com/go/accessapproval v1.4.0/go.mod h1:zybIuC3KpDOvotz59lFe5qxRZx6C75OtwbisN56xYB4= +cloud.google.com/go/accessapproval v1.5.0/go.mod h1:HFy3tuiGvMdcd/u+Cu5b9NkO1pEICJ46IR82PoUdplw= +cloud.google.com/go/accessapproval v1.6.0/go.mod h1:R0EiYnwV5fsRFiKZkPHr6mwyk2wxUJ30nL4j2pcFY2E= +cloud.google.com/go/accessapproval v1.7.1/go.mod h1:JYczztsHRMK7NTXb6Xw+dwbs/WnOJxbo/2mTI+Kgg68= +cloud.google.com/go/accessapproval v1.7.2/go.mod h1:/gShiq9/kK/h8T/eEn1BTzalDvk0mZxJlhfw0p+Xuc0= +cloud.google.com/go/accessapproval v1.7.3/go.mod h1:4l8+pwIxGTNqSf4T3ds8nLO94NQf0W/KnMNuQ9PbnP8= +cloud.google.com/go/accessapproval v1.7.4/go.mod h1:/aTEh45LzplQgFYdQdwPMR9YdX0UlhBmvB84uAmQKUc= +cloud.google.com/go/accessapproval v1.7.5/go.mod h1:g88i1ok5dvQ9XJsxpUInWWvUBrIZhyPDPbk4T01OoJ0= +cloud.google.com/go/accesscontextmanager v1.3.0/go.mod h1:TgCBehyr5gNMz7ZaH9xubp+CE8dkrszb4oK9CWyvD4o= +cloud.google.com/go/accesscontextmanager v1.4.0/go.mod h1:/Kjh7BBu/Gh83sv+K60vN9QE5NJcd80sU33vIe2IFPE= +cloud.google.com/go/accesscontextmanager v1.6.0/go.mod h1:8XCvZWfYw3K/ji0iVnp+6pu7huxoQTLmxAbVjbloTtM= +cloud.google.com/go/accesscontextmanager v1.7.0/go.mod h1:CEGLewx8dwa33aDAZQujl7Dx+uYhS0eay198wB/VumQ= +cloud.google.com/go/accesscontextmanager v1.8.0/go.mod h1:uI+AI/r1oyWK99NN8cQ3UK76AMelMzgZCvJfsi2c+ps= +cloud.google.com/go/accesscontextmanager v1.8.1/go.mod h1:JFJHfvuaTC+++1iL1coPiG1eu5D24db2wXCDWDjIrxo= +cloud.google.com/go/accesscontextmanager v1.8.2/go.mod h1:E6/SCRM30elQJ2PKtFMs2YhfJpZSNcJyejhuzoId4Zk= +cloud.google.com/go/accesscontextmanager v1.8.3/go.mod h1:4i/JkF2JiFbhLnnpnfoTX5vRXfhf9ukhU1ANOTALTOQ= +cloud.google.com/go/accesscontextmanager v1.8.4/go.mod h1:ParU+WbMpD34s5JFEnGAnPBYAgUHozaTmDJU7aCU9+M= +cloud.google.com/go/accesscontextmanager v1.8.5/go.mod h1:TInEhcZ7V9jptGNqN3EzZ5XMhT6ijWxTGjzyETwmL0Q= +cloud.google.com/go/aiplatform v1.22.0/go.mod h1:ig5Nct50bZlzV6NvKaTwmplLLddFx0YReh9WfTO5jKw= +cloud.google.com/go/aiplatform v1.24.0/go.mod h1:67UUvRBKG6GTayHKV8DBv2RtR1t93YRu5B1P3x99mYY= +cloud.google.com/go/aiplatform v1.27.0/go.mod h1:Bvxqtl40l0WImSb04d0hXFU7gDOiq9jQmorivIiWcKg= +cloud.google.com/go/aiplatform v1.35.0/go.mod h1:7MFT/vCaOyZT/4IIFfxH4ErVg/4ku6lKv3w0+tFTgXQ= +cloud.google.com/go/aiplatform v1.36.1/go.mod h1:WTm12vJRPARNvJ+v6P52RDHCNe4AhvjcIZ/9/RRHy/k= +cloud.google.com/go/aiplatform v1.37.0/go.mod h1:IU2Cv29Lv9oCn/9LkFiiuKfwrRTq+QQMbW+hPCxJGZw= +cloud.google.com/go/aiplatform v1.45.0/go.mod h1:Iu2Q7sC7QGhXUeOhAj/oCK9a+ULz1O4AotZiqjQ8MYA= +cloud.google.com/go/aiplatform v1.48.0/go.mod h1:Iu2Q7sC7QGhXUeOhAj/oCK9a+ULz1O4AotZiqjQ8MYA= +cloud.google.com/go/aiplatform v1.50.0/go.mod h1:IRc2b8XAMTa9ZmfJV1BCCQbieWWvDnP1A8znyz5N7y4= +cloud.google.com/go/aiplatform v1.51.0/go.mod h1:IRc2b8XAMTa9ZmfJV1BCCQbieWWvDnP1A8znyz5N7y4= +cloud.google.com/go/aiplatform v1.51.1/go.mod h1:kY3nIMAVQOK2XDqDPHaOuD9e+FdMA6OOpfBjsvaFSOo= +cloud.google.com/go/aiplatform v1.51.2/go.mod h1:hCqVYB3mY45w99TmetEoe8eCQEwZEp9WHxeZdcv9phw= +cloud.google.com/go/aiplatform v1.52.0/go.mod h1:pwZMGvqe0JRkI1GWSZCtnAfrR4K1bv65IHILGA//VEU= +cloud.google.com/go/aiplatform v1.54.0/go.mod h1:pwZMGvqe0JRkI1GWSZCtnAfrR4K1bv65IHILGA//VEU= +cloud.google.com/go/aiplatform v1.57.0/go.mod h1:pwZMGvqe0JRkI1GWSZCtnAfrR4K1bv65IHILGA//VEU= +cloud.google.com/go/aiplatform v1.58.0/go.mod h1:pwZMGvqe0JRkI1GWSZCtnAfrR4K1bv65IHILGA//VEU= +cloud.google.com/go/aiplatform v1.58.2/go.mod h1:c3kCiVmb6UC1dHAjZjcpDj6ZS0bHQ2slL88ZjC2LtlA= +cloud.google.com/go/aiplatform v1.60.0/go.mod h1:eTlGuHOahHprZw3Hio5VKmtThIOak5/qy6pzdsqcQnM= +cloud.google.com/go/analytics v0.11.0/go.mod h1:DjEWCu41bVbYcKyvlws9Er60YE4a//bK6mnhWvQeFNI= +cloud.google.com/go/analytics v0.12.0/go.mod h1:gkfj9h6XRf9+TS4bmuhPEShsh3hH8PAZzm/41OOhQd4= +cloud.google.com/go/analytics v0.17.0/go.mod h1:WXFa3WSym4IZ+JiKmavYdJwGG/CvpqiqczmL59bTD9M= +cloud.google.com/go/analytics v0.18.0/go.mod h1:ZkeHGQlcIPkw0R/GW+boWHhCOR43xz9RN/jn7WcqfIE= +cloud.google.com/go/analytics v0.19.0/go.mod h1:k8liqf5/HCnOUkbawNtrWWc+UAzyDlW89doe8TtoDsE= +cloud.google.com/go/analytics v0.21.2/go.mod h1:U8dcUtmDmjrmUTnnnRnI4m6zKn/yaA5N9RlEkYFHpQo= +cloud.google.com/go/analytics v0.21.3/go.mod h1:U8dcUtmDmjrmUTnnnRnI4m6zKn/yaA5N9RlEkYFHpQo= +cloud.google.com/go/analytics v0.21.4/go.mod h1:zZgNCxLCy8b2rKKVfC1YkC2vTrpfZmeRCySM3aUbskA= +cloud.google.com/go/analytics v0.21.5/go.mod h1:BQtOBHWTlJ96axpPPnw5CvGJ6i3Ve/qX2fTxR8qWyr8= +cloud.google.com/go/analytics v0.21.6/go.mod h1:eiROFQKosh4hMaNhF85Oc9WO97Cpa7RggD40e/RBy8w= +cloud.google.com/go/analytics v0.22.0/go.mod h1:eiROFQKosh4hMaNhF85Oc9WO97Cpa7RggD40e/RBy8w= +cloud.google.com/go/analytics v0.23.0/go.mod h1:YPd7Bvik3WS95KBok2gPXDqQPHy08TsCQG6CdUCb+u0= +cloud.google.com/go/apigateway v1.3.0/go.mod h1:89Z8Bhpmxu6AmUxuVRg/ECRGReEdiP3vQtk4Z1J9rJk= +cloud.google.com/go/apigateway v1.4.0/go.mod h1:pHVY9MKGaH9PQ3pJ4YLzoj6U5FUDeDFBllIz7WmzJoc= +cloud.google.com/go/apigateway v1.5.0/go.mod h1:GpnZR3Q4rR7LVu5951qfXPJCHquZt02jf7xQx7kpqN8= +cloud.google.com/go/apigateway v1.6.1/go.mod h1:ufAS3wpbRjqfZrzpvLC2oh0MFlpRJm2E/ts25yyqmXA= +cloud.google.com/go/apigateway v1.6.2/go.mod h1:CwMC90nnZElorCW63P2pAYm25AtQrHfuOkbRSHj0bT8= +cloud.google.com/go/apigateway v1.6.3/go.mod h1:k68PXWpEs6BVDTtnLQAyG606Q3mz8pshItwPXjgv44Y= +cloud.google.com/go/apigateway v1.6.4/go.mod h1:0EpJlVGH5HwAN4VF4Iec8TAzGN1aQgbxAWGJsnPCGGY= +cloud.google.com/go/apigateway v1.6.5/go.mod h1:6wCwvYRckRQogyDDltpANi3zsCDl6kWi0b4Je+w2UiI= +cloud.google.com/go/apigeeconnect v1.3.0/go.mod h1:G/AwXFAKo0gIXkPTVfZDd2qA1TxBXJ3MgMRBQkIi9jc= +cloud.google.com/go/apigeeconnect v1.4.0/go.mod h1:kV4NwOKqjvt2JYR0AoIWo2QGfoRtn/pkS3QlHp0Ni04= +cloud.google.com/go/apigeeconnect v1.5.0/go.mod h1:KFaCqvBRU6idyhSNyn3vlHXc8VMDJdRmwDF6JyFRqZ8= +cloud.google.com/go/apigeeconnect v1.6.1/go.mod h1:C4awq7x0JpLtrlQCr8AzVIzAaYgngRqWf9S5Uhg+wWs= +cloud.google.com/go/apigeeconnect v1.6.2/go.mod h1:s6O0CgXT9RgAxlq3DLXvG8riw8PYYbU/v25jqP3Dy18= +cloud.google.com/go/apigeeconnect v1.6.3/go.mod h1:peG0HFQ0si2bN15M6QSjEW/W7Gy3NYkWGz7pFz13cbo= +cloud.google.com/go/apigeeconnect v1.6.4/go.mod h1:CapQCWZ8TCjnU0d7PobxhpOdVz/OVJ2Hr/Zcuu1xFx0= +cloud.google.com/go/apigeeconnect v1.6.5/go.mod h1:MEKm3AiT7s11PqTfKE3KZluZA9O91FNysvd3E6SJ6Ow= +cloud.google.com/go/apigeeregistry v0.4.0/go.mod h1:EUG4PGcsZvxOXAdyEghIdXwAEi/4MEaoqLMLDMIwKXY= +cloud.google.com/go/apigeeregistry v0.5.0/go.mod h1:YR5+s0BVNZfVOUkMa5pAR2xGd0A473vA5M7j247o1wM= +cloud.google.com/go/apigeeregistry v0.6.0/go.mod h1:BFNzW7yQVLZ3yj0TKcwzb8n25CFBri51GVGOEUcgQsc= +cloud.google.com/go/apigeeregistry v0.7.1/go.mod h1:1XgyjZye4Mqtw7T9TsY4NW10U7BojBvG4RMD+vRDrIw= +cloud.google.com/go/apigeeregistry v0.7.2/go.mod h1:9CA2B2+TGsPKtfi3F7/1ncCCsL62NXBRfM6iPoGSM+8= +cloud.google.com/go/apigeeregistry v0.8.1/go.mod h1:MW4ig1N4JZQsXmBSwH4rwpgDonocz7FPBSw6XPGHmYw= +cloud.google.com/go/apigeeregistry v0.8.2/go.mod h1:h4v11TDGdeXJDJvImtgK2AFVvMIgGWjSb0HRnBSjcX8= +cloud.google.com/go/apigeeregistry v0.8.3/go.mod h1:aInOWnqF4yMQx8kTjDqHNXjZGh/mxeNlAf52YqtASUs= +cloud.google.com/go/apikeys v0.4.0/go.mod h1:XATS/yqZbaBK0HOssf+ALHp8jAlNHUgyfprvNcBIszU= +cloud.google.com/go/apikeys v0.5.0/go.mod h1:5aQfwY4D+ewMMWScd3hm2en3hCj+BROlyrt3ytS7KLI= +cloud.google.com/go/apikeys v0.6.0/go.mod h1:kbpXu5upyiAlGkKrJgQl8A0rKNNJ7dQ377pdroRSSi8= +cloud.google.com/go/appengine v1.4.0/go.mod h1:CS2NhuBuDXM9f+qscZ6V86m1MIIqPj3WC/UoEuR1Sno= +cloud.google.com/go/appengine v1.5.0/go.mod h1:TfasSozdkFI0zeoxW3PTBLiNqRmzraodCWatWI9Dmak= +cloud.google.com/go/appengine v1.6.0/go.mod h1:hg6i0J/BD2cKmDJbaFSYHFyZkgBEfQrDg/X0V5fJn84= +cloud.google.com/go/appengine v1.7.0/go.mod h1:eZqpbHFCqRGa2aCdope7eC0SWLV1j0neb/QnMJVWx6A= +cloud.google.com/go/appengine v1.7.1/go.mod h1:IHLToyb/3fKutRysUlFO0BPt5j7RiQ45nrzEJmKTo6E= +cloud.google.com/go/appengine v1.8.1/go.mod h1:6NJXGLVhZCN9aQ/AEDvmfzKEfoYBlfB80/BHiKVputY= +cloud.google.com/go/appengine v1.8.2/go.mod h1:WMeJV9oZ51pvclqFN2PqHoGnys7rK0rz6s3Mp6yMvDo= +cloud.google.com/go/appengine v1.8.3/go.mod h1:2oUPZ1LVZ5EXi+AF1ihNAF+S8JrzQ3till5m9VQkrsk= +cloud.google.com/go/appengine v1.8.4/go.mod h1:TZ24v+wXBujtkK77CXCpjZbnuTvsFNT41MUaZ28D6vg= +cloud.google.com/go/appengine v1.8.5/go.mod h1:uHBgNoGLTS5di7BvU25NFDuKa82v0qQLjyMJLuPQrVo= +cloud.google.com/go/area120 v0.5.0/go.mod h1:DE/n4mp+iqVyvxHN41Vf1CR602GiHQjFPusMFW6bGR4= +cloud.google.com/go/area120 v0.6.0/go.mod h1:39yFJqWVgm0UZqWTOdqkLhjoC7uFfgXRC8g/ZegeAh0= +cloud.google.com/go/area120 v0.7.0/go.mod h1:a3+8EUD1SX5RUcCs3MY5YasiO1z6yLiNLRiFrykbynY= +cloud.google.com/go/area120 v0.7.1/go.mod h1:j84i4E1RboTWjKtZVWXPqvK5VHQFJRF2c1Nm69pWm9k= +cloud.google.com/go/area120 v0.8.1/go.mod h1:BVfZpGpB7KFVNxPiQBuHkX6Ed0rS51xIgmGyjrAfzsg= +cloud.google.com/go/area120 v0.8.2/go.mod h1:a5qfo+x77SRLXnCynFWPUZhnZGeSgvQ+Y0v1kSItkh4= +cloud.google.com/go/area120 v0.8.3/go.mod h1:5zj6pMzVTH+SVHljdSKC35sriR/CVvQZzG/Icdyriw0= +cloud.google.com/go/area120 v0.8.4/go.mod h1:jfawXjxf29wyBXr48+W+GyX/f8fflxp642D/bb9v68M= +cloud.google.com/go/area120 v0.8.5/go.mod h1:BcoFCbDLZjsfe4EkCnEq1LKvHSK0Ew/zk5UFu6GMyA0= +cloud.google.com/go/artifactregistry v1.6.0/go.mod h1:IYt0oBPSAGYj/kprzsBjZ/4LnG/zOcHyFHjWPCi6SAQ= +cloud.google.com/go/artifactregistry v1.7.0/go.mod h1:mqTOFOnGZx8EtSqK/ZWcsm/4U8B77rbcLP6ruDU2Ixk= +cloud.google.com/go/artifactregistry v1.8.0/go.mod h1:w3GQXkJX8hiKN0v+at4b0qotwijQbYUqF2GWkZzAhC0= +cloud.google.com/go/artifactregistry v1.9.0/go.mod h1:2K2RqvA2CYvAeARHRkLDhMDJ3OXy26h3XW+3/Jh2uYc= +cloud.google.com/go/artifactregistry v1.11.1/go.mod h1:lLYghw+Itq9SONbCa1YWBoWs1nOucMH0pwXN1rOBZFI= +cloud.google.com/go/artifactregistry v1.11.2/go.mod h1:nLZns771ZGAwVLzTX/7Al6R9ehma4WUEhZGWV6CeQNQ= +cloud.google.com/go/artifactregistry v1.12.0/go.mod h1:o6P3MIvtzTOnmvGagO9v/rOjjA0HmhJ+/6KAXrmYDCI= +cloud.google.com/go/artifactregistry v1.13.0/go.mod h1:uy/LNfoOIivepGhooAUpL1i30Hgee3Cu0l4VTWHUC08= +cloud.google.com/go/artifactregistry v1.14.1/go.mod h1:nxVdG19jTaSTu7yA7+VbWL346r3rIdkZ142BSQqhn5E= +cloud.google.com/go/artifactregistry v1.14.2/go.mod h1:Xk+QbsKEb0ElmyeMfdHAey41B+qBq3q5R5f5xD4XT3U= +cloud.google.com/go/artifactregistry v1.14.3/go.mod h1:A2/E9GXnsyXl7GUvQ/2CjHA+mVRoWAXC0brg2os+kNI= +cloud.google.com/go/artifactregistry v1.14.4/go.mod h1:SJJcZTMv6ce0LDMUnihCN7WSrI+kBSFV0KIKo8S8aYU= +cloud.google.com/go/artifactregistry v1.14.6/go.mod h1:np9LSFotNWHcjnOgh8UVK0RFPCTUGbO0ve3384xyHfE= +cloud.google.com/go/artifactregistry v1.14.7/go.mod h1:0AUKhzWQzfmeTvT4SjfI4zjot72EMfrkvL9g9aRjnnM= +cloud.google.com/go/asset v1.5.0/go.mod h1:5mfs8UvcM5wHhqtSv8J1CtxxaQq3AdBxxQi2jGW/K4o= +cloud.google.com/go/asset v1.7.0/go.mod h1:YbENsRK4+xTiL+Ofoj5Ckf+O17kJtgp3Y3nn4uzZz5s= +cloud.google.com/go/asset v1.8.0/go.mod h1:mUNGKhiqIdbr8X7KNayoYvyc4HbbFO9URsjbytpUaW0= +cloud.google.com/go/asset v1.9.0/go.mod h1:83MOE6jEJBMqFKadM9NLRcs80Gdw76qGuHn8m3h8oHQ= +cloud.google.com/go/asset v1.10.0/go.mod h1:pLz7uokL80qKhzKr4xXGvBQXnzHn5evJAEAtZiIb0wY= +cloud.google.com/go/asset v1.11.1/go.mod h1:fSwLhbRvC9p9CXQHJ3BgFeQNM4c9x10lqlrdEUYXlJo= +cloud.google.com/go/asset v1.12.0/go.mod h1:h9/sFOa4eDIyKmH6QMpm4eUK3pDojWnUhTgJlk762Hg= +cloud.google.com/go/asset v1.13.0/go.mod h1:WQAMyYek/b7NBpYq/K4KJWcRqzoalEsxz/t/dTk4THw= +cloud.google.com/go/asset v1.14.1/go.mod h1:4bEJ3dnHCqWCDbWJ/6Vn7GVI9LerSi7Rfdi03hd+WTQ= +cloud.google.com/go/asset v1.15.0/go.mod h1:tpKafV6mEut3+vN9ScGvCHXHj7FALFVta+okxFECHcg= +cloud.google.com/go/asset v1.15.1/go.mod h1:yX/amTvFWRpp5rcFq6XbCxzKT8RJUam1UoboE179jU4= +cloud.google.com/go/asset v1.15.2/go.mod h1:B6H5tclkXvXz7PD22qCA2TDxSVQfasa3iDlM89O2NXs= +cloud.google.com/go/asset v1.15.3/go.mod h1:yYLfUD4wL4X589A9tYrv4rFrba0QlDeag0CMcM5ggXU= +cloud.google.com/go/asset v1.16.0/go.mod h1:yYLfUD4wL4X589A9tYrv4rFrba0QlDeag0CMcM5ggXU= +cloud.google.com/go/asset v1.17.0/go.mod h1:yYLfUD4wL4X589A9tYrv4rFrba0QlDeag0CMcM5ggXU= +cloud.google.com/go/asset v1.17.1/go.mod h1:byvDw36UME5AzGNK7o4JnOnINkwOZ1yRrGrKIahHrng= +cloud.google.com/go/asset v1.17.2/go.mod h1:SVbzde67ehddSoKf5uebOD1sYw8Ab/jD/9EIeWg99q4= +cloud.google.com/go/assuredworkloads v1.5.0/go.mod h1:n8HOZ6pff6re5KYfBXcFvSViQjDwxFkAkmUFffJRbbY= +cloud.google.com/go/assuredworkloads v1.6.0/go.mod h1:yo2YOk37Yc89Rsd5QMVECvjaMKymF9OP+QXWlKXUkXw= +cloud.google.com/go/assuredworkloads v1.7.0/go.mod h1:z/736/oNmtGAyU47reJgGN+KVoYoxeLBoj4XkKYscNI= +cloud.google.com/go/assuredworkloads v1.8.0/go.mod h1:AsX2cqyNCOvEQC8RMPnoc0yEarXQk6WEKkxYfL6kGIo= +cloud.google.com/go/assuredworkloads v1.9.0/go.mod h1:kFuI1P78bplYtT77Tb1hi0FMxM0vVpRC7VVoJC3ZoT0= +cloud.google.com/go/assuredworkloads v1.10.0/go.mod h1:kwdUQuXcedVdsIaKgKTp9t0UJkE5+PAVNhdQm4ZVq2E= +cloud.google.com/go/assuredworkloads v1.11.1/go.mod h1:+F04I52Pgn5nmPG36CWFtxmav6+7Q+c5QyJoL18Lry0= +cloud.google.com/go/assuredworkloads v1.11.2/go.mod h1:O1dfr+oZJMlE6mw0Bp0P1KZSlj5SghMBvTpZqIcUAW4= +cloud.google.com/go/assuredworkloads v1.11.3/go.mod h1:vEjfTKYyRUaIeA0bsGJceFV2JKpVRgyG2op3jfa59Zs= +cloud.google.com/go/assuredworkloads v1.11.4/go.mod h1:4pwwGNwy1RP0m+y12ef3Q/8PaiWrIDQ6nD2E8kvWI9U= +cloud.google.com/go/assuredworkloads v1.11.5/go.mod h1:FKJ3g3ZvkL2D7qtqIGnDufFkHxwIpNM9vtmhvt+6wqk= +cloud.google.com/go/automl v1.5.0/go.mod h1:34EjfoFGMZ5sgJ9EoLsRtdPSNZLcfflJR39VbVNS2M0= +cloud.google.com/go/automl v1.6.0/go.mod h1:ugf8a6Fx+zP0D59WLhqgTDsQI9w07o64uf/Is3Nh5p8= +cloud.google.com/go/automl v1.7.0/go.mod h1:RL9MYCCsJEOmt0Wf3z9uzG0a7adTT1fe+aObgSpkCt8= +cloud.google.com/go/automl v1.8.0/go.mod h1:xWx7G/aPEe/NP+qzYXktoBSDfjO+vnKMGgsApGJJquM= +cloud.google.com/go/automl v1.12.0/go.mod h1:tWDcHDp86aMIuHmyvjuKeeHEGq76lD7ZqfGLN6B0NuU= +cloud.google.com/go/automl v1.13.1/go.mod h1:1aowgAHWYZU27MybSCFiukPO7xnyawv7pt3zK4bheQE= +cloud.google.com/go/automl v1.13.2/go.mod h1:gNY/fUmDEN40sP8amAX3MaXkxcqPIn7F1UIIPZpy4Mg= +cloud.google.com/go/automl v1.13.3/go.mod h1:Y8KwvyAZFOsMAPqUCfNu1AyclbC6ivCUF/MTwORymyY= +cloud.google.com/go/automl v1.13.4/go.mod h1:ULqwX/OLZ4hBVfKQaMtxMSTlPx0GqGbWN8uA/1EqCP8= +cloud.google.com/go/automl v1.13.5/go.mod h1:MDw3vLem3yh+SvmSgeYUmUKqyls6NzSumDm9OJ3xJ1Y= +cloud.google.com/go/baremetalsolution v0.3.0/go.mod h1:XOrocE+pvK1xFfleEnShBlNAXf+j5blPPxrhjKgnIFc= +cloud.google.com/go/baremetalsolution v0.4.0/go.mod h1:BymplhAadOO/eBa7KewQ0Ppg4A4Wplbn+PsFKRLo0uI= +cloud.google.com/go/baremetalsolution v0.5.0/go.mod h1:dXGxEkmR9BMwxhzBhV0AioD0ULBmuLZI8CdwalUxuss= +cloud.google.com/go/baremetalsolution v1.1.1/go.mod h1:D1AV6xwOksJMV4OSlWHtWuFNZZYujJknMAP4Qa27QIA= +cloud.google.com/go/baremetalsolution v1.2.0/go.mod h1:68wi9AwPYkEWIUT4SvSGS9UJwKzNpshjHsH4lzk8iOw= +cloud.google.com/go/baremetalsolution v1.2.1/go.mod h1:3qKpKIw12RPXStwQXcbhfxVj1dqQGEvcmA+SX/mUR88= +cloud.google.com/go/baremetalsolution v1.2.2/go.mod h1:O5V6Uu1vzVelYahKfwEWRMaS3AbCkeYHy3145s1FkhM= +cloud.google.com/go/baremetalsolution v1.2.3/go.mod h1:/UAQ5xG3faDdy180rCUv47e0jvpp3BFxT+Cl0PFjw5g= +cloud.google.com/go/baremetalsolution v1.2.4/go.mod h1:BHCmxgpevw9IEryE99HbYEfxXkAEA3hkMJbYYsHtIuY= +cloud.google.com/go/batch v0.3.0/go.mod h1:TR18ZoAekj1GuirsUsR1ZTKN3FC/4UDnScjT8NXImFE= +cloud.google.com/go/batch v0.4.0/go.mod h1:WZkHnP43R/QCGQsZ+0JyG4i79ranE2u8xvjq/9+STPE= +cloud.google.com/go/batch v0.7.0/go.mod h1:vLZN95s6teRUqRQ4s3RLDsH8PvboqBK+rn1oevL159g= +cloud.google.com/go/batch v1.3.1/go.mod h1:VguXeQKXIYaeeIYbuozUmBR13AfL4SJP7IltNPS+A4A= +cloud.google.com/go/batch v1.4.1/go.mod h1:KdBmDD61K0ovcxoRHGrN6GmOBWeAOyCgKD0Mugx4Fkk= +cloud.google.com/go/batch v1.5.0/go.mod h1:KdBmDD61K0ovcxoRHGrN6GmOBWeAOyCgKD0Mugx4Fkk= +cloud.google.com/go/batch v1.5.1/go.mod h1:RpBuIYLkQu8+CWDk3dFD/t/jOCGuUpkpX+Y0n1Xccs8= +cloud.google.com/go/batch v1.6.1/go.mod h1:urdpD13zPe6YOK+6iZs/8/x2VBRofvblLpx0t57vM98= +cloud.google.com/go/batch v1.6.3/go.mod h1:J64gD4vsNSA2O5TtDB5AAux3nJ9iV8U3ilg3JDBYejU= +cloud.google.com/go/batch v1.7.0/go.mod h1:J64gD4vsNSA2O5TtDB5AAux3nJ9iV8U3ilg3JDBYejU= +cloud.google.com/go/batch v1.8.0/go.mod h1:k8V7f6VE2Suc0zUM4WtoibNrA6D3dqBpB+++e3vSGYc= +cloud.google.com/go/beyondcorp v0.2.0/go.mod h1:TB7Bd+EEtcw9PCPQhCJtJGjk/7TC6ckmnSFS+xwTfm4= +cloud.google.com/go/beyondcorp v0.3.0/go.mod h1:E5U5lcrcXMsCuoDNyGrpyTm/hn7ne941Jz2vmksAxW8= +cloud.google.com/go/beyondcorp v0.4.0/go.mod h1:3ApA0mbhHx6YImmuubf5pyW8srKnCEPON32/5hj+RmM= +cloud.google.com/go/beyondcorp v0.5.0/go.mod h1:uFqj9X+dSfrheVp7ssLTaRHd2EHqSL4QZmH4e8WXGGU= +cloud.google.com/go/beyondcorp v0.6.1/go.mod h1:YhxDWw946SCbmcWo3fAhw3V4XZMSpQ/VYfcKGAEU8/4= +cloud.google.com/go/beyondcorp v1.0.0/go.mod h1:YhxDWw946SCbmcWo3fAhw3V4XZMSpQ/VYfcKGAEU8/4= +cloud.google.com/go/beyondcorp v1.0.1/go.mod h1:zl/rWWAFVeV+kx+X2Javly7o1EIQThU4WlkynffL/lk= +cloud.google.com/go/beyondcorp v1.0.2/go.mod h1:m8cpG7caD+5su+1eZr+TSvF6r21NdLJk4f9u4SP2Ntc= +cloud.google.com/go/beyondcorp v1.0.3/go.mod h1:HcBvnEd7eYr+HGDd5ZbuVmBYX019C6CEXBonXbCVwJo= +cloud.google.com/go/beyondcorp v1.0.4/go.mod h1:Gx8/Rk2MxrvWfn4WIhHIG1NV7IBfg14pTKv1+EArVcc= +cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= +cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= +cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= +cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= +cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= +cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= +cloud.google.com/go/bigquery v1.42.0/go.mod h1:8dRTJxhtG+vwBKzE5OseQn/hiydoQN3EedCaOdYmxRA= +cloud.google.com/go/bigquery v1.43.0/go.mod h1:ZMQcXHsl+xmU1z36G2jNGZmKp9zNY5BUua5wDgmNCfw= +cloud.google.com/go/bigquery v1.44.0/go.mod h1:0Y33VqXTEsbamHJvJHdFmtqHvMIY28aK1+dFsvaChGc= +cloud.google.com/go/bigquery v1.47.0/go.mod h1:sA9XOgy0A8vQK9+MWhEQTY6Tix87M/ZurWFIxmF9I/E= +cloud.google.com/go/bigquery v1.48.0/go.mod h1:QAwSz+ipNgfL5jxiaK7weyOhzdoAy1zFm0Nf1fysJac= +cloud.google.com/go/bigquery v1.49.0/go.mod h1:Sv8hMmTFFYBlt/ftw2uN6dFdQPzBlREY9yBh7Oy7/4Q= +cloud.google.com/go/bigquery v1.50.0/go.mod h1:YrleYEh2pSEbgTBZYMJ5SuSr0ML3ypjRB1zgf7pvQLU= +cloud.google.com/go/bigquery v1.52.0/go.mod h1:3b/iXjRQGU4nKa87cXeg6/gogLjO8C6PmuM8i5Bi/u4= +cloud.google.com/go/bigquery v1.53.0/go.mod h1:3b/iXjRQGU4nKa87cXeg6/gogLjO8C6PmuM8i5Bi/u4= +cloud.google.com/go/bigquery v1.55.0/go.mod h1:9Y5I3PN9kQWuid6183JFhOGOW3GcirA5LpsKCUn+2ec= +cloud.google.com/go/bigquery v1.56.0/go.mod h1:KDcsploXTEY7XT3fDQzMUZlpQLHzE4itubHrnmhUrZA= +cloud.google.com/go/bigquery v1.57.1/go.mod h1:iYzC0tGVWt1jqSzBHqCr3lrRn0u13E8e+AqowBsDgug= +cloud.google.com/go/bigquery v1.58.0/go.mod h1:0eh4mWNY0KrBTjUzLjoYImapGORq9gEPT7MWjCy9lik= +cloud.google.com/go/bigquery v1.59.1/go.mod h1:VP1UJYgevyTwsV7desjzNzDND5p6hZB+Z8gZJN1GQUc= +cloud.google.com/go/billing v1.4.0/go.mod h1:g9IdKBEFlItS8bTtlrZdVLWSSdSyFUZKXNS02zKMOZY= +cloud.google.com/go/billing v1.5.0/go.mod h1:mztb1tBc3QekhjSgmpf/CV4LzWXLzCArwpLmP2Gm88s= +cloud.google.com/go/billing v1.6.0/go.mod h1:WoXzguj+BeHXPbKfNWkqVtDdzORazmCjraY+vrxcyvI= +cloud.google.com/go/billing v1.7.0/go.mod h1:q457N3Hbj9lYwwRbnlD7vUpyjq6u5U1RAOArInEiD5Y= +cloud.google.com/go/billing v1.12.0/go.mod h1:yKrZio/eu+okO/2McZEbch17O5CB5NpZhhXG6Z766ss= +cloud.google.com/go/billing v1.13.0/go.mod h1:7kB2W9Xf98hP9Sr12KfECgfGclsH3CQR0R08tnRlRbc= +cloud.google.com/go/billing v1.16.0/go.mod h1:y8vx09JSSJG02k5QxbycNRrN7FGZB6F3CAcgum7jvGA= +cloud.google.com/go/billing v1.17.0/go.mod h1:Z9+vZXEq+HwH7bhJkyI4OQcR6TSbeMrjlpEjO2vzY64= +cloud.google.com/go/billing v1.17.1/go.mod h1:Z9+vZXEq+HwH7bhJkyI4OQcR6TSbeMrjlpEjO2vzY64= +cloud.google.com/go/billing v1.17.2/go.mod h1:u/AdV/3wr3xoRBk5xvUzYMS1IawOAPwQMuHgHMdljDg= +cloud.google.com/go/billing v1.17.3/go.mod h1:z83AkoZ7mZwBGT3yTnt6rSGI1OOsHSIi6a5M3mJ8NaU= +cloud.google.com/go/billing v1.17.4/go.mod h1:5DOYQStCxquGprqfuid/7haD7th74kyMBHkjO/OvDtk= +cloud.google.com/go/billing v1.18.0/go.mod h1:5DOYQStCxquGprqfuid/7haD7th74kyMBHkjO/OvDtk= +cloud.google.com/go/billing v1.18.2/go.mod h1:PPIwVsOOQ7xzbADCwNe8nvK776QpfrOAUkvKjCUcpSE= +cloud.google.com/go/binaryauthorization v1.1.0/go.mod h1:xwnoWu3Y84jbuHa0zd526MJYmtnVXn0syOjaJgy4+dM= +cloud.google.com/go/binaryauthorization v1.2.0/go.mod h1:86WKkJHtRcv5ViNABtYMhhNWRrD1Vpi//uKEy7aYEfI= +cloud.google.com/go/binaryauthorization v1.3.0/go.mod h1:lRZbKgjDIIQvzYQS1p99A7/U1JqvqeZg0wiI5tp6tg0= +cloud.google.com/go/binaryauthorization v1.4.0/go.mod h1:tsSPQrBd77VLplV70GUhBf/Zm3FsKmgSqgm4UmiDItk= +cloud.google.com/go/binaryauthorization v1.5.0/go.mod h1:OSe4OU1nN/VswXKRBmciKpo9LulY41gch5c68htf3/Q= +cloud.google.com/go/binaryauthorization v1.6.1/go.mod h1:TKt4pa8xhowwffiBmbrbcxijJRZED4zrqnwZ1lKH51U= +cloud.google.com/go/binaryauthorization v1.7.0/go.mod h1:Zn+S6QqTMn6odcMU1zDZCJxPjU2tZPV1oDl45lWY154= +cloud.google.com/go/binaryauthorization v1.7.1/go.mod h1:GTAyfRWYgcbsP3NJogpV3yeunbUIjx2T9xVeYovtURE= +cloud.google.com/go/binaryauthorization v1.7.2/go.mod h1:kFK5fQtxEp97m92ziy+hbu+uKocka1qRRL8MVJIgjv0= +cloud.google.com/go/binaryauthorization v1.7.3/go.mod h1:VQ/nUGRKhrStlGr+8GMS8f6/vznYLkdK5vaKfdCIpvU= +cloud.google.com/go/binaryauthorization v1.8.0/go.mod h1:VQ/nUGRKhrStlGr+8GMS8f6/vznYLkdK5vaKfdCIpvU= +cloud.google.com/go/binaryauthorization v1.8.1/go.mod h1:1HVRyBerREA/nhI7yLang4Zn7vfNVA3okoAR9qYQJAQ= +cloud.google.com/go/certificatemanager v1.3.0/go.mod h1:n6twGDvcUBFu9uBgt4eYvvf3sQ6My8jADcOVwHmzadg= +cloud.google.com/go/certificatemanager v1.4.0/go.mod h1:vowpercVFyqs8ABSmrdV+GiFf2H/ch3KyudYQEMM590= +cloud.google.com/go/certificatemanager v1.6.0/go.mod h1:3Hh64rCKjRAX8dXgRAyOcY5vQ/fE1sh8o+Mdd6KPgY8= +cloud.google.com/go/certificatemanager v1.7.1/go.mod h1:iW8J3nG6SaRYImIa+wXQ0g8IgoofDFRp5UMzaNk1UqI= +cloud.google.com/go/certificatemanager v1.7.2/go.mod h1:15SYTDQMd00kdoW0+XY5d9e+JbOPjp24AvF48D8BbcQ= +cloud.google.com/go/certificatemanager v1.7.3/go.mod h1:T/sZYuC30PTag0TLo28VedIRIj1KPGcOQzjWAptHa00= +cloud.google.com/go/certificatemanager v1.7.4/go.mod h1:FHAylPe/6IIKuaRmHbjbdLhGhVQ+CWHSD5Jq0k4+cCE= +cloud.google.com/go/certificatemanager v1.7.5/go.mod h1:uX+v7kWqy0Y3NG/ZhNvffh0kuqkKZIXdvlZRO7z0VtM= +cloud.google.com/go/channel v1.8.0/go.mod h1:W5SwCXDJsq/rg3tn3oG0LOxpAo6IMxNa09ngphpSlnk= +cloud.google.com/go/channel v1.9.0/go.mod h1:jcu05W0my9Vx4mt3/rEHpfxc9eKi9XwsdDL8yBMbKUk= +cloud.google.com/go/channel v1.11.0/go.mod h1:IdtI0uWGqhEeatSB62VOoJ8FSUhJ9/+iGkJVqp74CGE= +cloud.google.com/go/channel v1.12.0/go.mod h1:VkxCGKASi4Cq7TbXxlaBezonAYpp1GCnKMY6tnMQnLU= +cloud.google.com/go/channel v1.16.0/go.mod h1:eN/q1PFSl5gyu0dYdmxNXscY/4Fi7ABmeHCJNf/oHmc= +cloud.google.com/go/channel v1.17.0/go.mod h1:RpbhJsGi/lXWAUM1eF4IbQGbsfVlg2o8Iiy2/YLfVT0= +cloud.google.com/go/channel v1.17.1/go.mod h1:xqfzcOZAcP4b/hUDH0GkGg1Sd5to6di1HOJn/pi5uBQ= +cloud.google.com/go/channel v1.17.2/go.mod h1:aT2LhnftnyfQceFql5I/mP8mIbiiJS4lWqgXA815zMk= +cloud.google.com/go/channel v1.17.3/go.mod h1:QcEBuZLGGrUMm7kNj9IbU1ZfmJq2apotsV83hbxX7eE= +cloud.google.com/go/channel v1.17.4/go.mod h1:QcEBuZLGGrUMm7kNj9IbU1ZfmJq2apotsV83hbxX7eE= +cloud.google.com/go/channel v1.17.5/go.mod h1:FlpaOSINDAXgEext0KMaBq/vwpLMkkPAw9b2mApQeHc= +cloud.google.com/go/cloudbuild v1.3.0/go.mod h1:WequR4ULxlqvMsjDEEEFnOG5ZSRSgWOywXYDb1vPE6U= +cloud.google.com/go/cloudbuild v1.4.0/go.mod h1:5Qwa40LHiOXmz3386FrjrYM93rM/hdRr7b53sySrTqA= +cloud.google.com/go/cloudbuild v1.6.0/go.mod h1:UIbc/w9QCbH12xX+ezUsgblrWv+Cv4Tw83GiSMHOn9M= +cloud.google.com/go/cloudbuild v1.7.0/go.mod h1:zb5tWh2XI6lR9zQmsm1VRA+7OCuve5d8S+zJUul8KTg= +cloud.google.com/go/cloudbuild v1.9.0/go.mod h1:qK1d7s4QlO0VwfYn5YuClDGg2hfmLZEb4wQGAbIgL1s= +cloud.google.com/go/cloudbuild v1.10.1/go.mod h1:lyJg7v97SUIPq4RC2sGsz/9tNczhyv2AjML/ci4ulzU= +cloud.google.com/go/cloudbuild v1.13.0/go.mod h1:lyJg7v97SUIPq4RC2sGsz/9tNczhyv2AjML/ci4ulzU= +cloud.google.com/go/cloudbuild v1.14.0/go.mod h1:lyJg7v97SUIPq4RC2sGsz/9tNczhyv2AjML/ci4ulzU= +cloud.google.com/go/cloudbuild v1.14.1/go.mod h1:K7wGc/3zfvmYWOWwYTgF/d/UVJhS4pu+HAy7PL7mCsU= +cloud.google.com/go/cloudbuild v1.14.2/go.mod h1:Bn6RO0mBYk8Vlrt+8NLrru7WXlQ9/RDWz2uo5KG1/sg= +cloud.google.com/go/cloudbuild v1.14.3/go.mod h1:eIXYWmRt3UtggLnFGx4JvXcMj4kShhVzGndL1LwleEM= +cloud.google.com/go/cloudbuild v1.15.0/go.mod h1:eIXYWmRt3UtggLnFGx4JvXcMj4kShhVzGndL1LwleEM= +cloud.google.com/go/cloudbuild v1.15.1/go.mod h1:gIofXZSu+XD2Uy+qkOrGKEx45zd7s28u/k8f99qKals= +cloud.google.com/go/clouddms v1.3.0/go.mod h1:oK6XsCDdW4Ib3jCCBugx+gVjevp2TMXFtgxvPSee3OM= +cloud.google.com/go/clouddms v1.4.0/go.mod h1:Eh7sUGCC+aKry14O1NRljhjyrr0NFC0G2cjwX0cByRk= +cloud.google.com/go/clouddms v1.5.0/go.mod h1:QSxQnhikCLUw13iAbffF2CZxAER3xDGNHjsTAkQJcQA= +cloud.google.com/go/clouddms v1.6.1/go.mod h1:Ygo1vL52Ov4TBZQquhz5fiw2CQ58gvu+PlS6PVXCpZI= +cloud.google.com/go/clouddms v1.7.0/go.mod h1:MW1dC6SOtI/tPNCciTsXtsGNEM0i0OccykPvv3hiYeM= +cloud.google.com/go/clouddms v1.7.1/go.mod h1:o4SR8U95+P7gZ/TX+YbJxehOCsM+fe6/brlrFquiszk= +cloud.google.com/go/clouddms v1.7.2/go.mod h1:Rk32TmWmHo64XqDvW7jgkFQet1tUKNVzs7oajtJT3jU= +cloud.google.com/go/clouddms v1.7.3/go.mod h1:fkN2HQQNUYInAU3NQ3vRLkV2iWs8lIdmBKOx4nrL6Hc= +cloud.google.com/go/clouddms v1.7.4/go.mod h1:RdrVqoFG9RWI5AvZ81SxJ/xvxPdtcRhFotwdE79DieY= +cloud.google.com/go/cloudtasks v1.5.0/go.mod h1:fD92REy1x5woxkKEkLdvavGnPJGEn8Uic9nWuLzqCpY= +cloud.google.com/go/cloudtasks v1.6.0/go.mod h1:C6Io+sxuke9/KNRkbQpihnW93SWDU3uXt92nu85HkYI= +cloud.google.com/go/cloudtasks v1.7.0/go.mod h1:ImsfdYWwlWNJbdgPIIGJWC+gemEGTBK/SunNQQNCAb4= +cloud.google.com/go/cloudtasks v1.8.0/go.mod h1:gQXUIwCSOI4yPVK7DgTVFiiP0ZW/eQkydWzwVMdHxrI= +cloud.google.com/go/cloudtasks v1.9.0/go.mod h1:w+EyLsVkLWHcOaqNEyvcKAsWp9p29dL6uL9Nst1cI7Y= +cloud.google.com/go/cloudtasks v1.10.0/go.mod h1:NDSoTLkZ3+vExFEWu2UJV1arUyzVDAiZtdWcsUyNwBs= +cloud.google.com/go/cloudtasks v1.11.1/go.mod h1:a9udmnou9KO2iulGscKR0qBYjreuX8oHwpmFsKspEvM= +cloud.google.com/go/cloudtasks v1.12.1/go.mod h1:a9udmnou9KO2iulGscKR0qBYjreuX8oHwpmFsKspEvM= +cloud.google.com/go/cloudtasks v1.12.2/go.mod h1:A7nYkjNlW2gUoROg1kvJrQGhJP/38UaWwsnuBDOBVUk= +cloud.google.com/go/cloudtasks v1.12.3/go.mod h1:GPVXhIOSGEaR+3xT4Fp72ScI+HjHffSS4B8+BaBB5Ys= +cloud.google.com/go/cloudtasks v1.12.4/go.mod h1:BEPu0Gtt2dU6FxZHNqqNdGqIG86qyWKBPGnsb7udGY0= +cloud.google.com/go/cloudtasks v1.12.6/go.mod h1:b7c7fe4+TJsFZfDyzO51F7cjq7HLUlRi/KZQLQjDsaY= +cloud.google.com/go/compute v0.1.0/go.mod h1:GAesmwr110a34z04OlxYkATPBEfVhkymfTBXtfbBFow= +cloud.google.com/go/compute v1.3.0/go.mod h1:cCZiE1NHEtai4wiufUhW8I8S1JKkAnhnQJWM7YD99wM= +cloud.google.com/go/compute v1.5.0/go.mod h1:9SMHyhJlzhlkJqrPAc839t2BZFTSk6Jdj6mkzQJeu0M= +cloud.google.com/go/compute v1.6.0/go.mod h1:T29tfhtVbq1wvAPo0E3+7vhgmkOYeXjhFvz/FMzPu0s= +cloud.google.com/go/compute v1.6.1/go.mod h1:g85FgpzFvNULZ+S8AYq87axRKuf2Kh7deLqV/jJ3thU= +cloud.google.com/go/compute v1.7.0/go.mod h1:435lt8av5oL9P3fv1OEzSbSUe+ybHXGMPQHHZWZxy9U= +cloud.google.com/go/compute v1.10.0/go.mod h1:ER5CLbMxl90o2jtNbGSbtfOpQKR0t15FOtRsugnLrlU= +cloud.google.com/go/compute v1.12.0/go.mod h1:e8yNOBcBONZU1vJKCvCoDw/4JQsA0dpM4x/6PIIOocU= +cloud.google.com/go/compute v1.12.1/go.mod h1:e8yNOBcBONZU1vJKCvCoDw/4JQsA0dpM4x/6PIIOocU= +cloud.google.com/go/compute v1.13.0/go.mod h1:5aPTS0cUNMIc1CE546K+Th6weJUNQErARyZtRXDJ8GE= +cloud.google.com/go/compute v1.14.0/go.mod h1:YfLtxrj9sU4Yxv+sXzZkyPjEyPBZfXHUvjxega5vAdo= +cloud.google.com/go/compute v1.15.1/go.mod h1:bjjoF/NtFUrkD/urWfdHaKuOPDR5nWIs63rR+SXhcpA= +cloud.google.com/go/compute v1.18.0/go.mod h1:1X7yHxec2Ga+Ss6jPyjxRxpu2uu7PLgsOVXvgU0yacs= +cloud.google.com/go/compute v1.19.0/go.mod h1:rikpw2y+UMidAe9tISo04EHNOIf42RLYF/q8Bs93scU= +cloud.google.com/go/compute v1.19.1/go.mod h1:6ylj3a05WF8leseCdIf77NK0g1ey+nj5IKd5/kvShxE= +cloud.google.com/go/compute v1.19.3/go.mod h1:qxvISKp/gYnXkSAD1ppcSOveRAmzxicEv/JlizULFrI= +cloud.google.com/go/compute v1.20.1/go.mod h1:4tCnrn48xsqlwSAiLf1HXMQk8CONslYbdiEZc9FEIbM= +cloud.google.com/go/compute v1.21.0/go.mod h1:4tCnrn48xsqlwSAiLf1HXMQk8CONslYbdiEZc9FEIbM= +cloud.google.com/go/compute v1.23.0/go.mod h1:4tCnrn48xsqlwSAiLf1HXMQk8CONslYbdiEZc9FEIbM= +cloud.google.com/go/compute v1.23.1/go.mod h1:CqB3xpmPKKt3OJpW2ndFIXnA9A4xAy/F3Xp1ixncW78= +cloud.google.com/go/compute v1.23.2/go.mod h1:JJ0atRC0J/oWYiiVBmsSsrRnh92DhZPG4hFDcR04Rns= +cloud.google.com/go/compute v1.23.3/go.mod h1:VCgBUoMnIVIR0CscqQiPJLAG25E3ZRZMzcFZeQ+h8CI= +cloud.google.com/go/compute v1.23.4/go.mod h1:/EJMj55asU6kAFnuZET8zqgwgJ9FvXWXOkkfQZa4ioI= +cloud.google.com/go/compute v1.24.0/go.mod h1:kw1/T+h/+tK2LJK0wiPPx1intgdAM3j/g3hFDlscY40= +cloud.google.com/go/compute v1.25.1/go.mod h1:oopOIR53ly6viBYxaDhBfJwzUAxf1zE//uf3IB011ls= +cloud.google.com/go/compute/metadata v0.1.0/go.mod h1:Z1VN+bulIf6bt4P/C37K4DyZYZEXYonfTBHHFPO/4UU= +cloud.google.com/go/compute/metadata v0.2.0/go.mod h1:zFmK7XCadkQkj6TtorcaGlCW1hT1fIilQDwofLpJ20k= +cloud.google.com/go/compute/metadata v0.2.1/go.mod h1:jgHgmJd2RKBGzXqF5LR2EZMGxBkeanZ9wwa75XHJgOM= +cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA= +cloud.google.com/go/compute/metadata v0.3.0/go.mod h1:zFmK7XCadkQkj6TtorcaGlCW1hT1fIilQDwofLpJ20k= +cloud.google.com/go/contactcenterinsights v1.3.0/go.mod h1:Eu2oemoePuEFc/xKFPjbTuPSj0fYJcPls9TFlPNnHHY= +cloud.google.com/go/contactcenterinsights v1.4.0/go.mod h1:L2YzkGbPsv+vMQMCADxJoT9YiTTnSEd6fEvCeHTYVck= +cloud.google.com/go/contactcenterinsights v1.6.0/go.mod h1:IIDlT6CLcDoyv79kDv8iWxMSTZhLxSCofVV5W6YFM/w= +cloud.google.com/go/contactcenterinsights v1.9.1/go.mod h1:bsg/R7zGLYMVxFFzfh9ooLTruLRCG9fnzhH9KznHhbM= +cloud.google.com/go/contactcenterinsights v1.10.0/go.mod h1:bsg/R7zGLYMVxFFzfh9ooLTruLRCG9fnzhH9KznHhbM= +cloud.google.com/go/contactcenterinsights v1.11.0/go.mod h1:hutBdImE4XNZ1NV4vbPJKSFOnQruhC5Lj9bZqWMTKiU= +cloud.google.com/go/contactcenterinsights v1.11.1/go.mod h1:FeNP3Kg8iteKM80lMwSk3zZZKVxr+PGnAId6soKuXwE= +cloud.google.com/go/contactcenterinsights v1.11.2/go.mod h1:A9PIR5ov5cRcd28KlDbmmXE8Aay+Gccer2h4wzkYFso= +cloud.google.com/go/contactcenterinsights v1.11.3/go.mod h1:HHX5wrz5LHVAwfI2smIotQG9x8Qd6gYilaHcLLLmNis= +cloud.google.com/go/contactcenterinsights v1.12.0/go.mod h1:HHX5wrz5LHVAwfI2smIotQG9x8Qd6gYilaHcLLLmNis= +cloud.google.com/go/contactcenterinsights v1.12.1/go.mod h1:HHX5wrz5LHVAwfI2smIotQG9x8Qd6gYilaHcLLLmNis= +cloud.google.com/go/contactcenterinsights v1.13.0/go.mod h1:ieq5d5EtHsu8vhe2y3amtZ+BE+AQwX5qAy7cpo0POsI= +cloud.google.com/go/container v1.6.0/go.mod h1:Xazp7GjJSeUYo688S+6J5V+n/t+G5sKBTFkKNudGRxg= +cloud.google.com/go/container v1.7.0/go.mod h1:Dp5AHtmothHGX3DwwIHPgq45Y8KmNsgN3amoYfxVkLo= +cloud.google.com/go/container v1.13.1/go.mod h1:6wgbMPeQRw9rSnKBCAJXnds3Pzj03C4JHamr8asWKy4= +cloud.google.com/go/container v1.14.0/go.mod h1:3AoJMPhHfLDxLvrlVWaK57IXzaPnLaZq63WX59aQBfM= +cloud.google.com/go/container v1.15.0/go.mod h1:ft+9S0WGjAyjDggg5S06DXj+fHJICWg8L7isCQe9pQA= +cloud.google.com/go/container v1.22.1/go.mod h1:lTNExE2R7f+DLbAN+rJiKTisauFCaoDq6NURZ83eVH4= +cloud.google.com/go/container v1.24.0/go.mod h1:lTNExE2R7f+DLbAN+rJiKTisauFCaoDq6NURZ83eVH4= +cloud.google.com/go/container v1.26.0/go.mod h1:YJCmRet6+6jnYYRS000T6k0D0xUXQgBSaJ7VwI8FBj4= +cloud.google.com/go/container v1.26.1/go.mod h1:5smONjPRUxeEpDG7bMKWfDL4sauswqEtnBK1/KKpR04= +cloud.google.com/go/container v1.26.2/go.mod h1:YlO84xCt5xupVbLaMY4s3XNE79MUJ+49VmkInr6HvF4= +cloud.google.com/go/container v1.27.1/go.mod h1:b1A1gJeTBXVLQ6GGw9/9M4FG94BEGsqJ5+t4d/3N7O4= +cloud.google.com/go/container v1.28.0/go.mod h1:b1A1gJeTBXVLQ6GGw9/9M4FG94BEGsqJ5+t4d/3N7O4= +cloud.google.com/go/container v1.29.0/go.mod h1:b1A1gJeTBXVLQ6GGw9/9M4FG94BEGsqJ5+t4d/3N7O4= +cloud.google.com/go/container v1.30.1/go.mod h1:vkbfX0EnAKL/vgVECs5BZn24e1cJROzgszJirRKQ4Bg= +cloud.google.com/go/container v1.31.0/go.mod h1:7yABn5s3Iv3lmw7oMmyGbeV6tQj86njcTijkkGuvdZA= +cloud.google.com/go/containeranalysis v0.5.1/go.mod h1:1D92jd8gRR/c0fGMlymRgxWD3Qw9C1ff6/T7mLgVL8I= +cloud.google.com/go/containeranalysis v0.6.0/go.mod h1:HEJoiEIu+lEXM+k7+qLCci0h33lX3ZqoYFdmPcoO7s4= +cloud.google.com/go/containeranalysis v0.7.0/go.mod h1:9aUL+/vZ55P2CXfuZjS4UjQ9AgXoSw8Ts6lemfmxBxI= +cloud.google.com/go/containeranalysis v0.9.0/go.mod h1:orbOANbwk5Ejoom+s+DUCTTJ7IBdBQJDcSylAx/on9s= +cloud.google.com/go/containeranalysis v0.10.1/go.mod h1:Ya2jiILITMY68ZLPaogjmOMNkwsDrWBSTyBubGXO7j0= +cloud.google.com/go/containeranalysis v0.11.0/go.mod h1:4n2e99ZwpGxpNcz+YsFT1dfOHPQFGcAC8FN2M2/ne/U= +cloud.google.com/go/containeranalysis v0.11.1/go.mod h1:rYlUOM7nem1OJMKwE1SadufX0JP3wnXj844EtZAwWLY= +cloud.google.com/go/containeranalysis v0.11.2/go.mod h1:xibioGBC1MD2j4reTyV1xY1/MvKaz+fyM9ENWhmIeP8= +cloud.google.com/go/containeranalysis v0.11.3/go.mod h1:kMeST7yWFQMGjiG9K7Eov+fPNQcGhb8mXj/UcTiWw9U= +cloud.google.com/go/containeranalysis v0.11.4/go.mod h1:cVZT7rXYBS9NG1rhQbWL9pWbXCKHWJPYraE8/FTSYPE= +cloud.google.com/go/datacatalog v1.3.0/go.mod h1:g9svFY6tuR+j+hrTw3J2dNcmI0dzmSiyOzm8kpLq0a0= +cloud.google.com/go/datacatalog v1.5.0/go.mod h1:M7GPLNQeLfWqeIm3iuiruhPzkt65+Bx8dAKvScX8jvs= +cloud.google.com/go/datacatalog v1.6.0/go.mod h1:+aEyF8JKg+uXcIdAmmaMUmZ3q1b/lKLtXCmXdnc0lbc= +cloud.google.com/go/datacatalog v1.7.0/go.mod h1:9mEl4AuDYWw81UGc41HonIHH7/sn52H0/tc8f8ZbZIE= +cloud.google.com/go/datacatalog v1.8.0/go.mod h1:KYuoVOv9BM8EYz/4eMFxrr4DUKhGIOXxZoKYF5wdISM= +cloud.google.com/go/datacatalog v1.8.1/go.mod h1:RJ58z4rMp3gvETA465Vg+ag8BGgBdnRPEMMSTr5Uv+M= +cloud.google.com/go/datacatalog v1.12.0/go.mod h1:CWae8rFkfp6LzLumKOnmVh4+Zle4A3NXLzVJ1d1mRm0= +cloud.google.com/go/datacatalog v1.13.0/go.mod h1:E4Rj9a5ZtAxcQJlEBTLgMTphfP11/lNaAshpoBgemX8= +cloud.google.com/go/datacatalog v1.14.0/go.mod h1:h0PrGtlihoutNMp/uvwhawLQ9+c63Kz65UFqh49Yo+E= +cloud.google.com/go/datacatalog v1.14.1/go.mod h1:d2CevwTG4yedZilwe+v3E3ZBDRMobQfSG/a6cCCN5R4= +cloud.google.com/go/datacatalog v1.16.0/go.mod h1:d2CevwTG4yedZilwe+v3E3ZBDRMobQfSG/a6cCCN5R4= +cloud.google.com/go/datacatalog v1.17.1/go.mod h1:nCSYFHgtxh2MiEktWIz71s/X+7ds/UT9kp0PC7waCzE= +cloud.google.com/go/datacatalog v1.18.0/go.mod h1:nCSYFHgtxh2MiEktWIz71s/X+7ds/UT9kp0PC7waCzE= +cloud.google.com/go/datacatalog v1.18.1/go.mod h1:TzAWaz+ON1tkNr4MOcak8EBHX7wIRX/gZKM+yTVsv+A= +cloud.google.com/go/datacatalog v1.18.2/go.mod h1:SPVgWW2WEMuWHA+fHodYjmxPiMqcOiWfhc9OD5msigk= +cloud.google.com/go/datacatalog v1.18.3/go.mod h1:5FR6ZIF8RZrtml0VUao22FxhdjkoG+a0866rEnObryM= +cloud.google.com/go/datacatalog v1.19.0/go.mod h1:5FR6ZIF8RZrtml0VUao22FxhdjkoG+a0866rEnObryM= +cloud.google.com/go/datacatalog v1.19.2/go.mod h1:2YbODwmhpLM4lOFe3PuEhHK9EyTzQJ5AXgIy7EDKTEE= +cloud.google.com/go/datacatalog v1.19.3/go.mod h1:ra8V3UAsciBpJKQ+z9Whkxzxv7jmQg1hfODr3N3YPJ4= +cloud.google.com/go/dataflow v0.6.0/go.mod h1:9QwV89cGoxjjSR9/r7eFDqqjtvbKxAK2BaYU6PVk9UM= +cloud.google.com/go/dataflow v0.7.0/go.mod h1:PX526vb4ijFMesO1o202EaUmouZKBpjHsTlCtB4parQ= +cloud.google.com/go/dataflow v0.8.0/go.mod h1:Rcf5YgTKPtQyYz8bLYhFoIV/vP39eL7fWNcSOyFfLJE= +cloud.google.com/go/dataflow v0.9.1/go.mod h1:Wp7s32QjYuQDWqJPFFlnBKhkAtiFpMTdg00qGbnIHVw= +cloud.google.com/go/dataflow v0.9.2/go.mod h1:vBfdBZ/ejlTaYIGB3zB4T08UshH70vbtZeMD+urnUSo= +cloud.google.com/go/dataflow v0.9.3/go.mod h1:HI4kMVjcHGTs3jTHW/kv3501YW+eloiJSLxkJa/vqFE= +cloud.google.com/go/dataflow v0.9.4/go.mod h1:4G8vAkHYCSzU8b/kmsoR2lWyHJD85oMJPHMtan40K8w= +cloud.google.com/go/dataflow v0.9.5/go.mod h1:udl6oi8pfUHnL0z6UN9Lf9chGqzDMVqcYTcZ1aPnCZQ= +cloud.google.com/go/dataform v0.3.0/go.mod h1:cj8uNliRlHpa6L3yVhDOBrUXH+BPAO1+KFMQQNSThKo= +cloud.google.com/go/dataform v0.4.0/go.mod h1:fwV6Y4Ty2yIFL89huYlEkwUPtS7YZinZbzzj5S9FzCE= +cloud.google.com/go/dataform v0.5.0/go.mod h1:GFUYRe8IBa2hcomWplodVmUx/iTL0FrsauObOM3Ipr0= +cloud.google.com/go/dataform v0.6.0/go.mod h1:QPflImQy33e29VuapFdf19oPbE4aYTJxr31OAPV+ulA= +cloud.google.com/go/dataform v0.7.0/go.mod h1:7NulqnVozfHvWUBpMDfKMUESr+85aJsC/2O0o3jWPDE= +cloud.google.com/go/dataform v0.8.1/go.mod h1:3BhPSiw8xmppbgzeBbmDvmSWlwouuJkXsXsb8UBih9M= +cloud.google.com/go/dataform v0.8.2/go.mod h1:X9RIqDs6NbGPLR80tnYoPNiO1w0wenKTb8PxxlhTMKM= +cloud.google.com/go/dataform v0.8.3/go.mod h1:8nI/tvv5Fso0drO3pEjtowz58lodx8MVkdV2q0aPlqg= +cloud.google.com/go/dataform v0.9.1/go.mod h1:pWTg+zGQ7i16pyn0bS1ruqIE91SdL2FDMvEYu/8oQxs= +cloud.google.com/go/dataform v0.9.2/go.mod h1:S8cQUwPNWXo7m/g3DhWHsLBoufRNn9EgFrMgne2j7cI= +cloud.google.com/go/datafusion v1.4.0/go.mod h1:1Zb6VN+W6ALo85cXnM1IKiPw+yQMKMhB9TsTSRDo/38= +cloud.google.com/go/datafusion v1.5.0/go.mod h1:Kz+l1FGHB0J+4XF2fud96WMmRiq/wj8N9u007vyXZ2w= +cloud.google.com/go/datafusion v1.6.0/go.mod h1:WBsMF8F1RhSXvVM8rCV3AeyWVxcC2xY6vith3iw3S+8= +cloud.google.com/go/datafusion v1.7.1/go.mod h1:KpoTBbFmoToDExJUso/fcCiguGDk7MEzOWXUsJo0wsI= +cloud.google.com/go/datafusion v1.7.2/go.mod h1:62K2NEC6DRlpNmI43WHMWf9Vg/YvN6QVi8EVwifElI0= +cloud.google.com/go/datafusion v1.7.3/go.mod h1:eoLt1uFXKGBq48jy9LZ+Is8EAVLnmn50lNncLzwYokE= +cloud.google.com/go/datafusion v1.7.4/go.mod h1:BBs78WTOLYkT4GVZIXQCZT3GFpkpDN4aBY4NDX/jVlM= +cloud.google.com/go/datafusion v1.7.5/go.mod h1:bYH53Oa5UiqahfbNK9YuYKteeD4RbQSNMx7JF7peGHc= +cloud.google.com/go/datalabeling v0.5.0/go.mod h1:TGcJ0G2NzcsXSE/97yWjIZO0bXj0KbVlINXMG9ud42I= +cloud.google.com/go/datalabeling v0.6.0/go.mod h1:WqdISuk/+WIGeMkpw/1q7bK/tFEZxsrFJOJdY2bXvTQ= +cloud.google.com/go/datalabeling v0.7.0/go.mod h1:WPQb1y08RJbmpM3ww0CSUAGweL0SxByuW2E+FU+wXcM= +cloud.google.com/go/datalabeling v0.8.1/go.mod h1:XS62LBSVPbYR54GfYQsPXZjTW8UxCK2fkDciSrpRFdY= +cloud.google.com/go/datalabeling v0.8.2/go.mod h1:cyDvGHuJWu9U/cLDA7d8sb9a0tWLEletStu2sTmg3BE= +cloud.google.com/go/datalabeling v0.8.3/go.mod h1:tvPhpGyS/V7lqjmb3V0TaDdGvhzgR1JoW7G2bpi2UTI= +cloud.google.com/go/datalabeling v0.8.4/go.mod h1:Z1z3E6LHtffBGrNUkKwbwbDxTiXEApLzIgmymj8A3S8= +cloud.google.com/go/datalabeling v0.8.5/go.mod h1:IABB2lxQnkdUbMnQaOl2prCOfms20mcPxDBm36lps+s= +cloud.google.com/go/dataplex v1.3.0/go.mod h1:hQuRtDg+fCiFgC8j0zV222HvzFQdRd+SVX8gdmFcZzA= +cloud.google.com/go/dataplex v1.4.0/go.mod h1:X51GfLXEMVJ6UN47ESVqvlsRplbLhcsAt0kZCCKsU0A= +cloud.google.com/go/dataplex v1.5.2/go.mod h1:cVMgQHsmfRoI5KFYq4JtIBEUbYwc3c7tXmIDhRmNNVQ= +cloud.google.com/go/dataplex v1.6.0/go.mod h1:bMsomC/aEJOSpHXdFKFGQ1b0TDPIeL28nJObeO1ppRs= +cloud.google.com/go/dataplex v1.8.1/go.mod h1:7TyrDT6BCdI8/38Uvp0/ZxBslOslP2X2MPDucliyvSE= +cloud.google.com/go/dataplex v1.9.0/go.mod h1:7TyrDT6BCdI8/38Uvp0/ZxBslOslP2X2MPDucliyvSE= +cloud.google.com/go/dataplex v1.9.1/go.mod h1:7TyrDT6BCdI8/38Uvp0/ZxBslOslP2X2MPDucliyvSE= +cloud.google.com/go/dataplex v1.10.1/go.mod h1:1MzmBv8FvjYfc7vDdxhnLFNskikkB+3vl475/XdCDhs= +cloud.google.com/go/dataplex v1.10.2/go.mod h1:xdC8URdTrCrZMW6keY779ZT1cTOfV8KEPNsw+LTRT1Y= +cloud.google.com/go/dataplex v1.11.1/go.mod h1:mHJYQQ2VEJHsyoC0OdNyy988DvEbPhqFs5OOLffLX0c= +cloud.google.com/go/dataplex v1.11.2/go.mod h1:mHJYQQ2VEJHsyoC0OdNyy988DvEbPhqFs5OOLffLX0c= +cloud.google.com/go/dataplex v1.13.0/go.mod h1:mHJYQQ2VEJHsyoC0OdNyy988DvEbPhqFs5OOLffLX0c= +cloud.google.com/go/dataplex v1.14.0/go.mod h1:mHJYQQ2VEJHsyoC0OdNyy988DvEbPhqFs5OOLffLX0c= +cloud.google.com/go/dataplex v1.14.1/go.mod h1:bWxQAbg6Smg+sca2+Ex7s8D9a5qU6xfXtwmq4BVReps= +cloud.google.com/go/dataplex v1.14.2/go.mod h1:0oGOSFlEKef1cQeAHXy4GZPB/Ife0fz/PxBf+ZymA2U= +cloud.google.com/go/dataproc v1.7.0/go.mod h1:CKAlMjII9H90RXaMpSxQ8EU6dQx6iAYNPcYPOkSbi8s= +cloud.google.com/go/dataproc v1.8.0/go.mod h1:5OW+zNAH0pMpw14JVrPONsxMQYMBqJuzORhIBfBn9uI= +cloud.google.com/go/dataproc v1.12.0/go.mod h1:zrF3aX0uV3ikkMz6z4uBbIKyhRITnxvr4i3IjKsKrw4= +cloud.google.com/go/dataproc/v2 v2.0.1/go.mod h1:7Ez3KRHdFGcfY7GcevBbvozX+zyWGcwLJvvAMwCaoZ4= +cloud.google.com/go/dataproc/v2 v2.2.0/go.mod h1:lZR7AQtwZPvmINx5J87DSOOpTfof9LVZju6/Qo4lmcY= +cloud.google.com/go/dataproc/v2 v2.2.1/go.mod h1:QdAJLaBjh+l4PVlVZcmrmhGccosY/omC1qwfQ61Zv/o= +cloud.google.com/go/dataproc/v2 v2.2.2/go.mod h1:aocQywVmQVF4i8CL740rNI/ZRpsaaC1Wh2++BJ7HEJ4= +cloud.google.com/go/dataproc/v2 v2.2.3/go.mod h1:G5R6GBc9r36SXv/RtZIVfB8SipI+xVn0bX5SxUzVYbY= +cloud.google.com/go/dataproc/v2 v2.3.0/go.mod h1:G5R6GBc9r36SXv/RtZIVfB8SipI+xVn0bX5SxUzVYbY= +cloud.google.com/go/dataproc/v2 v2.4.0/go.mod h1:3B1Ht2aRB8VZIteGxQS/iNSJGzt9+CA0WGnDVMEm7Z4= +cloud.google.com/go/dataqna v0.5.0/go.mod h1:90Hyk596ft3zUQ8NkFfvICSIfHFh1Bc7C4cK3vbhkeo= +cloud.google.com/go/dataqna v0.6.0/go.mod h1:1lqNpM7rqNLVgWBJyk5NF6Uen2PHym0jtVJonplVsDA= +cloud.google.com/go/dataqna v0.7.0/go.mod h1:Lx9OcIIeqCrw1a6KdO3/5KMP1wAmTc0slZWwP12Qq3c= +cloud.google.com/go/dataqna v0.8.1/go.mod h1:zxZM0Bl6liMePWsHA8RMGAfmTG34vJMapbHAxQ5+WA8= +cloud.google.com/go/dataqna v0.8.2/go.mod h1:KNEqgx8TTmUipnQsScOoDpq/VlXVptUqVMZnt30WAPs= +cloud.google.com/go/dataqna v0.8.3/go.mod h1:wXNBW2uvc9e7Gl5k8adyAMnLush1KVV6lZUhB+rqNu4= +cloud.google.com/go/dataqna v0.8.4/go.mod h1:mySRKjKg5Lz784P6sCov3p1QD+RZQONRMRjzGNcFd0c= +cloud.google.com/go/dataqna v0.8.5/go.mod h1:vgihg1mz6n7pb5q2YJF7KlXve6tCglInd6XO0JGOlWM= +cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= +cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= +cloud.google.com/go/datastore v1.10.0/go.mod h1:PC5UzAmDEkAmkfaknstTYbNpgE49HAgW2J1gcgUfmdM= +cloud.google.com/go/datastore v1.11.0/go.mod h1:TvGxBIHCS50u8jzG+AW/ppf87v1of8nwzFNgEZU1D3c= +cloud.google.com/go/datastore v1.12.0/go.mod h1:KjdB88W897MRITkvWWJrg2OUtrR5XVj1EoLgSp6/N70= +cloud.google.com/go/datastore v1.12.1/go.mod h1:KjdB88W897MRITkvWWJrg2OUtrR5XVj1EoLgSp6/N70= +cloud.google.com/go/datastore v1.13.0/go.mod h1:KjdB88W897MRITkvWWJrg2OUtrR5XVj1EoLgSp6/N70= +cloud.google.com/go/datastore v1.14.0/go.mod h1:GAeStMBIt9bPS7jMJA85kgkpsMkvseWWXiaHya9Jes8= +cloud.google.com/go/datastore v1.15.0/go.mod h1:GAeStMBIt9bPS7jMJA85kgkpsMkvseWWXiaHya9Jes8= +cloud.google.com/go/datastream v1.2.0/go.mod h1:i/uTP8/fZwgATHS/XFu0TcNUhuA0twZxxQ3EyCUQMwo= +cloud.google.com/go/datastream v1.3.0/go.mod h1:cqlOX8xlyYF/uxhiKn6Hbv6WjwPPuI9W2M9SAXwaLLQ= +cloud.google.com/go/datastream v1.4.0/go.mod h1:h9dpzScPhDTs5noEMQVWP8Wx8AFBRyS0s8KWPx/9r0g= +cloud.google.com/go/datastream v1.5.0/go.mod h1:6TZMMNPwjUqZHBKPQ1wwXpb0d5VDVPl2/XoS5yi88q4= +cloud.google.com/go/datastream v1.6.0/go.mod h1:6LQSuswqLa7S4rPAOZFVjHIG3wJIjZcZrw8JDEDJuIs= +cloud.google.com/go/datastream v1.7.0/go.mod h1:uxVRMm2elUSPuh65IbZpzJNMbuzkcvu5CjMqVIUHrww= +cloud.google.com/go/datastream v1.9.1/go.mod h1:hqnmr8kdUBmrnk65k5wNRoHSCYksvpdZIcZIEl8h43Q= +cloud.google.com/go/datastream v1.10.0/go.mod h1:hqnmr8kdUBmrnk65k5wNRoHSCYksvpdZIcZIEl8h43Q= +cloud.google.com/go/datastream v1.10.1/go.mod h1:7ngSYwnw95YFyTd5tOGBxHlOZiL+OtpjheqU7t2/s/c= +cloud.google.com/go/datastream v1.10.2/go.mod h1:W42TFgKAs/om6x/CdXX5E4oiAsKlH+e8MTGy81zdYt0= +cloud.google.com/go/datastream v1.10.3/go.mod h1:YR0USzgjhqA/Id0Ycu1VvZe8hEWwrkjuXrGbzeDOSEA= +cloud.google.com/go/datastream v1.10.4/go.mod h1:7kRxPdxZxhPg3MFeCSulmAJnil8NJGGvSNdn4p1sRZo= +cloud.google.com/go/deploy v1.4.0/go.mod h1:5Xghikd4VrmMLNaF6FiRFDlHb59VM59YoDQnOUdsH/c= +cloud.google.com/go/deploy v1.5.0/go.mod h1:ffgdD0B89tToyW/U/D2eL0jN2+IEV/3EMuXHA0l4r+s= +cloud.google.com/go/deploy v1.6.0/go.mod h1:f9PTHehG/DjCom3QH0cntOVRm93uGBDt2vKzAPwpXQI= +cloud.google.com/go/deploy v1.8.0/go.mod h1:z3myEJnA/2wnB4sgjqdMfgxCA0EqC3RBTNcVPs93mtQ= +cloud.google.com/go/deploy v1.11.0/go.mod h1:tKuSUV5pXbn67KiubiUNUejqLs4f5cxxiCNCeyl0F2g= +cloud.google.com/go/deploy v1.13.0/go.mod h1:tKuSUV5pXbn67KiubiUNUejqLs4f5cxxiCNCeyl0F2g= +cloud.google.com/go/deploy v1.13.1/go.mod h1:8jeadyLkH9qu9xgO3hVWw8jVr29N1mnW42gRJT8GY6g= +cloud.google.com/go/deploy v1.14.1/go.mod h1:N8S0b+aIHSEeSr5ORVoC0+/mOPUysVt8ae4QkZYolAw= +cloud.google.com/go/deploy v1.14.2/go.mod h1:e5XOUI5D+YGldyLNZ21wbp9S8otJbBE4i88PtO9x/2g= +cloud.google.com/go/deploy v1.15.0/go.mod h1:e5XOUI5D+YGldyLNZ21wbp9S8otJbBE4i88PtO9x/2g= +cloud.google.com/go/deploy v1.16.0/go.mod h1:e5XOUI5D+YGldyLNZ21wbp9S8otJbBE4i88PtO9x/2g= +cloud.google.com/go/deploy v1.17.0/go.mod h1:XBr42U5jIr64t92gcpOXxNrqL2PStQCXHuKK5GRUuYo= +cloud.google.com/go/deploy v1.17.1/go.mod h1:SXQyfsXrk0fBmgBHRzBjQbZhMfKZ3hMQBw5ym7MN/50= +cloud.google.com/go/dialogflow v1.15.0/go.mod h1:HbHDWs33WOGJgn6rfzBW1Kv807BE3O1+xGbn59zZWI4= +cloud.google.com/go/dialogflow v1.16.1/go.mod h1:po6LlzGfK+smoSmTBnbkIZY2w8ffjz/RcGSS+sh1el0= +cloud.google.com/go/dialogflow v1.17.0/go.mod h1:YNP09C/kXA1aZdBgC/VtXX74G/TKn7XVCcVumTflA+8= +cloud.google.com/go/dialogflow v1.18.0/go.mod h1:trO7Zu5YdyEuR+BhSNOqJezyFQ3aUzz0njv7sMx/iek= +cloud.google.com/go/dialogflow v1.19.0/go.mod h1:JVmlG1TwykZDtxtTXujec4tQ+D8SBFMoosgy+6Gn0s0= +cloud.google.com/go/dialogflow v1.29.0/go.mod h1:b+2bzMe+k1s9V+F2jbJwpHPzrnIyHihAdRFMtn2WXuM= +cloud.google.com/go/dialogflow v1.31.0/go.mod h1:cuoUccuL1Z+HADhyIA7dci3N5zUssgpBJmCzI6fNRB4= +cloud.google.com/go/dialogflow v1.32.0/go.mod h1:jG9TRJl8CKrDhMEcvfcfFkkpp8ZhgPz3sBGmAUYJ2qE= +cloud.google.com/go/dialogflow v1.38.0/go.mod h1:L7jnH+JL2mtmdChzAIcXQHXMvQkE3U4hTaNltEuxXn4= +cloud.google.com/go/dialogflow v1.40.0/go.mod h1:L7jnH+JL2mtmdChzAIcXQHXMvQkE3U4hTaNltEuxXn4= +cloud.google.com/go/dialogflow v1.43.0/go.mod h1:pDUJdi4elL0MFmt1REMvFkdsUTYSHq+rTCS8wg0S3+M= +cloud.google.com/go/dialogflow v1.44.0/go.mod h1:pDUJdi4elL0MFmt1REMvFkdsUTYSHq+rTCS8wg0S3+M= +cloud.google.com/go/dialogflow v1.44.1/go.mod h1:n/h+/N2ouKOO+rbe/ZnI186xImpqvCVj2DdsWS/0EAk= +cloud.google.com/go/dialogflow v1.44.2/go.mod h1:QzFYndeJhpVPElnFkUXxdlptx0wPnBWLCBT9BvtC3/c= +cloud.google.com/go/dialogflow v1.44.3/go.mod h1:mHly4vU7cPXVweuB5R0zsYKPMzy240aQdAu06SqBbAQ= +cloud.google.com/go/dialogflow v1.47.0/go.mod h1:mHly4vU7cPXVweuB5R0zsYKPMzy240aQdAu06SqBbAQ= +cloud.google.com/go/dialogflow v1.48.0/go.mod h1:mHly4vU7cPXVweuB5R0zsYKPMzy240aQdAu06SqBbAQ= +cloud.google.com/go/dialogflow v1.48.1/go.mod h1:C1sjs2/g9cEwjCltkKeYp3FFpz8BOzNondEaAlCpt+A= +cloud.google.com/go/dialogflow v1.48.2/go.mod h1:7A2oDf6JJ1/+hdpnFRfb/RjJUOh2X3rhIa5P8wQSEX4= +cloud.google.com/go/dialogflow v1.49.0/go.mod h1:dhVrXKETtdPlpPhE7+2/k4Z8FRNUp6kMV3EW3oz/fe0= +cloud.google.com/go/dlp v1.6.0/go.mod h1:9eyB2xIhpU0sVwUixfBubDoRwP+GjeUoxxeueZmqvmM= +cloud.google.com/go/dlp v1.7.0/go.mod h1:68ak9vCiMBjbasxeVD17hVPxDEck+ExiHavX8kiHG+Q= +cloud.google.com/go/dlp v1.9.0/go.mod h1:qdgmqgTyReTz5/YNSSuueR8pl7hO0o9bQ39ZhtgkWp4= +cloud.google.com/go/dlp v1.10.1/go.mod h1:IM8BWz1iJd8njcNcG0+Kyd9OPnqnRNkDV8j42VT5KOI= +cloud.google.com/go/dlp v1.10.2/go.mod h1:ZbdKIhcnyhILgccwVDzkwqybthh7+MplGC3kZVZsIOQ= +cloud.google.com/go/dlp v1.10.3/go.mod h1:iUaTc/ln8I+QT6Ai5vmuwfw8fqTk2kaz0FvCwhLCom0= +cloud.google.com/go/dlp v1.11.1/go.mod h1:/PA2EnioBeXTL/0hInwgj0rfsQb3lpE3R8XUJxqUNKI= +cloud.google.com/go/dlp v1.11.2/go.mod h1:9Czi+8Y/FegpWzgSfkRlyz+jwW6Te9Rv26P3UfU/h/w= +cloud.google.com/go/documentai v1.7.0/go.mod h1:lJvftZB5NRiFSX4moiye1SMxHx0Bc3x1+p9e/RfXYiU= +cloud.google.com/go/documentai v1.8.0/go.mod h1:xGHNEB7CtsnySCNrCFdCyyMz44RhFEEX2Q7UD0c5IhU= +cloud.google.com/go/documentai v1.9.0/go.mod h1:FS5485S8R00U10GhgBC0aNGrJxBP8ZVpEeJ7PQDZd6k= +cloud.google.com/go/documentai v1.10.0/go.mod h1:vod47hKQIPeCfN2QS/jULIvQTugbmdc0ZvxxfQY1bg4= +cloud.google.com/go/documentai v1.16.0/go.mod h1:o0o0DLTEZ+YnJZ+J4wNfTxmDVyrkzFvttBXXtYRMHkM= +cloud.google.com/go/documentai v1.18.0/go.mod h1:F6CK6iUH8J81FehpskRmhLq/3VlwQvb7TvwOceQ2tbs= +cloud.google.com/go/documentai v1.20.0/go.mod h1:yJkInoMcK0qNAEdRnqY/D5asy73tnPe88I1YTZT+a8E= +cloud.google.com/go/documentai v1.22.0/go.mod h1:yJkInoMcK0qNAEdRnqY/D5asy73tnPe88I1YTZT+a8E= +cloud.google.com/go/documentai v1.22.1/go.mod h1:LKs22aDHbJv7ufXuPypzRO7rG3ALLJxzdCXDPutw4Qc= +cloud.google.com/go/documentai v1.23.0/go.mod h1:LKs22aDHbJv7ufXuPypzRO7rG3ALLJxzdCXDPutw4Qc= +cloud.google.com/go/documentai v1.23.2/go.mod h1:Q/wcRT+qnuXOpjAkvOV4A+IeQl04q2/ReT7SSbytLSo= +cloud.google.com/go/documentai v1.23.4/go.mod h1:4MYAaEMnADPN1LPN5xboDR5QVB6AgsaxgFdJhitlE2Y= +cloud.google.com/go/documentai v1.23.5/go.mod h1:ghzBsyVTiVdkfKaUCum/9bGBEyBjDO4GfooEcYKhN+g= +cloud.google.com/go/documentai v1.23.6/go.mod h1:ghzBsyVTiVdkfKaUCum/9bGBEyBjDO4GfooEcYKhN+g= +cloud.google.com/go/documentai v1.23.7/go.mod h1:ghzBsyVTiVdkfKaUCum/9bGBEyBjDO4GfooEcYKhN+g= +cloud.google.com/go/documentai v1.23.8/go.mod h1:Vd/y5PosxCpUHmwC+v9arZyeMfTqBR9VIwOwIqQYYfA= +cloud.google.com/go/documentai v1.25.0/go.mod h1:ftLnzw5VcXkLItp6pw1mFic91tMRyfv6hHEY5br4KzY= +cloud.google.com/go/domains v0.6.0/go.mod h1:T9Rz3GasrpYk6mEGHh4rymIhjlnIuB4ofT1wTxDeT4Y= +cloud.google.com/go/domains v0.7.0/go.mod h1:PtZeqS1xjnXuRPKE/88Iru/LdfoRyEHYA9nFQf4UKpg= +cloud.google.com/go/domains v0.8.0/go.mod h1:M9i3MMDzGFXsydri9/vW+EWz9sWb4I6WyHqdlAk0idE= +cloud.google.com/go/domains v0.9.1/go.mod h1:aOp1c0MbejQQ2Pjf1iJvnVyT+z6R6s8pX66KaCSDYfE= +cloud.google.com/go/domains v0.9.2/go.mod h1:3YvXGYzZG1Temjbk7EyGCuGGiXHJwVNmwIf+E/cUp5I= +cloud.google.com/go/domains v0.9.3/go.mod h1:29k66YNDLDY9LCFKpGFeh6Nj9r62ZKm5EsUJxAl84KU= +cloud.google.com/go/domains v0.9.4/go.mod h1:27jmJGShuXYdUNjyDG0SodTfT5RwLi7xmH334Gvi3fY= +cloud.google.com/go/domains v0.9.5/go.mod h1:dBzlxgepazdFhvG7u23XMhmMKBjrkoUNaw0A8AQB55Y= +cloud.google.com/go/edgecontainer v0.1.0/go.mod h1:WgkZ9tp10bFxqO8BLPqv2LlfmQF1X8lZqwW4r1BTajk= +cloud.google.com/go/edgecontainer v0.2.0/go.mod h1:RTmLijy+lGpQ7BXuTDa4C4ssxyXT34NIuHIgKuP4s5w= +cloud.google.com/go/edgecontainer v0.3.0/go.mod h1:FLDpP4nykgwwIfcLt6zInhprzw0lEi2P1fjO6Ie0qbc= +cloud.google.com/go/edgecontainer v1.0.0/go.mod h1:cttArqZpBB2q58W/upSG++ooo6EsblxDIolxa3jSjbY= +cloud.google.com/go/edgecontainer v1.1.1/go.mod h1:O5bYcS//7MELQZs3+7mabRqoWQhXCzenBu0R8bz2rwk= +cloud.google.com/go/edgecontainer v1.1.2/go.mod h1:wQRjIzqxEs9e9wrtle4hQPSR1Y51kqN75dgF7UllZZ4= +cloud.google.com/go/edgecontainer v1.1.3/go.mod h1:Ll2DtIABzEfaxaVSbwj3QHFaOOovlDFiWVDu349jSsA= +cloud.google.com/go/edgecontainer v1.1.4/go.mod h1:AvFdVuZuVGdgaE5YvlL1faAoa1ndRR/5XhXZvPBHbsE= +cloud.google.com/go/edgecontainer v1.1.5/go.mod h1:rgcjrba3DEDEQAidT4yuzaKWTbkTI5zAMu3yy6ZWS0M= +cloud.google.com/go/errorreporting v0.3.0/go.mod h1:xsP2yaAp+OAW4OIm60An2bbLpqIhKXdWR/tawvl7QzU= +cloud.google.com/go/essentialcontacts v1.3.0/go.mod h1:r+OnHa5jfj90qIfZDO/VztSFqbQan7HV75p8sA+mdGI= +cloud.google.com/go/essentialcontacts v1.4.0/go.mod h1:8tRldvHYsmnBCHdFpvU+GL75oWiBKl80BiqlFh9tp+8= +cloud.google.com/go/essentialcontacts v1.5.0/go.mod h1:ay29Z4zODTuwliK7SnX8E86aUF2CTzdNtvv42niCX0M= +cloud.google.com/go/essentialcontacts v1.6.2/go.mod h1:T2tB6tX+TRak7i88Fb2N9Ok3PvY3UNbUsMag9/BARh4= +cloud.google.com/go/essentialcontacts v1.6.3/go.mod h1:yiPCD7f2TkP82oJEFXFTou8Jl8L6LBRPeBEkTaO0Ggo= +cloud.google.com/go/essentialcontacts v1.6.4/go.mod h1:iju5Vy3d9tJUg0PYMd1nHhjV7xoCXaOAVabrwLaPBEM= +cloud.google.com/go/essentialcontacts v1.6.5/go.mod h1:jjYbPzw0x+yglXC890l6ECJWdYeZ5dlYACTFL0U/VuM= +cloud.google.com/go/essentialcontacts v1.6.6/go.mod h1:XbqHJGaiH0v2UvtuucfOzFXN+rpL/aU5BCZLn4DYl1Q= +cloud.google.com/go/eventarc v1.7.0/go.mod h1:6ctpF3zTnaQCxUjHUdcfgcA1A2T309+omHZth7gDfmc= +cloud.google.com/go/eventarc v1.8.0/go.mod h1:imbzxkyAU4ubfsaKYdQg04WS1NvncblHEup4kvF+4gw= +cloud.google.com/go/eventarc v1.10.0/go.mod h1:u3R35tmZ9HvswGRBnF48IlYgYeBcPUCjkr4BTdem2Kw= +cloud.google.com/go/eventarc v1.11.0/go.mod h1:PyUjsUKPWoRBCHeOxZd/lbOOjahV41icXyUY5kSTvVY= +cloud.google.com/go/eventarc v1.12.1/go.mod h1:mAFCW6lukH5+IZjkvrEss+jmt2kOdYlN8aMx3sRJiAI= +cloud.google.com/go/eventarc v1.13.0/go.mod h1:mAFCW6lukH5+IZjkvrEss+jmt2kOdYlN8aMx3sRJiAI= +cloud.google.com/go/eventarc v1.13.1/go.mod h1:EqBxmGHFrruIara4FUQ3RHlgfCn7yo1HYsu2Hpt/C3Y= +cloud.google.com/go/eventarc v1.13.2/go.mod h1:X9A80ShVu19fb4e5sc/OLV7mpFUKZMwfJFeeWhcIObM= +cloud.google.com/go/eventarc v1.13.3/go.mod h1:RWH10IAZIRcj1s/vClXkBgMHwh59ts7hSWcqD3kaclg= +cloud.google.com/go/eventarc v1.13.4/go.mod h1:zV5sFVoAa9orc/52Q+OuYUG9xL2IIZTbbuTHC6JSY8s= +cloud.google.com/go/filestore v1.3.0/go.mod h1:+qbvHGvXU1HaKX2nD0WEPo92TP/8AQuCVEBXNY9z0+w= +cloud.google.com/go/filestore v1.4.0/go.mod h1:PaG5oDfo9r224f8OYXURtAsY+Fbyq/bLYoINEK8XQAI= +cloud.google.com/go/filestore v1.5.0/go.mod h1:FqBXDWBp4YLHqRnVGveOkHDf8svj9r5+mUDLupOWEDs= +cloud.google.com/go/filestore v1.6.0/go.mod h1:di5unNuss/qfZTw2U9nhFqo8/ZDSc466dre85Kydllg= +cloud.google.com/go/filestore v1.7.1/go.mod h1:y10jsorq40JJnjR/lQ8AfFbbcGlw3g+Dp8oN7i7FjV4= +cloud.google.com/go/filestore v1.7.2/go.mod h1:TYOlyJs25f/omgj+vY7/tIG/E7BX369triSPzE4LdgE= +cloud.google.com/go/filestore v1.7.3/go.mod h1:Qp8WaEERR3cSkxToxFPHh/b8AACkSut+4qlCjAmKTV0= +cloud.google.com/go/filestore v1.7.4/go.mod h1:S5JCxIbFjeBhWMTfIYH2Jx24J6BqjwpkkPl+nBA5DlI= +cloud.google.com/go/filestore v1.8.0/go.mod h1:S5JCxIbFjeBhWMTfIYH2Jx24J6BqjwpkkPl+nBA5DlI= +cloud.google.com/go/filestore v1.8.1/go.mod h1:MbN9KcaM47DRTIuLfQhJEsjaocVebNtNQhSLhKCF5GM= +cloud.google.com/go/firestore v1.9.0/go.mod h1:HMkjKHNTtRyZNiMzu7YAsLr9K3X2udY2AMwDaMEQiiE= +cloud.google.com/go/firestore v1.11.0/go.mod h1:b38dKhgzlmNNGTNZZwe7ZRFEuRab1Hay3/DBsIGKKy4= +cloud.google.com/go/firestore v1.12.0/go.mod h1:b38dKhgzlmNNGTNZZwe7ZRFEuRab1Hay3/DBsIGKKy4= +cloud.google.com/go/firestore v1.13.0/go.mod h1:QojqqOh8IntInDUSTAh0c8ZsPYAr68Ma8c5DWOy8xb8= +cloud.google.com/go/firestore v1.14.0/go.mod h1:96MVaHLsEhbvkBEdZgfN+AS/GIkco1LRpH9Xp9YZfzQ= +cloud.google.com/go/functions v1.6.0/go.mod h1:3H1UA3qiIPRWD7PeZKLvHZ9SaQhR26XIJcC0A5GbvAk= +cloud.google.com/go/functions v1.7.0/go.mod h1:+d+QBcWM+RsrgZfV9xo6KfA1GlzJfxcfZcRPEhDDfzg= +cloud.google.com/go/functions v1.8.0/go.mod h1:RTZ4/HsQjIqIYP9a9YPbU+QFoQsAlYgrwOXJWHn1POY= +cloud.google.com/go/functions v1.9.0/go.mod h1:Y+Dz8yGguzO3PpIjhLTbnqV1CWmgQ5UwtlpzoyquQ08= +cloud.google.com/go/functions v1.10.0/go.mod h1:0D3hEOe3DbEvCXtYOZHQZmD+SzYsi1YbI7dGvHfldXw= +cloud.google.com/go/functions v1.12.0/go.mod h1:AXWGrF3e2C/5ehvwYo/GH6O5s09tOPksiKhz+hH8WkA= +cloud.google.com/go/functions v1.13.0/go.mod h1:EU4O007sQm6Ef/PwRsI8N2umygGqPBS/IZQKBQBcJ3c= +cloud.google.com/go/functions v1.15.1/go.mod h1:P5yNWUTkyU+LvW/S9O6V+V423VZooALQlqoXdoPz5AE= +cloud.google.com/go/functions v1.15.2/go.mod h1:CHAjtcR6OU4XF2HuiVeriEdELNcnvRZSk1Q8RMqy4lE= +cloud.google.com/go/functions v1.15.3/go.mod h1:r/AMHwBheapkkySEhiZYLDBwVJCdlRwsm4ieJu35/Ug= +cloud.google.com/go/functions v1.15.4/go.mod h1:CAsTc3VlRMVvx+XqXxKqVevguqJpnVip4DdonFsX28I= +cloud.google.com/go/functions v1.16.0/go.mod h1:nbNpfAG7SG7Duw/o1iZ6ohvL7mc6MapWQVpqtM29n8k= +cloud.google.com/go/gaming v1.5.0/go.mod h1:ol7rGcxP/qHTRQE/RO4bxkXq+Fix0j6D4LFPzYTIrDM= +cloud.google.com/go/gaming v1.6.0/go.mod h1:YMU1GEvA39Qt3zWGyAVA9bpYz/yAhTvaQ1t2sK4KPUA= +cloud.google.com/go/gaming v1.7.0/go.mod h1:LrB8U7MHdGgFG851iHAfqUdLcKBdQ55hzXy9xBJz0+w= +cloud.google.com/go/gaming v1.8.0/go.mod h1:xAqjS8b7jAVW0KFYeRUxngo9My3f33kFmua++Pi+ggM= +cloud.google.com/go/gaming v1.9.0/go.mod h1:Fc7kEmCObylSWLO334NcO+O9QMDyz+TKC4v1D7X+Bc0= +cloud.google.com/go/gaming v1.10.1/go.mod h1:XQQvtfP8Rb9Rxnxm5wFVpAp9zCQkJi2bLIb7iHGwB3s= +cloud.google.com/go/gkebackup v0.2.0/go.mod h1:XKvv/4LfG829/B8B7xRkk8zRrOEbKtEam6yNfuQNH60= +cloud.google.com/go/gkebackup v0.3.0/go.mod h1:n/E671i1aOQvUxT541aTkCwExO/bTer2HDlj4TsBRAo= +cloud.google.com/go/gkebackup v0.4.0/go.mod h1:byAyBGUwYGEEww7xsbnUTBHIYcOPy/PgUWUtOeRm9Vg= +cloud.google.com/go/gkebackup v1.3.0/go.mod h1:vUDOu++N0U5qs4IhG1pcOnD1Mac79xWy6GoBFlWCWBU= +cloud.google.com/go/gkebackup v1.3.1/go.mod h1:vUDOu++N0U5qs4IhG1pcOnD1Mac79xWy6GoBFlWCWBU= +cloud.google.com/go/gkebackup v1.3.2/go.mod h1:OMZbXzEJloyXMC7gqdSB+EOEQ1AKcpGYvO3s1ec5ixk= +cloud.google.com/go/gkebackup v1.3.3/go.mod h1:eMk7/wVV5P22KBakhQnJxWSVftL1p4VBFLpv0kIft7I= +cloud.google.com/go/gkebackup v1.3.4/go.mod h1:gLVlbM8h/nHIs09ns1qx3q3eaXcGSELgNu1DWXYz1HI= +cloud.google.com/go/gkebackup v1.3.5/go.mod h1:KJ77KkNN7Wm1LdMopOelV6OodM01pMuK2/5Zt1t4Tvc= +cloud.google.com/go/gkeconnect v0.5.0/go.mod h1:c5lsNAg5EwAy7fkqX/+goqFsU1Da/jQFqArp+wGNr/o= +cloud.google.com/go/gkeconnect v0.6.0/go.mod h1:Mln67KyU/sHJEBY8kFZ0xTeyPtzbq9StAVvEULYK16A= +cloud.google.com/go/gkeconnect v0.7.0/go.mod h1:SNfmVqPkaEi3bF/B3CNZOAYPYdg7sU+obZ+QTky2Myw= +cloud.google.com/go/gkeconnect v0.8.1/go.mod h1:KWiK1g9sDLZqhxB2xEuPV8V9NYzrqTUmQR9shJHpOZw= +cloud.google.com/go/gkeconnect v0.8.2/go.mod h1:6nAVhwchBJYgQCXD2pHBFQNiJNyAd/wyxljpaa6ZPrY= +cloud.google.com/go/gkeconnect v0.8.3/go.mod h1:i9GDTrfzBSUZGCe98qSu1B8YB8qfapT57PenIb820Jo= +cloud.google.com/go/gkeconnect v0.8.4/go.mod h1:84hZz4UMlDCKl8ifVW8layK4WHlMAFeq8vbzjU0yJkw= +cloud.google.com/go/gkeconnect v0.8.5/go.mod h1:LC/rS7+CuJ5fgIbXv8tCD/mdfnlAadTaUufgOkmijuk= +cloud.google.com/go/gkehub v0.9.0/go.mod h1:WYHN6WG8w9bXU0hqNxt8rm5uxnk8IH+lPY9J2TV7BK0= +cloud.google.com/go/gkehub v0.10.0/go.mod h1:UIPwxI0DsrpsVoWpLB0stwKCP+WFVG9+y977wO+hBH0= +cloud.google.com/go/gkehub v0.11.0/go.mod h1:JOWHlmN+GHyIbuWQPl47/C2RFhnFKH38jH9Ascu3n0E= +cloud.google.com/go/gkehub v0.12.0/go.mod h1:djiIwwzTTBrF5NaXCGv3mf7klpEMcST17VBTVVDcuaw= +cloud.google.com/go/gkehub v0.14.1/go.mod h1:VEXKIJZ2avzrbd7u+zeMtW00Y8ddk/4V9511C9CQGTY= +cloud.google.com/go/gkehub v0.14.2/go.mod h1:iyjYH23XzAxSdhrbmfoQdePnlMj2EWcvnR+tHdBQsCY= +cloud.google.com/go/gkehub v0.14.3/go.mod h1:jAl6WafkHHW18qgq7kqcrXYzN08hXeK/Va3utN8VKg8= +cloud.google.com/go/gkehub v0.14.4/go.mod h1:Xispfu2MqnnFt8rV/2/3o73SK1snL8s9dYJ9G2oQMfc= +cloud.google.com/go/gkehub v0.14.5/go.mod h1:6bzqxM+a+vEH/h8W8ec4OJl4r36laxTs3A/fMNHJ0wA= +cloud.google.com/go/gkemulticloud v0.3.0/go.mod h1:7orzy7O0S+5kq95e4Hpn7RysVA7dPs8W/GgfUtsPbrA= +cloud.google.com/go/gkemulticloud v0.4.0/go.mod h1:E9gxVBnseLWCk24ch+P9+B2CoDFJZTyIgLKSalC7tuI= +cloud.google.com/go/gkemulticloud v0.5.0/go.mod h1:W0JDkiyi3Tqh0TJr//y19wyb1yf8llHVto2Htf2Ja3Y= +cloud.google.com/go/gkemulticloud v0.6.1/go.mod h1:kbZ3HKyTsiwqKX7Yw56+wUGwwNZViRnxWK2DVknXWfw= +cloud.google.com/go/gkemulticloud v1.0.0/go.mod h1:kbZ3HKyTsiwqKX7Yw56+wUGwwNZViRnxWK2DVknXWfw= +cloud.google.com/go/gkemulticloud v1.0.1/go.mod h1:AcrGoin6VLKT/fwZEYuqvVominLriQBCKmbjtnbMjG8= +cloud.google.com/go/gkemulticloud v1.0.2/go.mod h1:+ee5VXxKb3H1l4LZAcgWB/rvI16VTNTrInWxDjAGsGo= +cloud.google.com/go/gkemulticloud v1.0.3/go.mod h1:7NpJBN94U6DY1xHIbsDqB2+TFZUfjLUKLjUX8NGLor0= +cloud.google.com/go/gkemulticloud v1.1.0/go.mod h1:7NpJBN94U6DY1xHIbsDqB2+TFZUfjLUKLjUX8NGLor0= +cloud.google.com/go/gkemulticloud v1.1.1/go.mod h1:C+a4vcHlWeEIf45IB5FFR5XGjTeYhF83+AYIpTy4i2Q= +cloud.google.com/go/grafeas v0.2.0/go.mod h1:KhxgtF2hb0P191HlY5besjYm6MqTSTj3LSI+M+ByZHc= +cloud.google.com/go/grafeas v0.3.0/go.mod h1:P7hgN24EyONOTMyeJH6DxG4zD7fwiYa5Q6GUgyFSOU8= +cloud.google.com/go/grafeas v0.3.4/go.mod h1:A5m316hcG+AulafjAbPKXBO/+I5itU4LOdKO2R/uDIc= +cloud.google.com/go/gsuiteaddons v1.3.0/go.mod h1:EUNK/J1lZEZO8yPtykKxLXI6JSVN2rg9bN8SXOa0bgM= +cloud.google.com/go/gsuiteaddons v1.4.0/go.mod h1:rZK5I8hht7u7HxFQcFei0+AtfS9uSushomRlg+3ua1o= +cloud.google.com/go/gsuiteaddons v1.5.0/go.mod h1:TFCClYLd64Eaa12sFVmUyG62tk4mdIsI7pAnSXRkcFo= +cloud.google.com/go/gsuiteaddons v1.6.1/go.mod h1:CodrdOqRZcLp5WOwejHWYBjZvfY0kOphkAKpF/3qdZY= +cloud.google.com/go/gsuiteaddons v1.6.2/go.mod h1:K65m9XSgs8hTF3X9nNTPi8IQueljSdYo9F+Mi+s4MyU= +cloud.google.com/go/gsuiteaddons v1.6.3/go.mod h1:sCFJkZoMrLZT3JTb8uJqgKPNshH2tfXeCwTFRebTq48= +cloud.google.com/go/gsuiteaddons v1.6.4/go.mod h1:rxtstw7Fx22uLOXBpsvb9DUbC+fiXs7rF4U29KHM/pE= +cloud.google.com/go/gsuiteaddons v1.6.5/go.mod h1:Lo4P2IvO8uZ9W+RaC6s1JVxo42vgy+TX5a6hfBZ0ubs= +cloud.google.com/go/iam v0.1.0/go.mod h1:vcUNEa0pEm0qRVpmWepWaFMIAI8/hjB9mO8rNCJtF6c= +cloud.google.com/go/iam v0.3.0/go.mod h1:XzJPvDayI+9zsASAFO68Hk07u3z+f+JrT2xXNdp4bnY= +cloud.google.com/go/iam v0.5.0/go.mod h1:wPU9Vt0P4UmCux7mqtRu6jcpPAb74cP1fh50J3QpkUc= +cloud.google.com/go/iam v0.6.0/go.mod h1:+1AH33ueBne5MzYccyMHtEKqLE4/kJOibtffMHDMFMc= +cloud.google.com/go/iam v0.7.0/go.mod h1:H5Br8wRaDGNc8XP3keLc4unfUUZeyH3Sfl9XpQEYOeg= +cloud.google.com/go/iam v0.8.0/go.mod h1:lga0/y3iH6CX7sYqypWJ33hf7kkfXJag67naqGESjkE= +cloud.google.com/go/iam v0.11.0/go.mod h1:9PiLDanza5D+oWFZiH1uG+RnRCfEGKoyl6yo4cgWZGY= +cloud.google.com/go/iam v0.12.0/go.mod h1:knyHGviacl11zrtZUoDuYpDgLjvr28sLQaG0YB2GYAY= +cloud.google.com/go/iam v0.13.0/go.mod h1:ljOg+rcNfzZ5d6f1nAUJ8ZIxOaZUVoS14bKCtaLZ/D0= +cloud.google.com/go/iam v1.0.1/go.mod h1:yR3tmSL8BcZB4bxByRv2jkSIahVmCtfKZwLYGBalRE8= +cloud.google.com/go/iam v1.1.0/go.mod h1:nxdHjaKfCr7fNYx/HJMM8LgiMugmveWlkatear5gVyk= +cloud.google.com/go/iam v1.1.1/go.mod h1:A5avdyVL2tCppe4unb0951eI9jreack+RJ0/d+KUZOU= +cloud.google.com/go/iam v1.1.2/go.mod h1:A5avdyVL2tCppe4unb0951eI9jreack+RJ0/d+KUZOU= +cloud.google.com/go/iam v1.1.3/go.mod h1:3khUlaBXfPKKe7huYgEpDn6FtgRyMEqbkvBxrQyY5SE= +cloud.google.com/go/iam v1.1.4/go.mod h1:l/rg8l1AaA+VFMho/HYx2Vv6xinPSLMF8qfhRPIZ0L8= +cloud.google.com/go/iam v1.1.5/go.mod h1:rB6P/Ic3mykPbFio+vo7403drjlgvoWfYpJhMXEbzv8= +cloud.google.com/go/iam v1.1.6/go.mod h1:O0zxdPeGBoFdWW3HWmBxJsk0pfvNM/p/qa82rWOGTwI= +cloud.google.com/go/iap v1.4.0/go.mod h1:RGFwRJdihTINIe4wZ2iCP0zF/qu18ZwyKxrhMhygBEc= +cloud.google.com/go/iap v1.5.0/go.mod h1:UH/CGgKd4KyohZL5Pt0jSKE4m3FR51qg6FKQ/z/Ix9A= +cloud.google.com/go/iap v1.6.0/go.mod h1:NSuvI9C/j7UdjGjIde7t7HBz+QTwBcapPE07+sSRcLk= +cloud.google.com/go/iap v1.7.0/go.mod h1:beqQx56T9O1G1yNPph+spKpNibDlYIiIixiqsQXxLIo= +cloud.google.com/go/iap v1.7.1/go.mod h1:WapEwPc7ZxGt2jFGB/C/bm+hP0Y6NXzOYGjpPnmMS74= +cloud.google.com/go/iap v1.8.1/go.mod h1:sJCbeqg3mvWLqjZNsI6dfAtbbV1DL2Rl7e1mTyXYREQ= +cloud.google.com/go/iap v1.9.0/go.mod h1:01OFxd1R+NFrg78S+hoPV5PxEzv22HXaNqUUlmNHFuY= +cloud.google.com/go/iap v1.9.1/go.mod h1:SIAkY7cGMLohLSdBR25BuIxO+I4fXJiL06IBL7cy/5Q= +cloud.google.com/go/iap v1.9.2/go.mod h1:GwDTOs047PPSnwRD0Us5FKf4WDRcVvHg1q9WVkKBhdI= +cloud.google.com/go/iap v1.9.3/go.mod h1:DTdutSZBqkkOm2HEOTBzhZxh2mwwxshfD/h3yofAiCw= +cloud.google.com/go/iap v1.9.4/go.mod h1:vO4mSq0xNf/Pu6E5paORLASBwEmphXEjgCFg7aeNu1w= +cloud.google.com/go/ids v1.1.0/go.mod h1:WIuwCaYVOzHIj2OhN9HAwvW+DBdmUAdcWlFxRl+KubM= +cloud.google.com/go/ids v1.2.0/go.mod h1:5WXvp4n25S0rA/mQWAg1YEEBBq6/s+7ml1RDCW1IrcY= +cloud.google.com/go/ids v1.3.0/go.mod h1:JBdTYwANikFKaDP6LtW5JAi4gubs57SVNQjemdt6xV4= +cloud.google.com/go/ids v1.4.1/go.mod h1:np41ed8YMU8zOgv53MMMoCntLTn2lF+SUzlM+O3u/jw= +cloud.google.com/go/ids v1.4.2/go.mod h1:3vw8DX6YddRu9BncxuzMyWn0g8+ooUjI2gslJ7FH3vk= +cloud.google.com/go/ids v1.4.3/go.mod h1:9CXPqI3GedjmkjbMWCUhMZ2P2N7TUMzAkVXYEH2orYU= +cloud.google.com/go/ids v1.4.4/go.mod h1:z+WUc2eEl6S/1aZWzwtVNWoSZslgzPxAboS0lZX0HjI= +cloud.google.com/go/ids v1.4.5/go.mod h1:p0ZnyzjMWxww6d2DvMGnFwCsSxDJM666Iir1bK1UuBo= +cloud.google.com/go/iot v1.3.0/go.mod h1:r7RGh2B61+B8oz0AGE+J72AhA0G7tdXItODWsaA2oLs= +cloud.google.com/go/iot v1.4.0/go.mod h1:dIDxPOn0UvNDUMD8Ger7FIaTuvMkj+aGk94RPP0iV+g= +cloud.google.com/go/iot v1.5.0/go.mod h1:mpz5259PDl3XJthEmh9+ap0affn/MqNSP4My77Qql9o= +cloud.google.com/go/iot v1.6.0/go.mod h1:IqdAsmE2cTYYNO1Fvjfzo9po179rAtJeVGUvkLN3rLE= +cloud.google.com/go/iot v1.7.1/go.mod h1:46Mgw7ev1k9KqK1ao0ayW9h0lI+3hxeanz+L1zmbbbk= +cloud.google.com/go/iot v1.7.2/go.mod h1:q+0P5zr1wRFpw7/MOgDXrG/HVA+l+cSwdObffkrpnSg= +cloud.google.com/go/iot v1.7.3/go.mod h1:t8itFchkol4VgNbHnIq9lXoOOtHNR3uAACQMYbN9N4I= +cloud.google.com/go/iot v1.7.4/go.mod h1:3TWqDVvsddYBG++nHSZmluoCAVGr1hAcabbWZNKEZLk= +cloud.google.com/go/iot v1.7.5/go.mod h1:nq3/sqTz3HGaWJi1xNiX7F41ThOzpud67vwk0YsSsqs= +cloud.google.com/go/kms v1.4.0/go.mod h1:fajBHndQ+6ubNw6Ss2sSd+SWvjL26RNo/dr7uxsnnOA= +cloud.google.com/go/kms v1.5.0/go.mod h1:QJS2YY0eJGBg3mnDfuaCyLauWwBJiHRboYxJ++1xJNg= +cloud.google.com/go/kms v1.6.0/go.mod h1:Jjy850yySiasBUDi6KFUwUv2n1+o7QZFyuUJg6OgjA0= +cloud.google.com/go/kms v1.8.0/go.mod h1:4xFEhYFqvW+4VMELtZyxomGSYtSQKzM178ylFW4jMAg= +cloud.google.com/go/kms v1.9.0/go.mod h1:qb1tPTgfF9RQP8e1wq4cLFErVuTJv7UsSC915J8dh3w= +cloud.google.com/go/kms v1.10.0/go.mod h1:ng3KTUtQQU9bPX3+QGLsflZIHlkbn8amFAMY63m8d24= +cloud.google.com/go/kms v1.10.1/go.mod h1:rIWk/TryCkR59GMC3YtHtXeLzd634lBbKenvyySAyYI= +cloud.google.com/go/kms v1.11.0/go.mod h1:hwdiYC0xjnWsKQQCQQmIQnS9asjYVSK6jtXm+zFqXLM= +cloud.google.com/go/kms v1.12.1/go.mod h1:c9J991h5DTl+kg7gi3MYomh12YEENGrf48ee/N/2CDM= +cloud.google.com/go/kms v1.15.0/go.mod h1:c9J991h5DTl+kg7gi3MYomh12YEENGrf48ee/N/2CDM= +cloud.google.com/go/kms v1.15.2/go.mod h1:3hopT4+7ooWRCjc2DxgnpESFxhIraaI2IpAVUEhbT/w= +cloud.google.com/go/kms v1.15.3/go.mod h1:AJdXqHxS2GlPyduM99s9iGqi2nwbviBbhV/hdmt4iOQ= +cloud.google.com/go/kms v1.15.4/go.mod h1:L3Sdj6QTHK8dfwK5D1JLsAyELsNMnd3tAIwGS4ltKpc= +cloud.google.com/go/kms v1.15.5/go.mod h1:cU2H5jnp6G2TDpUGZyqTCoy1n16fbubHZjmVXSMtwDI= +cloud.google.com/go/kms v1.15.6/go.mod h1:yF75jttnIdHfGBoE51AKsD/Yqf+/jICzB9v1s1acsms= +cloud.google.com/go/kms v1.15.7/go.mod h1:ub54lbsa6tDkUwnu4W7Yt1aAIFLnspgh0kPGToDukeI= +cloud.google.com/go/language v1.4.0/go.mod h1:F9dRpNFQmJbkaop6g0JhSBXCNlO90e1KWx5iDdxbWic= +cloud.google.com/go/language v1.6.0/go.mod h1:6dJ8t3B+lUYfStgls25GusK04NLh3eDLQnWM3mdEbhI= +cloud.google.com/go/language v1.7.0/go.mod h1:DJ6dYN/W+SQOjF8e1hLQXMF21AkH2w9wiPzPCJa2MIE= +cloud.google.com/go/language v1.8.0/go.mod h1:qYPVHf7SPoNNiCL2Dr0FfEFNil1qi3pQEyygwpgVKB8= +cloud.google.com/go/language v1.9.0/go.mod h1:Ns15WooPM5Ad/5no/0n81yUetis74g3zrbeJBE+ptUY= +cloud.google.com/go/language v1.10.1/go.mod h1:CPp94nsdVNiQEt1CNjF5WkTcisLiHPyIbMhvR8H2AW0= +cloud.google.com/go/language v1.11.0/go.mod h1:uDx+pFDdAKTY8ehpWbiXyQdz8tDSYLJbQcXsCkjYyvQ= +cloud.google.com/go/language v1.11.1/go.mod h1:Xyid9MG9WOX3utvDbpX7j3tXDmmDooMyMDqgUVpH17U= +cloud.google.com/go/language v1.12.1/go.mod h1:zQhalE2QlQIxbKIZt54IASBzmZpN/aDASea5zl1l+J4= +cloud.google.com/go/language v1.12.2/go.mod h1:9idWapzr/JKXBBQ4lWqVX/hcadxB194ry20m/bTrhWc= +cloud.google.com/go/language v1.12.3/go.mod h1:evFX9wECX6mksEva8RbRnr/4wi/vKGYnAJrTRXU8+f8= +cloud.google.com/go/lifesciences v0.5.0/go.mod h1:3oIKy8ycWGPUyZDR/8RNnTOYevhaMLqh5vLUXs9zvT8= +cloud.google.com/go/lifesciences v0.6.0/go.mod h1:ddj6tSX/7BOnhxCSd3ZcETvtNr8NZ6t/iPhY2Tyfu08= +cloud.google.com/go/lifesciences v0.8.0/go.mod h1:lFxiEOMqII6XggGbOnKiyZ7IBwoIqA84ClvoezaA/bo= +cloud.google.com/go/lifesciences v0.9.1/go.mod h1:hACAOd1fFbCGLr/+weUKRAJas82Y4vrL3O5326N//Wc= +cloud.google.com/go/lifesciences v0.9.2/go.mod h1:QHEOO4tDzcSAzeJg7s2qwnLM2ji8IRpQl4p6m5Z9yTA= +cloud.google.com/go/lifesciences v0.9.3/go.mod h1:gNGBOJV80IWZdkd+xz4GQj4mbqaz737SCLHn2aRhQKM= +cloud.google.com/go/lifesciences v0.9.4/go.mod h1:bhm64duKhMi7s9jR9WYJYvjAFJwRqNj+Nia7hF0Z7JA= +cloud.google.com/go/lifesciences v0.9.5/go.mod h1:OdBm0n7C0Osh5yZB7j9BXyrMnTRGBJIZonUMxo5CzPw= +cloud.google.com/go/logging v1.6.1/go.mod h1:5ZO0mHHbvm8gEmeEUHrmDlTDSu5imF6MUP9OfilNXBw= +cloud.google.com/go/logging v1.7.0/go.mod h1:3xjP2CjkM3ZkO73aj4ASA5wRPGGCRrPIAeNqVNkzY8M= +cloud.google.com/go/logging v1.8.1/go.mod h1:TJjR+SimHwuC8MZ9cjByQulAMgni+RkXeI3wwctHJEI= +cloud.google.com/go/logging v1.9.0/go.mod h1:1Io0vnZv4onoUnsVUQY3HZ3Igb1nBchky0A0y7BBBhE= +cloud.google.com/go/longrunning v0.1.1/go.mod h1:UUFxuDWkv22EuY93jjmDMFT5GPQKeFVJBIF6QlTqdsE= +cloud.google.com/go/longrunning v0.3.0/go.mod h1:qth9Y41RRSUE69rDcOn6DdK3HfQfsUI0YSmW3iIlLJc= +cloud.google.com/go/longrunning v0.4.1/go.mod h1:4iWDqhBZ70CvZ6BfETbvam3T8FMvLK+eFj0E6AaRQTo= +cloud.google.com/go/longrunning v0.4.2/go.mod h1:OHrnaYyLUV6oqwh0xiS7e5sLQhP1m0QU9R+WhGDMgIQ= +cloud.google.com/go/longrunning v0.5.0/go.mod h1:0JNuqRShmscVAhIACGtskSAWtqtOoPkwP0YF1oVEchc= +cloud.google.com/go/longrunning v0.5.1/go.mod h1:spvimkwdz6SPWKEt/XBij79E9fiTkHSQl/fRUUQJYJc= +cloud.google.com/go/longrunning v0.5.2/go.mod h1:nqo6DQbNV2pXhGDbDMoN2bWz68MjZUzqv2YttZiveCs= +cloud.google.com/go/longrunning v0.5.3/go.mod h1:y/0ga59EYu58J6SHmmQOvekvND2qODbu8ywBBW7EK7Y= +cloud.google.com/go/longrunning v0.5.4/go.mod h1:zqNVncI0BOP8ST6XQD1+VcvuShMmq7+xFSzOL++V0dI= +cloud.google.com/go/longrunning v0.5.5/go.mod h1:WV2LAxD8/rg5Z1cNW6FJ/ZpX4E4VnDnoTk0yawPBB7s= +cloud.google.com/go/managedidentities v1.3.0/go.mod h1:UzlW3cBOiPrzucO5qWkNkh0w33KFtBJU281hacNvsdE= +cloud.google.com/go/managedidentities v1.4.0/go.mod h1:NWSBYbEMgqmbZsLIyKvxrYbtqOsxY1ZrGM+9RgDqInM= +cloud.google.com/go/managedidentities v1.5.0/go.mod h1:+dWcZ0JlUmpuxpIDfyP5pP5y0bLdRwOS4Lp7gMni/LA= +cloud.google.com/go/managedidentities v1.6.1/go.mod h1:h/irGhTN2SkZ64F43tfGPMbHnypMbu4RB3yl8YcuEak= +cloud.google.com/go/managedidentities v1.6.2/go.mod h1:5c2VG66eCa0WIq6IylRk3TBW83l161zkFvCj28X7jn8= +cloud.google.com/go/managedidentities v1.6.3/go.mod h1:tewiat9WLyFN0Fi7q1fDD5+0N4VUoL0SCX0OTCthZq4= +cloud.google.com/go/managedidentities v1.6.4/go.mod h1:WgyaECfHmF00t/1Uk8Oun3CQ2PGUtjc3e9Alh79wyiM= +cloud.google.com/go/managedidentities v1.6.5/go.mod h1:fkFI2PwwyRQbjLxlm5bQ8SjtObFMW3ChBGNqaMcgZjI= +cloud.google.com/go/maps v0.1.0/go.mod h1:BQM97WGyfw9FWEmQMpZ5T6cpovXXSd1cGmFma94eubI= +cloud.google.com/go/maps v0.6.0/go.mod h1:o6DAMMfb+aINHz/p/jbcY+mYeXBoZoxTfdSQ8VAJaCw= +cloud.google.com/go/maps v0.7.0/go.mod h1:3GnvVl3cqeSvgMcpRlQidXsPYuDGQ8naBis7MVzpXsY= +cloud.google.com/go/maps v1.3.0/go.mod h1:6mWTUv+WhnOwAgjVsSW2QPPECmW+s3PcRyOa9vgG/5s= +cloud.google.com/go/maps v1.4.0/go.mod h1:6mWTUv+WhnOwAgjVsSW2QPPECmW+s3PcRyOa9vgG/5s= +cloud.google.com/go/maps v1.4.1/go.mod h1:BxSa0BnW1g2U2gNdbq5zikLlHUuHW0GFWh7sgML2kIY= +cloud.google.com/go/maps v1.5.1/go.mod h1:NPMZw1LJwQZYCfz4y+EIw+SI+24A4bpdFJqdKVr0lt4= +cloud.google.com/go/maps v1.6.1/go.mod h1:4+buOHhYXFBp58Zj/K+Lc1rCmJssxxF4pJ5CJnhdz18= +cloud.google.com/go/maps v1.6.2/go.mod h1:4+buOHhYXFBp58Zj/K+Lc1rCmJssxxF4pJ5CJnhdz18= +cloud.google.com/go/maps v1.6.3/go.mod h1:VGAn809ADswi1ASofL5lveOHPnE6Rk/SFTTBx1yuOLw= +cloud.google.com/go/maps v1.6.4/go.mod h1:rhjqRy8NWmDJ53saCfsXQ0LKwBHfi6OSh5wkq6BaMhI= +cloud.google.com/go/mediatranslation v0.5.0/go.mod h1:jGPUhGTybqsPQn91pNXw0xVHfuJ3leR1wj37oU3y1f4= +cloud.google.com/go/mediatranslation v0.6.0/go.mod h1:hHdBCTYNigsBxshbznuIMFNe5QXEowAuNmmC7h8pu5w= +cloud.google.com/go/mediatranslation v0.7.0/go.mod h1:LCnB/gZr90ONOIQLgSXagp8XUW1ODs2UmUMvcgMfI2I= +cloud.google.com/go/mediatranslation v0.8.1/go.mod h1:L/7hBdEYbYHQJhX2sldtTO5SZZ1C1vkapubj0T2aGig= +cloud.google.com/go/mediatranslation v0.8.2/go.mod h1:c9pUaDRLkgHRx3irYE5ZC8tfXGrMYwNZdmDqKMSfFp8= +cloud.google.com/go/mediatranslation v0.8.3/go.mod h1:F9OnXTy336rteOEywtY7FOqCk+J43o2RF638hkOQl4Y= +cloud.google.com/go/mediatranslation v0.8.4/go.mod h1:9WstgtNVAdN53m6TQa5GjIjLqKQPXe74hwSCxUP6nj4= +cloud.google.com/go/mediatranslation v0.8.5/go.mod h1:y7kTHYIPCIfgyLbKncgqouXJtLsU+26hZhHEEy80fSs= +cloud.google.com/go/memcache v1.4.0/go.mod h1:rTOfiGZtJX1AaFUrOgsMHX5kAzaTQ8azHiuDoTPzNsE= +cloud.google.com/go/memcache v1.5.0/go.mod h1:dk3fCK7dVo0cUU2c36jKb4VqKPS22BTkf81Xq617aWM= +cloud.google.com/go/memcache v1.6.0/go.mod h1:XS5xB0eQZdHtTuTF9Hf8eJkKtR3pVRCcvJwtm68T3rA= +cloud.google.com/go/memcache v1.7.0/go.mod h1:ywMKfjWhNtkQTxrWxCkCFkoPjLHPW6A7WOTVI8xy3LY= +cloud.google.com/go/memcache v1.9.0/go.mod h1:8oEyzXCu+zo9RzlEaEjHl4KkgjlNDaXbCQeQWlzNFJM= +cloud.google.com/go/memcache v1.10.1/go.mod h1:47YRQIarv4I3QS5+hoETgKO40InqzLP6kpNLvyXuyaA= +cloud.google.com/go/memcache v1.10.2/go.mod h1:f9ZzJHLBrmd4BkguIAa/l/Vle6uTHzHokdnzSWOdQ6A= +cloud.google.com/go/memcache v1.10.3/go.mod h1:6z89A41MT2DVAW0P4iIRdu5cmRTsbsFn4cyiIx8gbwo= +cloud.google.com/go/memcache v1.10.4/go.mod h1:v/d8PuC8d1gD6Yn5+I3INzLR01IDn0N4Ym56RgikSI0= +cloud.google.com/go/memcache v1.10.5/go.mod h1:/FcblbNd0FdMsx4natdj+2GWzTq+cjZvMa1I+9QsuMA= +cloud.google.com/go/metastore v1.5.0/go.mod h1:2ZNrDcQwghfdtCwJ33nM0+GrBGlVuh8rakL3vdPY3XY= +cloud.google.com/go/metastore v1.6.0/go.mod h1:6cyQTls8CWXzk45G55x57DVQ9gWg7RiH65+YgPsNh9s= +cloud.google.com/go/metastore v1.7.0/go.mod h1:s45D0B4IlsINu87/AsWiEVYbLaIMeUSoxlKKDqBGFS8= +cloud.google.com/go/metastore v1.8.0/go.mod h1:zHiMc4ZUpBiM7twCIFQmJ9JMEkDSyZS9U12uf7wHqSI= +cloud.google.com/go/metastore v1.10.0/go.mod h1:fPEnH3g4JJAk+gMRnrAnoqyv2lpUCqJPWOodSaf45Eo= +cloud.google.com/go/metastore v1.11.1/go.mod h1:uZuSo80U3Wd4zi6C22ZZliOUJ3XeM/MlYi/z5OAOWRA= +cloud.google.com/go/metastore v1.12.0/go.mod h1:uZuSo80U3Wd4zi6C22ZZliOUJ3XeM/MlYi/z5OAOWRA= +cloud.google.com/go/metastore v1.13.0/go.mod h1:URDhpG6XLeh5K+Glq0NOt74OfrPKTwS62gEPZzb5SOk= +cloud.google.com/go/metastore v1.13.1/go.mod h1:IbF62JLxuZmhItCppcIfzBBfUFq0DIB9HPDoLgWrVOU= +cloud.google.com/go/metastore v1.13.2/go.mod h1:KS59dD+unBji/kFebVp8XU/quNSyo8b6N6tPGspKszA= +cloud.google.com/go/metastore v1.13.3/go.mod h1:K+wdjXdtkdk7AQg4+sXS8bRrQa9gcOr+foOMF2tqINE= +cloud.google.com/go/metastore v1.13.4/go.mod h1:FMv9bvPInEfX9Ac1cVcRXp8EBBQnBcqH6gz3KvJ9BAE= +cloud.google.com/go/monitoring v1.7.0/go.mod h1:HpYse6kkGo//7p6sT0wsIC6IBDET0RhIsnmlA53dvEk= +cloud.google.com/go/monitoring v1.8.0/go.mod h1:E7PtoMJ1kQXWxPjB6mv2fhC5/15jInuulFdYYtlcvT4= +cloud.google.com/go/monitoring v1.12.0/go.mod h1:yx8Jj2fZNEkL/GYZyTLS4ZtZEZN8WtDEiEqG4kLK50w= +cloud.google.com/go/monitoring v1.13.0/go.mod h1:k2yMBAB1H9JT/QETjNkgdCGD9bPF712XiLTVr+cBrpw= +cloud.google.com/go/monitoring v1.15.1/go.mod h1:lADlSAlFdbqQuwwpaImhsJXu1QSdd3ojypXrFSMr2rM= +cloud.google.com/go/monitoring v1.16.0/go.mod h1:Ptp15HgAyM1fNICAojDMoNc/wUmn67mLHQfyqbw+poY= +cloud.google.com/go/monitoring v1.16.1/go.mod h1:6HsxddR+3y9j+o/cMJH6q/KJ/CBTvM/38L/1m7bTRJ4= +cloud.google.com/go/monitoring v1.16.2/go.mod h1:B44KGwi4ZCF8Rk/5n+FWeispDXoKSk9oss2QNlXJBgc= +cloud.google.com/go/monitoring v1.16.3/go.mod h1:KwSsX5+8PnXv5NJnICZzW2R8pWTis8ypC4zmdRD63Tw= +cloud.google.com/go/monitoring v1.17.0/go.mod h1:KwSsX5+8PnXv5NJnICZzW2R8pWTis8ypC4zmdRD63Tw= +cloud.google.com/go/monitoring v1.17.1/go.mod h1:SJzPMakCF0GHOuKEH/r4hxVKF04zl+cRPQyc3d/fqII= +cloud.google.com/go/monitoring v1.18.0/go.mod h1:c92vVBCeq/OB4Ioyo+NbN2U7tlg5ZH41PZcdvfc+Lcg= +cloud.google.com/go/networkconnectivity v1.4.0/go.mod h1:nOl7YL8odKyAOtzNX73/M5/mGZgqqMeryi6UPZTk/rA= +cloud.google.com/go/networkconnectivity v1.5.0/go.mod h1:3GzqJx7uhtlM3kln0+x5wyFvuVH1pIBJjhCpjzSt75o= +cloud.google.com/go/networkconnectivity v1.6.0/go.mod h1:OJOoEXW+0LAxHh89nXd64uGG+FbQoeH8DtxCHVOMlaM= +cloud.google.com/go/networkconnectivity v1.7.0/go.mod h1:RMuSbkdbPwNMQjB5HBWD5MpTBnNm39iAVpC3TmsExt8= +cloud.google.com/go/networkconnectivity v1.10.0/go.mod h1:UP4O4sWXJG13AqrTdQCD9TnLGEbtNRqjuaaA7bNjF5E= +cloud.google.com/go/networkconnectivity v1.11.0/go.mod h1:iWmDD4QF16VCDLXUqvyspJjIEtBR/4zq5hwnY2X3scM= +cloud.google.com/go/networkconnectivity v1.12.1/go.mod h1:PelxSWYM7Sh9/guf8CFhi6vIqf19Ir/sbfZRUwXh92E= +cloud.google.com/go/networkconnectivity v1.13.0/go.mod h1:SAnGPes88pl7QRLUen2HmcBSE9AowVAcdug8c0RSBFk= +cloud.google.com/go/networkconnectivity v1.14.0/go.mod h1:SAnGPes88pl7QRLUen2HmcBSE9AowVAcdug8c0RSBFk= +cloud.google.com/go/networkconnectivity v1.14.1/go.mod h1:LyGPXR742uQcDxZ/wv4EI0Vu5N6NKJ77ZYVnDe69Zug= +cloud.google.com/go/networkconnectivity v1.14.2/go.mod h1:5UFlwIisZylSkGG1AdwK/WZUaoz12PKu6wODwIbFzJo= +cloud.google.com/go/networkconnectivity v1.14.3/go.mod h1:4aoeFdrJpYEXNvrnfyD5kIzs8YtHg945Og4koAjHQek= +cloud.google.com/go/networkconnectivity v1.14.4/go.mod h1:PU12q++/IMnDJAB+3r+tJtuCXCfwfN+C6Niyj6ji1Po= +cloud.google.com/go/networkmanagement v1.4.0/go.mod h1:Q9mdLLRn60AsOrPc8rs8iNV6OHXaGcDdsIQe1ohekq8= +cloud.google.com/go/networkmanagement v1.5.0/go.mod h1:ZnOeZ/evzUdUsnvRt792H0uYEnHQEMaz+REhhzJRcf4= +cloud.google.com/go/networkmanagement v1.6.0/go.mod h1:5pKPqyXjB/sgtvB5xqOemumoQNB7y95Q7S+4rjSOPYY= +cloud.google.com/go/networkmanagement v1.8.0/go.mod h1:Ho/BUGmtyEqrttTgWEe7m+8vDdK74ibQc+Be0q7Fof0= +cloud.google.com/go/networkmanagement v1.9.0/go.mod h1:UTUaEU9YwbCAhhz3jEOHr+2/K/MrBk2XxOLS89LQzFw= +cloud.google.com/go/networkmanagement v1.9.1/go.mod h1:CCSYgrQQvW73EJawO2QamemYcOb57LvrDdDU51F0mcI= +cloud.google.com/go/networkmanagement v1.9.2/go.mod h1:iDGvGzAoYRghhp4j2Cji7sF899GnfGQcQRQwgVOWnDw= +cloud.google.com/go/networkmanagement v1.9.3/go.mod h1:y7WMO1bRLaP5h3Obm4tey+NquUvB93Co1oh4wpL+XcU= +cloud.google.com/go/networkmanagement v1.9.4/go.mod h1:daWJAl0KTFytFL7ar33I6R/oNBH8eEOX/rBNHrC/8TA= +cloud.google.com/go/networksecurity v0.5.0/go.mod h1:xS6fOCoqpVC5zx15Z/MqkfDwH4+m/61A3ODiDV1xmiQ= +cloud.google.com/go/networksecurity v0.6.0/go.mod h1:Q5fjhTr9WMI5mbpRYEbiexTzROf7ZbDzvzCrNl14nyU= +cloud.google.com/go/networksecurity v0.7.0/go.mod h1:mAnzoxx/8TBSyXEeESMy9OOYwo1v+gZ5eMRnsT5bC8k= +cloud.google.com/go/networksecurity v0.8.0/go.mod h1:B78DkqsxFG5zRSVuwYFRZ9Xz8IcQ5iECsNrPn74hKHU= +cloud.google.com/go/networksecurity v0.9.1/go.mod h1:MCMdxOKQ30wsBI1eI659f9kEp4wuuAueoC9AJKSPWZQ= +cloud.google.com/go/networksecurity v0.9.2/go.mod h1:jG0SeAttWzPMUILEHDUvFYdQTl8L/E/KC8iZDj85lEI= +cloud.google.com/go/networksecurity v0.9.3/go.mod h1:l+C0ynM6P+KV9YjOnx+kk5IZqMSLccdBqW6GUoF4p/0= +cloud.google.com/go/networksecurity v0.9.4/go.mod h1:E9CeMZ2zDsNBkr8axKSYm8XyTqNhiCHf1JO/Vb8mD1w= +cloud.google.com/go/networksecurity v0.9.5/go.mod h1:KNkjH/RsylSGyyZ8wXpue8xpCEK+bTtvof8SBfIhMG8= +cloud.google.com/go/notebooks v1.2.0/go.mod h1:9+wtppMfVPUeJ8fIWPOq1UnATHISkGXGqTkxeieQ6UY= +cloud.google.com/go/notebooks v1.3.0/go.mod h1:bFR5lj07DtCPC7YAAJ//vHskFBxA5JzYlH68kXVdk34= +cloud.google.com/go/notebooks v1.4.0/go.mod h1:4QPMngcwmgb6uw7Po99B2xv5ufVoIQ7nOGDyL4P8AgA= +cloud.google.com/go/notebooks v1.5.0/go.mod h1:q8mwhnP9aR8Hpfnrc5iN5IBhrXUy8S2vuYs+kBJ/gu0= +cloud.google.com/go/notebooks v1.7.0/go.mod h1:PVlaDGfJgj1fl1S3dUwhFMXFgfYGhYQt2164xOMONmE= +cloud.google.com/go/notebooks v1.8.0/go.mod h1:Lq6dYKOYOWUCTvw5t2q1gp1lAp0zxAxRycayS0iJcqQ= +cloud.google.com/go/notebooks v1.9.1/go.mod h1:zqG9/gk05JrzgBt4ghLzEepPHNwE5jgPcHZRKhlC1A8= +cloud.google.com/go/notebooks v1.10.0/go.mod h1:SOPYMZnttHxqot0SGSFSkRrwE29eqnKPBJFqgWmiK2k= +cloud.google.com/go/notebooks v1.10.1/go.mod h1:5PdJc2SgAybE76kFQCWrTfJolCOUQXF97e+gteUUA6A= +cloud.google.com/go/notebooks v1.11.1/go.mod h1:V2Zkv8wX9kDCGRJqYoI+bQAaoVeE5kSiz4yYHd2yJwQ= +cloud.google.com/go/notebooks v1.11.2/go.mod h1:z0tlHI/lREXC8BS2mIsUeR3agM1AkgLiS+Isov3SS70= +cloud.google.com/go/notebooks v1.11.3/go.mod h1:0wQyI2dQC3AZyQqWnRsp+yA+kY4gC7ZIVP4Qg3AQcgo= +cloud.google.com/go/optimization v1.1.0/go.mod h1:5po+wfvX5AQlPznyVEZjGJTMr4+CAkJf2XSTQOOl9l4= +cloud.google.com/go/optimization v1.2.0/go.mod h1:Lr7SOHdRDENsh+WXVmQhQTrzdu9ybg0NecjHidBq6xs= +cloud.google.com/go/optimization v1.3.1/go.mod h1:IvUSefKiwd1a5p0RgHDbWCIbDFgKuEdB+fPPuP0IDLI= +cloud.google.com/go/optimization v1.4.1/go.mod h1:j64vZQP7h9bO49m2rVaTVoNM0vEBEN5eKPUPbZyXOrk= +cloud.google.com/go/optimization v1.5.0/go.mod h1:evo1OvTxeBRBu6ydPlrIRizKY/LJKo/drDMMRKqGEUU= +cloud.google.com/go/optimization v1.5.1/go.mod h1:NC0gnUD5MWVAF7XLdoYVPmYYVth93Q6BUzqAq3ZwtV8= +cloud.google.com/go/optimization v1.6.1/go.mod h1:hH2RYPTTM9e9zOiTaYPTiGPcGdNZVnBSBxjIAJzUkqo= +cloud.google.com/go/optimization v1.6.2/go.mod h1:mWNZ7B9/EyMCcwNl1frUGEuY6CPijSkz88Fz2vwKPOY= +cloud.google.com/go/optimization v1.6.3/go.mod h1:8ve3svp3W6NFcAEFr4SfJxrldzhUl4VMUJmhrqVKtYA= +cloud.google.com/go/orchestration v1.3.0/go.mod h1:Sj5tq/JpWiB//X/q3Ngwdl5K7B7Y0KZ7bfv0wL6fqVA= +cloud.google.com/go/orchestration v1.4.0/go.mod h1:6W5NLFWs2TlniBphAViZEVhrXRSMgUGDfW7vrWKvsBk= +cloud.google.com/go/orchestration v1.6.0/go.mod h1:M62Bevp7pkxStDfFfTuCOaXgaaqRAga1yKyoMtEoWPQ= +cloud.google.com/go/orchestration v1.8.1/go.mod h1:4sluRF3wgbYVRqz7zJ1/EUNc90TTprliq9477fGobD8= +cloud.google.com/go/orchestration v1.8.2/go.mod h1:T1cP+6WyTmh6LSZzeUhvGf0uZVmJyTx7t8z7Vg87+A0= +cloud.google.com/go/orchestration v1.8.3/go.mod h1:xhgWAYqlbYjlz2ftbFghdyqENYW+JXuhBx9KsjMoGHs= +cloud.google.com/go/orchestration v1.8.4/go.mod h1:d0lywZSVYtIoSZXb0iFjv9SaL13PGyVOKDxqGxEf/qI= +cloud.google.com/go/orchestration v1.8.5/go.mod h1:C1J7HesE96Ba8/hZ71ISTV2UAat0bwN+pi85ky38Yq8= +cloud.google.com/go/orgpolicy v1.4.0/go.mod h1:xrSLIV4RePWmP9P3tBl8S93lTmlAxjm06NSm2UTmKvE= +cloud.google.com/go/orgpolicy v1.5.0/go.mod h1:hZEc5q3wzwXJaKrsx5+Ewg0u1LxJ51nNFlext7Tanwc= +cloud.google.com/go/orgpolicy v1.10.0/go.mod h1:w1fo8b7rRqlXlIJbVhOMPrwVljyuW5mqssvBtU18ONc= +cloud.google.com/go/orgpolicy v1.11.0/go.mod h1:2RK748+FtVvnfuynxBzdnyu7sygtoZa1za/0ZfpOs1M= +cloud.google.com/go/orgpolicy v1.11.1/go.mod h1:8+E3jQcpZJQliP+zaFfayC2Pg5bmhuLK755wKhIIUCE= +cloud.google.com/go/orgpolicy v1.11.2/go.mod h1:biRDpNwfyytYnmCRWZWxrKF22Nkz9eNVj9zyaBdpm1o= +cloud.google.com/go/orgpolicy v1.11.3/go.mod h1:oKAtJ/gkMjum5icv2aujkP4CxROxPXsBbYGCDbPO8MM= +cloud.google.com/go/orgpolicy v1.11.4/go.mod h1:0+aNV/nrfoTQ4Mytv+Aw+stBDBjNf4d8fYRA9herfJI= +cloud.google.com/go/orgpolicy v1.12.0/go.mod h1:0+aNV/nrfoTQ4Mytv+Aw+stBDBjNf4d8fYRA9herfJI= +cloud.google.com/go/orgpolicy v1.12.1/go.mod h1:aibX78RDl5pcK3jA8ysDQCFkVxLj3aOQqrbBaUL2V5I= +cloud.google.com/go/osconfig v1.7.0/go.mod h1:oVHeCeZELfJP7XLxcBGTMBvRO+1nQ5tFG9VQTmYS2Fs= +cloud.google.com/go/osconfig v1.8.0/go.mod h1:EQqZLu5w5XA7eKizepumcvWx+m8mJUhEwiPqWiZeEdg= +cloud.google.com/go/osconfig v1.9.0/go.mod h1:Yx+IeIZJ3bdWmzbQU4fxNl8xsZ4amB+dygAwFPlvnNo= +cloud.google.com/go/osconfig v1.10.0/go.mod h1:uMhCzqC5I8zfD9zDEAfvgVhDS8oIjySWh+l4WK6GnWw= +cloud.google.com/go/osconfig v1.11.0/go.mod h1:aDICxrur2ogRd9zY5ytBLV89KEgT2MKB2L/n6x1ooPw= +cloud.google.com/go/osconfig v1.12.0/go.mod h1:8f/PaYzoS3JMVfdfTubkowZYGmAhUCjjwnjqWI7NVBc= +cloud.google.com/go/osconfig v1.12.1/go.mod h1:4CjBxND0gswz2gfYRCUoUzCm9zCABp91EeTtWXyz0tE= +cloud.google.com/go/osconfig v1.12.2/go.mod h1:eh9GPaMZpI6mEJEuhEjUJmaxvQ3gav+fFEJon1Y8Iw0= +cloud.google.com/go/osconfig v1.12.3/go.mod h1:L/fPS8LL6bEYUi1au832WtMnPeQNT94Zo3FwwV1/xGM= +cloud.google.com/go/osconfig v1.12.4/go.mod h1:B1qEwJ/jzqSRslvdOCI8Kdnp0gSng0xW4LOnIebQomA= +cloud.google.com/go/osconfig v1.12.5/go.mod h1:D9QFdxzfjgw3h/+ZaAb5NypM8bhOMqBzgmbhzWViiW8= +cloud.google.com/go/oslogin v1.4.0/go.mod h1:YdgMXWRaElXz/lDk1Na6Fh5orF7gvmJ0FGLIs9LId4E= +cloud.google.com/go/oslogin v1.5.0/go.mod h1:D260Qj11W2qx/HVF29zBg+0fd6YCSjSqLUkY/qEenQU= +cloud.google.com/go/oslogin v1.6.0/go.mod h1:zOJ1O3+dTU8WPlGEkFSh7qeHPPSoxrcMbbK1Nm2iX70= +cloud.google.com/go/oslogin v1.7.0/go.mod h1:e04SN0xO1UNJ1M5GP0vzVBFicIe4O53FOfcixIqTyXo= +cloud.google.com/go/oslogin v1.9.0/go.mod h1:HNavntnH8nzrn8JCTT5fj18FuJLFJc4NaZJtBnQtKFs= +cloud.google.com/go/oslogin v1.10.1/go.mod h1:x692z7yAue5nE7CsSnoG0aaMbNoRJRXO4sn73R+ZqAs= +cloud.google.com/go/oslogin v1.11.0/go.mod h1:8GMTJs4X2nOAUVJiPGqIWVcDaF0eniEto3xlOxaboXE= +cloud.google.com/go/oslogin v1.11.1/go.mod h1:OhD2icArCVNUxKqtK0mcSmKL7lgr0LVlQz+v9s1ujTg= +cloud.google.com/go/oslogin v1.12.1/go.mod h1:VfwTeFJGbnakxAY236eN8fsnglLiVXndlbcNomY4iZU= +cloud.google.com/go/oslogin v1.12.2/go.mod h1:CQ3V8Jvw4Qo4WRhNPF0o+HAM4DiLuE27Ul9CX9g2QdY= +cloud.google.com/go/oslogin v1.13.0/go.mod h1:xPJqLwpTZ90LSE5IL1/svko+6c5avZLluiyylMb/sRA= +cloud.google.com/go/oslogin v1.13.1/go.mod h1:vS8Sr/jR7QvPWpCjNqy6LYZr5Zs1e8ZGW/KPn9gmhws= +cloud.google.com/go/phishingprotection v0.5.0/go.mod h1:Y3HZknsK9bc9dMi+oE8Bim0lczMU6hrX0UpADuMefr0= +cloud.google.com/go/phishingprotection v0.6.0/go.mod h1:9Y3LBLgy0kDTcYET8ZH3bq/7qni15yVUoAxiFxnlSUA= +cloud.google.com/go/phishingprotection v0.7.0/go.mod h1:8qJI4QKHoda/sb/7/YmMQ2omRLSLYSu9bU0EKCNI+Lk= +cloud.google.com/go/phishingprotection v0.8.1/go.mod h1:AxonW7GovcA8qdEk13NfHq9hNx5KPtfxXNeUxTDxB6I= +cloud.google.com/go/phishingprotection v0.8.2/go.mod h1:LhJ91uyVHEYKSKcMGhOa14zMMWfbEdxG032oT6ECbC8= +cloud.google.com/go/phishingprotection v0.8.3/go.mod h1:3B01yO7T2Ra/TMojifn8EoGd4G9jts/6cIO0DgDY9J8= +cloud.google.com/go/phishingprotection v0.8.4/go.mod h1:6b3kNPAc2AQ6jZfFHioZKg9MQNybDg4ixFd4RPZZ2nE= +cloud.google.com/go/phishingprotection v0.8.5/go.mod h1:g1smd68F7mF1hgQPuYn3z8HDbNre8L6Z0b7XMYFmX7I= +cloud.google.com/go/policytroubleshooter v1.3.0/go.mod h1:qy0+VwANja+kKrjlQuOzmlvscn4RNsAc0e15GGqfMxg= +cloud.google.com/go/policytroubleshooter v1.4.0/go.mod h1:DZT4BcRw3QoO8ota9xw/LKtPa8lKeCByYeKTIf/vxdE= +cloud.google.com/go/policytroubleshooter v1.5.0/go.mod h1:Rz1WfV+1oIpPdN2VvvuboLVRsB1Hclg3CKQ53j9l8vw= +cloud.google.com/go/policytroubleshooter v1.6.0/go.mod h1:zYqaPTsmfvpjm5ULxAyD/lINQxJ0DDsnWOP/GZ7xzBc= +cloud.google.com/go/policytroubleshooter v1.7.1/go.mod h1:0NaT5v3Ag1M7U5r0GfDCpUFkWd9YqpubBWsQlhanRv0= +cloud.google.com/go/policytroubleshooter v1.8.0/go.mod h1:tmn5Ir5EToWe384EuboTcVQT7nTag2+DuH3uHmKd1HU= +cloud.google.com/go/policytroubleshooter v1.9.0/go.mod h1:+E2Lga7TycpeSTj2FsH4oXxTnrbHJGRlKhVZBLGgU64= +cloud.google.com/go/policytroubleshooter v1.9.1/go.mod h1:MYI8i0bCrL8cW+VHN1PoiBTyNZTstCg2WUw2eVC4c4U= +cloud.google.com/go/policytroubleshooter v1.10.1/go.mod h1:5C0rhT3TDZVxAu8813bwmTvd57Phbl8mr9F4ipOsxEs= +cloud.google.com/go/policytroubleshooter v1.10.2/go.mod h1:m4uF3f6LseVEnMV6nknlN2vYGRb+75ylQwJdnOXfnv0= +cloud.google.com/go/policytroubleshooter v1.10.3/go.mod h1:+ZqG3agHT7WPb4EBIRqUv4OyIwRTZvsVDHZ8GlZaoxk= +cloud.google.com/go/privatecatalog v0.5.0/go.mod h1:XgosMUvvPyxDjAVNDYxJ7wBW8//hLDDYmnsNcMGq1K0= +cloud.google.com/go/privatecatalog v0.6.0/go.mod h1:i/fbkZR0hLN29eEWiiwue8Pb+GforiEIBnV9yrRUOKI= +cloud.google.com/go/privatecatalog v0.7.0/go.mod h1:2s5ssIFO69F5csTXcwBP7NPFTZvps26xGzvQ2PQaBYg= +cloud.google.com/go/privatecatalog v0.8.0/go.mod h1:nQ6pfaegeDAq/Q5lrfCQzQLhubPiZhSaNhIgfJlnIXs= +cloud.google.com/go/privatecatalog v0.9.1/go.mod h1:0XlDXW2unJXdf9zFz968Hp35gl/bhF4twwpXZAW50JA= +cloud.google.com/go/privatecatalog v0.9.2/go.mod h1:RMA4ATa8IXfzvjrhhK8J6H4wwcztab+oZph3c6WmtFc= +cloud.google.com/go/privatecatalog v0.9.3/go.mod h1:K5pn2GrVmOPjXz3T26mzwXLcKivfIJ9R5N79AFCF9UE= +cloud.google.com/go/privatecatalog v0.9.4/go.mod h1:SOjm93f+5hp/U3PqMZAHTtBtluqLygrDrVO8X8tYtG0= +cloud.google.com/go/privatecatalog v0.9.5/go.mod h1:fVWeBOVe7uj2n3kWRGlUQqR/pOd450J9yZoOECcQqJk= +cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= +cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= +cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= +cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= +cloud.google.com/go/pubsub v1.26.0/go.mod h1:QgBH3U/jdJy/ftjPhTkyXNj543Tin1pRYcdcPRnFIRI= +cloud.google.com/go/pubsub v1.27.1/go.mod h1:hQN39ymbV9geqBnfQq6Xf63yNhUAhv9CZhzp5O6qsW0= +cloud.google.com/go/pubsub v1.28.0/go.mod h1:vuXFpwaVoIPQMGXqRyUQigu/AX1S3IWugR9xznmcXX8= +cloud.google.com/go/pubsub v1.30.0/go.mod h1:qWi1OPS0B+b5L+Sg6Gmc9zD1Y+HaM0MdUr7LsupY1P4= +cloud.google.com/go/pubsub v1.32.0/go.mod h1:f+w71I33OMyxf9VpMVcZbnG5KSUkCOUHYpFd5U1GdRc= +cloud.google.com/go/pubsub v1.33.0/go.mod h1:f+w71I33OMyxf9VpMVcZbnG5KSUkCOUHYpFd5U1GdRc= +cloud.google.com/go/pubsub v1.34.0/go.mod h1:alj4l4rBg+N3YTFDDC+/YyFTs6JAjam2QfYsddcAW4c= +cloud.google.com/go/pubsub v1.36.1/go.mod h1:iYjCa9EzWOoBiTdd4ps7QoMtMln5NwaZQpK1hbRfBDE= +cloud.google.com/go/pubsublite v1.5.0/go.mod h1:xapqNQ1CuLfGi23Yda/9l4bBCKz/wC3KIJ5gKcxveZg= +cloud.google.com/go/pubsublite v1.6.0/go.mod h1:1eFCS0U11xlOuMFV/0iBqw3zP12kddMeCbj/F3FSj9k= +cloud.google.com/go/pubsublite v1.7.0/go.mod h1:8hVMwRXfDfvGm3fahVbtDbiLePT3gpoiJYJY+vxWxVM= +cloud.google.com/go/pubsublite v1.8.1/go.mod h1:fOLdU4f5xldK4RGJrBMm+J7zMWNj/k4PxwEZXy39QS0= +cloud.google.com/go/recaptchaenterprise v1.3.1/go.mod h1:OdD+q+y4XGeAlxRaMn1Y7/GveP6zmq76byL6tjPE7d4= +cloud.google.com/go/recaptchaenterprise/v2 v2.1.0/go.mod h1:w9yVqajwroDNTfGuhmOjPDN//rZGySaf6PtFVcSCa7o= +cloud.google.com/go/recaptchaenterprise/v2 v2.2.0/go.mod h1:/Zu5jisWGeERrd5HnlS3EUGb/D335f9k51B/FVil0jk= +cloud.google.com/go/recaptchaenterprise/v2 v2.3.0/go.mod h1:O9LwGCjrhGHBQET5CA7dd5NwwNQUErSgEDit1DLNTdo= +cloud.google.com/go/recaptchaenterprise/v2 v2.4.0/go.mod h1:Am3LHfOuBstrLrNCBrlI5sbwx9LBg3te2N6hGvHn2mE= +cloud.google.com/go/recaptchaenterprise/v2 v2.5.0/go.mod h1:O8LzcHXN3rz0j+LBC91jrwI3R+1ZSZEWrfL7XHgNo9U= +cloud.google.com/go/recaptchaenterprise/v2 v2.6.0/go.mod h1:RPauz9jeLtB3JVzg6nCbe12qNoaa8pXc4d/YukAmcnA= +cloud.google.com/go/recaptchaenterprise/v2 v2.7.0/go.mod h1:19wVj/fs5RtYtynAPJdDTb69oW0vNHYDBTbB4NvMD9c= +cloud.google.com/go/recaptchaenterprise/v2 v2.7.2/go.mod h1:kR0KjsJS7Jt1YSyWFkseQ756D45kaYNTlDPPaRAvDBU= +cloud.google.com/go/recaptchaenterprise/v2 v2.8.0/go.mod h1:QuE8EdU9dEnesG8/kG3XuJyNsjEqMlMzg3v3scCJ46c= +cloud.google.com/go/recaptchaenterprise/v2 v2.8.1/go.mod h1:JZYZJOeZjgSSTGP4uz7NlQ4/d1w5hGmksVgM0lbEij0= +cloud.google.com/go/recaptchaenterprise/v2 v2.8.2/go.mod h1:kpaDBOpkwD4G0GVMzG1W6Doy1tFFC97XAV3xy+Rd/pw= +cloud.google.com/go/recaptchaenterprise/v2 v2.8.3/go.mod h1:Dak54rw6lC2gBY8FBznpOCAR58wKf+R+ZSJRoeJok4w= +cloud.google.com/go/recaptchaenterprise/v2 v2.8.4/go.mod h1:Dak54rw6lC2gBY8FBznpOCAR58wKf+R+ZSJRoeJok4w= +cloud.google.com/go/recaptchaenterprise/v2 v2.9.0/go.mod h1:Dak54rw6lC2gBY8FBznpOCAR58wKf+R+ZSJRoeJok4w= +cloud.google.com/go/recaptchaenterprise/v2 v2.9.2/go.mod h1:trwwGkfhCmp05Ll5MSJPXY7yvnO0p4v3orGANAFHAuU= +cloud.google.com/go/recommendationengine v0.5.0/go.mod h1:E5756pJcVFeVgaQv3WNpImkFP8a+RptV6dDLGPILjvg= +cloud.google.com/go/recommendationengine v0.6.0/go.mod h1:08mq2umu9oIqc7tDy8sx+MNJdLG0fUi3vaSVbztHgJ4= +cloud.google.com/go/recommendationengine v0.7.0/go.mod h1:1reUcE3GIu6MeBz/h5xZJqNLuuVjNg1lmWMPyjatzac= +cloud.google.com/go/recommendationengine v0.8.1/go.mod h1:MrZihWwtFYWDzE6Hz5nKcNz3gLizXVIDI/o3G1DLcrE= +cloud.google.com/go/recommendationengine v0.8.2/go.mod h1:QIybYHPK58qir9CV2ix/re/M//Ty10OxjnnhWdaKS1Y= +cloud.google.com/go/recommendationengine v0.8.3/go.mod h1:m3b0RZV02BnODE9FeSvGv1qibFo8g0OnmB/RMwYy4V8= +cloud.google.com/go/recommendationengine v0.8.4/go.mod h1:GEteCf1PATl5v5ZsQ60sTClUE0phbWmo3rQ1Js8louU= +cloud.google.com/go/recommendationengine v0.8.5/go.mod h1:A38rIXHGFvoPvmy6pZLozr0g59NRNREz4cx7F58HAsQ= +cloud.google.com/go/recommender v1.5.0/go.mod h1:jdoeiBIVrJe9gQjwd759ecLJbxCDED4A6p+mqoqDvTg= +cloud.google.com/go/recommender v1.6.0/go.mod h1:+yETpm25mcoiECKh9DEScGzIRyDKpZ0cEhWGo+8bo+c= +cloud.google.com/go/recommender v1.7.0/go.mod h1:XLHs/W+T8olwlGOgfQenXBTbIseGclClff6lhFVe9Bs= +cloud.google.com/go/recommender v1.8.0/go.mod h1:PkjXrTT05BFKwxaUxQmtIlrtj0kph108r02ZZQ5FE70= +cloud.google.com/go/recommender v1.9.0/go.mod h1:PnSsnZY7q+VL1uax2JWkt/UegHssxjUVVCrX52CuEmQ= +cloud.google.com/go/recommender v1.10.1/go.mod h1:XFvrE4Suqn5Cq0Lf+mCP6oBHD/yRMA8XxP5sb7Q7gpA= +cloud.google.com/go/recommender v1.11.0/go.mod h1:kPiRQhPyTJ9kyXPCG6u/dlPLbYfFlkwHNRwdzPVAoII= +cloud.google.com/go/recommender v1.11.1/go.mod h1:sGwFFAyI57v2Hc5LbIj+lTwXipGu9NW015rkaEM5B18= +cloud.google.com/go/recommender v1.11.2/go.mod h1:AeoJuzOvFR/emIcXdVFkspVXVTYpliRCmKNYDnyBv6Y= +cloud.google.com/go/recommender v1.11.3/go.mod h1:+FJosKKJSId1MBFeJ/TTyoGQZiEelQQIZMKYYD8ruK4= +cloud.google.com/go/recommender v1.12.0/go.mod h1:+FJosKKJSId1MBFeJ/TTyoGQZiEelQQIZMKYYD8ruK4= +cloud.google.com/go/recommender v1.12.1/go.mod h1:gf95SInWNND5aPas3yjwl0I572dtudMhMIG4ni8nr+0= +cloud.google.com/go/redis v1.7.0/go.mod h1:V3x5Jq1jzUcg+UNsRvdmsfuFnit1cfe3Z/PGyq/lm4Y= +cloud.google.com/go/redis v1.8.0/go.mod h1:Fm2szCDavWzBk2cDKxrkmWBqoCiL1+Ctwq7EyqBCA/A= +cloud.google.com/go/redis v1.9.0/go.mod h1:HMYQuajvb2D0LvMgZmLDZW8V5aOC/WxstZHiy4g8OiA= +cloud.google.com/go/redis v1.10.0/go.mod h1:ThJf3mMBQtW18JzGgh41/Wld6vnDDc/F/F35UolRZPM= +cloud.google.com/go/redis v1.11.0/go.mod h1:/X6eicana+BWcUda5PpwZC48o37SiFVTFSs0fWAJ7uQ= +cloud.google.com/go/redis v1.13.1/go.mod h1:VP7DGLpE91M6bcsDdMuyCm2hIpB6Vp2hI090Mfd1tcg= +cloud.google.com/go/redis v1.13.2/go.mod h1:0Hg7pCMXS9uz02q+LoEVl5dNHUkIQv+C/3L76fandSA= +cloud.google.com/go/redis v1.13.3/go.mod h1:vbUpCKUAZSYzFcWKmICnYgRAhTFg9r+djWqFxDYXi4U= +cloud.google.com/go/redis v1.14.1/go.mod h1:MbmBxN8bEnQI4doZPC1BzADU4HGocHBk2de3SbgOkqs= +cloud.google.com/go/redis v1.14.2/go.mod h1:g0Lu7RRRz46ENdFKQ2EcQZBAJ2PtJHJLuiiRuEXwyQw= +cloud.google.com/go/resourcemanager v1.3.0/go.mod h1:bAtrTjZQFJkiWTPDb1WBjzvc6/kifjj4QBYuKCCoqKA= +cloud.google.com/go/resourcemanager v1.4.0/go.mod h1:MwxuzkumyTX7/a3n37gmsT3py7LIXwrShilPh3P1tR0= +cloud.google.com/go/resourcemanager v1.5.0/go.mod h1:eQoXNAiAvCf5PXxWxXjhKQoTMaUSNrEfg+6qdf/wots= +cloud.google.com/go/resourcemanager v1.6.0/go.mod h1:YcpXGRs8fDzcUl1Xw8uOVmI8JEadvhRIkoXXUNVYcVo= +cloud.google.com/go/resourcemanager v1.7.0/go.mod h1:HlD3m6+bwhzj9XCouqmeiGuni95NTrExfhoSrkC/3EI= +cloud.google.com/go/resourcemanager v1.9.1/go.mod h1:dVCuosgrh1tINZ/RwBufr8lULmWGOkPS8gL5gqyjdT8= +cloud.google.com/go/resourcemanager v1.9.2/go.mod h1:OujkBg1UZg5lX2yIyMo5Vz9O5hf7XQOSV7WxqxxMtQE= +cloud.google.com/go/resourcemanager v1.9.3/go.mod h1:IqrY+g0ZgLsihcfcmqSe+RKp1hzjXwG904B92AwBz6U= +cloud.google.com/go/resourcemanager v1.9.4/go.mod h1:N1dhP9RFvo3lUfwtfLWVxfUWq8+KUQ+XLlHLH3BoFJ0= +cloud.google.com/go/resourcemanager v1.9.5/go.mod h1:hep6KjelHA+ToEjOfO3garMKi/CLYwTqeAw7YiEI9x8= +cloud.google.com/go/resourcesettings v1.3.0/go.mod h1:lzew8VfESA5DQ8gdlHwMrqZs1S9V87v3oCnKCWoOuQU= +cloud.google.com/go/resourcesettings v1.4.0/go.mod h1:ldiH9IJpcrlC3VSuCGvjR5of/ezRrOxFtpJoJo5SmXg= +cloud.google.com/go/resourcesettings v1.5.0/go.mod h1:+xJF7QSG6undsQDfsCJyqWXyBwUoJLhetkRMDRnIoXA= +cloud.google.com/go/resourcesettings v1.6.1/go.mod h1:M7mk9PIZrC5Fgsu1kZJci6mpgN8o0IUzVx3eJU3y4Jw= +cloud.google.com/go/resourcesettings v1.6.2/go.mod h1:mJIEDd9MobzunWMeniaMp6tzg4I2GvD3TTmPkc8vBXk= +cloud.google.com/go/resourcesettings v1.6.3/go.mod h1:pno5D+7oDYkMWZ5BpPsb4SO0ewg3IXcmmrUZaMJrFic= +cloud.google.com/go/resourcesettings v1.6.4/go.mod h1:pYTTkWdv2lmQcjsthbZLNBP4QW140cs7wqA3DuqErVI= +cloud.google.com/go/resourcesettings v1.6.5/go.mod h1:WBOIWZraXZOGAgoR4ukNj0o0HiSMO62H9RpFi9WjP9I= +cloud.google.com/go/retail v1.8.0/go.mod h1:QblKS8waDmNUhghY2TI9O3JLlFk8jybHeV4BF19FrE4= +cloud.google.com/go/retail v1.9.0/go.mod h1:g6jb6mKuCS1QKnH/dpu7isX253absFl6iE92nHwlBUY= +cloud.google.com/go/retail v1.10.0/go.mod h1:2gDk9HsL4HMS4oZwz6daui2/jmKvqShXKQuB2RZ+cCc= +cloud.google.com/go/retail v1.11.0/go.mod h1:MBLk1NaWPmh6iVFSz9MeKG/Psyd7TAgm6y/9L2B4x9Y= +cloud.google.com/go/retail v1.12.0/go.mod h1:UMkelN/0Z8XvKymXFbD4EhFJlYKRx1FGhQkVPU5kF14= +cloud.google.com/go/retail v1.14.1/go.mod h1:y3Wv3Vr2k54dLNIrCzenyKG8g8dhvhncT2NcNjb/6gE= +cloud.google.com/go/retail v1.14.2/go.mod h1:W7rrNRChAEChX336QF7bnMxbsjugcOCPU44i5kbLiL8= +cloud.google.com/go/retail v1.14.3/go.mod h1:Omz2akDHeSlfCq8ArPKiBxlnRpKEBjUH386JYFLUvXo= +cloud.google.com/go/retail v1.14.4/go.mod h1:l/N7cMtY78yRnJqp5JW8emy7MB1nz8E4t2yfOmklYfg= +cloud.google.com/go/retail v1.15.1/go.mod h1:In9nSBOYhLbDGa87QvWlnE1XA14xBN2FpQRiRsUs9wU= +cloud.google.com/go/retail v1.16.0/go.mod h1:LW7tllVveZo4ReWt68VnldZFWJRzsh9np+01J9dYWzE= +cloud.google.com/go/run v0.2.0/go.mod h1:CNtKsTA1sDcnqqIFR3Pb5Tq0usWxJJvsWOCPldRU3Do= +cloud.google.com/go/run v0.3.0/go.mod h1:TuyY1+taHxTjrD0ZFk2iAR+xyOXEA0ztb7U3UNA0zBo= +cloud.google.com/go/run v0.8.0/go.mod h1:VniEnuBwqjigv0A7ONfQUaEItaiCRVujlMqerPPiktM= +cloud.google.com/go/run v0.9.0/go.mod h1:Wwu+/vvg8Y+JUApMwEDfVfhetv30hCG4ZwDR/IXl2Qg= +cloud.google.com/go/run v1.2.0/go.mod h1:36V1IlDzQ0XxbQjUx6IYbw8H3TJnWvhii963WW3B/bo= +cloud.google.com/go/run v1.3.0/go.mod h1:S/osX/4jIPZGg+ssuqh6GNgg7syixKe3YnprwehzHKU= +cloud.google.com/go/run v1.3.1/go.mod h1:cymddtZOzdwLIAsmS6s+Asl4JoXIDm/K1cpZTxV4Q5s= +cloud.google.com/go/run v1.3.2/go.mod h1:SIhmqArbjdU/D9M6JoHaAqnAMKLFtXaVdNeq04NjnVE= +cloud.google.com/go/run v1.3.3/go.mod h1:WSM5pGyJ7cfYyYbONVQBN4buz42zFqwG67Q3ch07iK4= +cloud.google.com/go/run v1.3.4/go.mod h1:FGieuZvQ3tj1e9GnzXqrMABSuir38AJg5xhiYq+SF3o= +cloud.google.com/go/scheduler v1.4.0/go.mod h1:drcJBmxF3aqZJRhmkHQ9b3uSSpQoltBPGPxGAWROx6s= +cloud.google.com/go/scheduler v1.5.0/go.mod h1:ri073ym49NW3AfT6DZi21vLZrG07GXr5p3H1KxN5QlI= +cloud.google.com/go/scheduler v1.6.0/go.mod h1:SgeKVM7MIwPn3BqtcBntpLyrIJftQISRrYB5ZtT+KOk= +cloud.google.com/go/scheduler v1.7.0/go.mod h1:jyCiBqWW956uBjjPMMuX09n3x37mtyPJegEWKxRsn44= +cloud.google.com/go/scheduler v1.8.0/go.mod h1:TCET+Y5Gp1YgHT8py4nlg2Sew8nUHMqcpousDgXJVQc= +cloud.google.com/go/scheduler v1.9.0/go.mod h1:yexg5t+KSmqu+njTIh3b7oYPheFtBWGcbVUYF1GGMIc= +cloud.google.com/go/scheduler v1.10.1/go.mod h1:R63Ldltd47Bs4gnhQkmNDse5w8gBRrhObZ54PxgR2Oo= +cloud.google.com/go/scheduler v1.10.2/go.mod h1:O3jX6HRH5eKCA3FutMw375XHZJudNIKVonSCHv7ropY= +cloud.google.com/go/scheduler v1.10.3/go.mod h1:8ANskEM33+sIbpJ+R4xRfw/jzOG+ZFE8WVLy7/yGvbc= +cloud.google.com/go/scheduler v1.10.4/go.mod h1:MTuXcrJC9tqOHhixdbHDFSIuh7xZF2IysiINDuiq6NI= +cloud.google.com/go/scheduler v1.10.5/go.mod h1:MTuXcrJC9tqOHhixdbHDFSIuh7xZF2IysiINDuiq6NI= +cloud.google.com/go/scheduler v1.10.6/go.mod h1:pe2pNCtJ+R01E06XCDOJs1XvAMbv28ZsQEbqknxGOuE= +cloud.google.com/go/secretmanager v1.6.0/go.mod h1:awVa/OXF6IiyaU1wQ34inzQNc4ISIDIrId8qE5QGgKA= +cloud.google.com/go/secretmanager v1.8.0/go.mod h1:hnVgi/bN5MYHd3Gt0SPuTPPp5ENina1/LxM+2W9U9J4= +cloud.google.com/go/secretmanager v1.9.0/go.mod h1:b71qH2l1yHmWQHt9LC80akm86mX8AL6X1MA01dW8ht4= +cloud.google.com/go/secretmanager v1.10.0/go.mod h1:MfnrdvKMPNra9aZtQFvBcvRU54hbPD8/HayQdlUgJpU= +cloud.google.com/go/secretmanager v1.11.1/go.mod h1:znq9JlXgTNdBeQk9TBW/FnR/W4uChEKGeqQWAJ8SXFw= +cloud.google.com/go/secretmanager v1.11.2/go.mod h1:MQm4t3deoSub7+WNwiC4/tRYgDBHJgJPvswqQVB1Vss= +cloud.google.com/go/secretmanager v1.11.3/go.mod h1:0bA2o6FabmShrEy328i67aV+65XoUFFSmVeLBn/51jI= +cloud.google.com/go/secretmanager v1.11.4/go.mod h1:wreJlbS9Zdq21lMzWmJ0XhWW2ZxgPeahsqeV/vZoJ3w= +cloud.google.com/go/secretmanager v1.11.5/go.mod h1:eAGv+DaCHkeVyQi0BeXgAHOU0RdrMeZIASKc+S7VqH4= +cloud.google.com/go/security v1.5.0/go.mod h1:lgxGdyOKKjHL4YG3/YwIL2zLqMFCKs0UbQwgyZmfJl4= +cloud.google.com/go/security v1.7.0/go.mod h1:mZklORHl6Bg7CNnnjLH//0UlAlaXqiG7Lb9PsPXLfD0= +cloud.google.com/go/security v1.8.0/go.mod h1:hAQOwgmaHhztFhiQ41CjDODdWP0+AE1B3sX4OFlq+GU= +cloud.google.com/go/security v1.9.0/go.mod h1:6Ta1bO8LXI89nZnmnsZGp9lVoVWXqsVbIq/t9dzI+2Q= +cloud.google.com/go/security v1.10.0/go.mod h1:QtOMZByJVlibUT2h9afNDWRZ1G96gVywH8T5GUSb9IA= +cloud.google.com/go/security v1.12.0/go.mod h1:rV6EhrpbNHrrxqlvW0BWAIawFWq3X90SduMJdFwtLB8= +cloud.google.com/go/security v1.13.0/go.mod h1:Q1Nvxl1PAgmeW0y3HTt54JYIvUdtcpYKVfIB8AOMZ+0= +cloud.google.com/go/security v1.15.1/go.mod h1:MvTnnbsWnehoizHi09zoiZob0iCHVcL4AUBj76h9fXA= +cloud.google.com/go/security v1.15.2/go.mod h1:2GVE/v1oixIRHDaClVbHuPcZwAqFM28mXuAKCfMgYIg= +cloud.google.com/go/security v1.15.3/go.mod h1:gQ/7Q2JYUZZgOzqKtw9McShH+MjNvtDpL40J1cT+vBs= +cloud.google.com/go/security v1.15.4/go.mod h1:oN7C2uIZKhxCLiAAijKUCuHLZbIt/ghYEo8MqwD/Ty4= +cloud.google.com/go/security v1.15.5/go.mod h1:KS6X2eG3ynWjqcIX976fuToN5juVkF6Ra6c7MPnldtc= +cloud.google.com/go/securitycenter v1.13.0/go.mod h1:cv5qNAqjY84FCN6Y9z28WlkKXyWsgLO832YiWwkCWcU= +cloud.google.com/go/securitycenter v1.14.0/go.mod h1:gZLAhtyKv85n52XYWt6RmeBdydyxfPeTrpToDPw4Auc= +cloud.google.com/go/securitycenter v1.15.0/go.mod h1:PeKJ0t8MoFmmXLXWm41JidyzI3PJjd8sXWaVqg43WWk= +cloud.google.com/go/securitycenter v1.16.0/go.mod h1:Q9GMaLQFUD+5ZTabrbujNWLtSLZIZF7SAR0wWECrjdk= +cloud.google.com/go/securitycenter v1.18.1/go.mod h1:0/25gAzCM/9OL9vVx4ChPeM/+DlfGQJDwBy/UC8AKK0= +cloud.google.com/go/securitycenter v1.19.0/go.mod h1:LVLmSg8ZkkyaNy4u7HCIshAngSQ8EcIRREP3xBnyfag= +cloud.google.com/go/securitycenter v1.23.0/go.mod h1:8pwQ4n+Y9WCWM278R8W3nF65QtY172h4S8aXyI9/hsQ= +cloud.google.com/go/securitycenter v1.23.1/go.mod h1:w2HV3Mv/yKhbXKwOCu2i8bCuLtNP1IMHuiYQn4HJq5s= +cloud.google.com/go/securitycenter v1.24.1/go.mod h1:3h9IdjjHhVMXdQnmqzVnM7b0wMn/1O/U20eWVpMpZjI= +cloud.google.com/go/securitycenter v1.24.2/go.mod h1:l1XejOngggzqwr4Fa2Cn+iWZGf+aBLTXtB/vXjy5vXM= +cloud.google.com/go/securitycenter v1.24.3/go.mod h1:l1XejOngggzqwr4Fa2Cn+iWZGf+aBLTXtB/vXjy5vXM= +cloud.google.com/go/securitycenter v1.24.4/go.mod h1:PSccin+o1EMYKcFQzz9HMMnZ2r9+7jbc+LvPjXhpwcU= +cloud.google.com/go/servicecontrol v1.4.0/go.mod h1:o0hUSJ1TXJAmi/7fLJAedOovnujSEvjKCAFNXPQ1RaU= +cloud.google.com/go/servicecontrol v1.5.0/go.mod h1:qM0CnXHhyqKVuiZnGKrIurvVImCs8gmqWsDoqe9sU1s= +cloud.google.com/go/servicecontrol v1.10.0/go.mod h1:pQvyvSRh7YzUF2efw7H87V92mxU8FnFDawMClGCNuAA= +cloud.google.com/go/servicecontrol v1.11.0/go.mod h1:kFmTzYzTUIuZs0ycVqRHNaNhgR+UMUpw9n02l/pY+mc= +cloud.google.com/go/servicecontrol v1.11.1/go.mod h1:aSnNNlwEFBY+PWGQ2DoM0JJ/QUXqV5/ZD9DOLB7SnUk= +cloud.google.com/go/servicedirectory v1.4.0/go.mod h1:gH1MUaZCgtP7qQiI+F+A+OpeKF/HQWgtAddhTbhL2bs= +cloud.google.com/go/servicedirectory v1.5.0/go.mod h1:QMKFL0NUySbpZJ1UZs3oFAmdvVxhhxB6eJ/Vlp73dfg= +cloud.google.com/go/servicedirectory v1.6.0/go.mod h1:pUlbnWsLH9c13yGkxCmfumWEPjsRs1RlmJ4pqiNjVL4= +cloud.google.com/go/servicedirectory v1.7.0/go.mod h1:5p/U5oyvgYGYejufvxhgwjL8UVXjkuw7q5XcG10wx1U= +cloud.google.com/go/servicedirectory v1.8.0/go.mod h1:srXodfhY1GFIPvltunswqXpVxFPpZjf8nkKQT7XcXaY= +cloud.google.com/go/servicedirectory v1.9.0/go.mod h1:29je5JjiygNYlmsGz8k6o+OZ8vd4f//bQLtvzkPPT/s= +cloud.google.com/go/servicedirectory v1.10.1/go.mod h1:Xv0YVH8s4pVOwfM/1eMTl0XJ6bzIOSLDt8f8eLaGOxQ= +cloud.google.com/go/servicedirectory v1.11.0/go.mod h1:Xv0YVH8s4pVOwfM/1eMTl0XJ6bzIOSLDt8f8eLaGOxQ= +cloud.google.com/go/servicedirectory v1.11.1/go.mod h1:tJywXimEWzNzw9FvtNjsQxxJ3/41jseeILgwU/QLrGI= +cloud.google.com/go/servicedirectory v1.11.2/go.mod h1:KD9hCLhncWRV5jJphwIpugKwM5bn1x0GyVVD4NO8mGg= +cloud.google.com/go/servicedirectory v1.11.3/go.mod h1:LV+cHkomRLr67YoQy3Xq2tUXBGOs5z5bPofdq7qtiAw= +cloud.google.com/go/servicedirectory v1.11.4/go.mod h1:Bz2T9t+/Ehg6x+Y7Ycq5xiShYLD96NfEsWNHyitj1qM= +cloud.google.com/go/servicemanagement v1.4.0/go.mod h1:d8t8MDbezI7Z2R1O/wu8oTggo3BI2GKYbdG4y/SJTco= +cloud.google.com/go/servicemanagement v1.5.0/go.mod h1:XGaCRe57kfqu4+lRxaFEAuqmjzF0r+gWHjWqKqBvKFo= +cloud.google.com/go/servicemanagement v1.6.0/go.mod h1:aWns7EeeCOtGEX4OvZUWCCJONRZeFKiptqKf1D0l/Jc= +cloud.google.com/go/servicemanagement v1.8.0/go.mod h1:MSS2TDlIEQD/fzsSGfCdJItQveu9NXnUniTrq/L8LK4= +cloud.google.com/go/serviceusage v1.3.0/go.mod h1:Hya1cozXM4SeSKTAgGXgj97GlqUvF5JaoXacR1JTP/E= +cloud.google.com/go/serviceusage v1.4.0/go.mod h1:SB4yxXSaYVuUBYUml6qklyONXNLt83U0Rb+CXyhjEeU= +cloud.google.com/go/serviceusage v1.5.0/go.mod h1:w8U1JvqUqwJNPEOTQjrMHkw3IaIFLoLsPLvsE3xueec= +cloud.google.com/go/serviceusage v1.6.0/go.mod h1:R5wwQcbOWsyuOfbP9tGdAnCAc6B9DRwPG1xtWMDeuPA= +cloud.google.com/go/shell v1.3.0/go.mod h1:VZ9HmRjZBsjLGXusm7K5Q5lzzByZmJHf1d0IWHEN5X4= +cloud.google.com/go/shell v1.4.0/go.mod h1:HDxPzZf3GkDdhExzD/gs8Grqk+dmYcEjGShZgYa9URw= +cloud.google.com/go/shell v1.6.0/go.mod h1:oHO8QACS90luWgxP3N9iZVuEiSF84zNyLytb+qE2f9A= +cloud.google.com/go/shell v1.7.1/go.mod h1:u1RaM+huXFaTojTbW4g9P5emOrrmLE69KrxqQahKn4g= +cloud.google.com/go/shell v1.7.2/go.mod h1:KqRPKwBV0UyLickMn0+BY1qIyE98kKyI216sH/TuHmc= +cloud.google.com/go/shell v1.7.3/go.mod h1:cTTEz/JdaBsQAeTQ3B6HHldZudFoYBOqjteev07FbIc= +cloud.google.com/go/shell v1.7.4/go.mod h1:yLeXB8eKLxw0dpEmXQ/FjriYrBijNsONpwnWsdPqlKM= +cloud.google.com/go/shell v1.7.5/go.mod h1:hL2++7F47/IfpfTO53KYf1EC+F56k3ThfNEXd4zcuiE= +cloud.google.com/go/spanner v1.41.0/go.mod h1:MLYDBJR/dY4Wt7ZaMIQ7rXOTLjYrmxLE/5ve9vFfWos= +cloud.google.com/go/spanner v1.44.0/go.mod h1:G8XIgYdOK+Fbcpbs7p2fiprDw4CaZX63whnSMLVBxjk= +cloud.google.com/go/spanner v1.45.0/go.mod h1:FIws5LowYz8YAE1J8fOS7DJup8ff7xJeetWEo5REA2M= +cloud.google.com/go/spanner v1.47.0/go.mod h1:IXsJwVW2j4UKs0eYDqodab6HgGuA1bViSqW4uH9lfUI= +cloud.google.com/go/spanner v1.49.0/go.mod h1:eGj9mQGK8+hkgSVbHNQ06pQ4oS+cyc4tXXd6Dif1KoM= +cloud.google.com/go/spanner v1.50.0/go.mod h1:eGj9mQGK8+hkgSVbHNQ06pQ4oS+cyc4tXXd6Dif1KoM= +cloud.google.com/go/spanner v1.51.0/go.mod h1:c5KNo5LQ1X5tJwma9rSQZsXNBDNvj4/n8BVc3LNahq0= +cloud.google.com/go/spanner v1.53.0/go.mod h1:liG4iCeLqm5L3fFLU5whFITqP0e0orsAW1uUSrd4rws= +cloud.google.com/go/spanner v1.53.1/go.mod h1:liG4iCeLqm5L3fFLU5whFITqP0e0orsAW1uUSrd4rws= +cloud.google.com/go/spanner v1.54.0/go.mod h1:wZvSQVBgngF0Gq86fKup6KIYmN2be7uOKjtK97X+bQU= +cloud.google.com/go/spanner v1.55.0/go.mod h1:HXEznMUVhC+PC+HDyo9YFG2Ajj5BQDkcbqB9Z2Ffxi0= +cloud.google.com/go/spanner v1.56.0/go.mod h1:DndqtUKQAt3VLuV2Le+9Y3WTnq5cNKrnLb/Piqcj+h0= +cloud.google.com/go/speech v1.6.0/go.mod h1:79tcr4FHCimOp56lwC01xnt/WPJZc4v3gzyT7FoBkCM= +cloud.google.com/go/speech v1.7.0/go.mod h1:KptqL+BAQIhMsj1kOP2la5DSEEerPDuOP/2mmkhHhZQ= +cloud.google.com/go/speech v1.8.0/go.mod h1:9bYIl1/tjsAnMgKGHKmBZzXKEkGgtU+MpdDPTE9f7y0= +cloud.google.com/go/speech v1.9.0/go.mod h1:xQ0jTcmnRFFM2RfX/U+rk6FQNUF6DQlydUSyoooSpco= +cloud.google.com/go/speech v1.14.1/go.mod h1:gEosVRPJ9waG7zqqnsHpYTOoAS4KouMRLDFMekpJ0J0= +cloud.google.com/go/speech v1.15.0/go.mod h1:y6oH7GhqCaZANH7+Oe0BhgIogsNInLlz542tg3VqeYI= +cloud.google.com/go/speech v1.17.1/go.mod h1:8rVNzU43tQvxDaGvqOhpDqgkJTFowBpDvCJ14kGlJYo= +cloud.google.com/go/speech v1.19.0/go.mod h1:8rVNzU43tQvxDaGvqOhpDqgkJTFowBpDvCJ14kGlJYo= +cloud.google.com/go/speech v1.19.1/go.mod h1:WcuaWz/3hOlzPFOVo9DUsblMIHwxP589y6ZMtaG+iAA= +cloud.google.com/go/speech v1.19.2/go.mod h1:2OYFfj+Ch5LWjsaSINuCZsre/789zlcCI3SY4oAi2oI= +cloud.google.com/go/speech v1.20.1/go.mod h1:wwolycgONvfz2EDU8rKuHRW3+wc9ILPsAWoikBEWavY= +cloud.google.com/go/speech v1.21.0/go.mod h1:wwolycgONvfz2EDU8rKuHRW3+wc9ILPsAWoikBEWavY= +cloud.google.com/go/speech v1.21.1/go.mod h1:E5GHZXYQlkqWQwY5xRSLHw2ci5NMQNG52FfMU1aZrIA= +cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= +cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= +cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= +cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= +cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= +cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3fOKtUw0Xmo= +cloud.google.com/go/storage v1.22.1/go.mod h1:S8N1cAStu7BOeFfE8KAQzmyyLkK8p/vmRq6kuBTW58Y= +cloud.google.com/go/storage v1.23.0/go.mod h1:vOEEDNFnciUMhBeT6hsJIn3ieU5cFRmzeLgDvXzfIXc= +cloud.google.com/go/storage v1.27.0/go.mod h1:x9DOL8TK/ygDUMieqwfhdpQryTeEkhGKMi80i/iqR2s= +cloud.google.com/go/storage v1.28.1/go.mod h1:Qnisd4CqDdo6BGs2AD5LLnEsmSQ80wQ5ogcBBKhU86Y= +cloud.google.com/go/storage v1.29.0/go.mod h1:4puEjyTKnku6gfKoTfNOU/W+a9JyuVNxjpS5GBrB8h4= +cloud.google.com/go/storage v1.30.1/go.mod h1:NfxhC0UJE1aXSx7CIIbCf7y9HKT7BiccwkR7+P7gN8E= +cloud.google.com/go/storage v1.36.0/go.mod h1:M6M/3V/D3KpzMTJyPOR/HU6n2Si5QdaXYEsng2xgOs8= +cloud.google.com/go/storage v1.37.0/go.mod h1:i34TiT2IhiNDmcj65PqwCjcoUX7Z5pLzS8DEmoiFq1k= +cloud.google.com/go/storage v1.38.0/go.mod h1:tlUADB0mAb9BgYls9lq+8MGkfzOXuLrnHXlpHmvFJoY= +cloud.google.com/go/storagetransfer v1.5.0/go.mod h1:dxNzUopWy7RQevYFHewchb29POFv3/AaBgnhqzqiK0w= +cloud.google.com/go/storagetransfer v1.6.0/go.mod h1:y77xm4CQV/ZhFZH75PLEXY0ROiS7Gh6pSKrM8dJyg6I= +cloud.google.com/go/storagetransfer v1.7.0/go.mod h1:8Giuj1QNb1kfLAiWM1bN6dHzfdlDAVC9rv9abHot2W4= +cloud.google.com/go/storagetransfer v1.8.0/go.mod h1:JpegsHHU1eXg7lMHkvf+KE5XDJ7EQu0GwNJbbVGanEw= +cloud.google.com/go/storagetransfer v1.10.0/go.mod h1:DM4sTlSmGiNczmV6iZyceIh2dbs+7z2Ayg6YAiQlYfA= +cloud.google.com/go/storagetransfer v1.10.1/go.mod h1:rS7Sy0BtPviWYTTJVWCSV4QrbBitgPeuK4/FKa4IdLs= +cloud.google.com/go/storagetransfer v1.10.2/go.mod h1:meIhYQup5rg9juQJdyppnA/WLQCOguxtk1pr3/vBWzA= +cloud.google.com/go/storagetransfer v1.10.3/go.mod h1:Up8LY2p6X68SZ+WToswpQbQHnJpOty/ACcMafuey8gc= +cloud.google.com/go/storagetransfer v1.10.4/go.mod h1:vef30rZKu5HSEf/x1tK3WfWrL0XVoUQN/EPDRGPzjZs= +cloud.google.com/go/talent v1.1.0/go.mod h1:Vl4pt9jiHKvOgF9KoZo6Kob9oV4lwd/ZD5Cto54zDRw= +cloud.google.com/go/talent v1.2.0/go.mod h1:MoNF9bhFQbiJ6eFD3uSsg0uBALw4n4gaCaEjBw9zo8g= +cloud.google.com/go/talent v1.3.0/go.mod h1:CmcxwJ/PKfRgd1pBjQgU6W3YBwiewmUzQYH5HHmSCmM= +cloud.google.com/go/talent v1.4.0/go.mod h1:ezFtAgVuRf8jRsvyE6EwmbTK5LKciD4KVnHuDEFmOOA= +cloud.google.com/go/talent v1.5.0/go.mod h1:G+ODMj9bsasAEJkQSzO2uHQWXHHXUomArjWQQYkqK6c= +cloud.google.com/go/talent v1.6.2/go.mod h1:CbGvmKCG61mkdjcqTcLOkb2ZN1SrQI8MDyma2l7VD24= +cloud.google.com/go/talent v1.6.3/go.mod h1:xoDO97Qd4AK43rGjJvyBHMskiEf3KulgYzcH6YWOVoo= +cloud.google.com/go/talent v1.6.4/go.mod h1:QsWvi5eKeh6gG2DlBkpMaFYZYrYUnIpo34f6/V5QykY= +cloud.google.com/go/talent v1.6.5/go.mod h1:Mf5cma696HmE+P2BWJ/ZwYqeJXEeU0UqjHFXVLadEDI= +cloud.google.com/go/talent v1.6.6/go.mod h1:y/WQDKrhVz12WagoarpAIyKKMeKGKHWPoReZ0g8tseQ= +cloud.google.com/go/texttospeech v1.4.0/go.mod h1:FX8HQHA6sEpJ7rCMSfXuzBcysDAuWusNNNvN9FELDd8= +cloud.google.com/go/texttospeech v1.5.0/go.mod h1:oKPLhR4n4ZdQqWKURdwxMy0uiTS1xU161C8W57Wkea4= +cloud.google.com/go/texttospeech v1.6.0/go.mod h1:YmwmFT8pj1aBblQOI3TfKmwibnsfvhIBzPXcW4EBovc= +cloud.google.com/go/texttospeech v1.7.1/go.mod h1:m7QfG5IXxeneGqTapXNxv2ItxP/FS0hCZBwXYqucgSk= +cloud.google.com/go/texttospeech v1.7.2/go.mod h1:VYPT6aTOEl3herQjFHYErTlSZJ4vB00Q2ZTmuVgluD4= +cloud.google.com/go/texttospeech v1.7.3/go.mod h1:Av/zpkcgWfXlDLRYob17lqMstGZ3GqlvJXqKMp2u8so= +cloud.google.com/go/texttospeech v1.7.4/go.mod h1:vgv0002WvR4liGuSd5BJbWy4nDn5Ozco0uJymY5+U74= +cloud.google.com/go/texttospeech v1.7.5/go.mod h1:tzpCuNWPwrNJnEa4Pu5taALuZL4QRRLcb+K9pbhXT6M= +cloud.google.com/go/tpu v1.3.0/go.mod h1:aJIManG0o20tfDQlRIej44FcwGGl/cD0oiRyMKG19IQ= +cloud.google.com/go/tpu v1.4.0/go.mod h1:mjZaX8p0VBgllCzF6wcU2ovUXN9TONFLd7iz227X2Xg= +cloud.google.com/go/tpu v1.5.0/go.mod h1:8zVo1rYDFuW2l4yZVY0R0fb/v44xLh3llq7RuV61fPM= +cloud.google.com/go/tpu v1.6.1/go.mod h1:sOdcHVIgDEEOKuqUoi6Fq53MKHJAtOwtz0GuKsWSH3E= +cloud.google.com/go/tpu v1.6.2/go.mod h1:NXh3NDwt71TsPZdtGWgAG5ThDfGd32X1mJ2cMaRlVgU= +cloud.google.com/go/tpu v1.6.3/go.mod h1:lxiueqfVMlSToZY1151IaZqp89ELPSrk+3HIQ5HRkbY= +cloud.google.com/go/tpu v1.6.4/go.mod h1:NAm9q3Rq2wIlGnOhpYICNI7+bpBebMJbh0yyp3aNw1Y= +cloud.google.com/go/tpu v1.6.5/go.mod h1:P9DFOEBIBhuEcZhXi+wPoVy/cji+0ICFi4TtTkMHSSs= +cloud.google.com/go/trace v1.3.0/go.mod h1:FFUE83d9Ca57C+K8rDl/Ih8LwOzWIV1krKgxg6N0G28= +cloud.google.com/go/trace v1.4.0/go.mod h1:UG0v8UBqzusp+z63o7FK74SdFE+AXpCLdFb1rshXG+Y= +cloud.google.com/go/trace v1.8.0/go.mod h1:zH7vcsbAhklH8hWFig58HvxcxyQbaIqMarMg9hn5ECA= +cloud.google.com/go/trace v1.9.0/go.mod h1:lOQqpE5IaWY0Ixg7/r2SjixMuc6lfTFeO4QGM4dQWOk= +cloud.google.com/go/trace v1.10.1/go.mod h1:gbtL94KE5AJLH3y+WVpfWILmqgc6dXcqgNXdOPAQTYk= +cloud.google.com/go/trace v1.10.2/go.mod h1:NPXemMi6MToRFcSxRl2uDnu/qAlAQ3oULUphcHGh1vA= +cloud.google.com/go/trace v1.10.3/go.mod h1:Ke1bgfc73RV3wUFml+uQp7EsDw4dGaETLxB7Iq/r4CY= +cloud.google.com/go/trace v1.10.4/go.mod h1:Nso99EDIK8Mj5/zmB+iGr9dosS/bzWCJ8wGmE6TXNWY= +cloud.google.com/go/trace v1.10.5/go.mod h1:9hjCV1nGBCtXbAE4YK7OqJ8pmPYSxPA0I67JwRd5s3M= +cloud.google.com/go/translate v1.3.0/go.mod h1:gzMUwRjvOqj5i69y/LYLd8RrNQk+hOmIXTi9+nb3Djs= +cloud.google.com/go/translate v1.4.0/go.mod h1:06Dn/ppvLD6WvA5Rhdp029IX2Mi3Mn7fpMRLPvXT5Wg= +cloud.google.com/go/translate v1.5.0/go.mod h1:29YDSYveqqpA1CQFD7NQuP49xymq17RXNaUDdc0mNu0= +cloud.google.com/go/translate v1.6.0/go.mod h1:lMGRudH1pu7I3n3PETiOB2507gf3HnfLV8qlkHZEyos= +cloud.google.com/go/translate v1.7.0/go.mod h1:lMGRudH1pu7I3n3PETiOB2507gf3HnfLV8qlkHZEyos= +cloud.google.com/go/translate v1.8.1/go.mod h1:d1ZH5aaOA0CNhWeXeC8ujd4tdCFw8XoNWRljklu5RHs= +cloud.google.com/go/translate v1.8.2/go.mod h1:d1ZH5aaOA0CNhWeXeC8ujd4tdCFw8XoNWRljklu5RHs= +cloud.google.com/go/translate v1.9.0/go.mod h1:d1ZH5aaOA0CNhWeXeC8ujd4tdCFw8XoNWRljklu5RHs= +cloud.google.com/go/translate v1.9.1/go.mod h1:TWIgDZknq2+JD4iRcojgeDtqGEp154HN/uL6hMvylS8= +cloud.google.com/go/translate v1.9.2/go.mod h1:E3Tc6rUTsQkVrXW6avbUhKJSr7ZE3j7zNmqzXKHqRrY= +cloud.google.com/go/translate v1.9.3/go.mod h1:Kbq9RggWsbqZ9W5YpM94Q1Xv4dshw/gr/SHfsl5yCZ0= +cloud.google.com/go/translate v1.10.0/go.mod h1:Kbq9RggWsbqZ9W5YpM94Q1Xv4dshw/gr/SHfsl5yCZ0= +cloud.google.com/go/translate v1.10.1/go.mod h1:adGZcQNom/3ogU65N9UXHOnnSvjPwA/jKQUMnsYXOyk= +cloud.google.com/go/video v1.8.0/go.mod h1:sTzKFc0bUSByE8Yoh8X0mn8bMymItVGPfTuUBUyRgxk= +cloud.google.com/go/video v1.9.0/go.mod h1:0RhNKFRF5v92f8dQt0yhaHrEuH95m068JYOvLZYnJSw= +cloud.google.com/go/video v1.12.0/go.mod h1:MLQew95eTuaNDEGriQdcYn0dTwf9oWiA4uYebxM5kdg= +cloud.google.com/go/video v1.13.0/go.mod h1:ulzkYlYgCp15N2AokzKjy7MQ9ejuynOJdf1tR5lGthk= +cloud.google.com/go/video v1.14.0/go.mod h1:SkgaXwT+lIIAKqWAJfktHT/RbgjSuY6DobxEp0C5yTQ= +cloud.google.com/go/video v1.15.0/go.mod h1:SkgaXwT+lIIAKqWAJfktHT/RbgjSuY6DobxEp0C5yTQ= +cloud.google.com/go/video v1.17.1/go.mod h1:9qmqPqw/Ib2tLqaeHgtakU+l5TcJxCJbhFXM7UJjVzU= +cloud.google.com/go/video v1.19.0/go.mod h1:9qmqPqw/Ib2tLqaeHgtakU+l5TcJxCJbhFXM7UJjVzU= +cloud.google.com/go/video v1.20.0/go.mod h1:U3G3FTnsvAGqglq9LxgqzOiBc/Nt8zis8S+850N2DUM= +cloud.google.com/go/video v1.20.1/go.mod h1:3gJS+iDprnj8SY6pe0SwLeC5BUW80NjhwX7INWEuWGU= +cloud.google.com/go/video v1.20.2/go.mod h1:lrixr5JeKNThsgfM9gqtwb6Okuqzfo4VrY2xynaViTA= +cloud.google.com/go/video v1.20.3/go.mod h1:TnH/mNZKVHeNtpamsSPygSR0iHtvrR/cW1/GDjN5+GU= +cloud.google.com/go/video v1.20.4/go.mod h1:LyUVjyW+Bwj7dh3UJnUGZfyqjEto9DnrvTe1f/+QrW0= +cloud.google.com/go/videointelligence v1.6.0/go.mod h1:w0DIDlVRKtwPCn/C4iwZIJdvC69yInhW0cfi+p546uU= +cloud.google.com/go/videointelligence v1.7.0/go.mod h1:k8pI/1wAhjznARtVT9U1llUaFNPh7muw8QyOUpavru4= +cloud.google.com/go/videointelligence v1.8.0/go.mod h1:dIcCn4gVDdS7yte/w+koiXn5dWVplOZkE+xwG9FgK+M= +cloud.google.com/go/videointelligence v1.9.0/go.mod h1:29lVRMPDYHikk3v8EdPSaL8Ku+eMzDljjuvRs105XoU= +cloud.google.com/go/videointelligence v1.10.0/go.mod h1:LHZngX1liVtUhZvi2uNS0VQuOzNi2TkY1OakiuoUOjU= +cloud.google.com/go/videointelligence v1.11.1/go.mod h1:76xn/8InyQHarjTWsBR058SmlPCwQjgcvoW0aZykOvo= +cloud.google.com/go/videointelligence v1.11.2/go.mod h1:ocfIGYtIVmIcWk1DsSGOoDiXca4vaZQII1C85qtoplc= +cloud.google.com/go/videointelligence v1.11.3/go.mod h1:tf0NUaGTjU1iS2KEkGWvO5hRHeCkFK3nPo0/cOZhZAo= +cloud.google.com/go/videointelligence v1.11.4/go.mod h1:kPBMAYsTPFiQxMLmmjpcZUMklJp3nC9+ipJJtprccD8= +cloud.google.com/go/videointelligence v1.11.5/go.mod h1:/PkeQjpRponmOerPeJxNPuxvi12HlW7Em0lJO14FC3I= +cloud.google.com/go/vision v1.2.0/go.mod h1:SmNwgObm5DpFBme2xpyOyasvBc1aPdjvMk2bBk0tKD0= +cloud.google.com/go/vision/v2 v2.2.0/go.mod h1:uCdV4PpN1S0jyCyq8sIM42v2Y6zOLkZs+4R9LrGYwFo= +cloud.google.com/go/vision/v2 v2.3.0/go.mod h1:UO61abBx9QRMFkNBbf1D8B1LXdS2cGiiCRx0vSpZoUo= +cloud.google.com/go/vision/v2 v2.4.0/go.mod h1:VtI579ll9RpVTrdKdkMzckdnwMyX2JILb+MhPqRbPsY= +cloud.google.com/go/vision/v2 v2.5.0/go.mod h1:MmaezXOOE+IWa+cS7OhRRLK2cNv1ZL98zhqFFZaaH2E= +cloud.google.com/go/vision/v2 v2.6.0/go.mod h1:158Hes0MvOS9Z/bDMSFpjwsUrZ5fPrdwuyyvKSGAGMY= +cloud.google.com/go/vision/v2 v2.7.0/go.mod h1:H89VysHy21avemp6xcf9b9JvZHVehWbET0uT/bcuY/0= +cloud.google.com/go/vision/v2 v2.7.2/go.mod h1:jKa8oSYBWhYiXarHPvP4USxYANYUEdEsQrloLjrSwJU= +cloud.google.com/go/vision/v2 v2.7.3/go.mod h1:V0IcLCY7W+hpMKXK1JYE0LV5llEqVmj+UJChjvA1WsM= +cloud.google.com/go/vision/v2 v2.7.4/go.mod h1:ynDKnsDN/0RtqkKxQZ2iatv3Dm9O+HfRb5djl7l4Vvw= +cloud.google.com/go/vision/v2 v2.7.5/go.mod h1:GcviprJLFfK9OLf0z8Gm6lQb6ZFUulvpZws+mm6yPLM= +cloud.google.com/go/vision/v2 v2.7.6/go.mod h1:ZkvWTVNPBU3YZYzgF9Y1jwEbD1NBOCyJn0KFdQfE6Bw= +cloud.google.com/go/vision/v2 v2.8.0/go.mod h1:ocqDiA2j97pvgogdyhoxiQp2ZkDCyr0HWpicywGGRhU= +cloud.google.com/go/vmmigration v1.2.0/go.mod h1:IRf0o7myyWFSmVR1ItrBSFLFD/rJkfDCUTO4vLlJvsE= +cloud.google.com/go/vmmigration v1.3.0/go.mod h1:oGJ6ZgGPQOFdjHuocGcLqX4lc98YQ7Ygq8YQwHh9A7g= +cloud.google.com/go/vmmigration v1.5.0/go.mod h1:E4YQ8q7/4W9gobHjQg4JJSgXXSgY21nA5r8swQV+Xxc= +cloud.google.com/go/vmmigration v1.6.0/go.mod h1:bopQ/g4z+8qXzichC7GW1w2MjbErL54rk3/C843CjfY= +cloud.google.com/go/vmmigration v1.7.1/go.mod h1:WD+5z7a/IpZ5bKK//YmT9E047AD+rjycCAvyMxGJbro= +cloud.google.com/go/vmmigration v1.7.2/go.mod h1:iA2hVj22sm2LLYXGPT1pB63mXHhrH1m/ruux9TwWLd8= +cloud.google.com/go/vmmigration v1.7.3/go.mod h1:ZCQC7cENwmSWlwyTrZcWivchn78YnFniEQYRWQ65tBo= +cloud.google.com/go/vmmigration v1.7.4/go.mod h1:yBXCmiLaB99hEl/G9ZooNx2GyzgsjKnw5fWcINRgD70= +cloud.google.com/go/vmmigration v1.7.5/go.mod h1:pkvO6huVnVWzkFioxSghZxIGcsstDvYiVCxQ9ZH3eYI= +cloud.google.com/go/vmwareengine v0.1.0/go.mod h1:RsdNEf/8UDvKllXhMz5J40XxDrNJNN4sagiox+OI208= +cloud.google.com/go/vmwareengine v0.2.2/go.mod h1:sKdctNJxb3KLZkE/6Oui94iw/xs9PRNC2wnNLXsHvH8= +cloud.google.com/go/vmwareengine v0.3.0/go.mod h1:wvoyMvNWdIzxMYSpH/R7y2h5h3WFkx6d+1TIsP39WGY= +cloud.google.com/go/vmwareengine v0.4.1/go.mod h1:Px64x+BvjPZwWuc4HdmVhoygcXqEkGHXoa7uyfTgSI0= +cloud.google.com/go/vmwareengine v1.0.0/go.mod h1:Px64x+BvjPZwWuc4HdmVhoygcXqEkGHXoa7uyfTgSI0= +cloud.google.com/go/vmwareengine v1.0.1/go.mod h1:aT3Xsm5sNx0QShk1Jc1B8OddrxAScYLwzVoaiXfdzzk= +cloud.google.com/go/vmwareengine v1.0.2/go.mod h1:xMSNjIk8/itYrz1JA8nV3Ajg4L4n3N+ugP8JKzk3OaA= +cloud.google.com/go/vmwareengine v1.0.3/go.mod h1:QSpdZ1stlbfKtyt6Iu19M6XRxjmXO+vb5a/R6Fvy2y4= +cloud.google.com/go/vmwareengine v1.1.1/go.mod h1:nMpdsIVkUrSaX8UvmnBhzVzG7PPvNYc5BszcvIVudYs= +cloud.google.com/go/vpcaccess v1.4.0/go.mod h1:aQHVbTWDYUR1EbTApSVvMq1EnT57ppDmQzZ3imqIk4w= +cloud.google.com/go/vpcaccess v1.5.0/go.mod h1:drmg4HLk9NkZpGfCmZ3Tz0Bwnm2+DKqViEpeEpOq0m8= +cloud.google.com/go/vpcaccess v1.6.0/go.mod h1:wX2ILaNhe7TlVa4vC5xce1bCnqE3AeH27RV31lnmZes= +cloud.google.com/go/vpcaccess v1.7.1/go.mod h1:FogoD46/ZU+JUBX9D606X21EnxiszYi2tArQwLY4SXs= +cloud.google.com/go/vpcaccess v1.7.2/go.mod h1:mmg/MnRHv+3e8FJUjeSibVFvQF1cCy2MsFaFqxeY1HU= +cloud.google.com/go/vpcaccess v1.7.3/go.mod h1:YX4skyfW3NC8vI3Fk+EegJnlYFatA+dXK4o236EUCUc= +cloud.google.com/go/vpcaccess v1.7.4/go.mod h1:lA0KTvhtEOb/VOdnH/gwPuOzGgM+CWsmGu6bb4IoMKk= +cloud.google.com/go/vpcaccess v1.7.5/go.mod h1:slc5ZRvvjP78c2dnL7m4l4R9GwL3wDLcpIWz6P/ziig= +cloud.google.com/go/webrisk v1.4.0/go.mod h1:Hn8X6Zr+ziE2aNd8SliSDWpEnSS1u4R9+xXZmFiHmGE= +cloud.google.com/go/webrisk v1.5.0/go.mod h1:iPG6fr52Tv7sGk0H6qUFzmL3HHZev1htXuWDEEsqMTg= +cloud.google.com/go/webrisk v1.6.0/go.mod h1:65sW9V9rOosnc9ZY7A7jsy1zoHS5W9IAXv6dGqhMQMc= +cloud.google.com/go/webrisk v1.7.0/go.mod h1:mVMHgEYH0r337nmt1JyLthzMr6YxwN1aAIEc2fTcq7A= +cloud.google.com/go/webrisk v1.8.0/go.mod h1:oJPDuamzHXgUc+b8SiHRcVInZQuybnvEW72PqTc7sSg= +cloud.google.com/go/webrisk v1.9.1/go.mod h1:4GCmXKcOa2BZcZPn6DCEvE7HypmEJcJkr4mtM+sqYPc= +cloud.google.com/go/webrisk v1.9.2/go.mod h1:pY9kfDgAqxUpDBOrG4w8deLfhvJmejKB0qd/5uQIPBc= +cloud.google.com/go/webrisk v1.9.3/go.mod h1:RUYXe9X/wBDXhVilss7EDLW9ZNa06aowPuinUOPCXH8= +cloud.google.com/go/webrisk v1.9.4/go.mod h1:w7m4Ib4C+OseSr2GL66m0zMBywdrVNTDKsdEsfMl7X0= +cloud.google.com/go/webrisk v1.9.5/go.mod h1:aako0Fzep1Q714cPEM5E+mtYX8/jsfegAuS8aivxy3U= +cloud.google.com/go/websecurityscanner v1.3.0/go.mod h1:uImdKm2wyeXQevQJXeh8Uun/Ym1VqworNDlBXQevGMo= +cloud.google.com/go/websecurityscanner v1.4.0/go.mod h1:ebit/Fp0a+FWu5j4JOmJEV8S8CzdTkAS77oDsiSqYWQ= +cloud.google.com/go/websecurityscanner v1.5.0/go.mod h1:Y6xdCPy81yi0SQnDY1xdNTNpfY1oAgXUlcfN3B3eSng= +cloud.google.com/go/websecurityscanner v1.6.1/go.mod h1:Njgaw3rttgRHXzwCB8kgCYqv5/rGpFCsBOvPbYgszpg= +cloud.google.com/go/websecurityscanner v1.6.2/go.mod h1:7YgjuU5tun7Eg2kpKgGnDuEOXWIrh8x8lWrJT4zfmas= +cloud.google.com/go/websecurityscanner v1.6.3/go.mod h1:x9XANObUFR+83Cya3g/B9M/yoHVqzxPnFtgF8yYGAXw= +cloud.google.com/go/websecurityscanner v1.6.4/go.mod h1:mUiyMQ+dGpPPRkHgknIZeCzSHJ45+fY4F52nZFDHm2o= +cloud.google.com/go/websecurityscanner v1.6.5/go.mod h1:QR+DWaxAz2pWooylsBF854/Ijvuoa3FCyS1zBa1rAVQ= +cloud.google.com/go/workflows v1.6.0/go.mod h1:6t9F5h/unJz41YqfBmqSASJSXccBLtD1Vwf+KmJENM0= +cloud.google.com/go/workflows v1.7.0/go.mod h1:JhSrZuVZWuiDfKEFxU0/F1PQjmpnpcoISEXH2bcHC3M= +cloud.google.com/go/workflows v1.8.0/go.mod h1:ysGhmEajwZxGn1OhGOGKsTXc5PyxOc0vfKf5Af+to4M= +cloud.google.com/go/workflows v1.9.0/go.mod h1:ZGkj1aFIOd9c8Gerkjjq7OW7I5+l6cSvT3ujaO/WwSA= +cloud.google.com/go/workflows v1.10.0/go.mod h1:fZ8LmRmZQWacon9UCX1r/g/DfAXx5VcPALq2CxzdePw= +cloud.google.com/go/workflows v1.11.1/go.mod h1:Z+t10G1wF7h8LgdY/EmRcQY8ptBD/nvofaL6FqlET6g= +cloud.google.com/go/workflows v1.12.0/go.mod h1:PYhSk2b6DhZ508tj8HXKaBh+OFe+xdl0dHF/tJdzPQM= +cloud.google.com/go/workflows v1.12.1/go.mod h1:5A95OhD/edtOhQd/O741NSfIMezNTbCwLM1P1tBRGHM= +cloud.google.com/go/workflows v1.12.2/go.mod h1:+OmBIgNqYJPVggnMo9nqmizW0qEXHhmnAzK/CnBqsHc= +cloud.google.com/go/workflows v1.12.3/go.mod h1:fmOUeeqEwPzIU81foMjTRQIdwQHADi/vEr1cx9R1m5g= +cloud.google.com/go/workflows v1.12.4/go.mod h1:yQ7HUqOkdJK4duVtMeBCAOPiN1ZF1E9pAMX51vpwB/w= +dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= +filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA= +filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4= +gioui.org v0.0.0-20210308172011-57750fc8a0a6/go.mod h1:RSH6KIUZ0p2xy5zHDxgAM4zumjgTw83q2ge/PI+yyw8= +git.sr.ht/~sbinet/gg v0.3.1/go.mod h1:KGYtlADtqsqANL9ueOFkWymvzUvLMQllU5Ixo+8v3pc= +github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= +github.com/JohnCGriffin/overflow v0.0.0-20211019200055-46fa312c352c/go.mod h1:X0CRv0ky0k6m906ixxpzmDRLvX58TFUKS2eePweuyxk= +github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= +github.com/QcloudApi/qcloud_sign_golang v0.0.0-20141224014652-e4130a326409/go.mod h1:1pk82RBxDY/JZnPQrtqHlUFfCctgdorsd9M06fMynOM= +github.com/ajstarks/deck v0.0.0-20200831202436-30c9fc6549a9/go.mod h1:JynElWSGnm/4RlzPXRlREEwqTHAN3T56Bv2ITsFT3gY= +github.com/ajstarks/deck/generate v0.0.0-20210309230005-c3f852c02e19/go.mod h1:T13YZdzov6OU0A1+RfKZiZN9ca6VeKdBdyDV+BY97Tk= +github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw= +github.com/ajstarks/svgo v0.0.0-20211024235047-1546f124cd8b/go.mod h1:1KcenG0jGWcpt8ov532z81sp/kMMUG485J2InIOyADM= +github.com/alecthomas/assert/v2 v2.2.2/go.mod h1:pXcQ2Asjp247dahGEmsZ6ru0UVwnkhktn7S0bBDLxvQ= +github.com/alecthomas/assert/v2 v2.3.0/go.mod h1:pXcQ2Asjp247dahGEmsZ6ru0UVwnkhktn7S0bBDLxvQ= +github.com/alecthomas/participle/v2 v2.0.0/go.mod h1:rAKZdJldHu8084ojcWevWAL8KmEU+AT+Olodb+WoN2Y= +github.com/alecthomas/participle/v2 v2.1.0/go.mod h1:Y1+hAs8DHPmc3YUFzqllV+eSQ9ljPTk0ZkPMtEdAx2c= +github.com/alecthomas/repr v0.2.0/go.mod h1:Fr0507jx4eOXV7AlPV6AVZLYrLIuIeSOWtW57eE/O/4= +github.com/andybalholm/brotli v1.0.4/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig= +github.com/andybalholm/brotli v1.0.5/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig= +github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= +github.com/apache/arrow/go/v10 v10.0.1/go.mod h1:YvhnlEePVnBS4+0z3fhPfUy7W1Ikj0Ih0vcRo/gZ1M0= +github.com/apache/arrow/go/v11 v11.0.0/go.mod h1:Eg5OsL5H+e299f7u5ssuXsuHQVEGC4xei5aX110hRiI= +github.com/apache/arrow/go/v12 v12.0.0/go.mod h1:d+tV/eHZZ7Dz7RPrFKtPK02tpr+c9/PEd/zm8mDS9Vg= +github.com/apache/arrow/go/v12 v12.0.1/go.mod h1:weuTY7JvTG/HDPtMQxEUp7pU73vkLWMLpY67QwZ/WWw= +github.com/apache/arrow/go/v14 v14.0.2/go.mod h1:u3fgh3EdgN/YQ8cVQRguVW3R+seMybFg8QBQ5LU+eBY= +github.com/apache/thrift v0.16.0/go.mod h1:PHK3hniurgQaNMZYaCLEqXKsYK8upmhPbmdP2FXSqgU= +github.com/apache/thrift v0.17.0/go.mod h1:OLxhMRJxomX+1I/KUw03qoV3mMz16BwaKI+d4fPBx7Q= +github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= +github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= +github.com/boombuler/barcode v1.0.0/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8= +github.com/boombuler/barcode v1.0.1/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8= +github.com/bsm/ginkgo/v2 v2.12.0 h1:Ny8MWAHyOepLGlLKYmXG4IEkioBysk6GpaRTLC8zwWs= +github.com/bsm/gomega v1.27.10 h1:yeMWxP2pV2fG3FgAODIY8EiRE3dy0aeFYt4l7wh6yKA= +github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/census-instrumentation/opencensus-proto v0.3.0/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/census-instrumentation/opencensus-proto v0.4.1/go.mod h1:4T9NM4+4Vw91VeyqjLS6ao50K5bOcLKN6Q42XnYaRYw= +github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= +github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= +github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= +github.com/chzyer/logex v1.2.0/go.mod h1:9+9sk7u7pGNWYMkh0hdiL++6OeibzJccyQU4p4MedaY= +github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= +github.com/chzyer/readline v1.5.0/go.mod h1:x22KAscuvRqlLoK9CsoYsmxoXZMMFVyOl86cAH8qUic= +github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= +github.com/chzyer/test v0.0.0-20210722231415-061457976a23/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= +github.com/clbanning/mxj v1.8.4 h1:HuhwZtbyvyOw+3Z1AowPkU87JkJUSv751ELWaiTpj8I= +github.com/clbanning/mxj v1.8.4/go.mod h1:BVjHeAH+rl9rs6f+QIpeRl0tfu10SXn1pUSa5PVGJng= +github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= +github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= +github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= +github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= +github.com/cncf/udpa/go v0.0.0-20220112060539-c52dc94e7fbe/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= +github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20220314180256-7f1daf1720fc/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20230105202645-06c439db220b/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20230310173818-32f1caf87195/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20230428030218-4003588d1b74/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20230607035331-e9ce68804cb4/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20231109132714-523115ebc101/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20231128003011-0fa0005c9caa/go.mod h1:x/1Gn8zydmfq8dk6e9PdstVsDgu9RuyIIJqAaF//0IM= +github.com/cncf/xds/go v0.0.0-20240318125728-8a4994d93e50/go.mod h1:5e1+Vvlzido69INQaVO6d87Qn543Xr6nooe9Kz7oBFM= +github.com/cncf/xds/go v0.0.0-20240423153145-555b57ec207b/go.mod h1:W+zGtBO5Y1IgJhy4+A9GOqVhqLpfZi+vwmdNXUehLA8= +github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= +github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= +github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78= +github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc= +github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= +github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= +github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= +github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= +github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po= +github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= +github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= +github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= +github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= +github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go.mod h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE= +github.com/envoyproxy/go-control-plane v0.10.3/go.mod h1:fJJn/j26vwOu972OllsvAgJJM//w9BV6Fxbg2LuVd34= +github.com/envoyproxy/go-control-plane v0.11.0/go.mod h1:VnHyVMpzcLvCFt9yUz1UnCwHLhwx1WguiVDV7pTG/tI= +github.com/envoyproxy/go-control-plane v0.11.1-0.20230524094728-9239064ad72f/go.mod h1:sfYdkwUW4BA3PbKjySwjJy+O4Pu0h62rlqCMHNk+K+Q= +github.com/envoyproxy/go-control-plane v0.11.1/go.mod h1:uhMcXKCQMEJHiAb0w+YGefQLaTEw+YhGluxZkrTmD0g= +github.com/envoyproxy/go-control-plane v0.12.0/go.mod h1:ZBTaoJ23lqITozF0M6G4/IragXCQKCnYbmlmtHvwRG0= +github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/envoyproxy/protoc-gen-validate v0.6.7/go.mod h1:dyJXwwfPK2VSqiB9Klm1J6romD608Ba7Hij42vrOBCo= +github.com/envoyproxy/protoc-gen-validate v0.9.1/go.mod h1:OKNgG7TCp5pF4d6XftA0++PMirau2/yoOwVac3AbF2w= +github.com/envoyproxy/protoc-gen-validate v0.10.0/go.mod h1:DRjgyB0I43LtJapqN6NiRwroiAU2PaFuvk/vjgh61ss= +github.com/envoyproxy/protoc-gen-validate v0.10.1/go.mod h1:DRjgyB0I43LtJapqN6NiRwroiAU2PaFuvk/vjgh61ss= +github.com/envoyproxy/protoc-gen-validate v1.0.1/go.mod h1:0vj8bNkYbSTNS2PIyH87KZaeN4x9zpL9Qt8fQC7d+vs= +github.com/envoyproxy/protoc-gen-validate v1.0.2/go.mod h1:GpiZQP3dDbg4JouG/NNS7QWXpgx6x8QiMKdmN72jogE= +github.com/envoyproxy/protoc-gen-validate v1.0.4/go.mod h1:qys6tmnRsYrQqIhm2bvKZH4Blx/1gTIZ2UKVY1M+Yew= +github.com/fatih/color v1.10.0/go.mod h1:ELkj/draVOlAH/xkhN6mQ50Qd0MPOk5AAr3maGEBuJM= +github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= +github.com/fatih/color v1.15.0/go.mod h1:0h5ZqXfHYED7Bhv2ZJamyIOUej9KtShiJESRwBDUSsw= +github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= +github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= +github.com/fogleman/gg v1.3.0/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= +github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= +github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA= +github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM= +github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= +github.com/go-fonts/dejavu v0.1.0/go.mod h1:4Wt4I4OU2Nq9asgDCteaAaWZOV24E+0/Pwo0gppep4g= +github.com/go-fonts/latin-modern v0.2.0/go.mod h1:rQVLdDMK+mK1xscDwsqM5J8U2jrRa3T0ecnM9pNujks= +github.com/go-fonts/liberation v0.1.1/go.mod h1:K6qoJYypsmfVjWg8KOVDQhLc8UDgIK2HYqyqAO9z7GY= +github.com/go-fonts/liberation v0.2.0/go.mod h1:K6qoJYypsmfVjWg8KOVDQhLc8UDgIK2HYqyqAO9z7GY= +github.com/go-fonts/stix v0.1.0/go.mod h1:w/c1f0ldAUlJmLBvlbkvVXLAD+tAMqobIIQpmnUIzUY= +github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= +github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/go-latex/latex v0.0.0-20210118124228-b3d85cf34e07/go.mod h1:CO1AlKB2CSIqUrmQPqA0gdRIlnLEY0gK5JGjh37zN5U= +github.com/go-latex/latex v0.0.0-20210823091927-c0d11ff05a81/go.mod h1:SX0U8uGpxhq9o2S/CELCSUxEWWAuoCUcVCQWv7G2OCk= +github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/logr v1.2.4/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/logr v1.3.0/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= +github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= +github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= +github.com/go-pdf/fpdf v0.5.0/go.mod h1:HzcnA+A23uwogo0tp9yU+l3V+KXhiESpt1PMayhOh5M= +github.com/go-pdf/fpdf v0.6.0/go.mod h1:HzcnA+A23uwogo0tp9yU+l3V+KXhiESpt1PMayhOh5M= +github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= +github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8= +github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA= +github.com/go-playground/validator/v10 v10.4.1/go.mod h1:nlOn6nFhuKACm19sB/8EGNn9GlaMV7XkbRSipzJ0Ii4= +github.com/go-sql-driver/mysql v1.8.1 h1:LedoTUt/eveggdHS9qUFC1EFSa8bU2+1pZjSRpvNJ1Y= +github.com/go-sql-driver/mysql v1.8.1/go.mod h1:wEBSXgmK//2ZFJyE+qWnIsVGmvmEKlqwuVSjsCm7DZg= +github.com/goccy/go-json v0.9.11/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= +github.com/goccy/go-json v0.10.2/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= +github.com/goccy/go-yaml v1.9.8/go.mod h1:JubOolP3gh0HpiBc4BLRD4YmjEjHAmIIB2aaXKkTfoE= +github.com/goccy/go-yaml v1.11.0/go.mod h1:H+mJrWtjPTJAHvRbV09MCK9xYwODM+wRTVFFTWckfng= +github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= +github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/glog v1.0.0/go.mod h1:EWib/APOK0SL3dFbYqvxE3UYd8E6s1ouQ7iEp/0LWV4= +github.com/golang/glog v1.1.0/go.mod h1:pfYeQZ3JWZoXTV5sFc986z3HTpwQs9At6P4ImfuP3NQ= +github.com/golang/glog v1.1.2/go.mod h1:zR+okUeTbrL6EL3xHUDxZuEtGv04p5shwip1+mL/rLQ= +github.com/golang/glog v1.2.0/go.mod h1:6AhwSGph0fcJtXVM/PEHPqZlFeoLxhs7/t5UDAwmO+w= +github.com/golang/glog v1.2.1/go.mod h1:6AhwSGph0fcJtXVM/PEHPqZlFeoLxhs7/t5UDAwmO+w= +github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= +github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= +github.com/golang/mock v1.5.0/go.mod h1:CWnOUgYIOo4TcNZ0wHX3YZCqsaM1I1Jvs6v3mP3KVu8= +github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= +github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= +github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= +github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= +github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= +github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= +github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= +github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= +github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= +github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx4u74HPM= +github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= +github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= +github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/flatbuffers v2.0.8+incompatible/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8= +github.com/google/flatbuffers v23.5.26+incompatible/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8= +github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= +github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE= +github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= +github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-pkcs11 v0.2.0/go.mod h1:6eQoGcuNJpa7jnd5pMGdkSaQpNDYvPlXWMcjXXThLlY= +github.com/google/go-pkcs11 v0.2.1-0.20230907215043-c6f79328ddf9/go.mod h1:6eQoGcuNJpa7jnd5pMGdkSaQpNDYvPlXWMcjXXThLlY= +github.com/google/go-querystring v1.0.0 h1:Xkwi/a1rcvNg1PPYe5vI8GbeBY/jrVuDX5ASuANWTrk= +github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= +github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= +github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= +github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= +github.com/google/martian/v3 v3.2.1/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= +github.com/google/martian/v3 v3.3.2/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= +github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= +github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= +github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20201218002935-b9804c9f04c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20221118152302-e6195bd50e26/go.mod h1:dDKJzRmX4S37WGHujM7tX//fmj1uioxKzKxz3lo4HJo= +github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= +github.com/google/s2a-go v0.1.0/go.mod h1:OJpEgntRZo8ugHpF9hkoLJbS5dSI20XZeXJ9JVywLlM= +github.com/google/s2a-go v0.1.3/go.mod h1:Ej+mSEMGRnqRzjc7VtF+jdBwYG5fuJfiZ8ELkjEwM0A= +github.com/google/s2a-go v0.1.4/go.mod h1:Ej+mSEMGRnqRzjc7VtF+jdBwYG5fuJfiZ8ELkjEwM0A= +github.com/google/s2a-go v0.1.7/go.mod h1:50CgR4k1jNlWBu4UfS4AcfhVe1r6pdZPygJ3R8F0Qdw= +github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.3.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.4.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.5.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= +github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/googleapis/enterprise-certificate-proxy v0.0.0-20220520183353-fd19c99a87aa/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= +github.com/googleapis/enterprise-certificate-proxy v0.1.0/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= +github.com/googleapis/enterprise-certificate-proxy v0.2.0/go.mod h1:8C0jb7/mgJe/9KK8Lm7X9ctZC2t60YyIpYEI16jx0Qg= +github.com/googleapis/enterprise-certificate-proxy v0.2.1/go.mod h1:AwSRAtLfXpU5Nm3pW+v7rGDHp09LsPtGY9MduiEsR9k= +github.com/googleapis/enterprise-certificate-proxy v0.2.3/go.mod h1:AwSRAtLfXpU5Nm3pW+v7rGDHp09LsPtGY9MduiEsR9k= +github.com/googleapis/enterprise-certificate-proxy v0.2.4/go.mod h1:AwSRAtLfXpU5Nm3pW+v7rGDHp09LsPtGY9MduiEsR9k= +github.com/googleapis/enterprise-certificate-proxy v0.2.5/go.mod h1:RxW0N9901Cko1VOCW3SXCpWP+mlIEkk2tP7jnHy9a3w= +github.com/googleapis/enterprise-certificate-proxy v0.3.2/go.mod h1:VLSiSSBs/ksPL8kq3OBOQ6WRI2QnaFynd1DCjZ62+V0= +github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= +github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= +github.com/googleapis/gax-go/v2 v2.1.0/go.mod h1:Q3nei7sK6ybPYH7twZdmQpAd1MKb7pfu6SK+H1/DsU0= +github.com/googleapis/gax-go/v2 v2.1.1/go.mod h1:hddJymUZASv3XPyGkUpKj8pPO47Rmb0eJc8R6ouapiM= +github.com/googleapis/gax-go/v2 v2.2.0/go.mod h1:as02EH8zWkzwUoLbBaFeQ+arQaj/OthfcblKl4IGNaM= +github.com/googleapis/gax-go/v2 v2.3.0/go.mod h1:b8LNqSzNabLiUpXKkY7HAR5jr6bIT99EXz9pXxye9YM= +github.com/googleapis/gax-go/v2 v2.4.0/go.mod h1:XOTVJ59hdnfJLIP/dh8n5CGryZR2LxK9wbMD5+iXC6c= +github.com/googleapis/gax-go/v2 v2.5.1/go.mod h1:h6B0KMMFNtI2ddbGJn3T3ZbwkeT6yqEF02fYlzkUCyo= +github.com/googleapis/gax-go/v2 v2.6.0/go.mod h1:1mjbznJAPHFpesgE5ucqfYEscaz5kMdcIDwU/6+DDoY= +github.com/googleapis/gax-go/v2 v2.7.0/go.mod h1:TEop28CZZQ2y+c0VxMUmu1lV+fQx57QpBWsYpwqHJx8= +github.com/googleapis/gax-go/v2 v2.7.1/go.mod h1:4orTrqY6hXxxaUL4LHIPl6lGo8vAE38/qKbhSAKP6QI= +github.com/googleapis/gax-go/v2 v2.8.0/go.mod h1:4orTrqY6hXxxaUL4LHIPl6lGo8vAE38/qKbhSAKP6QI= +github.com/googleapis/gax-go/v2 v2.10.0/go.mod h1:4UOEnMCrxsSqQ940WnTiD6qJ63le2ev3xfyagutxiPw= +github.com/googleapis/gax-go/v2 v2.11.0/go.mod h1:DxmR61SGKkGLa2xigwuZIQpkCI2S5iydzRfb3peWZJI= +github.com/googleapis/gax-go/v2 v2.12.0/go.mod h1:y+aIqrI5eb1YGMVJfuV3185Ts/D7qKpsEkdD5+I6QGU= +github.com/googleapis/gax-go/v2 v2.12.1/go.mod h1:61M8vcyyXR2kqKFxKrfA22jaA8JGF7Dc8App1U3H6jc= +github.com/googleapis/gax-go/v2 v2.12.2/go.mod h1:61M8vcyyXR2kqKFxKrfA22jaA8JGF7Dc8App1U3H6jc= +github.com/googleapis/go-type-adapters v1.0.0/go.mod h1:zHW75FOG2aur7gAO2B+MLby+cLsWGBF62rFAi7WjWO4= +github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g= +github.com/grafov/m3u8 v0.12.0/go.mod h1:nqzOkfBiZJENr52zTVd/Dcl03yzphIMbJqkXGu+u080= +github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.7.0/go.mod h1:hgWBS7lorOAVIJEQMi4ZsPv9hVvWI6+ch50m39Pf2Ks= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.11.3/go.mod h1:o//XUCC/F+yRGJoPO/VU0GSB0f8Nhgmxx0VIRUvaC0w= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.16.0/go.mod h1:YN5jB8ie0yfIUg6VvR9Kz84aCaG7AsGZnLjhHbUqwPg= +github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= +github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= +github.com/hexops/gotextdiff v1.0.3/go.mod h1:pSWU5MAI3yDq+fZBTazCSJysOMbxWL1BSow5/V2vxeg= +github.com/iancoleman/strcase v0.2.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47ZCWhYzw7ho= +github.com/iancoleman/strcase v0.3.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47ZCWhYzw7ho= +github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= +github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= +github.com/ianlancetaylor/demangle v0.0.0-20220319035150-800ac71e25c2/go.mod h1:aYm2/VgdVmcIU8iMfdMvDMsRAQjcfZSKFby6HOFvi/w= +github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= +github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= +github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= +github.com/jung-kurt/gofpdf v1.0.0/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes= +github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes= +github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8= +github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/klauspost/asmfmt v1.3.2/go.mod h1:AG8TuvYojzulgDAMCnYn50l/5QV3Bs/tp6j0HLHbNSE= +github.com/klauspost/compress v1.15.9/go.mod h1:PhcZ0MbTNciWF3rruxRgKxI5NkcHHrHUDtV4Yw2GlzU= +github.com/klauspost/compress v1.16.7/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= +github.com/klauspost/compress v1.17.9 h1:6KIumPrER1LHsvBVuDa0r5xaG0Es51mhhB9BQB2qeMA= +github.com/klauspost/compress v1.17.9/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= +github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= +github.com/klauspost/cpuid/v2 v2.2.3/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY= +github.com/klauspost/cpuid/v2 v2.2.5/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws= +github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= +github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= +github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= +github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= +github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= +github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII= +github.com/lyft/protoc-gen-star v0.6.0/go.mod h1:TGAoBVkt8w7MPG72TrKIu85MIdXwDuzJYeZuUPFPNwA= +github.com/lyft/protoc-gen-star v0.6.1/go.mod h1:TGAoBVkt8w7MPG72TrKIu85MIdXwDuzJYeZuUPFPNwA= +github.com/lyft/protoc-gen-star/v2 v2.0.1/go.mod h1:RcCdONR2ScXaYnQC5tUzxzlpA3WVYF7/opLeUgcQs/o= +github.com/lyft/protoc-gen-star/v2 v2.0.3/go.mod h1:amey7yeodaJhXSbf/TlLvWiqQfLOSpEk//mLlc+axEk= +github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY= +github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0= +github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= +github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= +github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= +github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= +github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= +github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= +github.com/mattn/go-isatty v0.0.17/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= +github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= +github.com/mattn/go-sqlite3 v1.14.14/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU= +github.com/mattn/go-sqlite3 v1.14.15/go.mod h1:2eHXhiwb8IkHr+BDWZGa96P6+rkvnG63S2DGjv9HUNg= +github.com/mattn/go-sqlite3 v1.14.16/go.mod h1:2eHXhiwb8IkHr+BDWZGa96P6+rkvnG63S2DGjv9HUNg= +github.com/minio/asm2plan9s v0.0.0-20200509001527-cdd76441f9d8/go.mod h1:mC1jAcsrzbxHt8iiaC+zU4b1ylILSosueou12R++wfY= +github.com/minio/c2goasm v0.0.0-20190812172519-36a3d3bbc4f3/go.mod h1:RagcQ7I8IeTMnF8JTXieKnO4Z6JCsikNEzj0DwauVzE= +github.com/mitchellh/mapstructure v1.4.3/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= +github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= +github.com/mozillazg/go-httpheader v0.2.1 h1:geV7TrjbL8KXSyvghnFm+NyTux/hxwueTSrwhe88TQQ= +github.com/mozillazg/go-httpheader v0.2.1/go.mod h1:jJ8xECTlalr6ValeXYdOF8fFUISeBAdw6E61aqQma60= +github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= +github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= +github.com/pelletier/go-toml/v2 v2.2.2 h1:aYUidT7k73Pcl9nb2gScu7NSrKCSHIDE89b3+6Wq+LM= +github.com/pelletier/go-toml/v2 v2.2.2/go.mod h1:1t835xjRzz80PqgE6HHgN2JOsmgYu/h4qDAS4n929Rs= +github.com/phpdave11/gofpdf v1.4.2/go.mod h1:zpO6xFn9yxo3YLyMvW8HcKWVdbNqgIfOOp2dXMnm1mY= +github.com/phpdave11/gofpdi v1.0.12/go.mod h1:vBmVV0Do6hSBHC8uKUQ71JGW+ZGQq74llk/7bXwjDoI= +github.com/phpdave11/gofpdi v1.0.13/go.mod h1:vBmVV0Do6hSBHC8uKUQ71JGW+ZGQq74llk/7bXwjDoI= +github.com/pierrec/lz4/v4 v4.1.15/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= +github.com/pierrec/lz4/v4 v4.1.18/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= +github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= +github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= +github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI= +github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= +github.com/prometheus/client_golang v1.20.4 h1:Tgh3Yr67PaOv/uTqloMsCEdeuFTatm5zIq5+qNN23vI= +github.com/prometheus/client_golang v1.20.4/go.mod h1:PIEt8X02hGcP8JWbeHyeZ53Y/jReSnHgO035n//V5WE= +github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.3.0/go.mod h1:LDGWKZIo7rky3hgvBe+caln+Dr3dPggB5dvjtD7w9+w= +github.com/prometheus/client_model v0.4.0/go.mod h1:oMQmHW1/JoDwqLtg57MGgP/Fb1CJEYF2imWWhWtMkYU= +github.com/prometheus/client_model v0.5.0/go.mod h1:dTiFglRmd66nLR9Pv9f0mZi7B7fk5Pm3gvsjB5tr+kI= +github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E= +github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY= +github.com/prometheus/common v0.55.0 h1:KEi6DK7lXW/m7Ig5i47x0vRzuBsHuvJdi5ee6Y3G1dc= +github.com/prometheus/common v0.55.0/go.mod h1:2SECS4xJG1kd8XF9IcM1gMX6510RAEL65zxzNImwdc8= +github.com/prometheus/procfs v0.15.1 h1:YagwOFzUgYfKKHX6Dr+sHT7km/hxC76UB0learggepc= +github.com/prometheus/procfs v0.15.1/go.mod h1:fB45yRUv8NstnjriLhBQLuOUt+WW4BsoGhij/e3PBqk= +github.com/redis/go-redis/v9 v9.6.1 h1:HHDteefn6ZkTtY5fGUE8tj8uy85AHk6zP7CpzIAM0y4= +github.com/redis/go-redis/v9 v9.6.1/go.mod h1:0C0c6ycQsdpVNQpxb1njEQIqkx5UcsM8FJCQLgE9+RA= +github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= +github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= +github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= +github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= +github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= +github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ= +github.com/ruudk/golang-pdf417 v0.0.0-20181029194003-1af4ab5afa58/go.mod h1:6lfFZQK844Gfx8o5WFuvpxWRwnSoipWe/p622j1v06w= +github.com/ruudk/golang-pdf417 v0.0.0-20201230142125-a7e3863a1245/go.mod h1:pQAZKsJ8yyVxGRWYNEm9oFB8ieLgKFnamEyDmSA0BRk= +github.com/sagikazarmark/locafero v0.4.0 h1:HApY1R9zGo4DBgr7dqsTH/JJxLTTsOt7u6keLGt6kNQ= +github.com/sagikazarmark/locafero v0.4.0/go.mod h1:Pe1W6UlPYUk/+wc/6KFhbORCfqzgYEpgQ3O5fPuL3H4= +github.com/sagikazarmark/slog-shim v0.1.0 h1:diDBnUNK9N/354PgrxMywXnAwEr1QZcOr6gto+ugjYE= +github.com/sagikazarmark/slog-shim v0.1.0/go.mod h1:SrcSrq8aKtyuqEI1uvTDTK1arOWRIczQRv+GVI1AkeQ= +github.com/sashabaranov/go-openai v1.9.4 h1:KanoCEoowAI45jVXlenMCckutSRr39qOmSi9MyPBfZM= +github.com/sashabaranov/go-openai v1.9.4/go.mod h1:lj5b/K+zjTSFxVLijLSTDZuP7adOgerWeFyZLUhAKRg= +github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ= +github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= +github.com/sourcegraph/conc v0.3.0 h1:OQTbbt6P72L20UqAkXXuLOj79LfEanQ+YQFNpLA9ySo= +github.com/sourcegraph/conc v0.3.0/go.mod h1:Sdozi7LEKbFPqYX2/J+iBAM6HpqSLTASQIKqDmF7Mt0= +github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= +github.com/spf13/afero v1.3.3/go.mod h1:5KUK8ByomD5Ti5Artl0RtHeI5pTF7MIDuXL3yY520V4= +github.com/spf13/afero v1.6.0/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I= +github.com/spf13/afero v1.9.2/go.mod h1:iUV7ddyEEZPO5gA3zD4fJt6iStLlL+Lg4m2cihcDf8Y= +github.com/spf13/afero v1.10.0/go.mod h1:UBogFpq8E9Hx+xc5CNTTEpTnuHVmXDwZcZcE1eb/UhQ= +github.com/spf13/afero v1.11.0 h1:WJQKhtpdm3v2IzqG8VMqrr6Rf3UYpEF239Jy9wNepM8= +github.com/spf13/afero v1.11.0/go.mod h1:GH9Y3pIexgf1MTIWtNGyogA5MwRIDXGUr+hbWNoBjkY= +github.com/spf13/cast v1.6.0 h1:GEiTHELF+vaR5dhz3VqZfFSzZjYbgeKDpBxQVS4GYJ0= +github.com/spf13/cast v1.6.0/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo= +github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= +github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/spf13/viper v1.19.0 h1:RWq5SEjt8o25SROyN3z2OrDB9l7RPd3lwTWU8EcEdcI= +github.com/spf13/viper v1.19.0/go.mod h1:GQUN9bilAbhU/jgc1bKs99f/suXKeUMct8Adx5+Ntkg= +github.com/stoewer/go-strcase v1.3.0/go.mod h1:fAH5hQ5pehh+j3nZfvwdk2RgEgQjAoM8wodgtPmh1xo= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= +github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= +github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA= +github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= +github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= +github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/stretchr/testify v1.8.3/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= +github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= +github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= +github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8= +github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU= +github.com/substrait-io/substrait-go v0.4.2/go.mod h1:qhpnLmrcvAnlZsUyPXZRqldiHapPTXC3t7xFgDi3aQg= +github.com/tencent/vectordatabase-sdk-go v1.3.5 h1:+ztAr87z3ghTrCZEGs0/I+h/DZSyMtli57n1KtlPaZ8= +github.com/tencent/vectordatabase-sdk-go v1.3.5/go.mod h1:uFG4rFiI9CL78uK6u6V5iheLI07wgqNPpsG6+UFDCn8= +github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.563/go.mod h1:7sCQWVkxcsR38nffDW057DRGk8mUjK1Ing/EFOK8s8Y= +github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/kms v1.0.563/go.mod h1:uom4Nvi9W+Qkom0exYiJ9VWJjXwyxtPYTkKkaLMlfE0= +github.com/tencentyun/cos-go-sdk-v5 v0.7.54 h1:FRamEhNBbSeggyYfWfzFejTLftgbICocSYFk4PKTSV4= +github.com/tencentyun/cos-go-sdk-v5 v0.7.54/go.mod h1:UN+VdbCl1hg+kKi5RXqZgaP+Boqfmk+D04GRc4XFk70= +github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= +github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= +github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= +github.com/zeebo/assert v1.3.0/go.mod h1:Pq9JiuJQpG8JLJdtkwrJESF0Foym2/D9XMU5ciN/wJ0= +github.com/zeebo/xxh3 v1.0.2/go.mod h1:5NWz9Sef7zIDm2JHfFlcQvNekmcEl9ekUZQQKCYaDcA= +go.einride.tech/aip v0.66.0/go.mod h1:qAhMsfT7plxBX+Oy7Huol6YUvZ0ZzdUz26yZsQwfl1M= +go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= +go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= +go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= +go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= +go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.46.1/go.mod h1:4UoMYEZOC0yN/sPGH76KPkkU7zgiEWYWL9vwmbnTJPE= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.47.0/go.mod h1:r9vWsPS/3AQItv3OSlEJ/E4mbrhUbbw18meOjArPtKQ= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.48.0/go.mod h1:tIKj3DbO8N9Y2xo52og3irLsPI4GW02DSMtrVgNMgxg= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0/go.mod h1:Mjt1i1INqiaoZOMGR1RIUJN+i3ChKoFRqzrRQhlkbs0= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.46.1/go.mod h1:sEGXWArGqc3tVa+ekntsN65DmVbVeW+7lTKTjZF3/Fo= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.47.0/go.mod h1:SK2UL73Zy1quvRPonmOmRDiWk1KBV3LyIeeIxcEApWw= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.48.0/go.mod h1:rdENBZMT2OE6Ne/KLwpiXudnAsbdrdBaqBvTN8M8BgA= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0/go.mod h1:p8pYQP+m5XfbZm9fxtSKAbM6oIllS7s2AfxrChvc7iw= +go.opentelemetry.io/otel v1.19.0/go.mod h1:i0QyjOq3UPoTzff0PJB2N66fb4S0+rSbSB15/oyH9fY= +go.opentelemetry.io/otel v1.21.0/go.mod h1:QZzNPQPm1zLX4gZK4cMi+71eaorMSGT3A4znnUvNNEo= +go.opentelemetry.io/otel v1.22.0/go.mod h1:eoV4iAi3Ea8LkAEI9+GFT44O6T/D0GWAVFyZVCC6pMI= +go.opentelemetry.io/otel v1.23.0/go.mod h1:YCycw9ZeKhcJFrb34iVSkyT0iczq/zYDtZYFufObyB0= +go.opentelemetry.io/otel v1.24.0/go.mod h1:W7b9Ozg4nkF5tWI5zsXkaKKDjdVjpD4oAt9Qi/MArHo= +go.opentelemetry.io/otel/metric v1.19.0/go.mod h1:L5rUsV9kM1IxCj1MmSdS+JQAcVm319EUrDVLrt7jqt8= +go.opentelemetry.io/otel/metric v1.21.0/go.mod h1:o1p3CA8nNHW8j5yuQLdc1eeqEaPfzug24uvsyIEJRWM= +go.opentelemetry.io/otel/metric v1.22.0/go.mod h1:evJGjVpZv0mQ5QBRJoBF64yMuOf4xCWdXjK8pzFvliY= +go.opentelemetry.io/otel/metric v1.23.0/go.mod h1:MqUW2X2a6Q8RN96E2/nqNoT+z9BSms20Jb7Bbp+HiTo= +go.opentelemetry.io/otel/metric v1.24.0/go.mod h1:VYhLe1rFfxuTXLgj4CBiyz+9WYBA8pNGJgDcSFRKBco= +go.opentelemetry.io/otel/sdk v1.19.0/go.mod h1:NedEbbS4w3C6zElbLdPJKOpJQOrGUJ+GfzpjUvI0v1A= +go.opentelemetry.io/otel/sdk v1.21.0/go.mod h1:Nna6Yv7PWTdgJHVRD9hIYywQBRx7pbox6nwBnZIxl/E= +go.opentelemetry.io/otel/sdk v1.22.0/go.mod h1:iu7luyVGYovrRpe2fmj3CVKouQNdTOkxtLzPvPz1DOc= +go.opentelemetry.io/otel/trace v1.19.0/go.mod h1:mfaSyvGyEJEI0nyV2I4qhNQnbBOUUmYZpYojqMnX2vo= +go.opentelemetry.io/otel/trace v1.21.0/go.mod h1:LGbsEB0f9LGjN+OZaQQ26sohbOmiMR+BaslueVtS/qQ= +go.opentelemetry.io/otel/trace v1.22.0/go.mod h1:RbbHXVqKES9QhzZq/fE5UnOSILqRt40a21sPw2He1xo= +go.opentelemetry.io/otel/trace v1.23.0/go.mod h1:GSGTbIClEsuZrGIzoEHqsVfxgn5UkggkflQwDScNUsk= +go.opentelemetry.io/otel/trace v1.24.0/go.mod h1:HPc3Xr/cOApsBI154IU0OI0HJexz+aw5uPdbs3UCjNU= +go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= +go.opentelemetry.io/proto/otlp v0.15.0/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U= +go.opentelemetry.io/proto/otlp v0.19.0/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U= +go.opentelemetry.io/proto/otlp v1.0.0/go.mod h1:Sy6pihPLfYHkr3NkUbEhGHFhINUSI/v80hjKIs5JXpM= +go.uber.org/atomic v1.9.0 h1:ECmE8Bn/WFTYwEW/bpKD3M8VtR/zQVbavAoalC1PYyE= +go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= +go.uber.org/multierr v1.9.0 h1:7fIwc/ZtS0q++VgcfqFDxSBZVv/Xo49/SYnDFupUwlI= +go.uber.org/multierr v1.9.0/go.mod h1:X2jQV1h+kxSjClGpnseKVIxpmcjrj7MNnI0bnlfKTVQ= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= +golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.0.0-20220314234659-1baeb1ce4c0b/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw= +golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= +golang.org/x/crypto v0.9.0/go.mod h1:yrmDGqONDYtNj3tH8X9dzUun2m2lzPa9ngI6/RUPGR0= +golang.org/x/crypto v0.10.0/go.mod h1:o4eNf7Ede1fv+hwOwZsTHl9EsPFO6q6ZvYR8vYfY45I= +golang.org/x/crypto v0.11.0/go.mod h1:xgJhtzW8F9jGdVFWZESrid1U1bjeNy4zgy5cRr/CIio= +golang.org/x/crypto v0.12.0/go.mod h1:NF0Gs7EO5K4qLn+Ylc+fih8BSTeIjAP05siRnAh98yw= +golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc= +golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4= +golang.org/x/crypto v0.15.0/go.mod h1:4ChreQoLWfG3xLDer1WdlH5NdlQ3+mwnQq1YTKY+72g= +golang.org/x/crypto v0.16.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4= +golang.org/x/crypto v0.17.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4= +golang.org/x/crypto v0.18.0/go.mod h1:R0j02AL6hcrfOiy9T4ZYp/rcWeMxM3L6QYxlOuEG1mg= +golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU= +golang.org/x/crypto v0.21.0/go.mod h1:0BP7YvVV9gBbVKyeTG0Gyn+gZm94bibOW5BjDEYAOMs= +golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8= +golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190125153040-c74c464bbbf2/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= +golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= +golang.org/x/exp v0.0.0-20191002040644-a1355ae1e2c3/go.mod h1:NOZ3BPKG0ec/BKJQgnvsSFpcKLM5xXVWnvZS97DWHgE= +golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= +golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= +golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= +golang.org/x/exp v0.0.0-20220827204233-334a2380cb91/go.mod h1:cyybsKvd6eL0RnXn6p/Grxp8F5bW7iYuBgsNCOHpMYE= +golang.org/x/exp v0.0.0-20230206171751-46f607a40771/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= +golang.org/x/exp v0.0.0-20231006140011-7918f672742d h1:jtJma62tbqLibJ5sFQz8bKtEM8rJBtfilJ2qTU199MI= +golang.org/x/exp v0.0.0-20231006140011-7918f672742d/go.mod h1:ldy0pHrwJyGW56pPQzzkH36rKxoZW1tw7ZJpeKx+hdo= +golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs= +golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= +golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/image v0.0.0-20190910094157-69e4b8554b2a/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/image v0.0.0-20200119044424-58c23975cae1/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/image v0.0.0-20200430140353-33d19683fad8/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/image v0.0.0-20200618115811-c13761719519/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/image v0.0.0-20201208152932-35266b937fa6/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/image v0.0.0-20210216034530-4410531fe030/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/image v0.0.0-20210607152325-775e3b0c77b9/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM= +golang.org/x/image v0.0.0-20210628002857-a66eb6448b8d/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM= +golang.org/x/image v0.0.0-20211028202545-6944b10bf410/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM= +golang.org/x/image v0.0.0-20220302094943-723b81ca9867/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM= +golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= +golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= +golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= +golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= +golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= +golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= +golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= +golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= +golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.5.0/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= +golang.org/x/mod v0.5.1/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= +golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= +golang.org/x/mod v0.6.0/go.mod h1:4mET923SAdbXp2ki8ey+zGs1SLqsuM2Y0uvdZR/fUNI= +golang.org/x/mod v0.7.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/mod v0.9.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/mod v0.10.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/mod v0.11.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/mod v0.13.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= +golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= +golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20210813160813-60bc85c4be6d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220325170049-de3da57026de/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220412020605-290c469a71a5/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220607020251-c690dde0001d/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.0.0-20220617184016-355a448f1bc9/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.0.0-20220624214902-1bab6f366d9e/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.0.0-20220909164309-bea034e7d591/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= +golang.org/x/net v0.0.0-20221012135044-0b7e1fb9d458/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= +golang.org/x/net v0.0.0-20221014081412-f15817d10f9b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= +golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= +golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= +golang.org/x/net v0.4.0/go.mod h1:MBQ8lrhLObU/6UmLb4fmbmk5OcyYmqtbGd/9yIeKjEE= +golang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws= +golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= +golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= +golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= +golang.org/x/net v0.9.0/go.mod h1:d48xBJpPfHeWQsugry2m+kC02ZBRGRgulfHnEXEuWns= +golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= +golang.org/x/net v0.11.0/go.mod h1:2L/ixqYpgIVXmeoSA/4Lu7BzTG4KIyPIryS4IsOd1oQ= +golang.org/x/net v0.12.0/go.mod h1:zEVYFnQC7m/vmpQFELhcD1EWkZlX69l4oqgmer6hfKA= +golang.org/x/net v0.14.0/go.mod h1:PpSgVXXLK0OxS0F31C1/tv6XNguvCrnXIDrFMspZIUI= +golang.org/x/net v0.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk= +golang.org/x/net v0.16.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= +golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= +golang.org/x/net v0.18.0/go.mod h1:/czyP5RqHAH4odGYxBJ1qz0+CE5WZ+2j1YgoEo8F2jQ= +golang.org/x/net v0.19.0/go.mod h1:CfAk/cbD4CthTvqiEl8NpboMuiuOYsAr/7NOjZJtv1U= +golang.org/x/net v0.20.0/go.mod h1:z8BVo6PvndSri0LbOE3hAn0apkU+1YvI6E70E9jsnvY= +golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44= +golang.org/x/net v0.22.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg= +golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM= +golang.org/x/net v0.26.0 h1:soB7SVo0PWrY4vPW/+ay0jKDNScG2X9wFeYlXIvJsOQ= +golang.org/x/net v0.26.0/go.mod h1:5YKkiSynbBIh3p6iOc/vibscux0x38BZDkn8sCUPxHE= +golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= +golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210220000619-9bb904979d93/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210805134026-6f1e6394065a/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= +golang.org/x/oauth2 v0.0.0-20220309155454-6242fa91716a/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= +golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= +golang.org/x/oauth2 v0.0.0-20220608161450-d0670ef3b1eb/go.mod h1:jaDAt6Dkxork7LmZnYtzbRWj0W47D86a3TGe0YHBvmE= +golang.org/x/oauth2 v0.0.0-20220622183110-fd043fe589d2/go.mod h1:jaDAt6Dkxork7LmZnYtzbRWj0W47D86a3TGe0YHBvmE= +golang.org/x/oauth2 v0.0.0-20220822191816-0ebed06d0094/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= +golang.org/x/oauth2 v0.0.0-20220909003341-f21342109be1/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= +golang.org/x/oauth2 v0.0.0-20221006150949-b44042a4b9c1/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= +golang.org/x/oauth2 v0.0.0-20221014153046-6fdb5e3db783/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= +golang.org/x/oauth2 v0.4.0/go.mod h1:RznEsdpjGAINPTOF0UH/t+xJ75L18YO3Ho6Pyn+uRec= +golang.org/x/oauth2 v0.5.0/go.mod h1:9/XBHVqLaWO3/BRHs5jbpYCnOZVjj5V0ndyaAM7KB4I= +golang.org/x/oauth2 v0.6.0/go.mod h1:ycmewcwgD4Rpr3eZJLSB4Kyyljb3qDh40vJ8STE5HKw= +golang.org/x/oauth2 v0.7.0/go.mod h1:hPLQkd9LyjfXTiRohC/41GhcFqxisoUQ99sCUOHO9x4= +golang.org/x/oauth2 v0.8.0/go.mod h1:yr7u4HXZRm1R1kBWqr/xKNqewf0plRYoB7sla+BCIXE= +golang.org/x/oauth2 v0.10.0/go.mod h1:kTpgurOux7LqtuxjuyZa4Gj2gdezIt/jQtGnNFfypQI= +golang.org/x/oauth2 v0.11.0/go.mod h1:LdF7O/8bLR/qWK9DrpXmbHLTouvRHK0SgJl0GmDBchk= +golang.org/x/oauth2 v0.13.0/go.mod h1:/JMhi4ZRXAf4HG9LiNmxvk+45+96RUlVThiH8FzNBn0= +golang.org/x/oauth2 v0.14.0/go.mod h1:lAtNWgaWfL4cm7j2OV8TxGi9Qb7ECORx8DktCY74OwM= +golang.org/x/oauth2 v0.15.0/go.mod h1:q48ptWNTY5XWf+JNten23lcvHpLJ0ZSxF5ttTHKVCAM= +golang.org/x/oauth2 v0.16.0/go.mod h1:hqZ+0LWXsiVoZpeld6jVt06P3adbS2Uu911W1SsJv2o= +golang.org/x/oauth2 v0.17.0/go.mod h1:OzPDGQiuQMguemayvdylqddI7qcD9lnSDb+1FiwQ5HA= +golang.org/x/oauth2 v0.18.0/go.mod h1:Wf7knwG0MPoWIMMBgFlEaSUDaKskp0dCfrlJRJXbBi8= +golang.org/x/oauth2 v0.20.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI= +golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20220819030929-7fc1605a5dde/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20220929204114-8fcdb60fdcc0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.2.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= +golang.org/x/sync v0.4.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= +golang.org/x/sync v0.5.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210225134936-a50acf3fe073/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210304124612-50617c2ba197/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210514084401-e8d321eab015/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210603125802-9665404d3644/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210816183151-1e6c022a8912/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210908233432-aa78b53d3365/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211210111614-af8b64212486/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220128215802-99c3d69c2c27/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220310020820-b874c991c1a5/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220328115105-d36c6a25d886/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220406163625-3f8b81556e12/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220502124256-b6088ccd6cba/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220610221304-9f5ed59c137d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220615213510-4f61da869c0c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220624220833-87e55d714810/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220704084225-05e143d24a9e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220829200755-d48e67d00261/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.9.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.14.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.22.0 h1:RI27ohtqKCnwULzJLqkv897zojh5/DwS/ENaMzUOaWI= +golang.org/x/sys v0.22.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= +golang.org/x/term v0.3.0/go.mod h1:q750SLmJuPmVoN1blW3UFBPREJfb1KmY3vwxfr+nFDA= +golang.org/x/term v0.4.0/go.mod h1:9P2UbLfCdcvo3p/nzKvsmas4TnlujnuoV9hGgYzW1lQ= +golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= +golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= +golang.org/x/term v0.7.0/go.mod h1:P32HKFT3hSsZrRxla30E9HqToFYAQPCMs/zFMBUFqPY= +golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= +golang.org/x/term v0.9.0/go.mod h1:M6DEAAIenWoTxdKrOltXcmDY3rSplQUkrvaDU5FcQyo= +golang.org/x/term v0.10.0/go.mod h1:lpqdcUyK/oCiQxvxVrppt5ggO2KCZ5QblwqPnfZ6d5o= +golang.org/x/term v0.11.0/go.mod h1:zC9APTIj3jG3FdV/Ons+XE1riIZXG4aZ4GTHiPZJPIU= +golang.org/x/term v0.12.0/go.mod h1:owVbMEjm3cBLCHdkQu9b1opXd4ETQWc3BhuQGKgXgvU= +golang.org/x/term v0.13.0/go.mod h1:LTmsnFJwVN6bCy1rVCoS+qHT1HhALEFxKncY3WNNh4U= +golang.org/x/term v0.14.0/go.mod h1:TySc+nGkYR6qt8km8wUhuFRTVSMIX3XPR58y2lC8vww= +golang.org/x/term v0.15.0/go.mod h1:BDl952bC7+uMoWR75FIrCDx79TPU9oHkTZ9yRbYOrX0= +golang.org/x/term v0.16.0/go.mod h1:yn7UURbUtPyrVJPGPq404EukNFxcm/foM+bV/bfcDsY= +golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk= +golang.org/x/term v0.18.0/go.mod h1:ILwASektA3OnRv7amZ1xhE/KTR+u50pbXfZ03+6Nx58= +golang.org/x/term v0.20.0/go.mod h1:8UkIAJTvZgivsXaD6/pH6U9ecQzZ45awqEOzuCvwpFY= +golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= +golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.5.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.6.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= +golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= +golang.org/x/text v0.10.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/text v0.11.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= +golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= +golang.org/x/text v0.16.0 h1:a94ExnEXNtEwYLGJSIUxnWoxoRz/ZcCsV63ROupILh4= +golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI= +golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20220922220347-f3bd1da661af/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.1.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= +golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190206041539-40960b6deb8e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= +golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190927191325-030b2cf1153e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= +golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= +golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= +golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= +golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201124115921-2c860bdd6e78/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20210108195828-e2f9c7f1fc8e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= +golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.9/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU= +golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= +golang.org/x/tools v0.2.0/go.mod h1:y4OqIKeOV/fWJetJ8bXPU1sEVniLMIyDAZWeHdV+NTA= +golang.org/x/tools v0.3.0/go.mod h1:/rWhSS2+zyEVwoJf8YAX6L2f0ntZ7Kn/mGgAWcipA5k= +golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= +golang.org/x/tools v0.7.0/go.mod h1:4pg6aUX35JBAogB10C9AtvVL+qowtN4pT3CGSQex14s= +golang.org/x/tools v0.8.0/go.mod h1:JxBZ99ISMI5ViVkT1tr6tdNmXeTrcpVSD3vZ1RsRdN4= +golang.org/x/tools v0.9.1/go.mod h1:owI94Op576fPu3cIGQeHs3joujW/2Oc6MtlxbF5dfNc= +golang.org/x/tools v0.10.0/go.mod h1:UJwyiVBsOA2uwvK/e5OY3GTpDUJriEd+/YlqAwLPmyM= +golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58= +golang.org/x/tools v0.14.0/go.mod h1:uYBEerGOWcJyEORxN+Ek8+TT266gXkNlHdJBwexUsBg= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20220411194840-2f41105eb62f/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= +golang.org/x/xerrors v0.0.0-20220609144429-65e65417b02f/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= +golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= +golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028/go.mod h1:NDW/Ps6MPRej6fsCIbMTohpP40sJ/P/vI1MoTEGwX90= +gonum.org/v1/gonum v0.0.0-20180816165407-929014505bf4/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo= +gonum.org/v1/gonum v0.8.2/go.mod h1:oe/vMfY3deqTw+1EZJhuvEW2iwGF1bW9wwu7XCu0+v0= +gonum.org/v1/gonum v0.9.3/go.mod h1:TZumC3NeyVQskjXqmyWt4S3bINhy7B4eYwW69EbyX+0= +gonum.org/v1/gonum v0.11.0/go.mod h1:fSG4YDCxxUZQJ7rKsQrj0gMOg00Il0Z96/qMA4bVQhA= +gonum.org/v1/gonum v0.12.0/go.mod h1:73TDxJfAAHeA8Mk9mf8NlIppyhQNo5GLTcYeqgo2lvY= +gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= +gonum.org/v1/plot v0.0.0-20190515093506-e2840ee46a6b/go.mod h1:Wt8AAjI+ypCyYX3nZBvf6cAIx93T+c/OS2HFAYskSZc= +gonum.org/v1/plot v0.9.0/go.mod h1:3Pcqqmp6RHvJI72kgb8fThyUnav364FOsdDo2aGW5lY= +gonum.org/v1/plot v0.10.1/go.mod h1:VZW5OlhkL1mysU9vaqNHnsy86inf6Ot+jB3r+BczCEo= +google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= +google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= +google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= +google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= +google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= +google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= +google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM= +google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc= +google.golang.org/api v0.35.0/go.mod h1:/XrVsuzM0rZmrsbjJutiuftIzeuTQcEeaYcSk/mQ1dg= +google.golang.org/api v0.36.0/go.mod h1:+z5ficQTmoYpPn8LCUNVpK5I7hwkpjbcgqA7I34qYtE= +google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjRCQ8= +google.golang.org/api v0.41.0/go.mod h1:RkxM5lITDfTzmyKFPt+wGrCJbVfniCr2ool8kTBzRTU= +google.golang.org/api v0.43.0/go.mod h1:nQsDGjRXMo4lvh5hP0TKqF244gqhGcr/YSIykhUk/94= +google.golang.org/api v0.47.0/go.mod h1:Wbvgpq1HddcWVtzsVLyfLp8lDg6AA241LmgIL59tHXo= +google.golang.org/api v0.48.0/go.mod h1:71Pr1vy+TAZRPkPs/xlCf5SsU8WjuAWv1Pfjbtukyy4= +google.golang.org/api v0.50.0/go.mod h1:4bNT5pAuq5ji4SRZm+5QIkjny9JAyVD/3gaSihNefaw= +google.golang.org/api v0.51.0/go.mod h1:t4HdrdoNgyN5cbEfm7Lum0lcLDLiise1F8qDKX00sOU= +google.golang.org/api v0.54.0/go.mod h1:7C4bFFOvVDGXjfDTAsgGwDgAxRDeQ4X8NvUedIt6z3k= +google.golang.org/api v0.55.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE= +google.golang.org/api v0.56.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE= +google.golang.org/api v0.57.0/go.mod h1:dVPlbZyBo2/OjBpmvNdpn2GRm6rPy75jyU7bmhdrMgI= +google.golang.org/api v0.61.0/go.mod h1:xQRti5UdCmoCEqFxcz93fTl338AVqDgyaDRuOZ3hg9I= +google.golang.org/api v0.63.0/go.mod h1:gs4ij2ffTRXwuzzgJl/56BdwJaA194ijkfn++9tDuPo= +google.golang.org/api v0.67.0/go.mod h1:ShHKP8E60yPsKNw/w8w+VYaj9H6buA5UqDp8dhbQZ6g= +google.golang.org/api v0.70.0/go.mod h1:Bs4ZM2HGifEvXwd50TtW70ovgJffJYw2oRCOFU/SkfA= +google.golang.org/api v0.71.0/go.mod h1:4PyU6e6JogV1f9eA4voyrTY2batOLdgZ5qZ5HOCc4j8= +google.golang.org/api v0.74.0/go.mod h1:ZpfMZOVRMywNyvJFeqL9HRWBgAuRfSjJFpe9QtRRyDs= +google.golang.org/api v0.75.0/go.mod h1:pU9QmyHLnzlpar1Mjt4IbapUCy8J+6HD6GeELN69ljA= +google.golang.org/api v0.77.0/go.mod h1:pU9QmyHLnzlpar1Mjt4IbapUCy8J+6HD6GeELN69ljA= +google.golang.org/api v0.78.0/go.mod h1:1Sg78yoMLOhlQTeF+ARBoytAcH1NNyyl390YMy6rKmw= +google.golang.org/api v0.80.0/go.mod h1:xY3nI94gbvBrE0J6NHXhxOmW97HG7Khjkku6AFB3Hyg= +google.golang.org/api v0.84.0/go.mod h1:NTsGnUFJMYROtiquksZHBWtHfeMC7iYthki7Eq3pa8o= +google.golang.org/api v0.85.0/go.mod h1:AqZf8Ep9uZ2pyTvgL+x0D3Zt0eoT9b5E8fmzfu6FO2g= +google.golang.org/api v0.90.0/go.mod h1:+Sem1dnrKlrXMR/X0bPnMWyluQe4RsNoYfmNLhOIkzw= +google.golang.org/api v0.93.0/go.mod h1:+Sem1dnrKlrXMR/X0bPnMWyluQe4RsNoYfmNLhOIkzw= +google.golang.org/api v0.95.0/go.mod h1:eADj+UBuxkh5zlrSntJghuNeg8HwQ1w5lTKkuqaETEI= +google.golang.org/api v0.96.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= +google.golang.org/api v0.97.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= +google.golang.org/api v0.98.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= +google.golang.org/api v0.99.0/go.mod h1:1YOf74vkVndF7pG6hIHuINsM7eWwpVTAfNMNiL91A08= +google.golang.org/api v0.100.0/go.mod h1:ZE3Z2+ZOr87Rx7dqFsdRQkRBk36kDtp/h+QpHbB7a70= +google.golang.org/api v0.102.0/go.mod h1:3VFl6/fzoA+qNuS1N1/VfXY4LjoXN/wzeIp7TweWwGo= +google.golang.org/api v0.103.0/go.mod h1:hGtW6nK1AC+d9si/UBhw8Xli+QMOf6xyNAyJw4qU9w0= +google.golang.org/api v0.106.0/go.mod h1:2Ts0XTHNVWxypznxWOYUeI4g3WdP9Pk2Qk58+a/O9MY= +google.golang.org/api v0.107.0/go.mod h1:2Ts0XTHNVWxypznxWOYUeI4g3WdP9Pk2Qk58+a/O9MY= +google.golang.org/api v0.108.0/go.mod h1:2Ts0XTHNVWxypznxWOYUeI4g3WdP9Pk2Qk58+a/O9MY= +google.golang.org/api v0.110.0/go.mod h1:7FC4Vvx1Mooxh8C5HWjzZHcavuS2f6pmJpZx60ca7iI= +google.golang.org/api v0.111.0/go.mod h1:qtFHvU9mhgTJegR31csQ+rwxyUTHOKFqCKWp1J0fdw0= +google.golang.org/api v0.114.0/go.mod h1:ifYI2ZsFK6/uGddGfAD5BMxlnkBqCmqHSDUVi45N5Yg= +google.golang.org/api v0.118.0/go.mod h1:76TtD3vkgmZ66zZzp72bUUklpmQmKlhh6sYtIjYK+5E= +google.golang.org/api v0.122.0/go.mod h1:gcitW0lvnyWjSp9nKxAbdHKIZ6vF4aajGueeslZOyms= +google.golang.org/api v0.124.0/go.mod h1:xu2HQurE5gi/3t1aFCvhPD781p0a3p11sdunTJ2BlP4= +google.golang.org/api v0.125.0/go.mod h1:mBwVAtz+87bEN6CbA1GtZPDOqY2R5ONPqJeIlvyo4Aw= +google.golang.org/api v0.126.0/go.mod h1:mBwVAtz+87bEN6CbA1GtZPDOqY2R5ONPqJeIlvyo4Aw= +google.golang.org/api v0.128.0/go.mod h1:Y611qgqaE92On/7g65MQgxYul3c0rEB894kniWLY750= +google.golang.org/api v0.139.0/go.mod h1:CVagp6Eekz9CjGZ718Z+sloknzkDJE7Vc1Ckj9+viBk= +google.golang.org/api v0.149.0/go.mod h1:Mwn1B7JTXrzXtnvmzQE2BD6bYZQ8DShKZDZbeN9I7qI= +google.golang.org/api v0.150.0/go.mod h1:ccy+MJ6nrYFgE3WgRx/AMXOxOmU8Q4hSa+jjibzhxcg= +google.golang.org/api v0.155.0/go.mod h1:GI5qK5f40kCpHfPn6+YzGAByIKWv8ujFnmoWm7Igduk= +google.golang.org/api v0.157.0/go.mod h1:+z4v4ufbZ1WEpld6yMGHyggs+PmAHiaLNj5ytP3N01g= +google.golang.org/api v0.160.0/go.mod h1:0mu0TpK33qnydLvWqbImq2b1eQ5FHRSDCBzAxX9ZHyw= +google.golang.org/api v0.162.0/go.mod h1:6SulDkfoBIg4NFmCuZ39XeeAgSHCPecfSUuDyYlAHs0= +google.golang.org/api v0.164.0/go.mod h1:2OatzO7ZDQsoS7IFf3rvsE17/TldiU3F/zxFHeqUB5o= +google.golang.org/api v0.166.0/go.mod h1:4FcBc686KFi7QI/U51/2GKKevfZMpM17sCdibqe/bSA= +google.golang.org/api v0.169.0/go.mod h1:gpNOiMA2tZ4mf5R9Iwf4rK/Dcz0fbdIgWYWVoxmsyLg= +google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= +google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= +google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/appengine v1.6.8/go.mod h1:1jJ3jBArFh5pcgW8gCtRJnepW8FzD1V44FJffLiz/Ds= +google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= +google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA= +google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= +google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= +google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= +google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200904004341-0bd0a958aa1d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210108203827-ffc7fda8c3d7/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210222152913-aa3ee6e6a81c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210226172003-ab064af71705/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210303154014-9728d6b83eeb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210329143202-679c6ae281ee/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= +google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= +google.golang.org/genproto v0.0.0-20210513213006-bf773b8c8384/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= +google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= +google.golang.org/genproto v0.0.0-20210604141403-392c879c8b08/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= +google.golang.org/genproto v0.0.0-20210608205507-b6d2f5bf0d7d/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= +google.golang.org/genproto v0.0.0-20210624195500-8bfb893ecb84/go.mod h1:SzzZ/N+nwJDaO1kznhnlzqS8ocJICar6hYhVyhi++24= +google.golang.org/genproto v0.0.0-20210713002101-d411969a0d9a/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= +google.golang.org/genproto v0.0.0-20210716133855-ce7ef5c701ea/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= +google.golang.org/genproto v0.0.0-20210728212813-7823e685a01f/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= +google.golang.org/genproto v0.0.0-20210805201207-89edb61ffb67/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= +google.golang.org/genproto v0.0.0-20210813162853-db860fec028c/go.mod h1:cFeNkxwySK631ADgubI+/XFU/xp8FD5KIVV4rj8UC5w= +google.golang.org/genproto v0.0.0-20210821163610-241b8fcbd6c8/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210828152312-66f60bf46e71/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210831024726-fe130286e0e2/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210903162649-d08c68adba83/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210909211513-a8c4777a87af/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210924002016-3dee208752a0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211118181313-81c1377c94b1/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211206160659-862468c7d6e0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211208223120-3a66f561d7aa/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211221195035-429b39de9b1c/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20220126215142-9970aeb2e350/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20220207164111-0872dc986b00/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20220218161850-94dd64e39d7c/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= +google.golang.org/genproto v0.0.0-20220222213610-43724f9ea8cf/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= +google.golang.org/genproto v0.0.0-20220304144024-325a89244dc8/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= +google.golang.org/genproto v0.0.0-20220310185008-1973136f34c6/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= +google.golang.org/genproto v0.0.0-20220324131243-acbaeb5b85eb/go.mod h1:hAL49I2IFola2sVEjAn7MEwsja0xp51I0tlGAf9hz4E= +google.golang.org/genproto v0.0.0-20220329172620-7be39ac1afc7/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220407144326-9054f6ed7bac/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220413183235-5e96e2839df9/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220414192740-2d67ff6cf2b4/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220421151946-72621c1f0bd3/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220429170224-98d788798c3e/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220502173005-c8bf987b8c21/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= +google.golang.org/genproto v0.0.0-20220505152158-f39f71e6c8f3/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= +google.golang.org/genproto v0.0.0-20220518221133-4f43b3371335/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= +google.golang.org/genproto v0.0.0-20220523171625-347a074981d8/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= +google.golang.org/genproto v0.0.0-20220608133413-ed9918b62aac/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +google.golang.org/genproto v0.0.0-20220616135557-88e70c0c3a90/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +google.golang.org/genproto v0.0.0-20220617124728-180714bec0ad/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +google.golang.org/genproto v0.0.0-20220624142145-8cd45d7dbd1f/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +google.golang.org/genproto v0.0.0-20220628213854-d9e0b6570c03/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +google.golang.org/genproto v0.0.0-20220722212130-b98a9ff5e252/go.mod h1:GkXuJDJ6aQ7lnJcRF+SJVgFdQhypqgl3LB1C9vabdRE= +google.golang.org/genproto v0.0.0-20220801145646-83ce21fca29f/go.mod h1:iHe1svFLAZg9VWz891+QbRMwUv9O/1Ww+/mngYeThbc= +google.golang.org/genproto v0.0.0-20220815135757-37a418bb8959/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= +google.golang.org/genproto v0.0.0-20220817144833-d7fd3f11b9b1/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= +google.golang.org/genproto v0.0.0-20220822174746-9e6da59bd2fc/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= +google.golang.org/genproto v0.0.0-20220829144015-23454907ede3/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= +google.golang.org/genproto v0.0.0-20220829175752-36a9c930ecbf/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= +google.golang.org/genproto v0.0.0-20220913154956-18f8339a66a5/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= +google.golang.org/genproto v0.0.0-20220914142337-ca0e39ece12f/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= +google.golang.org/genproto v0.0.0-20220915135415-7fd63a7952de/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= +google.golang.org/genproto v0.0.0-20220916172020-2692e8806bfa/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= +google.golang.org/genproto v0.0.0-20220919141832-68c03719ef51/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= +google.golang.org/genproto v0.0.0-20220920201722-2b89144ce006/go.mod h1:ht8XFiar2npT/g4vkk7O0WYS1sHOHbdujxbEp7CJWbw= +google.golang.org/genproto v0.0.0-20220926165614-551eb538f295/go.mod h1:woMGP53BroOrRY3xTxlbr8Y3eB/nzAvvFM83q7kG2OI= +google.golang.org/genproto v0.0.0-20220926220553-6981cbe3cfce/go.mod h1:woMGP53BroOrRY3xTxlbr8Y3eB/nzAvvFM83q7kG2OI= +google.golang.org/genproto v0.0.0-20221010155953-15ba04fc1c0e/go.mod h1:3526vdqwhZAwq4wsRUaVG555sVgsNmIjRtO7t/JH29U= +google.golang.org/genproto v0.0.0-20221014173430-6e2ab493f96b/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= +google.golang.org/genproto v0.0.0-20221014213838-99cd37c6964a/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= +google.golang.org/genproto v0.0.0-20221024153911-1573dae28c9c/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= +google.golang.org/genproto v0.0.0-20221024183307-1bc688fe9f3e/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= +google.golang.org/genproto v0.0.0-20221027153422-115e99e71e1c/go.mod h1:CGI5F/G+E5bKwmfYo09AXuVN4dD894kIKUFmVbP2/Fo= +google.golang.org/genproto v0.0.0-20221109142239-94d6d90a7d66/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= +google.golang.org/genproto v0.0.0-20221114212237-e4508ebdbee1/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= +google.golang.org/genproto v0.0.0-20221117204609-8f9c96812029/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= +google.golang.org/genproto v0.0.0-20221118155620-16455021b5e6/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= +google.golang.org/genproto v0.0.0-20221201164419-0e50fba7f41c/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= +google.golang.org/genproto v0.0.0-20221201204527-e3fa12d562f3/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= +google.golang.org/genproto v0.0.0-20221202195650-67e5cbc046fd/go.mod h1:cTsE614GARnxrLsqKREzmNYJACSWWpAWdNMwnD7c2BE= +google.golang.org/genproto v0.0.0-20221227171554-f9683d7f8bef/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= +google.golang.org/genproto v0.0.0-20230110181048-76db0878b65f/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= +google.golang.org/genproto v0.0.0-20230112194545-e10362b5ecf9/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= +google.golang.org/genproto v0.0.0-20230113154510-dbe35b8444a5/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= +google.golang.org/genproto v0.0.0-20230123190316-2c411cf9d197/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= +google.golang.org/genproto v0.0.0-20230124163310-31e0e69b6fc2/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= +google.golang.org/genproto v0.0.0-20230125152338-dcaf20b6aeaa/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= +google.golang.org/genproto v0.0.0-20230127162408-596548ed4efa/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= +google.golang.org/genproto v0.0.0-20230209215440-0dfe4f8abfcc/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= +google.golang.org/genproto v0.0.0-20230216225411-c8e22ba71e44/go.mod h1:8B0gmkoRebU8ukX6HP+4wrVQUY1+6PkQ44BSyIlflHA= +google.golang.org/genproto v0.0.0-20230222225845-10f96fb3dbec/go.mod h1:3Dl5ZL0q0isWJt+FVcfpQyirqemEuLAK/iFvg1UP1Hw= +google.golang.org/genproto v0.0.0-20230223222841-637eb2293923/go.mod h1:3Dl5ZL0q0isWJt+FVcfpQyirqemEuLAK/iFvg1UP1Hw= +google.golang.org/genproto v0.0.0-20230303212802-e74f57abe488/go.mod h1:TvhZT5f700eVlTNwND1xoEZQeWTB2RY/65kplwl/bFA= +google.golang.org/genproto v0.0.0-20230306155012-7f2fa6fef1f4/go.mod h1:NWraEVixdDnqcqQ30jipen1STv2r/n24Wb7twVTGR4s= +google.golang.org/genproto v0.0.0-20230320184635-7606e756e683/go.mod h1:NWraEVixdDnqcqQ30jipen1STv2r/n24Wb7twVTGR4s= +google.golang.org/genproto v0.0.0-20230323212658-478b75c54725/go.mod h1:UUQDJDOlWu4KYeJZffbWgBkS1YFobzKbLVfK69pe0Ak= +google.golang.org/genproto v0.0.0-20230330154414-c0448cd141ea/go.mod h1:UUQDJDOlWu4KYeJZffbWgBkS1YFobzKbLVfK69pe0Ak= +google.golang.org/genproto v0.0.0-20230331144136-dcfb400f0633/go.mod h1:UUQDJDOlWu4KYeJZffbWgBkS1YFobzKbLVfK69pe0Ak= +google.golang.org/genproto v0.0.0-20230403163135-c38d8f061ccd/go.mod h1:UUQDJDOlWu4KYeJZffbWgBkS1YFobzKbLVfK69pe0Ak= +google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1/go.mod h1:nKE/iIaLqn2bQwXBg8f1g2Ylh6r5MN5CmZvuzZCgsCU= +google.golang.org/genproto v0.0.0-20230525234025-438c736192d0/go.mod h1:9ExIQyXL5hZrHzQceCwuSYwZZ5QZBazOcprJ5rgs3lY= +google.golang.org/genproto v0.0.0-20230526161137-0005af68ea54/go.mod h1:zqTuNwFlFRsw5zIts5VnzLQxSRqh+CGOTVMlYbY0Eyk= +google.golang.org/genproto v0.0.0-20230526203410-71b5a4ffd15e/go.mod h1:zqTuNwFlFRsw5zIts5VnzLQxSRqh+CGOTVMlYbY0Eyk= +google.golang.org/genproto v0.0.0-20230530153820-e85fd2cbaebc/go.mod h1:xZnkP7mREFX5MORlOPEzLMr+90PPZQ2QWzrVTWfAq64= +google.golang.org/genproto v0.0.0-20230629202037-9506855d4529/go.mod h1:xZnkP7mREFX5MORlOPEzLMr+90PPZQ2QWzrVTWfAq64= +google.golang.org/genproto v0.0.0-20230706204954-ccb25ca9f130/go.mod h1:O9kGHb51iE/nOGvQaDUuadVYqovW56s5emA88lQnj6Y= +google.golang.org/genproto v0.0.0-20230711160842-782d3b101e98/go.mod h1:S7mY02OqCJTD0E1OiQy1F72PWFB4bZJ87cAtLPYgDR0= +google.golang.org/genproto v0.0.0-20230726155614-23370e0ffb3e/go.mod h1:0ggbjUrZYpy1q+ANUS30SEoGZ53cdfwtbuG7Ptgy108= +google.golang.org/genproto v0.0.0-20230803162519-f966b187b2e5/go.mod h1:oH/ZOT02u4kWEp7oYBGYFFkCdKS/uYR9Z7+0/xuuFp8= +google.golang.org/genproto v0.0.0-20230821184602-ccc8af3d0e93/go.mod h1:yZTlhN0tQnXo3h00fuXNCxJdLdIdnVFVBaRJ5LWBbw4= +google.golang.org/genproto v0.0.0-20230822172742-b8732ec3820d/go.mod h1:yZTlhN0tQnXo3h00fuXNCxJdLdIdnVFVBaRJ5LWBbw4= +google.golang.org/genproto v0.0.0-20230913181813-007df8e322eb/go.mod h1:yZTlhN0tQnXo3h00fuXNCxJdLdIdnVFVBaRJ5LWBbw4= +google.golang.org/genproto v0.0.0-20230920204549-e6e6cdab5c13/go.mod h1:CCviP9RmpZ1mxVr8MUjCnSiY09IbAXZxhLE6EhHIdPU= +google.golang.org/genproto v0.0.0-20231002182017-d307bd883b97/go.mod h1:t1VqOqqvce95G3hIDCT5FeO3YUc6Q4Oe24L/+rNMxRk= +google.golang.org/genproto v0.0.0-20231012201019-e917dd12ba7a/go.mod h1:EMfReVxb80Dq1hhioy0sOsY9jCE46YDgHlJ7fWVUWRE= +google.golang.org/genproto v0.0.0-20231016165738-49dd2c1f3d0b/go.mod h1:CgAqfJo+Xmu0GwA0411Ht3OU3OntXwsGmrmjI8ioGXI= +google.golang.org/genproto v0.0.0-20231030173426-d783a09b4405/go.mod h1:3WDQMjmJk36UQhjQ89emUzb1mdaHcPeeAh4SCBKznB4= +google.golang.org/genproto v0.0.0-20231106174013-bbf56f31fb17/go.mod h1:J7XzRzVy1+IPwWHZUzoD0IccYZIrXILAQpc+Qy9CMhY= +google.golang.org/genproto v0.0.0-20231120223509-83a465c0220f/go.mod h1:nWSwAFPb+qfNJXsoeO3Io7zf4tMSfN8EA8RlDA04GhY= +google.golang.org/genproto v0.0.0-20231211222908-989df2bf70f3/go.mod h1:5RBcpGRxr25RbDzY5w+dmaqpSEvl8Gwl1x2CICf60ic= +google.golang.org/genproto v0.0.0-20231212172506-995d672761c0/go.mod h1:l/k7rMz0vFTBPy+tFSGvXEd3z+BcoG1k7EHbqm+YBsY= +google.golang.org/genproto v0.0.0-20240102182953-50ed04b92917/go.mod h1:pZqR+glSb11aJ+JQcczCvgf47+duRuzNSKqE8YAQnV0= +google.golang.org/genproto v0.0.0-20240116215550-a9fa1716bcac/go.mod h1:+Rvu7ElI+aLzyDQhpHMFMMltsD6m7nqpuWDd2CwJw3k= +google.golang.org/genproto v0.0.0-20240123012728-ef4313101c80/go.mod h1:cc8bqMqtv9gMOr0zHg2Vzff5ULhhL2IXP4sbcn32Dro= +google.golang.org/genproto v0.0.0-20240125205218-1f4bbc51befe/go.mod h1:cc8bqMqtv9gMOr0zHg2Vzff5ULhhL2IXP4sbcn32Dro= +google.golang.org/genproto v0.0.0-20240205150955-31a09d347014/go.mod h1:xEgQu1e4stdSSsxPDK8Azkrk/ECl5HvdPf6nbZrTS5M= +google.golang.org/genproto v0.0.0-20240213162025-012b6fc9bca9/go.mod h1:mqHbVIp48Muh7Ywss/AD6I5kNVKZMmAa/QEW58Gxp2s= +google.golang.org/genproto/googleapis/api v0.0.0-20230525234020-1aefcd67740a/go.mod h1:ts19tUU+Z0ZShN1y3aPyq2+O3d5FUNNgT6FtOzmrNn8= +google.golang.org/genproto/googleapis/api v0.0.0-20230525234035-dd9d682886f9/go.mod h1:vHYtlOoi6TsQ3Uk2yxR7NI5z8uoV+3pZtR4jmHIkRig= +google.golang.org/genproto/googleapis/api v0.0.0-20230526203410-71b5a4ffd15e/go.mod h1:vHYtlOoi6TsQ3Uk2yxR7NI5z8uoV+3pZtR4jmHIkRig= +google.golang.org/genproto/googleapis/api v0.0.0-20230530153820-e85fd2cbaebc/go.mod h1:vHYtlOoi6TsQ3Uk2yxR7NI5z8uoV+3pZtR4jmHIkRig= +google.golang.org/genproto/googleapis/api v0.0.0-20230629202037-9506855d4529/go.mod h1:vHYtlOoi6TsQ3Uk2yxR7NI5z8uoV+3pZtR4jmHIkRig= +google.golang.org/genproto/googleapis/api v0.0.0-20230706204954-ccb25ca9f130/go.mod h1:mPBs5jNgx2GuQGvFwUvVKqtn6HsUw9nP64BedgvqEsQ= +google.golang.org/genproto/googleapis/api v0.0.0-20230711160842-782d3b101e98/go.mod h1:rsr7RhLuwsDKL7RmgDDCUc6yaGr1iqceVb5Wv6f6YvQ= +google.golang.org/genproto/googleapis/api v0.0.0-20230726155614-23370e0ffb3e/go.mod h1:rsr7RhLuwsDKL7RmgDDCUc6yaGr1iqceVb5Wv6f6YvQ= +google.golang.org/genproto/googleapis/api v0.0.0-20230803162519-f966b187b2e5/go.mod h1:5DZzOUPCLYL3mNkQ0ms0F3EuUNZ7py1Bqeq6sxzI7/Q= +google.golang.org/genproto/googleapis/api v0.0.0-20230822172742-b8732ec3820d/go.mod h1:KjSP20unUpOx5kyQUFa7k4OJg0qeJ7DEZflGDu2p6Bk= +google.golang.org/genproto/googleapis/api v0.0.0-20230913181813-007df8e322eb/go.mod h1:KjSP20unUpOx5kyQUFa7k4OJg0qeJ7DEZflGDu2p6Bk= +google.golang.org/genproto/googleapis/api v0.0.0-20230920204549-e6e6cdab5c13/go.mod h1:RdyHbowztCGQySiCvQPgWQWgWhGnouTdCflKoDBt32U= +google.golang.org/genproto/googleapis/api v0.0.0-20231002182017-d307bd883b97/go.mod h1:iargEX0SFPm3xcfMI0d1domjg0ZF4Aa0p2awqyxhvF0= +google.golang.org/genproto/googleapis/api v0.0.0-20231012201019-e917dd12ba7a/go.mod h1:SUBoKXbI1Efip18FClrQVGjWcyd0QZd8KkvdP34t7ww= +google.golang.org/genproto/googleapis/api v0.0.0-20231016165738-49dd2c1f3d0b/go.mod h1:IBQ646DjkDkvUIsVq/cc03FUFQ9wbZu7yE396YcL870= +google.golang.org/genproto/googleapis/api v0.0.0-20231030173426-d783a09b4405/go.mod h1:oT32Z4o8Zv2xPQTg0pbVaPr0MPOH6f14RgXt7zfIpwg= +google.golang.org/genproto/googleapis/api v0.0.0-20231106174013-bbf56f31fb17/go.mod h1:0xJLfVdJqpAPl8tDg1ujOCGzx6LFLttXT5NhllGOXY4= +google.golang.org/genproto/googleapis/api v0.0.0-20231120223509-83a465c0220f/go.mod h1:Uy9bTZJqmfrw2rIBxgGLnamc78euZULUBrLZ9XTITKI= +google.golang.org/genproto/googleapis/api v0.0.0-20231211222908-989df2bf70f3/go.mod h1:k2dtGpRrbsSyKcNPKKI5sstZkrNCZwpU/ns96JoHbGg= +google.golang.org/genproto/googleapis/api v0.0.0-20231212172506-995d672761c0/go.mod h1:CAny0tYF+0/9rmDB9fahA9YLzX3+AEVl1qXbv5hhj6c= +google.golang.org/genproto/googleapis/api v0.0.0-20240102182953-50ed04b92917/go.mod h1:CmlNWB9lSezaYELKS5Ym1r44VrrbPUa7JTvw+6MbpJ0= +google.golang.org/genproto/googleapis/api v0.0.0-20240116215550-a9fa1716bcac/go.mod h1:B5xPO//w8qmBDjGReYLpR6UJPnkldGkCSMoH/2vxJeg= +google.golang.org/genproto/googleapis/api v0.0.0-20240122161410-6c6643bf1457/go.mod h1:4jWUdICTdgc3Ibxmr8nAJiiLHwQBY0UI0XZcEMaFKaA= +google.golang.org/genproto/googleapis/api v0.0.0-20240123012728-ef4313101c80/go.mod h1:4jWUdICTdgc3Ibxmr8nAJiiLHwQBY0UI0XZcEMaFKaA= +google.golang.org/genproto/googleapis/api v0.0.0-20240125205218-1f4bbc51befe/go.mod h1:4jWUdICTdgc3Ibxmr8nAJiiLHwQBY0UI0XZcEMaFKaA= +google.golang.org/genproto/googleapis/api v0.0.0-20240205150955-31a09d347014/go.mod h1:rbHMSEDyoYX62nRVLOCc4Qt1HbsdytAYoVwgjiOhF3I= +google.golang.org/genproto/googleapis/api v0.0.0-20240221002015-b0ce06bbee7c/go.mod h1:5iCWqnniDlqZHrd3neWVTOwvh/v6s3232omMecelax8= +google.golang.org/genproto/googleapis/api v0.0.0-20240311132316-a219d84964c2/go.mod h1:O1cOfN1Cy6QEYr7VxtjOyP5AdAuR0aJ/MYZaaof623Y= +google.golang.org/genproto/googleapis/api v0.0.0-20240318140521-94a12d6c2237/go.mod h1:Z5Iiy3jtmioajWHDGFk7CeugTyHtPvMHA4UTmUkyalE= +google.golang.org/genproto/googleapis/api v0.0.0-20240528184218-531527333157/go.mod h1:99sLkeliLXfdj2J75X3Ho+rrVCaJze0uwN7zDDkjPVU= +google.golang.org/genproto/googleapis/bytestream v0.0.0-20230530153820-e85fd2cbaebc/go.mod h1:ylj+BE99M198VPbBh6A8d9n3w8fChvyLK3wwBOjXBFA= +google.golang.org/genproto/googleapis/bytestream v0.0.0-20230807174057-1744710a1577/go.mod h1:NjCQG/D8JandXxM57PZbAJL1DCNL6EypA0vPPwfsc7c= +google.golang.org/genproto/googleapis/bytestream v0.0.0-20231030173426-d783a09b4405/go.mod h1:GRUCuLdzVqZte8+Dl/D4N25yLzcGqqWaYkeVOwulFqw= +google.golang.org/genproto/googleapis/bytestream v0.0.0-20231212172506-995d672761c0/go.mod h1:guYXGPwC6jwxgWKW5Y405fKWOFNwlvUlUnzyp9i0uqo= +google.golang.org/genproto/googleapis/bytestream v0.0.0-20240116215550-a9fa1716bcac/go.mod h1:ZSvZ8l+AWJwXw91DoTjWjaVLpWU6o0eZ4YLYpH8aLeQ= +google.golang.org/genproto/googleapis/bytestream v0.0.0-20240125205218-1f4bbc51befe/go.mod h1:SCz6T5xjNXM4QFPRwxHcfChp7V+9DcXR3ay2TkHR8Tg= +google.golang.org/genproto/googleapis/bytestream v0.0.0-20240205150955-31a09d347014/go.mod h1:EhZbXt+eY4Yr3YVaEGLdNZF5viWowOJZ8KTPqjYMKzg= +google.golang.org/genproto/googleapis/bytestream v0.0.0-20240213162025-012b6fc9bca9/go.mod h1:om8Bj876Z0v9ei+RD1LnEWig7vpHQ371PUqsgjmLQEA= +google.golang.org/genproto/googleapis/bytestream v0.0.0-20240304161311-37d4d3c04a78/go.mod h1:vh/N7795ftP0AkN1w8XKqN4w1OdUKXW5Eummda+ofv8= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230525234015-3fc162c6f38a/go.mod h1:xURIpW9ES5+/GZhnV6beoEtxQrnkRGIfP5VQG2tCBLc= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230525234030-28d5490b6b19/go.mod h1:66JfowdXAEgad5O9NnYcsNPLCPZJD++2L9X0PCMODrA= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230526203410-71b5a4ffd15e/go.mod h1:66JfowdXAEgad5O9NnYcsNPLCPZJD++2L9X0PCMODrA= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230530153820-e85fd2cbaebc/go.mod h1:66JfowdXAEgad5O9NnYcsNPLCPZJD++2L9X0PCMODrA= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230629202037-9506855d4529/go.mod h1:66JfowdXAEgad5O9NnYcsNPLCPZJD++2L9X0PCMODrA= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230706204954-ccb25ca9f130/go.mod h1:8mL13HKkDa+IuJ8yruA3ci0q+0vsUz4m//+ottjwS5o= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230711160842-782d3b101e98/go.mod h1:TUfxEVdsvPg18p6AslUXFoLdpED4oBnGwyqk3dV1XzM= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230731190214-cbb8c96f2d6d/go.mod h1:TUfxEVdsvPg18p6AslUXFoLdpED4oBnGwyqk3dV1XzM= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230803162519-f966b187b2e5/go.mod h1:zBEcrKX2ZOcEkHWxBPAIvYUWOKKMIhYcmNiUIu2ji3I= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d/go.mod h1:+Bk1OCOj40wS2hwAMA+aCW9ypzm63QTBBHp6lQ3p+9M= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230920183334-c177e329c48b/go.mod h1:+Bk1OCOj40wS2hwAMA+aCW9ypzm63QTBBHp6lQ3p+9M= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230920204549-e6e6cdab5c13/go.mod h1:KSqppvjFjtoCI+KGd4PELB0qLNxdJHRGqRI09mB6pQA= +google.golang.org/genproto/googleapis/rpc v0.0.0-20231002182017-d307bd883b97/go.mod h1:v7nGkzlmW8P3n/bKmWBn2WpBjpOEx8Q6gMueudAmKfY= +google.golang.org/genproto/googleapis/rpc v0.0.0-20231012201019-e917dd12ba7a/go.mod h1:4cYg8o5yUbm77w8ZX00LhMVNl/YVBFJRYWDc0uYWMs0= +google.golang.org/genproto/googleapis/rpc v0.0.0-20231016165738-49dd2c1f3d0b/go.mod h1:swOH3j0KzcDDgGUWr+SNpyTen5YrXjS3eyPzFYKc6lc= +google.golang.org/genproto/googleapis/rpc v0.0.0-20231030173426-d783a09b4405/go.mod h1:67X1fPuzjcrkymZzZV1vvkFeTn2Rvc6lYF9MYFGCcwE= +google.golang.org/genproto/googleapis/rpc v0.0.0-20231106174013-bbf56f31fb17/go.mod h1:oQ5rr10WTTMvP4A36n8JpR1OrO1BEiV4f78CneXZxkA= +google.golang.org/genproto/googleapis/rpc v0.0.0-20231120223509-83a465c0220f/go.mod h1:L9KNLi232K1/xB6f7AlSX692koaRnKaWSR0stBki0Yc= +google.golang.org/genproto/googleapis/rpc v0.0.0-20231211222908-989df2bf70f3/go.mod h1:eJVxU6o+4G1PSczBr85xmyvSNYAKvAYgkub40YGomFM= +google.golang.org/genproto/googleapis/rpc v0.0.0-20231212172506-995d672761c0/go.mod h1:FUoWkonphQm3RhTS+kOEhF8h0iDpm4tdXolVCeZ9KKA= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240102182953-50ed04b92917/go.mod h1:xtjpI3tXFPP051KaWnhvxkiubL/6dJ18vLVf7q2pTOU= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240116215550-a9fa1716bcac/go.mod h1:daQN87bsDqDoe316QbbvX60nMoJQa4r6Ds0ZuoAe5yA= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240122161410-6c6643bf1457/go.mod h1:PAREbraiVEVGVdTZsVWjSbbTtSyGbAgIIvni8a8CD5s= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240123012728-ef4313101c80/go.mod h1:PAREbraiVEVGVdTZsVWjSbbTtSyGbAgIIvni8a8CD5s= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240125205218-1f4bbc51befe/go.mod h1:PAREbraiVEVGVdTZsVWjSbbTtSyGbAgIIvni8a8CD5s= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240205150955-31a09d347014/go.mod h1:SaPjaZGWb0lPqs6Ittu0spdfrOArqji4ZdeP5IC/9N4= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240213162025-012b6fc9bca9/go.mod h1:YUWgXUFRPfoYK1IHMuxH5K6nPEXSCzIMljnQ59lLRCk= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240221002015-b0ce06bbee7c/go.mod h1:H4O17MA/PE9BsGx3w+a+W2VOLLD1Qf7oJneAoU6WktY= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240228201840-1f18d85a4ec2/go.mod h1:UCOku4NytXMJuLQE5VuqA5lX3PcHCBo8pxNyvkf4xBs= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240228224816-df926f6c8641/go.mod h1:UCOku4NytXMJuLQE5VuqA5lX3PcHCBo8pxNyvkf4xBs= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240304161311-37d4d3c04a78/go.mod h1:UCOku4NytXMJuLQE5VuqA5lX3PcHCBo8pxNyvkf4xBs= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240314234333-6e1732d8331c/go.mod h1:WtryC6hu0hhx87FDGxWCDptyssuo68sk10vYjF+T9fY= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240318140521-94a12d6c2237/go.mod h1:WtryC6hu0hhx87FDGxWCDptyssuo68sk10vYjF+T9fY= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240521202816-d264139d666e/go.mod h1:EfXuqaE1J41VCDicxHzUDm+8rk+7ZdXzHV0IhO/I6s0= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240528184218-531527333157/go.mod h1:EfXuqaE1J41VCDicxHzUDm+8rk+7ZdXzHV0IhO/I6s0= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240604185151-ef581f913117 h1:1GBuWVLM/KMVUv1t1En5Gs+gFZCNd360GGb4sSxtrhU= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240604185151-ef581f913117/go.mod h1:EfXuqaE1J41VCDicxHzUDm+8rk+7ZdXzHV0IhO/I6s0= +google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= +google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= +google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= +google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= +google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= +google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= +google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= +google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= +google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8= +google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= +google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= +google.golang.org/grpc v1.36.1/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= +google.golang.org/grpc v1.37.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= +google.golang.org/grpc v1.37.1/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= +google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= +google.golang.org/grpc v1.39.0/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= +google.golang.org/grpc v1.39.1/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= +google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= +google.golang.org/grpc v1.40.1/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= +google.golang.org/grpc v1.42.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= +google.golang.org/grpc v1.44.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= +google.golang.org/grpc v1.45.0/go.mod h1:lN7owxKUQEqMfSyQikvvk5tf/6zMPsrK+ONuO11+0rQ= +google.golang.org/grpc v1.46.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= +google.golang.org/grpc v1.46.2/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= +google.golang.org/grpc v1.47.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= +google.golang.org/grpc v1.48.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= +google.golang.org/grpc v1.49.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= +google.golang.org/grpc v1.50.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= +google.golang.org/grpc v1.50.1/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= +google.golang.org/grpc v1.51.0/go.mod h1:wgNDFcnuBGmxLKI/qn4T+m5BtEBYXJPvibbUPsAIPww= +google.golang.org/grpc v1.52.0/go.mod h1:pu6fVzoFb+NBYNAvQL08ic+lvB2IojljRYuun5vorUY= +google.golang.org/grpc v1.52.3/go.mod h1:pu6fVzoFb+NBYNAvQL08ic+lvB2IojljRYuun5vorUY= +google.golang.org/grpc v1.53.0/go.mod h1:OnIrk0ipVdj4N5d9IUoFUx72/VlD7+jUsHwZgwSMQpw= +google.golang.org/grpc v1.54.0/go.mod h1:PUSEXI6iWghWaB6lXM4knEgpJNu2qUcKfDtNci3EC2g= +google.golang.org/grpc v1.55.0/go.mod h1:iYEXKGkEBhg1PjZQvoYEVPTDkHo1/bjTnfwTeGONTY8= +google.golang.org/grpc v1.56.1/go.mod h1:I9bI3vqKfayGqPUAwGdOSu7kt6oIJLixfffKrpXqQ9s= +google.golang.org/grpc v1.56.2/go.mod h1:I9bI3vqKfayGqPUAwGdOSu7kt6oIJLixfffKrpXqQ9s= +google.golang.org/grpc v1.57.0/go.mod h1:Sd+9RMTACXwmub0zcNY2c4arhtrbBYD1AUHI/dt16Mo= +google.golang.org/grpc v1.58.2/go.mod h1:tgX3ZQDlNJGU96V6yHh1T/JeoBQ2TXdr43YbYSsCJk0= +google.golang.org/grpc v1.58.3/go.mod h1:tgX3ZQDlNJGU96V6yHh1T/JeoBQ2TXdr43YbYSsCJk0= +google.golang.org/grpc v1.59.0/go.mod h1:aUPDwccQo6OTjy7Hct4AfBPD1GptF4fyUjIkQ9YtF98= +google.golang.org/grpc v1.60.0/go.mod h1:OlCHIeLYqSSsLi6i49B5QGdzaMZK9+M7LXN2FKz4eGM= +google.golang.org/grpc v1.60.1/go.mod h1:OlCHIeLYqSSsLi6i49B5QGdzaMZK9+M7LXN2FKz4eGM= +google.golang.org/grpc v1.61.0/go.mod h1:VUbo7IFqmF1QtCAstipjG0GIoq49KvMe9+h1jFLBNJs= +google.golang.org/grpc v1.61.1/go.mod h1:VUbo7IFqmF1QtCAstipjG0GIoq49KvMe9+h1jFLBNJs= +google.golang.org/grpc v1.62.0/go.mod h1:IWTG0VlJLCh1SkC58F7np9ka9mx/WNkjl4PGJaiq+QE= +google.golang.org/grpc v1.62.1/go.mod h1:IWTG0VlJLCh1SkC58F7np9ka9mx/WNkjl4PGJaiq+QE= +google.golang.org/grpc v1.64.0/go.mod h1:oxjF8E3FBnjp+/gVFYdWacaLDx9na1aqy9oovLpxQYg= +google.golang.org/grpc v1.65.0 h1:bs/cUb4lp1G5iImFFd3u5ixQzweKizoZJAwBNLR42lc= +google.golang.org/grpc v1.65.0/go.mod h1:WgYC2ypjlB0EiQi6wdKixMqukr6lBc0Vo+oOgjrM5ZQ= +google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= +google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= +google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= +google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= +google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= +google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= +google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= +google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= +google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= +google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.29.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.30.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.32.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= +google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= +google.golang.org/protobuf v1.34.1/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= +google.golang.org/protobuf v1.34.2 h1:6xV6lTsCfpGD21XK49h7MhtcApnLqkfYgPcdHftf6hg= +google.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= +gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= +gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA= +gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= +gopkg.in/natefinch/lumberjack.v2 v2.2.1 h1:bBRl1b0OH9s/DuPhuXpNl+VtCaJXFZ5/uEFST95x9zc= +gopkg.in/natefinch/lumberjack.v2 v2.2.1/go.mod h1:YD8tP3GAjkrDg1eZH7EGmyESg/lsYskCTPBJVb9jqSc= +gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gotest.tools/v3 v3.5.1/go.mod h1:isy3WKz7GK6uNw/sbHzfKBLvlvXwUyV06n6brMxxopU= +honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= +honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= +honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= +honnef.co/go/tools v0.1.3/go.mod h1:NgwopIslSNH47DimFoV78dnkksY2EFtX0ajyb3K/las= +lukechampine.com/uint128 v1.1.1/go.mod h1:c4eWIwlEGaxC/+H1VguhU4PHXNWDCDMUlWdIWl2j1gk= +lukechampine.com/uint128 v1.2.0/go.mod h1:c4eWIwlEGaxC/+H1VguhU4PHXNWDCDMUlWdIWl2j1gk= +lukechampine.com/uint128 v1.3.0/go.mod h1:c4eWIwlEGaxC/+H1VguhU4PHXNWDCDMUlWdIWl2j1gk= +modernc.org/cc/v3 v3.36.0/go.mod h1:NFUHyPn4ekoC/JHeZFfZurN6ixxawE1BnVonP/oahEI= +modernc.org/cc/v3 v3.36.2/go.mod h1:NFUHyPn4ekoC/JHeZFfZurN6ixxawE1BnVonP/oahEI= +modernc.org/cc/v3 v3.36.3/go.mod h1:NFUHyPn4ekoC/JHeZFfZurN6ixxawE1BnVonP/oahEI= +modernc.org/cc/v3 v3.37.0/go.mod h1:vtL+3mdHx/wcj3iEGz84rQa8vEqR6XM84v5Lcvfph20= +modernc.org/cc/v3 v3.38.1/go.mod h1:vtL+3mdHx/wcj3iEGz84rQa8vEqR6XM84v5Lcvfph20= +modernc.org/cc/v3 v3.40.0/go.mod h1:/bTg4dnWkSXowUO6ssQKnOV0yMVxDYNIsIrzqTFDGH0= +modernc.org/ccgo/v3 v3.0.0-20220428102840-41399a37e894/go.mod h1:eI31LL8EwEBKPpNpA4bU1/i+sKOwOrQy8D87zWUcRZc= +modernc.org/ccgo/v3 v3.0.0-20220430103911-bc99d88307be/go.mod h1:bwdAnOoaIt8Ax9YdWGjxWsdkPcZyRPHqrOvJxaKAKGw= +modernc.org/ccgo/v3 v3.0.0-20220904174949-82d86e1b6d56/go.mod h1:YSXjPL62P2AMSxBphRHPn7IkzhVHqkvOnRKAKh+W6ZI= +modernc.org/ccgo/v3 v3.0.0-20220910160915-348f15de615a/go.mod h1:8p47QxPkdugex9J4n9P2tLZ9bK01yngIVp00g4nomW0= +modernc.org/ccgo/v3 v3.16.4/go.mod h1:tGtX0gE9Jn7hdZFeU88slbTh1UtCYKusWOoCJuvkWsQ= +modernc.org/ccgo/v3 v3.16.6/go.mod h1:tGtX0gE9Jn7hdZFeU88slbTh1UtCYKusWOoCJuvkWsQ= +modernc.org/ccgo/v3 v3.16.8/go.mod h1:zNjwkizS+fIFDrDjIAgBSCLkWbJuHF+ar3QRn+Z9aws= +modernc.org/ccgo/v3 v3.16.9/go.mod h1:zNMzC9A9xeNUepy6KuZBbugn3c0Mc9TeiJO4lgvkJDo= +modernc.org/ccgo/v3 v3.16.13-0.20221017192402-261537637ce8/go.mod h1:fUB3Vn0nVPReA+7IG7yZDfjv1TMWjhQP8gCxrFAtL5g= +modernc.org/ccgo/v3 v3.16.13/go.mod h1:2Quk+5YgpImhPjv2Qsob1DnZ/4som1lJTodubIcoUkY= +modernc.org/ccorpus v1.11.6/go.mod h1:2gEUTrWqdpH2pXsmTM1ZkjeSrUWDpjMu2T6m29L/ErQ= +modernc.org/httpfs v1.0.6/go.mod h1:7dosgurJGp0sPaRanU53W4xZYKh14wfzX420oZADeHM= +modernc.org/libc v0.0.0-20220428101251-2d5f3daf273b/go.mod h1:p7Mg4+koNjc8jkqwcoFBJx7tXkpj00G77X7A72jXPXA= +modernc.org/libc v1.16.0/go.mod h1:N4LD6DBE9cf+Dzf9buBlzVJndKr/iJHG97vGLHYnb5A= +modernc.org/libc v1.16.1/go.mod h1:JjJE0eu4yeK7tab2n4S1w8tlWd9MxXLRzheaRnAKymU= +modernc.org/libc v1.16.17/go.mod h1:hYIV5VZczAmGZAnG15Vdngn5HSF5cSkbvfz2B7GRuVU= +modernc.org/libc v1.16.19/go.mod h1:p7Mg4+koNjc8jkqwcoFBJx7tXkpj00G77X7A72jXPXA= +modernc.org/libc v1.17.0/go.mod h1:XsgLldpP4aWlPlsjqKRdHPqCxCjISdHfM/yeWC5GyW0= +modernc.org/libc v1.17.1/go.mod h1:FZ23b+8LjxZs7XtFMbSzL/EhPxNbfZbErxEHc7cbD9s= +modernc.org/libc v1.17.4/go.mod h1:WNg2ZH56rDEwdropAJeZPQkXmDwh+JCA1s/htl6r2fA= +modernc.org/libc v1.18.0/go.mod h1:vj6zehR5bfc98ipowQOM2nIDUZnVew/wNC/2tOGS+q0= +modernc.org/libc v1.19.0/go.mod h1:ZRfIaEkgrYgZDl6pa4W39HgN5G/yDW+NRmNKZBDFrk0= +modernc.org/libc v1.20.3/go.mod h1:ZRfIaEkgrYgZDl6pa4W39HgN5G/yDW+NRmNKZBDFrk0= +modernc.org/libc v1.21.2/go.mod h1:przBsL5RDOZajTVslkugzLBj1evTue36jEomFQOoYuI= +modernc.org/libc v1.21.4/go.mod h1:przBsL5RDOZajTVslkugzLBj1evTue36jEomFQOoYuI= +modernc.org/libc v1.22.2/go.mod h1:uvQavJ1pZ0hIoC/jfqNoMLURIMhKzINIWypNM17puug= +modernc.org/libc v1.22.4/go.mod h1:jj+Z7dTNX8fBScMVNRAYZ/jF91K8fdT2hYMThc3YjBY= +modernc.org/mathutil v1.2.2/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= +modernc.org/mathutil v1.4.1/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= +modernc.org/mathutil v1.5.0/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= +modernc.org/memory v1.1.1/go.mod h1:/0wo5ibyrQiaoUoH7f9D8dnglAmILJ5/cxZlRECf+Nw= +modernc.org/memory v1.2.0/go.mod h1:/0wo5ibyrQiaoUoH7f9D8dnglAmILJ5/cxZlRECf+Nw= +modernc.org/memory v1.2.1/go.mod h1:PkUhL0Mugw21sHPeskwZW4D6VscE/GQJOnIpCnW6pSU= +modernc.org/memory v1.3.0/go.mod h1:PkUhL0Mugw21sHPeskwZW4D6VscE/GQJOnIpCnW6pSU= +modernc.org/memory v1.4.0/go.mod h1:PkUhL0Mugw21sHPeskwZW4D6VscE/GQJOnIpCnW6pSU= +modernc.org/memory v1.5.0/go.mod h1:PkUhL0Mugw21sHPeskwZW4D6VscE/GQJOnIpCnW6pSU= +modernc.org/opt v0.1.1/go.mod h1:WdSiB5evDcignE70guQKxYUl14mgWtbClRi5wmkkTX0= +modernc.org/opt v0.1.3/go.mod h1:WdSiB5evDcignE70guQKxYUl14mgWtbClRi5wmkkTX0= +modernc.org/sqlite v1.18.1/go.mod h1:6ho+Gow7oX5V+OiOQ6Tr4xeqbx13UZ6t+Fw9IRUG4d4= +modernc.org/sqlite v1.18.2/go.mod h1:kvrTLEWgxUcHa2GfHBQtanR1H9ht3hTJNtKpzH9k1u0= +modernc.org/sqlite v1.21.2/go.mod h1:cxbLkB5WS32DnQqeH4h4o1B0eMr8W/y8/RGuxQ3JsC0= +modernc.org/strutil v1.1.1/go.mod h1:DE+MQQ/hjKBZS2zNInV5hhcipt5rLPWkmpbGeW5mmdw= +modernc.org/strutil v1.1.3/go.mod h1:MEHNA7PdEnEwLvspRMtWTNnp2nnyvMfkimT1NKNAGbw= +modernc.org/tcl v1.13.1/go.mod h1:XOLfOwzhkljL4itZkK6T72ckMgvj0BDsnKNdZVUOecw= +modernc.org/tcl v1.13.2/go.mod h1:7CLiGIPo1M8Rv1Mitpv5akc2+8fxUd2y2UzC/MfMzy0= +modernc.org/tcl v1.15.1/go.mod h1:aEjeGJX2gz1oWKOLDVZ2tnEWLUrIn8H+GFu+akoDhqs= +modernc.org/token v1.0.0/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM= +modernc.org/token v1.0.1/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM= +modernc.org/token v1.1.0/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM= +modernc.org/z v1.5.1/go.mod h1:eWFB510QWW5Th9YGZT81s+LwvaAs3Q2yr4sP0rmLkv8= +modernc.org/z v1.7.0/go.mod h1:hVdgNMh8ggTuRG1rGU8x+xGRFfiQUIAw0ZqlPy8+HyQ= +rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= +rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= +rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= +rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= diff --git a/ai-chat-service/grpc_health_probe-linux-amd64 b/ai-chat-service/grpc_health_probe-linux-amd64 new file mode 100644 index 0000000..3f0da73 Binary files /dev/null and b/ai-chat-service/grpc_health_probe-linux-amd64 differ diff --git a/ai-chat-service/interceptor/auth.go b/ai-chat-service/interceptor/auth.go new file mode 100644 index 0000000..b67f3f4 --- /dev/null +++ b/ai-chat-service/interceptor/auth.go @@ -0,0 +1,38 @@ +package interceptor + +import ( + "ai-chat-service/pkg/config" + "ai-chat-service/pkg/zerror" + "context" + "google.golang.org/grpc" + "google.golang.org/grpc/metadata" + "strings" +) + +func UnaryAuthInterceptor(ctx context.Context, req any, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (resp any, err error) { + if info.FullMethod != "/grpc.health.v1.Health/Check" { + err = oauth2Valid(ctx) + if err != nil { + return + } + } + return handler(ctx, req) +} +func oauth2Valid(ctx context.Context) error { + md, ok := metadata.FromIncomingContext(ctx) + if !ok { + return zerror.NewByMsg("元数据获取失败") + } + authorization := md["authorization"] + + if len(authorization) < 1 { + return zerror.NewByMsg("元数据获取失败") + } + + token := strings.TrimPrefix(authorization[0], "Bearer ") + cnf := config.GetConfig() + if token != cnf.Server.AccessToken { + return zerror.NewByMsg("鉴权失败") + } + return nil +} diff --git a/ai-chat-service/pkg/config/config.go b/ai-chat-service/pkg/config/config.go new file mode 100644 index 0000000..c03e800 --- /dev/null +++ b/ai-chat-service/pkg/config/config.go @@ -0,0 +1,90 @@ +package config + +import ( + "github.com/spf13/viper" + "log" +) + +type Config struct { + Server struct { + IP string + Port int + AccessToken string + } + Log struct { + Level string + LogPath string `mapstructure:"logPath"` + } `mapstructure:"log"` + Chat struct { + ApiKey string `mapstructure:"api_key"` + BaseUrl string `mapstructure:"base_url"` + Model string `mapstructure:"model"` + MaxTokens int `mapstructure:"max_tokens"` + Temperature float32 `mapstructure:"temperature"` + TopP float32 `mapstructure:"top_p"` + PresencePenalty float32 `mapstructure:"presence_penalty"` + FrequencyPenalty float32 `mapstructure:"frequency_penalty"` + BotDesc string `mapstructure:"bot_desc"` + MinResponseTokens int `mapstructure:"min_response_tokens"` + ContextTTL int `mapstructure:"context_ttl"` + ContextLen int `mapstructure:"context_len"` + } + Mysql struct { + DSN string + MaxLifeTime int + MaxOpenConn int + MaxIdleConn int + } + Redis struct { + Host string + Port int + Pwd string `mapstructure:"pwd"` + } + DependOn struct { + Sensitive struct { + Address string + AccessToken string + } + Keywords struct { + Address string + AccessToken string + } + Tokenizer struct { + Address string + } + } + VectorDB struct { + Url string + Username string + Pwd string + Database string + Timeout int + MaxIdleConnPerHost int + ReadConsistency string + IdleConnTimeout int + } +} + +var conf *Config + +func InitConfig(filePath string, typ ...string) { + v := viper.New() + v.SetConfigFile(filePath) + if len(typ) > 0 { + v.SetConfigType(typ[0]) + } + err := v.ReadInConfig() + if err != nil { + log.Fatal(err) + } + conf = &Config{} + err = v.Unmarshal(conf) + if err != nil { + log.Fatal(err) + } + +} + +func GetConfig() *Config { + return conf +} diff --git a/ai-chat-service/pkg/db/mysql/mysql.go b/ai-chat-service/pkg/db/mysql/mysql.go new file mode 100644 index 0000000..db84c64 --- /dev/null +++ b/ai-chat-service/pkg/db/mysql/mysql.go @@ -0,0 +1,28 @@ +package mysql + +import ( + "ai-chat-service/pkg/config" + "database/sql" + _ "github.com/go-sql-driver/mysql" + "time" +) + +var db *sql.DB + +func InitMysql(cnf *config.Config) { + var err error + if cnf.Mysql.DSN == "" { + panic("数据库连接字符串不能为空") + } + db, err = sql.Open("mysql", cnf.Mysql.DSN) + if err != nil { + panic(err) + } + db.SetMaxOpenConns(cnf.Mysql.MaxOpenConn) + db.SetMaxIdleConns(cnf.Mysql.MaxIdleConn) + db.SetConnMaxLifetime(time.Second * time.Duration(cnf.Mysql.MaxLifeTime)) +} + +func GetDB() *sql.DB { + return db +} diff --git a/ai-chat-service/pkg/db/redis/prefix.go b/ai-chat-service/pkg/db/redis/prefix.go new file mode 100644 index 0000000..a7952a4 --- /dev/null +++ b/ai-chat-service/pkg/db/redis/prefix.go @@ -0,0 +1,14 @@ +package redis + +import "strings" + +const ServicePrefix = "ai_chat_service_" + +func GetKey(key string, parts ...string) string { + key = ServicePrefix + key + if len(parts) == 0 { + return key + } + key += "_" + strings.Join(parts, "_") + return key +} diff --git a/ai-chat-service/pkg/db/redis/redis.go b/ai-chat-service/pkg/db/redis/redis.go new file mode 100644 index 0000000..faf2248 --- /dev/null +++ b/ai-chat-service/pkg/db/redis/redis.go @@ -0,0 +1,57 @@ +package redis + +import ( + "ai-chat-service/pkg/config" + "context" + "fmt" + redis "github.com/redis/go-redis/v9" + "sync" +) + +type RedisPool interface { + Get() *redis.Client + Put(client *redis.Client) +} + +var pool RedisPool + +type redisPool struct { + pool sync.Pool +} + +func (p *redisPool) Get() *redis.Client { + client := p.pool.Get().(*redis.Client) + if client.Ping(context.Background()).Err() != nil { + client = p.pool.New().(*redis.Client) + } + return client +} + +func (p *redisPool) Put(client *redis.Client) { + if client.Ping(context.Background()).Err() != nil { + return + } + p.pool.Put(client) +} + +func getPool(cnf *config.Config) RedisPool { + return &redisPool{ + pool: sync.Pool{ + New: func() any { + rdb := redis.NewClient(&redis.Options{ + Addr: fmt.Sprintf("%s:%d", cnf.Redis.Host, cnf.Redis.Port), + Password: cnf.Redis.Pwd, + }) + return rdb + }, + }, + } +} + +func InitRedisPool(cnf *config.Config) { + pool = getPool(cnf) +} + +func GetPool() RedisPool { + return pool +} diff --git a/ai-chat-service/pkg/db/vector/vector.go b/ai-chat-service/pkg/db/vector/vector.go new file mode 100644 index 0000000..c57df64 --- /dev/null +++ b/ai-chat-service/pkg/db/vector/vector.go @@ -0,0 +1,29 @@ +package vector + +import ( + "ai-chat-service/pkg/config" + "ai-chat-service/pkg/log" + "github.com/tencent/vectordatabase-sdk-go/tcvectordb" + "time" +) + +var vdb *tcvectordb.Client + +func InitDB(config *config.Config) { + var defaultOption = &tcvectordb.ClientOption{ + Timeout: time.Second * time.Duration(config.VectorDB.Timeout), + MaxIdldConnPerHost: config.VectorDB.MaxIdleConnPerHost, + IdleConnTimeout: time.Second * time.Duration(config.VectorDB.IdleConnTimeout), + ReadConsistency: tcvectordb.ReadConsistency(config.VectorDB.ReadConsistency), + } + var err error + vdb, err = tcvectordb.NewClient(config.VectorDB.Url, config.VectorDB.Username, config.VectorDB.Pwd, defaultOption) + if err != nil { + log.Error(err) + return + } +} + +func GetVdb() *tcvectordb.Client { + return vdb +} diff --git a/ai-chat-service/pkg/log/README.md b/ai-chat-service/pkg/log/README.md new file mode 100644 index 0000000..3e02b17 --- /dev/null +++ b/ai-chat-service/pkg/log/README.md @@ -0,0 +1,3 @@ +# 日志框架 +1. 可通过包调用日志打印,也可以通过对象调用日志打印 +2. 可以自动切分日志文件 diff --git a/ai-chat-service/pkg/log/hook.go b/ai-chat-service/pkg/log/hook.go new file mode 100644 index 0000000..a7a1cbf --- /dev/null +++ b/ai-chat-service/pkg/log/hook.go @@ -0,0 +1,19 @@ +package log + +import "github.com/sirupsen/logrus" +import nativeLog "log" + +type errorHook struct { +} + +func (*errorHook) Levels() []logrus.Level { + return []logrus.Level{ + logrus.PanicLevel, + logrus.FatalLevel, + logrus.ErrorLevel, + } +} +func (*errorHook) Fire(entry *logrus.Entry) error { + nativeLog.Println(entry.Message, entry.Data) + return nil +} diff --git a/ai-chat-service/pkg/log/log.go b/ai-chat-service/pkg/log/log.go new file mode 100644 index 0000000..520d547 --- /dev/null +++ b/ai-chat-service/pkg/log/log.go @@ -0,0 +1,233 @@ +package log + +import ( + "errors" + "fmt" + "github.com/sirupsen/logrus" + "io" + "runtime" +) + +type ILogger interface { + SetLevel(lvl string) + SetOutput(writer io.Writer) + SetPrintCaller(bool) + SetCaller(caller func() (file string, line int, funcName string, err error)) + Trace(args ...interface{}) + Debug(args ...interface{}) + Info(args ...interface{}) + Warning(args ...interface{}) + Error(args ...interface{}) + Fatal(args ...interface{}) + Panic(args ...interface{}) + TraceF(format string, args ...interface{}) + DebugF(format string, args ...interface{}) + InfoF(format string, args ...interface{}) + WarningF(format string, args ...interface{}) + ErrorF(format string, args ...interface{}) + FatalF(format string, args ...interface{}) + PanicF(format string, args ...interface{}) + WithFields(fields map[string]interface{}) ILogger +} +type Logger struct { + entry *logrus.Entry + // panic,fatal,error,warn,warning,info,debug,trace + level string + printCaller bool + caller func() (file string, line int, funcName string, err error) +} + +// 设置日志打印级别 +func (l *Logger) SetLevel(lvl string) { + if lvl == "" { + return + } + level, err := logrus.ParseLevel(lvl) + if err == nil { + l.level = lvl + l.entry.Logger.Level = level + } +} + +// 设置日志输出位置 +func (l *Logger) SetOutput(writer io.Writer) { + l.entry.Logger.SetOutput(writer) +} + +// 设置是否打印调用信息 +func (l *Logger) SetPrintCaller(printCaller bool) { + l.printCaller = printCaller +} +func (l *Logger) SetCaller(caller func() (file string, line int, funcName string, err error)) { + l.caller = caller +} + +// 获取caller信息 +func (l *Logger) getCallerInfo(level logrus.Level) map[string]interface{} { + mp := make(map[string]interface{}) + if l.printCaller == true || level != logrus.InfoLevel { + file, line, funcName, err := l.caller() + if err == nil { + mp["file"] = fmt.Sprintf("%s:%d", file, line) + mp["func"] = funcName + } + } + return mp +} + +func (l *Logger) log(level logrus.Level, args ...interface{}) { + l.entry.WithFields(l.getCallerInfo(level)).Log(level, args...) +} +func (l *Logger) logf(level logrus.Level, format string, args ...interface{}) { + l.entry.WithFields(l.getCallerInfo(level)).Logf(level, format, args...) +} +func (l *Logger) Trace(args ...interface{}) { + l.log(logrus.TraceLevel, args...) +} +func (l *Logger) Debug(args ...interface{}) { + l.log(logrus.DebugLevel, args...) +} +func (l *Logger) Info(args ...interface{}) { + l.log(logrus.InfoLevel, args...) +} +func (l *Logger) Warning(args ...interface{}) { + l.log(logrus.WarnLevel, args...) +} +func (l *Logger) Error(args ...interface{}) { + l.log(logrus.ErrorLevel, args...) +} +func (l *Logger) Fatal(args ...interface{}) { + l.log(logrus.FatalLevel, args...) +} +func (l *Logger) Panic(args ...interface{}) { + l.log(logrus.PanicLevel, args...) +} +func (l *Logger) TraceF(format string, args ...interface{}) { + l.logf(logrus.TraceLevel, format, args...) +} +func (l *Logger) DebugF(format string, args ...interface{}) { + l.logf(logrus.DebugLevel, format, args...) +} +func (l *Logger) InfoF(format string, args ...interface{}) { + l.logf(logrus.InfoLevel, format, args...) +} +func (l *Logger) WarningF(format string, args ...interface{}) { + l.logf(logrus.WarnLevel, format, args...) +} +func (l *Logger) ErrorF(format string, args ...interface{}) { + l.logf(logrus.ErrorLevel, format, args...) +} +func (l *Logger) FatalF(format string, args ...interface{}) { + l.logf(logrus.FatalLevel, format, args...) +} +func (l *Logger) PanicF(format string, args ...interface{}) { + l.logf(logrus.PanicLevel, format, args...) +} +func (l *Logger) WithFields(fields map[string]interface{}) ILogger { + entry := l.entry.WithFields(fields) + return &Logger{entry: entry, level: l.level, printCaller: l.printCaller, caller: l.caller} +} + +var log *Logger + +func NewLogger() ILogger { + return newLogger() +} +func newLogger() *Logger { + log := logrus.New() + log.SetLevel(logrus.InfoLevel) + log.AddHook(&errorHook{}) + logger := &Logger{ + entry: logrus.NewEntry(log), + caller: defaultCaller, + } + return logger +} + +func init() { + log = newLogger() +} + +// 设置日志打印级别 +func SetLevel(lvl string) { + if lvl == "" { + return + } + level, err := logrus.ParseLevel(lvl) + if err == nil { + log.level = lvl + log.entry.Logger.Level = level + } +} + +// 设置日志的输出位置 +func SetOutput(writer io.Writer) { + log.entry.Logger.SetOutput(writer) +} + +// 设置是否打印调用信息 +func SetPrintCaller(printCaller bool) { + log.printCaller = printCaller +} + +func SetCaller(caller func() (file string, line int, funcName string, err error)) { + log.caller = caller +} + +func defaultCaller() (file string, line int, funcName string, err error) { + pc, f, l, ok := runtime.Caller(4) + if !ok { + err = errors.New("caller failure") + return + } + funcName = runtime.FuncForPC(pc).Name() + file, line = f, l + return +} + +func Trace(args ...interface{}) { + log.log(logrus.TraceLevel, args...) +} +func Debug(args ...interface{}) { + log.log(logrus.DebugLevel, args...) +} +func Info(args ...interface{}) { + log.log(logrus.InfoLevel, args...) +} +func Warning(args ...interface{}) { + log.log(logrus.WarnLevel, args...) +} +func Error(args ...interface{}) { + log.log(logrus.ErrorLevel, args...) +} +func Fatal(args ...interface{}) { + log.log(logrus.FatalLevel, args...) +} +func Panic(args ...interface{}) { + log.log(logrus.PanicLevel, args...) +} +func TraceF(format string, args ...interface{}) { + log.logf(logrus.TraceLevel, format, args...) +} +func DebugF(format string, args ...interface{}) { + log.logf(logrus.DebugLevel, format, args...) +} +func InfoF(format string, args ...interface{}) { + log.logf(logrus.InfoLevel, format, args...) +} +func WarningF(format string, args ...interface{}) { + log.logf(logrus.WarnLevel, format, args...) +} +func ErrorF(format string, args ...interface{}) { + log.logf(logrus.ErrorLevel, format, args...) +} +func FatalF(format string, args ...interface{}) { + log.logf(logrus.FatalLevel, format, args...) +} +func PanicF(format string, args ...interface{}) { + log.logf(logrus.PanicLevel, format, args...) +} +func WithFields(fields map[string]interface{}) *Logger { + entry := log.entry.WithFields(fields) + return &Logger{entry: entry, level: log.level, printCaller: log.printCaller, caller: log.caller} +} diff --git a/ai-chat-service/pkg/log/rotate_writer.go b/ai-chat-service/pkg/log/rotate_writer.go new file mode 100644 index 0000000..7bec60b --- /dev/null +++ b/ai-chat-service/pkg/log/rotate_writer.go @@ -0,0 +1,58 @@ +package log + +import ( + "gopkg.in/natefinch/lumberjack.v2" + "io" + "sync" +) + +type fileRotateWriter struct { + data map[string]io.Writer + sync.RWMutex +} + +func (frw *fileRotateWriter) getWriter(logPath string) io.Writer { + frw.RLock() + defer frw.RUnlock() + w, ok := frw.data[logPath] + if !ok { + return nil + } + return w +} +func (frw *fileRotateWriter) setWriter(logPath string, w io.Writer) io.Writer { + frw.Lock() + defer frw.Unlock() + frw.data[logPath] = w + return w +} + +var _fileRotateWriter *fileRotateWriter + +func init() { + _fileRotateWriter = &fileRotateWriter{ + data: map[string]io.Writer{}, + } +} + +func GetRotateWriter(logPath string) io.Writer { + if logPath == "" { + panic("日志文件路径不能为空") + } + writer := _fileRotateWriter.getWriter(logPath) + if writer != nil { + return writer + } + writer = &lumberjack.Logger{ + //文件名 + Filename: logPath, + //单个文件大小单位MB + MaxSize: 1, + //最多保留文件数 + MaxBackups: 15, + //最长保留时间(天) + MaxAge: 7, + LocalTime: true, + } + return _fileRotateWriter.setWriter(logPath, writer) +} diff --git a/ai-chat-service/pkg/zerror/error_code.go b/ai-chat-service/pkg/zerror/error_code.go new file mode 100644 index 0000000..0aacd5c --- /dev/null +++ b/ai-chat-service/pkg/zerror/error_code.go @@ -0,0 +1,14 @@ +package zerror + +type ZErrorCode string + +func getErrMsg(errCode ZErrorCode) string { + msg, ok := errorMsgs[errCode] + if ok { + return msg + } + return "" +} + +// 错误码与之对应的错误消息 +var errorMsgs = map[ZErrorCode]string{} diff --git a/ai-chat-service/pkg/zerror/zerror.go b/ai-chat-service/pkg/zerror/zerror.go new file mode 100644 index 0000000..bf1a76b --- /dev/null +++ b/ai-chat-service/pkg/zerror/zerror.go @@ -0,0 +1,101 @@ +package zerror + +import ( + "errors" + "fmt" +) + +type ZError struct { + ErrCode ZErrorCode `json:"err_code,omitempty"` + ErrMsg string `json:"err_msg,omitempty"` + errs []error +} + +func (e *ZError) Error() string { + if e == nil { + return "" + } + if e.ErrMsg != "" { + return fmt.Sprintf("ErrCode:%s; ErrMsg:%s;", e.ErrCode, e.ErrMsg) + } + res := "" + if e.errs == nil || len(e.errs) == 0 { + return res + } + var first = true + for _, err := range e.errs { + if first { + res = err.Error() + first = false + } else { + res += ";" + err.Error() + } + } + return res +} +func (e *ZError) Errors() []error { + if e == nil { + return nil + } + return e.errs +} +func (e *ZError) Append(err error) { + if e == nil || err == nil { + return + } + ze, ok := err.(*ZError) + if ok { + e.errs = append(e.errs, ze.errs...) + } else { + e.errs = append(e.errs, err) + } +} + +func NewByErr(err ...error) error { + res := &ZError{ + errs: make([]error, 0), + } + for i, e := range err { + if e == nil { + continue + } + ze, ok := err[i].(*ZError) + if ok { + res.errs = append(res.errs, ze.errs...) + } else { + res.errs = append(res.errs, err[i]) + } + } + if len(res.errs) > 0 { + return res + } + return nil +} +func NewByCode(errCode ZErrorCode, errMsg ...string) error { + msg := "" + if len(errMsg) > 0 { + msg = errMsg[0] + } else { + msg = getErrMsg(errCode) + } + return &ZError{ + ErrCode: errCode, + ErrMsg: msg, + } +} +func NewByMsg(msg string) error { + err := errors.New(msg) + return NewByErr(err) +} +func Errors(err error) []error { + if err == nil { + return nil + } + ze, ok := err.(*ZError) + if !ok { + return []error{err} + } + //将一个空的[]error切片与ze.Errors()返回的错误切片合并在一起 + //返回一个新切片 + return append(([]error)(nil), ze.Errors()...) +} diff --git a/ai-chat-service/proto/chat.pb.go b/ai-chat-service/proto/chat.pb.go new file mode 100644 index 0000000..317c678 --- /dev/null +++ b/ai-chat-service/proto/chat.pb.go @@ -0,0 +1,1000 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.28.1 +// protoc v4.22.0 +// source: proto/chat.proto + +package proto + +import ( + 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) +) + +type ChatCompletionRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Message string `protobuf:"bytes,1,opt,name=message,proto3" json:"message,omitempty"` + Id string `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"` + Pid string `protobuf:"bytes,3,opt,name=pid,json=p_id,proto3" json:"pid,omitempty"` + EnableContext bool `protobuf:"varint,4,opt,name=enableContext,json=enable_context,proto3" json:"enableContext,omitempty"` + ChatParam *ChatParam `protobuf:"bytes,5,opt,name=chatParam,json=chat_param,proto3" json:"chatParam,omitempty"` +} + +func (x *ChatCompletionRequest) Reset() { + *x = ChatCompletionRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_proto_chat_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ChatCompletionRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ChatCompletionRequest) ProtoMessage() {} + +func (x *ChatCompletionRequest) ProtoReflect() protoreflect.Message { + mi := &file_proto_chat_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 ChatCompletionRequest.ProtoReflect.Descriptor instead. +func (*ChatCompletionRequest) Descriptor() ([]byte, []int) { + return file_proto_chat_proto_rawDescGZIP(), []int{0} +} + +func (x *ChatCompletionRequest) GetMessage() string { + if x != nil { + return x.Message + } + return "" +} + +func (x *ChatCompletionRequest) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *ChatCompletionRequest) GetPid() string { + if x != nil { + return x.Pid + } + return "" +} + +func (x *ChatCompletionRequest) GetEnableContext() bool { + if x != nil { + return x.EnableContext + } + return false +} + +func (x *ChatCompletionRequest) GetChatParam() *ChatParam { + if x != nil { + return x.ChatParam + } + return nil +} + +type ChatParam struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Model string `protobuf:"bytes,1,opt,name=model,proto3" json:"model,omitempty"` + MaxTokens int32 `protobuf:"varint,2,opt,name=maxTokens,json=max_tokens,proto3" json:"maxTokens,omitempty"` + Temperature float32 `protobuf:"fixed32,3,opt,name=temperature,proto3" json:"temperature,omitempty"` + TopP float32 `protobuf:"fixed32,4,opt,name=topP,json=top_p,proto3" json:"topP,omitempty"` + PresencePenalty float32 `protobuf:"fixed32,5,opt,name=presencePenalty,json=presence_penalty,proto3" json:"presencePenalty,omitempty"` + FrequencyPenalty float32 `protobuf:"fixed32,6,opt,name=frequencyPenalty,json=frequency_penalty,proto3" json:"frequencyPenalty,omitempty"` + BotDesc string `protobuf:"bytes,7,opt,name=botDesc,json=bot_desc,proto3" json:"botDesc,omitempty"` + MinResponseTokens int32 `protobuf:"varint,8,opt,name=minResponseTokens,json=min_response_tokens,proto3" json:"minResponseTokens,omitempty"` + ContextTTL int32 `protobuf:"varint,9,opt,name=contextTTL,json=context_ttl,proto3" json:"contextTTL,omitempty"` + ContextLen int32 `protobuf:"varint,10,opt,name=contextLen,json=context_len,proto3" json:"contextLen,omitempty"` +} + +func (x *ChatParam) Reset() { + *x = ChatParam{} + if protoimpl.UnsafeEnabled { + mi := &file_proto_chat_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ChatParam) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ChatParam) ProtoMessage() {} + +func (x *ChatParam) ProtoReflect() protoreflect.Message { + mi := &file_proto_chat_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 ChatParam.ProtoReflect.Descriptor instead. +func (*ChatParam) Descriptor() ([]byte, []int) { + return file_proto_chat_proto_rawDescGZIP(), []int{1} +} + +func (x *ChatParam) GetModel() string { + if x != nil { + return x.Model + } + return "" +} + +func (x *ChatParam) GetMaxTokens() int32 { + if x != nil { + return x.MaxTokens + } + return 0 +} + +func (x *ChatParam) GetTemperature() float32 { + if x != nil { + return x.Temperature + } + return 0 +} + +func (x *ChatParam) GetTopP() float32 { + if x != nil { + return x.TopP + } + return 0 +} + +func (x *ChatParam) GetPresencePenalty() float32 { + if x != nil { + return x.PresencePenalty + } + return 0 +} + +func (x *ChatParam) GetFrequencyPenalty() float32 { + if x != nil { + return x.FrequencyPenalty + } + return 0 +} + +func (x *ChatParam) GetBotDesc() string { + if x != nil { + return x.BotDesc + } + return "" +} + +func (x *ChatParam) GetMinResponseTokens() int32 { + if x != nil { + return x.MinResponseTokens + } + return 0 +} + +func (x *ChatParam) GetContextTTL() int32 { + if x != nil { + return x.ContextTTL + } + return 0 +} + +func (x *ChatParam) GetContextLen() int32 { + if x != nil { + return x.ContextLen + } + return 0 +} + +// 服务响应消息,非流式响应 +type ChatCompletionResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Object string `protobuf:"bytes,2,opt,name=object,proto3" json:"object,omitempty"` + Created int64 `protobuf:"varint,3,opt,name=created,proto3" json:"created,omitempty"` + Model string `protobuf:"bytes,4,opt,name=model,proto3" json:"model,omitempty"` + Choices []*ChatCompletionChoice `protobuf:"bytes,5,rep,name=choices,proto3" json:"choices,omitempty"` + Usage *Usage `protobuf:"bytes,6,opt,name=usage,proto3" json:"usage,omitempty"` +} + +func (x *ChatCompletionResponse) Reset() { + *x = ChatCompletionResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_proto_chat_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ChatCompletionResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ChatCompletionResponse) ProtoMessage() {} + +func (x *ChatCompletionResponse) ProtoReflect() protoreflect.Message { + mi := &file_proto_chat_proto_msgTypes[2] + 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 ChatCompletionResponse.ProtoReflect.Descriptor instead. +func (*ChatCompletionResponse) Descriptor() ([]byte, []int) { + return file_proto_chat_proto_rawDescGZIP(), []int{2} +} + +func (x *ChatCompletionResponse) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *ChatCompletionResponse) GetObject() string { + if x != nil { + return x.Object + } + return "" +} + +func (x *ChatCompletionResponse) GetCreated() int64 { + if x != nil { + return x.Created + } + return 0 +} + +func (x *ChatCompletionResponse) GetModel() string { + if x != nil { + return x.Model + } + return "" +} + +func (x *ChatCompletionResponse) GetChoices() []*ChatCompletionChoice { + if x != nil { + return x.Choices + } + return nil +} + +func (x *ChatCompletionResponse) GetUsage() *Usage { + if x != nil { + return x.Usage + } + return nil +} + +type ChatCompletionChoice struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Index int32 `protobuf:"varint,1,opt,name=index,proto3" json:"index,omitempty"` + Message *ChatCompletionMessage `protobuf:"bytes,2,opt,name=message,proto3" json:"message,omitempty"` + FinishReason string `protobuf:"bytes,3,opt,name=finishReason,json=finish_reason,proto3" json:"finishReason,omitempty"` +} + +func (x *ChatCompletionChoice) Reset() { + *x = ChatCompletionChoice{} + if protoimpl.UnsafeEnabled { + mi := &file_proto_chat_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ChatCompletionChoice) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ChatCompletionChoice) ProtoMessage() {} + +func (x *ChatCompletionChoice) ProtoReflect() protoreflect.Message { + mi := &file_proto_chat_proto_msgTypes[3] + 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 ChatCompletionChoice.ProtoReflect.Descriptor instead. +func (*ChatCompletionChoice) Descriptor() ([]byte, []int) { + return file_proto_chat_proto_rawDescGZIP(), []int{3} +} + +func (x *ChatCompletionChoice) GetIndex() int32 { + if x != nil { + return x.Index + } + return 0 +} + +func (x *ChatCompletionChoice) GetMessage() *ChatCompletionMessage { + if x != nil { + return x.Message + } + return nil +} + +func (x *ChatCompletionChoice) GetFinishReason() string { + if x != nil { + return x.FinishReason + } + return "" +} + +type ChatCompletionMessage struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Role string `protobuf:"bytes,1,opt,name=role,proto3" json:"role,omitempty"` + Content string `protobuf:"bytes,2,opt,name=content,proto3" json:"content,omitempty"` + Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` +} + +func (x *ChatCompletionMessage) Reset() { + *x = ChatCompletionMessage{} + if protoimpl.UnsafeEnabled { + mi := &file_proto_chat_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ChatCompletionMessage) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ChatCompletionMessage) ProtoMessage() {} + +func (x *ChatCompletionMessage) ProtoReflect() protoreflect.Message { + mi := &file_proto_chat_proto_msgTypes[4] + 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 ChatCompletionMessage.ProtoReflect.Descriptor instead. +func (*ChatCompletionMessage) Descriptor() ([]byte, []int) { + return file_proto_chat_proto_rawDescGZIP(), []int{4} +} + +func (x *ChatCompletionMessage) GetRole() string { + if x != nil { + return x.Role + } + return "" +} + +func (x *ChatCompletionMessage) GetContent() string { + if x != nil { + return x.Content + } + return "" +} + +func (x *ChatCompletionMessage) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +type Usage struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + PromptTokens int32 `protobuf:"varint,1,opt,name=promptTokens,json=prompt_tokens,proto3" json:"promptTokens,omitempty"` + CompletionTokens int32 `protobuf:"varint,2,opt,name=completionTokens,json=completion_tokens,proto3" json:"completionTokens,omitempty"` + TotalTokens int32 `protobuf:"varint,3,opt,name=totalTokens,json=total_tokens,proto3" json:"totalTokens,omitempty"` +} + +func (x *Usage) Reset() { + *x = Usage{} + if protoimpl.UnsafeEnabled { + mi := &file_proto_chat_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Usage) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Usage) ProtoMessage() {} + +func (x *Usage) ProtoReflect() protoreflect.Message { + mi := &file_proto_chat_proto_msgTypes[5] + 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 Usage.ProtoReflect.Descriptor instead. +func (*Usage) Descriptor() ([]byte, []int) { + return file_proto_chat_proto_rawDescGZIP(), []int{5} +} + +func (x *Usage) GetPromptTokens() int32 { + if x != nil { + return x.PromptTokens + } + return 0 +} + +func (x *Usage) GetCompletionTokens() int32 { + if x != nil { + return x.CompletionTokens + } + return 0 +} + +func (x *Usage) GetTotalTokens() int32 { + if x != nil { + return x.TotalTokens + } + return 0 +} + +// 服务响应消息,流式响应 +type ChatCompletionStreamResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Object string `protobuf:"bytes,2,opt,name=object,proto3" json:"object,omitempty"` + Created int64 `protobuf:"varint,3,opt,name=created,proto3" json:"created,omitempty"` + Model string `protobuf:"bytes,4,opt,name=model,proto3" json:"model,omitempty"` + Choices []*ChatCompletionStreamChoice `protobuf:"bytes,5,rep,name=choices,proto3" json:"choices,omitempty"` +} + +func (x *ChatCompletionStreamResponse) Reset() { + *x = ChatCompletionStreamResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_proto_chat_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ChatCompletionStreamResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ChatCompletionStreamResponse) ProtoMessage() {} + +func (x *ChatCompletionStreamResponse) ProtoReflect() protoreflect.Message { + mi := &file_proto_chat_proto_msgTypes[6] + 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 ChatCompletionStreamResponse.ProtoReflect.Descriptor instead. +func (*ChatCompletionStreamResponse) Descriptor() ([]byte, []int) { + return file_proto_chat_proto_rawDescGZIP(), []int{6} +} + +func (x *ChatCompletionStreamResponse) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *ChatCompletionStreamResponse) GetObject() string { + if x != nil { + return x.Object + } + return "" +} + +func (x *ChatCompletionStreamResponse) GetCreated() int64 { + if x != nil { + return x.Created + } + return 0 +} + +func (x *ChatCompletionStreamResponse) GetModel() string { + if x != nil { + return x.Model + } + return "" +} + +func (x *ChatCompletionStreamResponse) GetChoices() []*ChatCompletionStreamChoice { + if x != nil { + return x.Choices + } + return nil +} + +type ChatCompletionStreamChoice struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Index int32 `protobuf:"varint,1,opt,name=index,proto3" json:"index,omitempty"` + Delta *ChatCompletionStreamChoiceDelta `protobuf:"bytes,2,opt,name=delta,proto3" json:"delta,omitempty"` + FinishReason string `protobuf:"bytes,3,opt,name=finishReason,json=finish_reason,proto3" json:"finishReason,omitempty"` +} + +func (x *ChatCompletionStreamChoice) Reset() { + *x = ChatCompletionStreamChoice{} + if protoimpl.UnsafeEnabled { + mi := &file_proto_chat_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ChatCompletionStreamChoice) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ChatCompletionStreamChoice) ProtoMessage() {} + +func (x *ChatCompletionStreamChoice) ProtoReflect() protoreflect.Message { + mi := &file_proto_chat_proto_msgTypes[7] + 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 ChatCompletionStreamChoice.ProtoReflect.Descriptor instead. +func (*ChatCompletionStreamChoice) Descriptor() ([]byte, []int) { + return file_proto_chat_proto_rawDescGZIP(), []int{7} +} + +func (x *ChatCompletionStreamChoice) GetIndex() int32 { + if x != nil { + return x.Index + } + return 0 +} + +func (x *ChatCompletionStreamChoice) GetDelta() *ChatCompletionStreamChoiceDelta { + if x != nil { + return x.Delta + } + return nil +} + +func (x *ChatCompletionStreamChoice) GetFinishReason() string { + if x != nil { + return x.FinishReason + } + return "" +} + +type ChatCompletionStreamChoiceDelta struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Content string `protobuf:"bytes,1,opt,name=content,proto3" json:"content,omitempty"` + Role string `protobuf:"bytes,2,opt,name=role,proto3" json:"role,omitempty"` +} + +func (x *ChatCompletionStreamChoiceDelta) Reset() { + *x = ChatCompletionStreamChoiceDelta{} + if protoimpl.UnsafeEnabled { + mi := &file_proto_chat_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ChatCompletionStreamChoiceDelta) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ChatCompletionStreamChoiceDelta) ProtoMessage() {} + +func (x *ChatCompletionStreamChoiceDelta) ProtoReflect() protoreflect.Message { + mi := &file_proto_chat_proto_msgTypes[8] + 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 ChatCompletionStreamChoiceDelta.ProtoReflect.Descriptor instead. +func (*ChatCompletionStreamChoiceDelta) Descriptor() ([]byte, []int) { + return file_proto_chat_proto_rawDescGZIP(), []int{8} +} + +func (x *ChatCompletionStreamChoiceDelta) GetContent() string { + if x != nil { + return x.Content + } + return "" +} + +func (x *ChatCompletionStreamChoiceDelta) GetRole() string { + if x != nil { + return x.Role + } + return "" +} + +var File_proto_chat_proto protoreflect.FileDescriptor + +var file_proto_chat_proto_rawDesc = []byte{ + 0x0a, 0x10, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x12, 0x1a, 0x61, 0x69, 0x5f, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x73, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x2e, 0x7a, 0x76, 0x6f, 0x69, 0x63, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x22, 0xc1, + 0x01, 0x0a, 0x15, 0x43, 0x68, 0x61, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x69, 0x6f, + 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, + 0x69, 0x64, 0x12, 0x11, 0x0a, 0x03, 0x70, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x70, 0x5f, 0x69, 0x64, 0x12, 0x25, 0x0a, 0x0d, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x43, + 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x65, 0x6e, + 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x12, 0x44, 0x0a, 0x09, + 0x63, 0x68, 0x61, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x25, 0x2e, 0x61, 0x69, 0x5f, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x2e, 0x7a, 0x76, 0x6f, 0x69, 0x63, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2e, 0x43, 0x68, 0x61, + 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x52, 0x0a, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x70, 0x61, 0x72, + 0x61, 0x6d, 0x22, 0xdc, 0x02, 0x0a, 0x09, 0x43, 0x68, 0x61, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, + 0x12, 0x14, 0x0a, 0x05, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x05, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x12, 0x1d, 0x0a, 0x09, 0x6d, 0x61, 0x78, 0x54, 0x6f, 0x6b, + 0x65, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x6d, 0x61, 0x78, 0x5f, 0x74, + 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x74, 0x65, 0x6d, 0x70, 0x65, 0x72, 0x61, + 0x74, 0x75, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0b, 0x74, 0x65, 0x6d, 0x70, + 0x65, 0x72, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x13, 0x0a, 0x04, 0x74, 0x6f, 0x70, 0x50, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x02, 0x52, 0x05, 0x74, 0x6f, 0x70, 0x5f, 0x70, 0x12, 0x29, 0x0a, 0x0f, + 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x50, 0x65, 0x6e, 0x61, 0x6c, 0x74, 0x79, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x02, 0x52, 0x10, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x5f, + 0x70, 0x65, 0x6e, 0x61, 0x6c, 0x74, 0x79, 0x12, 0x2b, 0x0a, 0x10, 0x66, 0x72, 0x65, 0x71, 0x75, + 0x65, 0x6e, 0x63, 0x79, 0x50, 0x65, 0x6e, 0x61, 0x6c, 0x74, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x02, 0x52, 0x11, 0x66, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x5f, 0x70, 0x65, 0x6e, + 0x61, 0x6c, 0x74, 0x79, 0x12, 0x19, 0x0a, 0x07, 0x62, 0x6f, 0x74, 0x44, 0x65, 0x73, 0x63, 0x18, + 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x62, 0x6f, 0x74, 0x5f, 0x64, 0x65, 0x73, 0x63, 0x12, + 0x2e, 0x0a, 0x11, 0x6d, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x54, 0x6f, + 0x6b, 0x65, 0x6e, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x13, 0x6d, 0x69, 0x6e, 0x5f, + 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x12, + 0x1f, 0x0a, 0x0a, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x54, 0x54, 0x4c, 0x18, 0x09, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x5f, 0x74, 0x74, 0x6c, + 0x12, 0x1f, 0x0a, 0x0a, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x4c, 0x65, 0x6e, 0x18, 0x0a, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x5f, 0x6c, 0x65, + 0x6e, 0x22, 0xf5, 0x01, 0x0a, 0x16, 0x43, 0x68, 0x61, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x0e, 0x0a, 0x02, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, + 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6f, 0x62, + 0x6a, 0x65, 0x63, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x12, 0x14, + 0x0a, 0x05, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6d, + 0x6f, 0x64, 0x65, 0x6c, 0x12, 0x4a, 0x0a, 0x07, 0x63, 0x68, 0x6f, 0x69, 0x63, 0x65, 0x73, 0x18, + 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x61, 0x69, 0x5f, 0x63, 0x68, 0x61, 0x74, 0x5f, + 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x7a, 0x76, 0x6f, 0x69, 0x63, 0x65, 0x2e, 0x63, + 0x6f, 0x6d, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x69, 0x6f, + 0x6e, 0x43, 0x68, 0x6f, 0x69, 0x63, 0x65, 0x52, 0x07, 0x63, 0x68, 0x6f, 0x69, 0x63, 0x65, 0x73, + 0x12, 0x37, 0x0a, 0x05, 0x75, 0x73, 0x61, 0x67, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x21, 0x2e, 0x61, 0x69, 0x5f, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x2e, 0x7a, 0x76, 0x6f, 0x69, 0x63, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2e, 0x55, 0x73, 0x61, + 0x67, 0x65, 0x52, 0x05, 0x75, 0x73, 0x61, 0x67, 0x65, 0x22, 0x9e, 0x01, 0x0a, 0x14, 0x43, 0x68, + 0x61, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x6f, 0x69, + 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x4b, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x61, 0x69, 0x5f, 0x63, + 0x68, 0x61, 0x74, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x7a, 0x76, 0x6f, 0x69, + 0x63, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x6c, + 0x65, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x07, 0x6d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x23, 0x0a, 0x0c, 0x66, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x52, + 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x66, 0x69, 0x6e, + 0x69, 0x73, 0x68, 0x5f, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x22, 0x59, 0x0a, 0x15, 0x43, 0x68, + 0x61, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, + 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, + 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x7c, 0x0a, 0x05, 0x55, 0x73, 0x61, 0x67, 0x65, 0x12, 0x23, + 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x6d, 0x70, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x70, 0x72, 0x6f, 0x6d, 0x70, 0x74, 0x5f, 0x74, 0x6f, 0x6b, + 0x65, 0x6e, 0x73, 0x12, 0x2b, 0x0a, 0x10, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x69, 0x6f, + 0x6e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x11, 0x63, + 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73, + 0x12, 0x21, 0x0a, 0x0b, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x74, 0x6f, 0x6b, + 0x65, 0x6e, 0x73, 0x22, 0xc8, 0x01, 0x0a, 0x1c, 0x43, 0x68, 0x61, 0x74, 0x43, 0x6f, 0x6d, 0x70, + 0x6c, 0x65, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x02, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x18, 0x0a, 0x07, + 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x63, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x12, 0x50, 0x0a, 0x07, + 0x63, 0x68, 0x6f, 0x69, 0x63, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x36, 0x2e, + 0x61, 0x69, 0x5f, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, + 0x7a, 0x76, 0x6f, 0x69, 0x63, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x43, + 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x43, + 0x68, 0x6f, 0x69, 0x63, 0x65, 0x52, 0x07, 0x63, 0x68, 0x6f, 0x69, 0x63, 0x65, 0x73, 0x22, 0xaa, + 0x01, 0x0a, 0x1a, 0x43, 0x68, 0x61, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x69, 0x6f, + 0x6e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x43, 0x68, 0x6f, 0x69, 0x63, 0x65, 0x12, 0x14, 0x0a, + 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x69, 0x6e, + 0x64, 0x65, 0x78, 0x12, 0x51, 0x0a, 0x05, 0x64, 0x65, 0x6c, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x61, 0x69, 0x5f, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x73, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x2e, 0x7a, 0x76, 0x6f, 0x69, 0x63, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2e, + 0x43, 0x68, 0x61, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, + 0x72, 0x65, 0x61, 0x6d, 0x43, 0x68, 0x6f, 0x69, 0x63, 0x65, 0x44, 0x65, 0x6c, 0x74, 0x61, 0x52, + 0x05, 0x64, 0x65, 0x6c, 0x74, 0x61, 0x12, 0x23, 0x0a, 0x0c, 0x66, 0x69, 0x6e, 0x69, 0x73, 0x68, + 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x66, 0x69, + 0x6e, 0x69, 0x73, 0x68, 0x5f, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x22, 0x4f, 0x0a, 0x1f, 0x43, + 0x68, 0x61, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x72, + 0x65, 0x61, 0x6d, 0x43, 0x68, 0x6f, 0x69, 0x63, 0x65, 0x44, 0x65, 0x6c, 0x74, 0x61, 0x12, 0x18, + 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x72, 0x6f, 0x6c, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x32, 0x87, 0x02, 0x0a, + 0x04, 0x43, 0x68, 0x61, 0x74, 0x12, 0x77, 0x0a, 0x0e, 0x43, 0x68, 0x61, 0x74, 0x43, 0x6f, 0x6d, + 0x70, 0x6c, 0x65, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x31, 0x2e, 0x61, 0x69, 0x5f, 0x63, 0x68, 0x61, + 0x74, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x7a, 0x76, 0x6f, 0x69, 0x63, 0x65, + 0x2e, 0x63, 0x6f, 0x6d, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, + 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x61, 0x69, 0x5f, + 0x63, 0x68, 0x61, 0x74, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x7a, 0x76, 0x6f, + 0x69, 0x63, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x43, 0x6f, 0x6d, 0x70, + 0x6c, 0x65, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x85, + 0x01, 0x0a, 0x14, 0x43, 0x68, 0x61, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x69, 0x6f, + 0x6e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x31, 0x2e, 0x61, 0x69, 0x5f, 0x63, 0x68, 0x61, + 0x74, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x7a, 0x76, 0x6f, 0x69, 0x63, 0x65, + 0x2e, 0x63, 0x6f, 0x6d, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, + 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x38, 0x2e, 0x61, 0x69, 0x5f, + 0x63, 0x68, 0x61, 0x74, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x7a, 0x76, 0x6f, + 0x69, 0x63, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x43, 0x6f, 0x6d, 0x70, + 0x6c, 0x65, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x42, 0x17, 0x5a, 0x15, 0x61, 0x69, 0x2d, 0x63, 0x68, 0x61, + 0x74, 0x2d, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_proto_chat_proto_rawDescOnce sync.Once + file_proto_chat_proto_rawDescData = file_proto_chat_proto_rawDesc +) + +func file_proto_chat_proto_rawDescGZIP() []byte { + file_proto_chat_proto_rawDescOnce.Do(func() { + file_proto_chat_proto_rawDescData = protoimpl.X.CompressGZIP(file_proto_chat_proto_rawDescData) + }) + return file_proto_chat_proto_rawDescData +} + +var file_proto_chat_proto_msgTypes = make([]protoimpl.MessageInfo, 9) +var file_proto_chat_proto_goTypes = []interface{}{ + (*ChatCompletionRequest)(nil), // 0: ai_chat_service.zvoice.com.ChatCompletionRequest + (*ChatParam)(nil), // 1: ai_chat_service.zvoice.com.ChatParam + (*ChatCompletionResponse)(nil), // 2: ai_chat_service.zvoice.com.ChatCompletionResponse + (*ChatCompletionChoice)(nil), // 3: ai_chat_service.zvoice.com.ChatCompletionChoice + (*ChatCompletionMessage)(nil), // 4: ai_chat_service.zvoice.com.ChatCompletionMessage + (*Usage)(nil), // 5: ai_chat_service.zvoice.com.Usage + (*ChatCompletionStreamResponse)(nil), // 6: ai_chat_service.zvoice.com.ChatCompletionStreamResponse + (*ChatCompletionStreamChoice)(nil), // 7: ai_chat_service.zvoice.com.ChatCompletionStreamChoice + (*ChatCompletionStreamChoiceDelta)(nil), // 8: ai_chat_service.zvoice.com.ChatCompletionStreamChoiceDelta +} +var file_proto_chat_proto_depIdxs = []int32{ + 1, // 0: ai_chat_service.zvoice.com.ChatCompletionRequest.chatParam:type_name -> ai_chat_service.zvoice.com.ChatParam + 3, // 1: ai_chat_service.zvoice.com.ChatCompletionResponse.choices:type_name -> ai_chat_service.zvoice.com.ChatCompletionChoice + 5, // 2: ai_chat_service.zvoice.com.ChatCompletionResponse.usage:type_name -> ai_chat_service.zvoice.com.Usage + 4, // 3: ai_chat_service.zvoice.com.ChatCompletionChoice.message:type_name -> ai_chat_service.zvoice.com.ChatCompletionMessage + 7, // 4: ai_chat_service.zvoice.com.ChatCompletionStreamResponse.choices:type_name -> ai_chat_service.zvoice.com.ChatCompletionStreamChoice + 8, // 5: ai_chat_service.zvoice.com.ChatCompletionStreamChoice.delta:type_name -> ai_chat_service.zvoice.com.ChatCompletionStreamChoiceDelta + 0, // 6: ai_chat_service.zvoice.com.Chat.ChatCompletion:input_type -> ai_chat_service.zvoice.com.ChatCompletionRequest + 0, // 7: ai_chat_service.zvoice.com.Chat.ChatCompletionStream:input_type -> ai_chat_service.zvoice.com.ChatCompletionRequest + 2, // 8: ai_chat_service.zvoice.com.Chat.ChatCompletion:output_type -> ai_chat_service.zvoice.com.ChatCompletionResponse + 6, // 9: ai_chat_service.zvoice.com.Chat.ChatCompletionStream:output_type -> ai_chat_service.zvoice.com.ChatCompletionStreamResponse + 8, // [8:10] is the sub-list for method output_type + 6, // [6:8] is the sub-list for method input_type + 6, // [6:6] is the sub-list for extension type_name + 6, // [6:6] is the sub-list for extension extendee + 0, // [0:6] is the sub-list for field type_name +} + +func init() { file_proto_chat_proto_init() } +func file_proto_chat_proto_init() { + if File_proto_chat_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_proto_chat_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ChatCompletionRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_proto_chat_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ChatParam); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_proto_chat_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ChatCompletionResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_proto_chat_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ChatCompletionChoice); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_proto_chat_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ChatCompletionMessage); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_proto_chat_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Usage); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_proto_chat_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ChatCompletionStreamResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_proto_chat_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ChatCompletionStreamChoice); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_proto_chat_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ChatCompletionStreamChoiceDelta); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_proto_chat_proto_rawDesc, + NumEnums: 0, + NumMessages: 9, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_proto_chat_proto_goTypes, + DependencyIndexes: file_proto_chat_proto_depIdxs, + MessageInfos: file_proto_chat_proto_msgTypes, + }.Build() + File_proto_chat_proto = out.File + file_proto_chat_proto_rawDesc = nil + file_proto_chat_proto_goTypes = nil + file_proto_chat_proto_depIdxs = nil +} diff --git a/ai-chat-service/proto/chat.proto b/ai-chat-service/proto/chat.proto new file mode 100644 index 0000000..2116992 --- /dev/null +++ b/ai-chat-service/proto/chat.proto @@ -0,0 +1,72 @@ +syntax = "proto3"; +option go_package = "ai-chat-service/proto"; +package ai_chat_service.zvoice.com; + +message ChatCompletionRequest { + string message = 1[json_name = "message"]; + string id = 2[json_name = "id"]; + string pid = 3[json_name = "p_id"]; + bool enableContext = 4[json_name = "enable_context"]; + ChatParam chatParam = 5[json_name = "chat_param"]; +} + +message ChatParam { + string model = 1[json_name = "model"]; + int32 maxTokens = 2[json_name = "max_tokens"]; + float temperature = 3[json_name = "temperature"]; + float topP = 4[json_name = "top_p"]; + float presencePenalty = 5[json_name = "presence_penalty"]; + float frequencyPenalty = 6[json_name = "frequency_penalty"]; + string botDesc =7[json_name = "bot_desc"]; + int32 minResponseTokens = 8[json_name = "min_response_tokens"]; + int32 contextTTL = 9[json_name = "context_ttl"]; + int32 contextLen = 10[json_name = "context_len"]; +} + +// 服务响应消息,非流式响应 +message ChatCompletionResponse { + string id = 1 [json_name = "id"]; + string object = 2 [json_name = "object"]; + int64 created = 3 [json_name = "created"]; + string model = 4 [json_name = "model"]; + repeated ChatCompletionChoice choices = 5 [json_name = "choices"]; + Usage usage = 6[json_name = "usage"]; +} +message ChatCompletionChoice { + int32 index = 1[json_name = "index"]; + ChatCompletionMessage message = 2 [json_name = "message"]; + string finishReason = 3[json_name = "finish_reason"]; +} +message ChatCompletionMessage { + string role=1[json_name = "role"]; + string content=2[json_name = "content"]; + string name=3[json_name = "name"]; +} +message Usage { + int32 promptTokens = 1 [json_name = "prompt_tokens"]; + int32 completionTokens =2 [json_name = "completion_tokens"]; + int32 totalTokens = 3 [json_name = "total_tokens"]; +} + +// 服务响应消息,流式响应 +message ChatCompletionStreamResponse { + string id = 1 [json_name = "id"]; + string object = 2 [json_name = "object"]; + int64 created = 3 [json_name = "created"]; + string model = 4 [json_name = "model"]; + repeated ChatCompletionStreamChoice choices = 5 [json_name = "choices"]; +} +message ChatCompletionStreamChoice { + int32 index = 1[json_name = "index"]; + ChatCompletionStreamChoiceDelta delta =2 [json_name = "delta"]; + string finishReason = 3[json_name="finish_reason"]; +} +message ChatCompletionStreamChoiceDelta { + string content = 1 [json_name = "content"]; + string role = 2 [json_name = "role"]; +} + +service Chat { + rpc ChatCompletion(ChatCompletionRequest) returns (ChatCompletionResponse); + rpc ChatCompletionStream(ChatCompletionRequest) returns (stream ChatCompletionStreamResponse); +} \ No newline at end of file diff --git a/ai-chat-service/proto/chat_grpc.pb.go b/ai-chat-service/proto/chat_grpc.pb.go new file mode 100644 index 0000000..f62560c --- /dev/null +++ b/ai-chat-service/proto/chat_grpc.pb.go @@ -0,0 +1,169 @@ +// Code generated by protoc-gen-go-grpc. DO NOT EDIT. +// versions: +// - protoc-gen-go-grpc v1.2.0 +// - protoc v4.22.0 +// source: proto/chat.proto + +package proto + +import ( + context "context" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" +) + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +// Requires gRPC-Go v1.32.0 or later. +const _ = grpc.SupportPackageIsVersion7 + +// ChatClient is the client API for Chat service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. +type ChatClient interface { + ChatCompletion(ctx context.Context, in *ChatCompletionRequest, opts ...grpc.CallOption) (*ChatCompletionResponse, error) + ChatCompletionStream(ctx context.Context, in *ChatCompletionRequest, opts ...grpc.CallOption) (Chat_ChatCompletionStreamClient, error) +} + +type chatClient struct { + cc grpc.ClientConnInterface +} + +func NewChatClient(cc grpc.ClientConnInterface) ChatClient { + return &chatClient{cc} +} + +func (c *chatClient) ChatCompletion(ctx context.Context, in *ChatCompletionRequest, opts ...grpc.CallOption) (*ChatCompletionResponse, error) { + out := new(ChatCompletionResponse) + err := c.cc.Invoke(ctx, "/ai_chat_service.zvoice.com.Chat/ChatCompletion", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *chatClient) ChatCompletionStream(ctx context.Context, in *ChatCompletionRequest, opts ...grpc.CallOption) (Chat_ChatCompletionStreamClient, error) { + stream, err := c.cc.NewStream(ctx, &Chat_ServiceDesc.Streams[0], "/ai_chat_service.zvoice.com.Chat/ChatCompletionStream", opts...) + if err != nil { + return nil, err + } + x := &chatChatCompletionStreamClient{stream} + if err := x.ClientStream.SendMsg(in); err != nil { + return nil, err + } + if err := x.ClientStream.CloseSend(); err != nil { + return nil, err + } + return x, nil +} + +type Chat_ChatCompletionStreamClient interface { + Recv() (*ChatCompletionStreamResponse, error) + grpc.ClientStream +} + +type chatChatCompletionStreamClient struct { + grpc.ClientStream +} + +func (x *chatChatCompletionStreamClient) Recv() (*ChatCompletionStreamResponse, error) { + m := new(ChatCompletionStreamResponse) + if err := x.ClientStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +// ChatServer is the server API for Chat service. +// All implementations must embed UnimplementedChatServer +// for forward compatibility +type ChatServer interface { + ChatCompletion(context.Context, *ChatCompletionRequest) (*ChatCompletionResponse, error) + ChatCompletionStream(*ChatCompletionRequest, Chat_ChatCompletionStreamServer) error + mustEmbedUnimplementedChatServer() +} + +// UnimplementedChatServer must be embedded to have forward compatible implementations. +type UnimplementedChatServer struct { +} + +func (UnimplementedChatServer) ChatCompletion(context.Context, *ChatCompletionRequest) (*ChatCompletionResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ChatCompletion not implemented") +} +func (UnimplementedChatServer) ChatCompletionStream(*ChatCompletionRequest, Chat_ChatCompletionStreamServer) error { + return status.Errorf(codes.Unimplemented, "method ChatCompletionStream not implemented") +} +func (UnimplementedChatServer) mustEmbedUnimplementedChatServer() {} + +// UnsafeChatServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to ChatServer will +// result in compilation errors. +type UnsafeChatServer interface { + mustEmbedUnimplementedChatServer() +} + +func RegisterChatServer(s grpc.ServiceRegistrar, srv ChatServer) { + s.RegisterService(&Chat_ServiceDesc, srv) +} + +func _Chat_ChatCompletion_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ChatCompletionRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ChatServer).ChatCompletion(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/ai_chat_service.zvoice.com.Chat/ChatCompletion", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ChatServer).ChatCompletion(ctx, req.(*ChatCompletionRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Chat_ChatCompletionStream_Handler(srv interface{}, stream grpc.ServerStream) error { + m := new(ChatCompletionRequest) + if err := stream.RecvMsg(m); err != nil { + return err + } + return srv.(ChatServer).ChatCompletionStream(m, &chatChatCompletionStreamServer{stream}) +} + +type Chat_ChatCompletionStreamServer interface { + Send(*ChatCompletionStreamResponse) error + grpc.ServerStream +} + +type chatChatCompletionStreamServer struct { + grpc.ServerStream +} + +func (x *chatChatCompletionStreamServer) Send(m *ChatCompletionStreamResponse) error { + return x.ServerStream.SendMsg(m) +} + +// Chat_ServiceDesc is the grpc.ServiceDesc for Chat service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var Chat_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "ai_chat_service.zvoice.com.Chat", + HandlerType: (*ChatServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "ChatCompletion", + Handler: _Chat_ChatCompletion_Handler, + }, + }, + Streams: []grpc.StreamDesc{ + { + StreamName: "ChatCompletionStream", + Handler: _Chat_ChatCompletionStream_Handler, + ServerStreams: true, + }, + }, + Metadata: "proto/chat.proto", +} diff --git a/ai-chat-service/runtime/logs/app.log b/ai-chat-service/runtime/logs/app.log new file mode 100644 index 0000000..6f04191 --- /dev/null +++ b/ai-chat-service/runtime/logs/app.log @@ -0,0 +1 @@ +time="2024-09-20T14:44:21+08:00" level=error msg="grpc: no transport security set (use grpc.WithTransportCredentials(insecure.NewCredentials()) explicitly or set credentials)" file="E:/Work/Code/go/5.0/2404/ai-chat/ai-chat-service/services/grpc-client/grpc_client_pool.go:25" func=ai-chat-service/services/grpc-client.NewPool.func1 diff --git a/ai-chat-service/services/grpc-client/default.go b/ai-chat-service/services/grpc-client/default.go new file mode 100644 index 0000000..5c23a12 --- /dev/null +++ b/ai-chat-service/services/grpc-client/default.go @@ -0,0 +1,28 @@ +package grpc_client + +import ( + "ai-chat-service/pkg/log" + "google.golang.org/grpc" + "google.golang.org/grpc/credentials/insecure" +) + +type ServiceClient interface { + GetPool(addr string) ClientPool +} +type DefaultClient struct { +} + +func (c *DefaultClient) GetPool(addr string) ClientPool { + pool, err := NewPool(addr, c.getOptions()...) + if err != nil { + log.Error(err) + return nil + } + return pool +} + +func (c *DefaultClient) getOptions() []grpc.DialOption { + opts := make([]grpc.DialOption, 0) + opts = append(opts, grpc.WithTransportCredentials(insecure.NewCredentials())) + return opts +} diff --git a/ai-chat-service/services/grpc-client/grpc_client_pool.go b/ai-chat-service/services/grpc-client/grpc_client_pool.go new file mode 100644 index 0000000..9674393 --- /dev/null +++ b/ai-chat-service/services/grpc-client/grpc_client_pool.go @@ -0,0 +1,48 @@ +package grpc_client + +import ( + "ai-chat-service/pkg/log" + "google.golang.org/grpc" + "google.golang.org/grpc/connectivity" + "sync" +) + +type ClientPool interface { + Get() *grpc.ClientConn + Put(*grpc.ClientConn) +} + +type clientPool struct { + pool sync.Pool +} + +func NewPool(target string, opts ...grpc.DialOption) (ClientPool, error) { + return &clientPool{ + pool: sync.Pool{ + New: func() any { + conn, err := grpc.NewClient(target, opts...) + if err != nil { + log.Error(err) + return nil + } + return conn + }, + }, + }, nil +} + +func (c *clientPool) Get() *grpc.ClientConn { + conn := c.pool.Get().(*grpc.ClientConn) + if conn.GetState() == connectivity.Shutdown || conn.GetState() == connectivity.TransientFailure { + conn.Close() + conn = c.pool.New().(*grpc.ClientConn) + } + return conn +} +func (c *clientPool) Put(conn *grpc.ClientConn) { + if conn.GetState() == connectivity.Shutdown || conn.GetState() == connectivity.TransientFailure { + conn.Close() + return + } + c.pool.Put(conn) +} diff --git a/ai-chat-service/services/keywords-filter/keywords.go b/ai-chat-service/services/keywords-filter/keywords.go new file mode 100644 index 0000000..0e3dcc6 --- /dev/null +++ b/ai-chat-service/services/keywords-filter/keywords.go @@ -0,0 +1,23 @@ +package keywords_filter + +import ( + "ai-chat-service/pkg/config" + grpc_client "ai-chat-service/services/grpc-client" + "sync" +) + +var keywordsPool grpc_client.ClientPool +var keywordsOnce sync.Once + +type keywordsClient struct { + grpc_client.DefaultClient +} + +func GetKeywordsClientPool() grpc_client.ClientPool { + keywordsOnce.Do(func() { + cnf := config.GetConfig() + c := &keywordsClient{} + keywordsPool = c.GetPool(cnf.DependOn.Keywords.Address) + }) + return keywordsPool +} diff --git a/ai-chat-service/services/keywords-filter/proto/filter.pb.go b/ai-chat-service/services/keywords-filter/proto/filter.pb.go new file mode 100644 index 0000000..31da090 --- /dev/null +++ b/ai-chat-service/services/keywords-filter/proto/filter.pb.go @@ -0,0 +1,294 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.28.1 +// protoc v4.22.0 +// source: proto/filter.proto + +package proto + +import ( + 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) +) + +type FilterReq struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Text string `protobuf:"bytes,1,opt,name=text,proto3" json:"text,omitempty"` +} + +func (x *FilterReq) Reset() { + *x = FilterReq{} + if protoimpl.UnsafeEnabled { + mi := &file_proto_filter_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *FilterReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*FilterReq) ProtoMessage() {} + +func (x *FilterReq) ProtoReflect() protoreflect.Message { + mi := &file_proto_filter_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 FilterReq.ProtoReflect.Descriptor instead. +func (*FilterReq) Descriptor() ([]byte, []int) { + return file_proto_filter_proto_rawDescGZIP(), []int{0} +} + +func (x *FilterReq) GetText() string { + if x != nil { + return x.Text + } + return "" +} + +type ValidateRes struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Ok bool `protobuf:"varint,1,opt,name=ok,proto3" json:"ok,omitempty"` + Keyword string `protobuf:"bytes,2,opt,name=keyword,proto3" json:"keyword,omitempty"` +} + +func (x *ValidateRes) Reset() { + *x = ValidateRes{} + if protoimpl.UnsafeEnabled { + mi := &file_proto_filter_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ValidateRes) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ValidateRes) ProtoMessage() {} + +func (x *ValidateRes) ProtoReflect() protoreflect.Message { + mi := &file_proto_filter_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 ValidateRes.ProtoReflect.Descriptor instead. +func (*ValidateRes) Descriptor() ([]byte, []int) { + return file_proto_filter_proto_rawDescGZIP(), []int{1} +} + +func (x *ValidateRes) GetOk() bool { + if x != nil { + return x.Ok + } + return false +} + +func (x *ValidateRes) GetKeyword() string { + if x != nil { + return x.Keyword + } + return "" +} + +type FindAllRes struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Keywords []string `protobuf:"bytes,1,rep,name=keywords,proto3" json:"keywords,omitempty"` +} + +func (x *FindAllRes) Reset() { + *x = FindAllRes{} + if protoimpl.UnsafeEnabled { + mi := &file_proto_filter_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *FindAllRes) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*FindAllRes) ProtoMessage() {} + +func (x *FindAllRes) ProtoReflect() protoreflect.Message { + mi := &file_proto_filter_proto_msgTypes[2] + 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 FindAllRes.ProtoReflect.Descriptor instead. +func (*FindAllRes) Descriptor() ([]byte, []int) { + return file_proto_filter_proto_rawDescGZIP(), []int{2} +} + +func (x *FindAllRes) GetKeywords() []string { + if x != nil { + return x.Keywords + } + return nil +} + +var File_proto_filter_proto protoreflect.FileDescriptor + +var file_proto_filter_proto_rawDesc = []byte{ + 0x0a, 0x12, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x1a, 0x6b, 0x65, 0x79, 0x77, 0x6f, 0x72, 0x64, 0x73, 0x5f, 0x66, + 0x69, 0x6c, 0x74, 0x65, 0x72, 0x2e, 0x7a, 0x76, 0x6f, 0x69, 0x63, 0x65, 0x2e, 0x63, 0x6f, 0x6d, + 0x22, 0x1f, 0x0a, 0x09, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x12, 0x12, 0x0a, + 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x65, 0x78, + 0x74, 0x22, 0x37, 0x0a, 0x0b, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, + 0x12, 0x0e, 0x0a, 0x02, 0x6f, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x02, 0x6f, 0x6b, + 0x12, 0x18, 0x0a, 0x07, 0x6b, 0x65, 0x79, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x07, 0x6b, 0x65, 0x79, 0x77, 0x6f, 0x72, 0x64, 0x22, 0x28, 0x0a, 0x0a, 0x46, 0x69, + 0x6e, 0x64, 0x41, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x77, + 0x6f, 0x72, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x77, + 0x6f, 0x72, 0x64, 0x73, 0x32, 0xbe, 0x01, 0x0a, 0x06, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, + 0x5a, 0x0a, 0x08, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x12, 0x25, 0x2e, 0x6b, 0x65, + 0x79, 0x77, 0x6f, 0x72, 0x64, 0x73, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x2e, 0x7a, 0x76, + 0x6f, 0x69, 0x63, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x52, + 0x65, 0x71, 0x1a, 0x27, 0x2e, 0x6b, 0x65, 0x79, 0x77, 0x6f, 0x72, 0x64, 0x73, 0x5f, 0x66, 0x69, + 0x6c, 0x74, 0x65, 0x72, 0x2e, 0x7a, 0x76, 0x6f, 0x69, 0x63, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2e, + 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x12, 0x58, 0x0a, 0x07, 0x46, + 0x69, 0x6e, 0x64, 0x41, 0x6c, 0x6c, 0x12, 0x25, 0x2e, 0x6b, 0x65, 0x79, 0x77, 0x6f, 0x72, 0x64, + 0x73, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x2e, 0x7a, 0x76, 0x6f, 0x69, 0x63, 0x65, 0x2e, + 0x63, 0x6f, 0x6d, 0x2e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x1a, 0x26, 0x2e, + 0x6b, 0x65, 0x79, 0x77, 0x6f, 0x72, 0x64, 0x73, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x2e, + 0x7a, 0x76, 0x6f, 0x69, 0x63, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x41, + 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x42, 0x17, 0x5a, 0x15, 0x6b, 0x65, 0x79, 0x77, 0x6f, 0x72, 0x64, + 0x73, 0x2d, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x06, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_proto_filter_proto_rawDescOnce sync.Once + file_proto_filter_proto_rawDescData = file_proto_filter_proto_rawDesc +) + +func file_proto_filter_proto_rawDescGZIP() []byte { + file_proto_filter_proto_rawDescOnce.Do(func() { + file_proto_filter_proto_rawDescData = protoimpl.X.CompressGZIP(file_proto_filter_proto_rawDescData) + }) + return file_proto_filter_proto_rawDescData +} + +var file_proto_filter_proto_msgTypes = make([]protoimpl.MessageInfo, 3) +var file_proto_filter_proto_goTypes = []interface{}{ + (*FilterReq)(nil), // 0: keywords_filter.zvoice.com.FilterReq + (*ValidateRes)(nil), // 1: keywords_filter.zvoice.com.ValidateRes + (*FindAllRes)(nil), // 2: keywords_filter.zvoice.com.FindAllRes +} +var file_proto_filter_proto_depIdxs = []int32{ + 0, // 0: keywords_filter.zvoice.com.Filter.Validate:input_type -> keywords_filter.zvoice.com.FilterReq + 0, // 1: keywords_filter.zvoice.com.Filter.FindAll:input_type -> keywords_filter.zvoice.com.FilterReq + 1, // 2: keywords_filter.zvoice.com.Filter.Validate:output_type -> keywords_filter.zvoice.com.ValidateRes + 2, // 3: keywords_filter.zvoice.com.Filter.FindAll:output_type -> keywords_filter.zvoice.com.FindAllRes + 2, // [2:4] is the sub-list for method output_type + 0, // [0:2] is the sub-list for method input_type + 0, // [0:0] is the sub-list for extension type_name + 0, // [0:0] is the sub-list for extension extendee + 0, // [0:0] is the sub-list for field type_name +} + +func init() { file_proto_filter_proto_init() } +func file_proto_filter_proto_init() { + if File_proto_filter_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_proto_filter_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*FilterReq); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_proto_filter_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ValidateRes); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_proto_filter_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*FindAllRes); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_proto_filter_proto_rawDesc, + NumEnums: 0, + NumMessages: 3, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_proto_filter_proto_goTypes, + DependencyIndexes: file_proto_filter_proto_depIdxs, + MessageInfos: file_proto_filter_proto_msgTypes, + }.Build() + File_proto_filter_proto = out.File + file_proto_filter_proto_rawDesc = nil + file_proto_filter_proto_goTypes = nil + file_proto_filter_proto_depIdxs = nil +} diff --git a/ai-chat-service/services/keywords-filter/proto/filter.proto b/ai-chat-service/services/keywords-filter/proto/filter.proto new file mode 100644 index 0000000..1f93144 --- /dev/null +++ b/ai-chat-service/services/keywords-filter/proto/filter.proto @@ -0,0 +1,20 @@ +syntax = "proto3"; +option go_package = "keywords-filter/proto"; +package keywords_filter.zvoice.com; + +message FilterReq { + string text = 1; +} + +message ValidateRes { + bool ok = 1; + string keyword = 2; +} + +message FindAllRes { + repeated string keywords = 1; +} +service Filter { + rpc Validate(FilterReq) returns (ValidateRes); + rpc FindAll(FilterReq) returns (FindAllRes); +} \ No newline at end of file diff --git a/ai-chat-service/services/keywords-filter/proto/filter_grpc.pb.go b/ai-chat-service/services/keywords-filter/proto/filter_grpc.pb.go new file mode 100644 index 0000000..ff07e75 --- /dev/null +++ b/ai-chat-service/services/keywords-filter/proto/filter_grpc.pb.go @@ -0,0 +1,141 @@ +// Code generated by protoc-gen-go-grpc. DO NOT EDIT. +// versions: +// - protoc-gen-go-grpc v1.2.0 +// - protoc v4.22.0 +// source: proto/filter.proto + +package proto + +import ( + context "context" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" +) + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +// Requires gRPC-Go v1.32.0 or later. +const _ = grpc.SupportPackageIsVersion7 + +// FilterClient is the client API for Filter service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. +type FilterClient interface { + Validate(ctx context.Context, in *FilterReq, opts ...grpc.CallOption) (*ValidateRes, error) + FindAll(ctx context.Context, in *FilterReq, opts ...grpc.CallOption) (*FindAllRes, error) +} + +type filterClient struct { + cc grpc.ClientConnInterface +} + +func NewFilterClient(cc grpc.ClientConnInterface) FilterClient { + return &filterClient{cc} +} + +func (c *filterClient) Validate(ctx context.Context, in *FilterReq, opts ...grpc.CallOption) (*ValidateRes, error) { + out := new(ValidateRes) + err := c.cc.Invoke(ctx, "/keywords_filter.zvoice.com.Filter/Validate", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *filterClient) FindAll(ctx context.Context, in *FilterReq, opts ...grpc.CallOption) (*FindAllRes, error) { + out := new(FindAllRes) + err := c.cc.Invoke(ctx, "/keywords_filter.zvoice.com.Filter/FindAll", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// FilterServer is the server API for Filter service. +// All implementations must embed UnimplementedFilterServer +// for forward compatibility +type FilterServer interface { + Validate(context.Context, *FilterReq) (*ValidateRes, error) + FindAll(context.Context, *FilterReq) (*FindAllRes, error) + mustEmbedUnimplementedFilterServer() +} + +// UnimplementedFilterServer must be embedded to have forward compatible implementations. +type UnimplementedFilterServer struct { +} + +func (UnimplementedFilterServer) Validate(context.Context, *FilterReq) (*ValidateRes, error) { + return nil, status.Errorf(codes.Unimplemented, "method Validate not implemented") +} +func (UnimplementedFilterServer) FindAll(context.Context, *FilterReq) (*FindAllRes, error) { + return nil, status.Errorf(codes.Unimplemented, "method FindAll not implemented") +} +func (UnimplementedFilterServer) mustEmbedUnimplementedFilterServer() {} + +// UnsafeFilterServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to FilterServer will +// result in compilation errors. +type UnsafeFilterServer interface { + mustEmbedUnimplementedFilterServer() +} + +func RegisterFilterServer(s grpc.ServiceRegistrar, srv FilterServer) { + s.RegisterService(&Filter_ServiceDesc, srv) +} + +func _Filter_Validate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(FilterReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(FilterServer).Validate(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/keywords_filter.zvoice.com.Filter/Validate", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(FilterServer).Validate(ctx, req.(*FilterReq)) + } + return interceptor(ctx, in, info, handler) +} + +func _Filter_FindAll_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(FilterReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(FilterServer).FindAll(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/keywords_filter.zvoice.com.Filter/FindAll", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(FilterServer).FindAll(ctx, req.(*FilterReq)) + } + return interceptor(ctx, in, info, handler) +} + +// Filter_ServiceDesc is the grpc.ServiceDesc for Filter service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var Filter_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "keywords_filter.zvoice.com.Filter", + HandlerType: (*FilterServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "Validate", + Handler: _Filter_Validate_Handler, + }, + { + MethodName: "FindAll", + Handler: _Filter_FindAll_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "proto/filter.proto", +} diff --git a/ai-chat-service/services/keywords-filter/sensitive.go b/ai-chat-service/services/keywords-filter/sensitive.go new file mode 100644 index 0000000..8b1083e --- /dev/null +++ b/ai-chat-service/services/keywords-filter/sensitive.go @@ -0,0 +1,23 @@ +package keywords_filter + +import ( + "ai-chat-service/pkg/config" + grpc_client "ai-chat-service/services/grpc-client" + "sync" +) + +var sensitivePool grpc_client.ClientPool +var sensitiveOnce sync.Once + +type sensitiveClient struct { + grpc_client.DefaultClient +} + +func GetSensitiveClientPool() grpc_client.ClientPool { + sensitiveOnce.Do(func() { + cnf := config.GetConfig() + c := &sensitiveClient{} + sensitivePool = c.GetPool(cnf.DependOn.Sensitive.Address) + }) + return sensitivePool +} diff --git a/ai-chat-service/services/services.go b/ai-chat-service/services/services.go new file mode 100644 index 0000000..eae9ae1 --- /dev/null +++ b/ai-chat-service/services/services.go @@ -0,0 +1,11 @@ +package services + +import ( + "context" + "google.golang.org/grpc/metadata" +) + +func AppendBearerTokenToContext(ctx context.Context, accessToken string) context.Context { + md := metadata.Pairs("Authorization", "Bearer "+accessToken) + return metadata.NewOutgoingContext(ctx, md) +} \ No newline at end of file diff --git a/ai-chat-service/services/tokenizer/tokenizer.go b/ai-chat-service/services/tokenizer/tokenizer.go new file mode 100644 index 0000000..f97d9dd --- /dev/null +++ b/ai-chat-service/services/tokenizer/tokenizer.go @@ -0,0 +1,43 @@ +package tokenizer + +import ( + "ai-chat-service/pkg/config" + "bytes" + "encoding/json" + "fmt" + "github.com/sashabaranov/go-openai" + "net/http" +) + +type tokensInfo struct { + Code int `json:"code"` + Tokens int `json:"num_tokens"` + Msg string `json:"msg"` +} + +var httpClient = &http.Client{} + +func GetTokens(message *openai.ChatCompletionMessage, model string) (int, error) { + cnf := config.GetConfig() + url := fmt.Sprintf("%s/tokenizer/%s", cnf.DependOn.Tokenizer.Address, model) + info := &tokensInfo{} + if err := postJSON(url, message, info); err != nil { + return 0, err + } + if info.Code != 200 { + return 0, fmt.Errorf("%v", info.Msg) + } + return info.Tokens, nil +} + +func postJSON(url string, requestData *openai.ChatCompletionMessage, responseData *tokensInfo) error { + requestBody, err := json.Marshal(requestData) + if err != nil { + return err + } + resp, err := httpClient.Post(url, "application/json", bytes.NewReader(requestBody)) + if err != nil { + return err + } + return json.NewDecoder(resp.Body).Decode(responseData) +} diff --git a/chatgpt-web-backend/cmd/main.go b/chatgpt-web-backend/cmd/main.go index 100b2b2..ee072a8 100644 --- a/chatgpt-web-backend/cmd/main.go +++ b/chatgpt-web-backend/cmd/main.go @@ -1,196 +1,196 @@ -package main - -import ( - "context" - "fmt" - "log" - "net/http" - "net/http/httputil" - "net/url" - "os" - "os/exec" - "strings" - "time" - - "github.com/Arvintian/chatgpt-web/pkg/controllers" - "github.com/Arvintian/chatgpt-web/pkg/middlewares" - "github.com/Arvintian/chatgpt-web/pkg/utils" - "github.com/Arvintian/go-utils/cmdutil" - "github.com/gin-gonic/gin" - "github.com/spf13/cobra" - "k8s.io/klog/v2" -) - -type ChatGPTWebServer struct { - Host string `name:"host" env:"SERVER_HOST" usage:"http bind host" default:"0.0.0.0"` - Port int `name:"port" env:"SERVER_PORT" usage:"http bind port" default:"7080"` - BasicAuthUser string `name:"auth-user" env:"BASIC_AUTH_USER" usage:"http basic auth user"` - BasicAuthPassword string `name:"auth-password" env:"BASIC_AUTH_PASSWORD" usage:"http basic auth password"` - FrontendPath string `name:"frontend-path" env:"FRONTEND_PATH" default:"/app/public" usage:"frontend path"` - SocksProxy string `name:"socks-proxy" env:"SOCKS_PROXY" usage:"socks proxy url"` - ChatSessionTTL int `name:"chat-session-ttl" env:"CHAT_SESSION_TTL" default:"30" usage:"chat session ttl minute"` - ChatMinResponseTokens int `name:"chat-min-response-tokens" env:"CHAT_MIN_RESPONSE_TOKENS" default:"600" usage:"chat min response tokens"` - OpenAIKey string `name:"openapi-key" env:"OPENAI_KEY" usage:"openai key"` - OpenAIBaseURL string `name:"openapi-base-url" env:"OPENAI_BASE_URL" default:"https://api.openai.com/v1" usage:"openai base url"` - OpenAIModel string `name:"openai-model" env:"OPENAI_MODEL" default:"gpt-3.5-turbo-0301" usage:"openai params model"` - OpenAIMaxTokens int `name:"openai-max-tokens" env:"OPENAI_MAX_TOKENS" default:"4096" usage:"openai params max-tokens"` - OpenAITemperature int `name:"openai-temperature" env:"OPENAI_TEMPERATURE" default:"80" usage:"openai params temperature"` - OpenAIPresencePenalty int `name:"openai-presence-penalty" env:"OPENAI_PRESENCE_PENALTY" default:"100" usage:"openai params presence-penalty"` - OpenAIFrequencyPenalty int `name:"openai-frequency-penalty" env:"OPENAI_FREQUENCY_PENALTY" default:"0" usage:"openai params frequency-penalty"` - Version bool `name:"version" usage:"show version"` -} - -var Version = "0.0.0-dev" - -func (r *ChatGPTWebServer) Run(cmd *cobra.Command, args []string) error { - if r.Version { - return r.ShowVersion() - } - gin.SetMode(gin.ReleaseMode) - if err := r.updateAssetsFiles(); err != nil { - return err - } - go r.startTokenizer(cmd.Context()) - go r.httpServer(cmd.Context()) - - <-cmd.Context().Done() - return nil -} - -func (r *ChatGPTWebServer) httpServer(ctx context.Context) { - chatService, err := controllers.NewChatService(r.OpenAIKey, r.OpenAIBaseURL, r.SocksProxy, controllers.ChatCompletionParams{ - Model: r.OpenAIModel, - MaxTokens: r.OpenAIMaxTokens, - Temperature: float32(r.OpenAITemperature) / 100.0, - PresencePenalty: float32(r.OpenAIPresencePenalty) / 100.0, - FrequencyPenalty: float32(r.OpenAIFrequencyPenalty) / 100.0, - ChatSessionTTL: time.Duration(r.ChatSessionTTL) * time.Minute, - ChatMinResponseTokens: r.ChatMinResponseTokens, - }) - if err != nil { - klog.Fatal(err) - } - - addr := fmt.Sprintf("%s:%d", r.Host, r.Port) - klog.Infof("ChatGPT Web Server on: %s", addr) - server := &http.Server{ - Addr: addr, - } - entry, proxy := gin.New(), gin.New() - entry.Use(gin.Logger()) - entry.Use(gin.Recovery()) - chat := entry.Group("/api") - if len(r.BasicAuthUser) > 0 { - accounts := gin.Accounts{} - users := strings.Split(r.BasicAuthUser, ",") - passwords := strings.Split(r.BasicAuthPassword, ",") - if len(users) != len(passwords) { - panic("basic auth setting error") - } - for i := 0; i < len(users); i++ { - accounts[users[i]] = passwords[i] - } - chat.POST("/chat-process", gin.BasicAuth(accounts), middlewares.RateLimitMiddleware(1, 2), chatService.ChatProcess) - } else { - chat.POST("/chat-process", middlewares.RateLimitMiddleware(1, 2), chatService.ChatProcess) - } - chat.POST("/config", func(ctx *gin.Context) { - ctx.JSON(200, gin.H{ - "status": "Success", - "data": map[string]string{ - "apiModel": "ChatGPTAPI", - "socksProxy": r.SocksProxy, - }, - }) - }) - chat.POST("/session", func(ctx *gin.Context) { - ctx.JSON(200, gin.H{ - "status": "Success", - "message": "", - "data": gin.H{ - "auth": false, - }, - }) - }) - upstreamURL, err := url.Parse(strings.TrimSuffix(r.OpenAIBaseURL, "/v1")) - if err != nil { - klog.Fatal(err) - } - upstream := httputil.NewSingleHostReverseProxy(upstreamURL) - if r.SocksProxy != "" { - proxyUrl, err := url.Parse(r.SocksProxy) - if err != nil { - klog.Fatal(err) - } - upstream.Transport = &http.Transport{ - Proxy: http.ProxyURL(proxyUrl), - } - } - apis := proxy.Group("/v1") - apis.Any("/*relativePath", func(ctx *gin.Context) { - ctx.Request.Host = upstreamURL.Host - upstream.ServeHTTP(ctx.Writer, ctx.Request) - }) - proxy.NoRoute(func(ctx *gin.Context) { - http.FileServer(http.Dir(r.FrontendPath)).ServeHTTP(ctx.Writer, ctx.Request) - }) - entry.NoRoute(func(ctx *gin.Context) { - proxy.ServeHTTP(ctx.Writer, ctx.Request) - }) - - server.Handler = entry - go func(ctx context.Context) { - <-ctx.Done() - ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) - defer cancel() - if err := server.Shutdown(ctx); err != nil { - log.Printf("Server shutdown with error %v", err) - } - }(ctx) - if err := server.ListenAndServe(); err != http.ErrServerClosed { - log.Fatalf("Server listen and serve error %v", err) - } -} - -func (r *ChatGPTWebServer) startTokenizer(ctx context.Context) { - // devnull, err := os.OpenFile(os.DevNull, os.O_WRONLY, 0755) - // if err != nil { - // klog.Error(err) - // os.Exit(1) - // } - args := strings.Split("nuxt --module tokenizer.py --workers 2", " ") - klog.Infof("Start Tokenizer with %v", args) - cmd := exec.CommandContext(ctx, args[0], args[1:]...) - cmd.Stderr = os.Stderr - cmd.Stdout = os.Stdout - if err := cmd.Run(); err != nil { - klog.Error(err) - os.Exit(1) - } -} - -func (r *ChatGPTWebServer) updateAssetsFiles() error { - pairs := map[string]string{} - old := `{avatar:"https://raw.githubusercontent.com/Chanzhaoyu/chatgpt-web/main/src/assets/avatar.jpg",name:"ChenZhaoYu",description:'Star on Github'}` - new := `{avatar:"https://raw.githubusercontent.com/Chanzhaoyu/chatgpt-web/main/src/assets/avatar.jpg",name:"ChatGPT",description:'Star on Github'}` - pairs[old] = new - old = `{}.VITE_GLOB_OPEN_LONG_REPLY` - new = `{VITE_GLOB_OPEN_LONG_REPLY:"true"}.VITE_GLOB_OPEN_LONG_REPLY` - pairs[old] = new - old = `` - new = `` - pairs[old] = new - return utils.ReplaceFiles(r.FrontendPath, pairs) -} - -func (r *ChatGPTWebServer) ShowVersion() error { - fmt.Println(Version) - return nil -} - -func main() { - root := cmdutil.Command(&ChatGPTWebServer{}, cobra.Command{ - Long: "ChatGPT Web Server", - }) - cmdutil.Main(root) -} +package main + +import ( + "context" + "fmt" + "log" + "net/http" + "net/http/httputil" + "net/url" + "os" + "os/exec" + "strings" + "time" + + "github.com/Arvintian/chatgpt-web/pkg/controllers" + "github.com/Arvintian/chatgpt-web/pkg/middlewares" + "github.com/Arvintian/chatgpt-web/pkg/utils" + "github.com/Arvintian/go-utils/cmdutil" + "github.com/gin-gonic/gin" + "github.com/spf13/cobra" + "k8s.io/klog/v2" +) + +type ChatGPTWebServer struct { + Host string `name:"host" env:"SERVER_HOST" usage:"http bind host" default:"0.0.0.0"` + Port int `name:"port" env:"SERVER_PORT" usage:"http bind port" default:"7080"` + BasicAuthUser string `name:"auth-user" env:"BASIC_AUTH_USER" usage:"http basic auth user"` + BasicAuthPassword string `name:"auth-password" env:"BASIC_AUTH_PASSWORD" usage:"http basic auth password"` + FrontendPath string `name:"frontend-path" env:"FRONTEND_PATH" default:"/app/public" usage:"frontend path"` + SocksProxy string `name:"socks-proxy" env:"SOCKS_PROXY" usage:"socks proxy url"` + ChatSessionTTL int `name:"chat-session-ttl" env:"CHAT_SESSION_TTL" default:"30" usage:"chat session ttl minute"` + ChatMinResponseTokens int `name:"chat-min-response-tokens" env:"CHAT_MIN_RESPONSE_TOKENS" default:"600" usage:"chat min response tokens"` + OpenAIKey string `name:"openapi-key" env:"OPENAI_KEY" usage:"openai key"` + OpenAIBaseURL string `name:"openapi-base-url" env:"OPENAI_BASE_URL" default:"https://api.openai.com/v1" usage:"openai base url"` + OpenAIModel string `name:"openai-model" env:"OPENAI_MODEL" default:"gpt-3.5-turbo-0301" usage:"openai params model"` + OpenAIMaxTokens int `name:"openai-max-tokens" env:"OPENAI_MAX_TOKENS" default:"4096" usage:"openai params max-tokens"` + OpenAITemperature int `name:"openai-temperature" env:"OPENAI_TEMPERATURE" default:"80" usage:"openai params temperature"` + OpenAIPresencePenalty int `name:"openai-presence-penalty" env:"OPENAI_PRESENCE_PENALTY" default:"100" usage:"openai params presence-penalty"` + OpenAIFrequencyPenalty int `name:"openai-frequency-penalty" env:"OPENAI_FREQUENCY_PENALTY" default:"0" usage:"openai params frequency-penalty"` + Version bool `name:"version" usage:"show version"` +} + +var Version = "0.0.0-dev" + +func (r *ChatGPTWebServer) Run(cmd *cobra.Command, args []string) error { + if r.Version { + return r.ShowVersion() + } + gin.SetMode(gin.ReleaseMode) + if err := r.updateAssetsFiles(); err != nil { + return err + } + // go r.startTokenizer(cmd.Context()) + go r.httpServer(cmd.Context()) + + <-cmd.Context().Done() + return nil +} + +func (r *ChatGPTWebServer) httpServer(ctx context.Context) { + chatService, err := controllers.NewChatService(r.OpenAIKey, r.OpenAIBaseURL, r.SocksProxy, controllers.ChatCompletionParams{ + Model: r.OpenAIModel, + MaxTokens: r.OpenAIMaxTokens, + Temperature: float32(r.OpenAITemperature) / 100.0, + PresencePenalty: float32(r.OpenAIPresencePenalty) / 100.0, + FrequencyPenalty: float32(r.OpenAIFrequencyPenalty) / 100.0, + ChatSessionTTL: time.Duration(r.ChatSessionTTL) * time.Minute, + ChatMinResponseTokens: r.ChatMinResponseTokens, + }) + if err != nil { + klog.Fatal(err) + } + + addr := fmt.Sprintf("%s:%d", r.Host, r.Port) + klog.Infof("ChatGPT Web Server on: %s", addr) + server := &http.Server{ + Addr: addr, + } + entry, proxy := gin.New(), gin.New() + entry.Use(gin.Logger()) + entry.Use(gin.Recovery()) + chat := entry.Group("/api") + if len(r.BasicAuthUser) > 0 { + accounts := gin.Accounts{} + users := strings.Split(r.BasicAuthUser, ",") + passwords := strings.Split(r.BasicAuthPassword, ",") + if len(users) != len(passwords) { + panic("basic auth setting error") + } + for i := 0; i < len(users); i++ { + accounts[users[i]] = passwords[i] + } + chat.POST("/chat-process", gin.BasicAuth(accounts), middlewares.RateLimitMiddleware(1, 2), chatService.ChatProcess) + } else { + chat.POST("/chat-process", middlewares.RateLimitMiddleware(1, 2), chatService.ChatProcess) + } + chat.POST("/config", func(ctx *gin.Context) { + ctx.JSON(200, gin.H{ + "status": "Success", + "data": map[string]string{ + "apiModel": "ChatGPTAPI", + "socksProxy": r.SocksProxy, + }, + }) + }) + chat.POST("/session", func(ctx *gin.Context) { + ctx.JSON(200, gin.H{ + "status": "Success", + "message": "", + "data": gin.H{ + "auth": false, + }, + }) + }) + upstreamURL, err := url.Parse(strings.TrimSuffix(r.OpenAIBaseURL, "/v1")) + if err != nil { + klog.Fatal(err) + } + upstream := httputil.NewSingleHostReverseProxy(upstreamURL) + if r.SocksProxy != "" { + proxyUrl, err := url.Parse(r.SocksProxy) + if err != nil { + klog.Fatal(err) + } + upstream.Transport = &http.Transport{ + Proxy: http.ProxyURL(proxyUrl), + } + } + apis := proxy.Group("/v1") + apis.Any("/*relativePath", func(ctx *gin.Context) { + ctx.Request.Host = upstreamURL.Host + upstream.ServeHTTP(ctx.Writer, ctx.Request) + }) + proxy.NoRoute(func(ctx *gin.Context) { + http.FileServer(http.Dir(r.FrontendPath)).ServeHTTP(ctx.Writer, ctx.Request) + }) + entry.NoRoute(func(ctx *gin.Context) { + proxy.ServeHTTP(ctx.Writer, ctx.Request) + }) + + server.Handler = entry + go func(ctx context.Context) { + <-ctx.Done() + ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) + defer cancel() + if err := server.Shutdown(ctx); err != nil { + log.Printf("Server shutdown with error %v", err) + } + }(ctx) + if err := server.ListenAndServe(); err != http.ErrServerClosed { + log.Fatalf("Server listen and serve error %v", err) + } +} + +func (r *ChatGPTWebServer) startTokenizer(ctx context.Context) { + // devnull, err := os.OpenFile(os.DevNull, os.O_WRONLY, 0755) + // if err != nil { + // klog.Error(err) + // os.Exit(1) + // } + args := strings.Split("nuxt --module tokenizer.py --workers 2", " ") + klog.Infof("Start Tokenizer with %v", args) + cmd := exec.CommandContext(ctx, args[0], args[1:]...) + cmd.Stderr = os.Stderr + cmd.Stdout = os.Stdout + if err := cmd.Run(); err != nil { + klog.Error(err) + os.Exit(1) + } +} + +func (r *ChatGPTWebServer) updateAssetsFiles() error { + pairs := map[string]string{} + old := `{avatar:"https://raw.githubusercontent.com/Chanzhaoyu/chatgpt-web/main/src/assets/avatar.jpg",name:"ChenZhaoYu",description:'Star on Github'}` + new := `{avatar:"https://raw.githubusercontent.com/Chanzhaoyu/chatgpt-web/main/src/assets/avatar.jpg",name:"ChatGPT",description:'Star on Github'}` + pairs[old] = new + old = `{}.VITE_GLOB_OPEN_LONG_REPLY` + new = `{VITE_GLOB_OPEN_LONG_REPLY:"true"}.VITE_GLOB_OPEN_LONG_REPLY` + pairs[old] = new + old = `` + new = `` + pairs[old] = new + return utils.ReplaceFiles(r.FrontendPath, pairs) +} + +func (r *ChatGPTWebServer) ShowVersion() error { + fmt.Println(Version) + return nil +} + +func main() { + root := cmdutil.Command(&ChatGPTWebServer{}, cobra.Command{ + Long: "ChatGPT Web Server", + }) + cmdutil.Main(root) +} diff --git a/chatgpt-web-backend/pkg/tokenizer/tokenizer.go b/chatgpt-web-backend/pkg/tokenizer/tokenizer.go index ba85afb..4c9d446 100644 --- a/chatgpt-web-backend/pkg/tokenizer/tokenizer.go +++ b/chatgpt-web-backend/pkg/tokenizer/tokenizer.go @@ -1,43 +1,43 @@ -package tokenizer - -import ( - "bytes" - "encoding/json" - "fmt" - "net/http" - - "github.com/sashabaranov/go-openai" -) - -type tokenInfo struct { - Code int `json:"code"` - Count int `json:"num_tokens"` - Msg string `json:"msg"` -} - -func GetTokenCount(message openai.ChatCompletionMessage, model string) (int, error) { - url := fmt.Sprintf("http://127.0.0.1:5000/tokenizer/%s", model) - info := tokenInfo{} - if err := postJSON(url, &message, &info); err != nil { - return 0, err - } - if info.Code != 200 { - return 0, fmt.Errorf("%v", info.Msg) - } - return info.Count, nil -} - -func postJSON(url string, requestData *openai.ChatCompletionMessage, responseData *tokenInfo) error { - requestBody, err := json.Marshal(requestData) - if err != nil { - return err - } - - resp, err := http.Post(url, "application/json", bytes.NewBuffer(requestBody)) - if err != nil { - return err - } - defer resp.Body.Close() - - return json.NewDecoder(resp.Body).Decode(responseData) -} +package tokenizer + +import ( + "bytes" + "encoding/json" + "fmt" + "net/http" + + "github.com/sashabaranov/go-openai" +) + +type tokenInfo struct { + Code int `json:"code"` + Count int `json:"num_tokens"` + Msg string `json:"msg"` +} + +func GetTokenCount(message openai.ChatCompletionMessage, model string) (int, error) { + url := fmt.Sprintf("http://127.0.0.1:5000/tokenizer/%s", model) + info := tokenInfo{} + if err := postJSON(url, &message, &info); err != nil { + return 0, err + } + if info.Code != 200 { + return 0, fmt.Errorf("%v", info.Msg) + } + return info.Count, nil +} + +func postJSON(url string, requestData *openai.ChatCompletionMessage, responseData *tokenInfo) error { + requestBody, err := json.Marshal(requestData) + if err != nil { + return err + } + + resp, err := http.Post(url, "application/json", bytes.NewBuffer(requestBody)) + if err != nil { + return err + } + defer resp.Body.Close() + + return json.NewDecoder(resp.Body).Decode(responseData) +} diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..bf9b06d --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,9 @@ +version: '3.3' + +services: + tokenizer: + image: tokenizer:1.0.0 + container_name: tokenizer + ports: + - "5000:3002" + restart: unless-stopped \ No newline at end of file diff --git a/keywords-filter/.gitignore b/keywords-filter/.gitignore new file mode 100644 index 0000000..9e1976b --- /dev/null +++ b/keywords-filter/.gitignore @@ -0,0 +1 @@ +runtime \ No newline at end of file diff --git a/keywords-filter/Dockerfile b/keywords-filter/Dockerfile new file mode 100644 index 0000000..5f87177 --- /dev/null +++ b/keywords-filter/Dockerfile @@ -0,0 +1,19 @@ +# 编译阶段 +FROM quay.io/0voice/golang:1.20 as stage0 +RUN go env -w GOPROXY=https://proxy.golang.com.cn,https://goproxy.cn,direct +ADD ./ /src/keywords-filter +WORKDIR /src/keywords-filter +RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o keywords-filter ./filter-server + +FROM quay.io/0voice/alpine:3.18 as stage1 +ADD ./grpc_health_probe-linux-amd64 /usr/bin/grpc_health_probe +RUN chmod +x /usr/bin/grpc_health_probe +MAINTAINER nick +WORKDIR /app/ +ADD ./dev.config.yaml /app/config.yaml +ADD ./dict.txt /app/dict.txt +COPY --from=stage0 /src/keywords-filter/keywords-filter ./ +# 指定入口程序 +ENTRYPOINT ["./keywords-filter"] +# 指定容器的启动命令或者入口程序的参数 +CMD ["--config=config.yaml","--dict=dict.txt"] diff --git a/keywords-filter/dev.config.yaml b/keywords-filter/dev.config.yaml new file mode 100644 index 0000000..c180289 --- /dev/null +++ b/keywords-filter/dev.config.yaml @@ -0,0 +1,8 @@ +server: + ip: 0.0.0.0 + port: 50053 + accessToken: "ang1chubdev1ozhome256487d22sapguuv1ozhom" +log: + # panic,fatal,errro,warn,info,debug,trace + level: "info" + logPath: "runtime/logs/app.log" \ No newline at end of file diff --git a/keywords-filter/dev.kw.config.yaml b/keywords-filter/dev.kw.config.yaml new file mode 100644 index 0000000..efdb8e3 --- /dev/null +++ b/keywords-filter/dev.kw.config.yaml @@ -0,0 +1,8 @@ +server: + ip: 0.0.0.0 + port: 50054 + accessToken: "ang1chubdev1ozhome256487d22sapguuv1ozhom" +log: + # panic,fatal,errro,warn,info,debug,trace + level: "info" + logPath: "runtime/logs/app.log" \ No newline at end of file diff --git a/keywords-filter/dict.txt b/keywords-filter/dict.txt new file mode 100644 index 0000000..767570d --- /dev/null +++ b/keywords-filter/dict.txt @@ -0,0 +1,13992 @@ + AV + hz + sm + PK + PX + C4 + usk + flg + GCD + gcd + GHB + rfa + sex + TND + voa + .ru + .cc + SQ + tmd + nnd + 89- + cnd + dpp + TMD + xxx + t56 + LSD + qy6 + TEL +淫 +乳 +阴 +奸 +裸 +骚 +穴 +嫖 +碼 +陰 +姦 +枪 +炮 +肏 +屄 +弓 +弩 +氰 +铊 +氟 +氯 +胂 +磷 + GPS +砷 + TNT + PCP +肝 +肾 +肼 +膦 +床 +K粉 + 18dy + pn95 +3退 +A级 +A片 + fuck +J巴 + lama + nacb + nmis + porn + shit + suck + svdc + taip + TNND + wo98 +操B +插B +大b +二B +狗b +傻B +傻X + F·B + T·W + Z·W + Y·D + S·F +a片 +2奶 +k粉 + cdjp + dafa + dfdz + falu + >jnv +9评 +G点 + MDMA + SARS +红K + .exe +6合 + c-sz + hqzg + it01 + wj2y + FUCK +反G +六4 +法L +9坪 +h漫 +h图 + 99dv +嫩b + RX65 +T牌 + qvod +3箭 + 654K + 55MM + AK47 + ATOM +b毛 +3健 +3棱 + CP99 +G水 + lqb78 + zsgnw + lqb18 + cxmyw + dk555 + laohj + we399 + h59me + boxun +17大 +18禁 +3d肉 +Kx粉 + naive + paper +黄JU + FALun + yinh + anime + bitch + Bjork + bjork + Party + fldfh + 598gj + ab003 + baiok + buslz + djkdh + haosf + hy898 + jsxys + ka888 + ka999 + kaobi + meiti + qqywf + s3186 + typou + weizi + wt800 + xgzrc + xj818 + zdbmm + zs007 + zt286 +bb弹 +fa轮 +看jj + daai8 + zqfpw +台du +89之 + tusha +FL功 +自fe + 9ping + zifen +XX功 +看JJ + S2940 + HCCH2 + 630XP +54手 +92手 +63式 +77手 +38式 +TV棒 +64手 +'*'酮 + TVUSB + DM528 + 762mm + qiang + ADBOX +80色 +qi狗 + GLOCK + M1911 +假BI +54狗 +64狗 +色BB +92式 +64式 +54式 +77式 +BB弹 +槍qq +fa票 +K 粉 +六合 +刻章 +法轮 +乱伦 +做鸡 +罗干 +鬼村 +昏药 +春药 +疆独 +藏独 +禁书 +特码 +共狗 +达赖 +暴动 +反中 +拉登 +幼女 +喷剂 +罢工 +毛片 +套牌 +军火 +针孔 +女优 +朱蒙 +征途 +私服 +两会 +肉棍 +退党 +反华 +反共 +换妻 +偷拍 +露点 +走光 +丑化 +党国 +抵制 +怀旧 +倒退 +共奴 +大珐 +反动 +策屁 +赛马 +特马 +色情 +可儿 +乱交 +台湾 +鸡巴 +露毛 +肉棒 +龟头 +玉龟 +奢恋 +毛派 +邓派 +冰毒 +办证 +诈骗 +政治 +大荣 +西藏 +贪官 +迷药 +罢食 +蜜洞 +泄题 +罢餐 +天浴 +偷电 +盗电 +明慧 +拉凳 +江氏 +假币 +動乱 +性奴 +假钞 +无界 +升达 +杨林 +代考 +替考 + iow.cn + tzz.cn +搜客 +柑 + mp654k +退欓 + 98qian + k20128 + dzboo5 + szbzcn + 51test + ksj8cn + 3ufcom + lnimcn + zgque6 + bj0099 + wsbz68 + dkw800 + ktdbzj + jczj08 + jcnlae + 80hhcn + 97xxoo + dzb028 +劣乐 + cz3456 + 1Pondo + hentai + huanet + incest + Judies + Kundun + making + simple + wangce + yuming +爱迪 +八九 +八老 +巴赫 +罢吃 +罢饭 +罢课 +白军 +白梦 +包夜 +保钓 +报禁 +鲍戈 +鲍彤 +暴動 +暴干 +暴乱 +暴亂 +暴政 +北韩 +贝领 +被逼 +被虐 +被迫 +逼样 +变态 +婊子 +冰火 +波霸 +博彩 +博讯 +薄格 +苍焱 +藏獨 +操逼 +操比 +操蛋 +操你 +操死 +操他 +插插 +插她 +插你 +插他 +插我 +柴玲 +常劲 +常委 +潮吹 +车仑 +陈军 +陈蒙 +陈庆 +成人 +城管 +程凯 +程真 +赤匪 +赤化 +抽插 +臭作 +处女 +吹萧 +春藥 +痤疮 +打倒 +大逼 +大比 +大彩 +大法 +大纪 +大禁 +大陆 +大史 +代办 +代辦 +代开 +代開 +代写 +代孕 +耽美 +弹劾 +弹夹 +党棍 +党禁 +党魁 +荡妇 +登辉 +底裤 +弟疼 +弟痛 +弟子 +調教 +丁元 +顶级 +东社 +东突 +东洲 +动乱 +独裁 +独夫 +赌球 +多党 +多黨 +多维 +屙民 +俄国 +恶党 +恶搞 +恶警 +二逼 +发愣 +发抡 +发仑 +发伦 +发囵 +发沦 +发纶 +发轮 +发论 +发票 +發倫 +發淪 +發輪 +發論 +發票 +法功 +法会 +法愣 +法抡 +法仑 +法伦 +法囵 +法沦 +法纶 +法倫 +法淪 +法輪 +法论 +法論 +法谪 +法正 +砝仑 +砝伦 +砝轮 +反党 +反攻 +废统 +分裂 +粉刺 +封杀 +風花 +腐败 +腐敗 +干她 +干妳 +干你 +干他 +甘油 +肛交 +肛门 +高潮 +高干 +高幹 +高官 +高瞻 +睾丸 +戈扬 +哥疼 +哥痛 +鸽派 +革命 +蛤蟆 +更衣 +工力 +公安 +公款 +功法 +功学 +功友 +攻台 +共产 +共党 +共黨 +共匪 +共军 +狗逼 +狗操 +狗粮 +狗娘 +广闻 +龜頭 +郭平 +国军 +国贼 +er批 +汉风 +何勇 +和弦 +河殇 +黑车 +嘿咻 +红兽 +红志 +红智 +宏恩 +宏法 +宏志 +宏治 +洪传 +洪吟 +洪志 +洪治 +洪智 +紅志 +紅智 +胡江 +胡派 +胡平 +胡温 +胡瘟 +胡系 +虎机 +护法 +护士 +换偶 +換妻 +黃菊 +黄祸 +黄局 +黄菊 +黄色 +黄翔 +簧片 +慧网 +昏藥 +活佛 +活体 +鸡八 +鸡吧 +基督 +激情 +极景 +纪元 +加府 +贾系 +假鈔 +监听 +贱逼 +贱比 +江胡 +江驴 +江罗 +江牌 +江派 +江青 +江宋 +江系 +江贼 +江朱 +江猪 +僵贼 +疆獨 +讲法 +交班 +交媾 +交警 +叫春 +教徒 +接班 +姐疼 +姐痛 +锦涛 +近平 +近親 +禁看 +经文 +精液 +警察 +静坐 +九评 +绝版 +军车 +军妓 +軍火 +卡通 +开苞 +康本 +抗议 +空难 +空難 +恐共 +口技 +口交 +狂操 +狂插 +狂干 +狂搞 +捆绑 +喇嘛 +烂逼 +烂比 +烂货 +劳改 +劳教 +老江 +老毛 +雷管 +冷宽 +李录 +李禄 +李鹏 +李鵬 +連發 +联总 +炼功 +林彪 +林斌 +凌锋 +凌辱 +菱恝 +刘刚 +刘青 +流脑 +流亡 +六彩 +六四 +鲁俊 +陆肆 +陆委 +亂倫 +抡功 +伦公 +伦功 +伦攻 +沦公 +沦功 +沦攻 +轮大 +轮公 +轮功 +轮攻 +倫公 +倫功 +倫攻 +淪公 +淪功 +淪攻 +輪公 +輪功 +輪攻 +论公 +论功 +论攻 +論公 +論功 +論攻 +羅幹 +妈逼 +妈个 +妈批 +媽個 +麻古 +麻衣 +麻醉 +马馼 +码会 +卖逼 +卖比 +卖国 +猫肉 +貓肉 +毛共 +毛贼 +美服 +美甲 +美腿 +妹疼 +妹痛 +猛插 +蒙独 +蒙汗 +迷魂 +迷香 +迷藥 +秘录 +绵恒 +民国 +民警 +民联 +民殇 +民意 +民运 +民運 +民阵 +民猪 +民主 +明Hui +明hui +魔教 +母子 +内裤 +内射 +奶子 +闹事 +你爸 +牛逼 +牛比 +女女 +女優 +虐待 +诺龙 +喷精 +喷尿 +彭钢 +屁股 +屁眼 +骗局 +騙局 +迫害 +破处 +破网 +蒲团 +祁建 +齐墨 +汽狗 +千源 +前考 +钱达 +强暴 +强歼 +强卫 +抢盐 +乔石 +窃听 +亲美 +秦晋 +情妇 +情色 +请愿 +庆红 +球彩 +权斗 +群交 +群射 +人大 +人权 +日逼 +日你 +日您 +日批 +日他 +肉洞 +肉欲 +辱师 +三级 +三級 +三退 +三唑 +色狼 +色友 +色欲 +沙鹰 +傻逼 +煞笔 +上访 +尚勇 +少妇 +射精 +神佛 +沈彤 +升達 +升天 +盛雪 +失密 +师涛 +石戈 +示威 +手狗 +手铐 +首长 +首長 +兽交 +书记 +書記 +舒淇 +熟女 +双规 +爽死 +氵去 +水扁 +税力 +丝袜 +私彩 +私处 +私营 +思潮 +斯诺 +宋平 +素女 +台獨 +台独 +台盟 +谭力 +唐捷 +涛哥 +天怒 +天权 +天葬 +舔奶 +挺胡 +同房 +童屹 +统独 +统战 +捅你 +捅我 +偷窥 +偷情 +透视 +屠杀 +吐血 +团派 +退团 +脱党 +脱光 +脱团 +脱衣 +外蒙 +汪岷 +亡党 +亡国 +王策 +王丹 +王刚 +网特 +网赚 +伪水 +尾行 +瘟家 +文革 +翁虹 +瓮安 +我操 +我草 +我日 +我色 +无毛 +無界 +五不 +伍凡 +武警 +吸储 +吸儲 +洗脑 +洗瑙 +下体 +限制 +香功 +肖强 +邪党 +邪恶 +邪教 +谢安 +新党 +刑警 +行房 +邢铮 +性爱 +性愛 +性福 +性感 +性交 +性息 +胸部 +胸罩 +熊炎 +熊焱 +修炼 +修煉 +薛伟 +学潮 +学联 +学运 +血卡 +亚热 +言禁 +颜射 +艳舞 +阳具 +阳痿 +杨巍 +杨周 +一党 +一黨 +伊東 +乙醚 +义解 +亦凡 +櫻井 +游行 +右派 +幼齿 +幼交 +诱惑 +舆论 +欲望 +圆满 +援交 +岳武 +杂种 +脏独 +造爱 +造反 +则民 +择民 +泽东 +泽民 +贼民 +炸药 +张钢 +张健 +张林 +赵南 +哲民 +真相 +真象 +镇压 +正法 +郑义 +政变 +支那 +制服 +中功 +中共 +猪操 +专柜 +专政 +专制 +專政 +專制 +子弹 +自殘 +自焚 +自摸 +自拍 +自杀 +自慰 +作爱 +坐交 +坐台 +做爱 +做雞 +做鸭 +黄镇 +黄敬 +薄熙 +徐明 +老丁 +贪污 + www.cn + xp.com + u88.cn + jkk.tw + www.am + sdo.ms + 171.cn +鹰派 +禁播 +二奶 +周容 +陈云 +方毅 +吴德 +耿飚 +彭冲 +王震 +彭真 +谢非 +吴仪 +王克 +刘淇 +处男 +血恋 +偷欢 + censor + fa lun + fanhua +妓女 +我靠 +登陆 +玉茎 +王爷 +雏妓 +赌博 +国歌 +股歌 +啊扁 +官场 +群砍 +炸弹 +买春 +被插 +鸟巢 +缺陷 +色戒 +复活 +阿扁 +氨水 +爆炸 +丙酮 +布赫 +催眠 +催情 +大麻 +地震 +毒素 +疯药 +豪江 +濠江 +火药 +剑奴 +降頭 +借种 +老温 +麻姑 +麻药 +马药 +吗啡 +迷幻 +迷昏 +迷情 +缅古 +杀手 +手雷 +偷香 +舞男 +邪僧 +性病 +性媾 +性药 +性夜 +鸦片 +盐酸 +艳降 +艳遇 +罂粟 +早泄 +北姑 +波胆 +春宫 +吹箭 +叫鸡 +卖春 +人祸 +大庄 +盗取 +男妓 +盘口 +赔率 +三陪 +下流 +尤物 +骚货 +摇奖 + 116738 + 200100 + 251700 + 581578 + 8happy + ake163 + bet365 + cks123 + cnepep + cosway + Cosway + czj163 + eweber + gogoer + gzyrly + ha2.cn + hngyjt + jdh011 + lhjykq + midasc + niaita + now.cn + qdjywq + rorcll + sar120 + wengan + wes.tw + xingsc + yuyify + zxzgjx +阿宾 +安定 +挫仑 +气狗 +三挫 +论文 +斑蝥 +办怔 +辦證 +包养 +报码 +暴菊 +爆菊 +鞭满 +变牌 +厕奴 +长狗 +贷开 +弹种 +盗号 +电狗 +电鸡 +赌具 +根浴 +狗友 +华闻 +黄冰 +贱货 +贱人 +江毒 +警徽 +菊暴 +菊爆 +军刺 +军转 +開票 +磕彰 +嗑药 +六死 +漏题 +卖身 +卖血 +灭共 +男奴 +嫩逼 +浓精 +女奴 +泡友 +陪聊 +氣槍 +铅弹 +亲共 +情杀 +犬交 +人弹 +剩火 +尸博 +熟妇 +骰子 +推翻 +无码 +希脏 +霰弹 +性虐 +一肖 +蝇毒 +咏妓 +有码 +脏毒 +中特 +助考 +庄家 +左棍 +雞巴 +禁片 +巨波 +色界 +色诱 +爽片 + xxfysd +操她 +操它 +出售 +干它 +价格 +开票 +猫池 +目漂 +批发 +凭办 +招商 +焊接 +黄赌 +蓝芒 +紫田 +唐子 +何山 +张戎 +虐杀 +应招 +林海 +黄琦 +刘荻 +颜均 +李志 +赵岩 +封锁 +推油 +朱德 +万里 +泛绿 +泛蓝 +自由 +双轨 +伊东 +调教 +近亲 +连发 +樱井 +风花 +共产党 +伪大 +陆独 +共独 +殃视 +打压 +蒋公 +独立 +共贼 +亡共 +集会 +维权 +罢市 +买断 +聚集 +信访 +征地 +拆迁 +复员 +示wei +讨薪 +暴行 +紫阳 +九凭 +法lun +九抨 +反日 +屠华 +参拜 +抗日 +围攻 +靖国 +灭日 +惨案 +军区 +军队 +保过 +包过 +贷款 +带考 +司考 +押题 +切腹 +打手 +开锁 +套现 +一码 +彩宝 +合彩 +足交 +富姐 +做台 +找女 +找男 +证件 +导弹 +肉牛 +肉羊 +牧业 +报税 +伟哥 +爱欲 +税票 +牛羊 +扑克 +作弊 +麻将 +面瘫 +趣谷 +暗杀 +奶交 +菩提 +麻果 +病毒 +足疗 +足浴 +搬迁 +种猪 +精子 +女装 +男装 +鞋帽 +办證 +月嫂 +洗牙 +牙石 +洁牙 +牙疼 +龋齿 +虫牙 +正牙 +拔牙 +牙科 +防弹 +警棍 +疫苗 +水军 +飞标 +飞镖 +探头 +破解 +斗欧 +毒品 +自考 +警服 +电棍 +报关 +偷税 +逃税 +漏税 +税务 +审计 +年检 +签证 +离婚 +逃婚 +白洁 +苍主 +叱咤 +创魂 +宠奴 +刀霸 +呻吟 +情欲 +東宮 + FDZONE +麻烟 +冷却 +偷電 +监聼 +跟听 +摄像 +克隆 +罚没 +走私 +短信 + D2S500 +雷霆 +稀土 +米粒 +mai人 +丁烯 +丙腈 +丁腈 +苄醇 +苯醌 +杜廷 +山奈 +升汞 +白砒 +砒霜 +帝绿 +苔绿 +塔崩 +索曼 +沙林 +光气 +氮芥 +烟碱 +蒜醇 +华果 +腈果 +蚜螨 +亚砜 +亚果 +硫丹 +大隆 +敌鼠 +安妥 +甘伏 +窃电 +钢珠 +冰Ice +媚药 +疯丸 +撬锁 +矿脂 +甲撑 +单刃 +双刃 +火棉 +硝宇 +泰安 +铵煤 +铵木 +铵磺 +铵邻 +铵萘 +铵胍 +岩石 +雷汞 +雷银 +虎头 +秃鹰 +武器 +瓦斯 +按摩 +刀具 +爱刀 +铀235 +霸王 +杀伤 +匕首 +奖券 +兵团 +纵情 +毒碱 +超速 +隐形 +丁香 +弹头 +删帖 +器官 +猎箭 +自爆 +农药 +黑市 +黑梯 +虎骑 +爆破 +色医 +驾照 +护照 +健卫 +艳情 +金钟 +折刀 +兰博 +猎豹 +送养 +领养 +骆冰 +妞妞 +色图 +乙腈 +大宝 +赌场 +艳帝 +梭哈 +人皮 +禽兽 +黄站 +美男 +麻狗 +涉毒 +冰糖 +猎狗 +皮碗 +双管 +解码 +拦截 +屏蔽 +硬币 +面具 +猎艳 +伪币 +狩猎 +点色 +冰砖 +发漂 +高爆 +高考 +跟踪 +艳母 +地磅 +卧底 +牙签 +唐僧 +出台 +阳江 +野战 +东宫 + DM7000 +改火 +军用 +A4U平 +A4U网 +A4U站 +狗专 +气皇 +长刺 +狙击 +qie听 +Zha药 +白粉 +白刃 +暴力 +采花 +彩票 +JIA币 +白冰 +钞票 +短狗 +黑狗 +火狗 +假rmb +军狗 +军品 +开刃 +镁粉 +手拷 +战刀 +追月 +春泄 + fapiao +戈博 +工商 +麻谷 +甩刀 +假比 +考研 +雷豹 +力霸 +春堂 +鲍鱼 +露鲍 +嫂嫂 +迷离 +蜜桃 +名刀 +耻蜜 +虐恋 +秦氏 +氢弹 +散弹 +色域 +山猪 +兽兽 +淘刀 +舔弄 +硝铵 +冰古 +纯古 +晶冰 +战狗 +艳史 +投票 +报仇 +纯冰 +票据 +文凭 +武力 +精鹰 +本色 +好色 +刷票 +赌波 +夺爱 +夺妻 +官能 +画魂 +宦妻 +剑魔 +江湖 +巨轮 +狼车 +猎情 +龙使 +掠爱 +萝莉 +眉姐 +密诱 +脑王 +逆侠 +破局 +情乱 +人欲 +如焉 +色惑 +绳师 +胎记 +庭妍 +袭警 +戏舞 +亵渎 +玄战 +艳福 +艳飘 +隐杀 +众香 +气狙 +罢考 +码报 +假钱 +马报 +狠操 +外挂 +传销 +双鹰 +弹药 +虎牙 +刺刀 +甩棍 +助勃 +鹰牌 +军刀 +伪钞 +涩爱 +官战 +春色 +核弹 +跳刀 +军刃 +砍刀 + cocain +抽奖 +迁都 +中奖 +假证 + SevBBS +卖槍 +妓院 +罩杯 +青楼 +内衣 +亵衣 +色魔 +初夜 +蕾丝 +老鸨 +蹂躏 +勾引 +偷精 +吹箫 +失身 +失禁 +虐爱 +虐情 +一夜 +情人 +小妞 +玩偶 +娇妻 +流氓 +情夫 +春光 +春梦 +猛男 +艳星 +艳行 +艳记 +艳事 +寡妇 +金瓶 +禁果 +浴女 +外遇 +同居 +缠绵 +暧昧 +饥渴 +出轨 +堕落 +坠落 +沉沦 +御用 +调情 +调戏 +风流 +不良 +寻欢 +合欢 +偷腥 +挑情 +同眠 +菲彩 +跑马 +证务 +卖胆 +勃起 +视频 +基友 +脚交 +滥交 +口活 +篡逆 +丹警 +金血 +蛮村 +贱妇 +胸摧 +發缥 +发缥 +口爆 +揉奶 +大奶 +耳机 +杀死 +拉丹 +压迫 +非典 +回民 + falong +主席 +改革 +开放 +杂志 +中俄 +诽闻 +无能 + 36tl.cn + 9aab.cn + gfwo.cn + hroc.cn + qxsw.cn + xx44.cn +原装k + mnltscn +cet4答 +中daan + gmtkwcn + 22w33cn + gwykscn + hd101cn + ztyzcom + sj516cn + hykswcn + ygafnet + 3zszcom + bakqcom + a89acom + 47aicom +nine评 + 1795628 + 5569118 + 949-081 + freenet + hongzhi + HuangJu + huzhuxi + minghui + playboy + safeweb + toolbar + tuidang + Undergo + unixbox + ustibet + wstaiji +发-票 +發-票 +法.轮 +龚平 +胡J涛 +江core +江z民 +九-评 +九.评 +色-情 +替.考 +玄`机 + G·M·D + L·H·Z +偷 拍 +H动漫 +H漫画 + bignews + chinamz + fangong + ry80.cn + 0033.cn + 020wuzi + 30t.net + 3197918 + 3197919 + 35so.cn + 4dq.com + 5bzj.cn + 779.net + 7caiyun + 8892484 + 9kj.com + aganbio + tom.com + asyr520 + caxieji + da11.cn + dotmore + e80.com + fipa.cn + gyp.com + hrzj998 + htte.cn + jcx.com + jim.net + jpkg.cn + my6e.cn + oolaiya + pyqq.cn + sixfour + srogold + tbcgold + tpypump + ucenter + wapgame + wowgold + xqzj168 + ysee.cn + jiuping +t牌车 +法0功 +法o功 +李洪x + 7580185 +价 格 + hrw.org +GONG党 +共X党 + xuechao +法X功 +九ping +李洪X +法O功 +1夜情 +3级片 +3唑仑 +甲苯2 +4二酮 +K他命 +Ting器 + BOLT630 +3利达 +3步倒 +2踢脚 +2羟基 +3仙丹 +4乙锡 +2硼烷 +5硼烷 +2硝酚 +2恶英 +3赛昂 +3氮苯 +1本道 +十8禁 + CNK6080 +LBM4型 +M92F手 +M92F式 +4级证 +黄b色 +3唑纶 + NEWB630 +6和采 + heroine +尘诱2 +king粉 +群P图 +E乐博 +92狗qq +E周刊 + IP17908 +智能H3 + 14gm.com + 3456.net + 55po.com + 7evk.com + 9352.com + ab222.cn + cctve.cn + dotoo.cn + ghkj.net + heidc.cn + jsh8.com + ok129.cn + quna.com + ttyie.cn + weeky.cn + ym59.com + sonyf707 + 51297514 + freegate +64运动 +zd份子 +传奇sf +辦譪qq + pj899com + 33465607 +和谐zf +廱閠px +厦门px +px事件 +px项目 +反对px +反對px +px項目 + spe59263 +项目px +pl123号 + 21018728 + 21018908 + 21478521 + 26544455 + 51267950 + 51517198 + 54457055 + 57198536 + 60365563 + 60370027 + 61592271 + 62985375 + 78233985 + 79457053 + 82168838 + 83121803 + 83405002 + 84718900 + 87549294 + 87582796 +89死难 + hrichina +huang菊 + ILLUSION +MC军团 +MC軍團 + tianwang + tibetalk + triangle + wow gold + xinsheng +佳龙it +江ze民 +露拉3D +我XX你 +BT下载 +QQ宠物 + Ketamine +偷啪dv + WoW Gold + ws88.net + xcity.cn + xicp.net + xihuchem + XXWLAQZY + zcld.net + zgcej.cn +3d轮盘 +六he彩 +sf传奇 + 08ys.com + 55798676 + 81978137 + bxzw.com + fzboyang +反party +89事件 +64时期 + liuhecai +3D轮盘 +六HE彩 +bt下载 +zm病危 +qq物语 + playerTV + Dreambox +1羟基2 +49环氧 + banzheng + MARUHAMA + Flexispy +SNL6B型 +bt电影 +2甲2硫 +S4氧代 +海豹M9 +国产95 +女同BT +英国B5 +av资源 +手槍QQ +kb之家 +av直播 +gv下载 +gv资源 +gv动漫 +3p图片 +av快播 +庐江6p +狗管qq +3P艳照 +庐江5p +5p庐江 +Av影院 +luo聊QQ +木仓QQ +av影院 +18岁禁 +賣槍QQ +警衔QQ +买冰QQ +楼凤QQ + FlexiSPY +色bb吧 +亚洲BT +日韩BT +欧美BT +欧美GV +真善忍 +毛一鲜 +黎阳平 +张小平 +反政府 +陈良宇 +胡新宇 +金伯帆 +马加爵 +色空寺 +蒋彦永 +关机房 +干扰器 +快操我 +乖乖药 +卖答案 +买答案 +新唐人 +摇头丸 +戴海静 +中纪委 +领导人 +家乐福 +活摘器 +切波特 +噶玛吧 +社民党 +九jiu评 +六开网 +露胸图 +要射了 +小弟弟 +双儿篇 +江二世 +江核心 +江老贼 +江魔头 +陶驷驹 +江理论 +江昏君 +江路线 +违禁品 +追踪器 +大扎荣 +太王记 +大祚荣 +民告官 +蚁力神 +渊苏文 +童奴工 +波佳达 +菊花洞 +刘全喜 +十七大 +李沛瑶 +梁保华 +沧澜曲 +黑天使 +十景缎 +风尘劫 +胡錦濤 +六决不 +轮盘机 +百家乐 +连线机 +模拟机 +礼品机 +卢跃刚 +玫瑰园 +杨元元 +趙紫陽 +人民报 +崔英杰 +萬人暴 +张大权 +博白县 +女死囚 +劉奇葆 +女友坊 +白小姐 +曾道人 +奴事件 +海乐神 +酣乐欣 +高莺莺 +广东王 +红海湾 +新生网 +大紀元 +死刑过 +一四我 +四我周 +重题工 +灭绝罪 +大揭露 +宾致网 +共铲党 + 6'*'928838 +张筱雨 +搞皮叛 +村骗乡 +三呆婊 +酒级别 +林西亮 +祸布斯 +逢必乱 +喝党酒 +痰太浓 +拜德良 +张锡铭 +凌沧洲 +眔聽王 +拍肩药 + 857606349 +佬唬机 + 529543905 +kcn和khs +消聲器 +吃女婴 +食女婴 +嬰兒湯 +婴儿汤 +婴兒汤 +猪肉版 +vpn代理 +绿坝娘 +杜崇烟 +三鹿版 +蟹药店 +拉面剂 +飞易vpn +vpn翻墙 + ultrasurf +藏青会 +谴责cnn +供产谠 +傥文化 +供铲傥 +股票歌 +股市版 +股民苦 +轮子功 +贡产谠 + www99kicn +幼香阁 +霸奴娇 +摸奶门 +藏字石 +温加饱 +无官正 +胡紧掏 +亡秦石 +温小萌 +温云松 +温假保 +朱容鸡 +京c53011 +胡紧套 +温嫁饱 +汪兆钧 +林保华 +共残党 +杨友林 +曹炎焱 +颜跃明 +宁b00077 +高智晟 +蕐彥永 +共惨党 + lhj114com + shsdlb163 +张博树 +虎劲涛 +汪达林 +罗永忠 +邓玉娇 +赵无眠 +普恩富 +哄铲谠 +拱产谠 +涂远高 +胡妖邦 +姜折民 +供产档 +工产谠 +辛灏年 +批评谠 +江折民 +徐其耀 +汪兆均 +赵昌林 +罗静虹 +谭海华 +皖ok0332 +徐国元 +武思伦 +湘dy5707 +郑筱萸 +陈相贵 +佘祥林 +孔德新 +苗国辉 +王直桂 +刘清江 +柴铁民 +批判邓 +陈振翊 +王同信 +常俊亚 +俞大纯 +姬胜德 +钟圣文 +向首明 +毕晓哲 +镡京湘 +杨晓陆 +黄齐帆 +吾子续 +任其良 +奥nmd运 +无子诗 +任不寐 +吴振海 +岩帅王 +刁爱青 +耿庆国 +翁文波 +龙小霞 +骂四川 +吕笃功 +吴升标 +阳晓东 +猪容鸡 +张沛良 +肖敬明 +黄伟木 +翟秀枝 +王建泽 +林嘉祥 +猪叫石 +唐雪凝 +曾金燕 +林松岭 +杨佳案 +杨湘洪 +唐徳刚 +中泡委 +张伯笠 +崔阎王 +推碑图 +奥巴毛 + 137388878 + 171752945 + 271265850 +301医院 +314事件 +371工程 + 375792088 + 4618-9173 + 51ini.com + 563924795 +571工程 + 576591512 + 597708162 +6.4事件 + 601184337 + 634706444 + 756235557 + 811693788 + 811782205 + 859800299 + 870530092 + 910049455 + 937158678 + 949081180 + 951400296 + 974997851 + freechina + huangdies + hypermart +JGT发帖 + peacehall + QQGGDDYYL + RedCorner + renminbao + Triazolam + UltraSurf + wenjiabao + woyaobaby + zhengjian + zhouenlai + zhurongji +爱姐妹 +愛姐妹 +安魂网 +安立敏 +安眠药 +巴拉斯 +巴特尔 +白立朴 +白皮书 +包送车 +包娃衣 +北京帮 +被立王 +避孕套 +变声器 +變聲器 +病不起 +病业说 +伯希来 +捕鱼机 +捕鱼器 +擦鞋机 +蔡崇国 +藏春阁 +藏春閣 +藏妇会 +曹长青 +曹刚川 +草你妈 +禅密功 +長瀨愛 +超声波 +朝河蘭 +陈炳基 +陈建华 +陈金龙 +陈破空 +陈希同 +陈小同 +陈雄彪 +陈宣良 +陈一谘 +陈志坤 +陈总统 +程方鹏 +程铁军 +程渭山 +迟浩田 +除湿机 +慈悲功 +粗口歌 +崔会烈 +催泪弹 +打保单 +打飞机 +打砸抢 +大参考 +大盖帽 +大蓋帽 +大花逼 +大记元 +大跃进 +大澤惠 +代发贴 +代发帖 +代缴税 +戴海靜 +戴相龙 +挡坦克 +党妈妈 +党文化 +邓二世 +邓小平 +邓笑贫 +鄧小平 +狄玉明 +第三党 +第四代 +电子狗 +電子狗 +钓鱼岛 +丁关根 +丁子霖 +定情粉 +定情药 +董宜胜 +动态网 +冻干粉 +賭博粉 +杜智富 +多美康 +恩诺欣 +发正念 +法国游 +法拉盛 +樊守志 +反人类 +反社会 +饭岛爱 +飯島愛 +方励之 +方舟子 +方祖岐 +防拍器 +仿云石 +飞机票 +斐得勒 +费良勇 +分家在 +分析王 +封从德 +冯东海 +冯素英 +冯勇彬 +府软弱 +付申奇 +傅成玉 +傅申奇 +傅志寰 +干死你 +干以胜 +幹擾器 +高立新 +高文谦 +高自联 +搞晚会 +搞晚會 +割肉人 +葛振峰 +工自联 +公子党 +公子族 +勾清明 +狗卵子 +古怪歌 +古拉格 +关卓中 +光端机 +桂世镛 +郭伯雄 +郭罗基 +郭岩华 +国民党 +韩东方 +韩联潮 +韩杼滨 +何德普 +核设施 +核污染 +贺邦靖 +黑皮书 +黑社会 +黑社會 +黑手党 +红病历 +红灯区 +红卫兵 +红血丝 +宏踏鞋 +洪巨平 +洪哲胜 +呼喊派 +胡春华 +胡锦滔 +胡锦淘 +胡进涛 +胡景涛 +胡下台 +胡耀邦 +胡耀帮 +胡中央 +华藏功 +华国锋 +华建敏 +黃麗滿 +黄慈萍 +黄褐斑 +黄华华 +黄金书 +黄丽满 +黄霉素 +黄作兴 +回良玉 +悔过书 +昏迷剂 +霍英东 +积克馆 +吉炳轩 +贾庆林 +贾廷安 +贾育台 +贾治邦 +賈慶林 +假教育 +监控器 +監聽寶 +監聽器 +監聽王 +减肥药 +简鸿章 +建国党 +剑教材 +江八点 +江恶人 +江公子 +江黑心 +江祸心 +江家帮 +江姐问 +江姐問 +江锦恒 +江人马 +江三秀 +江神经 +江梳头 +江戏子 +江宰民 +江择min +江泽慧 +江澤民 +江者民 +江浙民 +江作秀 +姜春云 +姜凤阁 +降灾民 +酱猪媳 +交友网 +焦焕成 +教养院 +揭批书 +解厚铨 +解学智 +解振华 +金道铭 +金舜禹 +金尧如 +金银焕 +进口车 +京夫子 +经租房 +晶白体 +净白体 +净水器 +靖志远 +军警靴 +军械所 +卡耐基 +开天目 +開髮票 +看中国 +康成元 +康涛杰 +靠你妈 +控制器 +扣应队 +酷刑罪 +邝锦文 +赖昌星 +攔截器 +郎咸平 +老虎機 +雷鸣球 +黎安友 +黎阳评 +黎陽評 +黎智英 +李长春 +李長春 +李崇礼 +李崇仁 +李崇禧 +李传卿 +李大尸 +李大师 +李弘旨 +李红痔 +李宏智 +李洪宽 +李洪痣 +李洪誌 +李鸿志 +李鸿智 +李继耐 +李兰菊 +李岚清 +李嵐清 +李老师 +李良辉 +李瑞环 +李瑞環 +李少民 +李淑娴 +李旺阳 +李文斌 +李向东 +李小朋 +李小鹏 +李远哲 +李遠哲 +李总理 +李总统 +里藏春 +连胜德 +练习器 +梁光烈 +梁擎墩 +廖锡龙 +林长盛 +林金钱 +林樵清 +林慎立 +令狐安 +令计划 +刘宾深 +刘宾雁 +刘春良 +刘国凯 +刘华清 +刘俊国 +刘凯中 +刘奇葆 +刘千石 +刘山青 +刘少奇 +刘士贤 +刘文胜 +刘晓波 +刘晓竹 +刘永川 +六●四 +六一零 +龙虎豹 +龙新民 +龍虎豹 +吕京花 +吕秀莲 +铝热剂 +罗礼诗 +雒树刚 +马大维 +马良骏 +马三家 +马时敏 +马自达 +麦角酸 +毛厕东 +毛厕洞 +毛光烈 +毛如柏 +毛一鮮 +蒙古独 +蒙进喜 +迷歼药 +迷殲藥 +民进党 +闵耀中 +名山县 +魔难论 +末世论 +莫伟强 +牟新生 +木犀地 +南京大 +能力主 +倪育贤 +倪志福 +你妈的 +你奶奶 +你娘的 +你全家 +你他妈 +钮茂生 +女教師 +女神教 +欧泽高 +帕萨特 +拍花子 +拍肩迷 +潘国平 +喷雾型 +彭丽媛 +平银芳 +破碎机 +蒲海清 +濮洪九 +朴鸣呼 +曝光王 +七宗罪 +荨麻疹 +钱国梁 +钱其琛 +钱运录 +潜在用 +抢答器 +抢粮记 +抢圣火 +羟丁酸 +竊聽器 +钦本立 +清官团 +清华帮 +群发器 +群發器 +热比娅 +仁青加 +日死你 +萨斯病 +赛克网 +三面翻 +上海帮 +尚福林 +烧国旗 +邵家健 +盛光祖 +盛华仁 +失忆药 +失意药 +失意藥 +十八大 +十八禁 +十八摸 +石云生 +石宗源 +时时彩 +实际神 +视眼镜 +手拍肩 +刷淘宝 +刷信誉 +双十节 +司马晋 +司马璐 +司徒华 +斯鑫良 +四川独 +四人帮 +四小码 +四种当 +四種當 +宋书元 +宋祖英 +苏丹达 +苏绍智 +苏晓康 +宿命论 +他娘的 +它妈的 +塔形流 +太阳城 +太子党 +太子黨 +覃志刚 +探测狗 +探測狗 +汤光中 +唐柏桥 +唐家璇 +腾文生 +滕久明 +滕文生 +天安门 +天安門 +天灭中 +天要灭 +天要亡 +天音功 +田凤山 +田纪云 +通示达 +统一教 +统治术 +偷听器 +透視器 +凸点装 +涂运普 +退改离 +脫衣舞 +外围码 +万润南 +万晓东 +万言书 +王宝森 +王炳章 +王超华 +王辅臣 +王涵万 +王沪宁 +王进发 +王军涛 +王力雄 +王瑞林 +王润生 +王若望 +王松昌 +王韦景 +王维林 +王希哲 +王秀丽 +王冶坪 +隗福临 +尉健行 +慰安妇 +魏京生 +魏新生 +温宝宝 +温家宝 +温家保 +温家堡 +温假饱 +温下台 +温爷爷 +温元凯 +温总理 +溫家寶 +瘟假鸨 +文字狱 +文字獄 +邬书林 +无帮国 +无网界 +吳邦國 +吴百益 +吴邦国 +吴方城 +吴官正 +吴弘达 +吴宏达 +吴基传 +吴仁华 +吴学灿 +吴学璨 +吴野渡 +無網界 +無修正 +五毛党 +伍绍祖 +武腾兰 +武藤兰 +武藤蘭 +奚国华 +项怀诚 +项小吉 +项宗西 +消防队 +消防隊 +消业论 +硝化棉 +小参考 +小电影 +小来子 +小泽圆 +小澤園 +谢长廷 +谢选骏 +谢中之 +新景隆 +新语丝 +新诸侯 +星火报 +性伴侣 +性教官 +性网站 +性網站 +性游戏 +徐邦秦 +徐才厚 +徐匡迪 +徐适龄 +徐水良 +许家屯 +学生妹 +学位证 +学习班 +学自联 +雅马哈 +严家其 +严家祺 +阎明复 +杨怀安 +杨建利 +杨思敏 +杨勇芳 +杨月清 +楊思敏 +姚月谦 +搖頭丸 +摇头玩 +业力轮 +叶子楣 +夜总会 +夜總會 +一本道 +一通功 +遗忘药 +抑制剂 +易丹轩 +易志熹 +银行卡 +尹庆民 +隱形鏡 +由喜贵 +于大海 +于浩成 +于幼军 +余英时 +於淼林 +於幼軍 +宇明网 +玉蒲團 +元极功 +袁纯清 +袁伟民 +远志明 +云石灯 +在十月 +昝爱宗 +曾培炎 +曾慶紅 +张宏堡 +张丕林 +张万年 +张伟国 +张文彬 +张文斌 +张五常 +张意伟 +张昭富 +张志良 +张志清 +張丕林 +張五常 +張小平 +赵海青 +赵品潞 +赵铁锤 +赵晓微 +侦听器 +真善美 +正见网 +支联会 +中国猪 +周天法 +朱容基 +朱镕基 +朱鎔基 +朱颜血 +猪聋畸 +壮阳药 +习仲勋 +贺国强 +贺子珍 +周永康 +李德生 +王岐山 +姚依林 +李源潮 +李干成 +戴秉国 +刘延东 +刘瑞龙 +俞正声 +薄一波 +周小川 +周建南 +江绵康 +李小琳 +朱云来 +胡海峰 +共框非 +性启蒙 +弘法体 +李屠夫 +圆明网 +艳照门 +次下跪 +叶剑英 +李先念 +汪东兴 +韦国清 +乌兰夫 +刘伯承 +许世友 +纪登奎 +苏振华 +余秋里 +张廷发 +陈永贵 +陈锡联 +聂荣臻 +徐向前 +邓颖超 +杨尚昆 +杨得志 +宋任穷 +胡乔木 +廖承志 +秦基伟 +陈慕华 +李铁映 +李锡铭 +杨汝岱 +吴学谦 +胡启立 +芮杏文 +邹家华 +谭绍文 +王汉斌 +任建新 +于永波 +傅全有 +王乐泉 +王兆国 +刘云山 +张立昌 +张德江 +定位器 +上分器 +退币王 +性生活 +艳丽片 +001工程 +妈妈的 +媽媽的 +他妈的 +他媽的 +倔宠儿 +错别字 +毒鸡蛋 +潜规则 +现场脱 +节电王 +刘德华 +沁园春 +无删版 +社会: +炸超市 +炸广州 +王志平 +包尔汉 +曹查理 +醋酸酐 +崔晓汉 +地西泮 +赌恒指 +发帖机 +高句丽 +共残拳 +海洛因 +黑索今 +黄龙云 +鸡鸭恋 +可卡因 +猎头者 +麻黄素 +毛新宇 +毛远新 +毛致用 +灭门惨 +内蒙古 +虐之恋 +七日情 +抢劫药 +全树仁 +燃烧弹 +沙菲片 +手榴弹 +双姝艳 +瘟假报 +五套法 +性妲已 +许宗衡 +伊波拉 +怡红院 +异丙嗪 +朱小丹 +总输记 +女人费 +三秒倒 +投注站 +PCB抄板 +PCB样机 +PCB线路 +安街逆 +安门事 +败培训 +办本科 +辦毕业 +毕业證 +苍蝇水 +察象蚂 +代发邮 +代理票 +导人最 +得财兼 +灯草和 +等屁民 +电话监 +甸果敢 +都当警 +发牌绝 +粉末型 +钢针狗 +共王储 +国库折 +果敢地 +豪圈钱 +华帝国 +华门开 +划老公 +挥发型 +活不起 +机定位 +机号定 +机号卫 +机卡密 +江太上 +金扎金 +敬请忍 +举国体 +可提玛 +克千术 +来福猎 +李咏曰 +丽媛离 +聊斋艳 +令家党 +伦理片 +玛雅预 +氓培训 +民储害 +南充针 +拍肩型 +牌技网 +普通嘌 +惹的国 +人真钱 +认牌绝 +韶关斗 +韶关旭 +失眠药 +世界通 +试答案 +是躲猫 +手机跟 +手机监 +手机窃 +手机追 +售单管 +售冒名 +售五四 +售信用 +术牌具 +水阎王 +替人体 +天朝特 +维汉员 +委坐船 +瘟加饱 +瘟假饱 +乌蝇水 +无抵押 +喜贪赃 +香烟型 +协晃悠 +新建户 +姓忽悠 +晕倒型 +炸立交 +针刺案 +针刺事 +众像羔 +州三箭 +装弹甲 +安眠藥 +暗访包 +拜大哥 +避孕膜 +波推龙 +不查都 +不查全 +踩踏事 +苍山兰 +操了嫂 +操嫂子 +插屁屁 +车牌隐 +惩贪难 +充气娃 +冲凉死 +答案包 +打标语 +打错门 +打死人 +大嘴歌 +代表烦 +代您考 +代讨债 +代追债 +贷借款 +党后萎 +导爆索 +导叫失 +导小商 +到花心 +的同修 +等级證 +递纸死 +电警棒 +蝶舞按 +顶花心 +顶贴机 +顶帖器 +东京热 +东伊运 +東京熱 +董元辰 +毒蛇钻 +段桂清 +躲猫猫 +俄羅斯 +儿园惨 +儿园砍 +儿园杀 +儿园凶 +发贴机 +法能功 +范燕琼 +仿真证 +佛同修 +福香巴 +府包庇 +妇销魂 +富民穷 +冈本真 +岡本真 +港馬會 +港鑫華 +搞媛交 +告洋状 +跟帖器 +狗日的 +乖乖粉 +官商勾 +国家妓 +国统会 +國內美 +哈狗帮 +海访民 +和狗交 +和狗性 +和狗做 +紅色恐 +胡适眼 +护卫团 +激光汽 +级办理 +级答案 +集体腐 +甲虫跳 +甲流了 +简易炸 +江丑闻 +江嫡系 +揭贪难 +姐服务 +姐兼职 +姐上门 +警用品 +就爱插 +就要色 +绝食声 +开邓选 +砍杀幼 +砍伤儿 +康生丹 +康跳楼 +考考邓 +考联盟 +考前付 +考试保 +控制媒 +骷髅死 +乐透码 +李晓英 +力月西 +利他林 +联盟党 +聯繫電 +领土拿 +龙虎斗 +隆手指 +陆同修 +伦理大 +伦理毛 +落霞缀 +漫步丝 +忙爱国 +妹上门 +门保健 +门徒会 +門服務 +免电灯 +摩小姐 +木齐针 +幕前戲 +妞上门 +女技师 +女上门 +鸥之歌 +拍肩神 +普提功 +切听器 +勤捞致 +清純壆 +情妹妹 +琼花问 +娶韩国 +全真证 +容弹量 +柔胸粉 +如厕死 +三网友 +色电影 +色妹妹 +色小说 +杀指南 +山涉黑 +上门激 +烧瓶的 +韶关玩 +社会混 +深喉冰 +神七假 +沈昌功 +生被砍 +生踩踏 +生意宝 +圣殿教 +狮子旗 +十八等 +实体娃 +士的年 +士的宁 +式粉推 +视解密 +手木仓 +售纯度 +售防身 +售狗子 +售热武 +售三棱 +售左轮 +书办理 +丝情侣 +丝足按 +司法黑 +四博会 +四大扯 +苏家屯 +速取证 +蹋纳税 +泰兴幼 +泰州幼 +特工资 +特上门 +田田桑 +田停工 +铁血师 +同盟党 +偷啪,dv +偷肃贪 +偷偷贪 +王立军 +王益案 +网民案 +网民诬 +伪政府 +温影帝 +纹了毛 +五套功 +五月天 +午夜电 +午夜极 +雾型迷 +习进平 +习晋平 +洗澡死 +陷害案 +陷害罪 +香港彩 +硝化甘 +新疆叛 +新疆限 +新搪人 +性服务 +性伙伴 +徐玉元 +学位證 +亚硒酸 +严晓玲 +言论罪 +氧化汞 +恙虫病 +要泄了 +液体炸 +伊皮恩 +遗情书 +乙醇腈 +乙硼烷 +乙酸汞 +婴儿命 +雍战胜 +永伏虫 +幽谷三 +游精佑 +愚民同 +愚民政 +与狗性 +冤民大 +鸳鸯洗 +原装弹 +袁腾飞 +援藏网 +韵徐娘 +遭便衣 +遭到警 +择油录 +张春桥 +张宏宝 +张文中 +张志新 +针刺伤 +针刺死 +政论区 +植物冰 +指纹膜 +指纹套 +中办发 +昼将近 +主神教 +属灵教 +装消音 +尊爵粉 +黄小说 +性技巧 + 11msu.com + 1667677'*' + 5579-8676 + 562109065 + 631008986 + 634681434 + 707700266 + 764411233 + 813988700 + 893919854 + 931711182 + 983612714 + 992910953 + rrmrw.com + weld8.com + wsf76.com +阿勒泰 +毕业证 +蹭网卡 +车牌号 +电子眼 +工婚恋 +后附款 +零定金 +媒人网 +免定金 +哪里找 +奶油冰 +企业家 +情侣装 +秋秋号 +熟媒人 +探伤机 +网恋网 +先验票 +易德富 +张会计 +找小姐 +找鸭子 +真本科 + yxly6.com +鸡皮肤 +精华液 +去鸡皮 +马嘉爵 +傅怡彬 +太石村 + bbc.co.uk +明心网 +明思网 +银龙岛 +留园网 +蒋世华 +綦彦臣 +吴一然 +李毅斌 +欧阳懿 +陶海东 +蔡陆军 +杜导斌 +罗长福 +王小宁 +马亚莲 +郑贻春 +李建平 +许万平 +任自元 +李元龙 +郭起真 +陈秋兰 +白秀华 +邓力群 +周恩来 +宋庆龄 +孙中山 +彭德怀 +董必武 +陈独秀 +瞿秋白 +向忠发 +蒋介石 +宋美龄 +蒋经国 +蒋方良 +马英九 +长濑爱 +小泽园 +朝河兰 +大泽惠 +女教师 +无修正 +於幼军 +司法部 +公检法 +检察院 +信产局 +不爱党 +反对党 +辛灝年 + tiananmen +四事件 +4事件89 +法某功 +邓矮子 +伊斯兰 +劣等人 +白头山 +四六级 +收小弟 +帮招人 +国办发 +眼角膜 +天下彩 +卖自己 +做网站 + dragonmen +斗地主 +男妇科 +畜牧局 +短期租 +脂膜炎 +牛郎店 +长寿枕 +鼻炎枕 +颈椎病 +腰椎病 +香薰SPA +牙周炎 +牙周病 +口腔科 +防刺服 +长警棒 +警戒带 +华域通 +制幻剂 +性器具 +射鱼器 +江病危 +监视器 +会计证 +八段锦 +宝莲灯 +彩虹剑 +成龙记 +成仁记 +春闺梦 +春欲手 +大练士 +大侠魂 +百性阁 +御花王 +俗人岛 +夜猫网 +恶魔岛 +不夜城 +品色堂 +買到槍 +加密狗 +截听器 +火车票 +遥控器 +慢转器 +调校器 +倒转器 +节电器 +减重器 +通行证 +复制器 +复制机 +复制卡 +隐性笔 +遥控锁 +探测门 +检测器 +接收机 +买小孩 +飞天冲 +开门红 +二踢脚 +飞天雷 +卖角膜 +卖骨髓 +硝酸汞 +碘化汞 +溴化汞 +羰基镍 +硒酸钠 +癸硼烷 +戊硼烷 +乌头碱 +藜芦碱 +碘甲烷 +丙烯醛 +二羟基 +丙炔醇 +乙烯砜 +地高辛 +花青甙 +黄降汞 +红降汞 +三仙丹 +醋酸汞 +红矾钠 +羰基铁 +四乙锡 +钒酸酐 +锇酸酐 +祖母绿 +翡翠绿 +巴黎绿 +草地绿 +二硼烷 +硼乙烷 +十硼烷 +十硼氢 +五硼烷 +芥子气 +白路新 +附子精 +赛丸丁 +尼古丁 +计明胺 +杰莫灵 +卡巴考 +丙烯腈 +氮丙坏 +吖丙啶 +高哌啶 +烯丙胺 +甲基碘 +二硝酚 +烯丙醛 +败脂醛 +巴豆醛 +烯丙醇 +苯硫酚 +巯基苯 +卡巴醌 +卡波醌 +二噁英 +马桑苷 +回苏灵 +纽瓦克 +谷赛昂 +杀螨隆 +多灭灵 +克螨隆 +脱麦隆 +大灭虫 +杀螟畏 +毒虫畏 +杀虱多 +氧乐果 +治线灵 +西梅脱 +敌死通 +三赛昂 +益赛昂 +易赛昂 +乙赛昂 +保棉丰 +伐线丹 +力满库 +阿米吨 +棉花宁 +福太农 +扑打杀 +扑打散 +敌敌畏 +杀螟松 +速灭虫 +速灭松 +苏米松 +稻丰散 +益尔散 +爱乐散 +敌克威 +庚硫威 +久效威 +肟吸威 +灭害威 +灭多威 +灭多虫 +灭索威 +乙肟威 +克百威 +呋喃丹 +虫螨威 +自克威 +兹克威 +伐虫脒 +抗螨脒 +抗虫威 +多防威 +肟杀威 +棉果威 +虫草灵 +杀线威 +草肟威 +敌蝇威 +涕灭威 +涕灭克 +铁灭克 +腈叉威 +恶虫威 +苯恶威 +异索威 +异索兰 +农螨丹 +灭扫利 +凯素灵 +凯安宝 +保棉丹 +康素灵 +放线酮 +农抗101 +地乐施 +特乐酚 +地乐酚 +敌磺钠 +敌克松 +地可松 +不膏津 +硫特普 +触杀灵 +苏化203 +治螟灵 +西力生 +谷乐生 +灭蚜胺 +法尼林 +敌锈酮 +毒菌锡 +艾氏剂 +狄氏剂 +毒杀芬 +克灭鼠 +克杀鼠 +杀鼠灵 +华法灵 +灭鼠灵 +杀鼠迷 +立克命 +溴鼠隆 +敌拿鼠 +鼠得克 +灭鼠安 +野鼠净 +灭鼠丹 +扑灭鼠 +灭鼠优 +抗鼠灵 +抗鼠灭 +没鼠命 +毒鼠强 +鼠立死 +鼠特灵 +鼠克星 +灭鼠宁 +伏鼠醇 +杀它仗 +溴敌隆 +乐万福 +地戈辛 +助听器 +VPN代理 +32-羟基 +迷欲水 +克他命 +失忆水 +蒙汉药 +乖乖水 +听话药 +亲密药 +快樂丸 +欢乐丸 +甩头丸 +打牌药 +赢钱药 +微音器 +切聼器 +凯安拓 +富国者 +优比特 +卫星狗 +卫星眼 +反雷达 +预警器 +翻牌机 +征服者 +金战神 +南极星 +路耐士 +硝酸钾 +硝基胍 +硝基脲 +持屈儿 +海西尔 +黑索金 +喷特儿 +继爆管 +导火索 +烟火剂 +梯恩梯 +苦味酸 +赛力散 +敌蚜胺 +胡椒醛 +青蒿素 +黄体酮 +黃麻素 +小口径 +野营刀 +警示器 +勃朗宁 +侦查证 +乐透乐 +野人谷 +高仿真 +雷明登 +反测速 +硝酸胺 +可可碱 +咖啡因 +氮化铅 +花和尚 +硝酸甘 +驾驶证 +干扰王 +鸡尾酒 +浓硫酸 +翻转架 +潜伏者 +小黑豹 +硝酸铵 +朝鲜版 +大黑鹰 +力思曼 +麻黄碱 +羟亚胺 +自制式 +大威力 +操表姐 +接收器 +飞鹰A25 +导爆管 +左轮狗 +工字牌 +韦小宝 +亚梨沙 +吡啶胺 +OO2甲基 +123苯并 +OO2乙基 +雪狼T91 +影音盒 +吐根碱 +爱与性 +A4U在线 +级电影 +暴光王 +引暴器 +起爆器 +起暴器 +启暴器 +启爆器 +引爆器 +tnt制作 +tnt哪里 +伯莱塔 +巴雷特 +单管猎 +黄麻素 +人品币 +开心水 +麦角醇 +手拉AWP +土仿狗 +武士刀 +小飞虎 +小飞狼 +信用卡 +追风150 +水果冰 +影音棒 +仿真狗 +化学冰 +咖啡硷 +咖啡碱 +可可精 +姐妹花 +莋弊噐 +IED制作 +排漏弹 +雷明顿 +雷鸣登 +力斯曼 +春军团 +美洲豹 +咪咪爱 +金狐狸 +御花园 +摩洛客 +浓硝酸 +燃烧剂 +共享盒 +捕狗药 +色人阁 +色上色 +射钉弹 +射孔弹 +变号器 +改号器 +杀破狼 +松岛枫 +色网址 +幼幼论 +逍遥游 +小蜜蜂 +叶雨茗 +导航狗 +折叠狗 +阿兵哥 +警查证 +储蓄卡 +借记卡 +网银卡 +信号弹 +尼泊尔 +马士革 +译码器 +苯基醇 +附体记 +曲马多 +广陵传 +鸿图记 +护花剑 +花穿越 +降头师 +金赢传 +冷香谷 +猎芳谱 +猎魂纪 +领域战 +乱游记 +美人图 +梦想家 +妙人间 +魔尊曲 +千夫斩 +青云路 +穹游记 +群芳谱 +三折剑 +色哥哥 +色间道 +神风曲 +双姝记 +天如月 +嬉美图 +相河记 +消遥尊 +逍遥王 +逍遥尊 +小新娘 +邪艳曲 +修罗劫 +玄媚剑 +玄女经 +艳魂咒 +艳欲路 +妖刀记 +妖晶记 +鹰狼传 +游龙传 +诱君欢 +玉女盟 +珍珠令 +紫情绳 +生殖器 +大祚榮 +公开信 +火箭筒 +加弹器 +少精症 +手拉m14 +手拉狙 +开山刀 +花间曲 +手拉鸡 +猎木仓 +气木仓 +热兵器 +燃烧瓶 +起爆药 +弹簧刀 +蝴蝶刀 +妈妈色 +小鸡鸡 +色老汉 +潘金莲 +致幻剂 +代打卡 +聊天室 +艾滋病 +亡灵全 +电视棒 +翻牌器 +换牌器 +身份证 +电视卡 +彩信猫 +发爆器 +办假証 +色大嫂 +百凤宫 +色中色 +性酒吧 +老公们 +通天报 +认证书 +飞叶子 +草榴网 +黄图哥 +包射网 +唐人阁 +色客网 +妖狐网 +小雄传 +真人888 +爱良窝 +豪享博 +楼凤网 +情狐 +媚毒 +原点 +疯诉 +污黑 +路人 +琼觞 +缠上 +村医 +浴城 +村奴 +姐夫 +球讯网 +日博365 +博宝金 +浪妹网 +明升M88 +销售ppk +色聊网 +幼色网 +性影院 +性春吧 +Fing霸QQ +卖心脏 +刀努网 +薄码DVD +崔情水 +崔情粉 +白虎妹 +思巢网 +色播播 +色播器 +溜冰妹 +多夜情 +祼聊网 +气弹槍 +神之欲 +花荫露 +仿五四 +pcp配件 +三客优 +毒龙钻 +风月阁 +色窝窝 +释欲堂 +极乐岛 +都市缘 +救国P2P +色老头 +快色吧 +色一色 +色老妈 +tnt配方 +色婷婷 +妻色网 +卖藏刀 +买藏刀 +99%的冰 +神仙水 +人兽情 +性中性 +賣槍支 +色色岛 +找殺手 +增值税 +龙卷风 +十六大 +小灵通 +花园网 +18DY电影 +2005言论 + Government + 360vk.info + 799789.com + 86cryp.com + 928ddz.com + dc8888.com + dgldit.com + girl668.cn + hxzj08.com + lenven.net + ok0411.com + qyao909.cn + rhtzxc.com + rtgjfz.com + sosook.com + souker.com + toomore.cn + tuxilei.cn + usb3721.cn + vikecn.com + wtianx.com + wxttfs.com + xinkeor.cn + zjjvip.com +百乐2号 +逢8必灾 + 3caoh22ph3 +j糸己元 + wwwvipf4cn +巨h慎入 + seseyvmjcn +超虐高h + liuxue1668 +代榘l票 +帶榘l票 +何新1990 +8341部队 +陈liangyu + 8008103456 + johntitoer +普寧626 +A集中营 +a级情片 +>真美妙 + vangda.com +>我是猪 +>我該死 +E科士威 +拍肩,药 + 1140177463 + 12394'*'154 + 1298635486 + 1569053324 + 1738617380 + 1789178010 + 1819006630 + 1961025666 + 1969140008 + 5621o9 o65 + ayisou.com + c3h.com.cn + coooov.com + fangpz.com + liuyue.net + uuuwan.com + xueyaj.com + yvxuan.com + acomcn.com + ggkkjj.com + xcomcn.com + 17xyou.com + Falun Dafa + Li Hongzhi + epochtimes + oppression +8023部队 +免费q币 +core病危 +J总病危 +h搜神记 +十8和谐 +雪狼T9-1 + PixelawDog + StrongHDTV +4乙基铅 +2乙基汞 +4乙基锡 +4氧化锇 +丙烯1醇 +2吡咯酮 +抗霉素A +甲基1605 +high乐神 +手机Jian + qiān dàn +2硝基苯 +2硝基萘 +3硝基苯 +泽4氮烯 +a级大片 +4碳酰镍 +2氧化氮 +3氮化钠 +2甲弗林 +3氮杂苯 + 1963661267 +间苯3酚 +1元模具 +3级影片 +女人的b +zg60华旦 +手拉1911 +成都T恤 +叶子hash +狮王2012 +h片网址 +专卖g水 +直销g水 +订购g水 +宾馆群p +宾馆群P +庐江群P +欧美H片 +销售cp99 +petn制取 +国产H片 +petn制作 +PETN合成 +动漫H片 +快播H片 +Happy水QQ +ooxx人妻 +嫩B电影 +毒 配方 +日本H色 +供應M300 +销售M300 +18年纪念 +1969 尼木 +神鬼18妓 +27军军长 +美国c2007 + 02260504639 + 13295168065 + 13731903527 +64小時绞 + 1357'*''*'378 +第一次3p +眼镜oo型 +oo型眼镜 +sf一条龙 +红朝43年 +南航b2959 +97年南航 +t195和5034 +鲁h9656警 +b-阻断剂 + garden_news + humanrights + rexuebaobao + sanew-cable + zhenshanren +8.9事件 +安-眠-药 +法+輪+功 +干 你 妈 +共+产+党 +共+產+黨 +共+铲+党 +共.产.党 +共chang党 +護士24點 +老 婊 子 +李 洪 志 +蒙-汗-药 +迷-魂-药 +真n善n忍 +IM买卖通 +炸ZF大楼 +64杀学生 +93夜之女 +f.l.g旗帜 +38集团军 +卖qq号码 +黄 牙 签 +奶 油 冰 +BEELY官方 + sigline.gif +高压狗QQ +5氧化2钒 +4氧化2氮 +2-吡咯酮 +46级考试 +日本MARUI +36磅纯度 +81蚜克丁 +2仲丁基4 + FlexiSpyPRO + asianapples + spyflexispy +德国A1000 + 18289325866 + 15990489698 +qq賣獵槍 +狼友av网 +爱bb影院 +OK娱乐城 +av播放器 +快播av站 +亚洲3p图 +Hgame下载 +夫妻玩6P +庐江6P门 +庐江县6p +3U娱乐城 +安徽5P门 +膛线管qq +安徽5p门 +欧美se图 +亚洲se图 +气动狗QQ +掌心雷QQ +高仿证qq +警官证qq +就去97色 +真人21点 +黄se图片 +黄se电影 +黄se网址 +杜冷丁QQ +黄se小说 +黄se网站 +最新se站 +冰钻石qq +购买xwodi +qi槍专卖 +高压狗qq +qq卖手槍 +qq卖獵槍 +销售CS狗 +卖腎源QQ +卖腎臟QQ +买腎源QQ +卖冰钻QQ +卖鉆石QQ +卖冰磚QQ +李 宏 志 +真 善 忍 +死亡笔记 +帝国之梦 +投毒杀人 +强硬发言 +侦探设备 +手机复制 +天鹅之旅 +盘古乐队 +血腥图片 +手机魔卡 +轮暴致死 +黄网导航 +汕尾事件 +仁寿警方 +杀人事件 +赣江学院 +日本小泉 +车牌反光 +人体艺术 +传真群发 +美女做愛 +放荡青春 +电车之狼 +对日强硬 +军长发威 +公产小丑 +联国专员 +迪里夏提 +伊扎布特 +公产王朝 +边坝时间 +对华广播 +你退了吗 +茶余饭后 +秘密花园 +痴男发威 +超越红墙 +导演专访 +交换夫妻 +浮情浪子 +雪染飘朱 +凌虐玉门 +黑灯舞厅 +烈火凤凰 +鹿鼎记趣 +母之欲火 +四海龙女 +考验答案 +激流中国 +渊盖苏文 +昔有山西 +今有广东 +方丈哭曰 +经典语录 +春节晚会 +现代中国 +十大恶词 +性学教授 +出墙红杏 + go-vern-ment +新诗年鉴 +美国凯德 +中央军委 +苏东解体 +反右题材 +山西洪洞 +巨额骗储 +五奶小青 +红楼绮梦 +夫妇乐园 +黑星女侠 +狂风暴雨 +俪影蝎心 +舌战法庭 +清华网管 +一卡多号 +黑窑奴役 +山不过来 +股市民谣 +禁断少女 +官逼民反 +中原油田 +油田总部 +香港马会 +奴役童工 +计生风暴 +智能H3 +口头检查 +三句硬话 +阻无通畅 +民为法执 +美国之音 +求救遭拒 +手足口病 + 51ganrao.com + 52kanshu.net + 58yinshi.com + 97sesevk.com + chaolicy.com + city2046.com + hd315.gov.cn + hihigirls.cn + hyidc.com.cn + idea4ever.cn + myqzy.com.cn + pifuxuan.com + sosalary.com + texishop.com + tooogooo.com + wokuangmo.cn + xuxulove.com + yjtx2008.com +博翔团队 +皇冠投注 +替比夫定 +营销利剑 +出千工具 +香港总彩 +看底牌器 +董存瑞问 +考包粽子 +畅日套餐 +人民政腐 +届届失业 +吴琼hua问 +董cun瑞问 +体委高俅 +部长大禹 +何邪社会 +毒署署长 +三个呆婊 +警痞难辨 +莫友甲板 +慈夫万岁 +小姐陪吸 +官官皆贪 +劉胡蘭問 +专家万税 +朱閒基传 +逗逗小胡 +拒廉变腐 +小平无奈 +董存瑞说 +毛岸英问 +民工滔滔 +民间语录 +如此公仆 +一个涨字 +明年米贵 +福娃哭了 +逢是灾年 +磴在汶川 +举国同震 +神州共震 +震其国土 +震到国外 +震不死人 +不育不运 +四个大当 +搞怪福娃 +布什胡哥 +胡哥布什 +六零年苦 +中国悍匪 +日李万姬 +你乃人民 +裆的干部 +毛胜蒋败 +凯德原装 +刾德原裝 +香港ghb水 +手檆嘎犉 +炸彈製作 +教你做弹 +自殺手冊 +国足要命 +超越紅牆 +翻墙软件 +680u7d密道 +680p7d专业 +翻墙工具 +重启联通 +国足可笑 +远离国足 +牛奶三宝 +奶业内幕 +问奶牛去 +三鹿笑话 +三鹿黑幕 +三鹿300万 +面粉掺假 +海米抹红 +绿坝克星 +界浏览器 +桔子有虫 +橘子有虫 +种毒食品 +食品黑幕 +粪水腌制 +翻墙访问 +北航甲流 +足坛反赌 +黑道狂神 +侮辱藏人 +吾尔开希 +僧侣被捕 +中国断交 +焚烧寺庙 +凯度顿珠 +干扰火炬 +辱我中华 +果敢难民 +果敢战事 +針刺事件 +针扎事件 +針扎事件 +司机罢运 +贡傥覆灭 +不明针状 +不明針狀 +缅甸战事 +称供污圆 +新疆七五 +排华运动 +策反份子 +零八憲章 +家家难民 +石油兄鉴 +崇尚熊市 +忠告股民 +鱼肉散户 +股民跳楼 +新股民吧 +股市笑话 +套牢莽莽 +咏股伤怀 +股灾风光 +炒股國歌 +股市歡迎 +股民自编 +中石油版 +股市之痛 +股市被套 +问中石油 +股股下流 +股民别哭 +股市对联 +告股民书 +炒股泪歌 +股民默哀 +股民亏损 +益西彭措 +洪法交流 +远唤上师 +遥唤上师 +大糸己元 +修行盛世 +失传正统 +济世灵文 + himalayansky + karmapajenno +禁室培欲 +亚洲嫩苞 +消魂午夜 +街拍美臀 +紧身美臀 +插的好爽 +腋毛美女 +口罩同好 +胯下失守 +姐弟销魂 +群虐老婆 +鹿城娱乐 +缩紧后庭 +逃亡艳旅 +小姐秘籍 +清梅飘香 +浴室系列 +照日天劫 +玲珑孽怨 +妹妹爽图 +西苑风月 +魔刀丽影 +前妻禁欲 +特甲少女 +大腿舔食 +香艳文学 +欲海双艳 +都市花盗 +鋘售假幣 +考中答案 +鑫萢集坒 +杭州辩证 + masterkey258 +考试助手 + www7selangcn + passboxgmcom + 075533941960 + wa12568yahoo +英杰教育 + gjzjid666com + wwwtenyuncom + takeflash163 + xsddz2008com + chinachsicom + dabiaodkwcom + cuiqingnetcn + ltotiwangcom +考后给钱 + luoliaowzcom + zhukao360com + zhongguokjcf +教育考王 +诚信辦譪 +香港一类 + www198988net + hengxinkaocn + sofghg01sina + xinde158sohu +启鸣考务 + benma5588com + lwygh8796163 +保高分过 + sacredbuddha + xsbdz2008com + lunwen999com + wwwzbgamenet + dewang518com + qq1030515241 +程通办理 + qq1036371099 +恒顺贷考 + 053266637977 + wuhuan123com +五星宏辉 + 015806579353 + xsjdz2010com + wwwyiyeflcom +冠诚考务 +上海舒莲 +泰盛环球 + 588688kswcom + wwwkanbbinfo + shuibi88sohu + wwwjqcshagcn + gzdadeedu163 + cctvgouwucom + gzdadeeducom + jiachao666nl + qq1106392111 + qq1220096578 + wwwwin388com + wwwtyd1688cn + kuaidi123com + 045181087569 + sifazhukaocn + qq1198752945 + lihuanan2009 + pinsedidaicn + liuxuerzh163 + chengxinjycn + 52mingdaocom + 91chengrencn + 025bsdeducom + 82suncitycom + 189721783333 + 80suncitynet + luolewdwdcom + yycetkuucncn + 113928444430 + jiupinchacom +緒上辦譪 +天水辦譪 + 151581596416 + 82sumcitycom +竣捷考务 +英杰考务 + chinafzkjcom + chnanplascom + indiastudycn +无耻语录 +向党挑衅 +警车被砸 +官员别墅 +杀人卖尸 +殺人賣屍 +童工暗流 +童工市场 +兆山羡鬼 +零八宪章 +尸油辣条 +豪华葬母 +杨海举报 +雷人提案 +争议提案 +骇人提案 +袭击哨兵 +李佳事件 +麈柄坚挺 +父亲龙修 +巴东烈女 +永麦酒店 +石首命案 +抢尸行动 +石首尸首 +旭日打斗 +共慿主義 +河蟹社会 +韶关群殴 +万人抗暴 +油乱涨价 +韶关事件 +惨遭石刑 +霾雾侵袭 +痞子治国 +央视无耻 +朱瑟里诺 +万人上书 +任意羁押 +中央澄清 +温总太太 +托管造林 +百姓冤沉 +脱亚入世 +警车凭啥 +马德卖官 +厅长落马 +白勒依勒 +福娃变换 +胡总好棒 +郴州巨贪 +涉嫌倒把 +瀛台宴请 +巴克曼法 +招考黑幕 +军道杀拳 +想涨工资 +哄骗职工 +软弱外交 +东海中日 +落户古雷 +烧砸学校 +白桦气田 +买通砀山 +改卷内幕 +东莞童奴 +机场打砸 +蟾蜍搬家 +蟾蜍迁徙 +捐款作假 +非法裁减 +中日东海 +恶心部门 +中国洋奴 +杀婴凶手 +问责风暴 +植树造零 +开原游街 +杨佳列传 +三位昏官 +伸冤条幅 +普宁传闻 +刀客不朽 +袭击衙役 +离弃供谠 +离弃供傥 +小平转世 +李蕊蕊案 +揭黑厅幕 +检阅小姐 +亳州特警 +紫陽軟禁 +进京抓女 +丽媛习近 +马雅预言 +巨贪肖扬 +陇南事件 +赦免杨佳 +杨佳杀警 +上海杀警 +杨佳万岁 +白领陨落 +黑领升起 +黑领崛起 +集体端掉 +红鱼政权 +灰色宾馆 +警号0472'*' +沈婷之权 +谴责跑跑 +永康俞家 +石首事件 +浮山教案 +谭作人案 +周济捣蛋 +林昭因病 +刘和涉嫌 +谷歌退出 + 028-68228818 + 075521043777 +4.25事件 + LittleBuddha + Reminiscence + shehuibaitai +《苹果》 +《天音》 +阿不来提 +艾司唑仑 +艾斯海提 +爱国运动 +八荣八耻 +巴音朝鲁 +办高利贷 +办理大专 +辦理文憑 +辦理證件 +报告汇编 +北京当局 +北京高层 +北京海艺 +北京黑幕 +北京京郊 +北京美女 +北京小姐 +北京战争 +北京政权 +北京之春 +北美讲坛 +苯巴比妥 +变革之风 +变声电话 +變聲電話 +兵种教材 +波动少女 +波動少女 +财政是爹 +草莓牛奶 +超常科学 +陳方安生 +成佛做主 +传九退三 +春夏之交 +大家论坛 +大庆工潮 +大型地网 +大學騷亂 +代发广告 +代刻印章 +代人发帖 +党保平安 +党内权力 +党内权争 +党内危机 +党政人事 +德国宝马 +地方召会 +地块规划 +地下教会 +地下刊物 +地下先烈 +帝國之夢 +电动葫芦 +電車之狼 +電話攔截 +叮丙诺菲 +东方闪电 +东方时空 +董存瑞問 +动态代理 +賭博專用 +多吉才让 +多难兴邦 +反腐总攻 +方针定调 +防身药水 +放下生死 +飞扬论坛 +粉嫩小洞 +粉饰太平 +风雨神州 +服务人员 +服务上门 +服务小姐 +妇的哀羞 +复转军人 +高校騷亂 +高薪养廉 +高压锅炉 +哥言语录 +歌功颂德 +个人崇拜 +股票开户 +观音法门 +广安事件 +廣安事件 +国家安全 +国家机密 +国之利刃 +航星洗涤 +和平修练 +黑瞎子岛 +红魂网站 +红旗漫漫 +红色贵族 +红色角落 +红色恐怖 +红头文件 +虎胆雄心 +虎膽雄心 +花花公子 +华夏文摘 +话紫禁城 +换届隐忧 +黃色電影 +黃色圖片 +黄海事件 +惠澤社群 +及川奈央 +吉祥宝贝 +纪律检查 +家用天线 +家用卫星 +假人民币 +建定防火 +江泉集团 +江三条腿 +江泽公审 +阶级敌人 +揭个黑幕 +金澤文子 +津人治津 +禁忌试玩 +禁忌試玩 +京郊旅游 +惊悚空间 +精确答案 +驚悚空間 +警用教材 +警用设备 +军事标号 +军事地图 +军政名单 +軍長發威 +咖啡文化 +开机信息 +刊文回谢 +抗菌纤维 +考后付款 +考前发放 +恐怖分子 +恐怖牢笼 +恐怖牢籠 +恐懼殺手 +拉帮游说 +拉票贿选 +拉萨事件 +劳工观察 +李三共志 +李月月鸟 +连队资料 +联名上书 +练功群众 +两岸关系 +两个中国 +两派争斗 +两性狂情 +辽阳工潮 +猎杀熊猫 +临震预报 +灵修团体 +铃声下载 +令狐计划 +留四进三 +六月联盟 +六月聯盟 +绿叶电器 +伦理电影 +轮子小报 +毛都露出 +美国参考 +美女視頻 +蒙古回归 +蒙古之友 +咪达唑仑 +迷失北京 +秘密潜入 +民族矛盾 +民族问题 +末世劫难 +木子论坛 +奶头真红 +南华早报 +年春衫薄 +派系斗争 +盤古樂隊 +跑官要官 +泡沫经济 +皮指纹测 +品牌香烟 +槍決女犯 +槍決現場 +槍支彈藥 +强开工具 +秦青的幸 +轻舟快讯 +清场内幕 +清海师父 +权力瓜分 +权力核心 +群体灭绝 +群体事件 +群體事件 +人工少女 +人民真实 +人事任免 +人事推测 +人事预测 +人事预言 +仁吉旺姆 +瑞丽公司 +三个代表 +三個代表 +三浦愛佳 +山寨手机 +善恶有报 +商务时空 +上海交大 +上门小姐 +少儿不宜 +涉台政局 +神的教会 +神洲电影 +沈默殺手 +时代互联 +时代论坛 +时事论坛 +世界之门 +收取小费 +手工发贴 +手机铃声 +手机游戏 +手機復制 +手機跟蹤 +司法警官 +絲襪寫真 +死亡筆記 +死亡日志 +死亡日誌 +四川朱昱 +台海盾牌 +臺灣獨立 +滔天大罪 +淘宝白号 +淘宝收藏 +特别党费 +特务机构 +天鵝之旅 +天国乐团 +天互数据 +天津事件 +天伦王朝 +天宇二手 +偷窺有罪 +头号警花 +投毒殺人 +透視眼鏡 +透視照片 +突破技术 +屠龙别记 +外交论坛 +万达卫浴 +万能钥匙 +萬能鑰匙 +网络代理 +伪装美女 +偽裝美女 +魏东死亡 +温切斯特 +温休曾退 +文件秘密 +窝囊中国 +我虽死去 +乌兰木伦 +巫毒娃娃 +吳瓊花問 +吾尔开西 +吾尔凯西 +梧桐文化 +五出三进 +武汉办証 +侮辱老师 +夕樹舞子 +西山会议 +吸血莱恩 +吸血萊恩 +香港明报 +香港总部 +向巴平措 +消业之说 +心藏大恶 +新华举报 +新华内情 +新式军服 +新约教会 +信用危机 +兴华论谈 +星崎未來 +修改成绩 +学生信仰 +学生运动 +雪山狮子 +血色京机 +血色京畿 +血色黎明 +血腥圖片 +燕玲论坛 +燕南评论 +业力回报 +夜半加税 +夜勤病栋 +液压马达 +一帆通讯 +一军两策 +一中一台 +亿龙汽车 +异见人士 +异议人士 +易购手机 +易切削钢 +隱形噴劑 +英語槍手 +永磁吸盘 +优化官员 +友通科技 +诱发恶性 +宇宙真理 +宇宙主佛 +玉森集团 +域名备案 +战斗条令 +战役学纲 +找工总行 +找建总行 +找农总行 +找人发帖 +針孔攝像 +偵探設備 +争鸣论坛 +整形美容 +正浩净化 +正见周刊 +正念正行 +证券从业 +中国之春 +中國當局 +中华大众 +中华讲清 +中华时事 +中雷产品 +中央文件 +中央资料 +重庆钢构 +周刊纪事 +专科毕业 +专业顶帖 +专业发帖 +专业维修 +专业修理 +自殺指南 +自制手槍 +法新闻社 +白宫事件 +追查国际 +法网恢恢 +洪发交流 +绝食抗暴 +师傅法身 +联邦政府 +秘密文件 +机密文件 +政府文件 +隐私图片 +卫星电视 +广电总局 +飞凤春宵 +应召女郎 +雪肌夜叉 +禁宮秘史 +少女换衣 + chinaliberal + haokafei.com +秘密潛入 +师父法身 +电话询问 +中国特色 +当代八乱 +办公室手 +广元橘子 +正统文化 +震撼记录 +感动中国 +血腥时间 +最强阵容 +两岸才子 +中国性城 +基地组织 +校园招聘 +三鹿集团 +三鹿奶粉 +三鹿事件 +赤色杀意 +美国原装 +四川橘子 +风雷游戏 +幸运用户 +进入网站 +yahoo!奇摩 +百度空间 +有奖活动 +炸公交车 + www.2hand.cn +《九剑》 +《神灯》 +《仙笛》 +爱的精灵 +爱的色放 +爱情万岁 +案之孽杀 +八大谎言 +包娼包赌 +不再情牵 +差额选举 +赤足惊魂 +慈禧野史 +大乌拉尔 +倒卖土地 +电视共享 +丁丙诺啡 +毒残酷迫 +羔羊医生 +宫闱情变 +官商暴利 +国际公法 +國際公法 +黑狱圣女 +花街狂奔 +幻想玉女 +荒唐禁令 +吉瑟利努 +极度兽性 +家庭教师 +家有艳妻 +禁忌游戏 +绝世遗言 +空军会议 +恐怖袭击 +六大成绩 +灭亡中国 +七大谎言 +倩女销魂 +强震海啸 +氢氧化钠 +卿本佳人 +情难自制 +人肉腊肠 +入联公投 +山中艳谭 +尸蛊艳谭 +师生绮恋 +世纪大案 +世纪血腥 +双面媚娘 +双面女友 +四大怪事 +桃色香居 +特区爱奴 +田螺艳鬼 +玩女无罪 +我为卿狂 +无水乙醇 +五月樱唇 +午夜女郎 +西厢艳谭 +虾录情圣 +夏日狂情 +先烈来电 +新紅唇劫 +刑讯逼供 +杏林春暖 +性趣高手 +凶宅胭脂 +血染红唇 +鸭之一族 +艳绛勾魂 +杨白劳问 +一脱求生 +隐身装备 +与鸭共舞 +玉女聊斋 +欲火龙珠 +中港丽人 +中国储君 +中国太子 +中央十七 +中央团系 +钟馗嫁妹 +梓健特药 +美女写真 +开平受辱 +微型监控 +追踪定位 +足球投注 +527我爱妻 +led显示屏 +当官要精 +导人的最 +邓爷爷转 +都当小姐 +都进中央 +高就在政 +公开小姐 +官也不容 +还中国外 +兼职上门 +酒像喝汤 +据说全民 +克分析仪 +拉开水晶 +理各种证 +美元的月 +牌分析仪 +盛行在舞 +十类人不 +售一元硬 +争相自首 +志不愿跟 +作各种证 +《争鸣》 +阿凡提机 +爱液横流 +把病人整 +把学生整 +百乐二呓 +办理本科 +办理各种 +办理真实 +办理证书 +办理资格 +帮人怀孕 +谤罪获刑 +包青天机 +报复执法 +北京风波 +北省委门 +被指抄袭 +辩词与梦 +冰在火上 +博会暂停 +博园区伪 +部忙组阁 +部是这样 +财众科技 +策没有不 +抽着大中 +抽着芙蓉 +出成绩付 +穿透仪器 +传送答案 +春水横溢 +答案提供 +打死经过 +打砸办公 +当代七整 +当官在于 +党风日下 +党前干劲 +刀架保安 +等人老百 +等人是老 +等人手术 +地产之歌 +第二首都 +点金商务 +点数优惠 +电话交友 +洞小口紧 +恶势力操 +恶势力插 +发贴工具 +法力像佛 +法院给废 +房贷给废 +夫妻交换 +福尔马林 +福娃的預 +福娃頭上 +府集中领 +复印件生 +复印件制 +富婆给废 +改号软件 +港澳博球 +个邪的党 +各类考试 +工程吞得 +攻官小姐 +共青背景 +共字玄机 +狗屁专家 +鼓动一些 +官匪一家 +官因发帖 +光学真题 +广场事件 +国际投注 +国家软弱 +国家吞得 +国统纲领 +哈药直销 +红客联盟 +化学扫盲 +皇家轮盘 +回汉冲突 +火车也疯 +基本靠吼 +绩过后付 +集体打砸 +家一样饱 +家属被打 +解密软件 +进来的罪 +经典谎言 +警车雷达 +警方包庇 +警匪一家 +警民冲突 +究生答案 +九龙论坛 +酒象喝汤 +康没有不 +考前答案 +考前密卷 +考前预测 +考试机构 +考试联盟 +空和雅典 +控诉世博 +矿难不公 +拉线飞机 +狼全部跪 +雷人女官 +类准确答 +李大轮子 +理是影帝 +理做帐报 +力骗中央 +了件渔袍 +猎好帮手 +流血事件 +龙湾事件 +旅游新报 +罗斯小姐 +妈了个逼 +蟆叫专家 +买官卖官 +卖地财政 +猫眼工具 +每周一死 +免费电影 +民九亿商 +铭记印尼 +幕没有不 +泥马之歌 +你的西域 +怒的志愿 +女人和狗 +女任职名 +女士服务 +仆不怕饮 +奇迹的黄 +骑单车出 +千禧弘法 +钱三字经 +强权政府 +抢其火炬 +禽流感了 +清除负面 +区的雷人 +群起抗暴 +群体性事 +群众冲击 +人在云上 +任于斯国 +日月气功 +软弱的国 +瑞安事件 +三股势力 +扫了爷爷 +杀害学生 +煽动不明 +煽动群众 +商务快车 +涉嫌抄袭 +神韵艺术 +圣火护卫 +圣战不息 +十大谎言 +十个预言 +实学历文 +守所死法 +司长期有 +私房写真 +死法分布 +死刑现场 +死要见毛 +诉讼集团 +太王四神 +泰兴镇中 +涛一样胡 +讨厌中国 +天推广歌 +庭审直播 +通钢总经 +网民获刑 +伪基百科 +谓的和谐 +闻被控制 +我的西域 +吾爾開希 +务员答案 +务员考试 +西服进去 +席临终前 +席指着护 +先烈纷纷 +现金投注 +现在的党 +泄漏的内 +兴中心幼 +行长王益 +性推广歌 +学生领袖 +血腥清场 +丫与王益 +一小撮别 +乙撑亚胺 +乙烯甲醇 +影子政府 +有偿服务 +有偿捐献 +有奶不一 +右转是政 +宇宙毁灭 +育部女官 +预测答案 +真钱斗地 +证到付款 +证生成器 +指纹考勤 +制证定金 +中的班禅 +中国不强 +中央黑幕 +种公务员 +种学历证 +重阳兵变 +州大批贪 +宙最高法 +住英国房 +转是政府 +赚钱资料 +追债公司 +自动群发 +总会美女 +足球玩法 +左转是政 +办理文憑 +办理专科 +插入爽网 +答案传输 +考生答疑 +美女服务 +妹妹服务 +取得本科 +取得专科 +热辣美图 +人体写真 +少儿勿入 +少女图片 +声色场所 + 196.914.0008 + kwjy-edu.com + xkpx-edu.com +安防系统 +办出生证 +办真学历 +本科业证 +地税发嘌 +公司网址 +联系方式 +买大专文 +买真学历 +免费试用 +全国包送 +商品销售 +天逸代攷 +网页游戏 +武逆乾坤 +星辉汽贸 +易搜手机 +宅男社区 +宅女社区 +招代理商 +恶意灌水 +传奇世界 +信息群发 +确吉尼玛 +星崎未来 +夕树舞子 +金泽文子 +三浦爱佳 +执法犯法 +土匪政府 +国家信息 +不办人事 + gongchandang +学院爆动 +猜宝工具 +押宝工具 +电表遥控 +电表干扰 +民族冲突 +劣等民族 +圣战组织 +海军部署 +陆军部署 +空军部署 +四大舰队 +提供答案 +代理记帐 +司法考试 +征兵计划 +收购文物 +有偿献血 +网络电话 +域名注册 +网络空间 +电子邮局 +主机租用 +网站建设 +域名服务 +养殖基地 +企业增资 +代理记怅 +月赚千元 +群发软件 +疯狂免费 +上网娱乐 +富婆找鸭 +远程遥控 +游戏代币 +炎症治疗 +精美女包 +借腹生子 +试管婴儿 +酒店预订 +养殖总场 +转让车票 +破坏火炬 +丰胸美体 +搬家公司 +小吃技术 +山鸡养殖 +山鸡孵化 +会计培训 +电脑培训 +烟囱新建 +烟囱拆除 +犯罪记录 +宾馆住宿 +生殖中心 +胚胎移植 +不孕不育 +围巾披肩 +服饰配件 +仁济医院 +性欲冷淡 +男人元素 +增大增粗 +性保健品 +回收烟酒 +烟酒回收 +立体培训 +汽车租赁 +家政服务 +祛斑胶囊 +肌肉劳损 +发型设计 +烫发染发 +牙齿松动 +牙龈出血 +牙齿出血 +牙齿美白 +口腔美容 +四环素牙 +美白牙齿 +口腔修复 +活动义齿 +全口义齿 +口腔正畸 +牙齿正畸 +口腔卫生 +牙齿检查 +私人牙医 +口腔保健 +口腔护理 +防爆盾牌 +防爆头盔 +警用皮鞋 +强光手电 +警用水壶 +防割手套 +水晶照片 +网络推手 +软文发布 +快速删贴 +清理负面 +删贴公司 +负面撤稿 +后庭专区 +肛栓母狗 +男根增长 +先帝病危 +江总病危 +江已病危 +空调移机 +钢琴搬运 +小说合集 +奇摩登入 +爱上小姨 +安然轻尘 +暗夜情魔 +霸艳邪君 +霸占芙蓉 +百花故事 +百花盛放 +百年庆典 +北京byebye +冰峰魔恋 +不得不贱 +不死邪神 +不死医神 +步步生莲 +残阳絮语 +苍穹之怒 +藏娇都市 +超级教师 +超级农民 +超级仙医 +超级学生 +超级异能 +处子之作 +穿越进化 +春乡艳少 +春意凛然 +纯属挑逗 +大唐寻芳 +丹药大亨 +帝王艳梦 +第一无赖 +氣狗销售 +销售钻石 +帝国夜色 +夜色贵族 +农夫电影 +夜色王朝 +网上赌钱 +收养宝宝 +真钱游戏 +收养孩子 +供应假幣 +手机改号 + FlexiSpy PRO +手驽配件 +tnt的制作 +翻转车牌 +政协车证 +论坛群发 +电子监控 +车防盗器 +拐卖婴儿 +拐卖儿童 +买卖婴儿 +重铬酸钠 +迭氮化钠 +马钱子碱 +番木鳖碱 +丙撑亚胺 +巯基乙醇 +苯基硫醇 +环己烯酮 +氨基吡啶 +乙酸苯汞 +海葱糖甙 +放线菌素 +硝酸高汞 +碘化高汞 +溴化高汞 +四碳酰镍 +维也纳绿 +维埃克斯 +路易氏剂 +亚当氏气 +二氧化氮 +过氧化氮 +三氮化钠 +胚芽儿碱 +计末林碱 +甲基联胺 +无水联胺 +硫代苯酚 +半方形酸 +嘧啶苯芥 +二甲二硫 +二甲弗林 +氧化乐果 +乙基乐果 +马拉赛昂 +己酮肟威 +特氨叉威 +卡巴呋喃 +间异丙威 +甲氨叉威 +丁醛肟威 +放线菌酮 +地乐消酚 +硫酸甲酯 +谷仁乐生 +化合物118 +化合物497 +普罗米特 +杀鼠嘧啶 +红海葱甙 +矢车菊甙 +米尔法兰 +自力霉素 +安非他明 +安非它命 +电表反转 +电表校验 +海关拍卖 +考试设备 +海关查获 +教研大纲 +可控牌靴 +猜宝仪器 +速度预警 +雷达警示 +雷达测速 +雷达探测 +高速预警 +牌照喷雾 +雷达之星 +活性碳粉 +克西里尔 +奥克托金 +代那买特 +震源药柱 +基特拉辛 +手槍钻石 +帖子删除 +电影下载 +特殊服务 +公关删除 +花都逍遥 +欧美女同 +有偿捐赠 +羟间唑啉 +收费清理 +粉尘女子 +兼职服务 +玩女大王 +考生名单 +遥控复制 +遥控干扰 +娱乐论坛 +毕业学历 +防拍克星 +测速雷达 +迅雷下载 +萘基硫脲 +逼羊为狼 +遍地桃花 +超级公子 +地狱召唤 +恶女戏夫 +魅夜帝国 +嬉游花丛 +萧府之败 +欲医天下 +至尊狼威 +34H基甲基 +赤道卫星 +异性社区 +阿兰得龙 +高仿纸币 +甲基苯胺 +甲基苯丙 +甲卡西酮 +考生考号 +森林之豹 +森林之虎 +车牌执照 +东京丸井 +车牌翻转 +防身器材 +防卫棍刀 +负面新闻 +负面信息 +个性号码 +无线通话 +定时引爆 +视讯妹妹 +门禁复制 +莫洛托夫 +男人最爱 +美眉娱乐 +脱氧麻黄 +人人有色 +号码软件 +显号软件 +沙漠之鹰 +恐怖份子 +森林之狐 +森林之狼 +森林之鹰 +负面帖子 +炒作公司 +变号软件 +手机偷听 +美女后宫 +北朝鲜冰 +捷克左轮 +赵氏猎鹰 +红烧兔子 +娱乐会所 +网络负面 +特种部队 +网络危机 +阿兰德龙 +乌斯普龙 +喋血鸳鸯 +东北大炕 +东风传奇 +东瀛日记 +都市藏娇 +都市春潮 +都市黄昏 +都市奇兵 +都市擒芳 +多情皇帝 +多情医仙 +恶女总裁 +放纵深圳 +飞凤灵蛇 +风月草民 +风月大帝 +风姿物语 +封魔印章 +疯狂求欢 +福艳天下 +妇科男医 +高州水库 +隔岸芳烬 +隔墙有眼 +沟女物语 +古镛文集 +官人我要 +鬼不走门 +寒潭鹤影 +七日欢恋 +河图作品 +黑道狂徒 +黑道女友 +黑色帝国 +黑色柔情 +红楼遗秘 +红旗飘飘 +红杏暗香 +红映残阳 +后宫学院 +花心天子 +荒莽神话 +荒唐传说 +皇朝秘史 +魂一指令 +混混教师 +活色逍遥 +火爆男妃 +火浣神衣 +机甲武圣 +极度香艳 +极品二少 +极品复仇 +极品公子 +极品家教 +极品男人 +极品农民 +极品色妃 +极品少将 +极品太女 +极品巫男 +极品邪龙 +极品邪神 +驾驶生涯 +剑荡天下 +剑起云深 +剑指天下 +江山美色 +娇娇师娘 +娇艳人生 +骄龙荡魔 +狡猾家丁 +劫花传奇 +金粉世家 +尽揽婀娜 +禁忌之旅 +惊尘溅血 +惊伦六日 +囧囧仙妻 +九流术士 +九世魔情 +绝代霸主 +绝代商骄 +绝色大唐 +绝色家族 +绝世狂龙 +空姐羔羊 +傀儡皇帝 +狼后传奇 +狼之天下 +浪迹神雕 +浪迹香都 +浪子彦青 +炼狱天使 +烈女斗夫 +临时俘虏 +伶人往事 +另类穿越 +龙魔传说 +龙与女仆 +龙语兽修 +乱云飞渡 +满世妖娆 +没尸找尸 +写真图片 +美妻地狱 +美色无边 +梦幻倚天 +梦回天阙 +梦想人生 +人妖杂交 +迷欲侠女 +妙手神医 +妙手神织 +明日帝国 +摹拟爱情 +魔皇至尊 +魔甲销魂 +魔美双修 +魔神艳传 +魔神紫星 +魔兽领主 +莫爱邪君 +逆天邪传 +狞王武霸 +奴隶帝国 +怒之典章 +女人是海 +诺贝尔奖 +痞子偶像 +瓶安如意 +扑倒宰相 +妻定神闲 +妻妾成群 +弃妃倾城 +千年玄冰 +日本美女 +巧取豪夺 +俏惹郎心 +倾城护爱 +情海狂龙 +情天大帝 +情缘欲海 +秋韵夜语 +囚禁新娘 +群魔丽影 +人性禁岛 +人在深圳 +日出之王 +溶解权力 +如果的事 +如影逐形 +三宝局长 +散花天女 +色酷全书 +色香射雕 +森下悠里 +山村情事 +少龙传奇 +少龙外传 +深纯弄潮 +圣魔邪灵 +圣女传奇 +十年孤剑 +仕途官道 +守护美女 +书剑别传 +双面艳姬 +桃之夭夭 +天地之间 +天降神龙 +天降神妻 +天使风狂 +天下太平 +田野花香 +听话娃娃 +微热少年 +我的天下 +我和处长 +无德皇后 +无良公子 +无限征服 +华夏神龙 +妩媚情殇 +武林花劫 +武林花主 +武林状元 +误坠花丛 +西苑魅影 +仙侠魔踪 +乡春满艳 +乡村神医 +乡野情梦 +小村神医 +小夫少妻 +小妾丫鬟 +小青系列 +小镇飞花 +邪气凛然 +邪神传说 +携美人生 +谢雕易遍 +性医春歌 +胸大有罪 +修罗都市 +玄女心经 +押寨夫人 +艳妃惑夫 +艳妃偷夫 +艳色都市 +艳香迷醉 +夜诱娘子 +一城风絮 +一丝不挂 +一指擎天 +一柱擎天 +医世无忧 +以后时代 +银剑天使 +鹰翔长空 +永堕黑暗 +游龙嬉春 +游龙戏凤 +诱欲校园 +雨过桃花 +玉麟传奇 +玉体横陈 +欲海狂龙 +欲海梦蝶 +欲海神龙 +欲火难眠 +欲火难耐 +女人的洞 +越境鬼医 +云雨欲魔 +云踪魅影 +知乐全集 +执子之手 +至尊夺研 +至尊邪帝 +中国特工 +中国影帝 +重建帝国 +逐艳人生 +紫屋魔恋 +纵欲返古 +醉回七九 +醉卧红尘 +天线宝宝 +学历认证 +制作脏弹 +出租网管 +财税代理 +连锁销售 +上门服务 +学生服务 +根敦确吉 +金大物流 +神雕外传 +浪妇阿姨 +色文小说 +商务租车 +少女发春 +神韵千年 +文心藏阁 +航空母箭 +人民币假 +转让机打 +变性晓薇 +逍遥皇帝 +洪荒魔尊 +套弄花心 +桃源洞口 +美女真人 +农夫导航 +香港开奖 +股民电话 +股民名单 +股民资源 +股民资料 +股民信息 +成都校服 +三国称霸 +帅哥靓妹 +个人身份 +录像火机 +全系列阀 +自办频道 +兼职小姐 +我要官人 +獵槍銷售 +联兴棋牌 +366娱乐城 +日月图库 +淘金盈网 +永利高网 +东方心经 +先锋百乐 +金盛国际 +涂山国际 +名门国际 +名人国际 +扑鱼达人 +阳光地带 +修改证书 +邪性总裁 +狼欲国度 +村色撩人 +狼客娱乐 +受辱禁处 +爱城论坛 +色色论坛 +只爱色色 +无双国土 +强制深喉 +我爱色吧 +色哥导航 +耻悦人妻 +自制地雷 +金彩国际 +女神国际 +极品人生 +三优娱乐 +金赞娱乐 +删百度帖 +售香港ghb +第四色网 +极品人妻 +鸿利国际 +汔狗销售 +警备车证 +楼凤大全 +猎刀订购 +订购猎刀 +猎刀直销 +代人收债 +腰刀转让 +销售迷烟 +爆竹供应 +直销缅果 +缅果供应 +缅果购买 +缅果提供 +提供猎刀 +警衔提供 +提供警帽 +提供fm2粉 +销售汽gou +腰刀销售 +销售色站 +色站销售 +直销爆竹 +缅果销售 +销售jia币 +jia币销售 +销售情蛊 +销售fm2粉 +短刀销售 +买卖猎刀 +冰钻供应 +订购迷烟 +迷烟专卖 +提供迷烟 +全讯网777 +工口小说 +工口图片 +工口动画 +工口漫画 +工口动漫 +工口游戏 +草榴地址 +月沉吟 +美人劫 +美人殇 +销魂殿 +断珠蕊 +姑妄言 +欢喜缘 +后庭花 +画眉缘 +花放春 +换夫妻 +空空幻 +露春红 +两肉缘 +林兰香 +寐春卷 +闹花丛 +情海缘 +柳花传 +桃花庵 +桃花影 +舞春云 +巫梦缘 +杏花天 +绣屏缘 +一片情 +鱼水谐 +鸳鸯阵 +怡情阵 +枕瑶钗 +戏蛾记 +醉春风 +灯月缘 +捣玉台 +春又春 +碧玉楼 +弁而钗 +伴花眠 +痴娇丽 +酬鸾凤 +职业删贴 +梦先觉 +若相惜 +惜情记 +玲珑配 +金钱帮 +白衣传 +紫极舞 +舞倾城 +混沌决 +供应ghb水 +ghb水销售 +销售缅果 +销售锇酸 +供应铀毒 +真钱轮盘 +短刀直销 +樱花泪 +浮缘枝 +槐树里 +美人情 +怯春寒 +殷若溪 +小渔村 +短刀专卖 +草榴影院 +腰刀供应 +警号销售 +专卖ghb水 +直销ghb水 +订购ghb水 +就去品色 +直销军衔 +供应锇酸 +luo聊表演 +臊冰订购 +供应特普 +供应硼烷 +台秃专卖 +转让腰刀 +提供腰刀 +腰刀提供 +订购腰刀 +腰刀订购 +腰刀买卖 +买卖腰刀 +猎刀销售 +香香社区 +浪妹社区 +弯刀买卖 +买卖弯刀 +弯刀提供 +锇酸供应 +投注娱乐 +百博亚洲 +优博娱乐 +色站大全 +艳照下载 +Xiao77论坛 +直销臊冰 +直销腰刀 +直销警灯 +直销警号 +直销警帽 +猎刀供应 +转让猎刀 +猎刀转让 +直销警衔 +烟花直销 +爆竹直销 +烟花专卖 +狗管专卖 +销售狗管 +直销狗管 +转让狗管 +庐江艳照 +黄片下载 +供应fm2粉 +素人电影 +人妻系列 +素人合集 +雇凶打人 +雇凶复仇 +藏刀供应 +藏刀转让 +提供藏刀 +藏刀销售 +销售猎刀 +销售藏刀 +销售腰刀 +销售靴刀 +专卖臊冰 +供应臊冰 +提供臊冰 +色聊服务 +在线棋牌 +直刀专卖 +直销猎刀 +冰妹服务 +买卖臊冰 +欧美色站 +销售台秃 +黄网图片 +日韩色站 +烟花供应 +直销烟花 +供应警帽 +供应警号 +太恩制作 +下载黄片 +黑彩代理 +楼凤陪睡 +替人收债 +传授赌技 +色网地址 +色站网址 +欧洲色站 +调妻派对 +找人讨债 +警衔供应 +专卖警衔 +买卖警衔 +购买警衔 +性吧有你 +气GOU专卖 +销售木仓 +供应木仓 +木仓专卖 +销售警衔 +汽gou销售 +色色影视 +警号专卖 +专卖警号 +在线祼聊 +销售警灯 +代人寻仇 +警灯销售 +新全讯网 +92 式销售 +64 式销售 +帮人泄愤 +色播资源 +祼聊表演 +提供土冰 +缅人绍雄 +卖娃广告 +物流面单 +藏民档案 +逼爽导航 +提供物冰 +亚洲狼图 +寻仇了事 +楼凤论坛 +购买唐刀 +舔到你射 +中国楼凤 +复仇咨询 +复仇顾问 +速食全套 +白嫩妹妹 +进口美秃 +在线黄片 +四房看看 +兼职陪睡 +洽谈复仇 +自制左轮 +售人民币 +车主数据 +土冰合成 +五码吹潮 +复仇接洽 +三棱尖刀 +三利达网 +仿真头套 +赌彩平台 +代理复仇 +老板数据 +老人名录 +手机名录 +替人泄愤 +销售长刀 +销售CO2狗 +色片下载 +真人祼聊 +收费祼聊 +给我豹豹 +抢手总裁 +商界狂龙 +蔷薇妖娆 +七虐弃妃 +花花游龙 +公车被干 +香醉迷艳 +腰刀专卖 +黄片种子 +供应猎刀 +供应腰刀 +黄片网站 +供应山埃 +汽gou专卖 +色虫影院 +色虎影院 +同城陪睡 +色色快播 +亚洲色站 +皇冠平台 +逍遥社区 +色色基地 +咪咪基地 +汽车套开 +包爽爆射 +美尻套图 +各地凤楼 +厕所盗摄 +幼童买卖 +美女中出 +色猫影院 +猎刀买卖 +色吧社区 +投注取现 +真钱下注 +色吧亚洲 +小姐威客 +马古配方 +气gou专卖 +专卖猎刀 +气Gun专卖 +哇哇影院 +办假学历 +爆竹专卖 +草榴社區 +销售烟花 +spyera软件 +包爽包射 +真人色片 +足球下注 +手槍买卖 +幼幼电影 +汽槍买卖 +在线下注 +电购数据 +销售醱票 +办职称证 +壮阳保健 +提供小姐 +幼幼极品 +深喉服务 +漂漂美眉 +喷雾迷葯 +從後插入 +精品电影 +欧美电影 +另类电影 +明星情爱 +欧美情爱 +欧美色片 +亚洲色片 +人妻中出 +幼幼同志 +多人杂交 +狼友论坛 +线上投注 +乐酷搏彩 +援助交际 +舌尖漫游 +九九娱乐 +碧月吟阁 +皇家花园 +绝色皇城 +靓女主播 +尽情纵欲 +咪咪娱乐 +制毒工艺 +矢泽种子 +现金棋牌 +玛雅论坛 +老板手机 +特殊名录 +车主名录 +夜店小姐 +真人轮盘 +色站导航 +聚色导航 +美女貼吧 +替人跑事 +帮人了难 +气槍专卖 +办军官证 +製作炸藥 +步槍销售 +皇冠足球 +古柯买卖 +买凶杀人 +疯插港姐 +婷婷基地 +四房播播 +学历办理 +美女祼聊 +亚洲原创 +欧美原创 +办理凭文 +千门六决 +网络投注 +皇冠开户 +电话改号 +任意改号 +人妖妹妹 +高管名录 +猎刀专卖 +美尻中出 +手槍销售 +步槍供應 +腎脏中介 +供应步槍 +供应獵槍 +供应手槍 +銷售步槍 +銷售手槍 +銷售獵狗 +銷售獵槍 +提供獵槍 +提供獵狗 +提供手槍 +提供步槍 +供應步槍 +供應獵狗 +供應獵槍 +供應手槍 +人兽杂交 +销售手槍 +销售獵狗 +销售獵槍 +腎源供应 +供应腎源 +腎臟中介 +腎臟供应 +找人敲诈 +找人毀容 +找人勒索 +找人绑架 +替人讨債 +专业復仇 +找人消災 +真槍销售 +专业毀容 +专业勒索 +彩信改号 +销售LQB362 +供应LQB362 +提供LQB362 +LQB362到货 +LQB362出货 +LQB362订购 +LQB362电话 +幫人殺人 +幫人砍人 +替人綁架 +幫人綁架 +替人毀容 +幫人毀容 +替人敲詐 +幫人勒索 +幫人敲詐 +幫人討債 +復仇了仇 +代人報仇 +毒的制作 +找人復仇 +替人復仇 +找人報仇 +购买槍支 +交换人妻 +替人讨债 +帮人消灾 +帮人杀人 +替人复仇 +雇人复仇 +替人追债 +替人出气 +帮人出气 +职业复仇 +专业复仇 +帮人讨债 +雇人打架 +帮人勒索 +找人复仇 +替人打架 +代人了仇 +代人报复 +代人出气 +帮人打架 +帮人了仇 +复仇了仇 +帮人报复 +替人报复 +帮人追债 +帮人敲诈 +替人杀人 +帮人清债 +替人清债 +替人消灾 +替人敲诈 +替人勒索 +帮人毁容 +替人毁容 +帮人绑架 +替人绑架 +帮人砍人 +替人砍人 +替人消災 +幫人消災 +代人報復 +代人出氣 +幫人打架 +職業復仇 +專業復仇 +職業報仇 +專業報仇 +雇人報仇 +雇人復仇 +替人討債 +替人追債 +幫人追債 +幫人出氣 +替人報仇 +替人報復 +幫人報復 +幫人了仇 +替人出氣 +替人清債 +替人殺人 +幫人清債 +冰磚配方 +冰磚出货 +冰磚订购 +冰钻订购 +冰钻出货 +手抢专卖 +手抢到货 +卖high粉QQ +冰钻到货 +冰磚到货 +毒的配方 +猎槍销售 +办警官证 +气槍买卖 +气槍购买 +槍支买卖 +鉆石销售 +冰磚销售 +冰鉆销售 +替人了仇 +供应冰钻 +十八和谐 +一边一国 +突厥斯坦 +边界新约 +维基百科 +我的奋斗 +新xin唐tang + 360mother.com + 5qshop.com.cn + ailuoliao.com + dgchun-lan.cn + feifeijob.com + hainanidc.com + job-yahoo.com + lekachina.com + newegg.com.cn + officestation + wdyj88.com.cn + xsjdz2010.com +为a股自尽 +1215出师表 +654k全金属 +访问youtube + hotspotshield + rentiandiling +色即是空3 + 0085266344408 + wwwzydk444com + jishu22126com + wwwsz56888com + wwwhuayidkwcn + chengaiai4490 + wuweixin68163 + youxin2727com + bsto178xtd365 + szjyjg0871163 + ailiaotiancom + ok1997okyahoo + 591luoliaocom + tsbz08hotmail + health21cncom + wwwkchaomacom + dingxiangname + sanyang668163 + gzqietingqicn + hybz08hotmail + ygzj258369163 + szlin16890126 + jheduzx126com + laohujibbscom + 400suncitycom + dai22289gmail + xunkong123com + tengshivodcom + botongkejicom + mmfuwusvvkcom + funpnet759277 + 99lianmengnet + 52luoliaowcom + feiyue8998com + qazwsx654321p + essayonlinecn + pandra2003163 + szjsedu163com + wwwxyxl5168cn + zptokbc060com + 51xiaguangcom + nbzhutancomcn + maopianwangcn + tianyakefu126 + huang92896163 + chengkao360cn + kjxxwss163com + yuandongzj163 + zzddzxinmecom + laohupojiecom + 82rsunitcycom + laohupj580com +dfii出海战 +惊现5女尸 +4次拨打110 +预言2012年 +頰言2012年 +天和佳祥b + 0577-26889666 + 0755-21013177 +2011年英语 + jiangdongriji + ninna.justice + www.cipfg.org +警用钱包 +隐私1图片 +隱私1圖片 +2008年灾年 +全国揭晓 +共和国2049 +开平,受辱 +考试,答案 +美女,写真 +微型,监控 +追踪,定位 + 134 24o8 1398 + 135-4406-6974 + 137.2555-7876 + 137.2878-1212 + 159-1095-5681 + boxue-edu.com + decai-edu.com + www.beely.com +免费刷Q币 +泰国Vervata +手槍 钻石 + BBINFOSTATION +3氨基丙烯 +4硝基甲烷 +4二硝基苯 +镰刀菌酮X +丝裂霉素C +二仲丁基4 +6亚硫酸酯 +2硝基甲苯 +3硝基甲苯 +4硝基苯胺 +4氢吡喃酮 +2异丙氨基 +2甲基吡啶 +硫酸2甲酯 +1乙酰硫脲 +硫代乙2醇 +甲基化2硫 +2硝叔丁酚 +2硝另丁酚 +美女1笑散 +找1夜晴网 +1元人民币 +硫酸3乙锡 +汞制剂2号 +混世邪神2 +重生寡1991 +迎z秋庆祝 +3d木马78910 +18MM电影网 +e乐博官网 +假结婚证Q +h游戏下载 +提供shen源 +有声h小说 +提供fing霸 +high药销售 +专卖high药 +high药专卖 +供应high药 +提供high药 +h动漫图片 +h动漫快播 +HIGH药直销 +王民生群p +蒋大彬群p +high药直销 +PETN的配方 +三夫妻ed2k +petn的合成 +提供high粉 +54自制槍QQ +Fing霸提供 +Fing霸专卖 +Fing霸销售 +专卖Fing霸 +提供Fing霸 +QVOD色播网 +色狗 电影 +e夜情电话 +e夜情论坛 +e夜情交友 +qq卖77猎槍 +high粉配方 +high粉订购 +high粉出货 +high粉到货 +high粉销售 +供应high粉 +根敦.确吉 +18岁的雪儿 +60天的攻防 + 51xiaguang.com + essayonline.cn + gongzqq.com.cn + jianzhan88.com + outlets365.com + zhuangzhigm.cn +京et也很牛 +47辆车相撞 +软件ui丑陋 +全球80人口 +64小时绝食 +悠游字在13 + cuttingthrough + arrivalinlhasa + echoesofpotala + chengrenshipin +少女18岁色 + wwwszjyjgcomcn + wwwdajiyiqicom + wwwncs168comcn +13797020693室 + 7770blogbuscom + tao20032008163 + luoliaozhancom + www2008gwydacn + woyao2000gmail + greatenglishcn + allnettoolscom + huaidizhiyahoo + lyou1234520163 + cfzj197hotmail + driversvisacom + 823629831qzone + huatai88888com + shuguang888com + chaoliukejicom + yangfangzhou99 + isleadingchina + wwwgdgz13800cn + wwwhengmei77cn + jiachao888nlae + kuailetianyacn + shch988blog163 + 15201229670com + jiachao666zw78 + edu137875652cn + dingshengzkcom + chinacard18com +彭州80万吨 +17权力布局 +c4制作方法 + nicolasdemarco + The3FeelOnline +610办公室 +专-业承-接 +QQ充值中心 +充值QQ号码 +盲女72小時 + bianyaqi.sh.cn + bjscdesign.com + book1.5d6d.com + diy.myrice.com + dxy.cniiyi.com + firefoxcn.info + hljzxq19690724 + hongaosoft.com + hosting.czm.cn + iactive.com.cn + infoark.com.cn + movequickly.cn + njgrandeur.com + ovefast.com.cn + pro-wing.co.jp + qichezulin.org + registerjz.com + rosanna.com.cn + silvery.com.tw + telenglish.com + tianyunsun.com + xiaoshanwu.com + xinguanghui.cn + xizang2008.com + yigaosheji.com + yongshengxx.cn +70天大事记 + 26③850148⑧ + my.tv.sohu.com + open-jyedu.com + Yinlong Island +SM后庭器具 +地税髮票QQ +FlexiSpy下载 +己烯1炔3醇 +2氧化丁2烯 +2硫化2甲基 +1-乙酰硫脲 +3-氨基丙烯 +id卡拷贝机 +3硝基2甲苯 +6硝基2苯胺 +2硝化乙2醇 +2环己烯1酮 + DGSTATIONMUANT + forestofbreast +我的wg岁月 +重生之80后 +供应k2香料 +供应k2精灵 +BB体育投注 +办假军牌QQ +无色毒药QQ +无味毒药QQ +色龙bt发布 +女王招奴qq +av天堂影院 +av欧美影院 +xb综合影院 +泷泽萝拉bt +快播色片av +10bet娱乐城 +收养男童qq +负面消息qq +帮忙复仇QQ +订购国秃qq +qq代人了事 +qq替人了事 +qq专卖警帽 +销售警棒qq +tt现金娱乐 +qq找人报复 +qq买卖警帽 +qq买卖警号 +qq销售ghb水 +qq提供ghb水 +高清av下载 +qq提供情蛊 +情蛊提供qq +情蛊购买qq +缅果订购qq +缅果直销qq +购买缅果qq +订购缅果qq +冰钻提供qq +臊冰提供qq +提供ghb水qq +国产64销售 +销售警号qq +销售短刀qq +销售ghb水qq +爆竹销售qq +销售爆竹qq +迷烟销售qq +qq销售冰油 +qq销售火铳 +供应冰油qq +订购冰油qq +直销冰油qq +销售冰油qq +购买冰油qq +提供冰油qq +警衔销售qq +了仇了事qq +复仇办事qq +销售美秃qq +提供缅果qq +帮人复仇qq +gv种子下载 +欧美gv种子 +供应缅果qq +销售迷粉qq +订购迷粉qq +鸡婆服务qq +老师16岁 +90后黑丝网 +人妖av下载 +欧美av种子 +av影片种子 +快播av下载 +买卖缅果qq +直销happy水 +订购happy水 +av影片下载 +谷子供应qq +臊冰供应qq +锡锋供应qq +专卖腰刀qq +欧美av下载 +下载av电影 +素人av视讯 +素人av影视 +亚洲av视讯 +日韩av视讯 +欧美av视讯 +亚洲av下载 +美女av图片 +快播av色站 +日韩av下载 +供应弯刀qq +转让弯刀qq +专业制证qq +QQ真人luo聊 +luo聊美女qq +庐江6P种子 +王民生3P照 +QQ帮人复仇 +QQ招人复仇 +宾馆6P艳照 +有偿讨债qq +业主资料QQ +车主名单qq +楼凤小姐QQ +藏刀提供qq +藏刀专卖QQ +qq代人复仇 +qq帮人复仇 +av动漫在线 +动漫av下载 +av动漫下载 +提供冰钻QQ +云南情蛊QQ +专业删贴qq +购买学历QQ +av在线观看 +删除帖子QQ +办高仿证QQ +兼职小妹qq +兼职白领qq +找人毁容QQ +顺丰面单QQ +提供happy水 +了仇了事QQ +警号订购QQ +丝足上门QQ +丝足保健QQ +专业删贴QQ +假六级证qq +假四级证qq +中考答案QQ +供应Happy水 +替人寻仇QQ +硝甲西泮QQ +Happy水提供 +Happy水专卖 +Happy水销售 +专卖Happy水 +提供Happy水 +销售Happy水 +电购面单QQ +保险数据QQ +代人复仇qq +欧美bt种子 +天涯删贴qq +车主资料QQ +帮人灭口QQ +色av色影院 +办理军牌QQ +办行驶证QQ +上门陪睡QQ +帮人复仇QQ +代人复仇QQ +97色色导航 +警用服装QQ +草榴社区QQ +高纯度99冰 +制造意外QQ +假警官证QQ +冷钢专卖QQ +快播av电影 +3p美女图片 +最新素人av +56軍刺供应 +假人民幣QQ +供应77猎槍 +銷售77猎槍 +供應77猎槍 +销售77猎槍 +仿真面皮QQ +溫切斯特qq +56軍刺专卖 +81軍刺专卖 +QQ销售冰磚 +QQ订购冰磚 +卖摇头糖QQ +卖小冰磚QQ +卖黃體酮QQ +卖麥角酸QQ +卖冰鉆石QQ +卖搖頭糖QQ +卖白牙簽QQ +卖黃牙簽QQ +卖麻黃素QQ +卖大冰磚QQ +卖神仙糖QQ +卖钻石冰QQ +卖鉆石冰QQ +QQ供应冰磚 +QQ供应钻石 +QQ销售冰钻 +松花江污染 +公务员工资 +一级黄电视 +亚洲美女总 +中文搜性网 +人妻兽虐曲 +性信息交友 +少女俱乐部 +武林情皇传 +发票代开 +田明建时间 +太王死神记 +清明节到了 +迫近水危机 +老衲痛经啊 +小平讲英语 +陈娘宇下台 +千岛湖之旅 +徐和柴学友 +爱神之传奇 +梦中的女孩 +往事追忆录 +睡着的武神 +济南建设路 +总统的讲话 +痛批政法委 +山西黑砖窑 +敢坐飞机吗 +最牛钉子户 +唐人电视台 +江山美人志 +公务员调资 +双鞋的故事 +先烈的电话 + gupiaojijing.cn +告别蒸笼车 +疯狂水果机 +香港六閤彩 +老虎计刷分 +女性自尉器 +小姐全攻略 +宿舍拍艳照 +董存瑞来电 +曾庆一样红 +大学不要钱 +统一叫小泉 +骗到国务院 +泡茶抱小密 +票贩试比高 +当今大谎言 +部长李莲英 +八耻编成经 +宋朝俯卧撑 +易地为官称 +当官靠后台 +马克思来电 +小姐欲脱裤 +难捉摸的官 +两腿之间问 +两面都有胶 +董存瑞他妈 +和小平散步 +恩來只喝酒 +对警车收费 +红太祖本纪 +政策来捣鬼 +党的喉舌死 +小姐搞三讲 +翌年缩至余 +小平的预言 +谁闻民工苦 +有理莫惹官 +油价月月涨 +傥不等于国 +领导年年换 +呼吸税之歌 +股票造的孽 +骗到党中央 +全球征屁税 +他妈是国税 +玉姣嗔面责 +钟央大手掌 +回归大话版 +邓爷爷访美 +开发商之歌 +恩来马上做 +加班无偿化 +教师奴隶化 +上面老换人 +流行大谎言 +喂养叫填权 +只整老百姓 +年太不正常 +共震迎奥运 +暮蒼山蘭舟 +福娃在哭泣 +零八奥运艰 +抗震最不强 +养一窝专家 +泄密开幕式 +火炬传递版 +当官者日志 +十大怪现状 +歪批闭幕式 +一江并两河 +中国怪现象 +油价还得涨 +小平不耐烦 +美女李万姬 +毛邓小故事 +党在玩社会 +人民在流泪 +国家已沉睡 +官员代表答 +干部的口诀 +小姐灌的浆 +率领穷光蛋 +做官样样好 +布什逗小胡 +爱党胜过妈 +党就是咱妈 +恋栈恋权心 +谭豁子列传 +望纽约内外 +四清四不清 +天上導彈亂 +專榠眔聽器 +语音传输器 +美国迷你型 +手机眔听卡 +正宗ghb原液 +售安乐死药 +烟雾弹制作 +闪光弹制作 +地雷的制作 +蚕蛊的制作 +普米族制蛊 +制蛊的方法 + c6h3no22cl2naoh +弹制作方法 +金屬彷真槍 +玞槍雷明頳 +索多玛120天 +国足欢迎你 +男足几多愁 +让三鹿给废 +五粮液横流 +再论猪流感 +北京搶口罩 +中国疫情图 +明星之情陷 +工信部缓装 +加菲猫过滤 +街头门事件 +自动挂代理 +猎杀大熊猫 +洗脚妹苹果 +极品浏览器 +三鹿结牛黄 +奶中加入尿 +喝毒奶长大 +东市退奶粉 +鲜非毒之奶 +一鹿顶三鹿 +把奶问青天 +喝牛奶结石 +三鹿欢迎你 +洗衣粉油条 +掀开黑心绵 +减排好奶粉 +三鹿灭鼠药 +表演者三鹿 +奥运油和米 +平度毒面粉 +催长大闸蟹 +母亲王静梅 +喝奶也结石 +孱头式勇猛 +北京话骂人 +滑石粉致癌 +毒食品汇总 +毛发水酱油 +毒美食排行 +三鹿与国足 +问题鸡来源 +柑橘里有蛆 +国产酒致癌 +轶可像刘翔 +过年吃人肉 +孕妇被群殴 +proxifier代理 +上网过滤门 +新疆的畜生 +支援果敢族 +针状物刺伤 +針狀物刺傷 +中国被瓜分 +股民第一歌 +股市欢迎你 +牛市转回来 +杨白劳出来 +股民泪沾裳 +满仓中石油 +熊市无人问 +抄股市大底 +股市怎么了 +牛市中亏损 +股民砸股票 +股市三熊组 +跌停无极限 +接任证监会 +潘长江出来 +平安惹的祸 +狗屁证监会 +股民受损失 +问中国股市 +散户套半年 +股票顺口溜 +笑新老散户 +向股民抽血 +解套的日子 +股民陈永平 +石油把大盘 +牛熊十余秋 +股市顺口溜 +吾工行贤弟 +竞价中石油 +四大哑巴亏 +天天哭亏损 +股民在哀号 +套牢全中国 +股市告别书 +股评在撤谎 +股市新民谣 +证监会会歌 +股民已失眠 +清海無上師 +清海无上师 +真心的报讯 +李哄志邪说 +噶玛巴千诺 +木兰裆裤湿 +性欲极强女 +雪白的肥臀 +射的她满脸 +肉色连裤袜 +从后面被干 +遇日本巨棒 +勾著肛閠壁 +龙战士传说 +舞铃笙三女 +和廖化打赌 +大明奇情录 +三少宋智尧 +西游记探秘 +妻子的小洞 +肉体性追缉 +服务器租用 +新学历证书 +龙王采集器 +汽车电子磅 +快速专业办 +手机萣莅器 +学历证书班 + ccjy2002hotmail + kuailetianya8cn + lixiangjy668com +一手质保答 + wangzhuan518com +威特尔电子 + wwwxinda2009com + 123asd11qq22com + rmbbeiou51vqpcn +所售无军号 +可过后付款 + bjsj4any2000com + shanghai6868163 + 91regcomhtm8152 + wwwshenhui150cn + 460100071088445 + ttdzj168hotmail + 5xinghonghuicom + gdgz13800163com + www86suncitycom +办理免入学 +快速领取科 + wangtongsifucom +考前零收费 +试过后付款 +学历譪辦理 +jth简称涛儿 +让领导先走 +强征建官员 +豪华别墅群 +政府太无耻 +有警车做伥 +死区是党权 +犯人胡文海 +中办警卫局 +总参警卫局 +中央警卫团 +吴官海诗词 +嫌疑人突死 +日本你听着 +旱日鱼肚白 +红色御林军 +痴汉是犯罪 +周小玲尸油 +征收呼吸税 +小姐代表答 +释放刘西峰 +胡旭曦冤狱 +港人士评邓 +哨兵遭歹徒 +豪华办公楼 +原名吴玉阳 +陈赓之三子 +败类马洪亮 +宝马女局长 +再胡搞几年 +李意珍女儿 +国庆夜独语 +村民林水仙 +邓贵大烈士 +批准邓贵大 +周碧清子女 +父亲刘仕华 +作者萨达姆 +韩伯平回忆 +质问曹征平 +永隆大酒店 +女儿温如春 +张培莉女士 +玩具厂群殴 +厂区内斗殴 +罢车不加油 +相助匿曰党 +张乃明等人 +旭日玩具厂 +油价都调了 +世界风云录 +观音警世诗 +巨贪刘兆久 +郝金安冤案 +司法造冤案 +访民程英才 +血是在广场 +中国怎么了 +我想问总理 +网上问总理 +干部怕退休 +工资有希望 +真打真准备 +黑匣子录音 +巨毒化工厂 +肮脏的台北 +800斤大粪坑 +不招镇坪工 +群丑闹中华 +伍尔维次法 +痛斥保护伞 +包围镇政府 +木有甲板费 +江家和三代 +烧法国国旗 +梅葆玖呼吁 +火炬手被拘 +夜晚姘妇家 +李四光预测 +无知的专家 +麦当劳被砸 +博客门事件 +孙悟空入党 +青蛙们献血 +有地蹦之祸 +局长吴忠凯 +杨佳被关押 +是草的责任 +考试有黑幕 +预测到英九 +杨佳太息曰 +局处级别墅 +犯法太平常 +给领导喂奶 +老百姓遭罪 +机关出上联 +数百人围殴 +一人杀六警 +取悦王维工 +控制人口奖 +购奶粉以养 +鄱阳报警者 +弹铗恨无肉 +百行教师贱 +周迅的女儿 +李蕊蕊被强 +局长张为才 +四次拨打110 +阅兵提前看 +瞎认定非法 +威哉我汉军 +远华案黑幕 +阳朔一尺水 +关证人禁闭 +官员因涉黑 +踢到中国脸 +小日本疯了 +日本的命根 +完全照搬cnn +政府救楼市 +翻窗上下班 +最牛检察长 +李培英贪贿 +医院不差钱 +大栅栏持刀 +也谈范跑跑 +范跑跑之歌 +段义和指示 +杨佳式说法 +老板石建欧 +杀人者杨佳 +耶稣在中国 +杨佳的博客 +陈和受贿案 +伤者刘秀起 +发明阳谋后 +红鱼党害的 +中原海捕鱼 +唐山原政协 +中华被扭曲 +沈婷的所谓 +湘女嫁新疆 +湘女戴庆媛 +宋子文生平 +党是反宇宙 +二哥俞流青 +辱骂周总理 +所长翁钟文 +局长梁继平 +农民曾祥刚 +抬抬女事件 +学生彭启荣 +古寺大丑闻 +血滴食物里 +弃少捕少杀 +迂腐全荡走 +公酒交私友 +唐福珍死亡 +预言了神五 +制止张金星 +赵颖艾未未 +政府为可恶 +川震豆腐渣 +人士谢长发 +李劲松律师 +村民郭永志 +寻找林昭墓 +假学生程熙 +城市最刻薄 +DalaiLama自傳 +《风波记》 +爱国者同盟 +北京劲展鹏 +北京夜生活 +财政部绝密 +癡漢是犯罪 +迟来的救灾 +持不同政见 +川島和津實 +达米宣教会 +打坦克手册 +大田高山茶 +大中国论坛 +大中华论坛 +党内言事潮 +抵押免担保 +第三道路党 +第五代红人 +电信路藏民 +东方红时空 +东南西北论 +反雷達測速 +佛怀煽仇录 +佛展千手法 +服务器托管 +高品质香烟 +公民大联盟 +共和国之怒 +贯通两极法 +国色天香网 +国新办主任 +海盗的悠闲 +号码生成器 +和解的智慧 +红朝谎言录 +红潮谎言录 +红河谷论坛 +洪水的志向 +紅河谷論壇 +胡哥看奥运 +黃色小電影 +会计电算化 +鸡毛信文汇 +疾病业债说 +监狱管理局 +教师资格证 +解体的命运 +精密减速器 +九十三运动 +颗粒包装机 +昆仑女神功 +劳动教养所 +雷達測速器 +历史篡改者 +莲花艺术团 +廉政大论坛 +林昭纪念奖 +陆空军地图 +伦-理-电-影 +伦_理_电_影 +美国维吾尔 +美女野球拳 +美少女麻雀 +夢幻麻將館 +木制工艺品 +皮质类固醇 +青天白日旗 +全范围教会 +热站政论网 +人类罪恶论 +人宇特能功 +日内瓦金融 +入党申请书 +三班仆人派 +上_门_服_务 +上海孤儿院 +身份證生成 +神通加持法 +神州忏悔录 +审查参赛者 +生者和死者 +手机接听器 +谁是新中国 +顺利通过考 +四二五事件 +讨伐中宣部 +天父的儿女 +外交与方略 +为党不为国 +维多利亚包 +維多利亞包 +窝囊的中国 +我在黑暗中 +乌云其木格 +先天健康法 +现代伊兰特 +香港黄大仙 +香港六和采 +小泽玛莉亚 +新观察论坛 +新华通论坛 +新中华战记 +循环轮回论 +雅思成绩单 +亚太正悟网 +盐雾试验箱 +一万个贴子 +医师资格证 +优昙婆罗花 +找政府评理 +拯救紫坪铺 +正邪大决战 +正义党论坛 +脂溢性皮炎 +中国孤儿院 +中南海斗争 +中南海秘闻 +中南海内斗 +中南海内幕 +重庆服装厂 +重庆滤油机 +重庆木门厂 +啄木鸟公司 +啄木鳥公司 +莱仕德事件 +台反文旁虫 +北戴河会议 +中国威胁论 +新闻通气会 +先烈的电电 +现代靓妹仔 +中国性搜网 +震撼你的心 +电表调控器 +最强大阵容 +幸运大玩家 +游戏上分机 +真情大反馈 +办公室守则 +斯皮尔博客 +北京奥运会 +“中国印” +《花木兰》 +《马前课》 +《梅花诗》 +《推背图》 +《诸世纪》 +哎吔女朋友 +巴西预言家 +变色的花朵 +不文女学堂 +摧花神龙教 +第五代领导 +定制消失笔 +发电俏佳娃 +福娃变乌龟 +羔羊大律师 +高低压三箭 +古方化骨水 +豪情夜生活 +黑暗的社会 +红楼春上春 +哭泣的女人 +苦难的中国 +历史的伤口 +聊斋花弄月 +流感大变种 +潜水股推荐 +人鬼情未了 +人肉叉烧包 +人头豆腐汤 +日本的言论 +杀知识分子 +畲祥林冤案 +社保基金案 +射鸡英雄传 +神秘的死刑 +失忆性行为 +兽性新人类 +死刑犯图片 +唐朝豪放女 +偷食女学生 +偷试隔墙花 +吸我一个吻 +新潮女空姐 +新倾国倾城 +玉女白菊花 +云雨生死恋 +纸包梦惊魂 +致命女人心 +宝在甘肃修 +才知道只生 +俄罗斯轮盘 +国一九五七 +救度众生说 +明镜出版社 +娘两腿之间 +女被人家搞 +汽车走表器 +青海无上师 +群发广告机 +四二六社论 +万法归一功 +卫星高频头 +现在的政府 +血染的风采 +亚硝酸乙酯 +亚硝酰乙氧 +一通健康法 +乙酰替硫脲 +原一九五七 +找政法委副 +震惊一个民 +中国复兴党 +中国共和党 +中国人民党 +中国正义党 +中南海黑幕 +中正纪念歌 +免费爽电影 +桑拿一条龙 +手机密码破 +①千个粉锶 +办假户口本 +辦假户口本 +保真最低价 +富婆俱乐部 +好看的小说 +茂名人才网 +茂名招聘网 +网婚恋网站 +我爱开心网 +新富华机械 +验证后付款 +孕妇装夏装 +找小V姐服WU +毛囊角化症 +毛周角化症 +《新京报》 +川岛和津实 +信息产业部 +现在的社会 +古月金帛涛 +编成与基地 +防区和任务 +美女全脱图 +越自卫反击 +美女图片网 +生男孩秘方 +香港生孩子 +毛发红糠疹 +结节性痒疹 +性功能障碍 +安睡理疗枕 +颈椎理疗枕 +雀斑分解液 +色素清软膏 +张氏消痤丸 +前胸后背疼 +催泪喷射器 +发帖人招聘 +专业删贴吧 +前核心病危 +太上皇病危 +小鹰号沉没 +爱恋筱莉儿 +爱笑的女孩 +百美娇艳图 +便携式小岛 +沧海行云录 +超级照相机 +超极品教师 +陈苦作品集 +春風化雨錄 +大唐群芳录 +丹鼎艳修录 +鋼珠槍销售 +雷明頓銷售 +手機截聽器 +燃燒彈制作 +射釘槍改裝 +銷售干擾器 +銷售麻黃素 +迷失御花園 +线上娱乐城 +最新版假幣 +手机卡复制 +金属探测器 +影音收发器 +二异丙氨基 +甲氨基甲基 +碘乙酸乙酯 +二甲基吡啶 +21甲基丙基4 +硫酸二甲酯 +甲基狄戈辛 +人造芥子油 +硫代乙二醇 +双环氧乙烷 +对氨基氮苯 +尿嘧啶芳芥 +甲基化二硫 +间位叶蝉散 +增效百虫灵 +甲基特乐酯 +二硝叔丁酚 +二硝另丁酚 +联苯杀鼠奈 +黄金探测器 +美女一笑散 +磅秤校正器 +电表省电器 +复制购物卡 +门禁卡复制 +复制门禁卡 +遥控车牌架 +高仿人民币 +雷达波探测 +硝化纤维素 +斯蒂芬酸铅 +巴力WILDCATC5 +羟基环戊基 +氢化可的松 +41H3H嘧啶2酮 +爸爸的新娘 +娇宠水芙蓉 +梦幻逆玉王 +现代逍遥录 +3S4715R16瑟文 +金属手拉机 +胡椒基甲基 +胡椒基甲酮 +手工猎刀专 +野营生存刀 +蝶舞大唐春 +都市百美录 +都市花缘梦 +都市炼宝王 +都市逍遥侠 +短暂的春秋 +恶魔养殖者 +方寸光合集 +高树三姐妹 +公主复国记 +攻占大小姐 +共和国士兵 +共和国之辉 +寒天行侠传 +豪门小老婆 +何春传奇史 +黑白二小猫 +后宫海贼王 +花香飘满衣 +幻变小艳妻 +混世小农民 +极品器炼师 +极品少年王 +极品桃花运 +捡到个天使 +江山绝色榜 +姐姐的房间 +戒指也疯狂 +金钱美人志 +金庸与明报 +京都的故事 +静静的辽河 +局长成长史 +狂野艳逍遥 +老婆爱上我 +老婆投降吧 +怜花百美缘 +六朝清羽记 +龙吟百美缘 +冒牌大英雄 +妹妹爱上我 +迷男作品集 +蜜糖俏女佣 +母爱的升华 +泥人作品集 +弄花香满衣 +女人也疯狂 +女神的诡计 +陪睡的女人 +骑士的血脉 +潜龙作品集 +秦守作品集 +情戏浴美人 +擎羊舞风云 +全职业天才 +三国百花吟 +色麒麟修真 +神医擒美录 +圣女修道院 +失落作品集 +时尚女记者 +田野的春天 +推妻入友怀 +退出党团队 +王只准宠我 +王曼媛之死 +危险性学生 +我和久美子 +我是大魔鬼 +武林启示录 +舞月间情录 +仙剑御香录 +限量版男人 +乡村野疯狂 +相公好无理 +逍遥小散仙 +销魂百指令 +销魂十指令 +邪性碧血剑 +新青年卡卡 +新五朵金花 +玄朱神人录 +血指销魂迷 +艳女销魂泪 +一剑破天骄 +战乱的星系 +这就是绝杀 +正气寻妇录 +智取小姨子 +重生之心动 +醉笑卧乡野 +金身改进版 +少女发育图 +输卵管疾病 +性文学小说 +仿真人民币 +国家防火墙 +神也是男人 +美女伴我游 +欲海天龙传 +奥运外地人 +成都服装厂 +成都工作服 +防辐射孕妇 +杏林轩健康 +卷帘车牌架 +剧毒化学品 +QQ賣45MM狗糧 +新妻倩如 +注册送现金 +白金娱乐城 +利澳现金网 +华宝娱乐城 +利博娱乐城 +鸿运娱乐城 +帝豪娱乐城 +七乐娱乐城 +新星娱乐城 +大众娱乐城 +海立方娱乐 +广发娱乐城 +中信娱乐城 +大赢家赚钱 +钻石娱乐城 +供应香港ghb +我爱色色吧 +色娃娃社区 +婷婷五色天 +性吧发布器 +冯仰妍快播 +圣母机器人 +曼娜回忆录 +门事件种子 +同志女论坛 +一生酒色网 +校园群芳记 +百色性导航 +供应伞兵刀 +美女捰聊网 +天天干影院 +嘻嘻色影院 +色狗狗影院 +哥哥插影院 +叶倩彤全集 +天天色导航 +撸撸射影院 +幼幼片下载 +射雕黄蓉传 +后宫群芳图 +警花白燕妮 +娃娃色社区 +供应博伊刀 +牌九娱乐城 +鼎丰娱乐城 +金龙娱乐城 +销售awp配件 +直销awp配件 +订购awp配件 +供应awp配件 +提供awp配件 +awp配件提供 +awp配件销售 +awp配件订购 +awp配件直销 +awp配件供应 +航宇娱乐城 +永利娱乐场 +欧洲娱乐场 +德晋娱乐城 +世博娱乐城 +专售迷晕药 +永利博娱乐 +天马娱乐城 +银泰娱乐城 +娃娃色导航 +亿博娱乐城 +北京找楼凤 +色农夫影院 +红宝石娱乐 +皇星娱乐城 +金彩娱乐城 +真人二八杠 +汇丰娱乐城 +金宝博滚球 +楼凤信息网 +订购丛林刀 +丛林刀转让 +专卖求生刀 +销售警用刀 +丛林刀提供 +色导航联盟 +专卖礼花弹 +买卖等级证 +销售致癌药 +供应致癌药 +丛林刀专卖 +专卖丛林刀 +麻雷子销售 +直销手拉狗 +供应手拉狗 +订购手拉狗 +购买手拉狗 +转让手拉狗 +手拉狗直销 +手拉狗供应 +手拉狗提供 +手拉狗购买 +手拉狗订购 +供应礼花弹 +提供礼花弹 +采购礼花弹 +礼花弹销售 +礼花弹购买 +礼花弹直销 +订购礼花弹 +销售礼花弹 +购买礼花弹 +礼花弹订购 +帮人复仇网 +手拉狗销售 +直销开他敏 +购买致癌药 +买卖可待因 +提供丛林刀 +供应丛林刀 +转让丛林刀 +丛林刀供应 +购买气动狗 +供应气动狗 +提供气动狗 +直销气动狗 +转让气动狗 +气动狗直销 +气动狗供应 +气动狗提供 +气动狗购买 +订购气动狗 +气动狗订购 +气动狗销售 +提供安钠咖 +安钠咖提供 +专卖古可叶 +杜冷丁专卖 +皇冠注投网 +迷晕药直销 +迷晕药销售 +迷晕药购买 +迷晕药提供 +长治筋购买 +苍蝇粉提供 +失忆粉订购 +苍蝇粉购买 +失忆粉供应 +失忆粉直销 +失忆粉购买 +失忆粉提供 +苍蝇粉供应 +苍蝇粉订购 +苍蝇粉直销 +苍蝇粉销售 +pcp新贵专卖 +提供掌心雷 +提供三棱刀 +古柯碱提供 +供应学生证 +销售进口pcp +军官证销售 +提供失意粉 +销售失意粉 +失意粉销售 +失意粉供应 +买卖苍蝇粉 +供应钻石冰 +直销礼花弹 +冷钢刀直销 +冷钢刀销售 +汽木仓销售 +销售手拉狗 +销售汽木仓 +销售pcp套件 +摇头糖销售 +办理警员证 +安钠咖销售 +听话水销售 +销售黎城面 +成品冰销售 +可待因提供 +可待因销售 +网络棋牌室 +安眠酮提供 +订购high粉qq +转让战术刀 +直销战术刀 +供应战术刀 +长治筋买卖 +直销汽动狗 +订购汽动狗 +供应汽动狗 +购买汽动狗 +销售汽动狗 +汽动狗销售 +汽动狗直销 +转让汽动狗 +汽动狗订购 +汽动狗供应 +汽动狗转让 +汽动狗购买 +汽动狗提供 +提供汽动狗 +黄樟素订购 +黄樟素供应 +黄樟素提供 +黄樟素销售 +购买pcp套件 +麦角胺专卖 +提供钻石冰 +高仿证供应 +礼花弹供应 +安钠咖供应 +礼花弹提供 +丛林刀销售 +提供听话水 +听话水订购 +迷晕药供应 +供应迷晕药 +百乐门网站 +夜来香社区 +提供学生证 +六级证办理 +转让仿真awp +买卖仿真awp +提供仿真awp +直销仿真awp +杜冷丁供应 +拍肩粉专卖 +买卖pcp新贵 +订购手拉awp +少女之心 +青蓝双娇 +折翼天使 +涩女日记 +倾世皇妃 +六花禁爱 +剩女不淑 +月上重火 +桃花小姐 +樱花红破 +美艳人妻 +花侠浪魂 +香艳杀劫 +百毒神君 +极品弃妇 +老根嫩草 +暴露指令 +淡色满楼 +尿道刑法 +脂浪斗春 +春染绣塌 +浪史奇观 +浓情秘史 +僧尼孽海 +桃红香暖 +巫山蓝桥 +如意君传 +冤狐情史 +宜春香质 +春灯迷史 +春透海棠 +春闺秘史 +痴婆子传 +俺去也av +邻居美妻 +月泊西眉 +狼友阁论坛 +娇艳都市 +粉臀红痕 +楼凤交流区 +开他敏直销 +六欲仙缘 +逐欲红尘 +浴火情潮 +同性相吸 +狮情化欲 +月皎花娇 +猎美艳录 +穿越大唐 +夕浥红尘 +梦落繁花 +我是王妃 +人生如粥 +多多益善 +懒凤来仪 +超级女警 +怜镜传说 +后宫学园 +真情无奈 +两个妈妈 +甜蜜家庭 +巧婢奇缘 +凤霸天下 +花容天下 +艳说大唐 +操破苍穹 +倾城美人 +青莲记事 +芙蓉颜色 +半路擒君 +办理警官证 +香国竞艳 +情迷都市 +惊天密典 +幻梦唯心 +神仙糖买卖 +买卖神仙糖 +可待因供应 +供应赭曲毒 +删除负面帖 +美肉商人 +艳兽都市 +娱乐棋牌城 +芳邻好土 +客栈老板 +岁月无声 +代理增值票 +流泪的狼 +在幽微处 +爱的灵感 +兽心沸腾 +北极之北 +醉人倾离 +好人难为 +活色生香 +亲爱的人 +卿心依旧 +三角关系 +轻落天下 +蓝颜有奕 +末裔之殇 +夜魅袭阳 +超级官迷 +超火司机 +飘飘欲仙 +村长后宫 +浪漫官途 +乡村教师 +乱村佳人 +销售听话水 +听话水专卖 +供应锡锋b51 +专卖pcp新贵 +大户家丑 +山野情债 +人面兽医 +小村糙事 +后宫男医 +邪魔上身 +剁饼子服务 +pcp货到付款 +大玩家娱乐 +娱乐城棋牌 +中握b50供应 +销售中握b50 +直销中握b50 +订购中握b50 +供应中握b50 +提供中握b50 +中握b50销售 +中握b50直销 +转让中握b50 +中握b50订购 +中握b50转让 +中握b50提供 +专卖古柯叶 +专卖可待因 +专卖喵喵药 +专卖安纳咖 +直销可待因 +直销麦角胺 +专卖ghb原液 +直销ghb原液 +直销安眠酮 +订购可待因 +订购安眠酮 +订购安纳咖 +订购古柯叶 +订购ghb原液 +供应碘化钠 +掌心雷销售 +掌心雷供应 +砖石冰提供 +麦角胺直销 +喵喵药直销 +喵喵药供应 +专卖赛洛新 +直销赛洛新 +订购赛洛新 +供应二恶英 +销售丛林刀 +三棱刀销售 +三棱刀订购 +订购三棱刀 +龙凤配网站 +乡野痞医 +美妙人妇 +肉体买家 +警花出更 +荒村野性 +媚骨销魂 +在线看黄片 +色影视导航 +金宝博188BET +三棱刀转让 +销售长治筋 +直销长治筋 +订购长治筋 +提供长治筋 +长治筋销售 +长治筋供应 +长治筋直销 +长治筋订购 +长治筋提供 +丛林刀直销 +订购美沙酮 +美沙酮直销 +美沙酮订购 +美沙酮提供 +买卖钻石冰 +提供芬太尼 +提供芽子碱 +提供埃托啡 +订购阿桔片 +提供丙吡兰 +提供呋替啶 +提供氢可酮 +供应左啡诺 +三棱刀供应 +订购喵喵药 +喵喵药订购 +麦角胺订购 +订购麦角胺 +销售麦罗啡 +销售哌替啶 +销售赛洛新 +销售蒂巴因 +销售替力定 +销售丙吡兰 +销售阿桔片 +销售卡西酮 +销售已色胺 +销售古柯叶 +销售芽子碱 +销售埃托啡 +销售芬太尼 +销售呋替啶 +销售氢可酮 +销售左啡诺 +销售醋托啡 +销售ghb原液 +麦角胺提供 +李宗瑞种子 +办假学生证 +摇头糖供应 +同志电影网 +汽木仓供应 +气抢专卖网 +喵喵药提供 +直销安纳咖 +直销钻石冰 +直销液态冰 +直销朝鲜冰 +直销古柯碱 +直销户外刀 +在线摸奶秀 +转让三棱刀 +三夫妻开房 +庐江门种子 +乐博娱乐城 +宝马娱乐城 +买卖摇头糖 +冠军娱乐城 +真龙娱乐城 +至尊娱乐城 +膛线管专卖 +销售膛线管 +直销膛线管 +转让膛线管 +王民生艳照 +三夫妻下载 +三夫妻种子 +逍遥丸供应 +真钱棋牌室 +现金娱乐城 +警官证买卖 +麦角胺供应 +供应麦角胺 +藏刀专卖网 +销售安乐死 +慢性毒神药 +销售可待因 +销售安纳咖 +销售安眠酮 +销售鼻吸剂 +销售扒皮刀 +销售羊骨刀 +销售十字锁 +提供美沙酮 +金钱豹娱乐 +和记娱乐城 +百乐坊娱乐 +直销执勤装 +直销喵喵药 +直销听话水 +直销三棱刀 +办假警官証 +办理警官証 +棋牌娱乐城 +皇冠娱乐城 +提供蜘蛛刀 +蜘蛛刀提供 +色娱乐导航 +专卖麦角胺 +提供麦角胺 +直销警官证 +直销美沙酮 +销售麦角胺 +销售喵喵药 +色狐中文站 +麦角胺销售 +宾利娱乐城 +龙博娱乐城 +战神娱乐城 +豪博娱乐城 +日博娱乐城 +古柯碱供应 +军官证办理 +提供tnt教程 +杜冷丁买卖 +专卖蜘蛛刀 +美沙酮供应 +永利现金网 +警官证销售 +专卖警用棍 +专卖警官证 +买卖警官证 +购买警官证 +户外刀专卖 +开心色播网 +警官证专卖 +供应美沙酮 +专卖美沙酮 +自制tnt方法 +自制tnt教程 +蜘蛛刀专卖 +办假警官证 +第四色导航 +草榴导航网 +谷露影院网 +日日色影院 +提供喵喵药 +最新人妻斩 +自制烟雾弹 +提供古柯碱 +复仇一条龙 +卖业主信息 +拍肩粉销售 +大色逼电影 +未成年接客 +购买木邦刀 +供应斩马刀 +提供平头刀 +供应警官服 +专卖锡锋b51 +新款打死跌 +国产手拉长 +澤尻繪裡香 +诚 信 办 证 +提供液态冰 +各式警常服 +喵喵药合成 +三利达专卖 +电子干扰仪 +门锁干扰仪 +销售警官证 +色大哥影院 +色中阁影院 +哥要插影院 +植物化壆冰 +五四式专卖 +听话水电话 +小妹和帅哥 +供应三棱刀 +色百合导航 +冷兵器专卖 +我爱小姨子 +江南柔娘子 +供应警官证 +四房色播网 +色色播电影 +草榴社区网 +色酷色影院 +经营汽狙狗 +警官证供应 +大色咪影院 +素人俱乐部 +色色人体图 +美女色导航 +供应荷兰水 +仓井空电影 +空天使种子 +空天使全集 +欧美色漫图 +一个色导肮 +包你爽到射 +唐刀专卖网 +色悠悠成仁 +一品色导航 +色播电影网 +原装汽狙狗 +供应杜冷丁 +商丘单车网 +办理真凭文 +真人娱乐城 +插妹妹电影 +溴化铯供应 +学历证办理 +八旗娱乐网 +极品留学生 +眯眯俱乐部 +快活谷论坛 +广西桑拿网 +小姐电视台 +狼族娱乐网 +号码任意显 +365在线投注 +高消费名录 +真钱扎金花 +同性恋上门 +欢乐谷导航 +成娱色导航 +亚洲贴图区 +欧美转帖区 +欧美贴图区 +亚洲转帖区 +办假房产证 +办假结婚证 +办理户口本 +办理行驶证 +办理军官证 +供应黎城面 +第四色快播 +供应长治筋 +咪咪色色网 +任意显软件 +供应任意显 +寻找夜夜情 +办假导游证 +购买学历证 +办理学生证 +销售掌心雷 +供应掌心雷 +供應麥角酸 +銷售黃牙簽 +供應苯三酚 +獵槍制造图 +高价收腎脏 +供应高压狗 +銷售高压狗 +提供高压狗 +供應高压狗 +销售高压狗 +高价收腎源 +賣假人民幣 +找职業殺手 +手机变号机 +代购手機007 +找職業殺手 +帮人被欺负 +警官证办理 +律师证办理 +办理律师证 +办理国安证 +我爱狐狸精 +彈簧刀专卖 +卖假身份證 +卖真身份證 +幫人被欺負 +麥角酸配方 +摇头糖合成 +黃牙簽配方 +麻黃素配方 +神仙糖配方 +搖頭糖配方 +白牙簽配方 +摇头糖配方 +人妻俱乐部 +香港三中三 +平码三中三 +麥角酸出货 +卖仿真手槍 +鉆石冰出货 +黃牙簽出货 +搖頭糖订购 +白牙簽订购 +麻黃素订购 +神仙糖订购 +黃牙簽订购 +钻石冰订购 +摇头糖订购 +鉆石冰订购 +麥角酸订购 +QQ订购high粉 +神仙糖出货 +摇头糖出货 +搖頭糖出货 +白牙簽出货 +麻黃素出货 +仿真槍专卖 +仿真槍到货 +卖冰钻手机 +卖冰钻电话 +卖冰磚电话 +摇头糖到货 +麥角酸到货 +神仙糖到货 +搖頭糖到货 +白牙簽到货 +黃牙簽到货 +麻黃素到货 +QQ销售high粉 +供应麻黃素 +供应白牙簽 +供应黃牙簽 +供应鉆石冰 +供应麥角酸 +供应大冰磚 +搖頭糖销售 +鉆石冰销售 +黃體酮销售 +麥角酸销售 +白牙簽销售 +黃牙簽销售 +麻黃素销售 +供应神仙糖 +供应摇头糖 +神仙糖销售 +三利达直销 +三利达官网 +三利达地址 +手机qie听器 + 99suncity.net.cn + fancylook.com.cn + muxingtianxia.cn +2个倒数第一 +官话4级教材 +夺得8金以后 +dang在玩社会 + wuhanwuchang2008 +kscm945紧缩版 +h1n1殃及股市 +离中国5公里 +3穘誸惑方式 + simin0809hotmail + zydbzj168hotmail + redhotcollection + shoujijiantingqi + triazolamtablets +代樯桃蛋l票 + 81'*'095112416105 + 7051589882818772 + sunyong320722126 + hvu7w7o2nk648o0w + bjyunqiwenhua163 + lihaitaook163com + health588blogbus + 3'*'2011968060122 + asf0022selfipnet + asf0023webhopnet + jiaoyukaoshiwcom + happy0535lifecom + chengrenjiqingcn + pragmaticenglish + xuesheng512gmail + wztj168ons365com +全国2nai大赛 +牛b的萨达姆 +无权指挥8341 +四川1000万吨 +家人4次报警 +索尼VGN-TX57CN +舍生取义 庭 +1992年5月13日 +9500多套图纸 +个性照片T恤 +硫酸3乙基锡 +2丁基氧化锡 +乙酸3乙基锡 +乙酸3甲基锡 +6亚甲基亚胺 +6二硝基苯酚 +2硝基重氮酚 +3苯基羟基锡 +氧化2丁基锡 +3乙基乙酸锡 +醋酸3甲基锡 +2甲基亚硝胺 +4氨基氮杂苯 +3亚乙基密胺 +3宫6院7十2妃 +色之戒4合院 +2甲基丁酸酯 +3硝酸纤维酯 +双赢百2对单 +红9真人娱乐 +办理医师证q +g片免费下载 +日本g片下载 +免费g片下载 +cp99配件直销 +cp99配件销售 +提供654k配件 +654k配件专卖 +供应654k配件 +冷妹妹2影院 +cp99配件专供 +订购m4a1配件 +订购cp99配件 +提供cp99配件 +cp99配件专卖 +1000人斩下载 +官员群P艳照 +庐江群p种子 +亚洲g片下载 +制取petn方法 +官员群P照片 +庐江官员群P +三对夫妻群P +庐江群p照片 +PENT制作过程 +开心8娱乐城 +2012中考答案 +人美B嫩图文 +真实的世界2 +冰zhuan销售QQ +最新1000人斩 +卖high粉手机 +卖high粉电话 +e夜情俱乐部 + zh.wikipedia.org +反对08奥运会 +4个2和一对王 +09mba考题作废 +流感80是甲流 +不會蒸發的89 +不会蒸发的89 +你好韩国16集 + jinshirekaospaces + stytzk1939hotmail + laohujigaoshoucom + 3'*'29195210195126 + zhoukai7590163com + asf0025isacheforg + baisui010foodqscn + baisui020foodqscn + baihuikejiwangcom + jiqingredian007cn + xintangrendianshi +京v019至京v028 +57苦难的祭坛 + witnessinghistory +68名顶尖武林 +21日世界末日 +30日搬出华杰 + SevenYearsinTibet +《12个春秋》 +39种有毒食品 +南洋10大邪术 + 135-4406-6974 + Nine commentaries +生成身份證qq +巴力WILD CAT C5 +N亚硝基2甲胺 +41H3H嘧啶二酮 +4-氨基氮杂苯 +2-甲基丁酸酯 +2-环己烯-1-酮 +丙3醇3硝酸酯 +乙2醇2硝酸酯 +温彻斯特1000X +34714151620庚醇 +NG与乙醇配成 +幸福蜜月30天 +qq賣虎頭雙管 +qq賣左輪手槍 +qq賣仿真槍模 +qq賣禿鷹汽槍 +供应k3精炼粉 +供应k2精炼粉 +真人现金21点 +龙虎万隆前'*' +假本科学历qq +苍井空av下载 +在线真钱21点 +3D打印CAD文件 +狙3d设计图纸 +qq供应芬太尼 +假工程师证qq +度冷丁供应QQ +QQ专卖迷晕药 +qq四级证制作 +qq四级证办理 +qq专卖四级证 +专卖四级证qq +四级证办理qq +qq销售甲喹酮 +qq气动狗转让 +qq专卖汽木仓 +购买拍肩粉qq +供应黄樟素qq +四级证专卖qq +供应哌甲酯qq +qq军官证制作 +中握pcp专卖qq +qq专卖气动狗 +手拉狗买卖qq +提供手拉狗qq +手拉狗转让qq +提供pcp新贵qq +供应pcp新贵qq +办理四级证qq +买卖气动狗qq +qq销售气动狗 +销售气动狗qq +专卖气动狗qq +qq可待因专卖 +qq可待因订购 +订购致癌药qq +qq订购安钠咖 +qq供应可待因 +qq提供致癌药 +qq销售安钠咖 +qq销售折叠刀 +qq提供折叠刀 +qq直销折叠刀 +qq订购折叠刀 +qq供应折叠刀 +qq直销安钠咖 +qq供应安钠咖 +买卖礼花弹qq +提供致癌药qq +直销丛林刀qq +qq办理四级证 +黄樟油销售qq +黄樟油提供qq +黄樟油供应qq +黄樟油订购qq +黄樟油直销qq +qq购买喵喵药 +qq销售开他敏 +qq购买开他敏 +qq订购开他敏 +开他敏购买qq +供应开他敏qq +订购开他敏qq +购买开他敏qq +提供开他敏qq +购买喵喵药qq +qq订购迷晕药 +qq直销迷晕药 +qq购买迷晕药 +qq提供迷晕药 +qq销售迷晕药 +订购迷晕药qq +直销迷晕药qq +购买迷晕药qq +提供迷晕药qq +qq购买苍蝇粉 +qq直销苍蝇粉 +qq订购苍蝇粉 +qq提供苍蝇粉 +qq订购失忆粉 +qq直销失忆粉 +qq销售失忆粉 +qq购买失忆粉 +qq提供失忆粉 +购买失忆粉qq +购买长治筋qq +供应失忆粉qq +订购失忆粉qq +直销失忆粉qq +销售失忆粉qq +提供失忆粉qq +订购苍蝇粉qq +购买苍蝇粉qq +qq直销锡锋b51 +qq提供户口本 +qq销售昏睡药 +qq供应安眠酮 +失意粉提供qq +蜘蛛刀供应qq +供应失意粉qq +qq供应听话水 +销售朝鲜冰qq +qq提供哌替啶 +qq提供拍肩粉 +销售军官证qq +喵喵药销售qq +钻石冰销售qq +销售折叠刀qq +销售迷晕药qq +qq销售本科证 +销售成品冰qq +qq提供开他敏 +qq供应开他敏 +提供哌替啶qq +开他敏销售qq +销售开他敏qq +开他敏供应qq +qq提供可待因 +提供古柯叶qq +供应古柯叶qq +qq供应古柯叶 +qq提供古柯叶 +供应拍肩粉qq +qq供应拍肩粉 +qq提供膛线管 +qq销售杜冷丁 +qq订购杜冷丁 +qq提供杜冷丁 +提供汽木仓qq +订购钻石冰qq +提供苍蝇粉qq +qq订购军官证 +办理学历证qq +qq销售苍蝇粉 +qq供应苍蝇粉 +提供pcp套件qq +安眠酮销售qq +李宗瑞bt种子 +订购拍肩粉qq +供应安眠酮qq +拍肩粉提供qq +拍肩粉供应qq +销售拍肩粉qq +提供可待因qq +可待因专卖qq +安眠酮直销qq +销售杜冷丁qq +销售苍蝇粉qq +供应苍蝇粉qq +杜冷丁销售qq +订购杜冷丁qq +k7娱乐城开户 +线上真钱21点 +杜冷丁购买qq +杜冷丁直销qq +qq直销杜冷丁 +qq购买杜冷丁 +开他敏提供qq +开他敏订购qq +杜冷丁提供qq +李宗瑞全集bt +专卖度冷丁qq +二代证制作qq +qq直销拍肩粉 +购买听话水qq +qq制作本科证 +qq办理学历证 +买卖杜冷丁qq +军官证制作qq +qq订购拍肩粉 +qq销售拍肩粉 +提供军官证qq +直销军官证qq +qq销售军官证 +制作军官证qq +办理等级证qq +qq制作等级证 +qq办理等级证 +qq制作军官证 +供应可待因qq +办理假学历qq +qq警官证制作 +qq五氧化二钒 +庐江不雅照bt +古桃色联系QQ +塑料冰供应qq +礼花弹qq供应 +提供折叠刀QQ +提供折叠刀qq +日本av之旅 +kk娱乐城网站 +线上kk娱乐城 +办假资格证qq +高价收骨髓QQ +美沙酮销售qq +供应士兵证qq +销售摇头糖QQ +销售美沙酮qq +QQ供应喵喵药 +供应喵喵药qq +供应军官证qq +王民生宾馆6p +BB体育娱乐城 +删除负面贴qq +网上真钱21点 +蜘蛛刀买卖qq +供应蜘蛛刀qq +销售蜘蛛刀qq +供应喵喵药QQ +qq制作警官证 +仿真手拉狗QQ +老年人数据QQ +网络专卖74式 +网络专销85式 +销售黃牙簽QQ +qq卖仿真槍模 +qq卖虎頭獵槍 +QQ销售大冰磚 +QQ销售麥角酸 +QQ销售鉆石冰 +QQ销售黃牙簽 +QQ订购小冰磚 +QQ订购搖頭糖 +QQ订购摇头糖 +QQ销售麻黃素 +QQ销售白牙簽 +QQ销售搖頭糖 +QQ订购黃牙簽 +QQ订购麻黃素 +QQ订购神仙糖 +QQ订购钻石冰 +QQ订购麥角酸 +QQ订购鉆石冰 +QQ订购大冰磚 +QQ订购白牙簽 +卖间苯三酚QQ +卖間苯三酚QQ +QQ供应小冰磚 +QQ供应冰鉆石 +QQ供应搖頭糖 +QQ销售摇头糖 +QQ销售神仙糖 +QQ销售小冰磚 +第十六次代表 +践踏中国女性 +三坊七巷火灾 +瘟总再杆五年 +帐篷就会脱销 +希xi望wang之声 +现代英雄传奇 +手机截听器 +手机窃听器 +魔界活动转区 +腾讯幸运之星 +富人与农民工 +广州火车春运 +十大忽悠名言 +当今六大谎言 +国际足坛五大 +扶不起的阿斗 +想不到的黑幕 +这年头就这样 +公务员的工资 +科技精英遇难 + campofyourself.com + shipinwangzhan.com +网络推广软件 +网络营销工具 +语音广告群发 +乐众国际娱乐 +香港图源总汇 +说艳门男女爽 +桑拿房玩小姐 +淄博的性产业 +管理就是收费 +当今三大扯蛋 +地痞各霸一方 +歌星不能入党 +跟进村泪汪汪 +喝酒基本靠贡 +翻身改做小姐 +捍卫党的纯洁 +喜迎油价上涨 +奶所以被弃也 +中国弱智现象 +汉语谐音艺术 +丫就不会入党 +可要向党交心 +中学生售货员 +关于毛的故事 +政府忽悠百姓 +北方尽出祸害 +中国股市荒诞 +自比秦皇张献 +欢迎李朋同志 +政黨玩弄社會 +用英语问小平 +做為裆的幹部 +急裙中之所急 +奴颜婢膝之陡 +妈好象党中央 +干部上任请吃 +民工不得入内 +酒桌殷勤献献 +石油如此稀少 +钱不贪权不沾 +西方洪水泛滥 +叩头处处破费 +再不撤退破产 +震前鸦雀无声 +羞专家他先人 +地球调成震动 +挖掘基本靠手 +李宁跑出画卷 + 512228 +土匪都剿灭了 +上级官位难保 +父母下岗儿下 +可以踢翻小贩 +神舟发射后面 +狗屁民族政策 +渔肉百姓为荣 +全都男盗女娼 +祖英照顾民哥 +长征路过这村 +毛澤栂律硪煌 +就算地球不转 +十大缺德行业 +公僿真是笨蛋 +检查就是接待 +割肚子要红包 +公务奢华程度 +费用就比军费 +地方政府衭幹 +结果人命万碎 +国民一直挨饿 +胡歌遭遇华仔 +剿匪勇士来电 +抽烟喝酒有益 +独唱回家吃饭 +钱换权能通天 +非食用冰醋酸 +售海樂神司 +香港二类ghb水 +美国菲力普窃 +高锰酸钾和糖 +提供彈道導彈 +羞辱中国足球 +骗子公司大全 +榦景緒絡公司 +见过人吃人肉 +下载代理软件 +自动代理软件 +震得耳赤舌甘 +旭日厨行抢劫 +过滤软件之争 +科技频道被关 +超级翻墙组合 +最肮脏的十种 +开平女中学生 +传球基本靠瞅 +三鹿经典广告 +奶源收购问题 +地沟油炒的菜 +感谢河北三鹿 +喂添加剂的猪 +奶农说是奶牛 +吮吸污染奶滴 +生成一瓶三鹿 +当残奥会冠军 +大米里有石蜡 +有话对三鹿说 +石粉掺进面粉 +肉瘤配做包子 +油桶改当烤炉 +广元蛆虫柑橘 +林场追踪疫情 +怕有孔雀石绿 +三鹿最新广告 +三鹿直奔黄泉 +招募山寨足球 +把玩中国足球 +农场辅助工具 +牛血兑洗衣粉 +劣质蜜饯加工 +肯德鸡的内幕 +养蟹人不吃蟹 +吃四川的橘子 +三鹿代言明星 +毒食品大曝光 +蔡家城的毁灭 +搜狐攻击腾讯 +肯德基又出事 +莫拉克扑闽浙 +甲流死亡事件 +不敢违背王鑫 +光环下的五粮 +375路公交车灵 +异象频现中国 +匿名代理软件 +股票软件代理 +巟大寃生禁食 +领大学生禁食 +见新疆人就打 +广场上的鲜血 +人民的求救信 +果敢人民泣拜 +果敢汉人开战 +难民涌入中国 +果敢战争起因 +川渝教师罢教 +新疆人在韶关 +弹落入中国境 +维护中缅边境 +维族学生狂殴 +教師羣課請願 +六月股灾出来 +股民不是人民 +股民的一封信 +石油套死出来 +人寿股权去向 +调查中国证监 +股民手中套钱 +股是越套越深 +资金已被牵引 +我站在中石油 +中石化说亏损 +股票倒数第一 +股民挨个换套 +中国平安讣告 +中国石油腰斩 +牛市一去不返 +万科给中石油 +中国石油悼文 +跌股中国石油 +给中石油的信 +石油放心不下 +被套渴望解套 +中石油给万科 +散户半年总结 +股民答会割肉 +今天不看大盘 +股民埋在弖墟 +股民埋在废墟 +股市如此多娇 +质问威视股份 +检阅套牢股民 +被套股民方阵 +买啥啥套方队 +天兵战争集团 +三三九乘元功 +无上师电视台 +佛教音乐下载 +格色拉的祈祷 + dingxiangroomcomcn +少媎噴血誸惑 +日本人妻网站 +朋友妻大家骑 +透明紧身白裤 +黑袜美女狂舞 +少媎亮絲誸惑 +换卫生巾过程 +全都插进去了 +欧美美女套图 +夫妻互换对搞 +绷带石膏爱好 +美女沙滩换衣 +极品美女秘书 +超爽午夜剧场 +抚上仁大腿间 +不能使劲捏奶 +我的放荡生活 +宇宙而章三光 +夜生活俱乐部 +重庆兼职妹妹 +身份譪生成器 +提供网络攻击 +胶水特殊处理 +网上快速诚信 +网上快速办理 +免试大学毕业 +让你远离罚单 +领导忽悠百姓 +武汉诚诺电子 +私家侦探用品 +富丽毕业设计 + xinxiwangjiaoyucom +包您通过考试 + luotishipinzhancom +考试咨询联盟 +一次性通呖荚 +考试一手答案 + sy178261150hotmail +专业老牌机构 + 362'*'7196507100012 +网站推广软件 +北京办毕业譪 +快速办理执业 +华悦电子科技 +先考试再付款 +佳华安防设备 + chouenlailafengnet + bloodisonthesquare + globalcompetitions +运通投资信贷 + asf0021webhopnet83 + secretchinacomnews + lyrz9888blog163com + tianyakefubokeecom +考前不收分文 + jiguangdiaokejicom +办理雅思托福 +权威一手答案 + lijuhantiansinacom +欺负民用车辆 +可悲的新千年 +坚持杀萨达姆 +删改侵华史实 +丢解放军的脸 +胡佳获诺贝尔 +恶性殴斗案件 +当街将人打死 +当街殴打致死 +人類滅亡年表 +抬蒋不必抑毛 +公务员李文娟 +陇南民变现场 +证监会不作为 +检察官张金祥 +谴责法国总统 +需要p3c来巡逻 +进京抓捕记者 +取消农业户口 +系列户改措施 +取消农村户口 +地方政府瞒报 +检察官进京抓 +取消户籍制度 +克里斯汀案件 +带编号的014733 +刘志军罢免掉 +十大丑陋人物 +温相该不该哭 +退伍军人堵路 +内地十大提案 +灵宝抗旱黑幕 +豪华出殡队伍 +预言人类灭亡 +王斌余杀人案 +民间监政组织 +中國應當復仇 +重庆哨兵被杀 +评毛大力催生 +狡猾的风水相 +驻渝部队门岗 +警官毁灭证据 +江苏民众事件 +市民疯抢口罩 +世界末日頰言 +医药代表李佳 +小平料事如神 +强行强拆为耻 +歪风在通知里 +好干部邓贵大 +独壮玉娇之行 +县长之女率众 +懒官们的一天 +北逃十字路口 +共工与耶和华 +藐视上级征府 +皇叔街转拐处 +永信出卖佛教 +焚烧161次京沪 +职工群体斗殴 +葛丽英被拘留 +五月瘟神下界 +纳米比亚行贿 +漢人持械出動 +趁火打劫央视 +纳税养了一群 +掏空中国资源 +京城特权车牌 +新国会纵火案 +黑煤窑包身工 +开着公车撞人 +泪水流在中国 +酷刑对待中国 +人民不敢说话 +给总理支一招 +总理才提协调 +转业干部工资 +世间难字当头 +封媒体阻散步 +未来八大劫难 +500万买的警务 +灌火油入酒瓶 +通天语的声母 +国家是一条狗 +要农民掏腰包 +声讨相关部门 +传递是该暂停 +幼儿活活被埋 +群体道德缺失 +京师万民送葬 +企业收奶流程 +一切都怪星矢 +村主任李东洋 +中南海保镖们 +中国已经亡了 +苦恼的中国人 +执法将被拘留 +无群众之呼声 +佳纵火于闸北 +田文华看守所 +广东揭阳惊爆 +占道拜访花圈 +同伙车某父亲 +殴打死大学生 +云集上海法庭 +金融派系倾轧 +学生砍死教授 +翌年不足万余 +猥亵女童事件 +报警者被击毙 +教师致县政府 +海南大学霍乱 +新中国三十年 +家人四次报警 +还是党的国家 +李东风的妻子 +统计水分最多 +公仆真是笨蛋 +圈套给周总理 +痛殴农用三轮 +汪洋不被追责 +藏着利益黑洞 +中国就快消亡 +坚持反修斗争 +救楼市是救百 +怒了国家的法 +国家公器蒙羞 +刘伟私建违章 +广州酒吧暗访 +丑陋的中国人 +百姓严重缺粪 +规范干部泡妞 +广东幕僚无数 +杨佳母亲现身 +神州传播协会 +嫌疑人李兴辉 +做人不要太cnn +500人打砸警车 +冲击株洲市府 +粪青和老粪蛋 +团长是张耀祠 +开印钞机还债 +安局长崔春晖 +徐洁为其添丁 +林场开始戒严 +安徽姑娘李蕊 +派出所就猝死 +奴隶少女新娘 +隐瞒征召女兵 +送政府也不管 +挖心割蛋抖肠 +党是为了欺骗 +批评政府帖子 +护矿变成守灵 +指导员王松善 +局长被打致死 +群众包围政府 +背叛了陶斯咏 +总理全家福照 +李淑莲赤着脚 +李淑莲被惊醒 +怒香港女记者 +小姐也有人格 +女职工张美霞 +出动300余名警 +建堂筹备小组 +緎權人士胡佳 +预测了杨利伟 +政委马群自恃 +部队打砸酒店 +我再派兵去砸 +反围剿形势图 +中國緎權人士 +白领遇见黑领 +曹操是韩国人 +郭泉案辩护词 +可恶的任志强 +落网鼠会是谁 +帖谴责奥巴马 +爱滋村里的爱 +北京市委黑幕 +北京宣传部长 +大熊猫被猎杀 +大众真人真事 +蛋白合成激素 +党内内部资料 +德国进口宝马 +颠覆中国政权 +东土耳其斯坦 +东西南北论坛 +对外高层人事 +飞天舞蹈学校 +粉碎林陈材料 +告全体网民书 +国家政府档案 +国研新闻邮件 +后勤资料手册 +华语世界论坛 +话在肉身显现 +黃海暗殺事件 +监狱里的斗争 +旧金山总领馆 +觉醒了的中国 +军事训练大纲 +军需物质保管 +军需物资保管 +酷睿2双核T7200 +李伟信的笔供 +两岸三地论坛 +领导财产公示 +領導財產公示 +民间手工艺品 +奶粉里都有毒 +你说我说论坛 +钳制网络言论 +侵犯国外专利 +人民之声论坛 +瑞士金融大学 +删除通话记录 +沈昌人体科技 +生命树的分叉 +省委大门集合 +圣灵重建教会 +十七人事安排 +十七位老部长 +世界经济导报 +双腿间的禁地 +苏军情况汇编 +特价国际机票 +万维读者论坛 +维吾尔信息社 +卫星安装调试 +我的鳥羽兄弟 +下届总理人选 +香港惠泽社群 +新疆反恐纪实 +新闻总署粗暴 +血溅人民天堂 +央视内部晚会 +易趣在线购物 +真空度测试仪 +指点江山论坛 +中国复兴论坛 +中国社会论坛 +中国问题论坛 +中国真实内容 +中国政坛新星 +中华大地思考 +中华人民正邪 +中华真实报道 +钟山风雨论坛 +重庆婚纱摄影 +重庆物业公司 +自主择业军官 +最高绝密新闻 +中国劳工通讯 +阿里布达年代 +北京箱子包子 +地下的先烈们 +杭州地铁坍塌 +乱弹人物揭晓 +山西襄汾溃坝 +不扣钮的女孩 +挡不住的风情 +镜花风月春降 +镜花风月系列 +满清禁宫秘史 +满清十大酷刑 +南洋第一邪降 +南洋十大邪降 +裴斗娜的体验 +色降II-血玫瑰 +十大丑陋语录 +十大无耻发言 +唐朝禁宫风云 +我的演员女友 +现代白蛇艳谈 +友邦正通学历 +中国死刑揭秘 +中南海大决战 +自制固体火箭 + anies-registry.org + chinacitywater.org + gentle-essence.com + movequickly.com.cn + starcollege.com.cn + zhongxin-china.com +电话追杀系统 +社会主义灭亡 +私家侦探服务 +卫星广播器材 +无人性的政权 +氧化二丁基锡 +乙酸三甲基锡 +乙酸三乙基锡 +治疗红斑狼疮 +中国过渡政府 +中国网络审查 +中南海恩仇录 +红外线照相机 +辦教师资格證 +公司绝对保证 +光学变色油墨 +无弹窗小说网 +找俄罗斯妞服 +粉红大布娃娃 +颠覆国家政权 +代理各种执照 +注册香港公司 +珠海九龙医院 +强效FM2销魂水 +苗猪繁育基地 +烟囱脱硫防腐 +皮肤淀粉样变 +女性生殖内分 +立体技术培训 +精气神元气袋 +雀斑修复原液 +腰椎间盘突出 +男士养生会馆 +美容美发培训 +牙齿美容图片 +牙齿美容流程 +牙齿美容标准 +精密牙齿美容 +牙齿美容知识 +重新牙齿美容 +铸瓷牙齿美容 +无痛牙齿美容 +活髓牙齿美容 +瓷冠固定义齿 +精密附着义齿 +舌侧牙齿矫正 +耳鼓式通话器 +防爆罐牵引车 +厦门完美装饰 +手机通话记录 +悬赏兼职发帖 +网上发帖赚钱 +网络炒作培训 +删除负面贴子 +十大欠抽人物 +阿樱的悄悄话 +包括黑暗黎明 +不道德的秘密 +吃下一群妖男 +传奇之狂风传 +大公司的圣姑 +虎頭獵槍销售 +手機改號軟件 +卖三箭牌气槍 +小飞型号订购 +製造緬古合成 +雙管獵槍销售 +買賣鷹牌獵槍 +真钱棋牌游戏 +显示任意号码 +温彻斯特 1000X +軍品銷售公司 +遥控卷帘车架 +GX2005共享终端 +三苯基羟基锡 +左旋溶肉瘤素 +烯丙基芥子油 +三乙基乙酸锡 +醋酸三甲基锡 +绿藜芦生物碱 +二甲基亚硝胺 +枸橼酸芬太尼 +三亚乙基密胺 +毛地黄叶毒苷 +可可粉苯丙胺 +甲基安非他命 +美女倒提金方 +考验最新答案 +卷帘型车牌架 +考试专用设备 +紫外灯验钞笔 +六级阅读答案 +门禁卡拷贝机 +六级真题答案 +六级英语答案 +交通安全报警 +交通安全导航 +非电导爆系统 +软件免费下载 +2'*'异酸甲苯酯 +2'*'硝基邻甲酚 +3'*'甲基氮杂苯 +各类考生信息 +纸币货到付款 +过机版人民币 +恶人成长日记 +翻手男覆手女 +功夫如此多娇 +寒江作品合集 +皇极生作品集 +皇家娱乐指南 +极品雅词文集 +极品异能宅男 +江山如此多娇 +姐姐马上红润 +金庸小说改编 +绝代艳修之旅 +浪荡皇帝秘史 +灭主异世销魂 +魔女天妖全集 +飘在北京续篇 +妻不如妾盛天 +三国极品军师 +色鬼师异界行 +山麓百货商店 +铁屋中的呐喊 +脱落的小背心 +往事未付红尘 +我的极品老婆 +我的教师生涯 +我的警花老婆 +我的美女大人 +我的美女情劫 +我的青年岁月 +我身边的美女 +乡村如此多娇 +销魂倚天神雕 +小邪女荡妖传 +小昭养成计划 +性海浪子系列 +一个人的圣经 +伊底帕斯之镜 +异世法师传奇 +越之极品色女 +紫狂作品合集 +总裁的小秘书 +不过藏历新年 +博客贴子删除 +上海皓康汽车 +腾讯最新漏洞 +高假仿人民币 +狡猾的风水师 +大鸟鹰作品集 +东莞洪升科技 +苏州同济医院 +正健纳米保健 +獵槍子彈供應 +手槍子彈供應 +步槍子彈提供 +獵槍子彈提供 +步槍子彈供應 +手槍子彈提供 +步槍子彈銷售 +獵槍子彈銷售 +手槍子彈銷售 +荷兰叶子供应 +有偿帮人复仇 +新注册送彩金 +皇冠国际足球 +战神国际娱乐 +长乐坊娱乐城 +如意坊娱乐城 +删除帖子服务 +删贴服务电话 +网络删贴服务 +号码显示软件 +办英语等级证 +英吉沙刀专卖 +打水软件足球 +多彩打水软件 +现金网络棋牌 +禁断介护快播 +美空模特路遥 +雅蠛蝶影视网 +一起干妹妹网 +人妻恥悦旅行 +金发白虎女模 +快播日本电影 +售真实二代证 +供应花纹钢刀 +色狗中文娱乐 +办理民办学历 +户外露胸舔鲍 +快播痴汉电车 +小姐楼凤信息 +我的美艳岳母 +贝特斯娱乐城 +现金娱乐投注 +色片在线直播 +销售一体直刀 +订购一体直刀 +供应组合棍刀 +宝格丽娱乐城 +高尔夫娱乐城 +大家玩娱乐城 +壹贰博娱乐城 +走地皇娱乐城 +金三角娱乐城 +新普京娱乐城 +替人帮忙复仇 +找人帮忙复仇 +哈瑞斯娱乐城 +十六蒲娱乐城 +黄金城娱乐城 +红财神娱乐城 +盈丰国际平台 +牡丹国际娱乐 +保健全套上门 +帮人办事复仇 +国产模特私拍 +负面删除公司 +免费美女luo聊 +替人解气了仇 +华侨人娱乐城 +供应莫达非尼 +利博国际娱乐 +口工游戏下载 +销售普斯普剂 +提供替马西泮 +销售替马西泮 +客户资料专卖 +业主数据专卖 +业主资料专卖 +凯斯网娱乐城 +提供高空烟花 +麦司卡林供应 +武士长刀专卖 +专卖慢性毒药 +在线赌钱投注 +淘宝阿普唑仑 +代人复仇了事 +楼凤免费信息 +老人资料提供 +老人资料买卖 +销售阿普唑仑 +供应高空烟花 +提供阿普唑仑 +专卖阿普唑仑 +买卖慢性毒药 +直销阿普唑仑 +车主资源供应 +安乐死药供应 +安乐死药提供 +色咪咪色导航 +楼凤信息大全 +订购阿普唑仑 +供应业主数据 +提供老人资料 +供应老人资料 +股民数据提供 +车主资源提供 +供应神奇蘑菇 +提供神奇蘑菇 +神奇蘑菇供应 +神奇蘑菇专卖 +线上现金娱乐 +真钱棋牌网站 +房主信息销售 +女性数据供应 +销售考生数据 +品色论坛网址 +供应安乐死药 +真钱网上棋牌 +提供半圆刮刀 +车主资料提供 +业主资料提供 +提供绿皮瓦管 +提供黄曲霉素 +警用电棒提供 +提供警用电棒 +提供等级证书 +车主信息提供 +业主信息提供 +删除负面评论 +供应半自动pcp +三棱尖刺供应 +供应高仿证书 +销售业主资料 +销售车主资源 +业主信息销售 +销售业主信息 +销售警用电棒 +业主数据供应 +提供业主数据 +物流数据销售 +销售家长资料 +业主数据销售 +销售老人数据 +警用标志销售 +车主资源销售 +销售业主资源 +销售考生资源 +考生资源销售 +股民数据销售 +销售车主档案 +犯人数据销售 +销售云南情蛊 +顺丰数据销售 +打猎专用工具 +销售面单数据 +缅甸果子销售 +销售户主资料 +销售半自动pcp +老人数据销售 +供应美秃套件 +供应专科学历 +提供甲硝西泮 +甲硝西泮供应 +尼美西泮销售 +尼美西泮提供 +云南情蛊销售 +甲硝西泮销售 +甲硝西泮提供 +日本幼幼合集 +老人数据供应 +皇冠在线代理 +制作假户口本 +转让三棱刮刀 +购买手工猎刀 +手工猎刀购买 +手工猎刀提供 +买卖手工猎刀 +转让手工猎刀 +订购三棱刮刀 +三棱刮刀订购 +购买三棱刮刀 +三棱刮刀购买 +提供三棱刮刀 +三棱刮刀提供 +三棱刮刀销售 +直销三棱刮刀 +买卖三棱刮刀 +罂子粟壳订购 +罂子粟壳送货 +删除网上新闻 +删除网上消息 +供应膛线狗管 +供应特警装备 +真钱牌九游戏 +业主资料销售 +销售老人资料 +警用装备供应 +提供云南情蛊 +慢性毒药直销 +专卖三棱尖刺 +供应三棱尖刺 +办理假学生证 +提供黎城辣面 +艳照种子全套 +提供波推服务 +皇冠代理网址 +皇冠备选网址 +提供ghb水配方 +ghb水配方供应 +ghb水配方提供 +删除负面博客 +处理负面消息 +爪刀手刺购买 +爪刀手刺订购 +爪刀手刺供应 +供应爪刀手刺 +购买爪刀手刺 +提供爪刀手刺 +爪刀手刺提供 +销售爪刀手刺 +爪刀手刺销售 +订购爪刀手刺 +转让爪刀手刺 +买卖爪刀手刺 +爪刀手刺代理 +代理爪刀手刺 +爪刀手刺直销 +删除不利信息 +提供高仿证书 +办理学士学位 +提供国考答案 +在线赌钱游戏 +提供专科学历 +删除负面消息 +直销美秃套件 +转让美秃套件 +买卖美秃套件 +提供美秃套件 +慕郎百花羞 +小女花不弃 +琉璃美人煞 +艳欲十二宫 +风月艳留香 +枕上春残本 +别有香残本 +皇冠线上开户 +提供帮人复仇 +提供负面处理 +提供负面删除 +美女多多影院 +娇美的舅妈 +都市品香录 +豪门浪荡史 +迷乱的村庄 +西北大通炕 +驱妖女仆队 +家庭欲火全 +武林红杏传 +说了不再爱 +抱你在身边 +弄儿的后宫 +虚拟与现实 +人妻送友骑 +被女人玩弄 +姑姑和妈妈 +猎爱的男人 +为情字煎熬 +替人了事办人 +替人办事复仇 +代人办事复仇 +碧玉鸳鸯扣 +婚前120小时 +删除负面影响 +百乐彩全讯网 +高价收养女孩 +高价抱养婴儿 +直销手工猎刀 +妻诱之情趣 +企业负面清理 +负面贴文清理 +诽谤信息清理 +造谣信息清理 +负面评价清理 +诽谤帖子清理 +负面评价清除 +诽谤帖子清除 +清除诽谤帖子 +黎城辣面供应 +供应黎城辣面 +订购黎城辣面 +直销黎城辣面 +销售黎城辣面 +黎城辣面销售 +黎城辣面提供 +王民生不雅照 +私售销售气槍 +cp99配件提供qq +楼房奇遇夜 +专卖人造脸皮 +网上现金开户 +扬州棋牌热线 +订购慢性毒药 +从青春走过 +不吃草的牛 +天下父母心 +月真的瘦了 +微微的微笑 +荒村大觉醒 +神医的克星 +淡淡柠檬草 +你的二我懂 +看上去很直 +妻子的付出 +十八岁猛汉 +院长办公室 +乱情马窝村 +禁恋深陷迷 +狂野逃离富 +最佳抵债妻 +妇产科医院 +大院春意浓 +失贞的都市 +大叔我爱你 +攀上女领导 +供应印花税漂 +三棱刮刀供应 +半圆刮刀直销 +提供半自动pcp +供应警用电棒 +警用电棒供应 +业主信息供应 +车主信息供应 +供应业主信息 +供应等级证书 +专卖甲硝西泮 +直销甲硝西泮 +直销间苯三酚 +直销尼美西泮 +订购间苯三酚 +订购甲硝西泮 +供应尼美西泮 +供应甲硝西泮 +有偿收养小孩 +真钱娱乐平台 +制作高仿证书 +办理高仿证书 +真钱电子游戏 +现金电子游戏 +足球真钱投注 +艳照种子下载 +奥克托今供应 +二乙基汞供应 +供应无水哌嗪 +间苯三酚销售 +销售间苯三酚 +供五氧化二钒 +庐江门不雅照 +订购云南情蛊 +网上真钱娱乐 +供应四乙基锡 +销售学生数据 +销售学生资料 +提供学生数据 +提供学生资料 +供应速递数据 +销售速递数据 +足球现金开户 +供应学生数据 +提供仿真面皮 +提供易容面皮 +供应儿童数据 +车主名单销售 +专卖业主名单 +专卖车主资料 +提供业主信息 +监狱数据供应 +供应小孩数据 +供应学生资料 +预订野营猎刀 +买卖三棱尖刺 +转让三棱尖刺 +提供三棱尖刺 +三棱尖刺提供 +订购三棱尖刺 +三棱尖刺订购 +三棱尖刺直销 +直销三棱尖刺 +三棱尖刺买卖 +供应三棱毒刺 +专卖三棱毒刺 +皇冠在线娱乐 +维加斯娱乐场 +皇冠备用网址 +人妻四部曲 +生命的奔流 +杨野的禁脔 +吸血三姐妹 +校长办公室 +泷泽罗拉种子 +虚假负面删除 +乐天堂现金网 +下载日韩色片 +888真人娱乐场 +负面消息清除 +负面消息清理 +提供储户信息 +提供考生信息 +高仿学位办理 +直销快开工具 +快开工具销售 +供应烟花爆竹 +删除诽谤帖子 +消除诽谤信息 +真钱娱乐游戏 +删除新闻评论 +删除帖子信息 +删除造谣信息 +清除诽谤信息 +供应丙二酸鉈 +丙二酸鉈供应 +地芬诺酯提供 +地匹哌酮提供 +提供已甲噻丁 +提供依托利定 +提供依托尼秦 +订购甲地索啡 +订购非诺啡烷 +非诺啡烷订购 +提供吗苯丁酯 +已环利定提供 +提供尼可待因 +左美沙芬提供 +美他佐辛提供 +提供地美沙朵 +提供二甲噻丁 +户主资料供应 +夜色撩人社区 +销售苯哌利定 +销售甲地索啡 +销售诺美沙朵 +销售诺匹哌酮 +销售非诺啡烷 +销售匹米诺定 +销售丙哌利定 +销售瑞芬太尼 +销售舒芬太尼 +销售醋氢可酮 +销售三甲利定 +销售右丙氧芬 +销售尼可待因 +销售福尔可定 +销售已环利定 +销售贝齐米特 +销售阿法罗定 +销售阿尼利定 +销售可多克辛 +销售右吗拉胺 +销售地恩丙胺 +销售二已噻丁 +销售地芬诺辛 +销售地美沙朵 +销售二甲噻丁 +销售吗苯丁酯 +销售地芬诺酯 +销售地匹哌酮 +销售已甲噻丁 +销售依托利定 +销售依托尼秦 +销售异美沙酮 +销售左美沙芬 +销售美他佐辛 +销售阿芬太尼 +销售醋美沙朵 +二乙基汞销售 +四氧化锇提供 +提供四氧化锇 +四氧化锇销售 +销售四氧化锇 +李宗瑞照片门 +四氧化锇直销 +直销四氧化锇 +供应野营猎刀 +直销安乐死药 +慢性毒药专卖 +李宗瑞完整版 +供应慢性毒药 +直销黄曲霉素 +供应黄曲霉素 +直销慢性毒药 +供应绿皮瓦管 +转让绿皮瓦管 +供应绿瓦瓦管 +销售绿皮瓦管 +日韩色片地址 +帮人解决纠纷 +蝴蝶谷色色网 +蝴蝶谷中文网 +幼幼之家论坛 +四氧化锇供应 +直销硝甲西泮 +直销警用肩章 +直销警用棍刀 +直销警用器材 +直销警用钢叉 +订购绿皮瓦管 +直销绿皮瓦管 +绿皮瓦管专卖 +转让二手猎刀 +庐江照片全集 +警衔专卖电话 +警衔销售电话 +办理认证证书 +办理认证学位 +大东方娱乐城 +战术直刀销售 +专卖战术直刀 +在线体育投注 +手机现金下注 +现金真人游戏 +官员宾馆艳照 +办理六级证书 +供应战术直刀 +尊尚会娱乐城 +大赢家娱乐城 +庐江高清艳照 +庐江不县雅照 +办理假残疾证 +供应四氧化锇 +车主名单供应 +真钱棋牌导航 +业主名单专卖 +业主名单销售 +供应警械装备 +业主名单供应 +网络皇家赌城 +帮人寻仇出气 +季戊四醇销售 +季戊四醇合成 +提供保险数据 +学历证书买卖 +买卖职称证书 +销售有机溶剂 +在线真人娱乐 +删除诽谤信息 +负面论坛删除 +真钱骰宝娱乐 +专业删除论坛 +速删负面消息 +在线赌钱网站 +最新天然素人 +股民名录销售 +供应股民名录 +股民名录供应 +专卖股民名录 +股民名录专卖 +股民名录提供 +提供股民名录 +供应警用器材 +提供女性数据 +高价收养小孩 +最新色站地址 +提供业主名单 +清扫负面消息 +高偿收养婴儿 +高偿收养儿童 +专卖雅思答案 +供应业主资料 +线上现金下注 +资格证书制作 +职称证书制作 +专卖警用装备 +办理职称证书 +论坛负面删除 +博客负面删除 +微博负面删除 +直销警用装备 +职业替人寻仇 +论坛负面清除 +提供讨债服务 +专卖顺风面单 +销售股民数据 +老人数据提供 +洪爷论坛地址 +性吧最新网址 +品色最新地址 +网购数据销售 +网购数据提供 +网购数据供应 +麦角新碱销售 +提供打鸟木仓 +同乐城娱乐城 +乐天堂娱乐城 +八大胜娱乐城 +房主数据买卖 +找人毁容电话 +找人消灾电话 +网络现金赌钱 +了仇了事电话 +自制爆竹电话 +车主资料销售 +警用肩章销售 +供应军警装备 +销售警用肩章 +销售甲硝西泮 +销售尼美西泮 +永利高投注网 +专业删除信息 +删除信息服务 +清除网上信息 +警用棍刀销售 +供应警用棍刀 +销售警用棍刀 +提供警用棍刀 +在线真钱平台 +车主资料供应 +提供顺丰面单 +提供中考答案 +提供吡咯戊酮 +槍支订购热线 +硝甲西泮提供 +硝甲西泮专卖 +硝甲西泮销售 +专卖硝甲西泮 +提供硝甲西泮 +手槍子彈专卖 +2012答案预售QQ +手把手教做tnt +2012考生资料QQ +现金游戏平台 +鸡婆服务信息 +供应网购数据 +销售网购数据 +提供电购资料 +供应电购资料 +销售物流数据 +供应物流数据 +提供物流数据 +销售电购资料 +提供业主名录 +百乐门娱乐城 +网上现金游戏 +最新车主资料 +最新強檔合輯 +开心四房色播 +帮人复仇电话 +供应警用装备 +投注平台出租 +学生家长名单 +烟雾弹的配方 +银行客户数据 +拍拍用户数据 +军官档案数据 +帮人灭口电话 +淘宝卖家数据 +保险用户数据 +社保用户数据 +医保用户数据 +警务文职档案 +全国车主信息 +全国富豪资料 +外汇客户资料 +期货客户资料 +一手车主资料 +一手车主信息 +最纯的钻石冰 +提供大斩马刀 +打造单槽苗刀 +专业定制马刀 +转让中号棍刀 +国模私拍套图 +皇冠网址大全 +供应老人数据 +洋妞特服上门 +限量版打死跌 +销售高纯度冰 +业主资料供应 +提供老人数据 +提供制毒工具 +销售申通面单 +提供申通面单 +色站在线观看 +盘锦办理証件 +学位英语答案 +北京警灯专卖 +进口原装美秃 +转让进口MP-661 +供应犯人名录 +土冰制作方法 +办假军警官证 +提供开户信息 +销售信丰面单 +最新业主信息 +银行储户信息 +各式警用常服 +色片在线地址 +办理建造师证 +爱逼爱操影院 +提供幼儿信息 +小姐全套服务 +提供老板资料 +提供车主信息 +提供车主电话 +上门陪睡电话 +军工配件组装 +女子车内意外 +出卖业主资料 +供应女性数据 +销售女性数据 +供应户主资料 +提供婴儿数据 +警用电棒专卖 +烟花爆竹专营 +夫妻成长日记 +我和我的女人 +销售监狱数据 +供应监狱数据 +提供监狱数据 +提供犯人数据 +供应犯人数据 +销售犯人数据 +职业帮忙复仇 +专业帮忙复仇 +办理假资格证 +办理假等级证 +办理假军官证 +高纯度冰订购 +上门陪睡服务 +黄金城娱乐场 +二代锡纸工具 +代删负面贴子 +销售车主资料 +销售车主名单 +销售业主名单 +供应车主资源 +供应车主名单 +供应业主名单 +供应车主资料 +提供股民数据 +供應假人民幣 +网络公关删贴 +假人民幣銷售 +銷售假人民幣 +夜店兼职女郎 +真钱龙虎游戏 +供应股民数据 +提供收藏数据 +一手老人数据 +小姐全套信息 +办英语六级证 +办律师执业证 +手机变号平台 +供应三棱刮刀 +供应半圆刮刀 +办理假户口办 +烟花爆竹电话 +同性恋俱乐部 +性吧最新地址 +大母牛综合网 +金卡会员资料 +设定任意号码 +皇冠在线投注 +网上真钱骰宝 +迷失少女天堂 +最新业主名录 +全国车主资料 +金领白领数据 +真人二十一点 +犯罪替人说情 +同志拉拉服务 +财务代理公司 +财税有限公司 +办理统考证书 +小姐保健上门 +第四色男人网 +警用手电专卖 +辦理本科文憑 +制作假警官证 +专业删贴服务 +办理假户口本 +办理假结婚证 +办理假房产证 +精品直刀系列 +办理国外证书 +在线现金娱乐 +号码随意显示 +提供胸推服务 +仿真槍模专营 +买卖雙管獵槍 +专业帮人复仇 +供应仿真槍模 +供应虎頭獵槍 +供应禿鷹汽槍 +銷售虎頭獵槍 +銷售仿真槍模 +銷售禿鷹汽槍 +提供禿鷹汽槍 +提供虎頭獵槍 +供應虎頭獵槍 +提供仿真槍模 +供應禿鷹汽槍 +供應仿真槍模 +销售仿真槍模 +销售虎頭獵槍 +销售禿鷹汽槍 +定做人造脸皮 +销售硅胶面皮 +销售易容面皮 +销售易容脸皮 +销售仿真脸皮 +销售高仿脸皮 +销售人造脸皮 +定做人造面皮 +销售硅胶脸皮 +销售人造面皮 +专业幫人清债 +专业幫人杀人 +销售高仿面皮 +指定号码改号 +指定号码变号 +任意号码变号 +代购手機間諜 +手機監聽軟件 +潛伏者免費版 +007間諜改良版 +007間諜專業版 +手機竊聽軟件 +007间谍增强版 +007间谍改良版 +007间谍专业版 +销售溫切斯特 +供应溫切斯特 +提供溫切斯特 +溫切斯特到货 +溫切斯特出货 +溫切斯特订购 +溫切斯特电话 +找人辦事毀容 +专业地下警隊 +专业解決情敵 +专业解决小三 +专业解决情敌 +专业地下警队 +仿真气槍销售 +制造特殊死亡 +找人办事毁容 +手工刀奴专卖 +野營軍刀专卖 +手工獵刀专卖 +野營手斧专卖 +M9-D80軍刀专卖 +制式軍刀专卖 +三棱軍刺专卖 +办理假身份證 +办理真身份證 +代制假身份證 +卖假冒身份證 +卖真实身份證 +专卖进口气槍 +销售进口气槍 +进口气槍销售 +制造意外死亡 +制造意外消失 +帮人处理恩怨 +替人处理恩怨 +幫人處理恩怨 +替人處理恩怨 +专业找人辦事 +间苯三酚配方 +間苯三酚配方 +冰鉆石石配方 +冰磚送货上门 +間苯三酚出货 +間苯三酚订购 +间苯三酚订购 +间苯三酚出货 +卖摇头糖手机 +卖麻黃素手机 +卖神仙糖手机 +卖钻石冰手机 +卖小冰磚手机 +卖冰鉆石手机 +卖搖頭糖手机 +卖白牙簽手机 +卖黃體酮手机 +卖大冰磚手机 +卖钻石冰电话 +卖鉆石冰手机 +卖摇头糖电话 +卖神仙糖电话 +卖麥角酸手机 +卖黃牙簽手机 +卖搖頭糖电话 +卖冰鉆石电话 +卖小冰磚电话 +卖白牙簽电话 +卖黃牙簽电话 +卖麻黃素电话 +卖麥角酸电话 +卖鉆石冰电话 +間苯三酚到货 +间苯三酚到货 +手槍子彈電話 +訂購步槍子彈 +電話獵槍子彈 +訂購手槍子彈 +電話步槍子彈 +性吧春暖花开 +供应間苯三酚 +間苯三酚销售 +供应间苯三酚 +銷售间苯三酚 +2005语录排行榜 +大学生0604运动 + chengrenliaotianshi +招呸k理國外文 +1074套豪华住宅 + PowertotheFalunGong +奥运爱国t恤衫 +讲事实 要说法 +九·十·三运动 +动画-小羊肖恩 + datasupermarket.com + green-furniture.com + hair-transpl.com.tw + selectthinktank.net + starstudying.com.cn + libertytimes.com.tw +N乙烯基氮丙环 +2硝基邻甲酚钠 +E世博线上娱乐 +爱搞逼综合X网 +ewin娱乐城开户 +有卖慢性毒药q +办理c1驾驶本qq +fx季候风销售qq +cp100配件订购qq +李宗瑞275g下载 +李宗瑞275g全套 +俄罗斯654k提供 +蒋大彬群P种子 +庐江县艳照群P +petn的制作过程 +提供美女luoliao +銀行卡復制器 +溫切斯特1000Xqq +卖假1代身份證 +卖1代假身份證 +卖2代假身份證 +卖假2代身份證 +卖真2代身份證 +卖真1代身份證 +high粉送货上门 +内地核试19万人 +中石油48元之颠 + picnicatjarlungriver + tearsthatflowinchina +04式第六代军牌 +10种肮脏的职业 +60周年策划袭击 +毛伟人主政41年 +中24刀后被炸飞 + JucelinoNobregadaLuz +qq幸運用戶抽獎 +加盖机密×××× +12项吉尼斯排名 + powerleveling888.com + st1-fx.com + urban-planning.co.jp +prada酷妃不好惹 +snowxefd作品合集 +24二异酸甲苯酯 +N-乙烯基氮丙环 +24二硝基邻甲酚 +2丙炔1醇炔丙醇 +34二甲基氮杂苯 +庚烯2双羟甲基5 +环3亚甲基4硝胺 +环4亚甲基4硝胺 +季戊4醇4硝酸酯 +3硝基间苯2酚铅 +GeekCook淘宝门市 +qq賣健衛小口徑 +制造车祸残废qq +负面报道删除qq +删除百度信息qq +转让99式伞兵刀 +转让65式伞兵刀 +仁科百华bt种子 +有偿骨髓中介qq +黄曲毒霉素售qq +冲田杏梨bt种子 +删除帖吧负面QQ +专业删除帖吧QQ +假资格证办理qq +qq假资格证制作 +qq假资格证办理 +供应高仿警帽QQ +删除天涯论坛qq +有偿收养男宝qq +有偿收养女宝qq +有偿收养男童QQ +银行客户资料qq +娱乐城注册送38 +高仿学历qq办理 +qq直销阻击步狗 +qq专卖假军官证 +专卖假军官证qq +制作假军官证qq +qq考生数据供应 +qq业主名录供应 +qq提供客户资料 +QQ供应购物数据 +QQ购物数据供应 +qq婴儿数据专卖 +负面贴吧清除qq +删除贴吧帖子qq +英语考级证书qq +办假营业执照qq +王梦溪108gb种子 +qq老人资料供应 +qq股民数据供应 +qq业主资源供应 +qq老人数据专卖 +qq女性数据专卖 +qq男性数据专卖 +客户数据专卖qq +qq警用肩章供应 +qq假户口本专卖 +qq假户口本办理 +qq阿普唑仑销售 +老人数据专卖qq +女性数据专卖qq +男性数据专卖qq +老人资料供应qq +qq供应男性数据 +qq快递数据供应 +qq物流数据专卖 +qq学生数据供应 +供应考生数据qq +qq提供业主资料 +qq供应考生资料 +qq提供车主资料 +办理留学学历qq +假行驶证办理qq +买卖阿普唑仑qq +qq销售客户资料 +销售客户资料qq +供应阿普唑仑qq +女性数据提供qq +qq提供安乐死药 +qq供应收藏数据 +qq供应阿普唑仑 +代人解决恩怨qq +删除负面微博qq +qq提供车主资源 +负面消息处理qq +qq假行驶证办理 +业主资源供应qq +QQ供应面单数据 +婴儿数据专卖qq +考生数据供应qq +提供客户资料qq +业主名录供应qq +购物数据供应QQ +供应购物数据QQ +提供购物数据QQ +qq销售车主信息 +删除负面报道qq +替人解决恩怨qq +专业解决恩怨qq +虚假信息快删qq +供应收藏数据QQ +办理学位学历qq +云南情蛊供应qq +云南情蛊直销qq +有偿抱养男婴qq +有偿抱养女婴qq +有偿抱养婴儿qq +qq订购警用电棒 +提供车主资源qq +提供速递数据qq +提供户主资料qq +qq销售等级证书 +警用电棒销售qq +提供面单数据qq +提供考生数据qq +物流数据供应qq +供应礼品数据qq +供应减肥数据qq +车主信息销售qq +销售房主数据qq +老板资料销售qq +qq销售快递面单 +销售假资格证qq +销售购物数据qq +qq销售股民名录 +销售警用标志qq +销售客户数据qq +半圆刮刀销售qq +销售警用器材qq +销售苯基甲酮qq +qq车主信息销售 +销售进口迷烟qq +销售等级证书qq +qq提供尼美西泮 +提供尼美西泮qq +qq提供快开工具 +清理诽谤帖子qq +qq万能强开供应 +提供假健康证qq +qq提供车主名单 +删除网上信息qq +删除网上帖子qq +买安乐死药物qq +供应保险数据qq +销售国考答案qq +提供中握套件qq +高价收养婴儿qq +ghb水配方专卖qq +专卖尼美西泮qq +qq专卖尼美西泮 +qq提供正规真票 +提供正规真票qq +提供博士学历qq +警用电棒买卖qq +删除博客帖子qq +校园4p的记忆 +提供业主资料qq +下载av影片地址 +qq提供慢性毒药 +qq销售慢性毒药 +销售车主信息qq +半圆刮刀供应QQ +论坛帖子清理qq +供应麦司卡林qq +qq制作假军官证 +有偿认养孤儿qq +av电影种子下载 +解决私人恩怨QQ +庐江6P打包下载 +日本最新av电影 +提供论坛删贴QQ +三棱刮刀买卖QQ +删除负面评价QQ +销售麦司卡林qq +制造意外收费qq +安乐死药直销qq +办理专八证书QQ +提供安乐药物QQ +提供考生资料QQ +销售业主数据QQ +昆明6p快播照片 +王民生6p门下载 +清除企业负面qq +官员宾馆5P照片 +专业删除新闻QQ +删除负面公司QQ +清除企业负面QQ +警用常服供应qq +销售股民名录qq +警用装备专卖qq +购买真实学历QQ +办理国外学位QQ +办理国外学历QQ +删除论坛帖子qq +删除百度快照QQ +制作假资格证qq +订购警用钱包QQ +小区业主信息QQ +小妹24小时服务 +提供网购数据qq +防身警用电棒QQ +网络信息删除QQ +提供网购数据QQ +兼职白领上门QQ +供应车主信息QQ +销售少儿数据QQ +供应少儿数据QQ +提供少儿数据QQ +烟花送货上门QQ +爆竹送货上门QQ +flexispy官方网站 +xwodi软件版下载 +xwodi软件官方网 +办理会计师证QQ +日本援助小姐QQ +金融客户资源QQ +小姐包吹包做QQ +提供硅胶面皮QQ +提供高仿面皮QQ +手槍子彈訂購qq +步槍子彈訂購qq +獵槍子彈訂購qq +QQ销售間苯三酚 +QQ订购間苯三酚 +卖鹽酸羥亞胺QQ +卖左旋麻黃素QQ +养殖户的求救书 +学姐和我的故事 +从圣地寻求财富 +确保北京的水利 +金鳞岂是池中物 +卫星遭黑客攻击 +急聘兼职打字员 +千术赌术大揭秘 +欲与霆锋试比高 +阿娇不以陈卑鄙 +龚宇拿著银白色 +录像厅陪看小姐 +两腿一夹几百块 +宁波姑娘最放肆 +悟净的层次最低 +中山领导流浪汉 +法官把法律搞乱 +领导干部吃王八 +警车不再乱鸣笛 +抢劫警车是违法 +小蜜像中国移动 +不办案子只开会 +人民还当牛做马 +职务消费是个筐 +复议就是找上级 +电信我们是亏损 +官商警匪多勾结 +归牛花满俯卧撑 +拉出小姐干一干 +最绿的一届政府 +政府也能设赌局 +开会没有不隆重 +愚弄百姓的旧招 +工资好比眉毛短 +中国最令人恶心 +官员们加官进爵 +领导小姐你先摸 +辽东铁骑带笑意 +罚得刁民见阎王 +见到局长不收费 +血泪工厂工人苦 +政府签单给废了 +教师阳光工资版 +成语解释的纠正 +党的宗旨成空谈 +身边官员难见廉 +公仆工资涨得快 +自古未闻屎有税 +小姐代表发个言 +水晶棺里的遗容 +天下恶官应丧魂 +新衙只对百姓狂 +太祖高皇帝本纪 +废话议案排行榜 +我抓台谍好助选 +起步就能喝一斤 +两个高院挺清闲 +不讲真话身不明 +外星人来看奥运 +如此艰难的一年 +开幕式方案曝光 +没房没车谁嫁你 +横批就是不会射 +三千万人齐下岗 +孙悟空之混沌道 +美国是棵卷心菜 +三国首脑去打猎 +老胡说他不干了 +怎么面对魏键行 +中山頸導流浪漢 +澤民頸導貪污犯 +要不变成李莲英 +思鍃思權思小蜜 +思钱思权思小蜜 +党和人民对立了 +等不到翻译回来 +大人吃奶是零食 +喂奶群众都看见 +机关干部四大傻 +理直气壮正党风 +少奇为了包装毛 +白崇禧不仁不义 +布什向胡哥借钱 +领导的小蜜我们 +小秘书左右领导 +莫友比择更筒裤 +畏首畏尾保乌纱 +歌女也把将星扛 +满城争说宋小娘 +中国又卒于中国 +陕西绵羊吃老人 +牢头牢霸打死你 +才打赢官司遭报 +初级阶段过不完 +工作肯定在法院 +真主上帝试比高 +让领导秘密舒服 +三不反对执政党 +唯独中国急推广 +电珠丝发热引燃 +沟里提炼食用油 +在线代理服务器 +中国男足有多愁 +使猪的皮红毛亮 +十本最有害的书 +旗帜网已经被封 +为绿坝找的台阶 +黑客眼里的隐私 +惊现甲骨文作文 +不如三鹿结石好 +把责任推给奶农 +送礼就送三鹿奶 +冲袋奶粉给党喝 +男足指定专用奶 +三聚加强版奶粉 +帮毒奶事件解围 +放多了点蛋白精 +桔子出现寄生虫 +许晴和老公内幕 +河北书坛的怪相 +宇独霸河北书坛 +奶牛们产奶不当 +这些食品你吃过 +全聚德和中石油 +脸红的国人智慧 +敢吃中國大閘蟹 +不要买太仓肉松 +水果是人为造毒 +中国足球弊端重 +大清邮政局被拆 +邮政局未批先拆 +妛克勞核反應堆 +奥克劳核反应堆 +新疆天空现天眼 +维族与汉族冲突 +边痛斥假药危害 +招揽大批新疆人 +维族人两少一宽 +记者无疆界组织 +外交给缅甸压力 +华人正遭受战火 +罢教运动倡议书 +套牢让人心憔悴 +股民死绝都活该 +为解套拼命补仓 +股评惑众贾机灵 +被套总比祸国强 +到石化吃苦受累 +连连下跌至跌停 +向石化大哥问好 +五指山股份给套 +代问茅台老弟好 +股民的血色悲歌 +追涨买后变熊样 +股改成了穷光蛋 +深度套牢两年半 +破了太保破石油 +已是股市百丈冰 +设赌与沪深二市 +埋在证券大厅旁 +股票未见油已荒 +中石油家内豢养 +中国股市的悲哀 +踩在股民的头上 +沉迷与股海之中 +布达拉宫的回声 +致敬仁波切上师 +加伦河畔的野餐 +仁波切上师西行 +宇宙空间全黑暗 +寂莫网上寻聊友 +夫妻性教育电影 +美女大秀钢管舞 +舔屁沟我很激动 +春情泛滥办公室 +给成年人士观看 +吞下带血卫生巾 +地下金屬探測器 +推广小助手发送 +考试百分百通过 +成绩单网上可查 +一手操作带试卷 + cuiaingyaoblogspotcom +快速办理专本科 +包高分一次通过 +龙虎保单预测仪 +查看密码的软件 +遥控车牌遮挡器 +售胜利之日脚本 +院校点招带军籍 + tk787680010blog163com +那块石头上的字 +公务员十大丑陋 +周恩來清譽背後 +人类灭亡时间表 +国家道德的缺失 +年代大饥荒纪实 +吉首非法集资案 +祖英有一张红卡 +我国法律太软弱 +低素质国民进城 +谈特岗教师工资 +中国现状之问答 +法官黄松有被抓 +出租车停运事件 +党性污染者除外 +司法不公有冤案 +封堵省政府大门 +玩具厂冲突事件 +纸上国法靠不牢 +爱国版吉祥三宝 +解放军静得可怕 +上骟省委党中央 +收费只收燃油税 +教师仍囊中羞涩 +八佰伴劳资纠纷 +取消农村户籍让 +毛润之本是天上 +酒后开警车肇事 +别玩你的子民了 +知譺分子劉曉波 +中领馆前烧毛像 +医药代表万建国 +副大队长熊玉儿 +再富不能富教育 +钱造假新闻吓唬 +日本的惊人秘密 +燃油税如此开征 +剑桥演讲被扔鞋 +莫道穷乡出暴民 +获知毛家祖先坟 +在中国叫爱国者 +银行是弱势群体 +我引台资入国库 +赼得嚴城暫住身 +赢得严城暂住身 +耀邦保护免获咎 +贪出了科学依据 +左某持刀杀人后 +参观美军基地后 +日軍對中國媎女 +反恐演练的内幕 +跨省抓发帖网民 +中国是毛盾社会 +鲁德成和喻东岳 +遇难学生总名单 +让领导同志先走 +谴责无德海贝尔 +美伊战争小学版 +劫后天府泪纵横 +自己去舔掉辣椒 +八星级办公大楼 +爆发的真正内幕 +今年猪是疯狂的 +美帝有施毒嫌疑 +领头低俗是官衙 +中国洗脚妹之歌 +爱国文化衫运动 +贴能惊动党中央 +邓贵大最后的话 +毛是最大的凶神 +声明划清的化名 +质问衡水组织部 +石首某领导参股 +做人不能太高也 +七十年後的劫难 +抹去印记度劫难 +郑州当政非秦桧 +港女寃歷乲不低 +年收入赶超微软 +摇其夫语猥亵事 +绿坝子和谐天下 +被绿坝识破动机 +境外邑指挥煽动 +魏元志双腿粉碎 +同方子公司涉嫌 +汽油降价不和谐 +载人都是一二人 +血流成河尸骨山 +总理夫人做生意 +再穷也得过圣诞 +中央是谁的中央 +家宝听了很烦恼 +做中国人的孩子 +中国请为我哭泣 +金正日通电六方 +百姓怕的医疗费 +为了排名告网大 +商业殖民统治者 +背后的巨大丑闻 +教师的友邦人士 +汗颜的世界第一 +苏黎世力挺宝钢 +总参技术侦察部 +大涨的真正原因 +谴责中国红十字 +便于言说的纪念 +不见亚洲的门槛 +开幕式惊现祼体 +中国人太不争气 +昧着良心的中国 +为藏语打抱不平 +愚昧的藏族学生 +世人纷说杨家子 +无耻的十大企业 +买遗体顶包火化 +哈尔滨糖果酒吧 +特大搶劫殺人案 +民众将警车掀翻 +中国的奇怪现象 +肖德松立即下课 +车牌照为琼a10815 +出警时带走吴俊 +漂流者抛尸黄河 +游锡堃可以信赖 +把我当作了苹果 +另眼看蒙古元朝 +同僚会场被带走 +无耻的公共知识 +湾最不友善国家 +思想界混乱得很 +神话诠释的社会 +神話詮釋的社會 +神话会走向文学 +经济以毁灭教育 +衰败跟文化水准 +工程交给小日本 +我是九号来天国 +建设时期大汗流 +美国真正的可怕 +美国的朝气宽容 +学生是怎样被傻 +朱閒基答记者问 +联络不上圣胡安 +接警员工作中玩 +九州婴幼泪痕新 +钦州港宅地侵权 +最牛的村镇干部 +杨佳姨妈王静荣 +张锐因吸毒被捕 +杨佳的青春档案 +丘家厉一直上告 +偶有奇侠怒涨冠 +杨师群被学生告 +潘建钗涉嫌行贿 +落水者是公务员 +毛伟人奇在哪里 +所谓的政府部门 +都不想回归中国 +前谍报官李凤智 +十年不屈的历程 +北京车牌大检阅 +造中国人民的反 +中国第一女保镖 +过河卒抱成一团 +担忧的不是黑恶 +派出所所长被打 +明娟以车震生活 +主播家中好丈夫 +年月褃转化为力 +总理夫人张培莉 +彭启荣和蔡发春 +没有就参军去吧 +打工和尚是高薪 +守望教会告会众 +中美打响贸易战 +捣蛋的教育部长 +最好的职业公污 +南方周末开天窗 +教会是被政府查 +领袖杨荣丽祷告 +上告教委整死你 +摊贩名叫刘建平 +得意狂夫万虑抛 +碾压阻挡的百姓 +不知悔改的韩寒 +两年逍遥官不问 +兵最少交人民币 +生征女兵的经历 +打劫得到的政府 +冉工继续开启民 +外衣下被私有化 +中国式引咎辞职 +民刊在中国的意 +中国盲动的民族 +教学生如何爱国 +寄生虫似的小镇 +山是京城的厕所 +普洛米修士受难 +谷歌不能离开中 +“震撼中”文件 +北大三角地论坛 +促红细胞生成素 +蛋白合成类固醇 +芳香型智悟气功 +广东饶平钱东镇 +褐铁矿选矿设备 +后方想定的编写 +华硕双核笔记本 +跨世纪的良心犯 +领导层预备人选 +马来酸迷达唑仑 +乔波室内滑雪馆 +神州电影制片厂 +省政府大门集合 +寻找林昭的灵魂 +中国社会进步党 +中华养生益智功 +中南海浓云密布 +建立生活性补贴 +风情万种野玫瑰 +广源橘子长桔蛆 +国防部长:曹操 +教育部长:孔子 +卫生部长:华佗 +箱子包子做肉馅 +杨白劳来电话问 +杨子荣来电话问 +高清晰未删节版 +中国承认影视网 +《圣经启示录》 +奥运会徽车祸版 +慈禧的秘密生活 +滅門慘案之孽殺 +南通儿童福利院 +三反五反杀地主 +三剑侠与飞机妹 +生人勿近之邪花 +私下肮脏的交易 +我的女友是二嫂 +无线影音发射器 +性工作者十日谈 +中国古代性戏观 +中南海波澜起伏 +中南海权力斗争 + shijixinxiu.bokee.com + wow-powerleveling.org +第三次世界大战 +网络推广扩散器 +中华养生益智气 +手机开机密码破 +网络工程师答案 + 1 3 7 3 6 0 3 9 9 3 9 +小说免费下载 +高档二手车销售 +七匹狼官方网站 +周大福官方网站 +周生生官方网站 +前列腺无痛人流 +深圳市格美空调 +深圳伊卡鲁斯微 +招聘兼职发帖员 +大面积心肌梗死 +热水器专业拆装 +爱上花心公子哥 +被缚的千面女王 +冰人幽灵神无心 +不要再来招惹我 +出牆王妃拐相公 +穿越之极品公主 +穿越之纨绔少爷 +大家东去狼涛尽 +氣動鋼珠槍購買 +買賣老虎頭獵槍 +鹽酸羟亞胺合成 +gps车辆监控系统 +甲基苄基亚硝胺 +462硝基邻甲苯酚 +二硝基邻甲酚钠 +甲基乙烯基甲酮 +羟基马桑毒内酯 +翻转汽车牌照架 +六级真题及答案 +智能车牌遮挡器 +汽车翻转牌照架 +邪掳极品小胖妞 +公务员考生信息 +天生我材必有用 +都市狂龙爱无边 +都市全异能大师 +感慨美国不一样 +广东亚运会事件 +何处金屋可藏娇 +狐王殿下别乱摸 +花香袭人春月塘 +坏坏老公别吃我 +混迹在嘉庆初年 +极品美女在身边 +家有妖男小小受 +艰难的接种经历 +江山美人逐鹿记 +姐姐嫁给我好吗 +惊恐天使档案簿 +克里斯蒂安战记 +酷总裁的妖娆妻 +怜花寻芳美人娇 +恋上董事长夫人 +凌家有女初为妾 +刘亦菲母女逢春 +美女妖怪别吃我 +美女主持赖上我 +梦想之天下女人 +魔女天娇美人志 +木里求丝称雄记 +溺宠爱妾好难缠 +女大学生宿舍506 +日本女学生图片 +倾城惑国女太监 +人生何处不多情 +三国牛人附身记 +色女的无情无爱 +色色母女闹古代 +射雕之杨康列传 +身侍六帝宠不衰 +神仙都在兜里揣 +谁看了她的屁屁 +谁占了她的身体 +桃花依旧笑春风 +替身王妃不承欢 +天煞孤星风云录 +天生我才必有用 +天使不眠的都市 +同学的可爱女友 +王者之佣兵天下 +网游之无限连击 +我的老婆是警花 +我的梦想在燃烧 +我和我妹妹雯雯 +我家相公是情兽 +仙人俗世生活录 +现代版三妻四妾 +现代情侠录泥男 +乡下的爱情故事 +小姐相公赖定你 +艳修之天地不容 +妖龙下蛋给你孵 +一个领主的养成 +一个太监闯内宫 +异界之三宫六院 +异世之封印人生 +英雄难过美人关 +月色下的上海滩 +这些年哋那些事 +至尊爱妃别太坏 +重生之极品妖孽 +重生之升官发财 +重生之仕途风云 +重生之逍遥至尊 +重生之妖孽人生 +总裁的二手新娘 +总裁爹地酷妈咪 +射进女儿的子宫 +放荡中的灵与肉 +修真之我是神偷 +我的姐姐是美女 +养个儿子做丈夫 +宠妃本王要定你 +恒亿佳免漆装饰 +三国美人一锅煮 +下岗工人长恨歌 +战国杂家吕不韦 +春暖花开电影网 +利高在线娱乐城 +皇冠备用投注网 +技术等级证办理 +办理假会计师证 +供应卡片折叠刀 +掘金者打水软件 +金皇国际娱乐城 +加勒比解禁中出 +尼姑庵的男保安 +麻仓优全集下载 +我的妈妈李彤彤 +魅惑波多野结衣 +万能变号王下载 +狠狠撸在线影院 +爱爱很爽很销魂 +女体拷问研究所 +帝宝娱乐城开户 +顶丰国际娱乐城 +鼎龙国际娱乐城 +澳门新世纪娱乐 +丰禾国际娱乐城 +永发国际娱乐城 +千亿国际娱乐城 +金界国际娱乐城 +金钻国际娱乐城 +铁杆国际娱乐城 +天猫国际娱乐城 +长江国际娱乐城 +宝马会线上娱乐 +华夏国际娱乐城 +假日国际娱乐城 +金牌娱乐城官网 +娱乐城注册送金 +澳门金沙娱乐城 +鸿博网络娱乐城 +麦角乙二胺订购 +皇室国际娱乐城 +麦角乙二胺供应 +万豪国际娱乐城 +金龙国际娱乐城 +新葡京娱乐在线 +皇冠线上娱乐场 +大富豪国际娱乐 +百乐门线上娱乐 +供应甲基本丙胺 +供应贝尔求生刀 +大发真钱娱乐城 +新时代娱乐城网 +888真人在线游戏 +豪门国际娱乐城 +二代证制作软件 +二代证生成软件 +老年人数据供应 +礼花弹厂家直销 +提供尼蒙尔克素 +直销尼蒙尔克素 +专卖尼蒙尔克素 +供应氨基氮杂苯 +销售听话喷雾水 +听话喷雾水销售 +买卖高仿等级证 +收藏品数据提供 +老年人资料提供 +专卖高仿四级证 +供应老年人数据 +保健品数据专卖 +易发国际现金网 +订购拍肩听话粉 +拍肩听话粉买卖 +拍肩听话粉专卖 +销售拍肩听话粉 +云南情蛊药供应 +云南情蛊药订购 +云南情蛊药直销 +云南情蛊药销售 +云南情蛊药购买 +云南情蛊药提供 +色站广告位销售 +保健品数据供应 +收藏品数据直销 +收藏品数据供应 +提供保健品数据 +销售收藏品数据 +销售老年人资料 +老年人资料销售 +销售从业资格证 +销售保险人数据 +销售pcp新贵配件 +pcp新贵配件销售 +供应研究生学历 +制作高仿户口本 +提供假体检证明 +买卖安乐死药物 +办理高仿户口本 +甲基笨丙胺销售 +提供安乐死毒药 +供应野外求生刀 +销售高仿警官证 +销售高仿军官证 +办理高仿军官证 +办理英语等级证 +制作高仿军官证 +有偿收养女宝宝 +高价收养男婴儿 +办理仿真户口本 +提供研究生学历 +楼凤上门剁饼子 +拍肩粉货到付款 +拍肩粉送货上门 +pcp新贵配件直销 +pcp新贵配件预定 +直销pcp新贵配件 +宋朝完美生活 +庶女攻略完结 +女总裁爱上我 +欢喜浪史在线 +都市风月奇谭 +办公室的沙发 +鹿鼎记性事传 +被遗忘的宝贝 +穿越没有理由 +清宫情空净空 +穿越与反穿越 +绣榻野史全集 +订购pcp新贵配件 +百乐门线上游戏 +办理职业资格证 +性吧地址发布器 +李宗瑞全集种子 +李宗瑞照片种子 +四氢吡喃酮提供 +女医生风情史 +像大树一样高 +越轨利欲熏心 +慈云寺男保安 +女领导男秘书 +闯荡火影世界 +意恋征服系列 +月荷这个女人 +女监狱男管教 +罪恶交易买妻 +极品乡村生活 +太子娱乐城网址 +太子娱乐城开户 +太子娱乐城官网 +姚记娱乐城官网 +姚记娱乐城网站 +金冠娱乐城网站 +金冠娱乐城官网 +空巢留守村妇 +优博在线娱乐城 +销售仿真金属狗 +直销仿真金属狗 +李宗瑞全集下载 +李宗瑞照片下载 +李宗瑞全套照片 +李宗瑞全套种子 +迪卡昏迷粉订购 +订购迪卡昏迷粉 +迪卡昏迷粉提供 +提供迪卡昏迷粉 +相思红娘剂直销 +直销迪卡昏迷粉 +直销相思红娘剂 +迪卡昏迷粉供应 +供应相思红娘剂 +供应迪卡昏迷粉 +相思红娘剂供应 +迪卡昏迷粉销售 +销售相思红娘剂 +销售迪卡昏迷粉 +相思红娘剂销售 +订购相思红娘剂 +提供相思红娘剂 +相思红娘剂提供 +相思红娘剂订购 +制作假学历证书 +供应四硝基甲烷 +四氢吡喃酮供应 +供应甲氧麻黄酮 +云鼎娱乐城网站 +无政府食谱资源 +无政府主义食谱 +皇冠官方投注网 +日本黄片电影网 +办理高仿资格证 +供应四氧化二氮 +订购二已基色胺 +提供倍他美罗定 +提供二氢埃托啡 +日本黄片大合集 +销售去甲左啡诺 +销售醋氢可待因 +销售双氢可待因 +销售去甲可待因 +销售二已基色胺 +销售阿法美沙朵 +销售倍醋美沙朵 +销售倍他美沙朵 +销售倍他美罗定 +销售二氢埃托啡 +供应居民户口本 +五氧化二钒提供 +五氧化二钒销售 +销售五氧化二钒 +李宗瑞不雅图片 +李宗瑞照片全集 +五氧化二钒直销 +直销五氧化二钒 +利盈在线娱乐城 +提供安乐死药物 +网上真钱炸金花 +李宗瑞迅雷种子 +五氧化二钒供应 +庐江县官不雅照 +昆明夫妻聚会照 +昆明三夫妻艳照 +庐江何婷婷艳照 +专卖俄罗斯MP654k +供应俄罗斯MP654k +销售俄罗斯MP654k +俄罗斯MP654k专卖 +直销俄罗斯MP654k +直销特警作战服 +特警作战服直销 +特警作战服预订 +特警作战服供应 +供应特警作战服 +特警作战服销售 +销售特警作战服 +特警作战服专卖 +专卖特警作战服 +188金宝博娱乐城 +夫妻不雅照种子 +至尊国际娱乐城 +钻石国际娱乐城 +金都国际娱乐城 +百胜百旺娱乐城 +乐透世界娱乐城 +五湖四海娱乐城 +云鼎国际娱乐城 +庐江官员不雅照 +三夫妻高清艳照 +供应五氧化二钒 +色站广告位出租 +娱乐城现金下注 +娱乐城线上下注 +从业资格证制作 +办理真学历证书 +联通vip数据名录 +移动vip数据名录 +办理职业职称证 +办理从业资格证 +简易汽油弹制作 +甲基乙基酮销售 +易发国际娱乐城 +环球国际娱乐城 +伟德亚洲娱乐城 +买卖仿真警官证 +皇冠国际娱乐城 +提供EMS快递数据 +性吧网址发布器 +皇冠最新投注网 +提供新生儿数据 +皇冠国际现金网 +供应EMS客户资料 +提供EMS客户资料 +销售EMS客户资料 +供应EMS客户数据 +提供EMS客户数据 +销售EMS客户数据 +销售宅急送数据 +供应宅急送数据 +提供宅急送数据 +真人网上娱乐城 +警用電棍電棒甩 +人人网用户数据 +提供收藏品数据 +妖娆魅惑抛美胸 +朋友网用户数据 +提供化学合成冰 +各款精美日本刀 +提供警用报警器 +洋妞上宾馆陪服 +邯郸办假身份証 +中级会计师答案 +研究生考生答案 +喵喵药送货上门 +提供收藏品面单 +供应收藏品面单 +销售收藏品面单 +仿真器模具销售 +飞蛾扑火爱上你 +风中飞舞的血滴 +屁屁熊和花花鸡 +大方的嫂子素玫 +穿越倚天建后宫 +金麟岂是池中物 +夜色下的上海滩 +高纯度钻石订购 +苍井空种子下载 +南京特洛伊科技 +销售全球通名单 +供应全球通名单 +销售老板通讯录 +销售法人通讯录 +供应法人通讯录 +供应老板通讯录 +专业警官证制作 +警用电击棒销售 +最新版假人民幣 +网上真人娱乐场 +皇城国际娱乐城 +显示任意手机号 +帝国幼幼集团军 +供应喵喵药电话 +专卖高压电击棒 +高压电棒专卖网 +办假英语六级证 +办假英语四级证 +办理各类资格证 +办理各类操作证 +麦角乙二胺销售 +俊龙百美缘下载 +供應手機變號機 +麻黃素合成方法 +提供冰鉆石教程 +供应健衛小口徑 +左旋麻黃素供应 +銷售健衛小口徑 +提供健衛小口徑 +供應健衛小口徑 +销售健衛小口徑 +帮任意号码改号 +手機碟中諜軟件 +手机007间谍软件 +手机碟中谍软件 +专业特種兵殺手 +专业地下保安隊 +专业地下保安队 +贝尔求生刀专卖 +海军突击刀专卖 +战术突击刀专卖 +軍用潛水刀专卖 +貝爾求生刀专卖 +鷹飛淩軍刀专卖 +美國SOG軍刀专卖 +蘭博求生刀专卖 +办理假冒身份證 +代制假冒身份證 +卖二代假身份證 +卖壹代假身份證 +卖假一代身份證 +卖假二代身份證 +卖一代假身份證 +卖假壹代身份證 +卖真一代身份證 +卖真壹代身份證 +卖真二代身份證 +专业退伍兵殺手 +麥角酸送货上门 +鹽酸羥亞胺配方 +摇头糖送货上门 +搖頭糖送货上门 +麻黃素送货上门 +鹽酸羥亞胺出货 +鹽酸羥亞胺订购 +卖间苯三酚手机 +卖間苯三酚手机 +卖间苯三酚电话 +卖間苯三酚电话 +黃牙簽送货上门 +白牙簽送货上门 +鹽酸羥亞胺到货 +神仙糖送货上门 +供应鹽酸羥亞胺 +供应左旋麻黃素 +鹽酸羥亞胺销售 +銷售黃綠牙籤毒 +供应四氢吡喃酮 +销售四氢吡喃酮 +買賣四氢吡喃酮 +销售一元人民币 + jsfxzp88wy32idcwindnet + improvealexarankingcom + wangtongchuanqisifucom +8341涉及天机运程 +最牛b的女预言家 +更加动荡的2009年 +注定动荡的2008年 +271人拿不动5'*'0万 +CIBS海外移民投资 +锘挎瘺娉戒笢1234 +2010诺贝尔和平奖 +硝基3氮杂环已烷 + iRadioPOPInternetRadio +修罗总裁a级恋人 +仿we51黑龙加长版 +E起发国纪娱乐城 +庐江何婷婷群p照 +王民生宾馆玩群P +庐江县委群p照片 +2012最新股民数据 +手機X臥底改良版 +蘭博3號軍刀专卖 +办理2代假身份證 +办理1代假身份證 +办理假1代身份證 +办理假2代身份證 +办理真2代身份證 +代制假1代身份證 +代制假2代身份證 +办理真1代身份證 +卖假冒1代身份證 +卖假冒2代身份證 +卖2代精仿身份證 +卖真实1代身份證 +卖真实2代身份證 +卖2代個人身份證 +卖2代假冒身份證 +卖1代假冒身份證 +卖個人1代身份證 +卖個人2代身份證 +卖1代個人身份證 +卖1代高仿身份證 +卖2代高仿身份證 +卖个人1代身份證 +卖个人2代身份證 +卖1代精仿身份證 +退\\出\\党\\团\\队 +全球唯一綄Σ荒苋 + d0970714757783e6cf17b26 + mingtianhuigenghao123ss +负责中南海的12层 +伤透了12亿人的心 +21世纪中国基金会 + www.landmarklondon.mobi +27军长砸洗浴中心 + ⒖⒋⒉⒋⒉⒋⒊00 +7月4日0时40分去世 +pk小三后妈少女血 +H.M.X三硝酸纤维酯 +S2乙基磺酰基乙基 +qq訂購鹽酸羥亞胺 +办计算机二级证qq +办理高仿硕士证qq +高仿结婚证办理qq +qq高仿结婚证办理 +88娱乐城天上人间 +qq高仿军官证制作 +行驶证专业制作qq +办理保真学历证QQ +qq专卖高仿军官证 +四级成绩单制作qq +四级成绩单办理qq +qq四级成绩单办理 +qq四级成绩单制作 +QQ提供收藏品资料 +QQ保健品数据销售 +假工程师资格证qq +qq提供慢性致癌药 +qq供应安乐死毒药 +qq保健品资源提供 +qq提供收藏品资源 +qq供应保健品资源 +qq收藏品面单供应 +qq老年人数据提供 +qq提供高仿军官证 +qq供应高仿警官证 +qq提供删除论坛帖 +安乐死药物供应qq +安乐死药物订购qq +购买五氧化二钒qq +订购安乐死药物qq +提供删除论坛帖qq +专卖安乐死药物qq +订购老年人资料qq +老年人数据提供qq +qq供应老年人资料 +qq提供老年人资料 +qq订购老年人资料 +办理高仿四级证qq +qq销售尼蒙尔克素 +qq供应尼蒙尔克素 +qq订购尼蒙尔克素 +qq提供老年人数据 +制作高仿等级证qq +供应老年人资料qq +高仿户口本制作qq +保健品资源提供qq +提供收藏品资源qq +供应保健品资源qq +收藏品面单供应QQ +qq办理高仿四级证 +qq高仿户口本制作 +qq制作高仿四级证 +保健品资料提供QQ +保健品资料供应QQ +QQ供应收藏品数据 +QQ供应保健品数据 +供应保健品数据qq +提供收藏品资料QQ +保健品数据直销QQ +保健品数据销售QQ +供应收藏品数据qq +qq购买云南情蛊药 +qq直销云南情蛊药 +qq供应云南情蛊药 +供应云南情蛊药qq +直销云南情蛊药qq +购买云南情蛊药qq +有偿抱养男宝宝qq +有偿抱养女宝宝qq +宅急送数据供应qq +销售男女性数据qq +销售老年人数据qq +qq销售老年人数据 +qq销售相思红娘粉 +销售毕业生简历qq +qq专卖安乐死药物 +qq提供高仿资格证 +提供十字锁工具qq +qq制作高仿资格证 +有偿收养男宝宝qq +高价收养女婴儿qq +安乐死药物购买qq +qq提供假等级证书 +提供假等级证书qq +职业资格证办理qq +专卖职业资格证qq +职业资格证专卖qq +qq专卖职业资格证 +钻石冰货到付款qq +k7娱乐城免费开户 +办理高仿本科证qq +办理假学历证书qq +qq销售假学历证书 +办理假学历证书QQ +办理高仿等级证qq +qq办理假学历证书 +安徽庐江官员6p照 +王民生6P高清套图 +庐江县委不雅照bt +庐江官员6p事件照 +手机号码随意改QQ +专业收藏品数据QQ +网络指定销售88式 +网络销售毛瑟M1932 +溫切斯特1000X电话 +溫切斯特1000X出货 +QQ销售鹽酸羥亞胺 +QQ销售左旋麻黃素 +QQ订购左旋麻黃素 +QQ订购鹽酸羥亞胺 +历史上的真实故事 +背着父亲偷搞母亲 +被婶子当鸭子的我 +浩方对站平台活动 +中国十大悲情语句 +广安第二人民医院 +江西田园置业集团 +出国留学必备物品 +急聘兼职文字录入 +这一代到底惹谁了 +迎接检查让人崩溃 +宁可家破不可国亡 +黑不过中国证监会 +中国人彪悍的一天 +领导做蠢事叫轶事 +肉体岂能拿来慷慨 +毛太阳惊世豪言录 +瞎改委抢劫司司长 +拔擢儿戏自毁长城 +卖命的不如跳舞的 +小平真是一代伟人 +小姐说俺是第一次 +党政干部十大特征 +预报了余震而不震 +中国的十大不明白 +一年兩會又三代表 +一代伟人料事如神 +中国社会一切向钱 +引无数干部竞折腰 +总理快步走进会场 +容贵国男性的性器 +东看全国都是穷人 +条型管包装杀猪粉 +手把手教你做炸彈 +男足缩头乌龟为耻 +中国队要是能出线 +曼德尔森已经结石 +国有完全垄断企业 +非法集资血本无归 +西门帮老大郑玉龙 +油条里掺入洗衣粉 +讲师遭到诬陷造谣 +自動尋找海外代理 +强制预装监控软件 +加密代理上网软件 +自行车比汽车污染 +你哥在国家队踢球 +哥哥在国家队踢球 +奶业工人的实心话 +产品不得用于考场 +三鹿能造一川碎石 +用酱油和醋勾兑的 +注射糖精与色素水 +获取国外dns服务器 +封堵各种在线游戏 +美女小偷被抓现场 +用工业柠檬酸浸泡 +蟹產卵時餵避孕藥 +蟹产卵时喂避孕药 +蟹饲养的激素传闻 +收奶员的真情告白 +收购果农手里染病 +赌自己的球队输球 +取缔四大名著出版 +行唐县出租车罢运 +汉人反扑持械上街 +罢教运动规模扩大 +我是菜市我是菜市 +沉痛悼念中国石油 +泡沫化的股票发行 +套住大盘改变季节 +散户们绝望的歌唱 +追高被套牢的前辈 +发改委的内部谈话 +被曾经的谎言蒙蔽 +虔心忆念遥呼之歌 +功的第一个字是法 +野兽眷恋的百合香 +北美华人夜色导航 +红楼梦之绮梦仙缘 +猎鹰怀里的水芙蓉 +《爱上你的温柔》 +国家正规期刊征稿 +通话清单记录查询 +纽扣无线影音通讯 +执业药师一次通过 +专业办理英语四六 +保证高分通过考试 +考百分百一次通过 +专业制作国内外文 +帮你轻松通过考试 +高邦科技字样礼品 +一次高分通过考试 +专业辦理各类证书 +专业办理各类证书 +六八四一九九八三 +手机通话清单查询 +民办大学真实学历 +现代人的五大悲哀 +机关人员真没素质 +神舟是花瓶的洋奴 +六提辖打死林衙内 +教育投资不及非洲 +教师的工资不公平 +中国最神秘的部门 +农村的干部最能贪 +救房市的集体官员 +教师面临生存问题 +拿到一部车的工资 +摧毁日本陆海空军 +中国打日本是必须 +有关部门也是人妖 +进京抓央视女记者 +槍斃后屍體的處理 +张祖桦被短暂拘留 +江苏出现重大疫情 +功劳不亚于杨利伟 +派出所内蹊跷死亡 +美国的坦克参北斗 +十教授被妖精骗了 +江西邓毛谢古事件 +该刹的歪风在哪里 +宣告相关试题作废 +燃油税恐成高油价 +最牛的警官检讨书 +空nlz空軍直屬單位 +艾未未与读者闲扯 +对民工实行力士后 +赶不上领导的变化 +中学修建音乐喷泉 +郯城至仓山高速路 +苍山路段特大事故 +无人遇难纯属隐瞒 +从纪念堂中扔出来 +吴祖光的铁骨柔肠 +吃一亩奖励好几百 +警车开道暴打记者 +穷人是最大的危险 +北京暗中调兵遣将 +违背国家安置政策 +十七团部营房哨兵 +解答烈士们的疑惑 +情报部门调查蓝苹 +粉蝶手中的纸老虎 +当今中国震惊世界 +观音新降七岁孩童 +立碑人署名吴启华 +村官公布个人财产 +真消息国人看不见 +陕西发现人感染猪 +你不能不看的墓碑 +朱穗生被内部监控 +本来就是毛邓社会 +猪流感引发的感想 +多名医生感染艾滋 +女医药代表水淋淋 +您真是党的好同志 +县长之女施暴追踪 +坑了四万六千个儒 +纪录我们告诉未来 +論民族平等重要性 +退伍军人安置问题 +心目中的中国地图 +东海苏岩岛邹占魁 +中国的鸡站起来了 +宋徽宗作重要批示 +绵州感染瘟疫死亡 +预报专家欲哭无泪 +512的强震有人预报 +宝贝的体内养珍珠 +吉首爆发特大规模 +安徽人民甘败下风 +领导的意见不能提 +跟国人和世界辩解 +日经松江府上海县 +揭开中国涉外金融 +内脏移植来源不明 +田集镇的真实故事 +强迫各省交检测费 +舅子李平经营学校 +中南海还给老百姓 +爱国会救不了灵魂 +法光照耀快快回家 +派嫦娥一号送我来 +强抢占地之贾家庄 +丰茂林场发现鼠疫 +不满政府隐瞒疫情 +吃人民的吸血阶层 +地产就没有新中国 +强大利益的牺牲品 +土地出让领域贿赂 +回不去的进城农民 +执法四年集体解聘 +權力核心中的知青 +张学兵不如一条狗 +鸡蛋迎接美国总统 +中国十大黑心职业 +遇难学生名单统计 +毛着力于夺取政权 +世界都在笑中国傻 +叶锦寨这样的恶行 +高送转并内幕交易 +人民广场惊人一幕 +北京政坛清华名人 +参谋业务参考资料 +告全国股民同胞书 +国家粮油统计报表 +黑窑母亲群体募捐 +胡溫怒批政法系統 +军事训练评定标准 +领导班子名单外泄 +毛时代大饥荒揭秘 +批林整风参考材料 +企业汇总会计报表 +企业如何建立网站 +人民大众时事参考 +司马义铁力瓦尔地 +塑胶原料的流动性 +五个部长一个省长 +星亚网络影视公司 +一个人的奥林匹克 +宜昌当阳县级市长 +印尼抢劫华人资产 +中国高层权力斗争 +中华人民实话实说 +中南海的权利游戏 + qq2009ds3.w223.bizcn.com + ok.paofangwuyuetian.info + online-media-archive.net + zdan84115.xx108.zgsj.net +妇联主任:武则天 +广源桔子暴发柑蛆 +国家总理:诸葛亮 +後勤部長:李蓮英 +水利部部长:大禹 +政府不欠你们的钱 +国家英语六级试题 +国家英语四级试题 +浩宇高等教育学历 +环三亚甲基三硝氨 +快速办理深户咨询 +深圳红印户口咨询 +吸血贵利王血玫瑰 +霞姐-夜生活女王 +新疆克拉玛依火灾 +新三狼之欢场屠夫 +性事奇趣录之阉夫 +政府说为人民服务 +中南海的权力游戏 +中央警卫局大换血 +专业快速深户咨询 +北京先知设计公司 +中国消费者报大厦 +新闻总署态度蛮横 +乙酸甲氧基乙基汞 +中国实行血腥教育 +中组部前部长直言 +手机卡服务密码破 +天天高中药增高网 +深圳一博网络推广 +北京恒昌富达科技 +供应删除贴吧帖子 +网络炒作执行专家 +扬州籍的重要人物 +被美女围困的日子 +操魂师之美眉天下 +陈二狗的妖孽人生 +穿越之极品色公主 +簡易炸蛋製作方法 +《色之戒四合院》 +醋酸甲氧基乙基汞 +苦毒浆果木防己属 +四级考试试题答案 +2乙基S4硝基苯基酯 +飞机失事后的云雨 +我和僵尸有个约会 +奉子成婚羔羊皇后 +覆雨翻云之逐艳曲 +广州亚运会开幕式 +黑魔公主除灵异志 +坏蛋是怎样炼成的 +皇上借我沟引一下 +金庸群侠之驭奴者 +巨洞色钱权大博弈 +茂名高州水灾事件 +门房秦大爷的故事 +迷失在日本的天堂 +女大学生勇闯仕途 +诺贝尔和平奖得主 +三宫六院七十二妃 +色痞子巧诱娇娇女 +通缉总裁的出逃妻 +先穿射雕再穿大唐 +以下是违禁关键词 +与掠心老公说拜拜 +博康舒大冒险魔女 +蓝色快车车身广告 +男女婴幼儿童服装 +凭什么要被你侮辱 +装饰设计有限公司 +監聽無線通話軟件 +新葡京国际娱乐城 +皇冠正网平台出租 +提供中考学生信息 +快速办理学历证书 +足球金球跟飞软件 +第一跟单足球软件 +楼凤良家兼职信息 +兼职小妹服务电话 +美女全套服务电话 +进京户口指标转让 +找大学生全套服务 +隐密器变号娱乐版 +本科学历快速办理 +亚洲新时代娱乐城 +色女缠郎免费下载 +提供企业老板资料 +删除论坛反面帖子 +新东泰娱乐城开户 +提供了仇了事服务 +七胜国际娱乐平台 +同花顺国际娱乐城 +喜盈门国际娱乐城 +大三元娱乐城开户 +蝴蝶谷中文娱乐网 +皇冠现金网娱乐城 +新澳门娱乐城开户 +大富翁国际娱乐城 +尊龙国际在线娱乐 +兼职妹妹双飞服务 +清除贴吧负面报道 +乐百家国际娱乐城 +皇冠金公主娱乐城 +百家博国际娱乐城 +王梦溪108照片下载 +保险客户数据专卖 +提供车主详细资料 +删除负面网络信息 +华尔街娱乐城网址 +博天堂娱乐城网站 +美高梅娱乐城网站 +找小女姐全套服务 +真钱百利宫娱乐城 +负面消息网络删除 +负面消息网络清理 +负面消息网络消除 +供应西班牙苍蝇粉 +办理日语一级证书 +真钱网络棋牌游戏 +楼盘业主数据提供 +销售楼盘业主数据 +订购楼盘业主数据 +快递面单数据提供 +提供英语四级证书 +提供英语六级证书 +提供英语等级证书 +处理企业负面消息 +北京地区供应双响 +电视购物数据供应 +快递面单数据销售 +电视购物资料供应 +快递面单数据供应 +供应楼盘业主数据 +提供楼盘业主数据 +提供金融客户资源 +提供老板个人资料 +提供老人保健数据 +提供股民开户数据 +供应电视购物资料 +供应保险用户资料 +销售小区业主资料 +销售老板个人资料 +销售银行客户资料 +销售小区住户资料 +销售老板资料信息 +供应快递面单数据 +销售快递面单数据 +提供快递面单数据 +销售物流客户资料 +销售个人信息数据 +销售车主信息数据 +销售手机间谍软件 +销售股民开户数据 +电视购物名单销售 +销售高档业主数据 +销售保险客户资料 +销售物流客户数据 +销售快递综合数据 +销售期货客户资源 +销售股民个人信息 +销售锡纸快开工具 +销售十字快开工具 +销售股票客户资源 +销售保险用户资料 +销售快递客户资料 +销售老人保险资料 +销售小区业主名录 +电视购物数据销售 +提供银行客户信息 +供应企业名录资源 +快递单号交易平台 +销售监狱个人资料 +销售服刑人员资料 +删除企业负面消息 +删除网上负面消息 +手把手教你作原子 +现金赌钱游戏平台 +代人解决私人恩怨 +代人制造特殊意外 +色系漫画打包下载 +真人在线娱乐平台 +寂寞空庭春欲晚 +我是千斤大小姐 +我的邻居很腹黑 +一只小妖出墙来 +网游之纵意花丛 +地下室里的春风 +提供删除天涯帖子 +老婆陪我换配偶 +机舱之头等服务 +遍收天下美娇娘 +红尘都市完整版 +总裁女儿爱上我 +数见红尘应识我 +我爱由我不由天 +穿越只为遇见你 +有缘千年来相会 +我是弱受我怕谁 +穿越之兰柯一梦 +小小皇后成长记 +耻辱之教育实习 +美色当前儿心乱 +笔仙原来是小受 +穿越之万受无疆 +十里荒凉胭脂泪 +憐卿甘為身下奴 +删除网上负面影响 +清除网上负面影响 +哥哥的猫耳女仆 +后宫佳丽三千人 +电视购物数据下载 +下载电视购物数据 +买卖顺丰面单数据 +供应小区业主资料 +收获人妻的小贼 +秘密熟母俱乐部 +销售汽车快开工具 +轻狂一笑帝王受 +跳钢管舞的男人 +意难忘之续前缘 +九龙夺嫡之胤祹 +火影之美女如云 +提供真人线上娱乐 +姚记娱乐备用网站 +富家女的男保姆 +一路高升一路情 +狐家屯的孽事儿 +办理高仿学历证书 +天天乐娱乐城官网 +星期八娱乐城官网 +供应车主信息资料 +供应全国车主名单 +供应小区住户资料 +提供保险用户资料 +制作高仿学历证书 +金融客户资源销售 +金融客户资源供应 +庐江不雅照片全集 +供应二氧化丁二烯 +供应硫酸三乙基锡 +供应六亚甲基亚胺 +供应保险人员数据 +供应网络购物数据 +销售网络购物数据 +提供网络购物数据 +销售保险人员数据 +销售小区业主信息 +提供医保个人信息 +提供旅客个人信息 +混在后宫假太监 +禁区女领导大院 +人妻肛肉曲下载 +专业解决个人恩怨 +提供信息清除服务 +维也纳娱乐城网站 +圣淘沙娱乐城网站 +提供上门爱爱服务 +星期八娱乐城网站 +黄金天使降临下载 +直销汽车快开工具 +供应股民详细信息 +提供车主个人信息 +清除网络恶意言论 +删除网上恶意帖子 +提供尼二氢可待因 +销售美沙酮中间体 +销售尼二氢可待因 +有偿解决私人恩怨 +二丁基氧化锡提供 +提供二丁基氧化锡 +二丁基氧化锡销售 +销售二丁基氧化锡 +二丁基氧化锡直销 +直销二丁基氧化锡 +删除网络虚假信息 +网络真人现金游戏 +销售股民详细信息 +二丁基氧化锡供应 +三对夫妻种子下载 +昆明三对夫妇快播 +庐江三对夫妻种子 +庐江官员乌龙艳照 +昆明三对夫妻图片 +春暖花开性吧地址 +办理六级英语证书 +办理四级英语证书 +官员夫妻高清艳照 +供应物流客户资料 +昆明三夫妻不雅照 +供应二丁基氧化锡 +供应小区业主信息 +提供电视购物资料 +提供物流客户资料 +变瞎子的慢性毒药 +电视购物名录专卖 +提供电视购物名录 +电视购物名录提供 +专卖电视购物名录 +销售电视购物名录 +电视购物名录销售 +供应电视购物名录 +电视购物名录供应 +供应股民开户数据 +销售小区业主名单 +办理执业资格证书 +主叫号码显示修改 +删除博客帖子电话 +供应老板私人电话 +供应老人保健数据 +供应小区业主名单 +提供保险老人资料 +供应高端客户名单 +销售高端客户名单 +销售学生名单数据 +供应学生名单数据 +提供学生家长数据 +销售学生家长数据 +供应学生家长数据 +销售内部成单数据 +提供内部成单数据 +供应内部成单数据 +黄樟素黄樟油销售 +提供小区车主信息 +找人制造意外电话 +购买防身警用装备 +购买警用防身装备 +销售顺丰客户资料 +提供保险人员数据 +销售最新股民数据 +提供全新股民数据 +销售顺丰面单数据 +防身警用装备专卖 +提供中考考生数据 +提供最新股民数据 +供应汽车车主信息 +提供考生家长资料 +供应考生家长资料 +负面消息专业删除 +供应物流进线数据 +供应物流成单数据 +提供物流进线数据 +提供物流成单数据 +销售物流进线数据 +销售物流成单数据 +供应学生家长资料 +提供学生家长资料 +销售学生家长资料 +提供最新保险数据 +供应最新保险数据 +销售最新保险数据 +烟雾弹的制作方法 +高校学生信息档案 +銀行卡读卡器软件 +提供韵达面单数据 +提供各种制毒工具 +高档商场会员资料 +动漫美女触手禁图 +外国洋妞酒店特服 +国内模特各国洋妞 +提供天天面单数据 +销售专业顺丰面单 +提供电购面单数据 +销售电购面单数据 +供应电购面单数据 +供应电购综合面单 +任意手机号码变号 +制作溜冰壺子配方 +供应专业顺丰面单 +提供一手保险数据 +提供一手女性数据 +提供联通用户数据 +提供电信用户数据 +专业删除贴吧贴子 +公车上的女大学生 +恶夫最里的小樱桃 +冷狮爪下的小野猫 +在韩国留学的日子 +专业删除网上信息 +提供各地老板资料 +销售公司法人资料 +销售楼盘业主资料 +供应高档客户资料 +销售高档客户资料 +供应银行客户资料 +销售电话营销数据 +供应企业名录资料 +供应电话营销数据 +供应老板个人资料 +供应法人手机号码 +供应公司法人资料 +供应楼盘业主资料 +任意修改主叫号码 +手机号码修改软件 +供应电视购物数据 +办理英语四级证书 +网上真人现金游戏 +全国号码任意设置 +办理专业四级证书 +我爱你亚洲妹社区 +办理大学学历证书 +草榴社区最新网址 +草榴社区最新地址 +专业消除负面消息 +办理国外学历证书 +供应金融客户资源 +销售金融客户资源 +提供各种锁匠器材 +销售进口硅胶脸皮 +专业帮人處理恩怨 +专业定制人造面皮 +销售进口硅胶面皮 +专业定制易容面皮 +专业定制硅胶面皮 +专业定制人造脸皮 +专业定制硅胶脸皮 +专业定制美化面皮 +专业定制美化脸皮 +专业定制高仿脸皮 +专业定制仿真脸皮 +专业定制易容脸皮 +专业定制高仿面皮 +专业定制仿真面皮 +代购潛伏者改良版 +代购潛伏者增強版 +代购007間諜增強版 +代购007間諜免費版 +代购潛伏者專業版 +烟花爆竹送货上门 +大馬士革鋼刀专卖 +美國巴克軍刀专卖 +德國博克軍刀专卖 +美國卡巴軍刀专卖 +美國冷鋼軍刀专卖 +代理彩信改號业务 +代理手機改號业务 +办理二代假身份證 +办理壹代假身份證 +办理假壹代身份證 +办理假一代身份證 +办理假二代身份證 +办理一代假身份證 +办理真二代身份證 +办理真一代身份證 +代制假二代身份證 +代制假壹代身份證 +办理真壹代身份證 +卖假冒一代身份證 +卖假冒壹代身份證 +卖假冒二代身份證 +卖二代假冒身份證 +卖一代精仿身份證 +卖二代精仿身份證 +卖壹代個人身份證 +卖真实二代身份證 +卖真实壹代身份證 +卖真实一代身份證 +卖壹代假冒身份證 +卖个人壹代身份證 +卖個人一代身份證 +卖個人二代身份證 +卖個人壹代身份證 +卖一代個人身份證 +卖二代個人身份證 +卖一代高仿身份證 +卖二代高仿身份證 +卖壹代高仿身份證 +卖个人一代身份證 +卖个人二代身份證 +卖壹代精仿身份證 +卖一代假冒身份證 +間苯三酚送货上门 +间苯三酚送货上门 +卖左旋麻黃素手机 +卖鹽酸羥亞胺手机 +卖鹽酸羥亞胺电话 +印尼依斯兰祈祷团 +特俚碾姎饣撝殒j +第三代F3加密通道 +怒影覆盖面积n公顷 + 2x3x4x5x6x7x8.count.xj.cn +预定2013年户口指标 +转让2013年户口指标 +ewin娱乐城官方下载 +金融皇帝十二妃H版 +昆明三对夫妻玩群P +庐江县群p照片全集 +昆明群P聚会共181张 +昆明三对夫妻群p图 +庐江县官员群p照片 +办理2代精仿身份證 +办理1代精仿身份證 +办理1代假冒身份證 +办理2代假冒身份證 +办理个人1代身份證 +办理假冒1代身份證 +办理假冒2代身份證 +办理個人2代身份證 +办理個人1代身份證 +办理个人2代身份證 +办理1代高仿身份證 +办理2代高仿身份證 +办理2代個人身份證 +办理1代個人身份證 +18岁或以上人士观看 + asf0021homeipnetpics052609 +取消13省市农业户口 +不看新闻的20条理由 +34个政府和部门祝贺 + secure-cn.imrworldwide.com + shangshan.w990.vhostgo.com +重庆秘密空间YZ会所 +汽油3分之1白糖混合 +5氨基甲基3异恶唑醇 +二乙基S4硝基苯基酯 +2463亚乙基氨基1353嗪 +契约99天总裁的前妻 +供应正宗天然k2香料 +供应正宗天然k3香料 +会计师从业资格证qq +上门全套服务电话QQ +小姐全套上门qq电话 +注册送20元真人棋牌 +金融客户资源提供qq +qq提供保险客户数据 +qq供应小区业主数据 +qq供应保险客户数据 +qq学生家长数据专卖 +qq学生家长资料专卖 +网站论坛负面处理qq +网站新闻负面处理qq +qq供应期货客户数据 +qq电视购物数据提供 +qq提供小区业主名单 +提供锡纸快开工具qq +qq快递面单数据专卖 +qq销售电视购物数据 +qq销售西班牙苍蝇粉 +qq直销西班牙苍蝇粉 +qq订购西班牙苍蝇粉 +qq购买西班牙苍蝇粉 +qq提供西班牙苍蝇粉 +提供小区业主资料qq +qq提供电视购物数据 +电视购物数据提供qq +qq提供小区业主名录 +供应期货客户数据QQ +快递面单资料提供QQ +学生家长数据专卖qq +学生家长资料专卖qq +提供快递面单资料qq +提供保险客户数据qq +供应保险客户数据qq +供应小区业主数据qq +物流客户信息提供qq +qq清除网上负面报道 +清除网上负面报道qq +提供小区住户资料qq +销售联通客户资料qq +供应个人信息数据QQ +销售电视购物数据qq +销售个人信息资料qq +销售业主身份信息qq +提供高仿四级证书qq +提供高仿六级证书qq +qq提供锡纸快开工具 +qq供应高仿学历证书 +qq替人解决私人恩怨 +销售高仿学历证书qq +qq销售高仿学历证书 +提供电视购物数据qq +供应顺丰面单数据qq +销售学生信息资料QQ +销售车主信息资料QQ +庐江官员6p照片下载 +庐江官员6p全套照片 +庐江县不雅照下载bt +安徽庐江官员6p原图 +qq提供小区业主信息 +专卖小区业主名单qq +电话号码任意修改QQ +提供别墅业主信息QQ +任意显示主叫号码QQ +供应最新女性数据QQ +销售最新女性数据QQ +提供最新女性数据QQ +物流公司内部数据QQ +供应顺丰面单数据QQ +小姐保健服务信息QQ +销售基金人员数据QQ +保险公司客户资料QQ +网游喷血美女左小娜 +关于堂明皇与杨贵姬 +围绕土地问题的攻防 +全球唯一绝对不能惹 +发不出工资买不起面 +不该把工农兵捧上天 +官府忽悠百姓之能事 +萨达姆和布什对情歌 +上太空都是三四个人 +长征时到过她们村子 +中国人的十大不明白 +双氧水攻击羰基脱水 +壹盒壹次性玞槍霰彈 +苍山段连环交通事故 +流感绝对没这么简单 +青年长拳图解全过程 +不为人知的行业内幕 +紧密团结在手机周围 +黄膳中认识了避孕药 +超越者联盟突破精英 +央视是纳税人的央视 +推销自己的炸鸡秘方 +翅膀的激素催生技术 +奶农把责任推给奶牛 +武汉地下肉类加工厂 +上犹客家的精神变迁 +取消中国国家足球队 +拖累白酒板块齐低迷 +行业步入换帅敏感期 +尸体在农家院被掏空 +沙粒中发现早期宇宙 +交易大厅一下子看到 +十年黄金股市第一年 +股民们骗光杀光抢光 +普降加持吉祥光耀曲 +外国人强悍的性要求 +多年的答案操作经验 +一次性高分通过考试 +可随意改变称重结果 +利威电子厂工会斗争 +不能耽误了党的工作 +中国被占领土一览表 +给閒基同志的一封信 +屁事都要认证的制度 +街道办工作人员赖某 +燃油税为何像个人妖 +女记者被山西检察官 +部队驻上了胶东半岛 +户口管制制度的弊端 +王启富教授深感痛心 +万学海文校长李忠泽 +政府和官员就是驴子 +中国教育宪章一百条 +拿着纳税人钱的骗子 +战争正在向我们走来 +博雅免疫球蛋白事件 +莆田市政府侵吞涉案 +韩企工会围堵我使馆 +打赢高磕技局部战争 +骇人听闻的进补潮流 +称能解决农民工就业 +被员警围困的北京家 +翻译还没来便回答说 +黑势力强行推倒房屋 +办案中依靠拉拢法官 +遇難寃生的詳細名單 +邓永固因涉嫌诽谤罪 +姜振华因涉嫌受贿罪 +珍贵的历史录音予您 +第一能治猪流感的人 +倒塌学校的质量问题 +坦克车装扮成大卡车 +政府信用的彻底丧失 +四把主刀手同时感染 +秘密录音回忆录出版 +干部制度的莫大讽刺 +狼鞋走遍了澳大利亚 +国安局上门的危险发 +某些部门的家长作风 +叶城特大恐怖凶杀案 +三峡大坝导致汶川地 +宋秀岩已获中央任命 +塔头的大量人口失踪 +杨佳是天下第一勇士 +套牢资金量创出奇迹 +国庆前唯一一次合练 +不认识你也要代表你 +肉体留不住男人的心 +曲解造成今天的乱象 +政府和地产商的合谋 +银都路2688弄20号301室 +锺绍军带进了中南海 +反赌不是一出肥皂剧 +唯我独尊的美国强盗 +外交部最常用口头禅 +奥巴马的townhallmeeting +市长走访不事先通知 +没有经济头脑的毛泽 +当地村民被打成重伤 +奥巴马否认与夏雨荷 +放光明电视制作中心 +黑窑工母亲网上寻助 +红太阳是怎样升起的 +蒙古教育文化基金会 +农民真正贫困的根源 +是中国社会的爱滋病 +泰州文教局停售通知 +中南海高层权利斗争 + 105qngkk.863computer.org.cn + se.woyaoxingjiaowang.net.cn +不就死了几个孩子吗 +国家禁毒署:林则徐 +建设部部长:秦始皇 +商务部部长:胡雪岩 +输港鸡蛋被检出问题 +用的都应该是公家的 +最高法院院长:包公 +救灾专用帐篷引质疑 +孽欲追击档案之邪杀 +声明退出中国少先队 +中国国际战略研究网 +中南海高层权力斗争 +中石油国家电网倒数 + 631008986 +网络执行工作室招人 +八八穿越还珠之乾隆 +宝贝今夜你是什么牌 +豹王别姬豹王你好坏 +穿越玩转之羞花妖娆 +3分之2的汽油与3分之 +462硝基邻甲基苯酚钠 +氢氧化吐巴寇拉令碱 +1甲基23吡啶基吡咯烷 +酰胺福林甲烷磺酸盐 +四级真题及答案下载 +英语六级试题及答案 +妃穿不可蛮妃要出墙 +坏叔叔总裁的灰姑娘 +混迹在美女如云公司 +加非猫现实世界历险 +金鳞外传之龙游浅水 +京城男女之食色性也 +绝色天下之极品弃妃 +狼情窃意桃花无意惹 +冷妻难惹总裁请下堂 +乱欲纯情小男人和美 +女文工团的最后下落 +俏黄蓉的洞房花烛夜 +情冷君恩之一朝为后 +石榴裙下的机关男人 +帅帅小子之千娇百媚 +我和一群女人的故事 +先吃后爱将军恶如狼 +幸孕弃妃把朕搞翻了 +妖艳花丛之百花迷乱 +遗忘国度之神秘徽章 +赵雅芝那胯下的温柔 +重生闻香之慈航静斋 +罪爱豪门腹黑总裁惹 +不得和你假正经重庆 +穿越谁吃了我的皇妃 +落魄女生酷总裁爱情 +强欢痞妃皇上不下崽 +供应飞行员专用叶子 +供应飞行员飞的叶子 +胜利者足球跟单软件 +九龙冰化工主产销售 +林雨欣有声小说下载 +俄罗斯美女学院快播 +色百度网址导航大全 +同志会所找帅哥服务 +上海情侣网吧门下载 +解决2013年户口指标qq +叶倩彤有声小说下载 +叶倩彤有声读物下载 +金道搏彩网上娱乐城 +明珠国际在线娱乐城 +手机号任意更改软件 +明珠国际网上娱乐城 +淘金盈国际线上娱乐 +利来国际娱乐城代理 +代理威尼斯人娱乐城 +真钱二八杠网络平台 +广州小姐找上門服务 +皇冠国际在线娱乐城 +王梦溪照片网盘下载 +新澳博天上人间娱乐 +澳门十二生肖乐透彩 +二代证扫描件生成器 +立得二代证制作系统 +手机改串号软件下载 +销售保健品客户资料 +销售汽车干扰信号器 +无政府主义者的食谱 +天上掉下个打工妹 +重生之美女掠夺者 +大炕上的肉体联欢 +驱妖娘娘冒险奇谭 +侠客行之慈母闵柔 +我宁愿你虐我到底 +无政府主义者食谱pdf +学仿七绝口占答戍 +丝丝心动步步惊心 +欧阳少恭的心上人 +合租屋里的女房客 +新上海人浮云之恋 +我在花丛中的日子 +情燃山乡支医仕途 +后湾村的那些事儿 +特洛伊监控软件下载 +特洛伊监控软件公司 +供应各小区电话名单 +庐江官员不照雅全部 +庐江不雅照图片种子 +销售全球通用户资料 +全球通用户资料提供 +庐江官员艳门照下载 +庐江不雅照全集种子 +庐江县官员艳照全套 +昆明三对夫妻群照片 +左旋麻黃素合成配方 +销售小区业主手机号 +供应小区业主手机号 +供应房地产客户资料 +销售房地产客户资料 +汽油弹简易制作教程 +乙酰邻氨基苯酸销售 +《娇艳校园》下载 +提供宅急送面单数据 +小泽玛利亚电影全集 +提供全球通用户资料 +大叔的幸福人妻生活 +我和我的爱人的故事 +在镜子里看我和老公 +专业提供国内外女郎 +金木棉蓝盾在线娱乐 +高档俱乐部会员资料 +警用电击器防身供应 +办理计算机等级证书 +雪野あいか电驴下载 +波多野结衣合集下载 +最新证券新资料供应 +二代身份證当面交易 +办理二代精仿身份證 +代购潛伏者免費試用 +代购007間諜免費試用 +西班牙奧托軍刀专卖 +解放軍現役軍刀专卖 +办理壹代假冒身份證 +办理一代精仿身份證 +办理二代假冒身份證 +办理一代假冒身份證 +办理一代高仿身份證 +办理壹代高仿身份證 +办理个人一代身份證 +办理假冒一代身份證 +办理假冒二代身份證 +办理假冒壹代身份證 +办理个人壹代身份證 +办理個人二代身份證 +办理一代個人身份證 +办理個人壹代身份證 +办理個人一代身份證 +办理个人二代身份證 +办理二代高仿身份證 +代制假冒壹代身份證 +代制假冒一代身份證 +代制假冒二代身份證 +办理壹代個人身份證 +办理二代個人身份證 +鹽酸羥亞胺送货上门 +2009第一号人肉搜索令 +2012年的流感爆发威胁 +向胡总借钱2000亿遭拒 +谁赢得了4170万元订单 + liushizhounian.qqxuexiao.com + wylf5168.web013.boothost.com + qq949023.free2.iisiisiis.com +qq充值中心充值qq号码 +基本添上1平勺碳酸钠 +眯基亚硝胺眯基4氮烯 +31甲基24氢吡咯基吡啶 +2013中考考生落榜信息 +2013中考考生落榜资料 +昆明三对夫妻群p聚会 +昆明群P聚会181张下载 +瑞典Fallkniven軍刀专卖 +幸运52发生的真实笑话 +幸运52老公比划老婆猜 + r25281.nb.host192-168-1-2.com + securitytestinternetguide.com + woaini520.web003.boothost.com + sakamoto-solicitor-office.com +16β瑟文34714151620-庚醇 +'*'甲胺基苯重氮磺酸钠 +3羟基5氨基甲基异恶唑 +重生之乱世种马YY传奇 +qq供应收藏品客户资料 +qq提供收藏品客户资料 +提供收藏品客户资料QQ +供应收藏品客户资料QQ +踏莎行·三军战震魔 +供应全球通用户资料QQ +中国人都在上的四大当 +多胡子的应该是马克思 +彪长征时都去了什么人 +我就让组织部长关心他 +有效实现无痛苦的死亡 +陡崖所形成的半洞下面 +月球极可能是人造天体 +火星发现古代湖泊遗迹 +青葡萄放入乙烯利稀释 +公然伤害消费者的健康 +五粮液是当官的取款机 +两人中间还被架着一个 +告诉你真实的乌鲁木齐 +白岩松十问中国证监会 +中国股市必须推倒重来 +失落的孤独完美中文版 +网上可查真实高效办理 +包考生一次性通过考试 +救楼市别变成救地产商 +发射后面的惊天大秘密 +取代美国星球大战计划 +统一城乡户口登记制度 +检察官敲开央视女记者 +用权力垄断我们的希望 +城乡统一户口登记制度 +降油价不能等待燃油税 +记者查不法老闆踏地雷 +为黄牛党倒票维持秩序 +新浪的控股方竟是日本 +朱刘街办非法占地问题 +制度与文化的百年进化 +政府亲商护商还是在毁 +京沪高速特大交通事故 +办一个会繁荣一座城市 +穿国服可刺激经济增长 +继承毛独断专行家长制 +江都财政局一窝钱耗子 +矿难事故的形象代言人 +死亡数远超过官方说法 +被央视暴光的真正原因 +痛心的牡丹江防洪工程 +总参谋部的二部和三部 +堵哈铁公共安全专家局 +根据客户原样印刷制作 +中国最牛的加油站标语 +建设街交会处的广告牌 +将此刻田府中三人成诵 +主播李某某的糜烂过往 +市长亲自乘坐黑心出租 +打的光打不光另当别论 +这个党的领袖钦命开除 +颠覆中华人民共和国政 +干扰赈灾募捐事件回放 +高低温交变湿热试验箱 +联合起诉最高人民法院 +世界以利亚福音宣教会 +卫生计划财务参考资料 +希望之声国际广播电台 +中国高层人事变动解读 +中国政坛“明日之星” +阻止中华人民共和国统 + web99222840.web159.dikavan.net +齐天大性之大破盘丝洞 +孙悟空与阿西娜的故事 +中国支配下的朝鲜经济 +东莞市创科电子科技有 +八元钱泡了个极品空姐 +大种马重生三部曲合集 +氨甲酰氧甲氧乙基甲基 +发动机燃料抗爆混合物 +3-羟基5氨基甲基异噁唑 +混迹在美女如云的公司 +混在美女如云的办公室 +魔王神官和勇者美少女 +小丫头我要你和充气妹 +熊猫哥哥和功夫美少女 +倚天屠龙记之我是张无 +中国是全球唯一不能惹 +中学校园秘闻录之追艳 +左手上天堂右手下地狱 +马家爵的一句话让在场 +山鸡孔雀绿壳蛋鸡梅花 +香港爱儿健国际医疗服 +快速删除负面网络消息 +天利足球打水扫货软件 +永利足球打水扫货软件 +专业删除网络方面信息 +手机号码任意更改软件 +圣淘沙娱乐城官方网站 +十六浦娱乐城在线娱乐 +华尔街娱乐城在线娱乐 +供应手机号码变换软件 +供应电视购物用户数据 +《诱色之野性医生》 +无政府主义者手册下载 +无政府主义者食谱翻译 +女皇陛下的笑话婚姻 +大胆总裁敢抢我妈咪 +家丁绿帽之杨凌乱入 +穿越火线之露水情缘 +我和六个男人的故事 +英雄无敌之美女军团 +阿莎丽小姐的旅行记 +翻译无政府主义者烹饪 +那场顺其自然的情事 +教授夫人的别样生活 +蓝天航空公司的空姐 +重生火影之漩涡鸣人 +爱上风情女老板熳姐 +永不落幕的爱恋完本 +禁忌情爱霸上留守村 +极品美女的超级保镖 +无政府主义者食谱下载 +中文无政府主义者食谱 +无政府主义者食谱资料 +翻译无政府主义者食谱 +下载无政府主义者食谱 +下载无政府主义者手册 +翻译无政府主义者手册 +供应顺丰面单购物数据 +庐江县委不雅照女主角 +庐江官员艳照图片下载 +安徽庐江全套艳照种子 +庐江县艳照事件的起因 +季戊四醇四硝酸酯研制 +直销手机号码模拟软件 +提供手机号码模拟软件 +供应电购进线面单数据 +提供电购进线面单数据 +销售电购进线面单数据 +销售快递公司面单数据 +提供快递公司面单数据 +供应快递公司面单数据 +提供物流公司内部数据 +销售物流公司内部数据 +供应物流公司内部数据 +零售专业手机间谍软件 +提供电视购物用户数据 +郊游时我干了女友同学 +我在公车上搞了小姨子 +销售个人商务数据资料 +供应个人商务数据资料 +专业定制进口硅胶面皮 +代理任意号码改号业务 +专业定制进口硅胶脸皮 +销售步槍手槍猎槍气槍 +2008年邮政工资调整套改 +空降的先头部队4人牺牲 +4二甲胺基苯重氮磺酸钠 +246三亚乙基氨基135-三嗪 +预定2013年北京户口指标 +解决2013年北京户口指标 +提供2012年中考学生信息 +2月5日大盘尾盘跳水内幕 +17日向省属媒体发出禁令 + csoltiancity.105.80000web.com.cn + quu.wqiu.x.eki.ssk.os.972wyt.com +温州一山村76人离奇死亡 +艺坛照妖镜之96应召名册 +浙江一古村76村民离奇死 +31-甲基2-四氢吡咯基吡啶 +下载手机号码变换软件qq +供应手机任意显示软件qq +qq制作高仿执业资格证书 +庐江官员6P高清套图下载 +供应全国移动用户资料QQ +销售全国移动用户资料QQ +销售全国联通用户资料QQ +供应全国联通用户资料QQ +加非猫:现实世界历险记 +姓是唐朝後面的那個朝代 +该药是无色无味透明液体 +自制射程200公里左右的gps +正視全球中文熱中正體字 +正视全球中文热中正体字 +乌鲁木齐市打砸烧抢事件 +股市会成为百姓的屠宰场 +忘记药效期间发生的事情 +需要提供资金帮助的朋友 + 13612801258 + 13418539816 + 13621174936 + 13691663608 + 13993468069 +教师工资要略高于公务员 +公務唗和教師的工賧差距 +取消第五次中欧经济峰会 +养车费用将是过去的两倍 +进口的是低质高含硫石油 +教授建议大幅提高燃油税 +联邦作为制度博弈的工具 +武汉爆发大规模牛传染病 +玫琳凯广州河南行贿清单 +干部办公室里的豪华家具 +把历史的知情权还给民众 +代表团以省长陈政高为首 +石桥铺去钟表厂那个方向 +小平同志为什么一直跑着 +取得许可证始得购买烟土 +南昌市的罗汉是杀不完的 +美化满清现象形成的原因 +拿到了奉贤建设银行报销 +第五代的xjp一番蛮横讲话 +成全了毛的终身领袖地位 +伦敦考虑放弃下届主办权 +元朝不是中华民族的王朝 +旗子在真空状态自己摆动 +为什么国内的油价还不降 +中国没有真正意义上的民 + 13414628999 +尼总务石器吸其目哦轻易 +时期打了几次我再次哦唯 +是束告项瓷,害电突网解 +树亲民形象不如推动政改 + 47ybnzo.o.o.il.vlfk.os.972wyt.com +国土资源部部长:徐霞客 +姐妹们都翻身得解放了吧 +人死了以后再通知我们吧 +禁宫八大酷刑之极乐酷刑 +唐皇宫外情之三唐朝艳妃 +唐皇宫外情之太监与宫女 +香港新通豪科技有限公司 +新女性宝鉴邱玉茹邱莉婷 +橡胶溶解汽油中添加碱液 +真实教育部学历学位认证 +解决2013年公司户口指标qq +预留2013年公司户口指标qq +转让2013年公司户口指标qq +来电显号码修改软件下载 +菲律宾圣安娜娱乐官方网 +在线真人赌钱娱乐城投注 +供应手机号码随意显软件 +供应手机号码任意改软件 +手机号任意显示软件下载 +英语老师的洞房花烛夜 +无政府主义者手册doc下载 +无政府主义者手册pdf下载 +无政府主义者食谱doc下载 +无政府主义者食谱英文版 +无政府主义者食谱双语版 +我和美女同事的那些事 +供应特洛伊智能偷听软件 +特洛伊智能偷听软件试用 +特洛伊监控软件开发公司 +无政府主义者食谱电子书 +无政府主义者食谱中文版 +无政府主义者食谱电子版 +中文版无政府主义者食谱 +供应智能特洛伊监控软件 +毛润之的佛缘与8341的来历 +京v牌照的使用权在四总部 +历代名妓-悲落叶之柳如是 +对2甲基氨基苯重氮磺酸钠 +中国靠什么守住18亿亩耕地 +迷魂药 +迷昏药 +三唑仑 +手机号码任意改软件下载qq +供应手机号任意显示软件qq +qq销售特洛伊智能偷听软件 +央视主持人涉嫌间谍案被捕 +将爆发世界最大规模猪流感 +烧不破的盛汽油塑料雪碧瓶 +专业提供各种大型统一考试 +鲜为人知又令人惊叹的历史 +工资中扣除教师养老保险金 +却鼓励百姓实行垃圾袋装化 +中国的新闻比小说还要精彩 +中国外交方略让人惨不忍睹 +工信部从每个纳税人的口袋 +澳门特首选举的困局与危机 +西安市劳卫路西荷小学对面 +上海市教委组织的统一培训 +不是易非毁责。志空服金生 +传说的胡曾联手是一种假象 +青岛石化项目引发市民恐慌 +我以为我是人民的公仆,吃 +反对日本介入中国铁路工业 +吉林长春哪裡有假幣賣假錢 +对二甲基氨基苯重氮磺酸钠 +季戊四醇四硝酸酯制作过程 +供应手机来电号码修改软件 +供应手机任意显示软件电话 +无政府主义者食谱内容翻译 +老公的精彩之有妻大家尝 +无政府主义者食谱中文下载 +无政府主义者食谱电子手册 +无政府主义者食谱英文下载 +无政府主义者烹饪手册下载 +下载无政府主义者烹饪手册 +庐江官员艳照全套打包下载 +《俏尼姑仪琳异传》下载 +供应电视购物客户信息资料 + fsgsddk566585fdjhdu559594hfghjdgkdcom +性劫兰桂芳大友梨奈,曾玉茹 +S5甲氧基4氧代4H吡喃2基甲基O +2013年北京户口办理指标预定 +她的姓是唐朝后面的那个朝代 +蒙元和满清是中国的敌对政权 +媒体就是昧着良心的一个群体 +美国总统鲜为人知的十大特权 +警校在地道战遗址的不当行为 +关于国保工作与时俱进的思考 +美国大使代替网络上的网友问 +告中国人民解放军广大官兵书 +关于做好定案材料工作的意见 +卡辛纳大道和三福大道交界处 +中国在统一问题上的投降主义 +中國國家領導人子女任職名單 + www.zqfpw.com +中國人民銀行发行的人民纸币 +苯乙基哌啶基丙酰胺柠檬酸盐 +供应手机来电号码随意显软件 +无政府主义者手册翻译版下载 +宅女在古代后宫的幸福生活 +无政府主义者烹饪手册rar下载 +无政府主义者烹饪手册pdf下载 +无政府主义者烹饪手册doc下载 +无政府主义者烹饪手册电子版 +无政府主义者烹饪手册中文版 +中文版无政府主义者烹饪手册 +无政府主义者的烹饪食谱下载 +中国各地甲型h1n1流感疫情汇总 +N苯乙基4哌啶基丙酰胺柠檬酸盐 +S5甲氨基2氧代134噻2唑32H基甲基O +随意违反国家规定提拔任用干部 +责令百姓向政府申报收入并缴税 +夫人和孩子到美国都干了些什么 +王良范西江开发规划会议旁听记 +四川永川人民教师罢教运动口诀 +唐皇宫外情之二唐朝后宫的秘密 +我希望中国能有这样一道测试题 +香港永和电子国际科技有限公司 +N苯乙基4-哌啶基丙酰胺柠檬酸盐 +小说偷日同事女友的太恋荡了 +无政府主义者的烹饪食谱中文版 +无政府主义者的烹饪食谱英文版 +S5甲氨基2氧代134噻二唑32H基甲基O + 786ts.qqsafe-qqservicesyydswfhuw8ysjftwf.org +首度披露我军令敌胆寒的四大神兵 +列强打击中国现代化进程是其一贯 +市管领导干部家属座谈会上的讲话 +我所犯严重的方向线路错误的检查 +解放者CAD文件STL模型设计图纸下载 + 12hxajx.zij.yaq.58ui.90cj.wcs.500caipiao.com.cn +自愿想退出“少先队员 团员 党员” +综合能力科目考试个别试题出现错误 +金利军和锡林郭我向你们的良知呼唤 +关于对敌斗争中有关政政策界限汇编 +蒋匪军陆军部队师以上主官情况调查 +82甲基氨基甲基7甲氧基氨基3甲基黄酮 +是否司法不公应该从最后纠正的结果看 +玫琳凯泄密资料之政府公关机密记录档案 +公务员录用考试报考者违纪违规处理办法 +王国昌给南昌市广播电视局全体干部职工 +周水同志在全省计划工交工作会议上的报告 +手术对她们有好处。考虑到是一项公益事业 +N31-羟基2甲氨基乙基苯基甲烷磺酰胺甲磺酸盐 +病死鸡已大量流向全国 \ No newline at end of file diff --git a/keywords-filter/filter-server/interceptor/auth.go b/keywords-filter/filter-server/interceptor/auth.go new file mode 100644 index 0000000..dd1c366 --- /dev/null +++ b/keywords-filter/filter-server/interceptor/auth.go @@ -0,0 +1,38 @@ +package interceptor + +import ( + "context" + "google.golang.org/grpc" + "google.golang.org/grpc/metadata" + "keywords-filter/pkg/config" + "keywords-filter/pkg/zerror" + "strings" +) + +func UnaryAuthInterceptor(ctx context.Context, req any, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (resp any, err error) { + if info.FullMethod != "/grpc.health.v1.Health/Check" { + err = oauth2Valid(ctx) + if err != nil { + return nil, err + } + } + return handler(ctx, req) +} +func oauth2Valid(ctx context.Context) error { + md, ok := metadata.FromIncomingContext(ctx) + if !ok { + return zerror.NewByMsg("元数据获取失败") + } + authorization := md["authorization"] + + if len(authorization) < 1 { + return zerror.NewByMsg("元数据获取失败") + } + + token := strings.TrimPrefix(authorization[0], "Bearer ") + cnf := config.GetConfig() + if token != cnf.Server.AccessToken { + return zerror.NewByMsg("鉴权失败") + } + return nil +} diff --git a/keywords-filter/filter-server/main.go b/keywords-filter/filter-server/main.go new file mode 100644 index 0000000..fb32e37 --- /dev/null +++ b/keywords-filter/filter-server/main.go @@ -0,0 +1,55 @@ +package main + +import ( + "flag" + "fmt" + "google.golang.org/grpc" + "google.golang.org/grpc/health" + "google.golang.org/grpc/health/grpc_health_v1" + "keywords-filter/filter-server/interceptor" + "keywords-filter/filter-server/server" + "keywords-filter/pkg/config" + "keywords-filter/pkg/filter" + "keywords-filter/pkg/log" + "keywords-filter/proto" + "net" +) + +var ( + configFile = flag.String("config", "dev.config.yaml", "") + dictFile = flag.String("dict", "dict.txt", "") + formatDict = flag.Bool("format", false, "") +) + +func main() { + flag.Parse() + if *formatDict { + filter.OverwriteDict(*dictFile) + return + } + + //初始化配置文件 + config.InitConfig(*configFile) + cnf := config.GetConfig() + //初始化日志 + log.SetLevel(cnf.Log.Level) + log.SetOutput(log.GetRotateWriter(cnf.Log.LogPath)) + log.SetPrintCaller(true) + //初始话filter + filter.InitFilter(*dictFile) + + lis, err := net.Listen("tcp", fmt.Sprintf("%s:%d", cnf.Server.IP, cnf.Server.Port)) + if err != nil { + log.Fatal(err) + } + s := grpc.NewServer(grpc.UnaryInterceptor(interceptor.UnaryAuthInterceptor)) + service := server.NewFilterService(filter.GetFilter()) + proto.RegisterFilterServer(s, service) + + healthCheckSrv := health.NewServer() + grpc_health_v1.RegisterHealthServer(s, healthCheckSrv) + + if err = s.Serve(lis); err != nil { + log.Fatal(err) + } +} diff --git a/keywords-filter/filter-server/server/server.go b/keywords-filter/filter-server/server/server.go new file mode 100644 index 0000000..3493c04 --- /dev/null +++ b/keywords-filter/filter-server/server/server.go @@ -0,0 +1,32 @@ +package server + +import ( + "context" + "keywords-filter/pkg/filter" + "keywords-filter/proto" +) + +type filterService struct { + proto.UnimplementedFilterServer + filter filter.IFilter +} + +func NewFilterService(filter filter.IFilter) proto.FilterServer { + return &filterService{ + filter: filter, + } +} + +func (s *filterService) Validate(_ context.Context, in *proto.FilterReq) (*proto.ValidateRes, error) { + ok, word := s.filter.Validate(in.Text) + return &proto.ValidateRes{ + Ok: ok, + Keyword: word, + }, nil +} +func (s *filterService) FindAll(_ context.Context, in *proto.FilterReq) (*proto.FindAllRes, error) { + words := s.filter.FindAll(in.Text) + return &proto.FindAllRes{ + Keywords: words, + }, nil +} diff --git a/keywords-filter/go.mod b/keywords-filter/go.mod new file mode 100644 index 0000000..2490c12 --- /dev/null +++ b/keywords-filter/go.mod @@ -0,0 +1,37 @@ +module keywords-filter + +go 1.20 + +require ( + github.com/importcjj/sensitive v0.0.0-20200106142752-42d1c505be7b + github.com/sirupsen/logrus v1.9.3 + github.com/spf13/viper v1.19.0 + google.golang.org/grpc v1.62.1 + google.golang.org/protobuf v1.34.2 + gopkg.in/natefinch/lumberjack.v2 v2.2.1 +) + +require ( + github.com/fsnotify/fsnotify v1.7.0 // indirect + github.com/golang/protobuf v1.5.3 // indirect + github.com/hashicorp/hcl v1.0.0 // indirect + github.com/magiconair/properties v1.8.7 // indirect + github.com/mitchellh/mapstructure v1.5.0 // indirect + github.com/pelletier/go-toml/v2 v2.2.2 // indirect + github.com/sagikazarmark/locafero v0.4.0 // indirect + github.com/sagikazarmark/slog-shim v0.1.0 // indirect + github.com/sourcegraph/conc v0.3.0 // indirect + github.com/spf13/afero v1.11.0 // indirect + github.com/spf13/cast v1.6.0 // indirect + github.com/spf13/pflag v1.0.5 // indirect + github.com/subosito/gotenv v1.6.0 // indirect + go.uber.org/atomic v1.9.0 // indirect + go.uber.org/multierr v1.9.0 // indirect + golang.org/x/exp v0.0.0-20230905200255-921286631fa9 // indirect + golang.org/x/net v0.26.0 // indirect + golang.org/x/sys v0.21.0 // indirect + golang.org/x/text v0.16.0 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20240604185151-ef581f913117 // indirect + gopkg.in/ini.v1 v1.67.0 // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect +) diff --git a/keywords-filter/go.sum b/keywords-filter/go.sum new file mode 100644 index 0000000..39dbbc7 --- /dev/null +++ b/keywords-filter/go.sum @@ -0,0 +1,86 @@ +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= +github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= +github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA= +github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM= +github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= +github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= +github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= +github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= +github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= +github.com/importcjj/sensitive v0.0.0-20200106142752-42d1c505be7b h1:9hudrgWUhyfR4FRMOfL9KB1uYw48DUdHkkgr9ODOw7Y= +github.com/importcjj/sensitive v0.0.0-20200106142752-42d1c505be7b/go.mod h1:zLVdX6Ed2SvCbEamKmve16U0E03UkdJo4ls1TBfmc8Q= +github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY= +github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0= +github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= +github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/pelletier/go-toml/v2 v2.2.2 h1:aYUidT7k73Pcl9nb2gScu7NSrKCSHIDE89b3+6Wq+LM= +github.com/pelletier/go-toml/v2 v2.2.2/go.mod h1:1t835xjRzz80PqgE6HHgN2JOsmgYu/h4qDAS4n929Rs= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= +github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8= +github.com/sagikazarmark/locafero v0.4.0 h1:HApY1R9zGo4DBgr7dqsTH/JJxLTTsOt7u6keLGt6kNQ= +github.com/sagikazarmark/locafero v0.4.0/go.mod h1:Pe1W6UlPYUk/+wc/6KFhbORCfqzgYEpgQ3O5fPuL3H4= +github.com/sagikazarmark/slog-shim v0.1.0 h1:diDBnUNK9N/354PgrxMywXnAwEr1QZcOr6gto+ugjYE= +github.com/sagikazarmark/slog-shim v0.1.0/go.mod h1:SrcSrq8aKtyuqEI1uvTDTK1arOWRIczQRv+GVI1AkeQ= +github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ= +github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= +github.com/sourcegraph/conc v0.3.0 h1:OQTbbt6P72L20UqAkXXuLOj79LfEanQ+YQFNpLA9ySo= +github.com/sourcegraph/conc v0.3.0/go.mod h1:Sdozi7LEKbFPqYX2/J+iBAM6HpqSLTASQIKqDmF7Mt0= +github.com/spf13/afero v1.11.0 h1:WJQKhtpdm3v2IzqG8VMqrr6Rf3UYpEF239Jy9wNepM8= +github.com/spf13/afero v1.11.0/go.mod h1:GH9Y3pIexgf1MTIWtNGyogA5MwRIDXGUr+hbWNoBjkY= +github.com/spf13/cast v1.6.0 h1:GEiTHELF+vaR5dhz3VqZfFSzZjYbgeKDpBxQVS4GYJ0= +github.com/spf13/cast v1.6.0/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo= +github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= +github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/spf13/viper v1.19.0 h1:RWq5SEjt8o25SROyN3z2OrDB9l7RPd3lwTWU8EcEdcI= +github.com/spf13/viper v1.19.0/go.mod h1:GQUN9bilAbhU/jgc1bKs99f/suXKeUMct8Adx5+Ntkg= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= +github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= +github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= +github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= +github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= +github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8= +github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU= +go.uber.org/atomic v1.9.0 h1:ECmE8Bn/WFTYwEW/bpKD3M8VtR/zQVbavAoalC1PYyE= +go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= +go.uber.org/multierr v1.9.0 h1:7fIwc/ZtS0q++VgcfqFDxSBZVv/Xo49/SYnDFupUwlI= +go.uber.org/multierr v1.9.0/go.mod h1:X2jQV1h+kxSjClGpnseKVIxpmcjrj7MNnI0bnlfKTVQ= +golang.org/x/exp v0.0.0-20230905200255-921286631fa9 h1:GoHiUyI/Tp2nVkLI2mCxVkOjsbSXD66ic0XW0js0R9g= +golang.org/x/exp v0.0.0-20230905200255-921286631fa9/go.mod h1:S2oDrQGGwySpoQPVqRShND87VCbxmc6bL1Yd2oYrm6k= +golang.org/x/net v0.26.0 h1:soB7SVo0PWrY4vPW/+ay0jKDNScG2X9wFeYlXIvJsOQ= +golang.org/x/net v0.26.0/go.mod h1:5YKkiSynbBIh3p6iOc/vibscux0x38BZDkn8sCUPxHE= +golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.21.0 h1:rF+pYz3DAGSQAxAu1CbC7catZg4ebC4UIeIhKxBZvws= +golang.org/x/sys v0.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/text v0.16.0 h1:a94ExnEXNtEwYLGJSIUxnWoxoRz/ZcCsV63ROupILh4= +golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240604185151-ef581f913117 h1:1GBuWVLM/KMVUv1t1En5Gs+gFZCNd360GGb4sSxtrhU= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240604185151-ef581f913117/go.mod h1:EfXuqaE1J41VCDicxHzUDm+8rk+7ZdXzHV0IhO/I6s0= +google.golang.org/grpc v1.62.1 h1:B4n+nfKzOICUXMgyrNd19h/I9oH0L1pizfk1d4zSgTk= +google.golang.org/grpc v1.62.1/go.mod h1:IWTG0VlJLCh1SkC58F7np9ka9mx/WNkjl4PGJaiq+QE= +google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= +google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.34.2 h1:6xV6lTsCfpGD21XK49h7MhtcApnLqkfYgPcdHftf6hg= +google.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo= +gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA= +gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= +gopkg.in/natefinch/lumberjack.v2 v2.2.1 h1:bBRl1b0OH9s/DuPhuXpNl+VtCaJXFZ5/uEFST95x9zc= +gopkg.in/natefinch/lumberjack.v2 v2.2.1/go.mod h1:YD8tP3GAjkrDg1eZH7EGmyESg/lsYskCTPBJVb9jqSc= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/keywords-filter/grpc_health_probe-linux-amd64 b/keywords-filter/grpc_health_probe-linux-amd64 new file mode 100644 index 0000000..3f0da73 Binary files /dev/null and b/keywords-filter/grpc_health_probe-linux-amd64 differ diff --git a/keywords-filter/keyword-dict.txt b/keywords-filter/keyword-dict.txt new file mode 100644 index 0000000..bbdaeef --- /dev/null +++ b/keywords-filter/keyword-dict.txt @@ -0,0 +1,192 @@ + golang + defer + recover + sync + Protobuf + gin + grpc-gateway + OpenTelemetry + OTel + otel + k8s + Kubernetes + kubernetes + Docker + docker + Istio + istio + Prometheus + prometheus + cadvisor + cAdvisor + Elastic + Kibana + Grafana + apiserver + CI/CD + ci/cd + ArgoCD + argo + Argo + kaniko + Mesh + Volume + volume + promQL + PromQL + kafka + ingress + StorageClass + VolumeClaim + gitlab + openflow + dpdk + vpp + ovs + spdk + virtio + vhost + qemu + vSwitch + bridge + hugepage + nvme + dpvs + iperf3 + rfc2544 + ioengine + PCI + vxlan + gre + kni + Kernel +内核 + KernelThread +内核线程 + Virtual + memory +虚拟内存 +内存屏障 +内存管理 + Scheduler +调度器 + File +文件系统 + Device + driver +设备驱动程序 + Syscall +系统调用 + Process + scheduling +进程调度 + Page +页表 + Swap +交换空间 + Mount + Inode +挂载 +索引节点 + Block +块设备 + Character +字符设备 + IRQ + Kconfig +内核配置 + Perf + Ftrace +内核跟踪工具 + Valgrind +内存调试工具 + System +系统定时器 + DMA +伙伴系统 +信号与槽 + Signals + Slots +事件处理程序 + Event + QML +多线程编程 + Multithreading + Programming + QThread + QtQuick +模型 +视图架构 + Model/View + QObject + QWidget + QRegularExpression + QDesktopWidget + QNetworkAccessManager + QTcpServer + QTcpSocket + QUdpSocket + QMutex + SQLite/MySQL +MySQL编程 +SQLite编程 + OpenCV + OpenGL +Qt数据库编程 +Qt网络编程 + Linux + tcp + redis + mysql +网络 + nginx +协程 + io_uring +内存泄漏 + bpf + ebpf + skynet + openresty + RocksDB + TiDB + ceph + etcd + fuse + p2p + + http + mqtt + cuda + mutex + spinlock + hash + rbtree + btree + Makefile + git + wrk + Cuda + CUDA + D3D + d3d + ffmpeg + RTSP + WebRTC + PCM + RGB + YUv + MP4 + FLV + TS + VLC + EasylCE + flvAnalyser + mp4box + audacity + Elecard + AAC + h264 + SDL + AVFormat + AVCodec + AVPacket \ No newline at end of file diff --git a/keywords-filter/pkg/config/config.go b/keywords-filter/pkg/config/config.go new file mode 100644 index 0000000..ea45744 --- /dev/null +++ b/keywords-filter/pkg/config/config.go @@ -0,0 +1,42 @@ +package config + +import ( + "github.com/spf13/viper" + "log" +) + +type Config struct { + Server struct { + IP string + Port int + AccessToken string + } + Log struct { + Level string + LogPath string `mapstructure:"logPath"` + } `mapstructure:"log"` +} + +var conf *Config + +func InitConfig(filePath string, typ ...string) { + v := viper.New() + v.SetConfigFile(filePath) + if len(typ) > 0 { + v.SetConfigType(typ[0]) + } + err := v.ReadInConfig() + if err != nil { + log.Fatal(err) + } + conf = &Config{} + err = v.Unmarshal(conf) + if err != nil { + log.Fatal(err) + } + +} + +func GetConfig() *Config { + return conf +} diff --git a/keywords-filter/pkg/filter/filter.go b/keywords-filter/pkg/filter/filter.go new file mode 100644 index 0000000..1f7c592 --- /dev/null +++ b/keywords-filter/pkg/filter/filter.go @@ -0,0 +1,98 @@ +package filter + +import ( + "bufio" + "github.com/importcjj/sensitive" + "keywords-filter/pkg/log" + "os" + "regexp" + "strings" +) + +type IFilter interface { + Validate(text string) (bool, string) + FindAll(text string) []string +} + +type filter struct { + filter *sensitive.Filter +} + +func (f *filter) Validate(text string) (bool, string) { + text = " " + strings.Trim(text, " ") + " " + ok, word := f.filter.Validate(text) + return ok, word +} +func (f *filter) FindAll(text string) []string { + text = " " + strings.Trim(text, " ") + " " + list := f.filter.FindAll(text) + for i := 0; i < len(list); i++ { + list[i] = strings.Trim(list[i], " ") + } + return list +} + +var _filter *filter + +func GetFilter() IFilter { + return _filter +} + +func InitFilter(dictFilePath string) { + if dictFilePath == "" { + log.Fatal("请指定词库文件") + } + _, err := os.Stat(dictFilePath) + if os.IsNotExist(err) { + log.Fatal("词库文件不存在,请指定正确的词库文件") + } + f := sensitive.New() + f.UpdateNoisePattern("") + f.LoadWordDict(dictFilePath) + _filter = &filter{ + filter: f, + } +} + +func OverwriteDict(dictFilePath string) error { + file, err := os.Open(dictFilePath) + if err != nil { + log.Fatal(err) + return err + } + re := regexp.MustCompile(`\p{Han}+`) + newContent := "" + kwMp := make(map[string]struct{}, 0) + + scanner := bufio.NewScanner(file) + for scanner.Scan() { + line := scanner.Text() + line = strings.Trim(line, " ") + //去重 + if _, ok := kwMp[line]; ok { + continue + } + kwMp[line] = struct{}{} + match := re.FindString(line) + if match == "" { + newContent += " " + line + " \n" + } else { + newContent += line + "\n" + } + } + newContent = strings.Trim(newContent, "\n") + file.Close() + file, err = os.OpenFile(dictFilePath, os.O_TRUNC|os.O_CREATE|os.O_WRONLY, 0644) + defer file.Close() + if err != nil { + log.Fatal(err) + return err + } + _, err = file.WriteString(newContent) + if err != nil { + log.Fatal(err) + return err + } + return err + +} diff --git a/keywords-filter/pkg/log/README.md b/keywords-filter/pkg/log/README.md new file mode 100644 index 0000000..3e02b17 --- /dev/null +++ b/keywords-filter/pkg/log/README.md @@ -0,0 +1,3 @@ +# 日志框架 +1. 可通过包调用日志打印,也可以通过对象调用日志打印 +2. 可以自动切分日志文件 diff --git a/keywords-filter/pkg/log/hook.go b/keywords-filter/pkg/log/hook.go new file mode 100644 index 0000000..a7a1cbf --- /dev/null +++ b/keywords-filter/pkg/log/hook.go @@ -0,0 +1,19 @@ +package log + +import "github.com/sirupsen/logrus" +import nativeLog "log" + +type errorHook struct { +} + +func (*errorHook) Levels() []logrus.Level { + return []logrus.Level{ + logrus.PanicLevel, + logrus.FatalLevel, + logrus.ErrorLevel, + } +} +func (*errorHook) Fire(entry *logrus.Entry) error { + nativeLog.Println(entry.Message, entry.Data) + return nil +} diff --git a/keywords-filter/pkg/log/log.go b/keywords-filter/pkg/log/log.go new file mode 100644 index 0000000..520d547 --- /dev/null +++ b/keywords-filter/pkg/log/log.go @@ -0,0 +1,233 @@ +package log + +import ( + "errors" + "fmt" + "github.com/sirupsen/logrus" + "io" + "runtime" +) + +type ILogger interface { + SetLevel(lvl string) + SetOutput(writer io.Writer) + SetPrintCaller(bool) + SetCaller(caller func() (file string, line int, funcName string, err error)) + Trace(args ...interface{}) + Debug(args ...interface{}) + Info(args ...interface{}) + Warning(args ...interface{}) + Error(args ...interface{}) + Fatal(args ...interface{}) + Panic(args ...interface{}) + TraceF(format string, args ...interface{}) + DebugF(format string, args ...interface{}) + InfoF(format string, args ...interface{}) + WarningF(format string, args ...interface{}) + ErrorF(format string, args ...interface{}) + FatalF(format string, args ...interface{}) + PanicF(format string, args ...interface{}) + WithFields(fields map[string]interface{}) ILogger +} +type Logger struct { + entry *logrus.Entry + // panic,fatal,error,warn,warning,info,debug,trace + level string + printCaller bool + caller func() (file string, line int, funcName string, err error) +} + +// 设置日志打印级别 +func (l *Logger) SetLevel(lvl string) { + if lvl == "" { + return + } + level, err := logrus.ParseLevel(lvl) + if err == nil { + l.level = lvl + l.entry.Logger.Level = level + } +} + +// 设置日志输出位置 +func (l *Logger) SetOutput(writer io.Writer) { + l.entry.Logger.SetOutput(writer) +} + +// 设置是否打印调用信息 +func (l *Logger) SetPrintCaller(printCaller bool) { + l.printCaller = printCaller +} +func (l *Logger) SetCaller(caller func() (file string, line int, funcName string, err error)) { + l.caller = caller +} + +// 获取caller信息 +func (l *Logger) getCallerInfo(level logrus.Level) map[string]interface{} { + mp := make(map[string]interface{}) + if l.printCaller == true || level != logrus.InfoLevel { + file, line, funcName, err := l.caller() + if err == nil { + mp["file"] = fmt.Sprintf("%s:%d", file, line) + mp["func"] = funcName + } + } + return mp +} + +func (l *Logger) log(level logrus.Level, args ...interface{}) { + l.entry.WithFields(l.getCallerInfo(level)).Log(level, args...) +} +func (l *Logger) logf(level logrus.Level, format string, args ...interface{}) { + l.entry.WithFields(l.getCallerInfo(level)).Logf(level, format, args...) +} +func (l *Logger) Trace(args ...interface{}) { + l.log(logrus.TraceLevel, args...) +} +func (l *Logger) Debug(args ...interface{}) { + l.log(logrus.DebugLevel, args...) +} +func (l *Logger) Info(args ...interface{}) { + l.log(logrus.InfoLevel, args...) +} +func (l *Logger) Warning(args ...interface{}) { + l.log(logrus.WarnLevel, args...) +} +func (l *Logger) Error(args ...interface{}) { + l.log(logrus.ErrorLevel, args...) +} +func (l *Logger) Fatal(args ...interface{}) { + l.log(logrus.FatalLevel, args...) +} +func (l *Logger) Panic(args ...interface{}) { + l.log(logrus.PanicLevel, args...) +} +func (l *Logger) TraceF(format string, args ...interface{}) { + l.logf(logrus.TraceLevel, format, args...) +} +func (l *Logger) DebugF(format string, args ...interface{}) { + l.logf(logrus.DebugLevel, format, args...) +} +func (l *Logger) InfoF(format string, args ...interface{}) { + l.logf(logrus.InfoLevel, format, args...) +} +func (l *Logger) WarningF(format string, args ...interface{}) { + l.logf(logrus.WarnLevel, format, args...) +} +func (l *Logger) ErrorF(format string, args ...interface{}) { + l.logf(logrus.ErrorLevel, format, args...) +} +func (l *Logger) FatalF(format string, args ...interface{}) { + l.logf(logrus.FatalLevel, format, args...) +} +func (l *Logger) PanicF(format string, args ...interface{}) { + l.logf(logrus.PanicLevel, format, args...) +} +func (l *Logger) WithFields(fields map[string]interface{}) ILogger { + entry := l.entry.WithFields(fields) + return &Logger{entry: entry, level: l.level, printCaller: l.printCaller, caller: l.caller} +} + +var log *Logger + +func NewLogger() ILogger { + return newLogger() +} +func newLogger() *Logger { + log := logrus.New() + log.SetLevel(logrus.InfoLevel) + log.AddHook(&errorHook{}) + logger := &Logger{ + entry: logrus.NewEntry(log), + caller: defaultCaller, + } + return logger +} + +func init() { + log = newLogger() +} + +// 设置日志打印级别 +func SetLevel(lvl string) { + if lvl == "" { + return + } + level, err := logrus.ParseLevel(lvl) + if err == nil { + log.level = lvl + log.entry.Logger.Level = level + } +} + +// 设置日志的输出位置 +func SetOutput(writer io.Writer) { + log.entry.Logger.SetOutput(writer) +} + +// 设置是否打印调用信息 +func SetPrintCaller(printCaller bool) { + log.printCaller = printCaller +} + +func SetCaller(caller func() (file string, line int, funcName string, err error)) { + log.caller = caller +} + +func defaultCaller() (file string, line int, funcName string, err error) { + pc, f, l, ok := runtime.Caller(4) + if !ok { + err = errors.New("caller failure") + return + } + funcName = runtime.FuncForPC(pc).Name() + file, line = f, l + return +} + +func Trace(args ...interface{}) { + log.log(logrus.TraceLevel, args...) +} +func Debug(args ...interface{}) { + log.log(logrus.DebugLevel, args...) +} +func Info(args ...interface{}) { + log.log(logrus.InfoLevel, args...) +} +func Warning(args ...interface{}) { + log.log(logrus.WarnLevel, args...) +} +func Error(args ...interface{}) { + log.log(logrus.ErrorLevel, args...) +} +func Fatal(args ...interface{}) { + log.log(logrus.FatalLevel, args...) +} +func Panic(args ...interface{}) { + log.log(logrus.PanicLevel, args...) +} +func TraceF(format string, args ...interface{}) { + log.logf(logrus.TraceLevel, format, args...) +} +func DebugF(format string, args ...interface{}) { + log.logf(logrus.DebugLevel, format, args...) +} +func InfoF(format string, args ...interface{}) { + log.logf(logrus.InfoLevel, format, args...) +} +func WarningF(format string, args ...interface{}) { + log.logf(logrus.WarnLevel, format, args...) +} +func ErrorF(format string, args ...interface{}) { + log.logf(logrus.ErrorLevel, format, args...) +} +func FatalF(format string, args ...interface{}) { + log.logf(logrus.FatalLevel, format, args...) +} +func PanicF(format string, args ...interface{}) { + log.logf(logrus.PanicLevel, format, args...) +} +func WithFields(fields map[string]interface{}) *Logger { + entry := log.entry.WithFields(fields) + return &Logger{entry: entry, level: log.level, printCaller: log.printCaller, caller: log.caller} +} diff --git a/keywords-filter/pkg/log/rotate_writer.go b/keywords-filter/pkg/log/rotate_writer.go new file mode 100644 index 0000000..7bec60b --- /dev/null +++ b/keywords-filter/pkg/log/rotate_writer.go @@ -0,0 +1,58 @@ +package log + +import ( + "gopkg.in/natefinch/lumberjack.v2" + "io" + "sync" +) + +type fileRotateWriter struct { + data map[string]io.Writer + sync.RWMutex +} + +func (frw *fileRotateWriter) getWriter(logPath string) io.Writer { + frw.RLock() + defer frw.RUnlock() + w, ok := frw.data[logPath] + if !ok { + return nil + } + return w +} +func (frw *fileRotateWriter) setWriter(logPath string, w io.Writer) io.Writer { + frw.Lock() + defer frw.Unlock() + frw.data[logPath] = w + return w +} + +var _fileRotateWriter *fileRotateWriter + +func init() { + _fileRotateWriter = &fileRotateWriter{ + data: map[string]io.Writer{}, + } +} + +func GetRotateWriter(logPath string) io.Writer { + if logPath == "" { + panic("日志文件路径不能为空") + } + writer := _fileRotateWriter.getWriter(logPath) + if writer != nil { + return writer + } + writer = &lumberjack.Logger{ + //文件名 + Filename: logPath, + //单个文件大小单位MB + MaxSize: 1, + //最多保留文件数 + MaxBackups: 15, + //最长保留时间(天) + MaxAge: 7, + LocalTime: true, + } + return _fileRotateWriter.setWriter(logPath, writer) +} diff --git a/keywords-filter/pkg/zerror/error_code.go b/keywords-filter/pkg/zerror/error_code.go new file mode 100644 index 0000000..0aacd5c --- /dev/null +++ b/keywords-filter/pkg/zerror/error_code.go @@ -0,0 +1,14 @@ +package zerror + +type ZErrorCode string + +func getErrMsg(errCode ZErrorCode) string { + msg, ok := errorMsgs[errCode] + if ok { + return msg + } + return "" +} + +// 错误码与之对应的错误消息 +var errorMsgs = map[ZErrorCode]string{} diff --git a/keywords-filter/pkg/zerror/zerror.go b/keywords-filter/pkg/zerror/zerror.go new file mode 100644 index 0000000..bf1a76b --- /dev/null +++ b/keywords-filter/pkg/zerror/zerror.go @@ -0,0 +1,101 @@ +package zerror + +import ( + "errors" + "fmt" +) + +type ZError struct { + ErrCode ZErrorCode `json:"err_code,omitempty"` + ErrMsg string `json:"err_msg,omitempty"` + errs []error +} + +func (e *ZError) Error() string { + if e == nil { + return "" + } + if e.ErrMsg != "" { + return fmt.Sprintf("ErrCode:%s; ErrMsg:%s;", e.ErrCode, e.ErrMsg) + } + res := "" + if e.errs == nil || len(e.errs) == 0 { + return res + } + var first = true + for _, err := range e.errs { + if first { + res = err.Error() + first = false + } else { + res += ";" + err.Error() + } + } + return res +} +func (e *ZError) Errors() []error { + if e == nil { + return nil + } + return e.errs +} +func (e *ZError) Append(err error) { + if e == nil || err == nil { + return + } + ze, ok := err.(*ZError) + if ok { + e.errs = append(e.errs, ze.errs...) + } else { + e.errs = append(e.errs, err) + } +} + +func NewByErr(err ...error) error { + res := &ZError{ + errs: make([]error, 0), + } + for i, e := range err { + if e == nil { + continue + } + ze, ok := err[i].(*ZError) + if ok { + res.errs = append(res.errs, ze.errs...) + } else { + res.errs = append(res.errs, err[i]) + } + } + if len(res.errs) > 0 { + return res + } + return nil +} +func NewByCode(errCode ZErrorCode, errMsg ...string) error { + msg := "" + if len(errMsg) > 0 { + msg = errMsg[0] + } else { + msg = getErrMsg(errCode) + } + return &ZError{ + ErrCode: errCode, + ErrMsg: msg, + } +} +func NewByMsg(msg string) error { + err := errors.New(msg) + return NewByErr(err) +} +func Errors(err error) []error { + if err == nil { + return nil + } + ze, ok := err.(*ZError) + if !ok { + return []error{err} + } + //将一个空的[]error切片与ze.Errors()返回的错误切片合并在一起 + //返回一个新切片 + return append(([]error)(nil), ze.Errors()...) +} diff --git a/keywords-filter/proto/filter.pb.go b/keywords-filter/proto/filter.pb.go new file mode 100644 index 0000000..31da090 --- /dev/null +++ b/keywords-filter/proto/filter.pb.go @@ -0,0 +1,294 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.28.1 +// protoc v4.22.0 +// source: proto/filter.proto + +package proto + +import ( + 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) +) + +type FilterReq struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Text string `protobuf:"bytes,1,opt,name=text,proto3" json:"text,omitempty"` +} + +func (x *FilterReq) Reset() { + *x = FilterReq{} + if protoimpl.UnsafeEnabled { + mi := &file_proto_filter_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *FilterReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*FilterReq) ProtoMessage() {} + +func (x *FilterReq) ProtoReflect() protoreflect.Message { + mi := &file_proto_filter_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 FilterReq.ProtoReflect.Descriptor instead. +func (*FilterReq) Descriptor() ([]byte, []int) { + return file_proto_filter_proto_rawDescGZIP(), []int{0} +} + +func (x *FilterReq) GetText() string { + if x != nil { + return x.Text + } + return "" +} + +type ValidateRes struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Ok bool `protobuf:"varint,1,opt,name=ok,proto3" json:"ok,omitempty"` + Keyword string `protobuf:"bytes,2,opt,name=keyword,proto3" json:"keyword,omitempty"` +} + +func (x *ValidateRes) Reset() { + *x = ValidateRes{} + if protoimpl.UnsafeEnabled { + mi := &file_proto_filter_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ValidateRes) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ValidateRes) ProtoMessage() {} + +func (x *ValidateRes) ProtoReflect() protoreflect.Message { + mi := &file_proto_filter_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 ValidateRes.ProtoReflect.Descriptor instead. +func (*ValidateRes) Descriptor() ([]byte, []int) { + return file_proto_filter_proto_rawDescGZIP(), []int{1} +} + +func (x *ValidateRes) GetOk() bool { + if x != nil { + return x.Ok + } + return false +} + +func (x *ValidateRes) GetKeyword() string { + if x != nil { + return x.Keyword + } + return "" +} + +type FindAllRes struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Keywords []string `protobuf:"bytes,1,rep,name=keywords,proto3" json:"keywords,omitempty"` +} + +func (x *FindAllRes) Reset() { + *x = FindAllRes{} + if protoimpl.UnsafeEnabled { + mi := &file_proto_filter_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *FindAllRes) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*FindAllRes) ProtoMessage() {} + +func (x *FindAllRes) ProtoReflect() protoreflect.Message { + mi := &file_proto_filter_proto_msgTypes[2] + 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 FindAllRes.ProtoReflect.Descriptor instead. +func (*FindAllRes) Descriptor() ([]byte, []int) { + return file_proto_filter_proto_rawDescGZIP(), []int{2} +} + +func (x *FindAllRes) GetKeywords() []string { + if x != nil { + return x.Keywords + } + return nil +} + +var File_proto_filter_proto protoreflect.FileDescriptor + +var file_proto_filter_proto_rawDesc = []byte{ + 0x0a, 0x12, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x1a, 0x6b, 0x65, 0x79, 0x77, 0x6f, 0x72, 0x64, 0x73, 0x5f, 0x66, + 0x69, 0x6c, 0x74, 0x65, 0x72, 0x2e, 0x7a, 0x76, 0x6f, 0x69, 0x63, 0x65, 0x2e, 0x63, 0x6f, 0x6d, + 0x22, 0x1f, 0x0a, 0x09, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x12, 0x12, 0x0a, + 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x65, 0x78, + 0x74, 0x22, 0x37, 0x0a, 0x0b, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, + 0x12, 0x0e, 0x0a, 0x02, 0x6f, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x02, 0x6f, 0x6b, + 0x12, 0x18, 0x0a, 0x07, 0x6b, 0x65, 0x79, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x07, 0x6b, 0x65, 0x79, 0x77, 0x6f, 0x72, 0x64, 0x22, 0x28, 0x0a, 0x0a, 0x46, 0x69, + 0x6e, 0x64, 0x41, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x77, + 0x6f, 0x72, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x77, + 0x6f, 0x72, 0x64, 0x73, 0x32, 0xbe, 0x01, 0x0a, 0x06, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, + 0x5a, 0x0a, 0x08, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x12, 0x25, 0x2e, 0x6b, 0x65, + 0x79, 0x77, 0x6f, 0x72, 0x64, 0x73, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x2e, 0x7a, 0x76, + 0x6f, 0x69, 0x63, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x52, + 0x65, 0x71, 0x1a, 0x27, 0x2e, 0x6b, 0x65, 0x79, 0x77, 0x6f, 0x72, 0x64, 0x73, 0x5f, 0x66, 0x69, + 0x6c, 0x74, 0x65, 0x72, 0x2e, 0x7a, 0x76, 0x6f, 0x69, 0x63, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2e, + 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x12, 0x58, 0x0a, 0x07, 0x46, + 0x69, 0x6e, 0x64, 0x41, 0x6c, 0x6c, 0x12, 0x25, 0x2e, 0x6b, 0x65, 0x79, 0x77, 0x6f, 0x72, 0x64, + 0x73, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x2e, 0x7a, 0x76, 0x6f, 0x69, 0x63, 0x65, 0x2e, + 0x63, 0x6f, 0x6d, 0x2e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x1a, 0x26, 0x2e, + 0x6b, 0x65, 0x79, 0x77, 0x6f, 0x72, 0x64, 0x73, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x2e, + 0x7a, 0x76, 0x6f, 0x69, 0x63, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x41, + 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x42, 0x17, 0x5a, 0x15, 0x6b, 0x65, 0x79, 0x77, 0x6f, 0x72, 0x64, + 0x73, 0x2d, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x06, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_proto_filter_proto_rawDescOnce sync.Once + file_proto_filter_proto_rawDescData = file_proto_filter_proto_rawDesc +) + +func file_proto_filter_proto_rawDescGZIP() []byte { + file_proto_filter_proto_rawDescOnce.Do(func() { + file_proto_filter_proto_rawDescData = protoimpl.X.CompressGZIP(file_proto_filter_proto_rawDescData) + }) + return file_proto_filter_proto_rawDescData +} + +var file_proto_filter_proto_msgTypes = make([]protoimpl.MessageInfo, 3) +var file_proto_filter_proto_goTypes = []interface{}{ + (*FilterReq)(nil), // 0: keywords_filter.zvoice.com.FilterReq + (*ValidateRes)(nil), // 1: keywords_filter.zvoice.com.ValidateRes + (*FindAllRes)(nil), // 2: keywords_filter.zvoice.com.FindAllRes +} +var file_proto_filter_proto_depIdxs = []int32{ + 0, // 0: keywords_filter.zvoice.com.Filter.Validate:input_type -> keywords_filter.zvoice.com.FilterReq + 0, // 1: keywords_filter.zvoice.com.Filter.FindAll:input_type -> keywords_filter.zvoice.com.FilterReq + 1, // 2: keywords_filter.zvoice.com.Filter.Validate:output_type -> keywords_filter.zvoice.com.ValidateRes + 2, // 3: keywords_filter.zvoice.com.Filter.FindAll:output_type -> keywords_filter.zvoice.com.FindAllRes + 2, // [2:4] is the sub-list for method output_type + 0, // [0:2] is the sub-list for method input_type + 0, // [0:0] is the sub-list for extension type_name + 0, // [0:0] is the sub-list for extension extendee + 0, // [0:0] is the sub-list for field type_name +} + +func init() { file_proto_filter_proto_init() } +func file_proto_filter_proto_init() { + if File_proto_filter_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_proto_filter_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*FilterReq); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_proto_filter_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ValidateRes); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_proto_filter_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*FindAllRes); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_proto_filter_proto_rawDesc, + NumEnums: 0, + NumMessages: 3, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_proto_filter_proto_goTypes, + DependencyIndexes: file_proto_filter_proto_depIdxs, + MessageInfos: file_proto_filter_proto_msgTypes, + }.Build() + File_proto_filter_proto = out.File + file_proto_filter_proto_rawDesc = nil + file_proto_filter_proto_goTypes = nil + file_proto_filter_proto_depIdxs = nil +} diff --git a/keywords-filter/proto/filter.proto b/keywords-filter/proto/filter.proto new file mode 100644 index 0000000..1f93144 --- /dev/null +++ b/keywords-filter/proto/filter.proto @@ -0,0 +1,20 @@ +syntax = "proto3"; +option go_package = "keywords-filter/proto"; +package keywords_filter.zvoice.com; + +message FilterReq { + string text = 1; +} + +message ValidateRes { + bool ok = 1; + string keyword = 2; +} + +message FindAllRes { + repeated string keywords = 1; +} +service Filter { + rpc Validate(FilterReq) returns (ValidateRes); + rpc FindAll(FilterReq) returns (FindAllRes); +} \ No newline at end of file diff --git a/keywords-filter/proto/filter_grpc.pb.go b/keywords-filter/proto/filter_grpc.pb.go new file mode 100644 index 0000000..ff07e75 --- /dev/null +++ b/keywords-filter/proto/filter_grpc.pb.go @@ -0,0 +1,141 @@ +// Code generated by protoc-gen-go-grpc. DO NOT EDIT. +// versions: +// - protoc-gen-go-grpc v1.2.0 +// - protoc v4.22.0 +// source: proto/filter.proto + +package proto + +import ( + context "context" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" +) + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +// Requires gRPC-Go v1.32.0 or later. +const _ = grpc.SupportPackageIsVersion7 + +// FilterClient is the client API for Filter service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. +type FilterClient interface { + Validate(ctx context.Context, in *FilterReq, opts ...grpc.CallOption) (*ValidateRes, error) + FindAll(ctx context.Context, in *FilterReq, opts ...grpc.CallOption) (*FindAllRes, error) +} + +type filterClient struct { + cc grpc.ClientConnInterface +} + +func NewFilterClient(cc grpc.ClientConnInterface) FilterClient { + return &filterClient{cc} +} + +func (c *filterClient) Validate(ctx context.Context, in *FilterReq, opts ...grpc.CallOption) (*ValidateRes, error) { + out := new(ValidateRes) + err := c.cc.Invoke(ctx, "/keywords_filter.zvoice.com.Filter/Validate", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *filterClient) FindAll(ctx context.Context, in *FilterReq, opts ...grpc.CallOption) (*FindAllRes, error) { + out := new(FindAllRes) + err := c.cc.Invoke(ctx, "/keywords_filter.zvoice.com.Filter/FindAll", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// FilterServer is the server API for Filter service. +// All implementations must embed UnimplementedFilterServer +// for forward compatibility +type FilterServer interface { + Validate(context.Context, *FilterReq) (*ValidateRes, error) + FindAll(context.Context, *FilterReq) (*FindAllRes, error) + mustEmbedUnimplementedFilterServer() +} + +// UnimplementedFilterServer must be embedded to have forward compatible implementations. +type UnimplementedFilterServer struct { +} + +func (UnimplementedFilterServer) Validate(context.Context, *FilterReq) (*ValidateRes, error) { + return nil, status.Errorf(codes.Unimplemented, "method Validate not implemented") +} +func (UnimplementedFilterServer) FindAll(context.Context, *FilterReq) (*FindAllRes, error) { + return nil, status.Errorf(codes.Unimplemented, "method FindAll not implemented") +} +func (UnimplementedFilterServer) mustEmbedUnimplementedFilterServer() {} + +// UnsafeFilterServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to FilterServer will +// result in compilation errors. +type UnsafeFilterServer interface { + mustEmbedUnimplementedFilterServer() +} + +func RegisterFilterServer(s grpc.ServiceRegistrar, srv FilterServer) { + s.RegisterService(&Filter_ServiceDesc, srv) +} + +func _Filter_Validate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(FilterReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(FilterServer).Validate(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/keywords_filter.zvoice.com.Filter/Validate", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(FilterServer).Validate(ctx, req.(*FilterReq)) + } + return interceptor(ctx, in, info, handler) +} + +func _Filter_FindAll_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(FilterReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(FilterServer).FindAll(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/keywords_filter.zvoice.com.Filter/FindAll", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(FilterServer).FindAll(ctx, req.(*FilterReq)) + } + return interceptor(ctx, in, info, handler) +} + +// Filter_ServiceDesc is the grpc.ServiceDesc for Filter service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var Filter_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "keywords_filter.zvoice.com.Filter", + HandlerType: (*FilterServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "Validate", + Handler: _Filter_Validate_Handler, + }, + { + MethodName: "FindAll", + Handler: _Filter_FindAll_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "proto/filter.proto", +} diff --git a/tokenizer/Dockerfile b/tokenizer/Dockerfile new file mode 100644 index 0000000..d319e95 --- /dev/null +++ b/tokenizer/Dockerfile @@ -0,0 +1,11 @@ +FROM quay.io/0voice/python:3.10-alpine +WORKDIR /app +ENV PORT 3002 + +ADD ./tokenizer.py /app +ADD ./requirements.txt /app + +RUN pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --trusted-host pypi.tuna.tsinghua.edu.cn --upgrade pip +RUN pip install --root-user-action=ignore -i https://pypi.tuna.tsinghua.edu.cn/simple --trusted-host pypi.tuna.tsinghua.edu.cn -r requirements.txt + +CMD ["sh","-c","nuxt --port ${PORT} --module tokenizer.py --workers 2"] \ No newline at end of file diff --git a/tokenizer/README.md b/tokenizer/README.md new file mode 100644 index 0000000..e7a42df --- /dev/null +++ b/tokenizer/README.md @@ -0,0 +1,6 @@ +# tokenizer + +## 镜像构建 +``` +docker build -t tokenizer:1.0.0 . +``` \ No newline at end of file diff --git a/tokenizer/requirements.txt b/tokenizer/requirements.txt new file mode 100644 index 0000000..98563a6 --- /dev/null +++ b/tokenizer/requirements.txt @@ -0,0 +1,2 @@ +nuxt>=0.2.0 +tiktoken>=0.3.3 \ No newline at end of file diff --git a/tokenizer/tokenizer.py b/tokenizer/tokenizer.py new file mode 100644 index 0000000..9440287 --- /dev/null +++ b/tokenizer/tokenizer.py @@ -0,0 +1,65 @@ +from nuxt import route, logger, Request +from nuxt.repositorys.validation import fields, use_args +import traceback +import tiktoken + +encoding_cache = {} + +support_models = set(["kimi-k2.5", + "gpt-3.5-turbo", + "gpt-3.5-turbo-16k", + "gpt-4", + "gpt-4-32k"]) + +support_model_prefixes = ( + "gpt-3.5-turbo-", + "gpt-4-", + "moonshot-", + "kimi-", +) + + +@route("/tokenizer/", methods=["POST"]) +@use_args({ + "role": fields.Str(required=True), + "content": fields.Str(required=True), + "name": fields.Str(required=False) +}, location="json") +def get_num_tokens(req: Request, message: dict, model_name: str): + try: + return { + "code": 200, + "num_tokens": num_tokens_from_messages([message], model=model_name) + } + except Exception as e: + logger.error(traceback.format_exc()) + return { + "code": 500, + "msg": "{}".format(e) + } + + +def num_tokens_from_messages(messages, model="gpt-3.5-turbo"): + """Returns the number of tokens used by a list of messages.""" + encoding = None + if model in encoding_cache: + encoding = encoding_cache.get(model) + else: + try: + encoding = tiktoken.encoding_for_model(model) + except KeyError: + encoding = tiktoken.get_encoding("cl100k_base") + encoding_cache[model] = encoding + if model in support_models or model.startswith(support_model_prefixes): + num_tokens = 0 + for message in messages: + num_tokens += 4 # every message follows {role/name}\n{content}\n + for key, value in message.items(): + num_tokens += len(encoding.encode(value)) + if key == "name": # if there's a name, the role is omitted + num_tokens += -1 # role is always required and always 1 token + num_tokens += 3 # every reply is primed with assistant + return num_tokens + else: + raise NotImplementedError(f"""num_tokens_from_messages() is not presently implemented for model {model}. +See https://github.com/openai/openai-python/blob/main/chatml.md for information on how messages are converted to tokens.""")