//
//Сервис управления реле устройства

// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// 	protoc-gen-go v1.30.0
// 	protoc        v4.23.1
// source: deviceapis/device/v1/deviceapis_device_relay_v1.proto

package deviceapis_device_v1

import (
	_ "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2/options"
	_ "google.golang.org/genproto/googleapis/api/annotations"
	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
	fieldmaskpb "google.golang.org/protobuf/types/known/fieldmaskpb"
	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 RelayState_StateType int32

const (
	// Значение не указано
	RelayState_STATE_TYPE_UNKNOWN RelayState_StateType = 0
	// Открыто временно
	RelayState_OPEN_TEMPORARY RelayState_StateType = 1
	// Закрыто
	RelayState_CLOSED RelayState_StateType = 2
	// Открыто на всегда
	RelayState_OPEN_PERMANENT RelayState_StateType = 3
)

// Enum value maps for RelayState_StateType.
var (
	RelayState_StateType_name = map[int32]string{
		0: "STATE_TYPE_UNKNOWN",
		1: "OPEN_TEMPORARY",
		2: "CLOSED",
		3: "OPEN_PERMANENT",
	}
	RelayState_StateType_value = map[string]int32{
		"STATE_TYPE_UNKNOWN": 0,
		"OPEN_TEMPORARY":     1,
		"CLOSED":             2,
		"OPEN_PERMANENT":     3,
	}
)

func (x RelayState_StateType) Enum() *RelayState_StateType {
	p := new(RelayState_StateType)
	*p = x
	return p
}

func (x RelayState_StateType) String() string {
	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}

func (RelayState_StateType) Descriptor() protoreflect.EnumDescriptor {
	return file_deviceapis_device_v1_deviceapis_device_relay_v1_proto_enumTypes[0].Descriptor()
}

func (RelayState_StateType) Type() protoreflect.EnumType {
	return &file_deviceapis_device_v1_deviceapis_device_relay_v1_proto_enumTypes[0]
}

func (x RelayState_StateType) Number() protoreflect.EnumNumber {
	return protoreflect.EnumNumber(x)
}

// Deprecated: Use RelayState_StateType.Descriptor instead.
func (RelayState_StateType) EnumDescriptor() ([]byte, []int) {
	return file_deviceapis_device_v1_deviceapis_device_relay_v1_proto_rawDescGZIP(), []int{11, 0}
}

// Тип замка
type RelayOpen_LockType int32

const (
	// Значение не указано
	RelayOpen_LOCK_TYPE_UNKNOWN RelayOpen_LockType = 0
	// Электромагнитный (state_operation)
	RelayOpen_ELECTROMAGNETIC RelayOpen_LockType = 1
	// Электромеханический (pulse_operation)
	RelayOpen_ELECTROMECHANICAL RelayOpen_LockType = 2
)

// Enum value maps for RelayOpen_LockType.
var (
	RelayOpen_LockType_name = map[int32]string{
		0: "LOCK_TYPE_UNKNOWN",
		1: "ELECTROMAGNETIC",
		2: "ELECTROMECHANICAL",
	}
	RelayOpen_LockType_value = map[string]int32{
		"LOCK_TYPE_UNKNOWN": 0,
		"ELECTROMAGNETIC":   1,
		"ELECTROMECHANICAL": 2,
	}
)

func (x RelayOpen_LockType) Enum() *RelayOpen_LockType {
	p := new(RelayOpen_LockType)
	*p = x
	return p
}

func (x RelayOpen_LockType) String() string {
	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}

func (RelayOpen_LockType) Descriptor() protoreflect.EnumDescriptor {
	return file_deviceapis_device_v1_deviceapis_device_relay_v1_proto_enumTypes[1].Descriptor()
}

func (RelayOpen_LockType) Type() protoreflect.EnumType {
	return &file_deviceapis_device_v1_deviceapis_device_relay_v1_proto_enumTypes[1]
}

func (x RelayOpen_LockType) Number() protoreflect.EnumNumber {
	return protoreflect.EnumNumber(x)
}

// Deprecated: Use RelayOpen_LockType.Descriptor instead.
func (RelayOpen_LockType) EnumDescriptor() ([]byte, []int) {
	return file_deviceapis_device_v1_deviceapis_device_relay_v1_proto_rawDescGZIP(), []int{15, 0}
}

// Запрос закрытия реле
type PostRelayCloseRequest struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Индекс реле.
	// Диапазон: 1..32767
	RelayIndex int32 `protobuf:"varint,1,opt,name=relay_index,json=relayIndex,proto3" json:"relay_index,omitempty"`
}

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

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

func (*PostRelayCloseRequest) ProtoMessage() {}

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

func (x *PostRelayCloseRequest) GetRelayIndex() int32 {
	if x != nil {
		return x.RelayIndex
	}
	return 0
}

// Ответ на запрос закрытия реле
type PostRelayCloseResponse struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Тип ответа
	//
	// Types that are assignable to Type:
	//
	//	*PostRelayCloseResponse_Error_
	Type isPostRelayCloseResponse_Type `protobuf_oneof:"type"`
}

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

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

func (*PostRelayCloseResponse) ProtoMessage() {}

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

func (m *PostRelayCloseResponse) GetType() isPostRelayCloseResponse_Type {
	if m != nil {
		return m.Type
	}
	return nil
}

func (x *PostRelayCloseResponse) GetError() *PostRelayCloseResponse_Error {
	if x, ok := x.GetType().(*PostRelayCloseResponse_Error_); ok {
		return x.Error
	}
	return nil
}

type isPostRelayCloseResponse_Type interface {
	isPostRelayCloseResponse_Type()
}

type PostRelayCloseResponse_Error_ struct {
	// Ошибка
	Error *PostRelayCloseResponse_Error `protobuf:"bytes,1,opt,name=error,proto3,oneof"`
}

func (*PostRelayCloseResponse_Error_) isPostRelayCloseResponse_Type() {}

// Запрос открытия реле без дальнейшего закрытия
type PostRelayOpenPermanentlyRequest struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Индекс реле.
	// Диапазон: 1..32767
	RelayIndex int32 `protobuf:"varint,1,opt,name=relay_index,json=relayIndex,proto3" json:"relay_index,omitempty"`
}

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

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

func (*PostRelayOpenPermanentlyRequest) ProtoMessage() {}

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

func (x *PostRelayOpenPermanentlyRequest) GetRelayIndex() int32 {
	if x != nil {
		return x.RelayIndex
	}
	return 0
}

// Ответ на запрос открытия реле без дальнейшего закрытия
type PostRelayOpenPermanentlyResponse struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Тип ответа
	//
	// Types that are assignable to Type:
	//
	//	*PostRelayOpenPermanentlyResponse_Error_
	Type isPostRelayOpenPermanentlyResponse_Type `protobuf_oneof:"type"`
}

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

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

func (*PostRelayOpenPermanentlyResponse) ProtoMessage() {}

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

func (m *PostRelayOpenPermanentlyResponse) GetType() isPostRelayOpenPermanentlyResponse_Type {
	if m != nil {
		return m.Type
	}
	return nil
}

func (x *PostRelayOpenPermanentlyResponse) GetError() *PostRelayOpenPermanentlyResponse_Error {
	if x, ok := x.GetType().(*PostRelayOpenPermanentlyResponse_Error_); ok {
		return x.Error
	}
	return nil
}

type isPostRelayOpenPermanentlyResponse_Type interface {
	isPostRelayOpenPermanentlyResponse_Type()
}

type PostRelayOpenPermanentlyResponse_Error_ struct {
	// Ошибка
	Error *PostRelayOpenPermanentlyResponse_Error `protobuf:"bytes,1,opt,name=error,proto3,oneof"`
}

func (*PostRelayOpenPermanentlyResponse_Error_) isPostRelayOpenPermanentlyResponse_Type() {}

// Запрос открытия реле
type PostRelayOpenRequest struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Индекс реле.
	// Диапазон: 1..32767
	RelayIndex int32 `protobuf:"varint,1,opt,name=relay_index,json=relayIndex,proto3" json:"relay_index,omitempty"`
	// Задержка в секундах.
	// Если не передано, используется установленное значение времени открытия из настроек.
	// Диапазон: 1..200
	CurrentOpenTime int32 `protobuf:"varint,2,opt,name=current_open_time,json=currentOpenTime,proto3" json:"current_open_time,omitempty"`
}

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

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

func (*PostRelayOpenRequest) ProtoMessage() {}

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

func (x *PostRelayOpenRequest) GetRelayIndex() int32 {
	if x != nil {
		return x.RelayIndex
	}
	return 0
}

func (x *PostRelayOpenRequest) GetCurrentOpenTime() int32 {
	if x != nil {
		return x.CurrentOpenTime
	}
	return 0
}

// Ответ на запрос открытия реле
type PostRelayOpenResponse struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Тип ответа
	//
	// Types that are assignable to Type:
	//
	//	*PostRelayOpenResponse_Error_
	Type isPostRelayOpenResponse_Type `protobuf_oneof:"type"`
}

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

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

func (*PostRelayOpenResponse) ProtoMessage() {}

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

func (m *PostRelayOpenResponse) GetType() isPostRelayOpenResponse_Type {
	if m != nil {
		return m.Type
	}
	return nil
}

func (x *PostRelayOpenResponse) GetError() *PostRelayOpenResponse_Error {
	if x, ok := x.GetType().(*PostRelayOpenResponse_Error_); ok {
		return x.Error
	}
	return nil
}

type isPostRelayOpenResponse_Type interface {
	isPostRelayOpenResponse_Type()
}

type PostRelayOpenResponse_Error_ struct {
	// Ошибка
	Error *PostRelayOpenResponse_Error `protobuf:"bytes,1,opt,name=error,proto3,oneof"`
}

func (*PostRelayOpenResponse_Error_) isPostRelayOpenResponse_Type() {}

// Запрос редактирования настроек открытия реле
type EditRelayPropsOpenRequest struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Настройки реле
	Data *RelayOpen `protobuf:"bytes,1,opt,name=data,proto3" json:"data,omitempty"`
	// Маска полей обновления
	UpdateMask *fieldmaskpb.FieldMask `protobuf:"bytes,2,opt,name=update_mask,json=updateMask,proto3" json:"update_mask,omitempty"`
}

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

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

func (*EditRelayPropsOpenRequest) ProtoMessage() {}

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

func (x *EditRelayPropsOpenRequest) GetData() *RelayOpen {
	if x != nil {
		return x.Data
	}
	return nil
}

func (x *EditRelayPropsOpenRequest) GetUpdateMask() *fieldmaskpb.FieldMask {
	if x != nil {
		return x.UpdateMask
	}
	return nil
}

// Запрос на установку настроек DTMF реле
type EditRelayPropsDtmfRequest struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Настройки DTMF реле
	Data *RelayDtmf `protobuf:"bytes,1,opt,name=data,proto3" json:"data,omitempty"`
	// Маска полей обновления
	UpdateMask *fieldmaskpb.FieldMask `protobuf:"bytes,2,opt,name=update_mask,json=updateMask,proto3" json:"update_mask,omitempty"`
}

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

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

func (*EditRelayPropsDtmfRequest) ProtoMessage() {}

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

func (x *EditRelayPropsDtmfRequest) GetData() *RelayDtmf {
	if x != nil {
		return x.Data
	}
	return nil
}

func (x *EditRelayPropsDtmfRequest) GetUpdateMask() *fieldmaskpb.FieldMask {
	if x != nil {
		return x.UpdateMask
	}
	return nil
}

// Ответ на запрос на установку настроек открытия реле
type EditRelayPropsOpenResponse struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Тип ответа
	//
	// Types that are assignable to Type:
	//
	//	*EditRelayPropsOpenResponse_Error_
	Type isEditRelayPropsOpenResponse_Type `protobuf_oneof:"type"`
}

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

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

func (*EditRelayPropsOpenResponse) ProtoMessage() {}

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

func (m *EditRelayPropsOpenResponse) GetType() isEditRelayPropsOpenResponse_Type {
	if m != nil {
		return m.Type
	}
	return nil
}

func (x *EditRelayPropsOpenResponse) GetError() *EditRelayPropsOpenResponse_Error {
	if x, ok := x.GetType().(*EditRelayPropsOpenResponse_Error_); ok {
		return x.Error
	}
	return nil
}

type isEditRelayPropsOpenResponse_Type interface {
	isEditRelayPropsOpenResponse_Type()
}

type EditRelayPropsOpenResponse_Error_ struct {
	// Ошибка
	Error *EditRelayPropsOpenResponse_Error `protobuf:"bytes,1,opt,name=error,proto3,oneof"`
}

func (*EditRelayPropsOpenResponse_Error_) isEditRelayPropsOpenResponse_Type() {}

// Ответ на запрос на установку настроек DTMF
type EditRelayPropsDtmfResponse struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Тип ответа
	//
	// Types that are assignable to Type:
	//
	//	*EditRelayPropsDtmfResponse_Error_
	Type isEditRelayPropsDtmfResponse_Type `protobuf_oneof:"type"`
}

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

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

func (*EditRelayPropsDtmfResponse) ProtoMessage() {}

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

func (m *EditRelayPropsDtmfResponse) GetType() isEditRelayPropsDtmfResponse_Type {
	if m != nil {
		return m.Type
	}
	return nil
}

func (x *EditRelayPropsDtmfResponse) GetError() *EditRelayPropsDtmfResponse_Error {
	if x, ok := x.GetType().(*EditRelayPropsDtmfResponse_Error_); ok {
		return x.Error
	}
	return nil
}

type isEditRelayPropsDtmfResponse_Type interface {
	isEditRelayPropsDtmfResponse_Type()
}

type EditRelayPropsDtmfResponse_Error_ struct {
	// Ошибка
	Error *EditRelayPropsDtmfResponse_Error `protobuf:"bytes,1,opt,name=error,proto3,oneof"`
}

func (*EditRelayPropsDtmfResponse_Error_) isEditRelayPropsDtmfResponse_Type() {}

// Запрос получения статусов реле устройства
type GetRelayStatusListRequest struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields
}

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

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

func (*GetRelayStatusListRequest) ProtoMessage() {}

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

// Состояние реле
type RelayState struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Индекс реле.
	// Диапазон: 1..32767
	RelayIndex int32 `protobuf:"varint,1,opt,name=relay_index,json=relayIndex,proto3" json:"relay_index,omitempty"`
	// Состояние
	StateType RelayState_StateType `protobuf:"varint,2,opt,name=state_type,json=stateType,proto3,enum=deviceapis.device.v1.RelayState_StateType" json:"state_type,omitempty"`
}

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

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

func (*RelayState) ProtoMessage() {}

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

func (x *RelayState) GetRelayIndex() int32 {
	if x != nil {
		return x.RelayIndex
	}
	return 0
}

func (x *RelayState) GetStateType() RelayState_StateType {
	if x != nil {
		return x.StateType
	}
	return RelayState_STATE_TYPE_UNKNOWN
}

// Ответ на запрос получения статусов реле устройства
type GetRelayStatusListResponse struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Список состояний реле
	Data []*RelayState `protobuf:"bytes,1,rep,name=data,proto3" json:"data,omitempty"`
}

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

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

func (*GetRelayStatusListResponse) ProtoMessage() {}

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

func (x *GetRelayStatusListResponse) GetData() []*RelayState {
	if x != nil {
		return x.Data
	}
	return nil
}

// Запрос получения настроек открытия реле
type GetRelayOpenListRequest struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields
}

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

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

func (*GetRelayOpenListRequest) ProtoMessage() {}

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

// Запрос получения настроек DTMF реле
type GetRelayDtmfListRequest struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields
}

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

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

func (*GetRelayDtmfListRequest) ProtoMessage() {}

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

// Настройки открытия реле
type RelayOpen struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Индекс реле.
	// Диапазон: 1..32767
	RelayIndex int32 `protobuf:"varint,1,opt,name=relay_index,json=relayIndex,proto3" json:"relay_index,omitempty"`
	// Тип замка
	LockType RelayOpen_LockType `protobuf:"varint,2,opt,name=lock_type,json=lockType,proto3,enum=deviceapis.device.v1.RelayOpen_LockType" json:"lock_type,omitempty"`
	// Общее время открытия.
	// Диапазон: 1..200
	OpenTimeGeneral int32 `protobuf:"varint,3,opt,name=open_time_general,json=openTimeGeneral,proto3" json:"open_time_general,omitempty"`
	// Время открытия в секундах при экстренном оповещении.
	// При 0 - до конца экстренного оповещения.
	// Диапазон: 0..3600
	OpenTimeEmergency int32 `protobuf:"varint,4,opt,name=open_time_emergency,json=openTimeEmergency,proto3" json:"open_time_emergency,omitempty"`
}

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

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

func (*RelayOpen) ProtoMessage() {}

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

func (x *RelayOpen) GetRelayIndex() int32 {
	if x != nil {
		return x.RelayIndex
	}
	return 0
}

func (x *RelayOpen) GetLockType() RelayOpen_LockType {
	if x != nil {
		return x.LockType
	}
	return RelayOpen_LOCK_TYPE_UNKNOWN
}

func (x *RelayOpen) GetOpenTimeGeneral() int32 {
	if x != nil {
		return x.OpenTimeGeneral
	}
	return 0
}

func (x *RelayOpen) GetOpenTimeEmergency() int32 {
	if x != nil {
		return x.OpenTimeEmergency
	}
	return 0
}

// Ответ на запрос получения настроек открытия реле
type GetRelayOpenListResponse struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Настройки открытия реле
	Data []*RelayOpen `protobuf:"bytes,1,rep,name=data,proto3" json:"data,omitempty"`
}

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

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

func (*GetRelayOpenListResponse) ProtoMessage() {}

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

func (x *GetRelayOpenListResponse) GetData() []*RelayOpen {
	if x != nil {
		return x.Data
	}
	return nil
}

// Настройки DTMF реле
type RelayDtmf struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Индекс реле.
	// Диапазон: 1..32767
	RelayIndex int32 `protobuf:"varint,1,opt,name=relay_index,json=relayIndex,proto3" json:"relay_index,omitempty"`
	// DTMF код.
	// Для разных реле допускается одинаковый DTMF код.
	// Один символ из 0,1,2,3,4,5,6,7,8,9,*,#
	DtmfCode string `protobuf:"bytes,2,opt,name=dtmf_code,json=dtmfCode,proto3" json:"dtmf_code,omitempty"`
}

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

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

func (*RelayDtmf) ProtoMessage() {}

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

func (x *RelayDtmf) GetRelayIndex() int32 {
	if x != nil {
		return x.RelayIndex
	}
	return 0
}

func (x *RelayDtmf) GetDtmfCode() string {
	if x != nil {
		return x.DtmfCode
	}
	return ""
}

// Ответ на запрос получения настроек DTMF реле
type GetRelayDtmfListResponse struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Настройки DTMF реле
	Data []*RelayDtmf `protobuf:"bytes,1,rep,name=data,proto3" json:"data,omitempty"`
}

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

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

func (*GetRelayDtmfListResponse) ProtoMessage() {}

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

func (x *GetRelayDtmfListResponse) GetData() []*RelayDtmf {
	if x != nil {
		return x.Data
	}
	return nil
}

// Ошибка запроса закрытия реле
type PostRelayCloseResponse_Error struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Причина ошибки
	//
	// Types that are assignable to Reason:
	//
	//	*PostRelayCloseResponse_Error_Validation
	Reason isPostRelayCloseResponse_Error_Reason `protobuf_oneof:"reason"`
}

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

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

func (*PostRelayCloseResponse_Error) ProtoMessage() {}

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

func (m *PostRelayCloseResponse_Error) GetReason() isPostRelayCloseResponse_Error_Reason {
	if m != nil {
		return m.Reason
	}
	return nil
}

func (x *PostRelayCloseResponse_Error) GetValidation() *ValidationError {
	if x, ok := x.GetReason().(*PostRelayCloseResponse_Error_Validation); ok {
		return x.Validation
	}
	return nil
}

type isPostRelayCloseResponse_Error_Reason interface {
	isPostRelayCloseResponse_Error_Reason()
}

type PostRelayCloseResponse_Error_Validation struct {
	// Ошибка валидации
	Validation *ValidationError `protobuf:"bytes,1,opt,name=validation,proto3,oneof"`
}

func (*PostRelayCloseResponse_Error_Validation) isPostRelayCloseResponse_Error_Reason() {}

// Ошибка запроса открытия реле без дальнейшего закрытия
type PostRelayOpenPermanentlyResponse_Error struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Причина ошибки
	//
	// Types that are assignable to Reason:
	//
	//	*PostRelayOpenPermanentlyResponse_Error_Validation
	Reason isPostRelayOpenPermanentlyResponse_Error_Reason `protobuf_oneof:"reason"`
}

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

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

func (*PostRelayOpenPermanentlyResponse_Error) ProtoMessage() {}

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

func (m *PostRelayOpenPermanentlyResponse_Error) GetReason() isPostRelayOpenPermanentlyResponse_Error_Reason {
	if m != nil {
		return m.Reason
	}
	return nil
}

func (x *PostRelayOpenPermanentlyResponse_Error) GetValidation() *ValidationError {
	if x, ok := x.GetReason().(*PostRelayOpenPermanentlyResponse_Error_Validation); ok {
		return x.Validation
	}
	return nil
}

type isPostRelayOpenPermanentlyResponse_Error_Reason interface {
	isPostRelayOpenPermanentlyResponse_Error_Reason()
}

type PostRelayOpenPermanentlyResponse_Error_Validation struct {
	// Ошибка валидации
	Validation *ValidationError `protobuf:"bytes,1,opt,name=validation,proto3,oneof"`
}

func (*PostRelayOpenPermanentlyResponse_Error_Validation) isPostRelayOpenPermanentlyResponse_Error_Reason() {
}

// Ошибка запроса открытия реле
type PostRelayOpenResponse_Error struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Причина ошибки
	//
	// Types that are assignable to Reason:
	//
	//	*PostRelayOpenResponse_Error_Validation
	Reason isPostRelayOpenResponse_Error_Reason `protobuf_oneof:"reason"`
}

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

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

func (*PostRelayOpenResponse_Error) ProtoMessage() {}

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

func (m *PostRelayOpenResponse_Error) GetReason() isPostRelayOpenResponse_Error_Reason {
	if m != nil {
		return m.Reason
	}
	return nil
}

func (x *PostRelayOpenResponse_Error) GetValidation() *ValidationError {
	if x, ok := x.GetReason().(*PostRelayOpenResponse_Error_Validation); ok {
		return x.Validation
	}
	return nil
}

type isPostRelayOpenResponse_Error_Reason interface {
	isPostRelayOpenResponse_Error_Reason()
}

type PostRelayOpenResponse_Error_Validation struct {
	// Ошибка валидации
	Validation *ValidationError `protobuf:"bytes,1,opt,name=validation,proto3,oneof"`
}

func (*PostRelayOpenResponse_Error_Validation) isPostRelayOpenResponse_Error_Reason() {}

// Ошибка запроса на установку настроек открытия реле
type EditRelayPropsOpenResponse_Error struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Причина ошибки
	//
	// Types that are assignable to Reason:
	//
	//	*EditRelayPropsOpenResponse_Error_Validation
	Reason isEditRelayPropsOpenResponse_Error_Reason `protobuf_oneof:"reason"`
}

func (x *EditRelayPropsOpenResponse_Error) Reset() {
	*x = EditRelayPropsOpenResponse_Error{}
	if protoimpl.UnsafeEnabled {
		mi := &file_deviceapis_device_v1_deviceapis_device_relay_v1_proto_msgTypes[22]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

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

func (*EditRelayPropsOpenResponse_Error) ProtoMessage() {}

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

func (m *EditRelayPropsOpenResponse_Error) GetReason() isEditRelayPropsOpenResponse_Error_Reason {
	if m != nil {
		return m.Reason
	}
	return nil
}

func (x *EditRelayPropsOpenResponse_Error) GetValidation() *ValidationError {
	if x, ok := x.GetReason().(*EditRelayPropsOpenResponse_Error_Validation); ok {
		return x.Validation
	}
	return nil
}

type isEditRelayPropsOpenResponse_Error_Reason interface {
	isEditRelayPropsOpenResponse_Error_Reason()
}

type EditRelayPropsOpenResponse_Error_Validation struct {
	// Ошибка валидации
	Validation *ValidationError `protobuf:"bytes,1,opt,name=validation,proto3,oneof"`
}

func (*EditRelayPropsOpenResponse_Error_Validation) isEditRelayPropsOpenResponse_Error_Reason() {}

// Ошибка запроса на установку настроек DTMF
type EditRelayPropsDtmfResponse_Error struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Причина ошибки
	//
	// Types that are assignable to Reason:
	//
	//	*EditRelayPropsDtmfResponse_Error_Validation
	Reason isEditRelayPropsDtmfResponse_Error_Reason `protobuf_oneof:"reason"`
}

func (x *EditRelayPropsDtmfResponse_Error) Reset() {
	*x = EditRelayPropsDtmfResponse_Error{}
	if protoimpl.UnsafeEnabled {
		mi := &file_deviceapis_device_v1_deviceapis_device_relay_v1_proto_msgTypes[23]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

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

func (*EditRelayPropsDtmfResponse_Error) ProtoMessage() {}

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

func (m *EditRelayPropsDtmfResponse_Error) GetReason() isEditRelayPropsDtmfResponse_Error_Reason {
	if m != nil {
		return m.Reason
	}
	return nil
}

func (x *EditRelayPropsDtmfResponse_Error) GetValidation() *ValidationError {
	if x, ok := x.GetReason().(*EditRelayPropsDtmfResponse_Error_Validation); ok {
		return x.Validation
	}
	return nil
}

type isEditRelayPropsDtmfResponse_Error_Reason interface {
	isEditRelayPropsDtmfResponse_Error_Reason()
}

type EditRelayPropsDtmfResponse_Error_Validation struct {
	// Ошибка валидации
	Validation *ValidationError `protobuf:"bytes,1,opt,name=validation,proto3,oneof"`
}

func (*EditRelayPropsDtmfResponse_Error_Validation) isEditRelayPropsDtmfResponse_Error_Reason() {}

var File_deviceapis_device_v1_deviceapis_device_relay_v1_proto protoreflect.FileDescriptor

var file_deviceapis_device_v1_deviceapis_device_relay_v1_proto_rawDesc = []byte{
	0x0a, 0x35, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x64, 0x65, 0x76,
	0x69, 0x63, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x61, 0x70, 0x69,
	0x73, 0x5f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x5f, 0x76,
	0x31, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x14, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x61,
	0x70, 0x69, 0x73, 0x2e, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x1a, 0x1c, 0x67,
	0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61,
	0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f,
	0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x62, 0x65,
	0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x20, 0x67, 0x6f,
	0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x66, 0x69,
	0x65, 0x6c, 0x64, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x36,
	0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x64, 0x65, 0x76, 0x69, 0x63,
	0x65, 0x2f, 0x76, 0x31, 0x2f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x61, 0x70, 0x69, 0x73, 0x5f,
	0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x5f, 0x76, 0x31,
	0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2d, 0x67,
	0x65, 0x6e, 0x2d, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2f, 0x6f, 0x70, 0x74,
	0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73,
	0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x55, 0x0a, 0x15, 0x50, 0x6f, 0x73, 0x74, 0x52, 0x65,
	0x6c, 0x61, 0x79, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12,
	0x3c, 0x0a, 0x0b, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01,
	0x20, 0x01, 0x28, 0x05, 0x42, 0x1b, 0x92, 0x41, 0x15, 0x4a, 0x01, 0x31, 0x59, 0x00, 0x00, 0x00,
	0x00, 0xc0, 0xff, 0xdf, 0x40, 0x69, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x3f, 0xe0, 0x41,
	0x02, 0x52, 0x0a, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x22, 0xc8, 0x01,
	0x0a, 0x16, 0x50, 0x6f, 0x73, 0x74, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x43, 0x6c, 0x6f, 0x73, 0x65,
	0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f,
	0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65,
	0x61, 0x70, 0x69, 0x73, 0x2e, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x50,
	0x6f, 0x73, 0x74, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x52, 0x65, 0x73,
	0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x48, 0x00, 0x52, 0x05, 0x65,
	0x72, 0x72, 0x6f, 0x72, 0x1a, 0x5a, 0x0a, 0x05, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x47, 0x0a,
	0x0a, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28,
	0x0b, 0x32, 0x25, 0x2e, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x64,
	0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74,
	0x69, 0x6f, 0x6e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x48, 0x00, 0x52, 0x0a, 0x76, 0x61, 0x6c, 0x69,
	0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x08, 0x0a, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e,
	0x42, 0x06, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0x5f, 0x0a, 0x1f, 0x50, 0x6f, 0x73, 0x74,
	0x52, 0x65, 0x6c, 0x61, 0x79, 0x4f, 0x70, 0x65, 0x6e, 0x50, 0x65, 0x72, 0x6d, 0x61, 0x6e, 0x65,
	0x6e, 0x74, 0x6c, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3c, 0x0a, 0x0b, 0x72,
	0x65, 0x6c, 0x61, 0x79, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05,
	0x42, 0x1b, 0x92, 0x41, 0x15, 0x4a, 0x01, 0x31, 0x59, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xdf,
	0x40, 0x69, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x3f, 0xe0, 0x41, 0x02, 0x52, 0x0a, 0x72,
	0x65, 0x6c, 0x61, 0x79, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x22, 0xdc, 0x01, 0x0a, 0x20, 0x50, 0x6f,
	0x73, 0x74, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x4f, 0x70, 0x65, 0x6e, 0x50, 0x65, 0x72, 0x6d, 0x61,
	0x6e, 0x65, 0x6e, 0x74, 0x6c, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x54,
	0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3c, 0x2e,
	0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x64, 0x65, 0x76, 0x69, 0x63,
	0x65, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x4f, 0x70,
	0x65, 0x6e, 0x50, 0x65, 0x72, 0x6d, 0x61, 0x6e, 0x65, 0x6e, 0x74, 0x6c, 0x79, 0x52, 0x65, 0x73,
	0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x48, 0x00, 0x52, 0x05, 0x65,
	0x72, 0x72, 0x6f, 0x72, 0x1a, 0x5a, 0x0a, 0x05, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x47, 0x0a,
	0x0a, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28,
	0x0b, 0x32, 0x25, 0x2e, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x64,
	0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74,
	0x69, 0x6f, 0x6e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x48, 0x00, 0x52, 0x0a, 0x76, 0x61, 0x6c, 0x69,
	0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x08, 0x0a, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e,
	0x42, 0x06, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0x9b, 0x01, 0x0a, 0x14, 0x50, 0x6f, 0x73,
	0x74, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x4f, 0x70, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
	0x74, 0x12, 0x3c, 0x0a, 0x0b, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78,
	0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x42, 0x1b, 0x92, 0x41, 0x15, 0x4a, 0x01, 0x31, 0x59, 0x00,
	0x00, 0x00, 0x00, 0xc0, 0xff, 0xdf, 0x40, 0x69, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x3f,
	0xe0, 0x41, 0x02, 0x52, 0x0a, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12,
	0x45, 0x0a, 0x11, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x5f,
	0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x42, 0x19, 0x92, 0x41, 0x16, 0x4a,
	0x02, 0x31, 0x30, 0x59, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x69, 0x40, 0x69, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0xf0, 0x3f, 0x52, 0x0f, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x4f, 0x70,
	0x65, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x22, 0xc6, 0x01, 0x0a, 0x15, 0x50, 0x6f, 0x73, 0x74, 0x52,
	0x65, 0x6c, 0x61, 0x79, 0x4f, 0x70, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
	0x12, 0x49, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32,
	0x31, 0x2e, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x64, 0x65, 0x76,
	0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x52, 0x65, 0x6c, 0x61, 0x79,
	0x4f, 0x70, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x45, 0x72, 0x72,
	0x6f, 0x72, 0x48, 0x00, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x1a, 0x5a, 0x0a, 0x05, 0x45,
	0x72, 0x72, 0x6f, 0x72, 0x12, 0x47, 0x0a, 0x0a, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69,
	0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x64, 0x65, 0x76, 0x69, 0x63,
	0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e,
	0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x48,
	0x00, 0x52, 0x0a, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x08, 0x0a,
	0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x42, 0x06, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22,
	0x92, 0x01, 0x0a, 0x19, 0x45, 0x64, 0x69, 0x74, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x50, 0x72, 0x6f,
	0x70, 0x73, 0x4f, 0x70, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a,
	0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x64, 0x65,
	0x76, 0x69, 0x63, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e,
	0x76, 0x31, 0x2e, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x4f, 0x70, 0x65, 0x6e, 0x42, 0x03, 0xe0, 0x41,
	0x02, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x3b, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74,
	0x65, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67,
	0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46,
	0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65,
	0x4d, 0x61, 0x73, 0x6b, 0x22, 0x92, 0x01, 0x0a, 0x19, 0x45, 0x64, 0x69, 0x74, 0x52, 0x65, 0x6c,
	0x61, 0x79, 0x50, 0x72, 0x6f, 0x70, 0x73, 0x44, 0x74, 0x6d, 0x66, 0x52, 0x65, 0x71, 0x75, 0x65,
	0x73, 0x74, 0x12, 0x38, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b,
	0x32, 0x1f, 0x2e, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x64, 0x65,
	0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x44, 0x74, 0x6d,
	0x66, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x3b, 0x0a, 0x0b,
	0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28,
	0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
	0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x52, 0x0a, 0x75,
	0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x61, 0x73, 0x6b, 0x22, 0xd0, 0x01, 0x0a, 0x1a, 0x45, 0x64,
	0x69, 0x74, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x50, 0x72, 0x6f, 0x70, 0x73, 0x4f, 0x70, 0x65, 0x6e,
	0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4e, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f,
	0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65,
	0x61, 0x70, 0x69, 0x73, 0x2e, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x45,
	0x64, 0x69, 0x74, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x50, 0x72, 0x6f, 0x70, 0x73, 0x4f, 0x70, 0x65,
	0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x48,
	0x00, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x1a, 0x5a, 0x0a, 0x05, 0x45, 0x72, 0x72, 0x6f,
	0x72, 0x12, 0x47, 0x0a, 0x0a, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18,
	0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x61, 0x70,
	0x69, 0x73, 0x2e, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x61, 0x6c,
	0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x48, 0x00, 0x52, 0x0a,
	0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x08, 0x0a, 0x06, 0x72, 0x65,
	0x61, 0x73, 0x6f, 0x6e, 0x42, 0x06, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0xd0, 0x01, 0x0a,
	0x1a, 0x45, 0x64, 0x69, 0x74, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x50, 0x72, 0x6f, 0x70, 0x73, 0x44,
	0x74, 0x6d, 0x66, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4e, 0x0a, 0x05, 0x65,
	0x72, 0x72, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x64, 0x65, 0x76,
	0x69, 0x63, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76,
	0x31, 0x2e, 0x45, 0x64, 0x69, 0x74, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x50, 0x72, 0x6f, 0x70, 0x73,
	0x44, 0x74, 0x6d, 0x66, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x45, 0x72, 0x72,
	0x6f, 0x72, 0x48, 0x00, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x1a, 0x5a, 0x0a, 0x05, 0x45,
	0x72, 0x72, 0x6f, 0x72, 0x12, 0x47, 0x0a, 0x0a, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69,
	0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x64, 0x65, 0x76, 0x69, 0x63,
	0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e,
	0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x48,
	0x00, 0x52, 0x0a, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x08, 0x0a,
	0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x42, 0x06, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22,
	0x1b, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x53, 0x74, 0x61, 0x74, 0x75,
	0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0xfd, 0x01, 0x0a,
	0x0a, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x3c, 0x0a, 0x0b, 0x72,
	0x65, 0x6c, 0x61, 0x79, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05,
	0x42, 0x1b, 0x92, 0x41, 0x15, 0x4a, 0x01, 0x31, 0x59, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xdf,
	0x40, 0x69, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x3f, 0xe0, 0x41, 0x02, 0x52, 0x0a, 0x72,
	0x65, 0x6c, 0x61, 0x79, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x58, 0x0a, 0x0a, 0x73, 0x74, 0x61,
	0x74, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2a, 0x2e,
	0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x64, 0x65, 0x76, 0x69, 0x63,
	0x65, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2e,
	0x53, 0x74, 0x61, 0x74, 0x65, 0x54, 0x79, 0x70, 0x65, 0x42, 0x0d, 0x92, 0x41, 0x0a, 0x4a, 0x08,
	0x22, 0x43, 0x4c, 0x4f, 0x53, 0x45, 0x44, 0x22, 0x52, 0x09, 0x73, 0x74, 0x61, 0x74, 0x65, 0x54,
	0x79, 0x70, 0x65, 0x22, 0x57, 0x0a, 0x09, 0x53, 0x74, 0x61, 0x74, 0x65, 0x54, 0x79, 0x70, 0x65,
	0x12, 0x16, 0x0a, 0x12, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55,
	0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x12, 0x0a, 0x0e, 0x4f, 0x50, 0x45, 0x4e,
	0x5f, 0x54, 0x45, 0x4d, 0x50, 0x4f, 0x52, 0x41, 0x52, 0x59, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06,
	0x43, 0x4c, 0x4f, 0x53, 0x45, 0x44, 0x10, 0x02, 0x12, 0x12, 0x0a, 0x0e, 0x4f, 0x50, 0x45, 0x4e,
	0x5f, 0x50, 0x45, 0x52, 0x4d, 0x41, 0x4e, 0x45, 0x4e, 0x54, 0x10, 0x03, 0x22, 0x52, 0x0a, 0x1a,
	0x47, 0x65, 0x74, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4c, 0x69,
	0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x34, 0x0a, 0x04, 0x64, 0x61,
	0x74, 0x61, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x64, 0x65, 0x76, 0x69, 0x63,
	0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e,
	0x52, 0x65, 0x6c, 0x61, 0x79, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61,
	0x22, 0x19, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x4f, 0x70, 0x65, 0x6e,
	0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x19, 0x0a, 0x17, 0x47,
	0x65, 0x74, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x44, 0x74, 0x6d, 0x66, 0x4c, 0x69, 0x73, 0x74, 0x52,
	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x80, 0x03, 0x0a, 0x09, 0x52, 0x65, 0x6c, 0x61, 0x79,
	0x4f, 0x70, 0x65, 0x6e, 0x12, 0x3c, 0x0a, 0x0b, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x5f, 0x69, 0x6e,
	0x64, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x42, 0x1b, 0x92, 0x41, 0x15, 0x4a, 0x01,
	0x31, 0x59, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xdf, 0x40, 0x69, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0xf0, 0x3f, 0xe0, 0x41, 0x02, 0x52, 0x0a, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x49, 0x6e, 0x64,
	0x65, 0x78, 0x12, 0x5d, 0x0a, 0x09, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18,
	0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x28, 0x2e, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x61, 0x70,
	0x69, 0x73, 0x2e, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x6c,
	0x61, 0x79, 0x4f, 0x70, 0x65, 0x6e, 0x2e, 0x4c, 0x6f, 0x63, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x42,
	0x16, 0x92, 0x41, 0x13, 0x4a, 0x11, 0x22, 0x45, 0x4c, 0x45, 0x43, 0x54, 0x52, 0x4f, 0x4d, 0x41,
	0x47, 0x4e, 0x45, 0x54, 0x49, 0x43, 0x22, 0x52, 0x08, 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x79, 0x70,
	0x65, 0x12, 0x45, 0x0a, 0x11, 0x6f, 0x70, 0x65, 0x6e, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x67,
	0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x42, 0x19, 0x92, 0x41,
	0x16, 0x4a, 0x02, 0x31, 0x30, 0x59, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x69, 0x40, 0x69, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x3f, 0x52, 0x0f, 0x6f, 0x70, 0x65, 0x6e, 0x54, 0x69, 0x6d,
	0x65, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x12, 0x40, 0x0a, 0x13, 0x6f, 0x70, 0x65, 0x6e,
	0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x65, 0x6d, 0x65, 0x72, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x18,
	0x04, 0x20, 0x01, 0x28, 0x05, 0x42, 0x10, 0x92, 0x41, 0x0d, 0x4a, 0x02, 0x31, 0x30, 0x59, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x20, 0xac, 0x40, 0x52, 0x11, 0x6f, 0x70, 0x65, 0x6e, 0x54, 0x69, 0x6d,
	0x65, 0x45, 0x6d, 0x65, 0x72, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x22, 0x4d, 0x0a, 0x08, 0x4c, 0x6f,
	0x63, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x12, 0x15, 0x0a, 0x11, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x54,
	0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x13, 0x0a,
	0x0f, 0x45, 0x4c, 0x45, 0x43, 0x54, 0x52, 0x4f, 0x4d, 0x41, 0x47, 0x4e, 0x45, 0x54, 0x49, 0x43,
	0x10, 0x01, 0x12, 0x15, 0x0a, 0x11, 0x45, 0x4c, 0x45, 0x43, 0x54, 0x52, 0x4f, 0x4d, 0x45, 0x43,
	0x48, 0x41, 0x4e, 0x49, 0x43, 0x41, 0x4c, 0x10, 0x02, 0x22, 0x4f, 0x0a, 0x18, 0x47, 0x65, 0x74,
	0x52, 0x65, 0x6c, 0x61, 0x79, 0x4f, 0x70, 0x65, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73,
	0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x33, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20,
	0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x61, 0x70, 0x69, 0x73,
	0x2e, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x6c, 0x61, 0x79,
	0x4f, 0x70, 0x65, 0x6e, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x84, 0x01, 0x0a, 0x09, 0x52,
	0x65, 0x6c, 0x61, 0x79, 0x44, 0x74, 0x6d, 0x66, 0x12, 0x3c, 0x0a, 0x0b, 0x72, 0x65, 0x6c, 0x61,
	0x79, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x42, 0x1b, 0x92,
	0x41, 0x15, 0x4a, 0x01, 0x31, 0x59, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xdf, 0x40, 0x69, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x3f, 0xe0, 0x41, 0x02, 0x52, 0x0a, 0x72, 0x65, 0x6c, 0x61,
	0x79, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x39, 0x0a, 0x09, 0x64, 0x74, 0x6d, 0x66, 0x5f, 0x63,
	0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x1c, 0x92, 0x41, 0x19, 0x4a, 0x01,
	0x35, 0x78, 0x01, 0x80, 0x01, 0x01, 0x8a, 0x01, 0x0e, 0x5e, 0x5b, 0x30, 0x2d, 0x39, 0x2a, 0x23,
	0x5d, 0x7b, 0x31, 0x2c, 0x31, 0x7d, 0x24, 0x52, 0x08, 0x64, 0x74, 0x6d, 0x66, 0x43, 0x6f, 0x64,
	0x65, 0x22, 0x4f, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x44, 0x74, 0x6d,
	0x66, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x33, 0x0a,
	0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x64, 0x65,
	0x76, 0x69, 0x63, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e,
	0x76, 0x31, 0x2e, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x44, 0x74, 0x6d, 0x66, 0x52, 0x04, 0x64, 0x61,
	0x74, 0x61, 0x32, 0xea, 0x0a, 0x0a, 0x0c, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x53, 0x65, 0x72, 0x76,
	0x69, 0x63, 0x65, 0x12, 0x9d, 0x01, 0x0a, 0x0e, 0x50, 0x6f, 0x73, 0x74, 0x52, 0x65, 0x6c, 0x61,
	0x79, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x12, 0x2b, 0x2e, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x61,
	0x70, 0x69, 0x73, 0x2e, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f,
	0x73, 0x74, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75,
	0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x61, 0x70, 0x69, 0x73,
	0x2e, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x52,
	0x65, 0x6c, 0x61, 0x79, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
	0x65, 0x22, 0x30, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2a, 0x22, 0x28, 0x2f, 0x64, 0x65, 0x76, 0x69,
	0x63, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x2f,
	0x7b, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x7d, 0x2f, 0x63, 0x6c,
	0x6f, 0x73, 0x65, 0x12, 0x9c, 0x01, 0x0a, 0x0d, 0x50, 0x6f, 0x73, 0x74, 0x52, 0x65, 0x6c, 0x61,
	0x79, 0x4f, 0x70, 0x65, 0x6e, 0x12, 0x2a, 0x2e, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x61, 0x70,
	0x69, 0x73, 0x2e, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73,
	0x74, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x4f, 0x70, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
	0x74, 0x1a, 0x2b, 0x2e, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x64,
	0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x52, 0x65, 0x6c,
	0x61, 0x79, 0x4f, 0x70, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x32,
	0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2c, 0x3a, 0x01, 0x2a, 0x22, 0x27, 0x2f, 0x64, 0x65, 0x76, 0x69,
	0x63, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x2f,
	0x7b, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x7d, 0x2f, 0x6f, 0x70,
	0x65, 0x6e, 0x12, 0xc6, 0x01, 0x0a, 0x18, 0x50, 0x6f, 0x73, 0x74, 0x52, 0x65, 0x6c, 0x61, 0x79,
	0x4f, 0x70, 0x65, 0x6e, 0x50, 0x65, 0x72, 0x6d, 0x61, 0x6e, 0x65, 0x6e, 0x74, 0x6c, 0x79, 0x12,
	0x35, 0x2e, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x64, 0x65, 0x76,
	0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x52, 0x65, 0x6c, 0x61, 0x79,
	0x4f, 0x70, 0x65, 0x6e, 0x50, 0x65, 0x72, 0x6d, 0x61, 0x6e, 0x65, 0x6e, 0x74, 0x6c, 0x79, 0x52,
	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x36, 0x2e, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x61,
	0x70, 0x69, 0x73, 0x2e, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f,
	0x73, 0x74, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x4f, 0x70, 0x65, 0x6e, 0x50, 0x65, 0x72, 0x6d, 0x61,
	0x6e, 0x65, 0x6e, 0x74, 0x6c, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3b,
	0x82, 0xd3, 0xe4, 0x93, 0x02, 0x35, 0x22, 0x33, 0x2f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2f,
	0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x2f, 0x7b, 0x72, 0x65,
	0x6c, 0x61, 0x79, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x7d, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x5f,
	0x70, 0x65, 0x72, 0x6d, 0x61, 0x6e, 0x65, 0x6e, 0x74, 0x6c, 0x79, 0x12, 0xb9, 0x01, 0x0a, 0x12,
	0x45, 0x64, 0x69, 0x74, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x50, 0x72, 0x6f, 0x70, 0x73, 0x4f, 0x70,
	0x65, 0x6e, 0x12, 0x2f, 0x2e, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e,
	0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x64, 0x69, 0x74, 0x52, 0x65,
	0x6c, 0x61, 0x79, 0x50, 0x72, 0x6f, 0x70, 0x73, 0x4f, 0x70, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75,
	0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x61, 0x70, 0x69, 0x73,
	0x2e, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x64, 0x69, 0x74, 0x52,
	0x65, 0x6c, 0x61, 0x79, 0x50, 0x72, 0x6f, 0x70, 0x73, 0x4f, 0x70, 0x65, 0x6e, 0x52, 0x65, 0x73,
	0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x40, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3a, 0x3a, 0x04, 0x64,
	0x61, 0x74, 0x61, 0x32, 0x32, 0x2f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x61, 0x70, 0x69,
	0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x2f, 0x7b, 0x64, 0x61, 0x74, 0x61, 0x2e,
	0x72, 0x65, 0x6c, 0x61, 0x79, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x7d, 0x2f, 0x70, 0x72, 0x6f,
	0x70, 0x73, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x12, 0x99, 0x01, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x52,
	0x65, 0x6c, 0x61, 0x79, 0x4f, 0x70, 0x65, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x2d, 0x2e, 0x64,
	0x65, 0x76, 0x69, 0x63, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65,
	0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x4f, 0x70, 0x65, 0x6e,
	0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x64, 0x65,
	0x76, 0x69, 0x63, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e,
	0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x4f, 0x70, 0x65, 0x6e, 0x4c,
	0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x26, 0x82, 0xd3, 0xe4,
	0x93, 0x02, 0x20, 0x12, 0x1e, 0x2f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x61, 0x70, 0x69,
	0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x2f, 0x6c,
	0x69, 0x73, 0x74, 0x12, 0xb9, 0x01, 0x0a, 0x12, 0x45, 0x64, 0x69, 0x74, 0x52, 0x65, 0x6c, 0x61,
	0x79, 0x50, 0x72, 0x6f, 0x70, 0x73, 0x44, 0x74, 0x6d, 0x66, 0x12, 0x2f, 0x2e, 0x64, 0x65, 0x76,
	0x69, 0x63, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76,
	0x31, 0x2e, 0x45, 0x64, 0x69, 0x74, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x50, 0x72, 0x6f, 0x70, 0x73,
	0x44, 0x74, 0x6d, 0x66, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x64, 0x65,
	0x76, 0x69, 0x63, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e,
	0x76, 0x31, 0x2e, 0x45, 0x64, 0x69, 0x74, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x50, 0x72, 0x6f, 0x70,
	0x73, 0x44, 0x74, 0x6d, 0x66, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x40, 0x82,
	0xd3, 0xe4, 0x93, 0x02, 0x3a, 0x3a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x32, 0x32, 0x2f, 0x64, 0x65,
	0x76, 0x69, 0x63, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x6c, 0x61,
	0x79, 0x2f, 0x7b, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x5f, 0x69, 0x6e,
	0x64, 0x65, 0x78, 0x7d, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x73, 0x2f, 0x64, 0x74, 0x6d, 0x66, 0x12,
	0x99, 0x01, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x44, 0x74, 0x6d, 0x66,
	0x4c, 0x69, 0x73, 0x74, 0x12, 0x2d, 0x2e, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x61, 0x70, 0x69,
	0x73, 0x2e, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52,
	0x65, 0x6c, 0x61, 0x79, 0x44, 0x74, 0x6d, 0x66, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75,
	0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x61, 0x70, 0x69, 0x73,
	0x2e, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65,
	0x6c, 0x61, 0x79, 0x44, 0x74, 0x6d, 0x66, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f,
	0x6e, 0x73, 0x65, 0x22, 0x26, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20, 0x12, 0x1e, 0x2f, 0x64, 0x65,
	0x76, 0x69, 0x63, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x6c, 0x61,
	0x79, 0x2f, 0x64, 0x74, 0x6d, 0x66, 0x2f, 0x6c, 0x69, 0x73, 0x74, 0x12, 0xa1, 0x01, 0x0a, 0x12,
	0x47, 0x65, 0x74, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4c, 0x69,
	0x73, 0x74, 0x12, 0x2f, 0x2e, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e,
	0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x6c,
	0x61, 0x79, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75,
	0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x61, 0x70, 0x69, 0x73,
	0x2e, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65,
	0x6c, 0x61, 0x79, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73,
	0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x28, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x22, 0x12, 0x20, 0x2f,
	0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65,
	0x6c, 0x61, 0x79, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x2f, 0x6c, 0x69, 0x73, 0x74, 0x42,
	0xaf, 0x01, 0x0a, 0x17, 0x72, 0x75, 0x2e, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x61, 0x70, 0x69,
	0x73, 0x2e, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x42, 0x17, 0x44, 0x65, 0x76,
	0x69, 0x63, 0x65, 0x61, 0x70, 0x69, 0x73, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x56, 0x31, 0x50,
	0x72, 0x6f, 0x74, 0x6f, 0x48, 0x03, 0x50, 0x00, 0x5a, 0x15, 0x2f, 0x64, 0x65, 0x76, 0x69, 0x63,
	0x65, 0x61, 0x70, 0x69, 0x73, 0x5f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x76, 0x31, 0xd8,
	0x01, 0x01, 0xf8, 0x01, 0x01, 0xa2, 0x02, 0x12, 0x44, 0x45, 0x56, 0x49, 0x43, 0x45, 0x41, 0x50,
	0x49, 0x53, 0x44, 0x45, 0x56, 0x49, 0x43, 0x45, 0x56, 0x31, 0xaa, 0x02, 0x14, 0x44, 0x65, 0x76,
	0x69, 0x63, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x56,
	0x31, 0xca, 0x02, 0x14, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x61, 0x70, 0x69, 0x73, 0x5c, 0x44,
	0x65, 0x76, 0x69, 0x63, 0x65, 0x5c, 0x56, 0x31, 0xea, 0x02, 0x16, 0x44, 0x65, 0x76, 0x69, 0x63,
	0x65, 0x61, 0x70, 0x69, 0x73, 0x3a, 0x3a, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x3a, 0x3a, 0x56,
	0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
}

var (
	file_deviceapis_device_v1_deviceapis_device_relay_v1_proto_rawDescOnce sync.Once
	file_deviceapis_device_v1_deviceapis_device_relay_v1_proto_rawDescData = file_deviceapis_device_v1_deviceapis_device_relay_v1_proto_rawDesc
)

func file_deviceapis_device_v1_deviceapis_device_relay_v1_proto_rawDescGZIP() []byte {
	file_deviceapis_device_v1_deviceapis_device_relay_v1_proto_rawDescOnce.Do(func() {
		file_deviceapis_device_v1_deviceapis_device_relay_v1_proto_rawDescData = protoimpl.X.CompressGZIP(file_deviceapis_device_v1_deviceapis_device_relay_v1_proto_rawDescData)
	})
	return file_deviceapis_device_v1_deviceapis_device_relay_v1_proto_rawDescData
}

var file_deviceapis_device_v1_deviceapis_device_relay_v1_proto_enumTypes = make([]protoimpl.EnumInfo, 2)
var file_deviceapis_device_v1_deviceapis_device_relay_v1_proto_msgTypes = make([]protoimpl.MessageInfo, 24)
var file_deviceapis_device_v1_deviceapis_device_relay_v1_proto_goTypes = []interface{}{
	(RelayState_StateType)(0),                      // 0: deviceapis.device.v1.RelayState.StateType
	(RelayOpen_LockType)(0),                        // 1: deviceapis.device.v1.RelayOpen.LockType
	(*PostRelayCloseRequest)(nil),                  // 2: deviceapis.device.v1.PostRelayCloseRequest
	(*PostRelayCloseResponse)(nil),                 // 3: deviceapis.device.v1.PostRelayCloseResponse
	(*PostRelayOpenPermanentlyRequest)(nil),        // 4: deviceapis.device.v1.PostRelayOpenPermanentlyRequest
	(*PostRelayOpenPermanentlyResponse)(nil),       // 5: deviceapis.device.v1.PostRelayOpenPermanentlyResponse
	(*PostRelayOpenRequest)(nil),                   // 6: deviceapis.device.v1.PostRelayOpenRequest
	(*PostRelayOpenResponse)(nil),                  // 7: deviceapis.device.v1.PostRelayOpenResponse
	(*EditRelayPropsOpenRequest)(nil),              // 8: deviceapis.device.v1.EditRelayPropsOpenRequest
	(*EditRelayPropsDtmfRequest)(nil),              // 9: deviceapis.device.v1.EditRelayPropsDtmfRequest
	(*EditRelayPropsOpenResponse)(nil),             // 10: deviceapis.device.v1.EditRelayPropsOpenResponse
	(*EditRelayPropsDtmfResponse)(nil),             // 11: deviceapis.device.v1.EditRelayPropsDtmfResponse
	(*GetRelayStatusListRequest)(nil),              // 12: deviceapis.device.v1.GetRelayStatusListRequest
	(*RelayState)(nil),                             // 13: deviceapis.device.v1.RelayState
	(*GetRelayStatusListResponse)(nil),             // 14: deviceapis.device.v1.GetRelayStatusListResponse
	(*GetRelayOpenListRequest)(nil),                // 15: deviceapis.device.v1.GetRelayOpenListRequest
	(*GetRelayDtmfListRequest)(nil),                // 16: deviceapis.device.v1.GetRelayDtmfListRequest
	(*RelayOpen)(nil),                              // 17: deviceapis.device.v1.RelayOpen
	(*GetRelayOpenListResponse)(nil),               // 18: deviceapis.device.v1.GetRelayOpenListResponse
	(*RelayDtmf)(nil),                              // 19: deviceapis.device.v1.RelayDtmf
	(*GetRelayDtmfListResponse)(nil),               // 20: deviceapis.device.v1.GetRelayDtmfListResponse
	(*PostRelayCloseResponse_Error)(nil),           // 21: deviceapis.device.v1.PostRelayCloseResponse.Error
	(*PostRelayOpenPermanentlyResponse_Error)(nil), // 22: deviceapis.device.v1.PostRelayOpenPermanentlyResponse.Error
	(*PostRelayOpenResponse_Error)(nil),            // 23: deviceapis.device.v1.PostRelayOpenResponse.Error
	(*EditRelayPropsOpenResponse_Error)(nil),       // 24: deviceapis.device.v1.EditRelayPropsOpenResponse.Error
	(*EditRelayPropsDtmfResponse_Error)(nil),       // 25: deviceapis.device.v1.EditRelayPropsDtmfResponse.Error
	(*fieldmaskpb.FieldMask)(nil),                  // 26: google.protobuf.FieldMask
	(*ValidationError)(nil),                        // 27: deviceapis.device.v1.ValidationError
}
var file_deviceapis_device_v1_deviceapis_device_relay_v1_proto_depIdxs = []int32{
	21, // 0: deviceapis.device.v1.PostRelayCloseResponse.error:type_name -> deviceapis.device.v1.PostRelayCloseResponse.Error
	22, // 1: deviceapis.device.v1.PostRelayOpenPermanentlyResponse.error:type_name -> deviceapis.device.v1.PostRelayOpenPermanentlyResponse.Error
	23, // 2: deviceapis.device.v1.PostRelayOpenResponse.error:type_name -> deviceapis.device.v1.PostRelayOpenResponse.Error
	17, // 3: deviceapis.device.v1.EditRelayPropsOpenRequest.data:type_name -> deviceapis.device.v1.RelayOpen
	26, // 4: deviceapis.device.v1.EditRelayPropsOpenRequest.update_mask:type_name -> google.protobuf.FieldMask
	19, // 5: deviceapis.device.v1.EditRelayPropsDtmfRequest.data:type_name -> deviceapis.device.v1.RelayDtmf
	26, // 6: deviceapis.device.v1.EditRelayPropsDtmfRequest.update_mask:type_name -> google.protobuf.FieldMask
	24, // 7: deviceapis.device.v1.EditRelayPropsOpenResponse.error:type_name -> deviceapis.device.v1.EditRelayPropsOpenResponse.Error
	25, // 8: deviceapis.device.v1.EditRelayPropsDtmfResponse.error:type_name -> deviceapis.device.v1.EditRelayPropsDtmfResponse.Error
	0,  // 9: deviceapis.device.v1.RelayState.state_type:type_name -> deviceapis.device.v1.RelayState.StateType
	13, // 10: deviceapis.device.v1.GetRelayStatusListResponse.data:type_name -> deviceapis.device.v1.RelayState
	1,  // 11: deviceapis.device.v1.RelayOpen.lock_type:type_name -> deviceapis.device.v1.RelayOpen.LockType
	17, // 12: deviceapis.device.v1.GetRelayOpenListResponse.data:type_name -> deviceapis.device.v1.RelayOpen
	19, // 13: deviceapis.device.v1.GetRelayDtmfListResponse.data:type_name -> deviceapis.device.v1.RelayDtmf
	27, // 14: deviceapis.device.v1.PostRelayCloseResponse.Error.validation:type_name -> deviceapis.device.v1.ValidationError
	27, // 15: deviceapis.device.v1.PostRelayOpenPermanentlyResponse.Error.validation:type_name -> deviceapis.device.v1.ValidationError
	27, // 16: deviceapis.device.v1.PostRelayOpenResponse.Error.validation:type_name -> deviceapis.device.v1.ValidationError
	27, // 17: deviceapis.device.v1.EditRelayPropsOpenResponse.Error.validation:type_name -> deviceapis.device.v1.ValidationError
	27, // 18: deviceapis.device.v1.EditRelayPropsDtmfResponse.Error.validation:type_name -> deviceapis.device.v1.ValidationError
	2,  // 19: deviceapis.device.v1.RelayService.PostRelayClose:input_type -> deviceapis.device.v1.PostRelayCloseRequest
	6,  // 20: deviceapis.device.v1.RelayService.PostRelayOpen:input_type -> deviceapis.device.v1.PostRelayOpenRequest
	4,  // 21: deviceapis.device.v1.RelayService.PostRelayOpenPermanently:input_type -> deviceapis.device.v1.PostRelayOpenPermanentlyRequest
	8,  // 22: deviceapis.device.v1.RelayService.EditRelayPropsOpen:input_type -> deviceapis.device.v1.EditRelayPropsOpenRequest
	15, // 23: deviceapis.device.v1.RelayService.GetRelayOpenList:input_type -> deviceapis.device.v1.GetRelayOpenListRequest
	9,  // 24: deviceapis.device.v1.RelayService.EditRelayPropsDtmf:input_type -> deviceapis.device.v1.EditRelayPropsDtmfRequest
	16, // 25: deviceapis.device.v1.RelayService.GetRelayDtmfList:input_type -> deviceapis.device.v1.GetRelayDtmfListRequest
	12, // 26: deviceapis.device.v1.RelayService.GetRelayStatusList:input_type -> deviceapis.device.v1.GetRelayStatusListRequest
	3,  // 27: deviceapis.device.v1.RelayService.PostRelayClose:output_type -> deviceapis.device.v1.PostRelayCloseResponse
	7,  // 28: deviceapis.device.v1.RelayService.PostRelayOpen:output_type -> deviceapis.device.v1.PostRelayOpenResponse
	5,  // 29: deviceapis.device.v1.RelayService.PostRelayOpenPermanently:output_type -> deviceapis.device.v1.PostRelayOpenPermanentlyResponse
	10, // 30: deviceapis.device.v1.RelayService.EditRelayPropsOpen:output_type -> deviceapis.device.v1.EditRelayPropsOpenResponse
	18, // 31: deviceapis.device.v1.RelayService.GetRelayOpenList:output_type -> deviceapis.device.v1.GetRelayOpenListResponse
	11, // 32: deviceapis.device.v1.RelayService.EditRelayPropsDtmf:output_type -> deviceapis.device.v1.EditRelayPropsDtmfResponse
	20, // 33: deviceapis.device.v1.RelayService.GetRelayDtmfList:output_type -> deviceapis.device.v1.GetRelayDtmfListResponse
	14, // 34: deviceapis.device.v1.RelayService.GetRelayStatusList:output_type -> deviceapis.device.v1.GetRelayStatusListResponse
	27, // [27:35] is the sub-list for method output_type
	19, // [19:27] is the sub-list for method input_type
	19, // [19:19] is the sub-list for extension type_name
	19, // [19:19] is the sub-list for extension extendee
	0,  // [0:19] is the sub-list for field type_name
}

func init() { file_deviceapis_device_v1_deviceapis_device_relay_v1_proto_init() }
func file_deviceapis_device_v1_deviceapis_device_relay_v1_proto_init() {
	if File_deviceapis_device_v1_deviceapis_device_relay_v1_proto != nil {
		return
	}
	file_deviceapis_device_v1_deviceapis_device_common_v1_proto_init()
	if !protoimpl.UnsafeEnabled {
		file_deviceapis_device_v1_deviceapis_device_relay_v1_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*PostRelayCloseRequest); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_deviceapis_device_v1_deviceapis_device_relay_v1_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*PostRelayCloseResponse); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_deviceapis_device_v1_deviceapis_device_relay_v1_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*PostRelayOpenPermanentlyRequest); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_deviceapis_device_v1_deviceapis_device_relay_v1_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*PostRelayOpenPermanentlyResponse); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_deviceapis_device_v1_deviceapis_device_relay_v1_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*PostRelayOpenRequest); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_deviceapis_device_v1_deviceapis_device_relay_v1_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*PostRelayOpenResponse); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_deviceapis_device_v1_deviceapis_device_relay_v1_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*EditRelayPropsOpenRequest); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_deviceapis_device_v1_deviceapis_device_relay_v1_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*EditRelayPropsDtmfRequest); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_deviceapis_device_v1_deviceapis_device_relay_v1_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*EditRelayPropsOpenResponse); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_deviceapis_device_v1_deviceapis_device_relay_v1_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*EditRelayPropsDtmfResponse); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_deviceapis_device_v1_deviceapis_device_relay_v1_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*GetRelayStatusListRequest); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_deviceapis_device_v1_deviceapis_device_relay_v1_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*RelayState); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_deviceapis_device_v1_deviceapis_device_relay_v1_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*GetRelayStatusListResponse); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_deviceapis_device_v1_deviceapis_device_relay_v1_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*GetRelayOpenListRequest); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_deviceapis_device_v1_deviceapis_device_relay_v1_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*GetRelayDtmfListRequest); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_deviceapis_device_v1_deviceapis_device_relay_v1_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*RelayOpen); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_deviceapis_device_v1_deviceapis_device_relay_v1_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*GetRelayOpenListResponse); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_deviceapis_device_v1_deviceapis_device_relay_v1_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*RelayDtmf); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_deviceapis_device_v1_deviceapis_device_relay_v1_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*GetRelayDtmfListResponse); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_deviceapis_device_v1_deviceapis_device_relay_v1_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*PostRelayCloseResponse_Error); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_deviceapis_device_v1_deviceapis_device_relay_v1_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*PostRelayOpenPermanentlyResponse_Error); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_deviceapis_device_v1_deviceapis_device_relay_v1_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*PostRelayOpenResponse_Error); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_deviceapis_device_v1_deviceapis_device_relay_v1_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*EditRelayPropsOpenResponse_Error); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_deviceapis_device_v1_deviceapis_device_relay_v1_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*EditRelayPropsDtmfResponse_Error); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
	}
	file_deviceapis_device_v1_deviceapis_device_relay_v1_proto_msgTypes[1].OneofWrappers = []interface{}{
		(*PostRelayCloseResponse_Error_)(nil),
	}
	file_deviceapis_device_v1_deviceapis_device_relay_v1_proto_msgTypes[3].OneofWrappers = []interface{}{
		(*PostRelayOpenPermanentlyResponse_Error_)(nil),
	}
	file_deviceapis_device_v1_deviceapis_device_relay_v1_proto_msgTypes[5].OneofWrappers = []interface{}{
		(*PostRelayOpenResponse_Error_)(nil),
	}
	file_deviceapis_device_v1_deviceapis_device_relay_v1_proto_msgTypes[8].OneofWrappers = []interface{}{
		(*EditRelayPropsOpenResponse_Error_)(nil),
	}
	file_deviceapis_device_v1_deviceapis_device_relay_v1_proto_msgTypes[9].OneofWrappers = []interface{}{
		(*EditRelayPropsDtmfResponse_Error_)(nil),
	}
	file_deviceapis_device_v1_deviceapis_device_relay_v1_proto_msgTypes[19].OneofWrappers = []interface{}{
		(*PostRelayCloseResponse_Error_Validation)(nil),
	}
	file_deviceapis_device_v1_deviceapis_device_relay_v1_proto_msgTypes[20].OneofWrappers = []interface{}{
		(*PostRelayOpenPermanentlyResponse_Error_Validation)(nil),
	}
	file_deviceapis_device_v1_deviceapis_device_relay_v1_proto_msgTypes[21].OneofWrappers = []interface{}{
		(*PostRelayOpenResponse_Error_Validation)(nil),
	}
	file_deviceapis_device_v1_deviceapis_device_relay_v1_proto_msgTypes[22].OneofWrappers = []interface{}{
		(*EditRelayPropsOpenResponse_Error_Validation)(nil),
	}
	file_deviceapis_device_v1_deviceapis_device_relay_v1_proto_msgTypes[23].OneofWrappers = []interface{}{
		(*EditRelayPropsDtmfResponse_Error_Validation)(nil),
	}
	type x struct{}
	out := protoimpl.TypeBuilder{
		File: protoimpl.DescBuilder{
			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
			RawDescriptor: file_deviceapis_device_v1_deviceapis_device_relay_v1_proto_rawDesc,
			NumEnums:      2,
			NumMessages:   24,
			NumExtensions: 0,
			NumServices:   1,
		},
		GoTypes:           file_deviceapis_device_v1_deviceapis_device_relay_v1_proto_goTypes,
		DependencyIndexes: file_deviceapis_device_v1_deviceapis_device_relay_v1_proto_depIdxs,
		EnumInfos:         file_deviceapis_device_v1_deviceapis_device_relay_v1_proto_enumTypes,
		MessageInfos:      file_deviceapis_device_v1_deviceapis_device_relay_v1_proto_msgTypes,
	}.Build()
	File_deviceapis_device_v1_deviceapis_device_relay_v1_proto = out.File
	file_deviceapis_device_v1_deviceapis_device_relay_v1_proto_rawDesc = nil
	file_deviceapis_device_v1_deviceapis_device_relay_v1_proto_goTypes = nil
	file_deviceapis_device_v1_deviceapis_device_relay_v1_proto_depIdxs = nil
}
