Merge pull request #50204 from smarterclayton/move_list_to_metav1

Automatic merge from submit-queue (batch tested with PRs 50711, 50742, 50204)

Move List (the type) into metav1 but preserve the exposed type

Make a list something that other components can use without depending on the core API. This does not change the public API exposure of `List` (it is still in `v1`) but makes the interface common across both.
This commit is contained in:
Kubernetes Submit Queue 2017-08-16 02:50:26 -07:00 committed by GitHub
commit 49ed2a3115
25 changed files with 687 additions and 756 deletions

View File

@ -25,6 +25,7 @@ go_library(
"//vendor/k8s.io/apimachinery/pkg/api/resource:go_default_library",
"//vendor/k8s.io/apimachinery/pkg/apimachinery/announced:go_default_library",
"//vendor/k8s.io/apimachinery/pkg/apimachinery/registered:go_default_library",
"//vendor/k8s.io/apimachinery/pkg/apis/meta/internalversion:go_default_library",
"//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
"//vendor/k8s.io/apimachinery/pkg/conversion:go_default_library",
"//vendor/k8s.io/apimachinery/pkg/fields:go_default_library",

View File

@ -24,6 +24,7 @@ go_library(
deps = [
"//pkg/api:go_default_library",
"//vendor/k8s.io/apimachinery/pkg/api/meta:go_default_library",
"//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
"//vendor/k8s.io/apimachinery/pkg/runtime:go_default_library",
],
)

View File

@ -23,6 +23,7 @@ import (
"strings"
"k8s.io/apimachinery/pkg/api/meta"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/kubernetes/pkg/api"
)
@ -61,10 +62,10 @@ func GetReference(scheme *runtime.Scheme, obj runtime.Object) (*api.ObjectRefere
}
// An object that implements only List has enough metadata to build a reference
var listMeta meta.List
var listMeta metav1.Common
objectMeta, err := meta.Accessor(obj)
if err != nil {
listMeta, err = meta.ListAccessor(obj)
listMeta, err = meta.CommonAccessor(obj)
if err != nil {
return nil, err
}

View File

@ -18,10 +18,10 @@ package api
import (
"k8s.io/apimachinery/pkg/api/resource"
metainternalversion "k8s.io/apimachinery/pkg/apis/meta/internalversion"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/fields"
"k8s.io/apimachinery/pkg/labels"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/types"
"k8s.io/apimachinery/pkg/util/intstr"
)
@ -3626,13 +3626,7 @@ type EventList struct {
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
// List holds a list of objects, which may not be known by the server.
type List struct {
metav1.TypeMeta
// +optional
metav1.ListMeta
Items []runtime.Object
}
type List metainternalversion.List
// A type of object that is limited
type LimitType string

View File

@ -27,7 +27,6 @@ import (
codec1978 "github.com/ugorji/go/codec"
pkg3_resource "k8s.io/apimachinery/pkg/api/resource"
pkg2_v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
pkg5_runtime "k8s.io/apimachinery/pkg/runtime"
pkg1_types "k8s.io/apimachinery/pkg/types"
pkg4_intstr "k8s.io/apimachinery/pkg/util/intstr"
"reflect"
@ -67,11 +66,10 @@ func init() {
if false { // reference the types, but skip this branch at build/run time
var v0 pkg3_resource.Quantity
var v1 pkg2_v1.Time
var v2 pkg5_runtime.RawExtension
var v3 pkg1_types.UID
var v4 pkg4_intstr.IntOrString
var v5 time.Time
_, _, _, _, _, _ = v0, v1, v2, v3, v4, v5
var v2 pkg1_types.UID
var v3 pkg4_intstr.IntOrString
var v4 time.Time
_, _, _, _, _ = v0, v1, v2, v3, v4
}
}
@ -62018,374 +62016,6 @@ func (x *EventList) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) {
z.DecSendContainerState(codecSelfer_containerArrayEnd1234)
}
func (x *List) CodecEncodeSelf(e *codec1978.Encoder) {
var h codecSelfer1234
z, r := codec1978.GenHelperEncoder(e)
_, _, _ = h, z, r
if x == nil {
r.EncodeNil()
} else {
yym1 := z.EncBinary()
_ = yym1
if false {
} else if z.HasExtensions() && z.EncExt(x) {
} else {
yysep2 := !z.EncBinary()
yy2arr2 := z.EncBasicHandle().StructToArray
var yyq2 [4]bool
_, _, _ = yysep2, yyq2, yy2arr2
const yyr2 bool = false
yyq2[0] = x.Kind != ""
yyq2[1] = x.APIVersion != ""
yyq2[2] = true
var yynn2 int
if yyr2 || yy2arr2 {
r.EncodeArrayStart(4)
} else {
yynn2 = 1
for _, b := range yyq2 {
if b {
yynn2++
}
}
r.EncodeMapStart(yynn2)
yynn2 = 0
}
if yyr2 || yy2arr2 {
z.EncSendContainerState(codecSelfer_containerArrayElem1234)
if yyq2[0] {
yym4 := z.EncBinary()
_ = yym4
if false {
} else {
r.EncodeString(codecSelferC_UTF81234, string(x.Kind))
}
} else {
r.EncodeString(codecSelferC_UTF81234, "")
}
} else {
if yyq2[0] {
z.EncSendContainerState(codecSelfer_containerMapKey1234)
r.EncodeString(codecSelferC_UTF81234, string("kind"))
z.EncSendContainerState(codecSelfer_containerMapValue1234)
yym5 := z.EncBinary()
_ = yym5
if false {
} else {
r.EncodeString(codecSelferC_UTF81234, string(x.Kind))
}
}
}
if yyr2 || yy2arr2 {
z.EncSendContainerState(codecSelfer_containerArrayElem1234)
if yyq2[1] {
yym7 := z.EncBinary()
_ = yym7
if false {
} else {
r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion))
}
} else {
r.EncodeString(codecSelferC_UTF81234, "")
}
} else {
if yyq2[1] {
z.EncSendContainerState(codecSelfer_containerMapKey1234)
r.EncodeString(codecSelferC_UTF81234, string("apiVersion"))
z.EncSendContainerState(codecSelfer_containerMapValue1234)
yym8 := z.EncBinary()
_ = yym8
if false {
} else {
r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion))
}
}
}
if yyr2 || yy2arr2 {
z.EncSendContainerState(codecSelfer_containerArrayElem1234)
if yyq2[2] {
yy10 := &x.ListMeta
yym11 := z.EncBinary()
_ = yym11
if false {
} else if z.HasExtensions() && z.EncExt(yy10) {
} else {
z.EncFallback(yy10)
}
} else {
r.EncodeNil()
}
} else {
if yyq2[2] {
z.EncSendContainerState(codecSelfer_containerMapKey1234)
r.EncodeString(codecSelferC_UTF81234, string("metadata"))
z.EncSendContainerState(codecSelfer_containerMapValue1234)
yy12 := &x.ListMeta
yym13 := z.EncBinary()
_ = yym13
if false {
} else if z.HasExtensions() && z.EncExt(yy12) {
} else {
z.EncFallback(yy12)
}
}
}
if yyr2 || yy2arr2 {
z.EncSendContainerState(codecSelfer_containerArrayElem1234)
if x.Items == nil {
r.EncodeNil()
} else {
yym15 := z.EncBinary()
_ = yym15
if false {
} else {
h.encSliceruntime_RawExtension(([]pkg5_runtime.RawExtension)(x.Items), e)
}
}
} else {
z.EncSendContainerState(codecSelfer_containerMapKey1234)
r.EncodeString(codecSelferC_UTF81234, string("items"))
z.EncSendContainerState(codecSelfer_containerMapValue1234)
if x.Items == nil {
r.EncodeNil()
} else {
yym16 := z.EncBinary()
_ = yym16
if false {
} else {
h.encSliceruntime_RawExtension(([]pkg5_runtime.RawExtension)(x.Items), e)
}
}
}
if yyr2 || yy2arr2 {
z.EncSendContainerState(codecSelfer_containerArrayEnd1234)
} else {
z.EncSendContainerState(codecSelfer_containerMapEnd1234)
}
}
}
}
func (x *List) CodecDecodeSelf(d *codec1978.Decoder) {
var h codecSelfer1234
z, r := codec1978.GenHelperDecoder(d)
_, _, _ = h, z, r
yym1 := z.DecBinary()
_ = yym1
if false {
} else if z.HasExtensions() && z.DecExt(x) {
} else {
yyct2 := r.ContainerType()
if yyct2 == codecSelferValueTypeMap1234 {
yyl2 := r.ReadMapStart()
if yyl2 == 0 {
z.DecSendContainerState(codecSelfer_containerMapEnd1234)
} else {
x.codecDecodeSelfFromMap(yyl2, d)
}
} else if yyct2 == codecSelferValueTypeArray1234 {
yyl2 := r.ReadArrayStart()
if yyl2 == 0 {
z.DecSendContainerState(codecSelfer_containerArrayEnd1234)
} else {
x.codecDecodeSelfFromArray(yyl2, d)
}
} else {
panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234)
}
}
}
func (x *List) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) {
var h codecSelfer1234
z, r := codec1978.GenHelperDecoder(d)
_, _, _ = h, z, r
var yys3Slc = z.DecScratchBuffer() // default slice to decode into
_ = yys3Slc
var yyhl3 bool = l >= 0
for yyj3 := 0; ; yyj3++ {
if yyhl3 {
if yyj3 >= l {
break
}
} else {
if r.CheckBreak() {
break
}
}
z.DecSendContainerState(codecSelfer_containerMapKey1234)
yys3Slc = r.DecodeBytes(yys3Slc, true, true)
yys3 := string(yys3Slc)
z.DecSendContainerState(codecSelfer_containerMapValue1234)
switch yys3 {
case "kind":
if r.TryDecodeAsNil() {
x.Kind = ""
} else {
yyv4 := &x.Kind
yym5 := z.DecBinary()
_ = yym5
if false {
} else {
*((*string)(yyv4)) = r.DecodeString()
}
}
case "apiVersion":
if r.TryDecodeAsNil() {
x.APIVersion = ""
} else {
yyv6 := &x.APIVersion
yym7 := z.DecBinary()
_ = yym7
if false {
} else {
*((*string)(yyv6)) = r.DecodeString()
}
}
case "metadata":
if r.TryDecodeAsNil() {
x.ListMeta = pkg2_v1.ListMeta{}
} else {
yyv8 := &x.ListMeta
yym9 := z.DecBinary()
_ = yym9
if false {
} else if z.HasExtensions() && z.DecExt(yyv8) {
} else {
z.DecFallback(yyv8, false)
}
}
case "items":
if r.TryDecodeAsNil() {
x.Items = nil
} else {
yyv10 := &x.Items
yym11 := z.DecBinary()
_ = yym11
if false {
} else {
h.decSliceruntime_RawExtension((*[]pkg5_runtime.RawExtension)(yyv10), d)
}
}
default:
z.DecStructFieldNotFound(-1, yys3)
} // end switch yys3
} // end for yyj3
z.DecSendContainerState(codecSelfer_containerMapEnd1234)
}
func (x *List) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) {
var h codecSelfer1234
z, r := codec1978.GenHelperDecoder(d)
_, _, _ = h, z, r
var yyj12 int
var yyb12 bool
var yyhl12 bool = l >= 0
yyj12++
if yyhl12 {
yyb12 = yyj12 > l
} else {
yyb12 = r.CheckBreak()
}
if yyb12 {
z.DecSendContainerState(codecSelfer_containerArrayEnd1234)
return
}
z.DecSendContainerState(codecSelfer_containerArrayElem1234)
if r.TryDecodeAsNil() {
x.Kind = ""
} else {
yyv13 := &x.Kind
yym14 := z.DecBinary()
_ = yym14
if false {
} else {
*((*string)(yyv13)) = r.DecodeString()
}
}
yyj12++
if yyhl12 {
yyb12 = yyj12 > l
} else {
yyb12 = r.CheckBreak()
}
if yyb12 {
z.DecSendContainerState(codecSelfer_containerArrayEnd1234)
return
}
z.DecSendContainerState(codecSelfer_containerArrayElem1234)
if r.TryDecodeAsNil() {
x.APIVersion = ""
} else {
yyv15 := &x.APIVersion
yym16 := z.DecBinary()
_ = yym16
if false {
} else {
*((*string)(yyv15)) = r.DecodeString()
}
}
yyj12++
if yyhl12 {
yyb12 = yyj12 > l
} else {
yyb12 = r.CheckBreak()
}
if yyb12 {
z.DecSendContainerState(codecSelfer_containerArrayEnd1234)
return
}
z.DecSendContainerState(codecSelfer_containerArrayElem1234)
if r.TryDecodeAsNil() {
x.ListMeta = pkg2_v1.ListMeta{}
} else {
yyv17 := &x.ListMeta
yym18 := z.DecBinary()
_ = yym18
if false {
} else if z.HasExtensions() && z.DecExt(yyv17) {
} else {
z.DecFallback(yyv17, false)
}
}
yyj12++
if yyhl12 {
yyb12 = yyj12 > l
} else {
yyb12 = r.CheckBreak()
}
if yyb12 {
z.DecSendContainerState(codecSelfer_containerArrayEnd1234)
return
}
z.DecSendContainerState(codecSelfer_containerArrayElem1234)
if r.TryDecodeAsNil() {
x.Items = nil
} else {
yyv19 := &x.Items
yym20 := z.DecBinary()
_ = yym20
if false {
} else {
h.decSliceruntime_RawExtension((*[]pkg5_runtime.RawExtension)(yyv19), d)
}
}
for {
yyj12++
if yyhl12 {
yyb12 = yyj12 > l
} else {
yyb12 = r.CheckBreak()
}
if yyb12 {
break
}
z.DecSendContainerState(codecSelfer_containerArrayElem1234)
z.DecStructFieldNotFound(yyj12-1, "")
}
z.DecSendContainerState(codecSelfer_containerArrayEnd1234)
}
func (x LimitType) CodecEncodeSelf(e *codec1978.Encoder) {
var h codecSelfer1234
z, r := codec1978.GenHelperEncoder(e)
@ -76089,157 +75719,6 @@ func (x codecSelfer1234) decSliceEvent(v *[]Event, d *codec1978.Decoder) {
}
}
func (x codecSelfer1234) encSliceruntime_RawExtension(v []pkg5_runtime.RawExtension, e *codec1978.Encoder) {
var h codecSelfer1234
z, r := codec1978.GenHelperEncoder(e)
_, _, _ = h, z, r
r.EncodeArrayStart(len(v))
for _, yyv1 := range v {
z.EncSendContainerState(codecSelfer_containerArrayElem1234)
yy2 := &yyv1
yym3 := z.EncBinary()
_ = yym3
if false {
} else if z.HasExtensions() && z.EncExt(yy2) {
} else if !yym3 && z.IsJSONHandle() {
z.EncJSONMarshal(yy2)
} else {
z.EncFallback(yy2)
}
}
z.EncSendContainerState(codecSelfer_containerArrayEnd1234)
}
func (x codecSelfer1234) decSliceruntime_RawExtension(v *[]pkg5_runtime.RawExtension, d *codec1978.Decoder) {
var h codecSelfer1234
z, r := codec1978.GenHelperDecoder(d)
_, _, _ = h, z, r
yyv1 := *v
yyh1, yyl1 := z.DecSliceHelperStart()
var yyc1 bool
_ = yyc1
if yyl1 == 0 {
if yyv1 == nil {
yyv1 = []pkg5_runtime.RawExtension{}
yyc1 = true
} else if len(yyv1) != 0 {
yyv1 = yyv1[:0]
yyc1 = true
}
} else if yyl1 > 0 {
var yyrr1, yyrl1 int
var yyrt1 bool
_, _ = yyrl1, yyrt1
yyrr1 = yyl1 // len(yyv1)
if yyl1 > cap(yyv1) {
yyrg1 := len(yyv1) > 0
yyv21 := yyv1
yyrl1, yyrt1 = z.DecInferLen(yyl1, z.DecBasicHandle().MaxInitLen, 40)
if yyrt1 {
if yyrl1 <= cap(yyv1) {
yyv1 = yyv1[:yyrl1]
} else {
yyv1 = make([]pkg5_runtime.RawExtension, yyrl1)
}
} else {
yyv1 = make([]pkg5_runtime.RawExtension, yyrl1)
}
yyc1 = true
yyrr1 = len(yyv1)
if yyrg1 {
copy(yyv1, yyv21)
}
} else if yyl1 != len(yyv1) {
yyv1 = yyv1[:yyl1]
yyc1 = true
}
yyj1 := 0
for ; yyj1 < yyrr1; yyj1++ {
yyh1.ElemContainerState(yyj1)
if r.TryDecodeAsNil() {
yyv1[yyj1] = pkg5_runtime.RawExtension{}
} else {
yyv2 := &yyv1[yyj1]
yym3 := z.DecBinary()
_ = yym3
if false {
} else if z.HasExtensions() && z.DecExt(yyv2) {
} else if !yym3 && z.IsJSONHandle() {
z.DecJSONUnmarshal(yyv2)
} else {
z.DecFallback(yyv2, false)
}
}
}
if yyrt1 {
for ; yyj1 < yyl1; yyj1++ {
yyv1 = append(yyv1, pkg5_runtime.RawExtension{})
yyh1.ElemContainerState(yyj1)
if r.TryDecodeAsNil() {
yyv1[yyj1] = pkg5_runtime.RawExtension{}
} else {
yyv4 := &yyv1[yyj1]
yym5 := z.DecBinary()
_ = yym5
if false {
} else if z.HasExtensions() && z.DecExt(yyv4) {
} else if !yym5 && z.IsJSONHandle() {
z.DecJSONUnmarshal(yyv4)
} else {
z.DecFallback(yyv4, false)
}
}
}
}
} else {
yyj1 := 0
for ; !r.CheckBreak(); yyj1++ {
if yyj1 >= len(yyv1) {
yyv1 = append(yyv1, pkg5_runtime.RawExtension{}) // var yyz1 pkg5_runtime.RawExtension
yyc1 = true
}
yyh1.ElemContainerState(yyj1)
if yyj1 < len(yyv1) {
if r.TryDecodeAsNil() {
yyv1[yyj1] = pkg5_runtime.RawExtension{}
} else {
yyv6 := &yyv1[yyj1]
yym7 := z.DecBinary()
_ = yym7
if false {
} else if z.HasExtensions() && z.DecExt(yyv6) {
} else if !yym7 && z.IsJSONHandle() {
z.DecJSONUnmarshal(yyv6)
} else {
z.DecFallback(yyv6, false)
}
}
} else {
z.DecSwallow()
}
}
if yyj1 < len(yyv1) {
yyv1 = yyv1[:yyj1]
yyc1 = true
} else if yyj1 == 0 && yyv1 == nil {
yyv1 = []pkg5_runtime.RawExtension{}
yyc1 = true
}
}
yyh1.End()
if yyc1 {
*v = yyv1
}
}
func (x codecSelfer1234) encSliceLimitRangeItem(v []LimitRangeItem, e *codec1978.Encoder) {
var h codecSelfer1234
z, r := codec1978.GenHelperEncoder(e)

View File

@ -19,7 +19,6 @@ package v1
import (
"k8s.io/apimachinery/pkg/api/resource"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/types"
"k8s.io/apimachinery/pkg/util/intstr"
)
@ -4150,16 +4149,7 @@ type EventList struct {
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
// List holds a list of objects, which may not be known by the server.
type List struct {
metav1.TypeMeta `json:",inline"`
// Standard list metadata.
// More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
// +optional
metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"`
// List of objects
Items []runtime.RawExtension `json:"items" protobuf:"bytes,2,rep,name=items"`
}
type List metav1.List
// LimitType is a type of object that is limited
type LimitType string

View File

@ -744,16 +744,6 @@ func (LimitRangeSpec) SwaggerDoc() map[string]string {
return map_LimitRangeSpec
}
var map_List = map[string]string{
"": "List holds a list of objects, which may not be known by the server.",
"metadata": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds",
"items": "List of objects",
}
func (List) SwaggerDoc() map[string]string {
return map_List
}
var map_ListOptions = map[string]string{
"": "ListOptions is the query options to a standard REST list call. DEPRECATED: This type has been moved to meta/v1 and will be removed soon.",
"labelSelector": "A selector to restrict the list of returned objects by their labels. Defaults to everything.",

View File

@ -36,7 +36,7 @@ type ListMetaAccessor interface {
// List lets you work with list metadata from any of the versioned or
// internal API objects. Attempting to set or retrieve a field on an object that does
// not support that field will be a no-op and return a default value.
type List metav1.List
type List metav1.ListInterface
// Type exposes the type and APIVersion of versioned or internal API objects.
type Type metav1.Type

View File

@ -34,16 +34,49 @@ import (
// interfaces.
var errNotList = fmt.Errorf("object does not implement the List interfaces")
var errNotCommon = fmt.Errorf("object does not implement the common interface for accessing the SelfLink")
// CommonAccessor returns a Common interface for the provided object or an error if the object does
// not provide List.
// TODO: return bool instead of error
func CommonAccessor(obj interface{}) (metav1.Common, error) {
switch t := obj.(type) {
case List:
return t, nil
case metav1.ListInterface:
return t, nil
case ListMetaAccessor:
if m := t.GetListMeta(); m != nil {
return m, nil
}
return nil, errNotCommon
case metav1.ListMetaAccessor:
if m := t.GetListMeta(); m != nil {
return m, nil
}
return nil, errNotCommon
case metav1.Object:
return t, nil
case metav1.ObjectMetaAccessor:
if m := t.GetObjectMeta(); m != nil {
return m, nil
}
return nil, errNotCommon
default:
return nil, errNotCommon
}
}
// ListAccessor returns a List interface for the provided object or an error if the object does
// not provide List.
// IMPORTANT: Objects are a superset of lists, so all Objects return List metadata. Do not use this
// check to determine whether an object *is* a List.
// IMPORTANT: Objects are NOT a superset of lists. Do not use this check to determine whether an
// object *is* a List.
// TODO: return bool instead of error
func ListAccessor(obj interface{}) (List, error) {
switch t := obj.(type) {
case List:
return t, nil
case metav1.List:
case metav1.ListInterface:
return t, nil
case ListMetaAccessor:
if m := t.GetListMeta(); m != nil {
@ -55,15 +88,8 @@ func ListAccessor(obj interface{}) (List, error) {
return m, nil
}
return nil, errNotList
case metav1.Object:
return t, nil
case metav1.ObjectMetaAccessor:
if m := t.GetObjectMeta(); m != nil {
return m, nil
}
return nil, errNotList
default:
return nil, errNotList
panic(fmt.Errorf("%T does not implement the List interface", obj))
}
}
@ -274,7 +300,7 @@ func (resourceAccessor) SetUID(obj runtime.Object, uid types.UID) error {
}
func (resourceAccessor) SelfLink(obj runtime.Object) (string, error) {
accessor, err := ListAccessor(obj)
accessor, err := CommonAccessor(obj)
if err != nil {
return "", err
}
@ -282,7 +308,7 @@ func (resourceAccessor) SelfLink(obj runtime.Object) (string, error) {
}
func (resourceAccessor) SetSelfLink(obj runtime.Object, selfLink string) error {
accessor, err := ListAccessor(obj)
accessor, err := CommonAccessor(obj)
if err != nil {
return err
}
@ -325,7 +351,7 @@ func (resourceAccessor) SetAnnotations(obj runtime.Object, annotations map[strin
}
func (resourceAccessor) ResourceVersion(obj runtime.Object) (string, error) {
accessor, err := ListAccessor(obj)
accessor, err := CommonAccessor(obj)
if err != nil {
return "", err
}
@ -333,7 +359,7 @@ func (resourceAccessor) ResourceVersion(obj runtime.Object) (string, error) {
}
func (resourceAccessor) SetResourceVersion(obj runtime.Object, version string) error {
accessor, err := ListAccessor(obj)
accessor, err := CommonAccessor(obj)
if err != nil {
return err
}

View File

@ -28,6 +28,7 @@ go_library(
"doc.go",
"register.go",
"types.go",
"zz_generated.conversion.go",
"zz_generated.deepcopy.go",
],
deps = [

View File

@ -30,6 +30,14 @@ const GroupName = "meta.k8s.io"
// Scheme is the registry for any type that adheres to the meta API spec.
var scheme = runtime.NewScheme()
var (
// TODO: move SchemeBuilder with zz_generated.deepcopy.go to k8s.io/api.
// localSchemeBuilder and AddToScheme will stay in k8s.io/kubernetes.
SchemeBuilder runtime.SchemeBuilder
localSchemeBuilder = &SchemeBuilder
AddToScheme = localSchemeBuilder.AddToScheme
)
// Copier exposes copying on this scheme.
var Copier runtime.ObjectCopier = scheme

View File

@ -20,6 +20,7 @@ import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/fields"
"k8s.io/apimachinery/pkg/labels"
"k8s.io/apimachinery/pkg/runtime"
)
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
@ -48,3 +49,14 @@ type ListOptions struct {
// Timeout for the list/watch call.
TimeoutSeconds *int64
}
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
// List holds a list of objects, which may not be known by the server.
type List struct {
metav1.TypeMeta
// +optional
metav1.ListMeta
Items []runtime.Object
}

View File

@ -0,0 +1,113 @@
// +build !ignore_autogenerated
/*
Copyright 2017 The Kubernetes Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
// This file was autogenerated by conversion-gen. Do not edit it manually!
package internalversion
import (
v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
conversion "k8s.io/apimachinery/pkg/conversion"
runtime "k8s.io/apimachinery/pkg/runtime"
unsafe "unsafe"
)
func init() {
localSchemeBuilder.Register(RegisterConversions)
}
// RegisterConversions adds conversion functions to the given scheme.
// Public to allow building arbitrary schemes.
func RegisterConversions(scheme *runtime.Scheme) error {
return scheme.AddGeneratedConversionFuncs(
Convert_internalversion_List_To_v1_List,
Convert_v1_List_To_internalversion_List,
Convert_internalversion_ListOptions_To_v1_ListOptions,
Convert_v1_ListOptions_To_internalversion_ListOptions,
)
}
func autoConvert_internalversion_List_To_v1_List(in *List, out *v1.List, s conversion.Scope) error {
out.ListMeta = in.ListMeta
if in.Items != nil {
in, out := &in.Items, &out.Items
*out = make([]runtime.RawExtension, len(*in))
for i := range *in {
if err := runtime.Convert_runtime_Object_To_runtime_RawExtension(&(*in)[i], &(*out)[i], s); err != nil {
return err
}
}
} else {
out.Items = make([]runtime.RawExtension, 0)
}
return nil
}
// Convert_internalversion_List_To_v1_List is an autogenerated conversion function.
func Convert_internalversion_List_To_v1_List(in *List, out *v1.List, s conversion.Scope) error {
return autoConvert_internalversion_List_To_v1_List(in, out, s)
}
func autoConvert_v1_List_To_internalversion_List(in *v1.List, out *List, s conversion.Scope) error {
out.ListMeta = in.ListMeta
if in.Items != nil {
in, out := &in.Items, &out.Items
*out = make([]runtime.Object, len(*in))
for i := range *in {
if err := runtime.Convert_runtime_RawExtension_To_runtime_Object(&(*in)[i], &(*out)[i], s); err != nil {
return err
}
}
} else {
out.Items = nil
}
return nil
}
// Convert_v1_List_To_internalversion_List is an autogenerated conversion function.
func Convert_v1_List_To_internalversion_List(in *v1.List, out *List, s conversion.Scope) error {
return autoConvert_v1_List_To_internalversion_List(in, out, s)
}
func autoConvert_internalversion_ListOptions_To_v1_ListOptions(in *ListOptions, out *v1.ListOptions, s conversion.Scope) error {
if err := v1.Convert_labels_Selector_To_string(&in.LabelSelector, &out.LabelSelector, s); err != nil {
return err
}
if err := v1.Convert_fields_Selector_To_string(&in.FieldSelector, &out.FieldSelector, s); err != nil {
return err
}
out.IncludeUninitialized = in.IncludeUninitialized
out.Watch = in.Watch
out.ResourceVersion = in.ResourceVersion
out.TimeoutSeconds = (*int64)(unsafe.Pointer(in.TimeoutSeconds))
return nil
}
func autoConvert_v1_ListOptions_To_internalversion_ListOptions(in *v1.ListOptions, out *ListOptions, s conversion.Scope) error {
if err := v1.Convert_string_To_labels_Selector(&in.LabelSelector, &out.LabelSelector, s); err != nil {
return err
}
if err := v1.Convert_string_To_fields_Selector(&in.FieldSelector, &out.FieldSelector, s); err != nil {
return err
}
out.IncludeUninitialized = in.IncludeUninitialized
out.Watch = in.Watch
out.ResourceVersion = in.ResourceVersion
out.TimeoutSeconds = (*int64)(unsafe.Pointer(in.TimeoutSeconds))
return nil
}

View File

@ -31,6 +31,10 @@ import (
// Deprecated: deepcopy registration will go away when static deepcopy is fully implemented.
func GetGeneratedDeepCopyFuncs() []conversion.GeneratedDeepCopyFunc {
return []conversion.GeneratedDeepCopyFunc{
{Fn: func(in interface{}, out interface{}, c *conversion.Cloner) error {
in.(*List).DeepCopyInto(out.(*List))
return nil
}, InType: reflect.TypeOf(&List{})},
{Fn: func(in interface{}, out interface{}, c *conversion.Cloner) error {
in.(*ListOptions).DeepCopyInto(out.(*ListOptions))
return nil
@ -38,6 +42,44 @@ func GetGeneratedDeepCopyFuncs() []conversion.GeneratedDeepCopyFunc {
}
}
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *List) DeepCopyInto(out *List) {
*out = *in
out.TypeMeta = in.TypeMeta
out.ListMeta = in.ListMeta
if in.Items != nil {
in, out := &in.Items, &out.Items
*out = make([]runtime.Object, len(*in))
for i := range *in {
if (*in)[i] == nil {
(*out)[i] = nil
} else {
(*out)[i] = (*in)[i].DeepCopyObject()
}
}
}
return
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new List.
func (in *List) DeepCopy() *List {
if in == nil {
return nil
}
out := new(List)
in.DeepCopyInto(out)
return out
}
// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
func (in *List) DeepCopyObject() runtime.Object {
if c := in.DeepCopy(); c != nil {
return c
} else {
return nil
}
}
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *ListOptions) DeepCopyInto(out *ListOptions) {
*out = *in

View File

@ -19,4 +19,4 @@ limitations under the License.
// +k8s:defaulter-gen=TypeMeta
// +groupName=meta.k8s.io
package v1
package v1 // import "k8s.io/apimachinery/pkg/apis/meta/v1"

View File

@ -44,6 +44,7 @@ limitations under the License.
Initializers
LabelSelector
LabelSelectorRequirement
List
ListMeta
ListOptions
MicroTime
@ -67,6 +68,8 @@ import proto "github.com/gogo/protobuf/proto"
import fmt "fmt"
import math "math"
import k8s_io_apimachinery_pkg_runtime "k8s.io/apimachinery/pkg/runtime"
import time "time"
import k8s_io_apimachinery_pkg_types "k8s.io/apimachinery/pkg/types"
@ -169,71 +172,75 @@ func (*LabelSelectorRequirement) Descriptor() ([]byte, []int) {
return fileDescriptorGenerated, []int{18}
}
func (m *List) Reset() { *m = List{} }
func (*List) ProtoMessage() {}
func (*List) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{19} }
func (m *ListMeta) Reset() { *m = ListMeta{} }
func (*ListMeta) ProtoMessage() {}
func (*ListMeta) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{19} }
func (*ListMeta) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{20} }
func (m *ListOptions) Reset() { *m = ListOptions{} }
func (*ListOptions) ProtoMessage() {}
func (*ListOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{20} }
func (*ListOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{21} }
func (m *MicroTime) Reset() { *m = MicroTime{} }
func (*MicroTime) ProtoMessage() {}
func (*MicroTime) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{21} }
func (*MicroTime) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{22} }
func (m *ObjectMeta) Reset() { *m = ObjectMeta{} }
func (*ObjectMeta) ProtoMessage() {}
func (*ObjectMeta) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{22} }
func (*ObjectMeta) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{23} }
func (m *OwnerReference) Reset() { *m = OwnerReference{} }
func (*OwnerReference) ProtoMessage() {}
func (*OwnerReference) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{23} }
func (*OwnerReference) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{24} }
func (m *Preconditions) Reset() { *m = Preconditions{} }
func (*Preconditions) ProtoMessage() {}
func (*Preconditions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{24} }
func (*Preconditions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{25} }
func (m *RootPaths) Reset() { *m = RootPaths{} }
func (*RootPaths) ProtoMessage() {}
func (*RootPaths) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{25} }
func (*RootPaths) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{26} }
func (m *ServerAddressByClientCIDR) Reset() { *m = ServerAddressByClientCIDR{} }
func (*ServerAddressByClientCIDR) ProtoMessage() {}
func (*ServerAddressByClientCIDR) Descriptor() ([]byte, []int) {
return fileDescriptorGenerated, []int{26}
return fileDescriptorGenerated, []int{27}
}
func (m *Status) Reset() { *m = Status{} }
func (*Status) ProtoMessage() {}
func (*Status) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{27} }
func (*Status) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{28} }
func (m *StatusCause) Reset() { *m = StatusCause{} }
func (*StatusCause) ProtoMessage() {}
func (*StatusCause) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{28} }
func (*StatusCause) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{29} }
func (m *StatusDetails) Reset() { *m = StatusDetails{} }
func (*StatusDetails) ProtoMessage() {}
func (*StatusDetails) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{29} }
func (*StatusDetails) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{30} }
func (m *Time) Reset() { *m = Time{} }
func (*Time) ProtoMessage() {}
func (*Time) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{30} }
func (*Time) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{31} }
func (m *Timestamp) Reset() { *m = Timestamp{} }
func (*Timestamp) ProtoMessage() {}
func (*Timestamp) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{31} }
func (*Timestamp) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{32} }
func (m *TypeMeta) Reset() { *m = TypeMeta{} }
func (*TypeMeta) ProtoMessage() {}
func (*TypeMeta) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{32} }
func (*TypeMeta) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{33} }
func (m *Verbs) Reset() { *m = Verbs{} }
func (*Verbs) ProtoMessage() {}
func (*Verbs) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{33} }
func (*Verbs) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{34} }
func (m *WatchEvent) Reset() { *m = WatchEvent{} }
func (*WatchEvent) ProtoMessage() {}
func (*WatchEvent) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{34} }
func (*WatchEvent) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{35} }
func init() {
proto.RegisterType((*APIGroup)(nil), "k8s.io.apimachinery.pkg.apis.meta.v1.APIGroup")
@ -255,6 +262,7 @@ func init() {
proto.RegisterType((*Initializers)(nil), "k8s.io.apimachinery.pkg.apis.meta.v1.Initializers")
proto.RegisterType((*LabelSelector)(nil), "k8s.io.apimachinery.pkg.apis.meta.v1.LabelSelector")
proto.RegisterType((*LabelSelectorRequirement)(nil), "k8s.io.apimachinery.pkg.apis.meta.v1.LabelSelectorRequirement")
proto.RegisterType((*List)(nil), "k8s.io.apimachinery.pkg.apis.meta.v1.List")
proto.RegisterType((*ListMeta)(nil), "k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta")
proto.RegisterType((*ListOptions)(nil), "k8s.io.apimachinery.pkg.apis.meta.v1.ListOptions")
proto.RegisterType((*MicroTime)(nil), "k8s.io.apimachinery.pkg.apis.meta.v1.MicroTime")
@ -966,6 +974,44 @@ func (m *LabelSelectorRequirement) MarshalTo(dAtA []byte) (int, error) {
return i, nil
}
func (m *List) Marshal() (dAtA []byte, err error) {
size := m.Size()
dAtA = make([]byte, size)
n, err := m.MarshalTo(dAtA)
if err != nil {
return nil, err
}
return dAtA[:n], nil
}
func (m *List) MarshalTo(dAtA []byte) (int, error) {
var i int
_ = i
var l int
_ = l
dAtA[i] = 0xa
i++
i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size()))
n5, err := m.ListMeta.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
i += n5
if len(m.Items) > 0 {
for _, msg := range m.Items {
dAtA[i] = 0x12
i++
i = encodeVarintGenerated(dAtA, i, uint64(msg.Size()))
n, err := msg.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
i += n
}
}
return i, nil
}
func (m *ListMeta) Marshal() (dAtA []byte, err error) {
size := m.Size()
dAtA = make([]byte, size)
@ -1088,20 +1134,20 @@ func (m *ObjectMeta) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x42
i++
i = encodeVarintGenerated(dAtA, i, uint64(m.CreationTimestamp.Size()))
n5, err := m.CreationTimestamp.MarshalTo(dAtA[i:])
n6, err := m.CreationTimestamp.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
i += n5
i += n6
if m.DeletionTimestamp != nil {
dAtA[i] = 0x4a
i++
i = encodeVarintGenerated(dAtA, i, uint64(m.DeletionTimestamp.Size()))
n6, err := m.DeletionTimestamp.MarshalTo(dAtA[i:])
n7, err := m.DeletionTimestamp.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
i += n6
i += n7
}
if m.DeletionGracePeriodSeconds != nil {
dAtA[i] = 0x50
@ -1189,11 +1235,11 @@ func (m *ObjectMeta) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x1
i++
i = encodeVarintGenerated(dAtA, i, uint64(m.Initializers.Size()))
n7, err := m.Initializers.MarshalTo(dAtA[i:])
n8, err := m.Initializers.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
i += n7
i += n8
}
return i, nil
}
@ -1353,11 +1399,11 @@ func (m *Status) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0xa
i++
i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size()))
n8, err := m.ListMeta.MarshalTo(dAtA[i:])
n9, err := m.ListMeta.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
i += n8
i += n9
dAtA[i] = 0x12
i++
i = encodeVarintGenerated(dAtA, i, uint64(len(m.Status)))
@ -1374,11 +1420,11 @@ func (m *Status) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x2a
i++
i = encodeVarintGenerated(dAtA, i, uint64(m.Details.Size()))
n9, err := m.Details.MarshalTo(dAtA[i:])
n10, err := m.Details.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
i += n9
i += n10
}
dAtA[i] = 0x30
i++
@ -1570,11 +1616,11 @@ func (m *WatchEvent) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x12
i++
i = encodeVarintGenerated(dAtA, i, uint64(m.Object.Size()))
n10, err := m.Object.MarshalTo(dAtA[i:])
n11, err := m.Object.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
i += n10
i += n11
return i, nil
}
@ -1868,6 +1914,20 @@ func (m *LabelSelectorRequirement) Size() (n int) {
return n
}
func (m *List) Size() (n int) {
var l int
_ = l
l = m.ListMeta.Size()
n += 1 + l + sovGenerated(uint64(l))
if len(m.Items) > 0 {
for _, e := range m.Items {
l = e.Size()
n += 1 + l + sovGenerated(uint64(l))
}
}
return n
}
func (m *ListMeta) Size() (n int) {
var l int
_ = l
@ -2274,6 +2334,17 @@ func (this *LabelSelectorRequirement) String() string {
}, "")
return s
}
func (this *List) String() string {
if this == nil {
return "nil"
}
s := strings.Join([]string{`&List{`,
`ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "ListMeta", 1), `&`, ``, 1) + `,`,
`Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "RawExtension", "k8s_io_apimachinery_pkg_runtime.RawExtension", 1), `&`, ``, 1) + `,`,
`}`,
}, "")
return s
}
func (this *ListMeta) String() string {
if this == nil {
return "nil"
@ -4839,6 +4910,117 @@ func (m *LabelSelectorRequirement) Unmarshal(dAtA []byte) error {
}
return nil
}
func (m *List) Unmarshal(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
preIndex := iNdEx
var wire uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowGenerated
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
wire |= (uint64(b) & 0x7F) << shift
if b < 0x80 {
break
}
}
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
return fmt.Errorf("proto: List: wiretype end group for non-group")
}
if fieldNum <= 0 {
return fmt.Errorf("proto: List: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field ListMeta", wireType)
}
var msglen int
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowGenerated
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
msglen |= (int(b) & 0x7F) << shift
if b < 0x80 {
break
}
}
if msglen < 0 {
return ErrInvalidLengthGenerated
}
postIndex := iNdEx + msglen
if postIndex > l {
return io.ErrUnexpectedEOF
}
if err := m.ListMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
return err
}
iNdEx = postIndex
case 2:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType)
}
var msglen int
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowGenerated
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
msglen |= (int(b) & 0x7F) << shift
if b < 0x80 {
break
}
}
if msglen < 0 {
return ErrInvalidLengthGenerated
}
postIndex := iNdEx + msglen
if postIndex > l {
return io.ErrUnexpectedEOF
}
m.Items = append(m.Items, k8s_io_apimachinery_pkg_runtime.RawExtension{})
if err := m.Items[len(m.Items)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
return err
}
iNdEx = postIndex
default:
iNdEx = preIndex
skippy, err := skipGenerated(dAtA[iNdEx:])
if err != nil {
return err
}
if skippy < 0 {
return ErrInvalidLengthGenerated
}
if (iNdEx + skippy) > l {
return io.ErrUnexpectedEOF
}
iNdEx += skippy
}
}
if iNdEx > l {
return io.ErrUnexpectedEOF
}
return nil
}
func (m *ListMeta) Unmarshal(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
@ -7365,152 +7547,154 @@ func init() {
}
var fileDescriptorGenerated = []byte{
// 2351 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x59, 0xcd, 0x6f, 0x1b, 0xc7,
0x15, 0xd7, 0x52, 0x22, 0x45, 0x3e, 0x8a, 0xfa, 0x98, 0xc8, 0x2d, 0x23, 0xb4, 0xa4, 0xb2, 0x29,
0x02, 0xa5, 0x75, 0xc8, 0x4a, 0x69, 0x03, 0xd7, 0x6d, 0xdd, 0x6a, 0x45, 0xd9, 0x10, 0x62, 0xd9,
0xc4, 0x28, 0x76, 0x51, 0xd7, 0x28, 0xba, 0x5a, 0x8e, 0xa8, 0xad, 0x96, 0xbb, 0x9b, 0x99, 0xa1,
0x6c, 0x35, 0x87, 0xe6, 0xd0, 0x02, 0x3d, 0x14, 0x85, 0x8f, 0x3d, 0x15, 0x31, 0xda, 0xbf, 0xa0,
0x7f, 0x40, 0x4f, 0x05, 0xea, 0x63, 0x80, 0x5e, 0x72, 0x28, 0x88, 0x98, 0x39, 0xf4, 0x14, 0xf4,
0x2e, 0xa0, 0x40, 0x31, 0xb3, 0xb3, 0x5f, 0xa4, 0x18, 0x2d, 0xe3, 0xa0, 0xc8, 0x49, 0xdc, 0xf7,
0xf1, 0x7b, 0x6f, 0x66, 0xde, 0xbc, 0xf7, 0xe6, 0x09, 0xf6, 0x4f, 0xae, 0xb1, 0x86, 0xed, 0x35,
0x4f, 0xfa, 0x87, 0x84, 0xba, 0x84, 0x13, 0xd6, 0x3c, 0x25, 0x6e, 0xc7, 0xa3, 0x4d, 0xc5, 0x30,
0x7d, 0xbb, 0x67, 0x5a, 0xc7, 0xb6, 0x4b, 0xe8, 0x59, 0xd3, 0x3f, 0xe9, 0x0a, 0x02, 0x6b, 0xf6,
0x08, 0x37, 0x9b, 0xa7, 0x9b, 0xcd, 0x2e, 0x71, 0x09, 0x35, 0x39, 0xe9, 0x34, 0x7c, 0xea, 0x71,
0x0f, 0x7d, 0x23, 0xd0, 0x6a, 0x24, 0xb5, 0x1a, 0xfe, 0x49, 0x57, 0x10, 0x58, 0x43, 0x68, 0x35,
0x4e, 0x37, 0xd7, 0xde, 0xe8, 0xda, 0xfc, 0xb8, 0x7f, 0xd8, 0xb0, 0xbc, 0x5e, 0xb3, 0xeb, 0x75,
0xbd, 0xa6, 0x54, 0x3e, 0xec, 0x1f, 0xc9, 0x2f, 0xf9, 0x21, 0x7f, 0x05, 0xa0, 0x6b, 0x13, 0x5d,
0xa1, 0x7d, 0x97, 0xdb, 0x3d, 0x32, 0xea, 0xc5, 0xda, 0x5b, 0x97, 0x29, 0x30, 0xeb, 0x98, 0xf4,
0xcc, 0x31, 0xbd, 0x37, 0x27, 0xe9, 0xf5, 0xb9, 0xed, 0x34, 0x6d, 0x97, 0x33, 0x4e, 0x47, 0x95,
0xf4, 0x7f, 0xcc, 0x42, 0x71, 0xbb, 0xbd, 0x77, 0x8b, 0x7a, 0x7d, 0x1f, 0xad, 0xc3, 0x9c, 0x6b,
0xf6, 0x48, 0x55, 0x5b, 0xd7, 0x36, 0x4a, 0xc6, 0xc2, 0xb3, 0x41, 0x7d, 0x66, 0x38, 0xa8, 0xcf,
0xdd, 0x31, 0x7b, 0x04, 0x4b, 0x0e, 0x72, 0xa0, 0x78, 0x4a, 0x28, 0xb3, 0x3d, 0x97, 0x55, 0x73,
0xeb, 0xb3, 0x1b, 0xe5, 0xad, 0x1b, 0x8d, 0x2c, 0x9b, 0xd6, 0x90, 0x06, 0xee, 0x07, 0xaa, 0x37,
0x3d, 0xda, 0xb2, 0x99, 0xe5, 0x9d, 0x12, 0x7a, 0x66, 0x2c, 0x2b, 0x2b, 0x45, 0xc5, 0x64, 0x38,
0xb2, 0x80, 0x7e, 0xa3, 0xc1, 0xb2, 0x4f, 0xc9, 0x11, 0xa1, 0x94, 0x74, 0x14, 0xbf, 0x3a, 0xbb,
0xae, 0x7d, 0x01, 0x66, 0xab, 0xca, 0xec, 0x72, 0x7b, 0x04, 0x1f, 0x8f, 0x59, 0x44, 0x7f, 0xd6,
0x60, 0x8d, 0x11, 0x7a, 0x4a, 0xe8, 0x76, 0xa7, 0x43, 0x09, 0x63, 0xc6, 0xd9, 0x8e, 0x63, 0x13,
0x97, 0xef, 0xec, 0xb5, 0x30, 0xab, 0xce, 0xc9, 0x7d, 0xf8, 0x51, 0x36, 0x87, 0x0e, 0x26, 0xe1,
0x18, 0xba, 0xf2, 0x68, 0x6d, 0xa2, 0x08, 0xc3, 0x9f, 0xe1, 0x86, 0x7e, 0x04, 0x0b, 0xe1, 0x41,
0xde, 0xb6, 0x19, 0x47, 0xf7, 0xa1, 0xd0, 0x15, 0x1f, 0xac, 0xaa, 0x49, 0x07, 0x1b, 0xd9, 0x1c,
0x0c, 0x31, 0x8c, 0x45, 0xe5, 0x4f, 0x41, 0x7e, 0x32, 0xac, 0xd0, 0xf4, 0x4f, 0x73, 0x50, 0xde,
0x6e, 0xef, 0x61, 0xc2, 0xbc, 0x3e, 0xb5, 0x48, 0x86, 0xa0, 0xd9, 0x02, 0x10, 0x7f, 0x99, 0x6f,
0x5a, 0xa4, 0x53, 0xcd, 0xad, 0x6b, 0x1b, 0x45, 0x03, 0x29, 0x39, 0xb8, 0x13, 0x71, 0x70, 0x42,
0x4a, 0xa0, 0x9e, 0xd8, 0x6e, 0x47, 0x9e, 0x76, 0x02, 0xf5, 0x6d, 0xdb, 0xed, 0x60, 0xc9, 0x41,
0xb7, 0x21, 0x7f, 0x4a, 0xe8, 0xa1, 0xd8, 0x7f, 0x11, 0x10, 0xdf, 0xca, 0xb6, 0xbc, 0xfb, 0x42,
0xc5, 0x28, 0x0d, 0x07, 0xf5, 0xbc, 0xfc, 0x89, 0x03, 0x10, 0xd4, 0x00, 0x60, 0xc7, 0x1e, 0xe5,
0xd2, 0x9d, 0x6a, 0x7e, 0x7d, 0x76, 0xa3, 0x64, 0x2c, 0x0a, 0xff, 0x0e, 0x22, 0x2a, 0x4e, 0x48,
0xa0, 0x6b, 0xb0, 0xc0, 0x6c, 0xb7, 0xdb, 0x77, 0x4c, 0x2a, 0x08, 0xd5, 0x82, 0xf4, 0x73, 0x55,
0xf9, 0xb9, 0x70, 0x90, 0xe0, 0xe1, 0x94, 0xa4, 0xb0, 0x64, 0x99, 0x9c, 0x74, 0x3d, 0x6a, 0x13,
0x56, 0x9d, 0x8f, 0x2d, 0xed, 0x44, 0x54, 0x9c, 0x90, 0xd0, 0xff, 0xaa, 0xc1, 0x52, 0x62, 0xbf,
0xe5, 0xd9, 0x5e, 0x83, 0x85, 0x6e, 0x22, 0xb2, 0xd5, 0xde, 0x47, 0xd6, 0x93, 0x51, 0x8f, 0x53,
0x92, 0x88, 0x40, 0x89, 0x2a, 0xa4, 0xf0, 0x06, 0x6f, 0x66, 0x0e, 0x8c, 0xd0, 0x87, 0xd8, 0x52,
0x82, 0xc8, 0x70, 0x8c, 0xac, 0xff, 0x5b, 0x93, 0x41, 0x12, 0xde, 0x69, 0xb4, 0x91, 0xc8, 0x1b,
0x9a, 0x5c, 0xf2, 0xc2, 0x84, 0x3b, 0x7f, 0xc9, 0x65, 0xcb, 0x7d, 0x29, 0x2e, 0xdb, 0xf5, 0xe2,
0x1f, 0x3f, 0xa8, 0xcf, 0xbc, 0xff, 0xaf, 0xf5, 0x19, 0xfd, 0x93, 0x1c, 0x54, 0x5a, 0xc4, 0x21,
0x9c, 0xdc, 0xf5, 0xb9, 0x5c, 0xc1, 0x4d, 0x40, 0x5d, 0x6a, 0x5a, 0xa4, 0x4d, 0xa8, 0xed, 0x75,
0x0e, 0x88, 0xe5, 0xb9, 0x1d, 0x26, 0x8f, 0x68, 0xd6, 0xf8, 0xca, 0x70, 0x50, 0x47, 0xb7, 0xc6,
0xb8, 0xf8, 0x02, 0x0d, 0xe4, 0x40, 0xc5, 0xa7, 0xf2, 0xb7, 0xcd, 0x55, 0xc2, 0x15, 0x81, 0xfe,
0x66, 0xb6, 0xb5, 0xb7, 0x93, 0xaa, 0xc6, 0xca, 0x70, 0x50, 0xaf, 0xa4, 0x48, 0x38, 0x0d, 0x8e,
0x7e, 0x0c, 0xcb, 0x1e, 0xf5, 0x8f, 0x4d, 0xb7, 0x45, 0x7c, 0xe2, 0x76, 0x88, 0xcb, 0x99, 0xbc,
0x7c, 0x45, 0x63, 0x55, 0xa4, 0xc9, 0xbb, 0x23, 0x3c, 0x3c, 0x26, 0x8d, 0x1e, 0xc0, 0x8a, 0x4f,
0x3d, 0xdf, 0xec, 0x9a, 0x02, 0xb1, 0xed, 0x39, 0xb6, 0x75, 0x26, 0x2f, 0x67, 0xc9, 0xb8, 0x3a,
0x1c, 0xd4, 0x57, 0xda, 0xa3, 0xcc, 0xf3, 0x41, 0xfd, 0x25, 0xb9, 0x75, 0x82, 0x12, 0x33, 0xf1,
0x38, 0x8c, 0xbe, 0x07, 0xc5, 0x56, 0x9f, 0x4a, 0x0a, 0xfa, 0x21, 0x14, 0x3b, 0xea, 0xb7, 0xda,
0xd5, 0x57, 0xc2, 0x1a, 0x12, 0xca, 0x9c, 0x0f, 0xea, 0x15, 0x51, 0x2a, 0x1b, 0x21, 0x01, 0x47,
0x2a, 0xfa, 0x43, 0xa8, 0xec, 0x3e, 0xf6, 0x3d, 0xca, 0xc3, 0xf3, 0x7a, 0x0d, 0x0a, 0x44, 0x12,
0x24, 0x5a, 0x31, 0x4e, 0x7c, 0x81, 0x18, 0x56, 0x5c, 0xf4, 0x2a, 0xe4, 0xc9, 0x63, 0xd3, 0xe2,
0x2a, 0x83, 0x55, 0x94, 0x58, 0x7e, 0x57, 0x10, 0x71, 0xc0, 0xd3, 0x9f, 0x6a, 0x00, 0xb7, 0x48,
0x84, 0xbd, 0x0d, 0x4b, 0xe1, 0xa5, 0x48, 0xdf, 0xd5, 0xaf, 0x2a, 0xed, 0x25, 0x9c, 0x66, 0xe3,
0x51, 0x79, 0xd4, 0x86, 0x55, 0xdb, 0xb5, 0x9c, 0x7e, 0x87, 0xdc, 0x73, 0x6d, 0xd7, 0xe6, 0xb6,
0xe9, 0xd8, 0xbf, 0x8a, 0xf2, 0xe8, 0xd7, 0x14, 0xce, 0xea, 0xde, 0x05, 0x32, 0xf8, 0x42, 0x4d,
0xfd, 0x21, 0x94, 0x64, 0x86, 0x10, 0xc9, 0x54, 0xac, 0x4a, 0x26, 0x08, 0xe5, 0x57, 0xb4, 0x2a,
0x29, 0x81, 0x03, 0x5e, 0x94, 0x8d, 0x73, 0x93, 0xb2, 0x71, 0xe2, 0x42, 0x38, 0x50, 0x09, 0x74,
0xc3, 0x02, 0x91, 0xc9, 0xc2, 0x55, 0x28, 0x86, 0x0b, 0x57, 0x56, 0xa2, 0xc6, 0x20, 0x04, 0xc2,
0x91, 0x44, 0xc2, 0xda, 0x31, 0xa4, 0xb2, 0x5d, 0x36, 0x63, 0xaf, 0xc3, 0xbc, 0xca, 0x37, 0xca,
0xd6, 0x92, 0x12, 0x9b, 0x0f, 0x4f, 0x21, 0xe4, 0x27, 0x2c, 0xfd, 0x1a, 0xaa, 0x93, 0xba, 0x89,
0x17, 0xc8, 0xc7, 0xd9, 0x5d, 0xd1, 0xff, 0xa0, 0xc1, 0x72, 0x12, 0x29, 0xfb, 0xf1, 0x65, 0x37,
0x72, 0x79, 0xdd, 0x4d, 0xec, 0xc8, 0x9f, 0x34, 0x58, 0x4d, 0x2d, 0x6d, 0xaa, 0x13, 0x9f, 0xc2,
0xa9, 0x64, 0x70, 0xcc, 0x4e, 0x11, 0x1c, 0x4d, 0x28, 0xef, 0x45, 0x71, 0x4f, 0x2f, 0xef, 0x54,
0xf4, 0xbf, 0x69, 0xb0, 0x90, 0xd0, 0x60, 0xe8, 0x21, 0xcc, 0x8b, 0xfc, 0x66, 0xbb, 0x5d, 0xd5,
0x45, 0x65, 0x2c, 0x96, 0x09, 0x90, 0x78, 0x5d, 0xed, 0x00, 0x09, 0x87, 0x90, 0xa8, 0x0d, 0x05,
0x4a, 0x58, 0xdf, 0xe1, 0x2a, 0xb5, 0x5f, 0xcd, 0x58, 0xd6, 0xb8, 0xc9, 0xfb, 0xcc, 0x00, 0x91,
0xa3, 0xb0, 0xd4, 0xc7, 0x0a, 0x47, 0xff, 0x67, 0x0e, 0x2a, 0xb7, 0xcd, 0x43, 0xe2, 0x1c, 0x10,
0x87, 0x58, 0xdc, 0xa3, 0xe8, 0x3d, 0x28, 0xf7, 0x4c, 0x6e, 0x1d, 0x4b, 0x6a, 0xd8, 0x0b, 0xb6,
0xb2, 0x19, 0x4a, 0x21, 0x35, 0xf6, 0x63, 0x98, 0x5d, 0x97, 0xd3, 0x33, 0xe3, 0x25, 0xb5, 0xb0,
0x72, 0x82, 0x83, 0x93, 0xd6, 0x64, 0x03, 0x2f, 0xbf, 0x77, 0x1f, 0xfb, 0xa2, 0x88, 0x4e, 0xff,
0x6e, 0x48, 0xb9, 0x80, 0xc9, 0xbb, 0x7d, 0x9b, 0x92, 0x1e, 0x71, 0x79, 0xdc, 0xc0, 0xef, 0x8f,
0xe0, 0xe3, 0x31, 0x8b, 0x6b, 0x37, 0x60, 0x79, 0xd4, 0x79, 0xb4, 0x0c, 0xb3, 0x27, 0xe4, 0x2c,
0x88, 0x05, 0x2c, 0x7e, 0xa2, 0x55, 0xc8, 0x9f, 0x9a, 0x4e, 0x5f, 0xe5, 0x1f, 0x1c, 0x7c, 0x5c,
0xcf, 0x5d, 0xd3, 0xf4, 0xbf, 0x68, 0x50, 0x9d, 0xe4, 0x08, 0xfa, 0x7a, 0x02, 0xc8, 0x28, 0x2b,
0xaf, 0x66, 0xdf, 0x26, 0x67, 0x01, 0xea, 0x2e, 0x14, 0x3d, 0x5f, 0x3c, 0xb9, 0x3c, 0xaa, 0xe2,
0xfc, 0xf5, 0x30, 0x76, 0xef, 0x2a, 0xfa, 0xf9, 0xa0, 0x7e, 0x25, 0x05, 0x1f, 0x32, 0x70, 0xa4,
0x8a, 0x74, 0x28, 0x48, 0x7f, 0x44, 0x51, 0x16, 0xed, 0x93, 0x3c, 0xfc, 0xfb, 0x92, 0x82, 0x15,
0x47, 0x7f, 0x0f, 0x8a, 0xa2, 0x3b, 0xdc, 0x27, 0xdc, 0x14, 0x57, 0x86, 0x11, 0xe7, 0xe8, 0xb6,
0xed, 0x9e, 0x28, 0xd7, 0xa2, 0x2b, 0x73, 0xa0, 0xe8, 0x38, 0x92, 0xb8, 0xa8, 0x4c, 0xe5, 0xa6,
0x2b, 0x53, 0xfa, 0x7f, 0x73, 0x50, 0x16, 0xd6, 0xc3, 0xca, 0xf7, 0x7d, 0xa8, 0x38, 0xc9, 0x35,
0x29, 0x2f, 0xae, 0x28, 0xc0, 0x74, 0x94, 0xe2, 0xb4, 0xac, 0x50, 0x3e, 0xb2, 0x89, 0xd3, 0x89,
0x94, 0x73, 0x69, 0xe5, 0x9b, 0x49, 0x26, 0x4e, 0xcb, 0x8a, 0xec, 0xf3, 0x48, 0x9c, 0xb6, 0x6a,
0x5f, 0xa2, 0xec, 0xf3, 0x13, 0x41, 0xc4, 0x01, 0xef, 0xa2, 0x15, 0xcf, 0x4d, 0x59, 0x98, 0xaf,
0xc3, 0xa2, 0xe8, 0x31, 0xbc, 0x3e, 0x0f, 0x7b, 0xbc, 0xbc, 0xec, 0x46, 0xd0, 0x70, 0x50, 0x5f,
0x7c, 0x27, 0xc5, 0xc1, 0x23, 0x92, 0x13, 0x8b, 0x7a, 0xe1, 0x73, 0x17, 0xf5, 0x77, 0xa1, 0xb4,
0x6f, 0x5b, 0xd4, 0x13, 0x86, 0x45, 0x6e, 0x65, 0xa9, 0xbe, 0x33, 0xca, 0x41, 0xa1, 0x43, 0x21,
0x5f, 0xec, 0x96, 0x6b, 0xba, 0x5e, 0xd0, 0x5d, 0xe6, 0xe3, 0xdd, 0xba, 0x23, 0x88, 0x38, 0xe0,
0x5d, 0x5f, 0x15, 0x29, 0xf5, 0x77, 0x4f, 0xeb, 0x33, 0x4f, 0x9e, 0xd6, 0x67, 0x3e, 0x78, 0xaa,
0xd2, 0xeb, 0xa7, 0x00, 0x70, 0xf7, 0xf0, 0x97, 0xc4, 0x0a, 0x42, 0xee, 0xf2, 0x87, 0xa0, 0x28,
0x93, 0x6a, 0xfe, 0x20, 0x1f, 0x4d, 0xb9, 0x91, 0x32, 0x99, 0xe0, 0xe1, 0x94, 0x24, 0x6a, 0x42,
0x29, 0x7a, 0x1c, 0xaa, 0x12, 0xb0, 0xa2, 0xd4, 0x4a, 0xd1, 0x0b, 0x12, 0xc7, 0x32, 0xa9, 0xf8,
0x9f, 0xbb, 0x34, 0xfe, 0x0d, 0x98, 0xed, 0xdb, 0x1d, 0x79, 0x7e, 0x25, 0xe3, 0xdb, 0xe1, 0x1d,
0xbe, 0xb7, 0xd7, 0x3a, 0x1f, 0xd4, 0x5f, 0x99, 0x34, 0x56, 0xe1, 0x67, 0x3e, 0x61, 0x8d, 0x7b,
0x7b, 0x2d, 0x2c, 0x94, 0x2f, 0x8a, 0xa8, 0xc2, 0x94, 0x11, 0xb5, 0x05, 0xa0, 0x56, 0x2d, 0xb4,
0xe7, 0x83, 0x68, 0x0a, 0x1f, 0xca, 0xb7, 0x22, 0x0e, 0x4e, 0x48, 0x21, 0x06, 0x2b, 0x16, 0x25,
0xf2, 0xb7, 0x38, 0x7a, 0xc6, 0xcd, 0x9e, 0x5f, 0x2d, 0xca, 0x72, 0xf2, 0xcd, 0x6c, 0x29, 0x56,
0xa8, 0x19, 0x2f, 0x2b, 0x33, 0x2b, 0x3b, 0xa3, 0x60, 0x78, 0x1c, 0x1f, 0x79, 0xb0, 0xd2, 0x51,
0x8d, 0x7b, 0x6c, 0xb4, 0x34, 0xb5, 0xd1, 0x2b, 0xc2, 0x60, 0x6b, 0x14, 0x08, 0x8f, 0x63, 0xa3,
0x9f, 0xc3, 0x5a, 0x48, 0x1c, 0x7f, 0x3d, 0x55, 0x41, 0xee, 0x54, 0x4d, 0xbc, 0xe7, 0x5a, 0x13,
0xa5, 0xf0, 0x67, 0x20, 0xa0, 0x0e, 0x14, 0x9c, 0xa0, 0x40, 0x96, 0x65, 0x75, 0xfa, 0x41, 0xb6,
0x55, 0xc4, 0xd1, 0xdf, 0x48, 0x16, 0xc6, 0xe8, 0x05, 0xa1, 0x6a, 0xa2, 0xc2, 0x46, 0x8f, 0xa1,
0x6c, 0xba, 0xae, 0xc7, 0xcd, 0xe0, 0x3d, 0xb7, 0x20, 0x4d, 0x6d, 0x4f, 0x6d, 0x6a, 0x3b, 0xc6,
0x18, 0x29, 0xc4, 0x09, 0x0e, 0x4e, 0x9a, 0x42, 0x8f, 0x60, 0xc9, 0x7b, 0xe4, 0x12, 0x8a, 0xc9,
0x11, 0xa1, 0xc4, 0x15, 0x8f, 0xff, 0x8a, 0xb4, 0xfe, 0x9d, 0x8c, 0xd6, 0x53, 0xca, 0x71, 0x48,
0xa7, 0xe9, 0x0c, 0x8f, 0x5a, 0x41, 0x0d, 0x80, 0x23, 0xdb, 0x55, 0xed, 0x54, 0x75, 0x31, 0x9e,
0x76, 0xdc, 0x8c, 0xa8, 0x38, 0x21, 0x81, 0xbe, 0x0b, 0x65, 0xcb, 0xe9, 0x33, 0x4e, 0x82, 0xb1,
0xca, 0x92, 0xbc, 0x41, 0xd1, 0xfa, 0x76, 0x62, 0x16, 0x4e, 0xca, 0xa1, 0x63, 0x58, 0xb0, 0x13,
0x7d, 0x5b, 0x75, 0x59, 0xc6, 0xe2, 0xd6, 0xd4, 0xcd, 0x1a, 0x33, 0x96, 0x45, 0x26, 0x4a, 0x52,
0x70, 0x0a, 0x79, 0xed, 0x7b, 0x50, 0xfe, 0x9c, 0x6d, 0x84, 0x68, 0x43, 0x46, 0x8f, 0x6e, 0xaa,
0x36, 0xe4, 0xef, 0x39, 0x58, 0x4c, 0x6f, 0x78, 0xd4, 0xae, 0x6b, 0x13, 0xc7, 0x64, 0x61, 0x56,
0x9e, 0x9d, 0x98, 0x95, 0x55, 0xf2, 0x9b, 0x7b, 0x91, 0xe4, 0xb7, 0x05, 0x60, 0xfa, 0x76, 0x98,
0xf7, 0x82, 0x3c, 0x1a, 0x65, 0xae, 0x78, 0x10, 0x84, 0x13, 0x52, 0x72, 0x10, 0xe6, 0xb9, 0x9c,
0x7a, 0x8e, 0x43, 0xa8, 0xaa, 0x7c, 0xc1, 0x20, 0x2c, 0xa2, 0xe2, 0x84, 0x04, 0xba, 0x09, 0xe8,
0xd0, 0xf1, 0xac, 0x13, 0xb9, 0x05, 0xe1, 0x3d, 0x97, 0x59, 0xb2, 0x18, 0xcc, 0x55, 0x8c, 0x31,
0x2e, 0xbe, 0x40, 0x43, 0xbf, 0x0b, 0xe9, 0x49, 0x08, 0xba, 0x11, 0x6c, 0x80, 0x16, 0x8d, 0x2a,
0xa6, 0x5b, 0xbc, 0x7e, 0x15, 0x4a, 0xd8, 0xf3, 0x78, 0xdb, 0xe4, 0xc7, 0x0c, 0xd5, 0x21, 0xef,
0x8b, 0x1f, 0x6a, 0xcc, 0x25, 0x27, 0x8d, 0x92, 0x83, 0x03, 0xba, 0xfe, 0x7b, 0x0d, 0x5e, 0x9e,
0x38, 0x75, 0x12, 0x1b, 0x69, 0x45, 0x5f, 0xca, 0xa5, 0x68, 0x23, 0x63, 0x39, 0x9c, 0x90, 0x12,
0xdd, 0x52, 0x6a, 0x54, 0x35, 0xda, 0x2d, 0xa5, 0xac, 0xe1, 0xb4, 0xac, 0xfe, 0x9f, 0x1c, 0x14,
0x82, 0x07, 0x05, 0x7a, 0x08, 0x45, 0x71, 0x25, 0x3a, 0x26, 0x37, 0xa5, 0xe5, 0xcc, 0x33, 0xe3,
0xb0, 0xeb, 0x8c, 0x6b, 0x6c, 0x48, 0xc1, 0x11, 0x22, 0x7a, 0x0d, 0x0a, 0x4c, 0xda, 0x51, 0xee,
0x45, 0x49, 0x32, 0xb0, 0x8e, 0x15, 0x57, 0xf4, 0x2e, 0x3d, 0xc2, 0x98, 0xd9, 0x0d, 0x63, 0x36,
0xea, 0x5d, 0xf6, 0x03, 0x32, 0x0e, 0xf9, 0xe8, 0x2d, 0xf1, 0x7e, 0x32, 0x59, 0xd4, 0xbb, 0xd5,
0x42, 0x48, 0x2c, 0xa9, 0xe7, 0x83, 0xfa, 0x82, 0x02, 0x97, 0xdf, 0x58, 0x49, 0xa3, 0x07, 0x30,
0xdf, 0x21, 0xdc, 0xb4, 0x9d, 0xa0, 0x65, 0xcb, 0x3c, 0x53, 0x0b, 0xc0, 0x5a, 0x81, 0xaa, 0x51,
0x16, 0x3e, 0xa9, 0x0f, 0x1c, 0x02, 0x8a, 0xfb, 0x66, 0x79, 0x9d, 0x60, 0x20, 0x9c, 0x8f, 0xef,
0xdb, 0x8e, 0xd7, 0x21, 0x58, 0x72, 0xf4, 0x27, 0x1a, 0x94, 0x03, 0xa4, 0x1d, 0xb3, 0xcf, 0x08,
0xda, 0x8c, 0x56, 0x11, 0x1c, 0x77, 0x58, 0x8a, 0xe7, 0xde, 0x39, 0xf3, 0xc9, 0xf9, 0xa0, 0x5e,
0x92, 0x62, 0xe2, 0x23, 0x5a, 0x40, 0x62, 0x8f, 0x72, 0x97, 0xec, 0xd1, 0xab, 0x90, 0x97, 0xed,
0xb1, 0xda, 0xcc, 0xa8, 0xbf, 0x93, 0x2d, 0x34, 0x0e, 0x78, 0xfa, 0xc7, 0x39, 0xa8, 0xa4, 0x16,
0x97, 0xa1, 0x99, 0x8b, 0x1e, 0xf9, 0xb9, 0x0c, 0x83, 0xa3, 0xc9, 0x63, 0xfc, 0x9f, 0x42, 0xc1,
0x12, 0xeb, 0x0b, 0xff, 0x8f, 0xb2, 0x39, 0xcd, 0x51, 0xc8, 0x9d, 0x89, 0x23, 0x49, 0x7e, 0x32,
0xac, 0x00, 0xd1, 0x2d, 0x58, 0xa1, 0x84, 0xd3, 0xb3, 0xed, 0x23, 0x4e, 0x68, 0xb2, 0x47, 0xcf,
0xc7, 0xed, 0x0e, 0x1e, 0x15, 0xc0, 0xe3, 0x3a, 0x61, 0x86, 0x2c, 0xbc, 0x40, 0x86, 0xd4, 0x1d,
0x98, 0xfb, 0x3f, 0xb6, 0xe6, 0x3f, 0x83, 0x52, 0xdc, 0x3c, 0x7d, 0xc1, 0x26, 0xf5, 0x5f, 0x40,
0x51, 0x44, 0x63, 0xd8, 0xf4, 0x5f, 0x52, 0x80, 0xd2, 0xa5, 0x21, 0x97, 0xa5, 0x34, 0xe8, 0x5b,
0x10, 0xfc, 0x77, 0x46, 0x64, 0x53, 0x9b, 0x93, 0x5e, 0x2a, 0x9b, 0xee, 0x09, 0x02, 0x0e, 0xe8,
0x89, 0x61, 0xcf, 0x6f, 0x35, 0x00, 0xf9, 0xc4, 0xdb, 0x3d, 0x15, 0xcf, 0xf2, 0x75, 0x98, 0x13,
0x27, 0x30, 0xea, 0x98, 0xbc, 0x46, 0x92, 0x83, 0xee, 0x41, 0xc1, 0x93, 0x4d, 0x95, 0x9a, 0xbe,
0xbc, 0x31, 0x31, 0xf2, 0xd4, 0x3f, 0x5e, 0x1b, 0xd8, 0x7c, 0xb4, 0xfb, 0x98, 0x13, 0x57, 0xf8,
0x18, 0x47, 0x5d, 0xd0, 0x99, 0x61, 0x05, 0x66, 0x6c, 0x3c, 0x7b, 0x5e, 0x9b, 0xf9, 0xf0, 0x79,
0x6d, 0xe6, 0xa3, 0xe7, 0xb5, 0x99, 0xf7, 0x87, 0x35, 0xed, 0xd9, 0xb0, 0xa6, 0x7d, 0x38, 0xac,
0x69, 0x1f, 0x0d, 0x6b, 0xda, 0xc7, 0xc3, 0x9a, 0xf6, 0xe4, 0x93, 0xda, 0xcc, 0x83, 0xdc, 0xe9,
0xe6, 0xff, 0x02, 0x00, 0x00, 0xff, 0xff, 0x80, 0x43, 0x11, 0x41, 0xbe, 0x1e, 0x00, 0x00,
// 2375 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x59, 0xcf, 0x6f, 0x23, 0x49,
0xf5, 0x4f, 0x3b, 0xb1, 0x63, 0x3f, 0xc7, 0xf9, 0x51, 0x9b, 0xf9, 0x7e, 0xbd, 0x11, 0xd8, 0xd9,
0x5e, 0xb4, 0xca, 0xc2, 0xac, 0x4d, 0xb2, 0xb0, 0x1a, 0x06, 0x18, 0x48, 0xc7, 0x99, 0x51, 0xb4,
0x93, 0x19, 0xab, 0xb2, 0x33, 0x88, 0x61, 0x84, 0xe8, 0xb4, 0x2b, 0x4e, 0x93, 0x76, 0x77, 0x6f,
0x55, 0x39, 0x33, 0x61, 0x0f, 0xec, 0x01, 0x24, 0x0e, 0x08, 0xcd, 0x91, 0x13, 0xda, 0x11, 0xfc,
0x05, 0x9c, 0x38, 0x71, 0x42, 0x62, 0x8e, 0x2b, 0x71, 0xd9, 0x03, 0xb2, 0x76, 0xbc, 0x07, 0x4e,
0x2b, 0xee, 0x91, 0x90, 0x50, 0x55, 0x57, 0xff, 0xb2, 0xe3, 0x4d, 0x7b, 0x67, 0x41, 0x9c, 0xe2,
0x7e, 0x3f, 0x3e, 0xef, 0xd5, 0xab, 0x57, 0xef, 0xbd, 0xaa, 0xc0, 0xfe, 0xc9, 0x35, 0xd6, 0xb0,
0xbd, 0xe6, 0x49, 0xff, 0x90, 0x50, 0x97, 0x70, 0xc2, 0x9a, 0xa7, 0xc4, 0xed, 0x78, 0xb4, 0xa9,
0x18, 0xa6, 0x6f, 0xf7, 0x4c, 0xeb, 0xd8, 0x76, 0x09, 0x3d, 0x6b, 0xfa, 0x27, 0x5d, 0x41, 0x60,
0xcd, 0x1e, 0xe1, 0x66, 0xf3, 0x74, 0xb3, 0xd9, 0x25, 0x2e, 0xa1, 0x26, 0x27, 0x9d, 0x86, 0x4f,
0x3d, 0xee, 0xa1, 0xaf, 0x04, 0x5a, 0x8d, 0xa4, 0x56, 0xc3, 0x3f, 0xe9, 0x0a, 0x02, 0x6b, 0x08,
0xad, 0xc6, 0xe9, 0xe6, 0xda, 0x1b, 0x5d, 0x9b, 0x1f, 0xf7, 0x0f, 0x1b, 0x96, 0xd7, 0x6b, 0x76,
0xbd, 0xae, 0xd7, 0x94, 0xca, 0x87, 0xfd, 0x23, 0xf9, 0x25, 0x3f, 0xe4, 0xaf, 0x00, 0x74, 0x6d,
0xa2, 0x2b, 0xb4, 0xef, 0x72, 0xbb, 0x47, 0x46, 0xbd, 0x58, 0x7b, 0xeb, 0x32, 0x05, 0x66, 0x1d,
0x93, 0x9e, 0x39, 0xa6, 0xf7, 0xe6, 0x24, 0xbd, 0x3e, 0xb7, 0x9d, 0xa6, 0xed, 0x72, 0xc6, 0xe9,
0xa8, 0x92, 0xfe, 0xd7, 0x59, 0x28, 0x6e, 0xb7, 0xf7, 0x6e, 0x51, 0xaf, 0xef, 0xa3, 0x75, 0x98,
0x73, 0xcd, 0x1e, 0xa9, 0x6a, 0xeb, 0xda, 0x46, 0xc9, 0x58, 0x78, 0x36, 0xa8, 0xcf, 0x0c, 0x07,
0xf5, 0xb9, 0x3b, 0x66, 0x8f, 0x60, 0xc9, 0x41, 0x0e, 0x14, 0x4f, 0x09, 0x65, 0xb6, 0xe7, 0xb2,
0x6a, 0x6e, 0x7d, 0x76, 0xa3, 0xbc, 0x75, 0xa3, 0x91, 0x25, 0x68, 0x0d, 0x69, 0xe0, 0x7e, 0xa0,
0x7a, 0xd3, 0xa3, 0x2d, 0x9b, 0x59, 0xde, 0x29, 0xa1, 0x67, 0xc6, 0xb2, 0xb2, 0x52, 0x54, 0x4c,
0x86, 0x23, 0x0b, 0xe8, 0x17, 0x1a, 0x2c, 0xfb, 0x94, 0x1c, 0x11, 0x4a, 0x49, 0x47, 0xf1, 0xab,
0xb3, 0xeb, 0xda, 0x17, 0x60, 0xb6, 0xaa, 0xcc, 0x2e, 0xb7, 0x47, 0xf0, 0xf1, 0x98, 0x45, 0xf4,
0x7b, 0x0d, 0xd6, 0x18, 0xa1, 0xa7, 0x84, 0x6e, 0x77, 0x3a, 0x94, 0x30, 0x66, 0x9c, 0xed, 0x38,
0x36, 0x71, 0xf9, 0xce, 0x5e, 0x0b, 0xb3, 0xea, 0x9c, 0x8c, 0xc3, 0xf7, 0xb2, 0x39, 0x74, 0x30,
0x09, 0xc7, 0xd0, 0x95, 0x47, 0x6b, 0x13, 0x45, 0x18, 0xfe, 0x0c, 0x37, 0xf4, 0x23, 0x58, 0x08,
0x37, 0xf2, 0xb6, 0xcd, 0x38, 0xba, 0x0f, 0x85, 0xae, 0xf8, 0x60, 0x55, 0x4d, 0x3a, 0xd8, 0xc8,
0xe6, 0x60, 0x88, 0x61, 0x2c, 0x2a, 0x7f, 0x0a, 0xf2, 0x93, 0x61, 0x85, 0xa6, 0x7f, 0x9a, 0x83,
0xf2, 0x76, 0x7b, 0x0f, 0x13, 0xe6, 0xf5, 0xa9, 0x45, 0x32, 0x24, 0xcd, 0x16, 0x80, 0xf8, 0xcb,
0x7c, 0xd3, 0x22, 0x9d, 0x6a, 0x6e, 0x5d, 0xdb, 0x28, 0x1a, 0x48, 0xc9, 0xc1, 0x9d, 0x88, 0x83,
0x13, 0x52, 0x02, 0xf5, 0xc4, 0x76, 0x3b, 0x72, 0xb7, 0x13, 0xa8, 0x6f, 0xdb, 0x6e, 0x07, 0x4b,
0x0e, 0xba, 0x0d, 0xf9, 0x53, 0x42, 0x0f, 0x45, 0xfc, 0x45, 0x42, 0x7c, 0x2d, 0xdb, 0xf2, 0xee,
0x0b, 0x15, 0xa3, 0x34, 0x1c, 0xd4, 0xf3, 0xf2, 0x27, 0x0e, 0x40, 0x50, 0x03, 0x80, 0x1d, 0x7b,
0x94, 0x4b, 0x77, 0xaa, 0xf9, 0xf5, 0xd9, 0x8d, 0x92, 0xb1, 0x28, 0xfc, 0x3b, 0x88, 0xa8, 0x38,
0x21, 0x81, 0xae, 0xc1, 0x02, 0xb3, 0xdd, 0x6e, 0xdf, 0x31, 0xa9, 0x20, 0x54, 0x0b, 0xd2, 0xcf,
0x55, 0xe5, 0xe7, 0xc2, 0x41, 0x82, 0x87, 0x53, 0x92, 0xc2, 0x92, 0x65, 0x72, 0xd2, 0xf5, 0xa8,
0x4d, 0x58, 0x75, 0x3e, 0xb6, 0xb4, 0x13, 0x51, 0x71, 0x42, 0x42, 0xff, 0xa3, 0x06, 0x4b, 0x89,
0x78, 0xcb, 0xbd, 0xbd, 0x06, 0x0b, 0xdd, 0x44, 0x66, 0xab, 0xd8, 0x47, 0xd6, 0x93, 0x59, 0x8f,
0x53, 0x92, 0x88, 0x40, 0x89, 0x2a, 0xa4, 0xf0, 0x04, 0x6f, 0x66, 0x4e, 0x8c, 0xd0, 0x87, 0xd8,
0x52, 0x82, 0xc8, 0x70, 0x8c, 0xac, 0xff, 0x43, 0x93, 0x49, 0x12, 0x9e, 0x69, 0xb4, 0x91, 0xa8,
0x1b, 0x9a, 0x5c, 0xf2, 0xc2, 0x84, 0x33, 0x7f, 0xc9, 0x61, 0xcb, 0xfd, 0x4f, 0x1c, 0xb6, 0xeb,
0xc5, 0xdf, 0x7e, 0x50, 0x9f, 0x79, 0xff, 0xef, 0xeb, 0x33, 0xfa, 0x27, 0x39, 0xa8, 0xb4, 0x88,
0x43, 0x38, 0xb9, 0xeb, 0x73, 0xb9, 0x82, 0x9b, 0x80, 0xba, 0xd4, 0xb4, 0x48, 0x9b, 0x50, 0xdb,
0xeb, 0x1c, 0x10, 0xcb, 0x73, 0x3b, 0x4c, 0x6e, 0xd1, 0xac, 0xf1, 0x7f, 0xc3, 0x41, 0x1d, 0xdd,
0x1a, 0xe3, 0xe2, 0x0b, 0x34, 0x90, 0x03, 0x15, 0x9f, 0xca, 0xdf, 0x36, 0x57, 0x05, 0x57, 0x24,
0xfa, 0x9b, 0xd9, 0xd6, 0xde, 0x4e, 0xaa, 0x1a, 0x2b, 0xc3, 0x41, 0xbd, 0x92, 0x22, 0xe1, 0x34,
0x38, 0xfa, 0x3e, 0x2c, 0x7b, 0xd4, 0x3f, 0x36, 0xdd, 0x16, 0xf1, 0x89, 0xdb, 0x21, 0x2e, 0x67,
0xf2, 0xf0, 0x15, 0x8d, 0x55, 0x51, 0x26, 0xef, 0x8e, 0xf0, 0xf0, 0x98, 0x34, 0x7a, 0x00, 0x2b,
0x3e, 0xf5, 0x7c, 0xb3, 0x6b, 0x0a, 0xc4, 0xb6, 0xe7, 0xd8, 0xd6, 0x99, 0x3c, 0x9c, 0x25, 0xe3,
0xea, 0x70, 0x50, 0x5f, 0x69, 0x8f, 0x32, 0xcf, 0x07, 0xf5, 0x97, 0x64, 0xe8, 0x04, 0x25, 0x66,
0xe2, 0x71, 0x18, 0x7d, 0x0f, 0x8a, 0xad, 0x3e, 0x95, 0x14, 0xf4, 0x5d, 0x28, 0x76, 0xd4, 0x6f,
0x15, 0xd5, 0x57, 0xc2, 0x1e, 0x12, 0xca, 0x9c, 0x0f, 0xea, 0x15, 0xd1, 0x2a, 0x1b, 0x21, 0x01,
0x47, 0x2a, 0xfa, 0x43, 0xa8, 0xec, 0x3e, 0xf6, 0x3d, 0xca, 0xc3, 0xfd, 0x7a, 0x0d, 0x0a, 0x44,
0x12, 0x24, 0x5a, 0x31, 0x2e, 0x7c, 0x81, 0x18, 0x56, 0x5c, 0xf4, 0x2a, 0xe4, 0xc9, 0x63, 0xd3,
0xe2, 0xaa, 0x82, 0x55, 0x94, 0x58, 0x7e, 0x57, 0x10, 0x71, 0xc0, 0xd3, 0x9f, 0x6a, 0x00, 0xb7,
0x48, 0x84, 0xbd, 0x0d, 0x4b, 0xe1, 0xa1, 0x48, 0x9f, 0xd5, 0xff, 0x57, 0xda, 0x4b, 0x38, 0xcd,
0xc6, 0xa3, 0xf2, 0xa8, 0x0d, 0xab, 0xb6, 0x6b, 0x39, 0xfd, 0x0e, 0xb9, 0xe7, 0xda, 0xae, 0xcd,
0x6d, 0xd3, 0xb1, 0x7f, 0x16, 0xd5, 0xd1, 0x2f, 0x29, 0x9c, 0xd5, 0xbd, 0x0b, 0x64, 0xf0, 0x85,
0x9a, 0xfa, 0x43, 0x28, 0xc9, 0x0a, 0x21, 0x8a, 0xa9, 0x58, 0x95, 0x2c, 0x10, 0xca, 0xaf, 0x68,
0x55, 0x52, 0x02, 0x07, 0xbc, 0xa8, 0x1a, 0xe7, 0x26, 0x55, 0xe3, 0xc4, 0x81, 0x70, 0xa0, 0x12,
0xe8, 0x86, 0x0d, 0x22, 0x93, 0x85, 0xab, 0x50, 0x0c, 0x17, 0xae, 0xac, 0x44, 0x83, 0x41, 0x08,
0x84, 0x23, 0x89, 0x84, 0xb5, 0x63, 0x48, 0x55, 0xbb, 0x6c, 0xc6, 0x5e, 0x87, 0x79, 0x55, 0x6f,
0x94, 0xad, 0x25, 0x25, 0x36, 0x1f, 0xee, 0x42, 0xc8, 0x4f, 0x58, 0xfa, 0x39, 0x54, 0x27, 0x4d,
0x13, 0x2f, 0x50, 0x8f, 0xb3, 0xbb, 0xa2, 0xff, 0x46, 0x83, 0xe5, 0x24, 0x52, 0xf6, 0xed, 0xcb,
0x6e, 0xe4, 0xf2, 0xbe, 0x9b, 0x88, 0xc8, 0xef, 0x34, 0x58, 0x4d, 0x2d, 0x6d, 0xaa, 0x1d, 0x9f,
0xc2, 0xa9, 0x64, 0x72, 0xcc, 0x4e, 0x91, 0x1c, 0x4d, 0x28, 0xef, 0x45, 0x79, 0x4f, 0x2f, 0x9f,
0x54, 0xf4, 0x3f, 0x6b, 0xb0, 0x90, 0xd0, 0x60, 0xe8, 0x21, 0xcc, 0x8b, 0xfa, 0x66, 0xbb, 0x5d,
0x35, 0x45, 0x65, 0x6c, 0x96, 0x09, 0x90, 0x78, 0x5d, 0xed, 0x00, 0x09, 0x87, 0x90, 0xa8, 0x0d,
0x05, 0x4a, 0x58, 0xdf, 0xe1, 0xaa, 0xb4, 0x5f, 0xcd, 0xd8, 0xd6, 0xb8, 0xc9, 0xfb, 0xcc, 0x00,
0x51, 0xa3, 0xb0, 0xd4, 0xc7, 0x0a, 0x47, 0xff, 0x5b, 0x0e, 0x2a, 0xb7, 0xcd, 0x43, 0xe2, 0x1c,
0x10, 0x87, 0x58, 0xdc, 0xa3, 0xe8, 0x3d, 0x28, 0xf7, 0x4c, 0x6e, 0x1d, 0x4b, 0x6a, 0x38, 0x0b,
0xb6, 0xb2, 0x19, 0x4a, 0x21, 0x35, 0xf6, 0x63, 0x98, 0x5d, 0x97, 0xd3, 0x33, 0xe3, 0x25, 0xb5,
0xb0, 0x72, 0x82, 0x83, 0x93, 0xd6, 0xe4, 0x00, 0x2f, 0xbf, 0x77, 0x1f, 0xfb, 0xa2, 0x89, 0x4e,
0x7f, 0x6f, 0x48, 0xb9, 0x80, 0xc9, 0xbb, 0x7d, 0x9b, 0x92, 0x1e, 0x71, 0x79, 0x3c, 0xc0, 0xef,
0x8f, 0xe0, 0xe3, 0x31, 0x8b, 0x6b, 0x37, 0x60, 0x79, 0xd4, 0x79, 0xb4, 0x0c, 0xb3, 0x27, 0xe4,
0x2c, 0xc8, 0x05, 0x2c, 0x7e, 0xa2, 0x55, 0xc8, 0x9f, 0x9a, 0x4e, 0x5f, 0xd5, 0x1f, 0x1c, 0x7c,
0x5c, 0xcf, 0x5d, 0xd3, 0xf4, 0x3f, 0x68, 0x50, 0x9d, 0xe4, 0x08, 0xfa, 0x72, 0x02, 0xc8, 0x28,
0x2b, 0xaf, 0x66, 0xdf, 0x26, 0x67, 0x01, 0xea, 0x2e, 0x14, 0x3d, 0x5f, 0x5c, 0xb9, 0x3c, 0xaa,
0xf2, 0xfc, 0xf5, 0x30, 0x77, 0xef, 0x2a, 0xfa, 0xf9, 0xa0, 0x7e, 0x25, 0x05, 0x1f, 0x32, 0x70,
0xa4, 0x8a, 0x74, 0x28, 0x48, 0x7f, 0x44, 0x53, 0x16, 0xe3, 0x93, 0xdc, 0xfc, 0xfb, 0x92, 0x82,
0x15, 0x47, 0xff, 0x93, 0x06, 0x73, 0x72, 0x3c, 0x7c, 0x08, 0x45, 0x11, 0xbf, 0x8e, 0xc9, 0x4d,
0xe9, 0x57, 0xe6, 0xe1, 0x5f, 0x68, 0xef, 0x13, 0x6e, 0xc6, 0xe7, 0x2b, 0xa4, 0xe0, 0x08, 0x11,
0x61, 0xc8, 0xdb, 0x9c, 0xf4, 0xc2, 0x8d, 0x7c, 0x63, 0x22, 0xb4, 0xba, 0xaf, 0x36, 0xb0, 0xf9,
0x68, 0xf7, 0x31, 0x27, 0xae, 0xd8, 0x8c, 0xb8, 0x18, 0xec, 0x09, 0x0c, 0x1c, 0x40, 0xe9, 0xef,
0x41, 0x64, 0x49, 0x9c, 0x76, 0x46, 0x9c, 0xa3, 0xdb, 0xb6, 0x7b, 0xa2, 0xa2, 0x1a, 0x79, 0x73,
0xa0, 0xe8, 0x38, 0x92, 0xb8, 0xa8, 0xc3, 0xe6, 0xa6, 0xeb, 0xb0, 0xfa, 0xbf, 0x72, 0x50, 0x16,
0xd6, 0xc3, 0xa6, 0xfd, 0x6d, 0xa8, 0x38, 0xc9, 0xed, 0x50, 0x5e, 0x5c, 0x51, 0x80, 0xe9, 0x03,
0x86, 0xd3, 0xb2, 0x42, 0xf9, 0xc8, 0x26, 0x4e, 0x27, 0x52, 0xce, 0xa5, 0x95, 0x6f, 0x26, 0x99,
0x38, 0x2d, 0x2b, 0x0a, 0xe7, 0x23, 0x91, 0xa8, 0x6a, 0xf2, 0x8a, 0x62, 0xf5, 0x03, 0x41, 0xc4,
0x01, 0xef, 0xa2, 0x15, 0xcf, 0x4d, 0x39, 0x53, 0x5c, 0x87, 0x45, 0xb1, 0x33, 0x5e, 0x9f, 0x87,
0xe3, 0x69, 0x5e, 0x0e, 0x52, 0x68, 0x38, 0xa8, 0x2f, 0xbe, 0x93, 0xe2, 0xe0, 0x11, 0xc9, 0x89,
0xf3, 0x48, 0xe1, 0x73, 0xcf, 0x23, 0xef, 0x42, 0x69, 0xdf, 0xb6, 0xa8, 0x27, 0x0c, 0x8b, 0xb6,
0xc0, 0x52, 0x23, 0x73, 0x54, 0x3e, 0x43, 0x87, 0x42, 0xbe, 0x88, 0x96, 0x6b, 0xba, 0x5e, 0x30,
0x18, 0xe7, 0xe3, 0x68, 0xdd, 0x11, 0x44, 0x1c, 0xf0, 0xae, 0xaf, 0x8a, 0x6e, 0xf0, 0xab, 0xa7,
0xf5, 0x99, 0x27, 0x4f, 0xeb, 0x33, 0x1f, 0x3c, 0x55, 0x9d, 0xe1, 0x53, 0x00, 0xb8, 0x7b, 0xf8,
0x53, 0x62, 0x05, 0x29, 0x77, 0xf9, 0x1d, 0x56, 0x74, 0x78, 0xf5, 0x74, 0x22, 0xef, 0x7b, 0xb9,
0x91, 0x0e, 0x9f, 0xe0, 0xe1, 0x94, 0x24, 0x6a, 0x42, 0x29, 0xba, 0xd7, 0xaa, 0xee, 0xb5, 0xa2,
0xd4, 0x4a, 0xd1, 0xe5, 0x17, 0xc7, 0x32, 0xa9, 0xfc, 0x9f, 0xbb, 0x34, 0xff, 0x0d, 0x98, 0xed,
0xdb, 0x1d, 0xb9, 0x7f, 0x25, 0xe3, 0xeb, 0x61, 0xf9, 0xb9, 0xb7, 0xd7, 0x3a, 0x1f, 0xd4, 0x5f,
0x99, 0xf4, 0x22, 0xc4, 0xcf, 0x7c, 0xc2, 0x1a, 0xf7, 0xf6, 0x5a, 0x58, 0x28, 0x5f, 0x94, 0x51,
0x85, 0x29, 0x33, 0x6a, 0x0b, 0x40, 0xad, 0x5a, 0x68, 0xcf, 0x07, 0xd9, 0x14, 0xde, 0xf1, 0x6f,
0x45, 0x1c, 0x9c, 0x90, 0x42, 0x0c, 0x56, 0x2c, 0x4a, 0xe4, 0x6f, 0xb1, 0xf5, 0x8c, 0x9b, 0x3d,
0xbf, 0x5a, 0x94, 0xf5, 0xea, 0xab, 0xd9, 0xea, 0x95, 0x50, 0x33, 0x5e, 0x56, 0x66, 0x56, 0x76,
0x46, 0xc1, 0xf0, 0x38, 0x3e, 0xf2, 0x60, 0xa5, 0xa3, 0xee, 0x1c, 0xb1, 0xd1, 0xd2, 0xd4, 0x46,
0xaf, 0x08, 0x83, 0xad, 0x51, 0x20, 0x3c, 0x8e, 0x8d, 0x7e, 0x0c, 0x6b, 0x21, 0x71, 0xfc, 0xe2,
0x57, 0x05, 0x19, 0xa9, 0x9a, 0xb8, 0x8a, 0xb6, 0x26, 0x4a, 0xe1, 0xcf, 0x40, 0x40, 0x1d, 0x28,
0x38, 0x41, 0x6f, 0x2f, 0xcb, 0x7a, 0xfc, 0x9d, 0x6c, 0xab, 0x88, 0xb3, 0xbf, 0x91, 0xec, 0xe9,
0xd1, 0xe5, 0x47, 0xb5, 0x73, 0x85, 0x8d, 0x1e, 0x43, 0xd9, 0x74, 0x5d, 0x8f, 0x9b, 0xc1, 0x55,
0x74, 0x41, 0x9a, 0xda, 0x9e, 0xda, 0xd4, 0x76, 0x8c, 0x31, 0x32, 0x43, 0x24, 0x38, 0x38, 0x69,
0x0a, 0x3d, 0x82, 0x25, 0xef, 0x91, 0x4b, 0x28, 0x26, 0x47, 0x84, 0x12, 0xd7, 0x22, 0xac, 0x5a,
0x91, 0xd6, 0xbf, 0x91, 0xd1, 0x7a, 0x4a, 0x39, 0x4e, 0xe9, 0x34, 0x9d, 0xe1, 0x51, 0x2b, 0xa8,
0x01, 0x70, 0x64, 0xbb, 0x6a, 0x12, 0xac, 0x2e, 0xc6, 0x0f, 0x35, 0x37, 0x23, 0x2a, 0x4e, 0x48,
0xa0, 0x6f, 0x42, 0xd9, 0x72, 0xfa, 0x8c, 0x93, 0xe0, 0x45, 0x68, 0x49, 0x9e, 0xa0, 0x68, 0x7d,
0x3b, 0x31, 0x0b, 0x27, 0xe5, 0xd0, 0x31, 0x2c, 0xd8, 0x89, 0x91, 0xb3, 0xba, 0x2c, 0x73, 0x71,
0x6b, 0xea, 0x39, 0x93, 0x19, 0xcb, 0xa2, 0x12, 0x25, 0x29, 0x38, 0x85, 0xbc, 0xf6, 0x2d, 0x28,
0x7f, 0xce, 0x09, 0x48, 0x4c, 0x50, 0xa3, 0x5b, 0x37, 0xd5, 0x04, 0xf5, 0x97, 0x1c, 0x2c, 0xa6,
0x03, 0x1e, 0xdd, 0x34, 0xb4, 0x89, 0x2f, 0x7c, 0x61, 0x55, 0x9e, 0x9d, 0x58, 0x95, 0x55, 0xf1,
0x9b, 0x7b, 0x91, 0xe2, 0xb7, 0x05, 0x60, 0xfa, 0x76, 0x58, 0xf7, 0x82, 0x3a, 0x1a, 0x55, 0xae,
0xf8, 0x0d, 0x0b, 0x27, 0xa4, 0xe4, 0x1b, 0x9e, 0xe7, 0x72, 0xea, 0x39, 0x0e, 0xa1, 0xaa, 0xf3,
0x05, 0x6f, 0x78, 0x11, 0x15, 0x27, 0x24, 0xd0, 0x4d, 0x40, 0x87, 0x8e, 0x67, 0x9d, 0xc8, 0x10,
0x84, 0xe7, 0x5c, 0x56, 0xc9, 0x62, 0xf0, 0x24, 0x64, 0x8c, 0x71, 0xf1, 0x05, 0x1a, 0xfa, 0x5d,
0x48, 0x3f, 0xe2, 0xa0, 0x1b, 0x41, 0x00, 0xb4, 0xe8, 0x95, 0x65, 0xba, 0xc5, 0xeb, 0x57, 0xa1,
0x84, 0x3d, 0x8f, 0xb7, 0x4d, 0x7e, 0xcc, 0x50, 0x1d, 0xf2, 0xbe, 0xf8, 0xa1, 0x5e, 0xe8, 0xe4,
0x23, 0xa9, 0xe4, 0xe0, 0x80, 0xae, 0xff, 0x5a, 0x83, 0x97, 0x27, 0x3e, 0x98, 0x89, 0x40, 0x5a,
0xd1, 0x97, 0x72, 0x29, 0x0a, 0x64, 0x2c, 0x87, 0x13, 0x52, 0x62, 0x5a, 0x4a, 0xbd, 0xb2, 0x8d,
0x4e, 0x4b, 0x29, 0x6b, 0x38, 0x2d, 0xab, 0xff, 0x33, 0x07, 0x85, 0xe0, 0x2e, 0xf4, 0x1f, 0x9e,
0x78, 0x5f, 0x83, 0x02, 0x93, 0x76, 0x94, 0x7b, 0x51, 0x91, 0x0c, 0xac, 0x63, 0xc5, 0x15, 0xb3,
0x4b, 0x8f, 0x30, 0x66, 0x76, 0xc3, 0x9c, 0x8d, 0x66, 0x97, 0xfd, 0x80, 0x8c, 0x43, 0x3e, 0x7a,
0x4b, 0x5c, 0xfd, 0x4c, 0x16, 0xcd, 0x6e, 0xb5, 0x10, 0x12, 0x4b, 0xea, 0xf9, 0xa0, 0xbe, 0xa0,
0xc0, 0xe5, 0x37, 0x56, 0xd2, 0xe8, 0x01, 0xcc, 0x77, 0x08, 0x37, 0x6d, 0x27, 0x18, 0xd9, 0x32,
0x3f, 0x07, 0x06, 0x60, 0xad, 0x40, 0xd5, 0x28, 0x0b, 0x9f, 0xd4, 0x07, 0x0e, 0x01, 0xc5, 0x79,
0xb3, 0xbc, 0x4e, 0xf0, 0x96, 0x9d, 0x8f, 0xcf, 0xdb, 0x8e, 0xd7, 0x21, 0x58, 0x72, 0xf4, 0x27,
0x1a, 0x94, 0x03, 0xa4, 0x1d, 0xb3, 0xcf, 0x08, 0xda, 0x8c, 0x56, 0x11, 0x6c, 0x77, 0xd8, 0x8a,
0xe7, 0xde, 0x39, 0xf3, 0xc9, 0xf9, 0xa0, 0x5e, 0x92, 0x62, 0xe2, 0x23, 0x5a, 0x40, 0x22, 0x46,
0xb9, 0x4b, 0x62, 0xf4, 0x2a, 0xe4, 0xe5, 0x78, 0xac, 0x82, 0x19, 0xcd, 0x77, 0x72, 0x84, 0xc6,
0x01, 0x4f, 0xff, 0x38, 0x07, 0x95, 0xd4, 0xe2, 0x32, 0x0c, 0x73, 0xd1, 0xfb, 0x44, 0x2e, 0xc3,
0x9b, 0xd7, 0xe4, 0xff, 0x40, 0xfc, 0x10, 0x0a, 0x96, 0x58, 0x5f, 0xf8, 0x2f, 0xa0, 0xcd, 0x69,
0xb6, 0x42, 0x46, 0x26, 0xce, 0x24, 0xf9, 0xc9, 0xb0, 0x02, 0x44, 0xb7, 0x60, 0x85, 0x12, 0x4e,
0xcf, 0xb6, 0x8f, 0x38, 0xa1, 0xc9, 0x19, 0x3d, 0x1f, 0x8f, 0x3b, 0x78, 0x54, 0x00, 0x8f, 0xeb,
0x84, 0x15, 0xb2, 0xf0, 0x02, 0x15, 0x52, 0x77, 0x60, 0xee, 0xbf, 0x38, 0x9a, 0xff, 0x08, 0x4a,
0xf1, 0xf0, 0xf4, 0x05, 0x9b, 0xd4, 0x7f, 0x02, 0x45, 0x91, 0x8d, 0xe1, 0xd0, 0x7f, 0x49, 0x03,
0x4a, 0xb7, 0x86, 0x5c, 0x96, 0xd6, 0xa0, 0x6f, 0x41, 0xf0, 0x8f, 0x25, 0x51, 0x4d, 0x83, 0x6b,
0x72, 0xa2, 0x9a, 0x26, 0xef, 0xbc, 0x89, 0x77, 0xaa, 0x5f, 0x6a, 0x00, 0xf2, 0x8a, 0xb7, 0x7b,
0x4a, 0x5c, 0x2e, 0x1c, 0x13, 0x3b, 0x30, 0xea, 0x98, 0x3c, 0x46, 0x92, 0x83, 0xee, 0x41, 0xc1,
0x93, 0x43, 0x95, 0x7a, 0x38, 0x9a, 0xf2, 0x0e, 0x1e, 0x65, 0x5d, 0x30, 0x99, 0x61, 0x05, 0x66,
0x6c, 0x3c, 0x7b, 0x5e, 0x9b, 0xf9, 0xf0, 0x79, 0x6d, 0xe6, 0xa3, 0xe7, 0xb5, 0x99, 0xf7, 0x87,
0x35, 0xed, 0xd9, 0xb0, 0xa6, 0x7d, 0x38, 0xac, 0x69, 0x1f, 0x0d, 0x6b, 0xda, 0xc7, 0xc3, 0x9a,
0xf6, 0xe4, 0x93, 0xda, 0xcc, 0x83, 0xdc, 0xe9, 0xe6, 0xbf, 0x03, 0x00, 0x00, 0xff, 0xff, 0xfb,
0x97, 0x5e, 0x35, 0x79, 0x1f, 0x00, 0x00,
}

View File

@ -292,6 +292,17 @@ message LabelSelectorRequirement {
repeated string values = 3;
}
// List holds a list of objects, which may not be known by the server.
message List {
// Standard list metadata.
// More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
// +optional
optional ListMeta metadata = 1;
// List of objects
repeated k8s.io.apimachinery.pkg.runtime.RawExtension items = 2;
}
// ListMeta describes metadata that synthetic resources must have, including lists and
// various status objects. A resource may have only one of {ObjectMeta, ListMeta}.
message ListMeta {

View File

@ -67,14 +67,25 @@ type Object interface {
// ListMetaAccessor retrieves the list interface from an object
type ListMetaAccessor interface {
GetListMeta() List
GetListMeta() ListInterface
}
// List lets you work with list metadata from any of the versioned or
// Common lets you work with core metadata from any of the versioned or
// internal API objects. Attempting to set or retrieve a field on an object that does
// not support that field will be a no-op and return a default value.
// TODO: move this, and TypeMeta and ListMeta, to a different package
type List interface {
type Common interface {
GetResourceVersion() string
SetResourceVersion(version string)
GetSelfLink() string
SetSelfLink(selfLink string)
}
// ListInterface lets you work with list metadata from any of the versioned or
// internal API objects. Attempting to set or retrieve a field on an object that does
// not support that field will be a no-op and return a default value.
// TODO: move this, and TypeMeta and ListMeta, to a different package
type ListInterface interface {
GetResourceVersion() string
SetResourceVersion(version string)
GetSelfLink() string
@ -107,7 +118,7 @@ func (obj *TypeMeta) GroupVersionKind() schema.GroupVersionKind {
return schema.FromAPIVersionAndKind(obj.APIVersion, obj.Kind)
}
func (obj *ListMeta) GetListMeta() List { return obj }
func (obj *ListMeta) GetListMeta() ListInterface { return obj }
func (obj *ObjectMeta) GetObjectMeta() Object { return obj }

View File

@ -29,6 +29,7 @@ import (
"fmt"
"strings"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/types"
)
@ -679,6 +680,20 @@ const (
CauseTypeUnexpectedServerResponse CauseType = "UnexpectedServerResponse"
)
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
// List holds a list of objects, which may not be known by the server.
type List struct {
TypeMeta `json:",inline"`
// Standard list metadata.
// More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
// +optional
ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"`
// List of objects
Items []runtime.RawExtension `json:"items" protobuf:"bytes,2,rep,name=items"`
}
// APIVersions lists the versions that are available, to allow clients to
// discover the API at /api, which is the root path of the legacy v1 API.
//

View File

@ -165,6 +165,16 @@ func (LabelSelectorRequirement) SwaggerDoc() map[string]string {
return map_LabelSelectorRequirement
}
var map_List = map[string]string{
"": "List holds a list of objects, which may not be known by the server.",
"metadata": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds",
"items": "List of objects",
}
func (List) SwaggerDoc() map[string]string {
return map_List
}
var map_ListMeta = map[string]string{
"": "ListMeta describes metadata that synthetic resources must have, including lists and various status objects. A resource may have only one of {ObjectMeta, ListMeta}.",
"selfLink": "SelfLink is a URL representing this object. Populated by the system. Read-only.",

View File

@ -596,6 +596,8 @@ type UnstructuredList struct {
Items []Unstructured `json:"items"`
}
var _ metav1.ListInterface = &UnstructuredList{}
// MarshalJSON ensures that the unstructured list object produces proper
// JSON when passed to Go's standard JSON library.
func (u *UnstructuredList) MarshalJSON() ([]byte, error) {

View File

@ -112,6 +112,10 @@ func GetGeneratedDeepCopyFuncs() []conversion.GeneratedDeepCopyFunc {
in.(*LabelSelectorRequirement).DeepCopyInto(out.(*LabelSelectorRequirement))
return nil
}, InType: reflect.TypeOf(&LabelSelectorRequirement{})},
{Fn: func(in interface{}, out interface{}, c *conversion.Cloner) error {
in.(*List).DeepCopyInto(out.(*List))
return nil
}, InType: reflect.TypeOf(&List{})},
{Fn: func(in interface{}, out interface{}, c *conversion.Cloner) error {
in.(*ListMeta).DeepCopyInto(out.(*ListMeta))
return nil
@ -689,6 +693,40 @@ func (in *LabelSelectorRequirement) DeepCopy() *LabelSelectorRequirement {
return out
}
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *List) DeepCopyInto(out *List) {
*out = *in
out.TypeMeta = in.TypeMeta
out.ListMeta = in.ListMeta
if in.Items != nil {
in, out := &in.Items, &out.Items
*out = make([]runtime.RawExtension, len(*in))
for i := range *in {
(*in)[i].DeepCopyInto(&(*out)[i])
}
}
return
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new List.
func (in *List) DeepCopy() *List {
if in == nil {
return nil
}
out := new(List)
in.DeepCopyInto(out)
return out
}
// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
func (in *List) DeepCopyObject() runtime.Object {
if c := in.DeepCopy(); c != nil {
return c
} else {
return nil
}
}
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *ListMeta) DeepCopyInto(out *ListMeta) {
*out = *in

View File

@ -215,7 +215,7 @@ type MyAPIObject struct {
TypeMeta InternalTypeMeta `json:",inline"`
}
func (obj *MyAPIObject) GetListMeta() metav1.List { return &obj.TypeMeta }
func (obj *MyAPIObject) GetListMeta() metav1.ListInterface { return &obj.TypeMeta }
func (obj *MyAPIObject) GetObjectKind() schema.ObjectKind { return obj }
func (obj *MyAPIObject) SetGroupVersionKind(gvk schema.GroupVersionKind) {

View File

@ -11,6 +11,7 @@ go_library(
deps = [
"//vendor/k8s.io/api/core/v1:go_default_library",
"//vendor/k8s.io/apimachinery/pkg/api/meta:go_default_library",
"//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
"//vendor/k8s.io/apimachinery/pkg/runtime:go_default_library",
],
)

View File

@ -24,6 +24,7 @@ import (
"k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/api/meta"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/runtime"
)
@ -61,10 +62,10 @@ func GetReference(scheme *runtime.Scheme, obj runtime.Object) (*v1.ObjectReferen
}
// An object that implements only List has enough metadata to build a reference
var listMeta meta.List
var listMeta metav1.Common
objectMeta, err := meta.Accessor(obj)
if err != nil {
listMeta, err = meta.ListAccessor(obj)
listMeta, err = meta.CommonAccessor(obj)
if err != nil {
return nil, err
}