github.com/kaydxh/golang@v0.0.131/pkg/file-transfer/ft.pb.go (about)

     1  // Code generated by protoc-gen-go. DO NOT EDIT.
     2  // versions:
     3  // 	protoc-gen-go v1.28.1
     4  // 	protoc        v3.13.0
     5  // source: pkg/file-transfer/ft.proto
     6  
     7  package filetransfer
     8  
     9  import (
    10  	duration "github.com/golang/protobuf/ptypes/duration"
    11  	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
    12  	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
    13  	reflect "reflect"
    14  	sync "sync"
    15  )
    16  
    17  const (
    18  	// Verify that this generated code is sufficiently up-to-date.
    19  	_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
    20  	// Verify that runtime/protoimpl is sufficiently up-to-date.
    21  	_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
    22  )
    23  
    24  type Ft_LoadBalanceMode int32
    25  
    26  const (
    27  	Ft_load_balance_mode_first  Ft_LoadBalanceMode = 0
    28  	Ft_load_balance_mode_random Ft_LoadBalanceMode = 1
    29  )
    30  
    31  // Enum value maps for Ft_LoadBalanceMode.
    32  var (
    33  	Ft_LoadBalanceMode_name = map[int32]string{
    34  		0: "load_balance_mode_first",
    35  		1: "load_balance_mode_random",
    36  	}
    37  	Ft_LoadBalanceMode_value = map[string]int32{
    38  		"load_balance_mode_first":  0,
    39  		"load_balance_mode_random": 1,
    40  	}
    41  )
    42  
    43  func (x Ft_LoadBalanceMode) Enum() *Ft_LoadBalanceMode {
    44  	p := new(Ft_LoadBalanceMode)
    45  	*p = x
    46  	return p
    47  }
    48  
    49  func (x Ft_LoadBalanceMode) String() string {
    50  	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
    51  }
    52  
    53  func (Ft_LoadBalanceMode) Descriptor() protoreflect.EnumDescriptor {
    54  	return file_pkg_file_transfer_ft_proto_enumTypes[0].Descriptor()
    55  }
    56  
    57  func (Ft_LoadBalanceMode) Type() protoreflect.EnumType {
    58  	return &file_pkg_file_transfer_ft_proto_enumTypes[0]
    59  }
    60  
    61  func (x Ft_LoadBalanceMode) Number() protoreflect.EnumNumber {
    62  	return protoreflect.EnumNumber(x)
    63  }
    64  
    65  // Deprecated: Use Ft_LoadBalanceMode.Descriptor instead.
    66  func (Ft_LoadBalanceMode) EnumDescriptor() ([]byte, []int) {
    67  	return file_pkg_file_transfer_ft_proto_rawDescGZIP(), []int{0, 0}
    68  }
    69  
    70  type Ft struct {
    71  	state         protoimpl.MessageState
    72  	sizeCache     protoimpl.SizeCache
    73  	unknownFields protoimpl.UnknownFields
    74  
    75  	Enabled         bool               `protobuf:"varint,1,opt,name=enabled,proto3" json:"enabled,omitempty"`
    76  	DownloadTimeout *duration.Duration `protobuf:"bytes,2,opt,name=download_timeout,json=downloadTimeout,proto3" json:"download_timeout,omitempty"`
    77  	UploadTimeout   *duration.Duration `protobuf:"bytes,3,opt,name=upload_timeout,json=uploadTimeout,proto3" json:"upload_timeout,omitempty"`
    78  	RetryTimes      uint32             `protobuf:"varint,4,opt,name=retry_times,json=retryTimes,proto3" json:"retry_times,omitempty"`
    79  	RetryInterval   *duration.Duration `protobuf:"bytes,5,opt,name=retry_interval,json=retryInterval,proto3" json:"retry_interval,omitempty"`
    80  	// 当有多个代理地址时,代理模式, use proxy mode
    81  	LoadBalanceMode Ft_LoadBalanceMode `protobuf:"varint,10,opt,name=load_balance_mode,json=loadBalanceMode,proto3,enum=go.pkg.filetransfer.Ft_LoadBalanceMode" json:"load_balance_mode,omitempty"`
    82  	Proxies         []*Ft_Proxy        `protobuf:"bytes,11,rep,name=proxies,proto3" json:"proxies,omitempty"`
    83  }
    84  
    85  func (x *Ft) Reset() {
    86  	*x = Ft{}
    87  	if protoimpl.UnsafeEnabled {
    88  		mi := &file_pkg_file_transfer_ft_proto_msgTypes[0]
    89  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
    90  		ms.StoreMessageInfo(mi)
    91  	}
    92  }
    93  
    94  func (x *Ft) String() string {
    95  	return protoimpl.X.MessageStringOf(x)
    96  }
    97  
    98  func (*Ft) ProtoMessage() {}
    99  
   100  func (x *Ft) ProtoReflect() protoreflect.Message {
   101  	mi := &file_pkg_file_transfer_ft_proto_msgTypes[0]
   102  	if protoimpl.UnsafeEnabled && x != nil {
   103  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   104  		if ms.LoadMessageInfo() == nil {
   105  			ms.StoreMessageInfo(mi)
   106  		}
   107  		return ms
   108  	}
   109  	return mi.MessageOf(x)
   110  }
   111  
   112  // Deprecated: Use Ft.ProtoReflect.Descriptor instead.
   113  func (*Ft) Descriptor() ([]byte, []int) {
   114  	return file_pkg_file_transfer_ft_proto_rawDescGZIP(), []int{0}
   115  }
   116  
   117  func (x *Ft) GetEnabled() bool {
   118  	if x != nil {
   119  		return x.Enabled
   120  	}
   121  	return false
   122  }
   123  
   124  func (x *Ft) GetDownloadTimeout() *duration.Duration {
   125  	if x != nil {
   126  		return x.DownloadTimeout
   127  	}
   128  	return nil
   129  }
   130  
   131  func (x *Ft) GetUploadTimeout() *duration.Duration {
   132  	if x != nil {
   133  		return x.UploadTimeout
   134  	}
   135  	return nil
   136  }
   137  
   138  func (x *Ft) GetRetryTimes() uint32 {
   139  	if x != nil {
   140  		return x.RetryTimes
   141  	}
   142  	return 0
   143  }
   144  
   145  func (x *Ft) GetRetryInterval() *duration.Duration {
   146  	if x != nil {
   147  		return x.RetryInterval
   148  	}
   149  	return nil
   150  }
   151  
   152  func (x *Ft) GetLoadBalanceMode() Ft_LoadBalanceMode {
   153  	if x != nil {
   154  		return x.LoadBalanceMode
   155  	}
   156  	return Ft_load_balance_mode_first
   157  }
   158  
   159  func (x *Ft) GetProxies() []*Ft_Proxy {
   160  	if x != nil {
   161  		return x.Proxies
   162  	}
   163  	return nil
   164  }
   165  
   166  type Ft_Proxy struct {
   167  	state         protoimpl.MessageState
   168  	sizeCache     protoimpl.SizeCache
   169  	unknownFields protoimpl.UnknownFields
   170  
   171  	// target_addr和target_url都设置值的情况下,优先使用target_addr
   172  	// reset dns to target_addr in url,
   173  	TargetHost string `protobuf:"bytes,1,opt,name=target_host,json=targetHost,proto3" json:"target_host,omitempty"`
   174  	// reset url to target url
   175  	ProxyUrl  string `protobuf:"bytes,2,opt,name=proxy_url,json=proxyUrl,proto3" json:"proxy_url,omitempty"`
   176  	ProxyHost string `protobuf:"bytes,3,opt,name=proxy_host,json=proxyHost,proto3" json:"proxy_host,omitempty"`
   177  }
   178  
   179  func (x *Ft_Proxy) Reset() {
   180  	*x = Ft_Proxy{}
   181  	if protoimpl.UnsafeEnabled {
   182  		mi := &file_pkg_file_transfer_ft_proto_msgTypes[1]
   183  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   184  		ms.StoreMessageInfo(mi)
   185  	}
   186  }
   187  
   188  func (x *Ft_Proxy) String() string {
   189  	return protoimpl.X.MessageStringOf(x)
   190  }
   191  
   192  func (*Ft_Proxy) ProtoMessage() {}
   193  
   194  func (x *Ft_Proxy) ProtoReflect() protoreflect.Message {
   195  	mi := &file_pkg_file_transfer_ft_proto_msgTypes[1]
   196  	if protoimpl.UnsafeEnabled && x != nil {
   197  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   198  		if ms.LoadMessageInfo() == nil {
   199  			ms.StoreMessageInfo(mi)
   200  		}
   201  		return ms
   202  	}
   203  	return mi.MessageOf(x)
   204  }
   205  
   206  // Deprecated: Use Ft_Proxy.ProtoReflect.Descriptor instead.
   207  func (*Ft_Proxy) Descriptor() ([]byte, []int) {
   208  	return file_pkg_file_transfer_ft_proto_rawDescGZIP(), []int{0, 0}
   209  }
   210  
   211  func (x *Ft_Proxy) GetTargetHost() string {
   212  	if x != nil {
   213  		return x.TargetHost
   214  	}
   215  	return ""
   216  }
   217  
   218  func (x *Ft_Proxy) GetProxyUrl() string {
   219  	if x != nil {
   220  		return x.ProxyUrl
   221  	}
   222  	return ""
   223  }
   224  
   225  func (x *Ft_Proxy) GetProxyHost() string {
   226  	if x != nil {
   227  		return x.ProxyHost
   228  	}
   229  	return ""
   230  }
   231  
   232  var File_pkg_file_transfer_ft_proto protoreflect.FileDescriptor
   233  
   234  var file_pkg_file_transfer_ft_proto_rawDesc = []byte{
   235  	0x0a, 0x1a, 0x70, 0x6b, 0x67, 0x2f, 0x66, 0x69, 0x6c, 0x65, 0x2d, 0x74, 0x72, 0x61, 0x6e, 0x73,
   236  	0x66, 0x65, 0x72, 0x2f, 0x66, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x13, 0x67, 0x6f,
   237  	0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65,
   238  	0x72, 0x1a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62,
   239  	0x75, 0x66, 0x2f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74,
   240  	0x6f, 0x22, 0xcb, 0x04, 0x0a, 0x02, 0x46, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62,
   241  	0x6c, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c,
   242  	0x65, 0x64, 0x12, 0x44, 0x0a, 0x10, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x74,
   243  	0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67,
   244  	0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44,
   245  	0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0f, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61,
   246  	0x64, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x40, 0x0a, 0x0e, 0x75, 0x70, 0x6c, 0x6f,
   247  	0x61, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b,
   248  	0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62,
   249  	0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0d, 0x75, 0x70, 0x6c,
   250  	0x6f, 0x61, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65,
   251  	0x74, 0x72, 0x79, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52,
   252  	0x0a, 0x72, 0x65, 0x74, 0x72, 0x79, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x12, 0x40, 0x0a, 0x0e, 0x72,
   253  	0x65, 0x74, 0x72, 0x79, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x18, 0x05, 0x20,
   254  	0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f,
   255  	0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0d,
   256  	0x72, 0x65, 0x74, 0x72, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x12, 0x53, 0x0a,
   257  	0x11, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x6d, 0x6f,
   258  	0x64, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x27, 0x2e, 0x67, 0x6f, 0x2e, 0x70, 0x6b,
   259  	0x67, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x2e, 0x46,
   260  	0x74, 0x2e, 0x4c, 0x6f, 0x61, 0x64, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x4d, 0x6f, 0x64,
   261  	0x65, 0x52, 0x0f, 0x6c, 0x6f, 0x61, 0x64, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x4d, 0x6f,
   262  	0x64, 0x65, 0x12, 0x37, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x78, 0x69, 0x65, 0x73, 0x18, 0x0b, 0x20,
   263  	0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x67, 0x6f, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x66, 0x69, 0x6c,
   264  	0x65, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x2e, 0x46, 0x74, 0x2e, 0x50, 0x72, 0x6f,
   265  	0x78, 0x79, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x78, 0x69, 0x65, 0x73, 0x1a, 0x64, 0x0a, 0x05, 0x50,
   266  	0x72, 0x6f, 0x78, 0x79, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x68,
   267  	0x6f, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x74, 0x61, 0x72, 0x67, 0x65,
   268  	0x74, 0x48, 0x6f, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x5f, 0x75,
   269  	0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x55,
   270  	0x72, 0x6c, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x5f, 0x68, 0x6f, 0x73, 0x74,
   271  	0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x48, 0x6f, 0x73,
   272  	0x74, 0x22, 0x4c, 0x0a, 0x0f, 0x4c, 0x6f, 0x61, 0x64, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65,
   273  	0x4d, 0x6f, 0x64, 0x65, 0x12, 0x1b, 0x0a, 0x17, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x62, 0x61, 0x6c,
   274  	0x61, 0x6e, 0x63, 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x5f, 0x66, 0x69, 0x72, 0x73, 0x74, 0x10,
   275  	0x00, 0x12, 0x1c, 0x0a, 0x18, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63,
   276  	0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x5f, 0x72, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x10, 0x01, 0x42,
   277  	0x34, 0x5a, 0x32, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6b, 0x61,
   278  	0x79, 0x64, 0x78, 0x68, 0x2f, 0x67, 0x6f, 0x2e, 0x70, 0x6b, 0x67, 0x2e, 0x66, 0x69, 0x6c, 0x65,
   279  	0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x3b, 0x66, 0x69, 0x6c, 0x65, 0x74, 0x72, 0x61,
   280  	0x6e, 0x73, 0x66, 0x65, 0x72, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
   281  }
   282  
   283  var (
   284  	file_pkg_file_transfer_ft_proto_rawDescOnce sync.Once
   285  	file_pkg_file_transfer_ft_proto_rawDescData = file_pkg_file_transfer_ft_proto_rawDesc
   286  )
   287  
   288  func file_pkg_file_transfer_ft_proto_rawDescGZIP() []byte {
   289  	file_pkg_file_transfer_ft_proto_rawDescOnce.Do(func() {
   290  		file_pkg_file_transfer_ft_proto_rawDescData = protoimpl.X.CompressGZIP(file_pkg_file_transfer_ft_proto_rawDescData)
   291  	})
   292  	return file_pkg_file_transfer_ft_proto_rawDescData
   293  }
   294  
   295  var file_pkg_file_transfer_ft_proto_enumTypes = make([]protoimpl.EnumInfo, 1)
   296  var file_pkg_file_transfer_ft_proto_msgTypes = make([]protoimpl.MessageInfo, 2)
   297  var file_pkg_file_transfer_ft_proto_goTypes = []interface{}{
   298  	(Ft_LoadBalanceMode)(0),   // 0: go.pkg.filetransfer.Ft.LoadBalanceMode
   299  	(*Ft)(nil),                // 1: go.pkg.filetransfer.Ft
   300  	(*Ft_Proxy)(nil),          // 2: go.pkg.filetransfer.Ft.Proxy
   301  	(*duration.Duration)(nil), // 3: google.protobuf.Duration
   302  }
   303  var file_pkg_file_transfer_ft_proto_depIdxs = []int32{
   304  	3, // 0: go.pkg.filetransfer.Ft.download_timeout:type_name -> google.protobuf.Duration
   305  	3, // 1: go.pkg.filetransfer.Ft.upload_timeout:type_name -> google.protobuf.Duration
   306  	3, // 2: go.pkg.filetransfer.Ft.retry_interval:type_name -> google.protobuf.Duration
   307  	0, // 3: go.pkg.filetransfer.Ft.load_balance_mode:type_name -> go.pkg.filetransfer.Ft.LoadBalanceMode
   308  	2, // 4: go.pkg.filetransfer.Ft.proxies:type_name -> go.pkg.filetransfer.Ft.Proxy
   309  	5, // [5:5] is the sub-list for method output_type
   310  	5, // [5:5] is the sub-list for method input_type
   311  	5, // [5:5] is the sub-list for extension type_name
   312  	5, // [5:5] is the sub-list for extension extendee
   313  	0, // [0:5] is the sub-list for field type_name
   314  }
   315  
   316  func init() { file_pkg_file_transfer_ft_proto_init() }
   317  func file_pkg_file_transfer_ft_proto_init() {
   318  	if File_pkg_file_transfer_ft_proto != nil {
   319  		return
   320  	}
   321  	if !protoimpl.UnsafeEnabled {
   322  		file_pkg_file_transfer_ft_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
   323  			switch v := v.(*Ft); i {
   324  			case 0:
   325  				return &v.state
   326  			case 1:
   327  				return &v.sizeCache
   328  			case 2:
   329  				return &v.unknownFields
   330  			default:
   331  				return nil
   332  			}
   333  		}
   334  		file_pkg_file_transfer_ft_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
   335  			switch v := v.(*Ft_Proxy); i {
   336  			case 0:
   337  				return &v.state
   338  			case 1:
   339  				return &v.sizeCache
   340  			case 2:
   341  				return &v.unknownFields
   342  			default:
   343  				return nil
   344  			}
   345  		}
   346  	}
   347  	type x struct{}
   348  	out := protoimpl.TypeBuilder{
   349  		File: protoimpl.DescBuilder{
   350  			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
   351  			RawDescriptor: file_pkg_file_transfer_ft_proto_rawDesc,
   352  			NumEnums:      1,
   353  			NumMessages:   2,
   354  			NumExtensions: 0,
   355  			NumServices:   0,
   356  		},
   357  		GoTypes:           file_pkg_file_transfer_ft_proto_goTypes,
   358  		DependencyIndexes: file_pkg_file_transfer_ft_proto_depIdxs,
   359  		EnumInfos:         file_pkg_file_transfer_ft_proto_enumTypes,
   360  		MessageInfos:      file_pkg_file_transfer_ft_proto_msgTypes,
   361  	}.Build()
   362  	File_pkg_file_transfer_ft_proto = out.File
   363  	file_pkg_file_transfer_ft_proto_rawDesc = nil
   364  	file_pkg_file_transfer_ft_proto_goTypes = nil
   365  	file_pkg_file_transfer_ft_proto_depIdxs = nil
   366  }