github.com/ferranbt/nomad@v0.9.3-0.20190607002617-85c449b7667c/plugins/device/proto/device.pb.go (about) 1 // Code generated by protoc-gen-go. DO NOT EDIT. 2 // source: plugins/device/proto/device.proto 3 4 package proto 5 6 import proto "github.com/golang/protobuf/proto" 7 import fmt "fmt" 8 import math "math" 9 import duration "github.com/golang/protobuf/ptypes/duration" 10 import timestamp "github.com/golang/protobuf/ptypes/timestamp" 11 import proto1 "github.com/hashicorp/nomad/plugins/shared/structs/proto" 12 13 import ( 14 context "golang.org/x/net/context" 15 grpc "google.golang.org/grpc" 16 ) 17 18 // Reference imports to suppress errors if they are not otherwise used. 19 var _ = proto.Marshal 20 var _ = fmt.Errorf 21 var _ = math.Inf 22 23 // This is a compile-time assertion to ensure that this generated file 24 // is compatible with the proto package it is being compiled against. 25 // A compilation error at this line likely means your copy of the 26 // proto package needs to be updated. 27 const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package 28 29 // FingerprintRequest is used to request for devices to be fingerprinted. 30 type FingerprintRequest struct { 31 XXX_NoUnkeyedLiteral struct{} `json:"-"` 32 XXX_unrecognized []byte `json:"-"` 33 XXX_sizecache int32 `json:"-"` 34 } 35 36 func (m *FingerprintRequest) Reset() { *m = FingerprintRequest{} } 37 func (m *FingerprintRequest) String() string { return proto.CompactTextString(m) } 38 func (*FingerprintRequest) ProtoMessage() {} 39 func (*FingerprintRequest) Descriptor() ([]byte, []int) { 40 return fileDescriptor_device_a4d1cccedbd8401c, []int{0} 41 } 42 func (m *FingerprintRequest) XXX_Unmarshal(b []byte) error { 43 return xxx_messageInfo_FingerprintRequest.Unmarshal(m, b) 44 } 45 func (m *FingerprintRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { 46 return xxx_messageInfo_FingerprintRequest.Marshal(b, m, deterministic) 47 } 48 func (dst *FingerprintRequest) XXX_Merge(src proto.Message) { 49 xxx_messageInfo_FingerprintRequest.Merge(dst, src) 50 } 51 func (m *FingerprintRequest) XXX_Size() int { 52 return xxx_messageInfo_FingerprintRequest.Size(m) 53 } 54 func (m *FingerprintRequest) XXX_DiscardUnknown() { 55 xxx_messageInfo_FingerprintRequest.DiscardUnknown(m) 56 } 57 58 var xxx_messageInfo_FingerprintRequest proto.InternalMessageInfo 59 60 // FingerprintResponse returns a set of detected devices. 61 type FingerprintResponse struct { 62 // device_group is a group of devices that share a vendor, device_type, and 63 // device_name. This is returned as a set so that a single plugin could 64 // potentially detect several device types and models. 65 DeviceGroup []*DeviceGroup `protobuf:"bytes,1,rep,name=device_group,json=deviceGroup,proto3" json:"device_group,omitempty"` 66 XXX_NoUnkeyedLiteral struct{} `json:"-"` 67 XXX_unrecognized []byte `json:"-"` 68 XXX_sizecache int32 `json:"-"` 69 } 70 71 func (m *FingerprintResponse) Reset() { *m = FingerprintResponse{} } 72 func (m *FingerprintResponse) String() string { return proto.CompactTextString(m) } 73 func (*FingerprintResponse) ProtoMessage() {} 74 func (*FingerprintResponse) Descriptor() ([]byte, []int) { 75 return fileDescriptor_device_a4d1cccedbd8401c, []int{1} 76 } 77 func (m *FingerprintResponse) XXX_Unmarshal(b []byte) error { 78 return xxx_messageInfo_FingerprintResponse.Unmarshal(m, b) 79 } 80 func (m *FingerprintResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { 81 return xxx_messageInfo_FingerprintResponse.Marshal(b, m, deterministic) 82 } 83 func (dst *FingerprintResponse) XXX_Merge(src proto.Message) { 84 xxx_messageInfo_FingerprintResponse.Merge(dst, src) 85 } 86 func (m *FingerprintResponse) XXX_Size() int { 87 return xxx_messageInfo_FingerprintResponse.Size(m) 88 } 89 func (m *FingerprintResponse) XXX_DiscardUnknown() { 90 xxx_messageInfo_FingerprintResponse.DiscardUnknown(m) 91 } 92 93 var xxx_messageInfo_FingerprintResponse proto.InternalMessageInfo 94 95 func (m *FingerprintResponse) GetDeviceGroup() []*DeviceGroup { 96 if m != nil { 97 return m.DeviceGroup 98 } 99 return nil 100 } 101 102 // DeviceGroup is a group of devices that share a vendor, device type and name. 103 type DeviceGroup struct { 104 // vendor is the name of the vendor of the device 105 Vendor string `protobuf:"bytes,1,opt,name=vendor,proto3" json:"vendor,omitempty"` 106 // device_type is the type of the device (gpu, fpga, etc). 107 DeviceType string `protobuf:"bytes,2,opt,name=device_type,json=deviceType,proto3" json:"device_type,omitempty"` 108 // device_name is the name of the device. 109 DeviceName string `protobuf:"bytes,3,opt,name=device_name,json=deviceName,proto3" json:"device_name,omitempty"` 110 // devices is the set of devices detected by the plugin. 111 Devices []*DetectedDevice `protobuf:"bytes,4,rep,name=devices,proto3" json:"devices,omitempty"` 112 // attributes allows adding attributes to be used for constraints or 113 // affinities. 114 Attributes map[string]*proto1.Attribute `protobuf:"bytes,5,rep,name=attributes,proto3" json:"attributes,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` 115 XXX_NoUnkeyedLiteral struct{} `json:"-"` 116 XXX_unrecognized []byte `json:"-"` 117 XXX_sizecache int32 `json:"-"` 118 } 119 120 func (m *DeviceGroup) Reset() { *m = DeviceGroup{} } 121 func (m *DeviceGroup) String() string { return proto.CompactTextString(m) } 122 func (*DeviceGroup) ProtoMessage() {} 123 func (*DeviceGroup) Descriptor() ([]byte, []int) { 124 return fileDescriptor_device_a4d1cccedbd8401c, []int{2} 125 } 126 func (m *DeviceGroup) XXX_Unmarshal(b []byte) error { 127 return xxx_messageInfo_DeviceGroup.Unmarshal(m, b) 128 } 129 func (m *DeviceGroup) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { 130 return xxx_messageInfo_DeviceGroup.Marshal(b, m, deterministic) 131 } 132 func (dst *DeviceGroup) XXX_Merge(src proto.Message) { 133 xxx_messageInfo_DeviceGroup.Merge(dst, src) 134 } 135 func (m *DeviceGroup) XXX_Size() int { 136 return xxx_messageInfo_DeviceGroup.Size(m) 137 } 138 func (m *DeviceGroup) XXX_DiscardUnknown() { 139 xxx_messageInfo_DeviceGroup.DiscardUnknown(m) 140 } 141 142 var xxx_messageInfo_DeviceGroup proto.InternalMessageInfo 143 144 func (m *DeviceGroup) GetVendor() string { 145 if m != nil { 146 return m.Vendor 147 } 148 return "" 149 } 150 151 func (m *DeviceGroup) GetDeviceType() string { 152 if m != nil { 153 return m.DeviceType 154 } 155 return "" 156 } 157 158 func (m *DeviceGroup) GetDeviceName() string { 159 if m != nil { 160 return m.DeviceName 161 } 162 return "" 163 } 164 165 func (m *DeviceGroup) GetDevices() []*DetectedDevice { 166 if m != nil { 167 return m.Devices 168 } 169 return nil 170 } 171 172 func (m *DeviceGroup) GetAttributes() map[string]*proto1.Attribute { 173 if m != nil { 174 return m.Attributes 175 } 176 return nil 177 } 178 179 // DetectedDevice is a single detected device. 180 type DetectedDevice struct { 181 // ID is the ID of the device. This ID is used during allocation and must be 182 // stable across restarts of the device driver. 183 ID string `protobuf:"bytes,1,opt,name=ID,proto3" json:"ID,omitempty"` 184 // Health of the device. 185 Healthy bool `protobuf:"varint,2,opt,name=healthy,proto3" json:"healthy,omitempty"` 186 // health_description allows the device plugin to optionally 187 // annotate the health field with a human readable reason. 188 HealthDescription string `protobuf:"bytes,3,opt,name=health_description,json=healthDescription,proto3" json:"health_description,omitempty"` 189 // hw_locality is optionally set to expose hardware locality information for 190 // more optimal placement decisions. 191 HwLocality *DeviceLocality `protobuf:"bytes,4,opt,name=hw_locality,json=hwLocality,proto3" json:"hw_locality,omitempty"` 192 XXX_NoUnkeyedLiteral struct{} `json:"-"` 193 XXX_unrecognized []byte `json:"-"` 194 XXX_sizecache int32 `json:"-"` 195 } 196 197 func (m *DetectedDevice) Reset() { *m = DetectedDevice{} } 198 func (m *DetectedDevice) String() string { return proto.CompactTextString(m) } 199 func (*DetectedDevice) ProtoMessage() {} 200 func (*DetectedDevice) Descriptor() ([]byte, []int) { 201 return fileDescriptor_device_a4d1cccedbd8401c, []int{3} 202 } 203 func (m *DetectedDevice) XXX_Unmarshal(b []byte) error { 204 return xxx_messageInfo_DetectedDevice.Unmarshal(m, b) 205 } 206 func (m *DetectedDevice) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { 207 return xxx_messageInfo_DetectedDevice.Marshal(b, m, deterministic) 208 } 209 func (dst *DetectedDevice) XXX_Merge(src proto.Message) { 210 xxx_messageInfo_DetectedDevice.Merge(dst, src) 211 } 212 func (m *DetectedDevice) XXX_Size() int { 213 return xxx_messageInfo_DetectedDevice.Size(m) 214 } 215 func (m *DetectedDevice) XXX_DiscardUnknown() { 216 xxx_messageInfo_DetectedDevice.DiscardUnknown(m) 217 } 218 219 var xxx_messageInfo_DetectedDevice proto.InternalMessageInfo 220 221 func (m *DetectedDevice) GetID() string { 222 if m != nil { 223 return m.ID 224 } 225 return "" 226 } 227 228 func (m *DetectedDevice) GetHealthy() bool { 229 if m != nil { 230 return m.Healthy 231 } 232 return false 233 } 234 235 func (m *DetectedDevice) GetHealthDescription() string { 236 if m != nil { 237 return m.HealthDescription 238 } 239 return "" 240 } 241 242 func (m *DetectedDevice) GetHwLocality() *DeviceLocality { 243 if m != nil { 244 return m.HwLocality 245 } 246 return nil 247 } 248 249 // DeviceLocality is used to expose HW locality information about a device. 250 type DeviceLocality struct { 251 // pci_bus_id is the PCI bus ID for the device. If reported, it 252 // allows Nomad to make NUMA aware optimizations. 253 PciBusId string `protobuf:"bytes,1,opt,name=pci_bus_id,json=pciBusId,proto3" json:"pci_bus_id,omitempty"` 254 XXX_NoUnkeyedLiteral struct{} `json:"-"` 255 XXX_unrecognized []byte `json:"-"` 256 XXX_sizecache int32 `json:"-"` 257 } 258 259 func (m *DeviceLocality) Reset() { *m = DeviceLocality{} } 260 func (m *DeviceLocality) String() string { return proto.CompactTextString(m) } 261 func (*DeviceLocality) ProtoMessage() {} 262 func (*DeviceLocality) Descriptor() ([]byte, []int) { 263 return fileDescriptor_device_a4d1cccedbd8401c, []int{4} 264 } 265 func (m *DeviceLocality) XXX_Unmarshal(b []byte) error { 266 return xxx_messageInfo_DeviceLocality.Unmarshal(m, b) 267 } 268 func (m *DeviceLocality) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { 269 return xxx_messageInfo_DeviceLocality.Marshal(b, m, deterministic) 270 } 271 func (dst *DeviceLocality) XXX_Merge(src proto.Message) { 272 xxx_messageInfo_DeviceLocality.Merge(dst, src) 273 } 274 func (m *DeviceLocality) XXX_Size() int { 275 return xxx_messageInfo_DeviceLocality.Size(m) 276 } 277 func (m *DeviceLocality) XXX_DiscardUnknown() { 278 xxx_messageInfo_DeviceLocality.DiscardUnknown(m) 279 } 280 281 var xxx_messageInfo_DeviceLocality proto.InternalMessageInfo 282 283 func (m *DeviceLocality) GetPciBusId() string { 284 if m != nil { 285 return m.PciBusId 286 } 287 return "" 288 } 289 290 // ReserveRequest is used to ask the device driver for information on 291 // how to allocate the requested devices. 292 type ReserveRequest struct { 293 // device_ids are the requested devices. 294 DeviceIds []string `protobuf:"bytes,1,rep,name=device_ids,json=deviceIds,proto3" json:"device_ids,omitempty"` 295 XXX_NoUnkeyedLiteral struct{} `json:"-"` 296 XXX_unrecognized []byte `json:"-"` 297 XXX_sizecache int32 `json:"-"` 298 } 299 300 func (m *ReserveRequest) Reset() { *m = ReserveRequest{} } 301 func (m *ReserveRequest) String() string { return proto.CompactTextString(m) } 302 func (*ReserveRequest) ProtoMessage() {} 303 func (*ReserveRequest) Descriptor() ([]byte, []int) { 304 return fileDescriptor_device_a4d1cccedbd8401c, []int{5} 305 } 306 func (m *ReserveRequest) XXX_Unmarshal(b []byte) error { 307 return xxx_messageInfo_ReserveRequest.Unmarshal(m, b) 308 } 309 func (m *ReserveRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { 310 return xxx_messageInfo_ReserveRequest.Marshal(b, m, deterministic) 311 } 312 func (dst *ReserveRequest) XXX_Merge(src proto.Message) { 313 xxx_messageInfo_ReserveRequest.Merge(dst, src) 314 } 315 func (m *ReserveRequest) XXX_Size() int { 316 return xxx_messageInfo_ReserveRequest.Size(m) 317 } 318 func (m *ReserveRequest) XXX_DiscardUnknown() { 319 xxx_messageInfo_ReserveRequest.DiscardUnknown(m) 320 } 321 322 var xxx_messageInfo_ReserveRequest proto.InternalMessageInfo 323 324 func (m *ReserveRequest) GetDeviceIds() []string { 325 if m != nil { 326 return m.DeviceIds 327 } 328 return nil 329 } 330 331 // ReserveResponse informs Nomad how to expose the requested devices 332 // to the the task. 333 type ReserveResponse struct { 334 // container_res contains information on how to mount the device 335 // into a task isolated using container technologies (where the 336 // host is shared) 337 ContainerRes *ContainerReservation `protobuf:"bytes,1,opt,name=container_res,json=containerRes,proto3" json:"container_res,omitempty"` 338 XXX_NoUnkeyedLiteral struct{} `json:"-"` 339 XXX_unrecognized []byte `json:"-"` 340 XXX_sizecache int32 `json:"-"` 341 } 342 343 func (m *ReserveResponse) Reset() { *m = ReserveResponse{} } 344 func (m *ReserveResponse) String() string { return proto.CompactTextString(m) } 345 func (*ReserveResponse) ProtoMessage() {} 346 func (*ReserveResponse) Descriptor() ([]byte, []int) { 347 return fileDescriptor_device_a4d1cccedbd8401c, []int{6} 348 } 349 func (m *ReserveResponse) XXX_Unmarshal(b []byte) error { 350 return xxx_messageInfo_ReserveResponse.Unmarshal(m, b) 351 } 352 func (m *ReserveResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { 353 return xxx_messageInfo_ReserveResponse.Marshal(b, m, deterministic) 354 } 355 func (dst *ReserveResponse) XXX_Merge(src proto.Message) { 356 xxx_messageInfo_ReserveResponse.Merge(dst, src) 357 } 358 func (m *ReserveResponse) XXX_Size() int { 359 return xxx_messageInfo_ReserveResponse.Size(m) 360 } 361 func (m *ReserveResponse) XXX_DiscardUnknown() { 362 xxx_messageInfo_ReserveResponse.DiscardUnknown(m) 363 } 364 365 var xxx_messageInfo_ReserveResponse proto.InternalMessageInfo 366 367 func (m *ReserveResponse) GetContainerRes() *ContainerReservation { 368 if m != nil { 369 return m.ContainerRes 370 } 371 return nil 372 } 373 374 // ContainerReservation returns how to mount the device into a 375 // container that shares the host OS. 376 type ContainerReservation struct { 377 // List of environment variable to be set 378 Envs map[string]string `protobuf:"bytes,1,rep,name=envs,proto3" json:"envs,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` 379 // Mounts for the task. 380 Mounts []*Mount `protobuf:"bytes,2,rep,name=mounts,proto3" json:"mounts,omitempty"` 381 // Devices for the task. 382 Devices []*DeviceSpec `protobuf:"bytes,3,rep,name=devices,proto3" json:"devices,omitempty"` 383 XXX_NoUnkeyedLiteral struct{} `json:"-"` 384 XXX_unrecognized []byte `json:"-"` 385 XXX_sizecache int32 `json:"-"` 386 } 387 388 func (m *ContainerReservation) Reset() { *m = ContainerReservation{} } 389 func (m *ContainerReservation) String() string { return proto.CompactTextString(m) } 390 func (*ContainerReservation) ProtoMessage() {} 391 func (*ContainerReservation) Descriptor() ([]byte, []int) { 392 return fileDescriptor_device_a4d1cccedbd8401c, []int{7} 393 } 394 func (m *ContainerReservation) XXX_Unmarshal(b []byte) error { 395 return xxx_messageInfo_ContainerReservation.Unmarshal(m, b) 396 } 397 func (m *ContainerReservation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { 398 return xxx_messageInfo_ContainerReservation.Marshal(b, m, deterministic) 399 } 400 func (dst *ContainerReservation) XXX_Merge(src proto.Message) { 401 xxx_messageInfo_ContainerReservation.Merge(dst, src) 402 } 403 func (m *ContainerReservation) XXX_Size() int { 404 return xxx_messageInfo_ContainerReservation.Size(m) 405 } 406 func (m *ContainerReservation) XXX_DiscardUnknown() { 407 xxx_messageInfo_ContainerReservation.DiscardUnknown(m) 408 } 409 410 var xxx_messageInfo_ContainerReservation proto.InternalMessageInfo 411 412 func (m *ContainerReservation) GetEnvs() map[string]string { 413 if m != nil { 414 return m.Envs 415 } 416 return nil 417 } 418 419 func (m *ContainerReservation) GetMounts() []*Mount { 420 if m != nil { 421 return m.Mounts 422 } 423 return nil 424 } 425 426 func (m *ContainerReservation) GetDevices() []*DeviceSpec { 427 if m != nil { 428 return m.Devices 429 } 430 return nil 431 } 432 433 // Mount specifies a host volume to mount into a task. 434 // where device library or tools are installed on host and task 435 type Mount struct { 436 // Path of the mount within the task. 437 TaskPath string `protobuf:"bytes,1,opt,name=task_path,json=taskPath,proto3" json:"task_path,omitempty"` 438 // Path of the mount on the host. 439 HostPath string `protobuf:"bytes,2,opt,name=host_path,json=hostPath,proto3" json:"host_path,omitempty"` 440 // If set, the mount is read-only. 441 ReadOnly bool `protobuf:"varint,3,opt,name=read_only,json=readOnly,proto3" json:"read_only,omitempty"` 442 XXX_NoUnkeyedLiteral struct{} `json:"-"` 443 XXX_unrecognized []byte `json:"-"` 444 XXX_sizecache int32 `json:"-"` 445 } 446 447 func (m *Mount) Reset() { *m = Mount{} } 448 func (m *Mount) String() string { return proto.CompactTextString(m) } 449 func (*Mount) ProtoMessage() {} 450 func (*Mount) Descriptor() ([]byte, []int) { 451 return fileDescriptor_device_a4d1cccedbd8401c, []int{8} 452 } 453 func (m *Mount) XXX_Unmarshal(b []byte) error { 454 return xxx_messageInfo_Mount.Unmarshal(m, b) 455 } 456 func (m *Mount) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { 457 return xxx_messageInfo_Mount.Marshal(b, m, deterministic) 458 } 459 func (dst *Mount) XXX_Merge(src proto.Message) { 460 xxx_messageInfo_Mount.Merge(dst, src) 461 } 462 func (m *Mount) XXX_Size() int { 463 return xxx_messageInfo_Mount.Size(m) 464 } 465 func (m *Mount) XXX_DiscardUnknown() { 466 xxx_messageInfo_Mount.DiscardUnknown(m) 467 } 468 469 var xxx_messageInfo_Mount proto.InternalMessageInfo 470 471 func (m *Mount) GetTaskPath() string { 472 if m != nil { 473 return m.TaskPath 474 } 475 return "" 476 } 477 478 func (m *Mount) GetHostPath() string { 479 if m != nil { 480 return m.HostPath 481 } 482 return "" 483 } 484 485 func (m *Mount) GetReadOnly() bool { 486 if m != nil { 487 return m.ReadOnly 488 } 489 return false 490 } 491 492 // DeviceSpec specifies a host device to mount into a task. 493 type DeviceSpec struct { 494 // Path of the device within the task. 495 TaskPath string `protobuf:"bytes,1,opt,name=task_path,json=taskPath,proto3" json:"task_path,omitempty"` 496 // Path of the device on the host. 497 HostPath string `protobuf:"bytes,2,opt,name=host_path,json=hostPath,proto3" json:"host_path,omitempty"` 498 // Cgroups permissions of the device, candidates are one or more of 499 // * r - allows task to read from the specified device. 500 // * w - allows task to write to the specified device. 501 // * m - allows task to create device files that do not yet exist 502 Permissions string `protobuf:"bytes,3,opt,name=permissions,proto3" json:"permissions,omitempty"` 503 XXX_NoUnkeyedLiteral struct{} `json:"-"` 504 XXX_unrecognized []byte `json:"-"` 505 XXX_sizecache int32 `json:"-"` 506 } 507 508 func (m *DeviceSpec) Reset() { *m = DeviceSpec{} } 509 func (m *DeviceSpec) String() string { return proto.CompactTextString(m) } 510 func (*DeviceSpec) ProtoMessage() {} 511 func (*DeviceSpec) Descriptor() ([]byte, []int) { 512 return fileDescriptor_device_a4d1cccedbd8401c, []int{9} 513 } 514 func (m *DeviceSpec) XXX_Unmarshal(b []byte) error { 515 return xxx_messageInfo_DeviceSpec.Unmarshal(m, b) 516 } 517 func (m *DeviceSpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { 518 return xxx_messageInfo_DeviceSpec.Marshal(b, m, deterministic) 519 } 520 func (dst *DeviceSpec) XXX_Merge(src proto.Message) { 521 xxx_messageInfo_DeviceSpec.Merge(dst, src) 522 } 523 func (m *DeviceSpec) XXX_Size() int { 524 return xxx_messageInfo_DeviceSpec.Size(m) 525 } 526 func (m *DeviceSpec) XXX_DiscardUnknown() { 527 xxx_messageInfo_DeviceSpec.DiscardUnknown(m) 528 } 529 530 var xxx_messageInfo_DeviceSpec proto.InternalMessageInfo 531 532 func (m *DeviceSpec) GetTaskPath() string { 533 if m != nil { 534 return m.TaskPath 535 } 536 return "" 537 } 538 539 func (m *DeviceSpec) GetHostPath() string { 540 if m != nil { 541 return m.HostPath 542 } 543 return "" 544 } 545 546 func (m *DeviceSpec) GetPermissions() string { 547 if m != nil { 548 return m.Permissions 549 } 550 return "" 551 } 552 553 // StatsRequest is used to parameterize the retrieval of statistics. 554 type StatsRequest struct { 555 // collection_interval is the duration in which to collect statistics. 556 CollectionInterval *duration.Duration `protobuf:"bytes,1,opt,name=collection_interval,json=collectionInterval,proto3" json:"collection_interval,omitempty"` 557 XXX_NoUnkeyedLiteral struct{} `json:"-"` 558 XXX_unrecognized []byte `json:"-"` 559 XXX_sizecache int32 `json:"-"` 560 } 561 562 func (m *StatsRequest) Reset() { *m = StatsRequest{} } 563 func (m *StatsRequest) String() string { return proto.CompactTextString(m) } 564 func (*StatsRequest) ProtoMessage() {} 565 func (*StatsRequest) Descriptor() ([]byte, []int) { 566 return fileDescriptor_device_a4d1cccedbd8401c, []int{10} 567 } 568 func (m *StatsRequest) XXX_Unmarshal(b []byte) error { 569 return xxx_messageInfo_StatsRequest.Unmarshal(m, b) 570 } 571 func (m *StatsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { 572 return xxx_messageInfo_StatsRequest.Marshal(b, m, deterministic) 573 } 574 func (dst *StatsRequest) XXX_Merge(src proto.Message) { 575 xxx_messageInfo_StatsRequest.Merge(dst, src) 576 } 577 func (m *StatsRequest) XXX_Size() int { 578 return xxx_messageInfo_StatsRequest.Size(m) 579 } 580 func (m *StatsRequest) XXX_DiscardUnknown() { 581 xxx_messageInfo_StatsRequest.DiscardUnknown(m) 582 } 583 584 var xxx_messageInfo_StatsRequest proto.InternalMessageInfo 585 586 func (m *StatsRequest) GetCollectionInterval() *duration.Duration { 587 if m != nil { 588 return m.CollectionInterval 589 } 590 return nil 591 } 592 593 // StatsResponse returns the statistics for each device group. 594 type StatsResponse struct { 595 // groups contains statistics for each device group. 596 Groups []*DeviceGroupStats `protobuf:"bytes,1,rep,name=groups,proto3" json:"groups,omitempty"` 597 XXX_NoUnkeyedLiteral struct{} `json:"-"` 598 XXX_unrecognized []byte `json:"-"` 599 XXX_sizecache int32 `json:"-"` 600 } 601 602 func (m *StatsResponse) Reset() { *m = StatsResponse{} } 603 func (m *StatsResponse) String() string { return proto.CompactTextString(m) } 604 func (*StatsResponse) ProtoMessage() {} 605 func (*StatsResponse) Descriptor() ([]byte, []int) { 606 return fileDescriptor_device_a4d1cccedbd8401c, []int{11} 607 } 608 func (m *StatsResponse) XXX_Unmarshal(b []byte) error { 609 return xxx_messageInfo_StatsResponse.Unmarshal(m, b) 610 } 611 func (m *StatsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { 612 return xxx_messageInfo_StatsResponse.Marshal(b, m, deterministic) 613 } 614 func (dst *StatsResponse) XXX_Merge(src proto.Message) { 615 xxx_messageInfo_StatsResponse.Merge(dst, src) 616 } 617 func (m *StatsResponse) XXX_Size() int { 618 return xxx_messageInfo_StatsResponse.Size(m) 619 } 620 func (m *StatsResponse) XXX_DiscardUnknown() { 621 xxx_messageInfo_StatsResponse.DiscardUnknown(m) 622 } 623 624 var xxx_messageInfo_StatsResponse proto.InternalMessageInfo 625 626 func (m *StatsResponse) GetGroups() []*DeviceGroupStats { 627 if m != nil { 628 return m.Groups 629 } 630 return nil 631 } 632 633 // DeviceGroupStats contains statistics for each device of a particular 634 // device group, identified by the vendor, type and name of the device. 635 type DeviceGroupStats struct { 636 Vendor string `protobuf:"bytes,1,opt,name=vendor,proto3" json:"vendor,omitempty"` 637 Type string `protobuf:"bytes,2,opt,name=type,proto3" json:"type,omitempty"` 638 Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` 639 // instance_stats is a mapping of each device ID to its statistics. 640 InstanceStats map[string]*DeviceStats `protobuf:"bytes,4,rep,name=instance_stats,json=instanceStats,proto3" json:"instance_stats,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` 641 XXX_NoUnkeyedLiteral struct{} `json:"-"` 642 XXX_unrecognized []byte `json:"-"` 643 XXX_sizecache int32 `json:"-"` 644 } 645 646 func (m *DeviceGroupStats) Reset() { *m = DeviceGroupStats{} } 647 func (m *DeviceGroupStats) String() string { return proto.CompactTextString(m) } 648 func (*DeviceGroupStats) ProtoMessage() {} 649 func (*DeviceGroupStats) Descriptor() ([]byte, []int) { 650 return fileDescriptor_device_a4d1cccedbd8401c, []int{12} 651 } 652 func (m *DeviceGroupStats) XXX_Unmarshal(b []byte) error { 653 return xxx_messageInfo_DeviceGroupStats.Unmarshal(m, b) 654 } 655 func (m *DeviceGroupStats) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { 656 return xxx_messageInfo_DeviceGroupStats.Marshal(b, m, deterministic) 657 } 658 func (dst *DeviceGroupStats) XXX_Merge(src proto.Message) { 659 xxx_messageInfo_DeviceGroupStats.Merge(dst, src) 660 } 661 func (m *DeviceGroupStats) XXX_Size() int { 662 return xxx_messageInfo_DeviceGroupStats.Size(m) 663 } 664 func (m *DeviceGroupStats) XXX_DiscardUnknown() { 665 xxx_messageInfo_DeviceGroupStats.DiscardUnknown(m) 666 } 667 668 var xxx_messageInfo_DeviceGroupStats proto.InternalMessageInfo 669 670 func (m *DeviceGroupStats) GetVendor() string { 671 if m != nil { 672 return m.Vendor 673 } 674 return "" 675 } 676 677 func (m *DeviceGroupStats) GetType() string { 678 if m != nil { 679 return m.Type 680 } 681 return "" 682 } 683 684 func (m *DeviceGroupStats) GetName() string { 685 if m != nil { 686 return m.Name 687 } 688 return "" 689 } 690 691 func (m *DeviceGroupStats) GetInstanceStats() map[string]*DeviceStats { 692 if m != nil { 693 return m.InstanceStats 694 } 695 return nil 696 } 697 698 // DeviceStats is the statistics for an individual device 699 type DeviceStats struct { 700 // summary exposes a single summary metric that should be the most 701 // informative to users. 702 Summary *proto1.StatValue `protobuf:"bytes,1,opt,name=summary,proto3" json:"summary,omitempty"` 703 // stats contains the verbose statistics for the device. 704 Stats *proto1.StatObject `protobuf:"bytes,2,opt,name=stats,proto3" json:"stats,omitempty"` 705 // timestamp is the time the statistics were collected. 706 Timestamp *timestamp.Timestamp `protobuf:"bytes,3,opt,name=timestamp,proto3" json:"timestamp,omitempty"` 707 XXX_NoUnkeyedLiteral struct{} `json:"-"` 708 XXX_unrecognized []byte `json:"-"` 709 XXX_sizecache int32 `json:"-"` 710 } 711 712 func (m *DeviceStats) Reset() { *m = DeviceStats{} } 713 func (m *DeviceStats) String() string { return proto.CompactTextString(m) } 714 func (*DeviceStats) ProtoMessage() {} 715 func (*DeviceStats) Descriptor() ([]byte, []int) { 716 return fileDescriptor_device_a4d1cccedbd8401c, []int{13} 717 } 718 func (m *DeviceStats) XXX_Unmarshal(b []byte) error { 719 return xxx_messageInfo_DeviceStats.Unmarshal(m, b) 720 } 721 func (m *DeviceStats) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { 722 return xxx_messageInfo_DeviceStats.Marshal(b, m, deterministic) 723 } 724 func (dst *DeviceStats) XXX_Merge(src proto.Message) { 725 xxx_messageInfo_DeviceStats.Merge(dst, src) 726 } 727 func (m *DeviceStats) XXX_Size() int { 728 return xxx_messageInfo_DeviceStats.Size(m) 729 } 730 func (m *DeviceStats) XXX_DiscardUnknown() { 731 xxx_messageInfo_DeviceStats.DiscardUnknown(m) 732 } 733 734 var xxx_messageInfo_DeviceStats proto.InternalMessageInfo 735 736 func (m *DeviceStats) GetSummary() *proto1.StatValue { 737 if m != nil { 738 return m.Summary 739 } 740 return nil 741 } 742 743 func (m *DeviceStats) GetStats() *proto1.StatObject { 744 if m != nil { 745 return m.Stats 746 } 747 return nil 748 } 749 750 func (m *DeviceStats) GetTimestamp() *timestamp.Timestamp { 751 if m != nil { 752 return m.Timestamp 753 } 754 return nil 755 } 756 757 func init() { 758 proto.RegisterType((*FingerprintRequest)(nil), "hashicorp.nomad.plugins.device.FingerprintRequest") 759 proto.RegisterType((*FingerprintResponse)(nil), "hashicorp.nomad.plugins.device.FingerprintResponse") 760 proto.RegisterType((*DeviceGroup)(nil), "hashicorp.nomad.plugins.device.DeviceGroup") 761 proto.RegisterMapType((map[string]*proto1.Attribute)(nil), "hashicorp.nomad.plugins.device.DeviceGroup.AttributesEntry") 762 proto.RegisterType((*DetectedDevice)(nil), "hashicorp.nomad.plugins.device.DetectedDevice") 763 proto.RegisterType((*DeviceLocality)(nil), "hashicorp.nomad.plugins.device.DeviceLocality") 764 proto.RegisterType((*ReserveRequest)(nil), "hashicorp.nomad.plugins.device.ReserveRequest") 765 proto.RegisterType((*ReserveResponse)(nil), "hashicorp.nomad.plugins.device.ReserveResponse") 766 proto.RegisterType((*ContainerReservation)(nil), "hashicorp.nomad.plugins.device.ContainerReservation") 767 proto.RegisterMapType((map[string]string)(nil), "hashicorp.nomad.plugins.device.ContainerReservation.EnvsEntry") 768 proto.RegisterType((*Mount)(nil), "hashicorp.nomad.plugins.device.Mount") 769 proto.RegisterType((*DeviceSpec)(nil), "hashicorp.nomad.plugins.device.DeviceSpec") 770 proto.RegisterType((*StatsRequest)(nil), "hashicorp.nomad.plugins.device.StatsRequest") 771 proto.RegisterType((*StatsResponse)(nil), "hashicorp.nomad.plugins.device.StatsResponse") 772 proto.RegisterType((*DeviceGroupStats)(nil), "hashicorp.nomad.plugins.device.DeviceGroupStats") 773 proto.RegisterMapType((map[string]*DeviceStats)(nil), "hashicorp.nomad.plugins.device.DeviceGroupStats.InstanceStatsEntry") 774 proto.RegisterType((*DeviceStats)(nil), "hashicorp.nomad.plugins.device.DeviceStats") 775 } 776 777 // Reference imports to suppress errors if they are not otherwise used. 778 var _ context.Context 779 var _ grpc.ClientConn 780 781 // This is a compile-time assertion to ensure that this generated file 782 // is compatible with the grpc package it is being compiled against. 783 const _ = grpc.SupportPackageIsVersion4 784 785 // DevicePluginClient is the client API for DevicePlugin service. 786 // 787 // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. 788 type DevicePluginClient interface { 789 // Fingerprint allows the device plugin to return a set of 790 // detected devices and provide a mechanism to update the state of 791 // the device. 792 Fingerprint(ctx context.Context, in *FingerprintRequest, opts ...grpc.CallOption) (DevicePlugin_FingerprintClient, error) 793 // Reserve is called by the client before starting an allocation 794 // that requires access to the plugin’s devices. The plugin can use 795 // this to run any setup steps and provides the mounting details to 796 // the Nomad client 797 Reserve(ctx context.Context, in *ReserveRequest, opts ...grpc.CallOption) (*ReserveResponse, error) 798 // Stats returns a stream of device statistics. 799 Stats(ctx context.Context, in *StatsRequest, opts ...grpc.CallOption) (DevicePlugin_StatsClient, error) 800 } 801 802 type devicePluginClient struct { 803 cc *grpc.ClientConn 804 } 805 806 func NewDevicePluginClient(cc *grpc.ClientConn) DevicePluginClient { 807 return &devicePluginClient{cc} 808 } 809 810 func (c *devicePluginClient) Fingerprint(ctx context.Context, in *FingerprintRequest, opts ...grpc.CallOption) (DevicePlugin_FingerprintClient, error) { 811 stream, err := c.cc.NewStream(ctx, &_DevicePlugin_serviceDesc.Streams[0], "/hashicorp.nomad.plugins.device.DevicePlugin/Fingerprint", opts...) 812 if err != nil { 813 return nil, err 814 } 815 x := &devicePluginFingerprintClient{stream} 816 if err := x.ClientStream.SendMsg(in); err != nil { 817 return nil, err 818 } 819 if err := x.ClientStream.CloseSend(); err != nil { 820 return nil, err 821 } 822 return x, nil 823 } 824 825 type DevicePlugin_FingerprintClient interface { 826 Recv() (*FingerprintResponse, error) 827 grpc.ClientStream 828 } 829 830 type devicePluginFingerprintClient struct { 831 grpc.ClientStream 832 } 833 834 func (x *devicePluginFingerprintClient) Recv() (*FingerprintResponse, error) { 835 m := new(FingerprintResponse) 836 if err := x.ClientStream.RecvMsg(m); err != nil { 837 return nil, err 838 } 839 return m, nil 840 } 841 842 func (c *devicePluginClient) Reserve(ctx context.Context, in *ReserveRequest, opts ...grpc.CallOption) (*ReserveResponse, error) { 843 out := new(ReserveResponse) 844 err := c.cc.Invoke(ctx, "/hashicorp.nomad.plugins.device.DevicePlugin/Reserve", in, out, opts...) 845 if err != nil { 846 return nil, err 847 } 848 return out, nil 849 } 850 851 func (c *devicePluginClient) Stats(ctx context.Context, in *StatsRequest, opts ...grpc.CallOption) (DevicePlugin_StatsClient, error) { 852 stream, err := c.cc.NewStream(ctx, &_DevicePlugin_serviceDesc.Streams[1], "/hashicorp.nomad.plugins.device.DevicePlugin/Stats", opts...) 853 if err != nil { 854 return nil, err 855 } 856 x := &devicePluginStatsClient{stream} 857 if err := x.ClientStream.SendMsg(in); err != nil { 858 return nil, err 859 } 860 if err := x.ClientStream.CloseSend(); err != nil { 861 return nil, err 862 } 863 return x, nil 864 } 865 866 type DevicePlugin_StatsClient interface { 867 Recv() (*StatsResponse, error) 868 grpc.ClientStream 869 } 870 871 type devicePluginStatsClient struct { 872 grpc.ClientStream 873 } 874 875 func (x *devicePluginStatsClient) Recv() (*StatsResponse, error) { 876 m := new(StatsResponse) 877 if err := x.ClientStream.RecvMsg(m); err != nil { 878 return nil, err 879 } 880 return m, nil 881 } 882 883 // DevicePluginServer is the server API for DevicePlugin service. 884 type DevicePluginServer interface { 885 // Fingerprint allows the device plugin to return a set of 886 // detected devices and provide a mechanism to update the state of 887 // the device. 888 Fingerprint(*FingerprintRequest, DevicePlugin_FingerprintServer) error 889 // Reserve is called by the client before starting an allocation 890 // that requires access to the plugin’s devices. The plugin can use 891 // this to run any setup steps and provides the mounting details to 892 // the Nomad client 893 Reserve(context.Context, *ReserveRequest) (*ReserveResponse, error) 894 // Stats returns a stream of device statistics. 895 Stats(*StatsRequest, DevicePlugin_StatsServer) error 896 } 897 898 func RegisterDevicePluginServer(s *grpc.Server, srv DevicePluginServer) { 899 s.RegisterService(&_DevicePlugin_serviceDesc, srv) 900 } 901 902 func _DevicePlugin_Fingerprint_Handler(srv interface{}, stream grpc.ServerStream) error { 903 m := new(FingerprintRequest) 904 if err := stream.RecvMsg(m); err != nil { 905 return err 906 } 907 return srv.(DevicePluginServer).Fingerprint(m, &devicePluginFingerprintServer{stream}) 908 } 909 910 type DevicePlugin_FingerprintServer interface { 911 Send(*FingerprintResponse) error 912 grpc.ServerStream 913 } 914 915 type devicePluginFingerprintServer struct { 916 grpc.ServerStream 917 } 918 919 func (x *devicePluginFingerprintServer) Send(m *FingerprintResponse) error { 920 return x.ServerStream.SendMsg(m) 921 } 922 923 func _DevicePlugin_Reserve_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { 924 in := new(ReserveRequest) 925 if err := dec(in); err != nil { 926 return nil, err 927 } 928 if interceptor == nil { 929 return srv.(DevicePluginServer).Reserve(ctx, in) 930 } 931 info := &grpc.UnaryServerInfo{ 932 Server: srv, 933 FullMethod: "/hashicorp.nomad.plugins.device.DevicePlugin/Reserve", 934 } 935 handler := func(ctx context.Context, req interface{}) (interface{}, error) { 936 return srv.(DevicePluginServer).Reserve(ctx, req.(*ReserveRequest)) 937 } 938 return interceptor(ctx, in, info, handler) 939 } 940 941 func _DevicePlugin_Stats_Handler(srv interface{}, stream grpc.ServerStream) error { 942 m := new(StatsRequest) 943 if err := stream.RecvMsg(m); err != nil { 944 return err 945 } 946 return srv.(DevicePluginServer).Stats(m, &devicePluginStatsServer{stream}) 947 } 948 949 type DevicePlugin_StatsServer interface { 950 Send(*StatsResponse) error 951 grpc.ServerStream 952 } 953 954 type devicePluginStatsServer struct { 955 grpc.ServerStream 956 } 957 958 func (x *devicePluginStatsServer) Send(m *StatsResponse) error { 959 return x.ServerStream.SendMsg(m) 960 } 961 962 var _DevicePlugin_serviceDesc = grpc.ServiceDesc{ 963 ServiceName: "hashicorp.nomad.plugins.device.DevicePlugin", 964 HandlerType: (*DevicePluginServer)(nil), 965 Methods: []grpc.MethodDesc{ 966 { 967 MethodName: "Reserve", 968 Handler: _DevicePlugin_Reserve_Handler, 969 }, 970 }, 971 Streams: []grpc.StreamDesc{ 972 { 973 StreamName: "Fingerprint", 974 Handler: _DevicePlugin_Fingerprint_Handler, 975 ServerStreams: true, 976 }, 977 { 978 StreamName: "Stats", 979 Handler: _DevicePlugin_Stats_Handler, 980 ServerStreams: true, 981 }, 982 }, 983 Metadata: "plugins/device/proto/device.proto", 984 } 985 986 func init() { 987 proto.RegisterFile("plugins/device/proto/device.proto", fileDescriptor_device_a4d1cccedbd8401c) 988 } 989 990 var fileDescriptor_device_a4d1cccedbd8401c = []byte{ 991 // 979 bytes of a gzipped FileDescriptorProto 992 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x56, 0xef, 0x8e, 0x1b, 0x35, 993 0x10, 0x27, 0xb9, 0xcb, 0x25, 0x99, 0xdc, 0x5d, 0x8b, 0x7b, 0x42, 0x61, 0x81, 0xf6, 0x58, 0x09, 994 0xa9, 0x02, 0xba, 0x29, 0x29, 0x12, 0x15, 0x08, 0xa4, 0xf6, 0x52, 0xee, 0xc2, 0x9f, 0x5e, 0xe5, 995 0x56, 0x48, 0x2d, 0x12, 0x2b, 0x67, 0xd7, 0x64, 0xdd, 0xee, 0xda, 0x8b, 0xed, 0x4d, 0x15, 0x3e, 996 0xf1, 0x38, 0x7c, 0xe1, 0x05, 0x78, 0x18, 0x3e, 0xf0, 0x24, 0x68, 0x6d, 0x6f, 0xb2, 0xf7, 0xa7, 997 0x24, 0x69, 0x3f, 0xad, 0x3d, 0x33, 0xbf, 0x99, 0xf1, 0xcc, 0xcf, 0xe3, 0x85, 0x0f, 0xf3, 0xb4, 998 0x98, 0x32, 0xae, 0x06, 0x31, 0x9d, 0xb1, 0x88, 0x0e, 0x72, 0x29, 0xb4, 0x70, 0x9b, 0xc0, 0x6c, 999 0xd0, 0xf5, 0x84, 0xa8, 0x84, 0x45, 0x42, 0xe6, 0x01, 0x17, 0x19, 0x89, 0x03, 0x07, 0x09, 0xac, 1000 0x95, 0x77, 0x63, 0x2a, 0xc4, 0x34, 0x75, 0xd0, 0x49, 0xf1, 0xeb, 0x40, 0xb3, 0x8c, 0x2a, 0x4d, 1001 0xb2, 0xdc, 0x3a, 0xf0, 0xae, 0x9f, 0x37, 0x88, 0x0b, 0x49, 0x34, 0x13, 0xdc, 0xe9, 0x8f, 0xa7, 1002 0x4c, 0x27, 0xc5, 0x24, 0x88, 0x44, 0x36, 0x58, 0xc4, 0x1a, 0x98, 0x58, 0x83, 0x2a, 0x3d, 0x95, 1003 0x10, 0x49, 0xe3, 0x81, 0xd2, 0xb2, 0x88, 0xb4, 0x72, 0x69, 0x12, 0xad, 0x25, 0x9b, 0x14, 0xda, 1004 0x65, 0xea, 0x1d, 0xbd, 0xae, 0x23, 0xa5, 0x89, 0x56, 0xd6, 0x89, 0x7f, 0x00, 0xe8, 0x5b, 0xc6, 1005 0xa7, 0x54, 0xe6, 0x92, 0x71, 0x8d, 0xe9, 0x6f, 0x05, 0x55, 0xda, 0xa7, 0x70, 0xed, 0x8c, 0x54, 1006 0xe5, 0x82, 0x2b, 0x8a, 0x1e, 0xc2, 0xae, 0xad, 0x42, 0x38, 0x95, 0xa2, 0xc8, 0xfb, 0x8d, 0xc3, 1007 0xad, 0x9b, 0xbd, 0xe1, 0x27, 0xc1, 0xff, 0x97, 0x2c, 0x18, 0x99, 0xcf, 0x71, 0x09, 0xc1, 0xbd, 1008 0x78, 0xb9, 0xf1, 0xff, 0xd8, 0x82, 0x5e, 0x4d, 0x89, 0xde, 0x81, 0x9d, 0x19, 0xe5, 0xb1, 0x90, 1009 0xfd, 0xc6, 0x61, 0xe3, 0x66, 0x17, 0xbb, 0x1d, 0xba, 0x01, 0x0e, 0x16, 0xea, 0x79, 0x4e, 0xfb, 1010 0x4d, 0xa3, 0x04, 0x2b, 0x7a, 0x32, 0xcf, 0x69, 0xcd, 0x80, 0x93, 0x8c, 0xf6, 0xb7, 0xea, 0x06, 1011 0x0f, 0x49, 0x46, 0xd1, 0x09, 0xb4, 0xed, 0x4e, 0xf5, 0xb7, 0x4d, 0xd2, 0xc1, 0xea, 0xa4, 0x35, 1012 0x8d, 0x34, 0x8d, 0x6d, 0x7e, 0xb8, 0x82, 0xa3, 0x9f, 0x01, 0x16, 0x8d, 0x50, 0xfd, 0x96, 0x71, 1013 0xf6, 0xd5, 0x06, 0x15, 0x08, 0xee, 0x2d, 0xd0, 0x0f, 0xb8, 0x96, 0x73, 0x5c, 0x73, 0xe7, 0xe5, 1014 0x70, 0xe5, 0x9c, 0x1a, 0x5d, 0x85, 0xad, 0x17, 0x74, 0xee, 0x0a, 0x52, 0x2e, 0xd1, 0x31, 0xb4, 1015 0x66, 0x24, 0x2d, 0x6c, 0x1d, 0x7a, 0xc3, 0xcf, 0x5e, 0x19, 0xdc, 0x36, 0x3f, 0x70, 0xcd, 0x5f, 1016 0x06, 0xc6, 0x16, 0xff, 0x65, 0xf3, 0x6e, 0xc3, 0xff, 0xbb, 0x01, 0xfb, 0x67, 0x8f, 0x8a, 0xf6, 1017 0xa1, 0x39, 0x1e, 0xb9, 0x80, 0xcd, 0xf1, 0x08, 0xf5, 0xa1, 0x9d, 0x50, 0x92, 0xea, 0x64, 0x6e, 1018 0x22, 0x76, 0x70, 0xb5, 0x45, 0xb7, 0x00, 0xd9, 0x65, 0x18, 0x53, 0x15, 0x49, 0x96, 0x97, 0x34, 1019 0x77, 0xd5, 0x7f, 0xdb, 0x6a, 0x46, 0x4b, 0x05, 0x3a, 0x85, 0x5e, 0xf2, 0x32, 0x4c, 0x45, 0x44, 1020 0x52, 0xa6, 0xe7, 0xfd, 0x6d, 0x93, 0x7e, 0xb0, 0x5e, 0xed, 0x7e, 0x70, 0x28, 0x0c, 0xc9, 0xcb, 1021 0x6a, 0xed, 0x07, 0x65, 0xee, 0x75, 0x2d, 0x7a, 0x1f, 0x20, 0x8f, 0x58, 0x38, 0x29, 0x54, 0xc8, 1022 0x62, 0x77, 0x86, 0x4e, 0x1e, 0xb1, 0xfb, 0x85, 0x1a, 0xc7, 0xfe, 0x00, 0xf6, 0x31, 0x55, 0x54, 1023 0xce, 0xa8, 0x23, 0x3a, 0xfa, 0x00, 0x1c, 0x4b, 0x42, 0x16, 0x2b, 0xc3, 0xe7, 0x2e, 0xee, 0x5a, 1024 0xc9, 0x38, 0x56, 0x7e, 0x0a, 0x57, 0x16, 0x00, 0x77, 0x07, 0x9e, 0xc2, 0x5e, 0x24, 0xb8, 0x26, 1025 0x8c, 0x53, 0x19, 0x4a, 0xaa, 0x4c, 0x90, 0xde, 0xf0, 0xf3, 0x55, 0xc7, 0x38, 0xaa, 0x40, 0xd6, 1026 0xa1, 0x99, 0x08, 0x78, 0x37, 0xaa, 0x49, 0xfd, 0x3f, 0x9b, 0x70, 0x70, 0x99, 0x19, 0xc2, 0xb0, 1027 0x4d, 0xf9, 0x4c, 0xb9, 0xfb, 0xf6, 0xcd, 0xeb, 0x84, 0x0a, 0x1e, 0xf0, 0x99, 0x23, 0x9c, 0xf1, 1028 0x85, 0xbe, 0x86, 0x9d, 0x4c, 0x14, 0x5c, 0xab, 0x7e, 0xd3, 0x78, 0xfd, 0x68, 0x95, 0xd7, 0x1f, 1029 0x4b, 0x6b, 0xec, 0x40, 0x68, 0xb4, 0xbc, 0x50, 0x5b, 0x06, 0xff, 0xf1, 0x7a, 0x7d, 0x7c, 0x9c, 1030 0xd3, 0x68, 0x71, 0x99, 0xbc, 0x2f, 0xa0, 0xbb, 0xc8, 0xeb, 0x12, 0xa6, 0x1f, 0xd4, 0x99, 0xde, 1031 0xad, 0xd3, 0xf6, 0x17, 0x68, 0x99, 0x7c, 0xd0, 0x7b, 0xd0, 0xd5, 0x44, 0xbd, 0x08, 0x73, 0xa2, 1032 0x93, 0xaa, 0xdf, 0xa5, 0xe0, 0x11, 0xd1, 0x49, 0xa9, 0x4c, 0x84, 0xd2, 0x56, 0x69, 0x7d, 0x74, 1033 0x4a, 0x41, 0xa5, 0x94, 0x94, 0xc4, 0xa1, 0xe0, 0xe9, 0xdc, 0x70, 0xb6, 0x83, 0x3b, 0xa5, 0xe0, 1034 0x94, 0xa7, 0x73, 0x3f, 0x01, 0x58, 0xe6, 0xfb, 0x06, 0x41, 0x0e, 0xa1, 0x97, 0x53, 0x99, 0x31, 1035 0xa5, 0x98, 0xe0, 0xca, 0x5d, 0x8d, 0xba, 0xc8, 0x7f, 0x06, 0xbb, 0x8f, 0xcb, 0x79, 0x5c, 0x31, 1036 0xf2, 0x3b, 0xb8, 0x16, 0x89, 0x34, 0xa5, 0x51, 0xd9, 0xb5, 0x90, 0x71, 0x5d, 0x76, 0x30, 0x75, 1037 0x2c, 0x7b, 0x37, 0xb0, 0x8f, 0x4b, 0x50, 0x3d, 0x2e, 0xc1, 0xc8, 0x3d, 0x2e, 0x18, 0x2d, 0x51, 1038 0x63, 0x07, 0xf2, 0x9f, 0xc2, 0x9e, 0xf3, 0xed, 0xc8, 0x7b, 0x02, 0x3b, 0x66, 0x72, 0x57, 0x54, 1039 0xba, 0xbd, 0xc1, 0xe0, 0xb2, 0x9e, 0x1c, 0xde, 0xff, 0xab, 0x09, 0x57, 0xcf, 0x2b, 0x5f, 0x39, 1040 0xbf, 0x11, 0x6c, 0xd7, 0x06, 0xb7, 0x59, 0x97, 0xb2, 0xda, 0xac, 0x36, 0x6b, 0xf4, 0x1c, 0xf6, 1041 0x19, 0x57, 0x9a, 0xf0, 0x88, 0x86, 0xe6, 0x91, 0x72, 0xc3, 0xfa, 0x68, 0xd3, 0x34, 0x83, 0xb1, 1042 0x73, 0x63, 0x76, 0x96, 0xf6, 0x7b, 0xac, 0x2e, 0xf3, 0x32, 0x40, 0x17, 0x8d, 0x2e, 0xe1, 0xe0, 1043 0xbd, 0xb3, 0xd3, 0x76, 0xcd, 0xc7, 0xce, 0x16, 0xab, 0x46, 0xd8, 0x7f, 0x1a, 0xd5, 0x53, 0x67, 1044 0x4b, 0xf5, 0x3d, 0xb4, 0x55, 0x91, 0x65, 0x44, 0xce, 0x5d, 0x6b, 0xd7, 0x1e, 0xe3, 0x25, 0xfe, 1045 0xa7, 0xd2, 0x2f, 0xae, 0x3c, 0xa0, 0x13, 0x68, 0xd9, 0x72, 0xd9, 0x1c, 0x87, 0x9b, 0xb8, 0x3a, 1046 0x9d, 0x3c, 0xa7, 0x91, 0xc6, 0xd6, 0x01, 0xba, 0x0b, 0xdd, 0xc5, 0xff, 0x8c, 0x69, 0x4d, 0x6f, 1047 0xe8, 0x5d, 0xe0, 0xdc, 0x93, 0xca, 0x02, 0x2f, 0x8d, 0x87, 0xff, 0x36, 0x61, 0xd7, 0x1e, 0xf0, 1048 0x91, 0x09, 0x86, 0x7e, 0x87, 0x5e, 0xed, 0x1f, 0x02, 0x0d, 0x57, 0x15, 0xee, 0xe2, 0x6f, 0x88, 1049 0x77, 0x67, 0x23, 0x8c, 0xe5, 0xb8, 0xff, 0xd6, 0xed, 0x06, 0x4a, 0xa1, 0xed, 0xe6, 0x36, 0x5a, 1050 0xf9, 0xbe, 0x9c, 0x7d, 0x11, 0xbc, 0xc1, 0xda, 0xf6, 0x55, 0x3c, 0x94, 0x40, 0xcb, 0x36, 0xf5, 1051 0xd3, 0x55, 0xd8, 0xfa, 0x4d, 0xf7, 0x6e, 0xad, 0x69, 0xbd, 0x3c, 0xd7, 0xfd, 0xf6, 0xb3, 0x96, 1052 0xed, 0xc2, 0x8e, 0xf9, 0xdc, 0xf9, 0x2f, 0x00, 0x00, 0xff, 0xff, 0x12, 0xb9, 0x76, 0xd8, 0xd1, 1053 0x0a, 0x00, 0x00, 1054 }