blob: 5985939f935156fa95106d8520061145d91f383a [file] [log] [blame]
// Code generated by protoc-gen-go. DO NOT EDIT.
// source: github.com/luci/luci-go/deploytool/api/deploy/config.proto
package deploy
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
// * The AppEngine module version scheme to use.
type Deployment_CloudProject_VersionScheme int32
const (
// The DEFAULT version scheme uses the source group hash
Deployment_CloudProject_DEFAULT Deployment_CloudProject_VersionScheme = 0
)
var Deployment_CloudProject_VersionScheme_name = map[int32]string{
0: "DEFAULT",
}
var Deployment_CloudProject_VersionScheme_value = map[string]int32{
"DEFAULT": 0,
}
func (x Deployment_CloudProject_VersionScheme) String() string {
return proto.EnumName(Deployment_CloudProject_VersionScheme_name, int32(x))
}
func (Deployment_CloudProject_VersionScheme) EnumDescriptor() ([]byte, []int) {
return fileDescriptor2, []int{3, 0, 0}
}
// *
// Layout defines the root directory of a deployment configuration.
//
// Each layout field has a default value, so an empty layout protobuf file is
// a valid layout. Each field may be overridden to suit your repository's
// structure, if needed.
type Layout struct {
// *
// If specified, the relative path to the sources configuration directory. If
// empty, this will default to "sources".
SourcesPath string `protobuf:"bytes,1,opt,name=sources_path,json=sourcesPath" json:"sources_path,omitempty"`
// *
// If specified, the relative path to the applications configuration
// directory. If empty, this will default to "applications".
ApplicationsPath string `protobuf:"bytes,2,opt,name=applications_path,json=applicationsPath" json:"applications_path,omitempty"`
// *
// If specified, the relative path to the deployments configuration directory.
// If empty, this will default to "deployments".
DeploymentsPath string `protobuf:"bytes,3,opt,name=deployments_path,json=deploymentsPath" json:"deployments_path,omitempty"`
// *
// If specified, the working directory to use.
WorkingPath string `protobuf:"bytes,5,opt,name=working_path,json=workingPath" json:"working_path,omitempty"`
}
func (m *Layout) Reset() { *m = Layout{} }
func (m *Layout) String() string { return proto.CompactTextString(m) }
func (*Layout) ProtoMessage() {}
func (*Layout) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{0} }
func (m *Layout) GetSourcesPath() string {
if m != nil {
return m.SourcesPath
}
return ""
}
func (m *Layout) GetApplicationsPath() string {
if m != nil {
return m.ApplicationsPath
}
return ""
}
func (m *Layout) GetDeploymentsPath() string {
if m != nil {
return m.DeploymentsPath
}
return ""
}
func (m *Layout) GetWorkingPath() string {
if m != nil {
return m.WorkingPath
}
return ""
}
// *
// Source represents a single source configuration file.
//
// It contains definitions for the set of source repositories that make up this
// Source.
//
// Each source is defined within a source group directory, and is named
// "<source-name>.cfg". The source can be referenced internally by its full
// source path, "<source-group-name>/<source-name>".
//
// If the source root contains a "luci-deploy.cfg" file, it will be read
// and interepreted as a "SourceLayout" message.
type Source struct {
// Types that are valid to be assigned to Source:
// *Source_Git
Source isSource_Source `protobuf_oneof:"source"`
// *
// Go Paths to add to this repository.
//
// This will be prepended to the GOPATH that the repository exports during its
// configuration/initialization.
GoPath []*GoPath `protobuf:"bytes,10,rep,name=go_path,json=goPath" json:"go_path,omitempty"`
// *
// If true, this repository is allowed to run scripts:
// - At source initialization time, the initialization scripts defined in
// "/luci-deploy.cfg" will be executed.
// - At build time, build scripts associated with a Component will
// be executed. Note that if the a Component declares a build script and `run_scripts` is not true,
// the build will fail.
//
// It is important that this repository is trusted if this is set to true,
// since this script will be run on the deployment system under the
// deployment user account.
RunScripts bool `protobuf:"varint,11,opt,name=run_scripts,json=runScripts" json:"run_scripts,omitempty"`
// * If true, mark this as a tained source.
Tainted bool `protobuf:"varint,12,opt,name=tainted" json:"tainted,omitempty"`
}
func (m *Source) Reset() { *m = Source{} }
func (m *Source) String() string { return proto.CompactTextString(m) }
func (*Source) ProtoMessage() {}
func (*Source) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{1} }
type isSource_Source interface {
isSource_Source()
}
type Source_Git struct {
Git *Source_GitRepo `protobuf:"bytes,1,opt,name=git,oneof"`
}
func (*Source_Git) isSource_Source() {}
func (m *Source) GetSource() isSource_Source {
if m != nil {
return m.Source
}
return nil
}
func (m *Source) GetGit() *Source_GitRepo {
if x, ok := m.GetSource().(*Source_Git); ok {
return x.Git
}
return nil
}
func (m *Source) GetGoPath() []*GoPath {
if m != nil {
return m.GoPath
}
return nil
}
func (m *Source) GetRunScripts() bool {
if m != nil {
return m.RunScripts
}
return false
}
func (m *Source) GetTainted() bool {
if m != nil {
return m.Tainted
}
return false
}
// XXX_OneofFuncs is for the internal use of the proto package.
func (*Source) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
return _Source_OneofMarshaler, _Source_OneofUnmarshaler, _Source_OneofSizer, []interface{}{
(*Source_Git)(nil),
}
}
func _Source_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
m := msg.(*Source)
// source
switch x := m.Source.(type) {
case *Source_Git:
b.EncodeVarint(1<<3 | proto.WireBytes)
if err := b.EncodeMessage(x.Git); err != nil {
return err
}
case nil:
default:
return fmt.Errorf("Source.Source has unexpected type %T", x)
}
return nil
}
func _Source_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
m := msg.(*Source)
switch tag {
case 1: // source.git
if wire != proto.WireBytes {
return true, proto.ErrInternalBadWireType
}
msg := new(Source_GitRepo)
err := b.DecodeMessage(msg)
m.Source = &Source_Git{msg}
return true, err
default:
return false, nil
}
}
func _Source_OneofSizer(msg proto.Message) (n int) {
m := msg.(*Source)
// source
switch x := m.Source.(type) {
case *Source_Git:
s := proto.Size(x.Git)
n += proto.SizeVarint(1<<3 | proto.WireBytes)
n += proto.SizeVarint(uint64(s))
n += s
case nil:
default:
panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
}
return n
}
// * GitRepo is a named Git repository.
type Source_GitRepo struct {
// *
// URL is the base URL of the repository.
//
// If this is a "file://" URL, the local file path will be used as the
// repository source.
Url string `protobuf:"bytes,1,opt,name=url" json:"url,omitempty"`
// *
// Ref is the name of the Git ref to check out.
//
// If empty, the unpinned "refs/heads/master" will be used if this is a
// remote repository, and the current checkout will be used if this is a
// local (file://...) repository.
Ref string `protobuf:"bytes,2,opt,name=ref" json:"ref,omitempty"`
}
func (m *Source_GitRepo) Reset() { *m = Source_GitRepo{} }
func (m *Source_GitRepo) String() string { return proto.CompactTextString(m) }
func (*Source_GitRepo) ProtoMessage() {}
func (*Source_GitRepo) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{1, 0} }
func (m *Source_GitRepo) GetUrl() string {
if m != nil {
return m.Url
}
return ""
}
func (m *Source_GitRepo) GetRef() string {
if m != nil {
return m.Ref
}
return ""
}
// *
// Application represents a single application.
//
// Application configurations are located under the applications directory, and
// are named "<application-name>.cfg". The internal name for a given application
// is "<application-name>".
//
// An application is composed of high-level application settings, a set of
// component configurations loaded from sources, and application-wide settings
// for those components.
//
// A applications is not bound to any specific source group, so the same
// application can be applied (via deployments) to multiple source groups. This
// enables canary configurations to be expressed.
type Application struct {
Component []*Application_Component `protobuf:"bytes,1,rep,name=component" json:"component,omitempty"`
}
func (m *Application) Reset() { *m = Application{} }
func (m *Application) String() string { return proto.CompactTextString(m) }
func (*Application) ProtoMessage() {}
func (*Application) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{2} }
func (m *Application) GetComponent() []*Application_Component {
if m != nil {
return m.Component
}
return nil
}
// *
// Each Component entry is a application Component that will be pulled in from
// its Source repository. An application is composed of multiple Components.
//
// A Component is a single, deployable entity. It should be self-contained and
// able to co-exist with other Components in the Application.
type Application_Component struct {
// *
// Name is the local name of this Component.
//
// It can be referenced as <application-name>/<name>.
Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
// * The "<source-name>" of the source where this component is defined.
Source string `protobuf:"bytes,2,opt,name=source" json:"source,omitempty"`
// * The source-relative path to the Component within "<source-name>".
Path string `protobuf:"bytes,3,opt,name=path" json:"path,omitempty"`
// * The names of other sources to pull in to build this Component.
OtherSource []string `protobuf:"bytes,4,rep,name=other_source,json=otherSource" json:"other_source,omitempty"`
}
func (m *Application_Component) Reset() { *m = Application_Component{} }
func (m *Application_Component) String() string { return proto.CompactTextString(m) }
func (*Application_Component) ProtoMessage() {}
func (*Application_Component) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{2, 0} }
func (m *Application_Component) GetName() string {
if m != nil {
return m.Name
}
return ""
}
func (m *Application_Component) GetSource() string {
if m != nil {
return m.Source
}
return ""
}
func (m *Application_Component) GetPath() string {
if m != nil {
return m.Path
}
return ""
}
func (m *Application_Component) GetOtherSource() []string {
if m != nil {
return m.OtherSource
}
return nil
}
// *
// A Deployment represents a single cloud project deployment. It binds a
// set of Application configurations to a set of Sources and provides
// deployment-specific details, variables, and parameters.
//
// Deployment configurations are located under the deployments directory, and
// are named "<deployment-name>.cfg". The internal project name for a given
// deployment is "<deployment-name>".
//
// Each deployment entry roughly corresponds to a single Cloud Platform project.
type Deployment struct {
// * The name of the source group to use for this deployment.
SourceGroup string `protobuf:"bytes,1,opt,name=source_group,json=sourceGroup" json:"source_group,omitempty"`
// * The name of the Application that this Deployment manages.
Application string `protobuf:"bytes,2,opt,name=application" json:"application,omitempty"`
CloudProject *Deployment_CloudProject `protobuf:"bytes,3,opt,name=cloud_project,json=cloudProject" json:"cloud_project,omitempty"`
// *
// Map of key/value parameters for this Deployment.
//
// These will be automatically substituted where parameter substitution is
// allowed.
Parameter map[string]string `protobuf:"bytes,4,rep,name=parameter" json:"parameter,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
}
func (m *Deployment) Reset() { *m = Deployment{} }
func (m *Deployment) String() string { return proto.CompactTextString(m) }
func (*Deployment) ProtoMessage() {}
func (*Deployment) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{3} }
func (m *Deployment) GetSourceGroup() string {
if m != nil {
return m.SourceGroup
}
return ""
}
func (m *Deployment) GetApplication() string {
if m != nil {
return m.Application
}
return ""
}
func (m *Deployment) GetCloudProject() *Deployment_CloudProject {
if m != nil {
return m.CloudProject
}
return nil
}
func (m *Deployment) GetParameter() map[string]string {
if m != nil {
return m.Parameter
}
return nil
}
// *
// CloudProject defines the parameters for the deployent's Google Cloud
// Platform project, if applicable.
type Deployment_CloudProject struct {
// * The cloud project name.
Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
VersionScheme Deployment_CloudProject_VersionScheme `protobuf:"varint,2,opt,name=version_scheme,json=versionScheme,enum=deploy.Deployment_CloudProject_VersionScheme" json:"version_scheme,omitempty"`
ResourceRef []*Deployment_CloudProject_ResourceRef `protobuf:"bytes,4,rep,name=resource_ref,json=resourceRef" json:"resource_ref,omitempty"`
GkeCluster []*Deployment_CloudProject_GKECluster `protobuf:"bytes,5,rep,name=gke_cluster,json=gkeCluster" json:"gke_cluster,omitempty"`
}
func (m *Deployment_CloudProject) Reset() { *m = Deployment_CloudProject{} }
func (m *Deployment_CloudProject) String() string { return proto.CompactTextString(m) }
func (*Deployment_CloudProject) ProtoMessage() {}
func (*Deployment_CloudProject) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{3, 0} }
func (m *Deployment_CloudProject) GetName() string {
if m != nil {
return m.Name
}
return ""
}
func (m *Deployment_CloudProject) GetVersionScheme() Deployment_CloudProject_VersionScheme {
if m != nil {
return m.VersionScheme
}
return Deployment_CloudProject_DEFAULT
}
func (m *Deployment_CloudProject) GetResourceRef() []*Deployment_CloudProject_ResourceRef {
if m != nil {
return m.ResourceRef
}
return nil
}
func (m *Deployment_CloudProject) GetGkeCluster() []*Deployment_CloudProject_GKECluster {
if m != nil {
return m.GkeCluster
}
return nil
}
type Deployment_CloudProject_ResourceRef struct {
// * The name of the source that this resource resides in
Source string `protobuf:"bytes,1,opt,name=source" json:"source,omitempty"`
// * The source-relative path to the AppEngineResources text protobuf.
Path string `protobuf:"bytes,2,opt,name=path" json:"path,omitempty"`
}
func (m *Deployment_CloudProject_ResourceRef) Reset() { *m = Deployment_CloudProject_ResourceRef{} }
func (m *Deployment_CloudProject_ResourceRef) String() string { return proto.CompactTextString(m) }
func (*Deployment_CloudProject_ResourceRef) ProtoMessage() {}
func (*Deployment_CloudProject_ResourceRef) Descriptor() ([]byte, []int) {
return fileDescriptor2, []int{3, 0, 0}
}
func (m *Deployment_CloudProject_ResourceRef) GetSource() string {
if m != nil {
return m.Source
}
return ""
}
func (m *Deployment_CloudProject_ResourceRef) GetPath() string {
if m != nil {
return m.Path
}
return ""
}
// *
// Defines a Google Container Engine (GKE) cluster within this cloud
// project.
type Deployment_CloudProject_GKECluster struct {
// * The cluster name.
Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
// * The cluster zone.
Zone string `protobuf:"bytes,2,opt,name=zone" json:"zone,omitempty"`
// * The number of nodes in this cluster.
Nodes int32 `protobuf:"varint,3,opt,name=nodes" json:"nodes,omitempty"`
// * The size of the disk.
DiskSizeGb int32 `protobuf:"varint,4,opt,name=disk_size_gb,json=diskSizeGb" json:"disk_size_gb,omitempty"`
// * The name of the GKE machine type for this cluster.
MachineType string `protobuf:"bytes,5,opt,name=machine_type,json=machineType" json:"machine_type,omitempty"`
// * If true, enable GKE's auto-upgrade feature.
EnableAutoUpgrade bool `protobuf:"varint,6,opt,name=enable_auto_upgrade,json=enableAutoUpgrade" json:"enable_auto_upgrade,omitempty"`
Pod []*Deployment_CloudProject_GKECluster_PodBinding `protobuf:"bytes,10,rep,name=pod" json:"pod,omitempty"`
}
func (m *Deployment_CloudProject_GKECluster) Reset() { *m = Deployment_CloudProject_GKECluster{} }
func (m *Deployment_CloudProject_GKECluster) String() string { return proto.CompactTextString(m) }
func (*Deployment_CloudProject_GKECluster) ProtoMessage() {}
func (*Deployment_CloudProject_GKECluster) Descriptor() ([]byte, []int) {
return fileDescriptor2, []int{3, 0, 1}
}
func (m *Deployment_CloudProject_GKECluster) GetName() string {
if m != nil {
return m.Name
}
return ""
}
func (m *Deployment_CloudProject_GKECluster) GetZone() string {
if m != nil {
return m.Zone
}
return ""
}
func (m *Deployment_CloudProject_GKECluster) GetNodes() int32 {
if m != nil {
return m.Nodes
}
return 0
}
func (m *Deployment_CloudProject_GKECluster) GetDiskSizeGb() int32 {
if m != nil {
return m.DiskSizeGb
}
return 0
}
func (m *Deployment_CloudProject_GKECluster) GetMachineType() string {
if m != nil {
return m.MachineType
}
return ""
}
func (m *Deployment_CloudProject_GKECluster) GetEnableAutoUpgrade() bool {
if m != nil {
return m.EnableAutoUpgrade
}
return false
}
func (m *Deployment_CloudProject_GKECluster) GetPod() []*Deployment_CloudProject_GKECluster_PodBinding {
if m != nil {
return m.Pod
}
return nil
}
// * Binds a ContainerEnginePod component to this GKE cluster.
type Deployment_CloudProject_GKECluster_PodBinding struct {
// *
// The name of the Component to bind to this cluster. This component
// must be a ContainerEnginePod Component.
Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
// * The number of pod replicas to host on this cluster.
Replicas int32 `protobuf:"varint,2,opt,name=replicas" json:"replicas,omitempty"`
}
func (m *Deployment_CloudProject_GKECluster_PodBinding) Reset() {
*m = Deployment_CloudProject_GKECluster_PodBinding{}
}
func (m *Deployment_CloudProject_GKECluster_PodBinding) String() string {
return proto.CompactTextString(m)
}
func (*Deployment_CloudProject_GKECluster_PodBinding) ProtoMessage() {}
func (*Deployment_CloudProject_GKECluster_PodBinding) Descriptor() ([]byte, []int) {
return fileDescriptor2, []int{3, 0, 1, 0}
}
func (m *Deployment_CloudProject_GKECluster_PodBinding) GetName() string {
if m != nil {
return m.Name
}
return ""
}
func (m *Deployment_CloudProject_GKECluster_PodBinding) GetReplicas() int32 {
if m != nil {
return m.Replicas
}
return 0
}
func init() {
proto.RegisterType((*Layout)(nil), "deploy.Layout")
proto.RegisterType((*Source)(nil), "deploy.Source")
proto.RegisterType((*Source_GitRepo)(nil), "deploy.Source.GitRepo")
proto.RegisterType((*Application)(nil), "deploy.Application")
proto.RegisterType((*Application_Component)(nil), "deploy.Application.Component")
proto.RegisterType((*Deployment)(nil), "deploy.Deployment")
proto.RegisterType((*Deployment_CloudProject)(nil), "deploy.Deployment.CloudProject")
proto.RegisterType((*Deployment_CloudProject_ResourceRef)(nil), "deploy.Deployment.CloudProject.ResourceRef")
proto.RegisterType((*Deployment_CloudProject_GKECluster)(nil), "deploy.Deployment.CloudProject.GKECluster")
proto.RegisterType((*Deployment_CloudProject_GKECluster_PodBinding)(nil), "deploy.Deployment.CloudProject.GKECluster.PodBinding")
proto.RegisterEnum("deploy.Deployment_CloudProject_VersionScheme", Deployment_CloudProject_VersionScheme_name, Deployment_CloudProject_VersionScheme_value)
}
func init() {
proto.RegisterFile("github.com/luci/luci-go/deploytool/api/deploy/config.proto", fileDescriptor2)
}
var fileDescriptor2 = []byte{
// 790 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x55, 0xdd, 0x6a, 0xe3, 0x46,
0x18, 0x5d, 0xc5, 0xb1, 0x1d, 0x7f, 0x72, 0x5c, 0xef, 0xb4, 0x2c, 0x46, 0xb4, 0xac, 0xe3, 0x9b,
0xa6, 0xbb, 0x44, 0x06, 0x97, 0x42, 0xbb, 0x0d, 0x94, 0x6c, 0x92, 0xba, 0xb0, 0x4b, 0x31, 0xe3,
0xa4, 0xb7, 0x42, 0x96, 0x26, 0xf2, 0xd4, 0xf2, 0xcc, 0x30, 0x1a, 0xa5, 0x38, 0x0f, 0xd4, 0x57,
0x28, 0xf4, 0x01, 0x7a, 0xdd, 0xbe, 0x51, 0x99, 0x1f, 0x45, 0x0a, 0x18, 0xd2, 0xde, 0x24, 0xf3,
0x9d, 0x39, 0x73, 0xbe, 0x2f, 0x67, 0x8e, 0x26, 0xf0, 0x2e, 0xa3, 0x6a, 0x5d, 0xae, 0xc2, 0x84,
0x6f, 0xa7, 0x79, 0x99, 0x50, 0xf3, 0xe3, 0x2c, 0xe3, 0xd3, 0x94, 0x88, 0x9c, 0xef, 0x14, 0xe7,
0xf9, 0x34, 0x16, 0xd4, 0x95, 0xd3, 0x84, 0xb3, 0x3b, 0x9a, 0x85, 0x42, 0x72, 0xc5, 0x51, 0xc7,
0x82, 0xc1, 0xf9, 0xff, 0xd4, 0x58, 0x93, 0x64, 0xc3, 0x4b, 0x65, 0x55, 0x26, 0xbf, 0x7b, 0xd0,
0xf9, 0x18, 0xef, 0x78, 0xa9, 0xd0, 0x09, 0xf4, 0x0b, 0x5e, 0xca, 0x84, 0x14, 0x91, 0x88, 0xd5,
0x7a, 0xe4, 0x8d, 0xbd, 0xd3, 0x1e, 0xf6, 0x1d, 0xb6, 0x88, 0xd5, 0x1a, 0xbd, 0x85, 0x97, 0xb1,
0x10, 0x39, 0x4d, 0x62, 0x45, 0x39, 0x73, 0xbc, 0x03, 0xc3, 0x1b, 0x36, 0x37, 0x0c, 0xf9, 0x2b,
0x18, 0xda, 0x9e, 0x5b, 0xc2, 0x94, 0xe3, 0xb6, 0x0c, 0xf7, 0x93, 0x06, 0x6e, 0xa8, 0x27, 0xd0,
0xff, 0x8d, 0xcb, 0x0d, 0x65, 0x99, 0xa5, 0xb5, 0x6d, 0x6b, 0x87, 0x69, 0xca, 0xe4, 0x1f, 0x0f,
0x3a, 0x4b, 0x33, 0x0a, 0x7a, 0x03, 0xad, 0x8c, 0x2a, 0x33, 0x9f, 0x3f, 0x7b, 0x15, 0x5a, 0xb1,
0xd0, 0x6e, 0x86, 0x73, 0xaa, 0x30, 0x11, 0xfc, 0xa7, 0x17, 0x58, 0x93, 0xd0, 0x97, 0xd0, 0xcd,
0xb8, 0x15, 0x85, 0x71, 0xeb, 0xd4, 0x9f, 0x0d, 0x2a, 0xfe, 0x9c, 0x6b, 0x5d, 0xdc, 0xc9, 0xcc,
0x6f, 0xf4, 0x1a, 0x7c, 0x59, 0xb2, 0xa8, 0x48, 0x24, 0x15, 0xaa, 0x18, 0xf9, 0x63, 0xef, 0xf4,
0x08, 0x83, 0x2c, 0xd9, 0xd2, 0x22, 0x68, 0x04, 0x5d, 0x15, 0x53, 0xa6, 0x48, 0x3a, 0xea, 0x9b,
0xcd, 0xaa, 0x0c, 0xce, 0xa0, 0xeb, 0xba, 0xa2, 0x21, 0xb4, 0x4a, 0x99, 0x3b, 0xeb, 0xf4, 0x52,
0x23, 0x92, 0xdc, 0x39, 0x93, 0xf4, 0xf2, 0xfd, 0x11, 0x74, 0xac, 0xa7, 0x93, 0x3f, 0x3d, 0xf0,
0x2f, 0x6a, 0xdb, 0xd0, 0xf7, 0xd0, 0x4b, 0xf8, 0x56, 0x70, 0x46, 0x98, 0xfe, 0xf3, 0xf4, 0xb8,
0x5f, 0x54, 0xe3, 0x36, 0x78, 0xe1, 0x65, 0x45, 0xc2, 0x35, 0x3f, 0x60, 0xd0, 0x7b, 0xc4, 0x11,
0x82, 0x43, 0x16, 0x6f, 0x89, 0x1b, 0xc4, 0xac, 0xd1, 0xab, 0xaa, 0xaf, 0x1b, 0xc6, 0x55, 0x9a,
0xdb, 0xb8, 0x1b, 0xb3, 0xd6, 0x17, 0xc2, 0xd5, 0x9a, 0xc8, 0xc8, 0x9d, 0x38, 0x1c, 0xb7, 0xf4,
0x85, 0x18, 0xcc, 0x1a, 0x3d, 0xf9, 0xbb, 0x0b, 0x70, 0xf5, 0x78, 0x8f, 0x75, 0x7a, 0xa2, 0x4c,
0xf2, 0x52, 0x3c, 0x4d, 0xcf, 0x5c, 0x43, 0x68, 0x0c, 0x7e, 0x23, 0x24, 0x6e, 0x8a, 0x26, 0x84,
0xae, 0xe0, 0x38, 0xc9, 0x79, 0x99, 0x46, 0x42, 0xf2, 0x5f, 0x49, 0xa2, 0xcc, 0x4c, 0xfe, 0xec,
0x75, 0x65, 0x42, 0xdd, 0x2f, 0xbc, 0xd4, 0xbc, 0x85, 0xa5, 0xe1, 0x7e, 0xd2, 0xa8, 0xd0, 0x0f,
0xd0, 0x13, 0xb1, 0x8c, 0xb7, 0x44, 0x11, 0x69, 0x26, 0xf7, 0x67, 0x27, 0x7b, 0x14, 0x16, 0x15,
0xe7, 0x9a, 0x29, 0xb9, 0xc3, 0xf5, 0x99, 0xe0, 0x8f, 0x36, 0xf4, 0x9b, 0xfa, 0x7b, 0xed, 0xbc,
0x81, 0xc1, 0x3d, 0x91, 0x05, 0xe5, 0x3a, 0x34, 0x6b, 0xb2, 0xb5, 0xb6, 0x0e, 0x66, 0x67, 0xcf,
0x0c, 0x1b, 0xfe, 0x62, 0x4f, 0x2d, 0xcd, 0x21, 0x7c, 0x7c, 0xdf, 0x2c, 0xd1, 0xcf, 0xd0, 0x97,
0xc4, 0x19, 0xa9, 0x73, 0x63, 0xc7, 0x7f, 0xfb, 0x9c, 0x26, 0x76, 0x67, 0x30, 0xb9, 0xc3, 0xbe,
0xac, 0x0b, 0xf4, 0x01, 0xfc, 0x6c, 0x43, 0xa2, 0x24, 0x2f, 0x0b, 0xed, 0x46, 0xdb, 0xc8, 0xbd,
0x79, 0x4e, 0x6e, 0xfe, 0xe1, 0xfa, 0xd2, 0x9e, 0xc0, 0x90, 0x6d, 0x88, 0x5b, 0x07, 0xdf, 0x81,
0xdf, 0x68, 0xd4, 0x08, 0x94, 0xb7, 0x37, 0x50, 0x07, 0x75, 0xa0, 0x82, 0xbf, 0x0e, 0x00, 0x6a,
0xd5, 0xbd, 0x86, 0x22, 0x38, 0x7c, 0xe0, 0xac, 0x4a, 0xa7, 0x59, 0xa3, 0xcf, 0xa0, 0xcd, 0x78,
0x4a, 0x0a, 0x13, 0x84, 0x36, 0xb6, 0x05, 0x1a, 0x43, 0x3f, 0xa5, 0xc5, 0x26, 0x2a, 0xe8, 0x03,
0x89, 0xb2, 0xd5, 0xe8, 0xd0, 0x6c, 0x82, 0xc6, 0x96, 0xf4, 0x81, 0xcc, 0x57, 0x3a, 0x8d, 0xdb,
0x38, 0x59, 0x53, 0x46, 0x22, 0xb5, 0x13, 0xa4, 0x7a, 0x50, 0x1c, 0x76, 0xb3, 0x13, 0x04, 0x85,
0xf0, 0x29, 0x61, 0xf1, 0x2a, 0x27, 0x51, 0x5c, 0x2a, 0x1e, 0x95, 0x22, 0x93, 0x71, 0x4a, 0x46,
0x1d, 0xf3, 0x6d, 0xbf, 0xb4, 0x5b, 0x17, 0xa5, 0xe2, 0xb7, 0x76, 0x03, 0xcd, 0xa1, 0x25, 0x78,
0xea, 0x5e, 0x91, 0x6f, 0xfe, 0xbb, 0x83, 0xe1, 0x82, 0xa7, 0xef, 0x29, 0x4b, 0x29, 0xcb, 0xb0,
0x56, 0x08, 0xce, 0x01, 0x6a, 0x68, 0xaf, 0x13, 0x01, 0x1c, 0x49, 0x62, 0xbe, 0x8a, 0xc2, 0xb8,
0xd1, 0xc6, 0x8f, 0xf5, 0xe4, 0x73, 0x38, 0x7e, 0x12, 0x20, 0xe4, 0x43, 0xf7, 0xea, 0xfa, 0xc7,
0x8b, 0xdb, 0x8f, 0x37, 0xc3, 0x17, 0xc1, 0x39, 0x0c, 0x9e, 0xc6, 0x5a, 0xbf, 0x3f, 0x1b, 0xb2,
0xab, 0x5e, 0xa4, 0x0d, 0xd9, 0x69, 0x4f, 0xef, 0xe3, 0xbc, 0xac, 0x8c, 0xb6, 0xc5, 0xbb, 0x83,
0x6f, 0xbd, 0x55, 0xc7, 0xfc, 0x4f, 0xf8, 0xfa, 0xdf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x1e, 0xe7,
0xb2, 0x3f, 0x97, 0x06, 0x00, 0x00,
}