Use protobuf Timestamp type instead of uint64
This will ensure nanoseconds are taken in account. Signed-off-by: Kenfe-Mickael Laventure <mickael.laventure@gmail.com>
This commit is contained in:
		| @@ -17,6 +17,7 @@ import ( | ||||
| 	"github.com/docker/containerd/api/grpc/types" | ||||
| 	"github.com/docker/containerd/runtime" | ||||
| 	"github.com/docker/containerd/supervisor" | ||||
| 	"github.com/golang/protobuf/ptypes" | ||||
| 	"golang.org/x/net/context" | ||||
| ) | ||||
|  | ||||
| @@ -310,16 +311,24 @@ func (s *apiServer) UpdateProcess(ctx context.Context, r *types.UpdateProcessReq | ||||
|  | ||||
| func (s *apiServer) Events(r *types.EventsRequest, stream types.API_EventsServer) error { | ||||
| 	t := time.Time{} | ||||
| 	if r.Timestamp != 0 { | ||||
| 		t = time.Unix(int64(r.Timestamp), 0) | ||||
| 	if r.Timestamp != nil { | ||||
| 		from, err := ptypes.Timestamp(r.Timestamp) | ||||
| 		if err != nil { | ||||
| 			return err | ||||
| 		} | ||||
| 		t = from | ||||
| 	} | ||||
| 	events := s.sv.Events(t) | ||||
| 	defer s.sv.Unsubscribe(events) | ||||
| 	for e := range events { | ||||
| 		tsp, err := ptypes.TimestampProto(e.Timestamp) | ||||
| 		if err != nil { | ||||
| 			return err | ||||
| 		} | ||||
| 		if err := stream.Send(&types.Event{ | ||||
| 			Id:        e.ID, | ||||
| 			Type:      e.Type, | ||||
| 			Timestamp: uint64(e.Timestamp.Unix()), | ||||
| 			Timestamp: tsp, | ||||
| 			Pid:       e.PID, | ||||
| 			Status:    uint32(e.Status), | ||||
| 		}); err != nil { | ||||
| @@ -330,8 +339,9 @@ func (s *apiServer) Events(r *types.EventsRequest, stream types.API_EventsServer | ||||
| } | ||||
|  | ||||
| func convertToPb(st *runtime.Stat) *types.StatsResponse { | ||||
| 	tsp, _ := ptypes.TimestampProto(st.Timestamp) | ||||
| 	pbSt := &types.StatsResponse{ | ||||
| 		Timestamp:   uint64(st.Timestamp.Unix()), | ||||
| 		Timestamp:   tsp, | ||||
| 		CgroupStats: &types.CgroupStats{}, | ||||
| 	} | ||||
| 	systemUsage, _ := getSystemCPUUsage() | ||||
|   | ||||
| @@ -58,6 +58,7 @@ package types | ||||
| import proto "github.com/golang/protobuf/proto" | ||||
| import fmt "fmt" | ||||
| import math "math" | ||||
| import google_protobuf "github.com/golang/protobuf/ptypes/timestamp" | ||||
|  | ||||
| import ( | ||||
| 	context "golang.org/x/net/context" | ||||
| @@ -480,7 +481,8 @@ func (*UpdateContainerResponse) ProtoMessage()               {} | ||||
| func (*UpdateContainerResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{27} } | ||||
|  | ||||
| type EventsRequest struct { | ||||
| 	Timestamp uint64 `protobuf:"varint,1,opt,name=timestamp" json:"timestamp,omitempty"` | ||||
| 	// Tag 1 is deprecated (old uint64 timestamp) | ||||
| 	Timestamp *google_protobuf.Timestamp `protobuf:"bytes,2,opt,name=timestamp" json:"timestamp,omitempty"` | ||||
| } | ||||
|  | ||||
| func (m *EventsRequest) Reset()                    { *m = EventsRequest{} } | ||||
| @@ -488,12 +490,20 @@ func (m *EventsRequest) String() string            { return proto.CompactTextStr | ||||
| func (*EventsRequest) ProtoMessage()               {} | ||||
| func (*EventsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{28} } | ||||
|  | ||||
| func (m *EventsRequest) GetTimestamp() *google_protobuf.Timestamp { | ||||
| 	if m != nil { | ||||
| 		return m.Timestamp | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| type Event struct { | ||||
| 	Type      string `protobuf:"bytes,1,opt,name=type" json:"type,omitempty"` | ||||
| 	Id        string `protobuf:"bytes,2,opt,name=id" json:"id,omitempty"` | ||||
| 	Status    uint32 `protobuf:"varint,3,opt,name=status" json:"status,omitempty"` | ||||
| 	Pid       string `protobuf:"bytes,4,opt,name=pid" json:"pid,omitempty"` | ||||
| 	Timestamp uint64 `protobuf:"varint,5,opt,name=timestamp" json:"timestamp,omitempty"` | ||||
| 	Type   string `protobuf:"bytes,1,opt,name=type" json:"type,omitempty"` | ||||
| 	Id     string `protobuf:"bytes,2,opt,name=id" json:"id,omitempty"` | ||||
| 	Status uint32 `protobuf:"varint,3,opt,name=status" json:"status,omitempty"` | ||||
| 	Pid    string `protobuf:"bytes,4,opt,name=pid" json:"pid,omitempty"` | ||||
| 	// Tag 5 is deprecated (old uint64 timestamp) | ||||
| 	Timestamp *google_protobuf.Timestamp `protobuf:"bytes,6,opt,name=timestamp" json:"timestamp,omitempty"` | ||||
| } | ||||
|  | ||||
| func (m *Event) Reset()                    { *m = Event{} } | ||||
| @@ -501,6 +511,13 @@ func (m *Event) String() string            { return proto.CompactTextString(m) } | ||||
| func (*Event) ProtoMessage()               {} | ||||
| func (*Event) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{29} } | ||||
|  | ||||
| func (m *Event) GetTimestamp() *google_protobuf.Timestamp { | ||||
| 	if m != nil { | ||||
| 		return m.Timestamp | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| type NetworkStats struct { | ||||
| 	Name       string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` | ||||
| 	RxBytes    uint64 `protobuf:"varint,2,opt,name=rx_bytes,json=rxBytes" json:"rx_bytes,omitempty"` | ||||
| @@ -776,7 +793,8 @@ func (m *CgroupStats) GetPidsStats() *PidsStats { | ||||
| type StatsResponse struct { | ||||
| 	NetworkStats []*NetworkStats `protobuf:"bytes,1,rep,name=network_stats,json=networkStats" json:"network_stats,omitempty"` | ||||
| 	CgroupStats  *CgroupStats    `protobuf:"bytes,2,opt,name=cgroup_stats,json=cgroupStats" json:"cgroup_stats,omitempty"` | ||||
| 	Timestamp    uint64          `protobuf:"varint,3,opt,name=timestamp" json:"timestamp,omitempty"` | ||||
| 	// Tag 3 is deprecated (old uint64 timestamp) | ||||
| 	Timestamp *google_protobuf.Timestamp `protobuf:"bytes,4,opt,name=timestamp" json:"timestamp,omitempty"` | ||||
| } | ||||
|  | ||||
| func (m *StatsResponse) Reset()                    { *m = StatsResponse{} } | ||||
| @@ -798,6 +816,13 @@ func (m *StatsResponse) GetCgroupStats() *CgroupStats { | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func (m *StatsResponse) GetTimestamp() *google_protobuf.Timestamp { | ||||
| 	if m != nil { | ||||
| 		return m.Timestamp | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| type StatsRequest struct { | ||||
| 	Id string `protobuf:"bytes,1,opt,name=id" json:"id,omitempty"` | ||||
| } | ||||
| @@ -1316,153 +1341,155 @@ var _API_serviceDesc = grpc.ServiceDesc{ | ||||
| } | ||||
|  | ||||
| var fileDescriptor0 = []byte{ | ||||
| 	// 2361 bytes of a gzipped FileDescriptorProto | ||||
| 	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xec, 0x59, 0xcd, 0x73, 0x1b, 0x4b, | ||||
| 	0x11, 0x8f, 0xbe, 0xad, 0xd6, 0x87, 0xed, 0x8d, 0x3f, 0x14, 0xbd, 0x97, 0xbc, 0xb0, 0xf5, 0x80, | ||||
| 	0x00, 0x0f, 0x13, 0x94, 0xf7, 0x8a, 0x14, 0x54, 0x51, 0x95, 0xd8, 0xe1, 0x11, 0x5e, 0x1c, 0x94, | ||||
| 	0xb5, 0xcd, 0x3b, 0xaa, 0xd6, 0xab, 0x89, 0xb4, 0x58, 0xda, 0xdd, 0xec, 0x8e, 0x6c, 0xf9, 0xc2, | ||||
| 	0x81, 0x03, 0xdc, 0x38, 0x53, 0x05, 0xc5, 0x85, 0x1b, 0x77, 0x0e, 0xfc, 0x05, 0x54, 0xf1, 0x87, | ||||
| 	0x70, 0xe3, 0xce, 0x91, 0x9e, 0x9e, 0xd9, 0xd9, 0x59, 0x7d, 0xd8, 0xe1, 0x40, 0x71, 0x79, 0x17, | ||||
| 	0xd5, 0xf4, 0x6f, 0x7a, 0xba, 0x7b, 0xba, 0x7b, 0x7a, 0x7a, 0x47, 0x50, 0x77, 0x23, 0xff, 0x20, | ||||
| 	0x8a, 0x43, 0x1e, 0x5a, 0x15, 0x7e, 0x1d, 0xb1, 0xc4, 0xbe, 0x07, 0xfb, 0x9f, 0x33, 0x7e, 0xc2, | ||||
| 	0xe2, 0x4b, 0x16, 0xff, 0x82, 0xc5, 0x89, 0x1f, 0x06, 0x0e, 0x7b, 0x37, 0x63, 0x09, 0xb7, 0xe7, | ||||
| 	0xd0, 0x59, 0x9e, 0x4a, 0xa2, 0x30, 0x48, 0x98, 0xb5, 0x03, 0x95, 0xa9, 0xfb, 0xcb, 0x30, 0xee, | ||||
| 	0x14, 0x1e, 0x16, 0x1e, 0xb5, 0x1c, 0x49, 0x10, 0xea, 0x07, 0x88, 0x16, 0x15, 0x2a, 0x08, 0x81, | ||||
| 	0x46, 0x2e, 0xf7, 0xc6, 0x9d, 0x92, 0x44, 0x89, 0xb0, 0xba, 0xb0, 0x11, 0xb3, 0x4b, 0x5f, 0x48, | ||||
| 	0xed, 0x94, 0x71, 0xa2, 0xee, 0x68, 0xda, 0xfe, 0x4d, 0x01, 0x76, 0xce, 0xa2, 0xa1, 0xcb, 0x59, | ||||
| 	0x3f, 0x0e, 0x3d, 0x96, 0x24, 0xca, 0x24, 0xab, 0x0d, 0x45, 0x7f, 0x48, 0x3a, 0xeb, 0x0e, 0x8e, | ||||
| 	0xac, 0x2d, 0x28, 0x45, 0x08, 0x14, 0x09, 0x10, 0x43, 0xeb, 0x01, 0x80, 0x37, 0x09, 0x13, 0x76, | ||||
| 	0xc2, 0x87, 0x7e, 0x40, 0x1a, 0x37, 0x1c, 0x03, 0x11, 0xc6, 0x5c, 0xf9, 0x43, 0x3e, 0x26, 0x9d, | ||||
| 	0x68, 0x0c, 0x11, 0xd6, 0x1e, 0x54, 0xc7, 0xcc, 0x1f, 0x8d, 0x79, 0xa7, 0x42, 0xb0, 0xa2, 0xec, | ||||
| 	0x7d, 0xd8, 0x5d, 0xb0, 0x43, 0xee, 0xdf, 0xfe, 0x47, 0x11, 0xf6, 0x0e, 0x63, 0x86, 0x33, 0x87, | ||||
| 	0x61, 0xc0, 0x5d, 0x3f, 0x60, 0xf1, 0x3a, 0x1b, 0xd1, 0xa2, 0xf3, 0x59, 0x30, 0x9c, 0xb0, 0xbe, | ||||
| 	0x8b, 0x6a, 0xa5, 0xa9, 0x06, 0x42, 0x16, 0x8f, 0x99, 0x77, 0x11, 0x85, 0x7e, 0xc0, 0xc9, 0x62, | ||||
| 	0x9c, 0xcf, 0x10, 0x61, 0x71, 0x42, 0x9b, 0x91, 0x5e, 0x92, 0x84, 0xb0, 0x18, 0x07, 0xe1, 0x4c, | ||||
| 	0x5a, 0x5c, 0x77, 0x14, 0xa5, 0x70, 0x16, 0xc7, 0x9d, 0xaa, 0xc6, 0x91, 0x12, 0xf8, 0xc4, 0x3d, | ||||
| 	0x67, 0x93, 0xa4, 0x53, 0x7b, 0x58, 0x12, 0xb8, 0xa4, 0xac, 0x87, 0xd0, 0x08, 0xc2, 0xbe, 0x7f, | ||||
| 	0x19, 0x72, 0x27, 0x0c, 0x79, 0x67, 0x83, 0x1c, 0x66, 0x42, 0x56, 0x07, 0x6a, 0xf1, 0x2c, 0xe0, | ||||
| 	0xfe, 0x94, 0x75, 0xea, 0x24, 0x32, 0x25, 0xc5, 0x5a, 0x35, 0x7c, 0x16, 0x8f, 0x92, 0x0e, 0x90, | ||||
| 	0x60, 0x13, 0xb2, 0x3e, 0x86, 0x56, 0xb6, 0x93, 0x23, 0x3f, 0xee, 0x34, 0x48, 0x42, 0x1e, 0xb4, | ||||
| 	0x5f, 0xc2, 0xfe, 0x92, 0x2f, 0x55, 0x9e, 0x1d, 0x40, 0xdd, 0x4b, 0x41, 0xf2, 0x69, 0xa3, 0xb7, | ||||
| 	0x75, 0x40, 0x99, 0x7b, 0x90, 0x31, 0x67, 0x2c, 0x28, 0xaa, 0x75, 0xe2, 0x8f, 0x02, 0x77, 0xf2, | ||||
| 	0xfe, 0x19, 0x23, 0x3c, 0x46, 0x4b, 0x54, 0x7e, 0x2a, 0xca, 0xde, 0x82, 0x76, 0x2a, 0x4a, 0x05, | ||||
| 	0xfd, 0xaf, 0x25, 0xd8, 0x7e, 0x36, 0x1c, 0xde, 0x92, 0x93, 0x98, 0xd8, 0x9c, 0xc5, 0x98, 0xfa, | ||||
| 	0x28, 0xb1, 0x48, 0xee, 0xd4, 0xb4, 0xf5, 0x11, 0x94, 0x67, 0x09, 0xee, 0xa4, 0x44, 0x3b, 0x69, | ||||
| 	0xa8, 0x9d, 0x9c, 0x21, 0xe4, 0xd0, 0x84, 0x65, 0x41, 0xd9, 0x15, 0xbe, 0x2c, 0x93, 0x2f, 0x69, | ||||
| 	0x2c, 0x4c, 0x66, 0xc1, 0x25, 0xc6, 0x59, 0x40, 0x62, 0x28, 0x10, 0xef, 0x6a, 0xa8, 0x22, 0x2c, | ||||
| 	0x86, 0xe9, 0xb6, 0x6a, 0xd9, 0xb6, 0x74, 0xda, 0x6c, 0xac, 0x4e, 0x9b, 0xfa, 0x9a, 0xb4, 0x81, | ||||
| 	0x5c, 0xda, 0xd8, 0xd0, 0xf4, 0xdc, 0xc8, 0x3d, 0xf7, 0x27, 0x3e, 0xf7, 0x59, 0x82, 0xf1, 0x13, | ||||
| 	0x46, 0xe4, 0x30, 0xeb, 0x11, 0x6c, 0xba, 0x51, 0xe4, 0xc6, 0xd3, 0x30, 0x46, 0xd7, 0xbc, 0xf5, | ||||
| 	0x27, 0xac, 0xd3, 0x24, 0x21, 0x8b, 0xb0, 0x90, 0x96, 0xb0, 0x89, 0x1f, 0xcc, 0xe6, 0xaf, 0x44, | ||||
| 	0xf6, 0x75, 0x5a, 0xc4, 0x96, 0xc3, 0x84, 0xb4, 0x20, 0x7c, 0xcd, 0xae, 0xfa, 0xb1, 0x7f, 0x89, | ||||
| 	0x6b, 0x46, 0xa8, 0xb4, 0x4d, 0x5e, 0x5c, 0x84, 0xad, 0x6f, 0x62, 0x62, 0x4e, 0xfc, 0xa9, 0xcf, | ||||
| 	0x93, 0xce, 0x26, 0x9a, 0xd5, 0xe8, 0xb5, 0x94, 0x3f, 0x1d, 0x42, 0x9d, 0x74, 0xd6, 0x3e, 0x82, | ||||
| 	0xaa, 0x84, 0x84, 0x7b, 0x05, 0x8b, 0x8a, 0x16, 0x8d, 0x05, 0x96, 0x84, 0x6f, 0x39, 0xc5, 0xaa, | ||||
| 	0xec, 0xd0, 0x58, 0x60, 0x63, 0x37, 0x1e, 0x52, 0x9c, 0x10, 0x13, 0x63, 0xdb, 0x81, 0xb2, 0x08, | ||||
| 	0x94, 0x70, 0xf5, 0x4c, 0x05, 0xbc, 0xe5, 0x88, 0xa1, 0x40, 0x46, 0x2a, 0xa7, 0x10, 0xc1, 0xa1, | ||||
| 	0xf5, 0x0d, 0x68, 0xbb, 0xc3, 0x21, 0xba, 0x27, 0xc4, 0xa8, 0x7f, 0xee, 0x0f, 0x13, 0x94, 0x54, | ||||
| 	0xc2, 0xc9, 0x05, 0xd4, 0xde, 0x01, 0xcb, 0x4c, 0x28, 0x95, 0x67, 0xbf, 0x2e, 0xe8, 0x03, 0xa1, | ||||
| 	0xcf, 0xc9, 0xba, 0x6c, 0xfb, 0x7e, 0xae, 0x7a, 0x14, 0x29, 0xaf, 0xb6, 0xd3, 0x13, 0x92, 0xad, | ||||
| 	0x36, 0x0b, 0xca, 0xd2, 0xa1, 0x2c, 0xad, 0x3a, 0x94, 0x5d, 0xe8, 0x2c, 0xdb, 0xa0, 0x0c, 0xf4, | ||||
| 	0x60, 0xff, 0x88, 0x4d, 0xd8, 0xfb, 0xd8, 0x87, 0x9e, 0x0c, 0x5c, 0x2c, 0x1d, 0xf2, 0xc0, 0xd1, | ||||
| 	0xf8, 0xfd, 0x0d, 0x58, 0x56, 0xa2, 0x0c, 0x38, 0x86, 0xdd, 0x57, 0x7e, 0xc2, 0x6f, 0x57, 0xbf, | ||||
| 	0xa4, 0xaa, 0xb8, 0x4a, 0xd5, 0xef, 0x0b, 0x00, 0x99, 0x2c, 0x6d, 0x73, 0xc1, 0xb0, 0x19, 0x31, | ||||
| 	0x36, 0xf7, 0xb9, 0x3a, 0xd1, 0x34, 0x16, 0x71, 0xe7, 0x5e, 0xa4, 0x2e, 0x19, 0x31, 0x14, 0x15, | ||||
| 	0x71, 0x16, 0xf8, 0xf3, 0x93, 0xd0, 0xbb, 0x60, 0x3c, 0xa1, 0x8a, 0x8d, 0xd5, 0xd4, 0x80, 0xe8, | ||||
| 	0x58, 0x8e, 0xd9, 0x64, 0x42, 0x65, 0x7b, 0xc3, 0x91, 0x84, 0xa8, 0xb1, 0x6c, 0x1a, 0xf1, 0xeb, | ||||
| 	0xd7, 0x27, 0x78, 0xa8, 0xc5, 0x09, 0x4b, 0x49, 0xdc, 0xe9, 0xde, 0xe2, 0x4e, 0x55, 0x69, 0x7c, | ||||
| 	0x02, 0x8d, 0x6c, 0x17, 0x09, 0x1a, 0x5b, 0x5a, 0x1d, 0x7a, 0x93, 0xcb, 0x7e, 0x00, 0xcd, 0x13, | ||||
| 	0x8e, 0x41, 0x5d, 0xe3, 0x2f, 0xfb, 0x11, 0xb4, 0x75, 0x5d, 0x25, 0x46, 0x59, 0x19, 0x5c, 0x3e, | ||||
| 	0x4b, 0x14, 0x97, 0xa2, 0xec, 0xbf, 0x95, 0xa0, 0xa6, 0x12, 0x37, 0xad, 0x3e, 0x85, 0xac, 0xfa, | ||||
| 	0xfc, 0x5f, 0x8a, 0xe0, 0x87, 0x50, 0x4f, 0xae, 0x13, 0xce, 0xa6, 0x7d, 0x55, 0x0a, 0x5b, 0x4e, | ||||
| 	0x06, 0x7c, 0x55, 0x10, 0xb3, 0x82, 0xf8, 0xf7, 0x02, 0xd4, 0x75, 0x98, 0xff, 0xeb, 0x86, 0xe5, | ||||
| 	0x13, 0xa8, 0x47, 0x32, 0xf0, 0x4c, 0xd6, 0xb5, 0x46, 0xaf, 0xad, 0x14, 0xa5, 0x95, 0x2c, 0x63, | ||||
| 	0x30, 0xf2, 0xa7, 0x6c, 0xe6, 0x8f, 0xd1, 0x90, 0x54, 0x72, 0x0d, 0x09, 0x06, 0x3f, 0x12, 0x05, | ||||
| 	0xb3, 0x4a, 0x05, 0x93, 0xc6, 0x66, 0x0b, 0x52, 0xcb, 0xb5, 0x20, 0xf6, 0x67, 0x50, 0x3b, 0x76, | ||||
| 	0xbd, 0x31, 0xee, 0x43, 0x2c, 0xf4, 0x22, 0x95, 0xa6, 0xb8, 0x50, 0x8c, 0x85, 0x92, 0x29, 0x43, | ||||
| 	0x7f, 0x5f, 0xab, 0xea, 0xae, 0x28, 0xfb, 0x02, 0xdb, 0x04, 0x79, 0x0c, 0xd4, 0x61, 0x7a, 0x8c, | ||||
| 	0x65, 0x34, 0x75, 0x48, 0x7a, 0x96, 0x96, 0x1b, 0x0d, 0x83, 0x07, 0xc3, 0x52, 0x9b, 0x4a, 0xcd, | ||||
| 	0xaa, 0xea, 0xa6, 0x3e, 0x50, 0xf6, 0x38, 0xe9, 0xb4, 0xfd, 0xdb, 0x02, 0xec, 0xc9, 0x2e, 0xf2, | ||||
| 	0xd6, 0x5e, 0x71, 0x75, 0x77, 0x22, 0xdd, 0x57, 0xca, 0xb9, 0xef, 0x09, 0xd4, 0x63, 0x96, 0x84, | ||||
| 	0xb3, 0x18, 0xdd, 0x4c, 0x9e, 0x6d, 0xf4, 0x76, 0xd3, 0x93, 0x44, 0xba, 0x1c, 0x35, 0xeb, 0x64, | ||||
| 	0x7c, 0xf6, 0x1f, 0x4b, 0xd0, 0xce, 0xcf, 0x8a, 0x8a, 0x75, 0x3e, 0xb9, 0xf0, 0xc3, 0x2f, 0x65, | ||||
| 	0xfb, 0x5b, 0x20, 0x37, 0x99, 0x90, 0x38, 0x55, 0xe8, 0xcb, 0x13, 0xbc, 0x03, 0x51, 0x93, 0x74, | ||||
| 	0x63, 0x06, 0xa8, 0xd9, 0x3e, 0x8b, 0xfd, 0x30, 0xbd, 0x2e, 0x33, 0x40, 0x94, 0x01, 0x24, 0xde, | ||||
| 	0xcc, 0x42, 0xee, 0x92, 0x91, 0x65, 0x47, 0xd3, 0xd4, 0xf7, 0x62, 0x8c, 0x18, 0x3f, 0x14, 0x51, | ||||
| 	0xab, 0xa8, 0xbe, 0x57, 0x23, 0xd9, 0xfc, 0x31, 0x9b, 0x26, 0xea, 0x98, 0x1b, 0x88, 0xb0, 0x5c, | ||||
| 	0x46, 0xf3, 0x95, 0x48, 0x6a, 0x4a, 0x0c, 0xb4, 0xdc, 0x80, 0x84, 0x04, 0x49, 0x9e, 0x5c, 0xb9, | ||||
| 	0x11, 0x1d, 0xfb, 0xb2, 0x63, 0x20, 0x98, 0xc8, 0xdb, 0x92, 0x42, 0x6f, 0xe0, 0x57, 0x8e, 0x2b, | ||||
| 	0x2e, 0x66, 0x2a, 0x03, 0x65, 0x67, 0x79, 0x42, 0x70, 0x5f, 0xb0, 0x38, 0x60, 0x93, 0x63, 0x43, | ||||
| 	0x2b, 0x48, 0xee, 0xa5, 0x09, 0xab, 0x07, 0x3b, 0x12, 0x3c, 0x3d, 0xec, 0x9b, 0x0b, 0x1a, 0xb4, | ||||
| 	0x60, 0xe5, 0x9c, 0xf8, 0x16, 0x5b, 0xca, 0x13, 0x75, 0xe1, 0x7d, 0x17, 0x5a, 0x2f, 0x2e, 0x19, | ||||
| 	0x56, 0xf0, 0x34, 0x73, 0xd0, 0xef, 0xe2, 0x00, 0x60, 0x36, 0x4c, 0x23, 0x15, 0xb5, 0x0c, 0xb0, | ||||
| 	0x13, 0xa8, 0x10, 0xfb, 0xca, 0x86, 0x47, 0x26, 0x5d, 0x51, 0x27, 0x5d, 0x3e, 0xc5, 0x5a, 0x3a, | ||||
| 	0xc5, 0x54, 0x32, 0x96, 0xb3, 0x64, 0xcc, 0x29, 0xad, 0x2c, 0x2a, 0xfd, 0x5d, 0x11, 0x9a, 0xaf, | ||||
| 	0x19, 0xbf, 0x0a, 0xe3, 0x0b, 0x71, 0xb8, 0x92, 0x95, 0xf7, 0xe8, 0x3d, 0xfc, 0xec, 0x9b, 0x0f, | ||||
| 	0xce, 0xaf, 0xb9, 0x4e, 0xa6, 0x5a, 0x3c, 0x7f, 0x2e, 0x48, 0xeb, 0x3e, 0x00, 0x4e, 0xf5, 0x5d, | ||||
| 	0x79, 0x77, 0xaa, 0x5c, 0x8a, 0xe7, 0x0a, 0xb0, 0x3e, 0x80, 0xba, 0x33, 0x1f, 0x60, 0x0d, 0x0e, | ||||
| 	0xe3, 0x24, 0x4d, 0xa6, 0x78, 0xfe, 0x82, 0x68, 0xb1, 0x16, 0x27, 0x87, 0x71, 0x18, 0x45, 0x6c, | ||||
| 	0x98, 0x9a, 0x16, 0xcf, 0x8f, 0x24, 0x20, 0xb4, 0x9e, 0xa6, 0x5a, 0xab, 0x52, 0x2b, 0xcf, 0xb4, | ||||
| 	0xe2, 0x54, 0xa4, 0xb4, 0xd6, 0xd4, 0xa6, 0x4c, 0xad, 0xa7, 0x5a, 0xab, 0x4c, 0xa1, 0x0d, 0x6e, | ||||
| 	0x68, 0x3d, 0xcd, 0xb4, 0xd6, 0xd3, 0xb5, 0x4a, 0xab, 0xfd, 0x97, 0x02, 0x6c, 0x60, 0x2a, 0x9f, | ||||
| 	0x25, 0xee, 0x88, 0xe1, 0xad, 0xd7, 0xe0, 0x98, 0xf6, 0x93, 0xc1, 0x4c, 0x90, 0x2a, 0x64, 0x40, | ||||
| 	0x90, 0x64, 0xf8, 0x1a, 0x34, 0x23, 0x16, 0x63, 0x82, 0x2b, 0x8e, 0x22, 0x16, 0x21, 0x4c, 0x68, | ||||
| 	0x89, 0x49, 0x96, 0x03, 0xb8, 0x4b, 0x73, 0x03, 0x3f, 0x18, 0xc8, 0x0c, 0x9a, 0x86, 0x43, 0xa6, | ||||
| 	0x5c, 0xb5, 0x4d, 0x53, 0x2f, 0x83, 0x2f, 0xf4, 0x84, 0xf5, 0x6d, 0xd8, 0xd6, 0xfc, 0xe2, 0x66, | ||||
| 	0x25, 0x6e, 0xe9, 0xba, 0x4d, 0xc5, 0x7d, 0xa6, 0x60, 0xfb, 0x57, 0xd0, 0x3e, 0x1d, 0xc7, 0x21, | ||||
| 	0xe7, 0x78, 0xf5, 0x8c, 0x8e, 0x5c, 0x3c, 0xa0, 0x58, 0x75, 0x23, 0x3a, 0xc6, 0x89, 0xb2, 0x36, | ||||
| 	0x25, 0xad, 0xef, 0xc0, 0x36, 0x97, 0xbc, 0x6c, 0x38, 0x48, 0x79, 0x64, 0x34, 0xb7, 0xf4, 0x44, | ||||
| 	0x5f, 0x31, 0x7f, 0x1d, 0xda, 0x19, 0x33, 0xd5, 0x70, 0x69, 0x6f, 0x4b, 0xa3, 0xa7, 0xa2, 0x92, | ||||
| 	0xff, 0x41, 0x3a, 0x4b, 0x66, 0xce, 0x27, 0x54, 0x55, 0x0c, 0x57, 0x35, 0x7a, 0x9b, 0x69, 0x35, | ||||
| 	0x56, 0xce, 0xa0, 0x4a, 0x22, 0xdd, 0xf2, 0x63, 0xd8, 0xe4, 0xda, 0xf4, 0x01, 0x1e, 0x20, 0x57, | ||||
| 	0x95, 0xe4, 0xb4, 0x22, 0xe6, 0x37, 0xe6, 0xb4, 0x79, 0x7e, 0xa3, 0xe8, 0x79, 0xd9, 0x26, 0x28, | ||||
| 	0x85, 0xd2, 0xbe, 0x86, 0xc4, 0x48, 0x85, 0xfd, 0x23, 0xa8, 0x63, 0x0f, 0x91, 0x48, 0xeb, 0xd0, | ||||
| 	0x31, 0xde, 0x2c, 0x8e, 0xf1, 0x7c, 0xa5, 0x8e, 0x51, 0xa4, 0xe8, 0x31, 0xe8, 0x8a, 0x55, 0xce, | ||||
| 	0x90, 0x84, 0x1d, 0x02, 0xc8, 0x63, 0x4e, 0xda, 0x90, 0xc7, 0x4c, 0x01, 0x49, 0x88, 0x3c, 0x9b, | ||||
| 	0xba, 0x73, 0x1d, 0x7a, 0xca, 0x33, 0x04, 0xe4, 0x06, 0x51, 0xe1, 0x5b, 0xd7, 0x9f, 0x78, 0xea, | ||||
| 	0x7d, 0x00, 0x15, 0x2a, 0x32, 0x53, 0x58, 0x36, 0x15, 0xfe, 0xb9, 0x08, 0x0d, 0xa9, 0x51, 0x1a, | ||||
| 	0x8c, 0x5c, 0x1e, 0x5e, 0x46, 0x5a, 0x25, 0x11, 0xd8, 0x2e, 0x54, 0x32, 0x75, 0x59, 0xeb, 0x98, | ||||
| 	0x99, 0x9a, 0xda, 0x86, 0x97, 0x63, 0x82, 0xf5, 0xd2, 0xf0, 0xce, 0x4a, 0xee, 0xba, 0x60, 0x92, | ||||
| 	0x06, 0x7f, 0x0a, 0x4d, 0x99, 0x9f, 0x6a, 0x4d, 0x79, 0xdd, 0x9a, 0x86, 0x64, 0x93, 0xab, 0x9e, | ||||
| 	0x88, 0x0e, 0x0d, 0xed, 0xa5, 0x8e, 0xa0, 0xd1, 0xbb, 0x9f, 0x63, 0xa7, 0x9d, 0x1c, 0xd0, 0xef, | ||||
| 	0x8b, 0x80, 0x63, 0x69, 0x96, 0xbc, 0xdd, 0xa7, 0x00, 0x19, 0x28, 0x6a, 0xd6, 0x05, 0xbb, 0x4e, | ||||
| 	0x3b, 0x51, 0x1c, 0x8a, 0xbd, 0x5f, 0xba, 0x93, 0x59, 0xea, 0x54, 0x49, 0xfc, 0xb0, 0xf8, 0xb4, | ||||
| 	0x80, 0x5f, 0x31, 0x9b, 0xcf, 0xc5, 0x3d, 0x67, 0x2c, 0xcf, 0x3d, 0x6b, 0x95, 0x57, 0x3e, 0x6b, | ||||
| 	0x95, 0xd3, 0x67, 0x2d, 0x2c, 0xa3, 0x61, 0xa4, 0x6e, 0x65, 0x1c, 0x65, 0x8a, 0xca, 0x86, 0x22, | ||||
| 	0xfb, 0x9f, 0x65, 0x80, 0x4c, 0x8b, 0x75, 0x02, 0x5d, 0x3f, 0x1c, 0x88, 0x4b, 0xc5, 0xf7, 0x98, | ||||
| 	0x2c, 0x48, 0x83, 0x98, 0x61, 0xfa, 0x24, 0xfe, 0x25, 0x53, 0x7d, 0xc7, 0x9e, 0xda, 0xf7, 0x82, | ||||
| 	0x71, 0xce, 0x3e, 0x52, 0x72, 0x21, 0x55, 0x2e, 0x27, 0x5d, 0x66, 0xfd, 0x0c, 0x76, 0x33, 0xa1, | ||||
| 	0x43, 0x43, 0x5e, 0xf1, 0x46, 0x79, 0x77, 0xb5, 0xbc, 0x61, 0x26, 0xeb, 0x27, 0x80, 0xf0, 0x00, | ||||
| 	0xef, 0x98, 0x59, 0x4e, 0x52, 0xe9, 0x46, 0x49, 0xdb, 0x7e, 0xf8, 0x86, 0x56, 0x64, 0x72, 0xde, | ||||
| 	0xc0, 0x3d, 0x63, 0xa3, 0xe2, 0xd8, 0x1b, 0xd2, 0xca, 0x37, 0x4a, 0xdb, 0xd3, 0x76, 0x89, 0xc2, | ||||
| 	0x90, 0x89, 0xfc, 0x02, 0x70, 0x66, 0x70, 0xe5, 0xfa, 0x7c, 0x51, 0x5e, 0xe5, 0xb6, 0x7d, 0x7e, | ||||
| 	0x89, 0x8b, 0xf2, 0xc2, 0xe4, 0x3e, 0xa7, 0x2c, 0x1e, 0xe5, 0xf6, 0x59, 0xbd, 0x6d, 0x9f, 0xc7, | ||||
| 	0xb4, 0x22, 0x93, 0xf3, 0x1c, 0x10, 0x5c, 0xb4, 0xa7, 0x76, 0xa3, 0x94, 0x4d, 0x3f, 0xcc, 0xdb, | ||||
| 	0x72, 0x08, 0xdb, 0x09, 0xf3, 0x38, 0xde, 0x28, 0x86, 0x8c, 0x8d, 0x1b, 0x65, 0x6c, 0xa9, 0x05, | ||||
| 	0x5a, 0x88, 0xfd, 0x0e, 0x9a, 0x3f, 0x9d, 0x8d, 0x18, 0x9f, 0x9c, 0xeb, 0x33, 0xff, 0xbf, 0x2e, | ||||
| 	0x33, 0xff, 0xc6, 0x32, 0x73, 0x38, 0x8a, 0xc3, 0x59, 0x94, 0xab, 0xda, 0xf2, 0x0c, 0x2f, 0x55, | ||||
| 	0x6d, 0xe2, 0xa1, 0xaa, 0x2d, 0xb9, 0x3f, 0x83, 0xa6, 0x6c, 0xb2, 0xd4, 0x02, 0x59, 0x85, 0xac, | ||||
| 	0xe5, 0x43, 0x9f, 0x36, 0x75, 0x72, 0x59, 0x4f, 0x35, 0xac, 0x6a, 0x55, 0xbe, 0x1a, 0x65, 0x6e, | ||||
| 	0xc2, 0x2f, 0x96, 0xec, 0xd4, 0xbd, 0x84, 0xd6, 0x58, 0xfa, 0x46, 0xad, 0x92, 0x09, 0xf8, 0x71, | ||||
| 	0x6a, 0x5c, 0xb6, 0x87, 0x03, 0xd3, 0x87, 0xd2, 0xd5, 0xcd, 0xb1, 0xe9, 0xd6, 0xef, 0x01, 0x88, | ||||
| 	0x4f, 0x92, 0x41, 0x5a, 0xa8, 0xcc, 0x17, 0x49, 0x7d, 0x43, 0xe0, 0xf7, 0x4f, 0x3a, 0xec, 0x9e, | ||||
| 	0xc2, 0xf6, 0x92, 0xcc, 0x15, 0x65, 0xea, 0x5b, 0x66, 0x99, 0x6a, 0xf4, 0xee, 0x2a, 0x91, 0xe6, | ||||
| 	0x52, 0xb3, 0x76, 0xfd, 0xa9, 0x20, 0xbf, 0x60, 0xf4, 0xa3, 0x91, 0xf5, 0x14, 0x5a, 0x81, 0x6c, | ||||
| 	0xbe, 0x74, 0x00, 0x4a, 0x86, 0x20, 0xb3, 0x31, 0x73, 0x9a, 0x81, 0xd9, 0xa6, 0x61, 0x20, 0x3c, | ||||
| 	0xf2, 0xc0, 0xca, 0x40, 0x18, 0xce, 0x71, 0x1a, 0x9e, 0x11, 0xed, 0x5c, 0x33, 0x58, 0x5a, 0x6c, | ||||
| 	0x06, 0xd5, 0x43, 0xc3, 0xba, 0x57, 0xd2, 0xde, 0xbf, 0xaa, 0x50, 0x7a, 0xd6, 0x7f, 0x69, 0x9d, | ||||
| 	0xc1, 0xd6, 0xe2, 0x9f, 0x0c, 0xd6, 0x03, 0xa5, 0x7a, 0xcd, 0x1f, 0x13, 0xdd, 0x8f, 0xd6, 0xce, | ||||
| 	0xab, 0x6e, 0xf9, 0x8e, 0xe5, 0xc0, 0xe6, 0xc2, 0x93, 0xb2, 0x95, 0x5e, 0x27, 0xab, 0x9f, 0xed, | ||||
| 	0xbb, 0x0f, 0xd6, 0x4d, 0x9b, 0x32, 0x17, 0xda, 0x73, 0x2d, 0x73, 0xf5, 0xe7, 0x9d, 0x96, 0xb9, | ||||
| 	0xae, 0xab, 0xbf, 0x63, 0xfd, 0x00, 0xaa, 0xf2, 0x91, 0xd9, 0xda, 0x51, 0xbc, 0xb9, 0xe7, 0xeb, | ||||
| 	0xee, 0xee, 0x02, 0xaa, 0x17, 0xbe, 0x82, 0x56, 0xee, 0x9f, 0x09, 0xeb, 0x83, 0x9c, 0xae, 0xfc, | ||||
| 	0x1b, 0x75, 0xf7, 0xc3, 0xd5, 0x93, 0x5a, 0xda, 0x21, 0x40, 0xf6, 0x0e, 0x69, 0x75, 0x14, 0xf7, | ||||
| 	0xd2, 0x5b, 0x77, 0xf7, 0xde, 0x8a, 0x19, 0x2d, 0x04, 0x43, 0xb9, 0xf8, 0x62, 0x68, 0x2d, 0x78, | ||||
| 	0x75, 0xf1, 0xbd, 0x4e, 0x87, 0x72, 0xed, 0x53, 0x23, 0x89, 0x5d, 0x7c, 0x07, 0xd4, 0x62, 0xd7, | ||||
| 	0xbc, 0x42, 0x6a, 0xb1, 0x6b, 0x1f, 0x10, 0xef, 0x58, 0x3f, 0x87, 0x76, 0xfe, 0x61, 0xcd, 0x4a, | ||||
| 	0x9d, 0xb4, 0xf2, 0x65, 0xb1, 0x7b, 0x7f, 0xcd, 0xac, 0x16, 0xf8, 0x29, 0x54, 0xe4, 0x8b, 0x59, | ||||
| 	0x7a, 0xe4, 0xcc, 0x87, 0xb6, 0xee, 0x4e, 0x1e, 0xd4, 0xab, 0x1e, 0x43, 0x55, 0x7e, 0xd8, 0xe9, | ||||
| 	0x04, 0xc8, 0x7d, 0xe7, 0x75, 0x9b, 0x26, 0x6a, 0xdf, 0x79, 0x5c, 0x48, 0xf5, 0x24, 0x39, 0x3d, | ||||
| 	0xc9, 0x2a, 0x3d, 0x46, 0x70, 0xce, 0xab, 0xf4, 0xaf, 0xdf, 0x93, 0xff, 0x04, 0x00, 0x00, 0xff, | ||||
| 	0xff, 0xbf, 0xea, 0xc8, 0x11, 0x02, 0x1c, 0x00, 0x00, | ||||
| 	// 2396 bytes of a gzipped FileDescriptorProto | ||||
| 	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xec, 0x59, 0x4b, 0x93, 0x1b, 0x49, | ||||
| 	0xf1, 0xb7, 0x1e, 0xa3, 0x19, 0xa5, 0x1e, 0x33, 0xd3, 0x1e, 0x8f, 0x65, 0xed, 0xfa, 0xf1, 0xef, | ||||
| 	0xd8, 0x3f, 0x18, 0xd8, 0x90, 0x8d, 0xbc, 0x1b, 0x38, 0x20, 0x82, 0x08, 0x7b, 0x6c, 0x16, 0xb3, | ||||
| 	0x1e, 0x23, 0xf7, 0xcc, 0xb0, 0x47, 0x45, 0x8f, 0x54, 0x96, 0x9a, 0x91, 0xba, 0x7b, 0xbb, 0x4b, | ||||
| 	0x33, 0x9a, 0x0b, 0x07, 0x0e, 0x70, 0x83, 0x2b, 0x11, 0x70, 0xe3, 0xc6, 0x9d, 0x03, 0x7c, 0x01, | ||||
| 	0x22, 0xf8, 0x20, 0xdc, 0xb8, 0x73, 0x24, 0x2b, 0xeb, 0xd1, 0xd5, 0x7a, 0xcc, 0xd8, 0x07, 0x82, | ||||
| 	0x0b, 0x17, 0x45, 0xe5, 0xaf, 0xb2, 0x32, 0xb3, 0xb2, 0x32, 0xb3, 0xb2, 0x4b, 0x50, 0xf5, 0xe3, | ||||
| 	0xa0, 0x13, 0x27, 0x11, 0x8f, 0x9c, 0x0d, 0x7e, 0x19, 0xb3, 0xb4, 0x7d, 0x7f, 0x14, 0x45, 0xa3, | ||||
| 	0x09, 0x7b, 0x44, 0xe0, 0xe9, 0xec, 0xdd, 0x23, 0x1e, 0x4c, 0x59, 0xca, 0xfd, 0x69, 0x2c, 0xf9, | ||||
| 	0xdc, 0x3b, 0x70, 0xfb, 0x0b, 0xc6, 0x8f, 0x58, 0x72, 0xce, 0x92, 0x9f, 0xb1, 0x24, 0x0d, 0xa2, | ||||
| 	0xd0, 0x63, 0x5f, 0xcf, 0x90, 0xc7, 0x9d, 0x43, 0x6b, 0x79, 0x2a, 0x8d, 0xa3, 0x30, 0x65, 0xce, | ||||
| 	0x1e, 0x6c, 0x4c, 0xfd, 0x9f, 0x47, 0x49, 0xab, 0xf0, 0xa0, 0xf0, 0xb0, 0xe1, 0x49, 0x82, 0xd0, | ||||
| 	0x20, 0x44, 0xb4, 0xa8, 0x50, 0x41, 0x08, 0x34, 0xf6, 0xf9, 0x60, 0xdc, 0x2a, 0x49, 0x94, 0x08, | ||||
| 	0xa7, 0x0d, 0x5b, 0x09, 0x3b, 0x0f, 0x84, 0xd4, 0x56, 0x19, 0x27, 0xaa, 0x9e, 0xa1, 0xdd, 0x5f, | ||||
| 	0x15, 0x60, 0xef, 0x24, 0x1e, 0xfa, 0x9c, 0xf5, 0x92, 0x68, 0xc0, 0xd2, 0x54, 0x99, 0xe4, 0x34, | ||||
| 	0xa1, 0x18, 0x0c, 0x49, 0x67, 0xd5, 0xc3, 0x91, 0xb3, 0x03, 0xa5, 0x18, 0x81, 0x22, 0x01, 0x62, | ||||
| 	0xe8, 0xdc, 0x03, 0x18, 0x4c, 0xa2, 0x94, 0x1d, 0xf1, 0x61, 0x10, 0x92, 0xc6, 0x2d, 0xcf, 0x42, | ||||
| 	0x84, 0x31, 0x17, 0xc1, 0x90, 0x8f, 0x49, 0x27, 0x1a, 0x43, 0x84, 0xb3, 0x0f, 0x95, 0x31, 0x0b, | ||||
| 	0x46, 0x63, 0xde, 0xda, 0x20, 0x58, 0x51, 0xee, 0x6d, 0xb8, 0xb5, 0x60, 0x87, 0xdc, 0xbf, 0xfb, | ||||
| 	0xf7, 0x22, 0xec, 0x1f, 0x24, 0x0c, 0x67, 0x0e, 0xa2, 0x90, 0xfb, 0x41, 0xc8, 0x92, 0x75, 0x36, | ||||
| 	0xa2, 0x45, 0xa7, 0xb3, 0x70, 0x38, 0x61, 0x3d, 0x1f, 0xd5, 0x4a, 0x53, 0x2d, 0x84, 0x2c, 0x1e, | ||||
| 	0xb3, 0xc1, 0x59, 0x1c, 0x05, 0x21, 0x27, 0x8b, 0x71, 0x3e, 0x43, 0x84, 0xc5, 0x29, 0x6d, 0x46, | ||||
| 	0x7a, 0x49, 0x12, 0xc2, 0x62, 0x1c, 0x44, 0x33, 0x69, 0x71, 0xd5, 0x53, 0x94, 0xc2, 0x59, 0x92, | ||||
| 	0xb4, 0x2a, 0x06, 0x47, 0x4a, 0xe0, 0x13, 0xff, 0x94, 0x4d, 0xd2, 0xd6, 0xe6, 0x83, 0x92, 0xc0, | ||||
| 	0x25, 0xe5, 0x3c, 0x80, 0x5a, 0x18, 0xf5, 0x82, 0xf3, 0x88, 0x7b, 0x51, 0xc4, 0x5b, 0x5b, 0xe4, | ||||
| 	0x30, 0x1b, 0x72, 0x5a, 0xb0, 0x99, 0xcc, 0x42, 0x11, 0x37, 0xad, 0x2a, 0x89, 0xd4, 0xa4, 0x58, | ||||
| 	0xab, 0x86, 0xcf, 0x92, 0x51, 0xda, 0x02, 0x12, 0x6c, 0x43, 0xce, 0x27, 0xd0, 0xc8, 0x76, 0xf2, | ||||
| 	0x22, 0x48, 0x5a, 0x35, 0x92, 0x90, 0x07, 0xdd, 0x57, 0x70, 0x7b, 0xc9, 0x97, 0x2a, 0xce, 0x3a, | ||||
| 	0x50, 0x1d, 0x68, 0x90, 0x7c, 0x5a, 0xeb, 0xee, 0x74, 0x28, 0xb4, 0x3b, 0x19, 0x73, 0xc6, 0x82, | ||||
| 	0xa2, 0x1a, 0x47, 0xc1, 0x28, 0xf4, 0x27, 0xef, 0x1f, 0x31, 0xc2, 0x63, 0xb4, 0x44, 0xc5, 0xa7, | ||||
| 	0xa2, 0xdc, 0x1d, 0x68, 0x6a, 0x51, 0xea, 0xd0, 0xff, 0x5c, 0x82, 0xdd, 0x67, 0xc3, 0xe1, 0x35, | ||||
| 	0x31, 0x89, 0x81, 0xcd, 0x59, 0x82, 0xa1, 0x8f, 0x12, 0x8b, 0xe4, 0x4e, 0x43, 0x3b, 0xf7, 0xa1, | ||||
| 	0x3c, 0x4b, 0x71, 0x27, 0x25, 0xda, 0x49, 0x4d, 0xed, 0xe4, 0x04, 0x21, 0x8f, 0x26, 0x1c, 0x07, | ||||
| 	0xca, 0xbe, 0xf0, 0x65, 0x99, 0x7c, 0x49, 0x63, 0x61, 0x32, 0x0b, 0xcf, 0xf1, 0x9c, 0x05, 0x24, | ||||
| 	0x86, 0x02, 0x19, 0x5c, 0x0c, 0xd5, 0x09, 0x8b, 0xa1, 0xde, 0xd6, 0x66, 0xb6, 0x2d, 0x13, 0x36, | ||||
| 	0x5b, 0xab, 0xc3, 0xa6, 0xba, 0x26, 0x6c, 0x20, 0x17, 0x36, 0x2e, 0xd4, 0x07, 0x7e, 0xec, 0x9f, | ||||
| 	0x06, 0x93, 0x80, 0x07, 0x2c, 0xc5, 0xf3, 0x13, 0x46, 0xe4, 0x30, 0xe7, 0x21, 0x6c, 0xfb, 0x71, | ||||
| 	0xec, 0x27, 0xd3, 0x28, 0x41, 0xd7, 0xbc, 0x0b, 0x26, 0xac, 0x55, 0x27, 0x21, 0x8b, 0xb0, 0x90, | ||||
| 	0x96, 0xb2, 0x49, 0x10, 0xce, 0xe6, 0xaf, 0x45, 0xf4, 0xb5, 0x1a, 0xc4, 0x96, 0xc3, 0x84, 0xb4, | ||||
| 	0x30, 0x7a, 0xc3, 0x2e, 0x7a, 0x49, 0x70, 0x8e, 0x6b, 0x46, 0xa8, 0xb4, 0x49, 0x5e, 0x5c, 0x84, | ||||
| 	0x9d, 0x6f, 0x62, 0x60, 0x4e, 0x82, 0x69, 0xc0, 0xd3, 0xd6, 0x36, 0x9a, 0x55, 0xeb, 0x36, 0x94, | ||||
| 	0x3f, 0x3d, 0x42, 0x3d, 0x3d, 0xeb, 0xbe, 0x80, 0x8a, 0x84, 0x84, 0x7b, 0x05, 0x8b, 0x3a, 0x2d, | ||||
| 	0x1a, 0x0b, 0x2c, 0x8d, 0xde, 0x71, 0x3a, 0xab, 0xb2, 0x47, 0x63, 0x81, 0x8d, 0xfd, 0x64, 0x48, | ||||
| 	0xe7, 0x84, 0x98, 0x18, 0xbb, 0x1e, 0x94, 0xc5, 0x41, 0x09, 0x57, 0xcf, 0xd4, 0x81, 0x37, 0x3c, | ||||
| 	0x31, 0x14, 0xc8, 0x48, 0xc5, 0x14, 0x22, 0x38, 0x74, 0xbe, 0x01, 0x4d, 0x7f, 0x38, 0x44, 0xf7, | ||||
| 	0x44, 0x78, 0xea, 0x5f, 0x04, 0xc3, 0x14, 0x25, 0x95, 0x70, 0x72, 0x01, 0x75, 0xf7, 0xc0, 0xb1, | ||||
| 	0x03, 0x4a, 0xc5, 0xd9, 0x2f, 0x0b, 0x26, 0x21, 0x4c, 0x9e, 0xac, 0x8b, 0xb6, 0xef, 0xe6, 0xaa, | ||||
| 	0x47, 0x91, 0xe2, 0x6a, 0x57, 0x67, 0x48, 0xb6, 0xda, 0x2e, 0x28, 0x4b, 0x49, 0x59, 0x5a, 0x95, | ||||
| 	0x94, 0x6d, 0x68, 0x2d, 0xdb, 0xa0, 0x0c, 0x1c, 0xc0, 0xed, 0x17, 0x6c, 0xc2, 0xde, 0xc7, 0x3e, | ||||
| 	0xf4, 0x64, 0xe8, 0x63, 0xe9, 0x90, 0x09, 0x47, 0xe3, 0xf7, 0x37, 0x60, 0x59, 0x89, 0x32, 0xe0, | ||||
| 	0x10, 0x6e, 0xbd, 0x0e, 0x52, 0x7e, 0xbd, 0xfa, 0x25, 0x55, 0xc5, 0x55, 0xaa, 0x7e, 0x57, 0x00, | ||||
| 	0xc8, 0x64, 0x19, 0x9b, 0x0b, 0x96, 0xcd, 0x88, 0xb1, 0x79, 0xc0, 0x55, 0x46, 0xd3, 0x58, 0x9c, | ||||
| 	0x3b, 0x1f, 0xc4, 0xea, 0x92, 0x11, 0x43, 0x51, 0x11, 0x67, 0x61, 0x30, 0x3f, 0x8a, 0x06, 0x67, | ||||
| 	0x8c, 0xa7, 0x54, 0xb1, 0xb1, 0x9a, 0x5a, 0x10, 0xa5, 0xe5, 0x98, 0x4d, 0x26, 0x54, 0xb6, 0xb7, | ||||
| 	0x3c, 0x49, 0x88, 0x1a, 0xcb, 0xa6, 0x31, 0xbf, 0x7c, 0x73, 0x84, 0x49, 0x2d, 0x32, 0x4c, 0x93, | ||||
| 	0xb8, 0xd3, 0xfd, 0xc5, 0x9d, 0xaa, 0xd2, 0xf8, 0x04, 0x6a, 0xd9, 0x2e, 0x52, 0x34, 0xb6, 0xb4, | ||||
| 	0xfa, 0xe8, 0x6d, 0x2e, 0xf7, 0x1e, 0xd4, 0x8f, 0x38, 0x1e, 0xea, 0x1a, 0x7f, 0xb9, 0x0f, 0xa1, | ||||
| 	0x69, 0xea, 0x2a, 0x31, 0xca, 0xca, 0xe0, 0xf3, 0x59, 0xaa, 0xb8, 0x14, 0xe5, 0xfe, 0xa5, 0x04, | ||||
| 	0x9b, 0x2a, 0x70, 0x75, 0xf5, 0x29, 0x64, 0xd5, 0xe7, 0xbf, 0x52, 0x04, 0x3f, 0x86, 0x6a, 0x7a, | ||||
| 	0x99, 0x72, 0x36, 0xed, 0xa9, 0x52, 0xd8, 0xf0, 0x32, 0xe0, 0x7f, 0x05, 0x31, 0x2b, 0x88, 0x7f, | ||||
| 	0x2b, 0x40, 0xd5, 0x1c, 0xf3, 0x07, 0x37, 0x2c, 0x9f, 0x42, 0x35, 0x96, 0x07, 0xcf, 0x64, 0x5d, | ||||
| 	0xab, 0x75, 0x9b, 0x4a, 0x91, 0xae, 0x64, 0x19, 0x83, 0x15, 0x3f, 0x65, 0x3b, 0x7e, 0xac, 0x86, | ||||
| 	0x64, 0x23, 0xd7, 0x90, 0xe0, 0xe1, 0xc7, 0xa2, 0x60, 0x56, 0xa8, 0x60, 0xd2, 0xd8, 0x6e, 0x41, | ||||
| 	0x36, 0x73, 0x2d, 0x88, 0xfb, 0x39, 0x6c, 0x1e, 0xfa, 0x83, 0x31, 0xee, 0x43, 0x2c, 0x1c, 0xc4, | ||||
| 	0x2a, 0x4c, 0x71, 0xa1, 0x18, 0x0b, 0x25, 0x53, 0x86, 0xfe, 0xbe, 0x54, 0xd5, 0x5d, 0x51, 0xee, | ||||
| 	0x19, 0xb6, 0x09, 0x32, 0x0d, 0x54, 0x32, 0x3d, 0xc6, 0x32, 0xaa, 0x1d, 0xa2, 0x73, 0x69, 0xb9, | ||||
| 	0xd1, 0xb0, 0x78, 0xf0, 0x58, 0x36, 0xa7, 0x52, 0xb3, 0xaa, 0xba, 0xda, 0x07, 0xca, 0x1e, 0x4f, | ||||
| 	0x4f, 0xbb, 0xbf, 0x2e, 0xc0, 0xbe, 0xec, 0x22, 0xaf, 0xed, 0x15, 0x57, 0x77, 0x27, 0xd2, 0x7d, | ||||
| 	0xa5, 0x9c, 0xfb, 0x9e, 0x40, 0x35, 0x61, 0x69, 0x34, 0x4b, 0xd0, 0xcd, 0xe4, 0xd9, 0x5a, 0xf7, | ||||
| 	0x96, 0xce, 0x24, 0xd2, 0xe5, 0xa9, 0x59, 0x2f, 0xe3, 0x73, 0xff, 0x50, 0x82, 0x66, 0x7e, 0x56, | ||||
| 	0x54, 0xac, 0xd3, 0xc9, 0x59, 0x10, 0x7d, 0x25, 0xdb, 0xdf, 0x02, 0xb9, 0xc9, 0x86, 0x44, 0x56, | ||||
| 	0xa1, 0x2f, 0x8f, 0xf0, 0x0e, 0x44, 0x4d, 0xd2, 0x8d, 0x19, 0xa0, 0x66, 0x7b, 0x2c, 0x09, 0x22, | ||||
| 	0x7d, 0x5d, 0x66, 0x80, 0x28, 0x03, 0x48, 0xbc, 0x9d, 0x45, 0xdc, 0x27, 0x23, 0xcb, 0x9e, 0xa1, | ||||
| 	0xa9, 0xef, 0xc5, 0x33, 0x62, 0xfc, 0x40, 0x9c, 0xda, 0x86, 0xea, 0x7b, 0x0d, 0x92, 0xcd, 0x1f, | ||||
| 	0xb2, 0x69, 0xaa, 0xd2, 0xdc, 0x42, 0x84, 0xe5, 0xf2, 0x34, 0x5f, 0x8b, 0xa0, 0xa6, 0xc0, 0x40, | ||||
| 	0xcb, 0x2d, 0x48, 0x48, 0x90, 0xe4, 0xd1, 0x85, 0x1f, 0x53, 0xda, 0x97, 0x3d, 0x0b, 0xc1, 0x40, | ||||
| 	0xde, 0x95, 0x14, 0x7a, 0x03, 0xbf, 0x72, 0x7c, 0x71, 0x31, 0x53, 0x19, 0x28, 0x7b, 0xcb, 0x13, | ||||
| 	0x82, 0xfb, 0x8c, 0x25, 0x21, 0x9b, 0x1c, 0x5a, 0x5a, 0x41, 0x72, 0x2f, 0x4d, 0x38, 0x5d, 0xd8, | ||||
| 	0x93, 0xe0, 0xf1, 0x41, 0xcf, 0x5e, 0x50, 0xa3, 0x05, 0x2b, 0xe7, 0xc4, 0xb7, 0xd8, 0x52, 0x9c, | ||||
| 	0xa8, 0x0b, 0x0f, 0xfb, 0xda, 0x97, 0xe7, 0x0c, 0x2b, 0xb8, 0x8e, 0x9c, 0xa7, 0x50, 0x35, 0x9f, | ||||
| 	0x72, 0x2a, 0x00, 0xdb, 0x1d, 0xf9, 0xb1, 0xd7, 0xd1, 0x1f, 0x7b, 0x9d, 0x63, 0xcd, 0xe1, 0x65, | ||||
| 	0xcc, 0xee, 0x6f, 0x0b, 0xb0, 0x41, 0xb2, 0x56, 0x76, 0x43, 0x32, 0x22, 0x8b, 0x26, 0x22, 0xf3, | ||||
| 	0xf1, 0xd7, 0x30, 0xf1, 0xa7, 0x22, 0xb5, 0x9c, 0x45, 0x6a, 0xce, 0xa2, 0xca, 0x87, 0x58, 0xf4, | ||||
| 	0x9b, 0x22, 0xd4, 0xdf, 0x30, 0x7e, 0x11, 0x25, 0x67, 0x22, 0x2b, 0xd3, 0x95, 0x17, 0xf0, 0x1d, | ||||
| 	0xfc, 0x5e, 0x9c, 0xf7, 0x4f, 0x2f, 0xb9, 0x89, 0xc2, 0xcd, 0x64, 0xfe, 0x5c, 0x90, 0xce, 0x5d, | ||||
| 	0x00, 0x9c, 0xea, 0xf9, 0xf2, 0xd2, 0x55, 0x41, 0x98, 0xcc, 0x15, 0xe0, 0x7c, 0x04, 0x55, 0x6f, | ||||
| 	0xde, 0xc7, 0xe2, 0x1d, 0x25, 0xa9, 0x8e, 0xc2, 0x64, 0xfe, 0x92, 0x68, 0xb1, 0x16, 0x27, 0x87, | ||||
| 	0x49, 0x14, 0xc7, 0x6c, 0x48, 0x51, 0x48, 0x6b, 0x5f, 0x48, 0x40, 0x68, 0x3d, 0xd6, 0x5a, 0x2b, | ||||
| 	0x52, 0x2b, 0xcf, 0xb4, 0xe2, 0x54, 0xac, 0xb4, 0xca, 0xf0, 0xab, 0x72, 0x5b, 0xeb, 0xb1, 0xd1, | ||||
| 	0x2a, 0x63, 0x6f, 0x8b, 0x5b, 0x5a, 0x8f, 0x33, 0xad, 0x55, 0xbd, 0x56, 0x69, 0x75, 0xff, 0x54, | ||||
| 	0x80, 0x2d, 0xcc, 0x81, 0x93, 0xd4, 0x1f, 0x31, 0xbc, 0x2e, 0x6b, 0x1c, 0xf3, 0x65, 0xd2, 0x9f, | ||||
| 	0x09, 0x52, 0x65, 0x28, 0x10, 0x24, 0x19, 0xfe, 0x0f, 0xea, 0x31, 0x4b, 0x30, 0x33, 0x14, 0x47, | ||||
| 	0x11, 0xab, 0x17, 0x66, 0x82, 0xc4, 0x24, 0x4b, 0x07, 0x6e, 0xd2, 0x5c, 0x3f, 0x08, 0xfb, 0x32, | ||||
| 	0xf4, 0xa6, 0xd1, 0x90, 0x29, 0x57, 0xed, 0xd2, 0xd4, 0xab, 0xf0, 0x4b, 0x33, 0xe1, 0x7c, 0x1b, | ||||
| 	0x76, 0x0d, 0xbf, 0xb8, 0x92, 0x89, 0x5b, 0xba, 0x6e, 0x5b, 0x71, 0x9f, 0x28, 0xd8, 0xfd, 0x05, | ||||
| 	0x34, 0x8f, 0xc7, 0x78, 0xbe, 0x1c, 0xef, 0xac, 0xd1, 0x0b, 0x1f, 0x33, 0x1b, 0xcb, 0x75, 0x4c, | ||||
| 	0xf9, 0x9f, 0x2a, 0x6b, 0x35, 0xe9, 0x7c, 0x07, 0x76, 0xb9, 0xe4, 0x65, 0xc3, 0xbe, 0xe6, 0x91, | ||||
| 	0xa7, 0xb9, 0x63, 0x26, 0x7a, 0x8a, 0xf9, 0xff, 0xa1, 0x99, 0x31, 0x53, 0xf1, 0x97, 0xf6, 0x36, | ||||
| 	0x0c, 0x2a, 0xa2, 0xc9, 0xfd, 0xbd, 0x74, 0x96, 0x8c, 0x9c, 0x4f, 0xa9, 0x1c, 0x59, 0xae, 0xaa, | ||||
| 	0x75, 0xb7, 0x75, 0x19, 0x57, 0xce, 0xa0, 0x12, 0x24, 0xdd, 0xf2, 0x43, 0xd8, 0xe6, 0xc6, 0xf4, | ||||
| 	0x3e, 0x66, 0x9e, 0xaf, 0x52, 0x49, 0x97, 0xd2, 0xfc, 0xc6, 0xbc, 0x26, 0xcf, 0x6f, 0x14, 0x3d, | ||||
| 	0x2f, 0xfb, 0x0b, 0xa5, 0x50, 0xda, 0x57, 0x93, 0x18, 0xa9, 0x70, 0x7f, 0x00, 0x55, 0x6c, 0x3e, | ||||
| 	0x52, 0x69, 0x1d, 0x3a, 0x66, 0x30, 0x4b, 0x12, 0xcc, 0x3d, 0xed, 0x18, 0x45, 0x8a, 0xe6, 0x84, | ||||
| 	0xee, 0x66, 0xe5, 0x0c, 0x49, 0xb8, 0x11, 0x80, 0xac, 0x0f, 0xa4, 0x0d, 0x79, 0xec, 0x10, 0x90, | ||||
| 	0x84, 0x88, 0xb3, 0xa9, 0x3f, 0x37, 0x47, 0x4f, 0x71, 0x86, 0x80, 0xdc, 0x20, 0x2a, 0x7c, 0xe7, | ||||
| 	0x07, 0x93, 0x81, 0x7a, 0x58, 0x40, 0x85, 0x8a, 0xcc, 0x14, 0x96, 0x6d, 0x85, 0x7f, 0x2c, 0x42, | ||||
| 	0x4d, 0x6a, 0x94, 0x06, 0x23, 0xd7, 0x00, 0x6f, 0x31, 0xa3, 0x92, 0x08, 0xec, 0x33, 0x36, 0x32, | ||||
| 	0x75, 0x59, 0xcf, 0x99, 0x99, 0xaa, 0x6d, 0xc3, 0x5b, 0x35, 0xc5, 0x42, 0x6b, 0x79, 0x67, 0x25, | ||||
| 	0x77, 0x55, 0x30, 0x49, 0x83, 0x3f, 0x83, 0xba, 0x8c, 0x4f, 0xb5, 0xa6, 0xbc, 0x6e, 0x4d, 0x4d, | ||||
| 	0xb2, 0xc9, 0x55, 0x4f, 0x44, 0x6b, 0x87, 0xf6, 0x52, 0x2b, 0x51, 0xeb, 0xde, 0xcd, 0xb1, 0xd3, | ||||
| 	0x4e, 0x3a, 0xf4, 0xfb, 0x32, 0xe4, 0x58, 0xd3, 0x25, 0x6f, 0xfb, 0x29, 0x40, 0x06, 0x8a, 0x7a, | ||||
| 	0x76, 0xc6, 0x2e, 0x75, 0x0b, 0x8b, 0x43, 0xb1, 0xf7, 0x73, 0x7f, 0x32, 0xd3, 0x4e, 0x95, 0xc4, | ||||
| 	0xf7, 0x8b, 0x4f, 0x0b, 0xf8, 0xf9, 0xb3, 0xfd, 0x5c, 0x5c, 0x90, 0xd6, 0xf2, 0xdc, 0x7b, 0x58, | ||||
| 	0x79, 0xe5, 0x7b, 0x58, 0x59, 0xbf, 0x87, 0x61, 0x89, 0x8d, 0x62, 0x75, 0x9d, 0xe3, 0x28, 0x53, | ||||
| 	0x54, 0xb6, 0x14, 0xb9, 0xff, 0x28, 0x03, 0x64, 0x5a, 0x9c, 0x23, 0x68, 0x07, 0x51, 0x5f, 0xdc, | ||||
| 	0x46, 0xc1, 0x80, 0xc9, 0x82, 0xd4, 0x4f, 0x18, 0x86, 0x4f, 0x1a, 0x9c, 0x33, 0xd5, 0xb0, 0xec, | ||||
| 	0xab, 0x7d, 0x2f, 0x18, 0xe7, 0xdd, 0x46, 0x4a, 0x2e, 0xa4, 0xca, 0xe5, 0xe9, 0x65, 0xce, 0x4f, | ||||
| 	0xe0, 0x56, 0x26, 0x74, 0x68, 0xc9, 0x2b, 0x5e, 0x29, 0xef, 0xa6, 0x91, 0x37, 0xcc, 0x64, 0xfd, | ||||
| 	0x08, 0x10, 0xee, 0xe3, 0xe5, 0x34, 0xcb, 0x49, 0x2a, 0x5d, 0x29, 0x69, 0x37, 0x88, 0xde, 0xd2, | ||||
| 	0x8a, 0x4c, 0xce, 0x5b, 0xb8, 0x63, 0x6d, 0x54, 0xa4, 0xbd, 0x25, 0xad, 0x7c, 0xa5, 0xb4, 0x7d, | ||||
| 	0x63, 0x97, 0x28, 0x0c, 0x99, 0xc8, 0x2f, 0x01, 0x67, 0xfa, 0x17, 0x7e, 0xc0, 0x17, 0xe5, 0x6d, | ||||
| 	0x5c, 0xb7, 0xcf, 0xaf, 0x70, 0x51, 0x5e, 0x98, 0xdc, 0xe7, 0x94, 0x25, 0xa3, 0xdc, 0x3e, 0x2b, | ||||
| 	0xd7, 0xed, 0xf3, 0x90, 0x56, 0x64, 0x72, 0x9e, 0x03, 0x82, 0x8b, 0xf6, 0x6c, 0x5e, 0x29, 0x65, | ||||
| 	0x3b, 0x88, 0xf2, 0xb6, 0x1c, 0xc0, 0x6e, 0xca, 0x06, 0x1c, 0x6f, 0x14, 0x4b, 0xc6, 0xd6, 0x95, | ||||
| 	0x32, 0x76, 0xd4, 0x02, 0x23, 0xc4, 0xfd, 0x1a, 0xea, 0x3f, 0x9e, 0x8d, 0x18, 0x9f, 0x9c, 0x9a, | ||||
| 	0x9c, 0xff, 0x4f, 0x97, 0x99, 0x7f, 0x61, 0x99, 0x39, 0x18, 0x25, 0xd1, 0x2c, 0xce, 0x55, 0x6d, | ||||
| 	0x99, 0xc3, 0x4b, 0x55, 0x9b, 0x78, 0xa8, 0x6a, 0x4b, 0xee, 0xcf, 0xa1, 0x2e, 0xbb, 0x33, 0xb5, | ||||
| 	0x40, 0x56, 0x21, 0x67, 0x39, 0xe9, 0x75, 0x37, 0x28, 0x97, 0x75, 0x55, 0xa7, 0xab, 0x56, 0xe5, | ||||
| 	0xab, 0x51, 0xe6, 0x26, 0xfc, 0xd4, 0xc9, 0xb2, 0x0e, 0xdb, 0xae, 0xb1, 0xf4, 0x8d, 0x5a, 0x25, | ||||
| 	0x03, 0xf0, 0x13, 0x6d, 0x5c, 0xb6, 0x87, 0x8e, 0xed, 0x43, 0xe9, 0xea, 0xfa, 0xd8, 0x76, 0xeb, | ||||
| 	0x23, 0x00, 0xf1, 0x2d, 0xd3, 0xd7, 0x85, 0xca, 0x7e, 0xca, 0x34, 0x37, 0x04, 0x7e, 0x38, 0xe9, | ||||
| 	0x61, 0xfb, 0x18, 0x76, 0x97, 0x64, 0xae, 0x28, 0x53, 0xdf, 0xb2, 0xcb, 0x54, 0xad, 0x7b, 0x53, | ||||
| 	0x89, 0xb4, 0x97, 0xda, 0xb5, 0xeb, 0xaf, 0x05, 0xf9, 0xe9, 0x63, 0x5e, 0x9b, 0xb0, 0x6f, 0x6b, | ||||
| 	0x84, 0xb2, 0xf9, 0x32, 0x07, 0x50, 0xb2, 0x04, 0xd9, 0x8d, 0x99, 0x57, 0x0f, 0xed, 0x36, 0x0d, | ||||
| 	0x0f, 0x62, 0x40, 0x1e, 0x58, 0x79, 0x10, 0x96, 0x73, 0xbc, 0xda, 0xc0, 0x3a, 0xed, 0x5c, 0xa3, | ||||
| 	0x58, 0xfe, 0x90, 0x46, 0x51, 0xbd, 0x5e, 0xac, 0x7b, 0x7a, 0xed, 0xfe, 0xb3, 0x02, 0xa5, 0x67, | ||||
| 	0xbd, 0x57, 0xce, 0x09, 0xec, 0x2c, 0xfe, 0x73, 0xe1, 0xdc, 0x53, 0x66, 0xad, 0xf9, 0xb7, 0xa3, | ||||
| 	0x7d, 0x7f, 0xed, 0xbc, 0x6a, 0xc1, 0x6f, 0x38, 0x1e, 0x6c, 0x2f, 0xbc, 0x53, 0x3b, 0xfa, 0xaa, | ||||
| 	0x59, 0xfd, 0x5f, 0x40, 0xfb, 0xde, 0xba, 0x69, 0x5b, 0xe6, 0x42, 0xcf, 0x6f, 0x64, 0xae, 0xfe, | ||||
| 	0x66, 0x34, 0x32, 0xd7, 0x7d, 0x2a, 0xdc, 0x70, 0xbe, 0x07, 0x15, 0xf9, 0x72, 0xed, 0xec, 0x29, | ||||
| 	0xde, 0xdc, 0x9b, 0x78, 0xfb, 0xd6, 0x02, 0x6a, 0x16, 0xbe, 0x86, 0x46, 0xee, 0xef, 0x0e, 0xe7, | ||||
| 	0xa3, 0x9c, 0xae, 0xfc, 0xc3, 0x77, 0xfb, 0xe3, 0xd5, 0x93, 0x46, 0xda, 0x01, 0x40, 0xf6, 0xb8, | ||||
| 	0xe9, 0xb4, 0x14, 0xf7, 0xd2, 0x03, 0x7a, 0xfb, 0xce, 0x8a, 0x19, 0x23, 0x04, 0x8f, 0x72, 0xf1, | ||||
| 	0x19, 0xd2, 0x59, 0xf0, 0xea, 0xe2, 0x23, 0xa0, 0x39, 0xca, 0xb5, 0xef, 0x97, 0x24, 0x76, 0xf1, | ||||
| 	0x71, 0xd1, 0x88, 0x5d, 0xf3, 0xb4, 0x69, 0xc4, 0xae, 0x7d, 0x95, 0xbc, 0xe1, 0xfc, 0x14, 0x9a, | ||||
| 	0xf9, 0xd7, 0x3a, 0x47, 0x3b, 0x69, 0xe5, 0x73, 0x65, 0xfb, 0xee, 0x9a, 0x59, 0x23, 0xf0, 0x33, | ||||
| 	0xd8, 0x90, 0xcf, 0x70, 0x3a, 0x1d, 0xed, 0xd7, 0xbb, 0xf6, 0x5e, 0x1e, 0x34, 0xab, 0x1e, 0x43, | ||||
| 	0x45, 0x7e, 0x2d, 0x9a, 0x00, 0xc8, 0x7d, 0x3c, 0xb6, 0xeb, 0x36, 0xea, 0xde, 0x78, 0x5c, 0xd0, | ||||
| 	0x7a, 0xd2, 0x9c, 0x9e, 0x74, 0x95, 0x1e, 0xeb, 0x70, 0x4e, 0x2b, 0x94, 0xae, 0x4f, 0xfe, 0x1d, | ||||
| 	0x00, 0x00, 0xff, 0xff, 0x88, 0xb3, 0x22, 0x9b, 0x78, 0x1c, 0x00, 0x00, | ||||
| } | ||||
|   | ||||
| @@ -2,6 +2,8 @@ syntax = "proto3"; | ||||
|  | ||||
| package types; | ||||
|  | ||||
| import "google/protobuf/timestamp.proto"; | ||||
|  | ||||
| service API { | ||||
| 	rpc GetServerVersion(GetServerVersionRequest) returns (GetServerVersionResponse) {} | ||||
| 	rpc CreateContainer(CreateContainerRequest) returns (CreateContainerResponse) {} | ||||
| @@ -207,7 +209,8 @@ message UpdateContainerResponse { | ||||
| } | ||||
|  | ||||
| message EventsRequest { | ||||
| 	uint64 timestamp = 1; | ||||
| 	// Tag 1 is deprecated (old uint64 timestamp) | ||||
| 	google.protobuf.Timestamp timestamp = 2; | ||||
| } | ||||
|  | ||||
| message Event { | ||||
| @@ -215,7 +218,8 @@ message Event { | ||||
| 	string id = 2; | ||||
| 	uint32 status = 3; | ||||
| 	string pid = 4; | ||||
| 	uint64 timestamp = 5; | ||||
| 	// Tag 5 is deprecated (old uint64 timestamp) | ||||
| 	google.protobuf.Timestamp timestamp = 6; | ||||
| } | ||||
|  | ||||
| message NetworkStats { | ||||
| @@ -305,7 +309,8 @@ message CgroupStats { | ||||
| message StatsResponse { | ||||
| 	repeated NetworkStats network_stats = 1; | ||||
| 	CgroupStats cgroup_stats = 2; | ||||
| 	uint64 timestamp = 3; | ||||
| 	// Tag 3 is deprecated (old uint64 timestamp) | ||||
| 	google.protobuf.Timestamp timestamp = 4; | ||||
| }; | ||||
|  | ||||
| message StatsRequest { | ||||
|   | ||||
| @@ -20,6 +20,7 @@ import ( | ||||
| 	"github.com/docker/containerd/api/grpc/types" | ||||
| 	"github.com/docker/containerd/specs" | ||||
| 	"github.com/docker/docker/pkg/term" | ||||
| 	"github.com/golang/protobuf/ptypes" | ||||
| 	netcontext "golang.org/x/net/context" | ||||
| 	"google.golang.org/grpc" | ||||
| 	"google.golang.org/grpc/grpclog" | ||||
| @@ -650,7 +651,7 @@ var updateCommand = cli.Command{ | ||||
| } | ||||
|  | ||||
| func waitForExit(c types.APIClient, events types.API_EventsClient, id, pid string, closer func()) { | ||||
| 	timestamp := uint64(time.Now().Unix()) | ||||
| 	timestamp := time.Now() | ||||
| 	for { | ||||
| 		e, err := events.Recv() | ||||
| 		if err != nil { | ||||
| @@ -659,10 +660,16 @@ func waitForExit(c types.APIClient, events types.API_EventsClient, id, pid strin | ||||
| 				os.Exit(128 + int(syscall.SIGHUP)) | ||||
| 			} | ||||
| 			time.Sleep(1 * time.Second) | ||||
| 			events, _ = c.Events(netcontext.Background(), &types.EventsRequest{Timestamp: timestamp}) | ||||
| 			tsp, err := ptypes.TimestampProto(timestamp) | ||||
| 			if err != nil { | ||||
| 				closer() | ||||
| 				fmt.Fprintf(os.Stderr, "%s", err.Error()) | ||||
| 				os.Exit(1) | ||||
| 			} | ||||
| 			events, _ = c.Events(netcontext.Background(), &types.EventsRequest{Timestamp: tsp}) | ||||
| 			continue | ||||
| 		} | ||||
| 		timestamp = e.Timestamp | ||||
| 		timestamp, err = ptypes.Timestamp(e.Timestamp) | ||||
| 		if e.Id == id && e.Type == "exit" && e.Pid == pid { | ||||
| 			closer() | ||||
| 			os.Exit(int(e.Status)) | ||||
|   | ||||
| @@ -8,6 +8,7 @@ import ( | ||||
|  | ||||
| 	"github.com/codegangsta/cli" | ||||
| 	"github.com/docker/containerd/api/grpc/types" | ||||
| 	"github.com/golang/protobuf/ptypes" | ||||
| 	netcontext "golang.org/x/net/context" | ||||
| ) | ||||
|  | ||||
| @@ -22,7 +23,7 @@ var eventsCommand = cli.Command{ | ||||
| 	}, | ||||
| 	Action: func(context *cli.Context) { | ||||
| 		var ( | ||||
| 			t int64 | ||||
| 			t = time.Time{} | ||||
| 			c = getClient(context) | ||||
| 		) | ||||
| 		if ts := context.String("timestamp"); ts != "" { | ||||
| @@ -30,15 +31,19 @@ var eventsCommand = cli.Command{ | ||||
| 			if err != nil { | ||||
| 				fatal(err.Error(), 1) | ||||
| 			} | ||||
| 			t = from.Unix() | ||||
| 			t = from | ||||
| 		} | ||||
| 		tsp, err := ptypes.TimestampProto(t) | ||||
| 		if err != nil { | ||||
| 			fatal(err.Error(), 1) | ||||
| 		} | ||||
| 		events, err := c.Events(netcontext.Background(), &types.EventsRequest{ | ||||
| 			Timestamp: uint64(t), | ||||
| 			Timestamp: tsp, | ||||
| 		}) | ||||
| 		if err != nil { | ||||
| 			fatal(err.Error(), 1) | ||||
| 		} | ||||
| 		w := tabwriter.NewWriter(os.Stdout, 20, 1, 3, ' ', 0) | ||||
| 		w := tabwriter.NewWriter(os.Stdout, 31, 1, 1, ' ', 0) | ||||
| 		fmt.Fprint(w, "TIME\tTYPE\tID\tPID\tSTATUS\n") | ||||
| 		w.Flush() | ||||
| 		for { | ||||
| @@ -46,7 +51,12 @@ var eventsCommand = cli.Command{ | ||||
| 			if err != nil { | ||||
| 				fatal(err.Error(), 1) | ||||
| 			} | ||||
| 			fmt.Fprintf(w, "%s\t%s\t%s\t%s\t%d\n", time.Unix(int64(e.Timestamp), 0).Format(time.RFC3339Nano), e.Type, e.Id, e.Pid, e.Status) | ||||
| 			t, err := ptypes.Timestamp(e.Timestamp) | ||||
| 			if err != nil { | ||||
| 				fmt.Fprintf(os.Stderr, "Unable to convert timestamp") | ||||
| 				t = time.Time{} | ||||
| 			} | ||||
| 			fmt.Fprintf(w, "%s\t%s\t%s\t%s\t%d\n", t.Format(time.RFC3339Nano), e.Type, e.Id, e.Pid, e.Status) | ||||
| 			w.Flush() | ||||
| 		} | ||||
| 	}, | ||||
|   | ||||
| @@ -21,6 +21,7 @@ import ( | ||||
| 	"github.com/docker/containerd/api/grpc/types" | ||||
| 	utils "github.com/docker/containerd/testutils" | ||||
| 	"github.com/go-check/check" | ||||
| 	"github.com/golang/protobuf/ptypes/timestamp" | ||||
| ) | ||||
|  | ||||
| func Test(t *testing.T) { | ||||
| @@ -28,7 +29,7 @@ func Test(t *testing.T) { | ||||
| } | ||||
|  | ||||
| func init() { | ||||
| 	check.Suite(&ContainerdSuite{lastEventTs: uint64(time.Now().Unix())}) | ||||
| 	check.Suite(&ContainerdSuite{}) | ||||
| } | ||||
|  | ||||
| type ContainerdSuite struct { | ||||
| @@ -42,7 +43,7 @@ type ContainerdSuite struct { | ||||
| 	grpcClient        types.APIClient | ||||
| 	eventFiltersMutex sync.Mutex | ||||
| 	eventFilters      map[string]func(event *types.Event) | ||||
| 	lastEventTs       uint64 | ||||
| 	lastEventTs       *timestamp.Timestamp | ||||
| } | ||||
|  | ||||
| // getClient returns a connection to the Suite containerd | ||||
|   | ||||
							
								
								
									
										110
									
								
								vendor/src/github.com/golang/protobuf/ptypes/any/any.pb.go
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										110
									
								
								vendor/src/github.com/golang/protobuf/ptypes/any/any.pb.go
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,110 @@ | ||||
| // Code generated by protoc-gen-go. | ||||
| // source: github.com/golang/protobuf/types/any/any.proto | ||||
| // DO NOT EDIT! | ||||
|  | ||||
| /* | ||||
| Package any is a generated protocol buffer package. | ||||
|  | ||||
| It is generated from these files: | ||||
| 	github.com/golang/protobuf/types/any/any.proto | ||||
|  | ||||
| It has these top-level messages: | ||||
| 	Any | ||||
| */ | ||||
| package any | ||||
|  | ||||
| import proto "github.com/golang/protobuf/proto" | ||||
| import fmt "fmt" | ||||
| import math "math" | ||||
|  | ||||
| // 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. | ||||
| const _ = proto.ProtoPackageIsVersion1 | ||||
|  | ||||
| // `Any` contains an arbitrary serialized message along with a URL | ||||
| // that describes the type of the serialized message. | ||||
| // | ||||
| // | ||||
| // JSON | ||||
| // ==== | ||||
| // The JSON representation of an `Any` value uses the regular | ||||
| // representation of the deserialized, embedded message, with an | ||||
| // additional field `@type` which contains the type URL. Example: | ||||
| // | ||||
| //     package google.profile; | ||||
| //     message Person { | ||||
| //       string first_name = 1; | ||||
| //       string last_name = 2; | ||||
| //     } | ||||
| // | ||||
| //     { | ||||
| //       "@type": "type.googleapis.com/google.profile.Person", | ||||
| //       "firstName": <string>, | ||||
| //       "lastName": <string> | ||||
| //     } | ||||
| // | ||||
| // If the embedded message type is well-known and has a custom JSON | ||||
| // representation, that representation will be embedded adding a field | ||||
| // `value` which holds the custom JSON in addition to the `@type` | ||||
| // field. Example (for message [google.protobuf.Duration][]): | ||||
| // | ||||
| //     { | ||||
| //       "@type": "type.googleapis.com/google.protobuf.Duration", | ||||
| //       "value": "1.212s" | ||||
| //     } | ||||
| // | ||||
| type Any struct { | ||||
| 	// A URL/resource name whose content describes the type of the | ||||
| 	// serialized message. | ||||
| 	// | ||||
| 	// For URLs which use the schema `http`, `https`, or no schema, the | ||||
| 	// following restrictions and interpretations apply: | ||||
| 	// | ||||
| 	// * If no schema is provided, `https` is assumed. | ||||
| 	// * The last segment of the URL's path must represent the fully | ||||
| 	//   qualified name of the type (as in `path/google.protobuf.Duration`). | ||||
| 	// * An HTTP GET on the URL must yield a [google.protobuf.Type][] | ||||
| 	//   value in binary format, or produce an error. | ||||
| 	// * Applications are allowed to cache lookup results based on the | ||||
| 	//   URL, or have them precompiled into a binary to avoid any | ||||
| 	//   lookup. Therefore, binary compatibility needs to be preserved | ||||
| 	//   on changes to types. (Use versioned type names to manage | ||||
| 	//   breaking changes.) | ||||
| 	// | ||||
| 	// Schemas other than `http`, `https` (or the empty schema) might be | ||||
| 	// used with implementation specific semantics. | ||||
| 	// | ||||
| 	TypeUrl string `protobuf:"bytes,1,opt,name=type_url,json=typeUrl" json:"type_url,omitempty"` | ||||
| 	// Must be valid serialized data of the above specified type. | ||||
| 	Value []byte `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` | ||||
| } | ||||
|  | ||||
| func (m *Any) Reset()                    { *m = Any{} } | ||||
| func (m *Any) String() string            { return proto.CompactTextString(m) } | ||||
| func (*Any) ProtoMessage()               {} | ||||
| func (*Any) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } | ||||
|  | ||||
| func init() { | ||||
| 	proto.RegisterType((*Any)(nil), "google.protobuf.Any") | ||||
| } | ||||
|  | ||||
| var fileDescriptor0 = []byte{ | ||||
| 	// 183 bytes of a gzipped FileDescriptorProto | ||||
| 	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xe2, 0xd2, 0x4b, 0xcf, 0x2c, 0xc9, | ||||
| 	0x28, 0x4d, 0xd2, 0x4b, 0xce, 0xcf, 0xd5, 0x4f, 0xcf, 0xcf, 0x49, 0xcc, 0x4b, 0xd7, 0x2f, 0x28, | ||||
| 	0xca, 0x2f, 0xc9, 0x4f, 0x2a, 0x4d, 0xd3, 0x2f, 0xa9, 0x2c, 0x48, 0x2d, 0xd6, 0x4f, 0xcc, 0xab, | ||||
| 	0x04, 0x61, 0x3d, 0xb0, 0xb0, 0x10, 0x7f, 0x7a, 0x7e, 0x7e, 0x7a, 0x4e, 0xaa, 0x1e, 0x4c, 0x91, | ||||
| 	0x92, 0x19, 0x17, 0xb3, 0x63, 0x5e, 0xa5, 0x90, 0x24, 0x17, 0x07, 0x48, 0x79, 0x7c, 0x69, 0x51, | ||||
| 	0x8e, 0x04, 0xa3, 0x02, 0xa3, 0x06, 0x67, 0x10, 0x3b, 0x88, 0x1f, 0x5a, 0x94, 0x23, 0x24, 0xc2, | ||||
| 	0xc5, 0x5a, 0x96, 0x98, 0x53, 0x9a, 0x2a, 0xc1, 0x04, 0x14, 0xe7, 0x09, 0x82, 0x70, 0x9c, 0x02, | ||||
| 	0xb8, 0x84, 0x81, 0x76, 0xea, 0xa1, 0x19, 0xe7, 0xc4, 0x01, 0x34, 0x2c, 0x00, 0xc4, 0x09, 0x60, | ||||
| 	0x8c, 0x62, 0x06, 0x5a, 0xbb, 0x80, 0x91, 0x71, 0x11, 0x13, 0xb3, 0x7b, 0x80, 0xd3, 0x2a, 0x26, | ||||
| 	0x39, 0x77, 0x88, 0xda, 0x00, 0xa8, 0x5a, 0xbd, 0xf0, 0xd4, 0x9c, 0x1c, 0xef, 0xbc, 0xfc, 0xf2, | ||||
| 	0xbc, 0x10, 0x90, 0x43, 0x93, 0xd8, 0xc0, 0x86, 0x18, 0x03, 0x02, 0x00, 0x00, 0xff, 0xff, 0x69, | ||||
| 	0x04, 0x7f, 0x3b, 0xd3, 0x00, 0x00, 0x00, | ||||
| } | ||||
							
								
								
									
										100
									
								
								vendor/src/github.com/golang/protobuf/ptypes/any/any.proto
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										100
									
								
								vendor/src/github.com/golang/protobuf/ptypes/any/any.proto
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,100 @@ | ||||
| // Protocol Buffers - Google's data interchange format | ||||
| // Copyright 2008 Google Inc.  All rights reserved. | ||||
| // https://developers.google.com/protocol-buffers/ | ||||
| // | ||||
| // Redistribution and use in source and binary forms, with or without | ||||
| // modification, are permitted provided that the following conditions are | ||||
| // met: | ||||
| // | ||||
| //     * Redistributions of source code must retain the above copyright | ||||
| // notice, this list of conditions and the following disclaimer. | ||||
| //     * Redistributions in binary form must reproduce the above | ||||
| // copyright notice, this list of conditions and the following disclaimer | ||||
| // in the documentation and/or other materials provided with the | ||||
| // distribution. | ||||
| //     * Neither the name of Google Inc. nor the names of its | ||||
| // contributors may be used to endorse or promote products derived from | ||||
| // this software without specific prior written permission. | ||||
| // | ||||
| // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | ||||
| // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | ||||
| // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | ||||
| // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT | ||||
| // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | ||||
| // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | ||||
| // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | ||||
| // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | ||||
| // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
| // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | ||||
| // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
|  | ||||
| syntax = "proto3"; | ||||
|  | ||||
| package google.protobuf; | ||||
| option go_package = "any"; | ||||
|  | ||||
| option csharp_namespace = "Google.Protobuf.WellKnownTypes"; | ||||
| option java_package = "com.google.protobuf"; | ||||
| option java_outer_classname = "AnyProto"; | ||||
| option java_multiple_files = true; | ||||
| option java_generate_equals_and_hash = true; | ||||
| option objc_class_prefix = "GPB"; | ||||
|  | ||||
| // `Any` contains an arbitrary serialized message along with a URL | ||||
| // that describes the type of the serialized message. | ||||
| // | ||||
| // | ||||
| // JSON | ||||
| // ==== | ||||
| // The JSON representation of an `Any` value uses the regular | ||||
| // representation of the deserialized, embedded message, with an | ||||
| // additional field `@type` which contains the type URL. Example: | ||||
| // | ||||
| //     package google.profile; | ||||
| //     message Person { | ||||
| //       string first_name = 1; | ||||
| //       string last_name = 2; | ||||
| //     } | ||||
| // | ||||
| //     { | ||||
| //       "@type": "type.googleapis.com/google.profile.Person", | ||||
| //       "firstName": <string>, | ||||
| //       "lastName": <string> | ||||
| //     } | ||||
| // | ||||
| // If the embedded message type is well-known and has a custom JSON | ||||
| // representation, that representation will be embedded adding a field | ||||
| // `value` which holds the custom JSON in addition to the `@type` | ||||
| // field. Example (for message [google.protobuf.Duration][]): | ||||
| // | ||||
| //     { | ||||
| //       "@type": "type.googleapis.com/google.protobuf.Duration", | ||||
| //       "value": "1.212s" | ||||
| //     } | ||||
| // | ||||
| message Any { | ||||
|   // A URL/resource name whose content describes the type of the | ||||
|   // serialized message. | ||||
|   // | ||||
|   // For URLs which use the schema `http`, `https`, or no schema, the | ||||
|   // following restrictions and interpretations apply: | ||||
|   // | ||||
|   // * If no schema is provided, `https` is assumed. | ||||
|   // * The last segment of the URL's path must represent the fully | ||||
|   //   qualified name of the type (as in `path/google.protobuf.Duration`). | ||||
|   // * An HTTP GET on the URL must yield a [google.protobuf.Type][] | ||||
|   //   value in binary format, or produce an error. | ||||
|   // * Applications are allowed to cache lookup results based on the | ||||
|   //   URL, or have them precompiled into a binary to avoid any | ||||
|   //   lookup. Therefore, binary compatibility needs to be preserved | ||||
|   //   on changes to types. (Use versioned type names to manage | ||||
|   //   breaking changes.) | ||||
|   // | ||||
|   // Schemas other than `http`, `https` (or the empty schema) might be | ||||
|   // used with implementation specific semantics. | ||||
|   // | ||||
|   string type_url = 1; | ||||
|  | ||||
|   // Must be valid serialized data of the above specified type. | ||||
|   bytes value = 2; | ||||
| } | ||||
							
								
								
									
										35
									
								
								vendor/src/github.com/golang/protobuf/ptypes/doc.go
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								vendor/src/github.com/golang/protobuf/ptypes/doc.go
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,35 @@ | ||||
| // Go support for Protocol Buffers - Google's data interchange format | ||||
| // | ||||
| // Copyright 2016 The Go Authors.  All rights reserved. | ||||
| // https://github.com/golang/protobuf | ||||
| // | ||||
| // Redistribution and use in source and binary forms, with or without | ||||
| // modification, are permitted provided that the following conditions are | ||||
| // met: | ||||
| // | ||||
| //     * Redistributions of source code must retain the above copyright | ||||
| // notice, this list of conditions and the following disclaimer. | ||||
| //     * Redistributions in binary form must reproduce the above | ||||
| // copyright notice, this list of conditions and the following disclaimer | ||||
| // in the documentation and/or other materials provided with the | ||||
| // distribution. | ||||
| //     * Neither the name of Google Inc. nor the names of its | ||||
| // contributors may be used to endorse or promote products derived from | ||||
| // this software without specific prior written permission. | ||||
| // | ||||
| // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | ||||
| // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | ||||
| // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | ||||
| // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT | ||||
| // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | ||||
| // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | ||||
| // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | ||||
| // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | ||||
| // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
| // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | ||||
| // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
|  | ||||
| /* | ||||
| Package ptypes contains code for interacting with well-known types. | ||||
| */ | ||||
| package ptypes | ||||
							
								
								
									
										102
									
								
								vendor/src/github.com/golang/protobuf/ptypes/duration.go
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										102
									
								
								vendor/src/github.com/golang/protobuf/ptypes/duration.go
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,102 @@ | ||||
| // Go support for Protocol Buffers - Google's data interchange format | ||||
| // | ||||
| // Copyright 2016 The Go Authors.  All rights reserved. | ||||
| // https://github.com/golang/protobuf | ||||
| // | ||||
| // Redistribution and use in source and binary forms, with or without | ||||
| // modification, are permitted provided that the following conditions are | ||||
| // met: | ||||
| // | ||||
| //     * Redistributions of source code must retain the above copyright | ||||
| // notice, this list of conditions and the following disclaimer. | ||||
| //     * Redistributions in binary form must reproduce the above | ||||
| // copyright notice, this list of conditions and the following disclaimer | ||||
| // in the documentation and/or other materials provided with the | ||||
| // distribution. | ||||
| //     * Neither the name of Google Inc. nor the names of its | ||||
| // contributors may be used to endorse or promote products derived from | ||||
| // this software without specific prior written permission. | ||||
| // | ||||
| // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | ||||
| // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | ||||
| // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | ||||
| // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT | ||||
| // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | ||||
| // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | ||||
| // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | ||||
| // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | ||||
| // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
| // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | ||||
| // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
|  | ||||
| package ptypes | ||||
|  | ||||
| // This file implements conversions between google.protobuf.Duration | ||||
| // and time.Duration. | ||||
|  | ||||
| import ( | ||||
| 	"errors" | ||||
| 	"fmt" | ||||
| 	"time" | ||||
|  | ||||
| 	durpb "github.com/golang/protobuf/ptypes/duration" | ||||
| ) | ||||
|  | ||||
| const ( | ||||
| 	// Range of a durpb.Duration in seconds, as specified in | ||||
| 	// google/protobuf/duration.proto. This is about 10,000 years in seconds. | ||||
| 	maxSeconds = int64(10000 * 365.25 * 24 * 60 * 60) | ||||
| 	minSeconds = -maxSeconds | ||||
| ) | ||||
|  | ||||
| // validateDuration determines whether the durpb.Duration is valid according to the | ||||
| // definition in google/protobuf/duration.proto. A valid durpb.Duration | ||||
| // may still be too large to fit into a time.Duration (the range of durpb.Duration | ||||
| // is about 10,000 years, and the range of time.Duration is about 290). | ||||
| func validateDuration(d *durpb.Duration) error { | ||||
| 	if d == nil { | ||||
| 		return errors.New("duration: nil Duration") | ||||
| 	} | ||||
| 	if d.Seconds < minSeconds || d.Seconds > maxSeconds { | ||||
| 		return fmt.Errorf("duration: %v: seconds out of range", d) | ||||
| 	} | ||||
| 	if d.Nanos <= -1e9 || d.Nanos >= 1e9 { | ||||
| 		return fmt.Errorf("duration: %v: nanos out of range", d) | ||||
| 	} | ||||
| 	// Seconds and Nanos must have the same sign, unless d.Nanos is zero. | ||||
| 	if (d.Seconds < 0 && d.Nanos > 0) || (d.Seconds > 0 && d.Nanos < 0) { | ||||
| 		return fmt.Errorf("duration: %v: seconds and nanos have different signs", d) | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| // Duration converts a durpb.Duration to a time.Duration. Duration | ||||
| // returns an error if the durpb.Duration is invalid or is too large to be | ||||
| // represented in a time.Duration. | ||||
| func Duration(p *durpb.Duration) (time.Duration, error) { | ||||
| 	if err := validateDuration(p); err != nil { | ||||
| 		return 0, err | ||||
| 	} | ||||
| 	d := time.Duration(p.Seconds) * time.Second | ||||
| 	if int64(d/time.Second) != p.Seconds { | ||||
| 		return 0, fmt.Errorf("duration: %v is out of range for time.Duration", p) | ||||
| 	} | ||||
| 	if p.Nanos != 0 { | ||||
| 		d += time.Duration(p.Nanos) | ||||
| 		if (d < 0) != (p.Nanos < 0) { | ||||
| 			return 0, fmt.Errorf("duration: %v is out of range for time.Duration", p) | ||||
| 		} | ||||
| 	} | ||||
| 	return d, nil | ||||
| } | ||||
|  | ||||
| // DurationProto converts a time.Duration to a durpb.Duration. | ||||
| func DurationProto(d time.Duration) *durpb.Duration { | ||||
| 	nanos := d.Nanoseconds() | ||||
| 	secs := nanos / 1e9 | ||||
| 	nanos -= secs * 1e9 | ||||
| 	return &durpb.Duration{ | ||||
| 		Seconds: secs, | ||||
| 		Nanos:   int32(nanos), | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										106
									
								
								vendor/src/github.com/golang/protobuf/ptypes/duration/duration.pb.go
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										106
									
								
								vendor/src/github.com/golang/protobuf/ptypes/duration/duration.pb.go
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,106 @@ | ||||
| // Code generated by protoc-gen-go. | ||||
| // source: github.com/golang/protobuf/types/duration/duration.proto | ||||
| // DO NOT EDIT! | ||||
|  | ||||
| /* | ||||
| Package duration is a generated protocol buffer package. | ||||
|  | ||||
| It is generated from these files: | ||||
| 	github.com/golang/protobuf/types/duration/duration.proto | ||||
|  | ||||
| It has these top-level messages: | ||||
| 	Duration | ||||
| */ | ||||
| package duration | ||||
|  | ||||
| import proto "github.com/golang/protobuf/proto" | ||||
| import fmt "fmt" | ||||
| import math "math" | ||||
|  | ||||
| // 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. | ||||
| const _ = proto.ProtoPackageIsVersion1 | ||||
|  | ||||
| // A Duration represents a signed, fixed-length span of time represented | ||||
| // as a count of seconds and fractions of seconds at nanosecond | ||||
| // resolution. It is independent of any calendar and concepts like "day" | ||||
| // or "month". It is related to Timestamp in that the difference between | ||||
| // two Timestamp values is a Duration and it can be added or subtracted | ||||
| // from a Timestamp. Range is approximately +-10,000 years. | ||||
| // | ||||
| // Example 1: Compute Duration from two Timestamps in pseudo code. | ||||
| // | ||||
| //     Timestamp start = ...; | ||||
| //     Timestamp end = ...; | ||||
| //     Duration duration = ...; | ||||
| // | ||||
| //     duration.seconds = end.seconds - start.seconds; | ||||
| //     duration.nanos = end.nanos - start.nanos; | ||||
| // | ||||
| //     if (duration.seconds < 0 && duration.nanos > 0) { | ||||
| //       duration.seconds += 1; | ||||
| //       duration.nanos -= 1000000000; | ||||
| //     } else if (durations.seconds > 0 && duration.nanos < 0) { | ||||
| //       duration.seconds -= 1; | ||||
| //       duration.nanos += 1000000000; | ||||
| //     } | ||||
| // | ||||
| // Example 2: Compute Timestamp from Timestamp + Duration in pseudo code. | ||||
| // | ||||
| //     Timestamp start = ...; | ||||
| //     Duration duration = ...; | ||||
| //     Timestamp end = ...; | ||||
| // | ||||
| //     end.seconds = start.seconds + duration.seconds; | ||||
| //     end.nanos = start.nanos + duration.nanos; | ||||
| // | ||||
| //     if (end.nanos < 0) { | ||||
| //       end.seconds -= 1; | ||||
| //       end.nanos += 1000000000; | ||||
| //     } else if (end.nanos >= 1000000000) { | ||||
| //       end.seconds += 1; | ||||
| //       end.nanos -= 1000000000; | ||||
| //     } | ||||
| // | ||||
| type Duration struct { | ||||
| 	// Signed seconds of the span of time. Must be from -315,576,000,000 | ||||
| 	// to +315,576,000,000 inclusive. | ||||
| 	Seconds int64 `protobuf:"varint,1,opt,name=seconds" json:"seconds,omitempty"` | ||||
| 	// Signed fractions of a second at nanosecond resolution of the span | ||||
| 	// of time. Durations less than one second are represented with a 0 | ||||
| 	// `seconds` field and a positive or negative `nanos` field. For durations | ||||
| 	// of one second or more, a non-zero value for the `nanos` field must be | ||||
| 	// of the same sign as the `seconds` field. Must be from -999,999,999 | ||||
| 	// to +999,999,999 inclusive. | ||||
| 	Nanos int32 `protobuf:"varint,2,opt,name=nanos" json:"nanos,omitempty"` | ||||
| } | ||||
|  | ||||
| func (m *Duration) Reset()                    { *m = Duration{} } | ||||
| func (m *Duration) String() string            { return proto.CompactTextString(m) } | ||||
| func (*Duration) ProtoMessage()               {} | ||||
| func (*Duration) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } | ||||
|  | ||||
| func init() { | ||||
| 	proto.RegisterType((*Duration)(nil), "google.protobuf.Duration") | ||||
| } | ||||
|  | ||||
| var fileDescriptor0 = []byte{ | ||||
| 	// 186 bytes of a gzipped FileDescriptorProto | ||||
| 	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xe2, 0xb2, 0x48, 0xcf, 0x2c, 0xc9, | ||||
| 	0x28, 0x4d, 0xd2, 0x4b, 0xce, 0xcf, 0xd5, 0x4f, 0xcf, 0xcf, 0x49, 0xcc, 0x4b, 0xd7, 0x2f, 0x28, | ||||
| 	0xca, 0x2f, 0xc9, 0x4f, 0x2a, 0x4d, 0xd3, 0x2f, 0xa9, 0x2c, 0x48, 0x2d, 0xd6, 0x4f, 0x29, 0x2d, | ||||
| 	0x4a, 0x2c, 0xc9, 0xcc, 0xcf, 0x83, 0x33, 0xf4, 0xc0, 0x0a, 0x84, 0xf8, 0xd3, 0xf3, 0xf3, 0xd3, | ||||
| 	0x73, 0x52, 0xf5, 0x60, 0xca, 0x95, 0xac, 0xb8, 0x38, 0x5c, 0xa0, 0x4a, 0x84, 0x24, 0xb8, 0xd8, | ||||
| 	0x8b, 0x53, 0x93, 0xf3, 0xf3, 0x52, 0x8a, 0x25, 0x18, 0x15, 0x18, 0x35, 0x98, 0x83, 0x60, 0x5c, | ||||
| 	0x21, 0x11, 0x2e, 0xd6, 0xbc, 0xc4, 0xbc, 0xfc, 0x62, 0x09, 0x26, 0xa0, 0x38, 0x6b, 0x10, 0x84, | ||||
| 	0xe3, 0x14, 0xc5, 0x25, 0x0c, 0x74, 0x81, 0x1e, 0x9a, 0x91, 0x4e, 0xbc, 0x30, 0x03, 0x03, 0x40, | ||||
| 	0x22, 0x01, 0x8c, 0x51, 0x1c, 0x30, 0x47, 0x2c, 0x60, 0x64, 0x5c, 0xc4, 0xc4, 0xec, 0x1e, 0xe0, | ||||
| 	0xb4, 0x8a, 0x49, 0xce, 0x1d, 0xa2, 0x2b, 0x00, 0xaa, 0x4b, 0x2f, 0x3c, 0x35, 0x27, 0xc7, 0x3b, | ||||
| 	0x2f, 0xbf, 0x3c, 0x2f, 0x04, 0xe4, 0x81, 0x24, 0x36, 0xb0, 0x71, 0xc6, 0x80, 0x00, 0x00, 0x00, | ||||
| 	0xff, 0xff, 0x04, 0x47, 0x33, 0x15, 0xeb, 0x00, 0x00, 0x00, | ||||
| } | ||||
							
								
								
									
										97
									
								
								vendor/src/github.com/golang/protobuf/ptypes/duration/duration.proto
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										97
									
								
								vendor/src/github.com/golang/protobuf/ptypes/duration/duration.proto
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,97 @@ | ||||
| // Protocol Buffers - Google's data interchange format | ||||
| // Copyright 2008 Google Inc.  All rights reserved. | ||||
| // https://developers.google.com/protocol-buffers/ | ||||
| // | ||||
| // Redistribution and use in source and binary forms, with or without | ||||
| // modification, are permitted provided that the following conditions are | ||||
| // met: | ||||
| // | ||||
| //     * Redistributions of source code must retain the above copyright | ||||
| // notice, this list of conditions and the following disclaimer. | ||||
| //     * Redistributions in binary form must reproduce the above | ||||
| // copyright notice, this list of conditions and the following disclaimer | ||||
| // in the documentation and/or other materials provided with the | ||||
| // distribution. | ||||
| //     * Neither the name of Google Inc. nor the names of its | ||||
| // contributors may be used to endorse or promote products derived from | ||||
| // this software without specific prior written permission. | ||||
| // | ||||
| // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | ||||
| // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | ||||
| // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | ||||
| // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT | ||||
| // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | ||||
| // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | ||||
| // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | ||||
| // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | ||||
| // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
| // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | ||||
| // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
|  | ||||
| syntax = "proto3"; | ||||
|  | ||||
| package google.protobuf; | ||||
| option go_package = "duration"; | ||||
|  | ||||
| option csharp_namespace = "Google.Protobuf.WellKnownTypes"; | ||||
| option java_package = "com.google.protobuf"; | ||||
| option java_outer_classname = "DurationProto"; | ||||
| option java_multiple_files = true; | ||||
| option java_generate_equals_and_hash = true; | ||||
| option objc_class_prefix = "GPB"; | ||||
|  | ||||
| // A Duration represents a signed, fixed-length span of time represented | ||||
| // as a count of seconds and fractions of seconds at nanosecond | ||||
| // resolution. It is independent of any calendar and concepts like "day" | ||||
| // or "month". It is related to Timestamp in that the difference between | ||||
| // two Timestamp values is a Duration and it can be added or subtracted | ||||
| // from a Timestamp. Range is approximately +-10,000 years. | ||||
| // | ||||
| // Example 1: Compute Duration from two Timestamps in pseudo code. | ||||
| // | ||||
| //     Timestamp start = ...; | ||||
| //     Timestamp end = ...; | ||||
| //     Duration duration = ...; | ||||
| // | ||||
| //     duration.seconds = end.seconds - start.seconds; | ||||
| //     duration.nanos = end.nanos - start.nanos; | ||||
| // | ||||
| //     if (duration.seconds < 0 && duration.nanos > 0) { | ||||
| //       duration.seconds += 1; | ||||
| //       duration.nanos -= 1000000000; | ||||
| //     } else if (durations.seconds > 0 && duration.nanos < 0) { | ||||
| //       duration.seconds -= 1; | ||||
| //       duration.nanos += 1000000000; | ||||
| //     } | ||||
| // | ||||
| // Example 2: Compute Timestamp from Timestamp + Duration in pseudo code. | ||||
| // | ||||
| //     Timestamp start = ...; | ||||
| //     Duration duration = ...; | ||||
| //     Timestamp end = ...; | ||||
| // | ||||
| //     end.seconds = start.seconds + duration.seconds; | ||||
| //     end.nanos = start.nanos + duration.nanos; | ||||
| // | ||||
| //     if (end.nanos < 0) { | ||||
| //       end.seconds -= 1; | ||||
| //       end.nanos += 1000000000; | ||||
| //     } else if (end.nanos >= 1000000000) { | ||||
| //       end.seconds += 1; | ||||
| //       end.nanos -= 1000000000; | ||||
| //     } | ||||
| // | ||||
| message Duration { | ||||
|  | ||||
|   // Signed seconds of the span of time. Must be from -315,576,000,000 | ||||
|   // to +315,576,000,000 inclusive. | ||||
|   int64 seconds = 1; | ||||
|  | ||||
|   // Signed fractions of a second at nanosecond resolution of the span | ||||
|   // of time. Durations less than one second are represented with a 0 | ||||
|   // `seconds` field and a positive or negative `nanos` field. For durations | ||||
|   // of one second or more, a non-zero value for the `nanos` field must be | ||||
|   // of the same sign as the `seconds` field. Must be from -999,999,999 | ||||
|   // to +999,999,999 inclusive. | ||||
|   int32 nanos = 2; | ||||
| } | ||||
							
								
								
									
										72
									
								
								vendor/src/github.com/golang/protobuf/ptypes/regen.sh
									
									
									
									
										vendored
									
									
										Executable file
									
								
							
							
						
						
									
										72
									
								
								vendor/src/github.com/golang/protobuf/ptypes/regen.sh
									
									
									
									
										vendored
									
									
										Executable file
									
								
							| @@ -0,0 +1,72 @@ | ||||
| #!/bin/bash -e | ||||
| # | ||||
| # This script fetches and rebuilds the "well-known types" protocol buffers. | ||||
| # To run this you will need protoc and goprotobuf installed; | ||||
| # see https://github.com/golang/protobuf for instructions. | ||||
| # You also need Go and Git installed. | ||||
|  | ||||
| PKG=github.com/golang/protobuf/types | ||||
| UPSTREAM=https://github.com/google/protobuf | ||||
| UPSTREAM_SUBDIR=src/google/protobuf | ||||
| PROTO_FILES=' | ||||
|   any.proto | ||||
|   duration.proto | ||||
|   empty.proto | ||||
|   struct.proto | ||||
|   timestamp.proto | ||||
|   wrappers.proto | ||||
| ' | ||||
|  | ||||
| function die() { | ||||
|   echo 1>&2 $* | ||||
|   exit 1 | ||||
| } | ||||
|  | ||||
| # Sanity check that the right tools are accessible. | ||||
| for tool in go git protoc protoc-gen-go; do | ||||
|   q=$(which $tool) || die "didn't find $tool" | ||||
|   echo 1>&2 "$tool: $q" | ||||
| done | ||||
|  | ||||
| tmpdir=$(mktemp -d -t regen-wkt.XXXXXX) | ||||
| trap 'rm -rf $tmpdir' EXIT | ||||
|  | ||||
| echo -n 1>&2 "finding package dir... " | ||||
| pkgdir=$(go list -f '{{.Dir}}' $PKG) | ||||
| echo 1>&2 $pkgdir | ||||
| base=$(echo $pkgdir | sed "s,/$PKG\$,,") | ||||
| echo 1>&2 "base: $base" | ||||
| cd $base | ||||
|  | ||||
| echo 1>&2 "fetching latest protos... " | ||||
| git clone -q $UPSTREAM $tmpdir | ||||
| # Pass 1: build mapping from upstream filename to our filename. | ||||
| declare -A filename_map | ||||
| for f in $(cd $PKG && find * -name '*.proto'); do | ||||
|   echo -n 1>&2 "looking for latest version of $f... " | ||||
|   up=$(cd $tmpdir/$UPSTREAM_SUBDIR && find * -name $(basename $f) | grep -v /testdata/) | ||||
|   echo 1>&2 $up | ||||
|   if [ $(echo $up | wc -w) != "1" ]; then | ||||
|     die "not exactly one match" | ||||
|   fi | ||||
|   filename_map[$up]=$f | ||||
| done | ||||
| # Pass 2: copy files, making necessary adjustments. | ||||
| for up in "${!filename_map[@]}"; do | ||||
|   f=${filename_map[$up]} | ||||
|   shortname=$(basename $f | sed 's,\.proto$,,') | ||||
|   cat $tmpdir/$UPSTREAM_SUBDIR/$up | | ||||
|     # Adjust proto package. | ||||
|     # TODO(dsymonds): Upstream the go_package option instead. | ||||
|     sed '/^package /a option go_package = "'${shortname}'";' | | ||||
|     # Unfortunately "package struct" doesn't work. | ||||
|     sed '/option go_package/s,"struct","structpb",' | | ||||
|     cat > $PKG/$f | ||||
| done | ||||
|  | ||||
| # Run protoc once per package. | ||||
| for dir in $(find $PKG -name '*.proto' | xargs dirname | sort | uniq); do | ||||
|   echo 1>&2 "* $dir" | ||||
|   protoc --go_out=. $dir/*.proto | ||||
| done | ||||
| echo 1>&2 "All OK" | ||||
							
								
								
									
										125
									
								
								vendor/src/github.com/golang/protobuf/ptypes/timestamp.go
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										125
									
								
								vendor/src/github.com/golang/protobuf/ptypes/timestamp.go
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,125 @@ | ||||
| // Go support for Protocol Buffers - Google's data interchange format | ||||
| // | ||||
| // Copyright 2016 The Go Authors.  All rights reserved. | ||||
| // https://github.com/golang/protobuf | ||||
| // | ||||
| // Redistribution and use in source and binary forms, with or without | ||||
| // modification, are permitted provided that the following conditions are | ||||
| // met: | ||||
| // | ||||
| //     * Redistributions of source code must retain the above copyright | ||||
| // notice, this list of conditions and the following disclaimer. | ||||
| //     * Redistributions in binary form must reproduce the above | ||||
| // copyright notice, this list of conditions and the following disclaimer | ||||
| // in the documentation and/or other materials provided with the | ||||
| // distribution. | ||||
| //     * Neither the name of Google Inc. nor the names of its | ||||
| // contributors may be used to endorse or promote products derived from | ||||
| // this software without specific prior written permission. | ||||
| // | ||||
| // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | ||||
| // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | ||||
| // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | ||||
| // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT | ||||
| // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | ||||
| // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | ||||
| // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | ||||
| // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | ||||
| // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
| // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | ||||
| // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
|  | ||||
| package ptypes | ||||
|  | ||||
| // This file implements operations on google.protobuf.Timestamp. | ||||
|  | ||||
| import ( | ||||
| 	"errors" | ||||
| 	"fmt" | ||||
| 	"time" | ||||
|  | ||||
| 	tspb "github.com/golang/protobuf/ptypes/timestamp" | ||||
| ) | ||||
|  | ||||
| const ( | ||||
| 	// Seconds field of the earliest valid Timestamp. | ||||
| 	// This is time.Date(1, 1, 1, 0, 0, 0, 0, time.UTC).Unix(). | ||||
| 	minValidSeconds = -62135596800 | ||||
| 	// Seconds field just after the latest valid Timestamp. | ||||
| 	// This is time.Date(10000, 1, 1, 0, 0, 0, 0, time.UTC).Unix(). | ||||
| 	maxValidSeconds = 253402300800 | ||||
| ) | ||||
|  | ||||
| // validateTimestamp determines whether a Timestamp is valid. | ||||
| // A valid timestamp represents a time in the range | ||||
| // [0001-01-01, 10000-01-01) and has a Nanos field | ||||
| // in the range [0, 1e9). | ||||
| // | ||||
| // If the Timestamp is valid, validateTimestamp returns nil. | ||||
| // Otherwise, it returns an error that describes | ||||
| // the problem. | ||||
| // | ||||
| // Every valid Timestamp can be represented by a time.Time, but the converse is not true. | ||||
| func validateTimestamp(ts *tspb.Timestamp) error { | ||||
| 	if ts == nil { | ||||
| 		return errors.New("timestamp: nil Timestamp") | ||||
| 	} | ||||
| 	if ts.Seconds < minValidSeconds { | ||||
| 		return fmt.Errorf("timestamp: %v before 0001-01-01", ts) | ||||
| 	} | ||||
| 	if ts.Seconds >= maxValidSeconds { | ||||
| 		return fmt.Errorf("timestamp: %v after 10000-01-01", ts) | ||||
| 	} | ||||
| 	if ts.Nanos < 0 || ts.Nanos >= 1e9 { | ||||
| 		return fmt.Errorf("timestamp: %v: nanos not in range [0, 1e9)", ts) | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| // Timestamp converts a google.protobuf.Timestamp proto to a time.Time. | ||||
| // It returns an error if the argument is invalid. | ||||
| // | ||||
| // Unlike most Go functions, if Timestamp returns an error, the first return value | ||||
| // is not the zero time.Time. Instead, it is the value obtained from the | ||||
| // time.Unix function when passed the contents of the Timestamp, in the UTC | ||||
| // locale. This may or may not be a meaningful time; many invalid Timestamps | ||||
| // do map to valid time.Times. | ||||
| // | ||||
| // A nil Timestamp returns an error. The first return value in that case is | ||||
| // undefined. | ||||
| func Timestamp(ts *tspb.Timestamp) (time.Time, error) { | ||||
| 	// Don't return the zero value on error, because corresponds to a valid | ||||
| 	// timestamp. Instead return whatever time.Unix gives us. | ||||
| 	var t time.Time | ||||
| 	if ts == nil { | ||||
| 		t = time.Unix(0, 0).UTC() // treat nil like the empty Timestamp | ||||
| 	} else { | ||||
| 		t = time.Unix(ts.Seconds, int64(ts.Nanos)).UTC() | ||||
| 	} | ||||
| 	return t, validateTimestamp(ts) | ||||
| } | ||||
|  | ||||
| // TimestampProto converts the time.Time to a google.protobuf.Timestamp proto. | ||||
| // It returns an error if the resulting Timestamp is invalid. | ||||
| func TimestampProto(t time.Time) (*tspb.Timestamp, error) { | ||||
| 	seconds := t.Unix() | ||||
| 	nanos := int32(t.Sub(time.Unix(seconds, 0))) | ||||
| 	ts := &tspb.Timestamp{ | ||||
| 		Seconds: seconds, | ||||
| 		Nanos:   nanos, | ||||
| 	} | ||||
| 	if err := validateTimestamp(ts); err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	return ts, nil | ||||
| } | ||||
|  | ||||
| // TimestampString returns the RFC 3339 string for valid Timestamps. For invalid | ||||
| // Timestamps, it returns an error message in parentheses. | ||||
| func TimestampString(ts *tspb.Timestamp) string { | ||||
| 	t, err := Timestamp(ts) | ||||
| 	if err != nil { | ||||
| 		return fmt.Sprintf("(%v)", err) | ||||
| 	} | ||||
| 	return t.Format(time.RFC3339Nano) | ||||
| } | ||||
							
								
								
									
										119
									
								
								vendor/src/github.com/golang/protobuf/ptypes/timestamp/timestamp.pb.go
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										119
									
								
								vendor/src/github.com/golang/protobuf/ptypes/timestamp/timestamp.pb.go
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,119 @@ | ||||
| // Code generated by protoc-gen-go. | ||||
| // source: github.com/golang/protobuf/types/timestamp/timestamp.proto | ||||
| // DO NOT EDIT! | ||||
|  | ||||
| /* | ||||
| Package timestamp is a generated protocol buffer package. | ||||
|  | ||||
| It is generated from these files: | ||||
| 	github.com/golang/protobuf/types/timestamp/timestamp.proto | ||||
|  | ||||
| It has these top-level messages: | ||||
| 	Timestamp | ||||
| */ | ||||
| package timestamp | ||||
|  | ||||
| import proto "github.com/golang/protobuf/proto" | ||||
| import fmt "fmt" | ||||
| import math "math" | ||||
|  | ||||
| // 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. | ||||
| const _ = proto.ProtoPackageIsVersion1 | ||||
|  | ||||
| // A Timestamp represents a point in time independent of any time zone | ||||
| // or calendar, represented as seconds and fractions of seconds at | ||||
| // nanosecond resolution in UTC Epoch time. It is encoded using the | ||||
| // Proleptic Gregorian Calendar which extends the Gregorian calendar | ||||
| // backwards to year one. It is encoded assuming all minutes are 60 | ||||
| // seconds long, i.e. leap seconds are "smeared" so that no leap second | ||||
| // table is needed for interpretation. Range is from | ||||
| // 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. | ||||
| // By restricting to that range, we ensure that we can convert to | ||||
| // and from  RFC 3339 date strings. | ||||
| // See [https://www.ietf.org/rfc/rfc3339.txt](https://www.ietf.org/rfc/rfc3339.txt). | ||||
| // | ||||
| // Example 1: Compute Timestamp from POSIX `time()`. | ||||
| // | ||||
| //     Timestamp timestamp; | ||||
| //     timestamp.set_seconds(time(NULL)); | ||||
| //     timestamp.set_nanos(0); | ||||
| // | ||||
| // Example 2: Compute Timestamp from POSIX `gettimeofday()`. | ||||
| // | ||||
| //     struct timeval tv; | ||||
| //     gettimeofday(&tv, NULL); | ||||
| // | ||||
| //     Timestamp timestamp; | ||||
| //     timestamp.set_seconds(tv.tv_sec); | ||||
| //     timestamp.set_nanos(tv.tv_usec * 1000); | ||||
| // | ||||
| // Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`. | ||||
| // | ||||
| //     FILETIME ft; | ||||
| //     GetSystemTimeAsFileTime(&ft); | ||||
| //     UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime; | ||||
| // | ||||
| //     // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z | ||||
| //     // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z. | ||||
| //     Timestamp timestamp; | ||||
| //     timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL)); | ||||
| //     timestamp.set_nanos((INT32) ((ticks % 10000000) * 100)); | ||||
| // | ||||
| // Example 4: Compute Timestamp from Java `System.currentTimeMillis()`. | ||||
| // | ||||
| //     long millis = System.currentTimeMillis(); | ||||
| // | ||||
| //     Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000) | ||||
| //         .setNanos((int) ((millis % 1000) * 1000000)).build(); | ||||
| // | ||||
| // | ||||
| // Example 5: Compute Timestamp from current time in Python. | ||||
| // | ||||
| //     now = time.time() | ||||
| //     seconds = int(now) | ||||
| //     nanos = int((now - seconds) * 10**9) | ||||
| //     timestamp = Timestamp(seconds=seconds, nanos=nanos) | ||||
| // | ||||
| // | ||||
| type Timestamp struct { | ||||
| 	// Represents seconds of UTC time since Unix epoch | ||||
| 	// 1970-01-01T00:00:00Z. Must be from from 0001-01-01T00:00:00Z to | ||||
| 	// 9999-12-31T23:59:59Z inclusive. | ||||
| 	Seconds int64 `protobuf:"varint,1,opt,name=seconds" json:"seconds,omitempty"` | ||||
| 	// Non-negative fractions of a second at nanosecond resolution. Negative | ||||
| 	// second values with fractions must still have non-negative nanos values | ||||
| 	// that count forward in time. Must be from 0 to 999,999,999 | ||||
| 	// inclusive. | ||||
| 	Nanos int32 `protobuf:"varint,2,opt,name=nanos" json:"nanos,omitempty"` | ||||
| } | ||||
|  | ||||
| func (m *Timestamp) Reset()                    { *m = Timestamp{} } | ||||
| func (m *Timestamp) String() string            { return proto.CompactTextString(m) } | ||||
| func (*Timestamp) ProtoMessage()               {} | ||||
| func (*Timestamp) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } | ||||
|  | ||||
| func init() { | ||||
| 	proto.RegisterType((*Timestamp)(nil), "google.protobuf.Timestamp") | ||||
| } | ||||
|  | ||||
| var fileDescriptor0 = []byte{ | ||||
| 	// 190 bytes of a gzipped FileDescriptorProto | ||||
| 	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xe2, 0xb2, 0x4a, 0xcf, 0x2c, 0xc9, | ||||
| 	0x28, 0x4d, 0xd2, 0x4b, 0xce, 0xcf, 0xd5, 0x4f, 0xcf, 0xcf, 0x49, 0xcc, 0x4b, 0xd7, 0x2f, 0x28, | ||||
| 	0xca, 0x2f, 0xc9, 0x4f, 0x2a, 0x4d, 0xd3, 0x2f, 0xa9, 0x2c, 0x48, 0x2d, 0xd6, 0x2f, 0xc9, 0xcc, | ||||
| 	0x4d, 0x2d, 0x2e, 0x49, 0xcc, 0x2d, 0x40, 0xb0, 0xf4, 0xc0, 0x4a, 0x84, 0xf8, 0xd3, 0xf3, 0xf3, | ||||
| 	0xd3, 0x73, 0x52, 0xf5, 0x60, 0x1a, 0x94, 0xac, 0xb9, 0x38, 0x43, 0x60, 0x6a, 0x84, 0x24, 0xb8, | ||||
| 	0xd8, 0x8b, 0x53, 0x93, 0xf3, 0xf3, 0x52, 0x8a, 0x25, 0x18, 0x15, 0x18, 0x35, 0x98, 0x83, 0x60, | ||||
| 	0x5c, 0x21, 0x11, 0x2e, 0xd6, 0xbc, 0xc4, 0xbc, 0xfc, 0x62, 0x09, 0x26, 0xa0, 0x38, 0x6b, 0x10, | ||||
| 	0x84, 0xe3, 0x14, 0xcf, 0x25, 0x0c, 0x74, 0x84, 0x1e, 0x9a, 0x99, 0x4e, 0x7c, 0x70, 0x13, 0x03, | ||||
| 	0x40, 0x42, 0x01, 0x8c, 0x51, 0x9c, 0x70, 0x77, 0x2c, 0x60, 0x64, 0xfc, 0xc1, 0xc8, 0xb8, 0x88, | ||||
| 	0x89, 0xd9, 0x3d, 0xc0, 0x69, 0x15, 0x93, 0x9c, 0x3b, 0x44, 0x6b, 0x00, 0x54, 0xab, 0x5e, 0x78, | ||||
| 	0x6a, 0x4e, 0x8e, 0x77, 0x5e, 0x7e, 0x79, 0x5e, 0x08, 0xc8, 0x23, 0x49, 0x6c, 0x60, 0x33, 0x8d, | ||||
| 	0x01, 0x01, 0x00, 0x00, 0xff, 0xff, 0x5b, 0xdd, 0x30, 0x93, 0xf3, 0x00, 0x00, 0x00, | ||||
| } | ||||
							
								
								
									
										111
									
								
								vendor/src/github.com/golang/protobuf/ptypes/timestamp/timestamp.proto
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										111
									
								
								vendor/src/github.com/golang/protobuf/ptypes/timestamp/timestamp.proto
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,111 @@ | ||||
| // Protocol Buffers - Google's data interchange format | ||||
| // Copyright 2008 Google Inc.  All rights reserved. | ||||
| // https://developers.google.com/protocol-buffers/ | ||||
| // | ||||
| // Redistribution and use in source and binary forms, with or without | ||||
| // modification, are permitted provided that the following conditions are | ||||
| // met: | ||||
| // | ||||
| //     * Redistributions of source code must retain the above copyright | ||||
| // notice, this list of conditions and the following disclaimer. | ||||
| //     * Redistributions in binary form must reproduce the above | ||||
| // copyright notice, this list of conditions and the following disclaimer | ||||
| // in the documentation and/or other materials provided with the | ||||
| // distribution. | ||||
| //     * Neither the name of Google Inc. nor the names of its | ||||
| // contributors may be used to endorse or promote products derived from | ||||
| // this software without specific prior written permission. | ||||
| // | ||||
| // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | ||||
| // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | ||||
| // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | ||||
| // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT | ||||
| // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | ||||
| // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | ||||
| // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | ||||
| // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | ||||
| // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
| // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | ||||
| // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
|  | ||||
| syntax = "proto3"; | ||||
|  | ||||
| package google.protobuf; | ||||
| option go_package = "timestamp"; | ||||
|  | ||||
| option csharp_namespace = "Google.Protobuf.WellKnownTypes"; | ||||
| option cc_enable_arenas = true; | ||||
| option java_package = "com.google.protobuf"; | ||||
| option java_outer_classname = "TimestampProto"; | ||||
| option java_multiple_files = true; | ||||
| option java_generate_equals_and_hash = true; | ||||
| option objc_class_prefix = "GPB"; | ||||
|  | ||||
| // A Timestamp represents a point in time independent of any time zone | ||||
| // or calendar, represented as seconds and fractions of seconds at | ||||
| // nanosecond resolution in UTC Epoch time. It is encoded using the | ||||
| // Proleptic Gregorian Calendar which extends the Gregorian calendar | ||||
| // backwards to year one. It is encoded assuming all minutes are 60 | ||||
| // seconds long, i.e. leap seconds are "smeared" so that no leap second | ||||
| // table is needed for interpretation. Range is from | ||||
| // 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. | ||||
| // By restricting to that range, we ensure that we can convert to | ||||
| // and from  RFC 3339 date strings. | ||||
| // See [https://www.ietf.org/rfc/rfc3339.txt](https://www.ietf.org/rfc/rfc3339.txt). | ||||
| // | ||||
| // Example 1: Compute Timestamp from POSIX `time()`. | ||||
| // | ||||
| //     Timestamp timestamp; | ||||
| //     timestamp.set_seconds(time(NULL)); | ||||
| //     timestamp.set_nanos(0); | ||||
| // | ||||
| // Example 2: Compute Timestamp from POSIX `gettimeofday()`. | ||||
| // | ||||
| //     struct timeval tv; | ||||
| //     gettimeofday(&tv, NULL); | ||||
| // | ||||
| //     Timestamp timestamp; | ||||
| //     timestamp.set_seconds(tv.tv_sec); | ||||
| //     timestamp.set_nanos(tv.tv_usec * 1000); | ||||
| // | ||||
| // Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`. | ||||
| // | ||||
| //     FILETIME ft; | ||||
| //     GetSystemTimeAsFileTime(&ft); | ||||
| //     UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime; | ||||
| // | ||||
| //     // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z | ||||
| //     // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z. | ||||
| //     Timestamp timestamp; | ||||
| //     timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL)); | ||||
| //     timestamp.set_nanos((INT32) ((ticks % 10000000) * 100)); | ||||
| // | ||||
| // Example 4: Compute Timestamp from Java `System.currentTimeMillis()`. | ||||
| // | ||||
| //     long millis = System.currentTimeMillis(); | ||||
| // | ||||
| //     Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000) | ||||
| //         .setNanos((int) ((millis % 1000) * 1000000)).build(); | ||||
| // | ||||
| // | ||||
| // Example 5: Compute Timestamp from current time in Python. | ||||
| // | ||||
| //     now = time.time() | ||||
| //     seconds = int(now) | ||||
| //     nanos = int((now - seconds) * 10**9) | ||||
| //     timestamp = Timestamp(seconds=seconds, nanos=nanos) | ||||
| // | ||||
| // | ||||
| message Timestamp { | ||||
|  | ||||
|   // Represents seconds of UTC time since Unix epoch | ||||
|   // 1970-01-01T00:00:00Z. Must be from from 0001-01-01T00:00:00Z to | ||||
|   // 9999-12-31T23:59:59Z inclusive. | ||||
|   int64 seconds = 1; | ||||
|  | ||||
|   // Non-negative fractions of a second at nanosecond resolution. Negative | ||||
|   // second values with fractions must still have non-negative nanos values | ||||
|   // that count forward in time. Must be from 0 to 999,999,999 | ||||
|   // inclusive. | ||||
|   int32 nanos = 2; | ||||
| } | ||||
		Reference in New Issue
	
	Block a user
	 Kenfe-Mickael Laventure
					Kenfe-Mickael Laventure