// Code generated by protoc-gen-go. DO NOT EDIT.
// source: test_platform/skylab_test_runner/request.proto

package skylab_test_runner

import (
	fmt "fmt"
	proto "github.com/golang/protobuf/proto"
	timestamp "github.com/golang/protobuf/ptypes/timestamp"
	test_platform "go.chromium.org/chromiumos/infra/proto/go/test_platform"
	execution "go.chromium.org/chromiumos/infra/proto/go/test_platform/execution"
	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

// Request represents a request for running an individual test via the
// skylab_test_runner recipe.
type Request struct {
	Prejob *Request_Prejob `protobuf:"bytes,1,opt,name=prejob,proto3" json:"prejob,omitempty"`
	Test   *Request_Test   `protobuf:"bytes,2,opt,name=test,proto3" json:"test,omitempty"`
	// Soft deadline for test_runner execution.
	//
	// All prejob or test execution should abort beyond this deadline.
	// Clean up actions may execute beyond the deadline.
	Deadline *timestamp.Timestamp `protobuf:"bytes,3,opt,name=deadline,proto3" json:"deadline,omitempty"`
	// The UID of the individual CTP request which kicked off this test run.
	// Note that distinct requests inside a multi-request CTP build will have
	// different UIDs.
	ParentRequestUid string `protobuf:"bytes,4,opt,name=parent_request_uid,json=parentRequestUid,proto3" json:"parent_request_uid,omitempty"`
	// The buildbucket ID of the CTP build that sent this test_runner request.
	ParentBuildId int64 `protobuf:"varint,5,opt,name=parent_build_id,json=parentBuildId,proto3" json:"parent_build_id,omitempty"`
	// Set of Tests to run. The string is a UUID provided by the client
	// and used to identify each test result in the response.
	Tests map[string]*Request_Test `protobuf:"bytes,6,rep,name=tests,proto3" json:"tests,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
	// Uniformly applied parameters for all test executions in the parent test
	// platform request.
	ExecutionParam       *execution.Param `protobuf:"bytes,7,opt,name=execution_param,json=executionParam,proto3" json:"execution_param,omitempty"`
	XXX_NoUnkeyedLiteral struct{}         `json:"-"`
	XXX_unrecognized     []byte           `json:"-"`
	XXX_sizecache        int32            `json:"-"`
}

func (m *Request) Reset()         { *m = Request{} }
func (m *Request) String() string { return proto.CompactTextString(m) }
func (*Request) ProtoMessage()    {}
func (*Request) Descriptor() ([]byte, []int) {
	return fileDescriptor_0203b6078e3ef1f3, []int{0}
}

func (m *Request) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Request.Unmarshal(m, b)
}
func (m *Request) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Request.Marshal(b, m, deterministic)
}
func (m *Request) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Request.Merge(m, src)
}
func (m *Request) XXX_Size() int {
	return xxx_messageInfo_Request.Size(m)
}
func (m *Request) XXX_DiscardUnknown() {
	xxx_messageInfo_Request.DiscardUnknown(m)
}

var xxx_messageInfo_Request proto.InternalMessageInfo

func (m *Request) GetPrejob() *Request_Prejob {
	if m != nil {
		return m.Prejob
	}
	return nil
}

func (m *Request) GetTest() *Request_Test {
	if m != nil {
		return m.Test
	}
	return nil
}

func (m *Request) GetDeadline() *timestamp.Timestamp {
	if m != nil {
		return m.Deadline
	}
	return nil
}

func (m *Request) GetParentRequestUid() string {
	if m != nil {
		return m.ParentRequestUid
	}
	return ""
}

func (m *Request) GetParentBuildId() int64 {
	if m != nil {
		return m.ParentBuildId
	}
	return 0
}

func (m *Request) GetTests() map[string]*Request_Test {
	if m != nil {
		return m.Tests
	}
	return nil
}

func (m *Request) GetExecutionParam() *execution.Param {
	if m != nil {
		return m.ExecutionParam
	}
	return nil
}

// Prejob defines parameters that affect the steps before the actual test
// (e.g. provision).
type Request_Prejob struct {
	SoftwareDependencies []*test_platform.Request_Params_SoftwareDependency `protobuf:"bytes,1,rep,name=software_dependencies,json=softwareDependencies,proto3" json:"software_dependencies,omitempty"` // Deprecated: Do not use.
	// Mutable software prerequisites. Are installed before running the test if
	// necessary. E.g. {"cros-version" : "reef-release/R77-12345.0.0"}
	ProvisionableLabels map[string]string `protobuf:"bytes,2,rep,name=provisionable_labels,json=provisionableLabels,proto3" json:"provisionable_labels,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
	// If set, use the Provision TLS API for the prejob.
	// See go/cros-prover go/cros-tls
	//
	// crbug.com/1137444: This is a transitional argument. Once go/cros-prover
	// migration is complete, all prejobs will use the TLS API and this argument
	// will be dropped.
	UseTls               bool     `protobuf:"varint,3,opt,name=use_tls,json=useTls,proto3" json:"use_tls,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *Request_Prejob) Reset()         { *m = Request_Prejob{} }
func (m *Request_Prejob) String() string { return proto.CompactTextString(m) }
func (*Request_Prejob) ProtoMessage()    {}
func (*Request_Prejob) Descriptor() ([]byte, []int) {
	return fileDescriptor_0203b6078e3ef1f3, []int{0, 0}
}

func (m *Request_Prejob) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Request_Prejob.Unmarshal(m, b)
}
func (m *Request_Prejob) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Request_Prejob.Marshal(b, m, deterministic)
}
func (m *Request_Prejob) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Request_Prejob.Merge(m, src)
}
func (m *Request_Prejob) XXX_Size() int {
	return xxx_messageInfo_Request_Prejob.Size(m)
}
func (m *Request_Prejob) XXX_DiscardUnknown() {
	xxx_messageInfo_Request_Prejob.DiscardUnknown(m)
}

var xxx_messageInfo_Request_Prejob proto.InternalMessageInfo

// Deprecated: Do not use.
func (m *Request_Prejob) GetSoftwareDependencies() []*test_platform.Request_Params_SoftwareDependency {
	if m != nil {
		return m.SoftwareDependencies
	}
	return nil
}

func (m *Request_Prejob) GetProvisionableLabels() map[string]string {
	if m != nil {
		return m.ProvisionableLabels
	}
	return nil
}

func (m *Request_Prejob) GetUseTls() bool {
	if m != nil {
		return m.UseTls
	}
	return false
}

// Test describes which test harness and which test(s) to run.
type Request_Test struct {
	// Types that are valid to be assigned to Harness:
	//	*Request_Test_Autotest_
	Harness              isRequest_Test_Harness       `protobuf_oneof:"harness"`
	Offload              *Request_Test_OffloadOptions `protobuf:"bytes,2,opt,name=offload,proto3" json:"offload,omitempty"`
	XXX_NoUnkeyedLiteral struct{}                     `json:"-"`
	XXX_unrecognized     []byte                       `json:"-"`
	XXX_sizecache        int32                        `json:"-"`
}

func (m *Request_Test) Reset()         { *m = Request_Test{} }
func (m *Request_Test) String() string { return proto.CompactTextString(m) }
func (*Request_Test) ProtoMessage()    {}
func (*Request_Test) Descriptor() ([]byte, []int) {
	return fileDescriptor_0203b6078e3ef1f3, []int{0, 1}
}

func (m *Request_Test) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Request_Test.Unmarshal(m, b)
}
func (m *Request_Test) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Request_Test.Marshal(b, m, deterministic)
}
func (m *Request_Test) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Request_Test.Merge(m, src)
}
func (m *Request_Test) XXX_Size() int {
	return xxx_messageInfo_Request_Test.Size(m)
}
func (m *Request_Test) XXX_DiscardUnknown() {
	xxx_messageInfo_Request_Test.DiscardUnknown(m)
}

var xxx_messageInfo_Request_Test proto.InternalMessageInfo

type isRequest_Test_Harness interface {
	isRequest_Test_Harness()
}

type Request_Test_Autotest_ struct {
	Autotest *Request_Test_Autotest `protobuf:"bytes,1,opt,name=autotest,proto3,oneof"`
}

func (*Request_Test_Autotest_) isRequest_Test_Harness() {}

func (m *Request_Test) GetHarness() isRequest_Test_Harness {
	if m != nil {
		return m.Harness
	}
	return nil
}

func (m *Request_Test) GetAutotest() *Request_Test_Autotest {
	if x, ok := m.GetHarness().(*Request_Test_Autotest_); ok {
		return x.Autotest
	}
	return nil
}

func (m *Request_Test) GetOffload() *Request_Test_OffloadOptions {
	if m != nil {
		return m.Offload
	}
	return nil
}

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

type Request_Test_Autotest struct {
	Name     string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
	TestArgs string `protobuf:"bytes,2,opt,name=test_args,json=testArgs,proto3" json:"test_args,omitempty"`
	// Keyvals are key:value pairs added to the autoserv command.
	Keyvals map[string]string `protobuf:"bytes,3,rep,name=keyvals,proto3" json:"keyvals,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
	// If true, run the test as a client-side test: the test logic is
	// executed in its entirety on the DUT itself.
	// Otherwise, run the test as a server-side test: the test logic is
	// executed on the drone server and interacts with the DUT as an external
	// object.
	IsClientTest bool `protobuf:"varint,4,opt,name=is_client_test,json=isClientTest,proto3" json:"is_client_test,omitempty"`
	// Name to be used to display this test's output artifacts, e.g. logs,
	// results etc. By default display_name is the same as name.
	//
	// display_name is especially useful when using test_args to distinguish
	// between multiple instances of the same test in a request.
	DisplayName          string   `protobuf:"bytes,5,opt,name=display_name,json=displayName,proto3" json:"display_name,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *Request_Test_Autotest) Reset()         { *m = Request_Test_Autotest{} }
func (m *Request_Test_Autotest) String() string { return proto.CompactTextString(m) }
func (*Request_Test_Autotest) ProtoMessage()    {}
func (*Request_Test_Autotest) Descriptor() ([]byte, []int) {
	return fileDescriptor_0203b6078e3ef1f3, []int{0, 1, 0}
}

func (m *Request_Test_Autotest) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Request_Test_Autotest.Unmarshal(m, b)
}
func (m *Request_Test_Autotest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Request_Test_Autotest.Marshal(b, m, deterministic)
}
func (m *Request_Test_Autotest) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Request_Test_Autotest.Merge(m, src)
}
func (m *Request_Test_Autotest) XXX_Size() int {
	return xxx_messageInfo_Request_Test_Autotest.Size(m)
}
func (m *Request_Test_Autotest) XXX_DiscardUnknown() {
	xxx_messageInfo_Request_Test_Autotest.DiscardUnknown(m)
}

var xxx_messageInfo_Request_Test_Autotest proto.InternalMessageInfo

func (m *Request_Test_Autotest) GetName() string {
	if m != nil {
		return m.Name
	}
	return ""
}

func (m *Request_Test_Autotest) GetTestArgs() string {
	if m != nil {
		return m.TestArgs
	}
	return ""
}

func (m *Request_Test_Autotest) GetKeyvals() map[string]string {
	if m != nil {
		return m.Keyvals
	}
	return nil
}

func (m *Request_Test_Autotest) GetIsClientTest() bool {
	if m != nil {
		return m.IsClientTest
	}
	return false
}

func (m *Request_Test_Autotest) GetDisplayName() string {
	if m != nil {
		return m.DisplayName
	}
	return ""
}

// User-specified options for how results are served to clients
type Request_Test_OffloadOptions struct {
	// If this test needs synchronous offloading of results to Google Storage
	SynchronousGsEnable  bool     `protobuf:"varint,1,opt,name=synchronous_gs_enable,json=synchronousGsEnable,proto3" json:"synchronous_gs_enable,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *Request_Test_OffloadOptions) Reset()         { *m = Request_Test_OffloadOptions{} }
func (m *Request_Test_OffloadOptions) String() string { return proto.CompactTextString(m) }
func (*Request_Test_OffloadOptions) ProtoMessage()    {}
func (*Request_Test_OffloadOptions) Descriptor() ([]byte, []int) {
	return fileDescriptor_0203b6078e3ef1f3, []int{0, 1, 1}
}

func (m *Request_Test_OffloadOptions) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Request_Test_OffloadOptions.Unmarshal(m, b)
}
func (m *Request_Test_OffloadOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Request_Test_OffloadOptions.Marshal(b, m, deterministic)
}
func (m *Request_Test_OffloadOptions) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Request_Test_OffloadOptions.Merge(m, src)
}
func (m *Request_Test_OffloadOptions) XXX_Size() int {
	return xxx_messageInfo_Request_Test_OffloadOptions.Size(m)
}
func (m *Request_Test_OffloadOptions) XXX_DiscardUnknown() {
	xxx_messageInfo_Request_Test_OffloadOptions.DiscardUnknown(m)
}

var xxx_messageInfo_Request_Test_OffloadOptions proto.InternalMessageInfo

func (m *Request_Test_OffloadOptions) GetSynchronousGsEnable() bool {
	if m != nil {
		return m.SynchronousGsEnable
	}
	return false
}

func init() {
	proto.RegisterType((*Request)(nil), "test_platform.skylab_test_runner.Request")
	proto.RegisterMapType((map[string]*Request_Test)(nil), "test_platform.skylab_test_runner.Request.TestsEntry")
	proto.RegisterType((*Request_Prejob)(nil), "test_platform.skylab_test_runner.Request.Prejob")
	proto.RegisterMapType((map[string]string)(nil), "test_platform.skylab_test_runner.Request.Prejob.ProvisionableLabelsEntry")
	proto.RegisterType((*Request_Test)(nil), "test_platform.skylab_test_runner.Request.Test")
	proto.RegisterType((*Request_Test_Autotest)(nil), "test_platform.skylab_test_runner.Request.Test.Autotest")
	proto.RegisterMapType((map[string]string)(nil), "test_platform.skylab_test_runner.Request.Test.Autotest.KeyvalsEntry")
	proto.RegisterType((*Request_Test_OffloadOptions)(nil), "test_platform.skylab_test_runner.Request.Test.OffloadOptions")
}

func init() {
	proto.RegisterFile("test_platform/skylab_test_runner/request.proto", fileDescriptor_0203b6078e3ef1f3)
}

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