docker/swarmkit

View on GitHub
api/specs.pb.go

Summary

Maintainability
F
5 mos
Test Coverage
// Code generated by protoc-gen-gogo. DO NOT EDIT.
// source: github.com/docker/swarmkit/api/specs.proto

package api

import (
    fmt "fmt"
    _ "github.com/gogo/protobuf/gogoproto"
    proto "github.com/gogo/protobuf/proto"
    github_com_gogo_protobuf_sortkeys "github.com/gogo/protobuf/sortkeys"
    types "github.com/gogo/protobuf/types"
    github_com_moby_swarmkit_v2_api_deepcopy "github.com/moby/swarmkit/v2/api/deepcopy"
    io "io"
    math "math"
    math_bits "math/bits"
    reflect "reflect"
    strings "strings"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package

type NodeSpec_Membership int32

const (
    NodeMembershipPending  NodeSpec_Membership = 0
    NodeMembershipAccepted NodeSpec_Membership = 1
)

var NodeSpec_Membership_name = map[int32]string{
    0: "PENDING",
    1: "ACCEPTED",
}

var NodeSpec_Membership_value = map[string]int32{
    "PENDING":  0,
    "ACCEPTED": 1,
}

func (x NodeSpec_Membership) String() string {
    return proto.EnumName(NodeSpec_Membership_name, int32(x))
}

func (NodeSpec_Membership) EnumDescriptor() ([]byte, []int) {
    return fileDescriptor_6589acc608f7d4fd, []int{0, 0}
}

type NodeSpec_Availability int32

const (
    // Active nodes.
    NodeAvailabilityActive NodeSpec_Availability = 0
    // Paused nodes won't be considered by the scheduler, preventing any
    // further task to run on them.
    NodeAvailabilityPause NodeSpec_Availability = 1
    // Drained nodes are paused and any task already running on them will
    // be evicted.
    NodeAvailabilityDrain NodeSpec_Availability = 2
)

var NodeSpec_Availability_name = map[int32]string{
    0: "ACTIVE",
    1: "PAUSE",
    2: "DRAIN",
}

var NodeSpec_Availability_value = map[string]int32{
    "ACTIVE": 0,
    "PAUSE":  1,
    "DRAIN":  2,
}

func (x NodeSpec_Availability) String() string {
    return proto.EnumName(NodeSpec_Availability_name, int32(x))
}

func (NodeSpec_Availability) EnumDescriptor() ([]byte, []int) {
    return fileDescriptor_6589acc608f7d4fd, []int{0, 1}
}

type ContainerSpec_Isolation int32

const (
    // ISOLATION_DEFAULT uses whatever default value from the container runtime
    ContainerIsolationDefault ContainerSpec_Isolation = 0
    // ISOLATION_PROCESS forces windows container isolation
    ContainerIsolationProcess ContainerSpec_Isolation = 1
    // ISOLATION_HYPERV forces Hyper-V isolation
    ContainerIsolationHyperV ContainerSpec_Isolation = 2
)

var ContainerSpec_Isolation_name = map[int32]string{
    0: "ISOLATION_DEFAULT",
    1: "ISOLATION_PROCESS",
    2: "ISOLATION_HYPERV",
}

var ContainerSpec_Isolation_value = map[string]int32{
    "ISOLATION_DEFAULT": 0,
    "ISOLATION_PROCESS": 1,
    "ISOLATION_HYPERV":  2,
}

func (x ContainerSpec_Isolation) String() string {
    return proto.EnumName(ContainerSpec_Isolation_name, int32(x))
}

func (ContainerSpec_Isolation) EnumDescriptor() ([]byte, []int) {
    return fileDescriptor_6589acc608f7d4fd, []int{10, 0}
}

// ResolutionMode specifies the mode of resolution to use for
// internal loadbalancing between tasks which are all within
// the cluster. This is sometimes calls east-west data path.
type EndpointSpec_ResolutionMode int32

const (
    // VIP resolution mode specifies that the
    // service resolves to a logical IP and the requests
    // are sent to that logical IP. Packets hitting that
    // logical IP are load balanced to a chosen backend.
    ResolutionModeVirtualIP EndpointSpec_ResolutionMode = 0
    // DNSRR resolution mode specifies that the
    // service directly gets resolved to one of the
    // backend IP and the client directly initiates a
    // request towards the actual backend. This requires
    // that the client does not cache the DNS responses
    // when the DNS response TTL is 0.
    ResolutionModeDNSRoundRobin EndpointSpec_ResolutionMode = 1
)

var EndpointSpec_ResolutionMode_name = map[int32]string{
    0: "VIP",
    1: "DNSRR",
}

var EndpointSpec_ResolutionMode_value = map[string]int32{
    "VIP":   0,
    "DNSRR": 1,
}

func (x EndpointSpec_ResolutionMode) String() string {
    return proto.EnumName(EndpointSpec_ResolutionMode_name, int32(x))
}

func (EndpointSpec_ResolutionMode) EnumDescriptor() ([]byte, []int) {
    return fileDescriptor_6589acc608f7d4fd, []int{11, 0}
}

type VolumeSpec_VolumeAvailability int32

const (
    // Active allows a volume to be used and scheduled to. This is the
    // default state.
    VolumeAvailabilityActive VolumeSpec_VolumeAvailability = 0
    // Pause prevents volumes from having new workloads scheduled to use
    // them, even if they're already published on a Node.
    VolumeAvailabilityPause VolumeSpec_VolumeAvailability = 1
    // Drain causes existing workloads using this volume to be rescheduled,
    // causing the volume to be unpublished and removed from nodes.
    VolumeAvailabilityDrain VolumeSpec_VolumeAvailability = 2
)

var VolumeSpec_VolumeAvailability_name = map[int32]string{
    0: "ACTIVE",
    1: "PAUSE",
    2: "DRAIN",
}

var VolumeSpec_VolumeAvailability_value = map[string]int32{
    "ACTIVE": 0,
    "PAUSE":  1,
    "DRAIN":  2,
}

func (x VolumeSpec_VolumeAvailability) String() string {
    return proto.EnumName(VolumeSpec_VolumeAvailability_name, int32(x))
}

func (VolumeSpec_VolumeAvailability) EnumDescriptor() ([]byte, []int) {
    return fileDescriptor_6589acc608f7d4fd, []int{16, 0}
}

type NodeSpec struct {
    Annotations Annotations `protobuf:"bytes,1,opt,name=annotations,proto3" json:"annotations"`
    // DesiredRole defines the role the node should have.
    DesiredRole NodeRole `protobuf:"varint,2,opt,name=desired_role,json=desiredRole,proto3,enum=docker.swarmkit.v1.NodeRole" json:"desired_role,omitempty"`
    // Membership controls the admission of the node into the cluster.
    Membership NodeSpec_Membership `protobuf:"varint,3,opt,name=membership,proto3,enum=docker.swarmkit.v1.NodeSpec_Membership" json:"membership,omitempty"`
    // Availability allows a user to control the current scheduling status of a
    // node.
    Availability NodeSpec_Availability `protobuf:"varint,4,opt,name=availability,proto3,enum=docker.swarmkit.v1.NodeSpec_Availability" json:"availability,omitempty"`
}

func (m *NodeSpec) Reset()      { *m = NodeSpec{} }
func (*NodeSpec) ProtoMessage() {}
func (*NodeSpec) Descriptor() ([]byte, []int) {
    return fileDescriptor_6589acc608f7d4fd, []int{0}
}
func (m *NodeSpec) XXX_Unmarshal(b []byte) error {
    return m.Unmarshal(b)
}
func (m *NodeSpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
    if deterministic {
        return xxx_messageInfo_NodeSpec.Marshal(b, m, deterministic)
    } else {
        b = b[:cap(b)]
        n, err := m.MarshalToSizedBuffer(b)
        if err != nil {
            return nil, err
        }
        return b[:n], nil
    }
}
func (m *NodeSpec) XXX_Merge(src proto.Message) {
    xxx_messageInfo_NodeSpec.Merge(m, src)
}
func (m *NodeSpec) XXX_Size() int {
    return m.Size()
}
func (m *NodeSpec) XXX_DiscardUnknown() {
    xxx_messageInfo_NodeSpec.DiscardUnknown(m)
}

var xxx_messageInfo_NodeSpec proto.InternalMessageInfo

// ServiceSpec defines the properties of a service.
//
// A service instructs the cluster in orchestrating repeated instances of a
// template, implemented as tasks. Based on the number of instances, scheduling
// strategy and restart policy, a number of application-level behaviors can be
// defined.
type ServiceSpec struct {
    Annotations Annotations `protobuf:"bytes,1,opt,name=annotations,proto3" json:"annotations"`
    // Task defines the task template this service will spawn.
    Task TaskSpec `protobuf:"bytes,2,opt,name=task,proto3" json:"task"`
    // Types that are valid to be assigned to Mode:
    //    *ServiceSpec_Replicated
    //    *ServiceSpec_Global
    //    *ServiceSpec_ReplicatedJob
    //    *ServiceSpec_GlobalJob
    Mode isServiceSpec_Mode `protobuf_oneof:"mode"`
    // Update contains settings which affect updates.
    Update *UpdateConfig `protobuf:"bytes,6,opt,name=update,proto3" json:"update,omitempty"`
    // Rollback contains settings which affect rollbacks of updates.
    Rollback *UpdateConfig `protobuf:"bytes,9,opt,name=rollback,proto3" json:"rollback,omitempty"`
    // ServiceSpec.Networks has been deprecated and is replaced by
    // Networks field in Task (TaskSpec.Networks).
    // This field (ServiceSpec.Networks) is kept for compatibility.
    // In case TaskSpec.Networks does not exist, ServiceSpec.Networks
    // is still honored if it exists.
    Networks []*NetworkAttachmentConfig `protobuf:"bytes,7,rep,name=networks,proto3" json:"networks,omitempty"` // Deprecated: Do not use.
    // Service endpoint specifies the user provided configuration
    // to properly discover and load balance a service.
    Endpoint *EndpointSpec `protobuf:"bytes,8,opt,name=endpoint,proto3" json:"endpoint,omitempty"`
}

func (m *ServiceSpec) Reset()      { *m = ServiceSpec{} }
func (*ServiceSpec) ProtoMessage() {}
func (*ServiceSpec) Descriptor() ([]byte, []int) {
    return fileDescriptor_6589acc608f7d4fd, []int{1}
}
func (m *ServiceSpec) XXX_Unmarshal(b []byte) error {
    return m.Unmarshal(b)
}
func (m *ServiceSpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
    if deterministic {
        return xxx_messageInfo_ServiceSpec.Marshal(b, m, deterministic)
    } else {
        b = b[:cap(b)]
        n, err := m.MarshalToSizedBuffer(b)
        if err != nil {
            return nil, err
        }
        return b[:n], nil
    }
}
func (m *ServiceSpec) XXX_Merge(src proto.Message) {
    xxx_messageInfo_ServiceSpec.Merge(m, src)
}
func (m *ServiceSpec) XXX_Size() int {
    return m.Size()
}
func (m *ServiceSpec) XXX_DiscardUnknown() {
    xxx_messageInfo_ServiceSpec.DiscardUnknown(m)
}

var xxx_messageInfo_ServiceSpec proto.InternalMessageInfo

type isServiceSpec_Mode interface {
    isServiceSpec_Mode()
    MarshalTo([]byte) (int, error)
    Size() int
}

type ServiceSpec_Replicated struct {
    Replicated *ReplicatedService `protobuf:"bytes,3,opt,name=replicated,proto3,oneof" json:"replicated,omitempty"`
}
type ServiceSpec_Global struct {
    Global *GlobalService `protobuf:"bytes,4,opt,name=global,proto3,oneof" json:"global,omitempty"`
}
type ServiceSpec_ReplicatedJob struct {
    ReplicatedJob *ReplicatedJob `protobuf:"bytes,10,opt,name=replicated_job,json=replicatedJob,proto3,oneof" json:"replicated_job,omitempty"`
}
type ServiceSpec_GlobalJob struct {
    GlobalJob *GlobalJob `protobuf:"bytes,11,opt,name=global_job,json=globalJob,proto3,oneof" json:"global_job,omitempty"`
}

func (*ServiceSpec_Replicated) isServiceSpec_Mode()    {}
func (*ServiceSpec_Global) isServiceSpec_Mode()        {}
func (*ServiceSpec_ReplicatedJob) isServiceSpec_Mode() {}
func (*ServiceSpec_GlobalJob) isServiceSpec_Mode()     {}

func (m *ServiceSpec) GetMode() isServiceSpec_Mode {
    if m != nil {
        return m.Mode
    }
    return nil
}

func (m *ServiceSpec) GetReplicated() *ReplicatedService {
    if x, ok := m.GetMode().(*ServiceSpec_Replicated); ok {
        return x.Replicated
    }
    return nil
}

func (m *ServiceSpec) GetGlobal() *GlobalService {
    if x, ok := m.GetMode().(*ServiceSpec_Global); ok {
        return x.Global
    }
    return nil
}

func (m *ServiceSpec) GetReplicatedJob() *ReplicatedJob {
    if x, ok := m.GetMode().(*ServiceSpec_ReplicatedJob); ok {
        return x.ReplicatedJob
    }
    return nil
}

func (m *ServiceSpec) GetGlobalJob() *GlobalJob {
    if x, ok := m.GetMode().(*ServiceSpec_GlobalJob); ok {
        return x.GlobalJob
    }
    return nil
}

// XXX_OneofWrappers is for the internal use of the proto package.
func (*ServiceSpec) XXX_OneofWrappers() []interface{} {
    return []interface{}{
        (*ServiceSpec_Replicated)(nil),
        (*ServiceSpec_Global)(nil),
        (*ServiceSpec_ReplicatedJob)(nil),
        (*ServiceSpec_GlobalJob)(nil),
    }
}

// ReplicatedService sets the reconciliation target to certain number of replicas.
type ReplicatedService struct {
    Replicas uint64 `protobuf:"varint,1,opt,name=replicas,proto3" json:"replicas,omitempty"`
}

func (m *ReplicatedService) Reset()      { *m = ReplicatedService{} }
func (*ReplicatedService) ProtoMessage() {}
func (*ReplicatedService) Descriptor() ([]byte, []int) {
    return fileDescriptor_6589acc608f7d4fd, []int{2}
}
func (m *ReplicatedService) XXX_Unmarshal(b []byte) error {
    return m.Unmarshal(b)
}
func (m *ReplicatedService) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
    if deterministic {
        return xxx_messageInfo_ReplicatedService.Marshal(b, m, deterministic)
    } else {
        b = b[:cap(b)]
        n, err := m.MarshalToSizedBuffer(b)
        if err != nil {
            return nil, err
        }
        return b[:n], nil
    }
}
func (m *ReplicatedService) XXX_Merge(src proto.Message) {
    xxx_messageInfo_ReplicatedService.Merge(m, src)
}
func (m *ReplicatedService) XXX_Size() int {
    return m.Size()
}
func (m *ReplicatedService) XXX_DiscardUnknown() {
    xxx_messageInfo_ReplicatedService.DiscardUnknown(m)
}

var xxx_messageInfo_ReplicatedService proto.InternalMessageInfo

// GlobalService represents global service.
type GlobalService struct {
}

func (m *GlobalService) Reset()      { *m = GlobalService{} }
func (*GlobalService) ProtoMessage() {}
func (*GlobalService) Descriptor() ([]byte, []int) {
    return fileDescriptor_6589acc608f7d4fd, []int{3}
}
func (m *GlobalService) XXX_Unmarshal(b []byte) error {
    return m.Unmarshal(b)
}
func (m *GlobalService) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
    if deterministic {
        return xxx_messageInfo_GlobalService.Marshal(b, m, deterministic)
    } else {
        b = b[:cap(b)]
        n, err := m.MarshalToSizedBuffer(b)
        if err != nil {
            return nil, err
        }
        return b[:n], nil
    }
}
func (m *GlobalService) XXX_Merge(src proto.Message) {
    xxx_messageInfo_GlobalService.Merge(m, src)
}
func (m *GlobalService) XXX_Size() int {
    return m.Size()
}
func (m *GlobalService) XXX_DiscardUnknown() {
    xxx_messageInfo_GlobalService.DiscardUnknown(m)
}

var xxx_messageInfo_GlobalService proto.InternalMessageInfo

// ReplicatedJob is a certain type of one-off job which executes many Tasks in
// parallel until the specified number of Tasks have succeeded.
type ReplicatedJob struct {
    // MaxConcurrent indicates the maximum number of Tasks that should be
    // executing simultaneously at any given time.
    MaxConcurrent uint64 `protobuf:"varint,1,opt,name=max_concurrent,json=maxConcurrent,proto3" json:"max_concurrent,omitempty"`
    // TotalCompletions sets the total number of Tasks desired to run to
    // completion. This is also the absolute maximum number of Tasks that will
    // be executed in parallel. That is, if this number is smaller than
    // MaxConcurrent, only this many replicas will run.
    TotalCompletions uint64 `protobuf:"varint,2,opt,name=total_completions,json=totalCompletions,proto3" json:"total_completions,omitempty"`
}

func (m *ReplicatedJob) Reset()      { *m = ReplicatedJob{} }
func (*ReplicatedJob) ProtoMessage() {}
func (*ReplicatedJob) Descriptor() ([]byte, []int) {
    return fileDescriptor_6589acc608f7d4fd, []int{4}
}
func (m *ReplicatedJob) XXX_Unmarshal(b []byte) error {
    return m.Unmarshal(b)
}
func (m *ReplicatedJob) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
    if deterministic {
        return xxx_messageInfo_ReplicatedJob.Marshal(b, m, deterministic)
    } else {
        b = b[:cap(b)]
        n, err := m.MarshalToSizedBuffer(b)
        if err != nil {
            return nil, err
        }
        return b[:n], nil
    }
}
func (m *ReplicatedJob) XXX_Merge(src proto.Message) {
    xxx_messageInfo_ReplicatedJob.Merge(m, src)
}
func (m *ReplicatedJob) XXX_Size() int {
    return m.Size()
}
func (m *ReplicatedJob) XXX_DiscardUnknown() {
    xxx_messageInfo_ReplicatedJob.DiscardUnknown(m)
}

var xxx_messageInfo_ReplicatedJob proto.InternalMessageInfo

// GlobalJob is a type of one-off job which executes one Task on every node
// matching the service's placement constraints.
type GlobalJob struct {
}

func (m *GlobalJob) Reset()      { *m = GlobalJob{} }
func (*GlobalJob) ProtoMessage() {}
func (*GlobalJob) Descriptor() ([]byte, []int) {
    return fileDescriptor_6589acc608f7d4fd, []int{5}
}
func (m *GlobalJob) XXX_Unmarshal(b []byte) error {
    return m.Unmarshal(b)
}
func (m *GlobalJob) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
    if deterministic {
        return xxx_messageInfo_GlobalJob.Marshal(b, m, deterministic)
    } else {
        b = b[:cap(b)]
        n, err := m.MarshalToSizedBuffer(b)
        if err != nil {
            return nil, err
        }
        return b[:n], nil
    }
}
func (m *GlobalJob) XXX_Merge(src proto.Message) {
    xxx_messageInfo_GlobalJob.Merge(m, src)
}
func (m *GlobalJob) XXX_Size() int {
    return m.Size()
}
func (m *GlobalJob) XXX_DiscardUnknown() {
    xxx_messageInfo_GlobalJob.DiscardUnknown(m)
}

var xxx_messageInfo_GlobalJob proto.InternalMessageInfo

type TaskSpec struct {
    // Types that are valid to be assigned to Runtime:
    //    *TaskSpec_Attachment
    //    *TaskSpec_Container
    //    *TaskSpec_Generic
    Runtime isTaskSpec_Runtime `protobuf_oneof:"runtime"`
    // Resource requirements for the container.
    Resources *ResourceRequirements `protobuf:"bytes,2,opt,name=resources,proto3" json:"resources,omitempty"`
    // RestartPolicy specifies what to do when a task fails or finishes.
    Restart *RestartPolicy `protobuf:"bytes,4,opt,name=restart,proto3" json:"restart,omitempty"`
    // Placement specifies node selection constraints
    Placement *Placement `protobuf:"bytes,5,opt,name=placement,proto3" json:"placement,omitempty"`
    // LogDriver specifies the log driver to use for the task. Any runtime will
    // direct logs into the specified driver for the duration of the task.
    LogDriver *Driver `protobuf:"bytes,6,opt,name=log_driver,json=logDriver,proto3" json:"log_driver,omitempty"`
    // Networks specifies the list of network attachment
    // configurations (which specify the network and per-network
    // aliases) that this task spec is bound to.
    Networks []*NetworkAttachmentConfig `protobuf:"bytes,7,rep,name=networks,proto3" json:"networks,omitempty"`
    // ForceUpdate is a counter that triggers an update even if no relevant
    // parameters have been changed. We do this to allow forced restarts
    // using the same reconciliation-based mechanism that performs rolling
    // updates.
    ForceUpdate uint64 `protobuf:"varint,9,opt,name=force_update,json=forceUpdate,proto3" json:"force_update,omitempty"`
    // ResourceReferences provides a generic way to specify resources that
    // are used by this task, and should be sent down to agents along with
    // the task. Inside the runtime field there may be more specific
    // information about how to use the resource, but ResourceReferences
    // establishes the relationship at the store level, and instructs the
    // dispatcher to send the related objects.
    //
    // ResourceReferences is a list of ResourceReferences used by the task.
    ResourceReferences []ResourceReference `protobuf:"bytes,11,rep,name=resource_references,json=resourceReferences,proto3" json:"resource_references"`
}

func (m *TaskSpec) Reset()      { *m = TaskSpec{} }
func (*TaskSpec) ProtoMessage() {}
func (*TaskSpec) Descriptor() ([]byte, []int) {
    return fileDescriptor_6589acc608f7d4fd, []int{6}
}
func (m *TaskSpec) XXX_Unmarshal(b []byte) error {
    return m.Unmarshal(b)
}
func (m *TaskSpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
    if deterministic {
        return xxx_messageInfo_TaskSpec.Marshal(b, m, deterministic)
    } else {
        b = b[:cap(b)]
        n, err := m.MarshalToSizedBuffer(b)
        if err != nil {
            return nil, err
        }
        return b[:n], nil
    }
}
func (m *TaskSpec) XXX_Merge(src proto.Message) {
    xxx_messageInfo_TaskSpec.Merge(m, src)
}
func (m *TaskSpec) XXX_Size() int {
    return m.Size()
}
func (m *TaskSpec) XXX_DiscardUnknown() {
    xxx_messageInfo_TaskSpec.DiscardUnknown(m)
}

var xxx_messageInfo_TaskSpec proto.InternalMessageInfo

type isTaskSpec_Runtime interface {
    isTaskSpec_Runtime()
    MarshalTo([]byte) (int, error)
    Size() int
}

type TaskSpec_Attachment struct {
    Attachment *NetworkAttachmentSpec `protobuf:"bytes,8,opt,name=attachment,proto3,oneof" json:"attachment,omitempty"`
}
type TaskSpec_Container struct {
    Container *ContainerSpec `protobuf:"bytes,1,opt,name=container,proto3,oneof" json:"container,omitempty"`
}
type TaskSpec_Generic struct {
    Generic *GenericRuntimeSpec `protobuf:"bytes,10,opt,name=generic,proto3,oneof" json:"generic,omitempty"`
}

func (*TaskSpec_Attachment) isTaskSpec_Runtime() {}
func (*TaskSpec_Container) isTaskSpec_Runtime()  {}
func (*TaskSpec_Generic) isTaskSpec_Runtime()    {}

func (m *TaskSpec) GetRuntime() isTaskSpec_Runtime {
    if m != nil {
        return m.Runtime
    }
    return nil
}

func (m *TaskSpec) GetAttachment() *NetworkAttachmentSpec {
    if x, ok := m.GetRuntime().(*TaskSpec_Attachment); ok {
        return x.Attachment
    }
    return nil
}

func (m *TaskSpec) GetContainer() *ContainerSpec {
    if x, ok := m.GetRuntime().(*TaskSpec_Container); ok {
        return x.Container
    }
    return nil
}

func (m *TaskSpec) GetGeneric() *GenericRuntimeSpec {
    if x, ok := m.GetRuntime().(*TaskSpec_Generic); ok {
        return x.Generic
    }
    return nil
}

// XXX_OneofWrappers is for the internal use of the proto package.
func (*TaskSpec) XXX_OneofWrappers() []interface{} {
    return []interface{}{
        (*TaskSpec_Attachment)(nil),
        (*TaskSpec_Container)(nil),
        (*TaskSpec_Generic)(nil),
    }
}

type ResourceReference struct {
    ResourceID   string       `protobuf:"bytes,1,opt,name=resource_id,json=resourceId,proto3" json:"resource_id,omitempty"`
    ResourceType ResourceType `protobuf:"varint,2,opt,name=resource_type,json=resourceType,proto3,enum=docker.swarmkit.v1.ResourceType" json:"resource_type,omitempty"`
}

func (m *ResourceReference) Reset()      { *m = ResourceReference{} }
func (*ResourceReference) ProtoMessage() {}
func (*ResourceReference) Descriptor() ([]byte, []int) {
    return fileDescriptor_6589acc608f7d4fd, []int{7}
}
func (m *ResourceReference) XXX_Unmarshal(b []byte) error {
    return m.Unmarshal(b)
}
func (m *ResourceReference) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
    if deterministic {
        return xxx_messageInfo_ResourceReference.Marshal(b, m, deterministic)
    } else {
        b = b[:cap(b)]
        n, err := m.MarshalToSizedBuffer(b)
        if err != nil {
            return nil, err
        }
        return b[:n], nil
    }
}
func (m *ResourceReference) XXX_Merge(src proto.Message) {
    xxx_messageInfo_ResourceReference.Merge(m, src)
}
func (m *ResourceReference) XXX_Size() int {
    return m.Size()
}
func (m *ResourceReference) XXX_DiscardUnknown() {
    xxx_messageInfo_ResourceReference.DiscardUnknown(m)
}

var xxx_messageInfo_ResourceReference proto.InternalMessageInfo

type GenericRuntimeSpec struct {
    Kind    string     `protobuf:"bytes,1,opt,name=kind,proto3" json:"kind,omitempty"`
    Payload *types.Any `protobuf:"bytes,2,opt,name=payload,proto3" json:"payload,omitempty"`
}

func (m *GenericRuntimeSpec) Reset()      { *m = GenericRuntimeSpec{} }
func (*GenericRuntimeSpec) ProtoMessage() {}
func (*GenericRuntimeSpec) Descriptor() ([]byte, []int) {
    return fileDescriptor_6589acc608f7d4fd, []int{8}
}
func (m *GenericRuntimeSpec) XXX_Unmarshal(b []byte) error {
    return m.Unmarshal(b)
}
func (m *GenericRuntimeSpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
    if deterministic {
        return xxx_messageInfo_GenericRuntimeSpec.Marshal(b, m, deterministic)
    } else {
        b = b[:cap(b)]
        n, err := m.MarshalToSizedBuffer(b)
        if err != nil {
            return nil, err
        }
        return b[:n], nil
    }
}
func (m *GenericRuntimeSpec) XXX_Merge(src proto.Message) {
    xxx_messageInfo_GenericRuntimeSpec.Merge(m, src)
}
func (m *GenericRuntimeSpec) XXX_Size() int {
    return m.Size()
}
func (m *GenericRuntimeSpec) XXX_DiscardUnknown() {
    xxx_messageInfo_GenericRuntimeSpec.DiscardUnknown(m)
}

var xxx_messageInfo_GenericRuntimeSpec proto.InternalMessageInfo

// NetworkAttachmentSpec specifies runtime parameters required to attach
// a container to a network.
type NetworkAttachmentSpec struct {
    // ContainerID specifies a unique ID of the container for which
    // this attachment is for.
    ContainerID string `protobuf:"bytes,1,opt,name=container_id,json=containerId,proto3" json:"container_id,omitempty"`
}

func (m *NetworkAttachmentSpec) Reset()      { *m = NetworkAttachmentSpec{} }
func (*NetworkAttachmentSpec) ProtoMessage() {}
func (*NetworkAttachmentSpec) Descriptor() ([]byte, []int) {
    return fileDescriptor_6589acc608f7d4fd, []int{9}
}
func (m *NetworkAttachmentSpec) XXX_Unmarshal(b []byte) error {
    return m.Unmarshal(b)
}
func (m *NetworkAttachmentSpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
    if deterministic {
        return xxx_messageInfo_NetworkAttachmentSpec.Marshal(b, m, deterministic)
    } else {
        b = b[:cap(b)]
        n, err := m.MarshalToSizedBuffer(b)
        if err != nil {
            return nil, err
        }
        return b[:n], nil
    }
}
func (m *NetworkAttachmentSpec) XXX_Merge(src proto.Message) {
    xxx_messageInfo_NetworkAttachmentSpec.Merge(m, src)
}
func (m *NetworkAttachmentSpec) XXX_Size() int {
    return m.Size()
}
func (m *NetworkAttachmentSpec) XXX_DiscardUnknown() {
    xxx_messageInfo_NetworkAttachmentSpec.DiscardUnknown(m)
}

var xxx_messageInfo_NetworkAttachmentSpec proto.InternalMessageInfo

// Container specifies runtime parameters for a container.
type ContainerSpec struct {
    // image defines the image reference, as specified in the
    // distribution/reference package. This may include a registry host, name,
    // tag or digest.
    //
    // The field will be directly passed to the engine pulling. Well-behaved
    // service definitions will used immutable references, either through tags
    // that don't change or verifiable digests.
    Image string `protobuf:"bytes,1,opt,name=image,proto3" json:"image,omitempty"`
    // Labels defines labels to be added to the container at creation time. If
    // collisions with system labels occur, these labels will be overridden.
    //
    // This field *must* remain compatible with the Labels field of
    // Annotations.
    Labels map[string]string `protobuf:"bytes,2,rep,name=labels,proto3" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
    // Command to run the the container. The first element is a path to the
    // executable and the following elements are treated as arguments.
    //
    // If command is empty, execution will fall back to the image's entrypoint.
    //
    // Command should only be used when overriding entrypoint.
    Command []string `protobuf:"bytes,3,rep,name=command,proto3" json:"command,omitempty"`
    // Args specifies arguments provided to the image's entrypoint.
    //
    // If Command and Args are provided, Args will be appended to Command.
    Args []string `protobuf:"bytes,4,rep,name=args,proto3" json:"args,omitempty"`
    // Hostname specifies the hostname that will be set on containers created by docker swarm.
    // All containers for a given service will have the same hostname
    Hostname string `protobuf:"bytes,14,opt,name=hostname,proto3" json:"hostname,omitempty"`
    // Env specifies the environment variables for the container in NAME=VALUE
    // format. These must be compliant with  [IEEE Std
    // 1003.1-2001](http://pubs.opengroup.org/onlinepubs/009695399/basedefs/xbd_chap08.html).
    Env []string `protobuf:"bytes,5,rep,name=env,proto3" json:"env,omitempty"`
    // Dir defines the working directory to set for the container process.
    Dir string `protobuf:"bytes,6,opt,name=dir,proto3" json:"dir,omitempty"`
    // User specifies the user that should be employed to run the container.
    //
    // Note that the primary group may be specified by appending the group name
    // or id to the user name, separated by a `:`. This syntax is
    // `<user>:<group>`.
    User string `protobuf:"bytes,7,opt,name=user,proto3" json:"user,omitempty"`
    // Groups specifies supplementary groups available to the user.
    Groups []string `protobuf:"bytes,11,rep,name=groups,proto3" json:"groups,omitempty"`
    // Privileges specifies security configuration/permissions.
    Privileges *Privileges `protobuf:"bytes,22,opt,name=privileges,proto3" json:"privileges,omitempty"`
    // Init declares that a custom init will be running inside the container, if null, use the daemon's configured settings
    Init *types.BoolValue `protobuf:"bytes,23,opt,name=init,proto3" json:"init,omitempty"`
    // TTY declares that a TTY should be attached to the standard streams,
    // including stdin if it is still open.
    TTY bool `protobuf:"varint,13,opt,name=tty,proto3" json:"tty,omitempty"`
    // OpenStdin declares that the standard input (stdin) should be open.
    OpenStdin bool `protobuf:"varint,18,opt,name=open_stdin,json=openStdin,proto3" json:"open_stdin,omitempty"`
    // ReadOnly declares that the container root filesystem is read-only.
    // This only impacts the root filesystem, not additional mounts (including
    // tmpfs). For additional mounts that are not part of the initial rootfs,
    // they will be decided by the modes passed in the mount definition.
    ReadOnly bool `protobuf:"varint,19,opt,name=read_only,json=readOnly,proto3" json:"read_only,omitempty"`
    // StopSignal defines the signal to stop the container.
    StopSignal string  `protobuf:"bytes,20,opt,name=stop_signal,json=stopSignal,proto3" json:"stop_signal,omitempty"`
    Mounts     []Mount `protobuf:"bytes,8,rep,name=mounts,proto3" json:"mounts"`
    // StopGracePeriod the grace period for stopping the container before
    // forcefully killing the container.
    // Note: Can't use stdduration here because this needs to be nullable.
    StopGracePeriod *types.Duration `protobuf:"bytes,9,opt,name=stop_grace_period,json=stopGracePeriod,proto3" json:"stop_grace_period,omitempty"`
    // PullOptions parameterize the behavior of image pulls.
    PullOptions *ContainerSpec_PullOptions `protobuf:"bytes,10,opt,name=pull_options,json=pullOptions,proto3" json:"pull_options,omitempty"`
    // SecretReference contains references to zero or more secrets that
    // will be exposed to the container.
    Secrets []*SecretReference `protobuf:"bytes,12,rep,name=secrets,proto3" json:"secrets,omitempty"`
    // ConfigReference contains references to zero or more configs that
    // will be exposed to the container.
    Configs []*ConfigReference `protobuf:"bytes,21,rep,name=configs,proto3" json:"configs,omitempty"`
    // Hosts allow additional entries to be specified in /etc/hosts
    // that associates IP addresses with hostnames.
    // Detailed documentation is available in:
    // http://man7.org/linux/man-pages/man5/hosts.5.html
    //   IP_address canonical_hostname [aliases...]
    //
    // The format of the Hosts in swarmkit follows the same as
    // above.
    // This is different from `docker run --add-host <hostname>:<ip>`
    // where format is `<hostname>:<ip>`
    Hosts []string `protobuf:"bytes,17,rep,name=hosts,proto3" json:"hosts,omitempty"`
    // DNSConfig allows one to specify DNS related configuration in resolv.conf
    DNSConfig *ContainerSpec_DNSConfig `protobuf:"bytes,15,opt,name=dns_config,json=dnsConfig,proto3" json:"dns_config,omitempty"`
    // Healthcheck describes how to check the container is healthy. If the
    // container is considered unhealthy, it will be destroyed, its creating
    // task will exit and a new task will be rescheduled elsewhere. A container
    // is considered unhealthy after `Retries` number of consecutive failures.
    Healthcheck *HealthConfig `protobuf:"bytes,16,opt,name=healthcheck,proto3" json:"healthcheck,omitempty"`
    // Isolation defines the isolation level for windows containers (default, process, hyperv).
    // Runtimes that don't support it ignore that field
    Isolation ContainerSpec_Isolation `protobuf:"varint,24,opt,name=isolation,proto3,enum=docker.swarmkit.v1.ContainerSpec_Isolation" json:"isolation,omitempty"`
    // PidsLimit prevents from OS resource damage by applications inside the container
    // using fork bomb attack.
    PidsLimit int64 `protobuf:"varint,25,opt,name=pidsLimit,proto3" json:"pidsLimit,omitempty"`
    // Sysctls sets namespaced kernel parameters (sysctls) in the container. This
    // option is equivalent to passing --sysctl to docker run.
    //
    // Note that while options are subject to the same restrictions as arguments
    // passed to the --sysctl flag on docker run, those options are not further
    // validated to ensure that they are safe or sensible in a clustered
    // environment.
    //
    // Additionally, sysctls are not validated for support in the underlying
    // daemon. For information about supported options, refer to the
    // documentation at:
    //
    // https://docs.docker.com/engine/reference/commandline/run/#configure-namespaced-kernel-parameters-sysctls-at-runtime
    Sysctls map[string]string `protobuf:"bytes,26,rep,name=sysctls,proto3" json:"sysctls,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
    // CapabilityAdd sets the list of capabilities to add to the default capability list
    CapabilityAdd []string `protobuf:"bytes,27,rep,name=capability_add,json=capabilityAdd,proto3" json:"capability_add,omitempty"`
    // CapabilityDrop sets the list of capabilities to drop from the default capability list
    CapabilityDrop []string `protobuf:"bytes,28,rep,name=capability_drop,json=capabilityDrop,proto3" json:"capability_drop,omitempty"`
    // Ulimits defines the list of ulimits to set in the container. This option
    // is equivalent to passing --ulimit to docker run.
    Ulimits []*ContainerSpec_Ulimit `protobuf:"bytes,29,rep,name=ulimits,proto3" json:"ulimits,omitempty"`
}

func (m *ContainerSpec) Reset()      { *m = ContainerSpec{} }
func (*ContainerSpec) ProtoMessage() {}
func (*ContainerSpec) Descriptor() ([]byte, []int) {
    return fileDescriptor_6589acc608f7d4fd, []int{10}
}
func (m *ContainerSpec) XXX_Unmarshal(b []byte) error {
    return m.Unmarshal(b)
}
func (m *ContainerSpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
    if deterministic {
        return xxx_messageInfo_ContainerSpec.Marshal(b, m, deterministic)
    } else {
        b = b[:cap(b)]
        n, err := m.MarshalToSizedBuffer(b)
        if err != nil {
            return nil, err
        }
        return b[:n], nil
    }
}
func (m *ContainerSpec) XXX_Merge(src proto.Message) {
    xxx_messageInfo_ContainerSpec.Merge(m, src)
}
func (m *ContainerSpec) XXX_Size() int {
    return m.Size()
}
func (m *ContainerSpec) XXX_DiscardUnknown() {
    xxx_messageInfo_ContainerSpec.DiscardUnknown(m)
}

var xxx_messageInfo_ContainerSpec proto.InternalMessageInfo

// PullOptions allows one to parameterize an image pull.
type ContainerSpec_PullOptions struct {
    // RegistryAuth is the registry auth token obtained from the client, required
    // to pull private images. This is the unmodified JSON used as part of
    // the `X-Registry-Auth` header.
    // TODO(nishanttotla): This field will later be deprecated
    RegistryAuth string `protobuf:"bytes,64,opt,name=registry_auth,json=registryAuth,proto3" json:"registry_auth,omitempty"`
}

func (m *ContainerSpec_PullOptions) Reset()      { *m = ContainerSpec_PullOptions{} }
func (*ContainerSpec_PullOptions) ProtoMessage() {}
func (*ContainerSpec_PullOptions) Descriptor() ([]byte, []int) {
    return fileDescriptor_6589acc608f7d4fd, []int{10, 1}
}
func (m *ContainerSpec_PullOptions) XXX_Unmarshal(b []byte) error {
    return m.Unmarshal(b)
}
func (m *ContainerSpec_PullOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
    if deterministic {
        return xxx_messageInfo_ContainerSpec_PullOptions.Marshal(b, m, deterministic)
    } else {
        b = b[:cap(b)]
        n, err := m.MarshalToSizedBuffer(b)
        if err != nil {
            return nil, err
        }
        return b[:n], nil
    }
}
func (m *ContainerSpec_PullOptions) XXX_Merge(src proto.Message) {
    xxx_messageInfo_ContainerSpec_PullOptions.Merge(m, src)
}
func (m *ContainerSpec_PullOptions) XXX_Size() int {
    return m.Size()
}
func (m *ContainerSpec_PullOptions) XXX_DiscardUnknown() {
    xxx_messageInfo_ContainerSpec_PullOptions.DiscardUnknown(m)
}

var xxx_messageInfo_ContainerSpec_PullOptions proto.InternalMessageInfo

// DNSConfig specifies DNS related configurations in resolver configuration file (resolv.conf)
// Detailed documentation is available in:
// http://man7.org/linux/man-pages/man5/resolv.conf.5.html
// TODO: domain is not supported yet
type ContainerSpec_DNSConfig struct {
    // Nameservers specifies the IP addresses of the name servers
    Nameservers []string `protobuf:"bytes,1,rep,name=nameservers,proto3" json:"nameservers,omitempty"`
    // Search specifies the search list for host-name lookup
    Search []string `protobuf:"bytes,2,rep,name=search,proto3" json:"search,omitempty"`
    // Options allows certain internal resolver variables to be modified
    Options []string `protobuf:"bytes,3,rep,name=options,proto3" json:"options,omitempty"`
}

func (m *ContainerSpec_DNSConfig) Reset()      { *m = ContainerSpec_DNSConfig{} }
func (*ContainerSpec_DNSConfig) ProtoMessage() {}
func (*ContainerSpec_DNSConfig) Descriptor() ([]byte, []int) {
    return fileDescriptor_6589acc608f7d4fd, []int{10, 2}
}
func (m *ContainerSpec_DNSConfig) XXX_Unmarshal(b []byte) error {
    return m.Unmarshal(b)
}
func (m *ContainerSpec_DNSConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
    if deterministic {
        return xxx_messageInfo_ContainerSpec_DNSConfig.Marshal(b, m, deterministic)
    } else {
        b = b[:cap(b)]
        n, err := m.MarshalToSizedBuffer(b)
        if err != nil {
            return nil, err
        }
        return b[:n], nil
    }
}
func (m *ContainerSpec_DNSConfig) XXX_Merge(src proto.Message) {
    xxx_messageInfo_ContainerSpec_DNSConfig.Merge(m, src)
}
func (m *ContainerSpec_DNSConfig) XXX_Size() int {
    return m.Size()
}
func (m *ContainerSpec_DNSConfig) XXX_DiscardUnknown() {
    xxx_messageInfo_ContainerSpec_DNSConfig.DiscardUnknown(m)
}

var xxx_messageInfo_ContainerSpec_DNSConfig proto.InternalMessageInfo

type ContainerSpec_Ulimit struct {
    Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
    Soft int64  `protobuf:"varint,2,opt,name=soft,proto3" json:"soft,omitempty"`
    Hard int64  `protobuf:"varint,3,opt,name=hard,proto3" json:"hard,omitempty"`
}

func (m *ContainerSpec_Ulimit) Reset()      { *m = ContainerSpec_Ulimit{} }
func (*ContainerSpec_Ulimit) ProtoMessage() {}
func (*ContainerSpec_Ulimit) Descriptor() ([]byte, []int) {
    return fileDescriptor_6589acc608f7d4fd, []int{10, 4}
}
func (m *ContainerSpec_Ulimit) XXX_Unmarshal(b []byte) error {
    return m.Unmarshal(b)
}
func (m *ContainerSpec_Ulimit) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
    if deterministic {
        return xxx_messageInfo_ContainerSpec_Ulimit.Marshal(b, m, deterministic)
    } else {
        b = b[:cap(b)]
        n, err := m.MarshalToSizedBuffer(b)
        if err != nil {
            return nil, err
        }
        return b[:n], nil
    }
}
func (m *ContainerSpec_Ulimit) XXX_Merge(src proto.Message) {
    xxx_messageInfo_ContainerSpec_Ulimit.Merge(m, src)
}
func (m *ContainerSpec_Ulimit) XXX_Size() int {
    return m.Size()
}
func (m *ContainerSpec_Ulimit) XXX_DiscardUnknown() {
    xxx_messageInfo_ContainerSpec_Ulimit.DiscardUnknown(m)
}

var xxx_messageInfo_ContainerSpec_Ulimit proto.InternalMessageInfo

// EndpointSpec defines the properties that can be configured to
// access and loadbalance the service.
type EndpointSpec struct {
    Mode EndpointSpec_ResolutionMode `protobuf:"varint,1,opt,name=mode,proto3,enum=docker.swarmkit.v1.EndpointSpec_ResolutionMode" json:"mode,omitempty"`
    // List of exposed ports that this service is accessible from
    // external to the cluster.
    Ports []*PortConfig `protobuf:"bytes,2,rep,name=ports,proto3" json:"ports,omitempty"`
}

func (m *EndpointSpec) Reset()      { *m = EndpointSpec{} }
func (*EndpointSpec) ProtoMessage() {}
func (*EndpointSpec) Descriptor() ([]byte, []int) {
    return fileDescriptor_6589acc608f7d4fd, []int{11}
}
func (m *EndpointSpec) XXX_Unmarshal(b []byte) error {
    return m.Unmarshal(b)
}
func (m *EndpointSpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
    if deterministic {
        return xxx_messageInfo_EndpointSpec.Marshal(b, m, deterministic)
    } else {
        b = b[:cap(b)]
        n, err := m.MarshalToSizedBuffer(b)
        if err != nil {
            return nil, err
        }
        return b[:n], nil
    }
}
func (m *EndpointSpec) XXX_Merge(src proto.Message) {
    xxx_messageInfo_EndpointSpec.Merge(m, src)
}
func (m *EndpointSpec) XXX_Size() int {
    return m.Size()
}
func (m *EndpointSpec) XXX_DiscardUnknown() {
    xxx_messageInfo_EndpointSpec.DiscardUnknown(m)
}

var xxx_messageInfo_EndpointSpec proto.InternalMessageInfo

// NetworkSpec specifies user defined network parameters.
type NetworkSpec struct {
    Annotations Annotations `protobuf:"bytes,1,opt,name=annotations,proto3" json:"annotations"`
    // DriverConfig specific configuration consumed by the network driver.
    DriverConfig *Driver `protobuf:"bytes,2,opt,name=driver_config,json=driverConfig,proto3" json:"driver_config,omitempty"`
    // IPv6Enabled enables support for IPv6 on the network.
    Ipv6Enabled bool `protobuf:"varint,3,opt,name=ipv6_enabled,json=ipv6Enabled,proto3" json:"ipv6_enabled,omitempty"`
    // internal restricts external access to the network. This may be
    // accomplished by disabling the default gateway or through other means.
    Internal bool         `protobuf:"varint,4,opt,name=internal,proto3" json:"internal,omitempty"`
    IPAM     *IPAMOptions `protobuf:"bytes,5,opt,name=ipam,proto3" json:"ipam,omitempty"`
    // Attachable allows external(to swarm) entities to manually
    // attach to this network. With this flag enabled, external
    // entities such as containers running in an worker node in
    // the cluster can manually attach to this network and access
    // the services attached to this network. If this flag is not
    // enabled(default case) no manual attachment to this network
    // can happen.
    Attachable bool `protobuf:"varint,6,opt,name=attachable,proto3" json:"attachable,omitempty"`
    // Ingress indicates this network will provide the routing-mesh.
    // In older versions, the network providing the routing mesh was
    // swarm internally created only and it was identified by the name
    // "ingress" and the label "com.docker.swarm.internal": "true".
    Ingress bool `protobuf:"varint,7,opt,name=ingress,proto3" json:"ingress,omitempty"`
    // ConfigFrom is the source of the configuration for this network.
    //
    // Types that are valid to be assigned to ConfigFrom:
    //    *NetworkSpec_Network
    ConfigFrom isNetworkSpec_ConfigFrom `protobuf_oneof:"config_from"`
}

func (m *NetworkSpec) Reset()      { *m = NetworkSpec{} }
func (*NetworkSpec) ProtoMessage() {}
func (*NetworkSpec) Descriptor() ([]byte, []int) {
    return fileDescriptor_6589acc608f7d4fd, []int{12}
}
func (m *NetworkSpec) XXX_Unmarshal(b []byte) error {
    return m.Unmarshal(b)
}
func (m *NetworkSpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
    if deterministic {
        return xxx_messageInfo_NetworkSpec.Marshal(b, m, deterministic)
    } else {
        b = b[:cap(b)]
        n, err := m.MarshalToSizedBuffer(b)
        if err != nil {
            return nil, err
        }
        return b[:n], nil
    }
}
func (m *NetworkSpec) XXX_Merge(src proto.Message) {
    xxx_messageInfo_NetworkSpec.Merge(m, src)
}
func (m *NetworkSpec) XXX_Size() int {
    return m.Size()
}
func (m *NetworkSpec) XXX_DiscardUnknown() {
    xxx_messageInfo_NetworkSpec.DiscardUnknown(m)
}

var xxx_messageInfo_NetworkSpec proto.InternalMessageInfo

type isNetworkSpec_ConfigFrom interface {
    isNetworkSpec_ConfigFrom()
    MarshalTo([]byte) (int, error)
    Size() int
}

type NetworkSpec_Network struct {
    Network string `protobuf:"bytes,8,opt,name=network,proto3,oneof" json:"network,omitempty"`
}

func (*NetworkSpec_Network) isNetworkSpec_ConfigFrom() {}

func (m *NetworkSpec) GetConfigFrom() isNetworkSpec_ConfigFrom {
    if m != nil {
        return m.ConfigFrom
    }
    return nil
}

func (m *NetworkSpec) GetNetwork() string {
    if x, ok := m.GetConfigFrom().(*NetworkSpec_Network); ok {
        return x.Network
    }
    return ""
}

// XXX_OneofWrappers is for the internal use of the proto package.
func (*NetworkSpec) XXX_OneofWrappers() []interface{} {
    return []interface{}{
        (*NetworkSpec_Network)(nil),
    }
}

// ClusterSpec specifies global cluster settings.
type ClusterSpec struct {
    Annotations Annotations `protobuf:"bytes,1,opt,name=annotations,proto3" json:"annotations"`
    // DEPRECATED: AcceptancePolicy defines the certificate issuance policy.
    // Acceptance policy is no longer customizable, and secrets have been
    // replaced with join tokens.
    AcceptancePolicy AcceptancePolicy `protobuf:"bytes,2,opt,name=acceptance_policy,json=acceptancePolicy,proto3" json:"acceptance_policy"` // Deprecated: Do not use.
    // Orchestration defines cluster-level orchestration settings.
    Orchestration OrchestrationConfig `protobuf:"bytes,3,opt,name=orchestration,proto3" json:"orchestration"`
    // Raft defines the cluster's raft settings.
    Raft RaftConfig `protobuf:"bytes,4,opt,name=raft,proto3" json:"raft"`
    // Dispatcher defines cluster-level dispatcher settings.
    Dispatcher DispatcherConfig `protobuf:"bytes,5,opt,name=dispatcher,proto3" json:"dispatcher"`
    // CAConfig defines cluster-level certificate authority settings.
    CAConfig CAConfig `protobuf:"bytes,6,opt,name=ca_config,json=caConfig,proto3" json:"ca_config"`
    // TaskDefaults specifies the default values to use for task creation.
    TaskDefaults TaskDefaults `protobuf:"bytes,7,opt,name=task_defaults,json=taskDefaults,proto3" json:"task_defaults"`
    // EncryptionConfig defines the cluster's encryption settings.
    EncryptionConfig EncryptionConfig `protobuf:"bytes,8,opt,name=encryption_config,json=encryptionConfig,proto3" json:"encryption_config"`
}

func (m *ClusterSpec) Reset()      { *m = ClusterSpec{} }
func (*ClusterSpec) ProtoMessage() {}
func (*ClusterSpec) Descriptor() ([]byte, []int) {
    return fileDescriptor_6589acc608f7d4fd, []int{13}
}
func (m *ClusterSpec) XXX_Unmarshal(b []byte) error {
    return m.Unmarshal(b)
}
func (m *ClusterSpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
    if deterministic {
        return xxx_messageInfo_ClusterSpec.Marshal(b, m, deterministic)
    } else {
        b = b[:cap(b)]
        n, err := m.MarshalToSizedBuffer(b)
        if err != nil {
            return nil, err
        }
        return b[:n], nil
    }
}
func (m *ClusterSpec) XXX_Merge(src proto.Message) {
    xxx_messageInfo_ClusterSpec.Merge(m, src)
}
func (m *ClusterSpec) XXX_Size() int {
    return m.Size()
}
func (m *ClusterSpec) XXX_DiscardUnknown() {
    xxx_messageInfo_ClusterSpec.DiscardUnknown(m)
}

var xxx_messageInfo_ClusterSpec proto.InternalMessageInfo

// SecretSpec specifies a user-provided secret.
type SecretSpec struct {
    Annotations Annotations `protobuf:"bytes,1,opt,name=annotations,proto3" json:"annotations"`
    // Data is the secret payload - the maximum size is 500KB (that is, 500*1024 bytes)
    Data []byte `protobuf:"bytes,2,opt,name=data,proto3" json:"data,omitempty"`
    // Templating controls whether and how to evaluate the secret payload as
    // a template. If it is not set, no templating is used.
    //
    // The currently recognized values are:
    // - golang: Go templating
    Templating *Driver `protobuf:"bytes,3,opt,name=templating,proto3" json:"templating,omitempty"`
    // Driver is the the secret driver that is used to store the specified secret
    Driver *Driver `protobuf:"bytes,4,opt,name=driver,proto3" json:"driver,omitempty"`
}

func (m *SecretSpec) Reset()      { *m = SecretSpec{} }
func (*SecretSpec) ProtoMessage() {}
func (*SecretSpec) Descriptor() ([]byte, []int) {
    return fileDescriptor_6589acc608f7d4fd, []int{14}
}
func (m *SecretSpec) XXX_Unmarshal(b []byte) error {
    return m.Unmarshal(b)
}
func (m *SecretSpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
    if deterministic {
        return xxx_messageInfo_SecretSpec.Marshal(b, m, deterministic)
    } else {
        b = b[:cap(b)]
        n, err := m.MarshalToSizedBuffer(b)
        if err != nil {
            return nil, err
        }
        return b[:n], nil
    }
}
func (m *SecretSpec) XXX_Merge(src proto.Message) {
    xxx_messageInfo_SecretSpec.Merge(m, src)
}
func (m *SecretSpec) XXX_Size() int {
    return m.Size()
}
func (m *SecretSpec) XXX_DiscardUnknown() {
    xxx_messageInfo_SecretSpec.DiscardUnknown(m)
}

var xxx_messageInfo_SecretSpec proto.InternalMessageInfo

// ConfigSpec specifies user-provided configuration files.
type ConfigSpec struct {
    Annotations Annotations `protobuf:"bytes,1,opt,name=annotations,proto3" json:"annotations"`
    // Data is the config payload - the maximum size is 500KB (that is, 500*1024 bytes)
    // TODO(aaronl): Do we want to revise this to include multiple payloads in a single
    // ConfigSpec? Define this to be a tar? etc...
    Data []byte `protobuf:"bytes,2,opt,name=data,proto3" json:"data,omitempty"`
    // Templating controls whether and how to evaluate the secret payload as
    // a template. If it is not set, no templating is used.
    //
    // The currently recognized values are:
    // - golang: Go templating
    Templating *Driver `protobuf:"bytes,3,opt,name=templating,proto3" json:"templating,omitempty"`
}

func (m *ConfigSpec) Reset()      { *m = ConfigSpec{} }
func (*ConfigSpec) ProtoMessage() {}
func (*ConfigSpec) Descriptor() ([]byte, []int) {
    return fileDescriptor_6589acc608f7d4fd, []int{15}
}
func (m *ConfigSpec) XXX_Unmarshal(b []byte) error {
    return m.Unmarshal(b)
}
func (m *ConfigSpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
    if deterministic {
        return xxx_messageInfo_ConfigSpec.Marshal(b, m, deterministic)
    } else {
        b = b[:cap(b)]
        n, err := m.MarshalToSizedBuffer(b)
        if err != nil {
            return nil, err
        }
        return b[:n], nil
    }
}
func (m *ConfigSpec) XXX_Merge(src proto.Message) {
    xxx_messageInfo_ConfigSpec.Merge(m, src)
}
func (m *ConfigSpec) XXX_Size() int {
    return m.Size()
}
func (m *ConfigSpec) XXX_DiscardUnknown() {
    xxx_messageInfo_ConfigSpec.DiscardUnknown(m)
}

var xxx_messageInfo_ConfigSpec proto.InternalMessageInfo

type VolumeSpec struct {
    // Annotations includes the name and labels of a volume. The name used in the
    // spec's Annotations will be passed to the Plugin as the "Name" in the
    // CreateVolume request.
    Annotations Annotations `protobuf:"bytes,1,opt,name=annotations,proto3" json:"annotations"`
    // Group defines the volume group this particular volume belongs to. When
    // requesting volumes for a workload, the group name can be used instead of
    // the volume's name, which tells swarmkit to pick one from the many volumes
    // belonging to that group.
    Group string `protobuf:"bytes,2,opt,name=group,proto3" json:"group,omitempty"`
    // Driver represents the CSI Plugin object and its configuration parameters.
    // The "options" field of the Driver object is passed in the CSI
    // CreateVolumeRequest as the "parameters" field. The Driver must be
    // specified; there is no default CSI Plugin.
    Driver *Driver `protobuf:"bytes,3,opt,name=driver,proto3" json:"driver,omitempty"`
    // AccessMode is similar to, and used to determine, the volume access mode as
    // defined in the CSI spec, as well as the volume type (block vs mount). In
    // this way, it is more similar to the VolumeCapability message in the CSI
    // spec.
    AccessMode *VolumeAccessMode `protobuf:"bytes,4,opt,name=access_mode,json=accessMode,proto3" json:"access_mode,omitempty"`
    // Secrets represents a set of key/value pairs to pass to the CSI plugin. The
    // keys of the secrets can be anything, but the values refer to swarmkit
    // Secret objects. See the "Secrets Requirements" section of the CSI Plugin
    // Spec for more information.
    Secrets []*VolumeSecret `protobuf:"bytes,5,rep,name=secrets,proto3" json:"secrets,omitempty"`
    // AccessibilityRequirements specifies where a volume must be accessible
    // from.
    //
    // This field must be empty if the plugin does not support
    // VOLUME_ACCESSIBILITY_CONSTRAINTS capabilities. If it is present but the
    // plugin does not support it, volume will not be created.
    //
    // If AccessibilityRequirements is empty, but the plugin does support
    // VOLUME_ACCESSIBILITY_CONSTRAINTS, then Swarmkit will assume the entire
    // cluster is a valid target for the volume.
    AccessibilityRequirements *TopologyRequirement `protobuf:"bytes,6,opt,name=AccessibilityRequirements,proto3" json:"AccessibilityRequirements,omitempty"`
    // CapacityRange is the capacity this volume should be created with. If nil,
    // the plugin will decide the capacity.
    CapacityRange *CapacityRange `protobuf:"bytes,7,opt,name=capacity_range,json=capacityRange,proto3" json:"capacity_range,omitempty"`
    // Availability is the Volume's desired availability. Analogous to Node
    // Availability, this allows the user to take volumes offline in order to
    // update or delete them.
    Availability VolumeSpec_VolumeAvailability `protobuf:"varint,8,opt,name=availability,proto3,enum=docker.swarmkit.v1.VolumeSpec_VolumeAvailability" json:"availability,omitempty"`
}

func (m *VolumeSpec) Reset()      { *m = VolumeSpec{} }
func (*VolumeSpec) ProtoMessage() {}
func (*VolumeSpec) Descriptor() ([]byte, []int) {
    return fileDescriptor_6589acc608f7d4fd, []int{16}
}
func (m *VolumeSpec) XXX_Unmarshal(b []byte) error {
    return m.Unmarshal(b)
}
func (m *VolumeSpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
    if deterministic {
        return xxx_messageInfo_VolumeSpec.Marshal(b, m, deterministic)
    } else {
        b = b[:cap(b)]
        n, err := m.MarshalToSizedBuffer(b)
        if err != nil {
            return nil, err
        }
        return b[:n], nil
    }
}
func (m *VolumeSpec) XXX_Merge(src proto.Message) {
    xxx_messageInfo_VolumeSpec.Merge(m, src)
}
func (m *VolumeSpec) XXX_Size() int {
    return m.Size()
}
func (m *VolumeSpec) XXX_DiscardUnknown() {
    xxx_messageInfo_VolumeSpec.DiscardUnknown(m)
}

var xxx_messageInfo_VolumeSpec proto.InternalMessageInfo

func init() {
    proto.RegisterEnum("docker.swarmkit.v1.NodeSpec_Membership", NodeSpec_Membership_name, NodeSpec_Membership_value)
    proto.RegisterEnum("docker.swarmkit.v1.NodeSpec_Availability", NodeSpec_Availability_name, NodeSpec_Availability_value)
    proto.RegisterEnum("docker.swarmkit.v1.ContainerSpec_Isolation", ContainerSpec_Isolation_name, ContainerSpec_Isolation_value)
    proto.RegisterEnum("docker.swarmkit.v1.EndpointSpec_ResolutionMode", EndpointSpec_ResolutionMode_name, EndpointSpec_ResolutionMode_value)
    proto.RegisterEnum("docker.swarmkit.v1.VolumeSpec_VolumeAvailability", VolumeSpec_VolumeAvailability_name, VolumeSpec_VolumeAvailability_value)
    proto.RegisterType((*NodeSpec)(nil), "docker.swarmkit.v1.NodeSpec")
    proto.RegisterType((*ServiceSpec)(nil), "docker.swarmkit.v1.ServiceSpec")
    proto.RegisterType((*ReplicatedService)(nil), "docker.swarmkit.v1.ReplicatedService")
    proto.RegisterType((*GlobalService)(nil), "docker.swarmkit.v1.GlobalService")
    proto.RegisterType((*ReplicatedJob)(nil), "docker.swarmkit.v1.ReplicatedJob")
    proto.RegisterType((*GlobalJob)(nil), "docker.swarmkit.v1.GlobalJob")
    proto.RegisterType((*TaskSpec)(nil), "docker.swarmkit.v1.TaskSpec")
    proto.RegisterType((*ResourceReference)(nil), "docker.swarmkit.v1.ResourceReference")
    proto.RegisterType((*GenericRuntimeSpec)(nil), "docker.swarmkit.v1.GenericRuntimeSpec")
    proto.RegisterType((*NetworkAttachmentSpec)(nil), "docker.swarmkit.v1.NetworkAttachmentSpec")
    proto.RegisterType((*ContainerSpec)(nil), "docker.swarmkit.v1.ContainerSpec")
    proto.RegisterMapType((map[string]string)(nil), "docker.swarmkit.v1.ContainerSpec.LabelsEntry")
    proto.RegisterMapType((map[string]string)(nil), "docker.swarmkit.v1.ContainerSpec.SysctlsEntry")
    proto.RegisterType((*ContainerSpec_PullOptions)(nil), "docker.swarmkit.v1.ContainerSpec.PullOptions")
    proto.RegisterType((*ContainerSpec_DNSConfig)(nil), "docker.swarmkit.v1.ContainerSpec.DNSConfig")
    proto.RegisterType((*ContainerSpec_Ulimit)(nil), "docker.swarmkit.v1.ContainerSpec.Ulimit")
    proto.RegisterType((*EndpointSpec)(nil), "docker.swarmkit.v1.EndpointSpec")
    proto.RegisterType((*NetworkSpec)(nil), "docker.swarmkit.v1.NetworkSpec")
    proto.RegisterType((*ClusterSpec)(nil), "docker.swarmkit.v1.ClusterSpec")
    proto.RegisterType((*SecretSpec)(nil), "docker.swarmkit.v1.SecretSpec")
    proto.RegisterType((*ConfigSpec)(nil), "docker.swarmkit.v1.ConfigSpec")
    proto.RegisterType((*VolumeSpec)(nil), "docker.swarmkit.v1.VolumeSpec")
}

func init() {
    proto.RegisterFile("github.com/docker/swarmkit/api/specs.proto", fileDescriptor_6589acc608f7d4fd)
}

var fileDescriptor_6589acc608f7d4fd = []byte{
    // 2537 bytes of a gzipped FileDescriptorProto
    0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x59, 0x41, 0x73, 0x1b, 0xb7,
    0x15, 0x26, 0x25, 0x8a, 0x22, 0xdf, 0x92, 0x32, 0x8d, 0x38, 0xc9, 0x8a, 0xb6, 0x29, 0x86, 0x71,
    0x1c, 0x25, 0x99, 0x52, 0x13, 0x35, 0x93, 0x26, 0x4e, 0xd3, 0x96, 0x14, 0x19, 0x8b, 0xb1, 0x2d,
    0x73, 0x40, 0x59, 0xad, 0x67, 0x3a, 0xc3, 0x81, 0x76, 0x21, 0x72, 0xab, 0xe5, 0x62, 0x8b, 0x05,
    0x95, 0xf0, 0xd6, 0x63, 0xc6, 0xbd, 0xf4, 0xd0, 0xab, 0x4e, 0x9d, 0x9e, 0x7a, 0x69, 0xff, 0x41,
    0x7b, 0xcb, 0x31, 0xc7, 0xf4, 0xa2, 0x69, 0x94, 0x9f, 0xd0, 0x5b, 0x2f, 0xed, 0x00, 0x8b, 0x5d,
    0x2e, 0x25, 0xd2, 0x72, 0xa7, 0x3e, 0xf4, 0x06, 0x3c, 0x7e, 0xdf, 0x5b, 0xe0, 0xe1, 0xbd, 0x87,
    0xf7, 0x40, 0x78, 0x77, 0xe0, 0x88, 0xe1, 0xf8, 0xb0, 0x6e, 0xb1, 0xd1, 0x96, 0xcd, 0xac, 0x63,
    0xca, 0xb7, 0x82, 0x2f, 0x08, 0x1f, 0x1d, 0x3b, 0x62, 0x8b, 0xf8, 0xce, 0x56, 0xe0, 0x53, 0x2b,
    0xa8, 0xfb, 0x9c, 0x09, 0x86, 0x50, 0x08, 0xa8, 0x47, 0x80, 0xfa, 0xc9, 0xfb, 0xe5, 0xab, 0xf8,
    0x62, 0xe2, 0x53, 0xcd, 0x2f, 0xdf, 0x18, 0xb0, 0x01, 0x53, 0xc3, 0x2d, 0x39, 0xd2, 0xd2, 0xca,
    0x80, 0xb1, 0x81, 0x4b, 0xb7, 0xd4, 0xec, 0x70, 0x7c, 0xb4, 0x65, 0x8f, 0x39, 0x11, 0x0e, 0xf3,
    0xf4, 0xef, 0xeb, 0x17, 0x7f, 0x27, 0xde, 0x64, 0x11, 0xf5, 0x0b, 0x4e, 0x7c, 0x9f, 0x72, 0xfd,
    0xc1, 0xda, 0x69, 0x06, 0x72, 0x7b, 0xcc, 0xa6, 0x3d, 0x9f, 0x5a, 0xe8, 0x3e, 0x18, 0xc4, 0xf3,
    0x98, 0x50, 0xba, 0x03, 0x33, 0x5d, 0x4d, 0x6f, 0x1a, 0xdb, 0x1b, 0xf5, 0xcb, 0x7b, 0xaa, 0x37,
    0xa6, 0xb0, 0x66, 0xe6, 0xeb, 0xb3, 0x8d, 0x14, 0x4e, 0x32, 0xd1, 0x4f, 0xa1, 0x60, 0xd3, 0xc0,
    0xe1, 0xd4, 0xee, 0x73, 0xe6, 0x52, 0x73, 0xa9, 0x9a, 0xde, 0x5c, 0xdb, 0xbe, 0x35, 0x4f, 0x93,
    0xfc, 0x38, 0x66, 0x2e, 0xc5, 0x86, 0x66, 0xc8, 0x09, 0xba, 0x0f, 0x30, 0xa2, 0xa3, 0x43, 0xca,
    0x83, 0xa1, 0xe3, 0x9b, 0xcb, 0x8a, 0xfe, 0xf6, 0x22, 0xba, 0x5c, 0x7b, 0xfd, 0x51, 0x0c, 0xc7,
    0x09, 0x2a, 0x7a, 0x04, 0x05, 0x72, 0x42, 0x1c, 0x97, 0x1c, 0x3a, 0xae, 0x23, 0x26, 0x66, 0x46,
    0xa9, 0x7a, 0xe7, 0xb9, 0xaa, 0x1a, 0x09, 0x02, 0x9e, 0xa1, 0xd7, 0x6c, 0x80, 0xe9, 0x87, 0xd0,
    0x5d, 0x58, 0xed, 0xb6, 0xf7, 0x5a, 0x9d, 0xbd, 0xfb, 0xa5, 0x54, 0x79, 0xfd, 0xd9, 0x69, 0xf5,
    0x55, 0xa9, 0x63, 0x0a, 0xe8, 0x52, 0xcf, 0x76, 0xbc, 0x01, 0xda, 0x84, 0x5c, 0x63, 0x67, 0xa7,
    0xdd, 0xdd, 0x6f, 0xb7, 0x4a, 0xe9, 0x72, 0xf9, 0xd9, 0x69, 0xf5, 0xb5, 0x59, 0x60, 0xc3, 0xb2,
    0xa8, 0x2f, 0xa8, 0x5d, 0xce, 0x7c, 0xf5, 0x87, 0x4a, 0xaa, 0xf6, 0x55, 0x1a, 0x0a, 0xc9, 0x45,
    0xa0, 0xbb, 0x90, 0x6d, 0xec, 0xec, 0x77, 0x0e, 0xda, 0xa5, 0xd4, 0x94, 0x9e, 0x44, 0x34, 0x2c,
    0xe1, 0x9c, 0x50, 0x74, 0x07, 0x56, 0xba, 0x8d, 0x27, 0xbd, 0x76, 0x29, 0x3d, 0x5d, 0x4e, 0x12,
    0xd6, 0x25, 0xe3, 0x40, 0xa1, 0x5a, 0xb8, 0xd1, 0xd9, 0x2b, 0x2d, 0xcd, 0x47, 0xb5, 0x38, 0x71,
    0x3c, 0xbd, 0x94, 0x3f, 0xad, 0x80, 0xd1, 0xa3, 0xfc, 0xc4, 0xb1, 0x5e, 0xb2, 0x8b, 0x7c, 0x08,
    0x19, 0x41, 0x82, 0x63, 0xe5, 0x1a, 0xc6, 0x7c, 0xd7, 0xd8, 0x27, 0xc1, 0xb1, 0xfc, 0xa8, 0xa6,
    0x2b, 0xbc, 0xf4, 0x0c, 0x4e, 0x7d, 0xd7, 0xb1, 0x88, 0xa0, 0xb6, 0xf2, 0x0c, 0x63, 0xfb, 0xad,
    0x79, 0x6c, 0x1c, 0xa3, 0xf4, 0xfa, 0x77, 0x53, 0x38, 0x41, 0x45, 0x9f, 0x40, 0x76, 0xe0, 0xb2,
    0x43, 0xe2, 0x2a, 0x9f, 0x30, 0xb6, 0xdf, 0x98, 0xa7, 0xe4, 0xbe, 0x42, 0x4c, 0x15, 0x68, 0x0a,
    0xfa, 0x1c, 0xd6, 0xa6, 0xaa, 0xfa, 0xbf, 0x62, 0x87, 0x26, 0x2c, 0x56, 0x32, 0x5d, 0xc9, 0xe7,
    0xec, 0x70, 0x37, 0x85, 0x8b, 0x3c, 0x29, 0x40, 0x3f, 0x01, 0x08, 0xb5, 0x2a, 0x3d, 0x86, 0xd2,
    0x73, 0x7b, 0xf1, 0x62, 0x42, 0x1d, 0xf9, 0x41, 0x34, 0x41, 0x1f, 0x41, 0x76, 0xec, 0xdb, 0x44,
    0x50, 0x33, 0xab, 0xb8, 0xd5, 0x79, 0xdc, 0x27, 0x0a, 0xb1, 0xc3, 0xbc, 0x23, 0x67, 0x80, 0x35,
    0x1e, 0xfd, 0x18, 0x72, 0x9c, 0xb9, 0xee, 0x21, 0xb1, 0x8e, 0xcd, 0xfc, 0x0b, 0x72, 0x63, 0x06,
    0x7a, 0x00, 0x39, 0x8f, 0x8a, 0x2f, 0x18, 0x3f, 0x0e, 0xcc, 0xd5, 0xea, 0xf2, 0xa6, 0xb1, 0xfd,
    0xde, 0xdc, 0xb0, 0x0a, 0x31, 0x0d, 0x21, 0x88, 0x35, 0x1c, 0x51, 0x4f, 0x84, 0x8a, 0x9a, 0x4b,
    0x66, 0x1a, 0xc7, 0x0a, 0xe4, 0x52, 0xa8, 0x67, 0xfb, 0xcc, 0xf1, 0x84, 0x99, 0x5b, 0xbc, 0x94,
    0xb6, 0xc6, 0x48, 0xb7, 0xc0, 0x31, 0xa3, 0x99, 0x85, 0xcc, 0x88, 0xd9, 0xb4, 0xb6, 0x05, 0xd7,
    0x2f, 0x1d, 0x3b, 0x2a, 0x43, 0x4e, 0x1b, 0x3c, 0xf4, 0xd7, 0x0c, 0x8e, 0xe7, 0xb5, 0x6b, 0x50,
    0x9c, 0x39, 0xe2, 0x9a, 0x05, 0xc5, 0x99, 0xe3, 0x42, 0x6f, 0xc1, 0xda, 0x88, 0x7c, 0xd9, 0xb7,
    0x98, 0x67, 0x8d, 0x39, 0xa7, 0x9e, 0xd0, 0x3a, 0x8a, 0x23, 0xf2, 0xe5, 0x4e, 0x2c, 0x44, 0xef,
    0xc1, 0x75, 0xc1, 0x04, 0x71, 0xfb, 0x16, 0x1b, 0xf9, 0x2e, 0x0d, 0xa3, 0x63, 0x49, 0x21, 0x4b,
    0xea, 0x87, 0x9d, 0xa9, 0xbc, 0x66, 0x40, 0x3e, 0x3e, 0xcb, 0xda, 0x9f, 0x57, 0x20, 0x17, 0x79,
    0x3a, 0x7a, 0x00, 0x40, 0x62, 0x43, 0x69, 0x43, 0xbc, 0xf3, 0x42, 0x56, 0x95, 0x74, 0xe9, 0xe1,
    0x53, 0x3a, 0x6a, 0x40, 0xde, 0x62, 0x9e, 0x20, 0x8e, 0x47, 0xb9, 0x8e, 0xd4, 0xb9, 0xfe, 0xb9,
    0x13, 0x81, 0xb4, 0x8e, 0x29, 0x0b, 0x35, 0x61, 0x75, 0x40, 0x3d, 0xca, 0x1d, 0x4b, 0x3b, 0xf8,
    0xdd, 0xb9, 0x8e, 0x19, 0x42, 0xf0, 0xd8, 0x13, 0xce, 0x88, 0x6a, 0x2d, 0x11, 0x11, 0x7d, 0x06,
    0x79, 0x4e, 0x03, 0x36, 0xe6, 0x16, 0x0d, 0x74, 0xb8, 0x6f, 0xce, 0x0f, 0x93, 0x10, 0x84, 0xe9,
    0xaf, 0xc7, 0x0e, 0xa7, 0x72, 0x0b, 0x01, 0x9e, 0x52, 0xd1, 0x27, 0xb0, 0xca, 0x69, 0x20, 0x08,
    0x17, 0xcf, 0x8b, 0x58, 0x1c, 0x42, 0xba, 0xcc, 0x75, 0xac, 0x09, 0x8e, 0x18, 0xe8, 0x13, 0xc8,
    0xfb, 0x2e, 0xb1, 0x94, 0x56, 0x73, 0x65, 0x71, 0x8c, 0x75, 0x23, 0x10, 0x9e, 0xe2, 0xd1, 0xc7,
    0x00, 0x2e, 0x1b, 0xf4, 0x6d, 0xee, 0x9c, 0x50, 0xae, 0xa3, 0xac, 0x3c, 0x8f, 0xdd, 0x52, 0x08,
    0x9c, 0x77, 0xd9, 0x20, 0x1c, 0xa2, 0xfb, 0xff, 0x53, 0x90, 0x24, 0x02, 0xe4, 0x0d, 0x28, 0x1c,
    0x31, 0x6e, 0xd1, 0xbe, 0x8e, 0xf5, 0xbc, 0xf2, 0x2d, 0x43, 0xc9, 0xc2, 0x00, 0x45, 0xbf, 0x84,
    0x57, 0x22, 0x6b, 0xf5, 0x39, 0x3d, 0xa2, 0x9c, 0x7a, 0xd2, 0xe4, 0x86, 0xfa, 0xec, 0x5b, 0xcf,
    0x37, 0xb9, 0x46, 0xeb, 0x54, 0x8b, 0xf8, 0xc5, 0x1f, 0x82, 0x66, 0x1e, 0x56, 0x79, 0x78, 0xc0,
    0xb5, 0xdf, 0xa6, 0x65, 0x9c, 0x5d, 0x40, 0xa0, 0x2d, 0x30, 0xe2, 0xcf, 0x3b, 0xb6, 0x72, 0xb8,
    0x7c, 0x73, 0xed, 0xfc, 0x6c, 0x03, 0x22, 0x6c, 0xa7, 0x25, 0x33, 0xb0, 0x1e, 0xdb, 0xa8, 0x0d,
    0xc5, 0x98, 0x20, 0x8b, 0x20, 0x5d, 0x26, 0x54, 0x9f, 0xb7, 0xd2, 0xfd, 0x89, 0x4f, 0x71, 0x81,
    0x27, 0x66, 0xb5, 0x5f, 0x00, 0xba, 0xec, 0x80, 0x08, 0x41, 0xe6, 0xd8, 0xf1, 0xf4, 0x32, 0xb0,
    0x1a, 0xa3, 0x3a, 0xac, 0xfa, 0x64, 0xe2, 0x32, 0x62, 0x6b, 0x3f, 0xbc, 0x51, 0x0f, 0xcb, 0xa3,
    0x7a, 0x54, 0x1e, 0xd5, 0x1b, 0xde, 0x04, 0x47, 0xa0, 0xda, 0x03, 0x78, 0x75, 0x6e, 0x9c, 0xa1,
    0x6d, 0x28, 0xc4, 0x31, 0x32, 0xdd, 0xeb, 0xb5, 0xf3, 0xb3, 0x0d, 0x23, 0x0e, 0xa6, 0x4e, 0x0b,
    0x1b, 0x31, 0xa8, 0x63, 0xd7, 0xfe, 0xba, 0x06, 0xc5, 0x99, 0x48, 0x43, 0x37, 0x60, 0xc5, 0x19,
    0x91, 0x01, 0xd5, 0x6b, 0x0c, 0x27, 0xa8, 0x0d, 0x59, 0x97, 0x1c, 0x52, 0x57, 0xc6, 0x8a, 0x3c,
    0xb8, 0x1f, 0x5c, 0x19, 0xb2, 0xf5, 0x87, 0x0a, 0xdf, 0xf6, 0x04, 0x9f, 0x60, 0x4d, 0x46, 0x26,
    0xac, 0x5a, 0x6c, 0x34, 0x22, 0x9e, 0xbc, 0x24, 0x97, 0x37, 0xf3, 0x38, 0x9a, 0x4a, 0xcb, 0x10,
    0x3e, 0x08, 0xcc, 0x8c, 0x12, 0xab, 0xb1, 0xcc, 0x91, 0x43, 0x16, 0x08, 0x8f, 0x8c, 0xa8, 0xb9,
    0xa6, 0x56, 0x13, 0xcf, 0x51, 0x09, 0x96, 0xa9, 0x77, 0x62, 0xae, 0x28, 0xb8, 0x1c, 0x4a, 0x89,
    0xed, 0x84, 0x81, 0x90, 0xc7, 0x72, 0x28, 0x75, 0x8e, 0x03, 0xca, 0xcd, 0xd5, 0xd0, 0xda, 0x72,
    0x8c, 0x5e, 0x83, 0xec, 0x80, 0xb3, 0xb1, 0x1f, 0x7a, 0x60, 0x1e, 0xeb, 0x99, 0xbc, 0xef, 0x7c,
    0xee, 0x9c, 0x38, 0x2e, 0x1d, 0xd0, 0xc0, 0x7c, 0x4d, 0x1d, 0x44, 0x65, 0x6e, 0x2c, 0xc6, 0x28,
    0x9c, 0x60, 0xa0, 0x3a, 0x64, 0x1c, 0xcf, 0x11, 0xe6, 0xeb, 0x3a, 0x0e, 0x2f, 0x1e, 0x61, 0x93,
    0x31, 0xf7, 0x80, 0xb8, 0x63, 0x8a, 0x15, 0x0e, 0xad, 0xc3, 0xb2, 0x10, 0x13, 0xb3, 0x58, 0x4d,
    0x6f, 0xe6, 0x9a, 0xab, 0xe7, 0x67, 0x1b, 0xcb, 0xfb, 0xfb, 0x4f, 0xb1, 0x94, 0xa1, 0xdb, 0x00,
    0xcc, 0xa7, 0x5e, 0x3f, 0x10, 0xb6, 0xe3, 0x99, 0x48, 0x22, 0x70, 0x5e, 0x4a, 0x7a, 0x52, 0x80,
    0x6e, 0xca, 0xcc, 0x45, 0xec, 0x3e, 0xf3, 0xdc, 0x89, 0xf9, 0x8a, 0xfa, 0x35, 0x27, 0x05, 0x8f,
    0x3d, 0x77, 0x82, 0x36, 0xc0, 0x08, 0x04, 0xf3, 0xfb, 0x81, 0x33, 0xf0, 0x88, 0x6b, 0xde, 0x50,
    0x3b, 0x07, 0x29, 0xea, 0x29, 0x09, 0xfa, 0x11, 0x64, 0x47, 0x6c, 0xec, 0x89, 0xc0, 0xcc, 0xa9,
    0x83, 0x5c, 0x9f, 0xb7, 0xc7, 0x47, 0x12, 0xa1, 0xa3, 0x4e, 0xc3, 0x51, 0x1b, 0xae, 0x2b, 0xcd,
    0x03, 0x4e, 0x2c, 0xda, 0xf7, 0x29, 0x77, 0x98, 0xad, 0xef, 0xe7, 0xf5, 0x4b, 0xbb, 0x6d, 0xe9,
    0x56, 0x00, 0x5f, 0x93, 0x9c, 0xfb, 0x92, 0xd2, 0x55, 0x0c, 0xd4, 0x85, 0x82, 0x3f, 0x76, 0xdd,
    0x3e, 0xf3, 0xc3, 0xdb, 0x28, 0x4c, 0xe0, 0x2f, 0xe0, 0x4e, 0xdd, 0xb1, 0xeb, 0x3e, 0x0e, 0x49,
    0xd8, 0xf0, 0xa7, 0x13, 0xf4, 0x29, 0xac, 0x06, 0xd4, 0xe2, 0x54, 0x04, 0x66, 0x41, 0x6d, 0xe9,
    0xcd, 0x79, 0xca, 0x7a, 0x0a, 0x12, 0xe7, 0x05, 0x1c, 0x71, 0x24, 0xdd, 0x52, 0x69, 0x2d, 0x30,
    0x5f, 0x5d, 0x4c, 0xd7, 0x99, 0x6f, 0x4a, 0xd7, 0x1c, 0x19, 0x2e, 0xd2, 0x27, 0x03, 0xf3, 0xba,
    0x72, 0xa7, 0x70, 0x82, 0x9e, 0x02, 0xd8, 0x5e, 0xd0, 0x0f, 0x41, 0xe6, 0x35, 0xb5, 0xc7, 0xf7,
    0xae, 0xde, 0x63, 0x6b, 0xaf, 0xa7, 0xeb, 0x90, 0xe2, 0xf9, 0xd9, 0x46, 0x3e, 0x9e, 0xe2, 0xbc,
    0xed, 0x05, 0xe1, 0x10, 0x35, 0xc1, 0x18, 0x52, 0xe2, 0x8a, 0xa1, 0x35, 0xa4, 0xd6, 0xb1, 0x59,
    0x5a, 0x5c, 0x96, 0xec, 0x2a, 0x98, 0xd6, 0x90, 0x24, 0xa1, 0x0e, 0xe4, 0x9d, 0x80, 0xb9, 0xea,
    0x88, 0x4c, 0x53, 0xe5, 0xb7, 0x17, 0x58, 0x5d, 0x27, 0xa2, 0xe0, 0x29, 0x1b, 0xdd, 0x82, 0xbc,
    0xef, 0xd8, 0xc1, 0x43, 0x67, 0xe4, 0x08, 0x73, 0xbd, 0x9a, 0xde, 0x5c, 0xc6, 0x53, 0x01, 0xda,
    0x85, 0xd5, 0x60, 0x12, 0x58, 0xc2, 0x0d, 0xcc, 0xb2, 0x32, 0x6e, 0xfd, 0xea, 0xcf, 0xf4, 0x42,
    0x42, 0x98, 0x38, 0x22, 0xba, 0xac, 0x78, 0x2c, 0xe2, 0xeb, 0x5e, 0xa0, 0x4f, 0x6c, 0xdb, 0xbc,
    0xa9, 0x0c, 0x5e, 0x9c, 0x4a, 0x1b, 0xb6, 0x8d, 0xde, 0x86, 0x6b, 0x09, 0x98, 0xcd, 0x99, 0x6f,
    0xde, 0x52, 0xb8, 0x04, 0xbb, 0xc5, 0x99, 0x2f, 0x6b, 0x88, 0xb1, 0x2b, 0xd7, 0x18, 0x98, 0xb7,
    0xd5, 0xca, 0x36, 0xaf, 0x5e, 0xd9, 0x13, 0x45, 0xc0, 0x11, 0xb1, 0xfc, 0x31, 0x18, 0x89, 0x24,
    0x27, 0x13, 0xd0, 0x31, 0x9d, 0xe8, 0xbc, 0x29, 0x87, 0xd2, 0x39, 0x4e, 0x64, 0xcc, 0xab, 0xc4,
    0x9e, 0xc7, 0xe1, 0xe4, 0xde, 0xd2, 0x47, 0xe9, 0xf2, 0x36, 0x18, 0x09, 0x87, 0x46, 0x6f, 0xca,
    0x4b, 0x67, 0xe0, 0x04, 0x82, 0x4f, 0xfa, 0x64, 0x2c, 0x86, 0xe6, 0xcf, 0x14, 0xa1, 0x10, 0x09,
    0x1b, 0x63, 0x31, 0x2c, 0xf7, 0x61, 0xea, 0x11, 0xa8, 0x0a, 0x86, 0xcc, 0x83, 0x01, 0xe5, 0x27,
    0x94, 0xcb, 0x12, 0x52, 0x6e, 0x32, 0x29, 0x92, 0x99, 0x2e, 0xa0, 0x84, 0x5b, 0x43, 0x95, 0xb2,
    0xf3, 0x58, 0xcf, 0x64, 0x0e, 0x8e, 0x82, 0x4f, 0xe7, 0x60, 0x3d, 0x2d, 0xdf, 0x83, 0x42, 0xd2,
    0xf8, 0xff, 0xd5, 0x86, 0x5a, 0x90, 0x0d, 0xcd, 0x23, 0xb3, 0xae, 0xca, 0xd8, 0xfa, 0x8e, 0x53,
    0xd9, 0x1a, 0x41, 0x26, 0x60, 0x47, 0x42, 0xd1, 0x96, 0xb1, 0x1a, 0x4b, 0xd9, 0x90, 0xf0, 0xb0,
    0x5b, 0x5a, 0xc6, 0x6a, 0x5c, 0xfb, 0x4b, 0x1a, 0xf2, 0xb1, 0x9b, 0xa1, 0x0f, 0xe0, 0x7a, 0xa7,
    0xf7, 0xf8, 0x61, 0x63, 0xbf, 0xf3, 0x78, 0xaf, 0xdf, 0x6a, 0x7f, 0xd6, 0x78, 0xf2, 0x70, 0xbf,
    0x94, 0x2a, 0xdf, 0x7e, 0x76, 0x5a, 0x5d, 0x9f, 0xde, 0x68, 0x11, 0xbc, 0x45, 0x8f, 0xc8, 0xd8,
    0x15, 0xb3, 0xac, 0x2e, 0x7e, 0xbc, 0xd3, 0xee, 0xf5, 0x4a, 0xe9, 0x45, 0xac, 0x2e, 0x67, 0x16,
    0x0d, 0x02, 0xb4, 0x0d, 0xa5, 0x29, 0x6b, 0xf7, 0x69, 0xb7, 0x8d, 0x0f, 0x4a, 0x4b, 0xe5, 0x5b,
    0xcf, 0x4e, 0xab, 0xe6, 0x65, 0xd2, 0xee, 0xc4, 0xa7, 0xfc, 0x40, 0x37, 0xa3, 0xff, 0x4c, 0x43,
    0x21, 0xd9, 0x01, 0xa0, 0x9d, 0xb0, 0xee, 0x57, 0x06, 0x58, 0xdb, 0xde, 0xba, 0xaa, 0x63, 0x50,
    0x55, 0x84, 0x3b, 0x96, 0x7a, 0x1f, 0x31, 0x9b, 0x62, 0x45, 0x46, 0x1f, 0xc0, 0x8a, 0xcf, 0xb8,
    0x88, 0xee, 0xdb, 0xf9, 0x57, 0x11, 0xe3, 0x51, 0x49, 0x16, 0x82, 0x6b, 0x43, 0x58, 0x9b, 0xd5,
    0x86, 0xee, 0xc0, 0xf2, 0x41, 0xa7, 0x5b, 0x4a, 0x95, 0x6f, 0x3e, 0x3b, 0xad, 0xbe, 0x3e, 0xfb,
    0xe3, 0x81, 0xc3, 0xc5, 0x98, 0xb8, 0x9d, 0x2e, 0x7a, 0x17, 0x56, 0x5a, 0x7b, 0x3d, 0x8c, 0x4b,
    0xe9, 0xf2, 0xc6, 0xb3, 0xd3, 0xea, 0xcd, 0x59, 0x9c, 0xfc, 0x89, 0x8d, 0x3d, 0x1b, 0xb3, 0xc3,
    0xb8, 0x05, 0xff, 0xd7, 0x12, 0x18, 0xba, 0x0c, 0x79, 0xd9, 0xaf, 0x34, 0xc5, 0xb0, 0xa4, 0x8d,
    0xb2, 0xe7, 0xd2, 0x95, 0x95, 0x6d, 0x21, 0x24, 0xe8, 0xc8, 0x78, 0x03, 0x0a, 0x8e, 0x7f, 0xf2,
    0x61, 0x9f, 0x7a, 0xe4, 0xd0, 0xd5, 0xdd, 0x78, 0x0e, 0x1b, 0x52, 0xd6, 0x0e, 0x45, 0xb2, 0xb0,
    0x70, 0x3c, 0x41, 0xb9, 0xa7, 0xfb, 0xec, 0x1c, 0x8e, 0xe7, 0xe8, 0x53, 0xc8, 0x38, 0x3e, 0x19,
    0xe9, 0x72, 0x7c, 0xee, 0x0e, 0x3a, 0xdd, 0xc6, 0x23, 0x1d, 0xb9, 0xcd, 0xdc, 0xf9, 0xd9, 0x46,
    0x46, 0x0a, 0xb0, 0xa2, 0xa1, 0x4a, 0xd4, 0x2b, 0xc9, 0x2f, 0xa9, 0x62, 0x24, 0x87, 0x13, 0x12,
    0x19, 0x7d, 0x8e, 0x37, 0xe0, 0x34, 0x08, 0x54, 0x59, 0x92, 0xc3, 0xd1, 0x14, 0x95, 0x61, 0x55,
    0xd7, 0xd5, 0xaa, 0xc5, 0xca, 0xcb, 0x6e, 0x45, 0x0b, 0x9a, 0x45, 0x30, 0x42, 0x6b, 0xf4, 0x8f,
    0x38, 0x1b, 0xd5, 0xfe, 0x9d, 0x01, 0x63, 0xc7, 0x1d, 0x07, 0x42, 0xd7, 0x6c, 0x2f, 0xcd, 0xf8,
    0x4f, 0xe1, 0x3a, 0x51, 0xaf, 0x3e, 0xc4, 0x93, 0x97, 0xbc, 0x6a, 0x57, 0xf4, 0x01, 0xdc, 0x99,
    0xab, 0x2e, 0x06, 0x87, 0xad, 0x4d, 0x33, 0x2b, 0x75, 0x9a, 0x69, 0x5c, 0x22, 0x17, 0x7e, 0x41,
    0x3d, 0x28, 0x32, 0x6e, 0x0d, 0x69, 0x20, 0xc2, 0xd2, 0x40, 0xbf, 0x92, 0xcc, 0x7d, 0x3f, 0x7b,
    0x9c, 0x04, 0xea, 0x1b, 0x31, 0x5c, 0xed, 0xac, 0x0e, 0xf4, 0x11, 0x64, 0x38, 0x39, 0x8a, 0x5a,
    0xaf, 0xb9, 0x41, 0x82, 0xc9, 0x91, 0x98, 0x51, 0xa1, 0x18, 0xe8, 0x73, 0x00, 0xdb, 0x09, 0x7c,
    0x22, 0xac, 0x21, 0xe5, 0xfa, 0xb0, 0xe7, 0x6e, 0xb1, 0x15, 0xa3, 0x66, 0xb4, 0x24, 0xd8, 0xe8,
    0x01, 0xe4, 0x2d, 0x12, 0xb9, 0x6b, 0x76, 0xf1, 0xd3, 0xd1, 0x4e, 0x43, 0xab, 0x28, 0x49, 0x15,
    0xe7, 0x67, 0x1b, 0xb9, 0x48, 0x82, 0x73, 0x16, 0xd1, 0xee, 0xfb, 0x00, 0x8a, 0x82, 0x04, 0xc7,
    0x7d, 0x3b, 0x4c, 0x67, 0xa1, 0x9b, 0x2c, 0xb8, 0xe1, 0x65, 0x87, 0xae, 0xd3, 0x5e, 0x74, 0x9c,
    0x05, 0x91, 0x90, 0xa1, 0x9f, 0xc3, 0x75, 0xea, 0x59, 0x7c, 0xa2, 0x9c, 0x35, 0x5a, 0x61, 0x6e,
    0xf1, 0x66, 0xdb, 0x31, 0x78, 0x66, 0xb3, 0x25, 0x7a, 0x41, 0x5e, 0xfb, 0x7b, 0x1a, 0x20, 0x2c,
    0xa9, 0x5e, 0xae, 0x03, 0x22, 0xc8, 0xd8, 0x44, 0x10, 0xe5, 0x73, 0x05, 0xac, 0xc6, 0xe8, 0x1e,
    0x80, 0xa0, 0x23, 0x5f, 0xa6, 0x5e, 0x6f, 0xa0, 0xdd, 0xe6, 0x79, 0xe9, 0x20, 0x81, 0x46, 0xdb,
    0x90, 0xd5, 0x0d, 0x72, 0xe6, 0x4a, 0x9e, 0x46, 0xd6, 0xfe, 0x98, 0x06, 0x08, 0xb7, 0xf9, 0x7f,
    0xbd, 0xb7, 0xda, 0xdf, 0x56, 0x00, 0x0e, 0x98, 0x3b, 0x1e, 0xbd, 0xe4, 0x47, 0xd0, 0x1b, 0xb0,
    0xa2, 0x9a, 0xa2, 0xe8, 0x92, 0x57, 0x93, 0x84, 0x25, 0x97, 0x5f, 0xd4, 0x92, 0xa8, 0x0d, 0x86,
    0xcc, 0x03, 0x41, 0xd0, 0x57, 0x17, 0x62, 0x66, 0xb1, 0xe3, 0x85, 0xfb, 0x68, 0x28, 0xb0, 0xba,
    0x05, 0x81, 0xc4, 0x63, 0x74, 0x6f, 0x5a, 0xe1, 0xaf, 0xa8, 0xdb, 0xb0, 0xba, 0x58, 0x85, 0xae,
    0xf3, 0xe3, 0xf2, 0x9e, 0xc2, 0x7a, 0xa8, 0xd5, 0xd1, 0x4f, 0xe7, 0x89, 0x77, 0x1c, 0x1d, 0xab,
    0x73, 0x53, 0xd0, 0x3e, 0xf3, 0x99, 0xcb, 0x06, 0x49, 0x3c, 0x5e, 0xac, 0x09, 0xed, 0x86, 0xe5,
    0xa9, 0x25, 0xab, 0x4e, 0x4e, 0xbc, 0x01, 0xd5, 0x61, 0x3b, 0xff, 0x69, 0x4b, 0x23, 0xb1, 0x04,
    0x86, 0x15, 0x6c, 0x3c, 0x45, 0x4f, 0x2e, 0xfc, 0x37, 0x90, 0x53, 0x55, 0xc4, 0xfb, 0xcf, 0xd9,
    0xb1, 0xac, 0x21, 0xb4, 0xfd, 0x16, 0xff, 0x47, 0xf0, 0xfb, 0x34, 0xa0, 0xcb, 0x20, 0xb4, 0x99,
    0x78, 0xc3, 0x57, 0xc5, 0xce, 0x65, 0x8c, 0x7e, 0xc5, 0xbf, 0x3b, 0x7d, 0xc5, 0x57, 0xa5, 0xc4,
    0x65, 0x60, 0xf8, 0x8e, 0x7f, 0x77, 0xfa, 0x8e, 0xbf, 0x00, 0x97, 0x78, 0xc9, 0x6f, 0xde, 0xf9,
    0xfa, 0xbb, 0x4a, 0xea, 0xdb, 0xef, 0x2a, 0xa9, 0xdf, 0x9c, 0x57, 0xd2, 0x5f, 0x9f, 0x57, 0xd2,
    0xdf, 0x9c, 0x57, 0xd2, 0xff, 0x38, 0xaf, 0xa4, 0x7f, 0xf7, 0x7d, 0x25, 0xf5, 0xcd, 0xf7, 0x95,
    0xd4, 0xb7, 0xdf, 0x57, 0x52, 0x87, 0x59, 0xd5, 0x58, 0xfe, 0xf0, 0x3f, 0x01, 0x00, 0x00, 0xff,
    0xff, 0xd2, 0x36, 0x0b, 0x87, 0xf5, 0x1a, 0x00, 0x00,
}

func (m *NodeSpec) Copy() *NodeSpec {
    if m == nil {
        return nil
    }
    o := &NodeSpec{}
    o.CopyFrom(m)
    return o
}

func (m *NodeSpec) CopyFrom(src interface{}) {

    o := src.(*NodeSpec)
    *m = *o
    github_com_moby_swarmkit_v2_api_deepcopy.Copy(&m.Annotations, &o.Annotations)
}

func (m *ServiceSpec) Copy() *ServiceSpec {
    if m == nil {
        return nil
    }
    o := &ServiceSpec{}
    o.CopyFrom(m)
    return o
}

func (m *ServiceSpec) CopyFrom(src interface{}) {

    o := src.(*ServiceSpec)
    *m = *o
    github_com_moby_swarmkit_v2_api_deepcopy.Copy(&m.Annotations, &o.Annotations)
    github_com_moby_swarmkit_v2_api_deepcopy.Copy(&m.Task, &o.Task)
    if o.Update != nil {
        m.Update = &UpdateConfig{}
        github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Update, o.Update)
    }
    if o.Rollback != nil {
        m.Rollback = &UpdateConfig{}
        github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Rollback, o.Rollback)
    }
    if o.Networks != nil {
        m.Networks = make([]*NetworkAttachmentConfig, len(o.Networks))
        for i := range m.Networks {
            m.Networks[i] = &NetworkAttachmentConfig{}
            github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Networks[i], o.Networks[i])
        }
    }

    if o.Endpoint != nil {
        m.Endpoint = &EndpointSpec{}
        github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Endpoint, o.Endpoint)
    }
    if o.Mode != nil {
        switch o.Mode.(type) {
        case *ServiceSpec_Replicated:
            v := ServiceSpec_Replicated{
                Replicated: &ReplicatedService{},
            }
            github_com_moby_swarmkit_v2_api_deepcopy.Copy(v.Replicated, o.GetReplicated())
            m.Mode = &v
        case *ServiceSpec_Global:
            v := ServiceSpec_Global{
                Global: &GlobalService{},
            }
            github_com_moby_swarmkit_v2_api_deepcopy.Copy(v.Global, o.GetGlobal())
            m.Mode = &v
        case *ServiceSpec_ReplicatedJob:
            v := ServiceSpec_ReplicatedJob{
                ReplicatedJob: &ReplicatedJob{},
            }
            github_com_moby_swarmkit_v2_api_deepcopy.Copy(v.ReplicatedJob, o.GetReplicatedJob())
            m.Mode = &v
        case *ServiceSpec_GlobalJob:
            v := ServiceSpec_GlobalJob{
                GlobalJob: &GlobalJob{},
            }
            github_com_moby_swarmkit_v2_api_deepcopy.Copy(v.GlobalJob, o.GetGlobalJob())
            m.Mode = &v
        }
    }

}

func (m *ReplicatedService) Copy() *ReplicatedService {
    if m == nil {
        return nil
    }
    o := &ReplicatedService{}
    o.CopyFrom(m)
    return o
}

func (m *ReplicatedService) CopyFrom(src interface{}) {

    o := src.(*ReplicatedService)
    *m = *o
}

func (m *GlobalService) Copy() *GlobalService {
    if m == nil {
        return nil
    }
    o := &GlobalService{}
    o.CopyFrom(m)
    return o
}

func (m *GlobalService) CopyFrom(src interface{}) {}
func (m *ReplicatedJob) Copy() *ReplicatedJob {
    if m == nil {
        return nil
    }
    o := &ReplicatedJob{}
    o.CopyFrom(m)
    return o
}

func (m *ReplicatedJob) CopyFrom(src interface{}) {

    o := src.(*ReplicatedJob)
    *m = *o
}

func (m *GlobalJob) Copy() *GlobalJob {
    if m == nil {
        return nil
    }
    o := &GlobalJob{}
    o.CopyFrom(m)
    return o
}

func (m *GlobalJob) CopyFrom(src interface{}) {}
func (m *TaskSpec) Copy() *TaskSpec {
    if m == nil {
        return nil
    }
    o := &TaskSpec{}
    o.CopyFrom(m)
    return o
}

func (m *TaskSpec) CopyFrom(src interface{}) {

    o := src.(*TaskSpec)
    *m = *o
    if o.Resources != nil {
        m.Resources = &ResourceRequirements{}
        github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Resources, o.Resources)
    }
    if o.Restart != nil {
        m.Restart = &RestartPolicy{}
        github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Restart, o.Restart)
    }
    if o.Placement != nil {
        m.Placement = &Placement{}
        github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Placement, o.Placement)
    }
    if o.LogDriver != nil {
        m.LogDriver = &Driver{}
        github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.LogDriver, o.LogDriver)
    }
    if o.Networks != nil {
        m.Networks = make([]*NetworkAttachmentConfig, len(o.Networks))
        for i := range m.Networks {
            m.Networks[i] = &NetworkAttachmentConfig{}
            github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Networks[i], o.Networks[i])
        }
    }

    if o.ResourceReferences != nil {
        m.ResourceReferences = make([]ResourceReference, len(o.ResourceReferences))
        for i := range m.ResourceReferences {
            github_com_moby_swarmkit_v2_api_deepcopy.Copy(&m.ResourceReferences[i], &o.ResourceReferences[i])
        }
    }

    if o.Runtime != nil {
        switch o.Runtime.(type) {
        case *TaskSpec_Attachment:
            v := TaskSpec_Attachment{
                Attachment: &NetworkAttachmentSpec{},
            }
            github_com_moby_swarmkit_v2_api_deepcopy.Copy(v.Attachment, o.GetAttachment())
            m.Runtime = &v
        case *TaskSpec_Container:
            v := TaskSpec_Container{
                Container: &ContainerSpec{},
            }
            github_com_moby_swarmkit_v2_api_deepcopy.Copy(v.Container, o.GetContainer())
            m.Runtime = &v
        case *TaskSpec_Generic:
            v := TaskSpec_Generic{
                Generic: &GenericRuntimeSpec{},
            }
            github_com_moby_swarmkit_v2_api_deepcopy.Copy(v.Generic, o.GetGeneric())
            m.Runtime = &v
        }
    }

}

func (m *ResourceReference) Copy() *ResourceReference {
    if m == nil {
        return nil
    }
    o := &ResourceReference{}
    o.CopyFrom(m)
    return o
}

func (m *ResourceReference) CopyFrom(src interface{}) {

    o := src.(*ResourceReference)
    *m = *o
}

func (m *GenericRuntimeSpec) Copy() *GenericRuntimeSpec {
    if m == nil {
        return nil
    }
    o := &GenericRuntimeSpec{}
    o.CopyFrom(m)
    return o
}

func (m *GenericRuntimeSpec) CopyFrom(src interface{}) {

    o := src.(*GenericRuntimeSpec)
    *m = *o
    if o.Payload != nil {
        m.Payload = &types.Any{}
        github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Payload, o.Payload)
    }
}

func (m *NetworkAttachmentSpec) Copy() *NetworkAttachmentSpec {
    if m == nil {
        return nil
    }
    o := &NetworkAttachmentSpec{}
    o.CopyFrom(m)
    return o
}

func (m *NetworkAttachmentSpec) CopyFrom(src interface{}) {

    o := src.(*NetworkAttachmentSpec)
    *m = *o
}

func (m *ContainerSpec) Copy() *ContainerSpec {
    if m == nil {
        return nil
    }
    o := &ContainerSpec{}
    o.CopyFrom(m)
    return o
}

func (m *ContainerSpec) CopyFrom(src interface{}) {

    o := src.(*ContainerSpec)
    *m = *o
    if o.Labels != nil {
        m.Labels = make(map[string]string, len(o.Labels))
        for k, v := range o.Labels {
            m.Labels[k] = v
        }
    }

    if o.Command != nil {
        m.Command = make([]string, len(o.Command))
        copy(m.Command, o.Command)
    }

    if o.Args != nil {
        m.Args = make([]string, len(o.Args))
        copy(m.Args, o.Args)
    }

    if o.Env != nil {
        m.Env = make([]string, len(o.Env))
        copy(m.Env, o.Env)
    }

    if o.Groups != nil {
        m.Groups = make([]string, len(o.Groups))
        copy(m.Groups, o.Groups)
    }

    if o.Privileges != nil {
        m.Privileges = &Privileges{}
        github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Privileges, o.Privileges)
    }
    if o.Init != nil {
        m.Init = &types.BoolValue{}
        github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Init, o.Init)
    }
    if o.Mounts != nil {
        m.Mounts = make([]Mount, len(o.Mounts))
        for i := range m.Mounts {
            github_com_moby_swarmkit_v2_api_deepcopy.Copy(&m.Mounts[i], &o.Mounts[i])
        }
    }

    if o.StopGracePeriod != nil {
        m.StopGracePeriod = &types.Duration{}
        github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.StopGracePeriod, o.StopGracePeriod)
    }
    if o.PullOptions != nil {
        m.PullOptions = &ContainerSpec_PullOptions{}
        github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.PullOptions, o.PullOptions)
    }
    if o.Secrets != nil {
        m.Secrets = make([]*SecretReference, len(o.Secrets))
        for i := range m.Secrets {
            m.Secrets[i] = &SecretReference{}
            github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Secrets[i], o.Secrets[i])
        }
    }

    if o.Configs != nil {
        m.Configs = make([]*ConfigReference, len(o.Configs))
        for i := range m.Configs {
            m.Configs[i] = &ConfigReference{}
            github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Configs[i], o.Configs[i])
        }
    }

    if o.Hosts != nil {
        m.Hosts = make([]string, len(o.Hosts))
        copy(m.Hosts, o.Hosts)
    }

    if o.DNSConfig != nil {
        m.DNSConfig = &ContainerSpec_DNSConfig{}
        github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.DNSConfig, o.DNSConfig)
    }
    if o.Healthcheck != nil {
        m.Healthcheck = &HealthConfig{}
        github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Healthcheck, o.Healthcheck)
    }
    if o.Sysctls != nil {
        m.Sysctls = make(map[string]string, len(o.Sysctls))
        for k, v := range o.Sysctls {
            m.Sysctls[k] = v
        }
    }

    if o.CapabilityAdd != nil {
        m.CapabilityAdd = make([]string, len(o.CapabilityAdd))
        copy(m.CapabilityAdd, o.CapabilityAdd)
    }

    if o.CapabilityDrop != nil {
        m.CapabilityDrop = make([]string, len(o.CapabilityDrop))
        copy(m.CapabilityDrop, o.CapabilityDrop)
    }

    if o.Ulimits != nil {
        m.Ulimits = make([]*ContainerSpec_Ulimit, len(o.Ulimits))
        for i := range m.Ulimits {
            m.Ulimits[i] = &ContainerSpec_Ulimit{}
            github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Ulimits[i], o.Ulimits[i])
        }
    }

}

func (m *ContainerSpec_PullOptions) Copy() *ContainerSpec_PullOptions {
    if m == nil {
        return nil
    }
    o := &ContainerSpec_PullOptions{}
    o.CopyFrom(m)
    return o
}

func (m *ContainerSpec_PullOptions) CopyFrom(src interface{}) {

    o := src.(*ContainerSpec_PullOptions)
    *m = *o
}

func (m *ContainerSpec_DNSConfig) Copy() *ContainerSpec_DNSConfig {
    if m == nil {
        return nil
    }
    o := &ContainerSpec_DNSConfig{}
    o.CopyFrom(m)
    return o
}

func (m *ContainerSpec_DNSConfig) CopyFrom(src interface{}) {

    o := src.(*ContainerSpec_DNSConfig)
    *m = *o
    if o.Nameservers != nil {
        m.Nameservers = make([]string, len(o.Nameservers))
        copy(m.Nameservers, o.Nameservers)
    }

    if o.Search != nil {
        m.Search = make([]string, len(o.Search))
        copy(m.Search, o.Search)
    }

    if o.Options != nil {
        m.Options = make([]string, len(o.Options))
        copy(m.Options, o.Options)
    }

}

func (m *ContainerSpec_Ulimit) Copy() *ContainerSpec_Ulimit {
    if m == nil {
        return nil
    }
    o := &ContainerSpec_Ulimit{}
    o.CopyFrom(m)
    return o
}

func (m *ContainerSpec_Ulimit) CopyFrom(src interface{}) {

    o := src.(*ContainerSpec_Ulimit)
    *m = *o
}

func (m *EndpointSpec) Copy() *EndpointSpec {
    if m == nil {
        return nil
    }
    o := &EndpointSpec{}
    o.CopyFrom(m)
    return o
}

func (m *EndpointSpec) CopyFrom(src interface{}) {

    o := src.(*EndpointSpec)
    *m = *o
    if o.Ports != nil {
        m.Ports = make([]*PortConfig, len(o.Ports))
        for i := range m.Ports {
            m.Ports[i] = &PortConfig{}
            github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Ports[i], o.Ports[i])
        }
    }

}

func (m *NetworkSpec) Copy() *NetworkSpec {
    if m == nil {
        return nil
    }
    o := &NetworkSpec{}
    o.CopyFrom(m)
    return o
}

func (m *NetworkSpec) CopyFrom(src interface{}) {

    o := src.(*NetworkSpec)
    *m = *o
    github_com_moby_swarmkit_v2_api_deepcopy.Copy(&m.Annotations, &o.Annotations)
    if o.DriverConfig != nil {
        m.DriverConfig = &Driver{}
        github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.DriverConfig, o.DriverConfig)
    }
    if o.IPAM != nil {
        m.IPAM = &IPAMOptions{}
        github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.IPAM, o.IPAM)
    }
    if o.ConfigFrom != nil {
        switch o.ConfigFrom.(type) {
        case *NetworkSpec_Network:
            v := NetworkSpec_Network{
                Network: o.GetNetwork(),
            }
            m.ConfigFrom = &v
        }
    }

}

func (m *ClusterSpec) Copy() *ClusterSpec {
    if m == nil {
        return nil
    }
    o := &ClusterSpec{}
    o.CopyFrom(m)
    return o
}

func (m *ClusterSpec) CopyFrom(src interface{}) {

    o := src.(*ClusterSpec)
    *m = *o
    github_com_moby_swarmkit_v2_api_deepcopy.Copy(&m.Annotations, &o.Annotations)
    github_com_moby_swarmkit_v2_api_deepcopy.Copy(&m.AcceptancePolicy, &o.AcceptancePolicy)
    github_com_moby_swarmkit_v2_api_deepcopy.Copy(&m.Orchestration, &o.Orchestration)
    github_com_moby_swarmkit_v2_api_deepcopy.Copy(&m.Raft, &o.Raft)
    github_com_moby_swarmkit_v2_api_deepcopy.Copy(&m.Dispatcher, &o.Dispatcher)
    github_com_moby_swarmkit_v2_api_deepcopy.Copy(&m.CAConfig, &o.CAConfig)
    github_com_moby_swarmkit_v2_api_deepcopy.Copy(&m.TaskDefaults, &o.TaskDefaults)
    github_com_moby_swarmkit_v2_api_deepcopy.Copy(&m.EncryptionConfig, &o.EncryptionConfig)
}

func (m *SecretSpec) Copy() *SecretSpec {
    if m == nil {
        return nil
    }
    o := &SecretSpec{}
    o.CopyFrom(m)
    return o
}

func (m *SecretSpec) CopyFrom(src interface{}) {

    o := src.(*SecretSpec)
    *m = *o
    github_com_moby_swarmkit_v2_api_deepcopy.Copy(&m.Annotations, &o.Annotations)
    if o.Data != nil {
        m.Data = make([]byte, len(o.Data))
        copy(m.Data, o.Data)
    }
    if o.Templating != nil {
        m.Templating = &Driver{}
        github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Templating, o.Templating)
    }
    if o.Driver != nil {
        m.Driver = &Driver{}
        github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Driver, o.Driver)
    }
}

func (m *ConfigSpec) Copy() *ConfigSpec {
    if m == nil {
        return nil
    }
    o := &ConfigSpec{}
    o.CopyFrom(m)
    return o
}

func (m *ConfigSpec) CopyFrom(src interface{}) {

    o := src.(*ConfigSpec)
    *m = *o
    github_com_moby_swarmkit_v2_api_deepcopy.Copy(&m.Annotations, &o.Annotations)
    if o.Data != nil {
        m.Data = make([]byte, len(o.Data))
        copy(m.Data, o.Data)
    }
    if o.Templating != nil {
        m.Templating = &Driver{}
        github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Templating, o.Templating)
    }
}

func (m *VolumeSpec) Copy() *VolumeSpec {
    if m == nil {
        return nil
    }
    o := &VolumeSpec{}
    o.CopyFrom(m)
    return o
}

func (m *VolumeSpec) CopyFrom(src interface{}) {

    o := src.(*VolumeSpec)
    *m = *o
    github_com_moby_swarmkit_v2_api_deepcopy.Copy(&m.Annotations, &o.Annotations)
    if o.Driver != nil {
        m.Driver = &Driver{}
        github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Driver, o.Driver)
    }
    if o.AccessMode != nil {
        m.AccessMode = &VolumeAccessMode{}
        github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.AccessMode, o.AccessMode)
    }
    if o.Secrets != nil {
        m.Secrets = make([]*VolumeSecret, len(o.Secrets))
        for i := range m.Secrets {
            m.Secrets[i] = &VolumeSecret{}
            github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.Secrets[i], o.Secrets[i])
        }
    }

    if o.AccessibilityRequirements != nil {
        m.AccessibilityRequirements = &TopologyRequirement{}
        github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.AccessibilityRequirements, o.AccessibilityRequirements)
    }
    if o.CapacityRange != nil {
        m.CapacityRange = &CapacityRange{}
        github_com_moby_swarmkit_v2_api_deepcopy.Copy(m.CapacityRange, o.CapacityRange)
    }
}

func (m *NodeSpec) Marshal() (dAtA []byte, err error) {
    size := m.Size()
    dAtA = make([]byte, size)
    n, err := m.MarshalToSizedBuffer(dAtA[:size])
    if err != nil {
        return nil, err
    }
    return dAtA[:n], nil
}

func (m *NodeSpec) MarshalTo(dAtA []byte) (int, error) {
    size := m.Size()
    return m.MarshalToSizedBuffer(dAtA[:size])
}

func (m *NodeSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) {
    i := len(dAtA)
    _ = i
    var l int
    _ = l
    if m.Availability != 0 {
        i = encodeVarintSpecs(dAtA, i, uint64(m.Availability))
        i--
        dAtA[i] = 0x20
    }
    if m.Membership != 0 {
        i = encodeVarintSpecs(dAtA, i, uint64(m.Membership))
        i--
        dAtA[i] = 0x18
    }
    if m.DesiredRole != 0 {
        i = encodeVarintSpecs(dAtA, i, uint64(m.DesiredRole))
        i--
        dAtA[i] = 0x10
    }
    {
        size, err := m.Annotations.MarshalToSizedBuffer(dAtA[:i])
        if err != nil {
            return 0, err
        }
        i -= size
        i = encodeVarintSpecs(dAtA, i, uint64(size))
    }
    i--
    dAtA[i] = 0xa
    return len(dAtA) - i, nil
}

func (m *ServiceSpec) Marshal() (dAtA []byte, err error) {
    size := m.Size()
    dAtA = make([]byte, size)
    n, err := m.MarshalToSizedBuffer(dAtA[:size])
    if err != nil {
        return nil, err
    }
    return dAtA[:n], nil
}

func (m *ServiceSpec) MarshalTo(dAtA []byte) (int, error) {
    size := m.Size()
    return m.MarshalToSizedBuffer(dAtA[:size])
}

func (m *ServiceSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) {
    i := len(dAtA)
    _ = i
    var l int
    _ = l
    if m.Mode != nil {
        {
            size := m.Mode.Size()
            i -= size
            if _, err := m.Mode.MarshalTo(dAtA[i:]); err != nil {
                return 0, err
            }
        }
    }
    if m.Rollback != nil {
        {
            size, err := m.Rollback.MarshalToSizedBuffer(dAtA[:i])
            if err != nil {
                return 0, err
            }
            i -= size
            i = encodeVarintSpecs(dAtA, i, uint64(size))
        }
        i--
        dAtA[i] = 0x4a
    }
    if m.Endpoint != nil {
        {
            size, err := m.Endpoint.MarshalToSizedBuffer(dAtA[:i])
            if err != nil {
                return 0, err
            }
            i -= size
            i = encodeVarintSpecs(dAtA, i, uint64(size))
        }
        i--
        dAtA[i] = 0x42
    }
    if len(m.Networks) > 0 {
        for iNdEx := len(m.Networks) - 1; iNdEx >= 0; iNdEx-- {
            {
                size, err := m.Networks[iNdEx].MarshalToSizedBuffer(dAtA[:i])
                if err != nil {
                    return 0, err
                }
                i -= size
                i = encodeVarintSpecs(dAtA, i, uint64(size))
            }
            i--
            dAtA[i] = 0x3a
        }
    }
    if m.Update != nil {
        {
            size, err := m.Update.MarshalToSizedBuffer(dAtA[:i])
            if err != nil {
                return 0, err
            }
            i -= size
            i = encodeVarintSpecs(dAtA, i, uint64(size))
        }
        i--
        dAtA[i] = 0x32
    }
    {
        size, err := m.Task.MarshalToSizedBuffer(dAtA[:i])
        if err != nil {
            return 0, err
        }
        i -= size
        i = encodeVarintSpecs(dAtA, i, uint64(size))
    }
    i--
    dAtA[i] = 0x12
    {
        size, err := m.Annotations.MarshalToSizedBuffer(dAtA[:i])
        if err != nil {
            return 0, err
        }
        i -= size
        i = encodeVarintSpecs(dAtA, i, uint64(size))
    }
    i--
    dAtA[i] = 0xa
    return len(dAtA) - i, nil
}

func (m *ServiceSpec_Replicated) MarshalTo(dAtA []byte) (int, error) {
    size := m.Size()
    return m.MarshalToSizedBuffer(dAtA[:size])
}

func (m *ServiceSpec_Replicated) MarshalToSizedBuffer(dAtA []byte) (int, error) {
    i := len(dAtA)
    if m.Replicated != nil {
        {
            size, err := m.Replicated.MarshalToSizedBuffer(dAtA[:i])
            if err != nil {
                return 0, err
            }
            i -= size
            i = encodeVarintSpecs(dAtA, i, uint64(size))
        }
        i--
        dAtA[i] = 0x1a
    }
    return len(dAtA) - i, nil
}
func (m *ServiceSpec_Global) MarshalTo(dAtA []byte) (int, error) {
    size := m.Size()
    return m.MarshalToSizedBuffer(dAtA[:size])
}

func (m *ServiceSpec_Global) MarshalToSizedBuffer(dAtA []byte) (int, error) {
    i := len(dAtA)
    if m.Global != nil {
        {
            size, err := m.Global.MarshalToSizedBuffer(dAtA[:i])
            if err != nil {
                return 0, err
            }
            i -= size
            i = encodeVarintSpecs(dAtA, i, uint64(size))
        }
        i--
        dAtA[i] = 0x22
    }
    return len(dAtA) - i, nil
}
func (m *ServiceSpec_ReplicatedJob) MarshalTo(dAtA []byte) (int, error) {
    size := m.Size()
    return m.MarshalToSizedBuffer(dAtA[:size])
}

func (m *ServiceSpec_ReplicatedJob) MarshalToSizedBuffer(dAtA []byte) (int, error) {
    i := len(dAtA)
    if m.ReplicatedJob != nil {
        {
            size, err := m.ReplicatedJob.MarshalToSizedBuffer(dAtA[:i])
            if err != nil {
                return 0, err
            }
            i -= size
            i = encodeVarintSpecs(dAtA, i, uint64(size))
        }
        i--
        dAtA[i] = 0x52
    }
    return len(dAtA) - i, nil
}
func (m *ServiceSpec_GlobalJob) MarshalTo(dAtA []byte) (int, error) {
    size := m.Size()
    return m.MarshalToSizedBuffer(dAtA[:size])
}

func (m *ServiceSpec_GlobalJob) MarshalToSizedBuffer(dAtA []byte) (int, error) {
    i := len(dAtA)
    if m.GlobalJob != nil {
        {
            size, err := m.GlobalJob.MarshalToSizedBuffer(dAtA[:i])
            if err != nil {
                return 0, err
            }
            i -= size
            i = encodeVarintSpecs(dAtA, i, uint64(size))
        }
        i--
        dAtA[i] = 0x5a
    }
    return len(dAtA) - i, nil
}
func (m *ReplicatedService) Marshal() (dAtA []byte, err error) {
    size := m.Size()
    dAtA = make([]byte, size)
    n, err := m.MarshalToSizedBuffer(dAtA[:size])
    if err != nil {
        return nil, err
    }
    return dAtA[:n], nil
}

func (m *ReplicatedService) MarshalTo(dAtA []byte) (int, error) {
    size := m.Size()
    return m.MarshalToSizedBuffer(dAtA[:size])
}

func (m *ReplicatedService) MarshalToSizedBuffer(dAtA []byte) (int, error) {
    i := len(dAtA)
    _ = i
    var l int
    _ = l
    if m.Replicas != 0 {
        i = encodeVarintSpecs(dAtA, i, uint64(m.Replicas))
        i--
        dAtA[i] = 0x8
    }
    return len(dAtA) - i, nil
}

func (m *GlobalService) Marshal() (dAtA []byte, err error) {
    size := m.Size()
    dAtA = make([]byte, size)
    n, err := m.MarshalToSizedBuffer(dAtA[:size])
    if err != nil {
        return nil, err
    }
    return dAtA[:n], nil
}

func (m *GlobalService) MarshalTo(dAtA []byte) (int, error) {
    size := m.Size()
    return m.MarshalToSizedBuffer(dAtA[:size])
}

func (m *GlobalService) MarshalToSizedBuffer(dAtA []byte) (int, error) {
    i := len(dAtA)
    _ = i
    var l int
    _ = l
    return len(dAtA) - i, nil
}

func (m *ReplicatedJob) Marshal() (dAtA []byte, err error) {
    size := m.Size()
    dAtA = make([]byte, size)
    n, err := m.MarshalToSizedBuffer(dAtA[:size])
    if err != nil {
        return nil, err
    }
    return dAtA[:n], nil
}

func (m *ReplicatedJob) MarshalTo(dAtA []byte) (int, error) {
    size := m.Size()
    return m.MarshalToSizedBuffer(dAtA[:size])
}

func (m *ReplicatedJob) MarshalToSizedBuffer(dAtA []byte) (int, error) {
    i := len(dAtA)
    _ = i
    var l int
    _ = l
    if m.TotalCompletions != 0 {
        i = encodeVarintSpecs(dAtA, i, uint64(m.TotalCompletions))
        i--
        dAtA[i] = 0x10
    }
    if m.MaxConcurrent != 0 {
        i = encodeVarintSpecs(dAtA, i, uint64(m.MaxConcurrent))
        i--
        dAtA[i] = 0x8
    }
    return len(dAtA) - i, nil
}

func (m *GlobalJob) Marshal() (dAtA []byte, err error) {
    size := m.Size()
    dAtA = make([]byte, size)
    n, err := m.MarshalToSizedBuffer(dAtA[:size])
    if err != nil {
        return nil, err
    }
    return dAtA[:n], nil
}

func (m *GlobalJob) MarshalTo(dAtA []byte) (int, error) {
    size := m.Size()
    return m.MarshalToSizedBuffer(dAtA[:size])
}

func (m *GlobalJob) MarshalToSizedBuffer(dAtA []byte) (int, error) {
    i := len(dAtA)
    _ = i
    var l int
    _ = l
    return len(dAtA) - i, nil
}

func (m *TaskSpec) Marshal() (dAtA []byte, err error) {
    size := m.Size()
    dAtA = make([]byte, size)
    n, err := m.MarshalToSizedBuffer(dAtA[:size])
    if err != nil {
        return nil, err
    }
    return dAtA[:n], nil
}

func (m *TaskSpec) MarshalTo(dAtA []byte) (int, error) {
    size := m.Size()
    return m.MarshalToSizedBuffer(dAtA[:size])
}

func (m *TaskSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) {
    i := len(dAtA)
    _ = i
    var l int
    _ = l
    if len(m.ResourceReferences) > 0 {
        for iNdEx := len(m.ResourceReferences) - 1; iNdEx >= 0; iNdEx-- {
            {
                size, err := m.ResourceReferences[iNdEx].MarshalToSizedBuffer(dAtA[:i])
                if err != nil {
                    return 0, err
                }
                i -= size
                i = encodeVarintSpecs(dAtA, i, uint64(size))
            }
            i--
            dAtA[i] = 0x5a
        }
    }
    if m.Runtime != nil {
        {
            size := m.Runtime.Size()
            i -= size
            if _, err := m.Runtime.MarshalTo(dAtA[i:]); err != nil {
                return 0, err
            }
        }
    }
    if m.ForceUpdate != 0 {
        i = encodeVarintSpecs(dAtA, i, uint64(m.ForceUpdate))
        i--
        dAtA[i] = 0x48
    }
    if len(m.Networks) > 0 {
        for iNdEx := len(m.Networks) - 1; iNdEx >= 0; iNdEx-- {
            {
                size, err := m.Networks[iNdEx].MarshalToSizedBuffer(dAtA[:i])
                if err != nil {
                    return 0, err
                }
                i -= size
                i = encodeVarintSpecs(dAtA, i, uint64(size))
            }
            i--
            dAtA[i] = 0x3a
        }
    }
    if m.LogDriver != nil {
        {
            size, err := m.LogDriver.MarshalToSizedBuffer(dAtA[:i])
            if err != nil {
                return 0, err
            }
            i -= size
            i = encodeVarintSpecs(dAtA, i, uint64(size))
        }
        i--
        dAtA[i] = 0x32
    }
    if m.Placement != nil {
        {
            size, err := m.Placement.MarshalToSizedBuffer(dAtA[:i])
            if err != nil {
                return 0, err
            }
            i -= size
            i = encodeVarintSpecs(dAtA, i, uint64(size))
        }
        i--
        dAtA[i] = 0x2a
    }
    if m.Restart != nil {
        {
            size, err := m.Restart.MarshalToSizedBuffer(dAtA[:i])
            if err != nil {
                return 0, err
            }
            i -= size
            i = encodeVarintSpecs(dAtA, i, uint64(size))
        }
        i--
        dAtA[i] = 0x22
    }
    if m.Resources != nil {
        {
            size, err := m.Resources.MarshalToSizedBuffer(dAtA[:i])
            if err != nil {
                return 0, err
            }
            i -= size
            i = encodeVarintSpecs(dAtA, i, uint64(size))
        }
        i--
        dAtA[i] = 0x12
    }
    return len(dAtA) - i, nil
}

func (m *TaskSpec_Container) MarshalTo(dAtA []byte) (int, error) {
    size := m.Size()
    return m.MarshalToSizedBuffer(dAtA[:size])
}

func (m *TaskSpec_Container) MarshalToSizedBuffer(dAtA []byte) (int, error) {
    i := len(dAtA)
    if m.Container != nil {
        {
            size, err := m.Container.MarshalToSizedBuffer(dAtA[:i])
            if err != nil {
                return 0, err
            }
            i -= size
            i = encodeVarintSpecs(dAtA, i, uint64(size))
        }
        i--
        dAtA[i] = 0xa
    }
    return len(dAtA) - i, nil
}
func (m *TaskSpec_Attachment) MarshalTo(dAtA []byte) (int, error) {
    size := m.Size()
    return m.MarshalToSizedBuffer(dAtA[:size])
}

func (m *TaskSpec_Attachment) MarshalToSizedBuffer(dAtA []byte) (int, error) {
    i := len(dAtA)
    if m.Attachment != nil {
        {
            size, err := m.Attachment.MarshalToSizedBuffer(dAtA[:i])
            if err != nil {
                return 0, err
            }
            i -= size
            i = encodeVarintSpecs(dAtA, i, uint64(size))
        }
        i--
        dAtA[i] = 0x42
    }
    return len(dAtA) - i, nil
}
func (m *TaskSpec_Generic) MarshalTo(dAtA []byte) (int, error) {
    size := m.Size()
    return m.MarshalToSizedBuffer(dAtA[:size])
}

func (m *TaskSpec_Generic) MarshalToSizedBuffer(dAtA []byte) (int, error) {
    i := len(dAtA)
    if m.Generic != nil {
        {
            size, err := m.Generic.MarshalToSizedBuffer(dAtA[:i])
            if err != nil {
                return 0, err
            }
            i -= size
            i = encodeVarintSpecs(dAtA, i, uint64(size))
        }
        i--
        dAtA[i] = 0x52
    }
    return len(dAtA) - i, nil
}
func (m *ResourceReference) Marshal() (dAtA []byte, err error) {
    size := m.Size()
    dAtA = make([]byte, size)
    n, err := m.MarshalToSizedBuffer(dAtA[:size])
    if err != nil {
        return nil, err
    }
    return dAtA[:n], nil
}

func (m *ResourceReference) MarshalTo(dAtA []byte) (int, error) {
    size := m.Size()
    return m.MarshalToSizedBuffer(dAtA[:size])
}

func (m *ResourceReference) MarshalToSizedBuffer(dAtA []byte) (int, error) {
    i := len(dAtA)
    _ = i
    var l int
    _ = l
    if m.ResourceType != 0 {
        i = encodeVarintSpecs(dAtA, i, uint64(m.ResourceType))
        i--
        dAtA[i] = 0x10
    }
    if len(m.ResourceID) > 0 {
        i -= len(m.ResourceID)
        copy(dAtA[i:], m.ResourceID)
        i = encodeVarintSpecs(dAtA, i, uint64(len(m.ResourceID)))
        i--
        dAtA[i] = 0xa
    }
    return len(dAtA) - i, nil
}

func (m *GenericRuntimeSpec) Marshal() (dAtA []byte, err error) {
    size := m.Size()
    dAtA = make([]byte, size)
    n, err := m.MarshalToSizedBuffer(dAtA[:size])
    if err != nil {
        return nil, err
    }
    return dAtA[:n], nil
}

func (m *GenericRuntimeSpec) MarshalTo(dAtA []byte) (int, error) {
    size := m.Size()
    return m.MarshalToSizedBuffer(dAtA[:size])
}

func (m *GenericRuntimeSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) {
    i := len(dAtA)
    _ = i
    var l int
    _ = l
    if m.Payload != nil {
        {
            size, err := m.Payload.MarshalToSizedBuffer(dAtA[:i])
            if err != nil {
                return 0, err
            }
            i -= size
            i = encodeVarintSpecs(dAtA, i, uint64(size))
        }
        i--
        dAtA[i] = 0x12
    }
    if len(m.Kind) > 0 {
        i -= len(m.Kind)
        copy(dAtA[i:], m.Kind)
        i = encodeVarintSpecs(dAtA, i, uint64(len(m.Kind)))
        i--
        dAtA[i] = 0xa
    }
    return len(dAtA) - i, nil
}

func (m *NetworkAttachmentSpec) Marshal() (dAtA []byte, err error) {
    size := m.Size()
    dAtA = make([]byte, size)
    n, err := m.MarshalToSizedBuffer(dAtA[:size])
    if err != nil {
        return nil, err
    }
    return dAtA[:n], nil
}

func (m *NetworkAttachmentSpec) MarshalTo(dAtA []byte) (int, error) {
    size := m.Size()
    return m.MarshalToSizedBuffer(dAtA[:size])
}

func (m *NetworkAttachmentSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) {
    i := len(dAtA)
    _ = i
    var l int
    _ = l
    if len(m.ContainerID) > 0 {
        i -= len(m.ContainerID)
        copy(dAtA[i:], m.ContainerID)
        i = encodeVarintSpecs(dAtA, i, uint64(len(m.ContainerID)))
        i--
        dAtA[i] = 0xa
    }
    return len(dAtA) - i, nil
}

func (m *ContainerSpec) Marshal() (dAtA []byte, err error) {
    size := m.Size()
    dAtA = make([]byte, size)
    n, err := m.MarshalToSizedBuffer(dAtA[:size])
    if err != nil {
        return nil, err
    }
    return dAtA[:n], nil
}

func (m *ContainerSpec) MarshalTo(dAtA []byte) (int, error) {
    size := m.Size()
    return m.MarshalToSizedBuffer(dAtA[:size])
}

func (m *ContainerSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) {
    i := len(dAtA)
    _ = i
    var l int
    _ = l
    if len(m.Ulimits) > 0 {
        for iNdEx := len(m.Ulimits) - 1; iNdEx >= 0; iNdEx-- {
            {
                size, err := m.Ulimits[iNdEx].MarshalToSizedBuffer(dAtA[:i])
                if err != nil {
                    return 0, err
                }
                i -= size
                i = encodeVarintSpecs(dAtA, i, uint64(size))
            }
            i--
            dAtA[i] = 0x1
            i--
            dAtA[i] = 0xea
        }
    }
    if len(m.CapabilityDrop) > 0 {
        for iNdEx := len(m.CapabilityDrop) - 1; iNdEx >= 0; iNdEx-- {
            i -= len(m.CapabilityDrop[iNdEx])
            copy(dAtA[i:], m.CapabilityDrop[iNdEx])
            i = encodeVarintSpecs(dAtA, i, uint64(len(m.CapabilityDrop[iNdEx])))
            i--
            dAtA[i] = 0x1
            i--
            dAtA[i] = 0xe2
        }
    }
    if len(m.CapabilityAdd) > 0 {
        for iNdEx := len(m.CapabilityAdd) - 1; iNdEx >= 0; iNdEx-- {
            i -= len(m.CapabilityAdd[iNdEx])
            copy(dAtA[i:], m.CapabilityAdd[iNdEx])
            i = encodeVarintSpecs(dAtA, i, uint64(len(m.CapabilityAdd[iNdEx])))
            i--
            dAtA[i] = 0x1
            i--
            dAtA[i] = 0xda
        }
    }
    if len(m.Sysctls) > 0 {
        for k := range m.Sysctls {
            v := m.Sysctls[k]
            baseI := i
            i -= len(v)
            copy(dAtA[i:], v)
            i = encodeVarintSpecs(dAtA, i, uint64(len(v)))
            i--
            dAtA[i] = 0x12
            i -= len(k)
            copy(dAtA[i:], k)
            i = encodeVarintSpecs(dAtA, i, uint64(len(k)))
            i--
            dAtA[i] = 0xa
            i = encodeVarintSpecs(dAtA, i, uint64(baseI-i))
            i--
            dAtA[i] = 0x1
            i--
            dAtA[i] = 0xd2
        }
    }
    if m.PidsLimit != 0 {
        i = encodeVarintSpecs(dAtA, i, uint64(m.PidsLimit))
        i--
        dAtA[i] = 0x1
        i--
        dAtA[i] = 0xc8
    }
    if m.Isolation != 0 {
        i = encodeVarintSpecs(dAtA, i, uint64(m.Isolation))
        i--
        dAtA[i] = 0x1
        i--
        dAtA[i] = 0xc0
    }
    if m.Init != nil {
        {
            size, err := m.Init.MarshalToSizedBuffer(dAtA[:i])
            if err != nil {
                return 0, err
            }
            i -= size
            i = encodeVarintSpecs(dAtA, i, uint64(size))
        }
        i--
        dAtA[i] = 0x1
        i--
        dAtA[i] = 0xba
    }
    if m.Privileges != nil {
        {
            size, err := m.Privileges.MarshalToSizedBuffer(dAtA[:i])
            if err != nil {
                return 0, err
            }
            i -= size
            i = encodeVarintSpecs(dAtA, i, uint64(size))
        }
        i--
        dAtA[i] = 0x1
        i--
        dAtA[i] = 0xb2
    }
    if len(m.Configs) > 0 {
        for iNdEx := len(m.Configs) - 1; iNdEx >= 0; iNdEx-- {
            {
                size, err := m.Configs[iNdEx].MarshalToSizedBuffer(dAtA[:i])
                if err != nil {
                    return 0, err
                }
                i -= size
                i = encodeVarintSpecs(dAtA, i, uint64(size))
            }
            i--
            dAtA[i] = 0x1
            i--
            dAtA[i] = 0xaa
        }
    }
    if len(m.StopSignal) > 0 {
        i -= len(m.StopSignal)
        copy(dAtA[i:], m.StopSignal)
        i = encodeVarintSpecs(dAtA, i, uint64(len(m.StopSignal)))
        i--
        dAtA[i] = 0x1
        i--
        dAtA[i] = 0xa2
    }
    if m.ReadOnly {
        i--
        if m.ReadOnly {
            dAtA[i] = 1
        } else {
            dAtA[i] = 0
        }
        i--
        dAtA[i] = 0x1
        i--
        dAtA[i] = 0x98
    }
    if m.OpenStdin {
        i--
        if m.OpenStdin {
            dAtA[i] = 1
        } else {
            dAtA[i] = 0
        }
        i--
        dAtA[i] = 0x1
        i--
        dAtA[i] = 0x90
    }
    if len(m.Hosts) > 0 {
        for iNdEx := len(m.Hosts) - 1; iNdEx >= 0; iNdEx-- {
            i -= len(m.Hosts[iNdEx])
            copy(dAtA[i:], m.Hosts[iNdEx])
            i = encodeVarintSpecs(dAtA, i, uint64(len(m.Hosts[iNdEx])))
            i--
            dAtA[i] = 0x1
            i--
            dAtA[i] = 0x8a
        }
    }
    if m.Healthcheck != nil {
        {
            size, err := m.Healthcheck.MarshalToSizedBuffer(dAtA[:i])
            if err != nil {
                return 0, err
            }
            i -= size
            i = encodeVarintSpecs(dAtA, i, uint64(size))
        }
        i--
        dAtA[i] = 0x1
        i--
        dAtA[i] = 0x82
    }
    if m.DNSConfig != nil {
        {
            size, err := m.DNSConfig.MarshalToSizedBuffer(dAtA[:i])
            if err != nil {
                return 0, err
            }
            i -= size
            i = encodeVarintSpecs(dAtA, i, uint64(size))
        }
        i--
        dAtA[i] = 0x7a
    }
    if len(m.Hostname) > 0 {
        i -= len(m.Hostname)
        copy(dAtA[i:], m.Hostname)
        i = encodeVarintSpecs(dAtA, i, uint64(len(m.Hostname)))
        i--
        dAtA[i] = 0x72
    }
    if m.TTY {
        i--
        if m.TTY {
            dAtA[i] = 1
        } else {
            dAtA[i] = 0
        }
        i--
        dAtA[i] = 0x68
    }
    if len(m.Secrets) > 0 {
        for iNdEx := len(m.Secrets) - 1; iNdEx >= 0; iNdEx-- {
            {
                size, err := m.Secrets[iNdEx].MarshalToSizedBuffer(dAtA[:i])
                if err != nil {
                    return 0, err
                }
                i -= size
                i = encodeVarintSpecs(dAtA, i, uint64(size))
            }
            i--
            dAtA[i] = 0x62
        }
    }
    if len(m.Groups) > 0 {
        for iNdEx := len(m.Groups) - 1; iNdEx >= 0; iNdEx-- {
            i -= len(m.Groups[iNdEx])
            copy(dAtA[i:], m.Groups[iNdEx])
            i = encodeVarintSpecs(dAtA, i, uint64(len(m.Groups[iNdEx])))
            i--
            dAtA[i] = 0x5a
        }
    }
    if m.PullOptions != nil {
        {
            size, err := m.PullOptions.MarshalToSizedBuffer(dAtA[:i])
            if err != nil {
                return 0, err
            }
            i -= size
            i = encodeVarintSpecs(dAtA, i, uint64(size))
        }
        i--
        dAtA[i] = 0x52
    }
    if m.StopGracePeriod != nil {
        {
            size, err := m.StopGracePeriod.MarshalToSizedBuffer(dAtA[:i])
            if err != nil {
                return 0, err
            }
            i -= size
            i = encodeVarintSpecs(dAtA, i, uint64(size))
        }
        i--
        dAtA[i] = 0x4a
    }
    if len(m.Mounts) > 0 {
        for iNdEx := len(m.Mounts) - 1; iNdEx >= 0; iNdEx-- {
            {
                size, err := m.Mounts[iNdEx].MarshalToSizedBuffer(dAtA[:i])
                if err != nil {
                    return 0, err
                }
                i -= size
                i = encodeVarintSpecs(dAtA, i, uint64(size))
            }
            i--
            dAtA[i] = 0x42
        }
    }
    if len(m.User) > 0 {
        i -= len(m.User)
        copy(dAtA[i:], m.User)
        i = encodeVarintSpecs(dAtA, i, uint64(len(m.User)))
        i--
        dAtA[i] = 0x3a
    }
    if len(m.Dir) > 0 {
        i -= len(m.Dir)
        copy(dAtA[i:], m.Dir)
        i = encodeVarintSpecs(dAtA, i, uint64(len(m.Dir)))
        i--
        dAtA[i] = 0x32
    }
    if len(m.Env) > 0 {
        for iNdEx := len(m.Env) - 1; iNdEx >= 0; iNdEx-- {
            i -= len(m.Env[iNdEx])
            copy(dAtA[i:], m.Env[iNdEx])
            i = encodeVarintSpecs(dAtA, i, uint64(len(m.Env[iNdEx])))
            i--
            dAtA[i] = 0x2a
        }
    }
    if len(m.Args) > 0 {
        for iNdEx := len(m.Args) - 1; iNdEx >= 0; iNdEx-- {
            i -= len(m.Args[iNdEx])
            copy(dAtA[i:], m.Args[iNdEx])
            i = encodeVarintSpecs(dAtA, i, uint64(len(m.Args[iNdEx])))
            i--
            dAtA[i] = 0x22
        }
    }
    if len(m.Command) > 0 {
        for iNdEx := len(m.Command) - 1; iNdEx >= 0; iNdEx-- {
            i -= len(m.Command[iNdEx])
            copy(dAtA[i:], m.Command[iNdEx])
            i = encodeVarintSpecs(dAtA, i, uint64(len(m.Command[iNdEx])))
            i--
            dAtA[i] = 0x1a
        }
    }
    if len(m.Labels) > 0 {
        for k := range m.Labels {
            v := m.Labels[k]
            baseI := i
            i -= len(v)
            copy(dAtA[i:], v)
            i = encodeVarintSpecs(dAtA, i, uint64(len(v)))
            i--
            dAtA[i] = 0x12
            i -= len(k)
            copy(dAtA[i:], k)
            i = encodeVarintSpecs(dAtA, i, uint64(len(k)))
            i--
            dAtA[i] = 0xa
            i = encodeVarintSpecs(dAtA, i, uint64(baseI-i))
            i--
            dAtA[i] = 0x12
        }
    }
    if len(m.Image) > 0 {
        i -= len(m.Image)
        copy(dAtA[i:], m.Image)
        i = encodeVarintSpecs(dAtA, i, uint64(len(m.Image)))
        i--
        dAtA[i] = 0xa
    }
    return len(dAtA) - i, nil
}

func (m *ContainerSpec_PullOptions) Marshal() (dAtA []byte, err error) {
    size := m.Size()
    dAtA = make([]byte, size)
    n, err := m.MarshalToSizedBuffer(dAtA[:size])
    if err != nil {
        return nil, err
    }
    return dAtA[:n], nil
}

func (m *ContainerSpec_PullOptions) MarshalTo(dAtA []byte) (int, error) {
    size := m.Size()
    return m.MarshalToSizedBuffer(dAtA[:size])
}

func (m *ContainerSpec_PullOptions) MarshalToSizedBuffer(dAtA []byte) (int, error) {
    i := len(dAtA)
    _ = i
    var l int
    _ = l
    if len(m.RegistryAuth) > 0 {
        i -= len(m.RegistryAuth)
        copy(dAtA[i:], m.RegistryAuth)
        i = encodeVarintSpecs(dAtA, i, uint64(len(m.RegistryAuth)))
        i--
        dAtA[i] = 0x4
        i--
        dAtA[i] = 0x82
    }
    return len(dAtA) - i, nil
}

func (m *ContainerSpec_DNSConfig) Marshal() (dAtA []byte, err error) {
    size := m.Size()
    dAtA = make([]byte, size)
    n, err := m.MarshalToSizedBuffer(dAtA[:size])
    if err != nil {
        return nil, err
    }
    return dAtA[:n], nil
}

func (m *ContainerSpec_DNSConfig) MarshalTo(dAtA []byte) (int, error) {
    size := m.Size()
    return m.MarshalToSizedBuffer(dAtA[:size])
}

func (m *ContainerSpec_DNSConfig) MarshalToSizedBuffer(dAtA []byte) (int, error) {
    i := len(dAtA)
    _ = i
    var l int
    _ = l
    if len(m.Options) > 0 {
        for iNdEx := len(m.Options) - 1; iNdEx >= 0; iNdEx-- {
            i -= len(m.Options[iNdEx])
            copy(dAtA[i:], m.Options[iNdEx])
            i = encodeVarintSpecs(dAtA, i, uint64(len(m.Options[iNdEx])))
            i--
            dAtA[i] = 0x1a
        }
    }
    if len(m.Search) > 0 {
        for iNdEx := len(m.Search) - 1; iNdEx >= 0; iNdEx-- {
            i -= len(m.Search[iNdEx])
            copy(dAtA[i:], m.Search[iNdEx])
            i = encodeVarintSpecs(dAtA, i, uint64(len(m.Search[iNdEx])))
            i--
            dAtA[i] = 0x12
        }
    }
    if len(m.Nameservers) > 0 {
        for iNdEx := len(m.Nameservers) - 1; iNdEx >= 0; iNdEx-- {
            i -= len(m.Nameservers[iNdEx])
            copy(dAtA[i:], m.Nameservers[iNdEx])
            i = encodeVarintSpecs(dAtA, i, uint64(len(m.Nameservers[iNdEx])))
            i--
            dAtA[i] = 0xa
        }
    }
    return len(dAtA) - i, nil
}

func (m *ContainerSpec_Ulimit) Marshal() (dAtA []byte, err error) {
    size := m.Size()
    dAtA = make([]byte, size)
    n, err := m.MarshalToSizedBuffer(dAtA[:size])
    if err != nil {
        return nil, err
    }
    return dAtA[:n], nil
}

func (m *ContainerSpec_Ulimit) MarshalTo(dAtA []byte) (int, error) {
    size := m.Size()
    return m.MarshalToSizedBuffer(dAtA[:size])
}

func (m *ContainerSpec_Ulimit) MarshalToSizedBuffer(dAtA []byte) (int, error) {
    i := len(dAtA)
    _ = i
    var l int
    _ = l
    if m.Hard != 0 {
        i = encodeVarintSpecs(dAtA, i, uint64(m.Hard))
        i--
        dAtA[i] = 0x18
    }
    if m.Soft != 0 {
        i = encodeVarintSpecs(dAtA, i, uint64(m.Soft))
        i--
        dAtA[i] = 0x10
    }
    if len(m.Name) > 0 {
        i -= len(m.Name)
        copy(dAtA[i:], m.Name)
        i = encodeVarintSpecs(dAtA, i, uint64(len(m.Name)))
        i--
        dAtA[i] = 0xa
    }
    return len(dAtA) - i, nil
}

func (m *EndpointSpec) Marshal() (dAtA []byte, err error) {
    size := m.Size()
    dAtA = make([]byte, size)
    n, err := m.MarshalToSizedBuffer(dAtA[:size])
    if err != nil {
        return nil, err
    }
    return dAtA[:n], nil
}

func (m *EndpointSpec) MarshalTo(dAtA []byte) (int, error) {
    size := m.Size()
    return m.MarshalToSizedBuffer(dAtA[:size])
}

func (m *EndpointSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) {
    i := len(dAtA)
    _ = i
    var l int
    _ = l
    if len(m.Ports) > 0 {
        for iNdEx := len(m.Ports) - 1; iNdEx >= 0; iNdEx-- {
            {
                size, err := m.Ports[iNdEx].MarshalToSizedBuffer(dAtA[:i])
                if err != nil {
                    return 0, err
                }
                i -= size
                i = encodeVarintSpecs(dAtA, i, uint64(size))
            }
            i--
            dAtA[i] = 0x12
        }
    }
    if m.Mode != 0 {
        i = encodeVarintSpecs(dAtA, i, uint64(m.Mode))
        i--
        dAtA[i] = 0x8
    }
    return len(dAtA) - i, nil
}

func (m *NetworkSpec) Marshal() (dAtA []byte, err error) {
    size := m.Size()
    dAtA = make([]byte, size)
    n, err := m.MarshalToSizedBuffer(dAtA[:size])
    if err != nil {
        return nil, err
    }
    return dAtA[:n], nil
}

func (m *NetworkSpec) MarshalTo(dAtA []byte) (int, error) {
    size := m.Size()
    return m.MarshalToSizedBuffer(dAtA[:size])
}

func (m *NetworkSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) {
    i := len(dAtA)
    _ = i
    var l int
    _ = l
    if m.ConfigFrom != nil {
        {
            size := m.ConfigFrom.Size()
            i -= size
            if _, err := m.ConfigFrom.MarshalTo(dAtA[i:]); err != nil {
                return 0, err
            }
        }
    }
    if m.Ingress {
        i--
        if m.Ingress {
            dAtA[i] = 1
        } else {
            dAtA[i] = 0
        }
        i--
        dAtA[i] = 0x38
    }
    if m.Attachable {
        i--
        if m.Attachable {
            dAtA[i] = 1
        } else {
            dAtA[i] = 0
        }
        i--
        dAtA[i] = 0x30
    }
    if m.IPAM != nil {
        {
            size, err := m.IPAM.MarshalToSizedBuffer(dAtA[:i])
            if err != nil {
                return 0, err
            }
            i -= size
            i = encodeVarintSpecs(dAtA, i, uint64(size))
        }
        i--
        dAtA[i] = 0x2a
    }
    if m.Internal {
        i--
        if m.Internal {
            dAtA[i] = 1
        } else {
            dAtA[i] = 0
        }
        i--
        dAtA[i] = 0x20
    }
    if m.Ipv6Enabled {
        i--
        if m.Ipv6Enabled {
            dAtA[i] = 1
        } else {
            dAtA[i] = 0
        }
        i--
        dAtA[i] = 0x18
    }
    if m.DriverConfig != nil {
        {
            size, err := m.DriverConfig.MarshalToSizedBuffer(dAtA[:i])
            if err != nil {
                return 0, err
            }
            i -= size
            i = encodeVarintSpecs(dAtA, i, uint64(size))
        }
        i--
        dAtA[i] = 0x12
    }
    {
        size, err := m.Annotations.MarshalToSizedBuffer(dAtA[:i])
        if err != nil {
            return 0, err
        }
        i -= size
        i = encodeVarintSpecs(dAtA, i, uint64(size))
    }
    i--
    dAtA[i] = 0xa
    return len(dAtA) - i, nil
}

func (m *NetworkSpec_Network) MarshalTo(dAtA []byte) (int, error) {
    size := m.Size()
    return m.MarshalToSizedBuffer(dAtA[:size])
}

func (m *NetworkSpec_Network) MarshalToSizedBuffer(dAtA []byte) (int, error) {
    i := len(dAtA)
    i -= len(m.Network)
    copy(dAtA[i:], m.Network)
    i = encodeVarintSpecs(dAtA, i, uint64(len(m.Network)))
    i--
    dAtA[i] = 0x42
    return len(dAtA) - i, nil
}
func (m *ClusterSpec) Marshal() (dAtA []byte, err error) {
    size := m.Size()
    dAtA = make([]byte, size)
    n, err := m.MarshalToSizedBuffer(dAtA[:size])
    if err != nil {
        return nil, err
    }
    return dAtA[:n], nil
}

func (m *ClusterSpec) MarshalTo(dAtA []byte) (int, error) {
    size := m.Size()
    return m.MarshalToSizedBuffer(dAtA[:size])
}

func (m *ClusterSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) {
    i := len(dAtA)
    _ = i
    var l int
    _ = l
    {
        size, err := m.EncryptionConfig.MarshalToSizedBuffer(dAtA[:i])
        if err != nil {
            return 0, err
        }
        i -= size
        i = encodeVarintSpecs(dAtA, i, uint64(size))
    }
    i--
    dAtA[i] = 0x42
    {
        size, err := m.TaskDefaults.MarshalToSizedBuffer(dAtA[:i])
        if err != nil {
            return 0, err
        }
        i -= size
        i = encodeVarintSpecs(dAtA, i, uint64(size))
    }
    i--
    dAtA[i] = 0x3a
    {
        size, err := m.CAConfig.MarshalToSizedBuffer(dAtA[:i])
        if err != nil {
            return 0, err
        }
        i -= size
        i = encodeVarintSpecs(dAtA, i, uint64(size))
    }
    i--
    dAtA[i] = 0x32
    {
        size, err := m.Dispatcher.MarshalToSizedBuffer(dAtA[:i])
        if err != nil {
            return 0, err
        }
        i -= size
        i = encodeVarintSpecs(dAtA, i, uint64(size))
    }
    i--
    dAtA[i] = 0x2a
    {
        size, err := m.Raft.MarshalToSizedBuffer(dAtA[:i])
        if err != nil {
            return 0, err
        }
        i -= size
        i = encodeVarintSpecs(dAtA, i, uint64(size))
    }
    i--
    dAtA[i] = 0x22
    {
        size, err := m.Orchestration.MarshalToSizedBuffer(dAtA[:i])
        if err != nil {
            return 0, err
        }
        i -= size
        i = encodeVarintSpecs(dAtA, i, uint64(size))
    }
    i--
    dAtA[i] = 0x1a
    {
        size, err := m.AcceptancePolicy.MarshalToSizedBuffer(dAtA[:i])
        if err != nil {
            return 0, err
        }
        i -= size
        i = encodeVarintSpecs(dAtA, i, uint64(size))
    }
    i--
    dAtA[i] = 0x12
    {
        size, err := m.Annotations.MarshalToSizedBuffer(dAtA[:i])
        if err != nil {
            return 0, err
        }
        i -= size
        i = encodeVarintSpecs(dAtA, i, uint64(size))
    }
    i--
    dAtA[i] = 0xa
    return len(dAtA) - i, nil
}

func (m *SecretSpec) Marshal() (dAtA []byte, err error) {
    size := m.Size()
    dAtA = make([]byte, size)
    n, err := m.MarshalToSizedBuffer(dAtA[:size])
    if err != nil {
        return nil, err
    }
    return dAtA[:n], nil
}

func (m *SecretSpec) MarshalTo(dAtA []byte) (int, error) {
    size := m.Size()
    return m.MarshalToSizedBuffer(dAtA[:size])
}

func (m *SecretSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) {
    i := len(dAtA)
    _ = i
    var l int
    _ = l
    if m.Driver != nil {
        {
            size, err := m.Driver.MarshalToSizedBuffer(dAtA[:i])
            if err != nil {
                return 0, err
            }
            i -= size
            i = encodeVarintSpecs(dAtA, i, uint64(size))
        }
        i--
        dAtA[i] = 0x22
    }
    if m.Templating != nil {
        {
            size, err := m.Templating.MarshalToSizedBuffer(dAtA[:i])
            if err != nil {
                return 0, err
            }
            i -= size
            i = encodeVarintSpecs(dAtA, i, uint64(size))
        }
        i--
        dAtA[i] = 0x1a
    }
    if len(m.Data) > 0 {
        i -= len(m.Data)
        copy(dAtA[i:], m.Data)
        i = encodeVarintSpecs(dAtA, i, uint64(len(m.Data)))
        i--
        dAtA[i] = 0x12
    }
    {
        size, err := m.Annotations.MarshalToSizedBuffer(dAtA[:i])
        if err != nil {
            return 0, err
        }
        i -= size
        i = encodeVarintSpecs(dAtA, i, uint64(size))
    }
    i--
    dAtA[i] = 0xa
    return len(dAtA) - i, nil
}

func (m *ConfigSpec) Marshal() (dAtA []byte, err error) {
    size := m.Size()
    dAtA = make([]byte, size)
    n, err := m.MarshalToSizedBuffer(dAtA[:size])
    if err != nil {
        return nil, err
    }
    return dAtA[:n], nil
}

func (m *ConfigSpec) MarshalTo(dAtA []byte) (int, error) {
    size := m.Size()
    return m.MarshalToSizedBuffer(dAtA[:size])
}

func (m *ConfigSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) {
    i := len(dAtA)
    _ = i
    var l int
    _ = l
    if m.Templating != nil {
        {
            size, err := m.Templating.MarshalToSizedBuffer(dAtA[:i])
            if err != nil {
                return 0, err
            }
            i -= size
            i = encodeVarintSpecs(dAtA, i, uint64(size))
        }
        i--
        dAtA[i] = 0x1a
    }
    if len(m.Data) > 0 {
        i -= len(m.Data)
        copy(dAtA[i:], m.Data)
        i = encodeVarintSpecs(dAtA, i, uint64(len(m.Data)))
        i--
        dAtA[i] = 0x12
    }
    {
        size, err := m.Annotations.MarshalToSizedBuffer(dAtA[:i])
        if err != nil {
            return 0, err
        }
        i -= size
        i = encodeVarintSpecs(dAtA, i, uint64(size))
    }
    i--
    dAtA[i] = 0xa
    return len(dAtA) - i, nil
}

func (m *VolumeSpec) Marshal() (dAtA []byte, err error) {
    size := m.Size()
    dAtA = make([]byte, size)
    n, err := m.MarshalToSizedBuffer(dAtA[:size])
    if err != nil {
        return nil, err
    }
    return dAtA[:n], nil
}

func (m *VolumeSpec) MarshalTo(dAtA []byte) (int, error) {
    size := m.Size()
    return m.MarshalToSizedBuffer(dAtA[:size])
}

func (m *VolumeSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) {
    i := len(dAtA)
    _ = i
    var l int
    _ = l
    if m.Availability != 0 {
        i = encodeVarintSpecs(dAtA, i, uint64(m.Availability))
        i--
        dAtA[i] = 0x40
    }
    if m.CapacityRange != nil {
        {
            size, err := m.CapacityRange.MarshalToSizedBuffer(dAtA[:i])
            if err != nil {
                return 0, err
            }
            i -= size
            i = encodeVarintSpecs(dAtA, i, uint64(size))
        }
        i--
        dAtA[i] = 0x3a
    }
    if m.AccessibilityRequirements != nil {
        {
            size, err := m.AccessibilityRequirements.MarshalToSizedBuffer(dAtA[:i])
            if err != nil {
                return 0, err
            }
            i -= size
            i = encodeVarintSpecs(dAtA, i, uint64(size))
        }
        i--
        dAtA[i] = 0x32
    }
    if len(m.Secrets) > 0 {
        for iNdEx := len(m.Secrets) - 1; iNdEx >= 0; iNdEx-- {
            {
                size, err := m.Secrets[iNdEx].MarshalToSizedBuffer(dAtA[:i])
                if err != nil {
                    return 0, err
                }
                i -= size
                i = encodeVarintSpecs(dAtA, i, uint64(size))
            }
            i--
            dAtA[i] = 0x2a
        }
    }
    if m.AccessMode != nil {
        {
            size, err := m.AccessMode.MarshalToSizedBuffer(dAtA[:i])
            if err != nil {
                return 0, err
            }
            i -= size
            i = encodeVarintSpecs(dAtA, i, uint64(size))
        }
        i--
        dAtA[i] = 0x22
    }
    if m.Driver != nil {
        {
            size, err := m.Driver.MarshalToSizedBuffer(dAtA[:i])
            if err != nil {
                return 0, err
            }
            i -= size
            i = encodeVarintSpecs(dAtA, i, uint64(size))
        }
        i--
        dAtA[i] = 0x1a
    }
    if len(m.Group) > 0 {
        i -= len(m.Group)
        copy(dAtA[i:], m.Group)
        i = encodeVarintSpecs(dAtA, i, uint64(len(m.Group)))
        i--
        dAtA[i] = 0x12
    }
    {
        size, err := m.Annotations.MarshalToSizedBuffer(dAtA[:i])
        if err != nil {
            return 0, err
        }
        i -= size
        i = encodeVarintSpecs(dAtA, i, uint64(size))
    }
    i--
    dAtA[i] = 0xa
    return len(dAtA) - i, nil
}

func encodeVarintSpecs(dAtA []byte, offset int, v uint64) int {
    offset -= sovSpecs(v)
    base := offset
    for v >= 1<<7 {
        dAtA[offset] = uint8(v&0x7f | 0x80)
        v >>= 7
        offset++
    }
    dAtA[offset] = uint8(v)
    return base
}
func (m *NodeSpec) Size() (n int) {
    if m == nil {
        return 0
    }
    var l int
    _ = l
    l = m.Annotations.Size()
    n += 1 + l + sovSpecs(uint64(l))
    if m.DesiredRole != 0 {
        n += 1 + sovSpecs(uint64(m.DesiredRole))
    }
    if m.Membership != 0 {
        n += 1 + sovSpecs(uint64(m.Membership))
    }
    if m.Availability != 0 {
        n += 1 + sovSpecs(uint64(m.Availability))
    }
    return n
}

func (m *ServiceSpec) Size() (n int) {
    if m == nil {
        return 0
    }
    var l int
    _ = l
    l = m.Annotations.Size()
    n += 1 + l + sovSpecs(uint64(l))
    l = m.Task.Size()
    n += 1 + l + sovSpecs(uint64(l))
    if m.Mode != nil {
        n += m.Mode.Size()
    }
    if m.Update != nil {
        l = m.Update.Size()
        n += 1 + l + sovSpecs(uint64(l))
    }
    if len(m.Networks) > 0 {
        for _, e := range m.Networks {
            l = e.Size()
            n += 1 + l + sovSpecs(uint64(l))
        }
    }
    if m.Endpoint != nil {
        l = m.Endpoint.Size()
        n += 1 + l + sovSpecs(uint64(l))
    }
    if m.Rollback != nil {
        l = m.Rollback.Size()
        n += 1 + l + sovSpecs(uint64(l))
    }
    return n
}

func (m *ServiceSpec_Replicated) Size() (n int) {
    if m == nil {
        return 0
    }
    var l int
    _ = l
    if m.Replicated != nil {
        l = m.Replicated.Size()
        n += 1 + l + sovSpecs(uint64(l))
    }
    return n
}
func (m *ServiceSpec_Global) Size() (n int) {
    if m == nil {
        return 0
    }
    var l int
    _ = l
    if m.Global != nil {
        l = m.Global.Size()
        n += 1 + l + sovSpecs(uint64(l))
    }
    return n
}
func (m *ServiceSpec_ReplicatedJob) Size() (n int) {
    if m == nil {
        return 0
    }
    var l int
    _ = l
    if m.ReplicatedJob != nil {
        l = m.ReplicatedJob.Size()
        n += 1 + l + sovSpecs(uint64(l))
    }
    return n
}
func (m *ServiceSpec_GlobalJob) Size() (n int) {
    if m == nil {
        return 0
    }
    var l int
    _ = l
    if m.GlobalJob != nil {
        l = m.GlobalJob.Size()
        n += 1 + l + sovSpecs(uint64(l))
    }
    return n
}
func (m *ReplicatedService) Size() (n int) {
    if m == nil {
        return 0
    }
    var l int
    _ = l
    if m.Replicas != 0 {
        n += 1 + sovSpecs(uint64(m.Replicas))
    }
    return n
}

func (m *GlobalService) Size() (n int) {
    if m == nil {
        return 0
    }
    var l int
    _ = l
    return n
}

func (m *ReplicatedJob) Size() (n int) {
    if m == nil {
        return 0
    }
    var l int
    _ = l
    if m.MaxConcurrent != 0 {
        n += 1 + sovSpecs(uint64(m.MaxConcurrent))
    }
    if m.TotalCompletions != 0 {
        n += 1 + sovSpecs(uint64(m.TotalCompletions))
    }
    return n
}

func (m *GlobalJob) Size() (n int) {
    if m == nil {
        return 0
    }
    var l int
    _ = l
    return n
}

func (m *TaskSpec) Size() (n int) {
    if m == nil {
        return 0
    }
    var l int
    _ = l
    if m.Runtime != nil {
        n += m.Runtime.Size()
    }
    if m.Resources != nil {
        l = m.Resources.Size()
        n += 1 + l + sovSpecs(uint64(l))
    }
    if m.Restart != nil {
        l = m.Restart.Size()
        n += 1 + l + sovSpecs(uint64(l))
    }
    if m.Placement != nil {
        l = m.Placement.Size()
        n += 1 + l + sovSpecs(uint64(l))
    }
    if m.LogDriver != nil {
        l = m.LogDriver.Size()
        n += 1 + l + sovSpecs(uint64(l))
    }
    if len(m.Networks) > 0 {
        for _, e := range m.Networks {
            l = e.Size()
            n += 1 + l + sovSpecs(uint64(l))
        }
    }
    if m.ForceUpdate != 0 {
        n += 1 + sovSpecs(uint64(m.ForceUpdate))
    }
    if len(m.ResourceReferences) > 0 {
        for _, e := range m.ResourceReferences {
            l = e.Size()
            n += 1 + l + sovSpecs(uint64(l))
        }
    }
    return n
}

func (m *TaskSpec_Container) Size() (n int) {
    if m == nil {
        return 0
    }
    var l int
    _ = l
    if m.Container != nil {
        l = m.Container.Size()
        n += 1 + l + sovSpecs(uint64(l))
    }
    return n
}
func (m *TaskSpec_Attachment) Size() (n int) {
    if m == nil {
        return 0
    }
    var l int
    _ = l
    if m.Attachment != nil {
        l = m.Attachment.Size()
        n += 1 + l + sovSpecs(uint64(l))
    }
    return n
}
func (m *TaskSpec_Generic) Size() (n int) {
    if m == nil {
        return 0
    }
    var l int
    _ = l
    if m.Generic != nil {
        l = m.Generic.Size()
        n += 1 + l + sovSpecs(uint64(l))
    }
    return n
}
func (m *ResourceReference) Size() (n int) {
    if m == nil {
        return 0
    }
    var l int
    _ = l
    l = len(m.ResourceID)
    if l > 0 {
        n += 1 + l + sovSpecs(uint64(l))
    }
    if m.ResourceType != 0 {
        n += 1 + sovSpecs(uint64(m.ResourceType))
    }
    return n
}

func (m *GenericRuntimeSpec) Size() (n int) {
    if m == nil {
        return 0
    }
    var l int
    _ = l
    l = len(m.Kind)
    if l > 0 {
        n += 1 + l + sovSpecs(uint64(l))
    }
    if m.Payload != nil {
        l = m.Payload.Size()
        n += 1 + l + sovSpecs(uint64(l))
    }
    return n
}

func (m *NetworkAttachmentSpec) Size() (n int) {
    if m == nil {
        return 0
    }
    var l int
    _ = l
    l = len(m.ContainerID)
    if l > 0 {
        n += 1 + l + sovSpecs(uint64(l))
    }
    return n
}

func (m *ContainerSpec) Size() (n int) {
    if m == nil {
        return 0
    }
    var l int
    _ = l
    l = len(m.Image)
    if l > 0 {
        n += 1 + l + sovSpecs(uint64(l))
    }
    if len(m.Labels) > 0 {
        for k, v := range m.Labels {
            _ = k
            _ = v
            mapEntrySize := 1 + len(k) + sovSpecs(uint64(len(k))) + 1 + len(v) + sovSpecs(uint64(len(v)))
            n += mapEntrySize + 1 + sovSpecs(uint64(mapEntrySize))
        }
    }
    if len(m.Command) > 0 {
        for _, s := range m.Command {
            l = len(s)
            n += 1 + l + sovSpecs(uint64(l))
        }
    }
    if len(m.Args) > 0 {
        for _, s := range m.Args {
            l = len(s)
            n += 1 + l + sovSpecs(uint64(l))
        }
    }
    if len(m.Env) > 0 {
        for _, s := range m.Env {
            l = len(s)
            n += 1 + l + sovSpecs(uint64(l))
        }
    }
    l = len(m.Dir)
    if l > 0 {
        n += 1 + l + sovSpecs(uint64(l))
    }
    l = len(m.User)
    if l > 0 {
        n += 1 + l + sovSpecs(uint64(l))
    }
    if len(m.Mounts) > 0 {
        for _, e := range m.Mounts {
            l = e.Size()
            n += 1 + l + sovSpecs(uint64(l))
        }
    }
    if m.StopGracePeriod != nil {
        l = m.StopGracePeriod.Size()
        n += 1 + l + sovSpecs(uint64(l))
    }
    if m.PullOptions != nil {
        l = m.PullOptions.Size()
        n += 1 + l + sovSpecs(uint64(l))
    }
    if len(m.Groups) > 0 {
        for _, s := range m.Groups {
            l = len(s)
            n += 1 + l + sovSpecs(uint64(l))
        }
    }
    if len(m.Secrets) > 0 {
        for _, e := range m.Secrets {
            l = e.Size()
            n += 1 + l + sovSpecs(uint64(l))
        }
    }
    if m.TTY {
        n += 2
    }
    l = len(m.Hostname)
    if l > 0 {
        n += 1 + l + sovSpecs(uint64(l))
    }
    if m.DNSConfig != nil {
        l = m.DNSConfig.Size()
        n += 1 + l + sovSpecs(uint64(l))
    }
    if m.Healthcheck != nil {
        l = m.Healthcheck.Size()
        n += 2 + l + sovSpecs(uint64(l))
    }
    if len(m.Hosts) > 0 {
        for _, s := range m.Hosts {
            l = len(s)
            n += 2 + l + sovSpecs(uint64(l))
        }
    }
    if m.OpenStdin {
        n += 3
    }
    if m.ReadOnly {
        n += 3
    }
    l = len(m.StopSignal)
    if l > 0 {
        n += 2 + l + sovSpecs(uint64(l))
    }
    if len(m.Configs) > 0 {
        for _, e := range m.Configs {
            l = e.Size()
            n += 2 + l + sovSpecs(uint64(l))
        }
    }
    if m.Privileges != nil {
        l = m.Privileges.Size()
        n += 2 + l + sovSpecs(uint64(l))
    }
    if m.Init != nil {
        l = m.Init.Size()
        n += 2 + l + sovSpecs(uint64(l))
    }
    if m.Isolation != 0 {
        n += 2 + sovSpecs(uint64(m.Isolation))
    }
    if m.PidsLimit != 0 {
        n += 2 + sovSpecs(uint64(m.PidsLimit))
    }
    if len(m.Sysctls) > 0 {
        for k, v := range m.Sysctls {
            _ = k
            _ = v
            mapEntrySize := 1 + len(k) + sovSpecs(uint64(len(k))) + 1 + len(v) + sovSpecs(uint64(len(v)))
            n += mapEntrySize + 2 + sovSpecs(uint64(mapEntrySize))
        }
    }
    if len(m.CapabilityAdd) > 0 {
        for _, s := range m.CapabilityAdd {
            l = len(s)
            n += 2 + l + sovSpecs(uint64(l))
        }
    }
    if len(m.CapabilityDrop) > 0 {
        for _, s := range m.CapabilityDrop {
            l = len(s)
            n += 2 + l + sovSpecs(uint64(l))
        }
    }
    if len(m.Ulimits) > 0 {
        for _, e := range m.Ulimits {
            l = e.Size()
            n += 2 + l + sovSpecs(uint64(l))
        }
    }
    return n
}

func (m *ContainerSpec_PullOptions) Size() (n int) {
    if m == nil {
        return 0
    }
    var l int
    _ = l
    l = len(m.RegistryAuth)
    if l > 0 {
        n += 2 + l + sovSpecs(uint64(l))
    }
    return n
}

func (m *ContainerSpec_DNSConfig) Size() (n int) {
    if m == nil {
        return 0
    }
    var l int
    _ = l
    if len(m.Nameservers) > 0 {
        for _, s := range m.Nameservers {
            l = len(s)
            n += 1 + l + sovSpecs(uint64(l))
        }
    }
    if len(m.Search) > 0 {
        for _, s := range m.Search {
            l = len(s)
            n += 1 + l + sovSpecs(uint64(l))
        }
    }
    if len(m.Options) > 0 {
        for _, s := range m.Options {
            l = len(s)
            n += 1 + l + sovSpecs(uint64(l))
        }
    }
    return n
}

func (m *ContainerSpec_Ulimit) Size() (n int) {
    if m == nil {
        return 0
    }
    var l int
    _ = l
    l = len(m.Name)
    if l > 0 {
        n += 1 + l + sovSpecs(uint64(l))
    }
    if m.Soft != 0 {
        n += 1 + sovSpecs(uint64(m.Soft))
    }
    if m.Hard != 0 {
        n += 1 + sovSpecs(uint64(m.Hard))
    }
    return n
}

func (m *EndpointSpec) Size() (n int) {
    if m == nil {
        return 0
    }
    var l int
    _ = l
    if m.Mode != 0 {
        n += 1 + sovSpecs(uint64(m.Mode))
    }
    if len(m.Ports) > 0 {
        for _, e := range m.Ports {
            l = e.Size()
            n += 1 + l + sovSpecs(uint64(l))
        }
    }
    return n
}

func (m *NetworkSpec) Size() (n int) {
    if m == nil {
        return 0
    }
    var l int
    _ = l
    l = m.Annotations.Size()
    n += 1 + l + sovSpecs(uint64(l))
    if m.DriverConfig != nil {
        l = m.DriverConfig.Size()
        n += 1 + l + sovSpecs(uint64(l))
    }
    if m.Ipv6Enabled {
        n += 2
    }
    if m.Internal {
        n += 2
    }
    if m.IPAM != nil {
        l = m.IPAM.Size()
        n += 1 + l + sovSpecs(uint64(l))
    }
    if m.Attachable {
        n += 2
    }
    if m.Ingress {
        n += 2
    }
    if m.ConfigFrom != nil {
        n += m.ConfigFrom.Size()
    }
    return n
}

func (m *NetworkSpec_Network) Size() (n int) {
    if m == nil {
        return 0
    }
    var l int
    _ = l
    l = len(m.Network)
    n += 1 + l + sovSpecs(uint64(l))
    return n
}
func (m *ClusterSpec) Size() (n int) {
    if m == nil {
        return 0
    }
    var l int
    _ = l
    l = m.Annotations.Size()
    n += 1 + l + sovSpecs(uint64(l))
    l = m.AcceptancePolicy.Size()
    n += 1 + l + sovSpecs(uint64(l))
    l = m.Orchestration.Size()
    n += 1 + l + sovSpecs(uint64(l))
    l = m.Raft.Size()
    n += 1 + l + sovSpecs(uint64(l))
    l = m.Dispatcher.Size()
    n += 1 + l + sovSpecs(uint64(l))
    l = m.CAConfig.Size()
    n += 1 + l + sovSpecs(uint64(l))
    l = m.TaskDefaults.Size()
    n += 1 + l + sovSpecs(uint64(l))
    l = m.EncryptionConfig.Size()
    n += 1 + l + sovSpecs(uint64(l))
    return n
}

func (m *SecretSpec) Size() (n int) {
    if m == nil {
        return 0
    }
    var l int
    _ = l
    l = m.Annotations.Size()
    n += 1 + l + sovSpecs(uint64(l))
    l = len(m.Data)
    if l > 0 {
        n += 1 + l + sovSpecs(uint64(l))
    }
    if m.Templating != nil {
        l = m.Templating.Size()
        n += 1 + l + sovSpecs(uint64(l))
    }
    if m.Driver != nil {
        l = m.Driver.Size()
        n += 1 + l + sovSpecs(uint64(l))
    }
    return n
}

func (m *ConfigSpec) Size() (n int) {
    if m == nil {
        return 0
    }
    var l int
    _ = l
    l = m.Annotations.Size()
    n += 1 + l + sovSpecs(uint64(l))
    l = len(m.Data)
    if l > 0 {
        n += 1 + l + sovSpecs(uint64(l))
    }
    if m.Templating != nil {
        l = m.Templating.Size()
        n += 1 + l + sovSpecs(uint64(l))
    }
    return n
}

func (m *VolumeSpec) Size() (n int) {
    if m == nil {
        return 0
    }
    var l int
    _ = l
    l = m.Annotations.Size()
    n += 1 + l + sovSpecs(uint64(l))
    l = len(m.Group)
    if l > 0 {
        n += 1 + l + sovSpecs(uint64(l))
    }
    if m.Driver != nil {
        l = m.Driver.Size()
        n += 1 + l + sovSpecs(uint64(l))
    }
    if m.AccessMode != nil {
        l = m.AccessMode.Size()
        n += 1 + l + sovSpecs(uint64(l))
    }
    if len(m.Secrets) > 0 {
        for _, e := range m.Secrets {
            l = e.Size()
            n += 1 + l + sovSpecs(uint64(l))
        }
    }
    if m.AccessibilityRequirements != nil {
        l = m.AccessibilityRequirements.Size()
        n += 1 + l + sovSpecs(uint64(l))
    }
    if m.CapacityRange != nil {
        l = m.CapacityRange.Size()
        n += 1 + l + sovSpecs(uint64(l))
    }
    if m.Availability != 0 {
        n += 1 + sovSpecs(uint64(m.Availability))
    }
    return n
}

func sovSpecs(x uint64) (n int) {
    return (math_bits.Len64(x|1) + 6) / 7
}
func sozSpecs(x uint64) (n int) {
    return sovSpecs(uint64((x << 1) ^ uint64((int64(x) >> 63))))
}
func (this *NodeSpec) String() string {
    if this == nil {
        return "nil"
    }
    s := strings.Join([]string{`&NodeSpec{`,
        `Annotations:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Annotations), "Annotations", "Annotations", 1), `&`, ``, 1) + `,`,
        `DesiredRole:` + fmt.Sprintf("%v", this.DesiredRole) + `,`,
        `Membership:` + fmt.Sprintf("%v", this.Membership) + `,`,
        `Availability:` + fmt.Sprintf("%v", this.Availability) + `,`,
        `}`,
    }, "")
    return s
}
func (this *ServiceSpec) String() string {
    if this == nil {
        return "nil"
    }
    repeatedStringForNetworks := "[]*NetworkAttachmentConfig{"
    for _, f := range this.Networks {
        repeatedStringForNetworks += strings.Replace(fmt.Sprintf("%v", f), "NetworkAttachmentConfig", "NetworkAttachmentConfig", 1) + ","
    }
    repeatedStringForNetworks += "}"
    s := strings.Join([]string{`&ServiceSpec{`,
        `Annotations:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Annotations), "Annotations", "Annotations", 1), `&`, ``, 1) + `,`,
        `Task:` + strings.Replace(strings.Replace(this.Task.String(), "TaskSpec", "TaskSpec", 1), `&`, ``, 1) + `,`,
        `Mode:` + fmt.Sprintf("%v", this.Mode) + `,`,
        `Update:` + strings.Replace(fmt.Sprintf("%v", this.Update), "UpdateConfig", "UpdateConfig", 1) + `,`,
        `Networks:` + repeatedStringForNetworks + `,`,
        `Endpoint:` + strings.Replace(this.Endpoint.String(), "EndpointSpec", "EndpointSpec", 1) + `,`,
        `Rollback:` + strings.Replace(fmt.Sprintf("%v", this.Rollback), "UpdateConfig", "UpdateConfig", 1) + `,`,
        `}`,
    }, "")
    return s
}
func (this *ServiceSpec_Replicated) String() string {
    if this == nil {
        return "nil"
    }
    s := strings.Join([]string{`&ServiceSpec_Replicated{`,
        `Replicated:` + strings.Replace(fmt.Sprintf("%v", this.Replicated), "ReplicatedService", "ReplicatedService", 1) + `,`,
        `}`,
    }, "")
    return s
}
func (this *ServiceSpec_Global) String() string {
    if this == nil {
        return "nil"
    }
    s := strings.Join([]string{`&ServiceSpec_Global{`,
        `Global:` + strings.Replace(fmt.Sprintf("%v", this.Global), "GlobalService", "GlobalService", 1) + `,`,
        `}`,
    }, "")
    return s
}
func (this *ServiceSpec_ReplicatedJob) String() string {
    if this == nil {
        return "nil"
    }
    s := strings.Join([]string{`&ServiceSpec_ReplicatedJob{`,
        `ReplicatedJob:` + strings.Replace(fmt.Sprintf("%v", this.ReplicatedJob), "ReplicatedJob", "ReplicatedJob", 1) + `,`,
        `}`,
    }, "")
    return s
}
func (this *ServiceSpec_GlobalJob) String() string {
    if this == nil {
        return "nil"
    }
    s := strings.Join([]string{`&ServiceSpec_GlobalJob{`,
        `GlobalJob:` + strings.Replace(fmt.Sprintf("%v", this.GlobalJob), "GlobalJob", "GlobalJob", 1) + `,`,
        `}`,
    }, "")
    return s
}
func (this *ReplicatedService) String() string {
    if this == nil {
        return "nil"
    }
    s := strings.Join([]string{`&ReplicatedService{`,
        `Replicas:` + fmt.Sprintf("%v", this.Replicas) + `,`,
        `}`,
    }, "")
    return s
}
func (this *GlobalService) String() string {
    if this == nil {
        return "nil"
    }
    s := strings.Join([]string{`&GlobalService{`,
        `}`,
    }, "")
    return s
}
func (this *ReplicatedJob) String() string {
    if this == nil {
        return "nil"
    }
    s := strings.Join([]string{`&ReplicatedJob{`,
        `MaxConcurrent:` + fmt.Sprintf("%v", this.MaxConcurrent) + `,`,
        `TotalCompletions:` + fmt.Sprintf("%v", this.TotalCompletions) + `,`,
        `}`,
    }, "")
    return s
}
func (this *GlobalJob) String() string {
    if this == nil {
        return "nil"
    }
    s := strings.Join([]string{`&GlobalJob{`,
        `}`,
    }, "")
    return s
}
func (this *TaskSpec) String() string {
    if this == nil {
        return "nil"
    }
    repeatedStringForNetworks := "[]*NetworkAttachmentConfig{"
    for _, f := range this.Networks {
        repeatedStringForNetworks += strings.Replace(fmt.Sprintf("%v", f), "NetworkAttachmentConfig", "NetworkAttachmentConfig", 1) + ","
    }
    repeatedStringForNetworks += "}"
    repeatedStringForResourceReferences := "[]ResourceReference{"
    for _, f := range this.ResourceReferences {
        repeatedStringForResourceReferences += strings.Replace(strings.Replace(f.String(), "ResourceReference", "ResourceReference", 1), `&`, ``, 1) + ","
    }
    repeatedStringForResourceReferences += "}"
    s := strings.Join([]string{`&TaskSpec{`,
        `Runtime:` + fmt.Sprintf("%v", this.Runtime) + `,`,
        `Resources:` + strings.Replace(fmt.Sprintf("%v", this.Resources), "ResourceRequirements", "ResourceRequirements", 1) + `,`,
        `Restart:` + strings.Replace(fmt.Sprintf("%v", this.Restart), "RestartPolicy", "RestartPolicy", 1) + `,`,
        `Placement:` + strings.Replace(fmt.Sprintf("%v", this.Placement), "Placement", "Placement", 1) + `,`,
        `LogDriver:` + strings.Replace(fmt.Sprintf("%v", this.LogDriver), "Driver", "Driver", 1) + `,`,
        `Networks:` + repeatedStringForNetworks + `,`,
        `ForceUpdate:` + fmt.Sprintf("%v", this.ForceUpdate) + `,`,
        `ResourceReferences:` + repeatedStringForResourceReferences + `,`,
        `}`,
    }, "")
    return s
}
func (this *TaskSpec_Container) String() string {
    if this == nil {
        return "nil"
    }
    s := strings.Join([]string{`&TaskSpec_Container{`,
        `Container:` + strings.Replace(fmt.Sprintf("%v", this.Container), "ContainerSpec", "ContainerSpec", 1) + `,`,
        `}`,
    }, "")
    return s
}
func (this *TaskSpec_Attachment) String() string {
    if this == nil {
        return "nil"
    }
    s := strings.Join([]string{`&TaskSpec_Attachment{`,
        `Attachment:` + strings.Replace(fmt.Sprintf("%v", this.Attachment), "NetworkAttachmentSpec", "NetworkAttachmentSpec", 1) + `,`,
        `}`,
    }, "")
    return s
}
func (this *TaskSpec_Generic) String() string {
    if this == nil {
        return "nil"
    }
    s := strings.Join([]string{`&TaskSpec_Generic{`,
        `Generic:` + strings.Replace(fmt.Sprintf("%v", this.Generic), "GenericRuntimeSpec", "GenericRuntimeSpec", 1) + `,`,
        `}`,
    }, "")
    return s
}
func (this *ResourceReference) String() string {
    if this == nil {
        return "nil"
    }
    s := strings.Join([]string{`&ResourceReference{`,
        `ResourceID:` + fmt.Sprintf("%v", this.ResourceID) + `,`,
        `ResourceType:` + fmt.Sprintf("%v", this.ResourceType) + `,`,
        `}`,
    }, "")
    return s
}
func (this *GenericRuntimeSpec) String() string {
    if this == nil {
        return "nil"
    }
    s := strings.Join([]string{`&GenericRuntimeSpec{`,
        `Kind:` + fmt.Sprintf("%v", this.Kind) + `,`,
        `Payload:` + strings.Replace(fmt.Sprintf("%v", this.Payload), "Any", "types.Any", 1) + `,`,
        `}`,
    }, "")
    return s
}
func (this *NetworkAttachmentSpec) String() string {
    if this == nil {
        return "nil"
    }
    s := strings.Join([]string{`&NetworkAttachmentSpec{`,
        `ContainerID:` + fmt.Sprintf("%v", this.ContainerID) + `,`,
        `}`,
    }, "")
    return s
}
func (this *ContainerSpec) String() string {
    if this == nil {
        return "nil"
    }
    repeatedStringForMounts := "[]Mount{"
    for _, f := range this.Mounts {
        repeatedStringForMounts += fmt.Sprintf("%v", f) + ","
    }
    repeatedStringForMounts += "}"
    repeatedStringForSecrets := "[]*SecretReference{"
    for _, f := range this.Secrets {
        repeatedStringForSecrets += strings.Replace(fmt.Sprintf("%v", f), "SecretReference", "SecretReference", 1) + ","
    }
    repeatedStringForSecrets += "}"
    repeatedStringForConfigs := "[]*ConfigReference{"
    for _, f := range this.Configs {
        repeatedStringForConfigs += strings.Replace(fmt.Sprintf("%v", f), "ConfigReference", "ConfigReference", 1) + ","
    }
    repeatedStringForConfigs += "}"
    repeatedStringForUlimits := "[]*ContainerSpec_Ulimit{"
    for _, f := range this.Ulimits {
        repeatedStringForUlimits += strings.Replace(fmt.Sprintf("%v", f), "ContainerSpec_Ulimit", "ContainerSpec_Ulimit", 1) + ","
    }
    repeatedStringForUlimits += "}"
    keysForLabels := make([]string, 0, len(this.Labels))
    for k, _ := range this.Labels {
        keysForLabels = append(keysForLabels, k)
    }
    github_com_gogo_protobuf_sortkeys.Strings(keysForLabels)
    mapStringForLabels := "map[string]string{"
    for _, k := range keysForLabels {
        mapStringForLabels += fmt.Sprintf("%v: %v,", k, this.Labels[k])
    }
    mapStringForLabels += "}"
    keysForSysctls := make([]string, 0, len(this.Sysctls))
    for k, _ := range this.Sysctls {
        keysForSysctls = append(keysForSysctls, k)
    }
    github_com_gogo_protobuf_sortkeys.Strings(keysForSysctls)
    mapStringForSysctls := "map[string]string{"
    for _, k := range keysForSysctls {
        mapStringForSysctls += fmt.Sprintf("%v: %v,", k, this.Sysctls[k])
    }
    mapStringForSysctls += "}"
    s := strings.Join([]string{`&ContainerSpec{`,
        `Image:` + fmt.Sprintf("%v", this.Image) + `,`,
        `Labels:` + mapStringForLabels + `,`,
        `Command:` + fmt.Sprintf("%v", this.Command) + `,`,
        `Args:` + fmt.Sprintf("%v", this.Args) + `,`,
        `Env:` + fmt.Sprintf("%v", this.Env) + `,`,
        `Dir:` + fmt.Sprintf("%v", this.Dir) + `,`,
        `User:` + fmt.Sprintf("%v", this.User) + `,`,
        `Mounts:` + repeatedStringForMounts + `,`,
        `StopGracePeriod:` + strings.Replace(fmt.Sprintf("%v", this.StopGracePeriod), "Duration", "types.Duration", 1) + `,`,
        `PullOptions:` + strings.Replace(fmt.Sprintf("%v", this.PullOptions), "ContainerSpec_PullOptions", "ContainerSpec_PullOptions", 1) + `,`,
        `Groups:` + fmt.Sprintf("%v", this.Groups) + `,`,
        `Secrets:` + repeatedStringForSecrets + `,`,
        `TTY:` + fmt.Sprintf("%v", this.TTY) + `,`,
        `Hostname:` + fmt.Sprintf("%v", this.Hostname) + `,`,
        `DNSConfig:` + strings.Replace(fmt.Sprintf("%v", this.DNSConfig), "ContainerSpec_DNSConfig", "ContainerSpec_DNSConfig", 1) + `,`,
        `Healthcheck:` + strings.Replace(fmt.Sprintf("%v", this.Healthcheck), "HealthConfig", "HealthConfig", 1) + `,`,
        `Hosts:` + fmt.Sprintf("%v", this.Hosts) + `,`,
        `OpenStdin:` + fmt.Sprintf("%v", this.OpenStdin) + `,`,
        `ReadOnly:` + fmt.Sprintf("%v", this.ReadOnly) + `,`,
        `StopSignal:` + fmt.Sprintf("%v", this.StopSignal) + `,`,
        `Configs:` + repeatedStringForConfigs + `,`,
        `Privileges:` + strings.Replace(fmt.Sprintf("%v", this.Privileges), "Privileges", "Privileges", 1) + `,`,
        `Init:` + strings.Replace(fmt.Sprintf("%v", this.Init), "BoolValue", "types.BoolValue", 1) + `,`,
        `Isolation:` + fmt.Sprintf("%v", this.Isolation) + `,`,
        `PidsLimit:` + fmt.Sprintf("%v", this.PidsLimit) + `,`,
        `Sysctls:` + mapStringForSysctls + `,`,
        `CapabilityAdd:` + fmt.Sprintf("%v", this.CapabilityAdd) + `,`,
        `CapabilityDrop:` + fmt.Sprintf("%v", this.CapabilityDrop) + `,`,
        `Ulimits:` + repeatedStringForUlimits + `,`,
        `}`,
    }, "")
    return s
}
func (this *ContainerSpec_PullOptions) String() string {
    if this == nil {
        return "nil"
    }
    s := strings.Join([]string{`&ContainerSpec_PullOptions{`,
        `RegistryAuth:` + fmt.Sprintf("%v", this.RegistryAuth) + `,`,
        `}`,
    }, "")
    return s
}
func (this *ContainerSpec_DNSConfig) String() string {
    if this == nil {
        return "nil"
    }
    s := strings.Join([]string{`&ContainerSpec_DNSConfig{`,
        `Nameservers:` + fmt.Sprintf("%v", this.Nameservers) + `,`,
        `Search:` + fmt.Sprintf("%v", this.Search) + `,`,
        `Options:` + fmt.Sprintf("%v", this.Options) + `,`,
        `}`,
    }, "")
    return s
}
func (this *ContainerSpec_Ulimit) String() string {
    if this == nil {
        return "nil"
    }
    s := strings.Join([]string{`&ContainerSpec_Ulimit{`,
        `Name:` + fmt.Sprintf("%v", this.Name) + `,`,
        `Soft:` + fmt.Sprintf("%v", this.Soft) + `,`,
        `Hard:` + fmt.Sprintf("%v", this.Hard) + `,`,
        `}`,
    }, "")
    return s
}
func (this *EndpointSpec) String() string {
    if this == nil {
        return "nil"
    }
    repeatedStringForPorts := "[]*PortConfig{"
    for _, f := range this.Ports {
        repeatedStringForPorts += strings.Replace(fmt.Sprintf("%v", f), "PortConfig", "PortConfig", 1) + ","
    }
    repeatedStringForPorts += "}"
    s := strings.Join([]string{`&EndpointSpec{`,
        `Mode:` + fmt.Sprintf("%v", this.Mode) + `,`,
        `Ports:` + repeatedStringForPorts + `,`,
        `}`,
    }, "")
    return s
}
func (this *NetworkSpec) String() string {
    if this == nil {
        return "nil"
    }
    s := strings.Join([]string{`&NetworkSpec{`,
        `Annotations:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Annotations), "Annotations", "Annotations", 1), `&`, ``, 1) + `,`,
        `DriverConfig:` + strings.Replace(fmt.Sprintf("%v", this.DriverConfig), "Driver", "Driver", 1) + `,`,
        `Ipv6Enabled:` + fmt.Sprintf("%v", this.Ipv6Enabled) + `,`,
        `Internal:` + fmt.Sprintf("%v", this.Internal) + `,`,
        `IPAM:` + strings.Replace(fmt.Sprintf("%v", this.IPAM), "IPAMOptions", "IPAMOptions", 1) + `,`,
        `Attachable:` + fmt.Sprintf("%v", this.Attachable) + `,`,
        `Ingress:` + fmt.Sprintf("%v", this.Ingress) + `,`,
        `ConfigFrom:` + fmt.Sprintf("%v", this.ConfigFrom) + `,`,
        `}`,
    }, "")
    return s
}
func (this *NetworkSpec_Network) String() string {
    if this == nil {
        return "nil"
    }
    s := strings.Join([]string{`&NetworkSpec_Network{`,
        `Network:` + fmt.Sprintf("%v", this.Network) + `,`,
        `}`,
    }, "")
    return s
}
func (this *ClusterSpec) String() string {
    if this == nil {
        return "nil"
    }
    s := strings.Join([]string{`&ClusterSpec{`,
        `Annotations:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Annotations), "Annotations", "Annotations", 1), `&`, ``, 1) + `,`,
        `AcceptancePolicy:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.AcceptancePolicy), "AcceptancePolicy", "AcceptancePolicy", 1), `&`, ``, 1) + `,`,
        `Orchestration:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Orchestration), "OrchestrationConfig", "OrchestrationConfig", 1), `&`, ``, 1) + `,`,
        `Raft:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Raft), "RaftConfig", "RaftConfig", 1), `&`, ``, 1) + `,`,
        `Dispatcher:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Dispatcher), "DispatcherConfig", "DispatcherConfig", 1), `&`, ``, 1) + `,`,
        `CAConfig:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.CAConfig), "CAConfig", "CAConfig", 1), `&`, ``, 1) + `,`,
        `TaskDefaults:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.TaskDefaults), "TaskDefaults", "TaskDefaults", 1), `&`, ``, 1) + `,`,
        `EncryptionConfig:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.EncryptionConfig), "EncryptionConfig", "EncryptionConfig", 1), `&`, ``, 1) + `,`,
        `}`,
    }, "")
    return s
}
func (this *SecretSpec) String() string {
    if this == nil {
        return "nil"
    }
    s := strings.Join([]string{`&SecretSpec{`,
        `Annotations:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Annotations), "Annotations", "Annotations", 1), `&`, ``, 1) + `,`,
        `Data:` + fmt.Sprintf("%v", this.Data) + `,`,
        `Templating:` + strings.Replace(fmt.Sprintf("%v", this.Templating), "Driver", "Driver", 1) + `,`,
        `Driver:` + strings.Replace(fmt.Sprintf("%v", this.Driver), "Driver", "Driver", 1) + `,`,
        `}`,
    }, "")
    return s
}
func (this *ConfigSpec) String() string {
    if this == nil {
        return "nil"
    }
    s := strings.Join([]string{`&ConfigSpec{`,
        `Annotations:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Annotations), "Annotations", "Annotations", 1), `&`, ``, 1) + `,`,
        `Data:` + fmt.Sprintf("%v", this.Data) + `,`,
        `Templating:` + strings.Replace(fmt.Sprintf("%v", this.Templating), "Driver", "Driver", 1) + `,`,
        `}`,
    }, "")
    return s
}
func (this *VolumeSpec) String() string {
    if this == nil {
        return "nil"
    }
    repeatedStringForSecrets := "[]*VolumeSecret{"
    for _, f := range this.Secrets {
        repeatedStringForSecrets += strings.Replace(fmt.Sprintf("%v", f), "VolumeSecret", "VolumeSecret", 1) + ","
    }
    repeatedStringForSecrets += "}"
    s := strings.Join([]string{`&VolumeSpec{`,
        `Annotations:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Annotations), "Annotations", "Annotations", 1), `&`, ``, 1) + `,`,
        `Group:` + fmt.Sprintf("%v", this.Group) + `,`,
        `Driver:` + strings.Replace(fmt.Sprintf("%v", this.Driver), "Driver", "Driver", 1) + `,`,
        `AccessMode:` + strings.Replace(fmt.Sprintf("%v", this.AccessMode), "VolumeAccessMode", "VolumeAccessMode", 1) + `,`,
        `Secrets:` + repeatedStringForSecrets + `,`,
        `AccessibilityRequirements:` + strings.Replace(fmt.Sprintf("%v", this.AccessibilityRequirements), "TopologyRequirement", "TopologyRequirement", 1) + `,`,
        `CapacityRange:` + strings.Replace(fmt.Sprintf("%v", this.CapacityRange), "CapacityRange", "CapacityRange", 1) + `,`,
        `Availability:` + fmt.Sprintf("%v", this.Availability) + `,`,
        `}`,
    }, "")
    return s
}
func valueToStringSpecs(v interface{}) string {
    rv := reflect.ValueOf(v)
    if rv.IsNil() {
        return "nil"
    }
    pv := reflect.Indirect(rv).Interface()
    return fmt.Sprintf("*%v", pv)
}
func (m *NodeSpec) Unmarshal(dAtA []byte) error {
    l := len(dAtA)
    iNdEx := 0
    for iNdEx < l {
        preIndex := iNdEx
        var wire uint64
        for shift := uint(0); ; shift += 7 {
            if shift >= 64 {
                return ErrIntOverflowSpecs
            }
            if iNdEx >= l {
                return io.ErrUnexpectedEOF
            }
            b := dAtA[iNdEx]
            iNdEx++
            wire |= uint64(b&0x7F) << shift
            if b < 0x80 {
                break
            }
        }
        fieldNum := int32(wire >> 3)
        wireType := int(wire & 0x7)
        if wireType == 4 {
            return fmt.Errorf("proto: NodeSpec: wiretype end group for non-group")
        }
        if fieldNum <= 0 {
            return fmt.Errorf("proto: NodeSpec: illegal tag %d (wire type %d)", fieldNum, wire)
        }
        switch fieldNum {
        case 1:
            if wireType != 2 {
                return fmt.Errorf("proto: wrong wireType = %d for field Annotations", wireType)
            }
            var msglen int
            for shift := uint(0); ; shift += 7 {
                if shift >= 64 {
                    return ErrIntOverflowSpecs
                }
                if iNdEx >= l {
                    return io.ErrUnexpectedEOF
                }
                b := dAtA[iNdEx]
                iNdEx++
                msglen |= int(b&0x7F) << shift
                if b < 0x80 {
                    break
                }
            }
            if msglen < 0 {
                return ErrInvalidLengthSpecs
            }
            postIndex := iNdEx + msglen
            if postIndex < 0 {
                return ErrInvalidLengthSpecs
            }
            if postIndex > l {
                return io.ErrUnexpectedEOF
            }
            if err := m.Annotations.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
                return err
            }
            iNdEx = postIndex
        case 2:
            if wireType != 0 {
                return fmt.Errorf("proto: wrong wireType = %d for field DesiredRole", wireType)
            }
            m.DesiredRole = 0
            for shift := uint(0); ; shift += 7 {
                if shift >= 64 {
                    return ErrIntOverflowSpecs
                }
                if iNdEx >= l {
                    return io.ErrUnexpectedEOF
                }
                b := dAtA[iNdEx]
                iNdEx++
                m.DesiredRole |= NodeRole(b&0x7F) << shift
                if b < 0x80 {
                    break
                }
            }
        case 3:
            if wireType != 0 {
                return fmt.Errorf("proto: wrong wireType = %d for field Membership", wireType)
            }
            m.Membership = 0
            for shift := uint(0); ; shift += 7 {
                if shift >= 64 {
                    return ErrIntOverflowSpecs
                }
                if iNdEx >= l {
                    return io.ErrUnexpectedEOF
                }
                b := dAtA[iNdEx]
                iNdEx++
                m.Membership |= NodeSpec_Membership(b&0x7F) << shift
                if b < 0x80 {
                    break
                }
            }
        case 4:
            if wireType != 0 {
                return fmt.Errorf("proto: wrong wireType = %d for field Availability", wireType)
            }
            m.Availability = 0
            for shift := uint(0); ; shift += 7 {
                if shift >= 64 {
                    return ErrIntOverflowSpecs
                }
                if iNdEx >= l {
                    return io.ErrUnexpectedEOF
                }
                b := dAtA[iNdEx]
                iNdEx++
                m.Availability |= NodeSpec_Availability(b&0x7F) << shift
                if b < 0x80 {
                    break
                }
            }
        default:
            iNdEx = preIndex
            skippy, err := skipSpecs(dAtA[iNdEx:])
            if err != nil {
                return err
            }
            if (skippy < 0) || (iNdEx+skippy) < 0 {
                return ErrInvalidLengthSpecs
            }
            if (iNdEx + skippy) > l {
                return io.ErrUnexpectedEOF
            }
            iNdEx += skippy
        }
    }

    if iNdEx > l {
        return io.ErrUnexpectedEOF
    }
    return nil
}
func (m *ServiceSpec) Unmarshal(dAtA []byte) error {
    l := len(dAtA)
    iNdEx := 0
    for iNdEx < l {
        preIndex := iNdEx
        var wire uint64
        for shift := uint(0); ; shift += 7 {
            if shift >= 64 {
                return ErrIntOverflowSpecs
            }
            if iNdEx >= l {
                return io.ErrUnexpectedEOF
            }
            b := dAtA[iNdEx]
            iNdEx++
            wire |= uint64(b&0x7F) << shift
            if b < 0x80 {
                break
            }
        }
        fieldNum := int32(wire >> 3)
        wireType := int(wire & 0x7)
        if wireType == 4 {
            return fmt.Errorf("proto: ServiceSpec: wiretype end group for non-group")
        }
        if fieldNum <= 0 {
            return fmt.Errorf("proto: ServiceSpec: illegal tag %d (wire type %d)", fieldNum, wire)
        }
        switch fieldNum {
        case 1:
            if wireType != 2 {
                return fmt.Errorf("proto: wrong wireType = %d for field Annotations", wireType)
            }
            var msglen int
            for shift := uint(0); ; shift += 7 {
                if shift >= 64 {
                    return ErrIntOverflowSpecs
                }
                if iNdEx >= l {
                    return io.ErrUnexpectedEOF
                }
                b := dAtA[iNdEx]
                iNdEx++
                msglen |= int(b&0x7F) << shift
                if b < 0x80 {
                    break
                }
            }
            if msglen < 0 {
                return ErrInvalidLengthSpecs
            }
            postIndex := iNdEx + msglen
            if postIndex < 0 {
                return ErrInvalidLengthSpecs
            }
            if postIndex > l {
                return io.ErrUnexpectedEOF
            }
            if err := m.Annotations.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
                return err
            }
            iNdEx = postIndex
        case 2:
            if wireType != 2 {
                return fmt.Errorf("proto: wrong wireType = %d for field Task", wireType)
            }
            var msglen int
            for shift := uint(0); ; shift += 7 {
                if shift >= 64 {
                    return ErrIntOverflowSpecs
                }
                if iNdEx >= l {
                    return io.ErrUnexpectedEOF
                }
                b := dAtA[iNdEx]
                iNdEx++
                msglen |= int(b&0x7F) << shift
                if b < 0x80 {
                    break
                }
            }
            if msglen < 0 {
                return ErrInvalidLengthSpecs
            }
            postIndex := iNdEx + msglen
            if postIndex < 0 {
                return ErrInvalidLengthSpecs
            }
            if postIndex > l {
                return io.ErrUnexpectedEOF
            }
            if err := m.Task.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
                return err
            }
            iNdEx = postIndex
        case 3:
            if wireType != 2 {
                return fmt.Errorf("proto: wrong wireType = %d for field Replicated", wireType)
            }
            var msglen int
            for shift := uint(0); ; shift += 7 {
                if shift >= 64 {
                    return ErrIntOverflowSpecs
                }
                if iNdEx >= l {
                    return io.ErrUnexpectedEOF
                }
                b := dAtA[iNdEx]
                iNdEx++
                msglen |= int(b&0x7F) << shift
                if b < 0x80 {
                    break
                }
            }
            if msglen < 0 {
                return ErrInvalidLengthSpecs
            }
            postIndex := iNdEx + msglen
            if postIndex < 0 {
                return ErrInvalidLengthSpecs
            }
            if postIndex > l {
                return io.ErrUnexpectedEOF
            }
            v := &ReplicatedService{}
            if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
                return err
            }
            m.Mode = &ServiceSpec_Replicated{v}
            iNdEx = postIndex
        case 4:
            if wireType != 2 {
                return fmt.Errorf("proto: wrong wireType = %d for field Global", wireType)
            }
            var msglen int
            for shift := uint(0); ; shift += 7 {
                if shift >= 64 {
                    return ErrIntOverflowSpecs
                }
                if iNdEx >= l {
                    return io.ErrUnexpectedEOF
                }
                b := dAtA[iNdEx]
                iNdEx++
                msglen |= int(b&0x7F) << shift
                if b < 0x80 {
                    break
                }
            }
            if msglen < 0 {
                return ErrInvalidLengthSpecs
            }
            postIndex := iNdEx + msglen
            if postIndex < 0 {
                return ErrInvalidLengthSpecs
            }
            if postIndex > l {
                return io.ErrUnexpectedEOF
            }
            v := &GlobalService{}
            if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
                return err
            }
            m.Mode = &ServiceSpec_Global{v}
            iNdEx = postIndex
        case 6:
            if wireType != 2 {
                return fmt.Errorf("proto: wrong wireType = %d for field Update", wireType)
            }
            var msglen int
            for shift := uint(0); ; shift += 7 {
                if shift >= 64 {
                    return ErrIntOverflowSpecs
                }
                if iNdEx >= l {
                    return io.ErrUnexpectedEOF
                }
                b := dAtA[iNdEx]
                iNdEx++
                msglen |= int(b&0x7F) << shift
                if b < 0x80 {
                    break
                }
            }
            if msglen < 0 {
                return ErrInvalidLengthSpecs
            }
            postIndex := iNdEx + msglen
            if postIndex < 0 {
                return ErrInvalidLengthSpecs
            }
            if postIndex > l {
                return io.ErrUnexpectedEOF
            }
            if m.Update == nil {
                m.Update = &UpdateConfig{}
            }
            if err := m.Update.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
                return err
            }
            iNdEx = postIndex
        case 7:
            if wireType != 2 {
                return fmt.Errorf("proto: wrong wireType = %d for field Networks", wireType)
            }
            var msglen int
            for shift := uint(0); ; shift += 7 {
                if shift >= 64 {
                    return ErrIntOverflowSpecs
                }
                if iNdEx >= l {
                    return io.ErrUnexpectedEOF
                }
                b := dAtA[iNdEx]
                iNdEx++
                msglen |= int(b&0x7F) << shift
                if b < 0x80 {
                    break
                }
            }
            if msglen < 0 {
                return ErrInvalidLengthSpecs
            }
            postIndex := iNdEx + msglen
            if postIndex < 0 {
                return ErrInvalidLengthSpecs
            }
            if postIndex > l {
                return io.ErrUnexpectedEOF
            }
            m.Networks = append(m.Networks, &NetworkAttachmentConfig{})
            if err := m.Networks[len(m.Networks)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
                return err
            }
            iNdEx = postIndex
        case 8:
            if wireType != 2 {
                return fmt.Errorf("proto: wrong wireType = %d for field Endpoint", wireType)
            }
            var msglen int
            for shift := uint(0); ; shift += 7 {
                if shift >= 64 {
                    return ErrIntOverflowSpecs
                }
                if iNdEx >= l {
                    return io.ErrUnexpectedEOF
                }
                b := dAtA[iNdEx]
                iNdEx++
                msglen |= int(b&0x7F) << shift
                if b < 0x80 {
                    break
                }
            }
            if msglen < 0 {
                return ErrInvalidLengthSpecs
            }
            postIndex := iNdEx + msglen
            if postIndex < 0 {
                return ErrInvalidLengthSpecs
            }
            if postIndex > l {
                return io.ErrUnexpectedEOF
            }
            if m.Endpoint == nil {
                m.Endpoint = &EndpointSpec{}
            }
            if err := m.Endpoint.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
                return err
            }
            iNdEx = postIndex
        case 9:
            if wireType != 2 {
                return fmt.Errorf("proto: wrong wireType = %d for field Rollback", wireType)
            }
            var msglen int
            for shift := uint(0); ; shift += 7 {
                if shift >= 64 {
                    return ErrIntOverflowSpecs
                }
                if iNdEx >= l {
                    return io.ErrUnexpectedEOF
                }
                b := dAtA[iNdEx]
                iNdEx++
                msglen |= int(b&0x7F) << shift
                if b < 0x80 {
                    break
                }
            }
            if msglen < 0 {
                return ErrInvalidLengthSpecs
            }
            postIndex := iNdEx + msglen
            if postIndex < 0 {
                return ErrInvalidLengthSpecs
            }
            if postIndex > l {
                return io.ErrUnexpectedEOF
            }
            if m.Rollback == nil {
                m.Rollback = &UpdateConfig{}
            }
            if err := m.Rollback.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
                return err
            }
            iNdEx = postIndex
        case 10:
            if wireType != 2 {
                return fmt.Errorf("proto: wrong wireType = %d for field ReplicatedJob", wireType)
            }
            var msglen int
            for shift := uint(0); ; shift += 7 {
                if shift >= 64 {
                    return ErrIntOverflowSpecs
                }
                if iNdEx >= l {
                    return io.ErrUnexpectedEOF
                }
                b := dAtA[iNdEx]
                iNdEx++
                msglen |= int(b&0x7F) << shift
                if b < 0x80 {
                    break
                }
            }
            if msglen < 0 {
                return ErrInvalidLengthSpecs
            }
            postIndex := iNdEx + msglen
            if postIndex < 0 {
                return ErrInvalidLengthSpecs
            }
            if postIndex > l {
                return io.ErrUnexpectedEOF
            }
            v := &ReplicatedJob{}
            if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
                return err
            }
            m.Mode = &ServiceSpec_ReplicatedJob{v}
            iNdEx = postIndex
        case 11:
            if wireType != 2 {
                return fmt.Errorf("proto: wrong wireType = %d for field GlobalJob", wireType)
            }
            var msglen int
            for shift := uint(0); ; shift += 7 {
                if shift >= 64 {
                    return ErrIntOverflowSpecs
                }
                if iNdEx >= l {
                    return io.ErrUnexpectedEOF
                }
                b := dAtA[iNdEx]
                iNdEx++
                msglen |= int(b&0x7F) << shift
                if b < 0x80 {
                    break
                }
            }
            if msglen < 0 {
                return ErrInvalidLengthSpecs
            }
            postIndex := iNdEx + msglen
            if postIndex < 0 {
                return ErrInvalidLengthSpecs
            }
            if postIndex > l {
                return io.ErrUnexpectedEOF
            }
            v := &GlobalJob{}
            if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
                return err
            }
            m.Mode = &ServiceSpec_GlobalJob{v}
            iNdEx = postIndex
        default:
            iNdEx = preIndex
            skippy, err := skipSpecs(dAtA[iNdEx:])
            if err != nil {
                return err
            }
            if (skippy < 0) || (iNdEx+skippy) < 0 {
                return ErrInvalidLengthSpecs
            }
            if (iNdEx + skippy) > l {
                return io.ErrUnexpectedEOF
            }
            iNdEx += skippy
        }
    }

    if iNdEx > l {
        return io.ErrUnexpectedEOF
    }
    return nil
}
func (m *ReplicatedService) Unmarshal(dAtA []byte) error {
    l := len(dAtA)
    iNdEx := 0
    for iNdEx < l {
        preIndex := iNdEx
        var wire uint64
        for shift := uint(0); ; shift += 7 {
            if shift >= 64 {
                return ErrIntOverflowSpecs
            }
            if iNdEx >= l {
                return io.ErrUnexpectedEOF
            }
            b := dAtA[iNdEx]
            iNdEx++
            wire |= uint64(b&0x7F) << shift
            if b < 0x80 {
                break
            }
        }
        fieldNum := int32(wire >> 3)
        wireType := int(wire & 0x7)
        if wireType == 4 {
            return fmt.Errorf("proto: ReplicatedService: wiretype end group for non-group")
        }
        if fieldNum <= 0 {
            return fmt.Errorf("proto: ReplicatedService: illegal tag %d (wire type %d)", fieldNum, wire)
        }
        switch fieldNum {
        case 1:
            if wireType != 0 {
                return fmt.Errorf("proto: wrong wireType = %d for field Replicas", wireType)
            }
            m.Replicas = 0
            for shift := uint(0); ; shift += 7 {
                if shift >= 64 {
                    return ErrIntOverflowSpecs
                }
                if iNdEx >= l {
                    return io.ErrUnexpectedEOF
                }
                b := dAtA[iNdEx]
                iNdEx++
                m.Replicas |= uint64(b&0x7F) << shift
                if b < 0x80 {
                    break
                }
            }
        default:
            iNdEx = preIndex
            skippy, err := skipSpecs(dAtA[iNdEx:])
            if err != nil {
                return err
            }
            if (skippy < 0) || (iNdEx+skippy) < 0 {
                return ErrInvalidLengthSpecs
            }
            if (iNdEx + skippy) > l {
                return io.ErrUnexpectedEOF
            }
            iNdEx += skippy
        }
    }

    if iNdEx > l {
        return io.ErrUnexpectedEOF
    }
    return nil
}
func (m *GlobalService) Unmarshal(dAtA []byte) error {
    l := len(dAtA)
    iNdEx := 0
    for iNdEx < l {
        preIndex := iNdEx
        var wire uint64
        for shift := uint(0); ; shift += 7 {
            if shift >= 64 {
                return ErrIntOverflowSpecs
            }
            if iNdEx >= l {
                return io.ErrUnexpectedEOF
            }
            b := dAtA[iNdEx]
            iNdEx++
            wire |= uint64(b&0x7F) << shift
            if b < 0x80 {
                break
            }
        }
        fieldNum := int32(wire >> 3)
        wireType := int(wire & 0x7)
        if wireType == 4 {
            return fmt.Errorf("proto: GlobalService: wiretype end group for non-group")
        }
        if fieldNum <= 0 {
            return fmt.Errorf("proto: GlobalService: illegal tag %d (wire type %d)", fieldNum, wire)
        }
        switch fieldNum {
        default:
            iNdEx = preIndex
            skippy, err := skipSpecs(dAtA[iNdEx:])
            if err != nil {
                return err
            }
            if (skippy < 0) || (iNdEx+skippy) < 0 {
                return ErrInvalidLengthSpecs
            }
            if (iNdEx + skippy) > l {
                return io.ErrUnexpectedEOF
            }
            iNdEx += skippy
        }
    }

    if iNdEx > l {
        return io.ErrUnexpectedEOF
    }
    return nil
}
func (m *ReplicatedJob) Unmarshal(dAtA []byte) error {
    l := len(dAtA)
    iNdEx := 0
    for iNdEx < l {
        preIndex := iNdEx
        var wire uint64
        for shift := uint(0); ; shift += 7 {
            if shift >= 64 {
                return ErrIntOverflowSpecs
            }
            if iNdEx >= l {
                return io.ErrUnexpectedEOF
            }
            b := dAtA[iNdEx]
            iNdEx++
            wire |= uint64(b&0x7F) << shift
            if b < 0x80 {
                break
            }
        }
        fieldNum := int32(wire >> 3)
        wireType := int(wire & 0x7)
        if wireType == 4 {
            return fmt.Errorf("proto: ReplicatedJob: wiretype end group for non-group")
        }
        if fieldNum <= 0 {
            return fmt.Errorf("proto: ReplicatedJob: illegal tag %d (wire type %d)", fieldNum, wire)
        }
        switch fieldNum {
        case 1:
            if wireType != 0 {
                return fmt.Errorf("proto: wrong wireType = %d for field MaxConcurrent", wireType)
            }
            m.MaxConcurrent = 0
            for shift := uint(0); ; shift += 7 {
                if shift >= 64 {
                    return ErrIntOverflowSpecs
                }
                if iNdEx >= l {
                    return io.ErrUnexpectedEOF
                }
                b := dAtA[iNdEx]
                iNdEx++
                m.MaxConcurrent |= uint64(b&0x7F) << shift
                if b < 0x80 {
                    break
                }
            }
        case 2:
            if wireType != 0 {
                return fmt.Errorf("proto: wrong wireType = %d for field TotalCompletions", wireType)
            }
            m.TotalCompletions = 0
            for shift := uint(0); ; shift += 7 {
                if shift >= 64 {
                    return ErrIntOverflowSpecs
                }
                if iNdEx >= l {
                    return io.ErrUnexpectedEOF
                }
                b := dAtA[iNdEx]
                iNdEx++
                m.TotalCompletions |= uint64(b&0x7F) << shift
                if b < 0x80 {
                    break
                }
            }
        default:
            iNdEx = preIndex
            skippy, err := skipSpecs(dAtA[iNdEx:])
            if err != nil {
                return err
            }
            if (skippy < 0) || (iNdEx+skippy) < 0 {
                return ErrInvalidLengthSpecs
            }
            if (iNdEx + skippy) > l {
                return io.ErrUnexpectedEOF
            }
            iNdEx += skippy
        }
    }

    if iNdEx > l {
        return io.ErrUnexpectedEOF
    }
    return nil
}
func (m *GlobalJob) Unmarshal(dAtA []byte) error {
    l := len(dAtA)
    iNdEx := 0
    for iNdEx < l {
        preIndex := iNdEx
        var wire uint64
        for shift := uint(0); ; shift += 7 {
            if shift >= 64 {
                return ErrIntOverflowSpecs
            }
            if iNdEx >= l {
                return io.ErrUnexpectedEOF
            }
            b := dAtA[iNdEx]
            iNdEx++
            wire |= uint64(b&0x7F) << shift
            if b < 0x80 {
                break
            }
        }
        fieldNum := int32(wire >> 3)
        wireType := int(wire & 0x7)
        if wireType == 4 {
            return fmt.Errorf("proto: GlobalJob: wiretype end group for non-group")
        }
        if fieldNum <= 0 {
            return fmt.Errorf("proto: GlobalJob: illegal tag %d (wire type %d)", fieldNum, wire)
        }
        switch fieldNum {
        default:
            iNdEx = preIndex
            skippy, err := skipSpecs(dAtA[iNdEx:])
            if err != nil {
                return err
            }
            if (skippy < 0) || (iNdEx+skippy) < 0 {
                return ErrInvalidLengthSpecs
            }
            if (iNdEx + skippy) > l {
                return io.ErrUnexpectedEOF
            }
            iNdEx += skippy
        }
    }

    if iNdEx > l {
        return io.ErrUnexpectedEOF
    }
    return nil
}
func (m *TaskSpec) Unmarshal(dAtA []byte) error {
    l := len(dAtA)
    iNdEx := 0
    for iNdEx < l {
        preIndex := iNdEx
        var wire uint64
        for shift := uint(0); ; shift += 7 {
            if shift >= 64 {
                return ErrIntOverflowSpecs
            }
            if iNdEx >= l {
                return io.ErrUnexpectedEOF
            }
            b := dAtA[iNdEx]
            iNdEx++
            wire |= uint64(b&0x7F) << shift
            if b < 0x80 {
                break
            }
        }
        fieldNum := int32(wire >> 3)
        wireType := int(wire & 0x7)
        if wireType == 4 {
            return fmt.Errorf("proto: TaskSpec: wiretype end group for non-group")
        }
        if fieldNum <= 0 {
            return fmt.Errorf("proto: TaskSpec: illegal tag %d (wire type %d)", fieldNum, wire)
        }
        switch fieldNum {
        case 1:
            if wireType != 2 {
                return fmt.Errorf("proto: wrong wireType = %d for field Container", wireType)
            }
            var msglen int
            for shift := uint(0); ; shift += 7 {
                if shift >= 64 {
                    return ErrIntOverflowSpecs
                }
                if iNdEx >= l {
                    return io.ErrUnexpectedEOF
                }
                b := dAtA[iNdEx]
                iNdEx++
                msglen |= int(b&0x7F) << shift
                if b < 0x80 {
                    break
                }
            }
            if msglen < 0 {
                return ErrInvalidLengthSpecs
            }
            postIndex := iNdEx + msglen
            if postIndex < 0 {
                return ErrInvalidLengthSpecs
            }
            if postIndex > l {
                return io.ErrUnexpectedEOF
            }
            v := &ContainerSpec{}
            if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
                return err
            }
            m.Runtime = &TaskSpec_Container{v}
            iNdEx = postIndex
        case 2:
            if wireType != 2 {
                return fmt.Errorf("proto: wrong wireType = %d for field Resources", wireType)
            }
            var msglen int
            for shift := uint(0); ; shift += 7 {
                if shift >= 64 {
                    return ErrIntOverflowSpecs
                }
                if iNdEx >= l {
                    return io.ErrUnexpectedEOF
                }
                b := dAtA[iNdEx]
                iNdEx++
                msglen |= int(b&0x7F) << shift
                if b < 0x80 {
                    break
                }
            }
            if msglen < 0 {
                return ErrInvalidLengthSpecs
            }
            postIndex := iNdEx + msglen
            if postIndex < 0 {
                return ErrInvalidLengthSpecs
            }
            if postIndex > l {
                return io.ErrUnexpectedEOF
            }
            if m.Resources == nil {
                m.Resources = &ResourceRequirements{}
            }
            if err := m.Resources.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
                return err
            }
            iNdEx = postIndex
        case 4:
            if wireType != 2 {
                return fmt.Errorf("proto: wrong wireType = %d for field Restart", wireType)
            }
            var msglen int
            for shift := uint(0); ; shift += 7 {
                if shift >= 64 {
                    return ErrIntOverflowSpecs
                }
                if iNdEx >= l {
                    return io.ErrUnexpectedEOF
                }
                b := dAtA[iNdEx]
                iNdEx++
                msglen |= int(b&0x7F) << shift
                if b < 0x80 {
                    break
                }
            }
            if msglen < 0 {
                return ErrInvalidLengthSpecs
            }
            postIndex := iNdEx + msglen
            if postIndex < 0 {
                return ErrInvalidLengthSpecs
            }
            if postIndex > l {
                return io.ErrUnexpectedEOF
            }
            if m.Restart == nil {
                m.Restart = &RestartPolicy{}
            }
            if err := m.Restart.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
                return err
            }
            iNdEx = postIndex
        case 5:
            if wireType != 2 {
                return fmt.Errorf("proto: wrong wireType = %d for field Placement", wireType)
            }
            var msglen int
            for shift := uint(0); ; shift += 7 {
                if shift >= 64 {
                    return ErrIntOverflowSpecs
                }
                if iNdEx >= l {
                    return io.ErrUnexpectedEOF
                }
                b := dAtA[iNdEx]
                iNdEx++
                msglen |= int(b&0x7F) << shift
                if b < 0x80 {
                    break
                }
            }
            if msglen < 0 {
                return ErrInvalidLengthSpecs
            }
            postIndex := iNdEx + msglen
            if postIndex < 0 {
                return ErrInvalidLengthSpecs
            }
            if postIndex > l {
                return io.ErrUnexpectedEOF
            }
            if m.Placement == nil {
                m.Placement = &Placement{}
            }
            if err := m.Placement.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
                return err
            }
            iNdEx = postIndex
        case 6:
            if wireType != 2 {
                return fmt.Errorf("proto: wrong wireType = %d for field LogDriver", wireType)
            }
            var msglen int
            for shift := uint(0); ; shift += 7 {
                if shift >= 64 {
                    return ErrIntOverflowSpecs
                }
                if iNdEx >= l {
                    return io.ErrUnexpectedEOF
                }
                b := dAtA[iNdEx]
                iNdEx++
                msglen |= int(b&0x7F) << shift
                if b < 0x80 {
                    break
                }
            }
            if msglen < 0 {
                return ErrInvalidLengthSpecs
            }
            postIndex := iNdEx + msglen
            if postIndex < 0 {
                return ErrInvalidLengthSpecs
            }
            if postIndex > l {
                return io.ErrUnexpectedEOF
            }
            if m.LogDriver == nil {
                m.LogDriver = &Driver{}
            }
            if err := m.LogDriver.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
                return err
            }
            iNdEx = postIndex
        case 7:
            if wireType != 2 {
                return fmt.Errorf("proto: wrong wireType = %d for field Networks", wireType)
            }
            var msglen int
            for shift := uint(0); ; shift += 7 {
                if shift >= 64 {
                    return ErrIntOverflowSpecs
                }
                if iNdEx >= l {
                    return io.ErrUnexpectedEOF
                }
                b := dAtA[iNdEx]
                iNdEx++
                msglen |= int(b&0x7F) << shift
                if b < 0x80 {
                    break
                }
            }
            if msglen < 0 {
                return ErrInvalidLengthSpecs
            }
            postIndex := iNdEx + msglen
            if postIndex < 0 {
                return ErrInvalidLengthSpecs
            }
            if postIndex > l {
                return io.ErrUnexpectedEOF
            }
            m.Networks = append(m.Networks, &NetworkAttachmentConfig{})
            if err := m.Networks[len(m.Networks)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
                return err
            }
            iNdEx = postIndex
        case 8:
            if wireType != 2 {
                return fmt.Errorf("proto: wrong wireType = %d for field Attachment", wireType)
            }
            var msglen int
            for shift := uint(0); ; shift += 7 {
                if shift >= 64 {
                    return ErrIntOverflowSpecs
                }
                if iNdEx >= l {
                    return io.ErrUnexpectedEOF
                }
                b := dAtA[iNdEx]
                iNdEx++
                msglen |= int(b&0x7F) << shift
                if b < 0x80 {
                    break
                }
            }
            if msglen < 0 {
                return ErrInvalidLengthSpecs
            }
            postIndex := iNdEx + msglen
            if postIndex < 0 {
                return ErrInvalidLengthSpecs
            }
            if postIndex > l {
                return io.ErrUnexpectedEOF
            }
            v := &NetworkAttachmentSpec{}
            if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
                return err
            }
            m.Runtime = &TaskSpec_Attachment{v}
            iNdEx = postIndex
        case 9:
            if wireType != 0 {
                return fmt.Errorf("proto: wrong wireType = %d for field ForceUpdate", wireType)
            }
            m.ForceUpdate = 0
            for shift := uint(0); ; shift += 7 {
                if shift >= 64 {
                    return ErrIntOverflowSpecs
                }
                if iNdEx >= l {
                    return io.ErrUnexpectedEOF
                }
                b := dAtA[iNdEx]
                iNdEx++
                m.ForceUpdate |= uint64(b&0x7F) << shift
                if b < 0x80 {
                    break
                }
            }
        case 10:
            if wireType != 2 {
                return fmt.Errorf("proto: wrong wireType = %d for field Generic", wireType)
            }
            var msglen int
            for shift := uint(0); ; shift += 7 {
                if shift >= 64 {
                    return ErrIntOverflowSpecs
                }
                if iNdEx >= l {
                    return io.ErrUnexpectedEOF
                }
                b := dAtA[iNdEx]
                iNdEx++
                msglen |= int(b&0x7F) << shift
                if b < 0x80 {
                    break
                }
            }
            if msglen < 0 {
                return ErrInvalidLengthSpecs
            }
            postIndex := iNdEx + msglen
            if postIndex < 0 {
                return ErrInvalidLengthSpecs
            }
            if postIndex > l {
                return io.ErrUnexpectedEOF
            }
            v := &GenericRuntimeSpec{}
            if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
                return err
            }
            m.Runtime = &TaskSpec_Generic{v}
            iNdEx = postIndex
        case 11:
            if wireType != 2 {
                return fmt.Errorf("proto: wrong wireType = %d for field ResourceReferences", wireType)
            }
            var msglen int
            for shift := uint(0); ; shift += 7 {
                if shift >= 64 {
                    return ErrIntOverflowSpecs
                }
                if iNdEx >= l {
                    return io.ErrUnexpectedEOF
                }
                b := dAtA[iNdEx]
                iNdEx++
                msglen |= int(b&0x7F) << shift
                if b < 0x80 {
                    break
                }
            }
            if msglen < 0 {
                return ErrInvalidLengthSpecs
            }
            postIndex := iNdEx + msglen
            if postIndex < 0 {
                return ErrInvalidLengthSpecs
            }
            if postIndex > l {
                return io.ErrUnexpectedEOF
            }
            m.ResourceReferences = append(m.ResourceReferences, ResourceReference{})
            if err := m.ResourceReferences[len(m.ResourceReferences)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
                return err
            }
            iNdEx = postIndex
        default:
            iNdEx = preIndex
            skippy, err := skipSpecs(dAtA[iNdEx:])
            if err != nil {
                return err
            }
            if (skippy < 0) || (iNdEx+skippy) < 0 {
                return ErrInvalidLengthSpecs
            }
            if (iNdEx + skippy) > l {
                return io.ErrUnexpectedEOF
            }
            iNdEx += skippy
        }
    }

    if iNdEx > l {
        return io.ErrUnexpectedEOF
    }
    return nil
}
func (m *ResourceReference) Unmarshal(dAtA []byte) error {
    l := len(dAtA)
    iNdEx := 0
    for iNdEx < l {
        preIndex := iNdEx
        var wire uint64
        for shift := uint(0); ; shift += 7 {
            if shift >= 64 {
                return ErrIntOverflowSpecs
            }
            if iNdEx >= l {
                return io.ErrUnexpectedEOF
            }
            b := dAtA[iNdEx]
            iNdEx++
            wire |= uint64(b&0x7F) << shift
            if b < 0x80 {
                break
            }
        }
        fieldNum := int32(wire >> 3)
        wireType := int(wire & 0x7)
        if wireType == 4 {
            return fmt.Errorf("proto: ResourceReference: wiretype end group for non-group")
        }
        if fieldNum <= 0 {
            return fmt.Errorf("proto: ResourceReference: illegal tag %d (wire type %d)", fieldNum, wire)
        }
        switch fieldNum {
        case 1:
            if wireType != 2 {
                return fmt.Errorf("proto: wrong wireType = %d for field ResourceID", wireType)
            }
            var stringLen uint64
            for shift := uint(0); ; shift += 7 {
                if shift >= 64 {
                    return ErrIntOverflowSpecs
                }
                if iNdEx >= l {
                    return io.ErrUnexpectedEOF
                }
                b := dAtA[iNdEx]
                iNdEx++
                stringLen |= uint64(b&0x7F) << shift
                if b < 0x80 {
                    break
                }
            }
            intStringLen := int(stringLen)
            if intStringLen < 0 {
                return ErrInvalidLengthSpecs
            }
            postIndex := iNdEx + intStringLen
            if postIndex < 0 {
                return ErrInvalidLengthSpecs
            }
            if postIndex > l {
                return io.ErrUnexpectedEOF
            }
            m.ResourceID = string(dAtA[iNdEx:postIndex])
            iNdEx = postIndex
        case 2:
            if wireType != 0 {
                return fmt.Errorf("proto: wrong wireType = %d for field ResourceType", wireType)
            }
            m.ResourceType = 0
            for shift := uint(0); ; shift += 7 {
                if shift >= 64 {
                    return ErrIntOverflowSpecs
                }
                if iNdEx >= l {
                    return io.ErrUnexpectedEOF
                }
                b := dAtA[iNdEx]
                iNdEx++
                m.ResourceType |= ResourceType(b&0x7F) << shift
                if b < 0x80 {
                    break
                }
            }
        default:
            iNdEx = preIndex
            skippy, err := skipSpecs(dAtA[iNdEx:])
            if err != nil {
                return err
            }
            if (skippy < 0) || (iNdEx+skippy) < 0 {
                return ErrInvalidLengthSpecs
            }
            if (iNdEx + skippy) > l {
                return io.ErrUnexpectedEOF
            }
            iNdEx += skippy
        }
    }

    if iNdEx > l {
        return io.ErrUnexpectedEOF
    }
    return nil
}
func (m *GenericRuntimeSpec) Unmarshal(dAtA []byte) error {
    l := len(dAtA)
    iNdEx := 0
    for iNdEx < l {
        preIndex := iNdEx
        var wire uint64
        for shift := uint(0); ; shift += 7 {
            if shift >= 64 {
                return ErrIntOverflowSpecs
            }
            if iNdEx >= l {
                return io.ErrUnexpectedEOF
            }
            b := dAtA[iNdEx]
            iNdEx++
            wire |= uint64(b&0x7F) << shift
            if b < 0x80 {
                break
            }
        }
        fieldNum := int32(wire >> 3)
        wireType := int(wire & 0x7)
        if wireType == 4 {
            return fmt.Errorf("proto: GenericRuntimeSpec: wiretype end group for non-group")
        }
        if fieldNum <= 0 {
            return fmt.Errorf("proto: GenericRuntimeSpec: illegal tag %d (wire type %d)", fieldNum, wire)
        }
        switch fieldNum {
        case 1:
            if wireType != 2 {
                return fmt.Errorf("proto: wrong wireType = %d for field Kind", wireType)
            }
            var stringLen uint64
            for shift := uint(0); ; shift += 7 {
                if shift >= 64 {
                    return ErrIntOverflowSpecs
                }
                if iNdEx >= l {
                    return io.ErrUnexpectedEOF
                }
                b := dAtA[iNdEx]
                iNdEx++
                stringLen |= uint64(b&0x7F) << shift
                if b < 0x80 {
                    break
                }
            }
            intStringLen := int(stringLen)
            if intStringLen < 0 {
                return ErrInvalidLengthSpecs
            }
            postIndex := iNdEx + intStringLen
            if postIndex < 0 {
                return ErrInvalidLengthSpecs
            }
            if postIndex > l {
                return io.ErrUnexpectedEOF
            }
            m.Kind = string(dAtA[iNdEx:postIndex])
            iNdEx = postIndex
        case 2:
            if wireType != 2 {
                return fmt.Errorf("proto: wrong wireType = %d for field Payload", wireType)
            }
            var msglen int
            for shift := uint(0); ; shift += 7 {
                if shift >= 64 {
                    return ErrIntOverflowSpecs
                }
                if iNdEx >= l {
                    return io.ErrUnexpectedEOF
                }
                b := dAtA[iNdEx]
                iNdEx++
                msglen |= int(b&0x7F) << shift
                if b < 0x80 {
                    break
                }
            }
            if msglen < 0 {
                return ErrInvalidLengthSpecs
            }
            postIndex := iNdEx + msglen
            if postIndex < 0 {
                return ErrInvalidLengthSpecs
            }
            if postIndex > l {
                return io.ErrUnexpectedEOF
            }
            if m.Payload == nil {
                m.Payload = &types.Any{}
            }
            if err := m.Payload.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
                return err
            }
            iNdEx = postIndex
        default:
            iNdEx = preIndex
            skippy, err := skipSpecs(dAtA[iNdEx:])
            if err != nil {
                return err
            }
            if (skippy < 0) || (iNdEx+skippy) < 0 {
                return ErrInvalidLengthSpecs
            }
            if (iNdEx + skippy) > l {
                return io.ErrUnexpectedEOF
            }
            iNdEx += skippy
        }
    }

    if iNdEx > l {
        return io.ErrUnexpectedEOF
    }
    return nil
}
func (m *NetworkAttachmentSpec) Unmarshal(dAtA []byte) error {
    l := len(dAtA)
    iNdEx := 0
    for iNdEx < l {
        preIndex := iNdEx
        var wire uint64
        for shift := uint(0); ; shift += 7 {
            if shift >= 64 {
                return ErrIntOverflowSpecs
            }
            if iNdEx >= l {
                return io.ErrUnexpectedEOF
            }
            b := dAtA[iNdEx]
            iNdEx++
            wire |= uint64(b&0x7F) << shift
            if b < 0x80 {
                break
            }
        }
        fieldNum := int32(wire >> 3)
        wireType := int(wire & 0x7)
        if wireType == 4 {
            return fmt.Errorf("proto: NetworkAttachmentSpec: wiretype end group for non-group")
        }
        if fieldNum <= 0 {
            return fmt.Errorf("proto: NetworkAttachmentSpec: illegal tag %d (wire type %d)", fieldNum, wire)
        }
        switch fieldNum {
        case 1:
            if wireType != 2 {
                return fmt.Errorf("proto: wrong wireType = %d for field ContainerID", wireType)
            }
            var stringLen uint64
            for shift := uint(0); ; shift += 7 {
                if shift >= 64 {
                    return ErrIntOverflowSpecs
                }
                if iNdEx >= l {
                    return io.ErrUnexpectedEOF
                }
                b := dAtA[iNdEx]
                iNdEx++
                stringLen |= uint64(b&0x7F) << shift
                if b < 0x80 {
                    break
                }
            }
            intStringLen := int(stringLen)
            if intStringLen < 0 {
                return ErrInvalidLengthSpecs
            }
            postIndex := iNdEx + intStringLen
            if postIndex < 0 {
                return ErrInvalidLengthSpecs
            }
            if postIndex > l {
                return io.ErrUnexpectedEOF
            }
            m.ContainerID = string(dAtA[iNdEx:postIndex])
            iNdEx = postIndex
        default:
            iNdEx = preIndex
            skippy, err := skipSpecs(dAtA[iNdEx:])
            if err != nil {
                return err
            }
            if (skippy < 0) || (iNdEx+skippy) < 0 {
                return ErrInvalidLengthSpecs
            }
            if (iNdEx + skippy) > l {
                return io.ErrUnexpectedEOF
            }
            iNdEx += skippy
        }
    }

    if iNdEx > l {
        return io.ErrUnexpectedEOF
    }
    return nil
}
func (m *ContainerSpec) Unmarshal(dAtA []byte) error {
    l := len(dAtA)
    iNdEx := 0
    for iNdEx < l {
        preIndex := iNdEx
        var wire uint64
        for shift := uint(0); ; shift += 7 {
            if shift >= 64 {
                return ErrIntOverflowSpecs
            }
            if iNdEx >= l {
                return io.ErrUnexpectedEOF
            }
            b := dAtA[iNdEx]
            iNdEx++
            wire |= uint64(b&0x7F) << shift
            if b < 0x80 {
                break
            }
        }
        fieldNum := int32(wire >> 3)
        wireType := int(wire & 0x7)
        if wireType == 4 {
            return fmt.Errorf("proto: ContainerSpec: wiretype end group for non-group")
        }
        if fieldNum <= 0 {
            return fmt.Errorf("proto: ContainerSpec: illegal tag %d (wire type %d)", fieldNum, wire)
        }
        switch fieldNum {
        case 1:
            if wireType != 2 {
                return fmt.Errorf("proto: wrong wireType = %d for field Image", wireType)
            }
            var stringLen uint64
            for shift := uint(0); ; shift += 7 {
                if shift >= 64 {
                    return ErrIntOverflowSpecs
                }
                if iNdEx >= l {
                    return io.ErrUnexpectedEOF
                }
                b := dAtA[iNdEx]
                iNdEx++
                stringLen |= uint64(b&0x7F) << shift
                if b < 0x80 {
                    break
                }
            }
            intStringLen := int(stringLen)
            if intStringLen < 0 {
                return ErrInvalidLengthSpecs
            }
            postIndex := iNdEx + intStringLen
            if postIndex < 0 {
                return ErrInvalidLengthSpecs
            }
            if postIndex > l {
                return io.ErrUnexpectedEOF
            }
            m.Image = string(dAtA[iNdEx:postIndex])
            iNdEx = postIndex
        case 2:
            if wireType != 2 {
                return fmt.Errorf("proto: wrong wireType = %d for field Labels", wireType)
            }
            var msglen int
            for shift := uint(0); ; shift += 7 {
                if shift >= 64 {
                    return ErrIntOverflowSpecs
                }
                if iNdEx >= l {
                    return io.ErrUnexpectedEOF
                }
                b := dAtA[iNdEx]
                iNdEx++
                msglen |= int(b&0x7F) << shift
                if b < 0x80 {
                    break
                }
            }
            if msglen < 0 {
                return ErrInvalidLengthSpecs
            }
            postIndex := iNdEx + msglen
            if postIndex < 0 {
                return ErrInvalidLengthSpecs
            }
            if postIndex > l {
                return io.ErrUnexpectedEOF
            }
            if m.Labels == nil {
                m.Labels = make(map[string]string)
            }
            var mapkey string
            var mapvalue string
            for iNdEx < postIndex {
                entryPreIndex := iNdEx
                var wire uint64
                for shift := uint(0); ; shift += 7 {
                    if shift >= 64 {
                        return ErrIntOverflowSpecs
                    }
                    if iNdEx >= l {
                        return io.ErrUnexpectedEOF
                    }
                    b := dAtA[iNdEx]
                    iNdEx++
                    wire |= uint64(b&0x7F) << shift
                    if b < 0x80 {
                        break
                    }
                }
                fieldNum := int32(wire >> 3)
                if fieldNum == 1 {
                    var stringLenmapkey uint64
                    for shift := uint(0); ; shift += 7 {
                        if shift >= 64 {
                            return ErrIntOverflowSpecs
                        }
                        if iNdEx >= l {
                            return io.ErrUnexpectedEOF
                        }
                        b := dAtA[iNdEx]
                        iNdEx++
                        stringLenmapkey |= uint64(b&0x7F) << shift
                        if b < 0x80 {
                            break
                        }
                    }
                    intStringLenmapkey := int(stringLenmapkey)
                    if intStringLenmapkey < 0 {
                        return ErrInvalidLengthSpecs
                    }
                    postStringIndexmapkey := iNdEx + intStringLenmapkey
                    if postStringIndexmapkey < 0 {
                        return ErrInvalidLengthSpecs
                    }
                    if postStringIndexmapkey > l {
                        return io.ErrUnexpectedEOF
                    }
                    mapkey = string(dAtA[iNdEx:postStringIndexmapkey])
                    iNdEx = postStringIndexmapkey
                } else if fieldNum == 2 {
                    var stringLenmapvalue uint64
                    for shift := uint(0); ; shift += 7 {
                        if shift >= 64 {
                            return ErrIntOverflowSpecs
                        }
                        if iNdEx >= l {
                            return io.ErrUnexpectedEOF
                        }
                        b := dAtA[iNdEx]
                        iNdEx++
                        stringLenmapvalue |= uint64(b&0x7F) << shift
                        if b < 0x80 {
                            break
                        }
                    }
                    intStringLenmapvalue := int(stringLenmapvalue)
                    if intStringLenmapvalue < 0 {
                        return ErrInvalidLengthSpecs
                    }
                    postStringIndexmapvalue := iNdEx + intStringLenmapvalue
                    if postStringIndexmapvalue < 0 {
                        return ErrInvalidLengthSpecs
                    }
                    if postStringIndexmapvalue > l {
                        return io.ErrUnexpectedEOF
                    }
                    mapvalue = string(dAtA[iNdEx:postStringIndexmapvalue])
                    iNdEx = postStringIndexmapvalue
                } else {
                    iNdEx = entryPreIndex
                    skippy, err := skipSpecs(dAtA[iNdEx:])
                    if err != nil {
                        return err
                    }
                    if (skippy < 0) || (iNdEx+skippy) < 0 {
                        return ErrInvalidLengthSpecs
                    }
                    if (iNdEx + skippy) > postIndex {
                        return io.ErrUnexpectedEOF
                    }
                    iNdEx += skippy
                }
            }
            m.Labels[mapkey] = mapvalue
            iNdEx = postIndex
        case 3:
            if wireType != 2 {
                return fmt.Errorf("proto: wrong wireType = %d for field Command", wireType)
            }
            var stringLen uint64
            for shift := uint(0); ; shift += 7 {
                if shift >= 64 {
                    return ErrIntOverflowSpecs
                }
                if iNdEx >= l {
                    return io.ErrUnexpectedEOF
                }
                b := dAtA[iNdEx]
                iNdEx++
                stringLen |= uint64(b&0x7F) << shift
                if b < 0x80 {
                    break
                }
            }
            intStringLen := int(stringLen)
            if intStringLen < 0 {
                return ErrInvalidLengthSpecs
            }
            postIndex := iNdEx + intStringLen
            if postIndex < 0 {
                return ErrInvalidLengthSpecs
            }
            if postIndex > l {
                return io.ErrUnexpectedEOF
            }
            m.Command = append(m.Command, string(dAtA[iNdEx:postIndex]))
            iNdEx = postIndex
        case 4:
            if wireType != 2 {
                return fmt.Errorf("proto: wrong wireType = %d for field Args", wireType)
            }
            var stringLen uint64
            for shift := uint(0); ; shift += 7 {
                if shift >= 64 {
                    return ErrIntOverflowSpecs
                }
                if iNdEx >= l {
                    return io.ErrUnexpectedEOF
                }
                b := dAtA[iNdEx]
                iNdEx++
                stringLen |= uint64(b&0x7F) << shift
                if b < 0x80 {
                    break
                }
            }
            intStringLen := int(stringLen)
            if intStringLen < 0 {
                return ErrInvalidLengthSpecs
            }
            postIndex := iNdEx + intStringLen
            if postIndex < 0 {
                return ErrInvalidLengthSpecs
            }
            if postIndex > l {
                return io.ErrUnexpectedEOF
            }
            m.Args = append(m.Args, string(dAtA[iNdEx:postIndex]))
            iNdEx = postIndex
        case 5:
            if wireType != 2 {
                return fmt.Errorf("proto: wrong wireType = %d for field Env", wireType)
            }
            var stringLen uint64
            for shift := uint(0); ; shift += 7 {
                if shift >= 64 {
                    return ErrIntOverflowSpecs
                }
                if iNdEx >= l {
                    return io.ErrUnexpectedEOF
                }
                b := dAtA[iNdEx]
                iNdEx++
                stringLen |= uint64(b&0x7F) << shift
                if b < 0x80 {
                    break
                }
            }
            intStringLen := int(stringLen)
            if intStringLen < 0 {
                return ErrInvalidLengthSpecs
            }
            postIndex := iNdEx + intStringLen
            if postIndex < 0 {
                return ErrInvalidLengthSpecs
            }
            if postIndex > l {
                return io.ErrUnexpectedEOF
            }
            m.Env = append(m.Env, string(dAtA[iNdEx:postIndex]))
            iNdEx = postIndex
        case 6:
            if wireType != 2 {
                return fmt.Errorf("proto: wrong wireType = %d for field Dir", wireType)
            }
            var stringLen uint64
            for shift := uint(0); ; shift += 7 {
                if shift >= 64 {
                    return ErrIntOverflowSpecs
                }
                if iNdEx >= l {
                    return io.ErrUnexpectedEOF
                }
                b := dAtA[iNdEx]
                iNdEx++
                stringLen |= uint64(b&0x7F) << shift
                if b < 0x80 {
                    break
                }
            }
            intStringLen := int(stringLen)
            if intStringLen < 0 {
                return ErrInvalidLengthSpecs
            }
            postIndex := iNdEx + intStringLen
            if postIndex < 0 {
                return ErrInvalidLengthSpecs
            }
            if postIndex > l {
                return io.ErrUnexpectedEOF
            }
            m.Dir = string(dAtA[iNdEx:postIndex])
            iNdEx = postIndex
        case 7:
            if wireType != 2 {
                return fmt.Errorf("proto: wrong wireType = %d for field User", wireType)
            }
            var stringLen uint64
            for shift := uint(0); ; shift += 7 {
                if shift >= 64 {
                    return ErrIntOverflowSpecs
                }
                if iNdEx >= l {
                    return io.ErrUnexpectedEOF
                }
                b := dAtA[iNdEx]
                iNdEx++
                stringLen |= uint64(b&0x7F) << shift
                if b < 0x80 {
                    break
                }
            }
            intStringLen := int(stringLen)
            if intStringLen < 0 {
                return ErrInvalidLengthSpecs
            }
            postIndex := iNdEx + intStringLen
            if postIndex < 0 {
                return ErrInvalidLengthSpecs
            }
            if postIndex > l {
                return io.ErrUnexpectedEOF
            }
            m.User = string(dAtA[iNdEx:postIndex])
            iNdEx = postIndex
        case 8:
            if wireType != 2 {
                return fmt.Errorf("proto: wrong wireType = %d for field Mounts", wireType)
            }
            var msglen int
            for shift := uint(0); ; shift += 7 {
                if shift >= 64 {
                    return ErrIntOverflowSpecs
                }
                if iNdEx >= l {
                    return io.ErrUnexpectedEOF
                }
                b := dAtA[iNdEx]
                iNdEx++
                msglen |= int(b&0x7F) << shift
                if b < 0x80 {
                    break
                }
            }
            if msglen < 0 {
                return ErrInvalidLengthSpecs
            }
            postIndex := iNdEx + msglen
            if postIndex < 0 {
                return ErrInvalidLengthSpecs
            }
            if postIndex > l {
                return io.ErrUnexpectedEOF
            }
            m.Mounts = append(m.Mounts, Mount{})
            if err := m.Mounts[len(m.Mounts)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
                return err
            }
            iNdEx = postIndex
        case 9:
            if wireType != 2 {
                return fmt.Errorf("proto: wrong wireType = %d for field StopGracePeriod", wireType)
            }
            var msglen int
            for shift := uint(0); ; shift += 7 {
                if shift >= 64 {
                    return ErrIntOverflowSpecs
                }
                if iNdEx >= l {
                    return io.ErrUnexpectedEOF
                }
                b := dAtA[iNdEx]
                iNdEx++
                msglen |= int(b&0x7F) << shift
                if b < 0x80 {
                    break
                }
            }
            if msglen < 0 {
                return ErrInvalidLengthSpecs
            }
            postIndex := iNdEx + msglen
            if postIndex < 0 {
                return ErrInvalidLengthSpecs
            }
            if postIndex > l {
                return io.ErrUnexpectedEOF
            }
            if m.StopGracePeriod == nil {
                m.StopGracePeriod = &types.Duration{}
            }
            if err := m.StopGracePeriod.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
                return err
            }
            iNdEx = postIndex
        case 10:
            if wireType != 2 {
                return fmt.Errorf("proto: wrong wireType = %d for field PullOptions", wireType)
            }
            var msglen int
            for shift := uint(0); ; shift += 7 {
                if shift >= 64 {
                    return ErrIntOverflowSpecs
                }
                if iNdEx >= l {
                    return io.ErrUnexpectedEOF
                }
                b := dAtA[iNdEx]
                iNdEx++
                msglen |= int(b&0x7F) << shift
                if b < 0x80 {
                    break
                }
            }
            if msglen < 0 {
                return ErrInvalidLengthSpecs
            }
            postIndex := iNdEx + msglen
            if postIndex < 0 {
                return ErrInvalidLengthSpecs
            }
            if postIndex > l {
                return io.ErrUnexpectedEOF
            }
            if m.PullOptions == nil {
                m.PullOptions = &ContainerSpec_PullOptions{}
            }
            if err := m.PullOptions.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
                return err
            }
            iNdEx = postIndex
        case 11:
            if wireType != 2 {
                return fmt.Errorf("proto: wrong wireType = %d for field Groups", wireType)
            }
            var stringLen uint64
            for shift := uint(0); ; shift += 7 {
                if shift >= 64 {
                    return ErrIntOverflowSpecs
                }
                if iNdEx >= l {
                    return io.ErrUnexpectedEOF
                }
                b := dAtA[iNdEx]
                iNdEx++
                stringLen |= uint64(b&0x7F) << shift
                if b < 0x80 {
                    break
                }
            }
            intStringLen := int(stringLen)
            if intStringLen < 0 {
                return ErrInvalidLengthSpecs
            }
            postIndex := iNdEx + intStringLen
            if postIndex < 0 {
                return ErrInvalidLengthSpecs
            }
            if postIndex > l {
                return io.ErrUnexpectedEOF
            }
            m.Groups = append(m.Groups, string(dAtA[iNdEx:postIndex]))
            iNdEx = postIndex
        case 12:
            if wireType != 2 {
                return fmt.Errorf("proto: wrong wireType = %d for field Secrets", wireType)
            }
            var msglen int
            for shift := uint(0); ; shift += 7 {
                if shift >= 64 {
                    return ErrIntOverflowSpecs
                }
                if iNdEx >= l {
                    return io.ErrUnexpectedEOF
                }
                b := dAtA[iNdEx]
                iNdEx++
                msglen |= int(b&0x7F) << shift
                if b < 0x80 {
                    break
                }
            }
            if msglen < 0 {
                return ErrInvalidLengthSpecs
            }
            postIndex := iNdEx + msglen
            if postIndex < 0 {
                return ErrInvalidLengthSpecs
            }
            if postIndex > l {
                return io.ErrUnexpectedEOF
            }
            m.Secrets = append(m.Secrets, &SecretReference{})
            if err := m.Secrets[len(m.Secrets)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
                return err
            }
            iNdEx = postIndex
        case 13:
            if wireType != 0 {
                return fmt.Errorf("proto: wrong wireType = %d for field TTY", wireType)
            }
            var v int
            for shift := uint(0); ; shift += 7 {
                if shift >= 64 {
                    return ErrIntOverflowSpecs
                }
                if iNdEx >= l {
                    return io.ErrUnexpectedEOF
                }
                b := dAtA[iNdEx]
                iNdEx++
                v |= int(b&0x7F) << shift
                if b < 0x80 {
                    break
                }
            }
            m.TTY = bool(v != 0)
        case 14:
            if wireType != 2 {
                return fmt.Errorf("proto: wrong wireType = %d for field Hostname", wireType)
            }
            var stringLen uint64
            for shift := uint(0); ; shift += 7 {
                if shift >= 64 {
                    return ErrIntOverflowSpecs
                }
                if iNdEx >= l {
                    return io.ErrUnexpectedEOF
                }
                b := dAtA[iNdEx]
                iNdEx++
                stringLen |= uint64(b&0x7F) << shift
                if b < 0x80 {
                    break
                }
            }
            intStringLen := int(stringLen)
            if intStringLen < 0 {
                return ErrInvalidLengthSpecs
            }
            postIndex := iNdEx + intStringLen
            if postIndex < 0 {
                return ErrInvalidLengthSpecs
            }
            if postIndex > l {
                return io.ErrUnexpectedEOF
            }
            m.Hostname = string(dAtA[iNdEx:postIndex])
            iNdEx = postIndex
        case 15:
            if wireType != 2 {
                return fmt.Errorf("proto: wrong wireType = %d for field DNSConfig", wireType)
            }
            var msglen int
            for shift := uint(0); ; shift += 7 {
                if shift >= 64 {
                    return ErrIntOverflowSpecs
                }
                if iNdEx >= l {
                    return io.ErrUnexpectedEOF
                }
                b := dAtA[iNdEx]
                iNdEx++
                msglen |= int(b&0x7F) << shift
                if b < 0x80 {
                    break
                }
            }
            if msglen < 0 {
                return ErrInvalidLengthSpecs
            }
            postIndex := iNdEx + msglen
            if postIndex < 0 {
                return ErrInvalidLengthSpecs
            }
            if postIndex > l {
                return io.ErrUnexpectedEOF
            }
            if m.DNSConfig == nil {
                m.DNSConfig = &ContainerSpec_DNSConfig{}
            }
            if err := m.DNSConfig.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
                return err
            }
            iNdEx = postIndex
        case 16:
            if wireType != 2 {
                return fmt.Errorf("proto: wrong wireType = %d for field Healthcheck", wireType)
            }
            var msglen int
            for shift := uint(0); ; shift += 7 {
                if shift >= 64 {
                    return ErrIntOverflowSpecs
                }
                if iNdEx >= l {
                    return io.ErrUnexpectedEOF
                }
                b := dAtA[iNdEx]
                iNdEx++
                msglen |= int(b&0x7F) << shift
                if b < 0x80 {
                    break
                }
            }
            if msglen < 0 {
                return ErrInvalidLengthSpecs
            }
            postIndex := iNdEx + msglen
            if postIndex < 0 {
                return ErrInvalidLengthSpecs
            }
            if postIndex > l {
                return io.ErrUnexpectedEOF
            }
            if m.Healthcheck == nil {
                m.Healthcheck = &HealthConfig{}
            }
            if err := m.Healthcheck.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
                return err
            }
            iNdEx = postIndex
        case 17:
            if wireType != 2 {
                return fmt.Errorf("proto: wrong wireType = %d for field Hosts", wireType)
            }
            var stringLen uint64
            for shift := uint(0); ; shift += 7 {
                if shift >= 64 {
                    return ErrIntOverflowSpecs
                }
                if iNdEx >= l {
                    return io.ErrUnexpectedEOF
                }
                b := dAtA[iNdEx]
                iNdEx++
                stringLen |= uint64(b&0x7F) << shift
                if b < 0x80 {
                    break
                }
            }
            intStringLen := int(stringLen)
            if intStringLen < 0 {
                return ErrInvalidLengthSpecs
            }
            postIndex := iNdEx + intStringLen
            if postIndex < 0 {
                return ErrInvalidLengthSpecs
            }
            if postIndex > l {
                return io.ErrUnexpectedEOF
            }
            m.Hosts = append(m.Hosts, string(dAtA[iNdEx:postIndex]))
            iNdEx = postIndex
        case 18:
            if wireType != 0 {
                return fmt.Errorf("proto: wrong wireType = %d for field OpenStdin", wireType)
            }
            var v int
            for shift := uint(0); ; shift += 7 {
                if shift >= 64 {
                    return ErrIntOverflowSpecs
                }
                if iNdEx >= l {
                    return io.ErrUnexpectedEOF
                }
                b := dAtA[iNdEx]
                iNdEx++
                v |= int(b&0x7F) << shift
                if b < 0x80 {
                    break
                }
            }
            m.OpenStdin = bool(v != 0)
        case 19:
            if wireType != 0 {
                return fmt.Errorf("proto: wrong wireType = %d for field ReadOnly", wireType)
            }
            var v int
            for shift := uint(0); ; shift += 7 {
                if shift >= 64 {
                    return ErrIntOverflowSpecs
                }
                if iNdEx >= l {
                    return io.ErrUnexpectedEOF
                }
                b := dAtA[iNdEx]
                iNdEx++
                v |= int(b&0x7F) << shift
                if b < 0x80 {
                    break
                }
            }
            m.ReadOnly = bool(v != 0)
        case 20:
            if wireType != 2 {
                return fmt.Errorf("proto: wrong wireType = %d for field StopSignal", wireType)
            }
            var stringLen uint64
            for shift := uint(0); ; shift += 7 {
                if shift >= 64 {
                    return ErrIntOverflowSpecs
                }
                if iNdEx >= l {
                    return io.ErrUnexpectedEOF
                }
                b := dAtA[iNdEx]
                iNdEx++
                stringLen |= uint64(b&0x7F) << shift
                if b < 0x80 {
                    break
                }
            }
            intStringLen := int(stringLen)
            if intStringLen < 0 {
                return ErrInvalidLengthSpecs
            }
            postIndex := iNdEx + intStringLen
            if postIndex < 0 {
                return ErrInvalidLengthSpecs
            }
            if postIndex > l {
                return io.ErrUnexpectedEOF
            }
            m.StopSignal = string(dAtA[iNdEx:postIndex])
            iNdEx = postIndex
        case 21:
            if wireType != 2 {
                return fmt.Errorf("proto: wrong wireType = %d for field Configs", wireType)
            }
            var msglen int
            for shift := uint(0); ; shift += 7 {
                if shift >= 64 {
                    return ErrIntOverflowSpecs
                }
                if iNdEx >= l {
                    return io.ErrUnexpectedEOF
                }
                b := dAtA[iNdEx]
                iNdEx++
                msglen |= int(b&0x7F) << shift
                if b < 0x80 {
                    break
                }
            }
            if msglen < 0 {
                return ErrInvalidLengthSpecs
            }
            postIndex := iNdEx + msglen
            if postIndex < 0 {
                return ErrInvalidLengthSpecs
            }
            if postIndex > l {
                return io.ErrUnexpectedEOF
            }
            m.Configs = append(m.Configs, &ConfigReference{})
            if err := m.Configs[len(m.Configs)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
                return err
            }
            iNdEx = postIndex
        case 22:
            if wireType != 2 {
                return fmt.Errorf("proto: wrong wireType = %d for field Privileges", wireType)
            }
            var msglen int
            for shift := uint(0); ; shift += 7 {
                if shift >= 64 {
                    return ErrIntOverflowSpecs
                }
                if iNdEx >= l {
                    return io.ErrUnexpectedEOF
                }
                b := dAtA[iNdEx]
                iNdEx++
                msglen |= int(b&0x7F) << shift
                if b < 0x80 {
                    break
                }
            }
            if msglen < 0 {
                return ErrInvalidLengthSpecs
            }
            postIndex := iNdEx + msglen
            if postIndex < 0 {
                return ErrInvalidLengthSpecs
            }
            if postIndex > l {
                return io.ErrUnexpectedEOF
            }
            if m.Privileges == nil {
                m.Privileges = &Privileges{}
            }
            if err := m.Privileges.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
                return err
            }
            iNdEx = postIndex
        case 23:
            if wireType != 2 {
                return fmt.Errorf("proto: wrong wireType = %d for field Init", wireType)
            }
            var msglen int
            for shift := uint(0); ; shift += 7 {
                if shift >= 64 {
                    return ErrIntOverflowSpecs
                }
                if iNdEx >= l {
                    return io.ErrUnexpectedEOF
                }
                b := dAtA[iNdEx]
                iNdEx++
                msglen |= int(b&0x7F) << shift
                if b < 0x80 {
                    break
                }
            }
            if msglen < 0 {
                return ErrInvalidLengthSpecs
            }
            postIndex := iNdEx + msglen
            if postIndex < 0 {
                return ErrInvalidLengthSpecs
            }
            if postIndex > l {
                return io.ErrUnexpectedEOF
            }
            if m.Init == nil {
                m.Init = &types.BoolValue{}
            }
            if err := m.Init.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
                return err
            }
            iNdEx = postIndex
        case 24:
            if wireType != 0 {
                return fmt.Errorf("proto: wrong wireType = %d for field Isolation", wireType)
            }
            m.Isolation = 0
            for shift := uint(0); ; shift += 7 {
                if shift >= 64 {
                    return ErrIntOverflowSpecs
                }
                if iNdEx >= l {
                    return io.ErrUnexpectedEOF
                }
                b := dAtA[iNdEx]
                iNdEx++
                m.Isolation |= ContainerSpec_Isolation(b&0x7F) << shift
                if b < 0x80 {
                    break
                }
            }
        case 25:
            if wireType != 0 {
                return fmt.Errorf("proto: wrong wireType = %d for field PidsLimit", wireType)
            }
            m.PidsLimit = 0
            for shift := uint(0); ; shift += 7 {
                if shift >= 64 {
                    return ErrIntOverflowSpecs
                }
                if iNdEx >= l {
                    return io.ErrUnexpectedEOF
                }
                b := dAtA[iNdEx]
                iNdEx++
                m.PidsLimit |= int64(b&0x7F) << shift
                if b < 0x80 {
                    break
                }
            }
        case 26:
            if wireType != 2 {
                return fmt.Errorf("proto: wrong wireType = %d for field Sysctls", wireType)
            }
            var msglen int
            for shift := uint(0); ; shift += 7 {
                if shift >= 64 {
                    return ErrIntOverflowSpecs
                }
                if iNdEx >= l {
                    return io.ErrUnexpectedEOF
                }
                b := dAtA[iNdEx]
                iNdEx++
                msglen |= int(b&0x7F) << shift
                if b < 0x80 {
                    break
                }
            }
            if msglen < 0 {
                return ErrInvalidLengthSpecs
            }
            postIndex := iNdEx + msglen
            if postIndex < 0 {
                return ErrInvalidLengthSpecs
            }
            if postIndex > l {
                return io.ErrUnexpectedEOF
            }
            if m.Sysctls == nil {
                m.Sysctls = make(map[string]string)
            }
            var mapkey string
            var mapvalue string
            for iNdEx < postIndex {
                entryPreIndex := iNdEx
                var wire uint64
                for shift := uint(0); ; shift += 7 {
                    if shift >= 64 {
                        return ErrIntOverflowSpecs
                    }
                    if iNdEx >= l {
                        return io.ErrUnexpectedEOF
                    }
                    b := dAtA[iNdEx]
                    iNdEx++
                    wire |= uint64(b&0x7F) << shift
                    if b < 0x80 {
                        break
                    }
                }
                fieldNum := int32(wire >> 3)
                if fieldNum == 1 {
                    var stringLenmapkey uint64
                    for shift := uint(0); ; shift += 7 {
                        if shift >= 64 {
                            return ErrIntOverflowSpecs
                        }
                        if iNdEx >= l {
                            return io.ErrUnexpectedEOF
                        }
                        b := dAtA[iNdEx]
                        iNdEx++
                        stringLenmapkey |= uint64(b&0x7F) << shift
                        if b < 0x80 {
                            break
                        }
                    }
                    intStringLenmapkey := int(stringLenmapkey)
                    if intStringLenmapkey < 0 {
                        return ErrInvalidLengthSpecs
                    }
                    postStringIndexmapkey := iNdEx + intStringLenmapkey
                    if postStringIndexmapkey < 0 {
                        return ErrInvalidLengthSpecs
                    }
                    if postStringIndexmapkey > l {
                        return io.ErrUnexpectedEOF
                    }
                    mapkey = string(dAtA[iNdEx:postStringIndexmapkey])
                    iNdEx = postStringIndexmapkey
                } else if fieldNum == 2 {
                    var stringLenmapvalue uint64
                    for shift := uint(0); ; shift += 7 {
                        if shift >= 64 {
                            return ErrIntOverflowSpecs
                        }
                        if iNdEx >= l {
                            return io.ErrUnexpectedEOF
                        }
                        b := dAtA[iNdEx]
                        iNdEx++
                        stringLenmapvalue |= uint64(b&0x7F) << shift
                        if b < 0x80 {
                            break
                        }
                    }
                    intStringLenmapvalue := int(stringLenmapvalue)
                    if intStringLenmapvalue < 0 {
                        return ErrInvalidLengthSpecs
                    }
                    postStringIndexmapvalue := iNdEx + intStringLenmapvalue
                    if postStringIndexmapvalue < 0 {
                        return ErrInvalidLengthSpecs
                    }
                    if postStringIndexmapvalue > l {
                        return io.ErrUnexpectedEOF
                    }
                    mapvalue = string(dAtA[iNdEx:postStringIndexmapvalue])
                    iNdEx = postStringIndexmapvalue
                } else {
                    iNdEx = entryPreIndex
                    skippy, err := skipSpecs(dAtA[iNdEx:])
                    if err != nil {
                        return err
                    }
                    if (skippy < 0) || (iNdEx+skippy) < 0 {
                        return ErrInvalidLengthSpecs
                    }
                    if (iNdEx + skippy) > postIndex {
                        return io.ErrUnexpectedEOF
                    }
                    iNdEx += skippy
                }
            }
            m.Sysctls[mapkey] = mapvalue
            iNdEx = postIndex
        case 27:
            if wireType != 2 {
                return fmt.Errorf("proto: wrong wireType = %d for field CapabilityAdd", wireType)
            }
            var stringLen uint64
            for shift := uint(0); ; shift += 7 {
                if shift >= 64 {
                    return ErrIntOverflowSpecs
                }
                if iNdEx >= l {
                    return io.ErrUnexpectedEOF
                }
                b := dAtA[iNdEx]
                iNdEx++
                stringLen |= uint64(b&0x7F) << shift
                if b < 0x80 {
                    break
                }
            }
            intStringLen := int(stringLen)
            if intStringLen < 0 {
                return ErrInvalidLengthSpecs
            }
            postIndex := iNdEx + intStringLen
            if postIndex < 0 {
                return ErrInvalidLengthSpecs
            }
            if postIndex > l {
                return io.ErrUnexpectedEOF
            }
            m.CapabilityAdd = append(m.CapabilityAdd, string(dAtA[iNdEx:postIndex]))
            iNdEx = postIndex
        case 28:
            if wireType != 2 {
                return fmt.Errorf("proto: wrong wireType = %d for field CapabilityDrop", wireType)
            }
            var stringLen uint64
            for shift := uint(0); ; shift += 7 {
                if shift >= 64 {
                    return ErrIntOverflowSpecs
                }
                if iNdEx >= l {
                    return io.ErrUnexpectedEOF
                }
                b := dAtA[iNdEx]
                iNdEx++
                stringLen |= uint64(b&0x7F) << shift
                if b < 0x80 {
                    break
                }
            }
            intStringLen := int(stringLen)
            if intStringLen < 0 {
                return ErrInvalidLengthSpecs
            }
            postIndex := iNdEx + intStringLen
            if postIndex < 0 {
                return ErrInvalidLengthSpecs
            }
            if postIndex > l {
                return io.ErrUnexpectedEOF
            }
            m.CapabilityDrop = append(m.CapabilityDrop, string(dAtA[iNdEx:postIndex]))
            iNdEx = postIndex
        case 29:
            if wireType != 2 {
                return fmt.Errorf("proto: wrong wireType = %d for field Ulimits", wireType)
            }
            var msglen int
            for shift := uint(0); ; shift += 7 {
                if shift >= 64 {
                    return ErrIntOverflowSpecs
                }
                if iNdEx >= l {
                    return io.ErrUnexpectedEOF
                }
                b := dAtA[iNdEx]
                iNdEx++
                msglen |= int(b&0x7F) << shift
                if b < 0x80 {
                    break
                }
            }
            if msglen < 0 {
                return ErrInvalidLengthSpecs
            }
            postIndex := iNdEx + msglen
            if postIndex < 0 {
                return ErrInvalidLengthSpecs
            }
            if postIndex > l {
                return io.ErrUnexpectedEOF
            }
            m.Ulimits = append(m.Ulimits, &ContainerSpec_Ulimit{})
            if err := m.Ulimits[len(m.Ulimits)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
                return err
            }
            iNdEx = postIndex
        default:
            iNdEx = preIndex
            skippy, err := skipSpecs(dAtA[iNdEx:])
            if err != nil {
                return err
            }
            if (skippy < 0) || (iNdEx+skippy) < 0 {
                return ErrInvalidLengthSpecs
            }
            if (iNdEx + skippy) > l {
                return io.ErrUnexpectedEOF
            }
            iNdEx += skippy
        }
    }

    if iNdEx > l {
        return io.ErrUnexpectedEOF
    }
    return nil
}
func (m *ContainerSpec_PullOptions) Unmarshal(dAtA []byte) error {
    l := len(dAtA)
    iNdEx := 0
    for iNdEx < l {
        preIndex := iNdEx
        var wire uint64
        for shift := uint(0); ; shift += 7 {
            if shift >= 64 {
                return ErrIntOverflowSpecs
            }
            if iNdEx >= l {
                return io.ErrUnexpectedEOF
            }
            b := dAtA[iNdEx]
            iNdEx++
            wire |= uint64(b&0x7F) << shift
            if b < 0x80 {
                break
            }
        }
        fieldNum := int32(wire >> 3)
        wireType := int(wire & 0x7)
        if wireType == 4 {
            return fmt.Errorf("proto: PullOptions: wiretype end group for non-group")
        }
        if fieldNum <= 0 {
            return fmt.Errorf("proto: PullOptions: illegal tag %d (wire type %d)", fieldNum, wire)
        }
        switch fieldNum {
        case 64:
            if wireType != 2 {
                return fmt.Errorf("proto: wrong wireType = %d for field RegistryAuth", wireType)
            }
            var stringLen uint64
            for shift := uint(0); ; shift += 7 {
                if shift >= 64 {
                    return ErrIntOverflowSpecs
                }
                if iNdEx >= l {
                    return io.ErrUnexpectedEOF
                }
                b := dAtA[iNdEx]
                iNdEx++
                stringLen |= uint64(b&0x7F) << shift
                if b < 0x80 {
                    break
                }
            }
            intStringLen := int(stringLen)
            if intStringLen < 0 {
                return ErrInvalidLengthSpecs
            }
            postIndex := iNdEx + intStringLen
            if postIndex < 0 {
                return ErrInvalidLengthSpecs
            }
            if postIndex > l {
                return io.ErrUnexpectedEOF
            }
            m.RegistryAuth = string(dAtA[iNdEx:postIndex])
            iNdEx = postIndex
        default:
            iNdEx = preIndex
            skippy, err := skipSpecs(dAtA[iNdEx:])
            if err != nil {
                return err
            }
            if (skippy < 0) || (iNdEx+skippy) < 0 {
                return ErrInvalidLengthSpecs
            }
            if (iNdEx + skippy) > l {
                return io.ErrUnexpectedEOF
            }
            iNdEx += skippy
        }
    }

    if iNdEx > l {
        return io.ErrUnexpectedEOF
    }
    return nil
}
func (m *ContainerSpec_DNSConfig) Unmarshal(dAtA []byte) error {
    l := len(dAtA)
    iNdEx := 0
    for iNdEx < l {
        preIndex := iNdEx
        var wire uint64
        for shift := uint(0); ; shift += 7 {
            if shift >= 64 {
                return ErrIntOverflowSpecs
            }
            if iNdEx >= l {
                return io.ErrUnexpectedEOF
            }
            b := dAtA[iNdEx]
            iNdEx++
            wire |= uint64(b&0x7F) << shift
            if b < 0x80 {
                break
            }
        }
        fieldNum := int32(wire >> 3)
        wireType := int(wire & 0x7)
        if wireType == 4 {
            return fmt.Errorf("proto: DNSConfig: wiretype end group for non-group")
        }
        if fieldNum <= 0 {
            return fmt.Errorf("proto: DNSConfig: illegal tag %d (wire type %d)", fieldNum, wire)
        }
        switch fieldNum {
        case 1:
            if wireType != 2 {
                return fmt.Errorf("proto: wrong wireType = %d for field Nameservers", wireType)
            }
            var stringLen uint64
            for shift := uint(0); ; shift += 7 {
                if shift >= 64 {
                    return ErrIntOverflowSpecs
                }
                if iNdEx >= l {
                    return io.ErrUnexpectedEOF
                }
                b := dAtA[iNdEx]
                iNdEx++
                stringLen |= uint64(b&0x7F) << shift
                if b < 0x80 {
                    break
                }
            }
            intStringLen := int(stringLen)
            if intStringLen < 0 {
                return ErrInvalidLengthSpecs
            }
            postIndex := iNdEx + intStringLen
            if postIndex < 0 {
                return ErrInvalidLengthSpecs
            }
            if postIndex > l {
                return io.ErrUnexpectedEOF
            }
            m.Nameservers = append(m.Nameservers, string(dAtA[iNdEx:postIndex]))
            iNdEx = postIndex
        case 2:
            if wireType != 2 {
                return fmt.Errorf("proto: wrong wireType = %d for field Search", wireType)
            }
            var stringLen uint64
            for shift := uint(0); ; shift += 7 {
                if shift >= 64 {
                    return ErrIntOverflowSpecs
                }
                if iNdEx >= l {
                    return io.ErrUnexpectedEOF
                }
                b := dAtA[iNdEx]
                iNdEx++
                stringLen |= uint64(b&0x7F) << shift
                if b < 0x80 {
                    break
                }
            }
            intStringLen := int(stringLen)
            if intStringLen < 0 {
                return ErrInvalidLengthSpecs
            }
            postIndex := iNdEx + intStringLen
            if postIndex < 0 {
                return ErrInvalidLengthSpecs
            }
            if postIndex > l {
                return io.ErrUnexpectedEOF
            }
            m.Search = append(m.Search, string(dAtA[iNdEx:postIndex]))
            iNdEx = postIndex
        case 3:
            if wireType != 2 {
                return fmt.Errorf("proto: wrong wireType = %d for field Options", wireType)
            }
            var stringLen uint64
            for shift := uint(0); ; shift += 7 {
                if shift >= 64 {
                    return ErrIntOverflowSpecs
                }
                if iNdEx >= l {
                    return io.ErrUnexpectedEOF
                }
                b := dAtA[iNdEx]
                iNdEx++
                stringLen |= uint64(b&0x7F) << shift
                if b < 0x80 {
                    break
                }
            }
            intStringLen := int(stringLen)
            if intStringLen < 0 {
                return ErrInvalidLengthSpecs
            }
            postIndex := iNdEx + intStringLen
            if postIndex < 0 {
                return ErrInvalidLengthSpecs
            }
            if postIndex > l {
                return io.ErrUnexpectedEOF
            }
            m.Options = append(m.Options, string(dAtA[iNdEx:postIndex]))
            iNdEx = postIndex
        default:
            iNdEx = preIndex
            skippy, err := skipSpecs(dAtA[iNdEx:])
            if err != nil {
                return err
            }
            if (skippy < 0) || (iNdEx+skippy) < 0 {
                return ErrInvalidLengthSpecs
            }
            if (iNdEx + skippy) > l {
                return io.ErrUnexpectedEOF
            }
            iNdEx += skippy
        }
    }

    if iNdEx > l {
        return io.ErrUnexpectedEOF
    }
    return nil
}
func (m *ContainerSpec_Ulimit) Unmarshal(dAtA []byte) error {
    l := len(dAtA)
    iNdEx := 0
    for iNdEx < l {
        preIndex := iNdEx
        var wire uint64
        for shift := uint(0); ; shift += 7 {
            if shift >= 64 {
                return ErrIntOverflowSpecs
            }
            if iNdEx >= l {
                return io.ErrUnexpectedEOF
            }
            b := dAtA[iNdEx]
            iNdEx++
            wire |= uint64(b&0x7F) << shift
            if b < 0x80 {
                break
            }
        }
        fieldNum := int32(wire >> 3)
        wireType := int(wire & 0x7)
        if wireType == 4 {
            return fmt.Errorf("proto: Ulimit: wiretype end group for non-group")
        }
        if fieldNum <= 0 {
            return fmt.Errorf("proto: Ulimit: illegal tag %d (wire type %d)", fieldNum, wire)
        }
        switch fieldNum {
        case 1:
            if wireType != 2 {
                return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType)
            }
            var stringLen uint64
            for shift := uint(0); ; shift += 7 {
                if shift >= 64 {
                    return ErrIntOverflowSpecs
                }
                if iNdEx >= l {
                    return io.ErrUnexpectedEOF
                }
                b := dAtA[iNdEx]
                iNdEx++
                stringLen |= uint64(b&0x7F) << shift
                if b < 0x80 {
                    break
                }
            }
            intStringLen := int(stringLen)
            if intStringLen < 0 {
                return ErrInvalidLengthSpecs
            }
            postIndex := iNdEx + intStringLen
            if postIndex < 0 {
                return ErrInvalidLengthSpecs
            }
            if postIndex > l {
                return io.ErrUnexpectedEOF
            }
            m.Name = string(dAtA[iNdEx:postIndex])
            iNdEx = postIndex
        case 2:
            if wireType != 0 {
                return fmt.Errorf("proto: wrong wireType = %d for field Soft", wireType)
            }
            m.Soft = 0
            for shift := uint(0); ; shift += 7 {
                if shift >= 64 {
                    return ErrIntOverflowSpecs
                }
                if iNdEx >= l {
                    return io.ErrUnexpectedEOF
                }
                b := dAtA[iNdEx]
                iNdEx++
                m.Soft |= int64(b&0x7F) << shift
                if b < 0x80 {
                    break
                }
            }
        case 3:
            if wireType != 0 {
                return fmt.Errorf("proto: wrong wireType = %d for field Hard", wireType)
            }
            m.Hard = 0
            for shift := uint(0); ; shift += 7 {
                if shift >= 64 {
                    return ErrIntOverflowSpecs
                }
                if iNdEx >= l {
                    return io.ErrUnexpectedEOF
                }
                b := dAtA[iNdEx]
                iNdEx++
                m.Hard |= int64(b&0x7F) << shift
                if b < 0x80 {
                    break
                }
            }
        default:
            iNdEx = preIndex
            skippy, err := skipSpecs(dAtA[iNdEx:])
            if err != nil {
                return err
            }
            if (skippy < 0) || (iNdEx+skippy) < 0 {
                return ErrInvalidLengthSpecs
            }
            if (iNdEx + skippy) > l {
                return io.ErrUnexpectedEOF
            }
            iNdEx += skippy
        }
    }

    if iNdEx > l {
        return io.ErrUnexpectedEOF
    }
    return nil
}
func (m *EndpointSpec) Unmarshal(dAtA []byte) error {
    l := len(dAtA)
    iNdEx := 0
    for iNdEx < l {
        preIndex := iNdEx
        var wire uint64
        for shift := uint(0); ; shift += 7 {
            if shift >= 64 {
                return ErrIntOverflowSpecs
            }
            if iNdEx >= l {
                return io.ErrUnexpectedEOF
            }
            b := dAtA[iNdEx]
            iNdEx++
            wire |= uint64(b&0x7F) << shift
            if b < 0x80 {
                break
            }
        }
        fieldNum := int32(wire >> 3)
        wireType := int(wire & 0x7)
        if wireType == 4 {
            return fmt.Errorf("proto: EndpointSpec: wiretype end group for non-group")
        }
        if fieldNum <= 0 {
            return fmt.Errorf("proto: EndpointSpec: illegal tag %d (wire type %d)", fieldNum, wire)
        }
        switch fieldNum {
        case 1:
            if wireType != 0 {
                return fmt.Errorf("proto: wrong wireType = %d for field Mode", wireType)
            }
            m.Mode = 0
            for shift := uint(0); ; shift += 7 {
                if shift >= 64 {
                    return ErrIntOverflowSpecs
                }
                if iNdEx >= l {
                    return io.ErrUnexpectedEOF
                }
                b := dAtA[iNdEx]
                iNdEx++
                m.Mode |= EndpointSpec_ResolutionMode(b&0x7F) << shift
                if b < 0x80 {
                    break
                }
            }
        case 2:
            if wireType != 2 {
                return fmt.Errorf("proto: wrong wireType = %d for field Ports", wireType)
            }
            var msglen int
            for shift := uint(0); ; shift += 7 {
                if shift >= 64 {
                    return ErrIntOverflowSpecs
                }
                if iNdEx >= l {
                    return io.ErrUnexpectedEOF
                }
                b := dAtA[iNdEx]
                iNdEx++
                msglen |= int(b&0x7F) << shift
                if b < 0x80 {
                    break
                }
            }
            if msglen < 0 {
                return ErrInvalidLengthSpecs
            }
            postIndex := iNdEx + msglen
            if postIndex < 0 {
                return ErrInvalidLengthSpecs
            }
            if postIndex > l {
                return io.ErrUnexpectedEOF
            }
            m.Ports = append(m.Ports, &PortConfig{})
            if err := m.Ports[len(m.Ports)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
                return err
            }
            iNdEx = postIndex
        default:
            iNdEx = preIndex
            skippy, err := skipSpecs(dAtA[iNdEx:])
            if err != nil {
                return err
            }
            if (skippy < 0) || (iNdEx+skippy) < 0 {
                return ErrInvalidLengthSpecs
            }
            if (iNdEx + skippy) > l {
                return io.ErrUnexpectedEOF
            }
            iNdEx += skippy
        }
    }

    if iNdEx > l {
        return io.ErrUnexpectedEOF
    }
    return nil
}
func (m *NetworkSpec) Unmarshal(dAtA []byte) error {
    l := len(dAtA)
    iNdEx := 0
    for iNdEx < l {
        preIndex := iNdEx
        var wire uint64
        for shift := uint(0); ; shift += 7 {
            if shift >= 64 {
                return ErrIntOverflowSpecs
            }
            if iNdEx >= l {
                return io.ErrUnexpectedEOF
            }
            b := dAtA[iNdEx]
            iNdEx++
            wire |= uint64(b&0x7F) << shift
            if b < 0x80 {
                break
            }
        }
        fieldNum := int32(wire >> 3)
        wireType := int(wire & 0x7)
        if wireType == 4 {
            return fmt.Errorf("proto: NetworkSpec: wiretype end group for non-group")
        }
        if fieldNum <= 0 {
            return fmt.Errorf("proto: NetworkSpec: illegal tag %d (wire type %d)", fieldNum, wire)
        }
        switch fieldNum {
        case 1:
            if wireType != 2 {
                return fmt.Errorf("proto: wrong wireType = %d for field Annotations", wireType)
            }
            var msglen int
            for shift := uint(0); ; shift += 7 {
                if shift >= 64 {
                    return ErrIntOverflowSpecs
                }
                if iNdEx >= l {
                    return io.ErrUnexpectedEOF
                }
                b := dAtA[iNdEx]
                iNdEx++
                msglen |= int(b&0x7F) << shift
                if b < 0x80 {
                    break
                }
            }
            if msglen < 0 {
                return ErrInvalidLengthSpecs
            }
            postIndex := iNdEx + msglen
            if postIndex < 0 {
                return ErrInvalidLengthSpecs
            }
            if postIndex > l {
                return io.ErrUnexpectedEOF
            }
            if err := m.Annotations.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
                return err
            }
            iNdEx = postIndex
        case 2:
            if wireType != 2 {
                return fmt.Errorf("proto: wrong wireType = %d for field DriverConfig", wireType)
            }
            var msglen int
            for shift := uint(0); ; shift += 7 {
                if shift >= 64 {
                    return ErrIntOverflowSpecs
                }
                if iNdEx >= l {
                    return io.ErrUnexpectedEOF
                }
                b := dAtA[iNdEx]
                iNdEx++
                msglen |= int(b&0x7F) << shift
                if b < 0x80 {
                    break
                }
            }
            if msglen < 0 {
                return ErrInvalidLengthSpecs
            }
            postIndex := iNdEx + msglen
            if postIndex < 0 {
                return ErrInvalidLengthSpecs
            }
            if postIndex > l {
                return io.ErrUnexpectedEOF
            }
            if m.DriverConfig == nil {
                m.DriverConfig = &Driver{}
            }
            if err := m.DriverConfig.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
                return err
            }
            iNdEx = postIndex
        case 3:
            if wireType != 0 {
                return fmt.Errorf("proto: wrong wireType = %d for field Ipv6Enabled", wireType)
            }
            var v int
            for shift := uint(0); ; shift += 7 {
                if shift >= 64 {
                    return ErrIntOverflowSpecs
                }
                if iNdEx >= l {
                    return io.ErrUnexpectedEOF
                }
                b := dAtA[iNdEx]
                iNdEx++
                v |= int(b&0x7F) << shift
                if b < 0x80 {
                    break
                }
            }
            m.Ipv6Enabled = bool(v != 0)
        case 4:
            if wireType != 0 {
                return fmt.Errorf("proto: wrong wireType = %d for field Internal", wireType)
            }
            var v int
            for shift := uint(0); ; shift += 7 {
                if shift >= 64 {
                    return ErrIntOverflowSpecs
                }
                if iNdEx >= l {
                    return io.ErrUnexpectedEOF
                }
                b := dAtA[iNdEx]
                iNdEx++
                v |= int(b&0x7F) << shift
                if b < 0x80 {
                    break
                }
            }
            m.Internal = bool(v != 0)
        case 5:
            if wireType != 2 {
                return fmt.Errorf("proto: wrong wireType = %d for field IPAM", wireType)
            }
            var msglen int
            for shift := uint(0); ; shift += 7 {
                if shift >= 64 {
                    return ErrIntOverflowSpecs
                }
                if iNdEx >= l {
                    return io.ErrUnexpectedEOF
                }
                b := dAtA[iNdEx]
                iNdEx++
                msglen |= int(b&0x7F) << shift
                if b < 0x80 {
                    break
                }
            }
            if msglen < 0 {
                return ErrInvalidLengthSpecs
            }
            postIndex := iNdEx + msglen
            if postIndex < 0 {
                return ErrInvalidLengthSpecs
            }
            if postIndex > l {
                return io.ErrUnexpectedEOF
            }
            if m.IPAM == nil {
                m.IPAM = &IPAMOptions{}
            }
            if err := m.IPAM.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
                return err
            }
            iNdEx = postIndex
        case 6:
            if wireType != 0 {
                return fmt.Errorf("proto: wrong wireType = %d for field Attachable", wireType)
            }
            var v int
            for shift := uint(0); ; shift += 7 {
                if shift >= 64 {
                    return ErrIntOverflowSpecs
                }
                if iNdEx >= l {
                    return io.ErrUnexpectedEOF
                }
                b := dAtA[iNdEx]
                iNdEx++
                v |= int(b&0x7F) << shift
                if b < 0x80 {
                    break
                }
            }
            m.Attachable = bool(v != 0)
        case 7:
            if wireType != 0 {
                return fmt.Errorf("proto: wrong wireType = %d for field Ingress", wireType)
            }
            var v int
            for shift := uint(0); ; shift += 7 {
                if shift >= 64 {
                    return ErrIntOverflowSpecs
                }
                if iNdEx >= l {
                    return io.ErrUnexpectedEOF
                }
                b := dAtA[iNdEx]
                iNdEx++
                v |= int(b&0x7F) << shift
                if b < 0x80 {
                    break
                }
            }
            m.Ingress = bool(v != 0)
        case 8:
            if wireType != 2 {
                return fmt.Errorf("proto: wrong wireType = %d for field Network", wireType)
            }
            var stringLen uint64
            for shift := uint(0); ; shift += 7 {
                if shift >= 64 {
                    return ErrIntOverflowSpecs
                }
                if iNdEx >= l {
                    return io.ErrUnexpectedEOF
                }
                b := dAtA[iNdEx]
                iNdEx++
                stringLen |= uint64(b&0x7F) << shift
                if b < 0x80 {
                    break
                }
            }
            intStringLen := int(stringLen)
            if intStringLen < 0 {
                return ErrInvalidLengthSpecs
            }
            postIndex := iNdEx + intStringLen
            if postIndex < 0 {
                return ErrInvalidLengthSpecs
            }
            if postIndex > l {
                return io.ErrUnexpectedEOF
            }
            m.ConfigFrom = &NetworkSpec_Network{string(dAtA[iNdEx:postIndex])}
            iNdEx = postIndex
        default:
            iNdEx = preIndex
            skippy, err := skipSpecs(dAtA[iNdEx:])
            if err != nil {
                return err
            }
            if (skippy < 0) || (iNdEx+skippy) < 0 {
                return ErrInvalidLengthSpecs
            }
            if (iNdEx + skippy) > l {
                return io.ErrUnexpectedEOF
            }
            iNdEx += skippy
        }
    }

    if iNdEx > l {
        return io.ErrUnexpectedEOF
    }
    return nil
}
func (m *ClusterSpec) Unmarshal(dAtA []byte) error {
    l := len(dAtA)
    iNdEx := 0
    for iNdEx < l {
        preIndex := iNdEx
        var wire uint64
        for shift := uint(0); ; shift += 7 {
            if shift >= 64 {
                return ErrIntOverflowSpecs
            }
            if iNdEx >= l {
                return io.ErrUnexpectedEOF
            }
            b := dAtA[iNdEx]
            iNdEx++
            wire |= uint64(b&0x7F) << shift
            if b < 0x80 {
                break
            }
        }
        fieldNum := int32(wire >> 3)
        wireType := int(wire & 0x7)
        if wireType == 4 {
            return fmt.Errorf("proto: ClusterSpec: wiretype end group for non-group")
        }
        if fieldNum <= 0 {
            return fmt.Errorf("proto: ClusterSpec: illegal tag %d (wire type %d)", fieldNum, wire)
        }
        switch fieldNum {
        case 1:
            if wireType != 2 {
                return fmt.Errorf("proto: wrong wireType = %d for field Annotations", wireType)
            }
            var msglen int
            for shift := uint(0); ; shift += 7 {
                if shift >= 64 {
                    return ErrIntOverflowSpecs
                }
                if iNdEx >= l {
                    return io.ErrUnexpectedEOF
                }
                b := dAtA[iNdEx]
                iNdEx++
                msglen |= int(b&0x7F) << shift
                if b < 0x80 {
                    break
                }
            }
            if msglen < 0 {
                return ErrInvalidLengthSpecs
            }
            postIndex := iNdEx + msglen
            if postIndex < 0 {
                return ErrInvalidLengthSpecs
            }
            if postIndex > l {
                return io.ErrUnexpectedEOF
            }
            if err := m.Annotations.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
                return err
            }
            iNdEx = postIndex
        case 2:
            if wireType != 2 {
                return fmt.Errorf("proto: wrong wireType = %d for field AcceptancePolicy", wireType)
            }
            var msglen int
            for shift := uint(0); ; shift += 7 {
                if shift >= 64 {
                    return ErrIntOverflowSpecs
                }
                if iNdEx >= l {
                    return io.ErrUnexpectedEOF
                }
                b := dAtA[iNdEx]
                iNdEx++
                msglen |= int(b&0x7F) << shift
                if b < 0x80 {
                    break
                }
            }
            if msglen < 0 {
                return ErrInvalidLengthSpecs
            }
            postIndex := iNdEx + msglen
            if postIndex < 0 {
                return ErrInvalidLengthSpecs
            }
            if postIndex > l {
                return io.ErrUnexpectedEOF
            }
            if err := m.AcceptancePolicy.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
                return err
            }
            iNdEx = postIndex
        case 3:
            if wireType != 2 {
                return fmt.Errorf("proto: wrong wireType = %d for field Orchestration", wireType)
            }
            var msglen int
            for shift := uint(0); ; shift += 7 {
                if shift >= 64 {
                    return ErrIntOverflowSpecs
                }
                if iNdEx >= l {
                    return io.ErrUnexpectedEOF
                }
                b := dAtA[iNdEx]
                iNdEx++
                msglen |= int(b&0x7F) << shift
                if b < 0x80 {
                    break
                }
            }
            if msglen < 0 {
                return ErrInvalidLengthSpecs
            }
            postIndex := iNdEx + msglen
            if postIndex < 0 {
                return ErrInvalidLengthSpecs
            }
            if postIndex > l {
                return io.ErrUnexpectedEOF
            }
            if err := m.Orchestration.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
                return err
            }
            iNdEx = postIndex
        case 4:
            if wireType != 2 {
                return fmt.Errorf("proto: wrong wireType = %d for field Raft", wireType)
            }
            var msglen int
            for shift := uint(0); ; shift += 7 {
                if shift >= 64 {
                    return ErrIntOverflowSpecs
                }
                if iNdEx >= l {
                    return io.ErrUnexpectedEOF
                }
                b := dAtA[iNdEx]
                iNdEx++
                msglen |= int(b&0x7F) << shift
                if b < 0x80 {
                    break
                }
            }
            if msglen < 0 {
                return ErrInvalidLengthSpecs
            }
            postIndex := iNdEx + msglen
            if postIndex < 0 {
                return ErrInvalidLengthSpecs
            }
            if postIndex > l {
                return io.ErrUnexpectedEOF
            }
            if err := m.Raft.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
                return err
            }
            iNdEx = postIndex
        case 5:
            if wireType != 2 {
                return fmt.Errorf("proto: wrong wireType = %d for field Dispatcher", wireType)
            }
            var msglen int
            for shift := uint(0); ; shift += 7 {
                if shift >= 64 {
                    return ErrIntOverflowSpecs
                }
                if iNdEx >= l {
                    return io.ErrUnexpectedEOF
                }
                b := dAtA[iNdEx]
                iNdEx++
                msglen |= int(b&0x7F) << shift
                if b < 0x80 {
                    break
                }
            }
            if msglen < 0 {
                return ErrInvalidLengthSpecs
            }
            postIndex := iNdEx + msglen
            if postIndex < 0 {
                return ErrInvalidLengthSpecs
            }
            if postIndex > l {
                return io.ErrUnexpectedEOF
            }
            if err := m.Dispatcher.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
                return err
            }
            iNdEx = postIndex
        case 6:
            if wireType != 2 {
                return fmt.Errorf("proto: wrong wireType = %d for field CAConfig", wireType)
            }
            var msglen int
            for shift := uint(0); ; shift += 7 {
                if shift >= 64 {
                    return ErrIntOverflowSpecs
                }
                if iNdEx >= l {
                    return io.ErrUnexpectedEOF
                }
                b := dAtA[iNdEx]
                iNdEx++
                msglen |= int(b&0x7F) << shift
                if b < 0x80 {
                    break
                }
            }
            if msglen < 0 {
                return ErrInvalidLengthSpecs
            }
            postIndex := iNdEx + msglen
            if postIndex < 0 {
                return ErrInvalidLengthSpecs
            }
            if postIndex > l {
                return io.ErrUnexpectedEOF
            }
            if err := m.CAConfig.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
                return err
            }
            iNdEx = postIndex
        case 7:
            if wireType != 2 {
                return fmt.Errorf("proto: wrong wireType = %d for field TaskDefaults", wireType)
            }
            var msglen int
            for shift := uint(0); ; shift += 7 {
                if shift >= 64 {
                    return ErrIntOverflowSpecs
                }
                if iNdEx >= l {
                    return io.ErrUnexpectedEOF
                }
                b := dAtA[iNdEx]
                iNdEx++
                msglen |= int(b&0x7F) << shift
                if b < 0x80 {
                    break
                }
            }
            if msglen < 0 {
                return ErrInvalidLengthSpecs
            }
            postIndex := iNdEx + msglen
            if postIndex < 0 {
                return ErrInvalidLengthSpecs
            }
            if postIndex > l {
                return io.ErrUnexpectedEOF
            }
            if err := m.TaskDefaults.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
                return err
            }
            iNdEx = postIndex
        case 8:
            if wireType != 2 {
                return fmt.Errorf("proto: wrong wireType = %d for field EncryptionConfig", wireType)
            }
            var msglen int
            for shift := uint(0); ; shift += 7 {
                if shift >= 64 {
                    return ErrIntOverflowSpecs
                }
                if iNdEx >= l {
                    return io.ErrUnexpectedEOF
                }
                b := dAtA[iNdEx]
                iNdEx++
                msglen |= int(b&0x7F) << shift
                if b < 0x80 {
                    break
                }
            }
            if msglen < 0 {
                return ErrInvalidLengthSpecs
            }
            postIndex := iNdEx + msglen
            if postIndex < 0 {
                return ErrInvalidLengthSpecs
            }
            if postIndex > l {
                return io.ErrUnexpectedEOF
            }
            if err := m.EncryptionConfig.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
                return err
            }
            iNdEx = postIndex
        default:
            iNdEx = preIndex
            skippy, err := skipSpecs(dAtA[iNdEx:])
            if err != nil {
                return err
            }
            if (skippy < 0) || (iNdEx+skippy) < 0 {
                return ErrInvalidLengthSpecs
            }
            if (iNdEx + skippy) > l {
                return io.ErrUnexpectedEOF
            }
            iNdEx += skippy
        }
    }

    if iNdEx > l {
        return io.ErrUnexpectedEOF
    }
    return nil
}
func (m *SecretSpec) Unmarshal(dAtA []byte) error {
    l := len(dAtA)
    iNdEx := 0
    for iNdEx < l {
        preIndex := iNdEx
        var wire uint64
        for shift := uint(0); ; shift += 7 {
            if shift >= 64 {
                return ErrIntOverflowSpecs
            }
            if iNdEx >= l {
                return io.ErrUnexpectedEOF
            }
            b := dAtA[iNdEx]
            iNdEx++
            wire |= uint64(b&0x7F) << shift
            if b < 0x80 {
                break
            }
        }
        fieldNum := int32(wire >> 3)
        wireType := int(wire & 0x7)
        if wireType == 4 {
            return fmt.Errorf("proto: SecretSpec: wiretype end group for non-group")
        }
        if fieldNum <= 0 {
            return fmt.Errorf("proto: SecretSpec: illegal tag %d (wire type %d)", fieldNum, wire)
        }
        switch fieldNum {
        case 1:
            if wireType != 2 {
                return fmt.Errorf("proto: wrong wireType = %d for field Annotations", wireType)
            }
            var msglen int
            for shift := uint(0); ; shift += 7 {
                if shift >= 64 {
                    return ErrIntOverflowSpecs
                }
                if iNdEx >= l {
                    return io.ErrUnexpectedEOF
                }
                b := dAtA[iNdEx]
                iNdEx++
                msglen |= int(b&0x7F) << shift
                if b < 0x80 {
                    break
                }
            }
            if msglen < 0 {
                return ErrInvalidLengthSpecs
            }
            postIndex := iNdEx + msglen
            if postIndex < 0 {
                return ErrInvalidLengthSpecs
            }
            if postIndex > l {
                return io.ErrUnexpectedEOF
            }
            if err := m.Annotations.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
                return err
            }
            iNdEx = postIndex
        case 2:
            if wireType != 2 {
                return fmt.Errorf("proto: wrong wireType = %d for field Data", wireType)
            }
            var byteLen int
            for shift := uint(0); ; shift += 7 {
                if shift >= 64 {
                    return ErrIntOverflowSpecs
                }
                if iNdEx >= l {
                    return io.ErrUnexpectedEOF
                }
                b := dAtA[iNdEx]
                iNdEx++
                byteLen |= int(b&0x7F) << shift
                if b < 0x80 {
                    break
                }
            }
            if byteLen < 0 {
                return ErrInvalidLengthSpecs
            }
            postIndex := iNdEx + byteLen
            if postIndex < 0 {
                return ErrInvalidLengthSpecs
            }
            if postIndex > l {
                return io.ErrUnexpectedEOF
            }
            m.Data = append(m.Data[:0], dAtA[iNdEx:postIndex]...)
            if m.Data == nil {
                m.Data = []byte{}
            }
            iNdEx = postIndex
        case 3:
            if wireType != 2 {
                return fmt.Errorf("proto: wrong wireType = %d for field Templating", wireType)
            }
            var msglen int
            for shift := uint(0); ; shift += 7 {
                if shift >= 64 {
                    return ErrIntOverflowSpecs
                }
                if iNdEx >= l {
                    return io.ErrUnexpectedEOF
                }
                b := dAtA[iNdEx]
                iNdEx++
                msglen |= int(b&0x7F) << shift
                if b < 0x80 {
                    break
                }
            }
            if msglen < 0 {
                return ErrInvalidLengthSpecs
            }
            postIndex := iNdEx + msglen
            if postIndex < 0 {
                return ErrInvalidLengthSpecs
            }
            if postIndex > l {
                return io.ErrUnexpectedEOF
            }
            if m.Templating == nil {
                m.Templating = &Driver{}
            }
            if err := m.Templating.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
                return err
            }
            iNdEx = postIndex
        case 4:
            if wireType != 2 {
                return fmt.Errorf("proto: wrong wireType = %d for field Driver", wireType)
            }
            var msglen int
            for shift := uint(0); ; shift += 7 {
                if shift >= 64 {
                    return ErrIntOverflowSpecs
                }
                if iNdEx >= l {
                    return io.ErrUnexpectedEOF
                }
                b := dAtA[iNdEx]
                iNdEx++
                msglen |= int(b&0x7F) << shift
                if b < 0x80 {
                    break
                }
            }
            if msglen < 0 {
                return ErrInvalidLengthSpecs
            }
            postIndex := iNdEx + msglen
            if postIndex < 0 {
                return ErrInvalidLengthSpecs
            }
            if postIndex > l {
                return io.ErrUnexpectedEOF
            }
            if m.Driver == nil {
                m.Driver = &Driver{}
            }
            if err := m.Driver.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
                return err
            }
            iNdEx = postIndex
        default:
            iNdEx = preIndex
            skippy, err := skipSpecs(dAtA[iNdEx:])
            if err != nil {
                return err
            }
            if (skippy < 0) || (iNdEx+skippy) < 0 {
                return ErrInvalidLengthSpecs
            }
            if (iNdEx + skippy) > l {
                return io.ErrUnexpectedEOF
            }
            iNdEx += skippy
        }
    }

    if iNdEx > l {
        return io.ErrUnexpectedEOF
    }
    return nil
}
func (m *ConfigSpec) Unmarshal(dAtA []byte) error {
    l := len(dAtA)
    iNdEx := 0
    for iNdEx < l {
        preIndex := iNdEx
        var wire uint64
        for shift := uint(0); ; shift += 7 {
            if shift >= 64 {
                return ErrIntOverflowSpecs
            }
            if iNdEx >= l {
                return io.ErrUnexpectedEOF
            }
            b := dAtA[iNdEx]
            iNdEx++
            wire |= uint64(b&0x7F) << shift
            if b < 0x80 {
                break
            }
        }
        fieldNum := int32(wire >> 3)
        wireType := int(wire & 0x7)
        if wireType == 4 {
            return fmt.Errorf("proto: ConfigSpec: wiretype end group for non-group")
        }
        if fieldNum <= 0 {
            return fmt.Errorf("proto: ConfigSpec: illegal tag %d (wire type %d)", fieldNum, wire)
        }
        switch fieldNum {
        case 1:
            if wireType != 2 {
                return fmt.Errorf("proto: wrong wireType = %d for field Annotations", wireType)
            }
            var msglen int
            for shift := uint(0); ; shift += 7 {
                if shift >= 64 {
                    return ErrIntOverflowSpecs
                }
                if iNdEx >= l {
                    return io.ErrUnexpectedEOF
                }
                b := dAtA[iNdEx]
                iNdEx++
                msglen |= int(b&0x7F) << shift
                if b < 0x80 {
                    break
                }
            }
            if msglen < 0 {
                return ErrInvalidLengthSpecs
            }
            postIndex := iNdEx + msglen
            if postIndex < 0 {
                return ErrInvalidLengthSpecs
            }
            if postIndex > l {
                return io.ErrUnexpectedEOF
            }
            if err := m.Annotations.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
                return err
            }
            iNdEx = postIndex
        case 2:
            if wireType != 2 {
                return fmt.Errorf("proto: wrong wireType = %d for field Data", wireType)
            }
            var byteLen int
            for shift := uint(0); ; shift += 7 {
                if shift >= 64 {
                    return ErrIntOverflowSpecs
                }
                if iNdEx >= l {
                    return io.ErrUnexpectedEOF
                }
                b := dAtA[iNdEx]
                iNdEx++
                byteLen |= int(b&0x7F) << shift
                if b < 0x80 {
                    break
                }
            }
            if byteLen < 0 {
                return ErrInvalidLengthSpecs
            }
            postIndex := iNdEx + byteLen
            if postIndex < 0 {
                return ErrInvalidLengthSpecs
            }
            if postIndex > l {
                return io.ErrUnexpectedEOF
            }
            m.Data = append(m.Data[:0], dAtA[iNdEx:postIndex]...)
            if m.Data == nil {
                m.Data = []byte{}
            }
            iNdEx = postIndex
        case 3:
            if wireType != 2 {
                return fmt.Errorf("proto: wrong wireType = %d for field Templating", wireType)
            }
            var msglen int
            for shift := uint(0); ; shift += 7 {
                if shift >= 64 {
                    return ErrIntOverflowSpecs
                }
                if iNdEx >= l {
                    return io.ErrUnexpectedEOF
                }
                b := dAtA[iNdEx]
                iNdEx++
                msglen |= int(b&0x7F) << shift
                if b < 0x80 {
                    break
                }
            }
            if msglen < 0 {
                return ErrInvalidLengthSpecs
            }
            postIndex := iNdEx + msglen
            if postIndex < 0 {
                return ErrInvalidLengthSpecs
            }
            if postIndex > l {
                return io.ErrUnexpectedEOF
            }
            if m.Templating == nil {
                m.Templating = &Driver{}
            }
            if err := m.Templating.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
                return err
            }
            iNdEx = postIndex
        default:
            iNdEx = preIndex
            skippy, err := skipSpecs(dAtA[iNdEx:])
            if err != nil {
                return err
            }
            if (skippy < 0) || (iNdEx+skippy) < 0 {
                return ErrInvalidLengthSpecs
            }
            if (iNdEx + skippy) > l {
                return io.ErrUnexpectedEOF
            }
            iNdEx += skippy
        }
    }

    if iNdEx > l {
        return io.ErrUnexpectedEOF
    }
    return nil
}
func (m *VolumeSpec) Unmarshal(dAtA []byte) error {
    l := len(dAtA)
    iNdEx := 0
    for iNdEx < l {
        preIndex := iNdEx
        var wire uint64
        for shift := uint(0); ; shift += 7 {
            if shift >= 64 {
                return ErrIntOverflowSpecs
            }
            if iNdEx >= l {
                return io.ErrUnexpectedEOF
            }
            b := dAtA[iNdEx]
            iNdEx++
            wire |= uint64(b&0x7F) << shift
            if b < 0x80 {
                break
            }
        }
        fieldNum := int32(wire >> 3)
        wireType := int(wire & 0x7)
        if wireType == 4 {
            return fmt.Errorf("proto: VolumeSpec: wiretype end group for non-group")
        }
        if fieldNum <= 0 {
            return fmt.Errorf("proto: VolumeSpec: illegal tag %d (wire type %d)", fieldNum, wire)
        }
        switch fieldNum {
        case 1:
            if wireType != 2 {
                return fmt.Errorf("proto: wrong wireType = %d for field Annotations", wireType)
            }
            var msglen int
            for shift := uint(0); ; shift += 7 {
                if shift >= 64 {
                    return ErrIntOverflowSpecs
                }
                if iNdEx >= l {
                    return io.ErrUnexpectedEOF
                }
                b := dAtA[iNdEx]
                iNdEx++
                msglen |= int(b&0x7F) << shift
                if b < 0x80 {
                    break
                }
            }
            if msglen < 0 {
                return ErrInvalidLengthSpecs
            }
            postIndex := iNdEx + msglen
            if postIndex < 0 {
                return ErrInvalidLengthSpecs
            }
            if postIndex > l {
                return io.ErrUnexpectedEOF
            }
            if err := m.Annotations.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
                return err
            }
            iNdEx = postIndex
        case 2:
            if wireType != 2 {
                return fmt.Errorf("proto: wrong wireType = %d for field Group", wireType)
            }
            var stringLen uint64
            for shift := uint(0); ; shift += 7 {
                if shift >= 64 {
                    return ErrIntOverflowSpecs
                }
                if iNdEx >= l {
                    return io.ErrUnexpectedEOF
                }
                b := dAtA[iNdEx]
                iNdEx++
                stringLen |= uint64(b&0x7F) << shift
                if b < 0x80 {
                    break
                }
            }
            intStringLen := int(stringLen)
            if intStringLen < 0 {
                return ErrInvalidLengthSpecs
            }
            postIndex := iNdEx + intStringLen
            if postIndex < 0 {
                return ErrInvalidLengthSpecs
            }
            if postIndex > l {
                return io.ErrUnexpectedEOF
            }
            m.Group = string(dAtA[iNdEx:postIndex])
            iNdEx = postIndex
        case 3:
            if wireType != 2 {
                return fmt.Errorf("proto: wrong wireType = %d for field Driver", wireType)
            }
            var msglen int
            for shift := uint(0); ; shift += 7 {
                if shift >= 64 {
                    return ErrIntOverflowSpecs
                }
                if iNdEx >= l {
                    return io.ErrUnexpectedEOF
                }
                b := dAtA[iNdEx]
                iNdEx++
                msglen |= int(b&0x7F) << shift
                if b < 0x80 {
                    break
                }
            }
            if msglen < 0 {
                return ErrInvalidLengthSpecs
            }
            postIndex := iNdEx + msglen
            if postIndex < 0 {
                return ErrInvalidLengthSpecs
            }
            if postIndex > l {
                return io.ErrUnexpectedEOF
            }
            if m.Driver == nil {
                m.Driver = &Driver{}
            }
            if err := m.Driver.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
                return err
            }
            iNdEx = postIndex
        case 4:
            if wireType != 2 {
                return fmt.Errorf("proto: wrong wireType = %d for field AccessMode", wireType)
            }
            var msglen int
            for shift := uint(0); ; shift += 7 {
                if shift >= 64 {
                    return ErrIntOverflowSpecs
                }
                if iNdEx >= l {
                    return io.ErrUnexpectedEOF
                }
                b := dAtA[iNdEx]
                iNdEx++
                msglen |= int(b&0x7F) << shift
                if b < 0x80 {
                    break
                }
            }
            if msglen < 0 {
                return ErrInvalidLengthSpecs
            }
            postIndex := iNdEx + msglen
            if postIndex < 0 {
                return ErrInvalidLengthSpecs
            }
            if postIndex > l {
                return io.ErrUnexpectedEOF
            }
            if m.AccessMode == nil {
                m.AccessMode = &VolumeAccessMode{}
            }
            if err := m.AccessMode.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
                return err
            }
            iNdEx = postIndex
        case 5:
            if wireType != 2 {
                return fmt.Errorf("proto: wrong wireType = %d for field Secrets", wireType)
            }
            var msglen int
            for shift := uint(0); ; shift += 7 {
                if shift >= 64 {
                    return ErrIntOverflowSpecs
                }
                if iNdEx >= l {
                    return io.ErrUnexpectedEOF
                }
                b := dAtA[iNdEx]
                iNdEx++
                msglen |= int(b&0x7F) << shift
                if b < 0x80 {
                    break
                }
            }
            if msglen < 0 {
                return ErrInvalidLengthSpecs
            }
            postIndex := iNdEx + msglen
            if postIndex < 0 {
                return ErrInvalidLengthSpecs
            }
            if postIndex > l {
                return io.ErrUnexpectedEOF
            }
            m.Secrets = append(m.Secrets, &VolumeSecret{})
            if err := m.Secrets[len(m.Secrets)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
                return err
            }
            iNdEx = postIndex
        case 6:
            if wireType != 2 {
                return fmt.Errorf("proto: wrong wireType = %d for field AccessibilityRequirements", wireType)
            }
            var msglen int
            for shift := uint(0); ; shift += 7 {
                if shift >= 64 {
                    return ErrIntOverflowSpecs
                }
                if iNdEx >= l {
                    return io.ErrUnexpectedEOF
                }
                b := dAtA[iNdEx]
                iNdEx++
                msglen |= int(b&0x7F) << shift
                if b < 0x80 {
                    break
                }
            }
            if msglen < 0 {
                return ErrInvalidLengthSpecs
            }
            postIndex := iNdEx + msglen
            if postIndex < 0 {
                return ErrInvalidLengthSpecs
            }
            if postIndex > l {
                return io.ErrUnexpectedEOF
            }
            if m.AccessibilityRequirements == nil {
                m.AccessibilityRequirements = &TopologyRequirement{}
            }
            if err := m.AccessibilityRequirements.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
                return err
            }
            iNdEx = postIndex
        case 7:
            if wireType != 2 {
                return fmt.Errorf("proto: wrong wireType = %d for field CapacityRange", wireType)
            }
            var msglen int
            for shift := uint(0); ; shift += 7 {
                if shift >= 64 {
                    return ErrIntOverflowSpecs
                }
                if iNdEx >= l {
                    return io.ErrUnexpectedEOF
                }
                b := dAtA[iNdEx]
                iNdEx++
                msglen |= int(b&0x7F) << shift
                if b < 0x80 {
                    break
                }
            }
            if msglen < 0 {
                return ErrInvalidLengthSpecs
            }
            postIndex := iNdEx + msglen
            if postIndex < 0 {
                return ErrInvalidLengthSpecs
            }
            if postIndex > l {
                return io.ErrUnexpectedEOF
            }
            if m.CapacityRange == nil {
                m.CapacityRange = &CapacityRange{}
            }
            if err := m.CapacityRange.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
                return err
            }
            iNdEx = postIndex
        case 8:
            if wireType != 0 {
                return fmt.Errorf("proto: wrong wireType = %d for field Availability", wireType)
            }
            m.Availability = 0
            for shift := uint(0); ; shift += 7 {
                if shift >= 64 {
                    return ErrIntOverflowSpecs
                }
                if iNdEx >= l {
                    return io.ErrUnexpectedEOF
                }
                b := dAtA[iNdEx]
                iNdEx++
                m.Availability |= VolumeSpec_VolumeAvailability(b&0x7F) << shift
                if b < 0x80 {
                    break
                }
            }
        default:
            iNdEx = preIndex
            skippy, err := skipSpecs(dAtA[iNdEx:])
            if err != nil {
                return err
            }
            if (skippy < 0) || (iNdEx+skippy) < 0 {
                return ErrInvalidLengthSpecs
            }
            if (iNdEx + skippy) > l {
                return io.ErrUnexpectedEOF
            }
            iNdEx += skippy
        }
    }

    if iNdEx > l {
        return io.ErrUnexpectedEOF
    }
    return nil
}
func skipSpecs(dAtA []byte) (n int, err error) {
    l := len(dAtA)
    iNdEx := 0
    depth := 0
    for iNdEx < l {
        var wire uint64
        for shift := uint(0); ; shift += 7 {
            if shift >= 64 {
                return 0, ErrIntOverflowSpecs
            }
            if iNdEx >= l {
                return 0, io.ErrUnexpectedEOF
            }
            b := dAtA[iNdEx]
            iNdEx++
            wire |= (uint64(b) & 0x7F) << shift
            if b < 0x80 {
                break
            }
        }
        wireType := int(wire & 0x7)
        switch wireType {
        case 0:
            for shift := uint(0); ; shift += 7 {
                if shift >= 64 {
                    return 0, ErrIntOverflowSpecs
                }
                if iNdEx >= l {
                    return 0, io.ErrUnexpectedEOF
                }
                iNdEx++
                if dAtA[iNdEx-1] < 0x80 {
                    break
                }
            }
        case 1:
            iNdEx += 8
        case 2:
            var length int
            for shift := uint(0); ; shift += 7 {
                if shift >= 64 {
                    return 0, ErrIntOverflowSpecs
                }
                if iNdEx >= l {
                    return 0, io.ErrUnexpectedEOF
                }
                b := dAtA[iNdEx]
                iNdEx++
                length |= (int(b) & 0x7F) << shift
                if b < 0x80 {
                    break
                }
            }
            if length < 0 {
                return 0, ErrInvalidLengthSpecs
            }
            iNdEx += length
        case 3:
            depth++
        case 4:
            if depth == 0 {
                return 0, ErrUnexpectedEndOfGroupSpecs
            }
            depth--
        case 5:
            iNdEx += 4
        default:
            return 0, fmt.Errorf("proto: illegal wireType %d", wireType)
        }
        if iNdEx < 0 {
            return 0, ErrInvalidLengthSpecs
        }
        if depth == 0 {
            return iNdEx, nil
        }
    }
    return 0, io.ErrUnexpectedEOF
}

var (
    ErrInvalidLengthSpecs        = fmt.Errorf("proto: negative length found during unmarshaling")
    ErrIntOverflowSpecs          = fmt.Errorf("proto: integer overflow")
    ErrUnexpectedEndOfGroupSpecs = fmt.Errorf("proto: unexpected end of group")
)