diff --git a/api/openapi-spec/swagger.json b/api/openapi-spec/swagger.json index ab558baa8f0..c1a6d551f5e 100644 --- a/api/openapi-spec/swagger.json +++ b/api/openapi-spec/swagger.json @@ -62904,6 +62904,25 @@ } } }, + "io.k8s.api.extensions.v1beta1.IPBlock": { + "description": "IPBlock describes a particular CIDR (Ex. \"192.168.1.1/24\") that is allowed to the pods matched by a NetworkPolicySpec's podSelector. The except entry describes CIDRs that should not be included within this rule.", + "required": [ + "cidr" + ], + "properties": { + "cidr": { + "description": "CIDR is a string representing the IP Block Valid examples are \"192.168.1.1/24\"", + "type": "string" + }, + "except": { + "description": "Except is a slice of CIDRs that should not be included within an IP Block Valid examples are \"192.168.1.1/24\" Except values will be rejected if they are outside the CIDR range", + "type": "array", + "items": { + "type": "string" + } + } + } + }, "io.k8s.api.extensions.v1beta1.Ingress": { "description": "Ingress is a collection of rules that allow inbound connections to reach the endpoints defined by a backend. An Ingress can be configured to give services externally-reachable urls, load balance traffic, terminate SSL, offer name based virtual hosting etc.", "properties": { @@ -63130,6 +63149,10 @@ }, "io.k8s.api.extensions.v1beta1.NetworkPolicyPeer": { "properties": { + "ipBlock": { + "description": "IPBlock defines policy on a particular IPBlock", + "$ref": "#/definitions/io.k8s.api.extensions.v1beta1.IPBlock" + }, "namespaceSelector": { "description": "Selects Namespaces using cluster scoped-labels. This matches all pods in all namespaces selected by this label selector. This field follows standard label selector semantics. If present but empty, this selector selects all namespaces.", "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector" @@ -63631,6 +63654,25 @@ } } }, + "io.k8s.api.networking.v1.IPBlock": { + "description": "IPBlock describes a particular CIDR (Ex. \"192.168.1.1/24\") that is allowed to the pods matched by a NetworkPolicySpec's podSelector. The except entry describes CIDRs that should not be included within this rule.", + "required": [ + "cidr" + ], + "properties": { + "cidr": { + "description": "CIDR is a string representing the IP Block Valid examples are \"192.168.1.1/24\"", + "type": "string" + }, + "except": { + "description": "Except is a slice of CIDRs that should not be included within an IP Block Valid examples are \"192.168.1.1/24\" Except values will be rejected if they are outside the CIDR range", + "type": "array", + "items": { + "type": "string" + } + } + } + }, "io.k8s.api.networking.v1.NetworkPolicy": { "description": "NetworkPolicy describes what network traffic is allowed for a set of Pods", "properties": { @@ -63715,6 +63757,10 @@ "io.k8s.api.networking.v1.NetworkPolicyPeer": { "description": "NetworkPolicyPeer describes a peer to allow traffic from. Exactly one of its fields must be specified.", "properties": { + "ipBlock": { + "description": "IPBlock defines policy on a particular IPBlock", + "$ref": "#/definitions/io.k8s.api.networking.v1.IPBlock" + }, "namespaceSelector": { "description": "Selects Namespaces using cluster scoped-labels. This matches all pods in all namespaces selected by this label selector. This field follows standard label selector semantics. If present but empty, this selector selects all namespaces.", "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector" diff --git a/api/swagger-spec/extensions_v1beta1.json b/api/swagger-spec/extensions_v1beta1.json index b00cd68661b..504c359cfd8 100644 --- a/api/swagger-spec/extensions_v1beta1.json +++ b/api/swagger-spec/extensions_v1beta1.json @@ -9305,6 +9305,30 @@ "namespaceSelector": { "$ref": "v1.LabelSelector", "description": "Selects Namespaces using cluster scoped-labels. This matches all pods in all namespaces selected by this label selector. This field follows standard label selector semantics. If present but empty, this selector selects all namespaces." + }, + "ipBlock": { + "$ref": "v1beta1.IPBlock", + "description": "IPBlock defines policy on a particular IPBlock" + } + } + }, + "v1beta1.IPBlock": { + "id": "v1beta1.IPBlock", + "description": "IPBlock describes a particular CIDR (Ex. \"192.168.1.1/24\") that is allowed to the pods matched by a NetworkPolicySpec's podSelector. The except entry describes CIDRs that should not be included within this rule.", + "required": [ + "cidr" + ], + "properties": { + "cidr": { + "type": "string", + "description": "CIDR is a string representing the IP Block Valid examples are \"192.168.1.1/24\"" + }, + "except": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Except is a slice of CIDRs that should not be included within an IP Block Valid examples are \"192.168.1.1/24\" Except values will be rejected if they are outside the CIDR range" } } }, diff --git a/api/swagger-spec/networking.k8s.io_v1.json b/api/swagger-spec/networking.k8s.io_v1.json index 79a9ac80cb3..059a1c63964 100644 --- a/api/swagger-spec/networking.k8s.io_v1.json +++ b/api/swagger-spec/networking.k8s.io_v1.json @@ -1307,6 +1307,30 @@ "namespaceSelector": { "$ref": "v1.LabelSelector", "description": "Selects Namespaces using cluster scoped-labels. This matches all pods in all namespaces selected by this label selector. This field follows standard label selector semantics. If present but empty, this selector selects all namespaces." + }, + "ipBlock": { + "$ref": "v1.IPBlock", + "description": "IPBlock defines policy on a particular IPBlock" + } + } + }, + "v1.IPBlock": { + "id": "v1.IPBlock", + "description": "IPBlock describes a particular CIDR (Ex. \"192.168.1.1/24\") that is allowed to the pods matched by a NetworkPolicySpec's podSelector. The except entry describes CIDRs that should not be included within this rule.", + "required": [ + "cidr" + ], + "properties": { + "cidr": { + "type": "string", + "description": "CIDR is a string representing the IP Block Valid examples are \"192.168.1.1/24\"" + }, + "except": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Except is a slice of CIDRs that should not be included within an IP Block Valid examples are \"192.168.1.1/24\" Except values will be rejected if they are outside the CIDR range" } } }, diff --git a/docs/api-reference/extensions/v1beta1/definitions.html b/docs/api-reference/extensions/v1beta1/definitions.html index 5c184f8eabd..f6eb9aab998 100755 --- a/docs/api-reference/extensions/v1beta1/definitions.html +++ b/docs/api-reference/extensions/v1beta1/definitions.html @@ -3215,6 +3215,47 @@ When an object is created, the system will populate this list with the current s + +
+

v1beta1.IPBlock

+
+

IPBlock describes a particular CIDR (Ex. "192.168.1.1/24") that is allowed to the pods matched by a NetworkPolicySpec’s podSelector. The except entry describes CIDRs that should not be included within this rule.

+
+ +++++++ + + + + + + + + + + + + + + + + + + + + + + + + + +
NameDescriptionRequiredSchemaDefault

cidr

CIDR is a string representing the IP Block Valid examples are "192.168.1.1/24"

true

string

except

Except is a slice of CIDRs that should not be included within an IP Block Valid examples are "192.168.1.1/24" Except values will be rejected if they are outside the CIDR range

false

string array

+

v1.LoadBalancerIngress

@@ -5965,6 +6006,13 @@ Both these may change in the future. Incoming requests are matched against the h

v1.LabelSelector

+ +

ipBlock

+

IPBlock defines policy on a particular IPBlock

+

false

+

v1beta1.IPBlock

+ + diff --git a/docs/api-reference/networking.k8s.io/v1/definitions.html b/docs/api-reference/networking.k8s.io/v1/definitions.html index eec98686c29..92f95a1f592 100755 --- a/docs/api-reference/networking.k8s.io/v1/definitions.html +++ b/docs/api-reference/networking.k8s.io/v1/definitions.html @@ -937,6 +937,47 @@ span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; } +
+
+

v1.IPBlock

+
+

IPBlock describes a particular CIDR (Ex. "192.168.1.1/24") that is allowed to the pods matched by a NetworkPolicySpec’s podSelector. The except entry describes CIDRs that should not be included within this rule.

+
+ +++++++ + + + + + + + + + + + + + + + + + + + + + + + + + +
NameDescriptionRequiredSchemaDefault

cidr

CIDR is a string representing the IP Block Valid examples are "192.168.1.1/24"

true

string

except

Except is a slice of CIDRs that should not be included within an IP Block Valid examples are "192.168.1.1/24" Except values will be rejected if they are outside the CIDR range

false

string array

+

v1.LabelSelector

@@ -1460,6 +1501,13 @@ When an object is created, the system will populate this list with the current s

v1.LabelSelector

+ +

ipBlock

+

IPBlock defines policy on a particular IPBlock

+

false

+

v1.IPBlock

+ + diff --git a/pkg/api/testing/BUILD b/pkg/api/testing/BUILD index c914bec2270..659e97210cd 100644 --- a/pkg/api/testing/BUILD +++ b/pkg/api/testing/BUILD @@ -24,6 +24,7 @@ go_library( "//pkg/apis/extensions:go_default_library", "//pkg/apis/extensions/fuzzer:go_default_library", "//pkg/apis/extensions/v1beta1:go_default_library", + "//pkg/apis/networking/fuzzer:go_default_library", "//pkg/apis/policy/fuzzer:go_default_library", "//pkg/apis/rbac/fuzzer:go_default_library", "//pkg/apis/storage/fuzzer:go_default_library", diff --git a/pkg/api/testing/fuzzer.go b/pkg/api/testing/fuzzer.go index 844b9f79d2b..8fc37898d49 100644 --- a/pkg/api/testing/fuzzer.go +++ b/pkg/api/testing/fuzzer.go @@ -19,7 +19,7 @@ package testing import ( "fmt" - "github.com/google/gofuzz" + fuzz "github.com/google/gofuzz" "k8s.io/api/core/v1" apitesting "k8s.io/apimachinery/pkg/api/testing" @@ -38,6 +38,7 @@ import ( "k8s.io/kubernetes/pkg/apis/extensions" extensionsfuzzer "k8s.io/kubernetes/pkg/apis/extensions/fuzzer" extensionsv1beta1 "k8s.io/kubernetes/pkg/apis/extensions/v1beta1" + networkingfuzzer "k8s.io/kubernetes/pkg/apis/networking/fuzzer" policyfuzzer "k8s.io/kubernetes/pkg/apis/policy/fuzzer" rbacfuzzer "k8s.io/kubernetes/pkg/apis/rbac/fuzzer" storagefuzzer "k8s.io/kubernetes/pkg/apis/storage/fuzzer" @@ -102,4 +103,5 @@ var FuzzerFuncs = fuzzer.MergeFuzzerFuncs( certificatesfuzzer.Funcs, admissionregistrationfuzzer.Funcs, storagefuzzer.Funcs, + networkingfuzzer.Funcs, ) diff --git a/pkg/apis/extensions/v1beta1/conversion.go b/pkg/apis/extensions/v1beta1/conversion.go index 0f221592241..62167b6f201 100644 --- a/pkg/apis/extensions/v1beta1/conversion.go +++ b/pkg/apis/extensions/v1beta1/conversion.go @@ -60,6 +60,8 @@ func addConversionFuncs(scheme *runtime.Scheme) error { Convert_v1beta1_NetworkPolicySpec_To_networking_NetworkPolicySpec, Convert_networking_NetworkPolicySpec_To_v1beta1_NetworkPolicySpec, Convert_extensions_PodSecurityPolicySpec_To_v1beta1_PodSecurityPolicySpec, + Convert_v1beta1_IPBlock_To_networking_IPBlock, + Convert_networking_IPBlock_To_v1beta1_IPBlock, ) if err != nil { return err @@ -346,6 +348,14 @@ func Convert_v1beta1_NetworkPolicyPeer_To_networking_NetworkPolicyPeer(in *exten } else { out.NamespaceSelector = nil } + if in.IPBlock != nil { + out.IPBlock = new(networking.IPBlock) + if err := s.Convert(in.IPBlock, out.IPBlock, 0); err != nil { + return err + } + } else { + out.IPBlock = nil + } return nil } @@ -366,6 +376,30 @@ func Convert_networking_NetworkPolicyPeer_To_v1beta1_NetworkPolicyPeer(in *netwo } else { out.NamespaceSelector = nil } + if in.IPBlock != nil { + out.IPBlock = new(extensionsv1beta1.IPBlock) + if err := s.Convert(in.IPBlock, out.IPBlock, 0); err != nil { + return err + } + } else { + out.IPBlock = nil + } + return nil +} + +func Convert_v1beta1_IPBlock_To_networking_IPBlock(in *extensionsv1beta1.IPBlock, out *networking.IPBlock, s conversion.Scope) error { + out.CIDR = in.CIDR + + out.Except = make([]string, len(in.Except)) + copy(out.Except, in.Except) + return nil +} + +func Convert_networking_IPBlock_To_v1beta1_IPBlock(in *networking.IPBlock, out *extensionsv1beta1.IPBlock, s conversion.Scope) error { + out.CIDR = in.CIDR + + out.Except = make([]string, len(in.Except)) + copy(out.Except, in.Except) return nil } diff --git a/pkg/apis/networking/fuzzer/BUILD b/pkg/apis/networking/fuzzer/BUILD index dd0561eec8f..b5819de095d 100644 --- a/pkg/apis/networking/fuzzer/BUILD +++ b/pkg/apis/networking/fuzzer/BUILD @@ -8,7 +8,11 @@ load( go_library( name = "go_default_library", srcs = ["fuzzer.go"], - deps = ["//vendor/k8s.io/apimachinery/pkg/runtime/serializer:go_default_library"], + deps = [ + "//pkg/apis/networking:go_default_library", + "//vendor/github.com/google/gofuzz:go_default_library", + "//vendor/k8s.io/apimachinery/pkg/runtime/serializer:go_default_library", + ], ) filegroup( diff --git a/pkg/apis/networking/fuzzer/fuzzer.go b/pkg/apis/networking/fuzzer/fuzzer.go index 6e142826d3b..1325b9d336c 100644 --- a/pkg/apis/networking/fuzzer/fuzzer.go +++ b/pkg/apis/networking/fuzzer/fuzzer.go @@ -17,10 +17,24 @@ limitations under the License. package fuzzer import ( + fuzz "github.com/google/gofuzz" runtimeserializer "k8s.io/apimachinery/pkg/runtime/serializer" + "k8s.io/kubernetes/pkg/apis/networking" ) // Funcs returns the fuzzer functions for the networking api group. var Funcs = func(codecs runtimeserializer.CodecFactory) []interface{} { - return []interface{}{} + return []interface{}{ + func(np *networking.NetworkPolicyPeer, c fuzz.Continue) { + c.FuzzNoCustom(np) // fuzz self without calling this function again + // TODO: Implement a fuzzer to generate valid keys, values and operators for + // selector requirements. + if np.IPBlock != nil { + np.IPBlock = &networking.IPBlock{ + CIDR: "192.168.1.0/24", + Except: []string{"192.168.1.1/24", "192.168.1.2/24"}, + } + } + }, + } } diff --git a/pkg/apis/networking/types.go b/pkg/apis/networking/types.go index a422b05d5c0..74d818cd77f 100644 --- a/pkg/apis/networking/types.go +++ b/pkg/apis/networking/types.go @@ -90,6 +90,20 @@ type NetworkPolicyPort struct { Port *intstr.IntOrString } +// IPBlock describes a particular CIDR (Ex. "192.168.1.1/24") that is allowed to the pods +// matched by a NetworkPolicySpec's podSelector. The except entry describes CIDRs that should +// not be included within this rule. +type IPBlock struct { + // CIDR is a string representing the IP Block + // Valid examples are "192.168.1.1/24" + CIDR string + // Except is a slice of CIDRs that should not be included within an IP Block + // Valid examples are "192.168.1.1/24" + // Except values will be rejected if they are outside the CIDR range + // +optional + Except []string +} + // NetworkPolicyPeer describes a peer to allow traffic from. Exactly one of its fields // must be specified. type NetworkPolicyPeer struct { @@ -104,6 +118,10 @@ type NetworkPolicyPeer struct { // selector semantics. If present but empty, this selector selects all namespaces. // +optional NamespaceSelector *metav1.LabelSelector + + // IPBlock defines policy on a particular IPBlock + // +optional + IPBlock *IPBlock } // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object diff --git a/pkg/apis/networking/v1/zz_generated.conversion.go b/pkg/apis/networking/v1/zz_generated.conversion.go index d746e7ffaef..de3bd546369 100644 --- a/pkg/apis/networking/v1/zz_generated.conversion.go +++ b/pkg/apis/networking/v1/zz_generated.conversion.go @@ -40,6 +40,8 @@ func init() { // Public to allow building arbitrary schemes. func RegisterConversions(scheme *runtime.Scheme) error { return scheme.AddGeneratedConversionFuncs( + Convert_v1_IPBlock_To_networking_IPBlock, + Convert_networking_IPBlock_To_v1_IPBlock, Convert_v1_NetworkPolicy_To_networking_NetworkPolicy, Convert_networking_NetworkPolicy_To_v1_NetworkPolicy, Convert_v1_NetworkPolicyIngressRule_To_networking_NetworkPolicyIngressRule, @@ -55,6 +57,28 @@ func RegisterConversions(scheme *runtime.Scheme) error { ) } +func autoConvert_v1_IPBlock_To_networking_IPBlock(in *v1.IPBlock, out *networking.IPBlock, s conversion.Scope) error { + out.CIDR = in.CIDR + out.Except = *(*[]string)(unsafe.Pointer(&in.Except)) + return nil +} + +// Convert_v1_IPBlock_To_networking_IPBlock is an autogenerated conversion function. +func Convert_v1_IPBlock_To_networking_IPBlock(in *v1.IPBlock, out *networking.IPBlock, s conversion.Scope) error { + return autoConvert_v1_IPBlock_To_networking_IPBlock(in, out, s) +} + +func autoConvert_networking_IPBlock_To_v1_IPBlock(in *networking.IPBlock, out *v1.IPBlock, s conversion.Scope) error { + out.CIDR = in.CIDR + out.Except = *(*[]string)(unsafe.Pointer(&in.Except)) + return nil +} + +// Convert_networking_IPBlock_To_v1_IPBlock is an autogenerated conversion function. +func Convert_networking_IPBlock_To_v1_IPBlock(in *networking.IPBlock, out *v1.IPBlock, s conversion.Scope) error { + return autoConvert_networking_IPBlock_To_v1_IPBlock(in, out, s) +} + func autoConvert_v1_NetworkPolicy_To_networking_NetworkPolicy(in *v1.NetworkPolicy, out *networking.NetworkPolicy, s conversion.Scope) error { out.ObjectMeta = in.ObjectMeta if err := Convert_v1_NetworkPolicySpec_To_networking_NetworkPolicySpec(&in.Spec, &out.Spec, s); err != nil { @@ -132,6 +156,7 @@ func Convert_networking_NetworkPolicyList_To_v1_NetworkPolicyList(in *networking func autoConvert_v1_NetworkPolicyPeer_To_networking_NetworkPolicyPeer(in *v1.NetworkPolicyPeer, out *networking.NetworkPolicyPeer, s conversion.Scope) error { out.PodSelector = (*meta_v1.LabelSelector)(unsafe.Pointer(in.PodSelector)) out.NamespaceSelector = (*meta_v1.LabelSelector)(unsafe.Pointer(in.NamespaceSelector)) + out.IPBlock = (*networking.IPBlock)(unsafe.Pointer(in.IPBlock)) return nil } @@ -143,6 +168,7 @@ func Convert_v1_NetworkPolicyPeer_To_networking_NetworkPolicyPeer(in *v1.Network func autoConvert_networking_NetworkPolicyPeer_To_v1_NetworkPolicyPeer(in *networking.NetworkPolicyPeer, out *v1.NetworkPolicyPeer, s conversion.Scope) error { out.PodSelector = (*meta_v1.LabelSelector)(unsafe.Pointer(in.PodSelector)) out.NamespaceSelector = (*meta_v1.LabelSelector)(unsafe.Pointer(in.NamespaceSelector)) + out.IPBlock = (*v1.IPBlock)(unsafe.Pointer(in.IPBlock)) return nil } diff --git a/pkg/apis/networking/validation/validation.go b/pkg/apis/networking/validation/validation.go index 12272d50289..780cc652905 100644 --- a/pkg/apis/networking/validation/validation.go +++ b/pkg/apis/networking/validation/validation.go @@ -17,6 +17,8 @@ limitations under the License. package validation import ( + "net" + unversionedvalidation "k8s.io/apimachinery/pkg/apis/meta/v1/validation" "k8s.io/apimachinery/pkg/util/intstr" "k8s.io/apimachinery/pkg/util/validation" @@ -68,7 +70,10 @@ func ValidateNetworkPolicySpec(spec *networking.NetworkPolicySpec, fldPath *fiel numFroms++ allErrs = append(allErrs, unversionedvalidation.ValidateLabelSelector(from.NamespaceSelector, fromPath.Child("namespaceSelector"))...) } - + if from.IPBlock != nil { + numFroms++ + allErrs = append(allErrs, ValidateIPBlock(from.IPBlock, fromPath.Child("ipBlock"))...) + } if numFroms == 0 { allErrs = append(allErrs, field.Required(fromPath, "must specify a from type")) } else if numFroms > 1 { @@ -93,3 +98,39 @@ func ValidateNetworkPolicyUpdate(update, old *networking.NetworkPolicy) field.Er allErrs = append(allErrs, ValidateNetworkPolicySpec(&update.Spec, field.NewPath("spec"))...) return allErrs } + +// ValidateIPBlock validates a cidr and the except fields of an IpBlock NetworkPolicyPeer +func ValidateIPBlock(ipb *networking.IPBlock, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + if len(ipb.CIDR) == 0 || ipb.CIDR == "" { + allErrs = append(allErrs, field.Required(fldPath.Child("cidr"), "")) + return allErrs + } + cidrIPNet, err := validateCIDR(ipb.CIDR) + if err != nil { + allErrs = append(allErrs, field.Invalid(fldPath.Child("cidr"), ipb.CIDR, "not a valid CIDR")) + return allErrs + } + exceptCIDR := ipb.Except + for i, exceptIP := range exceptCIDR { + exceptPath := fldPath.Child("except").Index(i) + exceptCIDR, err := validateCIDR(exceptIP) + if err != nil { + allErrs = append(allErrs, field.Invalid(exceptPath, exceptIP, "not a valid CIDR")) + return allErrs + } + if !cidrIPNet.Contains(exceptCIDR.IP) { + allErrs = append(allErrs, field.Invalid(exceptPath, exceptCIDR.IP, "not within CIDR range")) + } + } + return allErrs +} + +// validateCIDR validates whether a CIDR matches the conventions expected by net.ParseCIDR +func validateCIDR(cidr string) (*net.IPNet, error) { + _, net, err := net.ParseCIDR(cidr) + if err != nil { + return nil, err + } + return net, nil +} diff --git a/pkg/apis/networking/validation/validation_test.go b/pkg/apis/networking/validation/validation_test.go index 154d783bf15..0be1f0998c5 100644 --- a/pkg/apis/networking/validation/validation_test.go +++ b/pkg/apis/networking/validation/validation_test.go @@ -122,6 +122,26 @@ func TestValidateNetworkPolicy(t *testing.T) { }, }, }, + { + ObjectMeta: metav1.ObjectMeta{Name: "foo", Namespace: "bar"}, + Spec: networking.NetworkPolicySpec{ + PodSelector: metav1.LabelSelector{ + MatchLabels: map[string]string{"a": "b"}, + }, + Ingress: []networking.NetworkPolicyIngressRule{ + { + From: []networking.NetworkPolicyPeer{ + { + IPBlock: &networking.IPBlock{ + CIDR: "192.168.0.0/16", + Except: []string{"192.168.3.0/24", "192.168.4.0/24"}, + }, + }, + }, + }, + }, + }, + }, } // Success cases are expected to pass validation. @@ -256,6 +276,83 @@ func TestValidateNetworkPolicy(t *testing.T) { }, }, }, + "missing cidr field": { + ObjectMeta: metav1.ObjectMeta{Name: "foo", Namespace: "bar"}, + Spec: networking.NetworkPolicySpec{ + PodSelector: metav1.LabelSelector{}, + Ingress: []networking.NetworkPolicyIngressRule{ + { + From: []networking.NetworkPolicyPeer{ + { + IPBlock: &networking.IPBlock{ + Except: []string{"192.168.8.0/24", "192.168.9.0/24"}, + }, + }, + }, + }, + }, + }, + }, + "invalid cidr format": { + ObjectMeta: metav1.ObjectMeta{Name: "foo", Namespace: "bar"}, + Spec: networking.NetworkPolicySpec{ + PodSelector: metav1.LabelSelector{ + MatchLabels: map[string]string{"a": "b"}, + }, + Ingress: []networking.NetworkPolicyIngressRule{ + { + From: []networking.NetworkPolicyPeer{ + { + IPBlock: &networking.IPBlock{ + CIDR: "192.168.5.6", + Except: []string{"192.168.1.0/24", "192.168.2.0/24"}, + }, + }, + }, + }, + }, + }, + }, + "except field is an empty string": { + ObjectMeta: metav1.ObjectMeta{Name: "foo", Namespace: "bar"}, + Spec: networking.NetworkPolicySpec{ + PodSelector: metav1.LabelSelector{ + MatchLabels: map[string]string{"a": "b"}, + }, + Ingress: []networking.NetworkPolicyIngressRule{ + { + From: []networking.NetworkPolicyPeer{ + { + IPBlock: &networking.IPBlock{ + CIDR: "192.168.8.0/24", + Except: []string{"", " "}, + }, + }, + }, + }, + }, + }, + }, + "except IP is outside of CIDR range": { + ObjectMeta: metav1.ObjectMeta{Name: "foo", Namespace: "bar"}, + Spec: networking.NetworkPolicySpec{ + PodSelector: metav1.LabelSelector{ + MatchLabels: map[string]string{"a": "b"}, + }, + Ingress: []networking.NetworkPolicyIngressRule{ + { + From: []networking.NetworkPolicyPeer{ + { + IPBlock: &networking.IPBlock{ + CIDR: "192.168.8.0/24", + Except: []string{"192.168.9.1/24"}, + }, + }, + }, + }, + }, + }, + }, } // Error cases are not expected to pass validation. diff --git a/pkg/apis/networking/zz_generated.deepcopy.go b/pkg/apis/networking/zz_generated.deepcopy.go index d68f23467bc..6cc1fa4d3d6 100644 --- a/pkg/apis/networking/zz_generated.deepcopy.go +++ b/pkg/apis/networking/zz_generated.deepcopy.go @@ -39,6 +39,10 @@ func init() { // Deprecated: deepcopy registration will go away when static deepcopy is fully implemented. func RegisterDeepCopies(scheme *runtime.Scheme) error { return scheme.AddGeneratedDeepCopyFuncs( + conversion.GeneratedDeepCopyFunc{Fn: func(in interface{}, out interface{}, c *conversion.Cloner) error { + in.(*IPBlock).DeepCopyInto(out.(*IPBlock)) + return nil + }, InType: reflect.TypeOf(&IPBlock{})}, conversion.GeneratedDeepCopyFunc{Fn: func(in interface{}, out interface{}, c *conversion.Cloner) error { in.(*NetworkPolicy).DeepCopyInto(out.(*NetworkPolicy)) return nil @@ -66,6 +70,27 @@ func RegisterDeepCopies(scheme *runtime.Scheme) error { ) } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *IPBlock) DeepCopyInto(out *IPBlock) { + *out = *in + if in.Except != nil { + in, out := &in.Except, &out.Except + *out = make([]string, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IPBlock. +func (in *IPBlock) DeepCopy() *IPBlock { + if in == nil { + return nil + } + out := new(IPBlock) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *NetworkPolicy) DeepCopyInto(out *NetworkPolicy) { *out = *in @@ -179,6 +204,15 @@ func (in *NetworkPolicyPeer) DeepCopyInto(out *NetworkPolicyPeer) { (*in).DeepCopyInto(*out) } } + if in.IPBlock != nil { + in, out := &in.IPBlock, &out.IPBlock + if *in == nil { + *out = nil + } else { + *out = new(IPBlock) + (*in).DeepCopyInto(*out) + } + } return } diff --git a/staging/src/k8s.io/api/extensions/v1beta1/generated.pb.go b/staging/src/k8s.io/api/extensions/v1beta1/generated.pb.go index 47ded03b835..f7eb3b4d65a 100644 --- a/staging/src/k8s.io/api/extensions/v1beta1/generated.pb.go +++ b/staging/src/k8s.io/api/extensions/v1beta1/generated.pb.go @@ -47,6 +47,7 @@ limitations under the License. HTTPIngressRuleValue HostPortRange IDRange + IPBlock Ingress IngressBackend IngressList @@ -206,161 +207,165 @@ func (m *IDRange) Reset() { *m = IDRange{} } func (*IDRange) ProtoMessage() {} func (*IDRange) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{21} } +func (m *IPBlock) Reset() { *m = IPBlock{} } +func (*IPBlock) ProtoMessage() {} +func (*IPBlock) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{22} } + func (m *Ingress) Reset() { *m = Ingress{} } func (*Ingress) ProtoMessage() {} -func (*Ingress) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{22} } +func (*Ingress) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{23} } func (m *IngressBackend) Reset() { *m = IngressBackend{} } func (*IngressBackend) ProtoMessage() {} -func (*IngressBackend) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{23} } +func (*IngressBackend) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{24} } func (m *IngressList) Reset() { *m = IngressList{} } func (*IngressList) ProtoMessage() {} -func (*IngressList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{24} } +func (*IngressList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{25} } func (m *IngressRule) Reset() { *m = IngressRule{} } func (*IngressRule) ProtoMessage() {} -func (*IngressRule) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{25} } +func (*IngressRule) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{26} } func (m *IngressRuleValue) Reset() { *m = IngressRuleValue{} } func (*IngressRuleValue) ProtoMessage() {} -func (*IngressRuleValue) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{26} } +func (*IngressRuleValue) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{27} } func (m *IngressSpec) Reset() { *m = IngressSpec{} } func (*IngressSpec) ProtoMessage() {} -func (*IngressSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{27} } +func (*IngressSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{28} } func (m *IngressStatus) Reset() { *m = IngressStatus{} } func (*IngressStatus) ProtoMessage() {} -func (*IngressStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{28} } +func (*IngressStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{29} } func (m *IngressTLS) Reset() { *m = IngressTLS{} } func (*IngressTLS) ProtoMessage() {} -func (*IngressTLS) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{29} } +func (*IngressTLS) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{30} } func (m *NetworkPolicy) Reset() { *m = NetworkPolicy{} } func (*NetworkPolicy) ProtoMessage() {} -func (*NetworkPolicy) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{30} } +func (*NetworkPolicy) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{31} } func (m *NetworkPolicyIngressRule) Reset() { *m = NetworkPolicyIngressRule{} } func (*NetworkPolicyIngressRule) ProtoMessage() {} func (*NetworkPolicyIngressRule) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{31} + return fileDescriptorGenerated, []int{32} } func (m *NetworkPolicyList) Reset() { *m = NetworkPolicyList{} } func (*NetworkPolicyList) ProtoMessage() {} -func (*NetworkPolicyList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{32} } +func (*NetworkPolicyList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{33} } func (m *NetworkPolicyPeer) Reset() { *m = NetworkPolicyPeer{} } func (*NetworkPolicyPeer) ProtoMessage() {} -func (*NetworkPolicyPeer) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{33} } +func (*NetworkPolicyPeer) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{34} } func (m *NetworkPolicyPort) Reset() { *m = NetworkPolicyPort{} } func (*NetworkPolicyPort) ProtoMessage() {} -func (*NetworkPolicyPort) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{34} } +func (*NetworkPolicyPort) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{35} } func (m *NetworkPolicySpec) Reset() { *m = NetworkPolicySpec{} } func (*NetworkPolicySpec) ProtoMessage() {} -func (*NetworkPolicySpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{35} } +func (*NetworkPolicySpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{36} } func (m *PodSecurityPolicy) Reset() { *m = PodSecurityPolicy{} } func (*PodSecurityPolicy) ProtoMessage() {} -func (*PodSecurityPolicy) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{36} } +func (*PodSecurityPolicy) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{37} } func (m *PodSecurityPolicyList) Reset() { *m = PodSecurityPolicyList{} } func (*PodSecurityPolicyList) ProtoMessage() {} -func (*PodSecurityPolicyList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{37} } +func (*PodSecurityPolicyList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{38} } func (m *PodSecurityPolicySpec) Reset() { *m = PodSecurityPolicySpec{} } func (*PodSecurityPolicySpec) ProtoMessage() {} -func (*PodSecurityPolicySpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{38} } +func (*PodSecurityPolicySpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{39} } func (m *ReplicaSet) Reset() { *m = ReplicaSet{} } func (*ReplicaSet) ProtoMessage() {} -func (*ReplicaSet) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{39} } +func (*ReplicaSet) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{40} } func (m *ReplicaSetCondition) Reset() { *m = ReplicaSetCondition{} } func (*ReplicaSetCondition) ProtoMessage() {} -func (*ReplicaSetCondition) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{40} } +func (*ReplicaSetCondition) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{41} } func (m *ReplicaSetList) Reset() { *m = ReplicaSetList{} } func (*ReplicaSetList) ProtoMessage() {} -func (*ReplicaSetList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{41} } +func (*ReplicaSetList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{42} } func (m *ReplicaSetSpec) Reset() { *m = ReplicaSetSpec{} } func (*ReplicaSetSpec) ProtoMessage() {} -func (*ReplicaSetSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{42} } +func (*ReplicaSetSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{43} } func (m *ReplicaSetStatus) Reset() { *m = ReplicaSetStatus{} } func (*ReplicaSetStatus) ProtoMessage() {} -func (*ReplicaSetStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{43} } +func (*ReplicaSetStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{44} } func (m *ReplicationControllerDummy) Reset() { *m = ReplicationControllerDummy{} } func (*ReplicationControllerDummy) ProtoMessage() {} func (*ReplicationControllerDummy) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{44} + return fileDescriptorGenerated, []int{45} } func (m *RollbackConfig) Reset() { *m = RollbackConfig{} } func (*RollbackConfig) ProtoMessage() {} -func (*RollbackConfig) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{45} } +func (*RollbackConfig) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{46} } func (m *RollingUpdateDaemonSet) Reset() { *m = RollingUpdateDaemonSet{} } func (*RollingUpdateDaemonSet) ProtoMessage() {} -func (*RollingUpdateDaemonSet) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{46} } +func (*RollingUpdateDaemonSet) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{47} } func (m *RollingUpdateDeployment) Reset() { *m = RollingUpdateDeployment{} } func (*RollingUpdateDeployment) ProtoMessage() {} func (*RollingUpdateDeployment) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{47} + return fileDescriptorGenerated, []int{48} } func (m *RunAsUserStrategyOptions) Reset() { *m = RunAsUserStrategyOptions{} } func (*RunAsUserStrategyOptions) ProtoMessage() {} func (*RunAsUserStrategyOptions) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{48} + return fileDescriptorGenerated, []int{49} } func (m *SELinuxStrategyOptions) Reset() { *m = SELinuxStrategyOptions{} } func (*SELinuxStrategyOptions) ProtoMessage() {} -func (*SELinuxStrategyOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{49} } +func (*SELinuxStrategyOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{50} } func (m *Scale) Reset() { *m = Scale{} } func (*Scale) ProtoMessage() {} -func (*Scale) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{50} } +func (*Scale) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{51} } func (m *ScaleSpec) Reset() { *m = ScaleSpec{} } func (*ScaleSpec) ProtoMessage() {} -func (*ScaleSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{51} } +func (*ScaleSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{52} } func (m *ScaleStatus) Reset() { *m = ScaleStatus{} } func (*ScaleStatus) ProtoMessage() {} -func (*ScaleStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{52} } +func (*ScaleStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{53} } func (m *SupplementalGroupsStrategyOptions) Reset() { *m = SupplementalGroupsStrategyOptions{} } func (*SupplementalGroupsStrategyOptions) ProtoMessage() {} func (*SupplementalGroupsStrategyOptions) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{53} + return fileDescriptorGenerated, []int{54} } func (m *ThirdPartyResource) Reset() { *m = ThirdPartyResource{} } func (*ThirdPartyResource) ProtoMessage() {} -func (*ThirdPartyResource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{54} } +func (*ThirdPartyResource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{55} } func (m *ThirdPartyResourceData) Reset() { *m = ThirdPartyResourceData{} } func (*ThirdPartyResourceData) ProtoMessage() {} -func (*ThirdPartyResourceData) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{55} } +func (*ThirdPartyResourceData) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{56} } func (m *ThirdPartyResourceDataList) Reset() { *m = ThirdPartyResourceDataList{} } func (*ThirdPartyResourceDataList) ProtoMessage() {} func (*ThirdPartyResourceDataList) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{56} + return fileDescriptorGenerated, []int{57} } func (m *ThirdPartyResourceList) Reset() { *m = ThirdPartyResourceList{} } func (*ThirdPartyResourceList) ProtoMessage() {} -func (*ThirdPartyResourceList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{57} } +func (*ThirdPartyResourceList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{58} } func init() { proto.RegisterType((*APIVersion)(nil), "k8s.io.api.extensions.v1beta1.APIVersion") @@ -385,6 +390,7 @@ func init() { proto.RegisterType((*HTTPIngressRuleValue)(nil), "k8s.io.api.extensions.v1beta1.HTTPIngressRuleValue") proto.RegisterType((*HostPortRange)(nil), "k8s.io.api.extensions.v1beta1.HostPortRange") proto.RegisterType((*IDRange)(nil), "k8s.io.api.extensions.v1beta1.IDRange") + proto.RegisterType((*IPBlock)(nil), "k8s.io.api.extensions.v1beta1.IPBlock") proto.RegisterType((*Ingress)(nil), "k8s.io.api.extensions.v1beta1.Ingress") proto.RegisterType((*IngressBackend)(nil), "k8s.io.api.extensions.v1beta1.IngressBackend") proto.RegisterType((*IngressList)(nil), "k8s.io.api.extensions.v1beta1.IngressList") @@ -1267,6 +1273,43 @@ func (m *IDRange) MarshalTo(dAtA []byte) (int, error) { return i, nil } +func (m *IPBlock) 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 *IPBlock) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + dAtA[i] = 0xa + i++ + i = encodeVarintGenerated(dAtA, i, uint64(len(m.CIDR))) + i += copy(dAtA[i:], m.CIDR) + if len(m.Except) > 0 { + for _, s := range m.Except { + dAtA[i] = 0x12 + i++ + l = len(s) + for l >= 1<<7 { + dAtA[i] = uint8(uint64(l)&0x7f | 0x80) + l >>= 7 + i++ + } + dAtA[i] = uint8(l) + i++ + i += copy(dAtA[i:], s) + } + } + return i, nil +} + func (m *Ingress) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -1699,6 +1742,16 @@ func (m *NetworkPolicyPeer) MarshalTo(dAtA []byte) (int, error) { } i += n37 } + if m.IPBlock != nil { + dAtA[i] = 0x1a + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.IPBlock.Size())) + n38, err := m.IPBlock.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n38 + } return i, nil } @@ -1727,11 +1780,11 @@ func (m *NetworkPolicyPort) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x12 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Port.Size())) - n38, err := m.Port.MarshalTo(dAtA[i:]) + n39, err := m.Port.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n38 + i += n39 } return i, nil } @@ -1754,11 +1807,11 @@ func (m *NetworkPolicySpec) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.PodSelector.Size())) - n39, err := m.PodSelector.MarshalTo(dAtA[i:]) + n40, err := m.PodSelector.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n39 + i += n40 if len(m.Ingress) > 0 { for _, msg := range m.Ingress { dAtA[i] = 0x12 @@ -1792,19 +1845,19 @@ func (m *PodSecurityPolicy) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n40, err := m.ObjectMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n40 - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Spec.Size())) - n41, err := m.Spec.MarshalTo(dAtA[i:]) + n41, err := m.ObjectMeta.MarshalTo(dAtA[i:]) if err != nil { return 0, err } i += n41 + dAtA[i] = 0x12 + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.Spec.Size())) + n42, err := m.Spec.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n42 return i, nil } @@ -1826,11 +1879,11 @@ func (m *PodSecurityPolicyList) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size())) - n42, err := m.ListMeta.MarshalTo(dAtA[i:]) + n43, err := m.ListMeta.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n42 + i += n43 if len(m.Items) > 0 { for _, msg := range m.Items { dAtA[i] = 0x12 @@ -1968,35 +2021,35 @@ func (m *PodSecurityPolicySpec) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x52 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.SELinux.Size())) - n43, err := m.SELinux.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n43 - dAtA[i] = 0x5a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.RunAsUser.Size())) - n44, err := m.RunAsUser.MarshalTo(dAtA[i:]) + n44, err := m.SELinux.MarshalTo(dAtA[i:]) if err != nil { return 0, err } i += n44 - dAtA[i] = 0x62 + dAtA[i] = 0x5a i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.SupplementalGroups.Size())) - n45, err := m.SupplementalGroups.MarshalTo(dAtA[i:]) + i = encodeVarintGenerated(dAtA, i, uint64(m.RunAsUser.Size())) + n45, err := m.RunAsUser.MarshalTo(dAtA[i:]) if err != nil { return 0, err } i += n45 - dAtA[i] = 0x6a + dAtA[i] = 0x62 i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.FSGroup.Size())) - n46, err := m.FSGroup.MarshalTo(dAtA[i:]) + i = encodeVarintGenerated(dAtA, i, uint64(m.SupplementalGroups.Size())) + n46, err := m.SupplementalGroups.MarshalTo(dAtA[i:]) if err != nil { return 0, err } i += n46 + dAtA[i] = 0x6a + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.FSGroup.Size())) + n47, err := m.FSGroup.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n47 dAtA[i] = 0x70 i++ if m.ReadOnlyRootFilesystem { @@ -2046,27 +2099,27 @@ func (m *ReplicaSet) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n47, err := m.ObjectMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n47 - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Spec.Size())) - n48, err := m.Spec.MarshalTo(dAtA[i:]) + n48, err := m.ObjectMeta.MarshalTo(dAtA[i:]) if err != nil { return 0, err } i += n48 - dAtA[i] = 0x1a + dAtA[i] = 0x12 i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Status.Size())) - n49, err := m.Status.MarshalTo(dAtA[i:]) + i = encodeVarintGenerated(dAtA, i, uint64(m.Spec.Size())) + n49, err := m.Spec.MarshalTo(dAtA[i:]) if err != nil { return 0, err } i += n49 + dAtA[i] = 0x1a + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.Status.Size())) + n50, err := m.Status.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n50 return i, nil } @@ -2096,11 +2149,11 @@ func (m *ReplicaSetCondition) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1a i++ i = encodeVarintGenerated(dAtA, i, uint64(m.LastTransitionTime.Size())) - n50, err := m.LastTransitionTime.MarshalTo(dAtA[i:]) + n51, err := m.LastTransitionTime.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n50 + i += n51 dAtA[i] = 0x22 i++ i = encodeVarintGenerated(dAtA, i, uint64(len(m.Reason))) @@ -2130,11 +2183,11 @@ func (m *ReplicaSetList) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size())) - n51, err := m.ListMeta.MarshalTo(dAtA[i:]) + n52, err := m.ListMeta.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n51 + i += n52 if len(m.Items) > 0 { for _, msg := range m.Items { dAtA[i] = 0x12 @@ -2174,20 +2227,20 @@ func (m *ReplicaSetSpec) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x12 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Selector.Size())) - n52, err := m.Selector.MarshalTo(dAtA[i:]) + n53, err := m.Selector.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n52 + i += n53 } dAtA[i] = 0x1a i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Template.Size())) - n53, err := m.Template.MarshalTo(dAtA[i:]) + n54, err := m.Template.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n53 + i += n54 dAtA[i] = 0x20 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.MinReadySeconds)) @@ -2297,11 +2350,11 @@ func (m *RollingUpdateDaemonSet) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.MaxUnavailable.Size())) - n54, err := m.MaxUnavailable.MarshalTo(dAtA[i:]) + n55, err := m.MaxUnavailable.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n54 + i += n55 } return i, nil } @@ -2325,21 +2378,21 @@ func (m *RollingUpdateDeployment) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.MaxUnavailable.Size())) - n55, err := m.MaxUnavailable.MarshalTo(dAtA[i:]) + n56, err := m.MaxUnavailable.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n55 + i += n56 } if m.MaxSurge != nil { dAtA[i] = 0x12 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.MaxSurge.Size())) - n56, err := m.MaxSurge.MarshalTo(dAtA[i:]) + n57, err := m.MaxSurge.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n56 + i += n57 } return i, nil } @@ -2401,11 +2454,11 @@ func (m *SELinuxStrategyOptions) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x12 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.SELinuxOptions.Size())) - n57, err := m.SELinuxOptions.MarshalTo(dAtA[i:]) + n58, err := m.SELinuxOptions.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n57 + i += n58 } return i, nil } @@ -2428,27 +2481,27 @@ func (m *Scale) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n58, err := m.ObjectMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n58 - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Spec.Size())) - n59, err := m.Spec.MarshalTo(dAtA[i:]) + n59, err := m.ObjectMeta.MarshalTo(dAtA[i:]) if err != nil { return 0, err } i += n59 - dAtA[i] = 0x1a + dAtA[i] = 0x12 i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Status.Size())) - n60, err := m.Status.MarshalTo(dAtA[i:]) + i = encodeVarintGenerated(dAtA, i, uint64(m.Spec.Size())) + n60, err := m.Spec.MarshalTo(dAtA[i:]) if err != nil { return 0, err } i += n60 + dAtA[i] = 0x1a + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.Status.Size())) + n61, err := m.Status.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n61 return i, nil } @@ -2572,11 +2625,11 @@ func (m *ThirdPartyResource) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n61, err := m.ObjectMeta.MarshalTo(dAtA[i:]) + n62, err := m.ObjectMeta.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n61 + i += n62 dAtA[i] = 0x12 i++ i = encodeVarintGenerated(dAtA, i, uint64(len(m.Description))) @@ -2614,11 +2667,11 @@ func (m *ThirdPartyResourceData) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n62, err := m.ObjectMeta.MarshalTo(dAtA[i:]) + n63, err := m.ObjectMeta.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n62 + i += n63 if m.Data != nil { dAtA[i] = 0x12 i++ @@ -2646,11 +2699,11 @@ func (m *ThirdPartyResourceDataList) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size())) - n63, err := m.ListMeta.MarshalTo(dAtA[i:]) + n64, err := m.ListMeta.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n63 + i += n64 if len(m.Items) > 0 { for _, msg := range m.Items { dAtA[i] = 0x12 @@ -2684,11 +2737,11 @@ func (m *ThirdPartyResourceList) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size())) - n64, err := m.ListMeta.MarshalTo(dAtA[i:]) + n65, err := m.ListMeta.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n64 + i += n65 if len(m.Items) > 0 { for _, msg := range m.Items { dAtA[i] = 0x12 @@ -3033,6 +3086,20 @@ func (m *IDRange) Size() (n int) { return n } +func (m *IPBlock) Size() (n int) { + var l int + _ = l + l = len(m.CIDR) + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Except) > 0 { + for _, s := range m.Except { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + func (m *Ingress) Size() (n int) { var l int _ = l @@ -3186,6 +3253,10 @@ func (m *NetworkPolicyPeer) Size() (n int) { l = m.NamespaceSelector.Size() n += 1 + l + sovGenerated(uint64(l)) } + if m.IPBlock != nil { + l = m.IPBlock.Size() + n += 1 + l + sovGenerated(uint64(l)) + } return n } @@ -3830,6 +3901,17 @@ func (this *IDRange) String() string { }, "") return s } +func (this *IPBlock) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&IPBlock{`, + `CIDR:` + fmt.Sprintf("%v", this.CIDR) + `,`, + `Except:` + fmt.Sprintf("%v", this.Except) + `,`, + `}`, + }, "") + return s +} func (this *Ingress) String() string { if this == nil { return "nil" @@ -3958,6 +4040,7 @@ func (this *NetworkPolicyPeer) String() string { s := strings.Join([]string{`&NetworkPolicyPeer{`, `PodSelector:` + strings.Replace(fmt.Sprintf("%v", this.PodSelector), "LabelSelector", "k8s_io_apimachinery_pkg_apis_meta_v1.LabelSelector", 1) + `,`, `NamespaceSelector:` + strings.Replace(fmt.Sprintf("%v", this.NamespaceSelector), "LabelSelector", "k8s_io_apimachinery_pkg_apis_meta_v1.LabelSelector", 1) + `,`, + `IPBlock:` + strings.Replace(fmt.Sprintf("%v", this.IPBlock), "IPBlock", "IPBlock", 1) + `,`, `}`, }, "") return s @@ -7291,6 +7374,114 @@ func (m *IDRange) Unmarshal(dAtA []byte) error { } return nil } +func (m *IPBlock) 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: IPBlock: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: IPBlock: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field CIDR", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.CIDR = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Except", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Except = append(m.Except, string(dAtA[iNdEx:postIndex])) + 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 *Ingress) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -8604,6 +8795,39 @@ func (m *NetworkPolicyPeer) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field IPBlock", 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 m.IPBlock == nil { + m.IPBlock = &IPBlock{} + } + if err := m.IPBlock.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) @@ -11959,220 +12183,224 @@ func init() { } var fileDescriptorGenerated = []byte{ - // 3430 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xdc, 0x5b, 0x4f, 0x6c, 0x1b, 0xc7, - 0xd5, 0xf7, 0x8a, 0xa2, 0x44, 0x3d, 0x59, 0x92, 0x35, 0x72, 0x64, 0x46, 0x8e, 0x45, 0x67, 0x03, - 0xf8, 0xb3, 0xf3, 0xd9, 0x64, 0xec, 0xc4, 0x89, 0xbf, 0x18, 0x5f, 0xbe, 0x4f, 0x94, 0xfc, 0x47, - 0xa9, 0x24, 0xd3, 0x43, 0x4a, 0x69, 0x8d, 0xb8, 0xcd, 0x8a, 0x1c, 0x51, 0x6b, 0x2d, 0x77, 0x37, - 0xbb, 0xb3, 0x8a, 0x79, 0x29, 0x7a, 0x0a, 0x50, 0xa0, 0x45, 0xdb, 0x43, 0x8a, 0xf4, 0xd6, 0x5c, - 0x7a, 0x6a, 0xd1, 0xdc, 0xda, 0x43, 0x50, 0xa0, 0x40, 0x0b, 0x18, 0x45, 0x5a, 0xe4, 0xd4, 0xe6, - 0x24, 0x34, 0xca, 0xb1, 0xe7, 0x02, 0x85, 0x0f, 0x45, 0x31, 0xb3, 0xb3, 0xff, 0x77, 0x45, 0x52, - 0xb1, 0x85, 0xa2, 0x37, 0x71, 0xde, 0x7b, 0xbf, 0xf7, 0x67, 0x66, 0xde, 0xbc, 0x99, 0xb7, 0x82, - 0x9b, 0x3b, 0xd7, 0xec, 0xb2, 0x6a, 0x54, 0x76, 0x9c, 0x4d, 0x62, 0xe9, 0x84, 0x12, 0xbb, 0xb2, - 0x4b, 0xf4, 0x96, 0x61, 0x55, 0x04, 0x41, 0x31, 0xd5, 0x0a, 0x79, 0x48, 0x89, 0x6e, 0xab, 0x86, - 0x6e, 0x57, 0x76, 0x2f, 0x6f, 0x12, 0xaa, 0x5c, 0xae, 0xb4, 0x89, 0x4e, 0x2c, 0x85, 0x92, 0x56, - 0xd9, 0xb4, 0x0c, 0x6a, 0xa0, 0x33, 0x2e, 0x7b, 0x59, 0x31, 0xd5, 0x72, 0xc0, 0x5e, 0x16, 0xec, - 0x73, 0x97, 0xda, 0x2a, 0xdd, 0x76, 0x36, 0xcb, 0x4d, 0xa3, 0x53, 0x69, 0x1b, 0x6d, 0xa3, 0xc2, - 0xa5, 0x36, 0x9d, 0x2d, 0xfe, 0x8b, 0xff, 0xe0, 0x7f, 0xb9, 0x68, 0x73, 0x72, 0x48, 0x79, 0xd3, - 0xb0, 0x48, 0x65, 0x37, 0xa1, 0x71, 0xee, 0x42, 0x88, 0xc7, 0x34, 0x34, 0xb5, 0xd9, 0xcd, 0x32, - 0x6e, 0xee, 0x95, 0x80, 0xb5, 0xa3, 0x34, 0xb7, 0x55, 0x9d, 0x58, 0xdd, 0x8a, 0xb9, 0xd3, 0xe6, - 0xb2, 0x16, 0xb1, 0x0d, 0xc7, 0x6a, 0x92, 0x81, 0xa4, 0xec, 0x4a, 0x87, 0x50, 0x25, 0xcd, 0xac, - 0x4a, 0x96, 0x94, 0xe5, 0xe8, 0x54, 0xed, 0x24, 0xd5, 0xbc, 0xda, 0x4b, 0xc0, 0x6e, 0x6e, 0x93, - 0x8e, 0x92, 0x90, 0x7b, 0x39, 0x4b, 0xce, 0xa1, 0xaa, 0x56, 0x51, 0x75, 0x6a, 0x53, 0x2b, 0x2e, - 0x24, 0x97, 0x01, 0x16, 0x6a, 0xcb, 0x1b, 0xc4, 0x62, 0xd3, 0x83, 0xce, 0xc2, 0xb0, 0xae, 0x74, - 0x48, 0x51, 0x3a, 0x2b, 0x9d, 0x1f, 0xab, 0x1e, 0x7f, 0xb4, 0x57, 0x3a, 0xb6, 0xbf, 0x57, 0x1a, - 0x5e, 0x53, 0x3a, 0x04, 0x73, 0x8a, 0xfc, 0x13, 0x09, 0x9e, 0x5d, 0x74, 0x6c, 0x6a, 0x74, 0x56, - 0x09, 0xb5, 0xd4, 0xe6, 0xa2, 0x63, 0x59, 0x44, 0xa7, 0x75, 0xaa, 0x50, 0xc7, 0xee, 0x2d, 0x8f, - 0xee, 0x41, 0x7e, 0x57, 0xd1, 0x1c, 0x52, 0x1c, 0x3a, 0x2b, 0x9d, 0x1f, 0xbf, 0x52, 0x2e, 0x07, - 0xcb, 0xc4, 0x37, 0xba, 0x6c, 0xee, 0xb4, 0xf9, 0xba, 0xf1, 0x66, 0xa2, 0x7c, 0xd7, 0x51, 0x74, - 0xaa, 0xd2, 0x6e, 0xf5, 0xa4, 0x80, 0x3c, 0x2e, 0xf4, 0x6e, 0x30, 0x2c, 0xec, 0x42, 0xca, 0xdf, - 0x86, 0x33, 0x99, 0xa6, 0xad, 0xa8, 0x36, 0x45, 0xf7, 0x21, 0xaf, 0x52, 0xd2, 0xb1, 0x8b, 0xd2, - 0xd9, 0xdc, 0xf9, 0xf1, 0x2b, 0xd7, 0xca, 0x07, 0xae, 0xd1, 0x72, 0x26, 0x58, 0x75, 0x42, 0x98, - 0x91, 0x5f, 0x66, 0x70, 0xd8, 0x45, 0x95, 0x7f, 0x24, 0x01, 0x0a, 0xcb, 0x34, 0x14, 0xab, 0x4d, - 0x68, 0x1f, 0x41, 0xf9, 0xc6, 0x57, 0x0b, 0xca, 0x8c, 0x80, 0x1c, 0x77, 0x15, 0x46, 0x62, 0x62, - 0xc2, 0x6c, 0xd2, 0x24, 0x1e, 0x8c, 0x8d, 0x68, 0x30, 0x2e, 0x0f, 0x10, 0x0c, 0x17, 0x25, 0x23, - 0x0a, 0x1f, 0x0c, 0xc1, 0xd8, 0x92, 0x42, 0x3a, 0x86, 0x5e, 0x27, 0x14, 0xbd, 0x03, 0x05, 0xb6, - 0x31, 0x5a, 0x0a, 0x55, 0x78, 0x00, 0xc6, 0xaf, 0xbc, 0x74, 0x90, 0x77, 0x76, 0x99, 0x71, 0x97, - 0x77, 0x2f, 0x97, 0xef, 0x6c, 0x3e, 0x20, 0x4d, 0xba, 0x4a, 0xa8, 0x52, 0x45, 0x42, 0x0f, 0x04, - 0x63, 0xd8, 0x47, 0x45, 0x6b, 0x30, 0x6c, 0x9b, 0xa4, 0x29, 0x62, 0x77, 0xb1, 0x87, 0x1b, 0xbe, - 0x65, 0x75, 0x93, 0x34, 0x83, 0xc9, 0x60, 0xbf, 0x30, 0xc7, 0x41, 0x1b, 0x30, 0x62, 0xf3, 0x59, - 0x2e, 0xe6, 0x12, 0xb3, 0x71, 0x30, 0xa2, 0xbb, 0x36, 0x26, 0x05, 0xe6, 0x88, 0xfb, 0x1b, 0x0b, - 0x34, 0xf9, 0x13, 0x09, 0x26, 0x7c, 0x5e, 0x3e, 0x03, 0x6f, 0x27, 0x62, 0x53, 0xee, 0x2f, 0x36, - 0x4c, 0x9a, 0x47, 0xe6, 0x84, 0xd0, 0x55, 0xf0, 0x46, 0x42, 0x71, 0x59, 0xf5, 0xe6, 0x77, 0x88, - 0xcf, 0xef, 0xf9, 0x7e, 0xdd, 0xc8, 0x98, 0xd6, 0x1f, 0x0f, 0x87, 0xcc, 0x67, 0xe1, 0x42, 0xf7, - 0xa1, 0x60, 0x13, 0x8d, 0x34, 0xa9, 0x61, 0x09, 0xf3, 0x5f, 0xee, 0xd3, 0x7c, 0x65, 0x93, 0x68, - 0x75, 0x21, 0x5a, 0x3d, 0xce, 0xec, 0xf7, 0x7e, 0x61, 0x1f, 0x12, 0xdd, 0x85, 0x02, 0x25, 0x1d, - 0x53, 0x53, 0xa8, 0xb7, 0x2f, 0x5e, 0x08, 0xbb, 0xc0, 0x4e, 0x01, 0x06, 0x56, 0x33, 0x5a, 0x0d, - 0xc1, 0xc6, 0xa7, 0xd4, 0x0f, 0x89, 0x37, 0x8a, 0x7d, 0x18, 0xb4, 0x0b, 0x93, 0x8e, 0xd9, 0x62, - 0x9c, 0x94, 0xe5, 0xc0, 0x76, 0x57, 0x4c, 0xf1, 0xab, 0xfd, 0xc6, 0x66, 0x3d, 0x22, 0x5d, 0x9d, - 0x15, 0xba, 0x26, 0xa3, 0xe3, 0x38, 0xa6, 0x05, 0x2d, 0xc0, 0x54, 0x47, 0xd5, 0x31, 0x51, 0x5a, - 0xdd, 0x3a, 0x69, 0x1a, 0x7a, 0xcb, 0x2e, 0x0e, 0x9f, 0x95, 0xce, 0xe7, 0xab, 0xa7, 0x04, 0xc0, - 0xd4, 0x6a, 0x94, 0x8c, 0xe3, 0xfc, 0xe8, 0x4d, 0x40, 0x9e, 0x1b, 0xb7, 0xdc, 0x14, 0xae, 0x1a, - 0x7a, 0x31, 0x7f, 0x56, 0x3a, 0x9f, 0xab, 0xce, 0x09, 0x14, 0xd4, 0x48, 0x70, 0xe0, 0x14, 0x29, - 0xb4, 0x02, 0x27, 0x2d, 0xb2, 0xab, 0x32, 0x1f, 0x6f, 0xab, 0x36, 0x35, 0xac, 0xee, 0x8a, 0xda, - 0x51, 0x69, 0x71, 0x84, 0xdb, 0x54, 0xdc, 0xdf, 0x2b, 0x9d, 0xc4, 0x29, 0x74, 0x9c, 0x2a, 0x25, - 0x7f, 0x9c, 0x87, 0xa9, 0xd8, 0x1e, 0x40, 0x1b, 0x30, 0xdb, 0x74, 0x13, 0xe6, 0x9a, 0xd3, 0xd9, - 0x24, 0x56, 0xbd, 0xb9, 0x4d, 0x5a, 0x8e, 0x46, 0x5a, 0x7c, 0xa1, 0xe4, 0xab, 0xf3, 0xc2, 0xe2, - 0xd9, 0xc5, 0x54, 0x2e, 0x9c, 0x21, 0xcd, 0xa2, 0xa0, 0xf3, 0xa1, 0x55, 0xd5, 0xb6, 0x7d, 0xcc, - 0x21, 0x8e, 0xe9, 0x47, 0x61, 0x2d, 0xc1, 0x81, 0x53, 0xa4, 0x98, 0x8d, 0x2d, 0x62, 0xab, 0x16, - 0x69, 0xc5, 0x6d, 0xcc, 0x45, 0x6d, 0x5c, 0x4a, 0xe5, 0xc2, 0x19, 0xd2, 0xe8, 0x2a, 0x8c, 0xbb, - 0xda, 0xf8, 0xfc, 0x89, 0x89, 0xf6, 0x53, 0xf4, 0x5a, 0x40, 0xc2, 0x61, 0x3e, 0xe6, 0x9a, 0xb1, - 0x69, 0x13, 0x6b, 0x97, 0xb4, 0xb2, 0x27, 0xf8, 0x4e, 0x82, 0x03, 0xa7, 0x48, 0x31, 0xd7, 0xdc, - 0x15, 0x98, 0x70, 0x6d, 0x24, 0xea, 0xda, 0x7a, 0x2a, 0x17, 0xce, 0x90, 0x66, 0xeb, 0xd8, 0x35, - 0x79, 0x61, 0x57, 0x51, 0x35, 0x65, 0x53, 0x23, 0xc5, 0xd1, 0xe8, 0x3a, 0x5e, 0x8b, 0x92, 0x71, - 0x9c, 0x1f, 0xdd, 0x82, 0x69, 0x77, 0x68, 0x5d, 0x57, 0x7c, 0x90, 0x02, 0x07, 0x79, 0x56, 0x80, - 0x4c, 0xaf, 0xc5, 0x19, 0x70, 0x52, 0x06, 0xbd, 0x0e, 0x93, 0x4d, 0x43, 0xd3, 0xf8, 0x7a, 0x5c, - 0x34, 0x1c, 0x9d, 0x16, 0xc7, 0x38, 0x0a, 0x62, 0xfb, 0x71, 0x31, 0x42, 0xc1, 0x31, 0x4e, 0xf9, - 0x0f, 0x12, 0x9c, 0xca, 0xd8, 0xd3, 0xe8, 0xff, 0x60, 0x98, 0x76, 0x4d, 0xef, 0xb4, 0xfe, 0x6f, - 0xef, 0x80, 0x68, 0x74, 0x4d, 0xf2, 0x78, 0xaf, 0x74, 0x3a, 0x43, 0x8c, 0x91, 0x31, 0x17, 0x44, - 0x3a, 0x4c, 0x58, 0x4c, 0x9d, 0xde, 0x76, 0x59, 0x44, 0xf2, 0xba, 0xda, 0x23, 0xc7, 0xe0, 0xb0, - 0x4c, 0x90, 0x8c, 0xa7, 0xf7, 0xf7, 0x4a, 0x13, 0x11, 0x1a, 0x8e, 0xc2, 0xcb, 0x1f, 0x0e, 0x01, - 0x2c, 0x11, 0x53, 0x33, 0xba, 0x1d, 0xa2, 0x1f, 0xc5, 0x81, 0x7b, 0x27, 0x72, 0xe0, 0x5e, 0xea, - 0x95, 0x3b, 0x7d, 0xd3, 0x32, 0x4f, 0xdc, 0xb7, 0x62, 0x27, 0x6e, 0xa5, 0x7f, 0xc8, 0x83, 0x8f, - 0xdc, 0xbf, 0xe4, 0x60, 0x26, 0x60, 0x5e, 0x34, 0xf4, 0x96, 0xca, 0xf7, 0xc7, 0xf5, 0xc8, 0x1c, - 0xff, 0x57, 0x6c, 0x8e, 0x4f, 0xa5, 0x88, 0x84, 0xe6, 0x77, 0xc5, 0xb7, 0x76, 0x88, 0x8b, 0xbf, - 0x12, 0x55, 0xfe, 0x78, 0xaf, 0x94, 0x72, 0x59, 0x29, 0xfb, 0x48, 0x51, 0x13, 0xd1, 0x39, 0x18, - 0xb1, 0x88, 0x62, 0x1b, 0x3a, 0x4f, 0x14, 0x63, 0x81, 0x2b, 0x98, 0x8f, 0x62, 0x41, 0x45, 0x17, - 0x60, 0xb4, 0x43, 0x6c, 0x5b, 0x69, 0x13, 0x9e, 0x13, 0xc6, 0xaa, 0x53, 0x82, 0x71, 0x74, 0xd5, - 0x1d, 0xc6, 0x1e, 0x1d, 0x3d, 0x80, 0x49, 0x4d, 0xb1, 0xc5, 0x02, 0x6d, 0xa8, 0x1d, 0xc2, 0x77, - 0xfd, 0xf8, 0x95, 0x17, 0xfb, 0x5b, 0x07, 0x4c, 0x22, 0x38, 0xd9, 0x56, 0x22, 0x48, 0x38, 0x86, - 0x8c, 0x76, 0x01, 0xb1, 0x91, 0x86, 0xa5, 0xe8, 0xb6, 0x1b, 0x28, 0xa6, 0x6f, 0x74, 0x60, 0x7d, - 0x7e, 0x86, 0x5b, 0x49, 0xa0, 0xe1, 0x14, 0x0d, 0xf2, 0x6f, 0x24, 0x98, 0x0c, 0xa6, 0xe9, 0x08, - 0xaa, 0xa9, 0xb5, 0x68, 0x35, 0x75, 0xa1, 0xef, 0x25, 0x9a, 0x51, 0x4e, 0xfd, 0x63, 0x08, 0x50, - 0xc0, 0xc4, 0x36, 0xf8, 0xa6, 0xd2, 0xdc, 0xe9, 0xe3, 0xae, 0xf0, 0x81, 0x04, 0x48, 0xa4, 0xe7, - 0x05, 0x5d, 0x37, 0x28, 0xcf, 0xf8, 0x9e, 0x59, 0xcb, 0x7d, 0x9b, 0xe5, 0x69, 0x2c, 0xaf, 0x27, - 0xb0, 0x6e, 0xe8, 0xd4, 0xea, 0x06, 0x33, 0x92, 0x64, 0xc0, 0x29, 0x06, 0x20, 0x05, 0xc0, 0x12, - 0x98, 0x0d, 0x43, 0x6c, 0xe4, 0x4b, 0x7d, 0xe4, 0x3c, 0x26, 0xb0, 0x68, 0xe8, 0x5b, 0x6a, 0x3b, - 0x48, 0x3b, 0xd8, 0x07, 0xc2, 0x21, 0xd0, 0xb9, 0x1b, 0x70, 0x2a, 0xc3, 0x5a, 0x74, 0x02, 0x72, - 0x3b, 0xa4, 0xeb, 0x86, 0x0d, 0xb3, 0x3f, 0xd1, 0xc9, 0xf0, 0x9d, 0x6a, 0x4c, 0x5c, 0x87, 0x5e, - 0x1f, 0xba, 0x26, 0xc9, 0x9f, 0xe4, 0xc3, 0x6b, 0x87, 0x97, 0xb2, 0xe7, 0xa1, 0x60, 0x11, 0x53, - 0x53, 0x9b, 0x8a, 0x2d, 0x2a, 0x14, 0x5e, 0x95, 0x62, 0x31, 0x86, 0x7d, 0x6a, 0xa4, 0xe8, 0x1d, - 0x7a, 0xba, 0x45, 0x6f, 0xee, 0xc9, 0x14, 0xbd, 0xdf, 0x82, 0x82, 0xed, 0x95, 0xbb, 0xc3, 0x1c, - 0xf2, 0xf2, 0x00, 0xf9, 0x55, 0x54, 0xba, 0xbe, 0x02, 0xbf, 0xc6, 0xf5, 0x41, 0xd3, 0xaa, 0xdb, - 0xfc, 0x80, 0xd5, 0xed, 0x13, 0xad, 0x48, 0x59, 0x4e, 0x35, 0x15, 0xc7, 0x26, 0x2d, 0x9e, 0x88, - 0x0a, 0x41, 0x4e, 0xad, 0xf1, 0x51, 0x2c, 0xa8, 0xe8, 0x7e, 0x64, 0xc9, 0x16, 0x0e, 0xb3, 0x64, - 0x27, 0xb3, 0x97, 0x2b, 0x5a, 0x87, 0x53, 0xa6, 0x65, 0xb4, 0x2d, 0x62, 0xdb, 0x4b, 0x44, 0x69, - 0x69, 0xaa, 0x4e, 0xbc, 0xf8, 0xb8, 0xa5, 0xca, 0xe9, 0xfd, 0xbd, 0xd2, 0xa9, 0x5a, 0x3a, 0x0b, - 0xce, 0x92, 0x95, 0x1f, 0x0d, 0xc3, 0x89, 0xf8, 0x09, 0x98, 0x51, 0x3d, 0x4a, 0x87, 0xaa, 0x1e, - 0x2f, 0x86, 0x36, 0x83, 0x5b, 0x5a, 0xfb, 0xb3, 0x9f, 0xb2, 0x21, 0x16, 0x60, 0x4a, 0x64, 0x03, - 0x8f, 0x28, 0xea, 0x67, 0x7f, 0xf6, 0xd7, 0xa3, 0x64, 0x1c, 0xe7, 0x67, 0x35, 0x61, 0x50, 0xea, - 0x79, 0x20, 0xc3, 0xd1, 0x9a, 0x70, 0x21, 0xce, 0x80, 0x93, 0x32, 0x68, 0x15, 0x66, 0x1c, 0x3d, - 0x09, 0xe5, 0xae, 0xc6, 0xd3, 0x02, 0x6a, 0x66, 0x3d, 0xc9, 0x82, 0xd3, 0xe4, 0xd0, 0x16, 0x40, - 0xd3, 0x3b, 0xb6, 0xed, 0xe2, 0x08, 0xcf, 0xb0, 0x57, 0xfa, 0xde, 0x3b, 0xfe, 0x89, 0x1f, 0xe4, - 0x35, 0x7f, 0xc8, 0xc6, 0x21, 0x64, 0x74, 0x1d, 0x26, 0x2c, 0x7e, 0x21, 0xf0, 0x0c, 0x76, 0x8b, - 0xea, 0x67, 0x84, 0xd8, 0x04, 0x0e, 0x13, 0x71, 0x94, 0x37, 0xa5, 0x0e, 0x2e, 0xf4, 0x5d, 0x07, - 0xff, 0x56, 0x0a, 0x1f, 0x42, 0x7e, 0x09, 0xfc, 0x7a, 0xa4, 0x3c, 0x3a, 0x17, 0x2b, 0x8f, 0x66, - 0x93, 0x12, 0xa1, 0xea, 0xc8, 0x48, 0xaf, 0x7e, 0x5f, 0x1d, 0xa8, 0xfa, 0x0d, 0x0e, 0xcf, 0xde, - 0xe5, 0xef, 0x47, 0x12, 0xcc, 0xde, 0xac, 0xdf, 0xb2, 0x0c, 0xc7, 0xf4, 0xcc, 0xb9, 0x63, 0xba, - 0x71, 0x7d, 0x0d, 0x86, 0x2d, 0x47, 0xf3, 0xfc, 0x78, 0xc1, 0xf3, 0x03, 0x3b, 0x1a, 0xf3, 0x63, - 0x26, 0x26, 0xe5, 0x3a, 0xc1, 0x04, 0xd0, 0x1a, 0x8c, 0x58, 0x8a, 0xde, 0x26, 0xde, 0xb1, 0x7a, - 0xae, 0x87, 0xf5, 0xcb, 0x4b, 0x98, 0xb1, 0x87, 0x8a, 0x37, 0x2e, 0x8d, 0x05, 0x8a, 0xfc, 0x7d, - 0x09, 0xa6, 0x6e, 0x37, 0x1a, 0xb5, 0x65, 0x9d, 0xef, 0xe8, 0x9a, 0x42, 0xb7, 0xd9, 0x49, 0x6f, - 0x2a, 0x74, 0x3b, 0x7e, 0xd2, 0x33, 0x1a, 0xe6, 0x14, 0xf4, 0x75, 0x18, 0x65, 0x99, 0x84, 0xe8, - 0xad, 0x3e, 0x4b, 0x6d, 0x01, 0x5f, 0x75, 0x85, 0x82, 0x0a, 0x51, 0x0c, 0x60, 0x0f, 0x4e, 0xde, - 0x81, 0x93, 0x21, 0x73, 0x58, 0x3c, 0xf8, 0x9b, 0x21, 0xaa, 0x43, 0x9e, 0x69, 0xf6, 0x9e, 0x04, - 0x7b, 0xbd, 0x7c, 0xc5, 0x5c, 0x0a, 0x2a, 0x1d, 0xf6, 0xcb, 0xc6, 0x2e, 0x96, 0xbc, 0x0a, 0x13, - 0xb7, 0x0d, 0x9b, 0xd6, 0x0c, 0x8b, 0xf2, 0xb0, 0xa0, 0x33, 0x90, 0xeb, 0xa8, 0xba, 0x38, 0x67, - 0xc7, 0x85, 0x4c, 0x8e, 0x9d, 0x11, 0x6c, 0x9c, 0x93, 0x95, 0x87, 0x22, 0xf3, 0x04, 0x64, 0xe5, - 0x21, 0x66, 0xe3, 0xf2, 0x2d, 0x18, 0x15, 0xe1, 0x0e, 0x03, 0xe5, 0x0e, 0x06, 0xca, 0xa5, 0x00, - 0xfd, 0x60, 0x08, 0x46, 0x85, 0xf5, 0x47, 0x70, 0x69, 0x5a, 0x89, 0x5c, 0x9a, 0x5e, 0xec, 0x6f, - 0x26, 0x33, 0x6f, 0x4c, 0x8d, 0xd8, 0x8d, 0xe9, 0x62, 0x9f, 0x78, 0x07, 0x5f, 0x97, 0x3e, 0x96, - 0x60, 0x32, 0xba, 0x86, 0xd0, 0x55, 0x18, 0x67, 0xe7, 0x83, 0xda, 0x24, 0x6b, 0x41, 0x59, 0xea, - 0x3f, 0x66, 0xd4, 0x03, 0x12, 0x0e, 0xf3, 0xa1, 0xb6, 0x2f, 0xc6, 0xa6, 0x5d, 0x38, 0x9d, 0x1d, - 0x52, 0x87, 0xaa, 0x5a, 0xd9, 0x6d, 0x50, 0x94, 0x97, 0x75, 0x7a, 0xc7, 0xaa, 0x53, 0x4b, 0xd5, - 0xdb, 0x09, 0x45, 0x7c, 0x0d, 0x85, 0x91, 0xe5, 0x5f, 0x4b, 0x30, 0x2e, 0x4c, 0x3e, 0x82, 0x4b, - 0xc0, 0xd7, 0xa2, 0x97, 0x80, 0x73, 0x7d, 0xee, 0xc7, 0xf4, 0x1b, 0xc0, 0xcf, 0x02, 0xd3, 0xd9, - 0x0e, 0x64, 0x09, 0x61, 0xdb, 0xb0, 0x69, 0x3c, 0x21, 0xb0, 0xbd, 0x83, 0x39, 0x05, 0x39, 0x70, - 0x42, 0x8d, 0x6d, 0x59, 0x11, 0xda, 0x4a, 0x7f, 0x96, 0xf8, 0x62, 0xd5, 0xa2, 0x80, 0x3f, 0x11, - 0xa7, 0xe0, 0x84, 0x0a, 0x99, 0x40, 0x82, 0x0b, 0xdd, 0x85, 0xe1, 0x6d, 0x4a, 0xcd, 0x94, 0x77, - 0xdf, 0x1e, 0x89, 0x22, 0x30, 0xa1, 0xc0, 0xbd, 0x6b, 0x34, 0x6a, 0x98, 0x43, 0xc9, 0xff, 0x0c, - 0xe2, 0x51, 0x77, 0xd7, 0xb8, 0x9f, 0xfe, 0xa4, 0xc3, 0xa4, 0xbf, 0xf1, 0xb4, 0xd4, 0x87, 0x6e, - 0x43, 0x8e, 0x6a, 0xfd, 0xde, 0xe2, 0x04, 0x62, 0x63, 0xa5, 0x1e, 0xe4, 0x8f, 0xc6, 0x4a, 0x1d, - 0x33, 0x08, 0x74, 0x07, 0xf2, 0xec, 0xb0, 0x60, 0x5b, 0x30, 0xd7, 0xff, 0x96, 0x66, 0xfe, 0x07, - 0x0b, 0x82, 0xfd, 0xb2, 0xb1, 0x8b, 0x23, 0xbf, 0x0b, 0x13, 0x91, 0x7d, 0x8a, 0xde, 0x81, 0xe3, - 0x9a, 0xa1, 0xb4, 0xaa, 0x8a, 0xa6, 0xe8, 0x4d, 0xe2, 0x3d, 0xb2, 0x9f, 0x4b, 0xbb, 0x10, 0xac, - 0x84, 0xf8, 0xc4, 0x2e, 0xf7, 0x5b, 0x65, 0x61, 0x1a, 0x8e, 0x20, 0xca, 0x0a, 0x40, 0xe0, 0x23, - 0x2a, 0x41, 0x9e, 0xad, 0x33, 0x37, 0xfd, 0x8f, 0x55, 0xc7, 0x98, 0x85, 0x6c, 0xf9, 0xd9, 0xd8, - 0x1d, 0x47, 0x57, 0x00, 0x6c, 0xd2, 0xb4, 0x08, 0xe5, 0xc9, 0xc0, 0x7d, 0xfe, 0xf0, 0xd3, 0x5e, - 0xdd, 0xa7, 0xe0, 0x10, 0x97, 0xfc, 0x7b, 0x09, 0x26, 0xd6, 0x08, 0x7d, 0xcf, 0xb0, 0x76, 0x6a, - 0xbc, 0x29, 0x7b, 0x04, 0xc9, 0x16, 0x47, 0x92, 0xed, 0x4b, 0x3d, 0x66, 0x26, 0x62, 0x5d, 0x56, - 0xca, 0x65, 0x7e, 0x14, 0x23, 0x9c, 0xe1, 0xbd, 0xbb, 0x0e, 0x79, 0xd3, 0xb0, 0xa8, 0x77, 0x70, - 0x0e, 0xa4, 0x91, 0xe5, 0xb1, 0xd0, 0xd1, 0xc9, 0x60, 0xb0, 0x8b, 0xc6, 0xfc, 0xd8, 0xb2, 0x8c, - 0x8e, 0x58, 0xad, 0x83, 0xa1, 0x12, 0x62, 0x05, 0x7e, 0xdc, 0xb4, 0x8c, 0x0e, 0xe6, 0x58, 0xf2, - 0xef, 0x24, 0x98, 0x8e, 0x70, 0x1e, 0x41, 0xde, 0xbc, 0x1b, 0xcd, 0x9b, 0x17, 0x07, 0x71, 0x24, - 0x23, 0x7b, 0xfe, 0x3d, 0xee, 0x06, 0x73, 0x18, 0x6d, 0xc1, 0xb8, 0x69, 0xb4, 0xea, 0x4f, 0xa0, - 0x2b, 0x35, 0xc5, 0x8e, 0x9d, 0x5a, 0x80, 0x85, 0xc3, 0xc0, 0xe8, 0x21, 0x4c, 0xeb, 0x4a, 0x87, - 0xd8, 0xa6, 0xd2, 0x24, 0xf5, 0x27, 0xf0, 0x1c, 0xf0, 0x0c, 0x7f, 0xf6, 0x8e, 0x23, 0xe2, 0xa4, - 0x12, 0xf9, 0xe7, 0x09, 0xbf, 0x0d, 0x8b, 0xa2, 0x5b, 0x50, 0xe0, 0xed, 0xfc, 0xa6, 0xa1, 0x79, - 0x0f, 0xd7, 0x6c, 0x2a, 0x6a, 0x62, 0xec, 0xf1, 0x5e, 0xe9, 0x74, 0xca, 0x9b, 0xa4, 0x47, 0xc6, - 0xbe, 0x30, 0x5a, 0x83, 0x61, 0xf3, 0xab, 0x9c, 0xd8, 0x3c, 0xa9, 0xf3, 0x63, 0x9a, 0xe3, 0xc8, - 0x5f, 0xc6, 0xcd, 0xe5, 0xa9, 0xfd, 0xc1, 0x13, 0x9b, 0x26, 0xbf, 0x42, 0xc8, 0x9c, 0xaa, 0x4d, - 0x18, 0x15, 0x27, 0x9a, 0x58, 0x7d, 0xaf, 0x0d, 0xb2, 0xfa, 0xc2, 0x59, 0xdb, 0xaf, 0xa7, 0xbd, - 0x41, 0x0f, 0x58, 0xfe, 0xa3, 0x04, 0xd3, 0xdc, 0x80, 0xa6, 0x63, 0xa9, 0xb4, 0x7b, 0x64, 0x79, - 0x6e, 0x23, 0x92, 0xe7, 0x5e, 0xe9, 0xe1, 0x58, 0xc2, 0xc2, 0xcc, 0x5c, 0xf7, 0xa9, 0x04, 0xcf, - 0x24, 0xb8, 0x8f, 0x20, 0x4f, 0xac, 0x47, 0xf3, 0xc4, 0x4b, 0x83, 0x3a, 0x94, 0x55, 0x69, 0x8d, - 0xa7, 0xb8, 0xc3, 0x17, 0xe2, 0x15, 0x00, 0xd3, 0x52, 0x77, 0x55, 0x8d, 0xb4, 0x45, 0x6f, 0xb2, - 0x10, 0x84, 0xbc, 0xe6, 0x53, 0x70, 0x88, 0x0b, 0xd9, 0x30, 0xdb, 0x22, 0x5b, 0x8a, 0xa3, 0xd1, - 0x85, 0x56, 0x6b, 0x51, 0x31, 0x95, 0x4d, 0x55, 0x53, 0xa9, 0x2a, 0x2e, 0x8b, 0x63, 0xd5, 0xeb, - 0x6e, 0xcf, 0x30, 0x8d, 0xe3, 0xf1, 0x5e, 0xe9, 0x4c, 0x5a, 0x6f, 0xc0, 0x63, 0xe9, 0xe2, 0x0c, - 0x68, 0xd4, 0x85, 0xa2, 0x45, 0xde, 0x75, 0x54, 0x8b, 0xb4, 0x96, 0x2c, 0xc3, 0x8c, 0xa8, 0xcd, - 0x71, 0xb5, 0xff, 0xbb, 0xbf, 0x57, 0x2a, 0xe2, 0x0c, 0x9e, 0xde, 0x8a, 0x33, 0xe1, 0xd1, 0x03, - 0x98, 0x51, 0x34, 0xcd, 0x78, 0x8f, 0x44, 0x9d, 0x1d, 0xe6, 0x5a, 0xaf, 0xed, 0xef, 0x95, 0x66, - 0x16, 0x92, 0xe4, 0xde, 0x0a, 0xd3, 0x40, 0x51, 0x05, 0x46, 0x77, 0x0d, 0xcd, 0xe9, 0x10, 0xbb, - 0x98, 0xe7, 0xf8, 0x2c, 0x31, 0x8e, 0x6e, 0xb8, 0x43, 0x8f, 0xf7, 0x4a, 0x23, 0x37, 0xeb, 0xfc, - 0x9a, 0xee, 0x71, 0xb1, 0xfb, 0x09, 0x2b, 0x4d, 0xc4, 0x9e, 0xe5, 0xef, 0x85, 0x85, 0x20, 0x29, - 0xdc, 0x0e, 0x48, 0x38, 0xcc, 0x87, 0xee, 0xc3, 0xd8, 0xb6, 0xb8, 0x93, 0xda, 0xc5, 0xd1, 0xbe, - 0x0e, 0xa5, 0xc8, 0x1d, 0xb6, 0x3a, 0x2d, 0x54, 0x8c, 0x79, 0xc3, 0x36, 0x0e, 0x10, 0xd1, 0x05, - 0x18, 0xe5, 0x3f, 0x96, 0x97, 0xf8, 0x63, 0x4c, 0x21, 0x48, 0x1d, 0xb7, 0xdd, 0x61, 0xec, 0xd1, - 0x3d, 0xd6, 0xe5, 0xda, 0x22, 0x7f, 0x14, 0x8c, 0xb1, 0x2e, 0xd7, 0x16, 0xb1, 0x47, 0x47, 0xef, - 0xc0, 0xa8, 0x4d, 0x56, 0x54, 0xdd, 0x79, 0x58, 0x84, 0xbe, 0x5a, 0x8a, 0xf5, 0x1b, 0x9c, 0x3b, - 0xf6, 0x2c, 0x12, 0x68, 0x10, 0x74, 0xec, 0xc1, 0xa2, 0x6d, 0x18, 0xb3, 0x1c, 0x7d, 0xc1, 0x5e, - 0xb7, 0x89, 0x55, 0x1c, 0xe7, 0x3a, 0x7a, 0x65, 0x4b, 0xec, 0xf1, 0xc7, 0xb5, 0xf8, 0x11, 0xf2, - 0x39, 0x70, 0x00, 0x8e, 0xbe, 0x27, 0x01, 0xb2, 0x1d, 0xd3, 0xd4, 0x48, 0x87, 0xe8, 0x54, 0xd1, - 0xf8, 0x4b, 0x8c, 0x5d, 0x3c, 0xce, 0x75, 0xfe, 0x7f, 0x2f, 0xbf, 0x12, 0x82, 0x71, 0xe5, 0xfe, - 0x93, 0x67, 0x92, 0x15, 0xa7, 0xe8, 0x65, 0xa1, 0xdd, 0xb2, 0xf9, 0xdf, 0xc5, 0x89, 0xbe, 0x42, - 0x9b, 0xfe, 0xe2, 0x14, 0x84, 0x56, 0xd0, 0xb1, 0x07, 0x8b, 0x36, 0x60, 0xd6, 0x22, 0x4a, 0xeb, - 0x8e, 0xae, 0x75, 0xb1, 0x61, 0xd0, 0x9b, 0xaa, 0x46, 0xec, 0xae, 0x4d, 0x49, 0xa7, 0x38, 0xc9, - 0xa7, 0xdd, 0x6f, 0xc9, 0xe3, 0x54, 0x2e, 0x9c, 0x21, 0x8d, 0x3a, 0x50, 0xf2, 0x52, 0x06, 0xdb, - 0x4f, 0x7e, 0xce, 0xba, 0x61, 0x37, 0x15, 0xcd, 0x7d, 0x05, 0x9e, 0xe2, 0x0a, 0x5e, 0xd8, 0xdf, - 0x2b, 0x95, 0x96, 0x0e, 0x66, 0xc5, 0xbd, 0xb0, 0xd0, 0xdb, 0x50, 0x54, 0xb2, 0xf4, 0x9c, 0xe0, - 0x7a, 0xce, 0x0a, 0x47, 0x8a, 0x99, 0x4a, 0x32, 0x11, 0x78, 0x2b, 0x5b, 0x3c, 0x6c, 0x1e, 0xcd, - 0xb7, 0x63, 0x83, 0xb5, 0xb2, 0x03, 0xd3, 0x9e, 0x58, 0x2b, 0x3b, 0x04, 0x79, 0xf0, 0xdb, 0xcc, - 0xdf, 0x86, 0x60, 0x26, 0x60, 0xee, 0xbb, 0x95, 0x9d, 0x22, 0xf2, 0xd4, 0x5a, 0xd9, 0xe9, 0xbd, - 0xe0, 0xdc, 0xd3, 0xee, 0x05, 0x3f, 0x85, 0x16, 0x3a, 0x6f, 0x2f, 0x07, 0xa1, 0xfb, 0xf7, 0x6b, - 0x2f, 0x07, 0xb6, 0x65, 0x94, 0x3c, 0xbf, 0x1c, 0x0a, 0x3b, 0xf0, 0x1f, 0xdf, 0xe3, 0xfc, 0xea, - 0x1f, 0xd8, 0xc9, 0x9f, 0xe6, 0xe0, 0x44, 0x7c, 0x37, 0x46, 0x5a, 0x61, 0x52, 0xcf, 0x56, 0x58, - 0x0d, 0x4e, 0x6e, 0x39, 0x9a, 0xd6, 0xe5, 0x61, 0x08, 0xf5, 0xc3, 0xdc, 0xa7, 0xec, 0xe7, 0x84, - 0xe4, 0xc9, 0x9b, 0x29, 0x3c, 0x38, 0x55, 0x32, 0xa3, 0xad, 0x97, 0x3b, 0x54, 0x5b, 0x2f, 0xd1, - 0x65, 0x1a, 0x1e, 0xa0, 0xcb, 0x94, 0xda, 0xa2, 0xcb, 0x1f, 0xa2, 0x45, 0x77, 0x98, 0x9e, 0x5a, - 0x4a, 0x12, 0xeb, 0xd5, 0x53, 0x93, 0x9f, 0x83, 0x39, 0x21, 0x46, 0x79, 0xbb, 0x4b, 0xa7, 0x96, - 0xa1, 0x69, 0xc4, 0x5a, 0x72, 0x3a, 0x9d, 0xae, 0xfc, 0x06, 0x4c, 0x46, 0x1b, 0xb9, 0xee, 0x4c, - 0xbb, 0xbd, 0x64, 0xd1, 0x50, 0x08, 0xcd, 0xb4, 0x3b, 0x8e, 0x7d, 0x0e, 0xf9, 0x7d, 0x09, 0x66, - 0xd3, 0x3f, 0xd8, 0x42, 0x1a, 0x4c, 0x76, 0x94, 0x87, 0xe1, 0xaf, 0xdb, 0xa4, 0x43, 0xde, 0xa5, - 0x79, 0x07, 0x6f, 0x35, 0x82, 0x85, 0x63, 0xd8, 0xec, 0x7e, 0x7d, 0x2a, 0xa3, 0x77, 0x76, 0xb4, - 0x96, 0xa0, 0x7b, 0x50, 0xe8, 0x28, 0x0f, 0xeb, 0x8e, 0xd5, 0x26, 0x87, 0x7e, 0x3d, 0xe0, 0x19, - 0x63, 0x55, 0xa0, 0x60, 0x1f, 0x4f, 0xfe, 0x48, 0x82, 0x62, 0x56, 0xa1, 0x89, 0xae, 0x46, 0xba, - 0x7c, 0xcf, 0xc7, 0xba, 0x7c, 0xd3, 0x09, 0xb9, 0xa7, 0xd4, 0xe3, 0xfb, 0x85, 0x04, 0xb3, 0xe9, - 0x05, 0x37, 0x7a, 0x39, 0x62, 0x61, 0x29, 0x66, 0xe1, 0x54, 0x4c, 0x4a, 0xd8, 0xf7, 0x4d, 0x98, - 0x14, 0x65, 0xb9, 0x80, 0x11, 0x51, 0x95, 0xd3, 0x72, 0xa5, 0x80, 0xf0, 0xca, 0x50, 0x3e, 0x5f, - 0xd1, 0x31, 0x1c, 0x43, 0x93, 0xbf, 0x3b, 0x04, 0xf9, 0x7a, 0x53, 0xd1, 0xc8, 0x11, 0x94, 0x59, - 0x6f, 0x46, 0xca, 0xac, 0x5e, 0x5f, 0xa2, 0x73, 0xab, 0x32, 0x2b, 0x2c, 0x1c, 0xab, 0xb0, 0x5e, - 0xec, 0x0b, 0xed, 0xe0, 0xe2, 0xea, 0x7f, 0x60, 0xcc, 0x57, 0x3a, 0x58, 0xce, 0x97, 0x7f, 0x3a, - 0x04, 0xe3, 0x21, 0x15, 0x03, 0x9e, 0x18, 0x5b, 0x91, 0x93, 0xb6, 0x9f, 0xff, 0x49, 0x09, 0xe9, - 0x2a, 0x7b, 0x67, 0xab, 0xfb, 0xc1, 0x56, 0xf0, 0x89, 0x4e, 0xf2, 0xc8, 0x7d, 0x03, 0x26, 0x29, - 0xff, 0x9f, 0x0d, 0xff, 0xcd, 0x2d, 0xc7, 0xd7, 0xa2, 0xff, 0x99, 0x5f, 0x23, 0x42, 0xc5, 0x31, - 0xee, 0xb9, 0xeb, 0x30, 0x11, 0x51, 0x36, 0xd0, 0xf7, 0x56, 0xbf, 0x92, 0xe0, 0xf9, 0x9e, 0x57, - 0x36, 0x54, 0x8d, 0x6c, 0x92, 0x72, 0x6c, 0x93, 0xcc, 0x67, 0x03, 0x3c, 0xc5, 0xbe, 0xfd, 0xfb, - 0x43, 0x80, 0x1a, 0xdb, 0xaa, 0xd5, 0xaa, 0x29, 0x16, 0xed, 0x62, 0xf1, 0x8f, 0x37, 0x47, 0xb0, - 0x61, 0xae, 0xc2, 0x78, 0x8b, 0xd8, 0x4d, 0x4b, 0xe5, 0xc1, 0x11, 0xd5, 0xb9, 0xff, 0xac, 0xb1, - 0x14, 0x90, 0x70, 0x98, 0x0f, 0xbd, 0x05, 0x85, 0x5d, 0xf7, 0x3f, 0xb9, 0xbc, 0xae, 0x54, 0xaf, - 0x42, 0x32, 0xf8, 0xdf, 0xaf, 0x60, 0xfd, 0x88, 0x01, 0x1b, 0xfb, 0x60, 0xf2, 0x87, 0x12, 0xcc, - 0x26, 0x03, 0xb1, 0xc4, 0x4c, 0x7d, 0xfa, 0xc1, 0x78, 0x0e, 0x86, 0x39, 0x3a, 0x8b, 0xc2, 0x71, - 0xf7, 0x85, 0x99, 0x69, 0xc6, 0x7c, 0x54, 0xfe, 0xb3, 0x04, 0x73, 0xe9, 0xa6, 0x1d, 0x41, 0xd9, - 0x7e, 0x2f, 0x5a, 0xb6, 0xf7, 0x7a, 0x35, 0x48, 0xb7, 0x33, 0xa3, 0x84, 0xff, 0x53, 0x6a, 0xcc, - 0x8f, 0xc0, 0xa9, 0x8d, 0xa8, 0x53, 0x97, 0x07, 0x76, 0x2a, 0xdd, 0xa1, 0xea, 0xa5, 0x47, 0x5f, - 0xcc, 0x1f, 0xfb, 0xec, 0x8b, 0xf9, 0x63, 0x9f, 0x7f, 0x31, 0x7f, 0xec, 0x3b, 0xfb, 0xf3, 0xd2, - 0xa3, 0xfd, 0x79, 0xe9, 0xb3, 0xfd, 0x79, 0xe9, 0xf3, 0xfd, 0x79, 0xe9, 0xaf, 0xfb, 0xf3, 0xd2, - 0x0f, 0xbf, 0x9c, 0x3f, 0x76, 0x6f, 0x54, 0xe0, 0xfe, 0x2b, 0x00, 0x00, 0xff, 0xff, 0x9c, 0x87, - 0x28, 0xe6, 0x89, 0x3a, 0x00, 0x00, + // 3495 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xdc, 0x5b, 0xcd, 0x6f, 0x1b, 0xd7, + 0xb5, 0xf7, 0x90, 0xa2, 0x48, 0x1d, 0x5a, 0x92, 0x75, 0xe5, 0xc8, 0x8c, 0x1c, 0x8b, 0xce, 0x04, + 0xf0, 0xb3, 0xf3, 0x6c, 0x32, 0x76, 0xe2, 0xc4, 0x2f, 0xc6, 0xcb, 0x7b, 0xa2, 0xe4, 0x0f, 0xa5, + 0xfa, 0xa0, 0x2f, 0x29, 0xa5, 0x35, 0xe2, 0x36, 0x23, 0xf2, 0x8a, 0x1a, 0x6b, 0x38, 0x33, 0x99, + 0x0f, 0x45, 0xdc, 0x14, 0x5d, 0x05, 0x28, 0xd0, 0xa2, 0xed, 0x22, 0x45, 0xba, 0x6b, 0x36, 0x5d, + 0xb5, 0x68, 0x76, 0xed, 0x22, 0x28, 0x50, 0x20, 0x05, 0x8c, 0x22, 0x2d, 0xb2, 0x6a, 0xb3, 0x12, + 0x1a, 0x65, 0xd9, 0x7f, 0xa0, 0xf0, 0xa2, 0x28, 0xee, 0x9d, 0x3b, 0xdf, 0x33, 0x22, 0xa9, 0xd8, + 0x42, 0xd1, 0x9d, 0x78, 0xef, 0x39, 0xbf, 0xf3, 0x71, 0xef, 0x3d, 0xe7, 0xdc, 0x7b, 0x46, 0x70, + 0x7b, 0xe7, 0x86, 0x59, 0x91, 0xb5, 0xea, 0x8e, 0xbd, 0x49, 0x0c, 0x95, 0x58, 0xc4, 0xac, 0xee, + 0x12, 0xb5, 0xad, 0x19, 0x55, 0x3e, 0x21, 0xe9, 0x72, 0x95, 0xec, 0x59, 0x44, 0x35, 0x65, 0x4d, + 0x35, 0xab, 0xbb, 0x57, 0x37, 0x89, 0x25, 0x5d, 0xad, 0x76, 0x88, 0x4a, 0x0c, 0xc9, 0x22, 0xed, + 0x8a, 0x6e, 0x68, 0x96, 0x86, 0xce, 0x39, 0xe4, 0x15, 0x49, 0x97, 0x2b, 0x3e, 0x79, 0x85, 0x93, + 0xcf, 0x5e, 0xe9, 0xc8, 0xd6, 0xb6, 0xbd, 0x59, 0x69, 0x69, 0xdd, 0x6a, 0x47, 0xeb, 0x68, 0x55, + 0xc6, 0xb5, 0x69, 0x6f, 0xb1, 0x5f, 0xec, 0x07, 0xfb, 0xcb, 0x41, 0x9b, 0x15, 0x03, 0xc2, 0x5b, + 0x9a, 0x41, 0xaa, 0xbb, 0x31, 0x89, 0xb3, 0x97, 0x02, 0x34, 0xba, 0xa6, 0xc8, 0xad, 0x5e, 0x9a, + 0x72, 0xb3, 0xaf, 0xf8, 0xa4, 0x5d, 0xa9, 0xb5, 0x2d, 0xab, 0xc4, 0xe8, 0x55, 0xf5, 0x9d, 0x0e, + 0xe3, 0x35, 0x88, 0xa9, 0xd9, 0x46, 0x8b, 0x0c, 0xc5, 0x65, 0x56, 0xbb, 0xc4, 0x92, 0x92, 0xd4, + 0xaa, 0xa6, 0x71, 0x19, 0xb6, 0x6a, 0xc9, 0xdd, 0xb8, 0x98, 0x57, 0xfb, 0x31, 0x98, 0xad, 0x6d, + 0xd2, 0x95, 0x62, 0x7c, 0x2f, 0xa7, 0xf1, 0xd9, 0x96, 0xac, 0x54, 0x65, 0xd5, 0x32, 0x2d, 0x23, + 0xca, 0x24, 0x56, 0x00, 0xe6, 0xeb, 0x4b, 0x1b, 0xc4, 0xa0, 0xcb, 0x83, 0xce, 0xc3, 0x88, 0x2a, + 0x75, 0x49, 0x49, 0x38, 0x2f, 0x5c, 0x1c, 0xab, 0x9d, 0x7c, 0xb4, 0x5f, 0x3e, 0x71, 0xb0, 0x5f, + 0x1e, 0x59, 0x95, 0xba, 0x04, 0xb3, 0x19, 0xf1, 0x67, 0x02, 0x3c, 0xbb, 0x60, 0x9b, 0x96, 0xd6, + 0x5d, 0x21, 0x96, 0x21, 0xb7, 0x16, 0x6c, 0xc3, 0x20, 0xaa, 0xd5, 0xb0, 0x24, 0xcb, 0x36, 0xfb, + 0xf3, 0xa3, 0xfb, 0x90, 0xdb, 0x95, 0x14, 0x9b, 0x94, 0x32, 0xe7, 0x85, 0x8b, 0xc5, 0x6b, 0x95, + 0x8a, 0xbf, 0x4d, 0x3c, 0xa5, 0x2b, 0xfa, 0x4e, 0x87, 0xed, 0x1b, 0x77, 0x25, 0x2a, 0xf7, 0x6c, + 0x49, 0xb5, 0x64, 0xab, 0x57, 0x3b, 0xcd, 0x21, 0x4f, 0x72, 0xb9, 0x1b, 0x14, 0x0b, 0x3b, 0x90, + 0xe2, 0x77, 0xe1, 0x5c, 0xaa, 0x6a, 0xcb, 0xb2, 0x69, 0xa1, 0x07, 0x90, 0x93, 0x2d, 0xd2, 0x35, + 0x4b, 0xc2, 0xf9, 0xec, 0xc5, 0xe2, 0xb5, 0x1b, 0x95, 0x43, 0xf7, 0x68, 0x25, 0x15, 0xac, 0x36, + 0xce, 0xd5, 0xc8, 0x2d, 0x51, 0x38, 0xec, 0xa0, 0x8a, 0x3f, 0x11, 0x00, 0x05, 0x79, 0x9a, 0x92, + 0xd1, 0x21, 0xd6, 0x00, 0x4e, 0xf9, 0xd6, 0xd7, 0x73, 0xca, 0x34, 0x87, 0x2c, 0x3a, 0x02, 0x43, + 0x3e, 0xd1, 0x61, 0x26, 0xae, 0x12, 0x73, 0xc6, 0x46, 0xd8, 0x19, 0x57, 0x87, 0x70, 0x86, 0x83, + 0x92, 0xe2, 0x85, 0x0f, 0x32, 0x30, 0xb6, 0x28, 0x91, 0xae, 0xa6, 0x36, 0x88, 0x85, 0xde, 0x81, + 0x02, 0x3d, 0x18, 0x6d, 0xc9, 0x92, 0x98, 0x03, 0x8a, 0xd7, 0x5e, 0x3a, 0xcc, 0x3a, 0xb3, 0x42, + 0xa9, 0x2b, 0xbb, 0x57, 0x2b, 0x6b, 0x9b, 0x0f, 0x49, 0xcb, 0x5a, 0x21, 0x96, 0x54, 0x43, 0x5c, + 0x0e, 0xf8, 0x63, 0xd8, 0x43, 0x45, 0xab, 0x30, 0x62, 0xea, 0xa4, 0xc5, 0x7d, 0x77, 0xb9, 0x8f, + 0x19, 0x9e, 0x66, 0x0d, 0x9d, 0xb4, 0xfc, 0xc5, 0xa0, 0xbf, 0x30, 0xc3, 0x41, 0x1b, 0x30, 0x6a, + 0xb2, 0x55, 0x2e, 0x65, 0x63, 0xab, 0x71, 0x38, 0xa2, 0xb3, 0x37, 0x26, 0x38, 0xe6, 0xa8, 0xf3, + 0x1b, 0x73, 0x34, 0xf1, 0x13, 0x01, 0xc6, 0x3d, 0x5a, 0xb6, 0x02, 0x6f, 0xc7, 0x7c, 0x53, 0x19, + 0xcc, 0x37, 0x94, 0x9b, 0x79, 0xe6, 0x14, 0x97, 0x55, 0x70, 0x47, 0x02, 0x7e, 0x59, 0x71, 0xd7, + 0x37, 0xc3, 0xd6, 0xf7, 0xe2, 0xa0, 0x66, 0xa4, 0x2c, 0xeb, 0x4f, 0x47, 0x02, 0xea, 0x53, 0x77, + 0xa1, 0x07, 0x50, 0x30, 0x89, 0x42, 0x5a, 0x96, 0x66, 0x70, 0xf5, 0x5f, 0x1e, 0x50, 0x7d, 0x69, + 0x93, 0x28, 0x0d, 0xce, 0x5a, 0x3b, 0x49, 0xf5, 0x77, 0x7f, 0x61, 0x0f, 0x12, 0xdd, 0x83, 0x82, + 0x45, 0xba, 0xba, 0x22, 0x59, 0xee, 0xb9, 0x78, 0x21, 0x68, 0x02, 0xcd, 0x02, 0x14, 0xac, 0xae, + 0xb5, 0x9b, 0x9c, 0x8c, 0x2d, 0xa9, 0xe7, 0x12, 0x77, 0x14, 0x7b, 0x30, 0x68, 0x17, 0x26, 0x6c, + 0xbd, 0x4d, 0x29, 0x2d, 0x1a, 0x03, 0x3b, 0x3d, 0xbe, 0xc4, 0xaf, 0x0e, 0xea, 0x9b, 0xf5, 0x10, + 0x77, 0x6d, 0x86, 0xcb, 0x9a, 0x08, 0x8f, 0xe3, 0x88, 0x14, 0x34, 0x0f, 0x93, 0x5d, 0x59, 0xc5, + 0x44, 0x6a, 0xf7, 0x1a, 0xa4, 0xa5, 0xa9, 0x6d, 0xb3, 0x34, 0x72, 0x5e, 0xb8, 0x98, 0xab, 0x9d, + 0xe1, 0x00, 0x93, 0x2b, 0xe1, 0x69, 0x1c, 0xa5, 0x47, 0x6f, 0x02, 0x72, 0xcd, 0xb8, 0xe3, 0x84, + 0x70, 0x59, 0x53, 0x4b, 0xb9, 0xf3, 0xc2, 0xc5, 0x6c, 0x6d, 0x96, 0xa3, 0xa0, 0x66, 0x8c, 0x02, + 0x27, 0x70, 0xa1, 0x65, 0x38, 0x6d, 0x90, 0x5d, 0x99, 0xda, 0x78, 0x57, 0x36, 0x2d, 0xcd, 0xe8, + 0x2d, 0xcb, 0x5d, 0xd9, 0x2a, 0x8d, 0x32, 0x9d, 0x4a, 0x07, 0xfb, 0xe5, 0xd3, 0x38, 0x61, 0x1e, + 0x27, 0x72, 0x89, 0x1f, 0xe7, 0x60, 0x32, 0x72, 0x06, 0xd0, 0x06, 0xcc, 0xb4, 0x9c, 0x80, 0xb9, + 0x6a, 0x77, 0x37, 0x89, 0xd1, 0x68, 0x6d, 0x93, 0xb6, 0xad, 0x90, 0x36, 0xdb, 0x28, 0xb9, 0xda, + 0x1c, 0xd7, 0x78, 0x66, 0x21, 0x91, 0x0a, 0xa7, 0x70, 0x53, 0x2f, 0xa8, 0x6c, 0x68, 0x45, 0x36, + 0x4d, 0x0f, 0x33, 0xc3, 0x30, 0x3d, 0x2f, 0xac, 0xc6, 0x28, 0x70, 0x02, 0x17, 0xd5, 0xb1, 0x4d, + 0x4c, 0xd9, 0x20, 0xed, 0xa8, 0x8e, 0xd9, 0xb0, 0x8e, 0x8b, 0x89, 0x54, 0x38, 0x85, 0x1b, 0x5d, + 0x87, 0xa2, 0x23, 0x8d, 0xad, 0x1f, 0x5f, 0x68, 0x2f, 0x44, 0xaf, 0xfa, 0x53, 0x38, 0x48, 0x47, + 0x4d, 0xd3, 0x36, 0x4d, 0x62, 0xec, 0x92, 0x76, 0xfa, 0x02, 0xaf, 0xc5, 0x28, 0x70, 0x02, 0x17, + 0x35, 0xcd, 0xd9, 0x81, 0x31, 0xd3, 0x46, 0xc3, 0xa6, 0xad, 0x27, 0x52, 0xe1, 0x14, 0x6e, 0xba, + 0x8f, 0x1d, 0x95, 0xe7, 0x77, 0x25, 0x59, 0x91, 0x36, 0x15, 0x52, 0xca, 0x87, 0xf7, 0xf1, 0x6a, + 0x78, 0x1a, 0x47, 0xe9, 0xd1, 0x1d, 0x98, 0x72, 0x86, 0xd6, 0x55, 0xc9, 0x03, 0x29, 0x30, 0x90, + 0x67, 0x39, 0xc8, 0xd4, 0x6a, 0x94, 0x00, 0xc7, 0x79, 0xd0, 0xeb, 0x30, 0xd1, 0xd2, 0x14, 0x85, + 0xed, 0xc7, 0x05, 0xcd, 0x56, 0xad, 0xd2, 0x18, 0x43, 0x41, 0xf4, 0x3c, 0x2e, 0x84, 0x66, 0x70, + 0x84, 0x52, 0xfc, 0xa3, 0x00, 0x67, 0x52, 0xce, 0x34, 0xfa, 0x3f, 0x18, 0xb1, 0x7a, 0xba, 0x9b, + 0xad, 0xff, 0xdb, 0x4d, 0x10, 0xcd, 0x9e, 0x4e, 0x1e, 0xef, 0x97, 0xcf, 0xa6, 0xb0, 0xd1, 0x69, + 0xcc, 0x18, 0x91, 0x0a, 0xe3, 0x06, 0x15, 0xa7, 0x76, 0x1c, 0x12, 0x1e, 0xbc, 0xae, 0xf7, 0x89, + 0x31, 0x38, 0xc8, 0xe3, 0x07, 0xe3, 0xa9, 0x83, 0xfd, 0xf2, 0x78, 0x68, 0x0e, 0x87, 0xe1, 0xc5, + 0x0f, 0x33, 0x00, 0x8b, 0x44, 0x57, 0xb4, 0x5e, 0x97, 0xa8, 0xc7, 0x91, 0x70, 0xd7, 0x42, 0x09, + 0xf7, 0x4a, 0xbf, 0xd8, 0xe9, 0xa9, 0x96, 0x9a, 0x71, 0xdf, 0x8a, 0x64, 0xdc, 0xea, 0xe0, 0x90, + 0x87, 0xa7, 0xdc, 0xbf, 0x66, 0x61, 0xda, 0x27, 0x5e, 0xd0, 0xd4, 0xb6, 0xcc, 0xce, 0xc7, 0xcd, + 0xd0, 0x1a, 0xff, 0x57, 0x64, 0x8d, 0xcf, 0x24, 0xb0, 0x04, 0xd6, 0x77, 0xd9, 0xd3, 0x36, 0xc3, + 0xd8, 0x5f, 0x09, 0x0b, 0x7f, 0xbc, 0x5f, 0x4e, 0xb8, 0xac, 0x54, 0x3c, 0xa4, 0xb0, 0x8a, 0xe8, + 0x02, 0x8c, 0x1a, 0x44, 0x32, 0x35, 0x95, 0x05, 0x8a, 0x31, 0xdf, 0x14, 0xcc, 0x46, 0x31, 0x9f, + 0x45, 0x97, 0x20, 0xdf, 0x25, 0xa6, 0x29, 0x75, 0x08, 0x8b, 0x09, 0x63, 0xb5, 0x49, 0x4e, 0x98, + 0x5f, 0x71, 0x86, 0xb1, 0x3b, 0x8f, 0x1e, 0xc2, 0x84, 0x22, 0x99, 0x7c, 0x83, 0x36, 0xe5, 0x2e, + 0x61, 0xa7, 0xbe, 0x78, 0xed, 0xc5, 0xc1, 0xf6, 0x01, 0xe5, 0xf0, 0x33, 0xdb, 0x72, 0x08, 0x09, + 0x47, 0x90, 0xd1, 0x2e, 0x20, 0x3a, 0xd2, 0x34, 0x24, 0xd5, 0x74, 0x1c, 0x45, 0xe5, 0xe5, 0x87, + 0x96, 0xe7, 0x45, 0xb8, 0xe5, 0x18, 0x1a, 0x4e, 0x90, 0x20, 0xfe, 0x4e, 0x80, 0x09, 0x7f, 0x99, + 0x8e, 0xa1, 0x9a, 0x5a, 0x0d, 0x57, 0x53, 0x97, 0x06, 0xde, 0xa2, 0x29, 0xe5, 0xd4, 0x3f, 0x32, + 0x80, 0x7c, 0x22, 0x7a, 0xc0, 0x37, 0xa5, 0xd6, 0xce, 0x00, 0x77, 0x85, 0x0f, 0x04, 0x40, 0x3c, + 0x3c, 0xcf, 0xab, 0xaa, 0x66, 0xb1, 0x88, 0xef, 0xaa, 0xb5, 0x34, 0xb0, 0x5a, 0xae, 0xc4, 0xca, + 0x7a, 0x0c, 0xeb, 0x96, 0x6a, 0x19, 0x3d, 0x7f, 0x45, 0xe2, 0x04, 0x38, 0x41, 0x01, 0x24, 0x01, + 0x18, 0x1c, 0xb3, 0xa9, 0xf1, 0x83, 0x7c, 0x65, 0x80, 0x98, 0x47, 0x19, 0x16, 0x34, 0x75, 0x4b, + 0xee, 0xf8, 0x61, 0x07, 0x7b, 0x40, 0x38, 0x00, 0x3a, 0x7b, 0x0b, 0xce, 0xa4, 0x68, 0x8b, 0x4e, + 0x41, 0x76, 0x87, 0xf4, 0x1c, 0xb7, 0x61, 0xfa, 0x27, 0x3a, 0x1d, 0xbc, 0x53, 0x8d, 0xf1, 0xeb, + 0xd0, 0xeb, 0x99, 0x1b, 0x82, 0xf8, 0x49, 0x2e, 0xb8, 0x77, 0x58, 0x29, 0x7b, 0x11, 0x0a, 0x06, + 0xd1, 0x15, 0xb9, 0x25, 0x99, 0xbc, 0x42, 0x61, 0x55, 0x29, 0xe6, 0x63, 0xd8, 0x9b, 0x0d, 0x15, + 0xbd, 0x99, 0xa7, 0x5b, 0xf4, 0x66, 0x9f, 0x4c, 0xd1, 0xfb, 0x1d, 0x28, 0x98, 0x6e, 0xb9, 0x3b, + 0xc2, 0x20, 0xaf, 0x0e, 0x11, 0x5f, 0x79, 0xa5, 0xeb, 0x09, 0xf0, 0x6a, 0x5c, 0x0f, 0x34, 0xa9, + 0xba, 0xcd, 0x0d, 0x59, 0xdd, 0x3e, 0xd1, 0x8a, 0x94, 0xc6, 0x54, 0x5d, 0xb2, 0x4d, 0xd2, 0x66, + 0x81, 0xa8, 0xe0, 0xc7, 0xd4, 0x3a, 0x1b, 0xc5, 0x7c, 0x16, 0x3d, 0x08, 0x6d, 0xd9, 0xc2, 0x51, + 0xb6, 0xec, 0x44, 0xfa, 0x76, 0x45, 0xeb, 0x70, 0x46, 0x37, 0xb4, 0x8e, 0x41, 0x4c, 0x73, 0x91, + 0x48, 0x6d, 0x45, 0x56, 0x89, 0xeb, 0x1f, 0xa7, 0x54, 0x39, 0x7b, 0xb0, 0x5f, 0x3e, 0x53, 0x4f, + 0x26, 0xc1, 0x69, 0xbc, 0xe2, 0xa3, 0x11, 0x38, 0x15, 0xcd, 0x80, 0x29, 0xd5, 0xa3, 0x70, 0xa4, + 0xea, 0xf1, 0x72, 0xe0, 0x30, 0x38, 0xa5, 0xb5, 0xb7, 0xfa, 0x09, 0x07, 0x62, 0x1e, 0x26, 0x79, + 0x34, 0x70, 0x27, 0x79, 0xfd, 0xec, 0xad, 0xfe, 0x7a, 0x78, 0x1a, 0x47, 0xe9, 0x69, 0x4d, 0xe8, + 0x97, 0x7a, 0x2e, 0xc8, 0x48, 0xb8, 0x26, 0x9c, 0x8f, 0x12, 0xe0, 0x38, 0x0f, 0x5a, 0x81, 0x69, + 0x5b, 0x8d, 0x43, 0x39, 0xbb, 0xf1, 0x2c, 0x87, 0x9a, 0x5e, 0x8f, 0x93, 0xe0, 0x24, 0x3e, 0xb4, + 0x05, 0xd0, 0x72, 0xd3, 0xb6, 0x59, 0x1a, 0x65, 0x11, 0xf6, 0xda, 0xc0, 0x67, 0xc7, 0xcb, 0xf8, + 0x7e, 0x5c, 0xf3, 0x86, 0x4c, 0x1c, 0x40, 0x46, 0x37, 0x61, 0xdc, 0x60, 0x17, 0x02, 0x57, 0x61, + 0xa7, 0xa8, 0x7e, 0x86, 0xb3, 0x8d, 0xe3, 0xe0, 0x24, 0x0e, 0xd3, 0x26, 0xd4, 0xc1, 0x85, 0x81, + 0xeb, 0xe0, 0xdf, 0x0b, 0xc1, 0x24, 0xe4, 0x95, 0xc0, 0xaf, 0x87, 0xca, 0xa3, 0x0b, 0x91, 0xf2, + 0x68, 0x26, 0xce, 0x11, 0xa8, 0x8e, 0xb4, 0xe4, 0xea, 0xf7, 0xd5, 0xa1, 0xaa, 0x5f, 0x3f, 0x79, + 0xf6, 0x2f, 0x7f, 0x3f, 0x12, 0x60, 0xe6, 0x76, 0xe3, 0x8e, 0xa1, 0xd9, 0xba, 0xab, 0xce, 0x9a, + 0xee, 0xf8, 0xf5, 0x35, 0x18, 0x31, 0x6c, 0xc5, 0xb5, 0xe3, 0x05, 0xd7, 0x0e, 0x6c, 0x2b, 0xd4, + 0x8e, 0xe9, 0x08, 0x97, 0x63, 0x04, 0x65, 0x40, 0xab, 0x30, 0x6a, 0x48, 0x6a, 0x87, 0xb8, 0x69, + 0xf5, 0x42, 0x1f, 0xed, 0x97, 0x16, 0x31, 0x25, 0x0f, 0x14, 0x6f, 0x8c, 0x1b, 0x73, 0x14, 0xf1, + 0x87, 0x02, 0x4c, 0xde, 0x6d, 0x36, 0xeb, 0x4b, 0x2a, 0x3b, 0xd1, 0x75, 0xc9, 0xda, 0xa6, 0x99, + 0x5e, 0x97, 0xac, 0xed, 0x68, 0xa6, 0xa7, 0x73, 0x98, 0xcd, 0xa0, 0x6f, 0x42, 0x9e, 0x46, 0x12, + 0xa2, 0xb6, 0x07, 0x2c, 0xb5, 0x39, 0x7c, 0xcd, 0x61, 0xf2, 0x2b, 0x44, 0x3e, 0x80, 0x5d, 0x38, + 0x71, 0x07, 0x4e, 0x07, 0xd4, 0xa1, 0xfe, 0x60, 0x6f, 0x86, 0xa8, 0x01, 0x39, 0x2a, 0xd9, 0x7d, + 0x12, 0xec, 0xf7, 0xf2, 0x15, 0x31, 0xc9, 0xaf, 0x74, 0xe8, 0x2f, 0x13, 0x3b, 0x58, 0xe2, 0x0a, + 0x8c, 0xdf, 0xd5, 0x4c, 0xab, 0xae, 0x19, 0x16, 0x73, 0x0b, 0x3a, 0x07, 0xd9, 0xae, 0xac, 0xf2, + 0x3c, 0x5b, 0xe4, 0x3c, 0x59, 0x9a, 0x23, 0xe8, 0x38, 0x9b, 0x96, 0xf6, 0x78, 0xe4, 0xf1, 0xa7, + 0xa5, 0x3d, 0x4c, 0xc7, 0xc5, 0x3b, 0x90, 0xe7, 0xee, 0x0e, 0x02, 0x65, 0x0f, 0x07, 0xca, 0x26, + 0x00, 0xad, 0x41, 0x7e, 0xa9, 0x5e, 0x53, 0x34, 0xa7, 0xea, 0x6a, 0xc9, 0x6d, 0x23, 0xba, 0x16, + 0x0b, 0x4b, 0x8b, 0x18, 0xb3, 0x19, 0x24, 0xc2, 0x28, 0xd9, 0x6b, 0x11, 0xdd, 0x62, 0x3b, 0x62, + 0xac, 0x06, 0x74, 0x95, 0x6f, 0xb1, 0x11, 0xcc, 0x67, 0xc4, 0x1f, 0x65, 0x20, 0xcf, 0xdd, 0x71, + 0x0c, 0xb7, 0xb0, 0xe5, 0xd0, 0x2d, 0xec, 0xc5, 0xc1, 0xb6, 0x46, 0xea, 0x15, 0xac, 0x19, 0xb9, + 0x82, 0x5d, 0x1e, 0x10, 0xef, 0xf0, 0xfb, 0xd7, 0xc7, 0x02, 0x4c, 0x84, 0x37, 0x25, 0xba, 0x0e, + 0x45, 0x9a, 0x70, 0xe4, 0x16, 0x59, 0xf5, 0xeb, 0x5c, 0xef, 0x75, 0xa4, 0xe1, 0x4f, 0xe1, 0x20, + 0x1d, 0xea, 0x78, 0x6c, 0x74, 0x1f, 0x71, 0xa3, 0xd3, 0x5d, 0x6a, 0x5b, 0xb2, 0x52, 0x71, 0x3a, + 0x1e, 0x95, 0x25, 0xd5, 0x5a, 0x33, 0x1a, 0x96, 0x21, 0xab, 0x9d, 0x98, 0x20, 0xb6, 0x29, 0x83, + 0xc8, 0xe2, 0x6f, 0x05, 0x28, 0x72, 0x95, 0x8f, 0xe1, 0x56, 0xf1, 0x8d, 0xf0, 0xad, 0xe2, 0xc2, + 0x80, 0x07, 0x3c, 0xf9, 0x4a, 0xf1, 0x0b, 0x5f, 0x75, 0x7a, 0xa4, 0xe9, 0xae, 0xde, 0xd6, 0x4c, + 0x2b, 0xba, 0xab, 0xe9, 0x61, 0xc4, 0x6c, 0x06, 0xd9, 0x70, 0x4a, 0x8e, 0xc4, 0x00, 0xee, 0xda, + 0xea, 0x60, 0x9a, 0x78, 0x6c, 0xb5, 0x12, 0x87, 0x3f, 0x15, 0x9d, 0xc1, 0x31, 0x11, 0x22, 0x81, + 0x18, 0x15, 0xba, 0x07, 0x23, 0xdb, 0x96, 0xa5, 0x27, 0x3c, 0x24, 0xf7, 0x89, 0x3c, 0xbe, 0x0a, + 0x05, 0x66, 0x5d, 0xb3, 0x59, 0xc7, 0x0c, 0x4a, 0xfc, 0xa7, 0xef, 0x8f, 0x86, 0xb3, 0xc7, 0xbd, + 0x78, 0x2a, 0x1c, 0x25, 0x9e, 0x16, 0x93, 0x62, 0x29, 0xba, 0x0b, 0x59, 0x4b, 0x19, 0xf4, 0x5a, + 0xc8, 0x11, 0x9b, 0xcb, 0x0d, 0x3f, 0x20, 0x35, 0x97, 0x1b, 0x98, 0x42, 0xa0, 0x35, 0xc8, 0xd1, + 0xec, 0x43, 0x8f, 0x60, 0x76, 0xf0, 0x23, 0x4d, 0xed, 0xf7, 0x37, 0x04, 0xfd, 0x65, 0x62, 0x07, + 0x47, 0x7c, 0x17, 0xc6, 0x43, 0xe7, 0x14, 0xbd, 0x03, 0x27, 0x15, 0x4d, 0x6a, 0xd7, 0x24, 0x45, + 0x52, 0x5b, 0xc4, 0x7d, 0xb5, 0xbf, 0x90, 0x74, 0xc3, 0x58, 0x0e, 0xd0, 0xf1, 0x53, 0xee, 0xf5, + 0xde, 0x82, 0x73, 0x38, 0x84, 0x28, 0x4a, 0x00, 0xbe, 0x8d, 0xa8, 0x0c, 0x39, 0xba, 0xcf, 0x9c, + 0x7c, 0x32, 0x56, 0x1b, 0xa3, 0x1a, 0xd2, 0xed, 0x67, 0x62, 0x67, 0x1c, 0x5d, 0x03, 0x30, 0x49, + 0xcb, 0x20, 0x16, 0x0b, 0x06, 0xce, 0x7b, 0x8a, 0x17, 0xf6, 0x1a, 0xde, 0x0c, 0x0e, 0x50, 0x89, + 0x7f, 0x10, 0x60, 0x7c, 0x95, 0x58, 0xef, 0x69, 0xc6, 0x4e, 0x9d, 0x75, 0x79, 0x8f, 0x21, 0xd8, + 0xe2, 0x50, 0xb0, 0x7d, 0xa9, 0xcf, 0xca, 0x84, 0xb4, 0x4b, 0x0b, 0xb9, 0xd4, 0x8e, 0x52, 0x88, + 0x32, 0x78, 0x76, 0xd7, 0x21, 0xa7, 0x6b, 0x86, 0xe5, 0x66, 0xe2, 0xa1, 0x24, 0xd2, 0x38, 0x16, + 0xc8, 0xc5, 0x14, 0x06, 0x3b, 0x68, 0xd4, 0x8e, 0x2d, 0x43, 0xeb, 0xf2, 0xdd, 0x3a, 0x1c, 0x2a, + 0x21, 0x86, 0x6f, 0xc7, 0x6d, 0x43, 0xeb, 0x62, 0x86, 0x25, 0x7e, 0x2a, 0xc0, 0x54, 0x88, 0xf2, + 0x18, 0xe2, 0xe6, 0xbd, 0x70, 0xdc, 0xbc, 0x3c, 0x8c, 0x21, 0x29, 0xd1, 0xf3, 0xd3, 0x4c, 0xc4, + 0x0c, 0x6a, 0x30, 0xda, 0x82, 0xa2, 0xae, 0xb5, 0x1b, 0x4f, 0xa0, 0xcd, 0x35, 0x49, 0xd3, 0x4e, + 0xdd, 0xc7, 0xc2, 0x41, 0x60, 0xb4, 0x07, 0x53, 0xaa, 0xd4, 0x25, 0xa6, 0x2e, 0xb5, 0x48, 0xe3, + 0x09, 0xbc, 0x2f, 0x3c, 0xc3, 0xde, 0xd1, 0xa3, 0x88, 0x38, 0x2e, 0x04, 0xad, 0x40, 0x5e, 0xd6, + 0x59, 0x19, 0xc4, 0x53, 0x7f, 0xdf, 0x24, 0xe4, 0x14, 0x4d, 0x4e, 0x38, 0xe4, 0x3f, 0xb0, 0x8b, + 0x21, 0xfe, 0x32, 0xba, 0x1b, 0xe8, 0xfe, 0x43, 0x77, 0xa0, 0xc0, 0x3e, 0x37, 0x68, 0x69, 0x8a, + 0xfb, 0xb0, 0x4e, 0x57, 0xb6, 0xce, 0xc7, 0x1e, 0xef, 0x97, 0xcf, 0x26, 0xbc, 0x99, 0xba, 0xd3, + 0xd8, 0x63, 0x46, 0xab, 0x30, 0xa2, 0x7f, 0x9d, 0x02, 0x80, 0xe5, 0x08, 0x96, 0xf5, 0x19, 0x8e, + 0xf8, 0x55, 0x54, 0x5d, 0x96, 0x29, 0x1e, 0x3e, 0xb1, 0x55, 0xf7, 0x0a, 0x8e, 0xd4, 0x95, 0xdf, + 0x84, 0x3c, 0x4f, 0x90, 0x7c, 0x33, 0xbf, 0x36, 0xcc, 0x66, 0x0e, 0x26, 0x01, 0xaf, 0xde, 0x77, + 0x07, 0x5d, 0x60, 0xf1, 0x4f, 0x02, 0x4c, 0x31, 0x05, 0x5a, 0xb6, 0x21, 0x5b, 0xbd, 0x63, 0x0b, + 0x9b, 0x1b, 0xa1, 0xb0, 0xf9, 0x4a, 0x1f, 0xc3, 0x62, 0x1a, 0xa6, 0x86, 0xce, 0xcf, 0x04, 0x78, + 0x26, 0x46, 0x7d, 0x0c, 0x61, 0x67, 0x3d, 0x1c, 0x76, 0x5e, 0x1a, 0xd6, 0xa0, 0xb4, 0xc2, 0xad, + 0x98, 0x60, 0x0e, 0xdb, 0x88, 0xd7, 0x00, 0x74, 0x43, 0xde, 0x95, 0x15, 0xd2, 0xe1, 0xbd, 0xd3, + 0x82, 0xef, 0xf2, 0xba, 0x37, 0x83, 0x03, 0x54, 0xc8, 0x84, 0x99, 0x36, 0xd9, 0x92, 0x6c, 0xc5, + 0x9a, 0x6f, 0xb7, 0x17, 0x24, 0x5d, 0xda, 0x94, 0x15, 0xd9, 0x92, 0xf9, 0x65, 0x76, 0xac, 0x76, + 0xd3, 0xe9, 0x69, 0x26, 0x51, 0x3c, 0xde, 0x2f, 0x9f, 0x4b, 0xea, 0x5d, 0xb8, 0x24, 0x3d, 0x9c, + 0x02, 0x8d, 0x7a, 0x50, 0x32, 0xc8, 0xbb, 0xb6, 0x6c, 0x90, 0xf6, 0xa2, 0xa1, 0xe9, 0x21, 0xb1, + 0x59, 0x26, 0xf6, 0x7f, 0x0f, 0xf6, 0xcb, 0x25, 0x9c, 0x42, 0xd3, 0x5f, 0x70, 0x2a, 0x3c, 0x7a, + 0x08, 0xd3, 0x92, 0xa2, 0x68, 0xef, 0x91, 0xb0, 0xb1, 0x23, 0x4c, 0xea, 0x8d, 0x83, 0xfd, 0xf2, + 0xf4, 0x7c, 0x7c, 0xba, 0xbf, 0xc0, 0x24, 0x50, 0x54, 0x85, 0xfc, 0xae, 0xa6, 0xd8, 0x5d, 0x62, + 0x96, 0x72, 0x0c, 0x9f, 0xc6, 0xd9, 0xfc, 0x86, 0x33, 0xf4, 0x78, 0xbf, 0x3c, 0x7a, 0xbb, 0xc1, + 0x9e, 0x11, 0x5c, 0x2a, 0x7a, 0xdd, 0xa1, 0x95, 0x0e, 0x3f, 0xb3, 0xec, 0x3d, 0xb3, 0xe0, 0x07, + 0x85, 0xbb, 0xfe, 0x14, 0x0e, 0xd2, 0xa1, 0x07, 0x30, 0xb6, 0xcd, 0xef, 0xcc, 0x66, 0x29, 0x3f, + 0x50, 0x8e, 0x0b, 0xdd, 0xb1, 0x6b, 0x53, 0x5c, 0xc4, 0x98, 0x3b, 0x6c, 0x62, 0x1f, 0x11, 0x5d, + 0x82, 0x3c, 0xfb, 0xb1, 0xb4, 0xc8, 0x1e, 0x8b, 0x0a, 0x7e, 0xe8, 0xb8, 0xeb, 0x0c, 0x63, 0x77, + 0xde, 0x25, 0x5d, 0xaa, 0x2f, 0xb0, 0x47, 0xcb, 0x08, 0xe9, 0x52, 0x7d, 0x01, 0xbb, 0xf3, 0xe8, + 0x1d, 0xc8, 0x9b, 0x64, 0x59, 0x56, 0xed, 0xbd, 0x12, 0x0c, 0xd4, 0xf2, 0x6c, 0xdc, 0x62, 0xd4, + 0x91, 0x67, 0x1b, 0x5f, 0x02, 0x9f, 0xc7, 0x2e, 0x2c, 0xda, 0x86, 0x31, 0xc3, 0x56, 0xe7, 0xcd, + 0x75, 0x93, 0x18, 0xa5, 0x22, 0x93, 0xd1, 0x2f, 0x5a, 0x62, 0x97, 0x3e, 0x2a, 0xc5, 0xf3, 0x90, + 0x47, 0x81, 0x7d, 0x70, 0xf4, 0x03, 0x01, 0x90, 0x69, 0xeb, 0xba, 0x42, 0xba, 0x44, 0xb5, 0x24, + 0x85, 0xbd, 0x14, 0x99, 0xa5, 0x93, 0x4c, 0xe6, 0xff, 0xf7, 0xb3, 0x2b, 0xc6, 0x18, 0x15, 0xee, + 0x3d, 0xc9, 0xc6, 0x49, 0x71, 0x82, 0x5c, 0xea, 0xda, 0x2d, 0x93, 0xfd, 0x5d, 0x1a, 0x1f, 0xc8, + 0xb5, 0xc9, 0x2f, 0x62, 0xbe, 0x6b, 0xf9, 0x3c, 0x76, 0x61, 0xd1, 0x06, 0xcc, 0x18, 0x44, 0x6a, + 0xaf, 0xa9, 0x4a, 0x0f, 0x6b, 0x9a, 0x75, 0x5b, 0x56, 0x88, 0xd9, 0x33, 0x2d, 0xd2, 0x2d, 0x4d, + 0xb0, 0x65, 0xf7, 0x3e, 0x19, 0xc0, 0x89, 0x54, 0x38, 0x85, 0x1b, 0x75, 0xa1, 0xec, 0x86, 0x0c, + 0x7a, 0x9e, 0xbc, 0x98, 0x75, 0xcb, 0x6c, 0x49, 0x8a, 0xf3, 0x4a, 0x3d, 0xc9, 0x04, 0xbc, 0x70, + 0xb0, 0x5f, 0x2e, 0x2f, 0x1e, 0x4e, 0x8a, 0xfb, 0x61, 0xa1, 0xb7, 0xa1, 0x24, 0xa5, 0xc9, 0x39, + 0xc5, 0xe4, 0x9c, 0xe7, 0x86, 0x94, 0x52, 0x85, 0xa4, 0x22, 0xb0, 0x56, 0x3b, 0x7f, 0x78, 0x3d, + 0x9e, 0x6f, 0xdb, 0x86, 0x6b, 0xb5, 0xfb, 0xaa, 0x3d, 0xb1, 0x56, 0x7b, 0x00, 0xf2, 0xf0, 0xa7, + 0x9e, 0xbf, 0x67, 0x60, 0xda, 0x27, 0x1e, 0xb8, 0xd5, 0x9e, 0xc0, 0xf2, 0xd4, 0x5a, 0xed, 0xc9, + 0xbd, 0xea, 0xec, 0xd3, 0xee, 0x55, 0x3f, 0x85, 0x16, 0x3f, 0x6b, 0x7f, 0xfb, 0xae, 0xfb, 0xf7, + 0x6b, 0x7f, 0xfb, 0xba, 0xa5, 0x94, 0x3c, 0xbf, 0xce, 0x04, 0x0d, 0xf8, 0x8f, 0xef, 0xc1, 0x7e, + 0xfd, 0x0f, 0x00, 0xc5, 0xcf, 0xb2, 0x70, 0x2a, 0x7a, 0x1a, 0x43, 0xad, 0x3a, 0xa1, 0x6f, 0xab, + 0xae, 0x0e, 0xa7, 0xb7, 0x6c, 0x45, 0xe9, 0x31, 0x37, 0x04, 0xfa, 0x75, 0xce, 0x53, 0xfb, 0x73, + 0x9c, 0xf3, 0xf4, 0xed, 0x04, 0x1a, 0x9c, 0xc8, 0x99, 0xd2, 0x76, 0xcc, 0x1e, 0xa9, 0xed, 0x18, + 0xeb, 0x82, 0x8d, 0x0c, 0xd1, 0x05, 0x4b, 0x6c, 0x21, 0xe6, 0x8e, 0xd0, 0x42, 0x3c, 0x4a, 0xcf, + 0x2f, 0x21, 0x88, 0xf5, 0xeb, 0xf9, 0x89, 0xcf, 0xc1, 0x2c, 0x67, 0xb3, 0x58, 0x3b, 0x4e, 0xb5, + 0x0c, 0x4d, 0x51, 0x88, 0xb1, 0x68, 0x77, 0xbb, 0x3d, 0xf1, 0x0d, 0x98, 0x08, 0x37, 0x9a, 0x9d, + 0x95, 0x76, 0x7a, 0xdd, 0xbc, 0xe1, 0x11, 0x58, 0x69, 0x67, 0x1c, 0x7b, 0x14, 0xe2, 0xfb, 0x02, + 0xcc, 0x24, 0x7f, 0x50, 0x86, 0x14, 0x98, 0xe8, 0x4a, 0x7b, 0xc1, 0xaf, 0xef, 0x84, 0x23, 0xde, + 0xa5, 0x59, 0x87, 0x71, 0x25, 0x84, 0x85, 0x23, 0xd8, 0xf4, 0x7e, 0x7d, 0x26, 0xa5, 0xb7, 0x77, + 0xbc, 0x9a, 0xa0, 0xfb, 0x50, 0xe8, 0x4a, 0x7b, 0x0d, 0xdb, 0xe8, 0x90, 0x23, 0xbf, 0x1e, 0xb0, + 0x88, 0xb1, 0xc2, 0x51, 0xb0, 0x87, 0x27, 0x7e, 0x24, 0x40, 0x29, 0xad, 0xd0, 0x44, 0xd7, 0x43, + 0x5d, 0xc8, 0xe7, 0x23, 0x5d, 0xc8, 0xa9, 0x18, 0xdf, 0x53, 0xea, 0x41, 0xfe, 0x4a, 0x80, 0x99, + 0xe4, 0x82, 0x1b, 0xbd, 0x1c, 0xd2, 0xb0, 0x1c, 0xd1, 0x70, 0x32, 0xc2, 0xc5, 0xf5, 0xfb, 0x36, + 0x4c, 0xf0, 0xb2, 0x9c, 0xc3, 0x70, 0xaf, 0x8a, 0x49, 0xb1, 0x92, 0x43, 0xb8, 0x65, 0x28, 0x5b, + 0xaf, 0xf0, 0x18, 0x8e, 0xa0, 0x89, 0xdf, 0xcf, 0x40, 0xae, 0xd1, 0x92, 0x14, 0x72, 0x0c, 0x65, + 0xd6, 0x9b, 0xa1, 0x32, 0xab, 0xdf, 0x97, 0xf2, 0x4c, 0xab, 0xd4, 0x0a, 0x0b, 0x47, 0x2a, 0xac, + 0x17, 0x07, 0x42, 0x3b, 0xbc, 0xb8, 0xfa, 0x1f, 0x18, 0xf3, 0x84, 0x0e, 0x17, 0xf3, 0xc5, 0x9f, + 0x67, 0xa0, 0x18, 0x10, 0x31, 0x64, 0xc6, 0xd8, 0x0a, 0x65, 0xda, 0x41, 0xfe, 0x67, 0x26, 0x20, + 0xab, 0xe2, 0xe6, 0x56, 0xe7, 0x83, 0x32, 0xff, 0x13, 0xa2, 0x78, 0xca, 0x7d, 0x03, 0x26, 0x2c, + 0xf6, 0x3f, 0x25, 0xde, 0x9b, 0x5b, 0x96, 0xed, 0x45, 0xef, 0x33, 0xc4, 0x66, 0x68, 0x16, 0x47, + 0xa8, 0x67, 0x6f, 0xc2, 0x78, 0x48, 0xd8, 0x50, 0xdf, 0x83, 0xfd, 0x46, 0x80, 0xe7, 0xfb, 0x5e, + 0xd9, 0x50, 0x2d, 0x74, 0x48, 0x2a, 0x91, 0x43, 0x32, 0x97, 0x0e, 0xf0, 0x14, 0xbf, 0x2b, 0x78, + 0x3f, 0x03, 0xa8, 0xb9, 0x2d, 0x1b, 0xed, 0xba, 0x64, 0x58, 0x3d, 0xcc, 0xff, 0x31, 0xe8, 0x18, + 0x0e, 0xcc, 0x75, 0x28, 0xb6, 0x89, 0xd9, 0x32, 0x64, 0xe6, 0x1c, 0x5e, 0x9d, 0x7b, 0xcf, 0x1a, + 0x8b, 0xfe, 0x14, 0x0e, 0xd2, 0xa1, 0xb7, 0xa0, 0xb0, 0xeb, 0xfc, 0xa7, 0x99, 0xdb, 0xe4, 0xea, + 0x57, 0x48, 0xfa, 0xff, 0x9b, 0xe6, 0xef, 0x1f, 0x3e, 0x60, 0x62, 0x0f, 0x4c, 0xfc, 0x50, 0x80, + 0x99, 0xb8, 0x23, 0x16, 0xa9, 0xaa, 0x4f, 0xdf, 0x19, 0xcf, 0xc1, 0x08, 0x43, 0xa7, 0x5e, 0x38, + 0xe9, 0xbc, 0x30, 0x53, 0xc9, 0x98, 0x8d, 0x8a, 0x7f, 0x11, 0x60, 0x36, 0x59, 0xb5, 0x63, 0x28, + 0xdb, 0xef, 0x87, 0xcb, 0xf6, 0x7e, 0xaf, 0x06, 0xc9, 0x7a, 0xa6, 0x94, 0xf0, 0x7f, 0x4e, 0xf4, + 0xf9, 0x31, 0x18, 0xb5, 0x11, 0x36, 0xea, 0xea, 0xd0, 0x46, 0x25, 0x1b, 0x54, 0xbb, 0xf2, 0xe8, + 0xcb, 0xb9, 0x13, 0x9f, 0x7f, 0x39, 0x77, 0xe2, 0x8b, 0x2f, 0xe7, 0x4e, 0x7c, 0xef, 0x60, 0x4e, + 0x78, 0x74, 0x30, 0x27, 0x7c, 0x7e, 0x30, 0x27, 0x7c, 0x71, 0x30, 0x27, 0xfc, 0xed, 0x60, 0x4e, + 0xf8, 0xf1, 0x57, 0x73, 0x27, 0xee, 0xe7, 0x39, 0xee, 0xbf, 0x02, 0x00, 0x00, 0xff, 0xff, 0x6f, + 0x30, 0xd5, 0x91, 0x29, 0x3b, 0x00, 0x00, } diff --git a/staging/src/k8s.io/api/extensions/v1beta1/generated.proto b/staging/src/k8s.io/api/extensions/v1beta1/generated.proto index c9e72247269..87a2f91687b 100644 --- a/staging/src/k8s.io/api/extensions/v1beta1/generated.proto +++ b/staging/src/k8s.io/api/extensions/v1beta1/generated.proto @@ -421,6 +421,21 @@ message IDRange { optional int64 max = 2; } +// IPBlock describes a particular CIDR (Ex. "192.168.1.1/24") that is allowed to the pods +// matched by a NetworkPolicySpec's podSelector. The except entry describes CIDRs that should +// not be included within this rule. +message IPBlock { + // CIDR is a string representing the IP Block + // Valid examples are "192.168.1.1/24" + optional string cidr = 1; + + // Except is a slice of CIDRs that should not be included within an IP Block + // Valid examples are "192.168.1.1/24" + // Except values will be rejected if they are outside the CIDR range + // +optional + repeated string except = 2; +} + // Ingress is a collection of rules that allow inbound connections to reach the // endpoints defined by a backend. An Ingress can be configured to give services // externally-reachable urls, load balance traffic, terminate SSL, offer name @@ -602,6 +617,10 @@ message NetworkPolicyPeer { // If present but empty, this selector selects all namespaces. // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.LabelSelector namespaceSelector = 2; + + // IPBlock defines policy on a particular IPBlock + // +optional + optional IPBlock ipBlock = 3; } message NetworkPolicyPort { diff --git a/staging/src/k8s.io/api/extensions/v1beta1/types.generated.go b/staging/src/k8s.io/api/extensions/v1beta1/types.generated.go index b6ecc170b19..37120e62d10 100644 --- a/staging/src/k8s.io/api/extensions/v1beta1/types.generated.go +++ b/staging/src/k8s.io/api/extensions/v1beta1/types.generated.go @@ -18741,7 +18741,7 @@ func (x *NetworkPolicyPort) codecDecodeSelfFromArray(l int, d *codec1978.Decoder z.DecSendContainerState(codecSelfer_containerArrayEnd1234) } -func (x *NetworkPolicyPeer) CodecEncodeSelf(e *codec1978.Encoder) { +func (x *IPBlock) CodecEncodeSelf(e *codec1978.Encoder) { var h codecSelfer1234 z, r := codec1978.GenHelperEncoder(e) _, _, _ = h, z, r @@ -18758,11 +18758,254 @@ func (x *NetworkPolicyPeer) CodecEncodeSelf(e *codec1978.Encoder) { var yyq2 [2]bool _, _, _ = yysep2, yyq2, yy2arr2 const yyr2 bool = false - yyq2[0] = x.PodSelector != nil - yyq2[1] = x.NamespaceSelector != nil + yyq2[1] = len(x.Except) != 0 var yynn2 int if yyr2 || yy2arr2 { r.EncodeArrayStart(2) + } else { + yynn2 = 1 + for _, b := range yyq2 { + if b { + yynn2++ + } + } + r.EncodeMapStart(yynn2) + yynn2 = 0 + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym4 := z.EncBinary() + _ = yym4 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.CIDR)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("cidr")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym5 := z.EncBinary() + _ = yym5 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.CIDR)) + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2[1] { + if x.Except == nil { + r.EncodeNil() + } else { + yym7 := z.EncBinary() + _ = yym7 + if false { + } else { + z.F.EncSliceStringV(x.Except, false, e) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq2[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("except")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Except == nil { + r.EncodeNil() + } else { + yym8 := z.EncBinary() + _ = yym8 + if false { + } else { + z.F.EncSliceStringV(x.Except, false, e) + } + } + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *IPBlock) 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 *IPBlock) 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 "cidr": + if r.TryDecodeAsNil() { + x.CIDR = "" + } else { + yyv4 := &x.CIDR + yym5 := z.DecBinary() + _ = yym5 + if false { + } else { + *((*string)(yyv4)) = r.DecodeString() + } + } + case "except": + if r.TryDecodeAsNil() { + x.Except = nil + } else { + yyv6 := &x.Except + yym7 := z.DecBinary() + _ = yym7 + if false { + } else { + z.F.DecSliceStringX(yyv6, false, d) + } + } + default: + z.DecStructFieldNotFound(-1, yys3) + } // end switch yys3 + } // end for yyj3 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *IPBlock) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj8 int + var yyb8 bool + var yyhl8 bool = l >= 0 + yyj8++ + if yyhl8 { + yyb8 = yyj8 > l + } else { + yyb8 = r.CheckBreak() + } + if yyb8 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.CIDR = "" + } else { + yyv9 := &x.CIDR + yym10 := z.DecBinary() + _ = yym10 + if false { + } else { + *((*string)(yyv9)) = r.DecodeString() + } + } + yyj8++ + if yyhl8 { + yyb8 = yyj8 > l + } else { + yyb8 = r.CheckBreak() + } + if yyb8 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Except = nil + } else { + yyv11 := &x.Except + yym12 := z.DecBinary() + _ = yym12 + if false { + } else { + z.F.DecSliceStringX(yyv11, false, d) + } + } + for { + yyj8++ + if yyhl8 { + yyb8 = yyj8 > l + } else { + yyb8 = r.CheckBreak() + } + if yyb8 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj8-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *NetworkPolicyPeer) 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 [3]bool + _, _, _ = yysep2, yyq2, yy2arr2 + const yyr2 bool = false + yyq2[0] = x.PodSelector != nil + yyq2[1] = x.NamespaceSelector != nil + yyq2[2] = x.IPBlock != nil + var yynn2 int + if yyr2 || yy2arr2 { + r.EncodeArrayStart(3) } else { yynn2 = 0 for _, b := range yyq2 { @@ -18843,6 +19086,29 @@ func (x *NetworkPolicyPeer) CodecEncodeSelf(e *codec1978.Encoder) { } } } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2[2] { + if x.IPBlock == nil { + r.EncodeNil() + } else { + x.IPBlock.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq2[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("ipBlock")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.IPBlock == nil { + r.EncodeNil() + } else { + x.IPBlock.CodecEncodeSelf(e) + } + } + } if yyr2 || yy2arr2 { z.EncSendContainerState(codecSelfer_containerArrayEnd1234) } else { @@ -18938,6 +19204,17 @@ func (x *NetworkPolicyPeer) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) z.DecFallback(x.NamespaceSelector, false) } } + case "ipBlock": + if r.TryDecodeAsNil() { + if x.IPBlock != nil { + x.IPBlock = nil + } + } else { + if x.IPBlock == nil { + x.IPBlock = new(IPBlock) + } + x.IPBlock.CodecDecodeSelf(d) + } default: z.DecStructFieldNotFound(-1, yys3) } // end switch yys3 @@ -18949,16 +19226,16 @@ func (x *NetworkPolicyPeer) codecDecodeSelfFromArray(l int, d *codec1978.Decoder var h codecSelfer1234 z, r := codec1978.GenHelperDecoder(d) _, _, _ = h, z, r - var yyj8 int - var yyb8 bool - var yyhl8 bool = l >= 0 - yyj8++ - if yyhl8 { - yyb8 = yyj8 > l + var yyj9 int + var yyb9 bool + var yyhl9 bool = l >= 0 + yyj9++ + if yyhl9 { + yyb9 = yyj9 > l } else { - yyb8 = r.CheckBreak() + yyb9 = r.CheckBreak() } - if yyb8 { + if yyb9 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -18971,21 +19248,21 @@ func (x *NetworkPolicyPeer) codecDecodeSelfFromArray(l int, d *codec1978.Decoder if x.PodSelector == nil { x.PodSelector = new(pkg1_v1.LabelSelector) } - yym10 := z.DecBinary() - _ = yym10 + yym11 := z.DecBinary() + _ = yym11 if false { } else if z.HasExtensions() && z.DecExt(x.PodSelector) { } else { z.DecFallback(x.PodSelector, false) } } - yyj8++ - if yyhl8 { - yyb8 = yyj8 > l + yyj9++ + if yyhl9 { + yyb9 = yyj9 > l } else { - yyb8 = r.CheckBreak() + yyb9 = r.CheckBreak() } - if yyb8 { + if yyb9 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -18998,26 +19275,47 @@ func (x *NetworkPolicyPeer) codecDecodeSelfFromArray(l int, d *codec1978.Decoder if x.NamespaceSelector == nil { x.NamespaceSelector = new(pkg1_v1.LabelSelector) } - yym12 := z.DecBinary() - _ = yym12 + yym13 := z.DecBinary() + _ = yym13 if false { } else if z.HasExtensions() && z.DecExt(x.NamespaceSelector) { } else { z.DecFallback(x.NamespaceSelector, false) } } - for { - yyj8++ - if yyhl8 { - yyb8 = yyj8 > l - } else { - yyb8 = r.CheckBreak() + yyj9++ + if yyhl9 { + yyb9 = yyj9 > l + } else { + yyb9 = r.CheckBreak() + } + if yyb9 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.IPBlock != nil { + x.IPBlock = nil } - if yyb8 { + } else { + if x.IPBlock == nil { + x.IPBlock = new(IPBlock) + } + x.IPBlock.CodecDecodeSelf(d) + } + for { + yyj9++ + if yyhl9 { + yyb9 = yyj9 > l + } else { + yyb9 = r.CheckBreak() + } + if yyb9 { break } z.DecSendContainerState(codecSelfer_containerArrayElem1234) - z.DecStructFieldNotFound(yyj8-1, "") + z.DecStructFieldNotFound(yyj9-1, "") } z.DecSendContainerState(codecSelfer_containerArrayEnd1234) } @@ -21917,7 +22215,7 @@ func (x codecSelfer1234) decSliceNetworkPolicyPeer(v *[]NetworkPolicyPeer, d *co yyrg1 := len(yyv1) > 0 yyv21 := yyv1 - yyrl1, yyrt1 = z.DecInferLen(yyl1, z.DecBasicHandle().MaxInitLen, 16) + yyrl1, yyrt1 = z.DecInferLen(yyl1, z.DecBasicHandle().MaxInitLen, 24) if yyrt1 { if yyrl1 <= cap(yyv1) { yyv1 = yyv1[:yyrl1] diff --git a/staging/src/k8s.io/api/extensions/v1beta1/types.go b/staging/src/k8s.io/api/extensions/v1beta1/types.go index 11300661fb1..2967f053b35 100644 --- a/staging/src/k8s.io/api/extensions/v1beta1/types.go +++ b/staging/src/k8s.io/api/extensions/v1beta1/types.go @@ -1181,6 +1181,20 @@ type NetworkPolicyPort struct { Port *intstr.IntOrString `json:"port,omitempty" protobuf:"bytes,2,opt,name=port"` } +// IPBlock describes a particular CIDR (Ex. "192.168.1.1/24") that is allowed to the pods +// matched by a NetworkPolicySpec's podSelector. The except entry describes CIDRs that should +// not be included within this rule. +type IPBlock struct { + // CIDR is a string representing the IP Block + // Valid examples are "192.168.1.1/24" + CIDR string `json:"cidr" protobuf:"bytes,1,name=cidr"` + // Except is a slice of CIDRs that should not be included within an IP Block + // Valid examples are "192.168.1.1/24" + // Except values will be rejected if they are outside the CIDR range + // +optional + Except []string `json:"except,omitempty" protobuf:"bytes,2,rep,name=except"` +} + type NetworkPolicyPeer struct { // Exactly one of the following must be specified. @@ -1196,6 +1210,10 @@ type NetworkPolicyPeer struct { // If present but empty, this selector selects all namespaces. // +optional NamespaceSelector *metav1.LabelSelector `json:"namespaceSelector,omitempty" protobuf:"bytes,2,opt,name=namespaceSelector"` + + // IPBlock defines policy on a particular IPBlock + // +optional + IPBlock *IPBlock `json:"ipBlock,omitempty" protobuf:"bytes,3,rep,name=ipBlock"` } // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object diff --git a/staging/src/k8s.io/api/extensions/v1beta1/types_swagger_doc_generated.go b/staging/src/k8s.io/api/extensions/v1beta1/types_swagger_doc_generated.go index 2a0259548c8..2944ec44ab2 100644 --- a/staging/src/k8s.io/api/extensions/v1beta1/types_swagger_doc_generated.go +++ b/staging/src/k8s.io/api/extensions/v1beta1/types_swagger_doc_generated.go @@ -254,6 +254,16 @@ func (IDRange) SwaggerDoc() map[string]string { return map_IDRange } +var map_IPBlock = map[string]string{ + "": "IPBlock describes a particular CIDR (Ex. \"192.168.1.1/24\") that is allowed to the pods matched by a NetworkPolicySpec's podSelector. The except entry describes CIDRs that should not be included within this rule.", + "cidr": "CIDR is a string representing the IP Block Valid examples are \"192.168.1.1/24\"", + "except": "Except is a slice of CIDRs that should not be included within an IP Block Valid examples are \"192.168.1.1/24\" Except values will be rejected if they are outside the CIDR range", +} + +func (IPBlock) SwaggerDoc() map[string]string { + return map_IPBlock +} + var map_Ingress = map[string]string{ "": "Ingress is a collection of rules that allow inbound connections to reach the endpoints defined by a backend. An Ingress can be configured to give services externally-reachable urls, load balance traffic, terminate SSL, offer name based virtual hosting etc.", "metadata": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", @@ -365,6 +375,7 @@ func (NetworkPolicyList) SwaggerDoc() map[string]string { var map_NetworkPolicyPeer = map[string]string{ "podSelector": "This is a label selector which selects Pods in this namespace. This field follows standard label selector semantics. If present but empty, this selector selects all pods in this namespace.", "namespaceSelector": "Selects Namespaces using cluster scoped-labels. This matches all pods in all namespaces selected by this label selector. This field follows standard label selector semantics. If present but empty, this selector selects all namespaces.", + "ipBlock": "IPBlock defines policy on a particular IPBlock", } func (NetworkPolicyPeer) SwaggerDoc() map[string]string { diff --git a/staging/src/k8s.io/api/extensions/v1beta1/zz_generated.deepcopy.go b/staging/src/k8s.io/api/extensions/v1beta1/zz_generated.deepcopy.go index d93cb0cea23..c0aa22dad18 100644 --- a/staging/src/k8s.io/api/extensions/v1beta1/zz_generated.deepcopy.go +++ b/staging/src/k8s.io/api/extensions/v1beta1/zz_generated.deepcopy.go @@ -127,6 +127,10 @@ func RegisterDeepCopies(scheme *runtime.Scheme) error { in.(*IDRange).DeepCopyInto(out.(*IDRange)) return nil }, InType: reflect.TypeOf(&IDRange{})}, + conversion.GeneratedDeepCopyFunc{Fn: func(in interface{}, out interface{}, c *conversion.Cloner) error { + in.(*IPBlock).DeepCopyInto(out.(*IPBlock)) + return nil + }, InType: reflect.TypeOf(&IPBlock{})}, conversion.GeneratedDeepCopyFunc{Fn: func(in interface{}, out interface{}, c *conversion.Cloner) error { in.(*Ingress).DeepCopyInto(out.(*Ingress)) return nil @@ -845,6 +849,27 @@ func (in *IDRange) DeepCopy() *IDRange { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *IPBlock) DeepCopyInto(out *IPBlock) { + *out = *in + if in.Except != nil { + in, out := &in.Except, &out.Except + *out = make([]string, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IPBlock. +func (in *IPBlock) DeepCopy() *IPBlock { + if in == nil { + return nil + } + out := new(IPBlock) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *Ingress) DeepCopyInto(out *Ingress) { *out = *in @@ -1157,6 +1182,15 @@ func (in *NetworkPolicyPeer) DeepCopyInto(out *NetworkPolicyPeer) { (*in).DeepCopyInto(*out) } } + if in.IPBlock != nil { + in, out := &in.IPBlock, &out.IPBlock + if *in == nil { + *out = nil + } else { + *out = new(IPBlock) + (*in).DeepCopyInto(*out) + } + } return } diff --git a/staging/src/k8s.io/api/networking/v1/generated.pb.go b/staging/src/k8s.io/api/networking/v1/generated.pb.go index 186b288824b..226b55997ce 100644 --- a/staging/src/k8s.io/api/networking/v1/generated.pb.go +++ b/staging/src/k8s.io/api/networking/v1/generated.pb.go @@ -25,6 +25,7 @@ limitations under the License. k8s.io/kubernetes/vendor/k8s.io/api/networking/v1/generated.proto It has these top-level messages: + IPBlock NetworkPolicy NetworkPolicyIngressRule NetworkPolicyList @@ -60,33 +61,38 @@ var _ = math.Inf // proto package needs to be updated. const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package +func (m *IPBlock) Reset() { *m = IPBlock{} } +func (*IPBlock) ProtoMessage() {} +func (*IPBlock) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{0} } + func (m *NetworkPolicy) Reset() { *m = NetworkPolicy{} } func (*NetworkPolicy) ProtoMessage() {} -func (*NetworkPolicy) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{0} } +func (*NetworkPolicy) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{1} } func (m *NetworkPolicyIngressRule) Reset() { *m = NetworkPolicyIngressRule{} } func (*NetworkPolicyIngressRule) ProtoMessage() {} func (*NetworkPolicyIngressRule) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{1} + return fileDescriptorGenerated, []int{2} } func (m *NetworkPolicyList) Reset() { *m = NetworkPolicyList{} } func (*NetworkPolicyList) ProtoMessage() {} -func (*NetworkPolicyList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{2} } +func (*NetworkPolicyList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{3} } func (m *NetworkPolicyPeer) Reset() { *m = NetworkPolicyPeer{} } func (*NetworkPolicyPeer) ProtoMessage() {} -func (*NetworkPolicyPeer) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{3} } +func (*NetworkPolicyPeer) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{4} } func (m *NetworkPolicyPort) Reset() { *m = NetworkPolicyPort{} } func (*NetworkPolicyPort) ProtoMessage() {} -func (*NetworkPolicyPort) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{4} } +func (*NetworkPolicyPort) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{5} } func (m *NetworkPolicySpec) Reset() { *m = NetworkPolicySpec{} } func (*NetworkPolicySpec) ProtoMessage() {} -func (*NetworkPolicySpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{5} } +func (*NetworkPolicySpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{6} } func init() { + proto.RegisterType((*IPBlock)(nil), "k8s.io.api.networking.v1.IPBlock") proto.RegisterType((*NetworkPolicy)(nil), "k8s.io.api.networking.v1.NetworkPolicy") proto.RegisterType((*NetworkPolicyIngressRule)(nil), "k8s.io.api.networking.v1.NetworkPolicyIngressRule") proto.RegisterType((*NetworkPolicyList)(nil), "k8s.io.api.networking.v1.NetworkPolicyList") @@ -94,6 +100,43 @@ func init() { proto.RegisterType((*NetworkPolicyPort)(nil), "k8s.io.api.networking.v1.NetworkPolicyPort") proto.RegisterType((*NetworkPolicySpec)(nil), "k8s.io.api.networking.v1.NetworkPolicySpec") } +func (m *IPBlock) 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 *IPBlock) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + dAtA[i] = 0xa + i++ + i = encodeVarintGenerated(dAtA, i, uint64(len(m.CIDR))) + i += copy(dAtA[i:], m.CIDR) + if len(m.Except) > 0 { + for _, s := range m.Except { + dAtA[i] = 0x12 + i++ + l = len(s) + for l >= 1<<7 { + dAtA[i] = uint8(uint64(l)&0x7f | 0x80) + l >>= 7 + i++ + } + dAtA[i] = uint8(l) + i++ + i += copy(dAtA[i:], s) + } + } + return i, nil +} + func (m *NetworkPolicy) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -243,6 +286,16 @@ func (m *NetworkPolicyPeer) MarshalTo(dAtA []byte) (int, error) { } i += n5 } + if m.IPBlock != nil { + dAtA[i] = 0x1a + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.IPBlock.Size())) + n6, err := m.IPBlock.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n6 + } return i, nil } @@ -271,11 +324,11 @@ func (m *NetworkPolicyPort) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x12 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Port.Size())) - n6, err := m.Port.MarshalTo(dAtA[i:]) + n7, err := m.Port.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n6 + i += n7 } return i, nil } @@ -298,11 +351,11 @@ func (m *NetworkPolicySpec) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.PodSelector.Size())) - n7, err := m.PodSelector.MarshalTo(dAtA[i:]) + n8, err := m.PodSelector.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n7 + i += n8 if len(m.Ingress) > 0 { for _, msg := range m.Ingress { dAtA[i] = 0x12 @@ -345,6 +398,20 @@ func encodeVarintGenerated(dAtA []byte, offset int, v uint64) int { dAtA[offset] = uint8(v) return offset + 1 } +func (m *IPBlock) Size() (n int) { + var l int + _ = l + l = len(m.CIDR) + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Except) > 0 { + for _, s := range m.Except { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + func (m *NetworkPolicy) Size() (n int) { var l int _ = l @@ -398,6 +465,10 @@ func (m *NetworkPolicyPeer) Size() (n int) { l = m.NamespaceSelector.Size() n += 1 + l + sovGenerated(uint64(l)) } + if m.IPBlock != nil { + l = m.IPBlock.Size() + n += 1 + l + sovGenerated(uint64(l)) + } return n } @@ -442,6 +513,17 @@ func sovGenerated(x uint64) (n int) { func sozGenerated(x uint64) (n int) { return sovGenerated(uint64((x << 1) ^ uint64((int64(x) >> 63)))) } +func (this *IPBlock) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&IPBlock{`, + `CIDR:` + fmt.Sprintf("%v", this.CIDR) + `,`, + `Except:` + fmt.Sprintf("%v", this.Except) + `,`, + `}`, + }, "") + return s +} func (this *NetworkPolicy) String() string { if this == nil { return "nil" @@ -482,6 +564,7 @@ func (this *NetworkPolicyPeer) String() string { s := strings.Join([]string{`&NetworkPolicyPeer{`, `PodSelector:` + strings.Replace(fmt.Sprintf("%v", this.PodSelector), "LabelSelector", "k8s_io_apimachinery_pkg_apis_meta_v1.LabelSelector", 1) + `,`, `NamespaceSelector:` + strings.Replace(fmt.Sprintf("%v", this.NamespaceSelector), "LabelSelector", "k8s_io_apimachinery_pkg_apis_meta_v1.LabelSelector", 1) + `,`, + `IPBlock:` + strings.Replace(fmt.Sprintf("%v", this.IPBlock), "IPBlock", "IPBlock", 1) + `,`, `}`, }, "") return s @@ -516,6 +599,114 @@ func valueToStringGenerated(v interface{}) string { pv := reflect.Indirect(rv).Interface() return fmt.Sprintf("*%v", pv) } +func (m *IPBlock) 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: IPBlock: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: IPBlock: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field CIDR", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.CIDR = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Except", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Except = append(m.Except, string(dAtA[iNdEx:postIndex])) + 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 *NetworkPolicy) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -944,6 +1135,39 @@ func (m *NetworkPolicyPeer) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field IPBlock", 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 m.IPBlock == nil { + m.IPBlock = &IPBlock{} + } + if err := m.IPBlock.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) @@ -1299,47 +1523,52 @@ func init() { } var fileDescriptorGenerated = []byte{ - // 670 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x54, 0x4d, 0x4f, 0xdb, 0x4a, - 0x14, 0x8d, 0xf3, 0x40, 0xe4, 0x0d, 0x0f, 0xf1, 0xf0, 0xd3, 0x93, 0x22, 0x2a, 0x39, 0xc8, 0x9b, - 0x52, 0x21, 0x66, 0x1a, 0xa8, 0xaa, 0x6e, 0xeb, 0x45, 0x2b, 0x24, 0x3e, 0x22, 0xb3, 0xab, 0x5a, - 0xa9, 0x13, 0xe7, 0x62, 0x86, 0xc4, 0x33, 0xd6, 0xcc, 0x24, 0x85, 0x5d, 0x7f, 0x42, 0x7f, 0x48, - 0xff, 0x41, 0x17, 0xed, 0x92, 0x25, 0x4b, 0x56, 0x51, 0x71, 0x7f, 0x43, 0x37, 0x5d, 0x55, 0x63, - 0x3b, 0x71, 0x88, 0x89, 0x1a, 0xaa, 0xee, 0x98, 0xeb, 0x73, 0xce, 0xbd, 0x87, 0x73, 0x6f, 0xd0, - 0xf3, 0xee, 0x33, 0x85, 0x99, 0x20, 0xdd, 0x7e, 0x1b, 0x24, 0x07, 0x0d, 0x8a, 0x0c, 0x80, 0x77, - 0x84, 0x24, 0xf9, 0x07, 0x1a, 0x33, 0xc2, 0x41, 0xbf, 0x13, 0xb2, 0xcb, 0x78, 0x48, 0x06, 0x4d, - 0x12, 0x02, 0x07, 0x49, 0x35, 0x74, 0x70, 0x2c, 0x85, 0x16, 0x76, 0x3d, 0x43, 0x62, 0x1a, 0x33, - 0x5c, 0x20, 0xf1, 0xa0, 0xb9, 0xbe, 0x1d, 0x32, 0x7d, 0xda, 0x6f, 0xe3, 0x40, 0x44, 0x24, 0x14, - 0xa1, 0x20, 0x29, 0xa1, 0xdd, 0x3f, 0x49, 0x5f, 0xe9, 0x23, 0xfd, 0x2b, 0x13, 0x5a, 0x77, 0x27, - 0x5a, 0x06, 0x42, 0xc2, 0x1d, 0xcd, 0xd6, 0xb7, 0x27, 0x30, 0x70, 0xae, 0x81, 0x2b, 0x26, 0xb8, - 0x22, 0x83, 0x66, 0x1b, 0x34, 0x2d, 0xc3, 0x1f, 0x4d, 0xc0, 0x63, 0xd1, 0x63, 0xc1, 0xc5, 0x4c, - 0xe8, 0x93, 0x02, 0x1a, 0xd1, 0xe0, 0x94, 0x71, 0x90, 0x17, 0x24, 0xee, 0x86, 0xa6, 0xa0, 0x48, - 0x04, 0x9a, 0xde, 0x35, 0x0f, 0x99, 0xc5, 0x92, 0x7d, 0xae, 0x59, 0x04, 0x25, 0xc2, 0xd3, 0x5f, - 0x11, 0x54, 0x70, 0x0a, 0x11, 0x2d, 0xf1, 0x76, 0x67, 0xf1, 0xfa, 0x9a, 0xf5, 0x08, 0xe3, 0x5a, - 0x69, 0x39, 0x4d, 0x72, 0xbf, 0x58, 0x68, 0xe5, 0x30, 0x8b, 0xa4, 0x95, 0xba, 0xb7, 0xdf, 0xa2, - 0x9a, 0xb1, 0xd2, 0xa1, 0x9a, 0xd6, 0xad, 0x0d, 0x6b, 0x73, 0x79, 0xe7, 0x31, 0x2e, 0xf2, 0x1b, - 0x2b, 0xe3, 0xb8, 0x1b, 0x9a, 0x82, 0xc2, 0x06, 0x8d, 0x07, 0x4d, 0x7c, 0xd4, 0x3e, 0x83, 0x40, - 0x1f, 0x80, 0xa6, 0x9e, 0x7d, 0x39, 0x6c, 0x54, 0x92, 0x61, 0x03, 0x15, 0x35, 0x7f, 0xac, 0x6a, - 0x1f, 0xa0, 0x05, 0x15, 0x43, 0x50, 0xaf, 0xa6, 0xea, 0x5b, 0x78, 0xd6, 0x76, 0xe0, 0x5b, 0x83, - 0x1d, 0xc7, 0x10, 0x78, 0xff, 0xe4, 0xc2, 0x0b, 0xe6, 0xe5, 0xa7, 0x32, 0xee, 0x27, 0x0b, 0xd5, - 0x6f, 0x21, 0xf7, 0x78, 0x28, 0x41, 0x29, 0xbf, 0xdf, 0x03, 0xbb, 0x85, 0x16, 0x63, 0x21, 0xb5, - 0xaa, 0x5b, 0x1b, 0x7f, 0xdd, 0xa3, 0x59, 0x4b, 0x48, 0xed, 0xad, 0xe4, 0xcd, 0x16, 0xcd, 0x4b, - 0xf9, 0x99, 0x90, 0x99, 0xfe, 0x44, 0x8a, 0xa8, 0x5e, 0xbd, 0x9f, 0x20, 0x80, 0x2c, 0xa6, 0x7f, - 0x21, 0x45, 0xe4, 0xa7, 0x32, 0xee, 0x67, 0x0b, 0xad, 0xdd, 0x42, 0xee, 0x33, 0xa5, 0xed, 0xd7, - 0xa5, 0x10, 0xf0, 0x7c, 0x21, 0x18, 0x76, 0x1a, 0xc1, 0xbf, 0x79, 0xaf, 0xda, 0xa8, 0x32, 0x11, - 0xc0, 0x3e, 0x5a, 0x64, 0x1a, 0x22, 0x95, 0x7b, 0x78, 0x38, 0xa7, 0x87, 0xe2, 0x1f, 0xb2, 0x67, - 0xd8, 0x7e, 0x26, 0xe2, 0x7e, 0x9f, 0x76, 0x60, 0xbc, 0xda, 0x27, 0x68, 0x39, 0x16, 0x9d, 0x63, - 0xe8, 0x41, 0xa0, 0x85, 0xcc, 0x4d, 0xec, 0xce, 0x69, 0x82, 0xb6, 0xa1, 0x37, 0xa2, 0x7a, 0xab, - 0xc9, 0xb0, 0xb1, 0xdc, 0x2a, 0xb4, 0xfc, 0x49, 0x61, 0xfb, 0x1c, 0xad, 0x71, 0x1a, 0x81, 0x8a, - 0x69, 0x00, 0xe3, 0x6e, 0xd5, 0xdf, 0xef, 0xf6, 0x7f, 0x32, 0x6c, 0xac, 0x1d, 0x4e, 0x2b, 0xfa, - 0xe5, 0x26, 0xee, 0xc7, 0x92, 0x6f, 0x21, 0xb5, 0xfd, 0x12, 0xd5, 0xd2, 0xcb, 0x0a, 0x44, 0x2f, - 0x35, 0xfd, 0xb7, 0xb7, 0x65, 0x52, 0x68, 0xe5, 0xb5, 0x1f, 0xc3, 0xc6, 0x83, 0xf2, 0x8f, 0x18, - 0x1e, 0x7d, 0xf6, 0xc7, 0x64, 0xfb, 0x10, 0x2d, 0x98, 0x85, 0xcb, 0xbd, 0xcc, 0xbe, 0x41, 0x73, - 0xdd, 0x38, 0xbb, 0x6e, 0xbc, 0xc7, 0xf5, 0x91, 0x3c, 0xd6, 0x92, 0xf1, 0xd0, 0xab, 0x99, 0x45, - 0x33, 0x23, 0xf9, 0xa9, 0x8e, 0x3b, 0x9c, 0x1e, 0xd7, 0x9c, 0x90, 0x7d, 0xf6, 0xc7, 0x62, 0xfa, - 0x2f, 0x5f, 0x8e, 0xd9, 0x51, 0xbd, 0x41, 0x4b, 0x2c, 0x3b, 0xcd, 0x7c, 0xf1, 0x76, 0xe6, 0x5c, - 0xbc, 0x89, 0x83, 0xf6, 0x56, 0xf3, 0x36, 0x4b, 0xa3, 0xe2, 0x48, 0xd3, 0xdb, 0xbc, 0xbc, 0x71, - 0x2a, 0x57, 0x37, 0x4e, 0xe5, 0xfa, 0xc6, 0xa9, 0xbc, 0x4f, 0x1c, 0xeb, 0x32, 0x71, 0xac, 0xab, - 0xc4, 0xb1, 0xae, 0x13, 0xc7, 0xfa, 0x9a, 0x38, 0xd6, 0x87, 0x6f, 0x4e, 0xe5, 0x55, 0x75, 0xd0, - 0xfc, 0x19, 0x00, 0x00, 0xff, 0xff, 0x75, 0x6b, 0xae, 0xb3, 0xd3, 0x06, 0x00, 0x00, + // 745 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x54, 0xcd, 0x4e, 0xdb, 0x4a, + 0x14, 0x8e, 0x43, 0x20, 0x61, 0x72, 0x11, 0x17, 0x5f, 0x5d, 0x29, 0xa2, 0x92, 0x93, 0x7a, 0x53, + 0x2a, 0xc4, 0xb8, 0x81, 0xaa, 0xea, 0xb6, 0xee, 0x6f, 0x24, 0x7e, 0x22, 0xb3, 0xab, 0x5a, 0xa9, + 0x8e, 0x73, 0x30, 0x43, 0x62, 0x8f, 0x35, 0x33, 0x49, 0x61, 0xd7, 0x47, 0xe8, 0x83, 0xf4, 0x0d, + 0xba, 0xa0, 0x4b, 0x96, 0x2c, 0x59, 0x59, 0xc5, 0x7d, 0x8b, 0xae, 0xaa, 0x99, 0x38, 0x71, 0x48, + 0x88, 0x1a, 0xaa, 0xee, 0x66, 0xce, 0x9c, 0xef, 0xfb, 0xce, 0xef, 0xa0, 0x67, 0x9d, 0xa7, 0x1c, + 0x13, 0x6a, 0x75, 0x7a, 0x2d, 0x60, 0x21, 0x08, 0xe0, 0x56, 0x1f, 0xc2, 0x36, 0x65, 0x56, 0xfa, + 0xe0, 0x46, 0xc4, 0x0a, 0x41, 0x7c, 0xa4, 0xac, 0x43, 0x42, 0xdf, 0xea, 0xd7, 0x2d, 0x1f, 0x42, + 0x60, 0xae, 0x80, 0x36, 0x8e, 0x18, 0x15, 0x54, 0xaf, 0x0c, 0x3c, 0xb1, 0x1b, 0x11, 0x9c, 0x79, + 0xe2, 0x7e, 0x7d, 0x7d, 0xcb, 0x27, 0xe2, 0xb8, 0xd7, 0xc2, 0x1e, 0x0d, 0x2c, 0x9f, 0xfa, 0xd4, + 0x52, 0x80, 0x56, 0xef, 0x48, 0xdd, 0xd4, 0x45, 0x9d, 0x06, 0x44, 0xeb, 0xe6, 0x98, 0xa4, 0x47, + 0x19, 0xdc, 0x22, 0xb6, 0xbe, 0x35, 0xe6, 0x03, 0xa7, 0x02, 0x42, 0x4e, 0x68, 0xc8, 0xad, 0x7e, + 0xbd, 0x05, 0xc2, 0x9d, 0x76, 0x7f, 0x38, 0xe6, 0x1e, 0xd1, 0x2e, 0xf1, 0xce, 0x66, 0xba, 0x3e, + 0xce, 0x5c, 0x03, 0xd7, 0x3b, 0x26, 0x21, 0xb0, 0x33, 0x2b, 0xea, 0xf8, 0xd2, 0xc0, 0xad, 0x00, + 0x84, 0x7b, 0x5b, 0x3c, 0xd6, 0x2c, 0x14, 0xeb, 0x85, 0x82, 0x04, 0x30, 0x05, 0x78, 0xf2, 0x3b, + 0x00, 0xf7, 0x8e, 0x21, 0x70, 0xa7, 0x70, 0x3b, 0xb3, 0x70, 0x3d, 0x41, 0xba, 0x16, 0x09, 0x05, + 0x17, 0x6c, 0x12, 0x64, 0x1e, 0xa0, 0x62, 0xa3, 0x69, 0x77, 0xa9, 0xd7, 0xd1, 0x6b, 0xa8, 0xe0, + 0x91, 0x36, 0xab, 0x68, 0x35, 0x6d, 0x63, 0xd9, 0xfe, 0xe7, 0x22, 0xae, 0xe6, 0x92, 0xb8, 0x5a, + 0x78, 0xde, 0x78, 0xe1, 0x38, 0xea, 0x45, 0x37, 0xd1, 0x12, 0x9c, 0x7a, 0x10, 0x89, 0x4a, 0xbe, + 0xb6, 0xb0, 0xb1, 0x6c, 0xa3, 0x24, 0xae, 0x2e, 0xbd, 0x54, 0x16, 0x27, 0x7d, 0x31, 0xbf, 0x69, + 0x68, 0x65, 0x7f, 0xd0, 0xe3, 0xa6, 0x2a, 0xa7, 0xfe, 0x01, 0x95, 0x64, 0x6d, 0xda, 0xae, 0x70, + 0x15, 0x77, 0x79, 0xfb, 0x11, 0xce, 0x06, 0x62, 0x14, 0x2a, 0x8e, 0x3a, 0xbe, 0x34, 0x70, 0x2c, + 0xbd, 0x71, 0xbf, 0x8e, 0x0f, 0x5a, 0x27, 0xe0, 0x89, 0x3d, 0x10, 0xae, 0xad, 0xa7, 0xd1, 0xa0, + 0xcc, 0xe6, 0x8c, 0x58, 0xf5, 0x3d, 0x54, 0xe0, 0x11, 0x78, 0x95, 0xbc, 0x62, 0xdf, 0xc4, 0xb3, + 0xc6, 0x0d, 0xdf, 0x08, 0xec, 0x30, 0x02, 0x2f, 0x4b, 0x53, 0xde, 0x1c, 0x45, 0x63, 0x7e, 0xd5, + 0x50, 0xe5, 0x86, 0x67, 0x23, 0xf4, 0x19, 0x70, 0xee, 0xf4, 0xba, 0xa0, 0x37, 0xd1, 0x62, 0x44, + 0x99, 0xe0, 0x15, 0xad, 0xb6, 0x70, 0x07, 0xb1, 0x26, 0x65, 0xc2, 0x5e, 0x49, 0xc5, 0x16, 0xe5, + 0x8d, 0x3b, 0x03, 0x22, 0x19, 0xfd, 0x11, 0xa3, 0x81, 0xaa, 0xe9, 0x1d, 0x08, 0x01, 0x58, 0x16, + 0xfd, 0x2b, 0x46, 0x03, 0x47, 0xd1, 0x98, 0xe7, 0x1a, 0x5a, 0xbb, 0xe1, 0xb9, 0x4b, 0xb8, 0xd0, + 0xdf, 0x4d, 0x35, 0x01, 0xcf, 0xd7, 0x04, 0x89, 0x56, 0x2d, 0xf8, 0x37, 0xd5, 0x2a, 0x0d, 0x2d, + 0x63, 0x0d, 0xd8, 0x45, 0x8b, 0x44, 0x40, 0xc0, 0xd3, 0x1c, 0x1e, 0xcc, 0x99, 0x43, 0x56, 0x90, + 0x86, 0x44, 0x3b, 0x03, 0x12, 0xf3, 0x3c, 0x3f, 0x91, 0x81, 0xcc, 0x55, 0x3f, 0x42, 0xe5, 0x88, + 0xb6, 0x0f, 0xa1, 0x0b, 0x9e, 0xa0, 0x2c, 0x4d, 0x62, 0x67, 0xce, 0x24, 0xdc, 0x16, 0x74, 0x87, + 0x50, 0x7b, 0x35, 0x89, 0xab, 0xe5, 0x66, 0xc6, 0xe5, 0x8c, 0x13, 0xeb, 0xa7, 0x68, 0x2d, 0x74, + 0x03, 0xe0, 0x91, 0xeb, 0xc1, 0x48, 0x2d, 0xff, 0xe7, 0x6a, 0xff, 0x27, 0x71, 0x75, 0x6d, 0x7f, + 0x92, 0xd1, 0x99, 0x16, 0xd1, 0xdf, 0xa0, 0x22, 0x89, 0xd4, 0x2e, 0x56, 0x16, 0x94, 0xde, 0xfd, + 0xd9, 0x75, 0x4c, 0x97, 0xd6, 0x2e, 0x27, 0x71, 0x75, 0xb8, 0xc1, 0xce, 0x10, 0x6e, 0x7e, 0x99, + 0x9c, 0x01, 0x39, 0x70, 0xfa, 0x6b, 0x54, 0x52, 0x4b, 0xef, 0xd1, 0x6e, 0xba, 0xe4, 0x9b, 0xb2, + 0x9f, 0xcd, 0xd4, 0xf6, 0x33, 0xae, 0xde, 0x9b, 0xfe, 0x5f, 0xf1, 0xf0, 0xd9, 0x19, 0x81, 0xf5, + 0x7d, 0x54, 0x90, 0xa3, 0x9b, 0x56, 0x65, 0xf6, 0x36, 0xcb, 0x8f, 0x07, 0x0f, 0x3e, 0x1e, 0xdc, + 0x08, 0xc5, 0x01, 0x3b, 0x14, 0x8c, 0x84, 0xbe, 0x5d, 0x92, 0x23, 0x2b, 0x43, 0x72, 0x14, 0x8f, + 0x19, 0x4f, 0x86, 0x2b, 0x97, 0x51, 0x3f, 0xf9, 0x6b, 0x0d, 0xff, 0x2f, 0x1d, 0xb3, 0xd9, 0x4d, + 0x7f, 0x8f, 0x8a, 0x64, 0xb0, 0xe4, 0xe9, 0x08, 0x6f, 0xcf, 0x39, 0xc2, 0x63, 0x5f, 0x83, 0xbd, + 0x9a, 0xca, 0x14, 0x87, 0xc6, 0x21, 0xa7, 0xbd, 0x71, 0x71, 0x6d, 0xe4, 0x2e, 0xaf, 0x8d, 0xdc, + 0xd5, 0xb5, 0x91, 0xfb, 0x94, 0x18, 0xda, 0x45, 0x62, 0x68, 0x97, 0x89, 0xa1, 0x5d, 0x25, 0x86, + 0xf6, 0x3d, 0x31, 0xb4, 0xcf, 0x3f, 0x8c, 0xdc, 0xdb, 0x7c, 0xbf, 0xfe, 0x2b, 0x00, 0x00, 0xff, + 0xff, 0x3b, 0x3f, 0x8c, 0x26, 0x6e, 0x07, 0x00, 0x00, } diff --git a/staging/src/k8s.io/api/networking/v1/generated.proto b/staging/src/k8s.io/api/networking/v1/generated.proto index 0c0e5bc6af1..2dee2c9f78b 100644 --- a/staging/src/k8s.io/api/networking/v1/generated.proto +++ b/staging/src/k8s.io/api/networking/v1/generated.proto @@ -32,6 +32,21 @@ import "k8s.io/apimachinery/pkg/util/intstr/generated.proto"; // Package-wide variables from generator "generated". option go_package = "v1"; +// IPBlock describes a particular CIDR (Ex. "192.168.1.1/24") that is allowed to the pods +// matched by a NetworkPolicySpec's podSelector. The except entry describes CIDRs that should +// not be included within this rule. +message IPBlock { + // CIDR is a string representing the IP Block + // Valid examples are "192.168.1.1/24" + optional string cidr = 1; + + // Except is a slice of CIDRs that should not be included within an IP Block + // Valid examples are "192.168.1.1/24" + // Except values will be rejected if they are outside the CIDR range + // +optional + repeated string except = 2; +} + // NetworkPolicy describes what network traffic is allowed for a set of Pods message NetworkPolicy { // Standard object's metadata. @@ -89,6 +104,10 @@ message NetworkPolicyPeer { // selector semantics. If present but empty, this selector selects all namespaces. // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.LabelSelector namespaceSelector = 2; + + // IPBlock defines policy on a particular IPBlock + // +optional + optional IPBlock ipBlock = 3; } // NetworkPolicyPort describes a port to allow traffic on diff --git a/staging/src/k8s.io/api/networking/v1/types.generated.go b/staging/src/k8s.io/api/networking/v1/types.generated.go index 6b89e36d7da..d81d40a22f7 100644 --- a/staging/src/k8s.io/api/networking/v1/types.generated.go +++ b/staging/src/k8s.io/api/networking/v1/types.generated.go @@ -1196,7 +1196,7 @@ func (x *NetworkPolicyPort) codecDecodeSelfFromArray(l int, d *codec1978.Decoder z.DecSendContainerState(codecSelfer_containerArrayEnd1234) } -func (x *NetworkPolicyPeer) CodecEncodeSelf(e *codec1978.Encoder) { +func (x *IPBlock) CodecEncodeSelf(e *codec1978.Encoder) { var h codecSelfer1234 z, r := codec1978.GenHelperEncoder(e) _, _, _ = h, z, r @@ -1213,11 +1213,254 @@ func (x *NetworkPolicyPeer) CodecEncodeSelf(e *codec1978.Encoder) { var yyq2 [2]bool _, _, _ = yysep2, yyq2, yy2arr2 const yyr2 bool = false - yyq2[0] = x.PodSelector != nil - yyq2[1] = x.NamespaceSelector != nil + yyq2[1] = len(x.Except) != 0 var yynn2 int if yyr2 || yy2arr2 { r.EncodeArrayStart(2) + } else { + yynn2 = 1 + for _, b := range yyq2 { + if b { + yynn2++ + } + } + r.EncodeMapStart(yynn2) + yynn2 = 0 + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym4 := z.EncBinary() + _ = yym4 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.CIDR)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("cidr")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym5 := z.EncBinary() + _ = yym5 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.CIDR)) + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2[1] { + if x.Except == nil { + r.EncodeNil() + } else { + yym7 := z.EncBinary() + _ = yym7 + if false { + } else { + z.F.EncSliceStringV(x.Except, false, e) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq2[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("except")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Except == nil { + r.EncodeNil() + } else { + yym8 := z.EncBinary() + _ = yym8 + if false { + } else { + z.F.EncSliceStringV(x.Except, false, e) + } + } + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *IPBlock) 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 *IPBlock) 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 "cidr": + if r.TryDecodeAsNil() { + x.CIDR = "" + } else { + yyv4 := &x.CIDR + yym5 := z.DecBinary() + _ = yym5 + if false { + } else { + *((*string)(yyv4)) = r.DecodeString() + } + } + case "except": + if r.TryDecodeAsNil() { + x.Except = nil + } else { + yyv6 := &x.Except + yym7 := z.DecBinary() + _ = yym7 + if false { + } else { + z.F.DecSliceStringX(yyv6, false, d) + } + } + default: + z.DecStructFieldNotFound(-1, yys3) + } // end switch yys3 + } // end for yyj3 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *IPBlock) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj8 int + var yyb8 bool + var yyhl8 bool = l >= 0 + yyj8++ + if yyhl8 { + yyb8 = yyj8 > l + } else { + yyb8 = r.CheckBreak() + } + if yyb8 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.CIDR = "" + } else { + yyv9 := &x.CIDR + yym10 := z.DecBinary() + _ = yym10 + if false { + } else { + *((*string)(yyv9)) = r.DecodeString() + } + } + yyj8++ + if yyhl8 { + yyb8 = yyj8 > l + } else { + yyb8 = r.CheckBreak() + } + if yyb8 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Except = nil + } else { + yyv11 := &x.Except + yym12 := z.DecBinary() + _ = yym12 + if false { + } else { + z.F.DecSliceStringX(yyv11, false, d) + } + } + for { + yyj8++ + if yyhl8 { + yyb8 = yyj8 > l + } else { + yyb8 = r.CheckBreak() + } + if yyb8 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj8-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *NetworkPolicyPeer) 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 [3]bool + _, _, _ = yysep2, yyq2, yy2arr2 + const yyr2 bool = false + yyq2[0] = x.PodSelector != nil + yyq2[1] = x.NamespaceSelector != nil + yyq2[2] = x.IPBlock != nil + var yynn2 int + if yyr2 || yy2arr2 { + r.EncodeArrayStart(3) } else { yynn2 = 0 for _, b := range yyq2 { @@ -1298,6 +1541,29 @@ func (x *NetworkPolicyPeer) CodecEncodeSelf(e *codec1978.Encoder) { } } } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2[2] { + if x.IPBlock == nil { + r.EncodeNil() + } else { + x.IPBlock.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq2[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("ipBlock")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.IPBlock == nil { + r.EncodeNil() + } else { + x.IPBlock.CodecEncodeSelf(e) + } + } + } if yyr2 || yy2arr2 { z.EncSendContainerState(codecSelfer_containerArrayEnd1234) } else { @@ -1393,6 +1659,17 @@ func (x *NetworkPolicyPeer) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) z.DecFallback(x.NamespaceSelector, false) } } + case "ipBlock": + if r.TryDecodeAsNil() { + if x.IPBlock != nil { + x.IPBlock = nil + } + } else { + if x.IPBlock == nil { + x.IPBlock = new(IPBlock) + } + x.IPBlock.CodecDecodeSelf(d) + } default: z.DecStructFieldNotFound(-1, yys3) } // end switch yys3 @@ -1404,16 +1681,16 @@ func (x *NetworkPolicyPeer) codecDecodeSelfFromArray(l int, d *codec1978.Decoder var h codecSelfer1234 z, r := codec1978.GenHelperDecoder(d) _, _, _ = h, z, r - var yyj8 int - var yyb8 bool - var yyhl8 bool = l >= 0 - yyj8++ - if yyhl8 { - yyb8 = yyj8 > l + var yyj9 int + var yyb9 bool + var yyhl9 bool = l >= 0 + yyj9++ + if yyhl9 { + yyb9 = yyj9 > l } else { - yyb8 = r.CheckBreak() + yyb9 = r.CheckBreak() } - if yyb8 { + if yyb9 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -1426,21 +1703,21 @@ func (x *NetworkPolicyPeer) codecDecodeSelfFromArray(l int, d *codec1978.Decoder if x.PodSelector == nil { x.PodSelector = new(pkg1_v1.LabelSelector) } - yym10 := z.DecBinary() - _ = yym10 + yym11 := z.DecBinary() + _ = yym11 if false { } else if z.HasExtensions() && z.DecExt(x.PodSelector) { } else { z.DecFallback(x.PodSelector, false) } } - yyj8++ - if yyhl8 { - yyb8 = yyj8 > l + yyj9++ + if yyhl9 { + yyb9 = yyj9 > l } else { - yyb8 = r.CheckBreak() + yyb9 = r.CheckBreak() } - if yyb8 { + if yyb9 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -1453,26 +1730,47 @@ func (x *NetworkPolicyPeer) codecDecodeSelfFromArray(l int, d *codec1978.Decoder if x.NamespaceSelector == nil { x.NamespaceSelector = new(pkg1_v1.LabelSelector) } - yym12 := z.DecBinary() - _ = yym12 + yym13 := z.DecBinary() + _ = yym13 if false { } else if z.HasExtensions() && z.DecExt(x.NamespaceSelector) { } else { z.DecFallback(x.NamespaceSelector, false) } } - for { - yyj8++ - if yyhl8 { - yyb8 = yyj8 > l - } else { - yyb8 = r.CheckBreak() + yyj9++ + if yyhl9 { + yyb9 = yyj9 > l + } else { + yyb9 = r.CheckBreak() + } + if yyb9 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.IPBlock != nil { + x.IPBlock = nil } - if yyb8 { + } else { + if x.IPBlock == nil { + x.IPBlock = new(IPBlock) + } + x.IPBlock.CodecDecodeSelf(d) + } + for { + yyj9++ + if yyhl9 { + yyb9 = yyj9 > l + } else { + yyb9 = r.CheckBreak() + } + if yyb9 { break } z.DecSendContainerState(codecSelfer_containerArrayElem1234) - z.DecStructFieldNotFound(yyj8-1, "") + z.DecStructFieldNotFound(yyj9-1, "") } z.DecSendContainerState(codecSelfer_containerArrayEnd1234) } @@ -2122,7 +2420,7 @@ func (x codecSelfer1234) decSliceNetworkPolicyPeer(v *[]NetworkPolicyPeer, d *co yyrg1 := len(yyv1) > 0 yyv21 := yyv1 - yyrl1, yyrt1 = z.DecInferLen(yyl1, z.DecBasicHandle().MaxInitLen, 16) + yyrl1, yyrt1 = z.DecInferLen(yyl1, z.DecBasicHandle().MaxInitLen, 24) if yyrt1 { if yyrl1 <= cap(yyv1) { yyv1 = yyv1[:yyrl1] diff --git a/staging/src/k8s.io/api/networking/v1/types.go b/staging/src/k8s.io/api/networking/v1/types.go index 1a6ea7b96a6..a0c7721b2d6 100644 --- a/staging/src/k8s.io/api/networking/v1/types.go +++ b/staging/src/k8s.io/api/networking/v1/types.go @@ -92,6 +92,20 @@ type NetworkPolicyPort struct { Port *intstr.IntOrString `json:"port,omitempty" protobuf:"bytes,2,opt,name=port"` } +// IPBlock describes a particular CIDR (Ex. "192.168.1.1/24") that is allowed to the pods +// matched by a NetworkPolicySpec's podSelector. The except entry describes CIDRs that should +// not be included within this rule. +type IPBlock struct { + // CIDR is a string representing the IP Block + // Valid examples are "192.168.1.1/24" + CIDR string `json:"cidr" protobuf:"bytes,1,name=cidr"` + // Except is a slice of CIDRs that should not be included within an IP Block + // Valid examples are "192.168.1.1/24" + // Except values will be rejected if they are outside the CIDR range + // +optional + Except []string `json:"except,omitempty" protobuf:"bytes,2,rep,name=except"` +} + // NetworkPolicyPeer describes a peer to allow traffic from. Exactly one of its fields // must be specified. type NetworkPolicyPeer struct { @@ -106,6 +120,10 @@ type NetworkPolicyPeer struct { // selector semantics. If present but empty, this selector selects all namespaces. // +optional NamespaceSelector *metav1.LabelSelector `json:"namespaceSelector,omitempty" protobuf:"bytes,2,opt,name=namespaceSelector"` + + // IPBlock defines policy on a particular IPBlock + // +optional + IPBlock *IPBlock `json:"ipBlock,omitempty" protobuf:"bytes,3,rep,name=ipBlock"` } // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object diff --git a/staging/src/k8s.io/api/networking/v1/types_swagger_doc_generated.go b/staging/src/k8s.io/api/networking/v1/types_swagger_doc_generated.go index c3c9116313f..87170082d6d 100644 --- a/staging/src/k8s.io/api/networking/v1/types_swagger_doc_generated.go +++ b/staging/src/k8s.io/api/networking/v1/types_swagger_doc_generated.go @@ -27,6 +27,16 @@ package v1 // Those methods can be generated by using hack/update-generated-swagger-docs.sh // AUTO-GENERATED FUNCTIONS START HERE +var map_IPBlock = map[string]string{ + "": "IPBlock describes a particular CIDR (Ex. \"192.168.1.1/24\") that is allowed to the pods matched by a NetworkPolicySpec's podSelector. The except entry describes CIDRs that should not be included within this rule.", + "cidr": "CIDR is a string representing the IP Block Valid examples are \"192.168.1.1/24\"", + "except": "Except is a slice of CIDRs that should not be included within an IP Block Valid examples are \"192.168.1.1/24\" Except values will be rejected if they are outside the CIDR range", +} + +func (IPBlock) SwaggerDoc() map[string]string { + return map_IPBlock +} + var map_NetworkPolicy = map[string]string{ "": "NetworkPolicy describes what network traffic is allowed for a set of Pods", "metadata": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", @@ -61,6 +71,7 @@ var map_NetworkPolicyPeer = map[string]string{ "": "NetworkPolicyPeer describes a peer to allow traffic from. Exactly one of its fields must be specified.", "podSelector": "This is a label selector which selects Pods in this namespace. This field follows standard label selector semantics. If present but empty, this selector selects all pods in this namespace.", "namespaceSelector": "Selects Namespaces using cluster scoped-labels. This matches all pods in all namespaces selected by this label selector. This field follows standard label selector semantics. If present but empty, this selector selects all namespaces.", + "ipBlock": "IPBlock defines policy on a particular IPBlock", } func (NetworkPolicyPeer) SwaggerDoc() map[string]string { diff --git a/staging/src/k8s.io/api/networking/v1/zz_generated.deepcopy.go b/staging/src/k8s.io/api/networking/v1/zz_generated.deepcopy.go index f6a0a5f809e..94948b14168 100644 --- a/staging/src/k8s.io/api/networking/v1/zz_generated.deepcopy.go +++ b/staging/src/k8s.io/api/networking/v1/zz_generated.deepcopy.go @@ -39,6 +39,10 @@ func init() { // Deprecated: deepcopy registration will go away when static deepcopy is fully implemented. func RegisterDeepCopies(scheme *runtime.Scheme) error { return scheme.AddGeneratedDeepCopyFuncs( + conversion.GeneratedDeepCopyFunc{Fn: func(in interface{}, out interface{}, c *conversion.Cloner) error { + in.(*IPBlock).DeepCopyInto(out.(*IPBlock)) + return nil + }, InType: reflect.TypeOf(&IPBlock{})}, conversion.GeneratedDeepCopyFunc{Fn: func(in interface{}, out interface{}, c *conversion.Cloner) error { in.(*NetworkPolicy).DeepCopyInto(out.(*NetworkPolicy)) return nil @@ -66,6 +70,27 @@ func RegisterDeepCopies(scheme *runtime.Scheme) error { ) } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *IPBlock) DeepCopyInto(out *IPBlock) { + *out = *in + if in.Except != nil { + in, out := &in.Except, &out.Except + *out = make([]string, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IPBlock. +func (in *IPBlock) DeepCopy() *IPBlock { + if in == nil { + return nil + } + out := new(IPBlock) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *NetworkPolicy) DeepCopyInto(out *NetworkPolicy) { *out = *in @@ -179,6 +204,15 @@ func (in *NetworkPolicyPeer) DeepCopyInto(out *NetworkPolicyPeer) { (*in).DeepCopyInto(*out) } } + if in.IPBlock != nil { + in, out := &in.IPBlock, &out.IPBlock + if *in == nil { + *out = nil + } else { + *out = new(IPBlock) + (*in).DeepCopyInto(*out) + } + } return }