blob: 47944b65ced251ed321738418f89e98e4fe73080 [file] [log] [blame]
// Code generated by protoc-gen-go. DO NOT EDIT.
// source: go.chromium.org/luci/dm/api/service/v1/walk_graph.proto
package dm
import (
fmt "fmt"
proto "github.com/golang/protobuf/proto"
duration "github.com/golang/protobuf/ptypes/duration"
_ "github.com/golang/protobuf/ptypes/timestamp"
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.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
// Direction indicates that direction of dependencies that the request should
// walk.
type WalkGraphReq_Mode_Direction int32
const (
WalkGraphReq_Mode_FORWARDS WalkGraphReq_Mode_Direction = 0
WalkGraphReq_Mode_BACKWARDS WalkGraphReq_Mode_Direction = 1
WalkGraphReq_Mode_BOTH WalkGraphReq_Mode_Direction = 2
)
var WalkGraphReq_Mode_Direction_name = map[int32]string{
0: "FORWARDS",
1: "BACKWARDS",
2: "BOTH",
}
var WalkGraphReq_Mode_Direction_value = map[string]int32{
"FORWARDS": 0,
"BACKWARDS": 1,
"BOTH": 2,
}
func (x WalkGraphReq_Mode_Direction) String() string {
return proto.EnumName(WalkGraphReq_Mode_Direction_name, int32(x))
}
func (WalkGraphReq_Mode_Direction) EnumDescriptor() ([]byte, []int) {
return fileDescriptor_0ff1922d0e189b66, []int{0, 0, 0}
}
// WalkGraphReq allows you to walk from one or more Quests through their
// Attempt's forward dependencies.
//
//
// The handler will evaluate all of the queries, executing them in parallel.
// For each attempt or quest produced by the query, it will queue a walk
// operation for that node, respecting the options set (max_depth, etc.).
type WalkGraphReq struct {
// Optional. See Include.AttemptResult for restrictions.
Auth *Execution_Auth `protobuf:"bytes,1,opt,name=auth,proto3" json:"auth,omitempty"`
// Query specifies a list of queries to start the graph traversal on. The
// traversal will occur as a union of the query results. Redundant
// specification will not cause additional heavy work; every graph node will
// be processed exactly once, regardless of how many times it appears in the
// query results. However, redundancy in the queries will cause the server to
// retrieve and discard more information.
Query *GraphQuery `protobuf:"bytes,2,opt,name=query,proto3" json:"query,omitempty"`
Mode *WalkGraphReq_Mode `protobuf:"bytes,3,opt,name=mode,proto3" json:"mode,omitempty"`
Limit *WalkGraphReq_Limit `protobuf:"bytes,4,opt,name=limit,proto3" json:"limit,omitempty"`
// Include allows you to add additional information to the returned
// GraphData which is typically medium-to-large sized.
Include *WalkGraphReq_Include `protobuf:"bytes,5,opt,name=include,proto3" json:"include,omitempty"`
Exclude *WalkGraphReq_Exclude `protobuf:"bytes,6,opt,name=exclude,proto3" json:"exclude,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *WalkGraphReq) Reset() { *m = WalkGraphReq{} }
func (m *WalkGraphReq) String() string { return proto.CompactTextString(m) }
func (*WalkGraphReq) ProtoMessage() {}
func (*WalkGraphReq) Descriptor() ([]byte, []int) {
return fileDescriptor_0ff1922d0e189b66, []int{0}
}
func (m *WalkGraphReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_WalkGraphReq.Unmarshal(m, b)
}
func (m *WalkGraphReq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_WalkGraphReq.Marshal(b, m, deterministic)
}
func (m *WalkGraphReq) XXX_Merge(src proto.Message) {
xxx_messageInfo_WalkGraphReq.Merge(m, src)
}
func (m *WalkGraphReq) XXX_Size() int {
return xxx_messageInfo_WalkGraphReq.Size(m)
}
func (m *WalkGraphReq) XXX_DiscardUnknown() {
xxx_messageInfo_WalkGraphReq.DiscardUnknown(m)
}
var xxx_messageInfo_WalkGraphReq proto.InternalMessageInfo
func (m *WalkGraphReq) GetAuth() *Execution_Auth {
if m != nil {
return m.Auth
}
return nil
}
func (m *WalkGraphReq) GetQuery() *GraphQuery {
if m != nil {
return m.Query
}
return nil
}
func (m *WalkGraphReq) GetMode() *WalkGraphReq_Mode {
if m != nil {
return m.Mode
}
return nil
}
func (m *WalkGraphReq) GetLimit() *WalkGraphReq_Limit {
if m != nil {
return m.Limit
}
return nil
}
func (m *WalkGraphReq) GetInclude() *WalkGraphReq_Include {
if m != nil {
return m.Include
}
return nil
}
func (m *WalkGraphReq) GetExclude() *WalkGraphReq_Exclude {
if m != nil {
return m.Exclude
}
return nil
}
type WalkGraphReq_Mode struct {
// DFS sets whether this is a Depth-first (ish) or a Breadth-first (ish) load.
// Since the load operation is multi-threaded, the search order is best
// effort, but will actually be some hybrid between DFS and BFS. This setting
// controls the bias direction of the hybrid loading algorithm.
Dfs bool `protobuf:"varint,1,opt,name=dfs,proto3" json:"dfs,omitempty"`
Direction WalkGraphReq_Mode_Direction `protobuf:"varint,2,opt,name=direction,proto3,enum=dm.WalkGraphReq_Mode_Direction" json:"direction,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *WalkGraphReq_Mode) Reset() { *m = WalkGraphReq_Mode{} }
func (m *WalkGraphReq_Mode) String() string { return proto.CompactTextString(m) }
func (*WalkGraphReq_Mode) ProtoMessage() {}
func (*WalkGraphReq_Mode) Descriptor() ([]byte, []int) {
return fileDescriptor_0ff1922d0e189b66, []int{0, 0}
}
func (m *WalkGraphReq_Mode) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_WalkGraphReq_Mode.Unmarshal(m, b)
}
func (m *WalkGraphReq_Mode) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_WalkGraphReq_Mode.Marshal(b, m, deterministic)
}
func (m *WalkGraphReq_Mode) XXX_Merge(src proto.Message) {
xxx_messageInfo_WalkGraphReq_Mode.Merge(m, src)
}
func (m *WalkGraphReq_Mode) XXX_Size() int {
return xxx_messageInfo_WalkGraphReq_Mode.Size(m)
}
func (m *WalkGraphReq_Mode) XXX_DiscardUnknown() {
xxx_messageInfo_WalkGraphReq_Mode.DiscardUnknown(m)
}
var xxx_messageInfo_WalkGraphReq_Mode proto.InternalMessageInfo
func (m *WalkGraphReq_Mode) GetDfs() bool {
if m != nil {
return m.Dfs
}
return false
}
func (m *WalkGraphReq_Mode) GetDirection() WalkGraphReq_Mode_Direction {
if m != nil {
return m.Direction
}
return WalkGraphReq_Mode_FORWARDS
}
type WalkGraphReq_Limit struct {
// MaxDepth sets the number of attempts to traverse; 0 means 'immediate'
// (no dependencies), -1 means 'no limit', and >0 is a limit.
//
// Any negative value besides -1 is an error.
MaxDepth int64 `protobuf:"varint,1,opt,name=max_depth,json=maxDepth,proto3" json:"max_depth,omitempty"`
// MaxTime sets the maximum amount of time that the query processor should
// take. Application of this deadline is 'best effort', which means the query
// may take a bit longer than this timeout and still attempt to return data.
//
// This is different than the grpc timeout header, which will set a hard
// deadline for the request.
MaxTime *duration.Duration `protobuf:"bytes,2,opt,name=max_time,json=maxTime,proto3" json:"max_time,omitempty"`
// MaxDataSize sets the maximum amount of 'Data' (in bytes) that can be
// returned, if include.quest_data, include.attempt_data, and/or
// include.attempt_result are set. If this limit is hit, then the
// appropriate 'partial' value will be set for that object, but the base
// object would still be included in the result.
//
// If this limit is 0, a default limit of 16MB will be used. If this limit
// exceeds 30MB, it will be reduced to 30MB.
MaxDataSize uint32 `protobuf:"varint,3,opt,name=max_data_size,json=maxDataSize,proto3" json:"max_data_size,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *WalkGraphReq_Limit) Reset() { *m = WalkGraphReq_Limit{} }
func (m *WalkGraphReq_Limit) String() string { return proto.CompactTextString(m) }
func (*WalkGraphReq_Limit) ProtoMessage() {}
func (*WalkGraphReq_Limit) Descriptor() ([]byte, []int) {
return fileDescriptor_0ff1922d0e189b66, []int{0, 1}
}
func (m *WalkGraphReq_Limit) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_WalkGraphReq_Limit.Unmarshal(m, b)
}
func (m *WalkGraphReq_Limit) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_WalkGraphReq_Limit.Marshal(b, m, deterministic)
}
func (m *WalkGraphReq_Limit) XXX_Merge(src proto.Message) {
xxx_messageInfo_WalkGraphReq_Limit.Merge(m, src)
}
func (m *WalkGraphReq_Limit) XXX_Size() int {
return xxx_messageInfo_WalkGraphReq_Limit.Size(m)
}
func (m *WalkGraphReq_Limit) XXX_DiscardUnknown() {
xxx_messageInfo_WalkGraphReq_Limit.DiscardUnknown(m)
}
var xxx_messageInfo_WalkGraphReq_Limit proto.InternalMessageInfo
func (m *WalkGraphReq_Limit) GetMaxDepth() int64 {
if m != nil {
return m.MaxDepth
}
return 0
}
func (m *WalkGraphReq_Limit) GetMaxTime() *duration.Duration {
if m != nil {
return m.MaxTime
}
return nil
}
func (m *WalkGraphReq_Limit) GetMaxDataSize() uint32 {
if m != nil {
return m.MaxDataSize
}
return 0
}
type WalkGraphReq_Include struct {
Quest *WalkGraphReq_Include_Options `protobuf:"bytes,1,opt,name=quest,proto3" json:"quest,omitempty"`
Attempt *WalkGraphReq_Include_Options `protobuf:"bytes,2,opt,name=attempt,proto3" json:"attempt,omitempty"`
Execution *WalkGraphReq_Include_Options `protobuf:"bytes,3,opt,name=execution,proto3" json:"execution,omitempty"`
// Executions is the number of Executions to include per Attempt. If this
// is 0, then the execution data will be omitted completely.
//
// Executions included are from high ids to low ids. So setting this to `1`
// would return the LAST execution made for this Attempt.
NumExecutions uint32 `protobuf:"varint,4,opt,name=num_executions,json=numExecutions,proto3" json:"num_executions,omitempty"`
// FwdDeps instructs WalkGraph to include forward dependency information
// from the result. This only changes the presence of information in the
// result; if the query is walking forward attempt dependencies, that will
// still occur even if this is false.
FwdDeps bool `protobuf:"varint,5,opt,name=fwd_deps,json=fwdDeps,proto3" json:"fwd_deps,omitempty"`
// BackDeps instructs WalkGraph to include the backwards dependency
// information. This only changes the presence of information in the result;
// if the query is walking backward attempt dependencies, that will still
// occur even if this is false.
BackDeps bool `protobuf:"varint,6,opt,name=back_deps,json=backDeps,proto3" json:"back_deps,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *WalkGraphReq_Include) Reset() { *m = WalkGraphReq_Include{} }
func (m *WalkGraphReq_Include) String() string { return proto.CompactTextString(m) }
func (*WalkGraphReq_Include) ProtoMessage() {}
func (*WalkGraphReq_Include) Descriptor() ([]byte, []int) {
return fileDescriptor_0ff1922d0e189b66, []int{0, 2}
}
func (m *WalkGraphReq_Include) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_WalkGraphReq_Include.Unmarshal(m, b)
}
func (m *WalkGraphReq_Include) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_WalkGraphReq_Include.Marshal(b, m, deterministic)
}
func (m *WalkGraphReq_Include) XXX_Merge(src proto.Message) {
xxx_messageInfo_WalkGraphReq_Include.Merge(m, src)
}
func (m *WalkGraphReq_Include) XXX_Size() int {
return xxx_messageInfo_WalkGraphReq_Include.Size(m)
}
func (m *WalkGraphReq_Include) XXX_DiscardUnknown() {
xxx_messageInfo_WalkGraphReq_Include.DiscardUnknown(m)
}
var xxx_messageInfo_WalkGraphReq_Include proto.InternalMessageInfo
func (m *WalkGraphReq_Include) GetQuest() *WalkGraphReq_Include_Options {
if m != nil {
return m.Quest
}
return nil
}
func (m *WalkGraphReq_Include) GetAttempt() *WalkGraphReq_Include_Options {
if m != nil {
return m.Attempt
}
return nil
}
func (m *WalkGraphReq_Include) GetExecution() *WalkGraphReq_Include_Options {
if m != nil {
return m.Execution
}
return nil
}
func (m *WalkGraphReq_Include) GetNumExecutions() uint32 {
if m != nil {
return m.NumExecutions
}
return 0
}
func (m *WalkGraphReq_Include) GetFwdDeps() bool {
if m != nil {
return m.FwdDeps
}
return false
}
func (m *WalkGraphReq_Include) GetBackDeps() bool {
if m != nil {
return m.BackDeps
}
return false
}
type WalkGraphReq_Include_Options struct {
// Fills the 'id' field.
//
// If this is false, it will be omitted.
//
// Note that there's enough information contextually to derive these ids
// on the client side, though it can be handy to have the server produce
// them for you.
Ids bool `protobuf:"varint,1,opt,name=ids,proto3" json:"ids,omitempty"`
// Instructs the request to include the Data field
Data bool `protobuf:"varint,2,opt,name=data,proto3" json:"data,omitempty"`
// Instructs finished objects to include the Result field.
//
// If the requestor is an execution, the query logic will only include the
// result if the execution's Attempt depends on it, otherwise it will be
// blank.
//
// If the request's cumulative result data would be more than
// limit.max_data_size of data, the remaining results will have their
// Partial.Result set to DATA_SIZE_LIMIT.
//
// Has no effect for Quests.
Result bool `protobuf:"varint,3,opt,name=result,proto3" json:"result,omitempty"`
// If set to true, objects with an abnormal termination will be included.
Abnormal bool `protobuf:"varint,4,opt,name=abnormal,proto3" json:"abnormal,omitempty"`
// If set to true, expired objects will be included.
Expired bool `protobuf:"varint,5,opt,name=expired,proto3" json:"expired,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *WalkGraphReq_Include_Options) Reset() { *m = WalkGraphReq_Include_Options{} }
func (m *WalkGraphReq_Include_Options) String() string { return proto.CompactTextString(m) }
func (*WalkGraphReq_Include_Options) ProtoMessage() {}
func (*WalkGraphReq_Include_Options) Descriptor() ([]byte, []int) {
return fileDescriptor_0ff1922d0e189b66, []int{0, 2, 0}
}
func (m *WalkGraphReq_Include_Options) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_WalkGraphReq_Include_Options.Unmarshal(m, b)
}
func (m *WalkGraphReq_Include_Options) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_WalkGraphReq_Include_Options.Marshal(b, m, deterministic)
}
func (m *WalkGraphReq_Include_Options) XXX_Merge(src proto.Message) {
xxx_messageInfo_WalkGraphReq_Include_Options.Merge(m, src)
}
func (m *WalkGraphReq_Include_Options) XXX_Size() int {
return xxx_messageInfo_WalkGraphReq_Include_Options.Size(m)
}
func (m *WalkGraphReq_Include_Options) XXX_DiscardUnknown() {
xxx_messageInfo_WalkGraphReq_Include_Options.DiscardUnknown(m)
}
var xxx_messageInfo_WalkGraphReq_Include_Options proto.InternalMessageInfo
func (m *WalkGraphReq_Include_Options) GetIds() bool {
if m != nil {
return m.Ids
}
return false
}
func (m *WalkGraphReq_Include_Options) GetData() bool {
if m != nil {
return m.Data
}
return false
}
func (m *WalkGraphReq_Include_Options) GetResult() bool {
if m != nil {
return m.Result
}
return false
}
func (m *WalkGraphReq_Include_Options) GetAbnormal() bool {
if m != nil {
return m.Abnormal
}
return false
}
func (m *WalkGraphReq_Include_Options) GetExpired() bool {
if m != nil {
return m.Expired
}
return false
}
type WalkGraphReq_Exclude struct {
// Do not include data from the following quests in the response.
Quests []string `protobuf:"bytes,1,rep,name=quests,proto3" json:"quests,omitempty"`
// Do not include data from the following attempts in the response.
Attempts *AttemptList `protobuf:"bytes,2,opt,name=attempts,proto3" json:"attempts,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *WalkGraphReq_Exclude) Reset() { *m = WalkGraphReq_Exclude{} }
func (m *WalkGraphReq_Exclude) String() string { return proto.CompactTextString(m) }
func (*WalkGraphReq_Exclude) ProtoMessage() {}
func (*WalkGraphReq_Exclude) Descriptor() ([]byte, []int) {
return fileDescriptor_0ff1922d0e189b66, []int{0, 3}
}
func (m *WalkGraphReq_Exclude) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_WalkGraphReq_Exclude.Unmarshal(m, b)
}
func (m *WalkGraphReq_Exclude) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_WalkGraphReq_Exclude.Marshal(b, m, deterministic)
}
func (m *WalkGraphReq_Exclude) XXX_Merge(src proto.Message) {
xxx_messageInfo_WalkGraphReq_Exclude.Merge(m, src)
}
func (m *WalkGraphReq_Exclude) XXX_Size() int {
return xxx_messageInfo_WalkGraphReq_Exclude.Size(m)
}
func (m *WalkGraphReq_Exclude) XXX_DiscardUnknown() {
xxx_messageInfo_WalkGraphReq_Exclude.DiscardUnknown(m)
}
var xxx_messageInfo_WalkGraphReq_Exclude proto.InternalMessageInfo
func (m *WalkGraphReq_Exclude) GetQuests() []string {
if m != nil {
return m.Quests
}
return nil
}
func (m *WalkGraphReq_Exclude) GetAttempts() *AttemptList {
if m != nil {
return m.Attempts
}
return nil
}
func init() {
proto.RegisterEnum("dm.WalkGraphReq_Mode_Direction", WalkGraphReq_Mode_Direction_name, WalkGraphReq_Mode_Direction_value)
proto.RegisterType((*WalkGraphReq)(nil), "dm.WalkGraphReq")
proto.RegisterType((*WalkGraphReq_Mode)(nil), "dm.WalkGraphReq.Mode")
proto.RegisterType((*WalkGraphReq_Limit)(nil), "dm.WalkGraphReq.Limit")
proto.RegisterType((*WalkGraphReq_Include)(nil), "dm.WalkGraphReq.Include")
proto.RegisterType((*WalkGraphReq_Include_Options)(nil), "dm.WalkGraphReq.Include.Options")
proto.RegisterType((*WalkGraphReq_Exclude)(nil), "dm.WalkGraphReq.Exclude")
}
func init() {
proto.RegisterFile("go.chromium.org/luci/dm/api/service/v1/walk_graph.proto", fileDescriptor_0ff1922d0e189b66)
}
var fileDescriptor_0ff1922d0e189b66 = []byte{
// 655 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x52, 0x6d, 0x6b, 0x13, 0x4d,
0x14, 0x7d, 0xd2, 0xbc, 0x6d, 0x6e, 0x9b, 0x3e, 0xe5, 0x82, 0x65, 0xbb, 0x82, 0x2d, 0x45, 0xa5,
0xa2, 0xec, 0x62, 0x14, 0x15, 0x41, 0x21, 0x35, 0xf5, 0x05, 0xab, 0xc5, 0x69, 0xa1, 0x1f, 0xc3,
0x64, 0x67, 0x92, 0x0c, 0xdd, 0xc9, 0x6e, 0x77, 0x66, 0xdb, 0xb4, 0xa0, 0x7f, 0xc0, 0x5f, 0x20,
0xfe, 0x59, 0x99, 0xd9, 0x49, 0x2a, 0xd6, 0xd2, 0xfa, 0x6d, 0xee, 0xbd, 0xe7, 0xdc, 0x97, 0x33,
0x07, 0x9e, 0x8f, 0xd2, 0x30, 0x1e, 0xe7, 0xa9, 0x14, 0x85, 0x0c, 0xd3, 0x7c, 0x14, 0x25, 0x45,
0x2c, 0x22, 0x26, 0x23, 0x9a, 0x89, 0x48, 0xf1, 0xfc, 0x44, 0xc4, 0x3c, 0x3a, 0x79, 0x1c, 0x9d,
0xd2, 0xe4, 0xa8, 0x3f, 0xca, 0x69, 0x36, 0x0e, 0xb3, 0x3c, 0xd5, 0x29, 0x2e, 0x30, 0x19, 0xdc,
0x19, 0xa5, 0xe9, 0x28, 0xe1, 0x91, 0xcd, 0x0c, 0x8a, 0x61, 0xc4, 0x8a, 0x9c, 0x6a, 0x91, 0x4e,
0x4a, 0x4c, 0xb0, 0xfe, 0x67, 0x5d, 0x0b, 0xc9, 0x95, 0xa6, 0x32, 0x73, 0x80, 0x9b, 0x4e, 0xb7,
0x83, 0xfb, 0x8c, 0x6a, 0xea, 0x88, 0x2f, 0xfe, 0x89, 0x78, 0x5c, 0xf0, 0xfc, 0xcc, 0x31, 0x3b,
0x37, 0x64, 0xea, 0xb3, 0x8c, 0xab, 0x92, 0xb3, 0xf9, 0xc3, 0x83, 0xa5, 0x43, 0x9a, 0x1c, 0xbd,
0x33, 0xdd, 0x08, 0x3f, 0xc6, 0xfb, 0x50, 0xa3, 0x85, 0x1e, 0xfb, 0x95, 0x8d, 0xca, 0xd6, 0x62,
0x07, 0x43, 0x26, 0xc3, 0x9d, 0x29, 0x8f, 0x0b, 0x7b, 0x7b, 0xb7, 0xd0, 0x63, 0x62, 0xeb, 0x78,
0x17, 0xea, 0x76, 0xb6, 0xbf, 0x60, 0x81, 0xcb, 0x06, 0x68, 0x9b, 0x7c, 0x31, 0x59, 0x52, 0x16,
0xf1, 0x01, 0xd4, 0x64, 0xca, 0xb8, 0x5f, 0xb5, 0xa0, 0x5b, 0x06, 0xf4, 0xfb, 0xb4, 0xf0, 0x53,
0xca, 0x38, 0xb1, 0x10, 0x7c, 0x04, 0xf5, 0x44, 0x48, 0xa1, 0xfd, 0x9a, 0xc5, 0xae, 0x5e, 0xc2,
0xee, 0x9a, 0x2a, 0x29, 0x41, 0xd8, 0x81, 0xa6, 0x98, 0xc4, 0x49, 0xc1, 0xb8, 0x5f, 0xb7, 0x78,
0xff, 0x12, 0xfe, 0x43, 0x59, 0x27, 0x33, 0xa0, 0xe1, 0xf0, 0x69, 0xc9, 0x69, 0x5c, 0xc1, 0xd9,
0x99, 0x3a, 0x8e, 0x03, 0x06, 0xdf, 0x2b, 0x50, 0x33, 0x4b, 0xe2, 0x0a, 0x54, 0xd9, 0x50, 0x59,
0x59, 0x3c, 0x62, 0x9e, 0xf8, 0x0a, 0x5a, 0x4c, 0xe4, 0x3c, 0x36, 0xca, 0x58, 0x15, 0x96, 0x3b,
0xeb, 0x7f, 0x3d, 0x30, 0xec, 0xcd, 0x60, 0xe4, 0x82, 0xb1, 0xd9, 0x81, 0xd6, 0x3c, 0x8f, 0x4b,
0xe0, 0xbd, 0xdd, 0x23, 0x87, 0x5d, 0xd2, 0xdb, 0x5f, 0xf9, 0x0f, 0xdb, 0xd0, 0xda, 0xee, 0xbe,
0xf9, 0x58, 0x86, 0x15, 0xf4, 0xa0, 0xb6, 0xbd, 0x77, 0xf0, 0x7e, 0x65, 0x21, 0xf8, 0x06, 0x75,
0xab, 0x02, 0xde, 0x86, 0x96, 0xa4, 0xd3, 0x3e, 0xe3, 0x99, 0xfb, 0xaa, 0x2a, 0xf1, 0x24, 0x9d,
0xf6, 0x4c, 0x8c, 0x4f, 0xc1, 0xbc, 0xfb, 0xc6, 0x91, 0xee, 0x77, 0xd6, 0xc2, 0xd2, 0xae, 0xe1,
0xcc, 0xae, 0x61, 0xcf, 0xd9, 0x99, 0x34, 0x25, 0x9d, 0x1e, 0x08, 0xc9, 0x71, 0x13, 0xda, 0xb6,
0x25, 0xd5, 0xb4, 0xaf, 0xc4, 0x79, 0xf9, 0x67, 0x6d, 0xb2, 0x68, 0xda, 0x52, 0x4d, 0xf7, 0xc5,
0x39, 0x0f, 0x7e, 0x56, 0xa1, 0xe9, 0x64, 0xc5, 0x67, 0xd6, 0x00, 0x4a, 0x3b, 0xa7, 0x6c, 0x5c,
0xa5, 0x7f, 0xb8, 0x97, 0x99, 0x41, 0x8a, 0x94, 0x70, 0x7c, 0x09, 0x4d, 0xaa, 0x35, 0x97, 0x99,
0x76, 0xcb, 0x5d, 0xcf, 0x9c, 0x11, 0xf0, 0x35, 0xb4, 0xf8, 0xcc, 0x8c, 0xce, 0x53, 0xd7, 0xb3,
0x2f, 0x28, 0x78, 0x0f, 0x96, 0x27, 0x85, 0xec, 0xcf, 0x13, 0xca, 0x9a, 0xad, 0x4d, 0xda, 0x93,
0x42, 0xce, 0x5d, 0xae, 0x70, 0x0d, 0xbc, 0xe1, 0x29, 0x33, 0xea, 0x2a, 0xeb, 0x2e, 0x8f, 0x34,
0x87, 0xa7, 0xac, 0xc7, 0x33, 0x65, 0x84, 0x1f, 0xd0, 0xf8, 0xa8, 0xac, 0x35, 0x6c, 0xcd, 0x33,
0x09, 0x53, 0x0c, 0xbe, 0x42, 0xd3, 0x0d, 0x35, 0x76, 0x11, 0x6c, 0x6e, 0x17, 0xc1, 0x14, 0x22,
0xd4, 0x8c, 0xb6, 0xf6, 0x68, 0x8f, 0xd8, 0x37, 0xae, 0x42, 0x23, 0xe7, 0xaa, 0x48, 0xb4, 0x3d,
0xc6, 0x23, 0x2e, 0xc2, 0x00, 0x3c, 0x3a, 0x98, 0xa4, 0xb9, 0xa4, 0x89, 0xdd, 0xd0, 0x23, 0xf3,
0x18, 0x7d, 0xe3, 0xe2, 0x4c, 0xe4, 0x9c, 0xcd, 0x76, 0x73, 0x61, 0xf0, 0x19, 0x9a, 0xce, 0xbf,
0xa6, 0xb1, 0x55, 0xdb, 0x6c, 0x50, 0xdd, 0x6a, 0x11, 0x17, 0xe1, 0x43, 0xf0, 0x9c, 0x96, 0xca,
0xa9, 0xff, 0xbf, 0xd1, 0xaf, 0x5b, 0xe6, 0x76, 0x85, 0xd2, 0x64, 0x0e, 0x18, 0x34, 0xac, 0x5b,
0x9e, 0xfc, 0x0a, 0x00, 0x00, 0xff, 0xff, 0x28, 0x01, 0xd2, 0x94, 0x49, 0x05, 0x00, 0x00,
}