// Copyright 2017 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// https://developers.google.com/protocol-buffers/docs/proto3

// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// 	protoc-gen-go v1.31.0
// 	protoc        v5.28.2
// source: maintner/maintpb/maintner.proto

package maintpb

import (
	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
	timestamppb "google.golang.org/protobuf/types/known/timestamppb"
	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 Mutation struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	GithubIssue *GithubIssueMutation `protobuf:"bytes,1,opt,name=github_issue,json=githubIssue,proto3" json:"github_issue,omitempty"` // issue-specific changes
	Github      *GithubMutation      `protobuf:"bytes,3,opt,name=github,proto3" json:"github,omitempty"`                              // labels, milestones (not issue-specific)
	Git         *GitMutation         `protobuf:"bytes,2,opt,name=git,proto3" json:"git,omitempty"`
	Gerrit      *GerritMutation      `protobuf:"bytes,4,opt,name=gerrit,proto3" json:"gerrit,omitempty"`
}

func (x *Mutation) Reset() {
	*x = Mutation{}
	if protoimpl.UnsafeEnabled {
		mi := &file_maintner_maintpb_maintner_proto_msgTypes[0]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *Mutation) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*Mutation) ProtoMessage() {}

func (x *Mutation) ProtoReflect() protoreflect.Message {
	mi := &file_maintner_maintpb_maintner_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 Mutation.ProtoReflect.Descriptor instead.
func (*Mutation) Descriptor() ([]byte, []int) {
	return file_maintner_maintpb_maintner_proto_rawDescGZIP(), []int{0}
}

func (x *Mutation) GetGithubIssue() *GithubIssueMutation {
	if x != nil {
		return x.GithubIssue
	}
	return nil
}

func (x *Mutation) GetGithub() *GithubMutation {
	if x != nil {
		return x.Github
	}
	return nil
}

func (x *Mutation) GetGit() *GitMutation {
	if x != nil {
		return x.Git
	}
	return nil
}

func (x *Mutation) GetGerrit() *GerritMutation {
	if x != nil {
		return x.Gerrit
	}
	return nil
}

type GithubMutation struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Owner string `protobuf:"bytes,1,opt,name=owner,proto3" json:"owner,omitempty"` // "golang"
	Repo  string `protobuf:"bytes,2,opt,name=repo,proto3" json:"repo,omitempty"`   // "go"
	// Updated labels. (All must have id set at least)
	Labels []*GithubLabel `protobuf:"bytes,3,rep,name=labels,proto3" json:"labels,omitempty"`
	// Updated milestones. (All must have id set at least)
	Milestones []*GithubMilestone `protobuf:"bytes,4,rep,name=milestones,proto3" json:"milestones,omitempty"`
}

func (x *GithubMutation) Reset() {
	*x = GithubMutation{}
	if protoimpl.UnsafeEnabled {
		mi := &file_maintner_maintpb_maintner_proto_msgTypes[1]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *GithubMutation) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*GithubMutation) ProtoMessage() {}

func (x *GithubMutation) ProtoReflect() protoreflect.Message {
	mi := &file_maintner_maintpb_maintner_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 GithubMutation.ProtoReflect.Descriptor instead.
func (*GithubMutation) Descriptor() ([]byte, []int) {
	return file_maintner_maintpb_maintner_proto_rawDescGZIP(), []int{1}
}

func (x *GithubMutation) GetOwner() string {
	if x != nil {
		return x.Owner
	}
	return ""
}

func (x *GithubMutation) GetRepo() string {
	if x != nil {
		return x.Repo
	}
	return ""
}

func (x *GithubMutation) GetLabels() []*GithubLabel {
	if x != nil {
		return x.Labels
	}
	return nil
}

func (x *GithubMutation) GetMilestones() []*GithubMilestone {
	if x != nil {
		return x.Milestones
	}
	return nil
}

type GithubIssueMutation struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Owner  string `protobuf:"bytes,1,opt,name=owner,proto3" json:"owner,omitempty"`    // "golang"
	Repo   string `protobuf:"bytes,2,opt,name=repo,proto3" json:"repo,omitempty"`      // "go"
	Number int32  `protobuf:"varint,3,opt,name=number,proto3" json:"number,omitempty"` // 1, 2, 3... (not the ID)
	// not_exist is set true if the issue has been found to not exist.
	// If true, the owner/repo/number fields above must still be set.
	// If a future issue mutation for the same number arrives without
	// not_exist set, then the issue comes back to life.
	NotExist         bool                   `protobuf:"varint,13,opt,name=not_exist,json=notExist,proto3" json:"not_exist,omitempty"`
	Id               int64                  `protobuf:"varint,12,opt,name=id,proto3" json:"id,omitempty"`                                                            // unique across all repos
	User             *GithubUser            `protobuf:"bytes,4,opt,name=user,proto3" json:"user,omitempty"`                                                          // only set for new/updated issues, not new comments
	Assignees        []*GithubUser          `protobuf:"bytes,10,rep,name=assignees,proto3" json:"assignees,omitempty"`                                               // who the issue is assigned to
	DeletedAssignees []int64                `protobuf:"varint,11,rep,packed,name=deleted_assignees,json=deletedAssignees,proto3" json:"deleted_assignees,omitempty"` // IDs of users to delete from the assignee list
	Created          *timestamppb.Timestamp `protobuf:"bytes,5,opt,name=created,proto3" json:"created,omitempty"`                                                    // only needed on new issues
	Updated          *timestamppb.Timestamp `protobuf:"bytes,6,opt,name=updated,proto3" json:"updated,omitempty"`                                                    // only set on updated issue text
	Title            string                 `protobuf:"bytes,9,opt,name=title,proto3" json:"title,omitempty"`                                                        // issue title
	// body_change changes the body field (the top post, which isn't a comment).
	// It is now used in preference to the old body field.
	BodyChange *StringChange `protobuf:"bytes,31,opt,name=body_change,json=bodyChange,proto3" json:"body_change,omitempty"`
	// body was the old way to change the body, but it doesn't support removing the
	// body text, which is common on PRs. New mutations use body_change instead.
	Body        string `protobuf:"bytes,7,opt,name=body,proto3" json:"body,omitempty"`
	NoMilestone bool   `protobuf:"varint,15,opt,name=no_milestone,json=noMilestone,proto3" json:"no_milestone,omitempty"` // true unsets any previously-set milestone; false ignored.
	// When setting a milestone, only the milestone_id must be set.
	// TODO: allow num or title to be used if Github only returns those? So far unneeded.
	// The num and title, if non-zero, are treated as if they were a GithubMutation.Milestone update.
	MilestoneId    int64                         `protobuf:"varint,16,opt,name=milestone_id,json=milestoneId,proto3" json:"milestone_id,omitempty"`    // sets milestone to this milestone id (e.g. 2386495, global?)
	MilestoneNum   int64                         `protobuf:"varint,17,opt,name=milestone_num,json=milestoneNum,proto3" json:"milestone_num,omitempty"` // sets milestone to this milestone number (e.g. 2, per-repo)
	MilestoneTitle string                        `protobuf:"bytes,18,opt,name=milestone_title,json=milestoneTitle,proto3" json:"milestone_title,omitempty"`
	Closed         *BoolChange                   `protobuf:"bytes,19,opt,name=closed,proto3" json:"closed,omitempty"`
	Locked         *BoolChange                   `protobuf:"bytes,25,opt,name=locked,proto3" json:"locked,omitempty"`
	PullRequest    bool                          `protobuf:"varint,28,opt,name=pull_request,json=pullRequest,proto3" json:"pull_request,omitempty"` // true is the issue is a Pull Request
	ClosedAt       *timestamppb.Timestamp        `protobuf:"bytes,21,opt,name=closed_at,json=closedAt,proto3" json:"closed_at,omitempty"`
	ClosedBy       *GithubUser                   `protobuf:"bytes,22,opt,name=closed_by,json=closedBy,proto3" json:"closed_by,omitempty"`
	RemoveLabel    []int64                       `protobuf:"varint,23,rep,packed,name=remove_label,json=removeLabel,proto3" json:"remove_label,omitempty"` // label IDs to remove
	AddLabel       []*GithubLabel                `protobuf:"bytes,24,rep,name=add_label,json=addLabel,proto3" json:"add_label,omitempty"`
	Comment        []*GithubIssueCommentMutation `protobuf:"bytes,8,rep,name=comment,proto3" json:"comment,omitempty"`
	CommentStatus  *GithubIssueSyncStatus        `protobuf:"bytes,14,opt,name=comment_status,json=commentStatus,proto3" json:"comment_status,omitempty"`
	Event          []*GithubIssueEvent           `protobuf:"bytes,26,rep,name=event,proto3" json:"event,omitempty"` // new events to add
	EventStatus    *GithubIssueSyncStatus        `protobuf:"bytes,27,opt,name=event_status,json=eventStatus,proto3" json:"event_status,omitempty"`
	Review         []*GithubReview               `protobuf:"bytes,29,rep,name=review,proto3" json:"review,omitempty"` // new reviews to add
	ReviewStatus   *GithubIssueSyncStatus        `protobuf:"bytes,30,opt,name=review_status,json=reviewStatus,proto3" json:"review_status,omitempty"`
}

func (x *GithubIssueMutation) Reset() {
	*x = GithubIssueMutation{}
	if protoimpl.UnsafeEnabled {
		mi := &file_maintner_maintpb_maintner_proto_msgTypes[2]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *GithubIssueMutation) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*GithubIssueMutation) ProtoMessage() {}

func (x *GithubIssueMutation) ProtoReflect() protoreflect.Message {
	mi := &file_maintner_maintpb_maintner_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 GithubIssueMutation.ProtoReflect.Descriptor instead.
func (*GithubIssueMutation) Descriptor() ([]byte, []int) {
	return file_maintner_maintpb_maintner_proto_rawDescGZIP(), []int{2}
}

func (x *GithubIssueMutation) GetOwner() string {
	if x != nil {
		return x.Owner
	}
	return ""
}

func (x *GithubIssueMutation) GetRepo() string {
	if x != nil {
		return x.Repo
	}
	return ""
}

func (x *GithubIssueMutation) GetNumber() int32 {
	if x != nil {
		return x.Number
	}
	return 0
}

func (x *GithubIssueMutation) GetNotExist() bool {
	if x != nil {
		return x.NotExist
	}
	return false
}

func (x *GithubIssueMutation) GetId() int64 {
	if x != nil {
		return x.Id
	}
	return 0
}

func (x *GithubIssueMutation) GetUser() *GithubUser {
	if x != nil {
		return x.User
	}
	return nil
}

func (x *GithubIssueMutation) GetAssignees() []*GithubUser {
	if x != nil {
		return x.Assignees
	}
	return nil
}

func (x *GithubIssueMutation) GetDeletedAssignees() []int64 {
	if x != nil {
		return x.DeletedAssignees
	}
	return nil
}

func (x *GithubIssueMutation) GetCreated() *timestamppb.Timestamp {
	if x != nil {
		return x.Created
	}
	return nil
}

func (x *GithubIssueMutation) GetUpdated() *timestamppb.Timestamp {
	if x != nil {
		return x.Updated
	}
	return nil
}

func (x *GithubIssueMutation) GetTitle() string {
	if x != nil {
		return x.Title
	}
	return ""
}

func (x *GithubIssueMutation) GetBodyChange() *StringChange {
	if x != nil {
		return x.BodyChange
	}
	return nil
}

func (x *GithubIssueMutation) GetBody() string {
	if x != nil {
		return x.Body
	}
	return ""
}

func (x *GithubIssueMutation) GetNoMilestone() bool {
	if x != nil {
		return x.NoMilestone
	}
	return false
}

func (x *GithubIssueMutation) GetMilestoneId() int64 {
	if x != nil {
		return x.MilestoneId
	}
	return 0
}

func (x *GithubIssueMutation) GetMilestoneNum() int64 {
	if x != nil {
		return x.MilestoneNum
	}
	return 0
}

func (x *GithubIssueMutation) GetMilestoneTitle() string {
	if x != nil {
		return x.MilestoneTitle
	}
	return ""
}

func (x *GithubIssueMutation) GetClosed() *BoolChange {
	if x != nil {
		return x.Closed
	}
	return nil
}

func (x *GithubIssueMutation) GetLocked() *BoolChange {
	if x != nil {
		return x.Locked
	}
	return nil
}

func (x *GithubIssueMutation) GetPullRequest() bool {
	if x != nil {
		return x.PullRequest
	}
	return false
}

func (x *GithubIssueMutation) GetClosedAt() *timestamppb.Timestamp {
	if x != nil {
		return x.ClosedAt
	}
	return nil
}

func (x *GithubIssueMutation) GetClosedBy() *GithubUser {
	if x != nil {
		return x.ClosedBy
	}
	return nil
}

func (x *GithubIssueMutation) GetRemoveLabel() []int64 {
	if x != nil {
		return x.RemoveLabel
	}
	return nil
}

func (x *GithubIssueMutation) GetAddLabel() []*GithubLabel {
	if x != nil {
		return x.AddLabel
	}
	return nil
}

func (x *GithubIssueMutation) GetComment() []*GithubIssueCommentMutation {
	if x != nil {
		return x.Comment
	}
	return nil
}

func (x *GithubIssueMutation) GetCommentStatus() *GithubIssueSyncStatus {
	if x != nil {
		return x.CommentStatus
	}
	return nil
}

func (x *GithubIssueMutation) GetEvent() []*GithubIssueEvent {
	if x != nil {
		return x.Event
	}
	return nil
}

func (x *GithubIssueMutation) GetEventStatus() *GithubIssueSyncStatus {
	if x != nil {
		return x.EventStatus
	}
	return nil
}

func (x *GithubIssueMutation) GetReview() []*GithubReview {
	if x != nil {
		return x.Review
	}
	return nil
}

func (x *GithubIssueMutation) GetReviewStatus() *GithubIssueSyncStatus {
	if x != nil {
		return x.ReviewStatus
	}
	return nil
}

// BoolChange represents a change to a boolean value.
// (Notably, the wrapper type permits representing a change to false.)
type BoolChange struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Val bool `protobuf:"varint,1,opt,name=val,proto3" json:"val,omitempty"`
}

func (x *BoolChange) Reset() {
	*x = BoolChange{}
	if protoimpl.UnsafeEnabled {
		mi := &file_maintner_maintpb_maintner_proto_msgTypes[3]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *BoolChange) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*BoolChange) ProtoMessage() {}

func (x *BoolChange) ProtoReflect() protoreflect.Message {
	mi := &file_maintner_maintpb_maintner_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 BoolChange.ProtoReflect.Descriptor instead.
func (*BoolChange) Descriptor() ([]byte, []int) {
	return file_maintner_maintpb_maintner_proto_rawDescGZIP(), []int{3}
}

func (x *BoolChange) GetVal() bool {
	if x != nil {
		return x.Val
	}
	return false
}

// StringChange represents a change to a boolean value.
// (Notably, the wrapper type permits representing a change to the empty string.)
type StringChange struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Val string `protobuf:"bytes,1,opt,name=val,proto3" json:"val,omitempty"`
}

func (x *StringChange) Reset() {
	*x = StringChange{}
	if protoimpl.UnsafeEnabled {
		mi := &file_maintner_maintpb_maintner_proto_msgTypes[4]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *StringChange) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*StringChange) ProtoMessage() {}

func (x *StringChange) ProtoReflect() protoreflect.Message {
	mi := &file_maintner_maintpb_maintner_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 StringChange.ProtoReflect.Descriptor instead.
func (*StringChange) Descriptor() ([]byte, []int) {
	return file_maintner_maintpb_maintner_proto_rawDescGZIP(), []int{4}
}

func (x *StringChange) GetVal() string {
	if x != nil {
		return x.Val
	}
	return ""
}

type GithubLabel struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Id   int64  `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"`
	Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"`
}

func (x *GithubLabel) Reset() {
	*x = GithubLabel{}
	if protoimpl.UnsafeEnabled {
		mi := &file_maintner_maintpb_maintner_proto_msgTypes[5]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *GithubLabel) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*GithubLabel) ProtoMessage() {}

func (x *GithubLabel) ProtoReflect() protoreflect.Message {
	mi := &file_maintner_maintpb_maintner_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 GithubLabel.ProtoReflect.Descriptor instead.
func (*GithubLabel) Descriptor() ([]byte, []int) {
	return file_maintner_maintpb_maintner_proto_rawDescGZIP(), []int{5}
}

func (x *GithubLabel) GetId() int64 {
	if x != nil {
		return x.Id
	}
	return 0
}

func (x *GithubLabel) GetName() string {
	if x != nil {
		return x.Name
	}
	return ""
}

type GithubMilestone struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Id int64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` // required
	// Following only need to be non-zero on changes:
	Title  string      `protobuf:"bytes,2,opt,name=title,proto3" json:"title,omitempty"`
	Closed *BoolChange `protobuf:"bytes,3,opt,name=closed,proto3" json:"closed,omitempty"`
	Number int64       `protobuf:"varint,4,opt,name=number,proto3" json:"number,omitempty"`
}

func (x *GithubMilestone) Reset() {
	*x = GithubMilestone{}
	if protoimpl.UnsafeEnabled {
		mi := &file_maintner_maintpb_maintner_proto_msgTypes[6]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *GithubMilestone) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*GithubMilestone) ProtoMessage() {}

func (x *GithubMilestone) ProtoReflect() protoreflect.Message {
	mi := &file_maintner_maintpb_maintner_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 GithubMilestone.ProtoReflect.Descriptor instead.
func (*GithubMilestone) Descriptor() ([]byte, []int) {
	return file_maintner_maintpb_maintner_proto_rawDescGZIP(), []int{6}
}

func (x *GithubMilestone) GetId() int64 {
	if x != nil {
		return x.Id
	}
	return 0
}

func (x *GithubMilestone) GetTitle() string {
	if x != nil {
		return x.Title
	}
	return ""
}

func (x *GithubMilestone) GetClosed() *BoolChange {
	if x != nil {
		return x.Closed
	}
	return nil
}

func (x *GithubMilestone) GetNumber() int64 {
	if x != nil {
		return x.Number
	}
	return 0
}

// See https://developer.github.com/v3/activity/events/types/#issuesevent
// for some info.
type GithubIssueEvent struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Required:
	Id int64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"`
	// event_type can be one of "assigned", "unassigned", "labeled",
	// "unlabeled", "opened", "edited", "milestoned", "demilestoned",
	// "closed", "reopened", "referenced", "renamed" or anything else
	// that Github adds in the future.
	EventType string                 `protobuf:"bytes,2,opt,name=event_type,json=eventType,proto3" json:"event_type,omitempty"`
	ActorId   int64                  `protobuf:"varint,3,opt,name=actor_id,json=actorId,proto3" json:"actor_id,omitempty"`
	Created   *timestamppb.Timestamp `protobuf:"bytes,4,opt,name=created,proto3" json:"created,omitempty"` // time of the event
	// label is populated for "labeled" and "unlabeled" events.
	// The label will usually not have an ID, due to Github's API
	// not returning one.
	Label *GithubLabel `protobuf:"bytes,5,opt,name=label,proto3" json:"label,omitempty"`
	// milestone is populated for "milestoned" and "demilestoned" events.
	// The label will usually not have an ID, due to Github's API
	// not returning one.
	Milestone *GithubMilestone `protobuf:"bytes,6,opt,name=milestone,proto3" json:"milestone,omitempty"`
	// For "assigned", "unassigned":
	AssigneeId int64 `protobuf:"varint,7,opt,name=assignee_id,json=assigneeId,proto3" json:"assignee_id,omitempty"` // always same as actor_id it seems? Github API doesn't say.
	AssignerId int64 `protobuf:"varint,8,opt,name=assigner_id,json=assignerId,proto3" json:"assigner_id,omitempty"`
	// For "referenced", "closed":
	Commit *GithubCommit `protobuf:"bytes,9,opt,name=commit,proto3" json:"commit,omitempty"`
	// For "renamed" events:
	RenameFrom        string      `protobuf:"bytes,11,opt,name=rename_from,json=renameFrom,proto3" json:"rename_from,omitempty"`
	RenameTo          string      `protobuf:"bytes,12,opt,name=rename_to,json=renameTo,proto3" json:"rename_to,omitempty"`
	ReviewerId        int64       `protobuf:"varint,13,opt,name=reviewer_id,json=reviewerId,proto3" json:"reviewer_id,omitempty"`
	ReviewRequesterId int64       `protobuf:"varint,14,opt,name=review_requester_id,json=reviewRequesterId,proto3" json:"review_requester_id,omitempty"`
	TeamReviewer      *GithubTeam `protobuf:"bytes,16,opt,name=team_reviewer,json=teamReviewer,proto3" json:"team_reviewer,omitempty"`
	// Contents of a dismissed review event, see dismissed_review in
	// https://developer.github.com/v3/issues/events/ for more info
	DismissedReview *GithubDismissedReviewEvent `protobuf:"bytes,15,opt,name=dismissed_review,json=dismissedReview,proto3" json:"dismissed_review,omitempty"`
	// other_json is usually empty. If Github adds event types or fields
	// in the future, this captures those added fields. If non-empty it
	// will be a JSON object with the fields that weren't understood.
	OtherJson []byte `protobuf:"bytes,10,opt,name=other_json,json=otherJson,proto3" json:"other_json,omitempty"`
}

func (x *GithubIssueEvent) Reset() {
	*x = GithubIssueEvent{}
	if protoimpl.UnsafeEnabled {
		mi := &file_maintner_maintpb_maintner_proto_msgTypes[7]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *GithubIssueEvent) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*GithubIssueEvent) ProtoMessage() {}

func (x *GithubIssueEvent) ProtoReflect() protoreflect.Message {
	mi := &file_maintner_maintpb_maintner_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 GithubIssueEvent.ProtoReflect.Descriptor instead.
func (*GithubIssueEvent) Descriptor() ([]byte, []int) {
	return file_maintner_maintpb_maintner_proto_rawDescGZIP(), []int{7}
}

func (x *GithubIssueEvent) GetId() int64 {
	if x != nil {
		return x.Id
	}
	return 0
}

func (x *GithubIssueEvent) GetEventType() string {
	if x != nil {
		return x.EventType
	}
	return ""
}

func (x *GithubIssueEvent) GetActorId() int64 {
	if x != nil {
		return x.ActorId
	}
	return 0
}

func (x *GithubIssueEvent) GetCreated() *timestamppb.Timestamp {
	if x != nil {
		return x.Created
	}
	return nil
}

func (x *GithubIssueEvent) GetLabel() *GithubLabel {
	if x != nil {
		return x.Label
	}
	return nil
}

func (x *GithubIssueEvent) GetMilestone() *GithubMilestone {
	if x != nil {
		return x.Milestone
	}
	return nil
}

func (x *GithubIssueEvent) GetAssigneeId() int64 {
	if x != nil {
		return x.AssigneeId
	}
	return 0
}

func (x *GithubIssueEvent) GetAssignerId() int64 {
	if x != nil {
		return x.AssignerId
	}
	return 0
}

func (x *GithubIssueEvent) GetCommit() *GithubCommit {
	if x != nil {
		return x.Commit
	}
	return nil
}

func (x *GithubIssueEvent) GetRenameFrom() string {
	if x != nil {
		return x.RenameFrom
	}
	return ""
}

func (x *GithubIssueEvent) GetRenameTo() string {
	if x != nil {
		return x.RenameTo
	}
	return ""
}

func (x *GithubIssueEvent) GetReviewerId() int64 {
	if x != nil {
		return x.ReviewerId
	}
	return 0
}

func (x *GithubIssueEvent) GetReviewRequesterId() int64 {
	if x != nil {
		return x.ReviewRequesterId
	}
	return 0
}

func (x *GithubIssueEvent) GetTeamReviewer() *GithubTeam {
	if x != nil {
		return x.TeamReviewer
	}
	return nil
}

func (x *GithubIssueEvent) GetDismissedReview() *GithubDismissedReviewEvent {
	if x != nil {
		return x.DismissedReview
	}
	return nil
}

func (x *GithubIssueEvent) GetOtherJson() []byte {
	if x != nil {
		return x.OtherJson
	}
	return nil
}

// Contents of a dismissed review event - when someone leaves a
// review requesting changes and someone else dismisses it. See
// https://developer.github.com/v3/issues/events for more information.
type GithubDismissedReviewEvent struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	ReviewId         int64  `protobuf:"varint,1,opt,name=review_id,json=reviewId,proto3" json:"review_id,omitempty"` // ID of the review being dismissed
	DismissalMessage string `protobuf:"bytes,3,opt,name=dismissal_message,json=dismissalMessage,proto3" json:"dismissal_message,omitempty"`
	State            string `protobuf:"bytes,4,opt,name=state,proto3" json:"state,omitempty"` // commented, approved, changes_requested
}

func (x *GithubDismissedReviewEvent) Reset() {
	*x = GithubDismissedReviewEvent{}
	if protoimpl.UnsafeEnabled {
		mi := &file_maintner_maintpb_maintner_proto_msgTypes[8]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *GithubDismissedReviewEvent) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*GithubDismissedReviewEvent) ProtoMessage() {}

func (x *GithubDismissedReviewEvent) ProtoReflect() protoreflect.Message {
	mi := &file_maintner_maintpb_maintner_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 GithubDismissedReviewEvent.ProtoReflect.Descriptor instead.
func (*GithubDismissedReviewEvent) Descriptor() ([]byte, []int) {
	return file_maintner_maintpb_maintner_proto_rawDescGZIP(), []int{8}
}

func (x *GithubDismissedReviewEvent) GetReviewId() int64 {
	if x != nil {
		return x.ReviewId
	}
	return 0
}

func (x *GithubDismissedReviewEvent) GetDismissalMessage() string {
	if x != nil {
		return x.DismissalMessage
	}
	return ""
}

func (x *GithubDismissedReviewEvent) GetState() string {
	if x != nil {
		return x.State
	}
	return ""
}

type GithubCommit struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Owner    string `protobuf:"bytes,1,opt,name=owner,proto3" json:"owner,omitempty"`                       // "golang"
	Repo     string `protobuf:"bytes,2,opt,name=repo,proto3" json:"repo,omitempty"`                         // "go"
	CommitId string `protobuf:"bytes,3,opt,name=commit_id,json=commitId,proto3" json:"commit_id,omitempty"` // "0beec7b5ea3f0fdbc95d0dd47f3c5bc275da8a33"
}

func (x *GithubCommit) Reset() {
	*x = GithubCommit{}
	if protoimpl.UnsafeEnabled {
		mi := &file_maintner_maintpb_maintner_proto_msgTypes[9]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *GithubCommit) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*GithubCommit) ProtoMessage() {}

func (x *GithubCommit) ProtoReflect() protoreflect.Message {
	mi := &file_maintner_maintpb_maintner_proto_msgTypes[9]
	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 GithubCommit.ProtoReflect.Descriptor instead.
func (*GithubCommit) Descriptor() ([]byte, []int) {
	return file_maintner_maintpb_maintner_proto_rawDescGZIP(), []int{9}
}

func (x *GithubCommit) GetOwner() string {
	if x != nil {
		return x.Owner
	}
	return ""
}

func (x *GithubCommit) GetRepo() string {
	if x != nil {
		return x.Repo
	}
	return ""
}

func (x *GithubCommit) GetCommitId() string {
	if x != nil {
		return x.CommitId
	}
	return ""
}

// Contents of a pull request review - when someone
// comments, requests changes, or approves changes
// on a pull request. See
// https://developer.github.com/v3/pulls/reviews/ for more information.
type GithubReview struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Required:
	Id               int64                  `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"`
	ActorId          int64                  `protobuf:"varint,2,opt,name=actor_id,json=actorId,proto3" json:"actor_id,omitempty"`
	Created          *timestamppb.Timestamp `protobuf:"bytes,3,opt,name=created,proto3" json:"created,omitempty"` // time of the event
	Body             string                 `protobuf:"bytes,4,opt,name=body,proto3" json:"body,omitempty"`       // body of the review comment
	State            string                 `protobuf:"bytes,5,opt,name=state,proto3" json:"state,omitempty"`     // COMMENTED, APPROVED, CHANGES_REQUESTED
	CommitId         string                 `protobuf:"bytes,6,opt,name=commit_id,json=commitId,proto3" json:"commit_id,omitempty"`
	ActorAssociation string                 `protobuf:"bytes,7,opt,name=actor_association,json=actorAssociation,proto3" json:"actor_association,omitempty"`
	// other_json is usually empty.
	OtherJson []byte `protobuf:"bytes,8,opt,name=other_json,json=otherJson,proto3" json:"other_json,omitempty"`
}

func (x *GithubReview) Reset() {
	*x = GithubReview{}
	if protoimpl.UnsafeEnabled {
		mi := &file_maintner_maintpb_maintner_proto_msgTypes[10]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *GithubReview) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*GithubReview) ProtoMessage() {}

func (x *GithubReview) ProtoReflect() protoreflect.Message {
	mi := &file_maintner_maintpb_maintner_proto_msgTypes[10]
	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 GithubReview.ProtoReflect.Descriptor instead.
func (*GithubReview) Descriptor() ([]byte, []int) {
	return file_maintner_maintpb_maintner_proto_rawDescGZIP(), []int{10}
}

func (x *GithubReview) GetId() int64 {
	if x != nil {
		return x.Id
	}
	return 0
}

func (x *GithubReview) GetActorId() int64 {
	if x != nil {
		return x.ActorId
	}
	return 0
}

func (x *GithubReview) GetCreated() *timestamppb.Timestamp {
	if x != nil {
		return x.Created
	}
	return nil
}

func (x *GithubReview) GetBody() string {
	if x != nil {
		return x.Body
	}
	return ""
}

func (x *GithubReview) GetState() string {
	if x != nil {
		return x.State
	}
	return ""
}

func (x *GithubReview) GetCommitId() string {
	if x != nil {
		return x.CommitId
	}
	return ""
}

func (x *GithubReview) GetActorAssociation() string {
	if x != nil {
		return x.ActorAssociation
	}
	return ""
}

func (x *GithubReview) GetOtherJson() []byte {
	if x != nil {
		return x.OtherJson
	}
	return nil
}

// GithubIssueSyncStatus notes where syncing is at for comments
// on an issue,
// This mutation type is only made at/after the same top-level mutation
// which created the corresponding comments.
type GithubIssueSyncStatus struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// server_date is the "Date" response header from Github for the
	// final HTTP response.
	ServerDate *timestamppb.Timestamp `protobuf:"bytes,1,opt,name=server_date,json=serverDate,proto3" json:"server_date,omitempty"`
}

func (x *GithubIssueSyncStatus) Reset() {
	*x = GithubIssueSyncStatus{}
	if protoimpl.UnsafeEnabled {
		mi := &file_maintner_maintpb_maintner_proto_msgTypes[11]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *GithubIssueSyncStatus) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*GithubIssueSyncStatus) ProtoMessage() {}

func (x *GithubIssueSyncStatus) ProtoReflect() protoreflect.Message {
	mi := &file_maintner_maintpb_maintner_proto_msgTypes[11]
	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 GithubIssueSyncStatus.ProtoReflect.Descriptor instead.
func (*GithubIssueSyncStatus) Descriptor() ([]byte, []int) {
	return file_maintner_maintpb_maintner_proto_rawDescGZIP(), []int{11}
}

func (x *GithubIssueSyncStatus) GetServerDate() *timestamppb.Timestamp {
	if x != nil {
		return x.ServerDate
	}
	return nil
}

type GithubIssueCommentMutation struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Id      int64                  `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"`
	User    *GithubUser            `protobuf:"bytes,2,opt,name=user,proto3" json:"user,omitempty"`       // not present in edits later
	Body    string                 `protobuf:"bytes,3,opt,name=body,proto3" json:"body,omitempty"`       // may not be present in edits later (if only reactions changed? TODO: investigate)
	Created *timestamppb.Timestamp `protobuf:"bytes,4,opt,name=created,proto3" json:"created,omitempty"` // not present in edits later
	Updated *timestamppb.Timestamp `protobuf:"bytes,5,opt,name=updated,proto3" json:"updated,omitempty"`
}

func (x *GithubIssueCommentMutation) Reset() {
	*x = GithubIssueCommentMutation{}
	if protoimpl.UnsafeEnabled {
		mi := &file_maintner_maintpb_maintner_proto_msgTypes[12]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *GithubIssueCommentMutation) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*GithubIssueCommentMutation) ProtoMessage() {}

func (x *GithubIssueCommentMutation) ProtoReflect() protoreflect.Message {
	mi := &file_maintner_maintpb_maintner_proto_msgTypes[12]
	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 GithubIssueCommentMutation.ProtoReflect.Descriptor instead.
func (*GithubIssueCommentMutation) Descriptor() ([]byte, []int) {
	return file_maintner_maintpb_maintner_proto_rawDescGZIP(), []int{12}
}

func (x *GithubIssueCommentMutation) GetId() int64 {
	if x != nil {
		return x.Id
	}
	return 0
}

func (x *GithubIssueCommentMutation) GetUser() *GithubUser {
	if x != nil {
		return x.User
	}
	return nil
}

func (x *GithubIssueCommentMutation) GetBody() string {
	if x != nil {
		return x.Body
	}
	return ""
}

func (x *GithubIssueCommentMutation) GetCreated() *timestamppb.Timestamp {
	if x != nil {
		return x.Created
	}
	return nil
}

func (x *GithubIssueCommentMutation) GetUpdated() *timestamppb.Timestamp {
	if x != nil {
		return x.Updated
	}
	return nil
}

type GithubUser struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Id    int64  `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"`
	Login string `protobuf:"bytes,2,opt,name=login,proto3" json:"login,omitempty"`
}

func (x *GithubUser) Reset() {
	*x = GithubUser{}
	if protoimpl.UnsafeEnabled {
		mi := &file_maintner_maintpb_maintner_proto_msgTypes[13]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *GithubUser) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*GithubUser) ProtoMessage() {}

func (x *GithubUser) ProtoReflect() protoreflect.Message {
	mi := &file_maintner_maintpb_maintner_proto_msgTypes[13]
	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 GithubUser.ProtoReflect.Descriptor instead.
func (*GithubUser) Descriptor() ([]byte, []int) {
	return file_maintner_maintpb_maintner_proto_rawDescGZIP(), []int{13}
}

func (x *GithubUser) GetId() int64 {
	if x != nil {
		return x.Id
	}
	return 0
}

func (x *GithubUser) GetLogin() string {
	if x != nil {
		return x.Login
	}
	return ""
}

type GithubTeam struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Id   int64  `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"`
	Slug string `protobuf:"bytes,2,opt,name=slug,proto3" json:"slug,omitempty"`
}

func (x *GithubTeam) Reset() {
	*x = GithubTeam{}
	if protoimpl.UnsafeEnabled {
		mi := &file_maintner_maintpb_maintner_proto_msgTypes[14]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *GithubTeam) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*GithubTeam) ProtoMessage() {}

func (x *GithubTeam) ProtoReflect() protoreflect.Message {
	mi := &file_maintner_maintpb_maintner_proto_msgTypes[14]
	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 GithubTeam.ProtoReflect.Descriptor instead.
func (*GithubTeam) Descriptor() ([]byte, []int) {
	return file_maintner_maintpb_maintner_proto_rawDescGZIP(), []int{14}
}

func (x *GithubTeam) GetId() int64 {
	if x != nil {
		return x.Id
	}
	return 0
}

func (x *GithubTeam) GetSlug() string {
	if x != nil {
		return x.Slug
	}
	return ""
}

type GitMutation struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Repo *GitRepo `protobuf:"bytes,1,opt,name=repo,proto3" json:"repo,omitempty"`
	// commit adds a commit, or adds new information to a commit if fields
	// are added in the future.
	Commit *GitCommit `protobuf:"bytes,2,opt,name=commit,proto3" json:"commit,omitempty"`
}

func (x *GitMutation) Reset() {
	*x = GitMutation{}
	if protoimpl.UnsafeEnabled {
		mi := &file_maintner_maintpb_maintner_proto_msgTypes[15]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *GitMutation) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*GitMutation) ProtoMessage() {}

func (x *GitMutation) ProtoReflect() protoreflect.Message {
	mi := &file_maintner_maintpb_maintner_proto_msgTypes[15]
	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 GitMutation.ProtoReflect.Descriptor instead.
func (*GitMutation) Descriptor() ([]byte, []int) {
	return file_maintner_maintpb_maintner_proto_rawDescGZIP(), []int{15}
}

func (x *GitMutation) GetRepo() *GitRepo {
	if x != nil {
		return x.Repo
	}
	return nil
}

func (x *GitMutation) GetCommit() *GitCommit {
	if x != nil {
		return x.Commit
	}
	return nil
}

// GitRepo identifies a git repo being mutated.
type GitRepo struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// If go_repo is set, it identifies a go.googlesource.com/<go_repo> repo.
	GoRepo string `protobuf:"bytes,1,opt,name=go_repo,json=goRepo,proto3" json:"go_repo,omitempty"`
}

func (x *GitRepo) Reset() {
	*x = GitRepo{}
	if protoimpl.UnsafeEnabled {
		mi := &file_maintner_maintpb_maintner_proto_msgTypes[16]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *GitRepo) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*GitRepo) ProtoMessage() {}

func (x *GitRepo) ProtoReflect() protoreflect.Message {
	mi := &file_maintner_maintpb_maintner_proto_msgTypes[16]
	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 GitRepo.ProtoReflect.Descriptor instead.
func (*GitRepo) Descriptor() ([]byte, []int) {
	return file_maintner_maintpb_maintner_proto_rawDescGZIP(), []int{16}
}

func (x *GitRepo) GetGoRepo() string {
	if x != nil {
		return x.GoRepo
	}
	return ""
}

type GitCommit struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Sha1 string `protobuf:"bytes,1,opt,name=sha1,proto3" json:"sha1,omitempty"` // the full lowercase 40-hex-byte sha1 sum
	// raw is the "git cat-file commit $sha1" output.
	Raw      []byte       `protobuf:"bytes,2,opt,name=raw,proto3" json:"raw,omitempty"`
	DiffTree *GitDiffTree `protobuf:"bytes,3,opt,name=diff_tree,json=diffTree,proto3" json:"diff_tree,omitempty"`
}

func (x *GitCommit) Reset() {
	*x = GitCommit{}
	if protoimpl.UnsafeEnabled {
		mi := &file_maintner_maintpb_maintner_proto_msgTypes[17]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *GitCommit) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*GitCommit) ProtoMessage() {}

func (x *GitCommit) ProtoReflect() protoreflect.Message {
	mi := &file_maintner_maintpb_maintner_proto_msgTypes[17]
	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 GitCommit.ProtoReflect.Descriptor instead.
func (*GitCommit) Descriptor() ([]byte, []int) {
	return file_maintner_maintpb_maintner_proto_rawDescGZIP(), []int{17}
}

func (x *GitCommit) GetSha1() string {
	if x != nil {
		return x.Sha1
	}
	return ""
}

func (x *GitCommit) GetRaw() []byte {
	if x != nil {
		return x.Raw
	}
	return nil
}

func (x *GitCommit) GetDiffTree() *GitDiffTree {
	if x != nil {
		return x.DiffTree
	}
	return nil
}

// git diff-tree --numstat oldtree newtree
type GitDiffTree struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	File []*GitDiffTreeFile `protobuf:"bytes,1,rep,name=file,proto3" json:"file,omitempty"`
}

func (x *GitDiffTree) Reset() {
	*x = GitDiffTree{}
	if protoimpl.UnsafeEnabled {
		mi := &file_maintner_maintpb_maintner_proto_msgTypes[18]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *GitDiffTree) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*GitDiffTree) ProtoMessage() {}

func (x *GitDiffTree) ProtoReflect() protoreflect.Message {
	mi := &file_maintner_maintpb_maintner_proto_msgTypes[18]
	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 GitDiffTree.ProtoReflect.Descriptor instead.
func (*GitDiffTree) Descriptor() ([]byte, []int) {
	return file_maintner_maintpb_maintner_proto_rawDescGZIP(), []int{18}
}

func (x *GitDiffTree) GetFile() []*GitDiffTreeFile {
	if x != nil {
		return x.File
	}
	return nil
}

// GitDiffTreeFile represents one line of `git diff-tree --numstat` output.
type GitDiffTreeFile struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	File    string `protobuf:"bytes,1,opt,name=file,proto3" json:"file,omitempty"`
	Added   int64  `protobuf:"varint,2,opt,name=added,proto3" json:"added,omitempty"`
	Deleted int64  `protobuf:"varint,3,opt,name=deleted,proto3" json:"deleted,omitempty"`
	Binary  bool   `protobuf:"varint,4,opt,name=binary,proto3" json:"binary,omitempty"`
}

func (x *GitDiffTreeFile) Reset() {
	*x = GitDiffTreeFile{}
	if protoimpl.UnsafeEnabled {
		mi := &file_maintner_maintpb_maintner_proto_msgTypes[19]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *GitDiffTreeFile) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*GitDiffTreeFile) ProtoMessage() {}

func (x *GitDiffTreeFile) ProtoReflect() protoreflect.Message {
	mi := &file_maintner_maintpb_maintner_proto_msgTypes[19]
	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 GitDiffTreeFile.ProtoReflect.Descriptor instead.
func (*GitDiffTreeFile) Descriptor() ([]byte, []int) {
	return file_maintner_maintpb_maintner_proto_rawDescGZIP(), []int{19}
}

func (x *GitDiffTreeFile) GetFile() string {
	if x != nil {
		return x.File
	}
	return ""
}

func (x *GitDiffTreeFile) GetAdded() int64 {
	if x != nil {
		return x.Added
	}
	return 0
}

func (x *GitDiffTreeFile) GetDeleted() int64 {
	if x != nil {
		return x.Deleted
	}
	return 0
}

func (x *GitDiffTreeFile) GetBinary() bool {
	if x != nil {
		return x.Binary
	}
	return false
}

type GerritMutation struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Project is the Gerrit server and project, without scheme (https implied) or
	// trailing slash.
	Project string `protobuf:"bytes,1,opt,name=project,proto3" json:"project,omitempty"` // "go.googlesource.com/go", "go.googlesource.com/net", etc
	// Commits to add.
	Commits []*GitCommit `protobuf:"bytes,2,rep,name=commits,proto3" json:"commits,omitempty"`
	// git refs to update.
	Refs []*GitRef `protobuf:"bytes,3,rep,name=refs,proto3" json:"refs,omitempty"`
	// deleted_refs are ref names to delete.
	DeletedRefs []string `protobuf:"bytes,4,rep,name=deleted_refs,json=deletedRefs,proto3" json:"deleted_refs,omitempty"`
}

func (x *GerritMutation) Reset() {
	*x = GerritMutation{}
	if protoimpl.UnsafeEnabled {
		mi := &file_maintner_maintpb_maintner_proto_msgTypes[20]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *GerritMutation) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*GerritMutation) ProtoMessage() {}

func (x *GerritMutation) ProtoReflect() protoreflect.Message {
	mi := &file_maintner_maintpb_maintner_proto_msgTypes[20]
	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 GerritMutation.ProtoReflect.Descriptor instead.
func (*GerritMutation) Descriptor() ([]byte, []int) {
	return file_maintner_maintpb_maintner_proto_rawDescGZIP(), []int{20}
}

func (x *GerritMutation) GetProject() string {
	if x != nil {
		return x.Project
	}
	return ""
}

func (x *GerritMutation) GetCommits() []*GitCommit {
	if x != nil {
		return x.Commits
	}
	return nil
}

func (x *GerritMutation) GetRefs() []*GitRef {
	if x != nil {
		return x.Refs
	}
	return nil
}

func (x *GerritMutation) GetDeletedRefs() []string {
	if x != nil {
		return x.DeletedRefs
	}
	return nil
}

type GitRef struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// ref is the git ref name, such as:
	//
	//	HEAD
	//	refs/heads/master
	//	refs/changes/00/14700/1
	//	refs/changes/00/14700/meta
	//	refs/meta/config
	Ref string `protobuf:"bytes,1,opt,name=ref,proto3" json:"ref,omitempty"`
	// sha1 is the lowercase hex sha1
	Sha1 string `protobuf:"bytes,2,opt,name=sha1,proto3" json:"sha1,omitempty"`
}

func (x *GitRef) Reset() {
	*x = GitRef{}
	if protoimpl.UnsafeEnabled {
		mi := &file_maintner_maintpb_maintner_proto_msgTypes[21]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *GitRef) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*GitRef) ProtoMessage() {}

func (x *GitRef) ProtoReflect() protoreflect.Message {
	mi := &file_maintner_maintpb_maintner_proto_msgTypes[21]
	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 GitRef.ProtoReflect.Descriptor instead.
func (*GitRef) Descriptor() ([]byte, []int) {
	return file_maintner_maintpb_maintner_proto_rawDescGZIP(), []int{21}
}

func (x *GitRef) GetRef() string {
	if x != nil {
		return x.Ref
	}
	return ""
}

func (x *GitRef) GetSha1() string {
	if x != nil {
		return x.Sha1
	}
	return ""
}

var File_maintner_maintpb_maintner_proto protoreflect.FileDescriptor

var file_maintner_maintpb_maintner_proto_rawDesc = []byte{
	0x0a, 0x1f, 0x6d, 0x61, 0x69, 0x6e, 0x74, 0x6e, 0x65, 0x72, 0x2f, 0x6d, 0x61, 0x69, 0x6e, 0x74,
	0x70, 0x62, 0x2f, 0x6d, 0x61, 0x69, 0x6e, 0x74, 0x6e, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74,
	0x6f, 0x12, 0x07, 0x6d, 0x61, 0x69, 0x6e, 0x74, 0x70, 0x62, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67,
	0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65,
	0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xd5, 0x01, 0x0a, 0x08,
	0x4d, 0x75, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3f, 0x0a, 0x0c, 0x67, 0x69, 0x74, 0x68,
	0x75, 0x62, 0x5f, 0x69, 0x73, 0x73, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c,
	0x2e, 0x6d, 0x61, 0x69, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x47, 0x69, 0x74, 0x68, 0x75, 0x62, 0x49,
	0x73, 0x73, 0x75, 0x65, 0x4d, 0x75, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x67, 0x69,
	0x74, 0x68, 0x75, 0x62, 0x49, 0x73, 0x73, 0x75, 0x65, 0x12, 0x2f, 0x0a, 0x06, 0x67, 0x69, 0x74,
	0x68, 0x75, 0x62, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x6d, 0x61, 0x69, 0x6e,
	0x74, 0x70, 0x62, 0x2e, 0x47, 0x69, 0x74, 0x68, 0x75, 0x62, 0x4d, 0x75, 0x74, 0x61, 0x74, 0x69,
	0x6f, 0x6e, 0x52, 0x06, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x12, 0x26, 0x0a, 0x03, 0x67, 0x69,
	0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x6d, 0x61, 0x69, 0x6e, 0x74, 0x70,
	0x62, 0x2e, 0x47, 0x69, 0x74, 0x4d, 0x75, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x03, 0x67,
	0x69, 0x74, 0x12, 0x2f, 0x0a, 0x06, 0x67, 0x65, 0x72, 0x72, 0x69, 0x74, 0x18, 0x04, 0x20, 0x01,
	0x28, 0x0b, 0x32, 0x17, 0x2e, 0x6d, 0x61, 0x69, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x72,
	0x72, 0x69, 0x74, 0x4d, 0x75, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x67, 0x65, 0x72,
	0x72, 0x69, 0x74, 0x22, 0xa2, 0x01, 0x0a, 0x0e, 0x47, 0x69, 0x74, 0x68, 0x75, 0x62, 0x4d, 0x75,
	0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18,
	0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04,
	0x72, 0x65, 0x70, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x72, 0x65, 0x70, 0x6f,
	0x12, 0x2c, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b,
	0x32, 0x14, 0x2e, 0x6d, 0x61, 0x69, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x47, 0x69, 0x74, 0x68, 0x75,
	0x62, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x38,
	0x0a, 0x0a, 0x6d, 0x69, 0x6c, 0x65, 0x73, 0x74, 0x6f, 0x6e, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03,
	0x28, 0x0b, 0x32, 0x18, 0x2e, 0x6d, 0x61, 0x69, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x47, 0x69, 0x74,
	0x68, 0x75, 0x62, 0x4d, 0x69, 0x6c, 0x65, 0x73, 0x74, 0x6f, 0x6e, 0x65, 0x52, 0x0a, 0x6d, 0x69,
	0x6c, 0x65, 0x73, 0x74, 0x6f, 0x6e, 0x65, 0x73, 0x22, 0x9b, 0x0a, 0x0a, 0x13, 0x47, 0x69, 0x74,
	0x68, 0x75, 0x62, 0x49, 0x73, 0x73, 0x75, 0x65, 0x4d, 0x75, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e,
	0x12, 0x14, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
	0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x72, 0x65, 0x70, 0x6f, 0x18, 0x02,
	0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x72, 0x65, 0x70, 0x6f, 0x12, 0x16, 0x0a, 0x06, 0x6e, 0x75,
	0x6d, 0x62, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x6e, 0x75, 0x6d, 0x62,
	0x65, 0x72, 0x12, 0x1b, 0x0a, 0x09, 0x6e, 0x6f, 0x74, 0x5f, 0x65, 0x78, 0x69, 0x73, 0x74, 0x18,
	0x0d, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x6e, 0x6f, 0x74, 0x45, 0x78, 0x69, 0x73, 0x74, 0x12,
	0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x69, 0x64, 0x12,
	0x27, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e,
	0x6d, 0x61, 0x69, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x47, 0x69, 0x74, 0x68, 0x75, 0x62, 0x55, 0x73,
	0x65, 0x72, 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x12, 0x31, 0x0a, 0x09, 0x61, 0x73, 0x73, 0x69,
	0x67, 0x6e, 0x65, 0x65, 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6d, 0x61,
	0x69, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x47, 0x69, 0x74, 0x68, 0x75, 0x62, 0x55, 0x73, 0x65, 0x72,
	0x52, 0x09, 0x61, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x65, 0x73, 0x12, 0x2b, 0x0a, 0x11, 0x64,
	0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x65, 0x73,
	0x18, 0x0b, 0x20, 0x03, 0x28, 0x03, 0x52, 0x10, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x41,
	0x73, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x65, 0x73, 0x12, 0x34, 0x0a, 0x07, 0x63, 0x72, 0x65, 0x61,
	0x74, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
	0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65,
	0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x12, 0x34,
	0x0a, 0x07, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32,
	0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,
	0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x07, 0x75, 0x70, 0x64,
	0x61, 0x74, 0x65, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x09, 0x20,
	0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x36, 0x0a, 0x0b, 0x62, 0x6f,
	0x64, 0x79, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x18, 0x1f, 0x20, 0x01, 0x28, 0x0b, 0x32,
	0x15, 0x2e, 0x6d, 0x61, 0x69, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67,
	0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x0a, 0x62, 0x6f, 0x64, 0x79, 0x43, 0x68, 0x61, 0x6e,
	0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09,
	0x52, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x12, 0x21, 0x0a, 0x0c, 0x6e, 0x6f, 0x5f, 0x6d, 0x69, 0x6c,
	0x65, 0x73, 0x74, 0x6f, 0x6e, 0x65, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x6e, 0x6f,
	0x4d, 0x69, 0x6c, 0x65, 0x73, 0x74, 0x6f, 0x6e, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x6d, 0x69, 0x6c,
	0x65, 0x73, 0x74, 0x6f, 0x6e, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x10, 0x20, 0x01, 0x28, 0x03, 0x52,
	0x0b, 0x6d, 0x69, 0x6c, 0x65, 0x73, 0x74, 0x6f, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d,
	0x6d, 0x69, 0x6c, 0x65, 0x73, 0x74, 0x6f, 0x6e, 0x65, 0x5f, 0x6e, 0x75, 0x6d, 0x18, 0x11, 0x20,
	0x01, 0x28, 0x03, 0x52, 0x0c, 0x6d, 0x69, 0x6c, 0x65, 0x73, 0x74, 0x6f, 0x6e, 0x65, 0x4e, 0x75,
	0x6d, 0x12, 0x27, 0x0a, 0x0f, 0x6d, 0x69, 0x6c, 0x65, 0x73, 0x74, 0x6f, 0x6e, 0x65, 0x5f, 0x74,
	0x69, 0x74, 0x6c, 0x65, 0x18, 0x12, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x6d, 0x69, 0x6c, 0x65,
	0x73, 0x74, 0x6f, 0x6e, 0x65, 0x54, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x2b, 0x0a, 0x06, 0x63, 0x6c,
	0x6f, 0x73, 0x65, 0x64, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6d, 0x61, 0x69,
	0x6e, 0x74, 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x52,
	0x06, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x64, 0x12, 0x2b, 0x0a, 0x06, 0x6c, 0x6f, 0x63, 0x6b, 0x65,
	0x64, 0x18, 0x19, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6d, 0x61, 0x69, 0x6e, 0x74, 0x70,
	0x62, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x06, 0x6c, 0x6f,
	0x63, 0x6b, 0x65, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x75, 0x6c, 0x6c, 0x5f, 0x72, 0x65, 0x71,
	0x75, 0x65, 0x73, 0x74, 0x18, 0x1c, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x70, 0x75, 0x6c, 0x6c,
	0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x37, 0x0a, 0x09, 0x63, 0x6c, 0x6f, 0x73, 0x65,
	0x64, 0x5f, 0x61, 0x74, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f,
	0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d,
	0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x08, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x64, 0x41, 0x74,
	0x12, 0x30, 0x0a, 0x09, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x18, 0x16, 0x20,
	0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6d, 0x61, 0x69, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x47, 0x69,
	0x74, 0x68, 0x75, 0x62, 0x55, 0x73, 0x65, 0x72, 0x52, 0x08, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x64,
	0x42, 0x79, 0x12, 0x21, 0x0a, 0x0c, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x5f, 0x6c, 0x61, 0x62,
	0x65, 0x6c, 0x18, 0x17, 0x20, 0x03, 0x28, 0x03, 0x52, 0x0b, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65,
	0x4c, 0x61, 0x62, 0x65, 0x6c, 0x12, 0x31, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x5f, 0x6c, 0x61, 0x62,
	0x65, 0x6c, 0x18, 0x18, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x6d, 0x61, 0x69, 0x6e, 0x74,
	0x70, 0x62, 0x2e, 0x47, 0x69, 0x74, 0x68, 0x75, 0x62, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x52, 0x08,
	0x61, 0x64, 0x64, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x12, 0x3d, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d,
	0x65, 0x6e, 0x74, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x6d, 0x61, 0x69, 0x6e,
	0x74, 0x70, 0x62, 0x2e, 0x47, 0x69, 0x74, 0x68, 0x75, 0x62, 0x49, 0x73, 0x73, 0x75, 0x65, 0x43,
	0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x4d, 0x75, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x07,
	0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x45, 0x0a, 0x0e, 0x63, 0x6f, 0x6d, 0x6d, 0x65,
	0x6e, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32,
	0x1e, 0x2e, 0x6d, 0x61, 0x69, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x47, 0x69, 0x74, 0x68, 0x75, 0x62,
	0x49, 0x73, 0x73, 0x75, 0x65, 0x53, 0x79, 0x6e, 0x63, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52,
	0x0d, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x2f,
	0x0a, 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x1a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e,
	0x6d, 0x61, 0x69, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x47, 0x69, 0x74, 0x68, 0x75, 0x62, 0x49, 0x73,
	0x73, 0x75, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x12,
	0x41, 0x0a, 0x0c, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18,
	0x1b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6d, 0x61, 0x69, 0x6e, 0x74, 0x70, 0x62, 0x2e,
	0x47, 0x69, 0x74, 0x68, 0x75, 0x62, 0x49, 0x73, 0x73, 0x75, 0x65, 0x53, 0x79, 0x6e, 0x63, 0x53,
	0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x0b, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74,
	0x75, 0x73, 0x12, 0x2d, 0x0a, 0x06, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x18, 0x1d, 0x20, 0x03,
	0x28, 0x0b, 0x32, 0x15, 0x2e, 0x6d, 0x61, 0x69, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x47, 0x69, 0x74,
	0x68, 0x75, 0x62, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x52, 0x06, 0x72, 0x65, 0x76, 0x69, 0x65,
	0x77, 0x12, 0x43, 0x0a, 0x0d, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x5f, 0x73, 0x74, 0x61, 0x74,
	0x75, 0x73, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6d, 0x61, 0x69, 0x6e, 0x74,
	0x70, 0x62, 0x2e, 0x47, 0x69, 0x74, 0x68, 0x75, 0x62, 0x49, 0x73, 0x73, 0x75, 0x65, 0x53, 0x79,
	0x6e, 0x63, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x0c, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77,
	0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x1e, 0x0a, 0x0a, 0x42, 0x6f, 0x6f, 0x6c, 0x43, 0x68,
	0x61, 0x6e, 0x67, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x76, 0x61, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28,
	0x08, 0x52, 0x03, 0x76, 0x61, 0x6c, 0x22, 0x20, 0x0a, 0x0c, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67,
	0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x76, 0x61, 0x6c, 0x18, 0x01, 0x20,
	0x01, 0x28, 0x09, 0x52, 0x03, 0x76, 0x61, 0x6c, 0x22, 0x31, 0x0a, 0x0b, 0x47, 0x69, 0x74, 0x68,
	0x75, 0x62, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20,
	0x01, 0x28, 0x03, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18,
	0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x7c, 0x0a, 0x0f, 0x47,
	0x69, 0x74, 0x68, 0x75, 0x62, 0x4d, 0x69, 0x6c, 0x65, 0x73, 0x74, 0x6f, 0x6e, 0x65, 0x12, 0x0e,
	0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x69, 0x64, 0x12, 0x14,
	0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74,
	0x69, 0x74, 0x6c, 0x65, 0x12, 0x2b, 0x0a, 0x06, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x64, 0x18, 0x03,
	0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6d, 0x61, 0x69, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x42,
	0x6f, 0x6f, 0x6c, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x06, 0x63, 0x6c, 0x6f, 0x73, 0x65,
	0x64, 0x12, 0x16, 0x0a, 0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28,
	0x03, 0x52, 0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x22, 0x9f, 0x05, 0x0a, 0x10, 0x47, 0x69,
	0x74, 0x68, 0x75, 0x62, 0x49, 0x73, 0x73, 0x75, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e,
	0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1d,
	0x0a, 0x0a, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01,
	0x28, 0x09, 0x52, 0x09, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x19, 0x0a,
	0x08, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52,
	0x07, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x49, 0x64, 0x12, 0x34, 0x0a, 0x07, 0x63, 0x72, 0x65, 0x61,
	0x74, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
	0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65,
	0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x12, 0x2a,
	0x0a, 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e,
	0x6d, 0x61, 0x69, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x47, 0x69, 0x74, 0x68, 0x75, 0x62, 0x4c, 0x61,
	0x62, 0x65, 0x6c, 0x52, 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x12, 0x36, 0x0a, 0x09, 0x6d, 0x69,
	0x6c, 0x65, 0x73, 0x74, 0x6f, 0x6e, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e,
	0x6d, 0x61, 0x69, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x47, 0x69, 0x74, 0x68, 0x75, 0x62, 0x4d, 0x69,
	0x6c, 0x65, 0x73, 0x74, 0x6f, 0x6e, 0x65, 0x52, 0x09, 0x6d, 0x69, 0x6c, 0x65, 0x73, 0x74, 0x6f,
	0x6e, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x61, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x65, 0x5f, 0x69,
	0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x61, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x65,
	0x65, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x61, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x72, 0x5f,
	0x69, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x61, 0x73, 0x73, 0x69, 0x67, 0x6e,
	0x65, 0x72, 0x49, 0x64, 0x12, 0x2d, 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x18, 0x09,
	0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x6d, 0x61, 0x69, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x47,
	0x69, 0x74, 0x68, 0x75, 0x62, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x52, 0x06, 0x63, 0x6f, 0x6d,
	0x6d, 0x69, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x66, 0x72,
	0x6f, 0x6d, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x72, 0x65, 0x6e, 0x61, 0x6d, 0x65,
	0x46, 0x72, 0x6f, 0x6d, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x74,
	0x6f, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x54,
	0x6f, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x65, 0x72, 0x5f, 0x69, 0x64,
	0x18, 0x0d, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x65, 0x72,
	0x49, 0x64, 0x12, 0x2e, 0x0a, 0x13, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x5f, 0x72, 0x65, 0x71,
	0x75, 0x65, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x03, 0x52,
	0x11, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x72,
	0x49, 0x64, 0x12, 0x38, 0x0a, 0x0d, 0x74, 0x65, 0x61, 0x6d, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x65,
	0x77, 0x65, 0x72, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6d, 0x61, 0x69, 0x6e,
	0x74, 0x70, 0x62, 0x2e, 0x47, 0x69, 0x74, 0x68, 0x75, 0x62, 0x54, 0x65, 0x61, 0x6d, 0x52, 0x0c,
	0x74, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x65, 0x72, 0x12, 0x4e, 0x0a, 0x10,
	0x64, 0x69, 0x73, 0x6d, 0x69, 0x73, 0x73, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77,
	0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x6d, 0x61, 0x69, 0x6e, 0x74, 0x70, 0x62,
	0x2e, 0x47, 0x69, 0x74, 0x68, 0x75, 0x62, 0x44, 0x69, 0x73, 0x6d, 0x69, 0x73, 0x73, 0x65, 0x64,
	0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x0f, 0x64, 0x69, 0x73,
	0x6d, 0x69, 0x73, 0x73, 0x65, 0x64, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x12, 0x1d, 0x0a, 0x0a,
	0x6f, 0x74, 0x68, 0x65, 0x72, 0x5f, 0x6a, 0x73, 0x6f, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0c,
	0x52, 0x09, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x4a, 0x73, 0x6f, 0x6e, 0x22, 0x82, 0x01, 0x0a, 0x1a,
	0x47, 0x69, 0x74, 0x68, 0x75, 0x62, 0x44, 0x69, 0x73, 0x6d, 0x69, 0x73, 0x73, 0x65, 0x64, 0x52,
	0x65, 0x76, 0x69, 0x65, 0x77, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65,
	0x76, 0x69, 0x65, 0x77, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x72,
	0x65, 0x76, 0x69, 0x65, 0x77, 0x49, 0x64, 0x12, 0x2b, 0x0a, 0x11, 0x64, 0x69, 0x73, 0x6d, 0x69,
	0x73, 0x73, 0x61, 0x6c, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01,
	0x28, 0x09, 0x52, 0x10, 0x64, 0x69, 0x73, 0x6d, 0x69, 0x73, 0x73, 0x61, 0x6c, 0x4d, 0x65, 0x73,
	0x73, 0x61, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x04, 0x20,
	0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x4a, 0x04, 0x08, 0x02, 0x10, 0x03,
	0x22, 0x55, 0x0a, 0x0c, 0x47, 0x69, 0x74, 0x68, 0x75, 0x62, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74,
	0x12, 0x14, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
	0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x72, 0x65, 0x70, 0x6f, 0x18, 0x02,
	0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x72, 0x65, 0x70, 0x6f, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x6f,
	0x6d, 0x6d, 0x69, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63,
	0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x49, 0x64, 0x22, 0x82, 0x02, 0x0a, 0x0c, 0x47, 0x69, 0x74, 0x68,
	0x75, 0x62, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01,
	0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x69, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x63, 0x74, 0x6f,
	0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x61, 0x63, 0x74, 0x6f,
	0x72, 0x49, 0x64, 0x12, 0x34, 0x0a, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x18, 0x03,
	0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72,
	0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70,
	0x52, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x62, 0x6f, 0x64,
	0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x12, 0x14, 0x0a,
	0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x74,
	0x61, 0x74, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x5f, 0x69, 0x64,
	0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x49, 0x64,
	0x12, 0x2b, 0x0a, 0x11, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x73, 0x73, 0x6f, 0x63, 0x69,
	0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x61, 0x63, 0x74,
	0x6f, 0x72, 0x41, 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1d, 0x0a,
	0x0a, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x5f, 0x6a, 0x73, 0x6f, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28,
	0x0c, 0x52, 0x09, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x4a, 0x73, 0x6f, 0x6e, 0x22, 0x54, 0x0a, 0x15,
	0x47, 0x69, 0x74, 0x68, 0x75, 0x62, 0x49, 0x73, 0x73, 0x75, 0x65, 0x53, 0x79, 0x6e, 0x63, 0x53,
	0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x3b, 0x0a, 0x0b, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f,
	0x64, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f,
	0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d,
	0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x44, 0x61,
	0x74, 0x65, 0x22, 0xd5, 0x01, 0x0a, 0x1a, 0x47, 0x69, 0x74, 0x68, 0x75, 0x62, 0x49, 0x73, 0x73,
	0x75, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x4d, 0x75, 0x74, 0x61, 0x74, 0x69, 0x6f,
	0x6e, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x69,
	0x64, 0x12, 0x27, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32,
	0x13, 0x2e, 0x6d, 0x61, 0x69, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x47, 0x69, 0x74, 0x68, 0x75, 0x62,
	0x55, 0x73, 0x65, 0x72, 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x62, 0x6f,
	0x64, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x12, 0x34,
	0x0a, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32,
	0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,
	0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x07, 0x63, 0x72, 0x65,
	0x61, 0x74, 0x65, 0x64, 0x12, 0x34, 0x0a, 0x07, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x18,
	0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70,
	0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d,
	0x70, 0x52, 0x07, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x22, 0x32, 0x0a, 0x0a, 0x47, 0x69,
	0x74, 0x68, 0x75, 0x62, 0x55, 0x73, 0x65, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01,
	0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x6f, 0x67, 0x69,
	0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x22, 0x30,
	0x0a, 0x0a, 0x47, 0x69, 0x74, 0x68, 0x75, 0x62, 0x54, 0x65, 0x61, 0x6d, 0x12, 0x0e, 0x0a, 0x02,
	0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04,
	0x73, 0x6c, 0x75, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x73, 0x6c, 0x75, 0x67,
	0x22, 0x5f, 0x0a, 0x0b, 0x47, 0x69, 0x74, 0x4d, 0x75, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12,
	0x24, 0x0a, 0x04, 0x72, 0x65, 0x70, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e,
	0x6d, 0x61, 0x69, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x47, 0x69, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x52,
	0x04, 0x72, 0x65, 0x70, 0x6f, 0x12, 0x2a, 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x18,
	0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6d, 0x61, 0x69, 0x6e, 0x74, 0x70, 0x62, 0x2e,
	0x47, 0x69, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x52, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x69,
	0x74, 0x22, 0x22, 0x0a, 0x07, 0x47, 0x69, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x12, 0x17, 0x0a, 0x07,
	0x67, 0x6f, 0x5f, 0x72, 0x65, 0x70, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x67,
	0x6f, 0x52, 0x65, 0x70, 0x6f, 0x22, 0x64, 0x0a, 0x09, 0x47, 0x69, 0x74, 0x43, 0x6f, 0x6d, 0x6d,
	0x69, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x68, 0x61, 0x31, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
	0x52, 0x04, 0x73, 0x68, 0x61, 0x31, 0x12, 0x10, 0x0a, 0x03, 0x72, 0x61, 0x77, 0x18, 0x02, 0x20,
	0x01, 0x28, 0x0c, 0x52, 0x03, 0x72, 0x61, 0x77, 0x12, 0x31, 0x0a, 0x09, 0x64, 0x69, 0x66, 0x66,
	0x5f, 0x74, 0x72, 0x65, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x6d, 0x61,
	0x69, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x47, 0x69, 0x74, 0x44, 0x69, 0x66, 0x66, 0x54, 0x72, 0x65,
	0x65, 0x52, 0x08, 0x64, 0x69, 0x66, 0x66, 0x54, 0x72, 0x65, 0x65, 0x22, 0x3b, 0x0a, 0x0b, 0x47,
	0x69, 0x74, 0x44, 0x69, 0x66, 0x66, 0x54, 0x72, 0x65, 0x65, 0x12, 0x2c, 0x0a, 0x04, 0x66, 0x69,
	0x6c, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x6d, 0x61, 0x69, 0x6e, 0x74,
	0x70, 0x62, 0x2e, 0x47, 0x69, 0x74, 0x44, 0x69, 0x66, 0x66, 0x54, 0x72, 0x65, 0x65, 0x46, 0x69,
	0x6c, 0x65, 0x52, 0x04, 0x66, 0x69, 0x6c, 0x65, 0x22, 0x6d, 0x0a, 0x0f, 0x47, 0x69, 0x74, 0x44,
	0x69, 0x66, 0x66, 0x54, 0x72, 0x65, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x66,
	0x69, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x66, 0x69, 0x6c, 0x65, 0x12,
	0x14, 0x0a, 0x05, 0x61, 0x64, 0x64, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05,
	0x61, 0x64, 0x64, 0x65, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64,
	0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x12,
	0x16, 0x0a, 0x06, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52,
	0x06, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x22, 0xa0, 0x01, 0x0a, 0x0e, 0x47, 0x65, 0x72, 0x72,
	0x69, 0x74, 0x4d, 0x75, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72,
	0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x72, 0x6f,
	0x6a, 0x65, 0x63, 0x74, 0x12, 0x2c, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x18,
	0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6d, 0x61, 0x69, 0x6e, 0x74, 0x70, 0x62, 0x2e,
	0x47, 0x69, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x69,
	0x74, 0x73, 0x12, 0x23, 0x0a, 0x04, 0x72, 0x65, 0x66, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b,
	0x32, 0x0f, 0x2e, 0x6d, 0x61, 0x69, 0x6e, 0x74, 0x70, 0x62, 0x2e, 0x47, 0x69, 0x74, 0x52, 0x65,
	0x66, 0x52, 0x04, 0x72, 0x65, 0x66, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x65, 0x6c, 0x65, 0x74,
	0x65, 0x64, 0x5f, 0x72, 0x65, 0x66, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x64,
	0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x52, 0x65, 0x66, 0x73, 0x22, 0x2e, 0x0a, 0x06, 0x47, 0x69,
	0x74, 0x52, 0x65, 0x66, 0x12, 0x10, 0x0a, 0x03, 0x72, 0x65, 0x66, 0x18, 0x01, 0x20, 0x01, 0x28,
	0x09, 0x52, 0x03, 0x72, 0x65, 0x66, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x68, 0x61, 0x31, 0x18, 0x02,
	0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x73, 0x68, 0x61, 0x31, 0x42, 0x25, 0x5a, 0x23, 0x67, 0x6f,
	0x6c, 0x61, 0x6e, 0x67, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x78, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64,
	0x2f, 0x6d, 0x61, 0x69, 0x6e, 0x74, 0x6e, 0x65, 0x72, 0x2f, 0x6d, 0x61, 0x69, 0x6e, 0x74, 0x70,
	0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
}

var (
	file_maintner_maintpb_maintner_proto_rawDescOnce sync.Once
	file_maintner_maintpb_maintner_proto_rawDescData = file_maintner_maintpb_maintner_proto_rawDesc
)

func file_maintner_maintpb_maintner_proto_rawDescGZIP() []byte {
	file_maintner_maintpb_maintner_proto_rawDescOnce.Do(func() {
		file_maintner_maintpb_maintner_proto_rawDescData = protoimpl.X.CompressGZIP(file_maintner_maintpb_maintner_proto_rawDescData)
	})
	return file_maintner_maintpb_maintner_proto_rawDescData
}

var file_maintner_maintpb_maintner_proto_msgTypes = make([]protoimpl.MessageInfo, 22)
var file_maintner_maintpb_maintner_proto_goTypes = []interface{}{
	(*Mutation)(nil),                   // 0: maintpb.Mutation
	(*GithubMutation)(nil),             // 1: maintpb.GithubMutation
	(*GithubIssueMutation)(nil),        // 2: maintpb.GithubIssueMutation
	(*BoolChange)(nil),                 // 3: maintpb.BoolChange
	(*StringChange)(nil),               // 4: maintpb.StringChange
	(*GithubLabel)(nil),                // 5: maintpb.GithubLabel
	(*GithubMilestone)(nil),            // 6: maintpb.GithubMilestone
	(*GithubIssueEvent)(nil),           // 7: maintpb.GithubIssueEvent
	(*GithubDismissedReviewEvent)(nil), // 8: maintpb.GithubDismissedReviewEvent
	(*GithubCommit)(nil),               // 9: maintpb.GithubCommit
	(*GithubReview)(nil),               // 10: maintpb.GithubReview
	(*GithubIssueSyncStatus)(nil),      // 11: maintpb.GithubIssueSyncStatus
	(*GithubIssueCommentMutation)(nil), // 12: maintpb.GithubIssueCommentMutation
	(*GithubUser)(nil),                 // 13: maintpb.GithubUser
	(*GithubTeam)(nil),                 // 14: maintpb.GithubTeam
	(*GitMutation)(nil),                // 15: maintpb.GitMutation
	(*GitRepo)(nil),                    // 16: maintpb.GitRepo
	(*GitCommit)(nil),                  // 17: maintpb.GitCommit
	(*GitDiffTree)(nil),                // 18: maintpb.GitDiffTree
	(*GitDiffTreeFile)(nil),            // 19: maintpb.GitDiffTreeFile
	(*GerritMutation)(nil),             // 20: maintpb.GerritMutation
	(*GitRef)(nil),                     // 21: maintpb.GitRef
	(*timestamppb.Timestamp)(nil),      // 22: google.protobuf.Timestamp
}
var file_maintner_maintpb_maintner_proto_depIdxs = []int32{
	2,  // 0: maintpb.Mutation.github_issue:type_name -> maintpb.GithubIssueMutation
	1,  // 1: maintpb.Mutation.github:type_name -> maintpb.GithubMutation
	15, // 2: maintpb.Mutation.git:type_name -> maintpb.GitMutation
	20, // 3: maintpb.Mutation.gerrit:type_name -> maintpb.GerritMutation
	5,  // 4: maintpb.GithubMutation.labels:type_name -> maintpb.GithubLabel
	6,  // 5: maintpb.GithubMutation.milestones:type_name -> maintpb.GithubMilestone
	13, // 6: maintpb.GithubIssueMutation.user:type_name -> maintpb.GithubUser
	13, // 7: maintpb.GithubIssueMutation.assignees:type_name -> maintpb.GithubUser
	22, // 8: maintpb.GithubIssueMutation.created:type_name -> google.protobuf.Timestamp
	22, // 9: maintpb.GithubIssueMutation.updated:type_name -> google.protobuf.Timestamp
	4,  // 10: maintpb.GithubIssueMutation.body_change:type_name -> maintpb.StringChange
	3,  // 11: maintpb.GithubIssueMutation.closed:type_name -> maintpb.BoolChange
	3,  // 12: maintpb.GithubIssueMutation.locked:type_name -> maintpb.BoolChange
	22, // 13: maintpb.GithubIssueMutation.closed_at:type_name -> google.protobuf.Timestamp
	13, // 14: maintpb.GithubIssueMutation.closed_by:type_name -> maintpb.GithubUser
	5,  // 15: maintpb.GithubIssueMutation.add_label:type_name -> maintpb.GithubLabel
	12, // 16: maintpb.GithubIssueMutation.comment:type_name -> maintpb.GithubIssueCommentMutation
	11, // 17: maintpb.GithubIssueMutation.comment_status:type_name -> maintpb.GithubIssueSyncStatus
	7,  // 18: maintpb.GithubIssueMutation.event:type_name -> maintpb.GithubIssueEvent
	11, // 19: maintpb.GithubIssueMutation.event_status:type_name -> maintpb.GithubIssueSyncStatus
	10, // 20: maintpb.GithubIssueMutation.review:type_name -> maintpb.GithubReview
	11, // 21: maintpb.GithubIssueMutation.review_status:type_name -> maintpb.GithubIssueSyncStatus
	3,  // 22: maintpb.GithubMilestone.closed:type_name -> maintpb.BoolChange
	22, // 23: maintpb.GithubIssueEvent.created:type_name -> google.protobuf.Timestamp
	5,  // 24: maintpb.GithubIssueEvent.label:type_name -> maintpb.GithubLabel
	6,  // 25: maintpb.GithubIssueEvent.milestone:type_name -> maintpb.GithubMilestone
	9,  // 26: maintpb.GithubIssueEvent.commit:type_name -> maintpb.GithubCommit
	14, // 27: maintpb.GithubIssueEvent.team_reviewer:type_name -> maintpb.GithubTeam
	8,  // 28: maintpb.GithubIssueEvent.dismissed_review:type_name -> maintpb.GithubDismissedReviewEvent
	22, // 29: maintpb.GithubReview.created:type_name -> google.protobuf.Timestamp
	22, // 30: maintpb.GithubIssueSyncStatus.server_date:type_name -> google.protobuf.Timestamp
	13, // 31: maintpb.GithubIssueCommentMutation.user:type_name -> maintpb.GithubUser
	22, // 32: maintpb.GithubIssueCommentMutation.created:type_name -> google.protobuf.Timestamp
	22, // 33: maintpb.GithubIssueCommentMutation.updated:type_name -> google.protobuf.Timestamp
	16, // 34: maintpb.GitMutation.repo:type_name -> maintpb.GitRepo
	17, // 35: maintpb.GitMutation.commit:type_name -> maintpb.GitCommit
	18, // 36: maintpb.GitCommit.diff_tree:type_name -> maintpb.GitDiffTree
	19, // 37: maintpb.GitDiffTree.file:type_name -> maintpb.GitDiffTreeFile
	17, // 38: maintpb.GerritMutation.commits:type_name -> maintpb.GitCommit
	21, // 39: maintpb.GerritMutation.refs:type_name -> maintpb.GitRef
	40, // [40:40] is the sub-list for method output_type
	40, // [40:40] is the sub-list for method input_type
	40, // [40:40] is the sub-list for extension type_name
	40, // [40:40] is the sub-list for extension extendee
	0,  // [0:40] is the sub-list for field type_name
}

func init() { file_maintner_maintpb_maintner_proto_init() }
func file_maintner_maintpb_maintner_proto_init() {
	if File_maintner_maintpb_maintner_proto != nil {
		return
	}
	if !protoimpl.UnsafeEnabled {
		file_maintner_maintpb_maintner_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*Mutation); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_maintner_maintpb_maintner_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*GithubMutation); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_maintner_maintpb_maintner_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*GithubIssueMutation); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_maintner_maintpb_maintner_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*BoolChange); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_maintner_maintpb_maintner_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*StringChange); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_maintner_maintpb_maintner_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*GithubLabel); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_maintner_maintpb_maintner_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*GithubMilestone); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_maintner_maintpb_maintner_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*GithubIssueEvent); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_maintner_maintpb_maintner_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*GithubDismissedReviewEvent); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_maintner_maintpb_maintner_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*GithubCommit); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_maintner_maintpb_maintner_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*GithubReview); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_maintner_maintpb_maintner_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*GithubIssueSyncStatus); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_maintner_maintpb_maintner_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*GithubIssueCommentMutation); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_maintner_maintpb_maintner_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*GithubUser); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_maintner_maintpb_maintner_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*GithubTeam); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_maintner_maintpb_maintner_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*GitMutation); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_maintner_maintpb_maintner_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*GitRepo); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_maintner_maintpb_maintner_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*GitCommit); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_maintner_maintpb_maintner_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*GitDiffTree); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_maintner_maintpb_maintner_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*GitDiffTreeFile); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_maintner_maintpb_maintner_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*GerritMutation); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_maintner_maintpb_maintner_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*GitRef); 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_maintner_maintpb_maintner_proto_rawDesc,
			NumEnums:      0,
			NumMessages:   22,
			NumExtensions: 0,
			NumServices:   0,
		},
		GoTypes:           file_maintner_maintpb_maintner_proto_goTypes,
		DependencyIndexes: file_maintner_maintpb_maintner_proto_depIdxs,
		MessageInfos:      file_maintner_maintpb_maintner_proto_msgTypes,
	}.Build()
	File_maintner_maintpb_maintner_proto = out.File
	file_maintner_maintpb_maintner_proto_rawDesc = nil
	file_maintner_maintpb_maintner_proto_goTypes = nil
	file_maintner_maintpb_maintner_proto_depIdxs = nil
}
